Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a56f8f7c authored by Jim Miller's avatar Jim Miller Committed by Android (Google) Code Review
Browse files

Merge "Fix EmergencyDialer button on devices without telephony hardware" into jb-mr1-dev

parents 2b0442f3 47df44aa
Loading
Loading
Loading
Loading
+2 −31
Original line number Diff line number Diff line
@@ -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
+2 −1
Original line number Diff line number Diff line
@@ -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();
+43 −11
Original line number Diff line number Diff line
@@ -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;
    }
+1 −0
Original line number Diff line number Diff line
@@ -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) {
+1 −38
Original line number Diff line number Diff line
@@ -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);