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

Commit b44c5ac0 authored by Maggie Wang's avatar Maggie Wang Committed by Android (Google) Code Review
Browse files

Merge "Send MODE_CHANGING broadcast before location mode change."

parents 5be4c0fd 19496001
Loading
Loading
Loading
Loading
+4 −15
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@
 */
package com.android.settings.location;

import android.app.ActivityManager;
import android.Manifest.permission;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -32,6 +33,8 @@ import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnPause;
import com.android.settingslib.core.lifecycle.events.OnResume;

import static com.android.settingslib.Utils.updateLocationMode;

/**
 * A class that listens to location settings change and modifies location settings
 * settings.
@@ -40,11 +43,6 @@ public class LocationEnabler implements LifecycleObserver, OnResume, OnPause {

    private static final String TAG = "LocationEnabler";
    @VisibleForTesting
    static final String MODE_CHANGING_ACTION =
            "com.android.settings.location.MODE_CHANGING";
    private static final String CURRENT_MODE_KEY = "CURRENT_MODE";
    private static final String NEW_MODE_KEY = "NEW_MODE";
    @VisibleForTesting
    static final IntentFilter INTENT_FILTER_LOCATION_MODE_CHANGED =
            new IntentFilter(LocationManager.MODE_CHANGED_ACTION);

@@ -122,7 +120,7 @@ public class LocationEnabler implements LifecycleObserver, OnResume, OnPause {
            return;
        }

        updateLocationMode(currentMode, mode);
        updateLocationMode(mContext, currentMode, mode, ActivityManager.getCurrentUser());
        refreshLocationMode();
    }

@@ -154,13 +152,4 @@ public class LocationEnabler implements LifecycleObserver, OnResume, OnPause {
    private boolean isRestricted() {
        return mUserManager.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION);
    }

    private boolean updateLocationMode(int oldMode, int newMode) {
        final Intent intent = new Intent(MODE_CHANGING_ACTION);
        intent.putExtra(CURRENT_MODE_KEY, oldMode);
        intent.putExtra(NEW_MODE_KEY, newMode);
        mContext.sendBroadcast(intent, permission.WRITE_SECURE_SETTINGS);
        return Settings.Secure.putInt(
                mContext.getContentResolver(), Settings.Secure.LOCATION_MODE, newMode);
    }
}
+12 −9
Original line number Diff line number Diff line
@@ -16,9 +16,7 @@
package com.android.settings.location;

import static android.Manifest.permission.WRITE_SECURE_SETTINGS;

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

import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
@@ -31,18 +29,21 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.UserInfo;
import android.location.LocationManager;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
import android.text.TextUtils;

import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.ShadowSecureSettings;
import com.android.settingslib.core.lifecycle.Lifecycle;

import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -52,11 +53,10 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;

import java.util.ArrayList;
import java.util.List;

@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
@Config(manifest = TestConfig.MANIFEST_PATH,
        sdk = TestConfig.SDK_VERSION,
        shadows = {ShadowSecureSettings.class})
public class LocationEnablerTest {

    @Mock
@@ -178,8 +178,11 @@ public class LocationEnablerTest {

        mEnabler.setLocationMode(Settings.Secure.LOCATION_MODE_HIGH_ACCURACY);

        verify(mContext).sendBroadcast(argThat(actionMatches(mEnabler.MODE_CHANGING_ACTION)),
        verify(mContext).sendBroadcastAsUser(
                argThat(actionMatches(LocationManager.MODE_CHANGING_ACTION)),
                eq(UserHandle.of(ActivityManager.getCurrentUser())),
                eq(WRITE_SECURE_SETTINGS));

    }

    @Test
+6 −5
Original line number Diff line number Diff line
@@ -16,29 +16,30 @@
package com.android.settings.location;

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

import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.provider.Settings;
import android.support.v7.preference.PreferenceScreen;

import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.ShadowSecureSettings;
import com.android.settings.widget.RadioButtonPreference;
import com.android.settingslib.core.lifecycle.Lifecycle;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;

@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
@Config(
        manifest = TestConfig.MANIFEST_PATH,
        sdk = TestConfig.SDK_VERSION,
        shadows = {ShadowSecureSettings.class})
public class LocationModeRadioButtonPreferenceControllerTest {

    @Mock