Move static calls in TunerService to use deps

That way, they can use cached values for UserContext and others.

Test: manual, temporarily enabling TunerActivity in SettingsButton
Test: atest SystemUITests
Bug: 179913579
Change-Id: Ib0e74b39fbf72b33bbd1ec20f46695ae90b5cf3e
This commit is contained in:
Fabian Kozynski
2021-02-11 11:58:32 -05:00
parent 109836d6b6
commit df7e381902
6 changed files with 84 additions and 90 deletions

View File

@@ -95,7 +95,6 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme
mActivityStarter.postQSRunnableDismissingKeyguard(() -> {
if (isTunerEnabled()) {
mTunerService.showResetRequest(
mUserTracker.getUserHandle(),
() -> {
// Relaunch settings so that the tuner disappears.
startSettingsActivity();
@@ -103,7 +102,7 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme
} else {
Toast.makeText(getContext(), R.string.tuner_toast,
Toast.LENGTH_LONG).show();
mTunerService.setTunerEnabled(mUserTracker.getUserHandle(), true);
mTunerService.setTunerEnabled(true);
}
startSettingsActivity();
@@ -238,6 +237,6 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme
}
private boolean isTunerEnabled() {
return mTunerService.isTunerEnabled(mUserTracker.getUserHandle());
return mTunerService.isTunerEnabled();
}
}

View File

@@ -43,11 +43,13 @@ public class TunerActivity extends Activity implements
private static final String TAG_TUNER = "tuner";
private final DemoModeController mDemoModeController;
private final TunerService mTunerService;
@Inject
TunerActivity(DemoModeController demoModeController) {
TunerActivity(DemoModeController demoModeController, TunerService tunerService) {
super();
mDemoModeController = demoModeController;
mTunerService = tunerService;
}
protected void onCreate(Bundle savedInstanceState) {
@@ -67,7 +69,7 @@ public class TunerActivity extends Activity implements
"com.android.settings.action.DEMO_MODE");
final PreferenceFragment fragment = showDemoMode
? new DemoModeFragment(mDemoModeController)
: new TunerFragment();
: new TunerFragment(mTunerService);
getFragmentManager().beginTransaction().replace(R.id.content_frame,
fragment, TAG_TUNER).commit();
}

View File

@@ -15,7 +15,7 @@
*/
package com.android.systemui.tuner;
import android.app.ActivityManager;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
@@ -23,7 +23,6 @@ import android.content.DialogInterface;
import android.hardware.display.AmbientDisplayConfiguration;
import android.os.Build;
import android.os.Bundle;
import android.os.UserHandle;
import android.provider.Settings;
import android.view.Menu;
import android.view.MenuInflater;
@@ -56,6 +55,15 @@ public class TunerFragment extends PreferenceFragment {
private static final int MENU_REMOVE = Menu.FIRST + 1;
private final TunerService mTunerService;
// We are the only ones who ever call this constructor, so don't worry about the warning
@SuppressLint("ValidFragment")
public TunerFragment(TunerService tunerService) {
super();
mTunerService = tunerService;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -124,13 +132,9 @@ public class TunerFragment extends PreferenceFragment {
getActivity().finish();
return true;
case MENU_REMOVE:
UserHandle user = new UserHandle(ActivityManager.getCurrentUser());
TunerService.showResetRequest(getContext(), user, new Runnable() {
@Override
public void run() {
if (getActivity() != null) {
getActivity().finish();
}
mTunerService.showResetRequest(() -> {
if (getActivity() != null) {
getActivity().finish();
}
});
return true;

View File

@@ -15,19 +15,10 @@
package com.android.systemui.tuner;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.UserHandle;
import android.provider.Settings;
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.statusbar.phone.SystemUIDialog;
public abstract class TunerService {
@@ -47,6 +38,16 @@ public abstract class TunerService {
public abstract void addTunable(Tunable tunable, String... keys);
public abstract void removeTunable(Tunable tunable);
/**
* Sets the state of the {@link TunerActivity} component for the current user
*/
public abstract void setTunerEnabled(boolean enabled);
/**
* Returns true if the tuner is enabled for the current user.
*/
public abstract boolean isTunerEnabled();
public interface Tunable {
void onTuningChanged(String key, String newValue);
}
@@ -55,38 +56,6 @@ public abstract class TunerService {
mContext = context;
}
private static Context userContext(Context context, UserHandle user) {
try {
return context.createPackageContextAsUser(context.getPackageName(), 0, user);
} catch (NameNotFoundException e) {
return context;
}
}
/** Enables or disables the tuner for the supplied user. */
public void setTunerEnabled(UserHandle user, boolean enabled) {
setTunerEnabled(mContext, user, enabled);
}
public static final void setTunerEnabled(Context context, UserHandle user, boolean enabled) {
userContext(context, user).getPackageManager().setComponentEnabledSetting(
new ComponentName(context, TunerActivity.class),
enabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
: PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
/** Returns true if the tuner is enabled for the supplied user. */
public boolean isTunerEnabled(UserHandle user) {
return isTunerEnabled(mContext, user);
}
public static final boolean isTunerEnabled(Context context, UserHandle user) {
return userContext(context, user).getPackageManager().getComponentEnabledSetting(
new ComponentName(context, TunerActivity.class))
== PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
}
public static class ClearReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
@@ -97,35 +66,7 @@ public abstract class TunerService {
}
/** */
public void showResetRequest(UserHandle user, final Runnable onDisabled) {
showResetRequest(mContext, user, onDisabled);
}
public static final void showResetRequest(final Context context, UserHandle user,
final Runnable onDisabled) {
SystemUIDialog dialog = new SystemUIDialog(context);
dialog.setShowForAllUsers(true);
dialog.setMessage(R.string.remove_from_settings_prompt);
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, context.getString(R.string.cancel),
(OnClickListener) null);
dialog.setButton(DialogInterface.BUTTON_POSITIVE,
context.getString(R.string.guest_exit_guest_dialog_remove), new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Tell the tuner (in main SysUI process) to clear all its settings.
context.sendBroadcast(new Intent(TunerService.ACTION_CLEAR));
// Disable access to tuner.
TunerService.setTunerEnabled(context, user, false);
// Make them sit through the warning dialog again.
Settings.Secure.putInt(context.getContentResolver(),
TunerFragment.SETTING_SEEN_TUNER_WARNING, 0);
if (onDisabled != null) {
onDisabled.run();
}
}
});
dialog.show();
}
public abstract void showResetRequest(Runnable onDisabled);
public static boolean parseIntegerSwitch(String value, boolean defaultValue) {
try {

View File

@@ -15,8 +15,12 @@
*/
package com.android.systemui.tuner;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.database.ContentObserver;
import android.net.Uri;
@@ -32,13 +36,14 @@ import android.util.ArraySet;
import com.android.internal.util.ArrayUtils;
import com.android.systemui.DejankUtils;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.R;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.demomode.DemoModeController;
import com.android.systemui.qs.QSTileHost;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.util.leak.LeakDetector;
import java.util.HashSet;
@@ -83,6 +88,7 @@ public class TunerServiceImpl extends TunerService {
private int mCurrentUser;
private UserTracker.Callback mCurrentUserTracker;
private UserTracker mUserTracker;
private final ComponentName mTunerComponent;
/**
*/
@@ -92,7 +98,6 @@ public class TunerServiceImpl extends TunerService {
@Main Handler mainHandler,
LeakDetector leakDetector,
DemoModeController demoModeController,
BroadcastDispatcher broadcastDispatcher,
UserTracker userTracker) {
super(context);
mContext = context;
@@ -100,6 +105,7 @@ public class TunerServiceImpl extends TunerService {
mLeakDetector = leakDetector;
mDemoModeController = demoModeController;
mUserTracker = userTracker;
mTunerComponent = new ComponentName(mContext, TunerActivity.class);
for (UserInfo user : UserManager.get(mContext).getUsers()) {
mCurrentUser = user.getUserHandle().getIdentifier();
@@ -142,7 +148,7 @@ public class TunerServiceImpl extends TunerService {
}
}
if (oldVersion < 2) {
setTunerEnabled(mContext, mUserTracker.getUserHandle(), false);
setTunerEnabled(false);
}
// 3 Removed because of a revert.
if (oldVersion < 4) {
@@ -269,6 +275,46 @@ public class TunerServiceImpl extends TunerService {
}
}
@Override
public void setTunerEnabled(boolean enabled) {
mUserTracker.getUserContext().getPackageManager().setComponentEnabledSetting(
mTunerComponent,
enabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
: PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP
);
}
@Override
public boolean isTunerEnabled() {
return mUserTracker.getUserContext().getPackageManager().getComponentEnabledSetting(
mTunerComponent) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
}
@Override
public void showResetRequest(Runnable onDisabled) {
SystemUIDialog dialog = new SystemUIDialog(mContext);
dialog.setShowForAllUsers(true);
dialog.setMessage(R.string.remove_from_settings_prompt);
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, mContext.getString(R.string.cancel),
(DialogInterface.OnClickListener) null);
dialog.setButton(DialogInterface.BUTTON_POSITIVE,
mContext.getString(R.string.guest_exit_guest_dialog_remove), (d, which) -> {
// Tell the tuner (in main SysUI process) to clear all its settings.
mContext.sendBroadcast(new Intent(TunerService.ACTION_CLEAR));
// Disable access to tuner.
setTunerEnabled(false);
// Make them sit through the warning dialog again.
Secure.putInt(mContext.getContentResolver(),
TunerFragment.SETTING_SEEN_TUNER_WARNING, 0);
if (onDisabled != null) {
onDisabled.run();
}
});
dialog.show();
}
private class Observer extends ContentObserver {
public Observer() {
super(new Handler(Looper.getMainLooper()));

View File

@@ -14,7 +14,6 @@
package com.android.systemui.utils.leaks;
import android.os.UserHandle;
import android.testing.LeakCheck;
import com.android.systemui.tuner.TunerService;
@@ -78,12 +77,15 @@ public class FakeTunerService extends TunerService {
}
@Override
public void setTunerEnabled(UserHandle user, boolean enabled) {
public void setTunerEnabled(boolean enabled) {
mEnabled = enabled;
}
@Override
public boolean isTunerEnabled(UserHandle user) {
public boolean isTunerEnabled() {
return mEnabled;
}
@Override
public void showResetRequest(Runnable onDisabled) {}
}