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

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

Issue 2228273002: Run ShortcutHelper::AddToLauncherInBackgroundWithSkBitmap() on Worker thread instead of IO thread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge branch 'master' into webapk_builder_impl2_thread Created 4 years, 4 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
« no previous file with comments | « no previous file | chrome/android/javatests/src/org/chromium/chrome/browser/browsing_data/BrowsingDataRemoverIntegrationTest.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/ShortcutHelper.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ShortcutHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/ShortcutHelper.java
index f83e3ab40155ad5bf99e2314fd0bf2dfe078cc75..9ad97e8ca0d85a24d2d439ac67c1b45e01e97396 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ShortcutHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ShortcutHelper.java
@@ -18,6 +18,7 @@ import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
+import android.os.AsyncTask;
import android.text.TextUtils;
import android.util.Base64;
@@ -28,6 +29,7 @@ import org.chromium.base.Log;
import org.chromium.base.ThreadUtils;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative;
+import org.chromium.blink_public.platform.WebDisplayMode;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.webapps.WebappAuthenticator;
import org.chromium.chrome.browser.webapps.WebappDataStorage;
@@ -125,55 +127,62 @@ public class ShortcutHelper {
}
/**
- * Adds home screen shortcut which opens in a {@link WebappActivity}.
- * This method must not be called on the UI thread.
+ * Adds home screen shortcut which opens in a {@link WebappActivity}. Creates web app
+ * home screen shortcut and registers web app asynchronously. Calls
+ * ShortcutHelper::OnWebappDataStored() when done.
*/
@SuppressWarnings("unused")
@CalledByNative
- private static void addWebapp(String id, String url, String scopeUrl, final String userTitle,
- String name, String shortName, String iconUrl, Bitmap icon, int displayMode,
- int orientation, int source, long themeColor, long backgroundColor,
- final long callbackPointer) {
- assert !ThreadUtils.runningOnUiThread();
-
- Context context = ContextUtils.getApplicationContext();
- if (TextUtils.isEmpty(scopeUrl)) {
- scopeUrl = getScopeFromUrl(url);
- }
-
- final Intent shortcutIntent =
- createWebappShortcutIntent(id, sDelegate.getFullscreenAction(), url, scopeUrl, name,
- shortName, icon, WEBAPP_SHORTCUT_VERSION, displayMode, orientation,
- themeColor, backgroundColor, iconUrl.isEmpty());
- shortcutIntent.putExtra(EXTRA_MAC, getEncodedMac(context, url));
- shortcutIntent.putExtra(EXTRA_SOURCE, source);
- shortcutIntent.setPackage(context.getPackageName());
- sDelegate.sendBroadcast(
- context, createAddToHomeIntent(url, userTitle, icon, shortcutIntent));
-
- // Store the webapp data so that it is accessible without the intent. Once this process
- // is complete, call back to native code to start the splash image download.
- WebappRegistry.registerWebapp(context, id,
- new WebappRegistry.FetchWebappDataStorageCallback() {
- @Override
- public void onWebappDataStorageRetrieved(WebappDataStorage storage) {
- storage.updateFromShortcutIntent(shortcutIntent);
- nativeOnWebappDataStored(callbackPointer);
- }
- });
-
- showAddedToHomescreenToast(userTitle);
+ private static void addWebapp(final String id, final String url, final String scopeUrl,
+ final String userTitle, final String name, final String shortName, final String iconUrl,
+ final Bitmap icon, final int displayMode, final int orientation, final int source,
+ final long themeColor, final long backgroundColor, final long callbackPointer) {
+ new AsyncTask<Void, Void, Intent>() {
+ @Override
+ protected Intent doInBackground(Void... args0) {
+ // Encoding {@link icon} as a string and computing the mac are expensive.
+
+ Context context = ContextUtils.getApplicationContext();
+ String nonEmptyScopeUrl =
+ TextUtils.isEmpty(scopeUrl) ? getScopeFromUrl(url) : scopeUrl;
+ Intent shortcutIntent = createWebappShortcutIntent(id,
+ sDelegate.getFullscreenAction(), url, nonEmptyScopeUrl, name, shortName,
+ icon, WEBAPP_SHORTCUT_VERSION, displayMode, orientation, themeColor,
+ backgroundColor, iconUrl.isEmpty());
+ shortcutIntent.putExtra(EXTRA_MAC, getEncodedMac(context, url));
+ shortcutIntent.putExtra(EXTRA_SOURCE, source);
+ shortcutIntent.setPackage(context.getPackageName());
+ return shortcutIntent;
+ }
+ @Override
+ protected void onPostExecute(final Intent resultIntent) {
+ Context context = ContextUtils.getApplicationContext();
+ sDelegate.sendBroadcast(
+ context, createAddToHomeIntent(url, userTitle, icon, resultIntent));
+
+ // Store the webapp data so that it is accessible without the intent. Once this
+ // process is complete, call back to native code to start the splash image
+ // download.
+ WebappRegistry.registerWebapp(
+ context, id, new WebappRegistry.FetchWebappDataStorageCallback() {
+ @Override
+ public void onWebappDataStorageRetrieved(WebappDataStorage storage) {
+ storage.updateFromShortcutIntent(resultIntent);
+ nativeOnWebappDataStored(callbackPointer);
+ }
+ });
+
+ showAddedToHomescreenToast(userTitle);
+ }
+ }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
/**
* Adds home screen shortcut which opens in the browser Activity.
- * This method must not be called on the UI thread.
*/
@SuppressWarnings("unused")
@CalledByNative
private static void addShortcut(String url, String userTitle, Bitmap icon, int source) {
- assert !ThreadUtils.runningOnUiThread();
-
Context context = ContextUtils.getApplicationContext();
final Intent shortcutIntent = createShortcutIntent(url);
shortcutIntent.putExtra(EXTRA_SOURCE, source);
@@ -187,23 +196,19 @@ public class ShortcutHelper {
* Show toast to alert user that the shortcut was added to the home screen.
*/
private static void showAddedToHomescreenToast(final String title) {
- ThreadUtils.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- Context applicationContext = ContextUtils.getApplicationContext();
- String toastText =
- applicationContext.getString(R.string.added_to_homescreen, title);
- Toast toast = Toast.makeText(applicationContext, toastText, Toast.LENGTH_SHORT);
- toast.show();
- }
- });
+ assert ThreadUtils.runningOnUiThread();
+
+ Context applicationContext = ContextUtils.getApplicationContext();
+ String toastText = applicationContext.getString(R.string.added_to_homescreen, title);
+ Toast toast = Toast.makeText(applicationContext, toastText, Toast.LENGTH_SHORT);
+ toast.show();
}
/**
* Creates a storage location and stores the data for a web app using {@link WebappDataStorage}.
- * @param id ID of the webapp which is storing data.
+ * @param id ID of the web app which is storing data.
* @param splashImage Image which should be displayed on the splash screen of
- * the webapp. This can be null of there is no image to show.
+ * the web app. This can be null of there is no image to show.
*/
@SuppressWarnings("unused")
@CalledByNative
@@ -253,10 +258,13 @@ public class ShortcutHelper {
* @param backgroundColor Background color of the web app.
* @param isIconGenerated True if the icon is generated by Chromium.
* @return Intent for onclick action of the shortcut.
+ * This method must not be called on the UI thread.
*/
public static Intent createWebappShortcutIntent(String id, String action, String url,
String scope, String name, String shortName, Bitmap icon, int version, int displayMode,
int orientation, long themeColor, long backgroundColor, boolean isIconGenerated) {
+ assert !ThreadUtils.runningOnUiThread();
+
// Encode the icon as a base64 string (Launcher drops Bitmaps in the Intent).
String encodedIcon = encodeBitmapAsString(icon);
@@ -279,6 +287,19 @@ public class ShortcutHelper {
}
/**
+ * Creates an intent with mostly empty parameters for launching a web app on the homescreen.
+ * @param id Id of the web app.
+ * @param url Url of the web app.
+ * @return the Intent
+ * This method must not be called on the UI thread.
+ */
+ public static Intent createWebappShortcutIntentForTesting(String id, String url) {
+ assert !ThreadUtils.runningOnUiThread();
+ return createWebappShortcutIntent(id, null, url, getScopeFromUrl(url), null, null, null,
+ WEBAPP_SHORTCUT_VERSION, WebDisplayMode.Standalone, 0, 0, 0, false);
+ }
+
+ /**
* Shortcut intent for icon on home screen.
* @param url Url of the shortcut.
* @return Intent for onclick action of the shortcut.
« no previous file with comments | « no previous file | chrome/android/javatests/src/org/chromium/chrome/browser/browsing_data/BrowsingDataRemoverIntegrationTest.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698