am a56f8f7c: Merge "Fix EmergencyDialer button on devices without telephony hardware" into jb-mr1-dev
* commit 'a56f8f7ca2298f1516115be60e07a8193737293e': Fix EmergencyDialer button on devices without telephony hardware
This commit is contained in:
@@ -61,12 +61,6 @@ public class KeyguardHostView extends KeyguardViewBase {
|
|||||||
static final int APPWIDGET_HOST_ID = 0x4B455947;
|
static final int APPWIDGET_HOST_ID = 0x4B455947;
|
||||||
private static final String KEYGUARD_WIDGET_PREFS = "keyguard_widget_prefs";
|
private static final String KEYGUARD_WIDGET_PREFS = "keyguard_widget_prefs";
|
||||||
|
|
||||||
// time after launching EmergencyDialer before the screen goes blank.
|
|
||||||
private static final int EMERGENCY_CALL_TIMEOUT = 10000;
|
|
||||||
|
|
||||||
// intent action for launching emergency dialer activity.
|
|
||||||
static final String ACTION_EMERGENCY_DIAL = "com.android.phone.EmergencyDialer.DIAL";
|
|
||||||
|
|
||||||
private static final String TAG = "KeyguardViewHost";
|
private static final String TAG = "KeyguardViewHost";
|
||||||
|
|
||||||
private static final int SECURITY_SELECTOR_ID = R.id.keyguard_selector_view;
|
private static final int SECURITY_SELECTOR_ID = R.id.keyguard_selector_view;
|
||||||
@@ -80,7 +74,6 @@ public class KeyguardHostView extends KeyguardViewBase {
|
|||||||
private AppWidgetHost mAppWidgetHost;
|
private AppWidgetHost mAppWidgetHost;
|
||||||
private KeyguardWidgetPager mAppWidgetContainer;
|
private KeyguardWidgetPager mAppWidgetContainer;
|
||||||
private ViewFlipper mViewFlipper;
|
private ViewFlipper mViewFlipper;
|
||||||
private Button mEmergencyDialerButton;
|
|
||||||
private boolean mEnableMenuKey;
|
private boolean mEnableMenuKey;
|
||||||
private boolean mIsVerifyUnlockOnly;
|
private boolean mIsVerifyUnlockOnly;
|
||||||
private boolean mEnableFallback; // TODO: This should get the value from KeyguardPatternView
|
private boolean mEnableFallback; // TODO: This should get the value from KeyguardPatternView
|
||||||
@@ -146,14 +139,6 @@ public class KeyguardHostView extends KeyguardViewBase {
|
|||||||
Log.v("*********", "Can't find view id " + mViewIds[i]);
|
Log.v("*********", "Can't find view id " + mViewIds[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enable emergency dialer button
|
|
||||||
mEmergencyDialerButton = (Button) findViewById(R.id.emergency_call_button);
|
|
||||||
mEmergencyDialerButton.setOnClickListener(new OnClickListener() {
|
|
||||||
public void onClick(View v) {
|
|
||||||
takeEmergencyCallAction();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void setLockPatternUtils(LockPatternUtils utils) {
|
void setLockPatternUtils(LockPatternUtils utils) {
|
||||||
@@ -229,22 +214,6 @@ public class KeyguardHostView extends KeyguardViewBase {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Shows the emergency dialer or returns the user to the existing call.
|
|
||||||
*/
|
|
||||||
public void takeEmergencyCallAction() {
|
|
||||||
mCallback.userActivity(EMERGENCY_CALL_TIMEOUT);
|
|
||||||
if (TelephonyManager.getDefault().getCallState()
|
|
||||||
== TelephonyManager.CALL_STATE_OFFHOOK) {
|
|
||||||
mLockPatternUtils.resumeCall();
|
|
||||||
} else {
|
|
||||||
Intent intent = new Intent(ACTION_EMERGENCY_DIAL);
|
|
||||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
|
|
||||||
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
|
|
||||||
getContext().startActivity(intent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showDialog(String title, String message) {
|
private void showDialog(String title, String message) {
|
||||||
final AlertDialog dialog = new AlertDialog.Builder(mContext)
|
final AlertDialog dialog = new AlertDialog.Builder(mContext)
|
||||||
.setTitle(title)
|
.setTitle(title)
|
||||||
@@ -530,12 +499,14 @@ public class KeyguardHostView extends KeyguardViewBase {
|
|||||||
public void onScreenTurnedOn() {
|
public void onScreenTurnedOn() {
|
||||||
if (DEBUG) Log.d(TAG, "screen on");
|
if (DEBUG) Log.d(TAG, "screen on");
|
||||||
showSecurityScreen(mCurrentSecurityId);
|
showSecurityScreen(mCurrentSecurityId);
|
||||||
|
getSecurityView(mCurrentSecurityId).onResume();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onScreenTurnedOff() {
|
public void onScreenTurnedOff() {
|
||||||
if (DEBUG) Log.d(TAG, "screen off");
|
if (DEBUG) Log.d(TAG, "screen off");
|
||||||
showSecurityScreen(SECURITY_SELECTOR_ID);
|
showSecurityScreen(SECURITY_SELECTOR_ID);
|
||||||
|
getSecurityView(mCurrentSecurityId).onPause();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -69,7 +69,8 @@ public class KeyguardSecurityModel {
|
|||||||
SecurityMode mode = SecurityMode.None;
|
SecurityMode mode = SecurityMode.None;
|
||||||
if (simState == IccCardConstants.State.PIN_REQUIRED) {
|
if (simState == IccCardConstants.State.PIN_REQUIRED) {
|
||||||
mode = SecurityMode.SimPin;
|
mode = SecurityMode.SimPin;
|
||||||
} else if (simState == IccCardConstants.State.PUK_REQUIRED) {
|
} else if (simState == IccCardConstants.State.PUK_REQUIRED
|
||||||
|
&& mLockPatternUtils.isPukUnlockScreenEnable()) {
|
||||||
mode = SecurityMode.SimPuk;
|
mode = SecurityMode.SimPuk;
|
||||||
} else {
|
} else {
|
||||||
final int security = mLockPatternUtils.getKeyguardStoredPasswordQuality();
|
final int security = mLockPatternUtils.getKeyguardStoredPasswordQuality();
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import android.content.Intent;
|
|||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
|
import android.telephony.TelephonyManager;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
@@ -33,6 +34,7 @@ import android.widget.Button;
|
|||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
import com.android.internal.telephony.IccCardConstants;
|
import com.android.internal.telephony.IccCardConstants;
|
||||||
|
import com.android.internal.telephony.IccCardConstants.State;
|
||||||
import com.android.internal.widget.LockPatternUtils;
|
import com.android.internal.widget.LockPatternUtils;
|
||||||
import com.android.internal.widget.multiwaveview.GlowPadView;
|
import com.android.internal.widget.multiwaveview.GlowPadView;
|
||||||
import com.android.internal.widget.multiwaveview.GlowPadView.OnTriggerListener;
|
import com.android.internal.widget.multiwaveview.GlowPadView.OnTriggerListener;
|
||||||
@@ -43,6 +45,9 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri
|
|||||||
private static final String TAG = "SecuritySelectorView";
|
private static final String TAG = "SecuritySelectorView";
|
||||||
private static final String ASSIST_ICON_METADATA_NAME =
|
private static final String ASSIST_ICON_METADATA_NAME =
|
||||||
"com.android.systemui.action_assist_icon";
|
"com.android.systemui.action_assist_icon";
|
||||||
|
private static final int EMERGENCY_CALL_TIMEOUT = 10000; // screen timeout after starting e.d.
|
||||||
|
static final String ACTION_EMERGENCY_DIAL = "com.android.phone.EmergencyDialer.DIAL";
|
||||||
|
|
||||||
private KeyguardSecurityCallback mCallback;
|
private KeyguardSecurityCallback mCallback;
|
||||||
private GlowPadView mGlowPadView;
|
private GlowPadView mGlowPadView;
|
||||||
private Button mEmergencyCallButton;
|
private Button mEmergencyCallButton;
|
||||||
@@ -98,9 +103,19 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {
|
private void updateEmergencyCallButton(State simState, int phoneState) {
|
||||||
|
if (mEmergencyCallButton != null) {
|
||||||
|
boolean en = mLockPatternUtils.isEmergencyCallCapable()
|
||||||
|
|| (phoneState == TelephonyManager.CALL_STATE_OFFHOOK); // voice call in progress
|
||||||
|
if (en && KeyguardUpdateMonitor.isSimLocked(simState)) {
|
||||||
|
// Some countries can't handle emergency calls while SIM is locked.
|
||||||
|
en = mLockPatternUtils.isEmergencyCallEnabledWhileSimLocked();
|
||||||
|
}
|
||||||
|
mLockPatternUtils.updateEmergencyCallButtonState(mEmergencyCallButton, phoneState, en);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private boolean mEmergencyDialerDisableBecauseSimLocked;
|
KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDevicePolicyManagerStateChanged() {
|
public void onDevicePolicyManagerStateChanged() {
|
||||||
@@ -108,19 +123,15 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSimStateChanged(IccCardConstants.State simState) {
|
public void onSimStateChanged(State simState) {
|
||||||
// Some carriers aren't capable of handling emergency calls while the SIM is locked
|
int phoneState = KeyguardUpdateMonitor.getInstance(mContext).getPhoneState();
|
||||||
mEmergencyDialerDisableBecauseSimLocked = KeyguardUpdateMonitor.isSimLocked(simState)
|
updateEmergencyCallButton(simState, phoneState);
|
||||||
&& !mLockPatternUtils.isEmergencyCallEnabledWhileSimLocked();
|
|
||||||
updateTargets();
|
updateTargets();
|
||||||
}
|
}
|
||||||
|
|
||||||
void onPhoneStateChanged(int phoneState) {
|
void onPhoneStateChanged(int phoneState) {
|
||||||
if (mEmergencyCallButton != null) {
|
State simState = KeyguardUpdateMonitor.getInstance(mContext).getSimState();
|
||||||
mLockPatternUtils.isEmergencyCallEnabledWhileSimLocked();
|
updateEmergencyCallButton(simState, phoneState);
|
||||||
mLockPatternUtils.updateEmergencyCallButtonState(mEmergencyCallButton,
|
|
||||||
phoneState, !mEmergencyDialerDisableBecauseSimLocked);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -149,9 +160,30 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri
|
|||||||
mGlowPadView = (GlowPadView) findViewById(R.id.glow_pad_view);
|
mGlowPadView = (GlowPadView) findViewById(R.id.glow_pad_view);
|
||||||
mGlowPadView.setOnTriggerListener(mOnTriggerListener);
|
mGlowPadView.setOnTriggerListener(mOnTriggerListener);
|
||||||
mEmergencyCallButton = (Button) findViewById(R.id.emergency_call_button);
|
mEmergencyCallButton = (Button) findViewById(R.id.emergency_call_button);
|
||||||
|
mEmergencyCallButton.setOnClickListener(new OnClickListener() {
|
||||||
|
public void onClick(View v) {
|
||||||
|
takeEmergencyCallAction();
|
||||||
|
}
|
||||||
|
});
|
||||||
updateTargets();
|
updateTargets();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shows the emergency dialer or returns the user to the existing call.
|
||||||
|
*/
|
||||||
|
public void takeEmergencyCallAction() {
|
||||||
|
mCallback.userActivity(EMERGENCY_CALL_TIMEOUT);
|
||||||
|
if (TelephonyManager.getDefault().getCallState()
|
||||||
|
== TelephonyManager.CALL_STATE_OFFHOOK) {
|
||||||
|
mLockPatternUtils.resumeCall();
|
||||||
|
} else {
|
||||||
|
Intent intent = new Intent(ACTION_EMERGENCY_DIAL);
|
||||||
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
|
||||||
|
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
|
||||||
|
getContext().startActivity(intent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isTargetPresent(int resId) {
|
public boolean isTargetPresent(int resId) {
|
||||||
return mGlowPadView.getTargetPosition(resId) != -1;
|
return mGlowPadView.getTargetPosition(resId) != -1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import android.util.AttributeSet;
|
|||||||
import android.widget.GridLayout;
|
import android.widget.GridLayout;
|
||||||
|
|
||||||
public class KeyguardStatusView extends GridLayout {
|
public class KeyguardStatusView extends GridLayout {
|
||||||
|
@SuppressWarnings("unused")
|
||||||
private KeyguardStatusViewManager mStatusViewManager;
|
private KeyguardStatusViewManager mStatusViewManager;
|
||||||
|
|
||||||
public KeyguardStatusView(Context context) {
|
public KeyguardStatusView(Context context) {
|
||||||
|
|||||||
@@ -32,11 +32,10 @@ import android.text.TextUtils;
|
|||||||
import android.text.format.DateFormat;
|
import android.text.format.DateFormat;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
/***
|
/***
|
||||||
* Manages a number of views inside of LockScreen layouts. See below for a list of widgets
|
* Manages a number of views inside of the given layout. See below for a list of widgets.
|
||||||
*/
|
*/
|
||||||
class KeyguardStatusViewManager {
|
class KeyguardStatusViewManager {
|
||||||
private static final boolean DEBUG = false;
|
private static final boolean DEBUG = false;
|
||||||
@@ -92,21 +91,12 @@ class KeyguardStatusViewManager {
|
|||||||
private boolean mShowingStatus;
|
private boolean mShowingStatus;
|
||||||
private CharSequence mPlmn;
|
private CharSequence mPlmn;
|
||||||
private CharSequence mSpn;
|
private CharSequence mSpn;
|
||||||
protected int mPhoneState;
|
|
||||||
private DigitalClock mDigitalClock;
|
private DigitalClock mDigitalClock;
|
||||||
protected boolean mBatteryCharged;
|
protected boolean mBatteryCharged;
|
||||||
protected boolean mBatteryIsLow;
|
protected boolean mBatteryIsLow;
|
||||||
private boolean mEmergencyButtonEnabledBecauseSimLocked;
|
|
||||||
private Button mEmergencyCallButton;
|
|
||||||
private boolean mEmergencyCallButtonEnabledInScreen;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @param view the containing view of all widgets
|
* @param view the containing view of all widgets
|
||||||
* @param updateMonitor the update monitor to use
|
|
||||||
* @param lockPatternUtils lock pattern util object
|
|
||||||
* @param callback used to invoke emergency dialer
|
|
||||||
* @param emergencyButtonEnabledInScreen whether emergency button is enabled by default
|
|
||||||
*/
|
*/
|
||||||
public KeyguardStatusViewManager(View view) {
|
public KeyguardStatusViewManager(View view) {
|
||||||
if (DEBUG) Log.v(TAG, "KeyguardStatusViewManager()");
|
if (DEBUG) Log.v(TAG, "KeyguardStatusViewManager()");
|
||||||
@@ -364,7 +354,6 @@ class KeyguardStatusViewManager {
|
|||||||
|
|
||||||
CharSequence carrierText = null;
|
CharSequence carrierText = null;
|
||||||
int carrierHelpTextId = 0;
|
int carrierHelpTextId = 0;
|
||||||
mEmergencyButtonEnabledBecauseSimLocked = false;
|
|
||||||
mStatus = getStatusForIccState(simState);
|
mStatus = getStatusForIccState(simState);
|
||||||
mSimState = simState;
|
mSimState = simState;
|
||||||
switch (mStatus) {
|
switch (mStatus) {
|
||||||
@@ -394,7 +383,6 @@ class KeyguardStatusViewManager {
|
|||||||
carrierText = getContext().getText(
|
carrierText = getContext().getText(
|
||||||
R.string.lockscreen_permanent_disabled_sim_message_short);
|
R.string.lockscreen_permanent_disabled_sim_message_short);
|
||||||
carrierHelpTextId = R.string.lockscreen_permanent_disabled_sim_instructions;
|
carrierHelpTextId = R.string.lockscreen_permanent_disabled_sim_instructions;
|
||||||
mEmergencyButtonEnabledBecauseSimLocked = true;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SimMissingLocked:
|
case SimMissingLocked:
|
||||||
@@ -402,33 +390,25 @@ class KeyguardStatusViewManager {
|
|||||||
getContext().getText(R.string.lockscreen_missing_sim_message_short),
|
getContext().getText(R.string.lockscreen_missing_sim_message_short),
|
||||||
mPlmn);
|
mPlmn);
|
||||||
carrierHelpTextId = R.string.lockscreen_missing_sim_instructions;
|
carrierHelpTextId = R.string.lockscreen_missing_sim_instructions;
|
||||||
mEmergencyButtonEnabledBecauseSimLocked = true;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SimLocked:
|
case SimLocked:
|
||||||
carrierText = makeCarrierStringOnEmergencyCapable(
|
carrierText = makeCarrierStringOnEmergencyCapable(
|
||||||
getContext().getText(R.string.lockscreen_sim_locked_message),
|
getContext().getText(R.string.lockscreen_sim_locked_message),
|
||||||
mPlmn);
|
mPlmn);
|
||||||
mEmergencyButtonEnabledBecauseSimLocked = true;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SimPukLocked:
|
case SimPukLocked:
|
||||||
carrierText = makeCarrierStringOnEmergencyCapable(
|
carrierText = makeCarrierStringOnEmergencyCapable(
|
||||||
getContext().getText(R.string.lockscreen_sim_puk_locked_message),
|
getContext().getText(R.string.lockscreen_sim_puk_locked_message),
|
||||||
mPlmn);
|
mPlmn);
|
||||||
if (!mLockPatternUtils.isPukUnlockScreenEnable()) {
|
|
||||||
// This means we're showing the PUK unlock screen
|
|
||||||
mEmergencyButtonEnabledBecauseSimLocked = true;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
setCarrierText(carrierText);
|
setCarrierText(carrierText);
|
||||||
setCarrierHelpText(carrierHelpTextId);
|
setCarrierHelpText(carrierHelpTextId);
|
||||||
updateEmergencyCallButtonState(mPhoneState);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add emergencyCallMessage to carrier string only if phone supports emergency calls.
|
* Add emergencyCallMessage to carrier string only if phone supports emergency calls.
|
||||||
*/
|
*/
|
||||||
@@ -500,17 +480,6 @@ class KeyguardStatusViewManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateEmergencyCallButtonState(int phoneState) {
|
|
||||||
if (mEmergencyCallButton != null) {
|
|
||||||
boolean enabledBecauseSimLocked =
|
|
||||||
mLockPatternUtils.isEmergencyCallEnabledWhileSimLocked()
|
|
||||||
&& mEmergencyButtonEnabledBecauseSimLocked;
|
|
||||||
boolean shown = mEmergencyCallButtonEnabledInScreen || enabledBecauseSimLocked;
|
|
||||||
mLockPatternUtils.updateEmergencyCallButtonState(mEmergencyCallButton,
|
|
||||||
phoneState, shown);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {
|
private KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -536,12 +505,6 @@ class KeyguardStatusViewManager {
|
|||||||
updateCarrierStateWithSimStatus(mSimState);
|
updateCarrierStateWithSimStatus(mSimState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPhoneStateChanged(int phoneState) {
|
|
||||||
mPhoneState = phoneState;
|
|
||||||
updateEmergencyCallButtonState(phoneState);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSimStateChanged(IccCardConstants.State simState) {
|
public void onSimStateChanged(IccCardConstants.State simState) {
|
||||||
updateCarrierStateWithSimStatus(simState);
|
updateCarrierStateWithSimStatus(simState);
|
||||||
|
|||||||
Reference in New Issue
Block a user