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

Commit eb7af495 authored by talreja's avatar talreja
Browse files

Clear encryption or unencrypted notifier if state in airplane mode

Bug: 329106616
Test: manual
Flag: EXEMPT bugfix
Change-Id: I69d2a9a247cac4fac1f824ac0108a0e5e9a13357
parent d8208540
Loading
Loading
Loading
Loading
+38 −3
Original line number Diff line number Diff line
@@ -23,8 +23,10 @@ import static android.safetycenter.SafetySourceData.SEVERITY_LEVEL_RECOMMENDATIO

import android.annotation.IntDef;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
import android.net.Uri;
import android.safetycenter.SafetyCenterManager;
@@ -90,6 +92,9 @@ public class CellularNetworkSecuritySafetySource {
    private boolean mIdentifierDisclosureIssuesEnabled;
    private HashMap<Integer, IdentifierDisclosure> mIdentifierDisclosures = new HashMap<>();

    // Broadcast receiver for airplane mode intent broadcasts
    private final BroadcastReceiver mReceiver = new CellularNetworkSecurityBroadcastReceiver();

    /**
     * Gets a singleton CellularNetworkSecuritySafetySource.
     */
@@ -110,9 +115,22 @@ public class CellularNetworkSecuritySafetySource {

    /** Enables or disables the null cipher issue and clears any current issues. */
    public synchronized void setNullCipherIssueEnabled(Context context, boolean enabled) {
        // This check ensures that if we're enabled and we are asked to enable ourselves again (can
        // happen if the modem restarts), we don't clear our state.
        if (enabled != mNullCipherStateIssuesEnabled) {
            mNullCipherStateIssuesEnabled = enabled;
            mNullCipherStates.clear();
            updateSafetyCenter(context);
            if (enabled) {
                // Register for airplane mode intent broadcasts.
                IntentFilter intentFilter =
                        new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED);
                context.registerReceiver(mReceiver, intentFilter);
            } else {
                // Unregister for airplane mode intent broadcasts.
                context.unregisterReceiver(mReceiver);
            }
        }
    }

    /** Sets the null cipher issue state for the identified subscription. */
@@ -444,4 +462,21 @@ public class CellularNetworkSecuritySafetySource {
            return Objects.hash(mDisclosureCount, mWindowStart, mWindowEnd);
        }
    }

    /**
     * Receiver for airplane mode intent broadcasts for cellular network security.
     */
    private class CellularNetworkSecurityBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) {
                boolean airplaneMode = intent.getBooleanExtra("state", false);
                if (airplaneMode) {
                    mNullCipherStates.clear();
                    updateSafetyCenter(context);
                }
            }
        }
    }
}
+56 −1
Original line number Diff line number Diff line
@@ -32,8 +32,10 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.safetycenter.SafetySourceData;
import android.safetycenter.SafetySourceIssue;

@@ -110,9 +112,62 @@ public final class CellularNetworkSecuritySafetySourceTest extends TelephonyTest

    @Test
    public void disableNullCipherIssue_nullData() {
        ArgumentCaptor<SafetySourceData> data = ArgumentCaptor.forClass(SafetySourceData.class);

        mSafetySource.setNullCipherIssueEnabled(mContext, true);
        mSafetySource.setNullCipherIssueEnabled(mContext, false);

        verify(mSafetyCenterManagerWrapper, times(1)).setSafetySourceData(isNull());
        verify(mSafetyCenterManagerWrapper, times(2)).setSafetySourceData(data.capture());
        assertThat(data.getAllValues().get(1)).isNull();
    }

    @Test
    public void setNullCipherIssueEnabled_unregisterReceiver() {
        mSafetySource.setNullCipherIssueEnabled(mContext, true);
        mSafetySource.setNullCipherIssueEnabled(mContext, false);

        verify(mContext, times(1)).unregisterReceiver(any());
    }

    @Test
    public void setNullCipherIssueEnabled_registerReceiver() {
        ArgumentCaptor<IntentFilter> intentFilter = ArgumentCaptor.forClass(IntentFilter.class);

        mSafetySource.setNullCipherIssueEnabled(mContext, true);

        verify(mContext, times(1)).registerReceiver(any(), intentFilter.capture());
        assertThat(intentFilter.getAllValues().get(0).getAction(0)).isEqualTo(
                Intent.ACTION_AIRPLANE_MODE_CHANGED);
    }

    @Test
    public void cellularNetworkSecurityBroadcastReceiver_onReceive_enableAirplaneMode() {
        ArgumentCaptor<BroadcastReceiver> broadcastReceiver =
                ArgumentCaptor.forClass(BroadcastReceiver.class);
        Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
        intent.putExtra("state", true);
        mSafetySource.setNullCipherIssueEnabled(mContext, true);

        verify(mContext, times(1)).registerReceiver(broadcastReceiver.capture(), any());

        broadcastReceiver.getAllValues().get(0).onReceive(mContext, intent);

        verify(mSafetyCenterManagerWrapper, times(2)).setSafetySourceData(any());
    }

    @Test
    public void cellularNetworkSecurityBroadcastReceiver_onReceive_disableAirplaneMode() {
        ArgumentCaptor<BroadcastReceiver> broadcastReceiver =
                ArgumentCaptor.forClass(BroadcastReceiver.class);
        Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
        intent.putExtra("state", false);
        mSafetySource.setNullCipherIssueEnabled(mContext, true);

        verify(mContext, times(1)).registerReceiver(broadcastReceiver.capture(), any());

        broadcastReceiver.getAllValues().get(0).onReceive(mContext, intent);

        verify(mSafetyCenterManagerWrapper, times(1)).setSafetySourceData(any());
    }

    @Test