summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/app/AppPredictionServiceResolverComparator.java3
-rw-r--r--core/java/com/android/internal/app/ChooserListAdapter.java32
2 files changed, 25 insertions, 10 deletions
diff --git a/core/java/com/android/internal/app/AppPredictionServiceResolverComparator.java b/core/java/com/android/internal/app/AppPredictionServiceResolverComparator.java
index ba8c7b32ad02..def11379bdd6 100644
--- a/core/java/com/android/internal/app/AppPredictionServiceResolverComparator.java
+++ b/core/java/com/android/internal/app/AppPredictionServiceResolverComparator.java
@@ -163,6 +163,9 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator
@Override
List<ComponentName> getTopComponentNames(int topK) {
+ if (mResolverRankerService != null) {
+ return mResolverRankerService.getTopComponentNames(topK);
+ }
return mTargetRanks.entrySet().stream()
.sorted(Entry.comparingByValue())
.limit(topK)
diff --git a/core/java/com/android/internal/app/ChooserListAdapter.java b/core/java/com/android/internal/app/ChooserListAdapter.java
index 0d90bbff4c73..bdfcda520281 100644
--- a/core/java/com/android/internal/app/ChooserListAdapter.java
+++ b/core/java/com/android/internal/app/ChooserListAdapter.java
@@ -207,6 +207,9 @@ public class ChooserListAdapter extends ResolverListAdapter {
if (mListViewDataChanged) {
if (mAppendDirectShareEnabled) {
appendServiceTargetsWithQuota();
+ if (mPendingChooserTargetService.isEmpty()) {
+ fillAllServiceTargets();
+ }
}
super.notifyDataSetChanged();
}
@@ -488,13 +491,14 @@ public class ChooserListAdapter extends ResolverListAdapter {
Map<ChooserTarget, ShortcutInfo> directShareToShortcutInfos,
List<ChooserActivity.ChooserTargetServiceConnection>
pendingChooserTargetServiceConnections) {
- ComponentName origComponentName = origTarget.getResolvedComponentName();
+ ComponentName origComponentName = origTarget != null ? origTarget.getResolvedComponentName()
+ : !targets.isEmpty() ? targets.get(0).getComponentName() : null;
mPendingChooserTargetService = pendingChooserTargetServiceConnections.stream()
.map(ChooserActivity.ChooserTargetServiceConnection::getComponentName)
.filter(componentName -> !componentName.equals(origComponentName))
.collect(Collectors.toSet());
// Park targets in memory
- if (!targets.isEmpty() && !mParkingDirectShareTargets.containsKey(origComponentName)) {
+ if (!targets.isEmpty()) {
final boolean isShortcutResult =
(targetType == TARGET_TYPE_SHORTCUTS_FROM_SHORTCUT_MANAGER
|| targetType == TARGET_TYPE_SHORTCUTS_FROM_PREDICTION_SERVICE);
@@ -509,8 +513,11 @@ public class ChooserListAdapter extends ResolverListAdapter {
: null))
)
.collect(Collectors.toList());
- mParkingDirectShareTargets.put(origComponentName,
- new Pair<>(parkingTargetInfos, 0));
+ Pair<List<ChooserTargetInfo>, Integer> parkingTargetInfoPair =
+ mParkingDirectShareTargets.getOrDefault(origComponentName,
+ new Pair<>(new ArrayList<>(), 0));
+ parkingTargetInfoPair.first.addAll(parkingTargetInfos);
+ mParkingDirectShareTargets.put(origComponentName, parkingTargetInfoPair);
if (isShortcutResult) {
mShortcutComponents.add(origComponentName);
}
@@ -558,6 +565,9 @@ public class ChooserListAdapter extends ResolverListAdapter {
* Append all remaining targets (parking in memory) into direct share row as per their ranking.
*/
private void fillAllServiceTargets() {
+ if (mParkingDirectShareTargets.isEmpty()) {
+ return;
+ }
int maxRankedTargets = mChooserListCommunicator.getMaxRankedTargets();
List<ComponentName> topComponentNames = getTopComponentNames(maxRankedTargets);
// Append all remaining targets of top recommended components into direct share row.
@@ -576,16 +586,18 @@ public class ChooserListAdapter extends ResolverListAdapter {
mParkingDirectShareTargets.remove(component);
}
// Append all remaining shortcuts targets into direct share row.
- List<ChooserTargetInfo> remainingTargets = new ArrayList<>();
mParkingDirectShareTargets.entrySet().stream()
.filter(entry -> mShortcutComponents.contains(entry.getKey()))
.map(entry -> entry.getValue())
.map(pair -> pair.first)
- .forEach(remainingTargets::addAll);
- remainingTargets.sort(
- (t1, t2) -> -Float.compare(t1.getModifiedScore(), t2.getModifiedScore()));
- mServiceTargets.addAll(remainingTargets);
- mNumShortcutResults += remainingTargets.size();
+ .forEach(targets -> {
+ for (ChooserTargetInfo target : targets) {
+ if (!checkDuplicateTarget(target)) {
+ mServiceTargets.add(target);
+ mNumShortcutResults++;
+ }
+ }
+ });
mParkingDirectShareTargets.clear();
}