Java tutorial
/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.content.pm; import android.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.UserHandle; import android.os.UserManager; import android.util.DisplayMetrics; /** * A representation of an activity that can belong to this user or a managed * profile associated with this user. It can be used to query the label, icon * and badged icon for the activity. */ public class LauncherActivityInfo { private static final String TAG = "LauncherActivityInfo"; private final PackageManager mPm; @UnsupportedAppUsage private ActivityInfo mActivityInfo; private ComponentName mComponentName; private UserHandle mUser; /** * Create a launchable activity object for a given ResolveInfo and user. * * @param context The context for fetching resources. * @param info ResolveInfo from which to create the LauncherActivityInfo. * @param user The UserHandle of the profile to which this activity belongs. */ LauncherActivityInfo(Context context, ActivityInfo info, UserHandle user) { this(context); mActivityInfo = info; mComponentName = new ComponentName(info.packageName, info.name); mUser = user; } LauncherActivityInfo(Context context) { mPm = context.getPackageManager(); } /** * Returns the component name of this activity. * * @return ComponentName of the activity */ public ComponentName getComponentName() { return mComponentName; } /** * Returns the user handle of the user profile that this activity belongs to. In order to * persist the identity of the profile, do not store the UserHandle. Instead retrieve its * serial number from UserManager. You can convert the serial number back to a UserHandle * for later use. * * @see UserManager#getSerialNumberForUser(UserHandle) * @see UserManager#getUserForSerialNumber(long) * * @return The UserHandle of the profile. */ public UserHandle getUser() { return mUser; } /** * Retrieves the label for the activity. * * @return The label for the activity. */ public CharSequence getLabel() { // TODO: Go through LauncherAppsService return mActivityInfo.loadLabel(mPm); } /** * Returns the icon for this activity, without any badging for the profile. * @param density The preferred density of the icon, zero for default density. Use * density DPI values from {@link DisplayMetrics}. * @see #getBadgedIcon(int) * @see DisplayMetrics * @return The drawable associated with the activity. */ public Drawable getIcon(int density) { // TODO: Go through LauncherAppsService final int iconRes = mActivityInfo.getIconResource(); Drawable icon = null; // Get the preferred density icon from the app's resources if (density != 0 && iconRes != 0) { try { final Resources resources = mPm.getResourcesForApplication(mActivityInfo.applicationInfo); icon = resources.getDrawableForDensity(iconRes, density); } catch (NameNotFoundException | Resources.NotFoundException exc) { } } // Get the default density icon if (icon == null) { icon = mActivityInfo.loadIcon(mPm); } return icon; } /** * Returns the application flags from the ApplicationInfo of the activity. * * @return Application flags * @hide remove before shipping */ public int getApplicationFlags() { return mActivityInfo.applicationInfo.flags; } /** * Returns the application info for the appliction this activity belongs to. * @return */ public ApplicationInfo getApplicationInfo() { return mActivityInfo.applicationInfo; } /** * Returns the time at which the package was first installed. * * @return The time of installation of the package, in milliseconds. */ public long getFirstInstallTime() { try { // TODO: Go through LauncherAppsService return mPm.getPackageInfo(mActivityInfo.packageName, PackageManager.MATCH_UNINSTALLED_PACKAGES).firstInstallTime; } catch (NameNotFoundException nnfe) { // Sorry, can't find package return 0; } } /** * Returns the name for the acitivty from android:name in the manifest. * @return the name from android:name for the acitivity. */ public String getName() { return mActivityInfo.name; } /** * Returns the activity icon with badging appropriate for the profile. * @param density Optional density for the icon, or 0 to use the default density. Use * {@link DisplayMetrics} for DPI values. * @see DisplayMetrics * @return A badged icon for the activity. */ public Drawable getBadgedIcon(int density) { Drawable originalIcon = getIcon(density); return mPm.getUserBadgedIcon(originalIcon, mUser); } }