summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYiqun Wu <yiqunw@google.com>2021-10-28 01:07:50 -0700
committerYiqun Wu <yiqunw@google.com>2021-11-03 01:25:33 -0700
commit666fb7e5555992ee537a69bd208ee8e221cad458 (patch)
tree45cca0490fab4d4c1b3c446b914ec50b2544753d
parent237760b7094b46f3d1a644ba027840463e0e9e6f (diff)
downloadDialer-666fb7e5555992ee537a69bd208ee8e221cad458.tar.gz
Refresh phone number entries only when save to favorite
Before: refresh the whole list which will lost the focus After: refresh phone numbers and retains the focus Fixes: 204137829 Test: manually Change-Id: Ica16eedb4783e3906be9e52105ee01cc72d76489
-rw-r--r--src/com/android/car/dialer/ui/contact/ContactDetailsAdapter.java2
-rw-r--r--src/com/android/car/dialer/ui/contact/ContactDetailsFragment.java11
-rw-r--r--src/com/android/car/dialer/ui/contact/ContactDetailsViewModel.java27
3 files changed, 27 insertions, 13 deletions
diff --git a/src/com/android/car/dialer/ui/contact/ContactDetailsAdapter.java b/src/com/android/car/dialer/ui/contact/ContactDetailsAdapter.java
index 520c32c6..e3064d10 100644
--- a/src/com/android/car/dialer/ui/contact/ContactDetailsAdapter.java
+++ b/src/com/android/car/dialer/ui/contact/ContactDetailsAdapter.java
@@ -44,7 +44,7 @@ class ContactDetailsAdapter extends RecyclerView.Adapter<ContactDetailsViewHolde
private static final String TAG = "CD.ContactDetailsAdapter";
private static final int ID_HEADER = 1;
- private static final int ID_NUMBER = 2;
+ static final int ID_NUMBER = 2;
private static final int ID_ADDRESS = 3;
interface PhoneNumberPresenter {
diff --git a/src/com/android/car/dialer/ui/contact/ContactDetailsFragment.java b/src/com/android/car/dialer/ui/contact/ContactDetailsFragment.java
index 332df713..e1ee4ccb 100644
--- a/src/com/android/car/dialer/ui/contact/ContactDetailsFragment.java
+++ b/src/com/android/car/dialer/ui/contact/ContactDetailsFragment.java
@@ -67,6 +67,7 @@ public class ContactDetailsFragment extends Hilt_ContactDetailsFragment implemen
private Contact mContact;
private LiveData<FutureData<Contact>> mContactDetailsLiveData;
private ContactDetailsViewModel mContactDetailsViewModel;
+ private LiveData<Boolean> mPhoneNumberRefreshEvent;
private boolean mShowActionBarView;
private boolean mShowActionBarAvatar;
@@ -93,6 +94,7 @@ public class ContactDetailsFragment extends Hilt_ContactDetailsFragment implemen
mContactDetailsViewModel = new ViewModelProvider(this).get(
ContactDetailsViewModel.class);
mContactDetailsLiveData = mContactDetailsViewModel.getContactDetails(mContact);
+ mPhoneNumberRefreshEvent = mContactDetailsViewModel.getPhoneNumberRefreshEvent();
mShowActionBarView = getResources().getBoolean(
R.bool.config_show_contact_details_action_bar_view);
@@ -115,6 +117,15 @@ public class ContactDetailsFragment extends Hilt_ContactDetailsFragment implemen
showContent();
}
});
+
+ mPhoneNumberRefreshEvent.observe(this, refresh -> {
+ int itemCount = contactDetailsAdapter.getItemCount();
+ for (int i = 0; i < itemCount; i++) {
+ if (contactDetailsAdapter.getItemViewType(i) == ContactDetailsAdapter.ID_NUMBER) {
+ contactDetailsAdapter.notifyItemChanged(i);
+ }
+ }
+ });
}
private void onContactChanged(Contact contact) {
diff --git a/src/com/android/car/dialer/ui/contact/ContactDetailsViewModel.java b/src/com/android/car/dialer/ui/contact/ContactDetailsViewModel.java
index 442f045b..4ae3127f 100644
--- a/src/com/android/car/dialer/ui/contact/ContactDetailsViewModel.java
+++ b/src/com/android/car/dialer/ui/contact/ContactDetailsViewModel.java
@@ -29,6 +29,7 @@ import androidx.lifecycle.ViewModel;
import com.android.car.arch.common.FutureData;
import com.android.car.arch.common.LiveDataFunctions;
import com.android.car.dialer.storage.FavoriteNumberRepository;
+import com.android.car.dialer.ui.common.SingleLiveEvent;
import com.android.car.telephony.common.Contact;
import com.android.car.telephony.common.InMemoryPhoneBook;
import com.android.car.telephony.common.PhoneNumber;
@@ -49,12 +50,17 @@ import dagger.hilt.android.qualifiers.ApplicationContext;
public class ContactDetailsViewModel extends ViewModel {
private final Context mContext;
private final FavoriteNumberRepository mFavoriteNumberRepository;
+ private final SingleLiveEvent mPhoneNumberRefreshEvent;
@Inject
public ContactDetailsViewModel(@ApplicationContext Context context,
- FavoriteNumberRepository favoriteNumberRepository) {
+ FavoriteNumberRepository favoriteNumberRepository) {
mContext = context;
mFavoriteNumberRepository = favoriteNumberRepository;
+ mPhoneNumberRefreshEvent = new SingleLiveEvent();
+ mPhoneNumberRefreshEvent.addSource(
+ mFavoriteNumberRepository.getFavoriteContacts(),
+ contacts -> mPhoneNumberRefreshEvent.setValue(Boolean.TRUE));
}
/**
@@ -95,6 +101,14 @@ public class ContactDetailsViewModel extends ViewModel {
mFavoriteNumberRepository.removeFromFavorite(contact, phoneNumber);
}
+ /**
+ * Returns if the phone number entries need refresh when any favorite state of the numbers has
+ * changed.
+ */
+ public LiveData<Boolean> getPhoneNumberRefreshEvent() {
+ return mPhoneNumberRefreshEvent;
+ }
+
private class ContactDetailsLiveData extends MediatorLiveData<Contact> {
private final Uri mContactLookupUri;
private final String mAccountName;
@@ -110,8 +124,6 @@ public class ContactDetailsViewModel extends ViewModel {
mContactLookupUri = mContact.getLookupUri();
mAccountName = mContact.getAccountName();
addSource(InMemoryPhoneBook.get().getContactsLiveData(), this::onContactListChanged);
- addSource(mFavoriteNumberRepository.getFavoriteContacts(),
- this::onFavoriteContactsChanged);
}
private void onContactListChanged(List<Contact> contacts) {
@@ -146,15 +158,6 @@ public class ContactDetailsViewModel extends ViewModel {
);
}
- private void onFavoriteContactsChanged(List<Contact> favoriteContacts) {
- if (mContact == null) {
- return;
- }
- Contact inMemoryContact = InMemoryPhoneBook.get().lookupContactByKey(
- mContact.getLookupKey(), mContact.getAccountName());
- setValue(inMemoryContact);
- }
-
@Override
public void setValue(Contact contact) {
mContact = contact;