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

Commit 2a89fa33 authored by Dave Mankoff's avatar Dave Mankoff
Browse files

3/N Remove DevProvCtrl & UserTracker from QSFooter

Remove DeviceProvisionedConroller and UserTracker from QSFooterImpl. This also adds
QSFooterImplControllerTest, and fixes one of the tests that was marked as failing.

Bug: 168904199
Test: manual
Change-Id: I0e04bef8df76c6b73c8844f4679cfef08b3b2c13
parent ffbae7f3
Loading
Loading
Loading
Loading
+13 −93
Original line number Original line Diff line number Diff line
@@ -20,10 +20,7 @@ import static android.app.StatusBarManager.DISABLE2_QUICK_SETTINGS;


import static com.android.systemui.util.InjectionInflationController.VIEW_CONTEXT;
import static com.android.systemui.util.InjectionInflationController.VIEW_CONTEXT;


import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Configuration;
import android.database.ContentObserver;
import android.database.ContentObserver;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuff.Mode;
@@ -36,21 +33,16 @@ import android.os.Handler;
import android.os.UserHandle;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.UserManager;
import android.provider.Settings;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.AttributeSet;
import android.view.View;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.FrameLayout;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.TextView;
import android.widget.Toast;


import androidx.annotation.Nullable;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.annotation.VisibleForTesting;


import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settingslib.Utils;
import com.android.settingslib.Utils;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.android.settingslib.drawable.UserIconDrawable;
import com.android.settingslib.drawable.UserIconDrawable;
@@ -59,23 +51,15 @@ import com.android.systemui.R;
import com.android.systemui.R.dimen;
import com.android.systemui.R.dimen;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.qs.TouchAnimator.Builder;
import com.android.systemui.qs.TouchAnimator.Builder;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.MultiUserSwitch;
import com.android.systemui.statusbar.phone.MultiUserSwitch;
import com.android.systemui.statusbar.phone.SettingsButton;
import com.android.systemui.statusbar.phone.SettingsButton;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.tuner.TunerService;


import javax.inject.Inject;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Named;


/** */
/** */
public class QSFooterImpl extends FrameLayout implements OnClickListener {
public class QSFooterImpl extends FrameLayout {

    private static final String TAG = "QSFooterImpl";

    private final ActivityStarter mActivityStarter;
    private final ActivityStarter mActivityStarter;
    private final DeviceProvisionedController mDeviceProvisionedController;
    private final UserTracker mUserTracker;
    private SettingsButton mSettingsButton;
    private SettingsButton mSettingsButton;
    protected View mSettingsContainer;
    protected View mSettingsContainer;
    private PageIndicator mPageIndicator;
    private PageIndicator mPageIndicator;
@@ -115,20 +99,14 @@ public class QSFooterImpl extends FrameLayout implements OnClickListener {


    @Inject
    @Inject
    public QSFooterImpl(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
    public QSFooterImpl(@Named(VIEW_CONTEXT) Context context, AttributeSet attrs,
            ActivityStarter activityStarter,
            ActivityStarter activityStarter) {
            DeviceProvisionedController deviceProvisionedController, UserTracker userTracker) {
        super(context, attrs);
        super(context, attrs);
        mActivityStarter = activityStarter;
        mActivityStarter = activityStarter;
        mDeviceProvisionedController = deviceProvisionedController;
        mUserTracker = userTracker;
    }
    }


    @VisibleForTesting
    @VisibleForTesting
    public QSFooterImpl(Context context, AttributeSet attrs) {
    public QSFooterImpl(Context context, AttributeSet attrs) {
        this(context, attrs,
        this(context, attrs, Dependency.get(ActivityStarter.class));
                Dependency.get(ActivityStarter.class),
                Dependency.get(DeviceProvisionedController.class),
                Dependency.get(UserTracker.class));
    }
    }


    @Override
    @Override
@@ -143,7 +121,6 @@ public class QSFooterImpl extends FrameLayout implements OnClickListener {


        mSettingsButton = findViewById(R.id.settings_button);
        mSettingsButton = findViewById(R.id.settings_button);
        mSettingsContainer = findViewById(R.id.settings_button_container);
        mSettingsContainer = findViewById(R.id.settings_button_container);
        mSettingsButton.setOnClickListener(this);


        mMultiUserSwitch = findViewById(R.id.multi_user_switch);
        mMultiUserSwitch = findViewById(R.id.multi_user_switch);
        mMultiUserAvatar = mMultiUserSwitch.findViewById(R.id.multi_user_avatar);
        mMultiUserAvatar = mMultiUserSwitch.findViewById(R.id.multi_user_avatar);
@@ -151,19 +128,6 @@ public class QSFooterImpl extends FrameLayout implements OnClickListener {
        mActionsContainer = findViewById(R.id.qs_footer_actions_container);
        mActionsContainer = findViewById(R.id.qs_footer_actions_container);
        mEditContainer = findViewById(R.id.qs_footer_actions_edit_container);
        mEditContainer = findViewById(R.id.qs_footer_actions_edit_container);
        mBuildText = findViewById(R.id.build);
        mBuildText = findViewById(R.id.build);
        mBuildText.setOnLongClickListener(view -> {
            CharSequence buildText = mBuildText.getText();
            if (!TextUtils.isEmpty(buildText)) {
                ClipboardManager service =
                        mUserTracker.getUserContext().getSystemService(ClipboardManager.class);
                String label = mContext.getString(R.string.build_number_clip_data_label);
                service.setPrimaryClip(ClipData.newPlainText(label, buildText));
                Toast.makeText(mContext, R.string.build_number_copy_toast, Toast.LENGTH_SHORT)
                        .show();
                return true;
            }
            return false;
        });


        // RenderThread is doing more harm than good when touching the header (to expand quick
        // RenderThread is doing more harm than good when touching the header (to expand quick
        // settings), so disable it for this view
        // settings), so disable it for this view
@@ -174,7 +138,6 @@ public class QSFooterImpl extends FrameLayout implements OnClickListener {
        addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight,
        addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight,
                oldBottom) -> updateAnimator(right - left));
                oldBottom) -> updateAnimator(right - left));
        setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
        setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
        updateEverything();
        setBuildText();
        setBuildText();
    }
    }


@@ -243,7 +206,8 @@ public class QSFooterImpl extends FrameLayout implements OnClickListener {
                .build();
                .build();
    }
    }


    public void setKeyguardShowing(boolean keyguardShowing) {
    /** */
    public void setKeyguardShowing() {
        setExpansion(mExpansionAmount);
        setExpansion(mExpansionAmount);
    }
    }


@@ -251,10 +215,10 @@ public class QSFooterImpl extends FrameLayout implements OnClickListener {
        mExpandClickListener = onClickListener;
        mExpandClickListener = onClickListener;
    }
    }


    public void setExpanded(boolean expanded) {
    void setExpanded(boolean expanded, boolean isTunerEnabled) {
        if (mExpanded == expanded) return;
        if (mExpanded == expanded) return;
        mExpanded = expanded;
        mExpanded = expanded;
        updateEverything();
        updateEverything(isTunerEnabled);
    }
    }


    public void setExpansion(float headerExpansionFraction) {
    public void setExpansion(float headerExpansionFraction) {
@@ -305,16 +269,16 @@ public class QSFooterImpl extends FrameLayout implements OnClickListener {
        info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_EXPAND);
        info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_EXPAND);
    }
    }


    public void disable(int state1, int state2, boolean animate) {
    void disable(int state2, boolean isTunerEnabled) {
        final boolean disabled = (state2 & DISABLE2_QUICK_SETTINGS) != 0;
        final boolean disabled = (state2 & DISABLE2_QUICK_SETTINGS) != 0;
        if (disabled == mQsDisabled) return;
        if (disabled == mQsDisabled) return;
        mQsDisabled = disabled;
        mQsDisabled = disabled;
        updateEverything();
        updateEverything(isTunerEnabled);
    }
    }


    public void updateEverything() {
    void updateEverything(boolean isTunerEnabled) {
        post(() -> {
        post(() -> {
            updateVisibilities();
            updateVisibilities(isTunerEnabled);
            updateClickabilities();
            updateClickabilities();
            setClickable(false);
            setClickable(false);
        });
        });
@@ -327,11 +291,10 @@ public class QSFooterImpl extends FrameLayout implements OnClickListener {
        mBuildText.setLongClickable(mBuildText.getVisibility() == View.VISIBLE);
        mBuildText.setLongClickable(mBuildText.getVisibility() == View.VISIBLE);
    }
    }


    private void updateVisibilities() {
    private void updateVisibilities(boolean isTunerEnabled) {
        mSettingsContainer.setVisibility(mQsDisabled ? View.GONE : View.VISIBLE);
        mSettingsContainer.setVisibility(mQsDisabled ? View.GONE : View.VISIBLE);
        mSettingsContainer.findViewById(R.id.tuner_icon).setVisibility(
        mSettingsContainer.findViewById(R.id.tuner_icon).setVisibility(
                TunerService.isTunerEnabled(mContext, mUserTracker.getUserHandle()) ? View.VISIBLE
                isTunerEnabled ? View.VISIBLE : View.INVISIBLE);
                        : View.INVISIBLE);
        final boolean isDemo = UserManager.isDeviceInDemoMode(mContext);
        final boolean isDemo = UserManager.isDeviceInDemoMode(mContext);
        mMultiUserSwitch.setVisibility(showUserSwitcher() ? View.VISIBLE : View.INVISIBLE);
        mMultiUserSwitch.setVisibility(showUserSwitcher() ? View.VISIBLE : View.INVISIBLE);
        mEditContainer.setVisibility(isDemo || !mExpanded ? View.INVISIBLE : View.VISIBLE);
        mEditContainer.setVisibility(isDemo || !mExpanded ? View.INVISIBLE : View.VISIBLE);
@@ -356,49 +319,6 @@ public class QSFooterImpl extends FrameLayout implements OnClickListener {
        mQuickQsPanel = panel;
        mQuickQsPanel = panel;
    }
    }


    @Override
    public void onClick(View v) {
        // Don't do anything until view are unhidden
        if (!mExpanded) {
            return;
        }

        if (v == mSettingsButton) {
            if (!mDeviceProvisionedController.isCurrentUserSetup()) {
                // If user isn't setup just unlock the device and dump them back at SUW.
                mActivityStarter.postQSRunnableDismissingKeyguard(() -> {
                });
                return;
            }
            MetricsLogger.action(mContext,
                    mExpanded ? MetricsProto.MetricsEvent.ACTION_QS_EXPANDED_SETTINGS_LAUNCH
                            : MetricsProto.MetricsEvent.ACTION_QS_COLLAPSED_SETTINGS_LAUNCH);
            if (mSettingsButton.isTunerClick()) {
                mActivityStarter.postQSRunnableDismissingKeyguard(() -> {
                    if (TunerService.isTunerEnabled(mContext, mUserTracker.getUserHandle())) {
                        TunerService.showResetRequest(mContext, mUserTracker.getUserHandle(),
                                () -> {
                                    // Relaunch settings so that the tuner disappears.
                                    startSettingsActivity();
                                });
                    } else {
                        Toast.makeText(getContext(), R.string.tuner_toast,
                                Toast.LENGTH_LONG).show();
                        TunerService.setTunerEnabled(mContext, mUserTracker.getUserHandle(), true);
                    }
                    startSettingsActivity();

                });
            } else {
                startSettingsActivity();
            }
        }
    }

    private void startSettingsActivity() {
        mActivityStarter.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS),
                true /* dismissShade */);
    }


    void onUserInfoChanged(Drawable picture, boolean isGuestUser) {
    void onUserInfoChanged(Drawable picture, boolean isGuestUser) {
        if (picture != null && isGuestUser && !(picture instanceof UserIconDrawable)) {
        if (picture != null && isGuestUser && !(picture instanceof UserIconDrawable)) {
+127 −6
Original line number Original line Diff line number Diff line
@@ -16,15 +16,29 @@


package com.android.systemui.qs;
package com.android.systemui.qs;


import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Drawable;
import android.os.UserManager;
import android.os.UserManager;
import android.text.TextUtils;
import android.view.View;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;


import androidx.annotation.Nullable;
import androidx.annotation.Nullable;


import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.R;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.qs.dagger.QSScope;
import com.android.systemui.qs.dagger.QSScope;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.SettingsButton;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.UserInfoController;
import com.android.systemui.statusbar.policy.UserInfoController;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.util.ViewController;
import com.android.systemui.util.ViewController;


import javax.inject.Inject;
import javax.inject.Inject;
@@ -37,6 +51,13 @@ public class QSFooterImplController extends ViewController<QSFooterImpl> impleme


    private final UserManager mUserManager;
    private final UserManager mUserManager;
    private final UserInfoController mUserInfoController;
    private final UserInfoController mUserInfoController;
    private final ActivityStarter mActivityStarter;
    private final DeviceProvisionedController mDeviceProvisionedController;
    private final UserTracker mUserTracker;
    private final TunerService mTunerService;
    private final MetricsLogger mMetricsLogger;
    private final SettingsButton mSettingsButton;
    private final TextView mBuildText;


    private final UserInfoController.OnUserInfoChangedListener mOnUserInfoChangedListener =
    private final UserInfoController.OnUserInfoChangedListener mOnUserInfoChangedListener =
            new UserInfoController.OnUserInfoChangedListener() {
            new UserInfoController.OnUserInfoChangedListener() {
@@ -47,19 +68,88 @@ public class QSFooterImplController extends ViewController<QSFooterImpl> impleme
        }
        }
    };
    };


    private final View.OnClickListener mSettingsOnClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Don't do anything until view are unhidden
            if (!mExpanded) {
                return;
            }

            if (v == mSettingsButton) {
                if (!mDeviceProvisionedController.isCurrentUserSetup()) {
                    // If user isn't setup just unlock the device and dump them back at SUW.
                    mActivityStarter.postQSRunnableDismissingKeyguard(() -> {
                    });
                    return;
                }
                mMetricsLogger.action(
                        mExpanded ? MetricsProto.MetricsEvent.ACTION_QS_EXPANDED_SETTINGS_LAUNCH
                                : MetricsProto.MetricsEvent.ACTION_QS_COLLAPSED_SETTINGS_LAUNCH);
                if (mSettingsButton.isTunerClick()) {
                    mActivityStarter.postQSRunnableDismissingKeyguard(() -> {
                        if (isTunerEnabled()) {
                            mTunerService.showResetRequest(
                                    mUserTracker.getUserHandle(),
                                    () -> {
                                        // Relaunch settings so that the tuner disappears.
                                        startSettingsActivity();
                                    });
                        } else {
                            Toast.makeText(getContext(), R.string.tuner_toast,
                                    Toast.LENGTH_LONG).show();
                            mTunerService.setTunerEnabled(mUserTracker.getUserHandle(), true);
                        }
                        startSettingsActivity();

                    });
                } else {
                    startSettingsActivity();
                }
            }
        }
    };

    private boolean mListening;
    private boolean mListening;
    private boolean mExpanded;


    @Inject
    @Inject
    QSFooterImplController(QSFooterImpl view, UserManager userManager,
    QSFooterImplController(QSFooterImpl view, UserManager userManager,
            UserInfoController userInfoController) {
            UserInfoController userInfoController, ActivityStarter activityStarter,
            DeviceProvisionedController deviceProvisionedController, UserTracker userTracker,
            TunerService tunerService, MetricsLogger metricsLogger) {
        super(view);
        super(view);
        mUserManager = userManager;
        mUserManager = userManager;
        mUserInfoController = userInfoController;
        mUserInfoController = userInfoController;
        mActivityStarter = activityStarter;
        mDeviceProvisionedController = deviceProvisionedController;
        mUserTracker = userTracker;
        mTunerService = tunerService;
        mMetricsLogger = metricsLogger;

        mSettingsButton = mView.findViewById(R.id.settings_button);
        mBuildText = mView.findViewById(R.id.build);
    }
    }




    @Override
    @Override
    protected void onViewAttached() {
    protected void onViewAttached() {
        mSettingsButton.setOnClickListener(mSettingsOnClickListener);
        mBuildText.setOnLongClickListener(view -> {
            CharSequence buildText = mBuildText.getText();
            if (!TextUtils.isEmpty(buildText)) {
                ClipboardManager service =
                        mUserTracker.getUserContext().getSystemService(ClipboardManager.class);
                String label = getResources().getString(R.string.build_number_clip_data_label);
                service.setPrimaryClip(ClipData.newPlainText(label, buildText));
                Toast.makeText(getContext(), R.string.build_number_copy_toast, Toast.LENGTH_SHORT)
                        .show();
                return true;
            }
            return false;
        });

        mView.updateEverything(isTunerEnabled());
    }
    }


    @Override
    @Override
@@ -80,9 +170,11 @@ public class QSFooterImplController extends ViewController<QSFooterImpl> impleme


    @Override
    @Override
    public void setExpanded(boolean expanded) {
    public void setExpanded(boolean expanded) {
        mView.setExpanded(expanded);
        mExpanded = expanded;
        mView.setExpanded(expanded, isTunerEnabled());
    }
    }



    @Override
    @Override
    public int getHeight() {
    public int getHeight() {
        return mView.getHeight();
        return mView.getHeight();
@@ -109,13 +201,15 @@ public class QSFooterImplController extends ViewController<QSFooterImpl> impleme


    @Override
    @Override
    public void setKeyguardShowing(boolean keyguardShowing) {
    public void setKeyguardShowing(boolean keyguardShowing) {
        mView.setKeyguardShowing(keyguardShowing);
        mView.setKeyguardShowing();
    }
    }


    /** */
    @Override
    @Override
    public void setExpandClickListener(View.OnClickListener onClickListener) {
    public void setExpandClickListener(View.OnClickListener onClickListener) {
        mView.setExpandClickListener(onClickListener);
        mView.setExpandClickListener(onClickListener);
    }
    }

    @Override
    @Override
    public void setQQSPanel(@Nullable QuickQSPanel panel) {
    public void setQQSPanel(@Nullable QuickQSPanel panel) {
        mView.setQQSPanel(panel);
        mView.setQQSPanel(panel);
@@ -123,7 +217,17 @@ public class QSFooterImplController extends ViewController<QSFooterImpl> impleme


    @Override
    @Override
    public void disable(int state1, int state2, boolean animate) {
    public void disable(int state1, int state2, boolean animate) {
        mView.disable(state1, state2, animate);
        mView.disable(state2, isTunerEnabled());
    }


    private void startSettingsActivity() {
        mActivityStarter.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS),
                true /* dismissShade */);
    }

    private boolean isTunerEnabled() {
        return mTunerService.isTunerEnabled(mUserTracker.getUserHandle());
    }
    }


    /**
    /**
@@ -135,15 +239,32 @@ public class QSFooterImplController extends ViewController<QSFooterImpl> impleme
    public static class Factory {
    public static class Factory {
        private final UserManager mUserManager;
        private final UserManager mUserManager;
        private final UserInfoController mUserInfoController;
        private final UserInfoController mUserInfoController;
        private final ActivityStarter mActivityStarter;
        private final DeviceProvisionedController mDeviceProvisionedController;
        private final UserTracker mUserTracker;
        private final TunerService mTunerService;
        private final MetricsLogger mMetricsLogger;


        @Inject
        @Inject
        Factory(UserManager userManager, UserInfoController userInfoController) {
        Factory(UserManager userManager, UserInfoController userInfoController,
                ActivityStarter activityStarter,
                DeviceProvisionedController deviceProvisionedController, UserTracker userTracker,
                TunerService tunerService, MetricsLogger metricsLogger) {
            mUserManager = userManager;
            mUserManager = userManager;
            mUserInfoController = userInfoController;
            mUserInfoController = userInfoController;
            mActivityStarter = activityStarter;
            mDeviceProvisionedController = deviceProvisionedController;
            mUserTracker = userTracker;
            mTunerService = tunerService;
            mMetricsLogger = metricsLogger;
        }
        }


        QSFooterImplController create(QSFooterImpl view) {
        QSFooterImplController create(QSFooterImpl view) {
            return new QSFooterImplController(view, mUserManager, mUserInfoController);
            QSFooterImplController controller = new QSFooterImplController(view, mUserManager,
                    mUserInfoController, mActivityStarter, mDeviceProvisionedController,
                    mUserTracker, mTunerService, mMetricsLogger);
            controller.init();
            return controller;
        }
        }
    }
    }
}
}
+20 −0
Original line number Original line Diff line number Diff line
@@ -32,6 +32,7 @@ import com.android.systemui.statusbar.phone.SystemUIDialog;
public abstract class TunerService {
public abstract class TunerService {


    public static final String ACTION_CLEAR = "com.android.systemui.action.CLEAR_TUNER";
    public static final String ACTION_CLEAR = "com.android.systemui.action.CLEAR_TUNER";
    private final Context mContext;


    public abstract void clearAll();
    public abstract void clearAll();
    public abstract void destroy();
    public abstract void destroy();
@@ -50,6 +51,10 @@ public abstract class TunerService {
        void onTuningChanged(String key, String newValue);
        void onTuningChanged(String key, String newValue);
    }
    }


    public TunerService(Context context) {
        mContext = context;
    }

    private static Context userContext(Context context, UserHandle user) {
    private static Context userContext(Context context, UserHandle user) {
        try {
        try {
            return context.createPackageContextAsUser(context.getPackageName(), 0, user);
            return context.createPackageContextAsUser(context.getPackageName(), 0, user);
@@ -58,6 +63,11 @@ public abstract class TunerService {
        }
        }
    }
    }


    /** 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) {
    public static final void setTunerEnabled(Context context, UserHandle user, boolean enabled) {
        userContext(context, user).getPackageManager().setComponentEnabledSetting(
        userContext(context, user).getPackageManager().setComponentEnabledSetting(
                new ComponentName(context, TunerActivity.class),
                new ComponentName(context, TunerActivity.class),
@@ -66,6 +76,11 @@ public abstract class TunerService {
                PackageManager.DONT_KILL_APP);
                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) {
    public static final boolean isTunerEnabled(Context context, UserHandle user) {
        return userContext(context, user).getPackageManager().getComponentEnabledSetting(
        return userContext(context, user).getPackageManager().getComponentEnabledSetting(
                new ComponentName(context, TunerActivity.class))
                new ComponentName(context, TunerActivity.class))
@@ -81,6 +96,11 @@ 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,
    public static final void showResetRequest(final Context context, UserHandle user,
            final Runnable onDisabled) {
            final Runnable onDisabled) {
        SystemUIDialog dialog = new SystemUIDialog(context);
        SystemUIDialog dialog = new SystemUIDialog(context);
+1 −0
Original line number Original line Diff line number Diff line
@@ -94,6 +94,7 @@ public class TunerServiceImpl extends TunerService {
            DemoModeController demoModeController,
            DemoModeController demoModeController,
            BroadcastDispatcher broadcastDispatcher,
            BroadcastDispatcher broadcastDispatcher,
            UserTracker userTracker) {
            UserTracker userTracker) {
        super(context);
        mContext = context;
        mContext = context;
        mContentResolver = mContext.getContentResolver();
        mContentResolver = mContext.getContentResolver();
        mLeakDetector = leakDetector;
        mLeakDetector = leakDetector;
+10 −0
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@


package com.android.systemui.util;
package com.android.systemui.util;


import android.content.Context;
import android.content.res.Resources;
import android.view.View;
import android.view.View;
import android.view.View.OnAttachStateChangeListener;
import android.view.View.OnAttachStateChangeListener;


@@ -75,6 +77,14 @@ public abstract class ViewController<T extends View> {
        }
        }
    }
    }


    protected Context getContext() {
        return mView.getContext();
    }

    protected Resources getResources() {
        return mView.getResources();
    }

    /**
    /**
     * Called when the view is attached and a call to {@link #init()} has been made in either order.
     * Called when the view is attached and a call to {@link #init()} has been made in either order.
     */
     */
Loading