package com.base.browserwhite.utils;

import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ShortcutInfo;
import android.content.pm.ShortcutManager;
import android.graphics.drawable.Icon;
import android.os.Build;

public class ShortcutHelper {

    /**
     * 请求创建桌面快捷方式。
     *
     * @param context     应用上下文。
     * @param shortcutId  快捷方式的唯一标识符。
     * @param shortLabel  快捷方式的简短标签。
     * @param longLabel   快捷方式的长标签。
     * @param activityClass 快捷方式要启动的Activity。
     * @param iconResId   快捷方式的图标资源ID。
     */
    public static void requestCreateShortcut(Context context, String shortcutId, String shortLabel, String longLabel, Class<?> activityClass, int iconResId) {
        // 创建启动Activity的Intent
        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.N_MR1){return;}
        Intent intent = new Intent(context, activityClass);
        intent.setAction(Intent.ACTION_VIEW);

        // 创建ShortcutInfo实例
        ShortcutInfo shortcut = new ShortcutInfo.Builder(context, shortcutId)
                .setShortLabel(shortLabel)
                .setLongLabel(longLabel)
                .setIcon(Icon.createWithResource(context, iconResId))
                .setIntent(intent)
                .build();

        // 获取ShortcutManager实例
        ShortcutManager shortcutManager = (ShortcutManager) context.getSystemService(Context.SHORTCUT_SERVICE);

        // 检查API级别和是否支持请求创建快捷方式
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            if (shortcutManager != null && shortcutManager.isRequestPinShortcutSupported()) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    // Android 8.0及以上，直接请求创建快捷方式
                    shortcutManager.requestPinShortcut(shortcut, null);
                } else {
                    // Android 7.1 (API级别25) 使用广播接收用户响应
                    Intent pinnedShortcutCallbackIntent = shortcutManager.createShortcutResultIntent(shortcut);
                    PendingIntent successCallback = PendingIntent.getBroadcast(context, 0, new Intent("com.example.SUCCESS"), PendingIntent.FLAG_UPDATE_CURRENT);
                    PendingIntent failureCallback = PendingIntent.getBroadcast(context, 0, new Intent("com.example.FAILURE"), PendingIntent.FLAG_UPDATE_CURRENT);
                    shortcutManager.requestPinShortcut(shortcut, successCallback.getIntentSender());
                }
            }
        }
    }
}