From 5af0e504b6a50cdae2b10f793de5f664bc2458b5 Mon Sep 17 00:00:00 2001 From: blong Date: Tue, 13 Sep 2016 15:56:20 +0800 Subject: Fix unnecessary update command send to sim card - If sim contacts info has no change, don't send update command to sim card. Change-Id: Id0aaf4e8a4db0cebcc0bb661f4b84529b7282a09 CRs-Fixed: 1064995 --- src/com/android/contacts/activities/MergeContactActivity.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/com/android/contacts/activities/MergeContactActivity.java b/src/com/android/contacts/activities/MergeContactActivity.java index 7604e8ec2..5402e565d 100755 --- a/src/com/android/contacts/activities/MergeContactActivity.java +++ b/src/com/android/contacts/activities/MergeContactActivity.java @@ -236,6 +236,7 @@ public class MergeContactActivity extends ListActivity { List simNumberList = new ArrayList<>(); List simEmailList = new ArrayList<>(); + boolean needUpdate = false; int subscription = -1; ArrayList delContactIds = new ArrayList<>(); HashMap> delRawIdsMap = new HashMap<>(); @@ -309,6 +310,7 @@ public class MergeContactActivity extends ListActivity { } } if (!containsNumber) { + needUpdate = true; simNumberList.add(number); } } @@ -326,6 +328,7 @@ public class MergeContactActivity extends ListActivity { } } if (!containsAnr) { + needUpdate = true; simNumberList.add(splitAnr[j]); } } @@ -337,6 +340,7 @@ public class MergeContactActivity extends ListActivity { for (int j = 0; j < splitEmail.length; j++) { if (!TextUtils.isEmpty(splitEmail[j]) && !simEmailList .contains(splitEmail[j])) { + needUpdate = true; simEmailList.add(splitEmail[j]); } } @@ -383,7 +387,9 @@ public class MergeContactActivity extends ListActivity { sourceValues.remove(SimContactsConstants.ACCOUNT_TYPE); sourceValues.remove(SimContactsConstants.ACCOUNT_NAME); // update the contacts in sim. - int simResult = mSimContactsOperation.update(sourceValues, subscription); + int simResult = 1; + if (needUpdate) + mSimContactsOperation.update(sourceValues, subscription); // if update sim contacts fail, stop merging. if (simResult <= 0) { @@ -415,6 +421,9 @@ public class MergeContactActivity extends ListActivity { .CONTENT_URI, String.valueOf(list.get(j))); rawDelList.add(ContentProviderOperation.newDelete(uri).build()); } + } else { + Toast.makeText(MergeContactActivity.this, R.string.merge_fail, + Toast.LENGTH_SHORT).show(); } } return true; -- cgit v1.2.3 From 7ae908b44ab246b07c930cc3d56c41a435f003d9 Mon Sep 17 00:00:00 2001 From: blong Date: Wed, 14 Sep 2016 17:12:34 +0800 Subject: Fix FC when add group as reciepients - Initial map when activity resume - close cursor if it is no need used Change-Id: I1ae6c401deb0e92423f941fda0dc65f8bce4b4b0 CRs-Fixed: 1066586 --- .../android/contacts/multipicker/GroupsFragment.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/com/android/contacts/multipicker/GroupsFragment.java b/src/com/android/contacts/multipicker/GroupsFragment.java index a41600d68..e19a28437 100755 --- a/src/com/android/contacts/multipicker/GroupsFragment.java +++ b/src/com/android/contacts/multipicker/GroupsFragment.java @@ -220,6 +220,12 @@ public class GroupsFragment extends ExpandableListFragment implements OnGroupCli mContext = null; } + @Override + public void onResume() { + super.onResume(); + fillAllContactsCursorMap(); + } + @Override public void onDestroy() { mAdapter.getQueryHandler().removeCallbacksAndMessages(QUERY_TOKEN); @@ -228,6 +234,9 @@ public class GroupsFragment extends ExpandableListFragment implements OnGroupCli mAdapter.getCursor().close(); } + if(allContactsInGroups!=null) + allContactsInGroups.close(); + if (mAllContactsCurosrMap != null) { mAllContactsCurosrMap.clear(); } @@ -776,7 +785,10 @@ public class GroupsFragment extends ExpandableListFragment implements OnGroupCli @Override protected Cursor getChildrenCursor(Cursor groupCursor) { long groupId = groupCursor.getLong(GROUP_ID); - return getContactsDetailCursor(groupId); + Cursor c = getContactsDetailCursor(groupId); + if (c != null) + getActivity().startManagingCursor(c); + return c; } @Override @@ -787,6 +799,7 @@ public class GroupsFragment extends ExpandableListFragment implements OnGroupCli super.changeCursor(cursor); } } + } /** * all contacts cursor fill to map @@ -794,6 +807,8 @@ public class GroupsFragment extends ExpandableListFragment implements OnGroupCli private void fillAllContactsCursorMap() { mAllContactsCurosrMap.clear(); Cursor cursor = null; + if (mGroupsCursor == null) + return; for (int groupPosition = 0; groupPosition < mGroupsCursor.getCount(); groupPosition++) { mGroupsCursor.moveToPosition(groupPosition); long groupCacheId = mGroupsCursor.getLong(GROUP_ID); @@ -816,7 +831,6 @@ public class GroupsFragment extends ExpandableListFragment implements OnGroupCli if (cursor != null) { cursor.close(); } - } } @Override -- cgit v1.2.3 From 375f020a2f44086e1f01a1ad2c6baf99cdb47544 Mon Sep 17 00:00:00 2001 From: blong Date: Mon, 19 Sep 2016 17:16:54 +0800 Subject: Fix FC when rotate in group edit screen - If the list is not cache in the background, need initial them CRs-Fixed: 1068255 Change-Id: I8c189b42d0c46837269ad27c9100415b65227060 --- src/com/android/contacts/group/GroupEditorFragment.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/com/android/contacts/group/GroupEditorFragment.java b/src/com/android/contacts/group/GroupEditorFragment.java index 9c568b44e..989086f12 100755 --- a/src/com/android/contacts/group/GroupEditorFragment.java +++ b/src/com/android/contacts/group/GroupEditorFragment.java @@ -239,7 +239,7 @@ public class GroupEditorFragment extends Fragment implements SelectAccountDialog onRestoreInstanceState(savedInstanceState); if (mStatus == Status.SELECTING_ACCOUNT) { // Account select dialog is showing. Don't setup the editor yet. - } else if (mStatus == Status.LOADING || getCacheSize() == 0) { + } else if (mStatus == Status.LOADING || mListToDisplay.size() == 0) { startGroupMetaDataLoader(); } else { setupEditorForAccount(); @@ -297,6 +297,12 @@ public class GroupEditorFragment extends Fragment implements SelectAccountDialog mListMembersToRemove); outState.putParcelableArrayList(KEY_MEMBERS_TO_DISPLAY, mListToDisplay); + } else if (mListMembersToAdd.size() + mListMembersToRemove.size() + < MAX_CACHE_MEMBER_SIZE) { + outState.putParcelableArrayList(KEY_MEMBERS_TO_ADD, + mListMembersToAdd); + outState.putParcelableArrayList(KEY_MEMBERS_TO_REMOVE, + mListMembersToRemove); } } @@ -316,6 +322,14 @@ public class GroupEditorFragment extends Fragment implements SelectAccountDialog mListMembersToAdd = state.getParcelableArrayList(KEY_MEMBERS_TO_ADD); mListMembersToRemove = state.getParcelableArrayList(KEY_MEMBERS_TO_REMOVE); mListToDisplay = state.getParcelableArrayList(KEY_MEMBERS_TO_DISPLAY); + + if (mListMembersToAdd == null) + mListMembersToAdd = new ArrayList(); + if (mListMembersToRemove == null) + mListMembersToRemove = new ArrayList(); + if (mListToDisplay == null) + mListToDisplay = new ArrayList(); + } private int getCacheSize() { -- cgit v1.2.3 From 70058d6500e3228cef13c1cbad4a60040e2cf9da Mon Sep 17 00:00:00 2001 From: blong Date: Mon, 12 Sep 2016 17:02:01 +0800 Subject: Fix group member refresh double problem - When save complete, it will reload group member combine with the added members to display,so it refresh doubles.add judge to avoid reload member after save complete. Change-Id: I36f195318607ec4942d08027cd7b722c2ed17e53 CRs-Fixed: 1065034 --- src/com/android/contacts/group/GroupEditorFragment.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/com/android/contacts/group/GroupEditorFragment.java b/src/com/android/contacts/group/GroupEditorFragment.java index 989086f12..6ae880d96 100755 --- a/src/com/android/contacts/group/GroupEditorFragment.java +++ b/src/com/android/contacts/group/GroupEditorFragment.java @@ -106,6 +106,9 @@ public class GroupEditorFragment extends Fragment implements SelectAccountDialog public static final int REQUEST_CODE_PICK_GROUP_MEM = 1001; private static final int MAX_CACHE_MEMBER_SIZE = 500; + //when save completed,close activity directly,no need reload group member. + private boolean mClose = false; + public static interface Listener { /** * Group metadata was not found, close the fragment now. @@ -676,7 +679,7 @@ public class GroupEditorFragment extends Fragment implements SelectAccountDialog } return false; } - + mClose = true; // If we are about to close the editor - there is no need to refresh the data getLoaderManager().destroyLoader(LOADER_EXISTING_MEMBERS); @@ -857,11 +860,14 @@ public class GroupEditorFragment extends Fragment implements SelectAccountDialog @Override public void onLoadFinished(Loader loader, Cursor data) { - bindGroupMetaData(data); + if (!mClose) { + bindGroupMetaData(data); - // Load existing members - getLoaderManager().initLoader(LOADER_EXISTING_MEMBERS, null, - mGroupMemberListLoaderListener); + // Load existing members + getLoaderManager().initLoader(LOADER_EXISTING_MEMBERS, null, + mGroupMemberListLoaderListener); + } + mClose = false; } @Override -- cgit v1.2.3 From 28d25e557650352aef3517ca1d506f5ca69bd60c Mon Sep 17 00:00:00 2001 From: Fang Yunong Date: Tue, 20 Sep 2016 20:27:20 +0800 Subject: Contacts: Check the state of writing system settings permission. Add a method to check the statue of writing system settings permission. Change-Id: I24f7472876ee6fd8ff1f45315f2a97da36e55bf7 CRs-fixed: 1061655 --- src/com/android/contacts/quickcontact/ExpandingEntryCardView.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java index c23476502..dd36fcffb 100644 --- a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java +++ b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java @@ -330,10 +330,8 @@ public class ExpandingEntryCardView extends CardView { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - mEnable = isChecked ? CallUtil.ENABLE_VIDEO_CALLING:CallUtil.DISABLE_VIDEO_CALLING; CallUtil.createVideoCallingDialog(isChecked, mContext); - Settings.System.putInt(mContext.getContentResolver(),CallUtil.CONFIG_VIDEO_CALLING, - mEnable); + CallUtil.saveVideoCallConfig(mContext,isChecked); if (mVideoCallingCallback != null) mVideoCallingCallback.updateContact(); } -- cgit v1.2.3 From 8a99ff6930c5c1540f90b15b8903b72e677864a2 Mon Sep 17 00:00:00 2001 From: blong Date: Wed, 21 Sep 2016 15:54:47 +0800 Subject: Fix delete call log screen force close in split mode - When drag call log screen down in split mode, the fragment will recreate several times and missed to set listener,so use the static variable for it.contacts screen will have same issue, we will set it again after activity create Change-Id: Iff6752240e76e47e83710e715684fc84cfb7bc57 CRs-Fixed: 1069312 --- src/com/android/contacts/activities/MultiPickContactsActivity.java | 4 ++++ src/com/android/contacts/multipicker/ContactsFragment.java | 3 +++ src/com/android/contacts/multipicker/DelCallLogFragment.java | 4 ++++ 3 files changed, 11 insertions(+) mode change 100644 => 100755 src/com/android/contacts/multipicker/DelCallLogFragment.java diff --git a/src/com/android/contacts/activities/MultiPickContactsActivity.java b/src/com/android/contacts/activities/MultiPickContactsActivity.java index 28ac8d49d..d8ec68585 100755 --- a/src/com/android/contacts/activities/MultiPickContactsActivity.java +++ b/src/com/android/contacts/activities/MultiPickContactsActivity.java @@ -714,6 +714,10 @@ public class MultiPickContactsActivity extends Activity implements ViewPager.OnP } } + public CheckListListener createListener() { + return new CheckListListener(); + } + private void configureSearchMode() { TextView topDividerLine = (TextView) findViewById(R.id.multi_pick_top_divider); if (mSearchUiVisible) { diff --git a/src/com/android/contacts/multipicker/ContactsFragment.java b/src/com/android/contacts/multipicker/ContactsFragment.java index 4f1049b05..b77bdf703 100755 --- a/src/com/android/contacts/multipicker/ContactsFragment.java +++ b/src/com/android/contacts/multipicker/ContactsFragment.java @@ -254,6 +254,9 @@ public class ContactsFragment extends ListFragment { checkedList = new ArrayList(); } } + if (mCheckListListener == null) + mCheckListListener = ((MultiPickContactsActivity) getActivity()) + .createListener(); mHeaderView = new View(mContext); AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams( AbsListView.LayoutParams.MATCH_PARENT, diff --git a/src/com/android/contacts/multipicker/DelCallLogFragment.java b/src/com/android/contacts/multipicker/DelCallLogFragment.java old mode 100644 new mode 100755 index d5997c81f..8abf5b8a4 --- a/src/com/android/contacts/multipicker/DelCallLogFragment.java +++ b/src/com/android/contacts/multipicker/DelCallLogFragment.java @@ -42,6 +42,7 @@ import android.widget.ListView; import android.widget.AbsListView; import com.android.contacts.R; +import com.android.contacts.activities.MultiPickContactsActivity; import com.android.contacts.list.OnCheckListActionListener; public class DelCallLogFragment extends ListFragment @@ -95,6 +96,9 @@ public class DelCallLogFragment extends ListFragment public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); + if (mCheckListListener == null) + mCheckListListener = ((MultiPickContactsActivity) getActivity()) + .createListener(); if (mDelCallLogAdapter == null) { mDelCallLogAdapter = new DelCallLogAdapter(mContext); mDelCallLogAdapter.setCheckListListener(mCheckListListener); -- cgit v1.2.3 From e96c995adc96020337d31274f248b83190eb30cc Mon Sep 17 00:00:00 2001 From: blong Date: Wed, 28 Sep 2016 15:24:11 +0800 Subject: Fix ClassCastException during monkey test - Add fragment type judge before initial - Initial listener when activity created CRs-Fixed: 1072080 Change-Id: Ic97c68e33454cbe7a9e4c90456de19e67404adf8 --- .../contacts/activities/MultiPickContactsActivity.java | 14 +++++++------- src/com/android/contacts/multipicker/CallLogFragment.java | 5 +++++ src/com/android/contacts/multipicker/GroupsFragment.java | 4 ++++ 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/com/android/contacts/activities/MultiPickContactsActivity.java b/src/com/android/contacts/activities/MultiPickContactsActivity.java index d8ec68585..5229d94b1 100755 --- a/src/com/android/contacts/activities/MultiPickContactsActivity.java +++ b/src/com/android/contacts/activities/MultiPickContactsActivity.java @@ -246,7 +246,7 @@ public class MultiPickContactsActivity extends Activity implements ViewPager.OnP // occur crash. position = getRtlPosition(position); - if (mAreTabsHiddenInViewPager || !mPickMode.isPickPhone()) { + if (!mPickMode.isPickPhone()) { if (mPickMode.isPickCall()) { mDelCallLogFragment = new DelCallLogFragment(); mDelCallLogFragment.setCheckListListener(new CheckListListener()); @@ -295,15 +295,15 @@ public class MultiPickContactsActivity extends Activity implements ViewPager.OnP public Object instantiateItem(ViewGroup container, int position) { Fragment f = (Fragment) super.instantiateItem(container, position); - if (mAreTabsHiddenInViewPager || !mPickMode.isPickPhone()) { + if (!mPickMode.isPickPhone()) { if (mPickMode.isPickCall()) { - if (mDelCallLogFragment == null) { + if (mDelCallLogFragment == null && f instanceof DelCallLogFragment) { mDelCallLogFragment = (DelCallLogFragment) f; mDelCallLogFragment .setCheckListListener(new CheckListListener()); } } else { - if (mContactsFragment == null) { + if (mContactsFragment == null && f instanceof ContactsFragment) { mContactsFragment = (ContactsFragment) f; mContactsFragment .setCheckListListener(new CheckListListener()); @@ -312,21 +312,21 @@ public class MultiPickContactsActivity extends Activity implements ViewPager.OnP } else { switch (position) { case TAB_INDEX_RECENT: - if (mCallLogFragment == null) { + if (mCallLogFragment == null && f instanceof CallLogFragment) { mCallLogFragment = (CallLogFragment) f; mCallLogFragment .setCheckListListener(new CheckListListener()); } break; case TAB_INDEX_CONTACTS: - if (mContactsFragment == null) { + if (mContactsFragment == null && f instanceof ContactsFragment) { mContactsFragment = (ContactsFragment) f; mContactsFragment .setCheckListListener(new CheckListListener()); } break; case TAB_INDEX_GROUP: - if (mGroupFragment == null) { + if (mGroupFragment == null && f instanceof GroupsFragment) { mGroupFragment = (GroupsFragment) f; mGroupFragment .setCheckListListener(new CheckListListener()); diff --git a/src/com/android/contacts/multipicker/CallLogFragment.java b/src/com/android/contacts/multipicker/CallLogFragment.java index 77779fe20..23b7765ea 100755 --- a/src/com/android/contacts/multipicker/CallLogFragment.java +++ b/src/com/android/contacts/multipicker/CallLogFragment.java @@ -55,6 +55,7 @@ import android.widget.AbsListView; import android.widget.TextView; import com.android.contacts.R; +import com.android.contacts.activities.MultiPickContactsActivity; import com.android.contacts.common.ContactPhotoManager; import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest; import com.android.contacts.common.util.UriUtils; @@ -175,6 +176,10 @@ public class CallLogFragment extends ListFragment { resolver = mContext.getContentResolver(); resolver.registerContentObserver(Calls.CONTENT_URI, true, mCallLogObserver); + if (mCheckListListener == null) { + mCheckListListener = ((MultiPickContactsActivity) getActivity()) + .createListener(); + } if (mCallLogListAdapter == null) { mCallLogListAdapter = new CallLogItemListAdapter(mContext); mContactsCheckedList = new ArrayList(); diff --git a/src/com/android/contacts/multipicker/GroupsFragment.java b/src/com/android/contacts/multipicker/GroupsFragment.java index e19a28437..1f38ca608 100755 --- a/src/com/android/contacts/multipicker/GroupsFragment.java +++ b/src/com/android/contacts/multipicker/GroupsFragment.java @@ -187,6 +187,10 @@ public class GroupsFragment extends ExpandableListFragment implements OnGroupCli mList.setOnGroupClickListener(this); mList.setOnChildClickListener(this); mList.setDivider(null); + if (mCheckListListener == null) { + mCheckListListener = ((MultiPickContactsActivity) getActivity()) + .createListener(); + } if (mAdapter == null) { if (mAllContactsCurosrMap == null) { mAllContactsCurosrMap = new HashMap(); -- cgit v1.2.3