Search in sources :

Example 56 with ApplicationInfo

use of android.content.pm.ApplicationInfo in project android_frameworks_base by ResurrectionRemix.

the class DpmTestBase method setUpPackageManagerForFakeAdmin.

/**
     * Set up a component in the mock package manager to be an active admin.
     *
     * @param admin ComponentName that's visible to the test code, which doesn't have to exist.
     * @param copyFromAdmin package information for {@code admin} will be built based on this
     *    component's information.
     */
protected void setUpPackageManagerForFakeAdmin(ComponentName admin, int packageUid, Integer enabledSetting, Integer appTargetSdk, ComponentName copyFromAdmin) throws Exception {
    // Set up getApplicationInfo().
    final ApplicationInfo ai = DpmTestUtils.cloneParcelable(mRealTestContext.getPackageManager().getApplicationInfo(copyFromAdmin.getPackageName(), PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS));
    ai.enabledSetting = enabledSetting == null ? PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED : enabledSetting;
    if (appTargetSdk != null) {
        ai.targetSdkVersion = appTargetSdk;
    }
    ai.uid = packageUid;
    ai.packageName = admin.getPackageName();
    ai.name = admin.getClassName();
    doReturn(ai).when(mMockContext.ipackageManager).getApplicationInfo(eq(admin.getPackageName()), anyInt(), eq(UserHandle.getUserId(packageUid)));
    // Set up queryBroadcastReceivers().
    final Intent resolveIntent = new Intent();
    resolveIntent.setComponent(copyFromAdmin);
    final List<ResolveInfo> realResolveInfo = mRealTestContext.getPackageManager().queryBroadcastReceivers(resolveIntent, PackageManager.GET_META_DATA);
    assertNotNull(realResolveInfo);
    assertEquals(1, realResolveInfo.size());
    // We need to change AI, so set a clone.
    realResolveInfo.set(0, DpmTestUtils.cloneParcelable(realResolveInfo.get(0)));
    // We need to rewrite the UID in the activity info.
    final ActivityInfo aci = realResolveInfo.get(0).activityInfo;
    aci.applicationInfo = ai;
    aci.packageName = admin.getPackageName();
    aci.name = admin.getClassName();
    // Note we don't set up queryBroadcastReceivers.  We don't use it in DPMS.
    doReturn(aci).when(mMockContext.ipackageManager).getReceiverInfo(eq(admin), anyInt(), eq(UserHandle.getUserId(packageUid)));
    // Set up getPackageInfo().
    markPackageAsInstalled(admin.getPackageName(), ai, UserHandle.getUserId(packageUid));
}
Also used : ResolveInfo(android.content.pm.ResolveInfo) ActivityInfo(android.content.pm.ActivityInfo) ApplicationInfo(android.content.pm.ApplicationInfo) Intent(android.content.Intent)

Example 57 with ApplicationInfo

use of android.content.pm.ApplicationInfo in project android_frameworks_base by ResurrectionRemix.

the class CarrierAppUtils method disableCarrierAppsUntilPrivileged.

// Must be public b/c framework unit tests can't access package-private methods.
@VisibleForTesting
public static void disableCarrierAppsUntilPrivileged(String callingPackage, IPackageManager packageManager, @Nullable TelephonyManager telephonyManager, ContentResolver contentResolver, int userId, String[] systemCarrierAppsDisabledUntilUsed, ArrayMap<String, List<String>> systemCarrierAssociatedAppsDisabledUntilUsed) {
    List<ApplicationInfo> candidates = getDefaultCarrierAppCandidatesHelper(packageManager, userId, systemCarrierAppsDisabledUntilUsed);
    if (candidates == null || candidates.isEmpty()) {
        return;
    }
    Map<String, List<ApplicationInfo>> associatedApps = getDefaultCarrierAssociatedAppsHelper(packageManager, userId, systemCarrierAssociatedAppsDisabledUntilUsed);
    List<String> enabledCarrierPackages = new ArrayList<>();
    boolean hasRunOnce = Settings.Secure.getIntForUser(contentResolver, Settings.Secure.CARRIER_APPS_HANDLED, 0, userId) == 1;
    try {
        for (ApplicationInfo ai : candidates) {
            String packageName = ai.packageName;
            boolean hasPrivileges = telephonyManager != null && telephonyManager.checkCarrierPrivilegesForPackageAnyPhone(packageName) == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS;
            if (hasPrivileges) {
                // updated we shouldn't touch it.
                if (!ai.isUpdatedSystemApp() && (ai.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT || ai.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED)) {
                    Slog.i(TAG, "Update state(" + packageName + "): ENABLED for user " + userId);
                    packageManager.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP, userId, callingPackage);
                }
                // Also enable any associated apps for this carrier app.
                List<ApplicationInfo> associatedAppList = associatedApps.get(packageName);
                if (associatedAppList != null) {
                    for (ApplicationInfo associatedApp : associatedAppList) {
                        if (associatedApp.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT || associatedApp.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) {
                            Slog.i(TAG, "Update associated state(" + associatedApp.packageName + "): ENABLED for user " + userId);
                            packageManager.setApplicationEnabledSetting(associatedApp.packageName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP, userId, callingPackage);
                        }
                    }
                }
                // Always re-grant default permissions to carrier apps w/ privileges.
                enabledCarrierPackages.add(ai.packageName);
            } else {
                // updated we shouldn't touch it.
                if (!ai.isUpdatedSystemApp() && ai.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) {
                    Slog.i(TAG, "Update state(" + packageName + "): DISABLED_UNTIL_USED for user " + userId);
                    packageManager.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0, userId, callingPackage);
                }
                // distinction between "default" and "enabled".
                if (!hasRunOnce) {
                    List<ApplicationInfo> associatedAppList = associatedApps.get(packageName);
                    if (associatedAppList != null) {
                        for (ApplicationInfo associatedApp : associatedAppList) {
                            if (associatedApp.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) {
                                Slog.i(TAG, "Update associated state(" + associatedApp.packageName + "): DISABLED_UNTIL_USED for user " + userId);
                                packageManager.setApplicationEnabledSetting(associatedApp.packageName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0, userId, callingPackage);
                            }
                        }
                    }
                }
            }
        }
        // Mark the execution so we do not disable apps again.
        if (!hasRunOnce) {
            Settings.Secure.putIntForUser(contentResolver, Settings.Secure.CARRIER_APPS_HANDLED, 1, userId);
        }
        if (!enabledCarrierPackages.isEmpty()) {
            // Since we enabled at least one app, ensure we grant default permissions to those
            // apps.
            String[] packageNames = new String[enabledCarrierPackages.size()];
            enabledCarrierPackages.toArray(packageNames);
            packageManager.grantDefaultPermissionsToEnabledCarrierApps(packageNames, userId);
        }
    } catch (RemoteException e) {
        Slog.w(TAG, "Could not reach PackageManager", e);
    }
}
Also used : ApplicationInfo(android.content.pm.ApplicationInfo) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List) RemoteException(android.os.RemoteException) VisibleForTesting(com.android.internal.annotations.VisibleForTesting)

Example 58 with ApplicationInfo

use of android.content.pm.ApplicationInfo in project android_frameworks_base by ResurrectionRemix.

the class CarrierAppUtils method getDefaultCarrierAssociatedAppsHelper.

private static Map<String, List<ApplicationInfo>> getDefaultCarrierAssociatedAppsHelper(IPackageManager packageManager, int userId, ArrayMap<String, List<String>> systemCarrierAssociatedAppsDisabledUntilUsed) {
    int size = systemCarrierAssociatedAppsDisabledUntilUsed.size();
    Map<String, List<ApplicationInfo>> associatedApps = new ArrayMap<>(size);
    for (int i = 0; i < size; i++) {
        String carrierAppPackage = systemCarrierAssociatedAppsDisabledUntilUsed.keyAt(i);
        List<String> associatedAppPackages = systemCarrierAssociatedAppsDisabledUntilUsed.valueAt(i);
        for (int j = 0; j < associatedAppPackages.size(); j++) {
            ApplicationInfo ai = getApplicationInfoIfSystemApp(packageManager, userId, associatedAppPackages.get(j));
            // shouldn't touch it.
            if (ai != null && !ai.isUpdatedSystemApp()) {
                List<ApplicationInfo> appList = associatedApps.get(carrierAppPackage);
                if (appList == null) {
                    appList = new ArrayList<>();
                    associatedApps.put(carrierAppPackage, appList);
                }
                appList.add(ai);
            }
        }
    }
    return associatedApps;
}
Also used : ApplicationInfo(android.content.pm.ApplicationInfo) ArrayMap(android.util.ArrayMap) ArrayList(java.util.ArrayList) List(java.util.List)

Example 59 with ApplicationInfo

use of android.content.pm.ApplicationInfo in project android_frameworks_base by ResurrectionRemix.

the class BluetoothManagerService method startConsentUiIfNeeded.

private boolean startConsentUiIfNeeded(String packageName, int callingUid, String intentAction) throws RemoteException {
    try {
        // Validate the package only if we are going to use it
        ApplicationInfo applicationInfo = mContext.getPackageManager().getApplicationInfoAsUser(packageName, PackageManager.MATCH_DEBUG_TRIAGED_MISSING, UserHandle.getUserId(callingUid));
        if (applicationInfo.uid != callingUid) {
            throw new SecurityException("Package " + callingUid + " not in uid " + callingUid);
        }
        Intent intent = new Intent(intentAction);
        intent.putExtra(Intent.EXTRA_PACKAGE_NAME, packageName);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
        try {
            mContext.startActivity(intent);
        } catch (ActivityNotFoundException e) {
            // Shouldn't happen
            Slog.e(TAG, "Intent to handle action " + intentAction + " missing");
            return false;
        }
        return true;
    } catch (PackageManager.NameNotFoundException e) {
        throw new RemoteException(e.getMessage());
    }
}
Also used : PackageManager(android.content.pm.PackageManager) ActivityNotFoundException(android.content.ActivityNotFoundException) ApplicationInfo(android.content.pm.ApplicationInfo) Intent(android.content.Intent) RemoteException(android.os.RemoteException)

Example 60 with ApplicationInfo

use of android.content.pm.ApplicationInfo in project android_frameworks_base by ResurrectionRemix.

the class SystemUIApplication method onCreate.

@Override
public void onCreate() {
    super.onCreate();
    // Set the application theme that is inherited by all services. Note that setting the
    // application theme in the manifest does only work for activities. Keep this in sync with
    // the theme set there.
    setTheme(R.style.systemui_theme);
    SystemUIFactory.createFromConfig(this);
    if (Process.myUserHandle().equals(UserHandle.SYSTEM)) {
        IntentFilter filter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED);
        filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
        registerReceiver(new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
                if (mBootCompleted)
                    return;
                if (DEBUG)
                    Log.v(TAG, "BOOT_COMPLETED received");
                unregisterReceiver(this);
                mBootCompleted = true;
                if (mServicesStarted) {
                    final int N = mServices.length;
                    for (int i = 0; i < N; i++) {
                        mServices[i].onBootCompleted();
                    }
                }
            }
        }, filter);
    } else {
        // We don't need to startServices for sub-process that is doing some tasks.
        // (screenshots, sweetsweetdesserts or tuner ..)
        String processName = ActivityThread.currentProcessName();
        ApplicationInfo info = getApplicationInfo();
        if (processName != null && processName.startsWith(info.processName + ":")) {
            return;
        }
        // For a secondary user, boot-completed will never be called because it has already
        // been broadcasted on startup for the primary SystemUI process.  Instead, for
        // components which require the SystemUI component to be initialized per-user, we
        // start those components now for the current non-system user.
        startServicesIfNeeded(SERVICES_PER_USER);
    }
}
Also used : Context(android.content.Context) IntentFilter(android.content.IntentFilter) ApplicationInfo(android.content.pm.ApplicationInfo) Intent(android.content.Intent) BroadcastReceiver(android.content.BroadcastReceiver)

Aggregations

ApplicationInfo (android.content.pm.ApplicationInfo)1914 PackageManager (android.content.pm.PackageManager)682 Test (org.junit.Test)366 NameNotFoundException (android.content.pm.PackageManager.NameNotFoundException)363 ArrayList (java.util.ArrayList)258 Intent (android.content.Intent)231 RemoteException (android.os.RemoteException)229 PackageInfo (android.content.pm.PackageInfo)214 ResolveInfo (android.content.pm.ResolveInfo)177 IOException (java.io.IOException)122 ActivityInfo (android.content.pm.ActivityInfo)114 IPackageManager (android.content.pm.IPackageManager)109 UserHandle (android.os.UserHandle)108 Context (android.content.Context)103 Bundle (android.os.Bundle)103 File (java.io.File)100 Drawable (android.graphics.drawable.Drawable)91 UserInfo (android.content.pm.UserInfo)89 ComponentName (android.content.ComponentName)69 SmallTest (android.support.test.filters.SmallTest)66