Bug 1255077 - Bookmarks menu item does nothing if bookmarks panel is disabled. r=margaret

MozReview-Commit-ID: 7219EueXxtw

--HG--
extra : rebase_source : b0d6bd376462f7f20cb2ad75e7b729a49d1831ad
This commit is contained in:
Chenxia Liu 2016-03-22 13:21:08 -07:00
Родитель cd7094d843
Коммит 13a58e237c
5 изменённых файлов: 54 добавлений и 7 удалений

Просмотреть файл

@ -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;

Просмотреть файл

@ -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

Просмотреть файл

@ -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<HomeConfig.State> {
private final HomeConfig mConfig;
private HomeConfig.State mConfigState;

Просмотреть файл

@ -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);

Просмотреть файл

@ -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();
}