Bug 1401179 - Add snackbar for bookmark add/remove actions on newtab. r?mcomella draft
authorChenxia Liu <liuche@mozilla.com>
Fri, 22 Sep 2017 18:08:07 -0700
changeset 669381 7337b93c4f62547df6b8733cc9531b9f10f3d5ce
parent 669354 3d72fdb0e561ea59d9e5850c3e71367dbb8a7148
child 732948 5eba3cf54ea3394c312e999db87705c09b339b13
push id81321
push usercliu@mozilla.com
push dateSat, 23 Sep 2017 02:01:51 +0000
reviewersmcomella
bugs1401179
milestone58.0a1
Bug 1401179 - Add snackbar for bookmark add/remove actions on newtab. r?mcomella MozReview-Commit-ID: 7DzoyDSWmVq
mobile/android/base/java/org/mozilla/gecko/activitystream/homepanel/menu/ActivityStreamContextMenu.java
mobile/android/base/java/org/mozilla/gecko/activitystream/homepanel/menu/BottomSheetContextMenu.java
mobile/android/base/java/org/mozilla/gecko/activitystream/homepanel/menu/PopupContextMenu.java
--- a/mobile/android/base/java/org/mozilla/gecko/activitystream/homepanel/menu/ActivityStreamContextMenu.java
+++ b/mobile/android/base/java/org/mozilla/gecko/activitystream/homepanel/menu/ActivityStreamContextMenu.java
@@ -2,17 +2,19 @@
  * 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.activitystream.homepanel.menu;
 
 import android.content.Context;
 import android.content.Intent;
 import android.database.Cursor;
+import android.support.annotation.NonNull;
 import android.support.design.widget.NavigationView;
+import android.support.design.widget.Snackbar;
 import android.view.MenuItem;
 import android.view.View;
 
 import org.mozilla.gecko.GeckoApplication;
 import org.mozilla.gecko.IntentHelper;
 import org.mozilla.gecko.R;
 import org.mozilla.gecko.Telemetry;
 import org.mozilla.gecko.TelemetryContract;
@@ -37,37 +39,40 @@ public abstract class ActivityStreamCont
     public enum MenuMode {
         HIGHLIGHT,
         TOPSITE,
         TOPSTORY
     }
 
     private final Context context;
     private final WebpageModel item;
+    @NonNull private final View snackbarAnchor;
 
     private final ActivityStreamTelemetry.Extras.Builder telemetryExtraBuilder;
 
     private final HomePager.OnUrlOpenListener onUrlOpenListener;
     private final HomePager.OnUrlOpenInBackgroundListener onUrlOpenInBackgroundListener;
 
     public abstract MenuItem getItemByID(int id);
 
     public abstract void show();
 
     public abstract void dismiss();
 
     private final MenuMode mode;
 
     /* package-private */ ActivityStreamContextMenu(final Context context,
+                                                    final View snackbarAnchor,
                                                     final ActivityStreamTelemetry.Extras.Builder telemetryExtraBuilder,
                                                     final MenuMode mode,
                                                     final WebpageModel item,
                                                     HomePager.OnUrlOpenListener onUrlOpenListener,
                                                     HomePager.OnUrlOpenInBackgroundListener onUrlOpenInBackgroundListener) {
         this.context = context;
+        this.snackbarAnchor = snackbarAnchor;
         this.item = item;
         this.telemetryExtraBuilder = telemetryExtraBuilder;
 
         this.mode = mode;
 
         this.onUrlOpenListener = onUrlOpenListener;
         this.onUrlOpenInBackgroundListener = onUrlOpenInBackgroundListener;
     }
@@ -223,20 +228,25 @@ public abstract class ActivityStreamCont
 
                 ThreadUtils.postToBackgroundThread(new Runnable() {
                     @Override
                     public void run() {
                         final BrowserDB db = BrowserDB.from(context);
 
                         if (item.isBookmarked()) {
                             db.removeBookmarksWithURL(context.getContentResolver(), item.getUrl());
+
+                            // See bug 1402521 for adding "options" to the snackbar.
+                            Snackbar.make(ActivityStreamContextMenu.this.snackbarAnchor, R.string.bookmark_removed, Snackbar.LENGTH_LONG).show();
                         } else {
                             // We only store raw URLs in history (and bookmarks), hence we won't ever show about:reader
                             // URLs in AS topsites or highlights. Therefore we don't need to do any special about:reader handling here.
                             db.addBookmark(context.getContentResolver(), item.getTitle(), item.getUrl());
+
+                            Snackbar.make(ActivityStreamContextMenu.this.snackbarAnchor, R.string.bookmark_added, Snackbar.LENGTH_LONG).show();
                         }
                         item.onStateCommitted();
                     }
                 });
                 break;
 
             case R.id.pin:
                 // While isPinned is nullable, behaviour of postInit - disabling 'pin' item
@@ -325,16 +335,17 @@ public abstract class ActivityStreamCont
                                                       final boolean shouldOverrideIconWithImageProvider,
                                                       HomePager.OnUrlOpenListener onUrlOpenListener,
                                                       HomePager.OnUrlOpenInBackgroundListener onUrlOpenInBackgroundListener,
                                                       final int tilesWidth, final int tilesHeight) {
         final ActivityStreamContextMenu menu;
 
         if (!HardwareUtils.isTablet()) {
             menu = new BottomSheetContextMenu(context,
+                    anchor,
                     telemetryExtraBuilder, menuMode,
                     item, shouldOverrideIconWithImageProvider, onUrlOpenListener, onUrlOpenInBackgroundListener,
                     tilesWidth, tilesHeight);
         } else {
             menu = new PopupContextMenu(context,
                     anchor,
                     telemetryExtraBuilder, menuMode,
                     item, onUrlOpenListener, onUrlOpenInBackgroundListener);
--- a/mobile/android/base/java/org/mozilla/gecko/activitystream/homepanel/menu/BottomSheetContextMenu.java
+++ b/mobile/android/base/java/org/mozilla/gecko/activitystream/homepanel/menu/BottomSheetContextMenu.java
@@ -42,25 +42,27 @@ import java.net.URISyntaxException;
 
     private final View content;
     private final View activityView;
 
     /** A reference, that represents the page domain, that allows a return value from an async task. */
     private String[] pageDomainTextReference = new String[] { "" };
 
     public BottomSheetContextMenu(final Context context,
+                                  final View anchor,
                                   final ActivityStreamTelemetry.Extras.Builder telemetryExtraBuilder,
                                   final MenuMode mode,
                                   final WebpageModel item,
                                   final boolean shouldOverrideIconWithImageProvider,
                                   HomePager.OnUrlOpenListener onUrlOpenListener,
                                   HomePager.OnUrlOpenInBackgroundListener onUrlOpenInBackgroundListener,
                                   final int tilesWidth, final int tilesHeight) {
 
         super(context,
+                anchor,
                 telemetryExtraBuilder,
                 mode,
                 item,
                 onUrlOpenListener,
                 onUrlOpenInBackgroundListener);
 
         // The View encompassing the activity area
         this.activityView = ((Activity) context).findViewById(android.R.id.content);
--- a/mobile/android/base/java/org/mozilla/gecko/activitystream/homepanel/menu/PopupContextMenu.java
+++ b/mobile/android/base/java/org/mozilla/gecko/activitystream/homepanel/menu/PopupContextMenu.java
@@ -31,16 +31,17 @@ import org.mozilla.gecko.activitystream.
     public PopupContextMenu(final Context context,
                             View anchor,
                             final ActivityStreamTelemetry.Extras.Builder telemetryExtraBuilder,
                             final MenuMode mode,
                             final WebpageModel item,
                             HomePager.OnUrlOpenListener onUrlOpenListener,
                             HomePager.OnUrlOpenInBackgroundListener onUrlOpenInBackgroundListener) {
         super(context,
+                anchor,
                 telemetryExtraBuilder,
                 mode,
                 item,
                 onUrlOpenListener,
                 onUrlOpenInBackgroundListener);
 
         this.anchor = anchor;