am d6216305: Merge "Disable more hotkeys while in setup." into lmp-mr1-dev

* commit 'd62163055f983b95a954f1a6c2cbc8e0085a7ab5':
  Disable more hotkeys while in setup.
This commit is contained in:
Jeff Brown
2015-03-20 22:10:54 +00:00
committed by Android Git Automerger
2 changed files with 75 additions and 36 deletions

View File

@@ -28,9 +28,9 @@ import android.media.session.MediaSessionLegacyHelper;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.ServiceManager; import android.os.ServiceManager;
import android.os.UserHandle; import android.os.UserHandle;
import android.provider.Settings;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.util.Log; import android.util.Log;
import android.util.Slog;
import android.view.View; import android.view.View;
import android.view.HapticFeedbackConstants; import android.view.HapticFeedbackConstants;
import android.view.FallbackEventHandler; import android.view.FallbackEventHandler;
@@ -117,6 +117,7 @@ public class PhoneFallbackEventHandler implements FallbackEventHandler {
dispatcher.startTracking(event, this); dispatcher.startTracking(event, this);
} else if (event.isLongPress() && dispatcher.isTracking(event)) { } else if (event.isLongPress() && dispatcher.isTracking(event)) {
dispatcher.performedLongPress(event); dispatcher.performedLongPress(event);
if (isUserSetupComplete()) {
mView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); mView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
// launch the VoiceDialer // launch the VoiceDialer
Intent intent = new Intent(Intent.ACTION_VOICE_COMMAND); Intent intent = new Intent(Intent.ACTION_VOICE_COMMAND);
@@ -127,6 +128,10 @@ public class PhoneFallbackEventHandler implements FallbackEventHandler {
} catch (ActivityNotFoundException e) { } catch (ActivityNotFoundException e) {
startCallActivity(); startCallActivity();
} }
} else {
Log.i(TAG, "Not starting call activity because user "
+ "setup is in progress.");
}
} }
return true; return true;
} }
@@ -139,6 +144,7 @@ public class PhoneFallbackEventHandler implements FallbackEventHandler {
dispatcher.startTracking(event, this); dispatcher.startTracking(event, this);
} else if (event.isLongPress() && dispatcher.isTracking(event)) { } else if (event.isLongPress() && dispatcher.isTracking(event)) {
dispatcher.performedLongPress(event); dispatcher.performedLongPress(event);
if (isUserSetupComplete()) {
mView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); mView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
sendCloseSystemWindows(); sendCloseSystemWindows();
// Broadcast an intent that the Camera button was longpressed // Broadcast an intent that the Camera button was longpressed
@@ -146,6 +152,10 @@ public class PhoneFallbackEventHandler implements FallbackEventHandler {
intent.putExtra(Intent.EXTRA_KEY_EVENT, event); intent.putExtra(Intent.EXTRA_KEY_EVENT, event);
mContext.sendOrderedBroadcastAsUser(intent, UserHandle.CURRENT_OR_SELF, mContext.sendOrderedBroadcastAsUser(intent, UserHandle.CURRENT_OR_SELF,
null, null, null, 0, null, null); null, null, null, 0, null, null);
} else {
Log.i(TAG, "Not dispatching CAMERA long press because user "
+ "setup is in progress.");
}
} }
return true; return true;
} }
@@ -160,6 +170,7 @@ public class PhoneFallbackEventHandler implements FallbackEventHandler {
Configuration config = mContext.getResources().getConfiguration(); Configuration config = mContext.getResources().getConfiguration();
if (config.keyboard == Configuration.KEYBOARD_NOKEYS if (config.keyboard == Configuration.KEYBOARD_NOKEYS
|| config.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) { || config.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
if (isUserSetupComplete()) {
// launch the search activity // launch the search activity
Intent intent = new Intent(Intent.ACTION_SEARCH_LONG_PRESS); Intent intent = new Intent(Intent.ACTION_SEARCH_LONG_PRESS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -176,6 +187,10 @@ public class PhoneFallbackEventHandler implements FallbackEventHandler {
} catch (ActivityNotFoundException e) { } catch (ActivityNotFoundException e) {
// Ignore // Ignore
} }
} else {
Log.i(TAG, "Not dispatching SEARCH long press because user "
+ "setup is in progress.");
}
} }
} }
break; break;
@@ -186,7 +201,7 @@ public class PhoneFallbackEventHandler implements FallbackEventHandler {
boolean onKeyUp(int keyCode, KeyEvent event) { boolean onKeyUp(int keyCode, KeyEvent event) {
if (DEBUG) { if (DEBUG) {
Slog.d(TAG, "up " + keyCode); Log.d(TAG, "up " + keyCode);
} }
final KeyEvent.DispatcherState dispatcher = mView.getKeyDispatcherState(); final KeyEvent.DispatcherState dispatcher = mView.getKeyDispatcherState();
if (dispatcher != null) { if (dispatcher != null) {
@@ -234,7 +249,12 @@ public class PhoneFallbackEventHandler implements FallbackEventHandler {
break; break;
} }
if (event.isTracking() && !event.isCanceled()) { if (event.isTracking() && !event.isCanceled()) {
if (isUserSetupComplete()) {
startCallActivity(); startCallActivity();
} else {
Log.i(TAG, "Not starting call activity because user "
+ "setup is in progress.");
}
} }
return true; return true;
} }
@@ -249,7 +269,7 @@ public class PhoneFallbackEventHandler implements FallbackEventHandler {
try { try {
mContext.startActivity(intent); mContext.startActivity(intent);
} catch (ActivityNotFoundException e) { } catch (ActivityNotFoundException e) {
Slog.w(TAG, "No activity found for android.intent.action.CALL_BUTTON."); Log.w(TAG, "No activity found for android.intent.action.CALL_BUTTON.");
} }
} }
@@ -289,5 +309,10 @@ public class PhoneFallbackEventHandler implements FallbackEventHandler {
private void handleMediaKeyEvent(KeyEvent keyEvent) { private void handleMediaKeyEvent(KeyEvent keyEvent) {
MediaSessionLegacyHelper.getHelper(mContext).sendMediaButtonEvent(keyEvent, false); MediaSessionLegacyHelper.getHelper(mContext).sendMediaButtonEvent(keyEvent, false);
} }
private boolean isUserSetupComplete() {
return Settings.Secure.getInt(mContext.getContentResolver(),
Settings.Secure.USER_SETUP_COMPLETE, 0) != 0;
}
} }

View File

@@ -56,6 +56,7 @@ import android.provider.Settings;
import android.speech.RecognizerIntent; import android.speech.RecognizerIntent;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.util.Slog;
import android.util.SparseArray; import android.util.SparseArray;
import android.view.KeyEvent; import android.view.KeyEvent;
@@ -715,11 +716,19 @@ public class MediaSessionService extends SystemService implements Monitor {
Log.w(TAG, "Attempted to dispatch null or non-media key event."); Log.w(TAG, "Attempted to dispatch null or non-media key event.");
return; return;
} }
final int pid = Binder.getCallingPid(); final int pid = Binder.getCallingPid();
final int uid = Binder.getCallingUid(); final int uid = Binder.getCallingUid();
final long token = Binder.clearCallingIdentity(); final long token = Binder.clearCallingIdentity();
try { try {
if (!isUserSetupComplete()) {
// Global media key handling can have the side-effect of starting new
// activities which is undesirable while setup is in progress.
Slog.i(TAG, "Not dispatching media key event because user "
+ "setup is in progress.");
return;
}
synchronized (mLock) { synchronized (mLock) {
// If we don't have a media button receiver to fall back on // If we don't have a media button receiver to fall back on
// include non-playing sessions for dispatching // include non-playing sessions for dispatching
@@ -1007,6 +1016,11 @@ public class MediaSessionService extends SystemService implements Monitor {
return keyCode == KeyEvent.KEYCODE_HEADSETHOOK; return keyCode == KeyEvent.KEYCODE_HEADSETHOOK;
} }
private boolean isUserSetupComplete() {
return Settings.Secure.getIntForUser(getContext().getContentResolver(),
Settings.Secure.USER_SETUP_COMPLETE, 0, UserHandle.USER_CURRENT) != 0;
}
// we only handle public stream types, which are 0-5 // we only handle public stream types, which are 0-5
private boolean isValidLocalStreamType(int streamType) { private boolean isValidLocalStreamType(int streamType) {
return streamType >= AudioManager.STREAM_VOICE_CALL return streamType >= AudioManager.STREAM_VOICE_CALL