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

Commit 8b847dba authored by John Spurlock's avatar John Spurlock Committed by Android (Google) Code Review
Browse files

Merge "Delay transient navigation confirmation prompt." into klp-dev

parents 95b2299d 4cf6a948
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -943,7 +943,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                        }
                    }
                });
        mTransientNavigationConfirmation = new TransientNavigationConfirmation(mContext, mHandler);
        mTransientNavigationConfirmation = new TransientNavigationConfirmation(mContext);
        mWindowManagerFuncs.registerPointerEventListener(mSystemGestures);

        mVibrator = (Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE);
+53 −32
Original line number Diff line number Diff line
@@ -18,9 +18,13 @@ package com.android.internal.policy.impl;

import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.ArraySet;
import android.util.Slog;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.AnimationUtils;
import android.widget.Toast;

import com.android.internal.R;
@@ -30,29 +34,26 @@ import com.android.internal.R;
 *  is hidden.
 */
public class TransientNavigationConfirmation {
    private final String TAG = "TransientNavigationConfirmation";
    private final boolean DEBUG = false;
    private static final String TAG = "TransientNavigationConfirmation";
    private static final boolean DEBUG = false;

    private final Context mContext;
    private final Handler mHandler;
    private final H mHandler;
    private final ArraySet<String> mConfirmedUserPackages = new ArraySet<String>();

    private final Runnable mHandleDismiss = new Runnable() {
        @Override
        public void run() {
            if (mToast != null) {
                mToast.cancel();
                mToast = null;
            }
        }
    };
    private final long mShowDelayMs;

    private Toast mToast;
    private String mLastUserPackage;

    public TransientNavigationConfirmation(Context context, Handler handler) {
    public TransientNavigationConfirmation(Context context) {
        mContext = context;
        mHandler = handler;
        mHandler = new H();
        mShowDelayMs = getNavBarExitDuration() * 3;
    }

    private long getNavBarExitDuration() {
        Animation exit = AnimationUtils.loadAnimation(mContext, R.anim.dock_bottom_exit);
        return exit != null ? exit.getDuration() : 0;
    }

    public void transientNavigationChanged(int userId, String pkg, boolean isNavTransient) {
@@ -60,16 +61,17 @@ public class TransientNavigationConfirmation {
            return;
        }
        String userPkg = userId + ":" + pkg;
        mHandler.removeMessages(H.SHOW);
        if (isNavTransient) {
            mLastUserPackage = userPkg;
            if (!mConfirmedUserPackages.contains(userPkg)) {
                if (DEBUG) Slog.d(TAG, "Showing transient navigation confirmation for " + userPkg);
                mHandler.post(handleShowConfirmation(userPkg));
                mHandler.sendMessageDelayed(mHandler.obtainMessage(H.SHOW, userPkg), mShowDelayMs);
            }
        } else {
            mLastUserPackage = null;
            if (DEBUG) Slog.d(TAG, "Hiding transient navigation confirmation for " + userPkg);
            mHandler.post(mHandleDismiss);
            mHandler.sendEmptyMessage(H.HIDE);
        }
    }

@@ -80,10 +82,14 @@ public class TransientNavigationConfirmation {
        }
    }

    private Runnable handleShowConfirmation(final String userPkg) {
        return new Runnable() {
            @Override
            public void run() {
    private void handleHide() {
        if (mToast != null) {
            mToast.cancel();
            mToast = null;
        }
    }

    private void handleShow(String userPkg) {
        // create the confirmation toast bar
        final int msg = R.string.transient_navigation_confirmation;
        mToast = Toast.makeBar(mContext, msg, Toast.LENGTH_INFINITE);
@@ -95,16 +101,31 @@ public class TransientNavigationConfirmation {
        // show the confirmation
        mToast.show();
    }
        };
    }

    private Runnable confirmAction(final String userPkg) {
        return new Runnable() {
            @Override
            public void run() {
                mConfirmedUserPackages.add(userPkg);
                mHandleDismiss.run();
                handleHide();
            }
        };
    }

    private final class H extends Handler {
        private static final int SHOW = 0;
        private static final int HIDE = 1;

        @Override
        public void handleMessage(Message msg) {
            switch(msg.what) {
                case SHOW:
                    handleShow((String)msg.obj);
                    break;
                case HIDE:
                    handleHide();
                    break;
            }
        }
    }
}