content: package com.android.launcher3.shortcuts;
  
  import android.content.ComponentName;
  import android.content.Intent;
  import android.content.pm.ShortcutInfo;
  import android.os.UserHandle;
  
  import com.android.launcher3.ItemInfo;
  import com.android.launcher3.util.ComponentKey;
  
  /**
   * A key that uniquely identifies a shortcut using its package, id, and user handle.
   */
  public class ShortcutKey extends ComponentKey {
  
      public static final String EXTRA_SHORTCUT_ID = "shortcut_id";
      private static final String INTENT_CATEGORY = "com.android.launcher3.DEEP_SHORTCUT";
  
      public ShortcutKey(String packageName, UserHandle user, String id) {
          // Use the id as the class name.
          super(new ComponentName(packageName, id), user);
      }
  
      public ShortcutKey(ComponentName componentName, UserHandle user) {
          super(componentName, user);
      }
  
      public String getId() {
          return componentName.getClassName();
      }
  
      public static ShortcutKey fromInfo(ShortcutInfo shortcutInfo) {
          return new ShortcutKey(shortcutInfo.getPackage(), shortcutInfo.getUserHandle(),
                  shortcutInfo.getId());
      }
  
      public static ShortcutKey fromIntent(Intent intent, UserHandle user) {
          String shortcutId = intent.getStringExtra(EXTRA_SHORTCUT_ID);
          return new ShortcutKey(intent.getPackage(), user, shortcutId);
      }
  
      public static ShortcutKey fromItemInfo(ItemInfo info) {
          return fromIntent(info.getIntent(), info.user);
      }
  
      public static Intent makeIntent(ShortcutInfo si) {
          return new Intent(Intent.ACTION_MAIN)
                  .addCategory(INTENT_CATEGORY)
                  .setComponent(si.getActivity())
                  .setPackage(si.getPackage())
                  .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED)
                  .putExtra(EXTRA_SHORTCUT_ID, si.getId());
      }
  }
  