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

Commit 3b6f9fd2 authored by Jordan Demeulenaere's avatar Jordan Demeulenaere
Browse files

Animate the Data Saver QS dialog

See b/202268319#comment3 for before/after videos.

Bug: 202268319
Fixes: 202268319
Test: Manual
Change-Id: I76b55f331d82b3b3dbf9860ce1f1312ea9343ce7
parent f928f5b2
Loading
Loading
Loading
Loading
+26 −14
Original line number Diff line number Diff line
@@ -14,7 +14,6 @@

package com.android.systemui.qs.tiles;

import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Handler;
import android.os.Looper;
@@ -29,6 +28,7 @@ import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.Prefs;
import com.android.systemui.R;
import com.android.systemui.animation.DialogLaunchAnimator;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.plugins.ActivityStarter;
@@ -47,6 +47,7 @@ public class DataSaverTile extends QSTileImpl<BooleanState> implements
        DataSaverController.Listener{

    private final DataSaverController mDataSaverController;
    private final DialogLaunchAnimator mDialogLaunchAnimator;

    @Inject
    public DataSaverTile(
@@ -58,11 +59,13 @@ public class DataSaverTile extends QSTileImpl<BooleanState> implements
            StatusBarStateController statusBarStateController,
            ActivityStarter activityStarter,
            QSLogger qsLogger,
            DataSaverController dataSaverController
            DataSaverController dataSaverController,
            DialogLaunchAnimator dialogLaunchAnimator
    ) {
        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                statusBarStateController, activityStarter, qsLogger);
        mDataSaverController = dataSaverController;
        mDialogLaunchAnimator = dialogLaunchAnimator;
        mDataSaverController.observe(getLifecycle(), this);
    }

@@ -83,19 +86,28 @@ public class DataSaverTile extends QSTileImpl<BooleanState> implements
            toggleDataSaver();
            return;
        }
        // Shows dialog first

        // Show a dialog to confirm first. Dialogs shown by the DialogLaunchAnimator must be created
        // and shown on the main thread, so we post it to the UI handler.
        mUiHandler.post(() -> {
            SystemUIDialog dialog = new SystemUIDialog(mContext);
            dialog.setTitle(com.android.internal.R.string.data_saver_enable_title);
            dialog.setMessage(com.android.internal.R.string.data_saver_description);
            dialog.setPositiveButton(com.android.internal.R.string.data_saver_enable_button,
                (OnClickListener) (dialogInterface, which) -> {
                    (dialogInterface, which) -> {
                        toggleDataSaver();
                        Prefs.putBoolean(mContext, Prefs.Key.QS_DATA_SAVER_DIALOG_SHOWN, true);
                    });
            dialog.setNegativeButton(com.android.internal.R.string.cancel, null);
            dialog.setShowForAllUsers(true);

            if (view != null) {
                mDialogLaunchAnimator.showFromView(dialog, view);
            } else {
                dialog.show();
            }
        });
    }

    private void toggleDataSaver() {
        mState.value = !mDataSaverController.isDataSaverEnabled();