Add key to store location changer
Store location changer into Settings.Secure
Modify quick settings to identify itself as location changer
Bug: 68779883
Test: Manual
Change-Id: I2c7a599e1383102685994d876e7160e164436a08
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 1ea4861..920dd81 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -5510,6 +5510,27 @@
public static final String LOCATION_MODE = "location_mode";
/**
+ * The App or module that changes the location mode.
+ * @hide
+ */
+ public static final String LOCATION_CHANGER = "location_changer";
+ /**
+ * The location changer is unknown or unable to detect.
+ * @hide
+ */
+ public static final int LOCATION_CHANGER_UNKNOWN = 0;
+ /**
+ * Location settings in system settings.
+ * @hide
+ */
+ public static final int LOCATION_CHANGER_SYSTEM_SETTINGS = 1;
+ /**
+ * The location icon in drop down notification drawer.
+ * @hide
+ */
+ public static final int LOCATION_CHANGER_QUICK_SETTINGS = 2;
+
+ /**
* Location access disabled.
*
* @deprecated To check location status, use {@link LocationManager#isLocationEnabled()}. To
@@ -7881,6 +7902,7 @@
CLONE_TO_MANAGED_PROFILE.add(DEFAULT_INPUT_METHOD);
CLONE_TO_MANAGED_PROFILE.add(ENABLED_ACCESSIBILITY_SERVICES);
CLONE_TO_MANAGED_PROFILE.add(ENABLED_INPUT_METHODS);
+ CLONE_TO_MANAGED_PROFILE.add(LOCATION_CHANGER);
CLONE_TO_MANAGED_PROFILE.add(LOCATION_MODE);
CLONE_TO_MANAGED_PROFILE.add(LOCATION_PROVIDERS_ALLOWED);
CLONE_TO_MANAGED_PROFILE.add(SELECTED_INPUT_METHOD_SUBTYPE);
diff --git a/core/tests/coretests/src/android/provider/SettingsBackupTest.java b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
index 225b685..196b4f5 100644
--- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java
+++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
@@ -496,6 +496,7 @@
Settings.Secure.INPUT_METHODS_SUBTYPE_HISTORY,
Settings.Secure.INSTALL_NON_MARKET_APPS,
Settings.Secure.LAST_SETUP_SHOWN,
+ Settings.Secure.LOCATION_CHANGER,
Settings.Secure.LOCATION_MODE,
Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, // Candidate?
Settings.Secure.LOCK_SCREEN_ALLOW_REMOTE_INPUT, // Candidate?
diff --git a/packages/SettingsLib/src/com/android/settingslib/Utils.java b/packages/SettingsLib/src/com/android/settingslib/Utils.java
index d001e66..1f67dfb 100644
--- a/packages/SettingsLib/src/com/android/settingslib/Utils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java
@@ -44,7 +44,11 @@
com.android.internal.R.drawable.ic_wifi_signal_4
};
- public static void updateLocationEnabled(Context context, boolean enabled, int userId) {
+ public static void updateLocationEnabled(Context context, boolean enabled, int userId,
+ int source) {
+ Settings.Secure.putIntForUser(
+ context.getContentResolver(), Settings.Secure.LOCATION_CHANGER, source,
+ userId);
Intent intent = new Intent(LocationManager.MODE_CHANGING_ACTION);
final int oldMode = Settings.Secure.getIntForUser(context.getContentResolver(),
@@ -62,7 +66,11 @@
wrapper.setLocationEnabledForUser(enabled, UserHandle.of(userId));
}
- public static boolean updateLocationMode(Context context, int oldMode, int newMode, int userId) {
+ public static boolean updateLocationMode(Context context, int oldMode, int newMode, int userId,
+ int source) {
+ Settings.Secure.putIntForUser(
+ context.getContentResolver(), Settings.Secure.LOCATION_CHANGER, source,
+ userId);
Intent intent = new Intent(LocationManager.MODE_CHANGING_ACTION);
intent.putExtra(CURRENT_MODE_KEY, oldMode);
intent.putExtra(NEW_MODE_KEY, newMode);
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java
index 327c1c8..5459fb7 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java
@@ -84,23 +84,31 @@
mContext,
Secure.LOCATION_MODE_OFF,
Secure.LOCATION_MODE_HIGH_ACCURACY,
- currentUserId);
+ currentUserId,
+ Settings.Secure.LOCATION_CHANGER_QUICK_SETTINGS);
verify(mContext).sendBroadcastAsUser(
argThat(actionMatches(LocationManager.MODE_CHANGING_ACTION)),
ArgumentMatchers.eq(UserHandle.of(currentUserId)),
ArgumentMatchers.eq(WRITE_SECURE_SETTINGS));
+ assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.LOCATION_CHANGER, Settings.Secure.LOCATION_CHANGER_UNKNOWN))
+ .isEqualTo(Settings.Secure.LOCATION_CHANGER_QUICK_SETTINGS);
}
@Test
public void testUpdateLocationEnabled_sendBroadcast() {
int currentUserId = ActivityManager.getCurrentUser();
- Utils.updateLocationEnabled(mContext, true, currentUserId);
+ Utils.updateLocationEnabled(mContext, true, currentUserId,
+ Settings.Secure.LOCATION_CHANGER_QUICK_SETTINGS);
verify(mContext).sendBroadcastAsUser(
argThat(actionMatches(LocationManager.MODE_CHANGING_ACTION)),
ArgumentMatchers.eq(UserHandle.of(currentUserId)),
ArgumentMatchers.eq(WRITE_SECURE_SETTINGS));
+ assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.LOCATION_CHANGER, Settings.Secure.LOCATION_CHANGER_UNKNOWN))
+ .isEqualTo(Settings.Secure.LOCATION_CHANGER_QUICK_SETTINGS);
}
@Test
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java
index 0b666a6..1e894ff 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationControllerImpl.java
@@ -32,6 +32,7 @@
import android.os.Process;
import android.os.UserHandle;
import android.os.UserManager;
+import android.provider.Settings;
import android.support.annotation.VisibleForTesting;
import com.android.systemui.util.Utils;
import java.util.ArrayList;
@@ -105,7 +106,8 @@
}
// When enabling location, a user consent dialog will pop up, and the
// setting won't be fully enabled until the user accepts the agreement.
- updateLocationEnabled(mContext, enabled, currentUserId);
+ updateLocationEnabled(mContext, enabled, currentUserId,
+ Settings.Secure.LOCATION_CHANGER_QUICK_SETTINGS);
return true;
}