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

Commit e32ca146 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "Keyguard: Disable "Emergency call" button in OOS state"

parents ffb41749 74ebbbeb
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) { }
}