From df53ad197e45ccc9ff7a8bf6d63e15c61cb51a5a Mon Sep 17 00:00:00 2001 From: Joshua Trask Date: Thu, 7 Dec 2023 18:19:14 +0000 Subject: Move Chooser package-change shortcut reset to list adapter The shortcut-resetting logic was implemented inline in ChooserActivity's handler, and this CL moves the v2 implementation to a new callback in `ChooserListAdapter`. The v1 implementation is left as-is, so the design change is a no-op. This makes the activity-side handling more generic so it can be moved to the pager-adapter (go/chooser-ntab-refactoring), and it fixes a minor bug (b/315460869). This is based on "snapshot 4" and "5" of ag/25335069 (for more context, see that CL or go/chooser-ntab-refactoring). Bug: 310211468, 315460869 Test: `IntentResolver-tests-{unit,activity,integration}`. Change-Id: I29e10c801db553edc8132aaf8372140b4c35740e --- .../android/intentresolver/ChooserActivity.java | 3 ++- .../android/intentresolver/ChooserListAdapter.java | 24 ++++++++++++++++++++-- .../android/intentresolver/v2/ChooserActivity.java | 23 +++++++++------------ 3 files changed, 34 insertions(+), 16 deletions(-) (limited to 'java/src') diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java index 50ca5d0d..9000ab3a 100644 --- a/java/src/com/android/intentresolver/ChooserActivity.java +++ b/java/src/com/android/intentresolver/ChooserActivity.java @@ -1251,7 +1251,8 @@ public class ChooserActivity extends Hilt_ChooserActivity implements getEventLog(), maxTargetsPerRow, initialIntentsUserSpace, - targetDataLoader); + targetDataLoader, + null); } @Override diff --git a/java/src/com/android/intentresolver/ChooserListAdapter.java b/java/src/com/android/intentresolver/ChooserListAdapter.java index 3af8a3a7..876ad5c3 100644 --- a/java/src/com/android/intentresolver/ChooserListAdapter.java +++ b/java/src/com/android/intentresolver/ChooserListAdapter.java @@ -30,7 +30,6 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.ShortcutInfo; import android.graphics.drawable.Drawable; -import android.net.Uri; import android.os.AsyncTask; import android.os.Trace; import android.os.UserHandle; @@ -68,6 +67,17 @@ import java.util.concurrent.Executor; import java.util.stream.Collectors; public class ChooserListAdapter extends ResolverListAdapter { + + /** + * Delegate interface for injecting a chooser-specific operation to be performed before handling + * a package-change event. This allows the "driver" invoking the package-change to be generic, + * with no knowledge specific to the chooser implementation. + */ + public interface PackageChangeCallback { + /** Perform any steps necessary before processing the package-change event. */ + void beforeHandlingPackagesChanged(); + } + private static final String TAG = "ChooserListAdapter"; private static final boolean DEBUG = false; @@ -93,6 +103,9 @@ public class ChooserListAdapter extends ResolverListAdapter { private final Set mRequestedIcons = new HashSet<>(); + @Nullable + private final PackageChangeCallback mPackageChangeCallback; + // Reserve spots for incoming direct share targets by adding placeholders private final TargetInfo mPlaceHolderTargetInfo; private final TargetDataLoader mTargetDataLoader; @@ -152,7 +165,8 @@ public class ChooserListAdapter extends ResolverListAdapter { EventLog eventLog, int maxRankedTargets, UserHandle initialIntentsUserSpace, - TargetDataLoader targetDataLoader) { + TargetDataLoader targetDataLoader, + @Nullable PackageChangeCallback packageChangeCallback) { this( context, payloadIntents, @@ -169,6 +183,7 @@ public class ChooserListAdapter extends ResolverListAdapter { maxRankedTargets, initialIntentsUserSpace, targetDataLoader, + packageChangeCallback, AsyncTask.SERIAL_EXECUTOR, context.getMainExecutor()); } @@ -190,6 +205,7 @@ public class ChooserListAdapter extends ResolverListAdapter { int maxRankedTargets, UserHandle initialIntentsUserSpace, TargetDataLoader targetDataLoader, + @Nullable PackageChangeCallback packageChangeCallback, Executor bgExecutor, Executor mainExecutor) { // Don't send the initial intents through the shared ResolverActivity path, @@ -214,6 +230,7 @@ public class ChooserListAdapter extends ResolverListAdapter { mPlaceHolderTargetInfo = NotSelectableTargetInfo.newPlaceHolderTargetInfo(context); mTargetDataLoader = targetDataLoader; + mPackageChangeCallback = packageChangeCallback; createPlaceHolders(); mEventLog = eventLog; mShortcutSelectionLogic = new ShortcutSelectionLogic( @@ -286,6 +303,9 @@ public class ChooserListAdapter extends ResolverListAdapter { @Override public void handlePackagesChanged() { + if (mPackageChangeCallback != null) { + mPackageChangeCallback.beforeHandlingPackagesChanged(); + } if (DEBUG) { Log.d(TAG, "clearing queryTargets on package change"); } diff --git a/java/src/com/android/intentresolver/v2/ChooserActivity.java b/java/src/com/android/intentresolver/v2/ChooserActivity.java index 95eedf47..6c961bb8 100644 --- a/java/src/com/android/intentresolver/v2/ChooserActivity.java +++ b/java/src/com/android/intentresolver/v2/ChooserActivity.java @@ -594,25 +594,16 @@ public class ChooserActivity extends Hilt_ChooserActivity implements // Refresh pinned items mPinnedSharedPrefs = getPinnedSharedPrefs(this); if (listAdapter == null) { - handlePackageChangePerProfile(mChooserMultiProfilePagerAdapter.getActiveListAdapter()); + mChooserMultiProfilePagerAdapter.getActiveListAdapter().handlePackagesChanged(); if (mChooserMultiProfilePagerAdapter.getCount() > 1) { - handlePackageChangePerProfile( - mChooserMultiProfilePagerAdapter.getInactiveListAdapter()); + mChooserMultiProfilePagerAdapter.getInactiveListAdapter().handlePackagesChanged(); } } else { - handlePackageChangePerProfile(listAdapter); + listAdapter.handlePackagesChanged(); } updateProfileViewButton(); } - private void handlePackageChangePerProfile(ResolverListAdapter adapter) { - ProfileRecord record = getProfileRecord(adapter.getUserHandle()); - if (record != null && record.shortcutLoader != null) { - record.shortcutLoader.reset(); - } - adapter.handlePackagesChanged(); - } - @Override protected void onResume() { super.onResume(); @@ -1272,7 +1263,13 @@ public class ChooserActivity extends Hilt_ChooserActivity implements getEventLog(), maxTargetsPerRow, initialIntentsUserSpace, - targetDataLoader); + targetDataLoader, + () -> { + ProfileRecord record = getProfileRecord(userHandle); + if (record != null && record.shortcutLoader != null) { + record.shortcutLoader.reset(); + } + }); } @Override -- cgit v1.2.3-59-g8ed1b