[MDM] Fix for incognito mode menu item

The incognito restriction was correctly gating incognito tab creation when
attempted from the 'new tab' screen, but I had missed the incognito icon
at the top of the menu.

The fix was to modify the IncognitoRestriction class to manage a new type
of control (the menu icon) and to push the gating logic down into the
Controller class (where it really belongs anyway).

Change-Id: I5395f060502907fcc7d03826568af1802450ad1b
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 12b8b29..99a40fe 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -98,6 +98,7 @@
 import com.android.browser.R;
 import com.android.browser.IntentHandler.UrlData;
 import com.android.browser.UI.ComboViews;
+import com.android.browser.mdm.IncognitoRestriction;
 import com.android.browser.mdm.URLFilterRestriction;
 import com.android.browser.mynavigation.AddMyNavigationPage;
 import com.android.browser.mynavigation.MyNavigationUtil;
@@ -1930,6 +1931,10 @@
         }
         mCurrentMenuState = mMenuState;
         mUi.onPrepareOptionsMenu(menu);
+
+        IncognitoRestriction.getInstance()
+                            .registerControl(menu.findItem(R.id.incognito_menu_id)
+                                                 .getIcon());
     }
 
     private void setMenuItemVisibility(Menu menu, int id,
@@ -3063,20 +3068,24 @@
     private Tab createNewTab(boolean incognito, boolean setActive,
             boolean useCurrent) {
         Tab tab = null;
-        if (mTabControl.canCreateNewTab()) {
-            tab = mTabControl.createNewTab(incognito, !setActive);
-            addTab(tab);
-            if (setActive) {
-                setActiveTab(tab);
-            } else {
-                tab.pause();
-            }
+        if (IncognitoRestriction.getInstance().isEnabled() && incognito) {
+            Toast.makeText(getContext(), R.string.mdm_managed_alert, Toast.LENGTH_SHORT).show();
         } else {
-            if (useCurrent) {
-                tab = mTabControl.getCurrentTab();
-                reuseTab(tab, null);
+            if (mTabControl.canCreateNewTab()) {
+                tab = mTabControl.createNewTab(incognito, !setActive);
+                addTab(tab);
+                if (setActive) {
+                    setActiveTab(tab);
+                } else {
+                    tab.pause();
+                }
             } else {
-                mUi.showMaxTabsWarning();
+                if (useCurrent) {
+                    tab = mTabControl.getCurrentTab();
+                    reuseTab(tab, null);
+                } else {
+                    mUi.showMaxTabsWarning();
+                }
             }
         }
         return tab;
diff --git a/src/com/android/browser/NavScreen.java b/src/com/android/browser/NavScreen.java
index 76d0703..d8bfd56 100644
--- a/src/com/android/browser/NavScreen.java
+++ b/src/com/android/browser/NavScreen.java
@@ -33,7 +33,6 @@
 import android.widget.PopupMenu;
 import android.widget.PopupMenu.OnMenuItemClickListener;
 import android.widget.RelativeLayout;
-import android.widget.Toast;
 
 import com.android.browser.NavTabScroller.OnRemoveListener;
 import com.android.browser.mdm.IncognitoRestriction;
@@ -117,7 +116,7 @@
                 R.string.accessibility_transition_navscreen));
         mToolbarLayout = findViewById(R.id.nav_toolbar_animate);
         mNewIncognitoTab = (ImageButton) findViewById(R.id.newincognitotab);
-        IncognitoRestriction.getInstance().registerButton(mNewIncognitoTab);
+        IncognitoRestriction.getInstance().registerControl(mNewIncognitoTab);
         mNewTab = (ImageButton) findViewById(R.id.newtab);
         mMore = (ImageButton) findViewById(R.id.more);
         mNewIncognitoTab.setOnClickListener(this);
@@ -149,11 +148,7 @@
         if (mNewTab == v) {
             openNewTab();
         } else if (mNewIncognitoTab == v) {
-            if (IncognitoRestriction.getInstance().isEnabled()) {
-                Toast.makeText(getContext(), R.string.mdm_managed_alert, Toast.LENGTH_SHORT).show();
-            } else {
-                openNewIncognitoTab();
-            }
+            openNewIncognitoTab();
         } else if (mMore == v) {
             showPopupMenu();
         }
diff --git a/src/com/android/browser/mdm/IncognitoRestriction.java b/src/com/android/browser/mdm/IncognitoRestriction.java
index eb62cd3..3ea1fe4 100644
--- a/src/com/android/browser/mdm/IncognitoRestriction.java
+++ b/src/com/android/browser/mdm/IncognitoRestriction.java
@@ -30,8 +30,11 @@
 
 package com.android.browser.mdm;
 
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
-import android.widget.ImageButton;
+import android.view.View;
+
+import java.util.ArrayList;
 
 public class IncognitoRestriction extends Restriction {
 
@@ -40,10 +43,14 @@
     public static final String INCOGNITO_RESTRICTION_ENABLED = "IncognitoRestrictionEnabled"; // boolean
 
     private static IncognitoRestriction sInstance;
-    private ImageButton mIncogButton = null;
+
+    private ArrayList<View> registeredViews;
+    private ArrayList<Drawable> registeredDrawables;
 
     private IncognitoRestriction() {
         super();
+        registeredViews = new ArrayList<>();
+        registeredDrawables = new ArrayList<>();
     }
 
     public static IncognitoRestriction getInstance() {
@@ -61,19 +68,40 @@
         updateButton();
     }
 
-    public void registerButton (ImageButton ib) {
-        mIncogButton = ib;
+    public void registerControl(View v) {
+        if (!registeredViews.contains(v)) {
+            registeredViews.add(v);
+        }
+        updateButton();
+    }
+
+    public void registerControl(Drawable d) {
+        if (!registeredDrawables.contains(d)) {
+            registeredDrawables.add(d);
+        }
         updateButton();
     }
 
     private void updateButton() {
-        if (null != mIncogButton) {
-            mIncogButton.setAlpha((float) (isEnabled() ? 0.5 : 1.0));
+        if (null != registeredViews) {
+            for (View v : registeredViews) {
+                if (null != v) {
+                    v.setAlpha((float) (isEnabled() ? 0.5 : 1.0));
+                }
+            }
+        }
+        if (null != registeredDrawables) {
+            for (Drawable d : registeredDrawables) {
+                if (null != d) {
+                    d.setAlpha((isEnabled() ? 0x80 : 0xff));
+                }
+            }
         }
     }
 
     // For testing
     public float getButtonAlpha() {
-        return mIncogButton != null ? mIncogButton.getAlpha() : (float) 1.0;
+        View v = registeredViews.get(0);
+        return v != null ? v.getAlpha() : (float) 1.0;
     }
 }