Fix nit comments on quick contact suggestion card.
1) Add suggestions limit number to integers.xml
2) Increase character limit or it 'll cause truncation.
3) Fix a bug when merge is canceled. Should not clear selected
contact Ids.
BUG 21071527
Change-Id: Iaee6d4a60c1b7ffd2612235a9e68b7b2bebeaca3
diff --git a/res/values/integers.xml b/res/values/integers.xml
index 0de1de1..86a8e26 100644
--- a/res/values/integers.xml
+++ b/res/values/integers.xml
@@ -24,4 +24,7 @@
<!-- Number of lines the QuickContact title can have -->
<integer name="quickcontact_title_lines">1</integer>
+ <!-- Max suggestions limit showing in quick contact suggestion card [CHAR LIMIT=30]-->
+ <integer name="quickcontact_suggestions_limit">10</integer>
+
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1104a24..0819986 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -777,7 +777,7 @@
<!-- Button used in quick contact suggestion card to merge selected contacts. [CHAR LIMIT=30]-->
<string name="quickcontact_suggestion_merge_button">Merge</string>
- <!-- Suggestions number in quick contact suggestion card [CHAR LIMIT=30] -->
+ <!-- Suggestions number in quick contact suggestion card [CHAR LIMIT=60] -->
<plurals name="quickcontact_suggestions_number">
<item quantity="one">1 suggested contact</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> suggested contacts</item>
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 3ac9472..39cf0ec 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -255,6 +255,7 @@
private View mSuggestionSeparator;
private Button mSuggestionsMergeButton;
private boolean mIsSuggestionListCollapsed;
+ private long mPreviousSuggestionForContactId = 0;
private MultiShrinkScroller mScroller;
private SelectAccountDialogFragmentListener mSelectAccountFragmentListener;
@@ -489,44 +490,51 @@
final int suggestionNumber = mSuggestions.size();
final String suggestionSummary = getSuggestionAccountSummary(mSuggestions);
- if (suggestionNumber > 0) {
- mSuggestionCardView.setVisibility(View.VISIBLE);
-
- // Take the first suggestion 's photo as the summary photo.
- // TODO: take all suggestions' photos.
- final Suggestion firstSuggestion = mSuggestions.get(0);
- if (firstSuggestion.photo != null) {
- mSuggestionSummaryPhoto.setImageBitmap(BitmapFactory.decodeByteArray(
- firstSuggestion.photo, 0, firstSuggestion.photo.length));
- } else {
- mSuggestionSummaryPhoto.setImageDrawable(
- ContactPhotoManager.getDefaultAvatarDrawableForContact(
- getResources(), false, null));
- }
-
- mSuggestionForName.setText(suggestionForName);
- mSuggestionNumber.setText(getResources().getQuantityString(
- R.plurals.quickcontact_suggestions_number, suggestionNumber, suggestionNumber));
- mSuggestionSummary.setText(suggestionSummary);
-
- for (Suggestion suggestion : mSuggestions) {
- mSuggestionList.addView(inflateSuggestionListView(suggestion));
- }
-
- mSuggestionExpansionButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- if (mIsSuggestionListCollapsed) {
- expandSuggestionList();
- } else {
- collapseSuggestionList();
- }
- }
- });
-
- } else {
- mSuggestionCardView.setVisibility(View.GONE);
+ if (suggestionNumber <= 0) {
+ mSelectedAggregationIds.clear();
+ return;
}
+
+ mSuggestionCardView.setVisibility(View.VISIBLE);
+
+ // Take the first suggestion 's photo as the summary photo.
+ // TODO: take all suggestions' photos.
+ final Suggestion firstSuggestion = mSuggestions.get(0);
+ if (firstSuggestion.photo != null) {
+ mSuggestionSummaryPhoto.setImageBitmap(BitmapFactory.decodeByteArray(
+ firstSuggestion.photo, 0, firstSuggestion.photo.length));
+ } else {
+ mSuggestionSummaryPhoto.setImageDrawable(
+ ContactPhotoManager.getDefaultAvatarDrawableForContact(
+ getResources(), false, null));
+ }
+
+ mSuggestionForName.setText(suggestionForName);
+ mSuggestionNumber.setText(getResources().getQuantityString(
+ R.plurals.quickcontact_suggestions_number, suggestionNumber, suggestionNumber));
+ mSuggestionSummary.setText(suggestionSummary);
+
+ final Set<Long> suggestionContactIds = new HashSet<>();
+ for (Suggestion suggestion : mSuggestions) {
+ mSuggestionList.addView(inflateSuggestionListView(suggestion));
+ suggestionContactIds.add(suggestion.contactId);
+ }
+
+ // Remove contact Ids that are not suggestions.
+ final Set<Long> selectedSuggestionIds = com.google.common.collect.Sets.intersection(
+ mSelectedAggregationIds, suggestionContactIds);
+ mSelectedAggregationIds = new TreeSet<>(selectedSuggestionIds);
+
+ mSuggestionExpansionButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if (mIsSuggestionListCollapsed) {
+ expandSuggestionList();
+ } else {
+ collapseSuggestionList();
+ }
+ }
+ });
}
private void collapseSuggestionList() {
@@ -563,7 +571,7 @@
}
}
- Set<String> accountTypeWithNumber = new HashSet<>();
+ final Set<String> accountTypeWithNumber = new HashSet<>();
for (String accountType : accountTypeMap.keySet()) {
final String number = getResources().getQuantityString(
R.plurals.quickcontact_suggestion_account_type_number,
@@ -927,9 +935,8 @@
if (!mSelectedAggregationIds.contains(mContactData.getId())) {
mSelectedAggregationIds.add(mContactData.getId());
}
- TreeSet<Long> mergedContactIds = new TreeSet<Long>(mSelectedAggregationIds);
- mSelectedAggregationIds.clear(); // Clear selected ids for merged contact.
- JoinContactsDialogFragment.start(QuickContactActivity.this, mergedContactIds);
+ JoinContactsDialogFragment.start(
+ QuickContactActivity.this, mSelectedAggregationIds);
}
});
@@ -1320,11 +1327,18 @@
if (mAggregationSuggestionEngine == null) {
mAggregationSuggestionEngine = new AggregationSuggestionEngine(this);
mAggregationSuggestionEngine.setListener(this);
- mAggregationSuggestionEngine.setSuggestionsLimit(10);
+ mAggregationSuggestionEngine.setSuggestionsLimit(getResources().getInteger(
+ R.integer.quickcontact_suggestions_limit));
mAggregationSuggestionEngine.start();
}
mAggregationSuggestionEngine.setContactId(mContactData.getId());
+ if (mPreviousSuggestionForContactId != 0
+ && mPreviousSuggestionForContactId != mContactData.getId()) {
+ // Clear selected Ids when listing suggestions for new contact Id.
+ mSelectedAggregationIds.clear();
+ }
+ mPreviousSuggestionForContactId = mContactData.getId();
// Trigger suggestion engine to compute suggestions.
final ContentValues values = new ContentValues();