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:
Jim Miller
2012-09-06 18:48:01 -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; 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

View File

@@ -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();

View File

@@ -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;
} }

View File

@@ -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) {

View File

@@ -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);