Bug 1232439 - Part 1: Setup A/B experiment for enabling full bookmark management in Nightly. r?Grisha
The experiment in Switchboard is "full-bookmark-management", and it's enabled for 100% of the Nightly audience.
MozReview-Commit-ID: EhA0BcouPPn
--- a/mobile/android/base/java/org/mozilla/gecko/Experiments.java
+++ b/mobile/android/base/java/org/mozilla/gecko/Experiments.java
@@ -63,16 +63,19 @@ public class Experiments {
public static final String ACTIVITY_STREAM_SETTING = "activity-stream-setting";
// Enable Activity stream by default for users in the "opt out" group.
public static final String ACTIVITY_STREAM_OPT_OUT = "activity-stream-opt-out";
// Tabs tray: Arrange tabs in two columns in portrait mode
public static final String COMPACT_TABS = "compact-tabs";
+ // Enable full bookmark management(full-page dialog, bookmark/folder modification, etc.)
+ public static final String FULL_BOOKMARK_MANAGEMENT = "full-bookmark-management";
+
/**
* Returns if a user is in certain local experiment.
* @param experiment Name of experiment to look up
* @return returns value for experiment or false if experiment does not exist.
*/
public static boolean isInExperimentLocal(Context context, String experiment) {
if (SwitchBoard.isInBucket(context, 0, 20)) {
return Experiments.ONBOARDING3_A.equals(experiment);
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/bookmark/BookmarkUtils.java
@@ -0,0 +1,24 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
+ * 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/. */
+
+package org.mozilla.gecko.bookmark;
+
+import android.content.Context;
+
+import org.mozilla.gecko.AppConstants;
+import org.mozilla.gecko.Experiments;
+import org.mozilla.gecko.switchboard.SwitchBoard;
+
+public class BookmarkUtils {
+
+ /**
+ * Get the switch from {@link SwitchBoard}. It's used to enable/disable
+ * full bookmark management features(full-page dialog, bookmark/folder modification, etc.)
+ */
+ public static boolean isEnabled(Context context) {
+ return AppConstants.NIGHTLY_BUILD &&
+ SwitchBoard.isInExperiment(context, Experiments.FULL_BOOKMARK_MANAGEMENT);
+ }
+}
--- a/mobile/android/base/java/org/mozilla/gecko/delegates/BookmarkStateChangeDelegate.java
+++ b/mobile/android/base/java/org/mozilla/gecko/delegates/BookmarkStateChangeDelegate.java
@@ -5,25 +5,21 @@
package org.mozilla.gecko.delegates;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
-import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v4.content.ContextCompat;
-import android.util.Log;
import android.view.View;
import android.widget.ListView;
-import org.json.JSONException;
-import org.json.JSONObject;
import org.mozilla.gecko.AboutPages;
import org.mozilla.gecko.BrowserApp;
import org.mozilla.gecko.EditBookmarkDialog;
import org.mozilla.gecko.GeckoAppShell;
import org.mozilla.gecko.GeckoSharedPrefs;
import org.mozilla.gecko.R;
import org.mozilla.gecko.SnackbarBuilder;
import org.mozilla.gecko.Tab;
@@ -33,18 +29,16 @@ import org.mozilla.gecko.TelemetryContra
import org.mozilla.gecko.home.HomeConfig;
import org.mozilla.gecko.promotion.SimpleHelperUI;
import org.mozilla.gecko.prompts.Prompt;
import org.mozilla.gecko.prompts.PromptListItem;
import org.mozilla.gecko.util.DrawableUtil;
import org.mozilla.gecko.util.GeckoBundle;
import org.mozilla.gecko.util.ThreadUtils;
-import java.lang.ref.WeakReference;
-
/**
* Delegate to watch for bookmark state changes.
*
* This is responsible for showing snackbars and helper UIs related to the addition/removal
* of bookmarks, or reader view bookmarks.
*/
public class BookmarkStateChangeDelegate extends BrowserAppDelegateWithReference implements Tabs.OnTabsChangedListener {
private static final String LOGTAG = "BookmarkDelegate";
--- a/mobile/android/base/java/org/mozilla/gecko/home/BookmarksPanel.java
+++ b/mobile/android/base/java/org/mozilla/gecko/home/BookmarksPanel.java
@@ -5,34 +5,31 @@
package org.mozilla.gecko.home;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.mozilla.gecko.GeckoSharedPrefs;
-import org.mozilla.gecko.PrefsHelper;
import org.mozilla.gecko.R;
import org.mozilla.gecko.db.BrowserContract;
import org.mozilla.gecko.db.BrowserContract.Bookmarks;
import org.mozilla.gecko.db.BrowserDB;
import org.mozilla.gecko.distribution.PartnerBookmarksProviderProxy;
import org.mozilla.gecko.home.BookmarksListAdapter.FolderInfo;
import org.mozilla.gecko.home.BookmarksListAdapter.OnRefreshFolderListener;
import org.mozilla.gecko.home.BookmarksListAdapter.RefreshType;
import org.mozilla.gecko.home.HomeContextMenuInfo.RemoveItemType;
import org.mozilla.gecko.home.HomePager.OnUrlOpenListener;
-import org.mozilla.gecko.media.MediaControlService;
import org.mozilla.gecko.preferences.GeckoPreferences;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
-import android.content.Intent;
import android.content.res.Configuration;
import android.database.Cursor;
import android.database.MergeCursor;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import android.view.LayoutInflater;
@@ -43,36 +40,28 @@ import android.widget.ImageView;
import android.widget.TextView;
/**
* A page in about:home that displays a ListView of bookmarks.
*/
public class BookmarksPanel extends HomeFragment {
public static final String LOGTAG = "GeckoBookmarksPanel";
- public static final String BOOKMARK_MOBILE_FOLDER_PREF = "ui.bookmark.mobilefolder.enabled";
-
// Cursor loader ID for list of bookmarks.
private static final int LOADER_ID_BOOKMARKS_LIST = 0;
// Information about the target bookmarks folder.
private static final String BOOKMARKS_FOLDER_INFO = "folder_info";
// Refresh type for folder refreshing loader.
private static final String BOOKMARKS_REFRESH_TYPE = "refresh_type";
// Position that the list view should be scrolled to after loading has finished.
private static final String BOOKMARKS_SCROLL_POSITION = "listview_position";
- private final String[] mPrefs = { BOOKMARK_MOBILE_FOLDER_PREF };
-
- private PrefsHelper.PrefHandler mPrefsObserver;
-
- private boolean mIfMobileFolderPrefOn = true;
-
// List of bookmarks.
private BookmarksListView mList;
// Adapter for list of bookmarks.
private BookmarksListAdapter mListAdapter;
// Adapter's parent stack.
private List<FolderInfo> mSavedParentStack;
@@ -97,19 +86,16 @@ public class BookmarksPanel extends Home
mSavedParentStack = new LinkedList<FolderInfo>(stack);
} else {
mListAdapter.restoreData(stack);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
-
- setupPrefHandler();
-
final View view = inflater.inflate(R.layout.home_bookmarks_panel, container, false);
mList = (BookmarksListView) view.findViewById(R.id.bookmarks_list);
mList.setContextMenuInfoFactory(new HomeContextMenuInfo.Factory() {
@Override
public HomeContextMenuInfo makeInfoForCursor(View view, int position, long id, Cursor cursor) {
final int type = cursor.getInt(cursor.getColumnIndexOrThrow(Bookmarks.TYPE));
@@ -124,28 +110,16 @@ public class BookmarksPanel extends Home
info.itemType = RemoveItemType.BOOKMARKS;
return info;
}
});
return view;
}
- private void setupPrefHandler() {
- mPrefsObserver = new PrefsHelper.PrefHandlerBase() {
- @Override
- public void prefValue(String pref, boolean value) {
- if (pref.equals(BOOKMARK_MOBILE_FOLDER_PREF)) {
- mIfMobileFolderPrefOn = value;
- }
- }
- };
- PrefsHelper.addObserver(mPrefs, mPrefsObserver);
- }
-
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
OnUrlOpenListener listener = null;
try {
listener = (OnUrlOpenListener) getActivity();
} catch (ClassCastException e) {
--- a/mobile/android/base/moz.build
+++ b/mobile/android/base/moz.build
@@ -474,16 +474,17 @@ gbjar.sources += ['java/org/mozilla/geck
'activitystream/Utils.java',
'adjust/AdjustBrowserAppDelegate.java',
'animation/AnimationUtils.java',
'animation/HeightChangeAnimation.java',
'animation/PropertyAnimator.java',
'animation/Rotate3DAnimation.java',
'animation/ViewHelper.java',
'ANRReporter.java',
+ 'bookmark/BookmarkUtils.java',
'BootReceiver.java',
'BrowserApp.java',
'BrowserLocaleManager.java',
'cleanup/FileCleanupController.java',
'cleanup/FileCleanupService.java',
'CustomEditText.java',
'customtabs/ActionBarPresenter.java',
'customtabs/CustomTabsActivity.java',