diff options
author | Jorge Ruesga <jorge@ruesga.com> | 2015-03-12 05:00:24 +0100 |
---|---|---|
committer | Matt Filetto <matt.filetto@gmail.com> | 2015-03-23 20:47:34 -0700 |
commit | 16ccce7eb0711c2c7f4cdbed236dc15c21234337 (patch) | |
tree | f9095dd68768e8b8492d540c3463a60cbbc0e14e | |
parent | f532ce85ff0147a82d09a364c990d5e841324197 (diff) | |
download | android_frameworks_opt_chips-16ccce7eb0711c2c7f4cdbed236dc15c21234337.tar.gz android_frameworks_opt_chips-16ccce7eb0711c2c7f4cdbed236dc15c21234337.tar.bz2 android_frameworks_opt_chips-16ccce7eb0711c2c7f4cdbed236dc15c21234337.zip |
chips: fix NPE errorsstaging/cm-12.1
Avoid access to potencial null references. Only chips_autocomplete_recipient_dropdown_item has
all the suggested contacts views. Only remove objects with valid destination references
Change-Id: I0e53d76a9bb6d319511269568a32104c8ffd3521
Signed-off-by: Jorge Ruesga <jorge@ruesga.com>
-rw-r--r-- | src/com/android/ex/chips/BaseRecipientAdapter.java | 6 | ||||
-rw-r--r-- | src/com/android/ex/chips/DropdownChipLayouter.java | 43 |
2 files changed, 35 insertions, 14 deletions
diff --git a/src/com/android/ex/chips/BaseRecipientAdapter.java b/src/com/android/ex/chips/BaseRecipientAdapter.java index 0f75dd7..3247a03 100644 --- a/src/com/android/ex/chips/BaseRecipientAdapter.java +++ b/src/com/android/ex/chips/BaseRecipientAdapter.java @@ -907,8 +907,14 @@ public class BaseRecipientAdapter extends BaseAdapter implements Filterable, Acc // Now remove suggestion entries (present in local or external directories) for (int i = entries.size() - 1; i >= 0; i--) { RecipientEntry e1 = entries.get(i); + if (e1.getDestination() == null) { + continue; + } for (int j = i - 1; j >= 0; j--) { RecipientEntry e2 = entries.get(j); + if (e2.getDestination() == null) { + continue; + } if (e1.getDestination().equals(e2.getDestination())) { entries.remove(j); } diff --git a/src/com/android/ex/chips/DropdownChipLayouter.java b/src/com/android/ex/chips/DropdownChipLayouter.java index 2ea9be4..4b313ab 100644 --- a/src/com/android/ex/chips/DropdownChipLayouter.java +++ b/src/com/android/ex/chips/DropdownChipLayouter.java @@ -276,26 +276,37 @@ public class DropdownChipLayouter { bindTextToView(destination, viewHolder.destinationView); bindTextToView(destinationType, viewHolder.destinationTypeView); if (entry.getDestinationType() == BaseRecipientAdapter.SUGGESTED_ENTRY_DESTINATION_TYPE) { - viewHolder.addSuggestionView.setTag(entry); - viewHolder.deleteSuggestionView.setTag(entry); - - viewHolder.addSuggestionView.setVisibility(View.VISIBLE); - viewHolder.deleteSuggestionView.setVisibility(View.VISIBLE); + if (viewHolder.addSuggestionView != null) { + viewHolder.addSuggestionView.setTag(entry); + viewHolder.addSuggestionView.setVisibility(View.VISIBLE); + } + if (viewHolder.deleteSuggestionView != null) { + viewHolder.deleteSuggestionView.setTag(entry); + viewHolder.deleteSuggestionView.setVisibility(View.VISIBLE); + } viewHolder.imageView.setVisibility(View.GONE); } else { bindIconToView(showImage, entry, viewHolder.imageView, type); - viewHolder.addSuggestionView.setVisibility(View.GONE); - viewHolder.deleteSuggestionView.setVisibility(View.GONE); + if (viewHolder.addSuggestionView != null) { + viewHolder.addSuggestionView.setVisibility(View.GONE); + } + if (viewHolder.deleteSuggestionView != null) { + viewHolder.deleteSuggestionView.setVisibility(View.GONE); + } viewHolder.imageView.setVisibility(View.VISIBLE); } bindDrawableToDeleteView(deleteDrawable, viewHolder.deleteView); // Revert animations - viewHolder.iconsView.setAlpha(1.0f); - viewHolder.iconsView.setVisibility(View.VISIBLE); - viewHolder.actionView.setAlpha(1.0f); - viewHolder.actionView.setVisibility(View.GONE); + if (viewHolder.iconsView != null) { + viewHolder.iconsView.setAlpha(1.0f); + viewHolder.iconsView.setVisibility(View.VISIBLE); + } + if (viewHolder.actionView != null) { + viewHolder.actionView.setAlpha(1.0f); + viewHolder.actionView.setVisibility(View.GONE); + } return itemView; } @@ -513,11 +524,15 @@ public class DropdownChipLayouter { destinationTypeView = (TextView) view.findViewById(getDestinationTypeResId()); imageView = (ImageView) view.findViewById(getPhotoResId()); deleteView = (ImageView) view.findViewById(getDeleteResId()); + topDivider = view.findViewById(R.id.chips_recipients_icons_layout); addSuggestionView = (ImageView) view.findViewById(R.id.chip_suggested_contact_add); + if (addSuggestionView != null) { + addSuggestionView.setOnClickListener(mSuggestionClickListener); + } deleteSuggestionView = (ImageView) view.findViewById(R.id.chip_suggested_contact_delete); - topDivider = view.findViewById(R.id.chips_recipients_icons_layout); - addSuggestionView.setOnClickListener(mSuggestionClickListener); - deleteSuggestionView.setOnClickListener(mSuggestionClickListener); + if (deleteSuggestionView != null) { + deleteSuggestionView.setOnClickListener(mSuggestionClickListener); + } iconsView = view.findViewById(R.id.chips_recipients_icons_layout); actionView = view.findViewById(R.id.chip_recipients_action_layout); } |