diff options
| author | 2023-12-07 18:19:14 +0000 | |
|---|---|---|
| committer | 2023-12-08 14:33:51 +0000 | |
| commit | df53ad197e45ccc9ff7a8bf6d63e15c61cb51a5a (patch) | |
| tree | cd1c9c5d9734c02c4cff7c628d0317ad4b000c0e /java/src | |
| parent | 702b0bcb8cde313c97cdd461e6c96b8075cf0b6d (diff) | |
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
Diffstat (limited to 'java/src')
3 files changed, 34 insertions, 16 deletions
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<TargetInfo> 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 |