1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settingslib.applications; 18 19 import android.app.AppGlobals; 20 import android.content.ComponentName; 21 import android.content.Context; 22 import android.content.pm.ApplicationInfo; 23 import android.content.pm.ComponentInfo; 24 import android.content.pm.PackageItemInfo; 25 import android.content.pm.PackageManager; 26 import android.graphics.drawable.Drawable; 27 import android.os.RemoteException; 28 import android.util.IconDrawableFactory; 29 30 import androidx.annotation.Nullable; 31 32 import com.android.settingslib.widget.CandidateInfo; 33 34 /** 35 * Data model representing an app in DefaultAppPicker UI. 36 */ 37 public class DefaultAppInfo extends CandidateInfo { 38 39 public final int userId; 40 public final ComponentName componentName; 41 public final PackageItemInfo packageItemInfo; 42 public final String summary; 43 protected final PackageManager mPm; 44 private final Context mContext; 45 DefaultAppInfo(Context context, PackageManager pm, int uid, ComponentName cn)46 public DefaultAppInfo(Context context, PackageManager pm, int uid, ComponentName cn) { 47 this(context, pm, uid, cn, null /* summary */, true /* enabled */); 48 } 49 DefaultAppInfo(Context context, PackageManager pm, int uid, PackageItemInfo info)50 public DefaultAppInfo(Context context, PackageManager pm, int uid, PackageItemInfo info) { 51 this(context, pm, uid, info, null /* summary */, true /* enabled */); 52 } 53 DefaultAppInfo(Context context, PackageManager pm, int uid, ComponentName cn, String summary, boolean enabled)54 public DefaultAppInfo(Context context, PackageManager pm, int uid, ComponentName cn, 55 String summary, boolean enabled) { 56 super(enabled); 57 mContext = context; 58 mPm = pm; 59 packageItemInfo = null; 60 userId = uid; 61 componentName = cn; 62 this.summary = summary; 63 } 64 DefaultAppInfo(Context context, PackageManager pm, int uid, PackageItemInfo info, String summary, boolean enabled)65 public DefaultAppInfo(Context context, PackageManager pm, int uid, PackageItemInfo info, 66 String summary, boolean enabled) { 67 super(enabled); 68 mContext = context; 69 mPm = pm; 70 userId = uid; 71 packageItemInfo = info; 72 componentName = null; 73 this.summary = summary; 74 } 75 76 @Override loadLabel()77 public CharSequence loadLabel() { 78 if (componentName != null) { 79 try { 80 final ComponentInfo componentInfo = getComponentInfo(); 81 if (componentInfo != null) { 82 return componentInfo.loadLabel(mPm); 83 } else { 84 final ApplicationInfo appInfo = mPm.getApplicationInfoAsUser( 85 componentName.getPackageName(), 0, userId); 86 return appInfo.loadLabel(mPm); 87 } 88 } catch (PackageManager.NameNotFoundException e) { 89 return null; 90 } 91 } else if (packageItemInfo != null) { 92 return packageItemInfo.loadLabel(mPm); 93 } else { 94 return null; 95 } 96 97 } 98 getSummary()99 public @Nullable String getSummary() { 100 return this.summary; 101 } 102 103 @Override loadIcon()104 public Drawable loadIcon() { 105 final IconDrawableFactory factory = IconDrawableFactory.newInstance(mContext); 106 if (componentName != null) { 107 try { 108 final ComponentInfo componentInfo = getComponentInfo(); 109 final ApplicationInfo appInfo = mPm.getApplicationInfoAsUser( 110 componentName.getPackageName(), 0, userId); 111 if (componentInfo != null) { 112 return factory.getBadgedIcon(componentInfo, appInfo, userId); 113 } else { 114 return factory.getBadgedIcon(appInfo); 115 } 116 } catch (PackageManager.NameNotFoundException e) { 117 return null; 118 } 119 } 120 if (packageItemInfo != null) { 121 try { 122 final ApplicationInfo appInfo = mPm.getApplicationInfoAsUser( 123 packageItemInfo.packageName, 0, userId); 124 return factory.getBadgedIcon(packageItemInfo, appInfo, userId); 125 } catch (PackageManager.NameNotFoundException e) { 126 return null; 127 } 128 } else { 129 return null; 130 } 131 } 132 133 @Override getKey()134 public String getKey() { 135 if (componentName != null) { 136 return componentName.flattenToString(); 137 } else if (packageItemInfo != null) { 138 return packageItemInfo.packageName; 139 } else { 140 return null; 141 } 142 } 143 getComponentInfo()144 private ComponentInfo getComponentInfo() { 145 try { 146 ComponentInfo componentInfo = AppGlobals.getPackageManager().getActivityInfo( 147 componentName, 0, userId); 148 if (componentInfo == null) { 149 componentInfo = AppGlobals.getPackageManager().getServiceInfo( 150 componentName, 0, userId); 151 } 152 return componentInfo; 153 } catch (RemoteException e) { 154 return null; 155 } 156 } 157 } 158