[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;
}
}