diff --git a/android/brave_java_resources.gni b/android/brave_java_resources.gni
index bf7e6692966..5e5e9238410 100644
--- a/android/brave_java_resources.gni
+++ b/android/brave_java_resources.gni
@@ -63,6 +63,7 @@ brave_java_resources = [
"java/res/drawable/image_credit_rounded_shape.xml",
"java/res/drawable/rect_up_round_corners_12.xml",
"java/res/drawable/enable_rewards_button.xml",
+ "java/res/drawable/shields_tooltip_background.xml",
"java/res/drawable-hdpi/check.png",
"java/res/drawable-hdpi/btn_bookmark.png",
"java/res/drawable-hdpi/arrow_forward.png",
@@ -664,6 +665,7 @@ brave_java_resources = [
"java/res/layout/brave_shields_main_layout.xml",
"java/res/layout/fragment_brave_rewards_onboarding.xml",
"java/res/layout/brave_shields_toggle_layout.xml",
+ "java/res/layout/brave_shields_tooltip_layout.xml",
"java/res/layout/new_tab_page_layout.xml",
"java/res/layout/fragment_rate_dialog.xml",
"java/res/layout/brave_ads_new_user_dialog_layout.xml",
diff --git a/android/java/org/chromium/chrome/browser/shields/BraveShieldsHandler.java b/android/java/org/chromium/chrome/browser/shields/BraveShieldsHandler.java
index 239cdbdf058..78bc99e422a 100644
--- a/android/java/org/chromium/chrome/browser/shields/BraveShieldsHandler.java
+++ b/android/java/org/chromium/chrome/browser/shields/BraveShieldsHandler.java
@@ -194,7 +194,12 @@ public class BraveShieldsHandler implements BraveRewardsHelper.LargeIconReadyCal
mBraveRewardsNativeWorker = BraveRewardsNativeWorker.getInstance();
mIconFetcher = new BraveRewardsHelper();
+ showPopupMenu(anchorView, false);
+ updateValues(mTabId);
+ }
+
+ public PopupWindow showPopupMenu(View anchorView, boolean isTooltip) {
int rotation = ((Activity)mContext).getWindowManager().getDefaultDisplay().getRotation();
// This fixes the bug where the bottom of the menu starts at the top of
// the keyboard, instead of overlapping the keyboard as it should.
@@ -239,9 +244,13 @@ public class BraveShieldsHandler implements BraveRewardsHelper.LargeIconReadyCal
}
LayoutInflater inflater = (LayoutInflater) anchorView.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- mPopupView = inflater.inflate(R.layout.brave_shields_main_layout, null);
- setUpViews();
+ if (! isTooltip) {
+ mPopupView = inflater.inflate(R.layout.brave_shields_main_layout, null);
+ setUpViews();
+ } else {
+ mPopupView = inflater.inflate(R.layout.brave_shields_tooltip_layout, null);
+ }
//Specify the length and width through constants
int width = LinearLayout.LayoutParams.WRAP_CONTENT;
@@ -251,32 +260,32 @@ public class BraveShieldsHandler implements BraveRewardsHelper.LargeIconReadyCal
boolean focusable = true;
//Create a window with our parameters
- mPopupWindow = new PopupWindow(mPopupView, width, height, focusable);
- mPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
+ PopupWindow popupWindow = new PopupWindow(mPopupView, width, height, focusable);
+ popupWindow.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- mPopupWindow.setElevation(20);
+ popupWindow.setElevation(20);
}
// mPopup.setBackgroundDrawable(mContext.getResources().getDrawable(android.R.drawable.picture_frame));
//Set the location of the window on the screen
- mPopupWindow.showAsDropDown(anchorView, 0, 0);
- mPopupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
- mPopupWindow.setAnimationStyle(R.style.OverflowMenuAnim);
+ popupWindow.showAsDropDown(anchorView, 0, 0);
+ popupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
+ popupWindow.setAnimationStyle(R.style.OverflowMenuAnim);
// Turn off window animations for low end devices, and on Android M, which has built-in menu
// animations.
if (SysUtils.isLowEndDevice() || Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- mPopupWindow.setAnimationStyle(0);
+ popupWindow.setAnimationStyle(0);
}
Rect bgPadding = new Rect();
- mPopupWindow.getBackground().getPadding(bgPadding);
+ popupWindow.getBackground().getPadding(bgPadding);
int popupWidth = wrapper.getResources().getDimensionPixelSize(R.dimen.menu_width)
+ bgPadding.left + bgPadding.right;
- mPopupWindow.setWidth(popupWidth);
+ popupWindow.setWidth(popupWidth);
- updateValues(mTabId);
+ return popupWindow;
}
public void updateHost(String host) {
diff --git a/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayout.java b/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayout.java
index 5511138d613..b7dded27e64 100644
--- a/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayout.java
+++ b/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayout.java
@@ -21,6 +21,7 @@ import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.TextView;
+import android.widget.PopupWindow;
import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.base.ContextUtils;
@@ -238,6 +239,14 @@ public abstract class BraveToolbarLayout extends ToolbarLayout implements OnClic
if (getToolbarDataProvider().getTab() == tab) {
mBraveShieldsHandler.updateHost(url);
updateBraveShieldsButtonState(tab);
+ PopupWindow mPopupWindow = mBraveShieldsHandler.showPopupMenu(mBraveShieldsButton, true);
+ mPopupWindow.getContentView().setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ mPopupWindow.dismiss();
+ showShieldsMenu(mBraveShieldsButton);
+ }
+ });
}
}
@@ -274,23 +283,7 @@ public abstract class BraveToolbarLayout extends ToolbarLayout implements OnClic
return;
}
if (mBraveShieldsButton == v && mBraveShieldsButton != null) {
- Tab currentTab = getToolbarDataProvider().getTab();
- if (currentTab == null) {
- return;
- }
- try {
- URL url = new URL(currentTab.getUrlString());
- // Don't show shields popup if protocol is not valid for shields.
- if (!isValidProtocolForShields(url.getProtocol())) {
- return;
- }
- mBraveShieldsHandler.show(mBraveShieldsButton, currentTab.getUrlString(),
- url.getHost(), currentTab.getId(), Profile.fromWebContents(((TabImpl)currentTab).getWebContents()));
- } catch (Exception e) {
- // Do nothing if url is invalid.
- // Just return w/o showing shields popup.
- return;
- }
+ showShieldsMenu(mBraveShieldsButton);
} else if (mBraveRewardsButton == v && mBraveRewardsButton != null) {
Context context = getContext();
if ((PackageUtils.isFirstInstall(context)
@@ -315,6 +308,26 @@ public abstract class BraveToolbarLayout extends ToolbarLayout implements OnClic
}
}
+ private void showShieldsMenu(View mBraveShieldsButton) {
+ Tab currentTab = getToolbarDataProvider().getTab();
+ if (currentTab == null) {
+ return;
+ }
+ try {
+ URL url = new URL(currentTab.getUrlString());
+ // Don't show shields popup if protocol is not valid for shields.
+ if (!isValidProtocolForShields(url.getProtocol())) {
+ return;
+ }
+ mBraveShieldsHandler.show(mBraveShieldsButton, currentTab.getUrlString(),
+ url.getHost(), currentTab.getId(), Profile.fromWebContents(((TabImpl)currentTab).getWebContents()));
+ } catch (Exception e) {
+ // Do nothing if url is invalid.
+ // Just return w/o showing shields popup.
+ return;
+ }
+ }
+
@Override
public boolean onLongClick(View v) {
// Use null as the default description since Toast.showAnchoredToast
diff --git a/android/java/res/drawable/shields_tooltip_background.xml b/android/java/res/drawable/shields_tooltip_background.xml
new file mode 100644
index 00000000000..b4409b9d5b3
--- /dev/null
+++ b/android/java/res/drawable/shields_tooltip_background.xml
@@ -0,0 +1,12 @@
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/android/java/res/layout/brave_shields_tooltip_layout.xml b/android/java/res/layout/brave_shields_tooltip_layout.xml
new file mode 100644
index 00000000000..b3df2d19221
--- /dev/null
+++ b/android/java/res/layout/brave_shields_tooltip_layout.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file