Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Unified Diff: chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkUtils.java

Issue 1141283003: Upstream oodles of Chrome for Android code into Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: final patch? Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkUtils.java
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkUtils.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..323aba38a6604e317987fe0b6a7fef3cb415dae7
--- /dev/null
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkUtils.java
@@ -0,0 +1,188 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.enhancedbookmarks;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.Browser;
+import android.util.Pair;
+
+import com.google.android.apps.chrome.R;
+
+import org.chromium.base.ApiCompatibilityUtils;
+import org.chromium.chrome.browser.BookmarksBridge;
+import org.chromium.chrome.browser.BookmarksBridge.BookmarkItem;
+import org.chromium.chrome.browser.IntentHandler;
+import org.chromium.chrome.browser.Tab;
+import org.chromium.chrome.browser.UrlConstants;
+import org.chromium.chrome.browser.document.ChromeLauncherActivity;
+import org.chromium.chrome.browser.enhanced_bookmarks.EnhancedBookmarksModel;
+import org.chromium.chrome.browser.favicon.FaviconHelper;
+import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.snackbar.SnackbarManager;
+import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController;
+import org.chromium.chrome.browser.util.FeatureUtilities;
+import org.chromium.chrome.browser.util.MathUtils;
+import org.chromium.components.bookmarks.BookmarkId;
+import org.chromium.ui.base.DeviceFormFactor;
+
+/**
+ * A class holding static util functions for enhanced bookmark.
+ */
+public class EnhancedBookmarkUtils {
+
+ private static final String BOOKMARK_SAVE_NAME = "SaveBookmark";
+ private static final int[] DEFAULT_BACKGROUND_COLORS = {
+ 0xFFE64A19,
+ 0xFFF09300,
+ 0xFFAFB42B,
+ 0xFF689F38,
+ 0xFF0B8043,
+ 0xFF0097A7,
+ 0xFF7B1FA2,
+ 0xFFC2185B
+ };
+
+ /**
+ * @return True if enhanced bookmark feature is enabled for given profile. False otherwise.
+ */
+ public static boolean isEnhancedBookmarkEnabled(Profile profile) {
+ return BookmarksBridge.isEnhancedBookmarksEnabled(profile);
+ }
+
+ /**
+ * Static method used for activities to show snackbar that notifies user that the bookmark has
+ * been added successfully. Note this method also starts fetching salient image in background.
+ */
+ public static void addBookmarkAndShowSnackbar(EnhancedBookmarksModel bookmarkModel, Tab tab,
+ final SnackbarManager snackbarManager, final Activity activity) {
+ // TODO(ianwen): remove activity from argument list.
+ final BookmarkId enhancedId = bookmarkModel.addBookmark(bookmarkModel.getDefaultFolder(),
+ 0, tab.getTitle(), tab.getUrl());
+ bookmarkModel.fetchImageForTab(tab.getWebContents());
+
+ Pair<EnhancedBookmarksModel, BookmarkId> pair = Pair.create(bookmarkModel, enhancedId);
+
+ SnackbarController snackbarController = new SnackbarController() {
+ @Override
+ public void onDismissForEachType(boolean isTimeout) {}
+
+ @Override
+ public void onDismissNoAction(Object actionData) {
+ // This method will be called only if the snackbar is dismissed by timeout.
+ @SuppressWarnings("unchecked")
+ Pair<EnhancedBookmarksModel, BookmarkId> pair = (Pair<
+ EnhancedBookmarksModel, BookmarkId>) actionData;
+ pair.first.destroy();
+ }
+
+ @Override
+ public void onAction(Object actionData) {
+ @SuppressWarnings("unchecked")
+ Pair<EnhancedBookmarksModel, BookmarkId> pair = (Pair<
+ EnhancedBookmarksModel, BookmarkId>) actionData;
+ // Show detail page with the name of parent folder highlighted.
+ startDetailActivity(activity, enhancedId);
+ pair.first.destroy();
+ }
+ };
+ snackbarManager.showSnackbar(null,
+ activity.getString(R.string.enhanced_bookmark_page_saved),
+ activity.getString(R.string.enhanced_bookmark_item_edit), pair,
+ snackbarController);
+ }
+
+ /**
+ * Shows enhanced bookmark main UI, if it is turned on. Does nothing if it is turned off.
+ * @return True if enhanced bookmark is on, false otherwise.
+ */
+ public static boolean showEnhancedBookmarkIfEnabled(Activity activity) {
+ if (!isEnhancedBookmarkEnabled(Profile.getLastUsedProfile().getOriginalProfile())) {
+ return false;
+ }
+ if (DeviceFormFactor.isTablet(activity)) {
+ openBookmark(activity, UrlConstants.BOOKMARKS_URL);
+ } else {
+ activity.startActivity(new Intent(activity, EnhancedBookmarkActivity.class));
+ }
+ return true;
+ }
+
+ public static void startDetailActivity(Context context, BookmarkId bookmarkId) {
+ Intent intent = new Intent(context, EnhancedBookmarkDetailActivity.class);
+ intent.putExtra(EnhancedBookmarkDetailActivity.INTENT_BOOKMARK_ID, bookmarkId.toString());
+ context.startActivity(intent);
+ }
+
+ /**
+ * Generate color based on bookmarked url's hash code. Same color will
+ * always be returned given same bookmark item.
+ *
+ * @param item bookmark the color represents for
+ * @return int for the generated color
+ */
+ public static int generateBackgroundColor(BookmarkItem item) {
+ int normalizedIndex = MathUtils.positiveModulo(item.getUrl().hashCode(),
+ DEFAULT_BACKGROUND_COLORS.length);
+ return DEFAULT_BACKGROUND_COLORS[normalizedIndex];
+ }
+
+ /**
+ * Save the bookmark in bundle to save state of a fragment/activity.
+ * @param bundle Argument holder or savedInstanceState of the fragment/activity.
+ * @param bookmark The bookmark to save.
+ */
+ public static void saveBookmarkIdToBundle(Bundle bundle, BookmarkId bookmark) {
+ bundle.putString(BOOKMARK_SAVE_NAME, bookmark.toString());
+ }
+
+ /**
+ * Retrieve the bookmark previously saved in the arguments bundle.
+ * @param bundle Argument holder or savedInstanceState of the fragment/activity.
+ * @return The ID of the bookmark to retrieve.
+ */
+ public static BookmarkId getBookmarkIdFromBundle(Bundle bundle) {
+ return BookmarkId.getBookmarkIdFromString(bundle.getString(BOOKMARK_SAVE_NAME));
+ }
+
+ public static void openBookmark(Activity activity, String url) {
+ Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
+ intent.setClassName(activity.getApplicationContext().getPackageName(),
+ ChromeLauncherActivity.class.getName());
+ intent.putExtra(Browser.EXTRA_APPLICATION_ID,
+ activity.getApplicationContext().getPackageName());
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ IntentHandler.startActivityForTrustedIntent(intent, activity);
+ }
+
+ /**
+ * Get dominant color from bitmap. This function uses favicon helper to fulfil its task.
+ * @param bitmap The bitmap to extract color from.
+ * @return The dominant color in ARGB format.
+ */
+ public static int getDominantColorForBitmap(Bitmap bitmap) {
+ int mDominantColor = FaviconHelper.getDominantColorForBitmap(bitmap);
+ // FaviconHelper returns color in ABGR format, do a manual conversion here.
+ int red = (mDominantColor & 0xff) << 16;
+ int green = mDominantColor & 0xff00;
+ int blue = (mDominantColor & 0xff0000) >> 16;
+ int alpha = mDominantColor & 0xff000000;
+ return alpha + red + green + blue;
+ }
+
+ /**
+ * Updates the title of chrome shown in recent tasks. It only takes effect in document mode.
+ */
+ public static void setTaskDescriptionInDocumentMode(Activity activity, String description) {
+ if (FeatureUtilities.isDocumentMode(activity)) {
+ // Setting icon to be null and color to be 0 will means "take no effect".
+ ApiCompatibilityUtils.setTaskDescription(activity, description, null, 0);
+ }
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698