diff options
| -rw-r--r-- | core/java/com/android/internal/app/ChooserActivity.java | 57 |
1 files changed, 33 insertions, 24 deletions
diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java index eeca73234c30..b71cce9b893f 100644 --- a/core/java/com/android/internal/app/ChooserActivity.java +++ b/core/java/com/android/internal/app/ChooserActivity.java @@ -1047,6 +1047,12 @@ public class ChooserActivity extends ResolverActivity { value -= mChooserListAdapter.getCallerTargetCount() + mChooserListAdapter.getSelectableServiceTargetCount(); break; + case ChooserListAdapter.TARGET_STANDARD_AZ: + // A-Z targets are unranked standard targets; we use -1 to mark that they + // are from the alphabetical pool. + value = -1; + cat = MetricsEvent.ACTION_ACTIVITY_CHOOSER_PICKED_STANDARD_TARGET; + break; } if (cat != 0) { @@ -1842,7 +1848,7 @@ public class ChooserActivity extends ResolverActivity { int offset = 0; int rowsToShow = mChooserRowAdapter.getContentPreviewRowCount() + mChooserRowAdapter.getServiceTargetRowCount() - + mChooserRowAdapter.getCallerTargetRowCount(); + + mChooserRowAdapter.getCallerAndRankedTargetRowCount(); // then this is most likely not a SEND_* action, so check // the app target count @@ -1886,6 +1892,7 @@ public class ChooserActivity extends ResolverActivity { public static final int TARGET_CALLER = 0; public static final int TARGET_SERVICE = 1; public static final int TARGET_STANDARD = 2; + public static final int TARGET_STANDARD_AZ = 3; private static final int MAX_SUGGESTED_APP_TARGETS = 4; private static final int MAX_TARGETS_PER_SERVICE = 2; @@ -1896,8 +1903,6 @@ public class ChooserActivity extends ResolverActivity { private ChooserTargetInfo mPlaceHolderTargetInfo = new PlaceHolderTargetInfo(); private final List<ChooserTargetInfo> mServiceTargets = new ArrayList<>(); private final List<TargetInfo> mCallerTargets = new ArrayList<>(); - private boolean mShowServiceTargets; - private boolean mTargetsNeedPruning = false; private final BaseChooserTargetComparator mBaseTargetComparator @@ -2037,7 +2042,7 @@ public class ChooserActivity extends ResolverActivity { @Override public int getCount() { - return getStandardTargetCount() + getAlphaTargetCount() + return getRankedTargetCount() + getAlphaTargetCount() + getSelectableServiceTargetCount() + getCallerTargetCount(); } @@ -2075,16 +2080,17 @@ public class ChooserActivity extends ResolverActivity { return 0; } - public int getStandardTargetCount() { - int standardCount = super.getCount(); - return standardCount > MAX_RANKED_TARGETS ? MAX_RANKED_TARGETS : standardCount; - } - int getAlphaTargetCount() { int standardCount = super.getCount(); return standardCount > MAX_RANKED_TARGETS ? standardCount : 0; } + int getRankedTargetCount() { + int spacesAvailable = MAX_RANKED_TARGETS - getCallerTargetCount(); + return Math.min(spacesAvailable, super.getCount()); + } + + public int getPositionTargetType(int position) { int offset = 0; @@ -2100,10 +2106,16 @@ public class ChooserActivity extends ResolverActivity { } offset += callerTargetCount; - final int standardTargetCount = getStandardTargetCount(); - if (position - offset < standardTargetCount) { + final int rankedTargetCount = getRankedTargetCount(); + if (position - offset < rankedTargetCount) { return TARGET_STANDARD; } + offset += rankedTargetCount; + + final int standardTargetCount = getAlphaTargetCount(); + if (position - offset < standardTargetCount) { + return TARGET_STANDARD_AZ; + } return TARGET_BAD; } @@ -2138,25 +2150,23 @@ public class ChooserActivity extends ResolverActivity { } offset += callerTargetCount; - // Ranked app targets - if (position - offset < MAX_RANKED_TARGETS) { + // Ranked standard app targets + final int rankedTargetCount = getRankedTargetCount(); + if (position - offset < rankedTargetCount) { return filtered ? super.getItem(position - offset) : getDisplayResolveInfo(position - offset); } - offset += MAX_RANKED_TARGETS; + offset += rankedTargetCount; // Alphabetical complete app target list. - Log.e(TAG, mSortedList.toString()); - if (position - offset < mSortedList.size()) { + if (position - offset < getAlphaTargetCount() && !mSortedList.isEmpty()) { return mSortedList.get(position - offset); } return null; - } - /** * Evaluate targets for inclusion in the direct share area. May not be included * if score is too low. @@ -2383,13 +2393,11 @@ public class ChooserActivity extends ResolverActivity { @Override public int getCount() { + return (int) ( getContentPreviewRowCount() - + getCallerTargetRowCount() + getServiceTargetRowCount() - + Math.ceil( - (float) mChooserListAdapter.getStandardTargetCount() - / getMaxTargetsPerRow()) + + getCallerAndRankedTargetRowCount() + Math.ceil( (float) mChooserListAdapter.getAlphaTargetCount() / getMaxTargetsPerRow()) @@ -2408,9 +2416,10 @@ public class ChooserActivity extends ResolverActivity { return 1; } - public int getCallerTargetRowCount() { + public int getCallerAndRankedTargetRowCount() { return (int) Math.ceil( - (float) mChooserListAdapter.getCallerTargetCount() / getMaxTargetsPerRow()); + ((float) mChooserListAdapter.getCallerTargetCount() + + mChooserListAdapter.getRankedTargetCount()) / getMaxTargetsPerRow()); } // There can be at most one row in the listview, that is internally |