Merge "Type of search on headset key long press must depend on device state" into jb-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
fca91a8e6a
@@ -59,6 +59,7 @@ import android.os.SystemProperties;
|
|||||||
import android.os.Vibrator;
|
import android.os.Vibrator;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.provider.Settings.System;
|
import android.provider.Settings.System;
|
||||||
|
import android.speech.RecognizerIntent;
|
||||||
import android.telephony.PhoneStateListener;
|
import android.telephony.PhoneStateListener;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -3818,24 +3819,32 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
|
|||||||
* Tell the system to start voice-based interactions / voice commands
|
* Tell the system to start voice-based interactions / voice commands
|
||||||
*/
|
*/
|
||||||
private void startVoiceBasedInteractions(boolean needWakeLock) {
|
private void startVoiceBasedInteractions(boolean needWakeLock) {
|
||||||
Intent voiceIntent = new Intent(android.speech.RecognizerIntent.ACTION_WEB_SEARCH);
|
Intent voiceIntent = null;
|
||||||
|
// select which type of search to launch:
|
||||||
|
// - screen on and device unlocked: action is ACTION_WEB_SEARCH
|
||||||
|
// - device locked or screen off: action is ACTION_VOICE_SEARCH_HANDS_FREE
|
||||||
|
// with EXTRA_SECURE set to true if the device is securely locked
|
||||||
|
PowerManager pm = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
|
||||||
|
boolean isLocked = mKeyguardManager != null && mKeyguardManager.isKeyguardLocked();
|
||||||
|
if (!isLocked && pm.isScreenOn()) {
|
||||||
|
voiceIntent = new Intent(android.speech.RecognizerIntent.ACTION_WEB_SEARCH);
|
||||||
|
} else {
|
||||||
|
voiceIntent = new Intent(RecognizerIntent.ACTION_VOICE_SEARCH_HANDS_FREE);
|
||||||
|
voiceIntent.putExtra(RecognizerIntent.EXTRA_SECURE,
|
||||||
|
isLocked && mKeyguardManager.isKeyguardSecure());
|
||||||
|
}
|
||||||
|
// start the search activity
|
||||||
if (needWakeLock) {
|
if (needWakeLock) {
|
||||||
mMediaEventWakeLock.acquire();
|
mMediaEventWakeLock.acquire();
|
||||||
}
|
}
|
||||||
voiceIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
|
|
||||||
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
|
|
||||||
try {
|
try {
|
||||||
if (mKeyguardManager != null) {
|
if (voiceIntent != null) {
|
||||||
// it's ok to start voice-based interactions when:
|
voiceIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
|
||||||
// - the device is locked but doesn't require a password to be unlocked
|
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
|
||||||
// - the device is not locked
|
mContext.startActivity(voiceIntent);
|
||||||
if ((mKeyguardManager.isKeyguardLocked() && !mKeyguardManager.isKeyguardSecure())
|
|
||||||
|| !mKeyguardManager.isKeyguardLocked()) {
|
|
||||||
mContext.startActivity(voiceIntent);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch (ActivityNotFoundException e) {
|
} catch (ActivityNotFoundException e) {
|
||||||
Log.e(TAG, "Error launching activity for ACTION_WEB_SEARCH: " + e);
|
Log.w(TAG, "No activity for search: " + e);
|
||||||
} finally {
|
} finally {
|
||||||
if (needWakeLock) {
|
if (needWakeLock) {
|
||||||
mMediaEventWakeLock.release();
|
mMediaEventWakeLock.release();
|
||||||
@@ -3843,20 +3852,6 @@ public class AudioService extends IAudioService.Stub implements OnFinished {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Verify whether it is safe to start voice-based interactions given the state of the system
|
|
||||||
* @return false is the Keyguard is locked and secure, true otherwise
|
|
||||||
*/
|
|
||||||
private boolean safeToStartVoiceBasedInteractions() {
|
|
||||||
KeyguardManager keyguard =
|
|
||||||
(KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE);
|
|
||||||
if (keyguard == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private PowerManager.WakeLock mMediaEventWakeLock;
|
private PowerManager.WakeLock mMediaEventWakeLock;
|
||||||
|
|
||||||
private static final int WAKELOCK_RELEASE_ON_FINISHED = 1980; //magic number
|
private static final int WAKELOCK_RELEASE_ON_FINISHED = 1980; //magic number
|
||||||
|
|||||||
Reference in New Issue
Block a user