package com.wangdaye.mysplash.common.utils.manager; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.ShortcutInfo; import android.content.pm.ShortcutManager; import android.graphics.Bitmap; import android.graphics.drawable.Icon; import android.os.Build; import android.support.annotation.Nullable; import android.support.annotation.RequiresApi; import android.support.annotation.UiThread; import android.text.TextUtils; import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.target.SimpleTarget; import com.wangdaye.mysplash.R; import com.wangdaye.mysplash.common.ui.activity.DownloadManageActivity; import com.wangdaye.mysplash.common.utils.helper.ImageHelper; import com.wangdaye.mysplash.main.view.activity.MainActivity; import com.wangdaye.mysplash.me.view.activity.MeActivity; import java.util.ArrayList; import java.util.List; /** * Shortcuts manager. * * A manager class that is used to manage shortcuts. * * */ public class ShortcutsManager { private static final String PREFERENCE_NAME = "mysplash_shortcuts_manager"; private static final String KEY_VERSION_CODE = "version_code"; private static final String KEY_AUTHORIZED = "authorized"; private static final String KEY_AVATAR_URL = "avatar_url"; private static final String KEY_USERNAME = "username"; private static final int VERSION_CODE = 1; @RequiresApi(api = Build.VERSION_CODES.N_MR1) @UiThread public static void refreshShortcuts(final Context context) { if (needRefresh(context)) { if (!TextUtils.isEmpty(AuthManager.getInstance().getAvatarPath())) { ImageHelper.loadBitmap( context, new SimpleTarget<Bitmap>(128, 128) { @Override public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { setShortcuts(context, resource); } }, AuthManager.getInstance().getAvatarPath(), true); } else { setShortcuts(context, null); } } } private static boolean needRefresh(Context context) { SharedPreferences sharedPreferences = context.getSharedPreferences( PREFERENCE_NAME, Context.MODE_PRIVATE); int versionCode = sharedPreferences.getInt(KEY_VERSION_CODE, 0); boolean authorized = sharedPreferences.getBoolean(KEY_AUTHORIZED, false); String avatarUrl = sharedPreferences.getString(KEY_AVATAR_URL, ""); String username = sharedPreferences.getString(KEY_USERNAME, ""); String authAvatarUrl = AuthManager.getInstance().getAvatarPath(); if (authAvatarUrl == null) { authAvatarUrl = ""; } String authUsername = AuthManager.getInstance().getUsername(); if (authUsername == null) { authUsername = ""; } if (versionCode < VERSION_CODE || authorized != AuthManager.getInstance().isAuthorized() || !avatarUrl.equals(authAvatarUrl) || !username.equals(authUsername)) { SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putInt(KEY_VERSION_CODE, VERSION_CODE); editor.putBoolean(KEY_AUTHORIZED, AuthManager.getInstance().isAuthorized()); editor.putString(KEY_AVATAR_URL, authAvatarUrl); editor.putString(KEY_USERNAME, authUsername); editor.apply(); return true; } else { return false; } } @RequiresApi(api = Build.VERSION_CODES.N_MR1) private static void setShortcuts(Context context, @Nullable Bitmap bitmap) { ShortcutManager shortcutManager = context.getSystemService(ShortcutManager.class); List<ShortcutInfo> shortcutList = new ArrayList<>(); shortcutList.add( new ShortcutInfo.Builder(context, context.getString(R.string.action_search)) .setIcon(Icon.createWithResource(context, R.drawable.ic_shortcut_search)) .setShortLabel(context.getString(R.string.action_search)) .setLongLabel(context.getString(R.string.action_search)) .setIntent(new Intent(MainActivity.ACTION_SEARCH)) .setRank(2) .build()); shortcutList.add( new ShortcutInfo.Builder(context, context.getString(R.string.action_download_manage)) .setIcon(Icon.createWithResource(context, R.drawable.ic_shortcut_download)) .setShortLabel(context.getString(R.string.action_download_manage)) .setLongLabel(context.getString(R.string.action_download_manage)) .setIntent(new Intent(DownloadManageActivity.ACTION_DOWNLOAD_MANAGER)) .setRank(3) .build()); if (AuthManager.getInstance().isAuthorized()) { Icon icon; if (bitmap != null) { icon = Icon.createWithBitmap(bitmap); } else { icon = Icon.createWithResource(context, R.drawable.default_avatar_round); } shortcutList.add( new ShortcutInfo.Builder(context, AuthManager.getInstance().getUsername()) .setIcon(icon) .setShortLabel(AuthManager.getInstance().getUsername()) .setLongLabel(AuthManager.getInstance().getUsername()) .setIntent( new Intent("com.wangdaye.mysplash.Me") .putExtra(MeActivity.EXTRA_BROWSABLE, true)) .setRank(1) .build()); } shortcutManager.setDynamicShortcuts(shortcutList); } }