am cdc490d3: am a56f8f7c: Merge "Fix EmergencyDialer button on devices without telephony hardware" into jb-mr1-dev

* commit 'cdc490d3e9b570b6111a841cb0125634eb57cd9f':
  Fix EmergencyDialer button on devices without telephony hardware
This commit is contained in:
Jim Miller
2012-09-06 18:50:14 -07:00
committed by Android Git Automerger
5 changed files with 49 additions and 81 deletions

View File

@@ -61,12 +61,6 @@ public class KeyguardHostView extends KeyguardViewBase {
static final int APPWIDGET_HOST_ID = 0x4B455947;
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 int SECURITY_SELECTOR_ID = R.id.keyguard_selector_view;
@@ -80,7 +74,6 @@ public class KeyguardHostView extends KeyguardViewBase {
private AppWidgetHost mAppWidgetHost;
private KeyguardWidgetPager mAppWidgetContainer;
private ViewFlipper mViewFlipper;
private Button mEmergencyDialerButton;
private boolean mEnableMenuKey;
private boolean mIsVerifyUnlockOnly;
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]);
}
}
// 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) {
@@ -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) {
final AlertDialog dialog = new AlertDialog.Builder(mContext)
.setTitle(title)
@@ -530,12 +499,14 @@ public class KeyguardHostView extends KeyguardViewBase {
public void onScreenTurnedOn() {
if (DEBUG) Log.d(TAG, "screen on");
showSecurityScreen(mCurrentSecurityId);
getSecurityView(mCurrentSecurityId).onResume();
}
@Override
public void onScreenTurnedOff() {
if (DEBUG) Log.d(TAG, "screen off");
showSecurityScreen(SECURITY_SELECTOR_ID);
getSecurityView(mCurrentSecurityId).onPause();
}
@Override

View File

@@ -69,7 +69,8 @@ public class KeyguardSecurityModel {
SecurityMode mode = SecurityMode.None;
if (simState == IccCardConstants.State.PIN_REQUIRED) {
mode = SecurityMode.SimPin;
} else if (simState == IccCardConstants.State.PUK_REQUIRED) {
} else if (simState == IccCardConstants.State.PUK_REQUIRED
&& mLockPatternUtils.isPukUnlockScreenEnable()) {
mode = SecurityMode.SimPuk;
} else {
final int security = mLockPatternUtils.getKeyguardStoredPasswordQuality();

View File

@@ -25,6 +25,7 @@ import android.content.Intent;
import android.os.RemoteException;
import android.os.UserHandle;
import android.provider.MediaStore;
import android.telephony.TelephonyManager;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Slog;
@@ -33,6 +34,7 @@ import android.widget.Button;
import android.widget.LinearLayout;
import com.android.internal.telephony.IccCardConstants;
import com.android.internal.telephony.IccCardConstants.State;
import com.android.internal.widget.LockPatternUtils;
import com.android.internal.widget.multiwaveview.GlowPadView;
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 ASSIST_ICON_METADATA_NAME =
"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 GlowPadView mGlowPadView;
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
public void onDevicePolicyManagerStateChanged() {
@@ -108,19 +123,15 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri
}
@Override
public void onSimStateChanged(IccCardConstants.State simState) {
// Some carriers aren't capable of handling emergency calls while the SIM is locked
mEmergencyDialerDisableBecauseSimLocked = KeyguardUpdateMonitor.isSimLocked(simState)
&& !mLockPatternUtils.isEmergencyCallEnabledWhileSimLocked();
public void onSimStateChanged(State simState) {
int phoneState = KeyguardUpdateMonitor.getInstance(mContext).getPhoneState();
updateEmergencyCallButton(simState, phoneState);
updateTargets();
}
void onPhoneStateChanged(int phoneState) {
if (mEmergencyCallButton != null) {
mLockPatternUtils.isEmergencyCallEnabledWhileSimLocked();
mLockPatternUtils.updateEmergencyCallButtonState(mEmergencyCallButton,
phoneState, !mEmergencyDialerDisableBecauseSimLocked);
}
State simState = KeyguardUpdateMonitor.getInstance(mContext).getSimState();
updateEmergencyCallButton(simState, phoneState);
};
};
@@ -149,9 +160,30 @@ public class KeyguardSelectorView extends LinearLayout implements KeyguardSecuri
mGlowPadView = (GlowPadView) findViewById(R.id.glow_pad_view);
mGlowPadView.setOnTriggerListener(mOnTriggerListener);
mEmergencyCallButton = (Button) findViewById(R.id.emergency_call_button);
mEmergencyCallButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
takeEmergencyCallAction();
}
});
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) {
return mGlowPadView.getTargetPosition(resId) != -1;
}

View File

@@ -21,6 +21,7 @@ import android.util.AttributeSet;
import android.widget.GridLayout;
public class KeyguardStatusView extends GridLayout {
@SuppressWarnings("unused")
private KeyguardStatusViewManager mStatusViewManager;
public KeyguardStatusView(Context context) {

View File

@@ -32,11 +32,10 @@ import android.text.TextUtils;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.View;
import android.widget.Button;
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 {
private static final boolean DEBUG = false;
@@ -92,21 +91,12 @@ class KeyguardStatusViewManager {
private boolean mShowingStatus;
private CharSequence mPlmn;
private CharSequence mSpn;
protected int mPhoneState;
private DigitalClock mDigitalClock;
protected boolean mBatteryCharged;
protected boolean mBatteryIsLow;
private boolean mEmergencyButtonEnabledBecauseSimLocked;
private Button mEmergencyCallButton;
private boolean mEmergencyCallButtonEnabledInScreen;
/**
*
* @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) {
if (DEBUG) Log.v(TAG, "KeyguardStatusViewManager()");
@@ -364,7 +354,6 @@ class KeyguardStatusViewManager {
CharSequence carrierText = null;
int carrierHelpTextId = 0;
mEmergencyButtonEnabledBecauseSimLocked = false;
mStatus = getStatusForIccState(simState);
mSimState = simState;
switch (mStatus) {
@@ -394,7 +383,6 @@ class KeyguardStatusViewManager {
carrierText = getContext().getText(
R.string.lockscreen_permanent_disabled_sim_message_short);
carrierHelpTextId = R.string.lockscreen_permanent_disabled_sim_instructions;
mEmergencyButtonEnabledBecauseSimLocked = true;
break;
case SimMissingLocked:
@@ -402,33 +390,25 @@ class KeyguardStatusViewManager {
getContext().getText(R.string.lockscreen_missing_sim_message_short),
mPlmn);
carrierHelpTextId = R.string.lockscreen_missing_sim_instructions;
mEmergencyButtonEnabledBecauseSimLocked = true;
break;
case SimLocked:
carrierText = makeCarrierStringOnEmergencyCapable(
getContext().getText(R.string.lockscreen_sim_locked_message),
mPlmn);
mEmergencyButtonEnabledBecauseSimLocked = true;
break;
case SimPukLocked:
carrierText = makeCarrierStringOnEmergencyCapable(
getContext().getText(R.string.lockscreen_sim_puk_locked_message),
mPlmn);
if (!mLockPatternUtils.isPukUnlockScreenEnable()) {
// This means we're showing the PUK unlock screen
mEmergencyButtonEnabledBecauseSimLocked = true;
}
break;
}
setCarrierText(carrierText);
setCarrierHelpText(carrierHelpTextId);
updateEmergencyCallButtonState(mPhoneState);
}
/*
* 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() {
@Override
@@ -536,12 +505,6 @@ class KeyguardStatusViewManager {
updateCarrierStateWithSimStatus(mSimState);
}
@Override
public void onPhoneStateChanged(int phoneState) {
mPhoneState = phoneState;
updateEmergencyCallButtonState(phoneState);
}
@Override
public void onSimStateChanged(IccCardConstants.State simState) {
updateCarrierStateWithSimStatus(simState);