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

Commit 616f3173 authored by Irfan Sheriff's avatar Irfan Sheriff
Browse files

Emergency callback mode handling

For wifi, track ECM and shut down and restart when device
goes in ECM and out

For p2p, simply turn off when in ECM mode

Bug: 5185246
Change-Id: I5f5bf75fac3e27db1d7c412135c796f2b137263d
parent e00633e4
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -69,6 +69,7 @@ import java.io.FileDescriptor;
import java.io.PrintWriter;

import com.android.internal.app.IBatteryStats;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.util.AsyncChannel;
import com.android.server.am.BatteryStatsService;
import com.android.internal.R;
@@ -96,6 +97,7 @@ public class WifiService extends IWifiManager.Stub {
    private static final int IDLE_REQUEST = 0;
    private boolean mScreenOff;
    private boolean mDeviceIdle;
    private boolean mEmergencyCallbackMode = false;
    private int mPluggedType;

    /* Chipset supports background scan */
@@ -996,6 +998,9 @@ public class WifiService extends IWifiManager.Stub {
                int state = intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE,
                        BluetoothAdapter.STATE_DISCONNECTED);
                mWifiStateMachine.sendBluetoothAdapterStateChange(state);
            } else if (action.equals(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED)) {
                mEmergencyCallbackMode = intent.getBooleanExtra("phoneinECMState", false);
                updateWifiState();
            }
        }

@@ -1057,7 +1062,13 @@ public class WifiService extends IWifiManager.Stub {
    private void updateWifiState() {
        boolean lockHeld = mLocks.hasLocks();
        int strongestLockMode = WifiManager.WIFI_MODE_FULL;
        boolean wifiShouldBeStarted = !mDeviceIdle || lockHeld;
        boolean wifiShouldBeStarted;

        if (mEmergencyCallbackMode) {
            wifiShouldBeStarted = false;
        } else {
            wifiShouldBeStarted = !mDeviceIdle || lockHeld;
        }

        if (lockHeld) {
            strongestLockMode = mLocks.getStrongestLockMode();
@@ -1097,6 +1108,7 @@ public class WifiService extends IWifiManager.Stub {
        intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
        intentFilter.addAction(ACTION_DEVICE_IDLE);
        intentFilter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED);
        intentFilter.addAction(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED);
        mContext.registerReceiver(mReceiver, intentFilter);
    }

+15 −3
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ import android.view.WindowManager;
import android.widget.EditText;

import com.android.internal.R;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.util.AsyncChannel;
import com.android.internal.util.Protocol;
import com.android.internal.util.State;
@@ -134,6 +135,8 @@ public class WifiP2pService extends IWifiP2pManager.Stub {

    /* Airplane mode changed */
    private static final int AIRPLANE_MODE_CHANGED          =   BASE + 6;
    /* Emergency callback mode */
    private static final int EMERGENCY_CALLBACK_MODE        =   BASE + 7;

    private final boolean mP2pSupported;
    private final String mDeviceType;
@@ -172,6 +175,7 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
        IntentFilter filter = new IntentFilter();
        filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
        filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
        filter.addAction(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED);
        filter.addAction(WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
        mContext.registerReceiver(new WifiStateReceiver(), filter);

@@ -185,14 +189,19 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
    private class WifiStateReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
            String action = intent.getAction();
            if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
                mWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
                        WifiManager.WIFI_STATE_DISABLED);
            } else if (intent.getAction().equals(WifiManager.WIFI_AP_STATE_CHANGED_ACTION)) {
            } else if (action.equals(WifiManager.WIFI_AP_STATE_CHANGED_ACTION)) {
                mWifiApState = intent.getIntExtra(WifiManager.EXTRA_WIFI_AP_STATE,
                        WifiManager.WIFI_AP_STATE_DISABLED);
            } else if (intent.getAction().equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) {
            } else if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) {
                mP2pStateMachine.sendMessage(AIRPLANE_MODE_CHANGED);
            } else if (action.equals(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED)) {
                if (intent.getBooleanExtra("phoneinECMState", false) == true) {
                    mP2pStateMachine.sendMessage(EMERGENCY_CALLBACK_MODE);
                }
            }
        }
    }
@@ -361,6 +370,9 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
                case AIRPLANE_MODE_CHANGED:
                    if (isAirplaneModeOn()) sendMessage(WifiP2pManager.DISABLE_P2P);
                    break;
                case EMERGENCY_CALLBACK_MODE:
                    sendMessage(WifiP2pManager.DISABLE_P2P);
                    break;
                    // Ignore
                case WIFI_DISABLE_USER_ACCEPT:
                case WIFI_DISABLE_USER_REJECT: