From 7410170ddc2b19d57e33c04217a721a2572d4853 Mon Sep 17 00:00:00 2001 From: Vladislav Kaznacheev Date: Mon, 12 Jun 2017 18:59:29 +0000 Subject: [PATCH 1/2] Revert "Use a PopupWindow to show tooltips" This reverts commit 77e539775b52da55a8b23f1a9765d471ee782013. Change-Id: Ic4054e0d507ce95ab93282d4da002dd804aeb26d --- .../com/android/internal/view/TooltipPopup.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/core/java/com/android/internal/view/TooltipPopup.java b/core/java/com/android/internal/view/TooltipPopup.java index d834e6383acde..ebbbdbb0d6a6d 100644 --- a/core/java/com/android/internal/view/TooltipPopup.java +++ b/core/java/com/android/internal/view/TooltipPopup.java @@ -25,7 +25,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; import android.view.WindowManagerGlobal; -import android.widget.PopupWindow; import android.widget.TextView; public class TooltipPopup { @@ -33,7 +32,6 @@ public class TooltipPopup { private final Context mContext; - private final PopupWindow mPopupWindow; private final View mContentView; private final TextView mMessageView; @@ -45,8 +43,6 @@ public class TooltipPopup { public TooltipPopup(Context context) { mContext = context; - mPopupWindow = new PopupWindow(context); - mPopupWindow.setBackgroundDrawable(null); mContentView = LayoutInflater.from(mContext).inflate( com.android.internal.R.layout.tooltip, null); mMessageView = (TextView) mContentView.findViewById( @@ -74,16 +70,17 @@ public class TooltipPopup { computePosition(anchorView, anchorX, anchorY, fromTouch, mLayoutParams); - mPopupWindow.setContentView(mContentView); - mPopupWindow.showAtLocation( - anchorView, mLayoutParams.gravity, mLayoutParams.x, mLayoutParams.y); + WindowManager wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE); + wm.addView(mContentView, mLayoutParams); } public void hide() { if (!isShowing()) { return; } - mPopupWindow.dismiss(); + + WindowManager wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE); + wm.removeView(mContentView); } public View getContentView() { @@ -91,7 +88,7 @@ public class TooltipPopup { } public boolean isShowing() { - return mPopupWindow.isShowing(); + return mContentView.getParent() != null; } public void updateContent(CharSequence tooltipText) { From d85915f78694dc15ee9ca1bbdbccffc183399810 Mon Sep 17 00:00:00 2001 From: Vladislav Kaznacheev Date: Mon, 12 Jun 2017 12:10:49 -0700 Subject: [PATCH 2/2] Pass window token when creating a tooltip popup This allows using tooltips in System UI. Bug: 62065980 Test: android.view.cts.TooltipTest passes Change-Id: If0a76d0806aa92efa4be57204c4517242b0ebb99 --- core/java/com/android/internal/view/TooltipPopup.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/java/com/android/internal/view/TooltipPopup.java b/core/java/com/android/internal/view/TooltipPopup.java index ebbbdbb0d6a6d..52357ac486c2e 100644 --- a/core/java/com/android/internal/view/TooltipPopup.java +++ b/core/java/com/android/internal/view/TooltipPopup.java @@ -97,6 +97,8 @@ public class TooltipPopup { private void computePosition(View anchorView, int anchorX, int anchorY, boolean fromTouch, WindowManager.LayoutParams outParams) { + outParams.token = anchorView.getWindowToken(); + final int tooltipPreciseAnchorThreshold = mContext.getResources().getDimensionPixelOffset( com.android.internal.R.dimen.tooltip_precise_anchor_threshold);