diff --git a/app/build.gradle b/app/build.gradle
index 45326db..990e471 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -19,7 +19,7 @@ android {
}
dependencies {
- implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
testImplementation 'junit:junit:4.12'
@@ -27,4 +27,6 @@ dependencies {
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:cardview-v7:27.1.1'
+ implementation 'com.android.support:recyclerview-v7:27.1.1'
+ implementation 'com.github.chenupt.android:springindicator:1.0.2@aar'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a68942c..ef1da85 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,6 +2,9 @@
+
+
+
-
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/AsyncTaskActivity.java b/app/src/main/java/com/example/tanphirum/uikitapplication/AsyncTaskActivity.java
new file mode 100644
index 0000000..e36caed
--- /dev/null
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/AsyncTaskActivity.java
@@ -0,0 +1,105 @@
+package com.example.tanphirum.uikitapplication;
+
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TextView;
+
+public class AsyncTaskActivity extends AppCompatActivity {
+
+ private static final String EXT_TEXT = "ext_text";
+ private TextView mTxtLabel;
+ private Button mBtnStartTask;
+ private View mViewProgress;
+
+ private StaticAsyncTask mTask;
+
+ private static final String TAG = AsyncTaskActivity.class.getSimpleName();
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_async_task);
+
+ mViewProgress = findViewById(R.id.view_progress);
+ mTxtLabel = findViewById(R.id.txt_label);
+ mBtnStartTask = findViewById(R.id.btn_start_task);
+
+ mTask = new StaticAsyncTask(mViewProgress);
+
+ mBtnStartTask.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mTask.execute("query...");
+ }
+ });
+
+ if (savedInstanceState != null) {
+ mTxtLabel.setText(savedInstanceState.getString(EXT_TEXT));
+ }
+
+ //sleepThread();
+ }
+
+ private void sleepThread() {
+ /*Random r = new Random();
+ int n = r.nextInt(11);*/
+ int s = 60000;
+
+ try {
+ Thread.sleep(s);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private class StaticAsyncTask extends AsyncTask {
+
+ private View mLocalProgress;
+
+ public StaticAsyncTask(View viewProgress) {
+ super();
+ this.mLocalProgress = viewProgress;
+ }
+
+ @Override
+ protected void onPreExecute() {
+ mLocalProgress.setVisibility(View.VISIBLE);
+ super.onPreExecute();
+ }
+
+ @Override
+ protected String doInBackground(String... strings) {
+ try {
+ Thread.sleep(600);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ return "Hello asynctask " + strings[0];
+ }
+
+ @Override
+ protected void onPostExecute(String s) {
+ super.onPostExecute(s);
+ mLocalProgress.setVisibility(View.GONE);
+ mTxtLabel.setText(s);
+ Log.d(TAG, "handle string from doInBackgroun = " + s);
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ mTask.cancel(true);
+ Log.d(TAG, "onDestroy called");
+ super.onDestroy();
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putString(EXT_TEXT, mTxtLabel.getText().toString());
+ }
+}
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/AsyncTaskLoaderActivity.java b/app/src/main/java/com/example/tanphirum/uikitapplication/AsyncTaskLoaderActivity.java
new file mode 100644
index 0000000..8a6e079
--- /dev/null
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/AsyncTaskLoaderActivity.java
@@ -0,0 +1,93 @@
+package com.example.tanphirum.uikitapplication;
+
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.design.widget.TextInputEditText;
+import android.support.design.widget.TextInputLayout;
+import android.support.v4.app.LoaderManager;
+import android.support.v4.content.Loader;
+import android.support.v7.app.AppCompatActivity;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.Toast;
+
+import com.example.tanphirum.uikitapplication.task.AsyncTaskLoader;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public class AsyncTaskLoaderActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks{
+
+ private static final String TAG = AsyncTaskLoaderActivity.class.getSimpleName();
+
+ private TextInputLayout mTxtInput;
+ private TextInputEditText mEdtUsername;
+ private Button mBtnGetData;
+
+ private View mViewProgress;
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_async_task_loader);
+
+ mTxtInput = findViewById(R.id.txt_input_username);
+ mEdtUsername = findViewById(R.id.edt_username);
+ mBtnGetData = findViewById(R.id.btn_get_data);
+
+ mViewProgress = findViewById(R.id.view_progress);
+
+ if (getSupportLoaderManager().getLoader(0) != null)
+ getSupportLoaderManager().initLoader(0, null, this);
+
+ mBtnGetData.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
+ NetworkInfo networkInfo = null;
+ if (connectivityManager != null) {
+ networkInfo = connectivityManager.getActiveNetworkInfo();
+ }
+
+ if (networkInfo != null && networkInfo.isConnected()) {
+ getSupportLoaderManager().restartLoader(0, null, AsyncTaskLoaderActivity.this);
+ } else
+ Toast.makeText(v.getContext(), "No internet connection!!!", Toast.LENGTH_SHORT).show();
+
+ }
+ });
+ }
+
+ @NonNull
+ @Override
+ public Loader onCreateLoader(int id, @Nullable Bundle args) {
+ mViewProgress.setVisibility(View.VISIBLE);
+ return new AsyncTaskLoader(this);
+ }
+
+ @Override
+ public void onLoadFinished(@NonNull Loader loader, String data) {
+ mViewProgress.setVisibility(View.GONE);
+ Log.d(TAG, "data return =" + data);
+ try {
+ JSONObject jsonObject = new JSONObject(data);
+ if (jsonObject.optBoolean("status")) {
+ JSONObject objResponse = jsonObject.optJSONObject("response");
+ mEdtUsername.setText(objResponse.optString("fullname"));
+ Log.d(TAG, "objResponse = " + objResponse);
+ }
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void onLoaderReset(@NonNull Loader loader) {
+
+ }
+}
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/BroadcastActivity.java b/app/src/main/java/com/example/tanphirum/uikitapplication/BroadcastActivity.java
new file mode 100644
index 0000000..94d6160
--- /dev/null
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/BroadcastActivity.java
@@ -0,0 +1,70 @@
+package com.example.tanphirum.uikitapplication;
+
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import android.support.v4.content.LocalBroadcastManager;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.widget.Button;
+import android.widget.CompoundButton;
+import android.widget.ToggleButton;
+
+public class BroadcastActivity extends AppCompatActivity {
+
+ private ToggleButton mTgbOnOff;
+ private Button mBtnSend;
+
+ private CustomReceiver mReceiver;
+
+ private ComponentName mReceiverConComponentName;
+ private PackageManager mPackageManager;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_broadcast);
+
+ mTgbOnOff = findViewById(R.id.tgb_on_off);
+ mBtnSend = findViewById(R.id.btn_send_broad);
+
+ mReceiver = new CustomReceiver();
+
+ mReceiverConComponentName = new ComponentName(this, CustomReceiver.class);
+ mPackageManager = getPackageManager();
+
+ LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, new IntentFilter(CustomReceiver.ACTION_CUSTOM_BROADCAST));
+ registerGlobalReceiver(true);
+
+ mBtnSend.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(CustomReceiver.ACTION_CUSTOM_BROADCAST);
+ LocalBroadcastManager.getInstance(v.getContext()).sendBroadcast(intent);
+ }
+ });
+
+ mTgbOnOff.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ registerGlobalReceiver(isChecked);
+ }
+ });
+ }
+
+ @Override
+ protected void onDestroy() {
+ LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver);
+ super.onDestroy();
+ }
+
+ private void registerGlobalReceiver(boolean isRegister) {
+ if (isRegister) {
+ mPackageManager.setComponentEnabledSetting(mReceiverConComponentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
+ } else {
+ mPackageManager.setComponentEnabledSetting(mReceiverConComponentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/CustomReceiver.java b/app/src/main/java/com/example/tanphirum/uikitapplication/CustomReceiver.java
new file mode 100644
index 0000000..4c32566
--- /dev/null
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/CustomReceiver.java
@@ -0,0 +1,34 @@
+package com.example.tanphirum.uikitapplication;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.widget.Toast;
+
+public class CustomReceiver extends BroadcastReceiver {
+
+ public static final String ACTION_CUSTOM_BROADCAST = BuildConfig.APPLICATION_ID + ".ACTION_CUSTOM_BROADCAST";
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String message = null;
+ String intentAction = intent.getAction();
+ if (intentAction == null) return;
+
+ switch (intentAction) {
+ case Intent.ACTION_POWER_CONNECTED:
+ message = context.getString(R.string.power_connected);
+ break;
+ case Intent.ACTION_POWER_DISCONNECTED:
+ message = context.getString(R.string.power_disconnected);
+ break;
+ case Intent.ACTION_BATTERY_CHANGED:
+ message = context.getString(R.string.power_changed);
+ break;
+ case ACTION_CUSTOM_BROADCAST:
+ message = context.getString(R.string.local_broadcast_call);
+ break;
+ }
+ Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
+ }
+}
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/RecyclerViewActivity.java b/app/src/main/java/com/example/tanphirum/uikitapplication/RecyclerViewActivity.java
new file mode 100644
index 0000000..5379ee4
--- /dev/null
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/RecyclerViewActivity.java
@@ -0,0 +1,91 @@
+package com.example.tanphirum.uikitapplication;
+
+import android.os.Bundle;
+import android.os.Handler;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
+import android.widget.Button;
+
+import com.example.tanphirum.uikitapplication.adapter.ListAdapter;
+import com.example.tanphirum.uikitapplication.callback.EndlessRecyclerViewScrollListener;
+
+import java.util.LinkedList;
+
+public class RecyclerViewActivity extends AppCompatActivity /*implements MyItemClickListener*/{
+
+ private static final String TAG = RecyclerViewActivity.class.getSimpleName();
+
+ private EndlessRecyclerViewScrollListener mListener;
+
+ private RecyclerView mRcv;
+ private ListAdapter adapter;
+ private LinearLayoutManager manager;
+ private LinkedList mListData;
+
+ private Button mBtnTest;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_recycler_view);
+
+ mListData = new LinkedList<>();
+
+ mBtnTest = findViewById(R.id.btn_test);
+
+ mRcv = findViewById(R.id.rcv);
+ //adapter = new ListAdapter(this, createList(20), this);
+ adapter = new ListAdapter(this, createList(20));
+ manager = new LinearLayoutManager(this);
+ //manager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
+ //manager = new GridLayoutManager(this, 3);
+ //manager = new GridLayoutManager(this, 4, LinearLayoutManager.HORIZONTAL, false);
+ //manager = new GridLayoutManager(this, 3, LinearLayoutManager.VERTICAL, false);
+ //StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
+ //StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.HORIZONTAL);
+ mRcv.setLayoutManager(manager);
+
+ adapter.setListener(new ListAdapter.MyItemClickListener() {
+ @Override
+ public void myItemClick(int pos, String item) {
+ mBtnTest.setText("new callback : Pos " + pos + " item " + item);
+ }
+ });
+
+ mListener = new EndlessRecyclerViewScrollListener(manager) {
+ @Override
+ public void onLoadMore(final int page, int totalItemsCount, RecyclerView view) {
+ mHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ int totalCurrentSize = adapter.getItemCount();
+ adapter.insertItem(createList(10));
+ adapter.notifyItemRangeChanged(totalCurrentSize, adapter.getItemCount());
+ Log.d(TAG, "Page " + page);
+ }
+ }, 500);
+
+ }
+ };
+
+ mRcv.addOnScrollListener(mListener);
+
+ mRcv.setAdapter(adapter);
+ }
+
+ private Handler mHandler = new Handler();
+
+ private LinkedList createList(int amount) {
+ for (int i=0; i < amount; i++) {
+ mListData.add("item " + i);
+ }
+ return mListData;
+ }
+
+ /*@Override
+ public void MyItemClick(int pos, String item) {
+ Log.d(TAG, "Pos " + pos + " item " + item);
+ ((Button)findViewById(R.id.btn_test)).setText("Pos " + pos + " item " + item);
+ }*/
+}
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/RegisterActivity.java b/app/src/main/java/com/example/tanphirum/uikitapplication/RegisterActivity.java
index 0a0f2aa..c1f15a7 100644
--- a/app/src/main/java/com/example/tanphirum/uikitapplication/RegisterActivity.java
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/RegisterActivity.java
@@ -1,29 +1,37 @@
package com.example.tanphirum.uikitapplication;
import android.content.DialogInterface;
+import android.os.Bundle;
import android.support.design.widget.TextInputEditText;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
-import android.os.Bundle;
+import android.telephony.PhoneNumberFormattingTextWatcher;
import android.text.TextUtils;
import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
import android.widget.Button;
+import android.widget.Spinner;
import android.widget.Toast;
+import com.example.tanphirum.uikitapplication.fragment.DatePickerFragment;
+import com.example.tanphirum.uikitapplication.fragment.TimePickerFragment;
+
public class RegisterActivity extends AppCompatActivity {
private TextInputLayout mTxtInputUsername, mTxtInputPass, mTxtInputConfPass;
- private TextInputEditText mEdtUsername, mEdtPass, mEdtConfPass;
- private Button mBtnRegister;
+ private TextInputEditText mEdtUsername, mEdtPass, mEdtConfPass, mEdtPhone;
+ private Button mBtnRegister, mBtnDob, mBtnTime;
private String pass, confPass;
+ private Spinner mSpPnone;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
- mTxtInputUsername = findViewById(R.id.txt_input_username);
+ this.mTxtInputUsername = findViewById(R.id.txt_input_username);
mTxtInputPass = findViewById(R.id.txt_input_pass);
mTxtInputConfPass = findViewById(R.id.txt_input_conf_pass);
@@ -33,6 +41,12 @@ protected void onCreate(Bundle savedInstanceState) {
mBtnRegister = findViewById(R.id.btn_register);
+ mEdtPhone = findViewById(R.id.edt_phone);
+ mSpPnone = findViewById(R.id.sp_phone);
+
+ mBtnDob = findViewById(R.id.btn_dob);
+ mBtnTime = findViewById(R.id.btn_time);
+
mBtnRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
@@ -68,5 +82,52 @@ public void onClick(DialogInterface dialog, int which) {
}
}
});
+
+ final ArrayAdapter phoneAdapter = ArrayAdapter.createFromResource(this, R.array.array_phone,
+ android.R.layout.simple_spinner_item);
+ phoneAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+
+ mSpPnone.setAdapter(phoneAdapter);
+
+ mSpPnone.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView> parent, View view, int position, long id) {
+ Toast.makeText(view.getContext(), "item click =" + phoneAdapter.getItem(position), Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> parent) {
+
+ }
+ });
+
+ mEdtPhone.addTextChangedListener(new PhoneNumberFormattingTextWatcher());
+
+ mBtnDob.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ DatePickerFragment dialog = new DatePickerFragment();
+ dialog.setCancelable(false);
+ dialog.show(getSupportFragmentManager(), "datePicker");
+ }
+ });
+
+ mBtnTime.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ new TimePickerFragment().show(getSupportFragmentManager(), "timePicker");
+ }
+ });
+ }
+
+ public void handleDatePickerValue(int year, int month, int dayOfMonth) {
+ int localMonth = month + 1;
+ Toast.makeText(this, "date :" + dayOfMonth +"/" + localMonth + "/" + year, Toast.LENGTH_SHORT).show();
}
+
+ public void handlerTimePickerValue(int hourOfDay, int minute) {
+ Toast.makeText(this, "Time :" + hourOfDay +"/" + minute, Toast.LENGTH_SHORT).show();
+ }
+
+
}
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/ViewPagerActivity.java b/app/src/main/java/com/example/tanphirum/uikitapplication/ViewPagerActivity.java
new file mode 100644
index 0000000..233153a
--- /dev/null
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/ViewPagerActivity.java
@@ -0,0 +1,60 @@
+package com.example.tanphirum.uikitapplication;
+
+import android.os.Bundle;
+import android.support.design.widget.TabLayout;
+import android.support.v4.view.ViewPager;
+import android.support.v7.app.AppCompatActivity;
+import android.util.Log;
+
+import com.example.tanphirum.uikitapplication.adapter.MyFragmentPagerAdapter;
+
+public class ViewPagerActivity extends AppCompatActivity {
+
+ private ViewPager mPager;
+ //private MyPagerAdapter adapter;
+
+ private MyFragmentPagerAdapter adapter;
+ private static final String TAG = ViewPagerActivity.class.getSimpleName();
+
+
+ private TabLayout mTabBar;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_view_pager);
+
+ mPager = findViewById(R.id.pager);
+
+ mTabBar = findViewById(R.id.tab_bar);
+
+ //adapter = new MyPagerAdapter(this);
+ //mPager.setOffscreenPageLimit(3);
+
+ adapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
+ mPager.setAdapter(adapter);
+
+ mPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+ Log.d(TAG, "onPageScrolled " + position);
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ Log.d(TAG, "onPageSelected " + position);
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+ //Log.d(TAG, "onPageScrollStateChanged " + State);
+ }
+ });
+ mTabBar.setupWithViewPager(mPager);
+
+ for (int i=0; i < adapter.getCount(); i++) {
+ mTabBar.getTabAt(i).setIcon(R.mipmap.ic_launcher);
+ }
+
+ }
+}
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/WebViewActivity.java b/app/src/main/java/com/example/tanphirum/uikitapplication/WebViewActivity.java
new file mode 100644
index 0000000..0180781
--- /dev/null
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/WebViewActivity.java
@@ -0,0 +1,100 @@
+package com.example.tanphirum.uikitapplication;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.webkit.WebChromeClient;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.ProgressBar;
+import android.widget.Toast;
+
+public class WebViewActivity extends AppCompatActivity {
+
+ private WebView mWebview;
+ private ProgressBar mProgressBar;
+
+ @SuppressLint("SetJavaScriptEnabled")
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_web_view);
+
+ mProgressBar = findViewById(R.id.pb);
+ mWebview = findViewById(R.id.wv);
+
+ mProgressBar.setMax(100);
+
+ mWebview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
+
+ mWebview.getSettings().setJavaScriptEnabled(true);
+ mWebview.setWebChromeClient(new WebChromeClient() {
+ public void onProgressChanged(WebView view, int progress) {
+ // Activities and WebViews measure progress with different scales.
+ // The progress meter will automatically disappear when we reach 100%
+ //activity.setProgress(progress * 1000);
+ mProgressBar.setProgress(progress);
+ }
+
+
+ });
+ mWebview.setWebViewClient(new WebViewClient() {
+
+ public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
+ Toast.makeText(view.getContext(), "Oh no! " + description, Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void onPageFinished(WebView view, String url) {
+ super.onPageFinished(view, url);
+ mProgressBar.setVisibility(View.GONE);
+ }
+ });
+ JavaScriptInterface javaInterface = new JavaScriptInterface(this);
+ mWebview.addJavascriptInterface(javaInterface, "JSInterface");
+
+
+ //mWebview.loadUrl("https://developers.google.com/");
+
+ String summary = "You scored 192 points.";
+ mWebview.loadData(htmlTest, "text/html", null);
+ //mWebview.loadDataWithBaseURL("""my.sabay.com/");
+
+ }
+
+ public class JavaScriptInterface {
+ Context mContext;
+
+ /** Instantiate the interface and set the context */
+ JavaScriptInterface(Context c) {
+ mContext = c;
+ }
+
+ @android.webkit.JavascriptInterface
+ public void changeActivity()
+ {
+ Toast.makeText(mContext, "Handle click event", Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ private String htmlTest = "\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ "";
+
+}
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/adapter/ListAdapter.java b/app/src/main/java/com/example/tanphirum/uikitapplication/adapter/ListAdapter.java
new file mode 100644
index 0000000..f496bdb
--- /dev/null
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/adapter/ListAdapter.java
@@ -0,0 +1,138 @@
+package com.example.tanphirum.uikitapplication.adapter;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.example.tanphirum.uikitapplication.R;
+
+import java.util.LinkedList;
+
+public class ListAdapter extends RecyclerView.Adapter{
+
+ private LayoutInflater mInflater;
+
+ private LinkedList mListData;
+
+ private final int VIEW_PROG = 0;
+ private final int VIEW_LAYOUT = 1;
+ /*private static MyItemClickListener mListener;
+
+ public ListAdapter(Context context, LinkedList list, MyItemClickListener listener) {
+ super();
+ mInflater = LayoutInflater.from(context);
+ mListData = list;
+ mListener = listener;
+ }*/
+
+ public ListAdapter(Context context, LinkedList list) {
+ super();
+ mInflater = LayoutInflater.from(context);
+ mListData = list;
+ }
+
+ @NonNull
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ RecyclerView.ViewHolder v;
+ if (viewType == VIEW_PROG) {
+ v = new MyProgressViewHolder(mInflater.inflate(R.layout.layout_progres_bar, parent, false));
+ } else {
+ v = new MyViewHolder(mInflater.inflate(R.layout.layout_list_item, parent, false));
+ }
+ return v;
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
+ if (holder instanceof MyViewHolder) {
+ ((MyViewHolder) holder).mTxtItemName.setText(mListData.get(position));
+ }
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ if (position == (mListData.size() - 1)) {
+ return VIEW_PROG;
+ }
+ return VIEW_LAYOUT;
+ }
+
+ /*@NonNull
+ @Override
+ public ListAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ return new MyViewHolder(mInflater.inflate(R.layout.layout_list_item, parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ListAdapter.MyViewHolder holder, int position) {
+ holder.mTxtItemName.setText(mListData.get(position));
+ }*/
+
+ @Override
+ public int getItemCount() {
+ return mListData.size();
+ }
+
+ public void insertItem(String item) {
+ mListData.add(item);
+ }
+
+ public void insertItem(LinkedList items) {
+ mListData.addAll(items);
+ }
+
+ public void updateItem(int pos, String item) {
+ mListData.set(pos, item);
+ }
+
+ public void clearItem() {
+ mListData.clear();
+ }
+
+ class MyProgressViewHolder extends RecyclerView.ViewHolder {
+ private TextView mTxtProgress;
+ public MyProgressViewHolder(View itemView) {
+ super(itemView);
+ mTxtProgress = itemView.findViewById(R.id.txt_progress);
+ }
+ }
+
+ class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
+
+ private ImageView mImgIcon;
+ private TextView mTxtItemName;
+
+ public MyViewHolder(View itemView) {
+ super(itemView);
+ mImgIcon = itemView.findViewById(R.id.img_icon);
+ mTxtItemName = itemView.findViewById(R.id.txt_item_name);
+ itemView.setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (mListener != null)
+ mListener.myItemClick(getLayoutPosition(), mTxtItemName.getText().toString());
+
+ Toast.makeText(v.getContext(), "Item click on pos " + getLayoutPosition(), Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ private MyItemClickListener mListener;
+
+ public interface MyItemClickListener {
+ public void myItemClick(int pos, String item);
+ }
+
+ public void setListener(MyItemClickListener listener) {
+ this.mListener = listener;
+ }
+
+}
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/adapter/MyFragmentPagerAdapter.java b/app/src/main/java/com/example/tanphirum/uikitapplication/adapter/MyFragmentPagerAdapter.java
new file mode 100644
index 0000000..e87d2e2
--- /dev/null
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/adapter/MyFragmentPagerAdapter.java
@@ -0,0 +1,40 @@
+package com.example.tanphirum.uikitapplication.adapter;
+
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentPagerAdapter;
+
+import com.example.tanphirum.uikitapplication.fragment.EmptyFragment;
+import com.example.tanphirum.uikitapplication.fragment.MainFragment;
+import com.example.tanphirum.uikitapplication.fragment.RegisterFragment;
+
+public class MyFragmentPagerAdapter extends FragmentPagerAdapter{
+
+ public MyFragmentPagerAdapter(FragmentManager fm) {
+ super(fm);
+ }
+
+ @Override
+ public Fragment getItem(int position) {
+ switch (position) {
+ case 0:
+ return new RegisterFragment();
+ case 1:
+ return new MainFragment();
+ default:
+ return new EmptyFragment();
+ }
+ }
+
+ @Nullable
+ @Override
+ public CharSequence getPageTitle(int position) {
+ return null;
+ }
+
+ @Override
+ public int getCount() {
+ return 5;
+ }
+}
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/adapter/MyPagerAdapter.java b/app/src/main/java/com/example/tanphirum/uikitapplication/adapter/MyPagerAdapter.java
new file mode 100644
index 0000000..47b0c60
--- /dev/null
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/adapter/MyPagerAdapter.java
@@ -0,0 +1,65 @@
+package com.example.tanphirum.uikitapplication.adapter;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.view.PagerAdapter;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+
+import com.example.tanphirum.uikitapplication.R;
+
+public class MyPagerAdapter extends PagerAdapter{
+
+ private Context mContext;
+ private LayoutInflater mInflater;
+
+ private int[] resValues = new int[]{
+ R.mipmap.ic_launcher, android.R.mipmap.sym_def_app_icon, R.mipmap.ic_profile_image
+ };
+
+ public MyPagerAdapter(Context context) {
+ super();
+ mContext = context;
+ mInflater = LayoutInflater.from(context);
+ }
+
+ public MyPagerAdapter(Context context, String st) {
+ super();
+ mContext = context;
+ mInflater = LayoutInflater.from(context);
+ }
+
+ @Override
+ public int getCount() {
+ return resValues.length;
+ }
+
+ @NonNull
+ @Override
+ public Object instantiateItem(@NonNull ViewGroup container, int position) {
+ View itemView = mInflater.inflate(R.layout.layout_list_item, container, false);
+ ImageView img = itemView.findViewById(R.id.img_icon);
+ img.setImageDrawable(mContext.getDrawable(resValues[position]));
+ container.addView(itemView);
+ return itemView;
+ }
+
+ @Override
+ public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
+ return view == (View) object;
+ }
+
+ @Override
+ public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
+ container.removeView((View) object);
+ }
+
+ @Nullable
+ @Override
+ public CharSequence getPageTitle(int position) {
+ return "Title " +position;
+ }
+}
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/callback/EndlessRecyclerViewScrollListener.java b/app/src/main/java/com/example/tanphirum/uikitapplication/callback/EndlessRecyclerViewScrollListener.java
new file mode 100644
index 0000000..116f065
--- /dev/null
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/callback/EndlessRecyclerViewScrollListener.java
@@ -0,0 +1,109 @@
+package com.example.tanphirum.uikitapplication.callback;
+
+import android.support.v7.widget.GridLayoutManager;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.StaggeredGridLayoutManager;
+
+public abstract class EndlessRecyclerViewScrollListener extends RecyclerView.OnScrollListener {
+ // The minimum amount of items to have below your current scroll position
+ // before loading more.
+ private int visibleThreshold = 2;
+ // The current offset index of data you have loaded
+ private int currentPage = 0;
+ // The total number of items in the dataset after the last load
+ private int previousTotalItemCount = 0;
+ // True if we are still waiting for the last set of data to load.
+ private boolean loading = true;
+ // Sets the starting page index
+ private int startingPageIndex = 0;
+
+ RecyclerView.LayoutManager mLayoutManager;
+
+ public EndlessRecyclerViewScrollListener(LinearLayoutManager layoutManager) {
+ this.mLayoutManager = layoutManager;
+ }
+
+ public EndlessRecyclerViewScrollListener(GridLayoutManager layoutManager) {
+ this.mLayoutManager = layoutManager;
+ visibleThreshold = visibleThreshold * layoutManager.getSpanCount();
+ }
+
+ public EndlessRecyclerViewScrollListener(StaggeredGridLayoutManager layoutManager) {
+ this.mLayoutManager = layoutManager;
+ visibleThreshold = visibleThreshold * layoutManager.getSpanCount();
+ }
+
+ public int getLastVisibleItem(int[] lastVisibleItemPositions) {
+ int maxSize = 0;
+ for (int i = 0; i < lastVisibleItemPositions.length; i++) {
+ if (i == 0) {
+ maxSize = lastVisibleItemPositions[i];
+ }
+ else if (lastVisibleItemPositions[i] > maxSize) {
+ maxSize = lastVisibleItemPositions[i];
+ }
+ }
+ return maxSize;
+ }
+
+ // This happens many times a second during a scroll, so be wary of the code you place here.
+ // We are given a few useful parameters to help us work out if we need to load some more data,
+ // but first we check if we are waiting for the previous load to finish.
+ @Override
+ public void onScrolled(RecyclerView view, int dx, int dy) {
+ int lastVisibleItemPosition = 0;
+ int totalItemCount = mLayoutManager.getItemCount();
+
+ if (mLayoutManager instanceof StaggeredGridLayoutManager) {
+ int[] lastVisibleItemPositions = ((StaggeredGridLayoutManager) mLayoutManager).findLastVisibleItemPositions(null);
+ // get maximum element within the list
+ lastVisibleItemPosition = getLastVisibleItem(lastVisibleItemPositions);
+ } else if (mLayoutManager instanceof GridLayoutManager) {
+ lastVisibleItemPosition = ((GridLayoutManager) mLayoutManager).findLastVisibleItemPosition();
+ } else if (mLayoutManager instanceof LinearLayoutManager) {
+ lastVisibleItemPosition = ((LinearLayoutManager) mLayoutManager).findLastVisibleItemPosition();
+ }
+
+ // If the total item count is zero and the previous isn't, assume the
+ // list is invalidated and should be reset back to initial state
+ if (totalItemCount < previousTotalItemCount) {
+ this.currentPage = this.startingPageIndex;
+ this.previousTotalItemCount = totalItemCount;
+ if (totalItemCount == 0) {
+ this.loading = true;
+ }
+ }
+ // If it’s still loading, we check to see if the dataset count has
+ // changed, if so we conclude it has finished loading and update the current page
+ // number and total item count.
+ if (loading && (totalItemCount > previousTotalItemCount)) {
+ loading = false;
+ previousTotalItemCount = totalItemCount;
+ }
+
+ // If it isn’t currently loading, we check to see if we have breached
+ // the visibleThreshold and need to reload more data.
+ // If we do need to reload some more data, we execute onLoadMore to fetch the data.
+ // threshold should reflect how many total columns there are too
+ if (!loading && (lastVisibleItemPosition + visibleThreshold) > totalItemCount) {
+ currentPage++;
+ onLoadMore(currentPage, totalItemCount, view);
+ loading = true;
+ }
+ }
+
+ // Call this method whenever performing new searches
+ public void resetState() {
+ this.currentPage = this.startingPageIndex;
+ this.previousTotalItemCount = 0;
+ this.loading = true;
+ }
+
+ // Defines the process for actually loading more data based on page
+ public abstract void onLoadMore(int page, int totalItemsCount, RecyclerView view);
+
+}
+
+
+
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/callback/MyItemClickListener.java b/app/src/main/java/com/example/tanphirum/uikitapplication/callback/MyItemClickListener.java
new file mode 100644
index 0000000..62c8b65
--- /dev/null
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/callback/MyItemClickListener.java
@@ -0,0 +1,6 @@
+package com.example.tanphirum.uikitapplication.callback;
+
+public interface MyItemClickListener {
+
+ public void MyItemClick(int pos, String item);
+}
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/fragment/DatePickerFragment.java b/app/src/main/java/com/example/tanphirum/uikitapplication/fragment/DatePickerFragment.java
new file mode 100644
index 0000000..03db232
--- /dev/null
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/fragment/DatePickerFragment.java
@@ -0,0 +1,36 @@
+package com.example.tanphirum.uikitapplication.fragment;
+
+import android.app.DatePickerDialog;
+import android.app.Dialog;
+import android.os.Bundle;
+import android.support.v4.app.DialogFragment;
+import android.widget.DatePicker;
+
+import com.example.tanphirum.uikitapplication.RegisterActivity;
+
+import java.util.Calendar;
+
+public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ Calendar calendar = Calendar.getInstance();
+ int year = calendar.get(Calendar.YEAR);
+ int month = calendar.get(Calendar.MONTH);
+ int day = calendar.get(Calendar.DAY_OF_MONTH);
+ if (getActivity() == null)
+ return null;
+ return new DatePickerDialog(getActivity(), this, year, month, day);
+ }
+
+ @Override
+ public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
+ if (getActivity() == null) {
+ return;
+ }
+ if (getActivity() instanceof RegisterActivity) {
+ RegisterActivity registerActivity = (RegisterActivity) getActivity();
+ registerActivity.handleDatePickerValue(year, month, dayOfMonth);
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/fragment/EmptyFragment.java b/app/src/main/java/com/example/tanphirum/uikitapplication/fragment/EmptyFragment.java
new file mode 100644
index 0000000..b234543
--- /dev/null
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/fragment/EmptyFragment.java
@@ -0,0 +1,25 @@
+package com.example.tanphirum.uikitapplication.fragment;
+
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.example.tanphirum.uikitapplication.R;
+
+public class EmptyFragment extends Fragment {
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.framment_empty, container, false);
+ }
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ }
+}
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/fragment/MainFragment.java b/app/src/main/java/com/example/tanphirum/uikitapplication/fragment/MainFragment.java
new file mode 100644
index 0000000..4fb9e31
--- /dev/null
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/fragment/MainFragment.java
@@ -0,0 +1,37 @@
+package com.example.tanphirum.uikitapplication.fragment;
+
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.example.tanphirum.uikitapplication.R;
+
+public class MainFragment extends Fragment{
+
+ private TextView mTxtPagerItem;
+
+ public MainFragment() {
+ super();
+ }
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.activity_main, container, false);
+ }
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ mTxtPagerItem = view.findViewById(R.id.txt_pager_item);
+ }
+}
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/fragment/RegisterFragment.java b/app/src/main/java/com/example/tanphirum/uikitapplication/fragment/RegisterFragment.java
new file mode 100644
index 0000000..2a5e9de
--- /dev/null
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/fragment/RegisterFragment.java
@@ -0,0 +1,46 @@
+package com.example.tanphirum.uikitapplication.fragment;
+
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.TextView;
+
+import com.example.tanphirum.uikitapplication.R;
+
+public class RegisterFragment extends Fragment{
+
+ private TextView mTxtPagerItem;
+
+ public RegisterFragment() {
+ super();
+ }
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.activity_register, container, false);
+ }
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+
+ ((Button) view.findViewById(R.id.btn_dob)).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ DatePickerFragment dialog = new DatePickerFragment();
+ dialog.setCancelable(false);
+ dialog.show(getFragmentManager(), "datePicker");
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/fragment/TimePickerFragment.java b/app/src/main/java/com/example/tanphirum/uikitapplication/fragment/TimePickerFragment.java
new file mode 100644
index 0000000..c02b84a
--- /dev/null
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/fragment/TimePickerFragment.java
@@ -0,0 +1,35 @@
+package com.example.tanphirum.uikitapplication.fragment;
+
+import android.app.Dialog;
+import android.app.TimePickerDialog;
+import android.os.Bundle;
+import android.support.v4.app.DialogFragment;
+import android.widget.TimePicker;
+
+import com.example.tanphirum.uikitapplication.RegisterActivity;
+
+import java.util.Calendar;
+
+public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener {
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ // Use the current time as the default values for the picker.
+ final Calendar c = Calendar.getInstance();
+ int hour = c.get(Calendar.HOUR_OF_DAY);
+ int minute = c.get(Calendar.MINUTE);
+ // Create a new instance of TimePickerDialog and return it.
+ return new TimePickerDialog(getActivity(), this, hour, minute, false);
+ }
+
+ @Override
+ public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
+ if (getActivity() == null)
+ return;
+
+ if (getActivity() instanceof RegisterActivity) {
+ RegisterActivity registerActivity = (RegisterActivity) getActivity();
+ registerActivity.handlerTimePickerValue(hourOfDay, minute);
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/task/AsyncTaskLoader.java b/app/src/main/java/com/example/tanphirum/uikitapplication/task/AsyncTaskLoader.java
new file mode 100644
index 0000000..1b9143e
--- /dev/null
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/task/AsyncTaskLoader.java
@@ -0,0 +1,25 @@
+package com.example.tanphirum.uikitapplication.task;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+import com.example.tanphirum.uikitapplication.webservice.NetworkUtils;
+
+public class AsyncTaskLoader extends android.support.v4.content.AsyncTaskLoader{
+
+ public AsyncTaskLoader(@NonNull Context context) {
+ super(context);
+ }
+
+ @Override
+ protected void onStartLoading() {
+ forceLoad();
+ }
+
+ @Nullable
+ @Override
+ public String loadInBackground() {
+ return NetworkUtils.getDataFromServer(null);
+ }
+}
diff --git a/app/src/main/java/com/example/tanphirum/uikitapplication/webservice/NetworkUtils.java b/app/src/main/java/com/example/tanphirum/uikitapplication/webservice/NetworkUtils.java
new file mode 100644
index 0000000..2b745e7
--- /dev/null
+++ b/app/src/main/java/com/example/tanphirum/uikitapplication/webservice/NetworkUtils.java
@@ -0,0 +1,48 @@
+package com.example.tanphirum.uikitapplication.webservice;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+public class NetworkUtils {
+
+ public static String getDataFromServer(String param){
+
+ HttpURLConnection httpURLConnection;
+
+ BufferedReader reader;
+
+ String jsonResponse = null;
+
+ try {
+ URL requestUrl = new URL("http://www.mocky.io/v2/5b1ffaf0310000bf2d230aae");
+
+ httpURLConnection = (HttpURLConnection) requestUrl.openConnection();
+ httpURLConnection.setRequestMethod("GET");
+ httpURLConnection.connect();
+
+ InputStream inputStream = httpURLConnection.getInputStream();
+
+ StringBuilder builder = new StringBuilder();
+
+ reader = new BufferedReader(new InputStreamReader(inputStream));
+
+ String line;
+ while ((line = reader.readLine()) != null) {
+ builder.append(line + "\n");
+ }
+
+ if (builder.length() == 0)
+ return null;
+
+ jsonResponse = builder.toString();
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return jsonResponse;
+ }
+}
diff --git a/app/src/main/res/layout/activity_async_task.xml b/app/src/main/res/layout/activity_async_task.xml
new file mode 100644
index 0000000..a3b9c85
--- /dev/null
+++ b/app/src/main/res/layout/activity_async_task.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_async_task_loader.xml b/app/src/main/res/layout/activity_async_task_loader.xml
new file mode 100644
index 0000000..7f17a25
--- /dev/null
+++ b/app/src/main/res/layout/activity_async_task_loader.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_broadcast.xml b/app/src/main/res/layout/activity_broadcast.xml
new file mode 100644
index 0000000..1d71e48
--- /dev/null
+++ b/app/src/main/res/layout/activity_broadcast.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_recycler_view.xml b/app/src/main/res/layout/activity_recycler_view.xml
new file mode 100644
index 0000000..cd60331
--- /dev/null
+++ b/app/src/main/res/layout/activity_recycler_view.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_register.xml b/app/src/main/res/layout/activity_register.xml
index 1af0418..c14f817 100644
--- a/app/src/main/res/layout/activity_register.xml
+++ b/app/src/main/res/layout/activity_register.xml
@@ -1,79 +1,128 @@
-
-
-
+
+ tools:context=".RegisterActivity">
-
+
-
-
+ android:hint="@string/username"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/img_profile">
-
+
+
-
-
+ android:hint="@string/password"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/txt_input_username"
+ app:passwordToggleEnabled="true">
-
+
+
-
-
+ android:hint="@string/password"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/txt_input_pass"
+ app:passwordToggleEnabled="true">
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_view_pager.xml b/app/src/main/res/layout/activity_view_pager.xml
new file mode 100644
index 0000000..0e481d3
--- /dev/null
+++ b/app/src/main/res/layout/activity_view_pager.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_web_view.xml b/app/src/main/res/layout/activity_web_view.xml
new file mode 100644
index 0000000..4af3dc1
--- /dev/null
+++ b/app/src/main/res/layout/activity_web_view.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_pager.xml b/app/src/main/res/layout/fragment_pager.xml
new file mode 100644
index 0000000..f5c6086
--- /dev/null
+++ b/app/src/main/res/layout/fragment_pager.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/framment_empty.xml b/app/src/main/res/layout/framment_empty.xml
new file mode 100644
index 0000000..26f9c14
--- /dev/null
+++ b/app/src/main/res/layout/framment_empty.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_list_item.xml b/app/src/main/res/layout/layout_list_item.xml
new file mode 100644
index 0000000..60d66df
--- /dev/null
+++ b/app/src/main/res/layout/layout_list_item.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_progres_bar.xml b/app/src/main/res/layout/layout_progres_bar.xml
new file mode 100644
index 0000000..882e366
--- /dev/null
+++ b/app/src/main/res/layout/layout_progres_bar.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index edd061a..dbe4525 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -29,4 +29,23 @@ This volume starts with the first new Beatle song, “Free as a Bird” (based o
Password
Confirm Password
Register
+ Phone
+ DOB
+ Time
+ Start task
+ Get data
+ Loading...
+ Power is connected
+ Power is disconnected.
+ Local broadcast is call.
+ Receive on
+ Receive off
+ Send custom broadcast
+ Power is changed
+
+
+ - Home
+ - Work
+ - Other
+
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..a33550e
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,27 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+
+ repositories {
+ google()
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.2.0-alpha18'
+
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+ }
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..743d692
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,13 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx1536m
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..055d02a
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Thu Jun 21 21:33:13 ICT 2018
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip