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

This commit is contained in:
Sujith Ramakrishnan
2017-09-07 00:09:21 +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; public static final int KEYCODE_SYSTEM_NAVIGATION_LEFT = 282;
/** Key code constant: Consumed by the system for navigation right */ /** Key code constant: Consumed by the system for navigation right */
public static final int KEYCODE_SYSTEM_NAVIGATION_RIGHT = 283; 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: // NOTE: If you add a new keycode here you must also add it to:
// isSystem() // isSystem()

View File

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

View File

@@ -13110,7 +13110,6 @@ public class ActivityManagerService extends IActivityManager.Stub
return; return;
} }
} }
// We are now ready to launch the assist activity. // We are now ready to launch the assist activity.
IResultReceiver sendReceiver = null; IResultReceiver sendReceiver = null;
Bundle sendBundle = null; Bundle sendBundle = null;
@@ -13140,18 +13139,25 @@ public class ActivityManagerService extends IActivityManager.Stub
return; return;
} }
long ident = Binder.clearCallingIdentity(); final long ident = Binder.clearCallingIdentity();
try { try {
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.replaceExtras(pae.extras);
pae.intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK pae.intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP
| Intent.FLAG_ACTIVITY_CLEAR_TOP); | Intent.FLAG_ACTIVITY_CLEAR_TOP);
closeSystemDialogs("assist"); closeSystemDialogs("assist");
try { try {
mContext.startActivityAsUser(pae.intent, new UserHandle(pae.userHandle)); mContext.startActivityAsUser(pae.intent, new UserHandle(pae.userHandle));
} catch (ActivityNotFoundException e) { } catch (ActivityNotFoundException e) {
Slog.w(TAG, "No activity to handle assist action.", e); Slog.w(TAG, "No activity to handle assist action.", e);
} }
}
} finally { } finally {
Binder.restoreCallingIdentity(ident); Binder.restoreCallingIdentity(ident);
} }

View File

@@ -835,6 +835,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
private static final int MSG_BUGREPORT_TV = 22; private static final int MSG_BUGREPORT_TV = 22;
private static final int MSG_ACCESSIBILITY_TV = 23; private static final int MSG_ACCESSIBILITY_TV = 23;
private static final int MSG_DISPATCH_BACK_KEY_TO_AUTOFILL = 24; private static final int MSG_DISPATCH_BACK_KEY_TO_AUTOFILL = 24;
private static final int MSG_HANDLE_ALL_APPS = 25;
private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_STATUS = 0; private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_STATUS = 0;
private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_NAVIGATION = 1; private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_NAVIGATION = 1;
@@ -924,6 +925,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
case MSG_DISPATCH_BACK_KEY_TO_AUTOFILL: case MSG_DISPATCH_BACK_KEY_TO_AUTOFILL:
mAutofillManagerInternal.onBackKeyPressed(); mAutofillManagerInternal.onBackKeyPressed();
break; break;
case MSG_HANDLE_ALL_APPS:
launchAllAppsAction();
break;
} }
} }
} }
@@ -1785,6 +1789,17 @@ public class PhoneWindowManager implements WindowManagerPolicy {
private void launchAllAppsAction() { private void launchAllAppsAction() {
Intent intent = new Intent(Intent.ACTION_ALL_APPS); 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); startActivityAsUser(intent, UserHandle.CURRENT);
} }
@@ -3620,6 +3635,14 @@ public class PhoneWindowManager implements WindowManagerPolicy {
if (interceptAccessibilityGestureTv()) { if (interceptAccessibilityGestureTv()) {
return -1; 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. // Toggle Caps Lock on META-ALT.

View File

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