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

Commit bd36a811 authored by Evan Rosky's avatar Evan Rosky
Browse files

Add ability for sysui/featureflags to restart android

When setting flags/sysprops, full reboot is overkill.
This adds a way to just restart system_server.

Bug: 219067621
Test: Call API and verify that it restarts
Change-Id: I67aecbc6ec0570fbaf36165034648ab39da57940
parent 0ef7951d
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -808,4 +808,9 @@ public abstract class ActivityManagerInternal {
     * Register the bind service event listener callback.
     */
    public abstract void addBindServiceEventListener(@NonNull BindServiceEventListener listener);

    /**
     * Restart android.
     */
    public abstract void restart();
}
+3 −0
Original line number Diff line number Diff line
@@ -102,6 +102,9 @@ interface IStatusBarService
    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);
+14 −1
Original line number Diff line number Diff line
@@ -30,11 +30,13 @@ import android.content.Intent;
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 @@ public class FeatureFlagsDebug implements FeatureFlags, Dumpable {
    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 @@ public class FeatureFlagsDebug implements FeatureFlags, Dumpable {
            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 @@ public class FeatureFlagsDebug implements FeatureFlags, Dumpable {
        context.registerReceiver(mReceiver, filter, null, null,
                Context.RECEIVER_EXPORTED_UNAUDITED);
        dumpManager.registerDumpable(TAG, this);
        mBarService = barService;
    }

    @Override
@@ -212,6 +217,14 @@ public class FeatureFlagsDebug implements FeatureFlags, Dumpable {
        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) {
+4 −2
Original line number Diff line number Diff line
@@ -18,10 +18,10 @@ package com.android.systemui.flags
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 @@ class FeatureFlagsDebugTest : SysuiTestCase() {
    @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 @@ class FeatureFlagsDebugTest : SysuiTestCase() {
            mSecureSettings,
            mResources,
            mDumpManager,
            { mFlagMap }
            { mFlagMap },
            mBarService
        )
        verify(mFlagManager).restartAction = any()
        mBroadcastReceiver = withArgCaptor {
+5 −0
Original line number Diff line number Diff line
@@ -17122,6 +17122,11 @@ public class ActivityManagerService extends IActivityManager.Stub
            // 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) {
Loading