Merge "Merge "Protect SID and NID in ServiceState with coarse location permission" am: 7013bca07a am: 5dbc71e1f0 am: 0b5def20fb"
diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java
index 294621e..d29d3d4 100644
--- a/core/java/android/app/ActivityManagerInternal.java
+++ b/core/java/android/app/ActivityManagerInternal.java
@@ -826,4 +826,9 @@
* Register the bind service event listener callback.
*/
public abstract void addBindServiceEventListener(@NonNull BindServiceEventListener listener);
+
+ /**
+ * Restart android.
+ */
+ public abstract void restart();
}
diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
index f6a1cc0..9e70392 100644
--- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
@@ -103,6 +103,9 @@
void shutdown();
void reboot(boolean safeMode);
+ /** just restarts android without rebooting device. Used for some feature flags. */
+ void restart();
+
void addTile(in ComponentName tile);
void remTile(in ComponentName tile);
void clickTile(in ComponentName tile);
diff --git a/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsDebug.java b/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsDebug.java
index f3b721c..df60599 100644
--- a/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsDebug.java
+++ b/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsDebug.java
@@ -30,11 +30,13 @@
import android.content.IntentFilter;
import android.content.res.Resources;
import android.os.Bundle;
+import android.os.RemoteException;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import com.android.internal.statusbar.IStatusBarService;
import com.android.systemui.Dumpable;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
@@ -70,6 +72,7 @@
private final Supplier<Map<Integer, Flag<?>>> mFlagsCollector;
private final Map<Integer, Boolean> mBooleanFlagCache = new TreeMap<>();
private final Map<Integer, String> mStringFlagCache = new TreeMap<>();
+ private final IStatusBarService mBarService;
@Inject
public FeatureFlagsDebug(
@@ -78,7 +81,8 @@
SecureSettings secureSettings,
@Main Resources resources,
DumpManager dumpManager,
- @Nullable Supplier<Map<Integer, Flag<?>>> flagsCollector) {
+ @Nullable Supplier<Map<Integer, Flag<?>>> flagsCollector,
+ IStatusBarService barService) {
mFlagManager = flagManager;
mSecureSettings = secureSettings;
mResources = resources;
@@ -91,6 +95,7 @@
context.registerReceiver(mReceiver, filter, null, null,
Context.RECEIVER_EXPORTED_UNAUDITED);
dumpManager.registerDumpable(TAG, this);
+ mBarService = barService;
}
@Override
@@ -212,6 +217,14 @@
System.exit(0);
}
+ private void restartAndroid() {
+ Log.i(TAG, "Restarting Android");
+ try {
+ mBarService.restart();
+ } catch (RemoteException e) {
+ }
+ }
+
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsDebugTest.kt b/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsDebugTest.kt
index 87bc732..4cc5673 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsDebugTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsDebugTest.kt
@@ -18,10 +18,10 @@
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
-import android.content.pm.PackageManager
import android.content.pm.PackageManager.NameNotFoundException
import android.content.res.Resources
import androidx.test.filters.SmallTest
+import com.android.internal.statusbar.IStatusBarService
import com.android.systemui.SysuiTestCase
import com.android.systemui.dump.DumpManager
import com.android.systemui.util.mockito.any
@@ -59,6 +59,7 @@
@Mock private lateinit var mSecureSettings: SecureSettings
@Mock private lateinit var mResources: Resources
@Mock private lateinit var mDumpManager: DumpManager
+ @Mock private lateinit var mBarService: IStatusBarService
private val mFlagMap = mutableMapOf<Int, Flag<*>>()
private lateinit var mBroadcastReceiver: BroadcastReceiver
private lateinit var mClearCacheAction: Consumer<Int>
@@ -72,7 +73,8 @@
mSecureSettings,
mResources,
mDumpManager,
- { mFlagMap }
+ { mFlagMap },
+ mBarService
)
verify(mFlagManager).restartAction = any()
mBroadcastReceiver = withArgCaptor {
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 2371101..e56098c 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -17149,6 +17149,11 @@
// It's a CopyOnWriteArrayList, so no lock is needed.
mBindServiceEventListeners.add(listener);
}
+
+ @Override
+ public void restart() {
+ ActivityManagerService.this.restart();
+ }
}
long inputDispatchingTimedOut(int pid, final boolean aboveSystem, String reason) {
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index 8fee539..66904b1 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -1433,6 +1433,22 @@
}
}
+ /**
+ * Allows the status bar to restart android (vs a full reboot).
+ */
+ @Override
+ public void restart() {
+ enforceStatusBarService();
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ mHandler.post(() -> {
+ mActivityManagerInternal.restart();
+ });
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
@Override
public void onGlobalActionsShown() {
enforceStatusBarService();