diff --git a/src/com/android/settings/development/qstile/DevelopmentTiles.java b/src/com/android/settings/development/qstile/DevelopmentTiles.java index 5482b028d35..ec017c510be 100644 --- a/src/com/android/settings/development/qstile/DevelopmentTiles.java +++ b/src/com/android/settings/development/qstile/DevelopmentTiles.java @@ -16,7 +16,9 @@ package com.android.settings.development.qstile; +import android.content.ComponentName; import android.content.Context; +import android.content.pm.PackageManager; import android.os.IBinder; import android.os.Parcel; import android.os.RemoteException; @@ -25,7 +27,6 @@ import android.os.SystemProperties; import android.provider.Settings; import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; -import androidx.annotation.VisibleForTesting; import android.util.Log; import android.view.IWindowManager; import android.view.ThreadedRenderer; @@ -34,9 +35,12 @@ import android.view.WindowManagerGlobal; import android.widget.Toast; import com.android.internal.app.LocalePicker; +import com.android.internal.statusbar.IStatusBarService; import com.android.settingslib.development.DevelopmentSettingsEnabler; import com.android.settingslib.development.SystemPropPoker; +import androidx.annotation.VisibleForTesting; + public abstract class DevelopmentTiles extends TileService { private static final String TAG = "DevelopmentTiles"; @@ -58,6 +62,20 @@ public abstract class DevelopmentTiles extends TileService { setIsEnabled(false); SystemPropPoker.getInstance().poke(); } + final ComponentName cn = new ComponentName(getPackageName(), getClass().getName()); + try { + getPackageManager().setComponentEnabledSetting( + cn, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, + PackageManager.DONT_KILL_APP); + final IStatusBarService statusBarService = IStatusBarService.Stub.asInterface( + ServiceManager.checkService(Context.STATUS_BAR_SERVICE)); + if (statusBarService != null) { + statusBarService.remTile(cn); + } + } catch (RemoteException e) { + Log.e(TAG, "Failed to modify QS tile for component " + + cn.toString(), e); + } state = Tile.STATE_UNAVAILABLE; } else { state = isEnabled() ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE; diff --git a/tests/robotests/src/com/android/settings/development/qstile/DevelopmentTilesTest.java b/tests/robotests/src/com/android/settings/development/qstile/DevelopmentTilesTest.java index 85c1cb522d2..8367fd3980e 100644 --- a/tests/robotests/src/com/android/settings/development/qstile/DevelopmentTilesTest.java +++ b/tests/robotests/src/com/android/settings/development/qstile/DevelopmentTilesTest.java @@ -19,7 +19,10 @@ package com.android.settings.development.qstile; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import android.content.ComponentName; +import android.content.pm.PackageManager; import android.service.quicksettings.Tile; import com.android.settings.testutils.SettingsRobolectricTestRunner; @@ -37,6 +40,9 @@ public class DevelopmentTilesTest { @Mock private Tile mTile; + @Mock + private PackageManager mPackageManager; + private DevelopmentTiles mService; @Before @@ -48,11 +54,18 @@ public class DevelopmentTilesTest { @Test public void refresh_devOptionIsDisabled_shouldResetTileValue() { + final ComponentName cn = new ComponentName( + mService.getPackageName(), mService.getClass().getName()); + doReturn(mPackageManager).when(mService).getPackageManager(); + DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(mService, false); mService.setIsEnabled(true); mService.refresh(); + verify(mPackageManager).setComponentEnabledSetting(cn, + PackageManager.COMPONENT_ENABLED_STATE_DISABLED, + PackageManager.DONT_KILL_APP); assertThat(mService.isEnabled()).isFalse(); } }