summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
author Joshua Trask <joshtrask@google.com> 2022-10-25 15:44:34 -0400
committer Joshua Trask <joshtrask@google.com> 2022-11-07 21:56:48 +0000
commitdcb7c99e338b28d9c1d820d9f4f459518d1cbc35 (patch)
treeb3b6185e0a2d7f02c88401482bf30e94a777e430 /java
parent25d6a129ba6b8f805e520584af1c0cc82b8c0b6a (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')
-rw-r--r--java/src/com/android/intentresolver/ChooserActivity.java3
-rw-r--r--java/src/com/android/intentresolver/ResolverActivity.java5
-rw-r--r--java/src/com/android/intentresolver/ResolverListController.java18
-rw-r--r--java/src/com/android/intentresolver/model/AbstractResolverComparator.java (renamed from java/src/com/android/intentresolver/AbstractResolverComparator.java)30
-rw-r--r--java/src/com/android/intentresolver/model/AppPredictionServiceResolverComparator.java (renamed from java/src/com/android/intentresolver/AppPredictionServiceResolverComparator.java)13
-rw-r--r--java/src/com/android/intentresolver/model/ResolverComparatorModel.java (renamed from java/src/com/android/intentresolver/ResolverComparatorModel.java)3
-rw-r--r--java/src/com/android/intentresolver/model/ResolverRankerServiceResolverComparator.java (renamed from java/src/com/android/intentresolver/ResolverRankerServiceResolverComparator.java)26
-rw-r--r--java/tests/src/com/android/intentresolver/model/AbstractResolverComparatorTest.java (renamed from java/tests/src/com/android/intentresolver/AbstractResolverComparatorTest.java)6
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;
}