Merge "Make ASSIST launch VIS and add a new keycode for TV (ALL_APPS)" into oc-mr1-dev

This commit is contained in:
Sujith Ramakrishnan
2017-09-08 04:25:15 +00:00
committed by Android (Google) Code Review
5 changed files with 67 additions and 28 deletions

View File

@@ -804,8 +804,11 @@ public class KeyEvent extends InputEvent implements Parcelable {
public static final int KEYCODE_SYSTEM_NAVIGATION_LEFT = 282;
/** Key code constant: Consumed by the system for navigation right */
public static final int KEYCODE_SYSTEM_NAVIGATION_RIGHT = 283;
/** Key code constant: Show all apps
* @hide */
public static final int KEYCODE_ALL_APPS = 284;
private static final int LAST_KEYCODE = KEYCODE_SYSTEM_NAVIGATION_RIGHT;
private static final int LAST_KEYCODE = KEYCODE_ALL_APPS;
// NOTE: If you add a new keycode here you must also add it to:
// isSystem()

View File

@@ -1891,6 +1891,7 @@
<enum name="KEYCODE_SYSTEM_NAVIGATION_DOWN" value="281" />
<enum name="KEYCODE_SYSTEM_NAVIGATION_LEFT" value="282" />
<enum name="KEYCODE_SYSTEM_NAVIGATION_RIGHT" value="283" />
<enum name="KEYCODE_ALL_APPS" value="284" />
</attr>
<!-- ***************************************************************** -->

View File

@@ -13231,7 +13231,6 @@ public class ActivityManagerService extends IActivityManager.Stub
return;
}
}
// We are now ready to launch the assist activity.
IResultReceiver sendReceiver = null;
Bundle sendBundle = null;
@@ -13261,17 +13260,24 @@ public class ActivityManagerService extends IActivityManager.Stub
return;
}
long ident = Binder.clearCallingIdentity();
final long ident = Binder.clearCallingIdentity();
try {
pae.intent.replaceExtras(pae.extras);
pae.intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_SINGLE_TOP
| Intent.FLAG_ACTIVITY_CLEAR_TOP);
closeSystemDialogs("assist");
try {
mContext.startActivityAsUser(pae.intent, new UserHandle(pae.userHandle));
} catch (ActivityNotFoundException e) {
Slog.w(TAG, "No activity to handle assist action.", e);
if (TextUtils.equals(pae.intent.getAction(),
android.service.voice.VoiceInteractionService.SERVICE_INTERFACE)) {
pae.intent.putExtras(pae.extras);
mContext.startServiceAsUser(pae.intent, new UserHandle(pae.userHandle));
} else {
pae.intent.replaceExtras(pae.extras);
pae.intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_SINGLE_TOP
| Intent.FLAG_ACTIVITY_CLEAR_TOP);
closeSystemDialogs("assist");
try {
mContext.startActivityAsUser(pae.intent, new UserHandle(pae.userHandle));
} catch (ActivityNotFoundException e) {
Slog.w(TAG, "No activity to handle assist action.", e);
}
}
} finally {
Binder.restoreCallingIdentity(ident);

View File

@@ -829,6 +829,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
private static final int MSG_ACCESSIBILITY_TV = 23;
private static final int MSG_DISPATCH_BACK_KEY_TO_AUTOFILL = 24;
private static final int MSG_SYSTEM_KEY_PRESS = 25;
private static final int MSG_HANDLE_ALL_APPS = 26;
private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_STATUS = 0;
private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_NAVIGATION = 1;
@@ -921,6 +922,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
case MSG_SYSTEM_KEY_PRESS:
sendSystemKeyToStatusBar(msg.arg1);
break;
case MSG_HANDLE_ALL_APPS:
launchAllAppsAction();
break;
}
}
}
@@ -1801,6 +1805,17 @@ public class PhoneWindowManager implements WindowManagerPolicy {
private void launchAllAppsAction() {
Intent intent = new Intent(Intent.ACTION_ALL_APPS);
if (mHasFeatureLeanback) {
final PackageManager pm = mContext.getPackageManager();
Intent intentLauncher = new Intent(Intent.ACTION_MAIN);
intentLauncher.addCategory(Intent.CATEGORY_HOME);
ResolveInfo resolveInfo = pm.resolveActivityAsUser(intentLauncher,
PackageManager.MATCH_SYSTEM_ONLY,
mCurrentUserId);
if (resolveInfo != null) {
intent.setPackage(resolveInfo.activityInfo.packageName);
}
}
startActivityAsUser(intent, UserHandle.CURRENT);
}
@@ -3620,6 +3635,14 @@ public class PhoneWindowManager implements WindowManagerPolicy {
return -1;
} else if (mHasFeatureLeanback && interceptAccessibilityGestureTv(keyCode, down)) {
return -1;
} else if (keyCode == KeyEvent.KEYCODE_ALL_APPS) {
if (!down) {
mHandler.removeMessages(MSG_HANDLE_ALL_APPS);
Message msg = mHandler.obtainMessage(MSG_HANDLE_ALL_APPS);
msg.setAsynchronous(true);
msg.sendToTarget();
}
return -1;
}
// Toggle Caps Lock on META-ALT.

View File

@@ -17,7 +17,6 @@
package com.android.server.search;
import android.app.ActivityManager;
import android.app.AppGlobals;
import android.app.IActivityManager;
import android.app.ISearchManager;
import android.app.SearchManager;
@@ -26,7 +25,6 @@ import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.database.ContentObserver;
@@ -37,6 +35,7 @@ import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
import android.service.voice.VoiceInteractionService;
import android.util.Log;
import android.util.SparseArray;
@@ -272,24 +271,25 @@ public class SearchManagerService extends ISearchManager.Stub {
}
}
// Check and return VIS component
private ComponentName getLegacyAssistComponent(int userHandle) {
try {
userHandle = ActivityManager.handleIncomingUser(Binder.getCallingPid(),
Binder.getCallingUid(), userHandle, true, false, "getLegacyAssistComponent", null);
IPackageManager pm = AppGlobals.getPackageManager();
Intent assistIntent = new Intent(Intent.ACTION_ASSIST);
ResolveInfo info =
pm.resolveIntent(assistIntent,
assistIntent.resolveTypeIfNeeded(mContext.getContentResolver()),
PackageManager.MATCH_DEFAULT_ONLY, userHandle);
if (info != null) {
Binder.getCallingUid(), userHandle, true, false, "getLegacyAssistComponent",
null);
PackageManager pm = mContext.getPackageManager();
Intent intentAssistProbe = new Intent(VoiceInteractionService.SERVICE_INTERFACE);
List<ResolveInfo> infoListVis = pm.queryIntentServicesAsUser(intentAssistProbe,
PackageManager.MATCH_SYSTEM_ONLY, userHandle);
if (infoListVis == null || infoListVis.isEmpty()) {
return null;
} else {
ResolveInfo rInfo = infoListVis.get(0);
return new ComponentName(
info.activityInfo.applicationInfo.packageName,
info.activityInfo.name);
rInfo.serviceInfo.applicationInfo.packageName,
rInfo.serviceInfo.name);
}
} catch (RemoteException re) {
// Local call
Log.e(TAG, "RemoteException in getLegacyAssistComponent: " + re);
} catch (Exception e) {
Log.e(TAG, "Exception in getLegacyAssistComponent: " + e);
}
@@ -304,9 +304,15 @@ public class SearchManagerService extends ISearchManager.Stub {
}
long ident = Binder.clearCallingIdentity();
try {
Intent intent = new Intent(Intent.ACTION_ASSIST);
Intent intent = new Intent(VoiceInteractionService.SERVICE_INTERFACE);
intent.setComponent(comp);
IActivityManager am = ActivityManager.getService();
if (args != null) {
args.putInt(Intent.EXTRA_KEY_EVENT, android.view.KeyEvent.KEYCODE_ASSIST);
}
intent.putExtras(args);
return am.launchAssistIntent(intent, ActivityManager.ASSIST_CONTEXT_BASIC, hint,
userHandle, args);
} catch (RemoteException e) {