Index: chrome/android/java/src/org/chromium/chrome/browser/webapps/ChromeShortcutManager.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/ChromeShortcutManager.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/ChromeShortcutManager.java |
deleted file mode 100644 |
index dd85d5449aa7ae2a1caf83ee63d760f96de9e73e..0000000000000000000000000000000000000000 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/ChromeShortcutManager.java |
+++ /dev/null |
@@ -1,178 +0,0 @@ |
-// Copyright 2017 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.annotation.SuppressLint; |
-import android.annotation.TargetApi; |
-import android.content.Context; |
-import android.content.Intent; |
-import android.content.IntentSender; |
-import android.content.pm.PackageManager; |
-import android.content.pm.ResolveInfo; |
-import android.graphics.Bitmap; |
-import android.graphics.drawable.Icon; |
- |
-import org.chromium.base.BuildInfo; |
-import org.chromium.base.ContextUtils; |
-import org.chromium.base.Log; |
-import org.chromium.chrome.browser.ShortcutHelper; |
- |
-import java.lang.reflect.Constructor; |
-import java.lang.reflect.InvocationTargetException; |
-import java.lang.reflect.Method; |
-import java.util.List; |
- |
-/** |
- * This class handles the adding of shortcuts to the Android Home Screen. |
- */ |
-public class ChromeShortcutManager { |
- private static final String TAG = "ChromeShortcutMgr"; |
- |
- // There is no public string defining this intent so if Home changes the value, we |
- // have to update this string. |
- private static final String INSTALL_SHORTCUT = "com.android.launcher.action.INSTALL_SHORTCUT"; |
- |
- private static ChromeShortcutManager sInstance; |
- |
- // True when Android O's ShortcutManager.requestPinShortcut() is supported. |
- private boolean mIsRequestPinShortcutSupported; |
- |
- // TODO(martiw): Use 'ShortcutInfo' instead of 'Object' below when compileSdk is bumped to O. |
- private Object mShortcutManager; |
- |
- /** |
- * Returns the singleton instance of ChromeShortcutManager, creating it if needed. |
- */ |
- // TODO(martiw): change this to private when ChromeShortcutManagerInternal is gone. |
- public static ChromeShortcutManager getInstance() { |
- if (sInstance == null) { |
- sInstance = new ChromeShortcutManager(); |
- } |
- return sInstance; |
- } |
- |
- /** |
- * Creates an intent that will add a shortcut to the home screen. |
- * @param title Title of the shortcut. |
- * @param icon Image that represents the shortcut. |
- * @param shortcutIntent Intent to fire when the shortcut is activated. |
- * @return Intent for the shortcut. |
- */ |
- public static Intent createAddToHomeIntent(String title, Bitmap icon, Intent shortcutIntent) { |
- Intent i = new Intent(INSTALL_SHORTCUT); |
- i.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); |
- i.putExtra(Intent.EXTRA_SHORTCUT_NAME, title); |
- i.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon); |
- return i; |
- } |
- |
- // TODO(martiw): Make this private when ChromeShortcutManagerInternal is removed. |
- public ChromeShortcutManager() { |
- if (BuildInfo.isAtLeastO()) { |
- checkIfRequestPinShortcutSupported(); |
- } |
- } |
- |
- // TODO(martiw): Use Build.VERSION_CODES.O instead of hardcoded number when it is available. |
- @TargetApi(26) |
- private void checkIfRequestPinShortcutSupported() { |
- // The code in the try-block uses reflection in order to compile as it calls APIs newer than |
- // our target version of Android. The equivalent code without reflection is as follows: |
- // mShortcutManager = |
- // ContextUtils.getApplicationContext().getSystemService(ShortcutManager.class); |
- // mIsRequestPinShortcutSupported = mShortcutManager.isRequestPinShortcutSupported(); |
- // TODO(martiw): Remove the following reflection once compileSdk is bumped to O. |
- try { |
- Class<?> ShortcutManagerClass = Class.forName("android.content.pm.ShortcutManager"); |
- mShortcutManager = |
- ContextUtils.getApplicationContext().getSystemService(ShortcutManagerClass); |
- |
- Method isRequestPinShortcutSupported = |
- ShortcutManagerClass.getMethod("isRequestPinShortcutSupported"); |
- mIsRequestPinShortcutSupported = |
- (boolean) isRequestPinShortcutSupported.invoke(mShortcutManager); |
- } catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException |
- | IllegalAccessException e) { |
- Log.e(TAG, "Error checking if RequestPinShortcut is supported:", e); |
- } |
- } |
- |
- /** |
- * Add a shortcut to the home screen. |
- * @param title Title of the shortcut. |
- * @param icon Image that represents the shortcut. |
- * @param shortcutIntent Intent to fire when the shortcut is activated. |
- */ |
- public void addShortcutToHomeScreen(String title, Bitmap icon, Intent shortcutIntent) { |
- if (mIsRequestPinShortcutSupported) { |
- addShortcutWithShortcutManager(title, icon, shortcutIntent); |
- return; |
- } |
- Intent intent = createAddToHomeIntent(title, icon, shortcutIntent); |
- ContextUtils.getApplicationContext().sendBroadcast(intent); |
- } |
- |
- // TODO(martiw): Use Build.VERSION_CODES.O instead of hardcoded number when it is available. |
- @TargetApi(26) |
- private void addShortcutWithShortcutManager(String title, Bitmap icon, Intent shortcutIntent) { |
- String id = shortcutIntent.getStringExtra(ShortcutHelper.EXTRA_ID); |
- Context context = ContextUtils.getApplicationContext(); |
- |
- // The code in the try-block uses reflection in order to compile as it calls APIs newer than |
- // our compileSdkVersion of Android. The equivalent code without reflection looks like this: |
- // ShortcutInfo shortcutInfo = new ShortcutInfo.Builder(context, id) |
- // .setShortLabel(title) |
- // .setLongLabel(title) |
- // .setIcon(Icon.createWithBitmap(icon)) |
- // .setIntent(shortcutIntent) |
- // .build(); |
- // mShortcutManager.requestPinShortcut(shortcutInfo, null); |
- // TODO(martiw): Remove the following reflection once compileSdk is bumped to O. |
- try { |
- Class<?> builderClass = Class.forName("android.content.pm.ShortcutInfo$Builder"); |
- Constructor<?> builderConstructor = |
- builderClass.getDeclaredConstructor(Context.class, String.class); |
- Object shortcutBuilder = builderConstructor.newInstance(context, id); |
- |
- Method setShortLabel = builderClass.getMethod("setShortLabel", CharSequence.class); |
- setShortLabel.invoke(shortcutBuilder, title); |
- |
- Method setLongLabel = builderClass.getMethod("setLongLabel", CharSequence.class); |
- setLongLabel.invoke(shortcutBuilder, title); |
- |
- Method setIcon = builderClass.getMethod("setIcon", Icon.class); |
- setIcon.invoke(shortcutBuilder, Icon.createWithBitmap(icon)); |
- |
- Method setIntent = builderClass.getMethod("setIntent", Intent.class); |
- setIntent.invoke(shortcutBuilder, shortcutIntent); |
- |
- Method build = builderClass.getMethod("build"); |
- Object shortcutInfo = build.invoke(shortcutBuilder); |
- |
- Class<?> ShortcutInfoClass = Class.forName("android.content.pm.ShortcutInfo"); |
- Method requestPinShortcut = mShortcutManager.getClass().getMethod( |
- "requestPinShortcut", ShortcutInfoClass, IntentSender.class); |
- requestPinShortcut.invoke(mShortcutManager, shortcutInfo, null); |
- } catch (ClassNotFoundException | NoSuchMethodException | InstantiationException |
- | InvocationTargetException | IllegalAccessException e) { |
- Log.e(TAG, "Error adding shortcut with ShortcutManager:", e); |
- } |
- } |
- |
- // TODO(crbug.com/635567): Fix this properly. |
- @SuppressLint("WrongConstant") |
- public boolean canAddShortcutToHomescreen() { |
- if (mIsRequestPinShortcutSupported) return true; |
- PackageManager pm = ContextUtils.getApplicationContext().getPackageManager(); |
- Intent i = new Intent(INSTALL_SHORTCUT); |
- List<ResolveInfo> receivers = |
- pm.queryBroadcastReceivers(i, PackageManager.GET_INTENT_FILTERS); |
- return !receivers.isEmpty(); |
- } |
- |
- public boolean shouldShowToastWhenAddingShortcut() { |
- return !mIsRequestPinShortcutSupported; |
- } |
-} |