summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2020-05-18 14:56:34 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-05-18 14:56:34 +0000
commitd96e01d2823520c2ddf577323fe0908000c65a96 (patch)
tree77d6790bbb727a02ee1a16bd43c3d965fd091636
parent1bf40c2178211f13b6b1a479c714a14125cb451c (diff)
parentb548df99a7a7fb42edccf8cb3955736b5e90f054 (diff)
Merge "In new direct share ranking, expand DS row as long as there are enough targets parking in memory, even if targets are still loading on UI." into rvc-dev
-rw-r--r--core/java/com/android/internal/app/ChooserActivity.java14
-rw-r--r--core/java/com/android/internal/app/ChooserListAdapter.java43
2 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 cff669e6c5b9..9950e55f1415 100644
--- a/core/java/com/android/internal/app/ChooserActivity.java
+++ b/core/java/com/android/internal/app/ChooserActivity.java
@@ -3506,13 +3506,11 @@ public class ChooserActivity extends ResolverActivity implements
}
/**
- * Only expand direct share area if there is a minimum number of shortcuts,
- * which will help reduce the amount of visible shuffling due to older-style
- * direct share targets.
+ * Only expand direct share area if there is a minimum number of targets.
*/
private boolean canExpandDirectShare() {
int orientation = getResources().getConfiguration().orientation;
- return mChooserListAdapter.getNumShortcutResults() > getMaxTargetsPerRow()
+ return mChooserListAdapter.getNumServiceTargetsForExpand() > getMaxTargetsPerRow()
&& orientation == Configuration.ORIENTATION_PORTRAIT
&& !isInMultiWindowMode();
}
@@ -3721,8 +3719,12 @@ public class ChooserActivity extends ResolverActivity implements
// only expand if we have more than maxTargetsPerRow, and delay that decision
// until they start to scroll
- if (mChooserMultiProfilePagerAdapter.getActiveListAdapter()
- .getSelectableServiceTargetCount() <= maxTargetsPerRow) {
+ ChooserListAdapter adapter =
+ mChooserMultiProfilePagerAdapter.getActiveListAdapter();
+ int validTargets =
+ mAppendDirectShareEnabled ? adapter.getNumServiceTargetsForExpand()
+ : adapter.getSelectableServiceTargetCount();
+ if (validTargets <= maxTargetsPerRow) {
mHideDirectShareExpansion = true;
return;
}
diff --git a/core/java/com/android/internal/app/ChooserListAdapter.java b/core/java/com/android/internal/app/ChooserListAdapter.java
index 492f98c1e6da..2568d097d404 100644
--- a/core/java/com/android/internal/app/ChooserListAdapter.java
+++ b/core/java/com/android/internal/app/ChooserListAdapter.java
@@ -79,6 +79,7 @@ public class ChooserListAdapter extends ResolverListAdapter {
private static final int MAX_SUGGESTED_APP_TARGETS = 4;
private static final int MAX_CHOOSER_TARGETS_PER_APP = 2;
+ private static final int MAX_SERVICE_TARGET_APP = 8;
static final int MAX_SERVICE_TARGETS = 8;
@@ -98,6 +99,7 @@ public class ChooserListAdapter extends ResolverListAdapter {
private ChooserTargetInfo
mPlaceHolderTargetInfo = new ChooserActivity.PlaceHolderTargetInfo();
private int mValidServiceTargetsNum = 0;
+ private int mAvailableServiceTargetsNum = 0;
private final Map<ComponentName, Pair<List<ChooserTargetInfo>, Integer>>
mParkingDirectShareTargets = new HashMap<>();
private final Map<ComponentName, Map<String, Integer>> mChooserTargetScores = new HashMap<>();
@@ -603,7 +605,13 @@ public class ChooserListAdapter extends ResolverListAdapter {
Pair<List<ChooserTargetInfo>, Integer> parkingTargetInfoPair =
mParkingDirectShareTargets.getOrDefault(origComponentName,
new Pair<>(new ArrayList<>(), 0));
- parkingTargetInfoPair.first.addAll(parkingTargetInfos);
+ for (ChooserTargetInfo target : parkingTargetInfos) {
+ if (!checkDuplicateTarget(target, parkingTargetInfoPair.first)
+ && !checkDuplicateTarget(target, mServiceTargets)) {
+ parkingTargetInfoPair.first.add(target);
+ mAvailableServiceTargetsNum++;
+ }
+ }
mParkingDirectShareTargets.put(origComponentName, parkingTargetInfoPair);
rankTargetsWithinComponent(origComponentName);
if (isShortcutResult) {
@@ -648,7 +656,7 @@ public class ChooserListAdapter extends ResolverListAdapter {
List<ChooserTargetInfo> parkingTargets = parkingTargetsItem.first;
int insertedNum = parkingTargetsItem.second;
while (insertedNum < quota && !parkingTargets.isEmpty()) {
- if (!checkDuplicateTarget(parkingTargets.get(0))) {
+ if (!checkDuplicateTarget(parkingTargets.get(0), mServiceTargets)) {
mServiceTargets.add(mValidServiceTargetsNum, parkingTargets.get(0));
mValidServiceTargetsNum++;
insertedNum++;
@@ -663,9 +671,6 @@ public class ChooserListAdapter extends ResolverListAdapter {
+ " totalScore=" + totalScore
+ " quota=" + quota);
}
- if (mShortcutComponents.contains(component)) {
- mNumShortcutResults += insertedNum - parkingTargetsItem.second;
- }
mParkingDirectShareTargets.put(component, new Pair<>(parkingTargets, insertedNum));
}
if (!shouldWaitPendingService) {
@@ -681,19 +686,15 @@ public class ChooserListAdapter extends ResolverListAdapter {
return;
}
Log.i(TAG, " fillAllServiceTargets");
- int maxRankedTargets = mChooserListCommunicator.getMaxRankedTargets();
- List<ComponentName> topComponentNames = getTopComponentNames(maxRankedTargets);
+ List<ComponentName> topComponentNames = getTopComponentNames(MAX_SERVICE_TARGET_APP);
// Append all remaining targets of top recommended components into direct share row.
for (ComponentName component : topComponentNames) {
if (!mParkingDirectShareTargets.containsKey(component)) {
continue;
}
mParkingDirectShareTargets.get(component).first.stream()
- .filter(target -> !checkDuplicateTarget(target))
+ .filter(target -> !checkDuplicateTarget(target, mServiceTargets))
.forEach(target -> {
- if (mShortcutComponents.contains(component)) {
- mNumShortcutResults++;
- }
mServiceTargets.add(mValidServiceTargetsNum, target);
mValidServiceTargetsNum++;
});
@@ -706,28 +707,34 @@ public class ChooserListAdapter extends ResolverListAdapter {
.map(pair -> pair.first)
.forEach(targets -> {
for (ChooserTargetInfo target : targets) {
- if (!checkDuplicateTarget(target)) {
+ if (!checkDuplicateTarget(target, mServiceTargets)) {
mServiceTargets.add(mValidServiceTargetsNum, target);
mValidServiceTargetsNum++;
- mNumShortcutResults++;
}
}
});
mParkingDirectShareTargets.clear();
}
- private boolean checkDuplicateTarget(ChooserTargetInfo chooserTargetInfo) {
+ private boolean checkDuplicateTarget(ChooserTargetInfo target,
+ List<ChooserTargetInfo> destination) {
// Check for duplicates and abort if found
- for (ChooserTargetInfo otherTargetInfo : mServiceTargets) {
- if (chooserTargetInfo.isSimilar(otherTargetInfo)) {
+ for (ChooserTargetInfo otherTargetInfo : destination) {
+ if (target.isSimilar(otherTargetInfo)) {
return true;
}
}
return false;
}
- int getNumShortcutResults() {
- return mNumShortcutResults;
+ /**
+ * The return number have to exceed a minimum limit to make direct share area expandable. When
+ * append direct share targets is enabled, return count of all available targets parking in the
+ * memory; otherwise, it is shortcuts count which will help reduce the amount of visible
+ * shuffling due to older-style direct share targets.
+ */
+ int getNumServiceTargetsForExpand() {
+ return mAppendDirectShareEnabled ? mAvailableServiceTargetsNum : mNumShortcutResults;
}
/**