198 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			198 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.appcompat.widget;
 | |
| 
 | |
| import android.text.TextUtils;
 | |
| import android.util.Log;
 | |
| import android.view.MotionEvent;
 | |
| import android.view.View;
 | |
| import android.view.ViewConfiguration;
 | |
| import android.view.accessibility.AccessibilityManager;
 | |
| import androidx.core.view.ViewCompat;
 | |
| import androidx.core.view.ViewConfigurationCompat;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| class TooltipCompatHandler implements View.OnLongClickListener, View.OnHoverListener, View.OnAttachStateChangeListener {
 | |
|     private static final long HOVER_HIDE_TIMEOUT_MS = 15000;
 | |
|     private static final long HOVER_HIDE_TIMEOUT_SHORT_MS = 3000;
 | |
|     private static final long LONG_CLICK_HIDE_TIMEOUT_MS = 2500;
 | |
|     private static final String TAG = "TooltipCompatHandler";
 | |
|     private static TooltipCompatHandler sActiveHandler;
 | |
|     private static TooltipCompatHandler sPendingHandler;
 | |
|     private final View mAnchor;
 | |
|     private int mAnchorX;
 | |
|     private int mAnchorY;
 | |
|     private boolean mForceNextChangeSignificant;
 | |
|     private boolean mFromTouch;
 | |
|     private final int mHoverSlop;
 | |
|     private TooltipPopup mPopup;
 | |
|     private final CharSequence mTooltipText;
 | |
|     private final Runnable mShowRunnable = new Runnable() { // from class: androidx.appcompat.widget.TooltipCompatHandler$$ExternalSyntheticLambda0
 | |
|         @Override // java.lang.Runnable
 | |
|         public final void run() {
 | |
|             TooltipCompatHandler.this.m44lambda$new$0$androidxappcompatwidgetTooltipCompatHandler();
 | |
|         }
 | |
|     };
 | |
|     private final Runnable mHideRunnable = new Runnable() { // from class: androidx.appcompat.widget.TooltipCompatHandler$$ExternalSyntheticLambda1
 | |
|         @Override // java.lang.Runnable
 | |
|         public final void run() {
 | |
|             TooltipCompatHandler.this.hide();
 | |
|         }
 | |
|     };
 | |
| 
 | |
|     private void forceNextChangeSignificant() {
 | |
|         this.mForceNextChangeSignificant = true;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View.OnAttachStateChangeListener
 | |
|     public void onViewAttachedToWindow(View view) {
 | |
|     }
 | |
| 
 | |
|     /* renamed from: lambda$new$0$androidx-appcompat-widget-TooltipCompatHandler, reason: not valid java name */
 | |
|     /* synthetic */ void m44lambda$new$0$androidxappcompatwidgetTooltipCompatHandler() {
 | |
|         show(false);
 | |
|     }
 | |
| 
 | |
|     public static void setTooltipText(View view, CharSequence charSequence) {
 | |
|         TooltipCompatHandler tooltipCompatHandler = sPendingHandler;
 | |
|         if (tooltipCompatHandler != null && tooltipCompatHandler.mAnchor == view) {
 | |
|             setPendingHandler(null);
 | |
|         }
 | |
|         if (TextUtils.isEmpty(charSequence)) {
 | |
|             TooltipCompatHandler tooltipCompatHandler2 = sActiveHandler;
 | |
|             if (tooltipCompatHandler2 != null && tooltipCompatHandler2.mAnchor == view) {
 | |
|                 tooltipCompatHandler2.hide();
 | |
|             }
 | |
|             view.setOnLongClickListener(null);
 | |
|             view.setLongClickable(false);
 | |
|             view.setOnHoverListener(null);
 | |
|             return;
 | |
|         }
 | |
|         new TooltipCompatHandler(view, charSequence);
 | |
|     }
 | |
| 
 | |
|     private TooltipCompatHandler(View view, CharSequence charSequence) {
 | |
|         this.mAnchor = view;
 | |
|         this.mTooltipText = charSequence;
 | |
|         this.mHoverSlop = ViewConfigurationCompat.getScaledHoverSlop(ViewConfiguration.get(view.getContext()));
 | |
|         forceNextChangeSignificant();
 | |
|         view.setOnLongClickListener(this);
 | |
|         view.setOnHoverListener(this);
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View.OnLongClickListener
 | |
|     public boolean onLongClick(View view) {
 | |
|         this.mAnchorX = view.getWidth() / 2;
 | |
|         this.mAnchorY = view.getHeight() / 2;
 | |
|         show(true);
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View.OnHoverListener
 | |
|     public boolean onHover(View view, MotionEvent motionEvent) {
 | |
|         if (this.mPopup != null && this.mFromTouch) {
 | |
|             return false;
 | |
|         }
 | |
|         AccessibilityManager accessibilityManager = (AccessibilityManager) this.mAnchor.getContext().getSystemService("accessibility");
 | |
|         if (accessibilityManager.isEnabled() && accessibilityManager.isTouchExplorationEnabled()) {
 | |
|             return false;
 | |
|         }
 | |
|         int action = motionEvent.getAction();
 | |
|         if (action != 7) {
 | |
|             if (action == 10) {
 | |
|                 forceNextChangeSignificant();
 | |
|                 hide();
 | |
|             }
 | |
|         } else if (this.mAnchor.isEnabled() && this.mPopup == null && updateAnchorPos(motionEvent)) {
 | |
|             setPendingHandler(this);
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View.OnAttachStateChangeListener
 | |
|     public void onViewDetachedFromWindow(View view) {
 | |
|         hide();
 | |
|     }
 | |
| 
 | |
|     void show(boolean z) {
 | |
|         long longPressTimeout;
 | |
|         long j;
 | |
|         long j2;
 | |
|         if (ViewCompat.isAttachedToWindow(this.mAnchor)) {
 | |
|             setPendingHandler(null);
 | |
|             TooltipCompatHandler tooltipCompatHandler = sActiveHandler;
 | |
|             if (tooltipCompatHandler != null) {
 | |
|                 tooltipCompatHandler.hide();
 | |
|             }
 | |
|             sActiveHandler = this;
 | |
|             this.mFromTouch = z;
 | |
|             TooltipPopup tooltipPopup = new TooltipPopup(this.mAnchor.getContext());
 | |
|             this.mPopup = tooltipPopup;
 | |
|             tooltipPopup.show(this.mAnchor, this.mAnchorX, this.mAnchorY, this.mFromTouch, this.mTooltipText);
 | |
|             this.mAnchor.addOnAttachStateChangeListener(this);
 | |
|             if (this.mFromTouch) {
 | |
|                 j2 = LONG_CLICK_HIDE_TIMEOUT_MS;
 | |
|             } else {
 | |
|                 if ((ViewCompat.getWindowSystemUiVisibility(this.mAnchor) & 1) == 1) {
 | |
|                     longPressTimeout = ViewConfiguration.getLongPressTimeout();
 | |
|                     j = HOVER_HIDE_TIMEOUT_SHORT_MS;
 | |
|                 } else {
 | |
|                     longPressTimeout = ViewConfiguration.getLongPressTimeout();
 | |
|                     j = HOVER_HIDE_TIMEOUT_MS;
 | |
|                 }
 | |
|                 j2 = j - longPressTimeout;
 | |
|             }
 | |
|             this.mAnchor.removeCallbacks(this.mHideRunnable);
 | |
|             this.mAnchor.postDelayed(this.mHideRunnable, j2);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     void hide() {
 | |
|         if (sActiveHandler == this) {
 | |
|             sActiveHandler = null;
 | |
|             TooltipPopup tooltipPopup = this.mPopup;
 | |
|             if (tooltipPopup != null) {
 | |
|                 tooltipPopup.hide();
 | |
|                 this.mPopup = null;
 | |
|                 forceNextChangeSignificant();
 | |
|                 this.mAnchor.removeOnAttachStateChangeListener(this);
 | |
|             } else {
 | |
|                 Log.e(TAG, "sActiveHandler.mPopup == null");
 | |
|             }
 | |
|         }
 | |
|         if (sPendingHandler == this) {
 | |
|             setPendingHandler(null);
 | |
|         }
 | |
|         this.mAnchor.removeCallbacks(this.mHideRunnable);
 | |
|     }
 | |
| 
 | |
|     private static void setPendingHandler(TooltipCompatHandler tooltipCompatHandler) {
 | |
|         TooltipCompatHandler tooltipCompatHandler2 = sPendingHandler;
 | |
|         if (tooltipCompatHandler2 != null) {
 | |
|             tooltipCompatHandler2.cancelPendingShow();
 | |
|         }
 | |
|         sPendingHandler = tooltipCompatHandler;
 | |
|         if (tooltipCompatHandler != null) {
 | |
|             tooltipCompatHandler.scheduleShow();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void scheduleShow() {
 | |
|         this.mAnchor.postDelayed(this.mShowRunnable, ViewConfiguration.getLongPressTimeout());
 | |
|     }
 | |
| 
 | |
|     private void cancelPendingShow() {
 | |
|         this.mAnchor.removeCallbacks(this.mShowRunnable);
 | |
|     }
 | |
| 
 | |
|     private boolean updateAnchorPos(MotionEvent motionEvent) {
 | |
|         int x = (int) motionEvent.getX();
 | |
|         int y = (int) motionEvent.getY();
 | |
|         if (!this.mForceNextChangeSignificant && Math.abs(x - this.mAnchorX) <= this.mHoverSlop && Math.abs(y - this.mAnchorY) <= this.mHoverSlop) {
 | |
|             return false;
 | |
|         }
 | |
|         this.mAnchorX = x;
 | |
|         this.mAnchorY = y;
 | |
|         this.mForceNextChangeSignificant = false;
 | |
|         return true;
 | |
|     }
 | |
| }
 |