Loading core/java/com/android/internal/app/AbstractResolverComparator.java +35 −14 Original line number Diff line number Diff line Loading @@ -30,11 +30,16 @@ import android.os.UserHandle; import android.util.Log; import com.android.internal.app.ResolverActivity.ResolvedComponentInfo; import com.android.internal.app.chooser.TargetInfo; import com.google.android.collect.Lists; import java.text.Collator; import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Used to sort resolved activities in {@link ResolverListController}. Loading @@ -48,8 +53,8 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC private static final String TAG = "AbstractResolverComp"; protected AfterCompute mAfterCompute; protected final PackageManager mPm; protected final UsageStatsManager mUsm; protected final Map<UserHandle, PackageManager> mPmMap = new HashMap<>(); protected final Map<UserHandle, UsageStatsManager> mUsmMap = new HashMap<>(); protected String[] mAnnotations; protected String mContentType; Loading Loading @@ -98,14 +103,28 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC } }; public AbstractResolverComparator(Context context, Intent intent) { // context here refers to the activity calling this comparator. // targetUserSpace refers to the userSpace in which the targets to be ranked lie. public AbstractResolverComparator(Context launchedFromContext, Intent intent, UserHandle targetUserSpace) { this(launchedFromContext, intent, Lists.newArrayList(targetUserSpace)); } // context here refers to the activity calling this comparator. // targetUserSpaceList refers to the userSpace(s) in which the targets to be ranked lie. public AbstractResolverComparator(Context launchedFromContext, Intent intent, List<UserHandle> targetUserSpaceList) { String scheme = intent.getScheme(); mHttp = "http".equals(scheme) || "https".equals(scheme); mContentType = intent.getType(); getContentAnnotations(intent); mPm = context.getPackageManager(); mUsm = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE); mAzComparator = new AzInfoComparator(context); for (UserHandle user : targetUserSpaceList) { Context userContext = launchedFromContext.createContextAsUser(user, 0); mPmMap.put(user, userContext.getPackageManager()); mUsmMap.put(user, (UsageStatsManager) userContext.getSystemService(Context.USAGE_STATS_SERVICE)); } mAzComparator = new AzInfoComparator(launchedFromContext); } // get annotations of content from intent. Loading Loading @@ -208,8 +227,8 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC /** * Computes features for each target. This will be called before calls to {@link * #getScore(ComponentName)} or {@link #compare(Object, Object)}, in order to prepare the * comparator for those calls. Note that {@link #getScore(ComponentName)} uses {@link * #getScore(TargetInfo)} or {@link #compare(ResolveInfo, ResolveInfo)}, in order to prepare the * comparator for those calls. Note that {@link #getScore(TargetInfo)} uses {@link * ComponentName}, so the implementation will have to be prepared to identify a {@link * ResolvedComponentInfo} by {@link ComponentName}. {@link #beforeCompute()} will be called * before doing any computing. Loading @@ -226,7 +245,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); abstract float getScore(TargetInfo targetInfo); /** Handles result message sent to mHandler. */ abstract void handleResultMessage(Message message); Loading @@ -234,9 +253,11 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC /** * Reports to UsageStats what was chosen. */ final void updateChooserCounts(String packageName, int userId, String action) { if (mUsm != null) { mUsm.reportChooserSelection(packageName, userId, mContentType, mAnnotations, action); final void updateChooserCounts(String packageName, UserHandle user, String action) { if (mUsmMap.containsKey(user)) { mUsmMap.get(user) .reportChooserSelection(packageName, user.getIdentifier(), mContentType, mAnnotations, action); } } Loading @@ -246,9 +267,9 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC * <p>Default implementation does nothing, as we could have simple model that does not train * online. * * @param componentName the component that the user clicked * @param targetInfo the target that the user clicked. */ void updateModel(ComponentName componentName) { void updateModel(TargetInfo targetInfo) { } /** Called before {@link #doCompute(List)}. Sets up 500ms timeout. */ Loading core/java/com/android/internal/app/AppPredictionServiceResolverComparator.java +24 −17 Original line number Diff line number Diff line Loading @@ -31,6 +31,9 @@ import android.os.UserHandle; import android.util.Log; import com.android.internal.app.ResolverActivity.ResolvedComponentInfo; import com.android.internal.app.chooser.TargetInfo; import com.google.android.collect.Lists; import java.util.ArrayList; import java.util.Collections; Loading Loading @@ -70,7 +73,7 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator AppPredictor appPredictor, UserHandle user, ChooserActivityLogger chooserActivityLogger) { super(context, intent); super(context, intent, Lists.newArrayList(user)); mContext = context; mIntent = intent; mAppPredictor = appPredictor; Loading Loading @@ -99,13 +102,13 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator } @Override float getScore(ComponentName name) { return mComparatorModel.getScore(name); float getScore(TargetInfo targetInfo) { return mComparatorModel.getScore(targetInfo); } @Override void updateModel(ComponentName componentName) { mComparatorModel.notifyOnTargetSelected(componentName); void updateModel(TargetInfo targetInfo) { mComparatorModel.notifyOnTargetSelected(targetInfo); } @Override Loading Loading @@ -158,9 +161,12 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator private void setupFallbackModel(List<ResolvedComponentInfo> targets) { mResolverRankerService = new ResolverRankerServiceResolverComparator( mContext, mIntent, mReferrerPackage, mContext, mIntent, mReferrerPackage, () -> mHandler.sendEmptyMessage(RANKER_SERVICE_RESULT), getChooserActivityLogger()); getChooserActivityLogger(), mUser); mComparatorModel = mModelBuilder.buildFallbackModel(mResolverRankerService); mResolverRankerService.compute(targets); } Loading Loading @@ -224,13 +230,13 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator } @Override public float getScore(ComponentName componentName) { return comparator.getScore(componentName); public float getScore(TargetInfo targetInfo) { return comparator.getScore(targetInfo); } @Override public void notifyOnTargetSelected(ComponentName componentName) { comparator.updateModel(componentName); public void notifyOnTargetSelected(TargetInfo targetInfo) { comparator.updateModel(targetInfo); } }; } Loading Loading @@ -271,8 +277,8 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator } @Override public float getScore(ComponentName name) { Integer rank = mTargetRanks.get(name); public float getScore(TargetInfo targetInfo) { Integer rank = mTargetRanks.get(targetInfo.getResolvedComponentName()); if (rank == null) { Log.w(TAG, "Score requested for unknown component. Did you call compute yet?"); return 0f; Loading @@ -282,13 +288,14 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator } @Override public void notifyOnTargetSelected(ComponentName componentName) { public void notifyOnTargetSelected(TargetInfo targetInfo) { mAppPredictor.notifyAppTargetEvent( new AppTargetEvent.Builder( new AppTarget.Builder( new AppTargetId(componentName.toString()), componentName.getPackageName(), mUser) .setClassName(componentName.getClassName()).build(), new AppTargetId(targetInfo.getResolvedComponentName().toString()), targetInfo.getResolvedComponentName().getPackageName(), mUser) .setClassName(targetInfo.getResolvedComponentName() .getClassName()).build(), ACTION_LAUNCH).build()); } } Loading core/java/com/android/internal/app/ChooserActivity.java +16 −6 Original line number Diff line number Diff line Loading @@ -2268,9 +2268,11 @@ public class ChooserActivity extends ResolverActivity implements mChooserMultiProfilePagerAdapter.getActiveListAdapter(); if (currentListAdapter != null) { sendImpressionToAppPredictor(info, currentListAdapter); currentListAdapter.updateModel(info.getResolvedComponentName()); currentListAdapter.updateChooserCounts(ri.activityInfo.packageName, targetIntent.getAction()); currentListAdapter.updateModel(info); currentListAdapter.updateChooserCounts( ri.activityInfo.packageName, targetIntent.getAction(), ri.userHandle); } if (DEBUG) { Log.d(TAG, "ResolveInfo Package is " + ri.activityInfo.packageName); Loading Loading @@ -2395,7 +2397,10 @@ public class ChooserActivity extends ResolverActivity implements */ @Nullable private AppPredictor getAppPredictorForShareActivitiesIfEnabled(UserHandle userHandle) { return USE_PREDICTION_MANAGER_FOR_SHARE_ACTIVITIES ? createAppPredictor(userHandle) : null; // We cannot use APS service when clone profile is present as APS service cannot sort // cross profile targets as of now. return USE_PREDICTION_MANAGER_FOR_SHARE_ACTIVITIES && getCloneProfileUserHandle() == null ? createAppPredictor(userHandle) : null; } void onRefinementResult(TargetInfo selectedTarget, Intent matchingIntent) { Loading Loading @@ -2548,8 +2553,13 @@ public class ChooserActivity extends ResolverActivity implements getReferrerPackageName(), appPredictor, userHandle, getChooserActivityLogger()); } else { resolverComparator = new ResolverRankerServiceResolverComparator(this, getTargetIntent(), getReferrerPackageName(), null, getChooserActivityLogger()); new ResolverRankerServiceResolverComparator( this, getTargetIntent(), getReferrerPackageName(), null, getChooserActivityLogger(), getResolverRankerServiceUserHandleList(userHandle)); } UserHandle queryIntentsUser = getQueryIntentsUser(userHandle); Loading core/java/com/android/internal/app/ResolverActivity.java +26 −0 Original line number Diff line number Diff line Loading @@ -1617,6 +1617,14 @@ public class ResolverActivity extends Activity implements @VisibleForTesting protected ResolverListController createListController(UserHandle userHandle) { UserHandle queryIntentsUser = getQueryIntentsUser(userHandle); ResolverRankerServiceResolverComparator resolverComparator = new ResolverRankerServiceResolverComparator( this, getTargetIntent(), getReferrerPackageName(), null, null, getResolverRankerServiceUserHandleList(userHandle)); return new ResolverListController( this, mPm, Loading @@ -1624,6 +1632,7 @@ public class ResolverActivity extends Activity implements getReferrerPackageName(), mLaunchedFromUid, userHandle, resolverComparator, queryIntentsUser); } Loading Loading @@ -2534,4 +2543,21 @@ public class ResolverActivity extends Activity implements UserHandle predictedHandle) { return resolveInfo.userHandle; } /** * Returns the {@link List} of {@link UserHandle} to pass on to the * {@link ResolverRankerServiceResolverComparator} as per the provided {@code userHandle}. */ protected final List<UserHandle> getResolverRankerServiceUserHandleList(UserHandle userHandle) { List<UserHandle> userList = new ArrayList<>(); userList.add(userHandle); // Add clonedProfileUserHandle to the list only if we are: // a. Building the Personal Tab. // b. CloneProfile exists on the device. if (userHandle.equals(getPersonalProfileUserHandle()) && getCloneProfileUserHandle() != null) { userList.add(getCloneProfileUserHandle()); } return userList; } } core/java/com/android/internal/app/ResolverComparatorModel.java +4 −4 Original line number Diff line number Diff line Loading @@ -16,11 +16,11 @@ package com.android.internal.app; import android.content.ComponentName; import android.content.pm.ResolveInfo; import com.android.internal.app.chooser.TargetInfo; import java.util.Comparator; import java.util.List; /** * A ranking model for resolver targets, providing ordering and (optionally) numerical scoring. Loading @@ -45,7 +45,7 @@ interface ResolverComparatorModel { * likelihood that the user will select that component as the target. Implementations that don't * assign numerical scores are <em>recommended</em> to return a value of 0 for all components. */ float getScore(ComponentName name); float getScore(TargetInfo targetInfo); /** * Notify the model that the user selected a target. (Models may log this information, use it as Loading @@ -53,5 +53,5 @@ interface ResolverComparatorModel { * {@code ResolverComparatorModel} instance is immutable, clients will need to get an up-to-date * instance in order to see any changes in the ranking that might result from this feedback. */ void notifyOnTargetSelected(ComponentName componentName); void notifyOnTargetSelected(TargetInfo targetInfo); } Loading
core/java/com/android/internal/app/AbstractResolverComparator.java +35 −14 Original line number Diff line number Diff line Loading @@ -30,11 +30,16 @@ import android.os.UserHandle; import android.util.Log; import com.android.internal.app.ResolverActivity.ResolvedComponentInfo; import com.android.internal.app.chooser.TargetInfo; import com.google.android.collect.Lists; import java.text.Collator; import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Used to sort resolved activities in {@link ResolverListController}. Loading @@ -48,8 +53,8 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC private static final String TAG = "AbstractResolverComp"; protected AfterCompute mAfterCompute; protected final PackageManager mPm; protected final UsageStatsManager mUsm; protected final Map<UserHandle, PackageManager> mPmMap = new HashMap<>(); protected final Map<UserHandle, UsageStatsManager> mUsmMap = new HashMap<>(); protected String[] mAnnotations; protected String mContentType; Loading Loading @@ -98,14 +103,28 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC } }; public AbstractResolverComparator(Context context, Intent intent) { // context here refers to the activity calling this comparator. // targetUserSpace refers to the userSpace in which the targets to be ranked lie. public AbstractResolverComparator(Context launchedFromContext, Intent intent, UserHandle targetUserSpace) { this(launchedFromContext, intent, Lists.newArrayList(targetUserSpace)); } // context here refers to the activity calling this comparator. // targetUserSpaceList refers to the userSpace(s) in which the targets to be ranked lie. public AbstractResolverComparator(Context launchedFromContext, Intent intent, List<UserHandle> targetUserSpaceList) { String scheme = intent.getScheme(); mHttp = "http".equals(scheme) || "https".equals(scheme); mContentType = intent.getType(); getContentAnnotations(intent); mPm = context.getPackageManager(); mUsm = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE); mAzComparator = new AzInfoComparator(context); for (UserHandle user : targetUserSpaceList) { Context userContext = launchedFromContext.createContextAsUser(user, 0); mPmMap.put(user, userContext.getPackageManager()); mUsmMap.put(user, (UsageStatsManager) userContext.getSystemService(Context.USAGE_STATS_SERVICE)); } mAzComparator = new AzInfoComparator(launchedFromContext); } // get annotations of content from intent. Loading Loading @@ -208,8 +227,8 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC /** * Computes features for each target. This will be called before calls to {@link * #getScore(ComponentName)} or {@link #compare(Object, Object)}, in order to prepare the * comparator for those calls. Note that {@link #getScore(ComponentName)} uses {@link * #getScore(TargetInfo)} or {@link #compare(ResolveInfo, ResolveInfo)}, in order to prepare the * comparator for those calls. Note that {@link #getScore(TargetInfo)} uses {@link * ComponentName}, so the implementation will have to be prepared to identify a {@link * ResolvedComponentInfo} by {@link ComponentName}. {@link #beforeCompute()} will be called * before doing any computing. Loading @@ -226,7 +245,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); abstract float getScore(TargetInfo targetInfo); /** Handles result message sent to mHandler. */ abstract void handleResultMessage(Message message); Loading @@ -234,9 +253,11 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC /** * Reports to UsageStats what was chosen. */ final void updateChooserCounts(String packageName, int userId, String action) { if (mUsm != null) { mUsm.reportChooserSelection(packageName, userId, mContentType, mAnnotations, action); final void updateChooserCounts(String packageName, UserHandle user, String action) { if (mUsmMap.containsKey(user)) { mUsmMap.get(user) .reportChooserSelection(packageName, user.getIdentifier(), mContentType, mAnnotations, action); } } Loading @@ -246,9 +267,9 @@ public abstract class AbstractResolverComparator implements Comparator<ResolvedC * <p>Default implementation does nothing, as we could have simple model that does not train * online. * * @param componentName the component that the user clicked * @param targetInfo the target that the user clicked. */ void updateModel(ComponentName componentName) { void updateModel(TargetInfo targetInfo) { } /** Called before {@link #doCompute(List)}. Sets up 500ms timeout. */ Loading
core/java/com/android/internal/app/AppPredictionServiceResolverComparator.java +24 −17 Original line number Diff line number Diff line Loading @@ -31,6 +31,9 @@ import android.os.UserHandle; import android.util.Log; import com.android.internal.app.ResolverActivity.ResolvedComponentInfo; import com.android.internal.app.chooser.TargetInfo; import com.google.android.collect.Lists; import java.util.ArrayList; import java.util.Collections; Loading Loading @@ -70,7 +73,7 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator AppPredictor appPredictor, UserHandle user, ChooserActivityLogger chooserActivityLogger) { super(context, intent); super(context, intent, Lists.newArrayList(user)); mContext = context; mIntent = intent; mAppPredictor = appPredictor; Loading Loading @@ -99,13 +102,13 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator } @Override float getScore(ComponentName name) { return mComparatorModel.getScore(name); float getScore(TargetInfo targetInfo) { return mComparatorModel.getScore(targetInfo); } @Override void updateModel(ComponentName componentName) { mComparatorModel.notifyOnTargetSelected(componentName); void updateModel(TargetInfo targetInfo) { mComparatorModel.notifyOnTargetSelected(targetInfo); } @Override Loading Loading @@ -158,9 +161,12 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator private void setupFallbackModel(List<ResolvedComponentInfo> targets) { mResolverRankerService = new ResolverRankerServiceResolverComparator( mContext, mIntent, mReferrerPackage, mContext, mIntent, mReferrerPackage, () -> mHandler.sendEmptyMessage(RANKER_SERVICE_RESULT), getChooserActivityLogger()); getChooserActivityLogger(), mUser); mComparatorModel = mModelBuilder.buildFallbackModel(mResolverRankerService); mResolverRankerService.compute(targets); } Loading Loading @@ -224,13 +230,13 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator } @Override public float getScore(ComponentName componentName) { return comparator.getScore(componentName); public float getScore(TargetInfo targetInfo) { return comparator.getScore(targetInfo); } @Override public void notifyOnTargetSelected(ComponentName componentName) { comparator.updateModel(componentName); public void notifyOnTargetSelected(TargetInfo targetInfo) { comparator.updateModel(targetInfo); } }; } Loading Loading @@ -271,8 +277,8 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator } @Override public float getScore(ComponentName name) { Integer rank = mTargetRanks.get(name); public float getScore(TargetInfo targetInfo) { Integer rank = mTargetRanks.get(targetInfo.getResolvedComponentName()); if (rank == null) { Log.w(TAG, "Score requested for unknown component. Did you call compute yet?"); return 0f; Loading @@ -282,13 +288,14 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator } @Override public void notifyOnTargetSelected(ComponentName componentName) { public void notifyOnTargetSelected(TargetInfo targetInfo) { mAppPredictor.notifyAppTargetEvent( new AppTargetEvent.Builder( new AppTarget.Builder( new AppTargetId(componentName.toString()), componentName.getPackageName(), mUser) .setClassName(componentName.getClassName()).build(), new AppTargetId(targetInfo.getResolvedComponentName().toString()), targetInfo.getResolvedComponentName().getPackageName(), mUser) .setClassName(targetInfo.getResolvedComponentName() .getClassName()).build(), ACTION_LAUNCH).build()); } } Loading
core/java/com/android/internal/app/ChooserActivity.java +16 −6 Original line number Diff line number Diff line Loading @@ -2268,9 +2268,11 @@ public class ChooserActivity extends ResolverActivity implements mChooserMultiProfilePagerAdapter.getActiveListAdapter(); if (currentListAdapter != null) { sendImpressionToAppPredictor(info, currentListAdapter); currentListAdapter.updateModel(info.getResolvedComponentName()); currentListAdapter.updateChooserCounts(ri.activityInfo.packageName, targetIntent.getAction()); currentListAdapter.updateModel(info); currentListAdapter.updateChooserCounts( ri.activityInfo.packageName, targetIntent.getAction(), ri.userHandle); } if (DEBUG) { Log.d(TAG, "ResolveInfo Package is " + ri.activityInfo.packageName); Loading Loading @@ -2395,7 +2397,10 @@ public class ChooserActivity extends ResolverActivity implements */ @Nullable private AppPredictor getAppPredictorForShareActivitiesIfEnabled(UserHandle userHandle) { return USE_PREDICTION_MANAGER_FOR_SHARE_ACTIVITIES ? createAppPredictor(userHandle) : null; // We cannot use APS service when clone profile is present as APS service cannot sort // cross profile targets as of now. return USE_PREDICTION_MANAGER_FOR_SHARE_ACTIVITIES && getCloneProfileUserHandle() == null ? createAppPredictor(userHandle) : null; } void onRefinementResult(TargetInfo selectedTarget, Intent matchingIntent) { Loading Loading @@ -2548,8 +2553,13 @@ public class ChooserActivity extends ResolverActivity implements getReferrerPackageName(), appPredictor, userHandle, getChooserActivityLogger()); } else { resolverComparator = new ResolverRankerServiceResolverComparator(this, getTargetIntent(), getReferrerPackageName(), null, getChooserActivityLogger()); new ResolverRankerServiceResolverComparator( this, getTargetIntent(), getReferrerPackageName(), null, getChooserActivityLogger(), getResolverRankerServiceUserHandleList(userHandle)); } UserHandle queryIntentsUser = getQueryIntentsUser(userHandle); Loading
core/java/com/android/internal/app/ResolverActivity.java +26 −0 Original line number Diff line number Diff line Loading @@ -1617,6 +1617,14 @@ public class ResolverActivity extends Activity implements @VisibleForTesting protected ResolverListController createListController(UserHandle userHandle) { UserHandle queryIntentsUser = getQueryIntentsUser(userHandle); ResolverRankerServiceResolverComparator resolverComparator = new ResolverRankerServiceResolverComparator( this, getTargetIntent(), getReferrerPackageName(), null, null, getResolverRankerServiceUserHandleList(userHandle)); return new ResolverListController( this, mPm, Loading @@ -1624,6 +1632,7 @@ public class ResolverActivity extends Activity implements getReferrerPackageName(), mLaunchedFromUid, userHandle, resolverComparator, queryIntentsUser); } Loading Loading @@ -2534,4 +2543,21 @@ public class ResolverActivity extends Activity implements UserHandle predictedHandle) { return resolveInfo.userHandle; } /** * Returns the {@link List} of {@link UserHandle} to pass on to the * {@link ResolverRankerServiceResolverComparator} as per the provided {@code userHandle}. */ protected final List<UserHandle> getResolverRankerServiceUserHandleList(UserHandle userHandle) { List<UserHandle> userList = new ArrayList<>(); userList.add(userHandle); // Add clonedProfileUserHandle to the list only if we are: // a. Building the Personal Tab. // b. CloneProfile exists on the device. if (userHandle.equals(getPersonalProfileUserHandle()) && getCloneProfileUserHandle() != null) { userList.add(getCloneProfileUserHandle()); } return userList; } }
core/java/com/android/internal/app/ResolverComparatorModel.java +4 −4 Original line number Diff line number Diff line Loading @@ -16,11 +16,11 @@ package com.android.internal.app; import android.content.ComponentName; import android.content.pm.ResolveInfo; import com.android.internal.app.chooser.TargetInfo; import java.util.Comparator; import java.util.List; /** * A ranking model for resolver targets, providing ordering and (optionally) numerical scoring. Loading @@ -45,7 +45,7 @@ interface ResolverComparatorModel { * likelihood that the user will select that component as the target. Implementations that don't * assign numerical scores are <em>recommended</em> to return a value of 0 for all components. */ float getScore(ComponentName name); float getScore(TargetInfo targetInfo); /** * Notify the model that the user selected a target. (Models may log this information, use it as Loading @@ -53,5 +53,5 @@ interface ResolverComparatorModel { * {@code ResolverComparatorModel} instance is immutable, clients will need to get an up-to-date * instance in order to see any changes in the ranking that might result from this feedback. */ void notifyOnTargetSelected(ComponentName componentName); void notifyOnTargetSelected(TargetInfo targetInfo); }