aboutsummaryrefslogtreecommitdiff
path: root/wearable
diff options
context:
space:
mode:
authorBenjamin Baxter <benbaxter@google.com>2017-06-14 10:33:02 -0700
committerBenjamin Baxter <benbaxter@google.com>2017-06-15 17:11:26 -0700
commit5ab73b969e50abbb1b76a58c432e2e84553f9d68 (patch)
tree53c9cc8137871864e1c0eac4d496f068431278d2 /wearable
parent59cffafaff57cff2564e8349d46fdb2ed5305b10 (diff)
downloadandroid-5ab73b969e50abbb1b76a58c432e2e84553f9d68.tar.gz
Move contact database operations to background.
Bug: 34841755 Change-Id: I37a3460446fa961fe54f2372a08cb2b7270b3e74
Diffstat (limited to 'wearable')
-rw-r--r--wearable/wear/WearMessagingApp/Wearable/src/main/java/com/example/android/wearable/wear/messaging/contacts/ContactsListActivity.java74
-rw-r--r--wearable/wear/WearMessagingApp/Wearable/src/main/java/com/example/android/wearable/wear/messaging/contacts/ContactsListAdapter.java1
-rw-r--r--wearable/wear/WearMessagingApp/Wearable/src/main/java/com/example/android/wearable/wear/messaging/model/Profile.java2
3 files changed, 60 insertions, 17 deletions
diff --git a/wearable/wear/WearMessagingApp/Wearable/src/main/java/com/example/android/wearable/wear/messaging/contacts/ContactsListActivity.java b/wearable/wear/WearMessagingApp/Wearable/src/main/java/com/example/android/wearable/wear/messaging/contacts/ContactsListActivity.java
index 5b45a604..71743326 100644
--- a/wearable/wear/WearMessagingApp/Wearable/src/main/java/com/example/android/wearable/wear/messaging/contacts/ContactsListActivity.java
+++ b/wearable/wear/WearMessagingApp/Wearable/src/main/java/com/example/android/wearable/wear/messaging/contacts/ContactsListActivity.java
@@ -15,7 +15,9 @@
*/
package com.example.android.wearable.wear.messaging.contacts;
+import android.content.Context;
import android.content.Intent;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.LinearLayoutManager;
@@ -40,15 +42,12 @@ import java.util.List;
* peek. Tapping the check returns the selected contacts/profiles.
*
* <p>The caller needs to provide the `ArrayList` of Profiles to display.
- *
- * <p>
*/
public class ContactsListActivity extends GoogleSignedInActivity {
- private WearableRecyclerView mRecyclerView;
- private WearableActionDrawer mActionDrawer;
private WearableDrawerLayout mDrawerLayout;
private ContactsListAdapter mAdapter;
+ private FindContactsAsyncTask mContactsAsyncTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -57,10 +56,10 @@ public class ContactsListActivity extends GoogleSignedInActivity {
mDrawerLayout = (WearableDrawerLayout) findViewById(R.id.drawer_layout);
- mRecyclerView = (WearableRecyclerView) findViewById(R.id.recycler_list);
- mRecyclerView.addItemDecoration(new DividerItemDecoration(this, R.drawable.divider));
+ WearableRecyclerView recyclerView = (WearableRecyclerView) findViewById(R.id.recycler_list);
+ recyclerView.addItemDecoration(new DividerItemDecoration(this, R.drawable.divider));
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
- mRecyclerView.setLayoutManager(layoutManager);
+ recyclerView.setLayoutManager(layoutManager);
mAdapter =
new ContactsListAdapter(
@@ -71,16 +70,14 @@ public class ContactsListActivity extends GoogleSignedInActivity {
mDrawerLayout.peekDrawer(Gravity.BOTTOM);
}
});
- mRecyclerView.setAdapter(mAdapter);
-
- List<Profile> contacts = MockDatabase.getUserContacts(this);
- mAdapter.addAll(contacts);
+ recyclerView.setAdapter(mAdapter);
- mActionDrawer = (WearableActionDrawer) findViewById(R.id.bottom_action_drawer);
+ WearableActionDrawer actionDrawer =
+ (WearableActionDrawer) findViewById(R.id.bottom_action_drawer);
- Menu menu = mActionDrawer.getMenu();
+ Menu menu = actionDrawer.getMenu();
MenuTinter.tintMenu(this, menu, R.color.blue_15);
- mActionDrawer.setOnMenuItemClickListener(
+ actionDrawer.setOnMenuItemClickListener(
new WearableActionDrawer.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
@@ -88,12 +85,12 @@ public class ContactsListActivity extends GoogleSignedInActivity {
}
});
- mActionDrawer.setBackgroundColor(ContextCompat.getColor(this, R.color.blue_65));
+ actionDrawer.setBackgroundColor(ContextCompat.getColor(this, R.color.blue_65));
View peek =
getLayoutInflater()
.inflate(R.layout.drawer_check_confirmation, mDrawerLayout, false);
- mActionDrawer.setPeekContent(peek);
+ actionDrawer.setPeekContent(peek);
peek.findViewById(R.id.button_confirm)
.setOnClickListener(
@@ -114,6 +111,25 @@ public class ContactsListActivity extends GoogleSignedInActivity {
});
}
+ @Override
+ protected void onResume() {
+ super.onResume();
+
+ if (mContactsAsyncTask != null) {
+ mContactsAsyncTask.cancel(true);
+ }
+ mContactsAsyncTask = new FindContactsAsyncTask(this);
+ mContactsAsyncTask.execute();
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ if (mContactsAsyncTask != null) {
+ mContactsAsyncTask.cancel(true);
+ }
+ }
+
private boolean handleMenuItems(MenuItem menuItem) {
int menuId = menuItem.getItemId();
if (menuId == R.id.button_confirm) {
@@ -136,4 +152,30 @@ public class ContactsListActivity extends GoogleSignedInActivity {
setResult(RESULT_CANCELED);
finish();
}
+
+ /**
+ * Since messaging apps will retrieve contacts remotely, {@link AsyncTask} will allow us to
+ * perform the expensive operation in the background and not block the main thread.
+ *
+ * <p>Retrieves the user's contacts and updates the adapter with the new list of contacts.
+ */
+ private class FindContactsAsyncTask extends AsyncTask<Void, Void, List<Profile>> {
+
+ private final Context mContext;
+
+ FindContactsAsyncTask(Context context) {
+ this.mContext = context;
+ }
+
+ @Override
+ protected List<Profile> doInBackground(Void... params) {
+ return MockDatabase.getUserContacts(mContext);
+ }
+
+ @Override
+ protected void onPostExecute(List<Profile> contacts) {
+ super.onPostExecute(contacts);
+ mAdapter.addAll(contacts);
+ }
+ }
}
diff --git a/wearable/wear/WearMessagingApp/Wearable/src/main/java/com/example/android/wearable/wear/messaging/contacts/ContactsListAdapter.java b/wearable/wear/WearMessagingApp/Wearable/src/main/java/com/example/android/wearable/wear/messaging/contacts/ContactsListAdapter.java
index b9a26752..153b103f 100644
--- a/wearable/wear/WearMessagingApp/Wearable/src/main/java/com/example/android/wearable/wear/messaging/contacts/ContactsListAdapter.java
+++ b/wearable/wear/WearMessagingApp/Wearable/src/main/java/com/example/android/wearable/wear/messaging/contacts/ContactsListAdapter.java
@@ -222,6 +222,7 @@ public class ContactsListAdapter extends WearableRecyclerView.Adapter<RecyclerVi
*/
public void addAll(List<Profile> contacts) {
this.mContacts.addAll(contacts);
+ notifyDataSetChanged();
}
/**
diff --git a/wearable/wear/WearMessagingApp/Wearable/src/main/java/com/example/android/wearable/wear/messaging/model/Profile.java b/wearable/wear/WearMessagingApp/Wearable/src/main/java/com/example/android/wearable/wear/messaging/model/Profile.java
index ae858f37..62c73ab9 100644
--- a/wearable/wear/WearMessagingApp/Wearable/src/main/java/com/example/android/wearable/wear/messaging/model/Profile.java
+++ b/wearable/wear/WearMessagingApp/Wearable/src/main/java/com/example/android/wearable/wear/messaging/model/Profile.java
@@ -140,7 +140,7 @@ public class Profile implements Parcelable {
if (!name.equals(profile.name)) {
return false;
}
- if (!profileImageUri.equals(profile.profileImageUri)) {
+ if (profileImageUri != null && !profileImageUri.equals(profile.profileImageUri)) {
return false;
}
return lastUpdatedTime != null