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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/webapps/AddToHomescreenManager.java

Issue 2292133003: Determine whether to show "Add to Homescreen" dialog or WebAPK infobar (Closed)
Patch Set: Clean up. Created 4 years, 3 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/src/org/chromium/chrome/browser/webapps/AddToHomescreenManager.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/AddToHomescreenManager.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/AddToHomescreenManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..ffec6c8fee258c240d3a8e8ec98952d9f7abb08d
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/AddToHomescreenManager.java
@@ -0,0 +1,99 @@
+// Copyright 2016 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.webapps;
+
+import android.app.Activity;
+import android.graphics.Bitmap;
+
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.content_public.browser.WebContents;
+
+/**
+ * Manages the add-to-homescreen process.
+ */
+public class AddToHomescreenManager {
+
+ /** Interface for tracking fetch of add-to-homescreen data. */
+ public interface Observer {
+ /** Called when the title of the page is available. */
+ void onUserTitleAvailable(String title);
+
+ /**
+ * Called once native has finished fetching the homescreen shortcut's data (like the Web
+ * Manifest) and is ready for {@link AddToHomescreenDelegate#addShortcut()} to be called.
+ * @param icon Icon to use in the launcher.
+ */
+ void onReadyToAdd(Bitmap icon);
+ }
+
+ private final Activity mActivity;
+ private final Tab mTab;
+
+ private Observer mObserver;
+ private long mNativeAddToHomescreenManager;
+
+ public AddToHomescreenManager(Activity activity, Tab tab) {
+ mActivity = activity;
+ mTab = tab;
+ }
+
+ /** Starts add-to-homescreen process. */
+ public void start() {
+ mNativeAddToHomescreenManager = nativeInitializeAndStart(mTab.getWebContents());
+ }
+
+ /** Sets the add-to-homescreen observer tracking the add-to-homescreen data fetch. */
+ public void setObserver(Observer observer) {
+ mObserver = observer;
+ }
+
+ /**
+ * Puts the object in a state where it is safe to be destroyed.
+ */
+ public void destroy() {
+ nativeDestroy(mNativeAddToHomescreenManager);
+
+ mObserver = null;
+ mNativeAddToHomescreenManager = 0;
+ }
+
+ /**
+ * Adds a shortcut for the current Tab.
+ * @param userRequestedTitle Title of the shortcut displayed on the homescreen.
+ */
+ public void addShortcut(String userRequestedTitle) {
+ nativeAddShortcut(mNativeAddToHomescreenManager, userRequestedTitle);
+ }
+
+ public void onDismissed() {
+ destroy();
+ }
+
+ /**
+ * Shows alert to prompt user for name of home screen shortcut.
+ */
+ @CalledByNative
+ public void showDialog() {
+ AddToHomescreenDialog dialog = new AddToHomescreenDialog(this);
+ dialog.show(mActivity);
+ setObserver(dialog);
+ }
+
+ @CalledByNative
+ private void onUserTitleAvailable(String title) {
+ mObserver.onUserTitleAvailable(title);
+ }
+
+ @CalledByNative
+ private void onReadyToAdd(Bitmap icon) {
+ mObserver.onReadyToAdd(icon);
+ }
+
+ private native long nativeInitializeAndStart(WebContents webContents);
+ private native void nativeAddShortcut(
+ long nativeAddToHomescreenManager, String userRequestedTitle);
+ private native void nativeDestroy(long nativeAddToHomescreenManager);
+}

Powered by Google App Engine
This is Rietveld 408576698