PackageUtil.java revision 91ec61c3dca241befdf4a3803c45b051a3e3124f
191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project/*
291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project**
391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** Copyright 2007, The Android Open Source Project
491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project**
591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");
691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** you may not use this file except in compliance with the License.
791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** You may obtain a copy of the License at
891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project**
991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project**     http://www.apache.org/licenses/LICENSE-2.0
1091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project**
1191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** Unless required by applicable law or agreed to in writing, software
1291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS,
1391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** See the License for the specific language governing permissions and
1591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project** limitations under the License.
1691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project*/
1791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectpackage com.android.packageinstaller;
1891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project
1991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport java.io.File;
2091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport java.util.List;
2191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project
2291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.app.Activity;
2391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.content.Context;
2491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.content.Intent;
2591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.content.pm.ApplicationInfo;
2691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.content.pm.PackageInfo;
2791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.content.pm.PackageManager;
2891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.content.pm.PackageParser;
2991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.content.pm.ResolveInfo;
3091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.graphics.drawable.Drawable;
3191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.net.Uri;
3291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.util.DisplayMetrics;
3391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.view.View;
3491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.widget.ImageView;
3591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectimport android.widget.TextView;
3691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project
3791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project/**
3891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project * This is a utility class for defining some utility methods and constants
3991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project * used in the package installer application.
4091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project */
4191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Projectpublic class PackageUtil {
4291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    public static final String PREFIX="com.android.packageinstaller.";
4391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    public static final String INTENT_ATTR_INSTALL_STATUS = PREFIX+"installStatus";
4491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    public static final String INTENT_ATTR_APPLICATION_INFO=PREFIX+"applicationInfo";
4591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    public static final String INTENT_ATTR_PERMISSIONS_LIST=PREFIX+"PermissionsList";
4691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    //intent attribute strings related to uninstall
4791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    public static final String INTENT_ATTR_PACKAGE_NAME=PREFIX+"PackageName";
4891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project
4991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    /*
5091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project     * Utility method to get application information for a given packageURI
5191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project     */
5291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    public static  ApplicationInfo getApplicationInfo(Uri packageURI) {
5391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        final String archiveFilePath = packageURI.getPath();
5491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        PackageParser packageParser = new PackageParser(archiveFilePath);
5591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        File sourceFile = new File(archiveFilePath);
5691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        DisplayMetrics metrics = new DisplayMetrics();
5791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        metrics.setToDefaults();
5891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        PackageParser.Package pkg = packageParser.parsePackage(sourceFile, archiveFilePath, metrics, 0);
5991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        if (pkg == null) {
6091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project            return null;
6191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        }
6291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        return pkg.applicationInfo;
6391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    }
6491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project
6591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    /*
6691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project     * Utility method to get package information for a given packageURI
6791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project     */
6891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    public static  PackageParser.Package getPackageInfo(Uri packageURI) {
6991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        final String archiveFilePath = packageURI.getPath();
7091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        PackageParser packageParser = new PackageParser(archiveFilePath);
7191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        File sourceFile = new File(archiveFilePath);
7291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        DisplayMetrics metrics = new DisplayMetrics();
7391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        metrics.setToDefaults();
7491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        return packageParser.parsePackage(sourceFile, archiveFilePath, metrics, 0);
7591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    }
7691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project
7791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    /*
7891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project     * Utility method to get application label from package manager for a given context
7991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project     */
8091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    public static CharSequence getApplicationLabel(Context context, ApplicationInfo appInfo) {
8191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        CharSequence appName = appInfo.loadLabel(context.getPackageManager());
8291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        if(appName == null) {
8391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project            appName = context.getString(R.string.unknown);
8491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        }
8591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        return appName;
8691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    }
8791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project
8891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    /*
8991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project     * Utility method to getApplicationIcon from package manager for a given context
9091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project     */
9191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    public static Drawable getApplicationIcon(Context context, ApplicationInfo appInfo) {
9291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        return appInfo.loadIcon(context.getPackageManager());
9391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    }
9491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project
9591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    /*
9691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project     * Utility method to display application snippet. make sure to setContentView on context
9791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project     * before invoking this method
9891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project     */
9991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    public static View initAppSnippet(Activity context, ApplicationInfo appInfo, int snippetId) {
10091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        View appSnippet = context.findViewById(snippetId);
10191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        ((ImageView)appSnippet.findViewById(R.id.app_icon)).setImageDrawable(
10291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project                getApplicationIcon(context, appInfo));
10391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        ((TextView)appSnippet.findViewById(R.id.app_name)).setText(
10491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project                getApplicationLabel(context, appInfo));
10591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        return appSnippet;
10691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    }
10791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project
10891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    public static boolean isPackageAlreadyInstalled(Activity context, String pkgName) {
10991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        List<PackageInfo> installedList = context.getPackageManager().getInstalledPackages(
11091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project                PackageManager.GET_UNINSTALLED_PACKAGES);
11191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        int installedListSize = installedList.size();
11291ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        for(int i = 0; i < installedListSize; i++) {
11391ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project            PackageInfo tmp = installedList.get(i);
11491ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project            if(pkgName.equalsIgnoreCase(tmp.packageName)) {
11591ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project                return true;
11691ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project            }
11791ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project
11891ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        }
11991ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project        return false;
12091ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project    }
12191ec61c3dca241befdf4a3803c45b051a3e3124fThe Android Open Source Project}
122