Loading core/java/com/android/internal/app/AbstractResolverComparator.java +77 −4 Original line number Diff line number Diff line Loading @@ -22,9 +22,14 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.UserHandle; import android.util.Log; import com.android.internal.app.ResolverActivity.ResolvedComponentInfo; import java.util.ArrayList; import java.util.Comparator; import java.util.List; Loading @@ -35,6 +40,8 @@ import java.util.List; abstract class AbstractResolverComparator implements Comparator<ResolvedComponentInfo> { private static final int NUM_OF_TOP_ANNOTATIONS_TO_USE = 3; private static final boolean DEBUG = false; private static final String TAG = "AbstractResolverComp"; private AfterCompute mAfterCompute; protected final PackageManager mPm; Loading @@ -47,6 +54,46 @@ abstract class AbstractResolverComparator implements Comparator<ResolvedComponen // can be null if mHttp == false or current user has no default browser package private final String mDefaultBrowserPackageName; // message types static final int RANKER_SERVICE_RESULT = 0; static final int RANKER_RESULT_TIMEOUT = 1; // timeout for establishing connections with a ResolverRankerService, collecting features and // predicting ranking scores. private static final int WATCHDOG_TIMEOUT_MILLIS = 500; protected final Handler mHandler = new Handler(Looper.getMainLooper()) { public void handleMessage(Message msg) { switch (msg.what) { case RANKER_SERVICE_RESULT: if (DEBUG) { Log.d(TAG, "RANKER_SERVICE_RESULT"); } if (mHandler.hasMessages(RANKER_RESULT_TIMEOUT)) { if (msg.obj != null) { handleResultMessage(msg); } else { Log.e(TAG, "Receiving null prediction results."); } mHandler.removeMessages(RANKER_RESULT_TIMEOUT); afterCompute(); } break; case RANKER_RESULT_TIMEOUT: if (DEBUG) { Log.d(TAG, "RANKER_RESULT_TIMEOUT; unbinding services"); } mHandler.removeMessages(RANKER_SERVICE_RESULT); afterCompute(); break; default: super.handleMessage(msg); } } }; AbstractResolverComparator(Context context, Intent intent) { String scheme = intent.getScheme(); mHttp = "http".equals(scheme) || "https".equals(scheme); Loading Loading @@ -142,9 +189,16 @@ abstract class AbstractResolverComparator implements Comparator<ResolvedComponen * #getScore(ComponentName)} or {@link #compare(Object, Object)}, in order to prepare the * comparator for those calls. Note that {@link #getScore(ComponentName)} uses {@link * ComponentName}, so the implementation will have to be prepared to identify a {@link * ResolvedComponentInfo} by {@link ComponentName}. * ResolvedComponentInfo} by {@link ComponentName}. {@link #beforeCompute()} will be called * before doing any computing. */ abstract void compute(List<ResolvedComponentInfo> targets); final void compute(List<ResolvedComponentInfo> targets) { beforeCompute(); doCompute(targets); } /** Implementation of compute called after {@link #beforeCompute()}. */ abstract void doCompute(List<ResolvedComponentInfo> targets); /** * Returns the score that was calculated for the corresponding {@link ResolvedComponentInfo} Loading @@ -152,6 +206,9 @@ abstract class AbstractResolverComparator implements Comparator<ResolvedComponen */ abstract float getScore(ComponentName name); /** Handles result message sent to mHandler. */ abstract void handleResultMessage(Message message); /** * Reports to UsageStats what was chosen. */ Loading @@ -172,10 +229,26 @@ abstract class AbstractResolverComparator implements Comparator<ResolvedComponen void updateModel(ComponentName componentName) { } /** Called before {@link #doCompute(List)}. Sets up 500ms timeout. */ void beforeCompute() { if (DEBUG) Log.d(TAG, "Setting watchdog timer for " + WATCHDOG_TIMEOUT_MILLIS + "ms"); if (mHandler == null) { Log.d(TAG, "Error: Handler is Null; Needs to be initialized."); return; } mHandler.sendEmptyMessageDelayed(RANKER_RESULT_TIMEOUT, WATCHDOG_TIMEOUT_MILLIS); } /** * Called when the {@link ResolverActivity} is destroyed. * Called when the {@link ResolverActivity} is destroyed. This calls {@link #afterCompute()}. If * this call needs to happen at a different time during destroy, the method should be * overridden. */ abstract void destroy(); void destroy() { mHandler.removeMessages(RANKER_SERVICE_RESULT); mHandler.removeMessages(RANKER_RESULT_TIMEOUT); afterCompute(); } private boolean isDefaultBrowser(ResolveInfo ri) { // It makes sense to prefer the default browser Loading core/java/com/android/internal/app/AppPredictionServiceResolverComparator.java +16 −11 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.ResolveInfo; import android.os.Message; import android.os.UserHandle; import android.view.textclassifier.Log; Loading Loading @@ -73,7 +74,7 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator } @Override void compute(List<ResolvedComponentInfo> targets) { void doCompute(List<ResolvedComponentInfo> targets) { List<AppTarget> appTargets = new ArrayList<>(); for (ResolvedComponentInfo target : targets) { appTargets.add(new AppTarget.Builder(new AppTargetId(target.name.flattenToString())) Loading @@ -82,12 +83,21 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator } mAppPredictor.sortTargets(appTargets, mContext.getMainExecutor(), sortedAppTargets -> { Message msg = Message.obtain(mHandler, RANKER_SERVICE_RESULT, sortedAppTargets); msg.sendToTarget(); }); } @Override void handleResultMessage(Message msg) { if (msg.what == RANKER_SERVICE_RESULT) { final List<AppTarget> sortedAppTargets = (List<AppTarget>) msg.obj; for (int i = 0; i < sortedAppTargets.size(); i++) { mTargetRanks.put(new ComponentName(sortedAppTargets.get(i).getPackageName(), sortedAppTargets.get(i).getClassName()), i); } afterCompute(); }); } } @Override Loading @@ -111,9 +121,4 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator .setClassName(componentName.getClassName()).build(), ACTION_LAUNCH).build()); } @Override void destroy() { // Do nothing. App Predictor destruction is handled by caller. } } core/java/com/android/internal/app/ResolverRankerServiceResolverComparator.java +33 −75 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.internal.app; import android.app.usage.UsageStats; import android.app.usage.UsageStatsManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; Loading @@ -28,9 +27,7 @@ import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.metrics.LogMaker; import android.os.Handler; import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.RemoteException; import android.os.UserHandle; Loading Loading @@ -67,10 +64,6 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator private static final float RECENCY_MULTIPLIER = 2.f; // message types private static final int RESOLVER_RANKER_SERVICE_RESULT = 0; private static final int RESOLVER_RANKER_RESULT_TIMEOUT = 1; // timeout for establishing connections with a ResolverRankerService. private static final int CONNECTION_COST_TIMEOUT_MILLIS = 200; // timeout for establishing connections with a ResolverRankerService, collecting features and Loading @@ -93,17 +86,27 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator private Context mContext; private CountDownLatch mConnectSignal; private final Handler mHandler = new Handler(Looper.getMainLooper()) { public void handleMessage(Message msg) { switch (msg.what) { case RESOLVER_RANKER_SERVICE_RESULT: if (DEBUG) { Log.d(TAG, "RESOLVER_RANKER_SERVICE_RESULT"); public ResolverRankerServiceResolverComparator(Context context, Intent intent, String referrerPackage, AfterCompute afterCompute) { super(context, intent); mCollator = Collator.getInstance(context.getResources().getConfiguration().locale); mReferrerPackage = referrerPackage; mContext = context; mCurrentTime = System.currentTimeMillis(); mSinceTime = mCurrentTime - USAGE_STATS_PERIOD; mStats = mUsm.queryAndAggregateUsageStats(mSinceTime, mCurrentTime); mAction = intent.getAction(); mRankerServiceName = new ComponentName(mContext, this.getClass()); setCallBack(afterCompute); } @Override public void handleResultMessage(Message msg) { if (msg.what != RANKER_SERVICE_RESULT) { return; } if (mHandler.hasMessages(RESOLVER_RANKER_RESULT_TIMEOUT)) { if (msg.obj != null) { final List<ResolverTarget> receivedTargets = (List<ResolverTarget>) msg.obj; final List<ResolverTarget> receivedTargets = (List<ResolverTarget>) msg.obj; if (receivedTargets != null && mTargets != null && receivedTargets.size() == mTargets.size()) { final int size = mTargets.size(); Loading @@ -122,48 +125,11 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator } else { Log.e(TAG, "Sizes of sent and received ResolverTargets diff."); } } else { Log.e(TAG, "Receiving null prediction results."); } mHandler.removeMessages(RESOLVER_RANKER_RESULT_TIMEOUT); afterCompute(); } break; case RESOLVER_RANKER_RESULT_TIMEOUT: if (DEBUG) { Log.d(TAG, "RESOLVER_RANKER_RESULT_TIMEOUT; unbinding services"); } mHandler.removeMessages(RESOLVER_RANKER_SERVICE_RESULT); afterCompute(); break; default: super.handleMessage(msg); } } }; public ResolverRankerServiceResolverComparator(Context context, Intent intent, String referrerPackage, AfterCompute afterCompute) { super(context, intent); mCollator = Collator.getInstance(context.getResources().getConfiguration().locale); mReferrerPackage = referrerPackage; mContext = context; mCurrentTime = System.currentTimeMillis(); mSinceTime = mCurrentTime - USAGE_STATS_PERIOD; mStats = mUsm.queryAndAggregateUsageStats(mSinceTime, mCurrentTime); mAction = intent.getAction(); mRankerServiceName = new ComponentName(mContext, this.getClass()); setCallBack(afterCompute); } // compute features for each target according to usage stats of targets. @Override public void compute(List<ResolvedComponentInfo> targets) { reset(); public void doCompute(List<ResolvedComponentInfo> targets) { final long recentSinceTime = mCurrentTime - RECENCY_TIME_PERIOD; float mostRecencyScore = 1.0f; Loading Loading @@ -322,8 +288,8 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator // unbind the service and clear unhandled messges. @Override public void destroy() { mHandler.removeMessages(RESOLVER_RANKER_SERVICE_RESULT); mHandler.removeMessages(RESOLVER_RANKER_RESULT_TIMEOUT); mHandler.removeMessages(RANKER_SERVICE_RESULT); mHandler.removeMessages(RANKER_RESULT_TIMEOUT); if (mConnection != null) { mContext.unbindService(mConnection); mConnection.destroy(); Loading Loading @@ -417,15 +383,6 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator return null; } // set a watchdog, to avoid waiting for ranking service for too long. private void startWatchDog(int timeOutLimit) { if (DEBUG) Log.d(TAG, "Setting watchdog timer for " + timeOutLimit + "ms"); if (mHandler == null) { Log.d(TAG, "Error: Handler is Null; Needs to be initialized."); } mHandler.sendEmptyMessageDelayed(RESOLVER_RANKER_RESULT_TIMEOUT, timeOutLimit); } private class ResolverRankerServiceConnection implements ServiceConnection { private final CountDownLatch mConnectSignal; Loading @@ -442,7 +399,7 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator } synchronized (mLock) { final Message msg = Message.obtain(); msg.what = RESOLVER_RANKER_SERVICE_RESULT; msg.what = RANKER_SERVICE_RESULT; msg.obj = targets; mHandler.sendMessage(msg); } Loading Loading @@ -477,12 +434,13 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator } } private void reset() { @Override void beforeCompute() { super.beforeCompute(); mTargetsDict.clear(); mTargets = null; mRankerServiceName = new ComponentName(mContext, this.getClass()); mResolvedRankerName = null; startWatchDog(WATCHDOG_TIMEOUT_MILLIS); initRanker(mContext); } Loading Loading
core/java/com/android/internal/app/AbstractResolverComparator.java +77 −4 Original line number Diff line number Diff line Loading @@ -22,9 +22,14 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.UserHandle; import android.util.Log; import com.android.internal.app.ResolverActivity.ResolvedComponentInfo; import java.util.ArrayList; import java.util.Comparator; import java.util.List; Loading @@ -35,6 +40,8 @@ import java.util.List; abstract class AbstractResolverComparator implements Comparator<ResolvedComponentInfo> { private static final int NUM_OF_TOP_ANNOTATIONS_TO_USE = 3; private static final boolean DEBUG = false; private static final String TAG = "AbstractResolverComp"; private AfterCompute mAfterCompute; protected final PackageManager mPm; Loading @@ -47,6 +54,46 @@ abstract class AbstractResolverComparator implements Comparator<ResolvedComponen // can be null if mHttp == false or current user has no default browser package private final String mDefaultBrowserPackageName; // message types static final int RANKER_SERVICE_RESULT = 0; static final int RANKER_RESULT_TIMEOUT = 1; // timeout for establishing connections with a ResolverRankerService, collecting features and // predicting ranking scores. private static final int WATCHDOG_TIMEOUT_MILLIS = 500; protected final Handler mHandler = new Handler(Looper.getMainLooper()) { public void handleMessage(Message msg) { switch (msg.what) { case RANKER_SERVICE_RESULT: if (DEBUG) { Log.d(TAG, "RANKER_SERVICE_RESULT"); } if (mHandler.hasMessages(RANKER_RESULT_TIMEOUT)) { if (msg.obj != null) { handleResultMessage(msg); } else { Log.e(TAG, "Receiving null prediction results."); } mHandler.removeMessages(RANKER_RESULT_TIMEOUT); afterCompute(); } break; case RANKER_RESULT_TIMEOUT: if (DEBUG) { Log.d(TAG, "RANKER_RESULT_TIMEOUT; unbinding services"); } mHandler.removeMessages(RANKER_SERVICE_RESULT); afterCompute(); break; default: super.handleMessage(msg); } } }; AbstractResolverComparator(Context context, Intent intent) { String scheme = intent.getScheme(); mHttp = "http".equals(scheme) || "https".equals(scheme); Loading Loading @@ -142,9 +189,16 @@ abstract class AbstractResolverComparator implements Comparator<ResolvedComponen * #getScore(ComponentName)} or {@link #compare(Object, Object)}, in order to prepare the * comparator for those calls. Note that {@link #getScore(ComponentName)} uses {@link * ComponentName}, so the implementation will have to be prepared to identify a {@link * ResolvedComponentInfo} by {@link ComponentName}. * ResolvedComponentInfo} by {@link ComponentName}. {@link #beforeCompute()} will be called * before doing any computing. */ abstract void compute(List<ResolvedComponentInfo> targets); final void compute(List<ResolvedComponentInfo> targets) { beforeCompute(); doCompute(targets); } /** Implementation of compute called after {@link #beforeCompute()}. */ abstract void doCompute(List<ResolvedComponentInfo> targets); /** * Returns the score that was calculated for the corresponding {@link ResolvedComponentInfo} Loading @@ -152,6 +206,9 @@ abstract class AbstractResolverComparator implements Comparator<ResolvedComponen */ abstract float getScore(ComponentName name); /** Handles result message sent to mHandler. */ abstract void handleResultMessage(Message message); /** * Reports to UsageStats what was chosen. */ Loading @@ -172,10 +229,26 @@ abstract class AbstractResolverComparator implements Comparator<ResolvedComponen void updateModel(ComponentName componentName) { } /** Called before {@link #doCompute(List)}. Sets up 500ms timeout. */ void beforeCompute() { if (DEBUG) Log.d(TAG, "Setting watchdog timer for " + WATCHDOG_TIMEOUT_MILLIS + "ms"); if (mHandler == null) { Log.d(TAG, "Error: Handler is Null; Needs to be initialized."); return; } mHandler.sendEmptyMessageDelayed(RANKER_RESULT_TIMEOUT, WATCHDOG_TIMEOUT_MILLIS); } /** * Called when the {@link ResolverActivity} is destroyed. * Called when the {@link ResolverActivity} is destroyed. This calls {@link #afterCompute()}. If * this call needs to happen at a different time during destroy, the method should be * overridden. */ abstract void destroy(); void destroy() { mHandler.removeMessages(RANKER_SERVICE_RESULT); mHandler.removeMessages(RANKER_RESULT_TIMEOUT); afterCompute(); } private boolean isDefaultBrowser(ResolveInfo ri) { // It makes sense to prefer the default browser Loading
core/java/com/android/internal/app/AppPredictionServiceResolverComparator.java +16 −11 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.ResolveInfo; import android.os.Message; import android.os.UserHandle; import android.view.textclassifier.Log; Loading Loading @@ -73,7 +74,7 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator } @Override void compute(List<ResolvedComponentInfo> targets) { void doCompute(List<ResolvedComponentInfo> targets) { List<AppTarget> appTargets = new ArrayList<>(); for (ResolvedComponentInfo target : targets) { appTargets.add(new AppTarget.Builder(new AppTargetId(target.name.flattenToString())) Loading @@ -82,12 +83,21 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator } mAppPredictor.sortTargets(appTargets, mContext.getMainExecutor(), sortedAppTargets -> { Message msg = Message.obtain(mHandler, RANKER_SERVICE_RESULT, sortedAppTargets); msg.sendToTarget(); }); } @Override void handleResultMessage(Message msg) { if (msg.what == RANKER_SERVICE_RESULT) { final List<AppTarget> sortedAppTargets = (List<AppTarget>) msg.obj; for (int i = 0; i < sortedAppTargets.size(); i++) { mTargetRanks.put(new ComponentName(sortedAppTargets.get(i).getPackageName(), sortedAppTargets.get(i).getClassName()), i); } afterCompute(); }); } } @Override Loading @@ -111,9 +121,4 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator .setClassName(componentName.getClassName()).build(), ACTION_LAUNCH).build()); } @Override void destroy() { // Do nothing. App Predictor destruction is handled by caller. } }
core/java/com/android/internal/app/ResolverRankerServiceResolverComparator.java +33 −75 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.internal.app; import android.app.usage.UsageStats; import android.app.usage.UsageStatsManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; Loading @@ -28,9 +27,7 @@ import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.metrics.LogMaker; import android.os.Handler; import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.RemoteException; import android.os.UserHandle; Loading Loading @@ -67,10 +64,6 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator private static final float RECENCY_MULTIPLIER = 2.f; // message types private static final int RESOLVER_RANKER_SERVICE_RESULT = 0; private static final int RESOLVER_RANKER_RESULT_TIMEOUT = 1; // timeout for establishing connections with a ResolverRankerService. private static final int CONNECTION_COST_TIMEOUT_MILLIS = 200; // timeout for establishing connections with a ResolverRankerService, collecting features and Loading @@ -93,17 +86,27 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator private Context mContext; private CountDownLatch mConnectSignal; private final Handler mHandler = new Handler(Looper.getMainLooper()) { public void handleMessage(Message msg) { switch (msg.what) { case RESOLVER_RANKER_SERVICE_RESULT: if (DEBUG) { Log.d(TAG, "RESOLVER_RANKER_SERVICE_RESULT"); public ResolverRankerServiceResolverComparator(Context context, Intent intent, String referrerPackage, AfterCompute afterCompute) { super(context, intent); mCollator = Collator.getInstance(context.getResources().getConfiguration().locale); mReferrerPackage = referrerPackage; mContext = context; mCurrentTime = System.currentTimeMillis(); mSinceTime = mCurrentTime - USAGE_STATS_PERIOD; mStats = mUsm.queryAndAggregateUsageStats(mSinceTime, mCurrentTime); mAction = intent.getAction(); mRankerServiceName = new ComponentName(mContext, this.getClass()); setCallBack(afterCompute); } @Override public void handleResultMessage(Message msg) { if (msg.what != RANKER_SERVICE_RESULT) { return; } if (mHandler.hasMessages(RESOLVER_RANKER_RESULT_TIMEOUT)) { if (msg.obj != null) { final List<ResolverTarget> receivedTargets = (List<ResolverTarget>) msg.obj; final List<ResolverTarget> receivedTargets = (List<ResolverTarget>) msg.obj; if (receivedTargets != null && mTargets != null && receivedTargets.size() == mTargets.size()) { final int size = mTargets.size(); Loading @@ -122,48 +125,11 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator } else { Log.e(TAG, "Sizes of sent and received ResolverTargets diff."); } } else { Log.e(TAG, "Receiving null prediction results."); } mHandler.removeMessages(RESOLVER_RANKER_RESULT_TIMEOUT); afterCompute(); } break; case RESOLVER_RANKER_RESULT_TIMEOUT: if (DEBUG) { Log.d(TAG, "RESOLVER_RANKER_RESULT_TIMEOUT; unbinding services"); } mHandler.removeMessages(RESOLVER_RANKER_SERVICE_RESULT); afterCompute(); break; default: super.handleMessage(msg); } } }; public ResolverRankerServiceResolverComparator(Context context, Intent intent, String referrerPackage, AfterCompute afterCompute) { super(context, intent); mCollator = Collator.getInstance(context.getResources().getConfiguration().locale); mReferrerPackage = referrerPackage; mContext = context; mCurrentTime = System.currentTimeMillis(); mSinceTime = mCurrentTime - USAGE_STATS_PERIOD; mStats = mUsm.queryAndAggregateUsageStats(mSinceTime, mCurrentTime); mAction = intent.getAction(); mRankerServiceName = new ComponentName(mContext, this.getClass()); setCallBack(afterCompute); } // compute features for each target according to usage stats of targets. @Override public void compute(List<ResolvedComponentInfo> targets) { reset(); public void doCompute(List<ResolvedComponentInfo> targets) { final long recentSinceTime = mCurrentTime - RECENCY_TIME_PERIOD; float mostRecencyScore = 1.0f; Loading Loading @@ -322,8 +288,8 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator // unbind the service and clear unhandled messges. @Override public void destroy() { mHandler.removeMessages(RESOLVER_RANKER_SERVICE_RESULT); mHandler.removeMessages(RESOLVER_RANKER_RESULT_TIMEOUT); mHandler.removeMessages(RANKER_SERVICE_RESULT); mHandler.removeMessages(RANKER_RESULT_TIMEOUT); if (mConnection != null) { mContext.unbindService(mConnection); mConnection.destroy(); Loading Loading @@ -417,15 +383,6 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator return null; } // set a watchdog, to avoid waiting for ranking service for too long. private void startWatchDog(int timeOutLimit) { if (DEBUG) Log.d(TAG, "Setting watchdog timer for " + timeOutLimit + "ms"); if (mHandler == null) { Log.d(TAG, "Error: Handler is Null; Needs to be initialized."); } mHandler.sendEmptyMessageDelayed(RESOLVER_RANKER_RESULT_TIMEOUT, timeOutLimit); } private class ResolverRankerServiceConnection implements ServiceConnection { private final CountDownLatch mConnectSignal; Loading @@ -442,7 +399,7 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator } synchronized (mLock) { final Message msg = Message.obtain(); msg.what = RESOLVER_RANKER_SERVICE_RESULT; msg.what = RANKER_SERVICE_RESULT; msg.obj = targets; mHandler.sendMessage(msg); } Loading Loading @@ -477,12 +434,13 @@ class ResolverRankerServiceResolverComparator extends AbstractResolverComparator } } private void reset() { @Override void beforeCompute() { super.beforeCompute(); mTargetsDict.clear(); mTargets = null; mRankerServiceName = new ComponentName(mContext, this.getClass()); mResolvedRankerName = null; startWatchDog(WATCHDOG_TIMEOUT_MILLIS); initRanker(mContext); } Loading