Merge "Send MODE_CHANGING broadcast before location mode change."
This commit is contained in:
@@ -13,6 +13,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.settings.location;
|
package com.android.settings.location;
|
||||||
|
|
||||||
|
import android.app.ActivityManager;
|
||||||
import android.Manifest.permission;
|
import android.Manifest.permission;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
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.OnPause;
|
||||||
import com.android.settingslib.core.lifecycle.events.OnResume;
|
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
|
* A class that listens to location settings change and modifies location settings
|
||||||
* settings.
|
* settings.
|
||||||
@@ -40,11 +43,6 @@ public class LocationEnabler implements LifecycleObserver, OnResume, OnPause {
|
|||||||
|
|
||||||
private static final String TAG = "LocationEnabler";
|
private static final String TAG = "LocationEnabler";
|
||||||
@VisibleForTesting
|
@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 =
|
static final IntentFilter INTENT_FILTER_LOCATION_MODE_CHANGED =
|
||||||
new IntentFilter(LocationManager.MODE_CHANGED_ACTION);
|
new IntentFilter(LocationManager.MODE_CHANGED_ACTION);
|
||||||
|
|
||||||
@@ -122,7 +120,7 @@ public class LocationEnabler implements LifecycleObserver, OnResume, OnPause {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
updateLocationMode(currentMode, mode);
|
updateLocationMode(mContext, currentMode, mode, ActivityManager.getCurrentUser());
|
||||||
refreshLocationMode();
|
refreshLocationMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,13 +152,4 @@ public class LocationEnabler implements LifecycleObserver, OnResume, OnPause {
|
|||||||
private boolean isRestricted() {
|
private boolean isRestricted() {
|
||||||
return mUserManager.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION);
|
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -16,9 +16,7 @@
|
|||||||
package com.android.settings.location;
|
package com.android.settings.location;
|
||||||
|
|
||||||
import static android.Manifest.permission.WRITE_SECURE_SETTINGS;
|
import static android.Manifest.permission.WRITE_SECURE_SETTINGS;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.ArgumentMatchers.anyString;
|
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.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import android.app.ActivityManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.UserInfo;
|
import android.content.pm.UserInfo;
|
||||||
|
import android.location.LocationManager;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import com.android.settings.TestConfig;
|
import com.android.settings.TestConfig;
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
|
import com.android.settings.testutils.shadow.ShadowSecureSettings;
|
||||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
@@ -52,11 +53,10 @@ import org.mockito.MockitoAnnotations;
|
|||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
import org.robolectric.annotation.Config;
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
@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 {
|
public class LocationEnablerTest {
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
@@ -178,8 +178,11 @@ public class LocationEnablerTest {
|
|||||||
|
|
||||||
mEnabler.setLocationMode(Settings.Secure.LOCATION_MODE_HIGH_ACCURACY);
|
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));
|
eq(WRITE_SECURE_SETTINGS));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@@ -16,29 +16,30 @@
|
|||||||
package com.android.settings.location;
|
package com.android.settings.location;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.support.v7.preference.PreferenceScreen;
|
import android.support.v7.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.settings.TestConfig;
|
import com.android.settings.TestConfig;
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
|
import com.android.settings.testutils.shadow.ShadowSecureSettings;
|
||||||
import com.android.settings.widget.RadioButtonPreference;
|
import com.android.settings.widget.RadioButtonPreference;
|
||||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
import org.robolectric.annotation.Config;
|
|
||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
@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 {
|
public class LocationModeRadioButtonPreferenceControllerTest {
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
|
Reference in New Issue
Block a user