Search in sources :

Example 76 with IPackageManager

use of android.content.pm.IPackageManager in project cornerstone by Onskreen.

the class ActivityManagerService method getRunningExternalApplications.

public List<ApplicationInfo> getRunningExternalApplications() {
    enforceNotIsolatedCaller("getRunningExternalApplications");
    List<ActivityManager.RunningAppProcessInfo> runningApps = getRunningAppProcesses();
    List<ApplicationInfo> retList = new ArrayList<ApplicationInfo>();
    if (runningApps != null && runningApps.size() > 0) {
        Set<String> extList = new HashSet<String>();
        for (ActivityManager.RunningAppProcessInfo app : runningApps) {
            if (app.pkgList != null) {
                for (String pkg : app.pkgList) {
                    extList.add(pkg);
                }
            }
        }
        IPackageManager pm = AppGlobals.getPackageManager();
        for (String pkg : extList) {
            try {
                ApplicationInfo info = pm.getApplicationInfo(pkg, 0, UserId.getCallingUserId());
                if ((info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
                    retList.add(info);
                }
            } catch (RemoteException e) {
            }
        }
    }
    return retList;
}
Also used : IPackageManager(android.content.pm.IPackageManager) ArrayList(java.util.ArrayList) ApplicationInfo(android.content.pm.ApplicationInfo) ActivityManager(android.app.ActivityManager) RemoteException(android.os.RemoteException) HashSet(java.util.HashSet)

Example 77 with IPackageManager

use of android.content.pm.IPackageManager in project cornerstone by Onskreen.

the class ActivityManagerService method getRecentTasks.

public List<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum, int flags) {
    final int callingUid = Binder.getCallingUid();
    // If it's the system uid asking, then use the current user id.
    // TODO: Make sure that there aren't any other legitimate calls from the system uid that
    // require the entire list.
    final int callingUserId = callingUid == Process.SYSTEM_UID ? mCurrentUserId : UserId.getUserId(callingUid);
    synchronized (this) {
        enforceCallingPermission(android.Manifest.permission.GET_TASKS, "getRecentTasks()");
        final boolean detailed = checkCallingPermission(android.Manifest.permission.GET_DETAILED_TASKS) == PackageManager.PERMISSION_GRANTED;
        IPackageManager pm = AppGlobals.getPackageManager();
        final int N = mRecentTasks.size();
        ArrayList<ActivityManager.RecentTaskInfo> res = new ArrayList<ActivityManager.RecentTaskInfo>(maxNum < N ? maxNum : N);
        for (int i = 0; i < N && maxNum > 0; i++) {
            TaskRecord tr = mRecentTasks.get(i);
            // Only add calling user's recent tasks
            if (tr.userId != callingUserId)
                continue;
            if (i == 0 || ((flags & ActivityManager.RECENT_WITH_EXCLUDED) != 0) || (tr.intent == null) || ((tr.intent.getFlags() & Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) == 0)) {
                ActivityManager.RecentTaskInfo rti = new ActivityManager.RecentTaskInfo();
                rti.id = tr.numActivities > 0 ? tr.taskId : -1;
                rti.persistentId = tr.taskId;
                rti.baseIntent = new Intent(tr.intent != null ? tr.intent : tr.affinityIntent);
                if (!detailed) {
                    rti.baseIntent.replaceExtras((Bundle) null);
                }
                rti.origActivity = tr.origActivity;
                rti.description = tr.lastDescription;
                if ((flags & ActivityManager.RECENT_IGNORE_UNAVAILABLE) != 0) {
                    // Check whether this activity is currently available.
                    try {
                        if (rti.origActivity != null) {
                            if (pm.getActivityInfo(rti.origActivity, 0, callingUserId) == null) {
                                continue;
                            }
                        } else if (rti.baseIntent != null) {
                            if (pm.queryIntentActivities(rti.baseIntent, null, 0, callingUserId) == null) {
                                continue;
                            }
                        }
                    } catch (RemoteException e) {
                    // Will never happen.
                    }
                }
                res.add(rti);
                maxNum--;
            }
        }
        return res;
    }
}
Also used : IPackageManager(android.content.pm.IPackageManager) ArrayList(java.util.ArrayList) PendingIntent(android.app.PendingIntent) Intent(android.content.Intent) ActivityManager(android.app.ActivityManager) RemoteException(android.os.RemoteException)

Example 78 with IPackageManager

use of android.content.pm.IPackageManager in project cornerstone by Onskreen.

the class ActivityManagerService method killBackgroundProcesses.

public void killBackgroundProcesses(final String packageName) {
    if (checkCallingPermission(android.Manifest.permission.KILL_BACKGROUND_PROCESSES) != PackageManager.PERMISSION_GRANTED && checkCallingPermission(android.Manifest.permission.RESTART_PACKAGES) != PackageManager.PERMISSION_GRANTED) {
        String msg = "Permission Denial: killBackgroundProcesses() from pid=" + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid() + " requires " + android.Manifest.permission.KILL_BACKGROUND_PROCESSES;
        Slog.w(TAG, msg);
        throw new SecurityException(msg);
    }
    int userId = UserId.getCallingUserId();
    long callingId = Binder.clearCallingIdentity();
    try {
        IPackageManager pm = AppGlobals.getPackageManager();
        int pkgUid = -1;
        synchronized (this) {
            try {
                pkgUid = pm.getPackageUid(packageName, userId);
            } catch (RemoteException e) {
            }
            if (pkgUid == -1) {
                Slog.w(TAG, "Invalid packageName: " + packageName);
                return;
            }
            killPackageProcessesLocked(packageName, pkgUid, ProcessList.SERVICE_ADJ, false, true, true, false, "kill background");
        }
    } finally {
        Binder.restoreCallingIdentity(callingId);
    }
}
Also used : IPackageManager(android.content.pm.IPackageManager) RemoteException(android.os.RemoteException)

Example 79 with IPackageManager

use of android.content.pm.IPackageManager in project cornerstone by Onskreen.

the class ActivityManagerService method checkGrantUriPermissionLocked.

/**
     * Check if the targetPkg can be granted permission to access uri by
     * the callingUid using the given modeFlags.  Throws a security exception
     * if callingUid is not allowed to do this.  Returns the uid of the target
     * if the URI permission grant should be performed; returns -1 if it is not
     * needed (for example targetPkg already has permission to access the URI).
     * If you already know the uid of the target, you can supply it in
     * lastTargetUid else set that to -1.
     */
int checkGrantUriPermissionLocked(int callingUid, String targetPkg, Uri uri, int modeFlags, int lastTargetUid) {
    modeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    if (modeFlags == 0) {
        return -1;
    }
    if (targetPkg != null) {
        if (DEBUG_URI_PERMISSION)
            Slog.v(TAG, "Checking grant " + targetPkg + " permission to " + uri);
    }
    final IPackageManager pm = AppGlobals.getPackageManager();
    // If this is not a content: uri, we can't do anything with it.
    if (!ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
        if (DEBUG_URI_PERMISSION)
            Slog.v(TAG, "Can't grant URI permission for non-content URI: " + uri);
        return -1;
    }
    String name = uri.getAuthority();
    ProviderInfo pi = null;
    ContentProviderRecord cpr = mProviderMap.getProviderByName(name, UserId.getUserId(callingUid));
    if (cpr != null) {
        pi = cpr.info;
    } else {
        try {
            pi = pm.resolveContentProvider(name, PackageManager.GET_URI_PERMISSION_PATTERNS, UserId.getUserId(callingUid));
        } catch (RemoteException ex) {
        }
    }
    if (pi == null) {
        Slog.w(TAG, "No content provider found for permission check: " + uri.toSafeString());
        return -1;
    }
    int targetUid = lastTargetUid;
    if (targetUid < 0 && targetPkg != null) {
        try {
            targetUid = pm.getPackageUid(targetPkg, UserId.getUserId(callingUid));
            if (targetUid < 0) {
                if (DEBUG_URI_PERMISSION)
                    Slog.v(TAG, "Can't grant URI permission no uid for: " + targetPkg);
                return -1;
            }
        } catch (RemoteException ex) {
            return -1;
        }
    }
    if (targetUid >= 0) {
        // First...  does the target actually need this permission?
        if (checkHoldingPermissionsLocked(pm, pi, uri, targetUid, modeFlags)) {
            // No need to grant the target this permission.
            if (DEBUG_URI_PERMISSION)
                Slog.v(TAG, "Target " + targetPkg + " already has full permission to " + uri);
            return -1;
        }
    } else {
        // First...  there is no target package, so can anyone access it?
        boolean allowed = pi.exported;
        if ((modeFlags & Intent.FLAG_GRANT_READ_URI_PERMISSION) != 0) {
            if (pi.readPermission != null) {
                allowed = false;
            }
        }
        if ((modeFlags & Intent.FLAG_GRANT_WRITE_URI_PERMISSION) != 0) {
            if (pi.writePermission != null) {
                allowed = false;
            }
        }
        if (allowed) {
            return -1;
        }
    }
    // Second...  is the provider allowing granting of URI permissions?
    if (!pi.grantUriPermissions) {
        throw new SecurityException("Provider " + pi.packageName + "/" + pi.name + " does not allow granting of Uri permissions (uri " + uri + ")");
    }
    if (pi.uriPermissionPatterns != null) {
        final int N = pi.uriPermissionPatterns.length;
        boolean allowed = false;
        for (int i = 0; i < N; i++) {
            if (pi.uriPermissionPatterns[i] != null && pi.uriPermissionPatterns[i].match(uri.getPath())) {
                allowed = true;
                break;
            }
        }
        if (!allowed) {
            throw new SecurityException("Provider " + pi.packageName + "/" + pi.name + " does not allow granting of permission to path of Uri " + uri);
        }
    }
    // this uri?
    if (callingUid != Process.myUid()) {
        if (!checkHoldingPermissionsLocked(pm, pi, uri, callingUid, modeFlags)) {
            if (!checkUriPermissionLocked(uri, callingUid, modeFlags)) {
                throw new SecurityException("Uid " + callingUid + " does not have permission to uri " + uri);
            }
        }
    }
    return targetUid;
}
Also used : IPackageManager(android.content.pm.IPackageManager) ProviderInfo(android.content.pm.ProviderInfo) RemoteException(android.os.RemoteException)

Example 80 with IPackageManager

use of android.content.pm.IPackageManager in project android_frameworks_base by crdroidandroid.

the class LoadedApk method initializeJavaContextClassLoader.

/**
     * Setup value for Thread.getContextClassLoader(). If the
     * package will not run in in a VM with other packages, we set
     * the Java context ClassLoader to the
     * PackageInfo.getClassLoader value. However, if this VM can
     * contain multiple packages, we intead set the Java context
     * ClassLoader to a proxy that will warn about the use of Java
     * context ClassLoaders and then fall through to use the
     * system ClassLoader.
     *
     * <p> Note that this is similar to but not the same as the
     * android.content.Context.getClassLoader(). While both
     * context class loaders are typically set to the
     * PathClassLoader used to load the package archive in the
     * single application per VM case, a single Android process
     * may contain several Contexts executing on one thread with
     * their own logical ClassLoaders while the Java context
     * ClassLoader is a thread local. This is why in the case when
     * we have multiple packages per VM we do not set the Java
     * context ClassLoader to an arbitrary but instead warn the
     * user to set their own if we detect that they are using a
     * Java library that expects it to be set.
     */
private void initializeJavaContextClassLoader() {
    IPackageManager pm = ActivityThread.getPackageManager();
    android.content.pm.PackageInfo pi;
    try {
        pi = pm.getPackageInfo(mPackageName, PackageManager.MATCH_DEBUG_TRIAGED_MISSING, UserHandle.myUserId());
    } catch (RemoteException e) {
        throw e.rethrowFromSystemServer();
    }
    if (pi == null) {
        throw new IllegalStateException("Unable to get package info for " + mPackageName + "; is package not installed?");
    }
    /*
         * Two possible indications that this package could be
         * sharing its virtual machine with other packages:
         *
         * 1.) the sharedUserId attribute is set in the manifest,
         *     indicating a request to share a VM with other
         *     packages with the same sharedUserId.
         *
         * 2.) the application element of the manifest has an
         *     attribute specifying a non-default process name,
         *     indicating the desire to run in another packages VM.
         */
    boolean sharedUserIdSet = (pi.sharedUserId != null);
    boolean processNameNotDefault = (pi.applicationInfo != null && !mPackageName.equals(pi.applicationInfo.processName));
    boolean sharable = (sharedUserIdSet || processNameNotDefault);
    ClassLoader contextClassLoader = (sharable) ? new WarningContextClassLoader() : mClassLoader;
    Thread.currentThread().setContextClassLoader(contextClassLoader);
}
Also used : IPackageManager(android.content.pm.IPackageManager) RemoteException(android.os.RemoteException)

Aggregations

IPackageManager (android.content.pm.IPackageManager)192 RemoteException (android.os.RemoteException)182 ApplicationInfo (android.content.pm.ApplicationInfo)58 Point (android.graphics.Point)33 PackageInfo (android.content.pm.PackageInfo)32 ComponentName (android.content.ComponentName)29 Intent (android.content.Intent)26 ArrayList (java.util.ArrayList)20 PackageManager (android.content.pm.PackageManager)18 UserHandle (android.os.UserHandle)13 Context (android.content.Context)12 HashMap (java.util.HashMap)12 ProviderInfo (android.content.pm.ProviderInfo)10 PendingIntent (android.app.PendingIntent)9 HashSet (java.util.HashSet)9 UserManager (android.os.UserManager)8 NameNotFoundException (android.content.pm.PackageManager.NameNotFoundException)7 ResolveInfo (android.content.pm.ResolveInfo)7 ActivityManager (android.app.ActivityManager)6 SpannableString (android.text.SpannableString)6