Bug 1391579 Part 3: Add update indicator to top-level Add-ons menu entry
MozReview-Commit-ID: 937Zsd6yfBO
new file mode 100644
--- /dev/null
+++ b/mobile/android/app/src/main/res/drawable/ic_addon_update.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="16dp"
+ android:height="16dp"
+ android:viewportWidth="16"
+ android:viewportHeight="16">
+
+ <path
+ android:fillColor="#00FEFF"
+ android:pathData="M 8 0 L 8 0 Q 16 0 16 8 L 16 8 Q 16 16 8 16 L 8 16 Q 0 16 0 8 L 0 8 Q 0 0 8 0 Z" />
+ <path
+ android:fillColor="#000000"
+ android:strokeColor="#008EA4"
+ android:strokeWidth="2"
+ android:strokeLineCap="round"
+ android:pathData="M8,2 L8,14 M8,2 L4,6 M8,2 L12,6" />
+</vector>
--- a/mobile/android/app/src/main/res/menu/browser_app_menu.xml
+++ b/mobile/android/app/src/main/res/menu/browser_app_menu.xml
@@ -1,18 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<!-- We disable AlwaysShowAction because we interpret the menu
attributes ourselves and thus the warning isn't relevant to us. -->
<menu xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- tools:ignore="AlwaysShowAction">
+ xmlns:tools="http://schemas.android.com/tools"
+ xmlns:gecko="http://schemas.android.com/apk/res-auto"
+ tools:ignore="AlwaysShowAction">
<item android:id="@+id/back"
android:icon="@drawable/ic_menu_back"
android:title="@string/back"
android:showAsAction="always"/>
<item android:id="@+id/forward"
android:icon="@drawable/ic_menu_forward"
@@ -50,16 +51,17 @@
android:title="@string/find_in_page" />
<item android:id="@+id/desktop_mode"
android:title="@string/desktop_mode"
android:checkable="true" />
<item android:id="@+id/addons_top_level"
android:title="@string/addons"
+ gecko:itemType="icon_menu_item"
android:visible="false" />
<item android:id="@+id/page"
android:title="@string/page">
<menu>
<item android:id="@+id/subscribe"
--- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
@@ -3689,16 +3689,24 @@ public class BrowserApp extends GeckoApp
}
if (!Restrictions.isAllowed(this, Restrictable.GUEST_BROWSING)) {
MenuUtils.safeSetVisible(aMenu, R.id.new_guest_session, false);
}
if (SwitchBoard.isInExperiment(this, Experiments.TOP_ADDONS_MENU)) {
MenuUtils.safeSetVisible(aMenu, R.id.addons_top_level, true);
+ GeckoMenuItem item = (GeckoMenuItem) aMenu.findItem(R.id.addons_top_level);
+ if (item != null) {
+ if (mExtensionPermissionsHelper.getShowUpdateIcon()) {
+ item.setIcon(R.drawable.ic_addon_update);
+ } else {
+ item.setIcon(null);
+ }
+ }
MenuUtils.safeSetVisible(aMenu, R.id.addons, false);
} else {
MenuUtils.safeSetVisible(aMenu, R.id.addons_top_level, false);
MenuUtils.safeSetVisible(aMenu, R.id.addons, true);
}
if (!Restrictions.isAllowed(this, Restrictable.INSTALL_EXTENSION)) {
MenuUtils.safeSetVisible(aMenu, R.id.addons, false);
--- a/mobile/android/base/java/org/mozilla/gecko/extensions/ExtensionPermissionsHelper.java
+++ b/mobile/android/base/java/org/mozilla/gecko/extensions/ExtensionPermissionsHelper.java
@@ -8,37 +8,45 @@ package org.mozilla.gecko.extensions;
import org.mozilla.gecko.EventDispatcher;
import org.mozilla.gecko.util.BundleEventListener;
import org.mozilla.gecko.util.EventCallback;
import org.mozilla.gecko.util.GeckoBundle;
import org.mozilla.gecko.util.ResourceDrawableUtils;
import org.mozilla.gecko.R;
import android.app.AlertDialog;
+import android.content.Context;
import android.content.DialogInterface;
-import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
-import android.widget.ImageView;
import android.widget.TextView;
public class ExtensionPermissionsHelper implements BundleEventListener {
private final Context mContext;
+ private boolean mShowUpdateIcon;
public ExtensionPermissionsHelper(Context context) {
mContext = context;
EventDispatcher.getInstance().registerUiThreadListener(this,
- "Extension:PermissionPrompt");
+ "Extension:PermissionPrompt",
+ "Extension:ShowUpdateIcon",
+ null);
}
public void uninit() {
EventDispatcher.getInstance().unregisterUiThreadListener(this,
- "Extension:PermissionPrompt");
+ "Extension:PermissionPrompt",
+ "Extension:ShowUpdateIcon",
+ null);
+ }
+
+ public boolean getShowUpdateIcon() {
+ return mShowUpdateIcon;
}
@Override // BundleEventListener
public void handleMessage(final String event, final GeckoBundle message,
final EventCallback callback) {
if ("Extension:PermissionPrompt".equals(event)) {
final AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
@@ -77,11 +85,13 @@ public class ExtensionPermissionsHelper
public void onBitmapFound(final Drawable d) {
headerText.setCompoundDrawablesWithIntrinsicBounds(d, null, null, null);
}
});
}
final AlertDialog dialog = builder.create();
dialog.show();
+ } else if ("Extension:ShowUpdateIcon".equals(event)) {
+ mShowUpdateIcon = message.getBoolean("value");
}
}
}