495 lines
23 KiB
Java
495 lines
23 KiB
Java
package androidx.core.content.pm;
|
|
|
|
import android.app.ActivityManager;
|
|
import android.content.BroadcastReceiver;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.content.IntentSender;
|
|
import android.content.pm.ActivityInfo;
|
|
import android.content.pm.PackageManager;
|
|
import android.content.pm.ResolveInfo;
|
|
import android.content.pm.ShortcutInfo;
|
|
import android.content.pm.ShortcutManager;
|
|
import android.graphics.Bitmap;
|
|
import android.graphics.BitmapFactory;
|
|
import android.os.Build;
|
|
import android.os.Bundle;
|
|
import android.text.TextUtils;
|
|
import android.util.DisplayMetrics;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.annotation.RequiresApi;
|
|
import androidx.annotation.RestrictTo;
|
|
import androidx.annotation.VisibleForTesting;
|
|
import androidx.appcompat.widget.ActivityChooserModel;
|
|
import androidx.core.content.ContextCompat;
|
|
import androidx.core.content.pm.ShortcutInfoCompat;
|
|
import androidx.core.content.pm.ShortcutInfoCompatSaver;
|
|
import androidx.core.graphics.drawable.IconCompat;
|
|
import androidx.core.util.Preconditions;
|
|
import java.io.InputStream;
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.Collections;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
public class ShortcutManagerCompat {
|
|
@VisibleForTesting
|
|
public static final String ACTION_INSTALL_SHORTCUT = "com.android.launcher.action.INSTALL_SHORTCUT";
|
|
private static final int DEFAULT_MAX_ICON_DIMENSION_DP = 96;
|
|
private static final int DEFAULT_MAX_ICON_DIMENSION_LOWRAM_DP = 48;
|
|
public static final String EXTRA_SHORTCUT_ID = "android.intent.extra.shortcut.ID";
|
|
public static final int FLAG_MATCH_CACHED = 8;
|
|
public static final int FLAG_MATCH_DYNAMIC = 2;
|
|
public static final int FLAG_MATCH_MANIFEST = 1;
|
|
public static final int FLAG_MATCH_PINNED = 4;
|
|
@VisibleForTesting
|
|
public static final String INSTALL_SHORTCUT_PERMISSION = "com.android.launcher.permission.INSTALL_SHORTCUT";
|
|
private static final String SHORTCUT_LISTENER_INTENT_FILTER_ACTION = "androidx.core.content.pm.SHORTCUT_LISTENER";
|
|
private static final String SHORTCUT_LISTENER_META_DATA_KEY = "androidx.core.content.pm.shortcut_listener_impl";
|
|
private static volatile List<ShortcutInfoChangeListener> sShortcutInfoChangeListeners;
|
|
private static volatile ShortcutInfoCompatSaver<?> sShortcutInfoCompatSaver;
|
|
|
|
/* renamed from: androidx.core.content.pm.ShortcutManagerCompat$1 reason: invalid class name */
|
|
public class AnonymousClass1 extends BroadcastReceiver {
|
|
public final /* synthetic */ IntentSender val$callback;
|
|
|
|
public AnonymousClass1(IntentSender intentSender) {
|
|
this.val$callback = intentSender;
|
|
}
|
|
|
|
@Override // android.content.BroadcastReceiver
|
|
public void onReceive(Context context, Intent intent) {
|
|
try {
|
|
this.val$callback.sendIntent(context, 0, null, null, null);
|
|
} catch (IntentSender.SendIntentException unused) {
|
|
}
|
|
}
|
|
}
|
|
|
|
@RequiresApi(25)
|
|
public static class Api25Impl {
|
|
private Api25Impl() {
|
|
}
|
|
|
|
public static String getShortcutInfoWithLowestRank(@NonNull List<ShortcutInfo> list) {
|
|
int i = -1;
|
|
String str = null;
|
|
for (ShortcutInfo shortcutInfo : list) {
|
|
if (shortcutInfo.getRank() > i) {
|
|
str = shortcutInfo.getId();
|
|
i = shortcutInfo.getRank();
|
|
}
|
|
}
|
|
return str;
|
|
}
|
|
}
|
|
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public @interface ShortcutMatchFlags {
|
|
}
|
|
|
|
private ShortcutManagerCompat() {
|
|
}
|
|
|
|
public static boolean addDynamicShortcuts(@NonNull Context context, @NonNull List<ShortcutInfoCompat> list) {
|
|
int i = Build.VERSION.SDK_INT;
|
|
if (i <= 29) {
|
|
convertUriIconsToBitmapIcons(context, list);
|
|
}
|
|
if (i >= 25) {
|
|
ArrayList arrayList = new ArrayList();
|
|
for (ShortcutInfoCompat shortcutInfoCompat : list) {
|
|
arrayList.add(shortcutInfoCompat.toShortcutInfo());
|
|
}
|
|
if (!((ShortcutManager) context.getSystemService(ShortcutManager.class)).addDynamicShortcuts(arrayList)) {
|
|
return false;
|
|
}
|
|
}
|
|
getShortcutInfoSaverInstance(context).addShortcuts(list);
|
|
for (ShortcutInfoChangeListener shortcutInfoChangeListener : getShortcutInfoListeners(context)) {
|
|
shortcutInfoChangeListener.onShortcutAdded(list);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@VisibleForTesting
|
|
public static boolean convertUriIconToBitmapIcon(@NonNull Context context, @NonNull ShortcutInfoCompat shortcutInfoCompat) {
|
|
Bitmap decodeStream;
|
|
IconCompat iconCompat = shortcutInfoCompat.mIcon;
|
|
if (iconCompat == null) {
|
|
return false;
|
|
}
|
|
int i = iconCompat.mType;
|
|
if (i != 6 && i != 4) {
|
|
return true;
|
|
}
|
|
InputStream uriInputStream = iconCompat.getUriInputStream(context);
|
|
if (uriInputStream == null || (decodeStream = BitmapFactory.decodeStream(uriInputStream)) == null) {
|
|
return false;
|
|
}
|
|
shortcutInfoCompat.mIcon = i == 6 ? IconCompat.createWithAdaptiveBitmap(decodeStream) : IconCompat.createWithBitmap(decodeStream);
|
|
return true;
|
|
}
|
|
|
|
@VisibleForTesting
|
|
public static void convertUriIconsToBitmapIcons(@NonNull Context context, @NonNull List<ShortcutInfoCompat> list) {
|
|
Iterator it = new ArrayList(list).iterator();
|
|
while (it.hasNext()) {
|
|
ShortcutInfoCompat shortcutInfoCompat = (ShortcutInfoCompat) it.next();
|
|
if (!convertUriIconToBitmapIcon(context, shortcutInfoCompat)) {
|
|
list.remove(shortcutInfoCompat);
|
|
}
|
|
}
|
|
}
|
|
|
|
@NonNull
|
|
public static Intent createShortcutResultIntent(@NonNull Context context, @NonNull ShortcutInfoCompat shortcutInfoCompat) {
|
|
Intent createShortcutResultIntent = Build.VERSION.SDK_INT >= 26 ? ((ShortcutManager) context.getSystemService(ShortcutManager.class)).createShortcutResultIntent(shortcutInfoCompat.toShortcutInfo()) : null;
|
|
if (createShortcutResultIntent == null) {
|
|
createShortcutResultIntent = new Intent();
|
|
}
|
|
return shortcutInfoCompat.addToIntent(createShortcutResultIntent);
|
|
}
|
|
|
|
public static void disableShortcuts(@NonNull Context context, @NonNull List<String> list, @Nullable CharSequence charSequence) {
|
|
if (Build.VERSION.SDK_INT >= 25) {
|
|
((ShortcutManager) context.getSystemService(ShortcutManager.class)).disableShortcuts(list, charSequence);
|
|
}
|
|
getShortcutInfoSaverInstance(context).removeShortcuts(list);
|
|
for (ShortcutInfoChangeListener shortcutInfoChangeListener : getShortcutInfoListeners(context)) {
|
|
shortcutInfoChangeListener.onShortcutRemoved(list);
|
|
}
|
|
}
|
|
|
|
public static void enableShortcuts(@NonNull Context context, @NonNull List<ShortcutInfoCompat> list) {
|
|
if (Build.VERSION.SDK_INT >= 25) {
|
|
ArrayList arrayList = new ArrayList(list.size());
|
|
for (ShortcutInfoCompat shortcutInfoCompat : list) {
|
|
arrayList.add(shortcutInfoCompat.mId);
|
|
}
|
|
((ShortcutManager) context.getSystemService(ShortcutManager.class)).enableShortcuts(arrayList);
|
|
}
|
|
getShortcutInfoSaverInstance(context).addShortcuts(list);
|
|
for (ShortcutInfoChangeListener shortcutInfoChangeListener : getShortcutInfoListeners(context)) {
|
|
shortcutInfoChangeListener.onShortcutAdded(list);
|
|
}
|
|
}
|
|
|
|
@NonNull
|
|
public static List<ShortcutInfoCompat> getDynamicShortcuts(@NonNull Context context) {
|
|
if (Build.VERSION.SDK_INT >= 25) {
|
|
List<ShortcutInfo> dynamicShortcuts = ((ShortcutManager) context.getSystemService(ShortcutManager.class)).getDynamicShortcuts();
|
|
ArrayList arrayList = new ArrayList(dynamicShortcuts.size());
|
|
for (ShortcutInfo shortcutInfo : dynamicShortcuts) {
|
|
arrayList.add(new ShortcutInfoCompat.Builder(context, shortcutInfo).build());
|
|
}
|
|
return arrayList;
|
|
}
|
|
try {
|
|
return getShortcutInfoSaverInstance(context).getShortcuts();
|
|
} catch (Exception unused) {
|
|
return new ArrayList();
|
|
}
|
|
}
|
|
|
|
private static int getIconDimensionInternal(@NonNull Context context, boolean z2) {
|
|
ActivityManager activityManager = (ActivityManager) context.getSystemService(ActivityChooserModel.ATTRIBUTE_ACTIVITY);
|
|
int max = Math.max(1, activityManager == null || activityManager.isLowRamDevice() ? 48 : 96);
|
|
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
|
|
return (int) (((float) max) * ((z2 ? displayMetrics.xdpi : displayMetrics.ydpi) / 160.0f));
|
|
}
|
|
|
|
public static int getIconMaxHeight(@NonNull Context context) {
|
|
Preconditions.checkNotNull(context);
|
|
return Build.VERSION.SDK_INT >= 25 ? ((ShortcutManager) context.getSystemService(ShortcutManager.class)).getIconMaxHeight() : getIconDimensionInternal(context, false);
|
|
}
|
|
|
|
public static int getIconMaxWidth(@NonNull Context context) {
|
|
Preconditions.checkNotNull(context);
|
|
return Build.VERSION.SDK_INT >= 25 ? ((ShortcutManager) context.getSystemService(ShortcutManager.class)).getIconMaxWidth() : getIconDimensionInternal(context, true);
|
|
}
|
|
|
|
public static int getMaxShortcutCountPerActivity(@NonNull Context context) {
|
|
Preconditions.checkNotNull(context);
|
|
if (Build.VERSION.SDK_INT >= 25) {
|
|
return ((ShortcutManager) context.getSystemService(ShortcutManager.class)).getMaxShortcutCountPerActivity();
|
|
}
|
|
return 5;
|
|
}
|
|
|
|
@VisibleForTesting
|
|
public static List<ShortcutInfoChangeListener> getShortcutInfoChangeListeners() {
|
|
return sShortcutInfoChangeListeners;
|
|
}
|
|
|
|
private static String getShortcutInfoCompatWithLowestRank(@NonNull List<ShortcutInfoCompat> list) {
|
|
int i = -1;
|
|
String str = null;
|
|
for (ShortcutInfoCompat shortcutInfoCompat : list) {
|
|
if (shortcutInfoCompat.getRank() > i) {
|
|
str = shortcutInfoCompat.getId();
|
|
i = shortcutInfoCompat.getRank();
|
|
}
|
|
}
|
|
return str;
|
|
}
|
|
|
|
private static List<ShortcutInfoChangeListener> getShortcutInfoListeners(Context context) {
|
|
Bundle bundle;
|
|
String string;
|
|
if (sShortcutInfoChangeListeners == null) {
|
|
ArrayList arrayList = new ArrayList();
|
|
PackageManager packageManager = context.getPackageManager();
|
|
Intent intent = new Intent(SHORTCUT_LISTENER_INTENT_FILTER_ACTION);
|
|
intent.setPackage(context.getPackageName());
|
|
for (ResolveInfo resolveInfo : packageManager.queryIntentActivities(intent, 128)) {
|
|
ActivityInfo activityInfo = resolveInfo.activityInfo;
|
|
if (!(activityInfo == null || (bundle = activityInfo.metaData) == null || (string = bundle.getString(SHORTCUT_LISTENER_META_DATA_KEY)) == null)) {
|
|
try {
|
|
arrayList.add((ShortcutInfoChangeListener) Class.forName(string, false, ShortcutManagerCompat.class.getClassLoader()).getMethod("getInstance", Context.class).invoke(null, context));
|
|
} catch (Exception unused) {
|
|
}
|
|
}
|
|
}
|
|
if (sShortcutInfoChangeListeners == null) {
|
|
sShortcutInfoChangeListeners = arrayList;
|
|
}
|
|
}
|
|
return sShortcutInfoChangeListeners;
|
|
}
|
|
|
|
private static ShortcutInfoCompatSaver<?> getShortcutInfoSaverInstance(Context context) {
|
|
if (sShortcutInfoCompatSaver == null) {
|
|
if (Build.VERSION.SDK_INT >= 23) {
|
|
try {
|
|
sShortcutInfoCompatSaver = (ShortcutInfoCompatSaver) Class.forName("androidx.sharetarget.ShortcutInfoCompatSaverImpl", false, ShortcutManagerCompat.class.getClassLoader()).getMethod("getInstance", Context.class).invoke(null, context);
|
|
} catch (Exception unused) {
|
|
}
|
|
}
|
|
if (sShortcutInfoCompatSaver == null) {
|
|
sShortcutInfoCompatSaver = new ShortcutInfoCompatSaver.NoopImpl();
|
|
}
|
|
}
|
|
return sShortcutInfoCompatSaver;
|
|
}
|
|
|
|
@NonNull
|
|
public static List<ShortcutInfoCompat> getShortcuts(@NonNull Context context, int i) {
|
|
int i2 = Build.VERSION.SDK_INT;
|
|
if (i2 >= 30) {
|
|
return ShortcutInfoCompat.fromShortcuts(context, ((ShortcutManager) context.getSystemService(ShortcutManager.class)).getShortcuts(i));
|
|
}
|
|
if (i2 >= 25) {
|
|
ShortcutManager shortcutManager = (ShortcutManager) context.getSystemService(ShortcutManager.class);
|
|
ArrayList arrayList = new ArrayList();
|
|
if ((i & 1) != 0) {
|
|
arrayList.addAll(shortcutManager.getManifestShortcuts());
|
|
}
|
|
if ((i & 2) != 0) {
|
|
arrayList.addAll(shortcutManager.getDynamicShortcuts());
|
|
}
|
|
if ((i & 4) != 0) {
|
|
arrayList.addAll(shortcutManager.getPinnedShortcuts());
|
|
}
|
|
return ShortcutInfoCompat.fromShortcuts(context, arrayList);
|
|
}
|
|
if ((i & 2) != 0) {
|
|
try {
|
|
return getShortcutInfoSaverInstance(context).getShortcuts();
|
|
} catch (Exception unused) {
|
|
}
|
|
}
|
|
return Collections.emptyList();
|
|
}
|
|
|
|
public static boolean isRateLimitingActive(@NonNull Context context) {
|
|
Preconditions.checkNotNull(context);
|
|
return Build.VERSION.SDK_INT >= 25 ? ((ShortcutManager) context.getSystemService(ShortcutManager.class)).isRateLimitingActive() : getShortcuts(context, 3).size() == getMaxShortcutCountPerActivity(context);
|
|
}
|
|
|
|
/* JADX WARNING: Removed duplicated region for block: B:10:0x0036 */
|
|
public static boolean isRequestPinShortcutSupported(@NonNull Context context) {
|
|
if (Build.VERSION.SDK_INT >= 26) {
|
|
return ((ShortcutManager) context.getSystemService(ShortcutManager.class)).isRequestPinShortcutSupported();
|
|
}
|
|
if (ContextCompat.checkSelfPermission(context, INSTALL_SHORTCUT_PERMISSION) != 0) {
|
|
return false;
|
|
}
|
|
for (ResolveInfo resolveInfo : context.getPackageManager().queryBroadcastReceivers(new Intent(ACTION_INSTALL_SHORTCUT), 0)) {
|
|
String str = resolveInfo.activityInfo.permission;
|
|
if (TextUtils.isEmpty(str) || INSTALL_SHORTCUT_PERMISSION.equals(str)) {
|
|
return true;
|
|
}
|
|
while (r4.hasNext()) {
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static boolean pushDynamicShortcut(@NonNull Context context, @NonNull ShortcutInfoCompat shortcutInfoCompat) {
|
|
Preconditions.checkNotNull(context);
|
|
Preconditions.checkNotNull(shortcutInfoCompat);
|
|
int maxShortcutCountPerActivity = getMaxShortcutCountPerActivity(context);
|
|
if (maxShortcutCountPerActivity == 0) {
|
|
return false;
|
|
}
|
|
int i = Build.VERSION.SDK_INT;
|
|
if (i <= 29) {
|
|
convertUriIconToBitmapIcon(context, shortcutInfoCompat);
|
|
}
|
|
if (i >= 30) {
|
|
((ShortcutManager) context.getSystemService(ShortcutManager.class)).pushDynamicShortcut(shortcutInfoCompat.toShortcutInfo());
|
|
} else if (i >= 25) {
|
|
ShortcutManager shortcutManager = (ShortcutManager) context.getSystemService(ShortcutManager.class);
|
|
if (shortcutManager.isRateLimitingActive()) {
|
|
return false;
|
|
}
|
|
List<ShortcutInfo> dynamicShortcuts = shortcutManager.getDynamicShortcuts();
|
|
if (dynamicShortcuts.size() >= maxShortcutCountPerActivity) {
|
|
shortcutManager.removeDynamicShortcuts(Arrays.asList(Api25Impl.getShortcutInfoWithLowestRank(dynamicShortcuts)));
|
|
}
|
|
shortcutManager.addDynamicShortcuts(Arrays.asList(shortcutInfoCompat.toShortcutInfo()));
|
|
}
|
|
ShortcutInfoCompatSaver<?> shortcutInfoSaverInstance = getShortcutInfoSaverInstance(context);
|
|
try {
|
|
List<ShortcutInfoCompat> shortcuts = shortcutInfoSaverInstance.getShortcuts();
|
|
if (shortcuts.size() >= maxShortcutCountPerActivity) {
|
|
shortcutInfoSaverInstance.removeShortcuts(Arrays.asList(getShortcutInfoCompatWithLowestRank(shortcuts)));
|
|
}
|
|
shortcutInfoSaverInstance.addShortcuts(Arrays.asList(shortcutInfoCompat));
|
|
for (ShortcutInfoChangeListener shortcutInfoChangeListener : getShortcutInfoListeners(context)) {
|
|
shortcutInfoChangeListener.onShortcutAdded(Collections.singletonList(shortcutInfoCompat));
|
|
}
|
|
reportShortcutUsed(context, shortcutInfoCompat.getId());
|
|
return true;
|
|
} catch (Exception unused) {
|
|
for (ShortcutInfoChangeListener shortcutInfoChangeListener2 : getShortcutInfoListeners(context)) {
|
|
shortcutInfoChangeListener2.onShortcutAdded(Collections.singletonList(shortcutInfoCompat));
|
|
}
|
|
reportShortcutUsed(context, shortcutInfoCompat.getId());
|
|
return false;
|
|
} catch (Throwable th) {
|
|
for (ShortcutInfoChangeListener shortcutInfoChangeListener3 : getShortcutInfoListeners(context)) {
|
|
shortcutInfoChangeListener3.onShortcutAdded(Collections.singletonList(shortcutInfoCompat));
|
|
}
|
|
reportShortcutUsed(context, shortcutInfoCompat.getId());
|
|
throw th;
|
|
}
|
|
}
|
|
|
|
public static void removeAllDynamicShortcuts(@NonNull Context context) {
|
|
if (Build.VERSION.SDK_INT >= 25) {
|
|
((ShortcutManager) context.getSystemService(ShortcutManager.class)).removeAllDynamicShortcuts();
|
|
}
|
|
getShortcutInfoSaverInstance(context).removeAllShortcuts();
|
|
for (ShortcutInfoChangeListener shortcutInfoChangeListener : getShortcutInfoListeners(context)) {
|
|
shortcutInfoChangeListener.onAllShortcutsRemoved();
|
|
}
|
|
}
|
|
|
|
public static void removeDynamicShortcuts(@NonNull Context context, @NonNull List<String> list) {
|
|
if (Build.VERSION.SDK_INT >= 25) {
|
|
((ShortcutManager) context.getSystemService(ShortcutManager.class)).removeDynamicShortcuts(list);
|
|
}
|
|
getShortcutInfoSaverInstance(context).removeShortcuts(list);
|
|
for (ShortcutInfoChangeListener shortcutInfoChangeListener : getShortcutInfoListeners(context)) {
|
|
shortcutInfoChangeListener.onShortcutRemoved(list);
|
|
}
|
|
}
|
|
|
|
public static void removeLongLivedShortcuts(@NonNull Context context, @NonNull List<String> list) {
|
|
if (Build.VERSION.SDK_INT < 30) {
|
|
removeDynamicShortcuts(context, list);
|
|
return;
|
|
}
|
|
((ShortcutManager) context.getSystemService(ShortcutManager.class)).removeLongLivedShortcuts(list);
|
|
getShortcutInfoSaverInstance(context).removeShortcuts(list);
|
|
for (ShortcutInfoChangeListener shortcutInfoChangeListener : getShortcutInfoListeners(context)) {
|
|
shortcutInfoChangeListener.onShortcutRemoved(list);
|
|
}
|
|
}
|
|
|
|
public static void reportShortcutUsed(@NonNull Context context, @NonNull String str) {
|
|
Preconditions.checkNotNull(context);
|
|
Preconditions.checkNotNull(str);
|
|
if (Build.VERSION.SDK_INT >= 25) {
|
|
((ShortcutManager) context.getSystemService(ShortcutManager.class)).reportShortcutUsed(str);
|
|
}
|
|
for (ShortcutInfoChangeListener shortcutInfoChangeListener : getShortcutInfoListeners(context)) {
|
|
shortcutInfoChangeListener.onShortcutUsageReported(Collections.singletonList(str));
|
|
}
|
|
}
|
|
|
|
public static boolean requestPinShortcut(@NonNull Context context, @NonNull ShortcutInfoCompat shortcutInfoCompat, @Nullable IntentSender intentSender) {
|
|
if (Build.VERSION.SDK_INT >= 26) {
|
|
return ((ShortcutManager) context.getSystemService(ShortcutManager.class)).requestPinShortcut(shortcutInfoCompat.toShortcutInfo(), intentSender);
|
|
}
|
|
if (!isRequestPinShortcutSupported(context)) {
|
|
return false;
|
|
}
|
|
Intent addToIntent = shortcutInfoCompat.addToIntent(new Intent(ACTION_INSTALL_SHORTCUT));
|
|
if (intentSender == null) {
|
|
context.sendBroadcast(addToIntent);
|
|
return true;
|
|
}
|
|
context.sendOrderedBroadcast(addToIntent, null, new AnonymousClass1(intentSender), null, -1, null, null);
|
|
return true;
|
|
}
|
|
|
|
public static boolean setDynamicShortcuts(@NonNull Context context, @NonNull List<ShortcutInfoCompat> list) {
|
|
Preconditions.checkNotNull(context);
|
|
Preconditions.checkNotNull(list);
|
|
if (Build.VERSION.SDK_INT >= 25) {
|
|
ArrayList arrayList = new ArrayList(list.size());
|
|
for (ShortcutInfoCompat shortcutInfoCompat : list) {
|
|
arrayList.add(shortcutInfoCompat.toShortcutInfo());
|
|
}
|
|
if (!((ShortcutManager) context.getSystemService(ShortcutManager.class)).setDynamicShortcuts(arrayList)) {
|
|
return false;
|
|
}
|
|
}
|
|
getShortcutInfoSaverInstance(context).removeAllShortcuts();
|
|
getShortcutInfoSaverInstance(context).addShortcuts(list);
|
|
for (ShortcutInfoChangeListener shortcutInfoChangeListener : getShortcutInfoListeners(context)) {
|
|
shortcutInfoChangeListener.onAllShortcutsRemoved();
|
|
shortcutInfoChangeListener.onShortcutAdded(list);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@VisibleForTesting
|
|
public static void setShortcutInfoChangeListeners(List<ShortcutInfoChangeListener> list) {
|
|
sShortcutInfoChangeListeners = list;
|
|
}
|
|
|
|
@VisibleForTesting
|
|
public static void setShortcutInfoCompatSaver(ShortcutInfoCompatSaver<Void> shortcutInfoCompatSaver) {
|
|
sShortcutInfoCompatSaver = shortcutInfoCompatSaver;
|
|
}
|
|
|
|
public static boolean updateShortcuts(@NonNull Context context, @NonNull List<ShortcutInfoCompat> list) {
|
|
int i = Build.VERSION.SDK_INT;
|
|
if (i <= 29) {
|
|
convertUriIconsToBitmapIcons(context, list);
|
|
}
|
|
if (i >= 25) {
|
|
ArrayList arrayList = new ArrayList();
|
|
for (ShortcutInfoCompat shortcutInfoCompat : list) {
|
|
arrayList.add(shortcutInfoCompat.toShortcutInfo());
|
|
}
|
|
if (!((ShortcutManager) context.getSystemService(ShortcutManager.class)).updateShortcuts(arrayList)) {
|
|
return false;
|
|
}
|
|
}
|
|
getShortcutInfoSaverInstance(context).addShortcuts(list);
|
|
for (ShortcutInfoChangeListener shortcutInfoChangeListener : getShortcutInfoListeners(context)) {
|
|
shortcutInfoChangeListener.onShortcutUpdated(list);
|
|
}
|
|
return true;
|
|
}
|
|
}
|