ADD week 5
This commit is contained in:
143
02-Easy5/E5/sources/androidx/appcompat/widget/TooltipPopup.java
Normal file
143
02-Easy5/E5/sources/androidx/appcompat/widget/TooltipPopup.java
Normal file
@ -0,0 +1,143 @@
|
||||
package androidx.appcompat.widget;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.ContextWrapper;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Rect;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.TextView;
|
||||
import androidx.appcompat.R;
|
||||
import androidx.core.view.PointerIconCompat;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
class TooltipPopup {
|
||||
private static final String TAG = "TooltipPopup";
|
||||
private final View mContentView;
|
||||
private final Context mContext;
|
||||
private final WindowManager.LayoutParams mLayoutParams;
|
||||
private final TextView mMessageView;
|
||||
private final int[] mTmpAnchorPos;
|
||||
private final int[] mTmpAppPos;
|
||||
private final Rect mTmpDisplayFrame;
|
||||
|
||||
TooltipPopup(Context context) {
|
||||
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
|
||||
this.mLayoutParams = layoutParams;
|
||||
this.mTmpDisplayFrame = new Rect();
|
||||
this.mTmpAnchorPos = new int[2];
|
||||
this.mTmpAppPos = new int[2];
|
||||
this.mContext = context;
|
||||
View inflate = LayoutInflater.from(context).inflate(R.layout.abc_tooltip, (ViewGroup) null);
|
||||
this.mContentView = inflate;
|
||||
this.mMessageView = (TextView) inflate.findViewById(R.id.message);
|
||||
layoutParams.setTitle(getClass().getSimpleName());
|
||||
layoutParams.packageName = context.getPackageName();
|
||||
layoutParams.type = PointerIconCompat.TYPE_HAND;
|
||||
layoutParams.width = -2;
|
||||
layoutParams.height = -2;
|
||||
layoutParams.format = -3;
|
||||
layoutParams.windowAnimations = R.style.Animation_AppCompat_Tooltip;
|
||||
layoutParams.flags = 24;
|
||||
}
|
||||
|
||||
void show(View view, int i, int i2, boolean z, CharSequence charSequence) {
|
||||
if (isShowing()) {
|
||||
hide();
|
||||
}
|
||||
this.mMessageView.setText(charSequence);
|
||||
computePosition(view, i, i2, z, this.mLayoutParams);
|
||||
((WindowManager) this.mContext.getSystemService("window")).addView(this.mContentView, this.mLayoutParams);
|
||||
}
|
||||
|
||||
void hide() {
|
||||
if (isShowing()) {
|
||||
((WindowManager) this.mContext.getSystemService("window")).removeView(this.mContentView);
|
||||
}
|
||||
}
|
||||
|
||||
boolean isShowing() {
|
||||
return this.mContentView.getParent() != null;
|
||||
}
|
||||
|
||||
private void computePosition(View view, int i, int i2, boolean z, WindowManager.LayoutParams layoutParams) {
|
||||
int height;
|
||||
int i3;
|
||||
layoutParams.token = view.getApplicationWindowToken();
|
||||
int dimensionPixelOffset = this.mContext.getResources().getDimensionPixelOffset(R.dimen.tooltip_precise_anchor_threshold);
|
||||
if (view.getWidth() < dimensionPixelOffset) {
|
||||
i = view.getWidth() / 2;
|
||||
}
|
||||
if (view.getHeight() >= dimensionPixelOffset) {
|
||||
int dimensionPixelOffset2 = this.mContext.getResources().getDimensionPixelOffset(R.dimen.tooltip_precise_anchor_extra_offset);
|
||||
height = i2 + dimensionPixelOffset2;
|
||||
i3 = i2 - dimensionPixelOffset2;
|
||||
} else {
|
||||
height = view.getHeight();
|
||||
i3 = 0;
|
||||
}
|
||||
layoutParams.gravity = 49;
|
||||
int dimensionPixelOffset3 = this.mContext.getResources().getDimensionPixelOffset(z ? R.dimen.tooltip_y_offset_touch : R.dimen.tooltip_y_offset_non_touch);
|
||||
View appRootView = getAppRootView(view);
|
||||
if (appRootView == null) {
|
||||
Log.e(TAG, "Cannot find app view");
|
||||
return;
|
||||
}
|
||||
appRootView.getWindowVisibleDisplayFrame(this.mTmpDisplayFrame);
|
||||
if (this.mTmpDisplayFrame.left < 0 && this.mTmpDisplayFrame.top < 0) {
|
||||
Resources resources = this.mContext.getResources();
|
||||
int identifier = resources.getIdentifier("status_bar_height", "dimen", "android");
|
||||
int dimensionPixelSize = identifier != 0 ? resources.getDimensionPixelSize(identifier) : 0;
|
||||
DisplayMetrics displayMetrics = resources.getDisplayMetrics();
|
||||
this.mTmpDisplayFrame.set(0, dimensionPixelSize, displayMetrics.widthPixels, displayMetrics.heightPixels);
|
||||
}
|
||||
appRootView.getLocationOnScreen(this.mTmpAppPos);
|
||||
view.getLocationOnScreen(this.mTmpAnchorPos);
|
||||
int[] iArr = this.mTmpAnchorPos;
|
||||
int i4 = iArr[0];
|
||||
int[] iArr2 = this.mTmpAppPos;
|
||||
int i5 = i4 - iArr2[0];
|
||||
iArr[0] = i5;
|
||||
iArr[1] = iArr[1] - iArr2[1];
|
||||
layoutParams.x = (i5 + i) - (appRootView.getWidth() / 2);
|
||||
int makeMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, 0);
|
||||
this.mContentView.measure(makeMeasureSpec, makeMeasureSpec);
|
||||
int measuredHeight = this.mContentView.getMeasuredHeight();
|
||||
int i6 = this.mTmpAnchorPos[1];
|
||||
int i7 = ((i3 + i6) - dimensionPixelOffset3) - measuredHeight;
|
||||
int i8 = i6 + height + dimensionPixelOffset3;
|
||||
if (z) {
|
||||
if (i7 >= 0) {
|
||||
layoutParams.y = i7;
|
||||
return;
|
||||
} else {
|
||||
layoutParams.y = i8;
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (measuredHeight + i8 <= this.mTmpDisplayFrame.height()) {
|
||||
layoutParams.y = i8;
|
||||
} else {
|
||||
layoutParams.y = i7;
|
||||
}
|
||||
}
|
||||
|
||||
private static View getAppRootView(View view) {
|
||||
View rootView = view.getRootView();
|
||||
ViewGroup.LayoutParams layoutParams = rootView.getLayoutParams();
|
||||
if ((layoutParams instanceof WindowManager.LayoutParams) && ((WindowManager.LayoutParams) layoutParams).type == 2) {
|
||||
return rootView;
|
||||
}
|
||||
for (Context context = view.getContext(); context instanceof ContextWrapper; context = ((ContextWrapper) context).getBaseContext()) {
|
||||
if (context instanceof Activity) {
|
||||
return ((Activity) context).getWindow().getDecorView();
|
||||
}
|
||||
}
|
||||
return rootView;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user