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:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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()));
|
||||
|
||||
@@ -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) {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user