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

Commit c495d92a authored by Tom Hsu's avatar Tom Hsu Committed by Android (Google) Code Review
Browse files

Merge "Show dialog on Wifi, and APM' entries in Settings" into main

parents 23349d60 29b2f16e
Loading
Loading
Loading
Loading
+48 −13
Original line number Diff line number Diff line
@@ -17,6 +17,9 @@ package com.android.settings.network;

import static android.provider.SettingsSlicesContract.KEY_AIRPLANE_MODE;

import static com.android.settings.network.SatelliteWarningDialogActivity.EXTRA_TYPE_OF_SATELLITE_WARNING_DIALOG;
import static com.android.settings.network.SatelliteWarningDialogActivity.TYPE_IS_AIRPLANE_MODE;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
@@ -25,6 +28,7 @@ import android.content.pm.PackageManager;
import android.net.Uri;
import android.provider.SettingsSlicesContract;
import android.telephony.TelephonyManager;
import android.util.Log;

import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.Fragment;
@@ -38,13 +42,20 @@ import com.android.settings.Utils;
import com.android.settings.core.TogglePreferenceController;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnDestroy;
import com.android.settingslib.core.lifecycle.events.OnResume;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean;

public class AirplaneModePreferenceController extends TogglePreferenceController
        implements LifecycleObserver, OnStart, OnStop, OnDestroy,
        implements LifecycleObserver, OnStart, OnResume, OnStop, OnDestroy,
        AirplaneModeEnabler.OnAirplaneModeChangedListener {

    private static final String TAG = AirplaneModePreferenceController.class.getSimpleName();
    public static final int REQUEST_CODE_EXIT_ECM = 1;

    /**
@@ -60,12 +71,15 @@ public class AirplaneModePreferenceController extends TogglePreferenceController
    private Fragment mFragment;
    private AirplaneModeEnabler mAirplaneModeEnabler;
    private TwoStatePreference mAirplaneModePreference;
    private SatelliteRepository mSatelliteRepository;
    @VisibleForTesting
    AtomicBoolean mIsSatelliteOn = new AtomicBoolean(false);

    public AirplaneModePreferenceController(Context context, String key) {
        super(context, key);

        if (isAvailable(mContext)) {
            mAirplaneModeEnabler = new AirplaneModeEnabler(mContext, this);
            mSatelliteRepository = new SatelliteRepository(mContext);
        }
    }

@@ -80,9 +94,9 @@ public class AirplaneModePreferenceController extends TogglePreferenceController

    @Override
    public boolean handlePreferenceTreeClick(Preference preference) {
        if (KEY_AIRPLANE_MODE.equals(preference.getKey()) && isAvailable()
                && mAirplaneModeEnabler.isInEcmMode()) {
        if (KEY_AIRPLANE_MODE.equals(preference.getKey()) && isAvailable()) {
            // In ECM mode launch ECM app dialog
            if (mAirplaneModeEnabler.isInEcmMode()) {
                if (mFragment != null) {
                    mFragment.startActivityForResult(
                            new Intent(TelephonyManager.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null)
@@ -92,6 +106,16 @@ public class AirplaneModePreferenceController extends TogglePreferenceController
                return true;
            }

            if (mIsSatelliteOn.get()) {
                mContext.startActivity(
                        new Intent(mContext, SatelliteWarningDialogActivity.class)
                                .putExtra(
                                        EXTRA_TYPE_OF_SATELLITE_WARNING_DIALOG,
                                        TYPE_IS_AIRPLANE_MODE)
                );
                return true;
            }
        }
        return false;
    }

@@ -134,6 +158,17 @@ public class AirplaneModePreferenceController extends TogglePreferenceController
        }
    }

    @Override
    public void onResume() {
        try {
            mIsSatelliteOn.set(
                    mSatelliteRepository.requestIsEnabled(Executors.newSingleThreadExecutor())
                            .get(2000, TimeUnit.MILLISECONDS));
        } catch (ExecutionException | TimeoutException | InterruptedException e) {
            Log.e(TAG, "Error to get satellite status : " + e);
        }
    }

    @Override
    public void onStop() {
        if (isAvailable()) {
@@ -165,7 +200,7 @@ public class AirplaneModePreferenceController extends TogglePreferenceController

    @Override
    public boolean setChecked(boolean isChecked) {
        if (isChecked() == isChecked) {
        if (isChecked() == isChecked || mIsSatelliteOn.get()) {
            return false;
        }
        if (isAvailable()) {
+1 −1
Original line number Diff line number Diff line
@@ -41,7 +41,7 @@ class SatelliteWarningDialogActivity : SpaDialogWindowTypeActivity() {
    }

    override fun getDialogWindowType(): Int {
        return WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW
        return WindowManager.LayoutParams.LAST_APPLICATION_WINDOW
    }

    @Composable
+35 −3
Original line number Diff line number Diff line
@@ -16,6 +16,9 @@

package com.android.settings.wifi;

import static com.android.settings.network.SatelliteWarningDialogActivity.EXTRA_TYPE_OF_SATELLITE_WARNING_DIALOG;
import static com.android.settings.network.SatelliteWarningDialogActivity.TYPE_IS_WIFI;

import android.app.settings.SettingsEnums;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -27,19 +30,26 @@ import android.net.wifi.SupplicantState;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.provider.Settings;
import android.util.Log;
import android.widget.Toast;

import androidx.annotation.VisibleForTesting;

import com.android.settings.R;
import com.android.settings.network.SatelliteRepository;
import com.android.settings.network.SatelliteWarningDialogActivity;
import com.android.settings.widget.SwitchWidgetController;
import com.android.settingslib.WirelessUtils;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean;

public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListener  {

    private static final String TAG = WifiEnabler.class.getSimpleName();
    private final SwitchWidgetController mSwitchWidget;
    private final WifiManager mWifiManager;
    private final ConnectivityManager mConnectivityManager;
@@ -48,7 +58,9 @@ public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListene
    private Context mContext;
    private boolean mListeningToOnSwitchChange = false;
    private AtomicBoolean mConnected = new AtomicBoolean(false);

    private SatelliteRepository mSatelliteRepository;
    @VisibleForTesting
    AtomicBoolean mIsSatelliteOn = new AtomicBoolean(false);

    private boolean mStateMachineEvent;
    private final IntentFilter mIntentFilter;
@@ -93,7 +105,7 @@ public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListene
        // The order matters! We really should not depend on this. :(
        mIntentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
        mIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);

        mSatelliteRepository = new SatelliteRepository(context);
        setupSwitchController();
    }

@@ -124,6 +136,14 @@ public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListene
            mSwitchWidget.startListening();
            mListeningToOnSwitchChange = true;
        }
        // Refresh satellite mode status.
        try {
            mIsSatelliteOn.set(
                    mSatelliteRepository.requestIsEnabled(Executors.newSingleThreadExecutor())
                            .get(2000, TimeUnit.MILLISECONDS));
        } catch (ExecutionException | TimeoutException | InterruptedException e) {
            Log.e(TAG, "Error to get satellite status : " + e);
        }
    }

    public void pause() {
@@ -185,6 +205,18 @@ public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListene
        if (mStateMachineEvent) {
            return true;
        }

        // Show dialog and do nothing under satellite mode.
        if (mIsSatelliteOn.get()) {
            mContext.startActivity(
                    new Intent(mContext, SatelliteWarningDialogActivity.class)
                            .putExtra(
                                    EXTRA_TYPE_OF_SATELLITE_WARNING_DIALOG,
                                    TYPE_IS_WIFI)
            );
            return false;
        }

        // Show toast message if Wi-Fi is not allowed in airplane mode
        if (isChecked && !WirelessUtils.isRadioAllowed(mContext, Settings.Global.RADIO_WIFI)) {
            Toast.makeText(mContext, R.string.wifi_in_airplane_mode, Toast.LENGTH_SHORT).show();
+20 −1
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ import com.android.settings.SubSettings;
import com.android.settings.Utils;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.network.NetworkProviderSettings;
import com.android.settings.network.SatelliteRepository;
import com.android.settings.network.WifiSwitchPreferenceController;
import com.android.settings.slices.CustomSliceable;
import com.android.settings.slices.SliceBackgroundWorker;
@@ -66,6 +67,10 @@ import com.android.wifitrackerlib.WifiEntry;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.stream.Collectors;

/**
@@ -228,7 +233,8 @@ public class WifiSlice implements CustomSliceable {
                .setAccentColor(COLOR_NOT_TINTED)
                .setKeywords(getKeywords())
                .addRow(getHeaderRow(isWifiEnabled, wifiSliceItem));
        if (!isWiFiPermissionGranted || !mWifiRestriction.isChangeWifiStateAllowed(mContext)) {
        if (!isWiFiPermissionGranted || !mWifiRestriction.isChangeWifiStateAllowed(mContext)
                || isSatelliteOn()) {
            return builder;
        }

@@ -419,4 +425,17 @@ public class WifiSlice implements CustomSliceable {
            return WifiEnterpriseRestrictionUtils.isChangeWifiStateAllowed(context);
        }
    }

    private boolean isSatelliteOn() {
        SatelliteRepository satelliteRepository = new SatelliteRepository(mContext);
        boolean isSatelliteOn = false;
        try {
            isSatelliteOn =
                    satelliteRepository.requestIsEnabled(Executors.newSingleThreadExecutor())
                            .get(2000, TimeUnit.MILLISECONDS);
        } catch (ExecutionException | TimeoutException | InterruptedException e) {
            Log.e(TAG, "Error to get satellite status : " + e);
        }
        return isSatelliteOn;
    }
}
+16 −0
Original line number Diff line number Diff line
@@ -18,12 +18,15 @@ package com.android.settings.wifi;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.wifi.WifiManager;
import android.util.AndroidRuntimeException;

import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsInternal;
import com.android.settings.widget.SwitchWidgetController;
@@ -65,4 +68,17 @@ public class WifiEnablerTest {

        assertThat(mEnabler.onSwitchToggled(true)).isTrue();
    }

    @Test
    public void onSwitchToggled_satelliteOn_startWarningActivity() {
        mEnabler.mIsSatelliteOn.set(true);

        try {
            mEnabler.onSwitchToggled(true);
        } catch (AndroidRuntimeException e) {
            // Catch exception of starting activity .
        }

        verify(mContext).startActivity(any());
    }
}
Loading