diff options
-rw-r--r-- | core/java/android/server/search/SearchManagerService.java | 24 | ||||
-rw-r--r-- | core/java/android/view/SimulatedTrackball.java | 32 | ||||
-rw-r--r-- | core/java/android/view/ViewRootImpl.java | 3 |
3 files changed, 27 insertions, 32 deletions
diff --git a/core/java/android/server/search/SearchManagerService.java b/core/java/android/server/search/SearchManagerService.java index 46f2723..1a10644 100644 --- a/core/java/android/server/search/SearchManagerService.java +++ b/core/java/android/server/search/SearchManagerService.java @@ -240,28 +240,8 @@ public class SearchManagerService extends ISearchManager.Stub { @Override public ComponentName getAssistIntent(int userHandle) { try { - if (userHandle != UserHandle.getCallingUserId()) { - // Requesting a different user, make sure that they have the permission - if (ActivityManager.checkComponentPermission( - android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, - Binder.getCallingUid(), -1, true) - == PackageManager.PERMISSION_GRANTED) { - // Translate to the current user id, if caller wasn't aware - if (userHandle == UserHandle.USER_CURRENT) { - long identity = Binder.clearCallingIdentity(); - userHandle = ActivityManagerNative.getDefault().getCurrentUser().id; - Binder.restoreCallingIdentity(identity); - } - } else { - String msg = "Permission Denial: " - + "Request to getAssistIntent for " + userHandle - + " but is calling from user " + UserHandle.getCallingUserId() - + "; this requires " - + android.Manifest.permission.INTERACT_ACROSS_USERS_FULL; - Slog.w(TAG, msg); - return null; - } - } + userHandle = ActivityManager.handleIncomingUser(Binder.getCallingPid(), + Binder.getCallingUid(), userHandle, true, false, "getAssistIntent", null); IPackageManager pm = AppGlobals.getPackageManager(); Intent assistIntent = new Intent(Intent.ACTION_ASSIST); ResolveInfo info = diff --git a/core/java/android/view/SimulatedTrackball.java b/core/java/android/view/SimulatedTrackball.java index 0eb197e..4ab557a 100644 --- a/core/java/android/view/SimulatedTrackball.java +++ b/core/java/android/view/SimulatedTrackball.java @@ -16,13 +16,15 @@ package android.view; +import android.app.SearchManager; import android.content.ActivityNotFoundException; +import android.content.Context; import android.content.Intent; import android.os.Handler; -import android.os.Handler.Callback; import android.os.Message; import android.os.SystemClock; import android.os.SystemProperties; +import android.os.UserHandle; import android.util.Log; /** @@ -30,6 +32,8 @@ import android.util.Log; * * @see ViewRootImpl */ + +//TODO: Make this class an internal class of ViewRootImpl.java class SimulatedTrackball { private static final String TAG = "SimulatedTrackball"; @@ -43,7 +47,6 @@ class SimulatedTrackball { private static final int MSG_FLICK = 313; // TODO: Pass touch slop from the input device private static final int TOUCH_SLOP = 30; - // The position of the previous touchpad event private float mLastTouchpadXPosition; private float mLastTouchpadYPosition; @@ -59,6 +62,8 @@ class SimulatedTrackball { // Did the swipe begin in a valid region private boolean mEdgeSwipePossible; + private final Context mContext; + // How quickly keys were sent; private int mKeySendRateMs = 0; private int mLastKeySent; @@ -92,7 +97,7 @@ class SimulatedTrackball { // How quickly the repeated events die off private float mFlickDecay; - public SimulatedTrackball() { + public SimulatedTrackball(Context context) { mDistancePerTick = SystemProperties.getInt("persist.vr_dist_tick", 64); mDistancePerTickSquared = mDistancePerTick * mDistancePerTick; mMaxRepeatDelay = SystemProperties.getInt("persist.vr_repeat_delay", 300); @@ -102,6 +107,8 @@ class SimulatedTrackball { "persist.sys.vr_flick_decay", "1.3")); mTouchSlop = TOUCH_SLOP; mTouchSlopSquared = mTouchSlop * mTouchSlop; + + mContext = context; } private final Handler mHandler = new Handler(true /*async*/) { @@ -167,12 +174,19 @@ class SimulatedTrackball { if (event.getY() < (event.getDevice().getMotionRange(MotionEvent.AXIS_Y).getMax() * .5) && mEdgeSwipePossible) { mEdgeSwipePossible = false; - Intent intent = new Intent("android.search.action.GLOBAL_SEARCH"); - intent.addCategory("android.intent.category.DEFAULT"); - try { - viewroot.mView.getContext().startActivity(intent); - } catch (ActivityNotFoundException e) { - Log.e(TAG,"Search activity not found."); + + Intent intent = + ((SearchManager)mContext.getSystemService(Context.SEARCH_SERVICE)) + .getAssistIntent(mContext, UserHandle.USER_CURRENT_OR_SELF); + if (intent != null) { + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + try { + mContext.startActivity(intent); + } catch (ActivityNotFoundException e){ + Log.e(TAG, "Could not start search activity"); + } + } else { + Log.e(TAG, "Could not find a search activity"); } } // Find the difference in position between the two most recent diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 27d770b..fe2cf0e 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -144,7 +144,7 @@ public final class ViewRootImpl implements ViewParent, final TrackballAxis mTrackballAxisX = new TrackballAxis(); final TrackballAxis mTrackballAxisY = new TrackballAxis(); - final SimulatedTrackball mSimulatedTrackball = new SimulatedTrackball(); + final SimulatedTrackball mSimulatedTrackball; int mLastJoystickXDirection; int mLastJoystickYDirection; @@ -385,6 +385,7 @@ public final class ViewRootImpl implements ViewParent, PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mAttachInfo.mScreenOn = powerManager.isScreenOn(); loadSystemProperties(); + mSimulatedTrackball = new SimulatedTrackball(context); } /** |