diff --git a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java index a6aab0f923a0..f143f176120b 100644 --- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java +++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java @@ -18,7 +18,6 @@ import org.mozilla.gecko.animation.PropertyAnimator; import org.mozilla.gecko.animation.TransitionsTracker; import org.mozilla.gecko.animation.ViewHelper; import org.mozilla.gecko.db.BrowserContract; -import org.mozilla.gecko.db.BrowserContract.Combined; import org.mozilla.gecko.db.BrowserDB; import org.mozilla.gecko.db.SuggestedSites; import org.mozilla.gecko.distribution.Distribution; @@ -33,6 +32,7 @@ import org.mozilla.gecko.gfx.ImmutableViewportMetrics; import org.mozilla.gecko.gfx.LayerView; import org.mozilla.gecko.home.BrowserSearch; import org.mozilla.gecko.home.HomeBanner; +import org.mozilla.gecko.home.HomeConfig; import org.mozilla.gecko.home.HomeConfig.PanelType; import org.mozilla.gecko.home.HomeConfigPrefsBackend; import org.mozilla.gecko.home.HomePager; @@ -85,7 +85,6 @@ import org.mozilla.gecko.util.NativeJSObject; import org.mozilla.gecko.util.PrefUtils; import org.mozilla.gecko.util.StringUtils; import org.mozilla.gecko.util.ThreadUtils; -import org.mozilla.gecko.util.UIAsyncTask; import org.mozilla.gecko.widget.AnchoredPopup; import org.mozilla.gecko.widget.GeckoActionProvider; @@ -103,7 +102,6 @@ import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.Resources; -import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; @@ -3349,6 +3347,12 @@ public class BrowserApp extends GeckoApp if (!SwitchBoard.isInExperiment(this, Experiments.BOOKMARKS_HISTORY_MENU)) { bookmarksList.setVisible(false); historyList.setVisible(false); + } else { + // Hide panel menu items if the panels themselves are hidden. + // If we don't know whether the panels are hidden, just show the menu items. + final SharedPreferences prefs = GeckoSharedPrefs.forProfile(getContext()); + bookmarksList.setVisible(prefs.getBoolean(HomeConfig.PREF_KEY_BOOKMARKS_PANEL_ENABLED, true)); + historyList.setVisible(prefs.getBoolean(HomeConfig.PREF_KEY_HISTORY_PANEL_ENABLED, true)); } return true; diff --git a/mobile/android/base/java/org/mozilla/gecko/home/HomeConfig.java b/mobile/android/base/java/org/mozilla/gecko/home/HomeConfig.java index db253142b0bf..85bd8d86510d 100644 --- a/mobile/android/base/java/org/mozilla/gecko/home/HomeConfig.java +++ b/mobile/android/base/java/org/mozilla/gecko/home/HomeConfig.java @@ -27,9 +27,11 @@ import android.content.Context; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; -import android.util.Log; public final class HomeConfig { + public static final String PREF_KEY_BOOKMARKS_PANEL_ENABLED = "bookmarksPanelEnabled"; + public static final String PREF_KEY_HISTORY_PANEL_ENABLED = "historyPanelEnabled"; + /** * Used to determine what type of HomeFragment subclass to use when creating * a given panel. With the exception of DYNAMIC, all of these types correspond diff --git a/mobile/android/base/java/org/mozilla/gecko/home/HomeConfigLoader.java b/mobile/android/base/java/org/mozilla/gecko/home/HomeConfigLoader.java index 0f9f3e4b40c5..914d0fdd1936 100644 --- a/mobile/android/base/java/org/mozilla/gecko/home/HomeConfigLoader.java +++ b/mobile/android/base/java/org/mozilla/gecko/home/HomeConfigLoader.java @@ -5,14 +5,11 @@ package org.mozilla.gecko.home; -import org.mozilla.gecko.home.HomeConfig.PanelConfig; import org.mozilla.gecko.home.HomeConfig.OnReloadListener; import android.content.Context; import android.support.v4.content.AsyncTaskLoader; -import java.util.List; - public class HomeConfigLoader extends AsyncTaskLoader { private final HomeConfig mConfig; private HomeConfig.State mConfigState; diff --git a/mobile/android/base/java/org/mozilla/gecko/home/HomeConfigPrefsBackend.java b/mobile/android/base/java/org/mozilla/gecko/home/HomeConfigPrefsBackend.java index 94a75a9a66af..378378768fc8 100644 --- a/mobile/android/base/java/org/mozilla/gecko/home/HomeConfigPrefsBackend.java +++ b/mobile/android/base/java/org/mozilla/gecko/home/HomeConfigPrefsBackend.java @@ -264,6 +264,7 @@ public class HomeConfigPrefsBackend implements HomeConfigBackend { final JSONArray jsonPanelConfigs; try { jsonPanelConfigs = maybePerformMigration(mContext, jsonString); + updatePrefsFromConfig(jsonPanelConfigs); } catch (JSONException e) { Log.e(LOGTAG, "Error loading the list of home panels from JSON prefs", e); @@ -382,6 +383,40 @@ public class HomeConfigPrefsBackend implements HomeConfigBackend { } } + /** + * Update prefs that depend on home panels state. + * + * This includes the prefs that keep track of whether bookmarks or history are enabled, which are + * used to control the visibility of the corresponding menu items. + */ + private void updatePrefsFromConfig(JSONArray panelsArray) { + final SharedPreferences prefs = GeckoSharedPrefs.forProfile(mContext); + if (!prefs.contains(HomeConfig.PREF_KEY_BOOKMARKS_PANEL_ENABLED) + || !prefs.contains(HomeConfig.PREF_KEY_HISTORY_PANEL_ENABLED)) { + + final String bookmarkType = PanelType.BOOKMARKS.toString(); + final String historyType = PanelType.HISTORY.toString(); + try { + for (int i = 0; i < panelsArray.length(); i++) { + final JSONObject panelObj = panelsArray.getJSONObject(i); + final String panelType = panelObj.optString(PanelConfig.JSON_KEY_TYPE, null); + if (panelType == null) { + break; + } + final boolean isDisabled = panelObj.optBoolean(PanelConfig.JSON_KEY_DISABLED, false); + if (bookmarkType.equals(panelType)) { + prefs.edit().putBoolean(HomeConfig.PREF_KEY_BOOKMARKS_PANEL_ENABLED, !isDisabled).apply(); + } else if (historyType.equals(panelType)) { + prefs.edit().putBoolean(HomeConfig.PREF_KEY_HISTORY_PANEL_ENABLED, !isDisabled).apply(); + } + } + } catch (JSONException e) { + Log.e(LOGTAG, "Error fetching panel from config to update prefs"); + } + } + } + + private void sendReloadBroadcast() { final LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(mContext); final Intent reloadIntent = new Intent(RELOAD_BROADCAST); diff --git a/mobile/android/base/java/org/mozilla/gecko/preferences/PanelsPreferenceCategory.java b/mobile/android/base/java/org/mozilla/gecko/preferences/PanelsPreferenceCategory.java index 99934c2d2803..d3990f18dd42 100644 --- a/mobile/android/base/java/org/mozilla/gecko/preferences/PanelsPreferenceCategory.java +++ b/mobile/android/base/java/org/mozilla/gecko/preferences/PanelsPreferenceCategory.java @@ -4,6 +4,7 @@ package org.mozilla.gecko.preferences; +import org.mozilla.gecko.GeckoSharedPrefs; import org.mozilla.gecko.Telemetry; import org.mozilla.gecko.TelemetryContract; import org.mozilla.gecko.TelemetryContract.Method; @@ -231,6 +232,14 @@ public class PanelsPreferenceCategory extends CustomListCategory { Telemetry.sendUIEvent(TelemetryContract.Event.PANEL_SHOW, Method.DIALOG, id); } + if (HomeConfig.getIdForBuiltinPanelType(HomeConfig.PanelType.BOOKMARKS).equals(id)) { + GeckoSharedPrefs.forProfile(getContext()).edit().putBoolean(HomeConfig.PREF_KEY_BOOKMARKS_PANEL_ENABLED, !toHide).apply(); + } + + if (HomeConfig.getIdForBuiltinPanelType(HomeConfig.PanelType.HISTORY).equals(id)) { + GeckoSharedPrefs.forProfile(getContext()).edit().putBoolean(HomeConfig.PREF_KEY_HISTORY_PANEL_ENABLED, !toHide).apply(); + } + pref.setHidden(toHide); setDefaultFromConfig(); }