diff options
| author | 2022-10-25 15:44:34 -0400 | |
|---|---|---|
| committer | 2022-11-07 21:56:48 +0000 | |
| commit | dcb7c99e338b28d9c1d820d9f4f459518d1cbc35 (patch) | |
| tree | b3b6185e0a2d7f02c88401482bf30e94a777e430 /java | |
| parent | 25d6a129ba6b8f805e520584af1c0cc82b8c0b6a (diff) | |
Migrate ranking components to subpackage.
I still have some old refactoring CLs outstanding around these
components, but for now I just want to group them together (and start
emptying out some of our top-level source directory). Long-term this
subpackage probably merges with some or all of the responsibilities
in the `shortcuts` subpackage (if we imagine that "sourcing" targets
and "scoring/ranking" them are both responsibilities of some backend
"data model").
Test: atest IntentResolverUnitTests
Bug: 202167050
Change-Id: If15bf9b8ac1989bd3ded65e2c4bfa0bc2abc171e
Diffstat (limited to 'java')
8 files changed, 47 insertions, 57 deletions
diff --git a/java/src/com/android/intentresolver/ChooserActivity.java b/java/src/com/android/intentresolver/ChooserActivity.java index 6735ab4e..a72425a0 100644 --- a/java/src/com/android/intentresolver/ChooserActivity.java +++ b/java/src/com/android/intentresolver/ChooserActivity.java @@ -121,6 +121,9 @@ import com.android.intentresolver.chooser.DisplayResolveInfo; import com.android.intentresolver.chooser.MultiDisplayResolveInfo; import com.android.intentresolver.chooser.SelectableTargetInfo.SelectableTargetInfoCommunicator; import com.android.intentresolver.chooser.TargetInfo; +import com.android.intentresolver.model.AbstractResolverComparator; +import com.android.intentresolver.model.AppPredictionServiceResolverComparator; +import com.android.intentresolver.model.ResolverRankerServiceResolverComparator; import com.android.intentresolver.shortcuts.AppPredictorFactory; import com.android.intentresolver.widget.ResolverDrawerLayout; import com.android.internal.annotations.VisibleForTesting; diff --git a/java/src/com/android/intentresolver/ResolverActivity.java b/java/src/com/android/intentresolver/ResolverActivity.java index 19251490..46a41b50 100644 --- a/java/src/com/android/intentresolver/ResolverActivity.java +++ b/java/src/com/android/intentresolver/ResolverActivity.java @@ -2244,8 +2244,9 @@ public class ResolverActivity extends FragmentActivity implements } - static final boolean isSpecificUriMatch(int match) { - match = match&IntentFilter.MATCH_CATEGORY_MASK; + /** Determine whether a given match result is considered "specific" in our application. */ + public static final boolean isSpecificUriMatch(int match) { + match = (match & IntentFilter.MATCH_CATEGORY_MASK); return match >= IntentFilter.MATCH_CATEGORY_HOST && match <= IntentFilter.MATCH_CATEGORY_PATH; } diff --git a/java/src/com/android/intentresolver/ResolverListController.java b/java/src/com/android/intentresolver/ResolverListController.java index 6169c032..bfffe0d8 100644 --- a/java/src/com/android/intentresolver/ResolverListController.java +++ b/java/src/com/android/intentresolver/ResolverListController.java @@ -32,6 +32,8 @@ import android.os.UserHandle; import android.util.Log; import com.android.intentresolver.chooser.DisplayResolveInfo; +import com.android.intentresolver.model.AbstractResolverComparator; +import com.android.intentresolver.model.ResolverRankerServiceResolverComparator; import com.android.internal.annotations.VisibleForTesting; import java.util.ArrayList; @@ -264,19 +266,6 @@ public class ResolverListController { return listToReturn; } - private class ComputeCallback implements AbstractResolverComparator.AfterCompute { - - private CountDownLatch mFinishComputeSignal; - - public ComputeCallback(CountDownLatch finishComputeSignal) { - mFinishComputeSignal = finishComputeSignal; - } - - public void afterCompute () { - mFinishComputeSignal.countDown(); - } - } - private void compute(List<ResolverActivity.ResolvedComponentInfo> inputList) throws InterruptedException { if (mResolverComparator == null) { @@ -284,8 +273,7 @@ public class ResolverListController { return; } final CountDownLatch finishComputeSignal = new CountDownLatch(1); - ComputeCallback callback = new ComputeCallback(finishComputeSignal); - mResolverComparator.setCallBack(callback); + mResolverComparator.setCallBack(() -> finishComputeSignal.countDown()); mResolverComparator.compute(inputList); finishComputeSignal.await(); isComputed = true; diff --git a/java/src/com/android/intentresolver/AbstractResolverComparator.java b/java/src/com/android/intentresolver/model/AbstractResolverComparator.java index 07dcd664..271c6f98 100644 --- a/java/src/com/android/intentresolver/AbstractResolverComparator.java +++ b/java/src/com/android/intentresolver/model/AbstractResolverComparator.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.intentresolver; +package com.android.intentresolver.model; import android.app.usage.UsageStatsManager; import android.content.ComponentName; @@ -29,6 +29,8 @@ import android.os.Message; import android.os.UserHandle; import android.util.Log; +import com.android.intentresolver.ChooserActivityLogger; +import com.android.intentresolver.ResolverActivity; import com.android.intentresolver.ResolverActivity.ResolvedComponentInfo; import java.text.Collator; @@ -47,7 +49,7 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC private static final boolean DEBUG = true; private static final String TAG = "AbstractResolverComp"; - protected AfterCompute mAfterCompute; + protected Runnable mAfterCompute; protected final PackageManager mPm; protected final UsageStatsManager mUsm; protected String[] mAnnotations; @@ -129,15 +131,7 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC } } - /** - * Callback to be called when {@link #compute(List)} finishes. This signals to stop waiting. - */ - interface AfterCompute { - - void afterCompute(); - } - - void setCallBack(AfterCompute afterCompute) { + public void setCallBack(Runnable afterCompute) { mAfterCompute = afterCompute; } @@ -150,9 +144,9 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC } protected final void afterCompute() { - final AfterCompute afterCompute = mAfterCompute; + final Runnable afterCompute = mAfterCompute; if (afterCompute != null) { - afterCompute.afterCompute(); + afterCompute.run(); } } @@ -209,7 +203,7 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC * ResolvedComponentInfo} by {@link ComponentName}. {@link #beforeCompute()} will be called * before doing any computing. */ - final void compute(List<ResolvedComponentInfo> targets) { + public final void compute(List<ResolvedComponentInfo> targets) { beforeCompute(); doCompute(targets); } @@ -221,7 +215,7 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC * Returns the score that was calculated for the corresponding {@link ResolvedComponentInfo} * when {@link #compute(List)} was called before this. */ - abstract float getScore(ComponentName name); + public abstract float getScore(ComponentName name); /** Handles result message sent to mHandler. */ abstract void handleResultMessage(Message message); @@ -229,7 +223,7 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC /** * Reports to UsageStats what was chosen. */ - final void updateChooserCounts(String packageName, int userId, String action) { + public final void updateChooserCounts(String packageName, int userId, String action) { if (mUsm != null) { mUsm.reportChooserSelection(packageName, userId, mContentType, mAnnotations, action); } @@ -243,7 +237,7 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC * * @param componentName the component that the user clicked */ - void updateModel(ComponentName componentName) { + public void updateModel(ComponentName componentName) { } /** Called before {@link #doCompute(List)}. Sets up 500ms timeout. */ @@ -261,7 +255,7 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC * this call needs to happen at a different time during destroy, the method should be * overridden. */ - void destroy() { + public void destroy() { mHandler.removeMessages(RANKER_SERVICE_RESULT); mHandler.removeMessages(RANKER_RESULT_TIMEOUT); afterCompute(); diff --git a/java/src/com/android/intentresolver/AppPredictionServiceResolverComparator.java b/java/src/com/android/intentresolver/model/AppPredictionServiceResolverComparator.java index 9b9fc1c0..c6bb2b85 100644 --- a/java/src/com/android/intentresolver/AppPredictionServiceResolverComparator.java +++ b/java/src/com/android/intentresolver/model/AppPredictionServiceResolverComparator.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.intentresolver; +package com.android.intentresolver.model; import static android.app.prediction.AppTargetEvent.ACTION_LAUNCH; @@ -31,6 +31,7 @@ import android.os.Message; import android.os.UserHandle; import android.util.Log; +import com.android.intentresolver.ChooserActivityLogger; import com.android.intentresolver.ResolverActivity.ResolvedComponentInfo; import java.util.ArrayList; @@ -45,7 +46,7 @@ import java.util.concurrent.Executors; * disabled by returning an empty sorted target list, {@link AppPredictionServiceResolverComparator} * will fallback to using a {@link ResolverRankerServiceResolverComparator}. */ -class AppPredictionServiceResolverComparator extends AbstractResolverComparator { +public class AppPredictionServiceResolverComparator extends AbstractResolverComparator { private static final String TAG = "APSResolverComparator"; @@ -62,7 +63,7 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator private ResolverRankerServiceResolverComparator mResolverRankerService; private AppPredictionServiceComparatorModel mComparatorModel; - AppPredictionServiceResolverComparator( + public AppPredictionServiceResolverComparator( Context context, Intent intent, String referrerPackage, @@ -166,17 +167,17 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator } @Override - float getScore(ComponentName name) { + public float getScore(ComponentName name) { return mComparatorModel.getScore(name); } @Override - void updateModel(ComponentName componentName) { + public void updateModel(ComponentName componentName) { mComparatorModel.notifyOnTargetSelected(componentName); } @Override - void destroy() { + public void destroy() { if (mResolverRankerService != null) { mResolverRankerService.destroy(); mResolverRankerService = null; diff --git a/java/src/com/android/intentresolver/ResolverComparatorModel.java b/java/src/com/android/intentresolver/model/ResolverComparatorModel.java index 79160c84..3616a853 100644 --- a/java/src/com/android/intentresolver/ResolverComparatorModel.java +++ b/java/src/com/android/intentresolver/model/ResolverComparatorModel.java @@ -14,13 +14,12 @@ * limitations under the License. */ -package com.android.intentresolver; +package com.android.intentresolver.model; import android.content.ComponentName; import android.content.pm.ResolveInfo; import java.util.Comparator; -import java.util.List; /** * A ranking model for resolver targets, providing ordering and (optionally) numerical scoring. diff --git a/java/src/com/android/intentresolver/ResolverRankerServiceResolverComparator.java b/java/src/com/android/intentresolver/model/ResolverRankerServiceResolverComparator.java index be3e6f18..4382f109 100644 --- a/java/src/com/android/intentresolver/ResolverRankerServiceResolverComparator.java +++ b/java/src/com/android/intentresolver/model/ResolverRankerServiceResolverComparator.java @@ -15,7 +15,7 @@ */ -package com.android.intentresolver; +package com.android.intentresolver.model; import android.app.usage.UsageStats; import android.content.ComponentName; @@ -37,8 +37,8 @@ import android.service.resolver.ResolverRankerService; import android.service.resolver.ResolverTarget; import android.util.Log; +import com.android.intentresolver.ChooserActivityLogger; import com.android.intentresolver.ResolverActivity.ResolvedComponentInfo; - import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; @@ -54,7 +54,7 @@ import java.util.concurrent.TimeUnit; /** * Ranks and compares packages based on usage stats and uses the {@link ResolverRankerService}. */ -class ResolverRankerServiceResolverComparator extends AbstractResolverComparator { +public class ResolverRankerServiceResolverComparator extends AbstractResolverComparator { private static final String TAG = "RRSResolverComparator"; private static final boolean DEBUG = false; @@ -87,7 +87,7 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator private ResolverRankerServiceComparatorModel mComparatorModel; public ResolverRankerServiceResolverComparator(Context context, Intent intent, - String referrerPackage, AfterCompute afterCompute, + String referrerPackage, Runnable afterCompute, ChooserActivityLogger chooserActivityLogger) { super(context, intent); mCollator = Collator.getInstance(context.getResources().getConfiguration().locale); @@ -191,9 +191,9 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator if (mAction == null) { Log.d(TAG, "Action type is null"); } else { - Log.d(TAG, "Chooser Count of " + mAction + ":" + - target.name.getPackageName() + " is " + - Float.toString(chooserScore)); + Log.d(TAG, "Chooser Count of " + mAction + ":" + + target.name.getPackageName() + " is " + + Float.toString(chooserScore)); } } resolverTarget.setChooserScore(chooserScore); @@ -333,7 +333,7 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator private class ResolverRankerServiceConnection implements ServiceConnection { private final CountDownLatch mConnectSignal; - public ResolverRankerServiceConnection(CountDownLatch connectSignal) { + ResolverRankerServiceConnection(CountDownLatch connectSignal) { mConnectSignal = connectSignal; } @@ -424,8 +424,10 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator // adds select prob as the default values, according to a pre-trained Logistic Regression model. private void addDefaultSelectProbability(ResolverTarget target) { - float sum = 2.5543f * target.getLaunchScore() + 2.8412f * target.getTimeSpentScore() + - 0.269f * target.getRecencyScore() + 4.2222f * target.getChooserScore(); + float sum = (2.5543f * target.getLaunchScore()) + + (2.8412f * target.getTimeSpentScore()) + + (0.269f * target.getRecencyScore()) + + (4.2222f * target.getChooserScore()); target.setSelectProbability((float) (1.0 / (1.0 + Math.exp(1.6568f - sum)))); } @@ -440,8 +442,8 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator static boolean isPersistentProcess(ResolvedComponentInfo rci) { if (rci != null && rci.getCount() > 0) { - return (rci.getResolveInfoAt(0).activityInfo.applicationInfo.flags & - ApplicationInfo.FLAG_PERSISTENT) != 0; + int flags = rci.getResolveInfoAt(0).activityInfo.applicationInfo.flags; + return (flags & ApplicationInfo.FLAG_PERSISTENT) != 0; } return false; } diff --git a/java/tests/src/com/android/intentresolver/AbstractResolverComparatorTest.java b/java/tests/src/com/android/intentresolver/model/AbstractResolverComparatorTest.java index 36058a6c..448718cd 100644 --- a/java/tests/src/com/android/intentresolver/AbstractResolverComparatorTest.java +++ b/java/tests/src/com/android/intentresolver/model/AbstractResolverComparatorTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.intentresolver; +package com.android.intentresolver.model; import static junit.framework.Assert.assertEquals; @@ -27,6 +27,8 @@ import android.os.Message; import androidx.test.InstrumentationRegistry; +import com.android.intentresolver.ResolverActivity; + import org.junit.Test; import java.util.List; @@ -92,7 +94,7 @@ public class AbstractResolverComparatorTest { void doCompute(List<ResolverActivity.ResolvedComponentInfo> targets) {} @Override - float getScore(ComponentName name) { + public float getScore(ComponentName name) { return 0; } |