am 9e197141: Merge "Add new ASSIST key and map it to the global assist intent." into jb-dev
* commit '9e197141f8249e36d3f19aeda332ae40dac7da05': Add new ASSIST key and map it to the global assist intent.
This commit is contained in:
@@ -23186,6 +23186,7 @@ package android.view {
|
||||
field public static final int KEYCODE_ALT_RIGHT = 58; // 0x3a
|
||||
field public static final int KEYCODE_APOSTROPHE = 75; // 0x4b
|
||||
field public static final int KEYCODE_APP_SWITCH = 187; // 0xbb
|
||||
field public static final int KEYCODE_ASSIST = 219; // 0xdb
|
||||
field public static final int KEYCODE_AT = 77; // 0x4d
|
||||
field public static final int KEYCODE_AVR_INPUT = 182; // 0xb6
|
||||
field public static final int KEYCODE_AVR_POWER = 181; // 0xb5
|
||||
|
||||
@@ -23198,6 +23198,7 @@ package android.view {
|
||||
field public static final int KEYCODE_ALT_RIGHT = 58; // 0x3a
|
||||
field public static final int KEYCODE_APOSTROPHE = 75; // 0x4b
|
||||
field public static final int KEYCODE_APP_SWITCH = 187; // 0xbb
|
||||
field public static final int KEYCODE_ASSIST = 219; // 0xdb
|
||||
field public static final int KEYCODE_AT = 77; // 0x4d
|
||||
field public static final int KEYCODE_AVR_INPUT = 182; // 0xb6
|
||||
field public static final int KEYCODE_AVR_POWER = 181; // 0xb5
|
||||
|
||||
@@ -22,6 +22,7 @@ import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.database.Cursor;
|
||||
import android.graphics.Rect;
|
||||
@@ -32,6 +33,7 @@ import android.os.RemoteException;
|
||||
import android.os.ServiceManager;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.util.Slog;
|
||||
import android.view.KeyEvent;
|
||||
|
||||
import java.util.List;
|
||||
@@ -837,4 +839,32 @@ public class SearchManager
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the global assist activity is available.
|
||||
* @return True if the assistant is available.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public final boolean isAssistantAvailable() {
|
||||
Intent intent = getAssistIntent();
|
||||
return intent != null
|
||||
&& mContext.getPackageManager().queryIntentActivities(intent,
|
||||
PackageManager.MATCH_DEFAULT_ONLY).size() > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an intent to launch the global assist activity, or null if not available.
|
||||
* @return The assist intent.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public final Intent getAssistIntent() {
|
||||
ComponentName globalSearchActivity = getGlobalSearchActivity();
|
||||
if (globalSearchActivity != null) {
|
||||
Intent intent = new Intent(Intent.ACTION_ASSIST);
|
||||
intent.setPackage(globalSearchActivity.getPackageName());
|
||||
return intent;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -620,8 +620,11 @@ public class KeyEvent extends InputEvent implements Parcelable {
|
||||
public static final int KEYCODE_RO = 217;
|
||||
/** Key code constant: Japanese kana key. */
|
||||
public static final int KEYCODE_KANA = 218;
|
||||
/** Key code constant: Assist key.
|
||||
* Launches the global assist activity. Not delivered to applications. */
|
||||
public static final int KEYCODE_ASSIST = 219;
|
||||
|
||||
private static final int LAST_KEYCODE = KEYCODE_KANA;
|
||||
private static final int LAST_KEYCODE = KEYCODE_ASSIST;
|
||||
|
||||
// NOTE: If you add a new keycode here you must also add it to:
|
||||
// isSystem()
|
||||
@@ -862,6 +865,7 @@ public class KeyEvent extends InputEvent implements Parcelable {
|
||||
names.append(KEYCODE_YEN, "KEYCODE_YEN");
|
||||
names.append(KEYCODE_RO, "KEYCODE_RO");
|
||||
names.append(KEYCODE_KANA, "KEYCODE_KANA");
|
||||
names.append(KEYCODE_ASSIST, "KEYCODE_ASSIST");
|
||||
};
|
||||
|
||||
// Symbolic names of all metakeys in bit order from least significant to most significant.
|
||||
|
||||
@@ -243,6 +243,7 @@ static const KeycodeLabel KEYCODES[] = {
|
||||
{ "YEN", 216 },
|
||||
{ "RO", 217 },
|
||||
{ "KANA", 218 },
|
||||
{ "ASSIST", 219 },
|
||||
|
||||
// NOTE: If you add a new keycode here you must also add it to several other files.
|
||||
// Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list.
|
||||
|
||||
@@ -23,7 +23,6 @@ import android.content.ActivityNotFoundException;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Vibrator;
|
||||
import android.provider.Settings;
|
||||
@@ -35,6 +34,7 @@ import android.view.ViewGroup;
|
||||
import android.view.ViewTreeObserver;
|
||||
import android.view.ViewTreeObserver.OnPreDrawListener;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.android.internal.widget.multiwaveview.GlowPadView;
|
||||
import com.android.internal.widget.multiwaveview.GlowPadView.OnTriggerListener;
|
||||
import com.android.systemui.R;
|
||||
@@ -53,6 +53,7 @@ public class SearchPanelView extends FrameLayout implements
|
||||
private static final String ASSIST_ICON_METADATA_NAME =
|
||||
"com.android.systemui.action_assist_icon";
|
||||
private final Context mContext;
|
||||
private final SearchManager mSearchManager;
|
||||
private BaseStatusBar mBar;
|
||||
private StatusBarTouchProxy mStatusBarTouchProxy;
|
||||
|
||||
@@ -73,38 +74,12 @@ public class SearchPanelView extends FrameLayout implements
|
||||
}
|
||||
}
|
||||
|
||||
private SearchManager mSearchManager;
|
||||
|
||||
// This code should be the same as that used in LockScreen.java
|
||||
public boolean isAssistantAvailable() {
|
||||
Intent intent = getAssistIntent();
|
||||
return intent == null ? false
|
||||
: mContext.getPackageManager().queryIntentActivities(intent,
|
||||
PackageManager.MATCH_DEFAULT_ONLY).size() > 0;
|
||||
return mSearchManager != null && mSearchManager.isAssistantAvailable();
|
||||
}
|
||||
|
||||
private Intent getAssistIntent() {
|
||||
Intent intent = null;
|
||||
SearchManager searchManager = getSearchManager();
|
||||
if (searchManager != null) {
|
||||
ComponentName globalSearchActivity = searchManager.getGlobalSearchActivity();
|
||||
if (globalSearchActivity != null) {
|
||||
intent = new Intent(Intent.ACTION_ASSIST);
|
||||
intent.setPackage(globalSearchActivity.getPackageName());
|
||||
} else {
|
||||
Slog.w(TAG, "No global search activity");
|
||||
}
|
||||
} else {
|
||||
Slog.w(TAG, "No SearchManager");
|
||||
}
|
||||
return intent;
|
||||
}
|
||||
|
||||
private SearchManager getSearchManager() {
|
||||
if (mSearchManager == null) {
|
||||
mSearchManager = (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE);
|
||||
}
|
||||
return mSearchManager;
|
||||
return mSearchManager != null ? mSearchManager.getAssistIntent() : null;
|
||||
}
|
||||
|
||||
private void startAssistActivity() {
|
||||
@@ -175,9 +150,8 @@ public class SearchPanelView extends FrameLayout implements
|
||||
// TODO: fetch views
|
||||
mGlowPadView = (GlowPadView) findViewById(R.id.glow_pad_view);
|
||||
mGlowPadView.setOnTriggerListener(mGlowPadViewListener);
|
||||
SearchManager searchManager = getSearchManager();
|
||||
if (searchManager != null) {
|
||||
ComponentName component = searchManager.getGlobalSearchActivity();
|
||||
if (mSearchManager != null) {
|
||||
ComponentName component = mSearchManager.getGlobalSearchActivity();
|
||||
if (component != null) {
|
||||
if (!mGlowPadView.replaceTargetDrawablesIfPresent(component,
|
||||
ASSIST_ICON_METADATA_NAME,
|
||||
|
||||
@@ -32,7 +32,6 @@ import android.content.ActivityNotFoundException;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Vibrator;
|
||||
@@ -254,29 +253,14 @@ class LockScreen extends LinearLayout implements KeyguardScreen {
|
||||
}
|
||||
}
|
||||
|
||||
// This code should be the same as that in SearchPanelView
|
||||
public boolean isAssistantAvailable() {
|
||||
Intent intent = getAssistIntent();
|
||||
return intent == null ? false
|
||||
: mContext.getPackageManager().queryIntentActivities(intent,
|
||||
PackageManager.MATCH_DEFAULT_ONLY).size() > 0;
|
||||
private boolean isAssistantAvailable() {
|
||||
SearchManager searchManager = getSearchManager();
|
||||
return searchManager != null && searchManager.isAssistantAvailable();
|
||||
}
|
||||
|
||||
private Intent getAssistIntent() {
|
||||
Intent intent = null;
|
||||
SearchManager searchManager = getSearchManager();
|
||||
if (searchManager != null) {
|
||||
ComponentName globalSearchActivity = searchManager.getGlobalSearchActivity();
|
||||
if (globalSearchActivity != null) {
|
||||
intent = new Intent(Intent.ACTION_ASSIST);
|
||||
intent.setPackage(globalSearchActivity.getPackageName());
|
||||
} else {
|
||||
Slog.w(TAG, "No global search activity");
|
||||
}
|
||||
} else {
|
||||
Slog.w(TAG, "No SearchManager");
|
||||
}
|
||||
return intent;
|
||||
return searchManager != null ? searchManager.getAssistIntent() : null;
|
||||
}
|
||||
|
||||
private SearchManager getSearchManager() {
|
||||
|
||||
@@ -19,6 +19,7 @@ import android.app.ActivityManager;
|
||||
import android.app.ActivityManagerNative;
|
||||
import android.app.IUiModeManager;
|
||||
import android.app.ProgressDialog;
|
||||
import android.app.SearchManager;
|
||||
import android.app.UiModeManager;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.BroadcastReceiver;
|
||||
@@ -235,6 +236,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
static public final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
|
||||
static public final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
|
||||
static public final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
|
||||
static public final String SYSTEM_DIALOG_REASON_ASSIST = "assist";
|
||||
|
||||
/**
|
||||
* These are the system UI flags that, when changing, can cause the layout
|
||||
@@ -279,6 +281,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
LocalPowerManager mPowerManager;
|
||||
IStatusBarService mStatusBarService;
|
||||
Vibrator mVibrator; // Vibrator for giving feedback of orientation changes
|
||||
SearchManager mSearchManager;
|
||||
|
||||
// Vibrator pattern for haptic feedback of a long press.
|
||||
long[] mLongPressVibePattern;
|
||||
@@ -462,6 +465,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
Intent mDeskDockIntent;
|
||||
boolean mSearchKeyShortcutPending;
|
||||
boolean mConsumeSearchKeyUp;
|
||||
boolean mAssistKeyLongPressed;
|
||||
|
||||
// support for activating the lock screen while the screen is on
|
||||
boolean mAllowLockscreenWhenOn;
|
||||
@@ -1860,6 +1864,26 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
showOrHideRecentAppsDialog(RECENT_APPS_BEHAVIOR_SHOW_OR_DISMISS);
|
||||
}
|
||||
return -1;
|
||||
} else if (keyCode == KeyEvent.KEYCODE_ASSIST) {
|
||||
if (down) {
|
||||
if (repeatCount == 0) {
|
||||
mAssistKeyLongPressed = false;
|
||||
} else if (repeatCount == 1) {
|
||||
mAssistKeyLongPressed = true;
|
||||
if (!keyguardOn) {
|
||||
launchAssistLongPressAction();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mAssistKeyLongPressed) {
|
||||
mAssistKeyLongPressed = false;
|
||||
} else {
|
||||
if (!keyguardOn) {
|
||||
launchAssistAction();
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Shortcuts are invoked through Search+key, so intercept those here
|
||||
@@ -2050,6 +2074,50 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
return false;
|
||||
}
|
||||
|
||||
private void launchAssistLongPressAction() {
|
||||
performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);
|
||||
sendCloseSystemWindows(SYSTEM_DIALOG_REASON_ASSIST);
|
||||
|
||||
// launch the search activity
|
||||
Intent intent = new Intent(Intent.ACTION_SEARCH_LONG_PRESS);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
try {
|
||||
SearchManager searchManager = getSearchManager();
|
||||
if (searchManager != null) {
|
||||
searchManager.stopSearch();
|
||||
}
|
||||
mContext.startActivity(intent);
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Slog.w(TAG, "No activity to handle assist long press action.", e);
|
||||
}
|
||||
}
|
||||
|
||||
private void launchAssistAction() {
|
||||
sendCloseSystemWindows(SYSTEM_DIALOG_REASON_ASSIST);
|
||||
|
||||
SearchManager searchManager = getSearchManager();
|
||||
if (searchManager != null) {
|
||||
Intent intent = searchManager.getAssistIntent();
|
||||
if (intent != null) {
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
|
||||
| Intent.FLAG_ACTIVITY_SINGLE_TOP
|
||||
| Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
try {
|
||||
mContext.startActivity(intent);
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Slog.w(TAG, "No activity to handle assist action.", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private SearchManager getSearchManager() {
|
||||
if (mSearchManager == null) {
|
||||
mSearchManager = (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE);
|
||||
}
|
||||
return mSearchManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* A home key -> launch home action was detected. Take the appropriate action
|
||||
* given the situation with the keyguard.
|
||||
|
||||
Reference in New Issue
Block a user