Home | History | Annotate | Download | only in phone
      1 /*
      2  * Copyright (C) 2018 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.systemui.statusbar.phone;
     18 
     19 import android.content.Context;
     20 import android.os.SystemClock;
     21 import android.util.Slog;
     22 import android.view.WindowManager;
     23 import android.widget.Toast;
     24 
     25 import com.android.systemui.R;
     26 import com.android.systemui.SysUIToast;
     27 
     28 /**
     29  *  Helper to manage showing/hiding a image to notify them that they are entering or exiting screen
     30  *  pinning mode. All exposed methods should be called from a handler thread.
     31  */
     32 public class ScreenPinningNotify {
     33     private static final String TAG = "ScreenPinningNotify";
     34     private static final long SHOW_TOAST_MINIMUM_INTERVAL = 1000;
     35 
     36     private final Context mContext;
     37     private Toast mLastToast;
     38     private long mLastShowToastTime;
     39 
     40     public ScreenPinningNotify(Context context) {
     41         mContext = context;
     42     }
     43 
     44     /** Show "Screen pinned" toast. */
     45     public void showPinningStartToast() {
     46         makeAllUserToastAndShow(R.string.screen_pinning_start);
     47     }
     48 
     49     /** Show "Screen unpinned" toast. */
     50     public void showPinningExitToast() {
     51         makeAllUserToastAndShow(R.string.screen_pinning_exit);
     52     }
     53 
     54     /** Show a toast that describes the gesture the user should use to escape pinned mode. */
     55     public void showEscapeToast(boolean isRecentsButtonVisible) {
     56         long showToastTime = SystemClock.elapsedRealtime();
     57         if ((showToastTime - mLastShowToastTime) < SHOW_TOAST_MINIMUM_INTERVAL) {
     58             Slog.i(TAG, "Ignore toast since it is requested in very short interval.");
     59             return;
     60         }
     61         if (mLastToast != null) {
     62             mLastToast.cancel();
     63         }
     64         mLastToast = makeAllUserToastAndShow(isRecentsButtonVisible
     65                 ? R.string.screen_pinning_toast
     66                 : R.string.screen_pinning_toast_recents_invisible);
     67         mLastShowToastTime = showToastTime;
     68     }
     69 
     70     private Toast makeAllUserToastAndShow(int resId) {
     71         Toast toast = SysUIToast.makeText(mContext, resId, Toast.LENGTH_LONG);
     72         toast.show();
     73         return toast;
     74     }
     75 }
     76