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

Commit 17b8d553 authored by Salvador Martinez's avatar Salvador Martinez Committed by android-build-merger
Browse files

Merge "Update wifi p2p to direct user to enable location" into qt-dev

am: f32d29b7

Change-Id: Idb9a590747676b21f5636bdfd6ac02521d3facdf
parents 2646300e f32d29b7
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -74,7 +74,8 @@ public class ConfigureWifiSettings extends DashboardFragment {

    @Override
    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
        mWifiWakeupPreferenceController = new WifiWakeupPreferenceController(context, this);
        mWifiWakeupPreferenceController = new WifiWakeupPreferenceController(context, this,
                getSettingsLifecycle());
        mUseOpenWifiPreferenceController = new UseOpenWifiPreferenceController(context, this,
                getSettingsLifecycle());
        final WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
+29 −2
Original line number Diff line number Diff line
@@ -19,8 +19,10 @@ package com.android.settings.wifi;
import static com.android.settings.wifi.ConfigureWifiSettings.WIFI_WAKEUP_REQUEST_CODE;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.location.LocationManager;
import android.provider.Settings;
import android.text.TextUtils;
@@ -36,12 +38,17 @@ import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.utils.AnnotationSpan;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnPause;
import com.android.settingslib.core.lifecycle.events.OnResume;

/**
 * {@link PreferenceControllerMixin} that controls whether the Wi-Fi Wakeup feature should be
 * enabled.
 */
public class WifiWakeupPreferenceController extends AbstractPreferenceController {
public class WifiWakeupPreferenceController extends AbstractPreferenceController implements
        LifecycleObserver, OnPause, OnResume {

    private static final String TAG = "WifiWakeupPrefController";
    private static final String KEY_ENABLE_WIFI_WAKEUP = "enable_wifi_wakeup";
@@ -52,11 +59,21 @@ public class WifiWakeupPreferenceController extends AbstractPreferenceController
    SwitchPreference mPreference;
    @VisibleForTesting
    LocationManager mLocationManager;
    private final BroadcastReceiver mLocationReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            updateState(mPreference);
        }
    };
    private final IntentFilter mLocationFilter =
            new IntentFilter(LocationManager.MODE_CHANGED_ACTION);

    public WifiWakeupPreferenceController(Context context, DashboardFragment fragment) {
    public WifiWakeupPreferenceController(Context context, DashboardFragment fragment,
            Lifecycle lifecycle) {
        super(context);
        mFragment = fragment;
        mLocationManager = (LocationManager) context.getSystemService(Service.LOCATION_SERVICE);
        lifecycle.addObserver(this);
    }

    @Override
@@ -155,4 +172,14 @@ public class WifiWakeupPreferenceController extends AbstractPreferenceController
        Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.WIFI_WAKEUP_ENABLED,
                enabled ? 1 : 0);
    }

    @Override
    public void onResume() {
        mContext.registerReceiver(mLocationReceiver, mLocationFilter);
    }

    @Override
    public void onPause() {
        mContext.unregisterReceiver(mLocationReceiver);
    }
}
+25 −1
Original line number Diff line number Diff line
@@ -15,10 +15,12 @@
 */
package com.android.settings.wifi.p2p;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.location.LocationManager;
import android.net.wifi.WifiManager;

import androidx.annotation.VisibleForTesting;
@@ -49,6 +51,17 @@ public class WifiP2pPreferenceController extends AbstractPreferenceController
        }
    };
    private final IntentFilter mFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
    private final LocationManager mLocationManager;
    private final BroadcastReceiver mLocationReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (mWifiDirectPref != null) {
                updateState(mWifiDirectPref);
            }
        }
    };
    private final IntentFilter mLocationFilter =
            new IntentFilter(LocationManager.MODE_CHANGED_ACTION);

    private Preference mWifiDirectPref;

@@ -57,6 +70,7 @@ public class WifiP2pPreferenceController extends AbstractPreferenceController
        super(context);
        mWifiManager = wifiManager;
        lifecycle.addObserver(this);
        mLocationManager = (LocationManager) context.getSystemService(Service.LOCATION_SERVICE);
    }

    @Override
@@ -66,14 +80,22 @@ public class WifiP2pPreferenceController extends AbstractPreferenceController
        togglePreferences();
    }

    @Override
    public void updateState(Preference preference) {
        super.updateState(preference);
        preference.setEnabled(mLocationManager.isLocationEnabled() && mWifiManager.isWifiEnabled());
    }

    @Override
    public void onResume() {
        mContext.registerReceiver(mReceiver, mFilter);
        mContext.registerReceiver(mLocationReceiver, mLocationFilter);
    }

    @Override
    public void onPause() {
        mContext.unregisterReceiver(mReceiver);
        mContext.unregisterReceiver(mLocationReceiver);
    }

    @Override
@@ -88,7 +110,9 @@ public class WifiP2pPreferenceController extends AbstractPreferenceController

    private void togglePreferences() {
        if (mWifiDirectPref != null) {
            mWifiDirectPref.setEnabled(mWifiManager.isWifiEnabled());
            mWifiDirectPref.setEnabled(
                    mWifiManager.isWifiEnabled()
                    && mLocationManager.isLocationEnabled());
        }
    }
}
+4 −1
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import androidx.preference.SwitchPreference;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;

import com.android.settingslib.core.lifecycle.Lifecycle;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -53,12 +54,14 @@ public class WifiWakeupPreferenceControllerTest {
    private LocationManager mLocationManager;
    @Mock
    private SwitchPreference mPreference;
    @Mock
    private Lifecycle mLifecycle;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mContext = RuntimeEnvironment.application;
        mController = new WifiWakeupPreferenceController(mContext, mFragment);
        mController = new WifiWakeupPreferenceController(mContext, mFragment, mLifecycle);
        mController.mLocationManager = mLocationManager;
        mController.mPreference = mPreference;

+17 −2
Original line number Diff line number Diff line
@@ -22,20 +22,24 @@ import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.location.LocationManager;
import android.net.wifi.WifiManager;

import androidx.lifecycle.LifecycleOwner;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;

import com.android.settings.dashboard.DashboardFragment;
import com.android.settingslib.core.lifecycle.Lifecycle;

import org.junit.Before;
@@ -57,6 +61,8 @@ public class WifiP2PPreferenceControllerTest {
    private PreferenceScreen mScreen;
    @Mock
    private Preference mWifiDirectPreference;
    @Mock
    private LocationManager mLocationManager;

    private Lifecycle mLifecycle;
    private LifecycleOwner mLifecycleOwner;
@@ -69,6 +75,7 @@ public class WifiP2PPreferenceControllerTest {
        mLifecycle = new Lifecycle(mLifecycleOwner);
        when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager);
        when(mScreen.findPreference(anyString())).thenReturn(mWifiDirectPreference);
        when(mContext.getSystemService(eq(Service.LOCATION_SERVICE))).thenReturn(mLocationManager);
        mController = new WifiP2pPreferenceController(mContext, mLifecycle, mWifiManager);
    }

@@ -80,19 +87,21 @@ public class WifiP2PPreferenceControllerTest {
    @Test
    public void testOnResume_shouldRegisterListener() {
        mLifecycle.handleLifecycleEvent(ON_RESUME);
        verify(mContext).registerReceiver(any(BroadcastReceiver.class), any(IntentFilter.class));
        verify(mContext, times(2)).registerReceiver(
                any(BroadcastReceiver.class), any(IntentFilter.class));
    }

    @Test
    public void testOnPause_shouldUnregisterListener() {
        mLifecycle.handleLifecycleEvent(ON_RESUME);
        mLifecycle.handleLifecycleEvent(ON_PAUSE);
        verify(mContext).unregisterReceiver(any(BroadcastReceiver.class));
        verify(mContext, times(2)).unregisterReceiver(any(BroadcastReceiver.class));
    }

    @Test
    public void testWifiStateChange_shouldToggleEnabledState() {
        when(mWifiManager.isWifiEnabled()).thenReturn(true);
        when(mLocationManager.isLocationEnabled()).thenReturn(true);

        //Sets the preferences.
        mController.displayPreference(mScreen);
@@ -110,11 +119,17 @@ public class WifiP2PPreferenceControllerTest {
    @Test
    public void testDisplayPreference_shouldToggleEnabledState() {
        when(mWifiManager.isWifiEnabled()).thenReturn(true);
        when(mLocationManager.isLocationEnabled()).thenReturn(true);
        mController.displayPreference(mScreen);
        verify(mWifiDirectPreference).setEnabled(true);

        when(mWifiManager.isWifiEnabled()).thenReturn(false);
        mController.displayPreference(mScreen);
        verify(mWifiDirectPreference).setEnabled(false);

        when(mWifiManager.isWifiEnabled()).thenReturn(true);
        when(mLocationManager.isLocationEnabled()).thenReturn(false);
        mController.displayPreference(mScreen);
        verify(mWifiDirectPreference, times(2)).setEnabled(false);
    }
}