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

Commit 74ebbbeb authored by kaiyiz's avatar kaiyiz
Browse files

Keyguard: Disable "Emergency call" button in OOS state

For CTA LAB new requirement, there should be no "Emergency call" on
lock screen in OOS state.

Do not show emergency button when service state is STATE_OUT_OF_SERVICE
and isEmergencyOnly is false since it can't make emergency call.

CRs-Fixed: 669191

Change-Id: I8fa68a449429508b801990c10f99615a1d71bb01
parent 6faad0d5
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ import android.content.Intent;
import android.os.PowerManager;
import android.os.SystemClock;
import android.os.UserHandle;
import android.telephony.MSimTelephonyManager;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
import android.util.AttributeSet;
import android.view.View;
@@ -39,6 +41,7 @@ public class EmergencyButton extends Button {

    private static final int EMERGENCY_CALL_TIMEOUT = 10000; // screen timeout after starting e.d.
    private static final String ACTION_EMERGENCY_DIAL = "com.android.phone.EmergencyDialer.DIAL";
    private ServiceState mServiceState[];

    KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {

@@ -52,6 +55,13 @@ public class EmergencyButton extends Button {
            State simState = KeyguardUpdateMonitor.getInstance(mContext).getSimState();
            updateEmergencyCallButton(simState, phoneState);
        };

        void onServiceStateChanged(ServiceState state, int sub) {
            mServiceState[sub] = state;
            int phoneState = KeyguardUpdateMonitor.getInstance(mContext).getPhoneState();
            State simState = KeyguardUpdateMonitor.getInstance(mContext).getSimState();
            updateEmergencyCallButton(simState, phoneState);
        }
    };
    private LockPatternUtils mLockPatternUtils;
    private PowerManager mPowerManager;
@@ -62,6 +72,8 @@ public class EmergencyButton extends Button {

    public EmergencyButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        int numPhones = MSimTelephonyManager.getDefault().getPhoneCount();
        mServiceState = new ServiceState[numPhones];
    }

    @Override
@@ -88,9 +100,20 @@ public class EmergencyButton extends Button {
        });
        int phoneState = KeyguardUpdateMonitor.getInstance(mContext).getPhoneState();
        State simState = KeyguardUpdateMonitor.getInstance(mContext).getSimState();
        mServiceState = KeyguardUpdateMonitor.getInstance(mContext).getServiceStates();
        updateEmergencyCallButton(simState, phoneState);
    }

    private boolean canMakeEmergencyCall() {
        for (ServiceState state : mServiceState) {
            if ((state != null) && (state.isEmergencyOnly() ||
                    state.getVoiceRegState() != ServiceState.STATE_OUT_OF_SERVICE)) {
                return true;
            }
        }
        return false;
    }

    /**
     * Shows the emergency dialer or returns the user to the existing call.
     */
@@ -128,6 +151,9 @@ public class EmergencyButton extends Button {
                        mContext.getResources().getBoolean(R.bool.config_showEmergencyButton);
            }
        }
        if (mContext.getResources().getBoolean(R.bool.config_showEmergencyButton)) {
            enabled = enabled && canMakeEmergencyCall();
        }
        mLockPatternUtils.updateEmergencyCallButtonState(this, phoneState, enabled, false);
    }

+21 −0
Original line number Diff line number Diff line
@@ -100,6 +100,7 @@ public class KeyguardUpdateMonitor {
    private static final int MSG_SCREEN_TURNED_ON = 319;
    private static final int MSG_SCREEN_TURNED_OFF = 320;
    private static final int MSG_AIRPLANE_MODE_CHANGED = 321;
    private static final int MSG_SERVICE_STATE_CHANGED = 322;

    private static KeyguardUpdateMonitor sInstance;

@@ -211,6 +212,9 @@ public class KeyguardUpdateMonitor {
                case MSG_AIRPLANE_MODE_CHANGED:
                    handleAirplaneModeChanged((Boolean) msg.obj);
                    break;
                case MSG_SERVICE_STATE_CHANGED:
                    handleServiceStateChanged((ServiceState) msg.obj, msg.arg1);
                    break;
            }
        }
    };
@@ -334,6 +338,10 @@ public class KeyguardUpdateMonitor {
                Log.d(TAG, "ACTION_SERVICE_STATE_CHANGED on sub: " + sub + " showSpn:" +
                        mShowSpn[sub] + " showPlmn:" + mShowPlmn[sub] + " mServiceState: "
                        + mServiceState[sub]);
                final Message message =
                        mHandler.obtainMessage(MSG_SERVICE_STATE_CHANGED, mServiceState[sub]);
                message.arg1 = sub;
                mHandler.sendMessage(message);

                //display 2G/3G/4G if operator ask for showing radio tech
                if ((mServiceState[sub] != null) && (mServiceState[sub].getDataRegState() ==
@@ -955,6 +963,15 @@ public class KeyguardUpdateMonitor {
        }
    }

    private void handleServiceStateChanged(ServiceState state, int sub) {
        for (int i = 0; i < mCallbacks.size(); i++) {
            KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
            if (cb != null) {
                cb.onServiceStateChanged(state, sub);
            }
        }
    }

    /**
     * Handle {@link #MSG_CLOCK_VISIBILITY_CHANGED}
     */
@@ -1151,6 +1168,10 @@ public class KeyguardUpdateMonitor {
        return mSimState[subscription];
    }

    public ServiceState[] getServiceStates() {
        return mServiceState;
    }

    public int getPinLockedSubscription() {
        int sub = -1;
        for (int i = 0; i < mSimState.length; i++) {
+6 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.app.admin.DevicePolicyManager;
import android.graphics.Bitmap;
import android.media.AudioManager;
import android.os.SystemClock;
import android.telephony.ServiceState;
import android.view.WindowManagerPolicy;

import com.android.internal.telephony.IccCardConstants;
@@ -197,4 +198,9 @@ class KeyguardUpdateMonitorCallback {
     * @param on Indicates if the airplane mode is now enable.
     */
    void onAirplaneModeChanged(boolean on) { }

    /**
     * Called when the sevice state changes.
     */
    void onServiceStateChanged(ServiceState state, int sub) { }
}