Search in sources :

Example 1 with ArraySet

use of android.util.ArraySet in project android_frameworks_base by ResurrectionRemix.

the class AppWidgetServiceImpl method onCrossProfileWidgetProvidersChanged.

@Override
public void onCrossProfileWidgetProvidersChanged(int userId, List<String> packages) {
    final int parentId = mSecurityPolicy.getProfileParent(userId);
    // profile and not the other way around.
    if (parentId != userId) {
        synchronized (mLock) {
            boolean providersChanged = false;
            ArraySet<String> previousPackages = new ArraySet<String>();
            final int providerCount = mProviders.size();
            for (int i = 0; i < providerCount; ++i) {
                Provider provider = mProviders.get(i);
                if (provider.getUserId() == userId) {
                    previousPackages.add(provider.id.componentName.getPackageName());
                }
            }
            final int packageCount = packages.size();
            for (int i = 0; i < packageCount; i++) {
                String packageName = packages.get(i);
                previousPackages.remove(packageName);
                providersChanged |= updateProvidersForPackageLocked(packageName, userId, null);
            }
            // Remove widgets from hosts in parent user for packages not in the whitelist
            final int removedCount = previousPackages.size();
            for (int i = 0; i < removedCount; ++i) {
                removeWidgetsForPackageLocked(previousPackages.valueAt(i), userId, parentId);
            }
            if (providersChanged || removedCount > 0) {
                saveGroupStateAsync(userId);
                scheduleNotifyGroupHostsForProvidersChangedLocked(userId);
            }
        }
    }
}
Also used : ArraySet(android.util.ArraySet) Point(android.graphics.Point) WidgetBackupProvider(com.android.server.WidgetBackupProvider)

Example 2 with ArraySet

use of android.util.ArraySet in project android_frameworks_base by ResurrectionRemix.

the class SystemConfig method readPermissionsFromXml.

private void readPermissionsFromXml(File permFile, int permissionFlag) {
    FileReader permReader = null;
    try {
        permReader = new FileReader(permFile);
    } catch (FileNotFoundException e) {
        Slog.w(TAG, "Couldn't find or open permissions file " + permFile);
        return;
    }
    final boolean lowRam = ActivityManager.isLowRamDeviceStatic();
    try {
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(permReader);
        int type;
        while ((type = parser.next()) != parser.START_TAG && type != parser.END_DOCUMENT) {
            ;
        }
        if (type != parser.START_TAG) {
            throw new XmlPullParserException("No start tag found");
        }
        if (!parser.getName().equals("permissions") && !parser.getName().equals("config")) {
            throw new XmlPullParserException("Unexpected start tag in " + permFile + ": found " + parser.getName() + ", expected 'permissions' or 'config'");
        }
        boolean allowAll = permissionFlag == ALLOW_ALL;
        boolean allowLibs = (permissionFlag & ALLOW_LIBS) != 0;
        boolean allowFeatures = (permissionFlag & ALLOW_FEATURES) != 0;
        boolean allowPermissions = (permissionFlag & ALLOW_PERMISSIONS) != 0;
        boolean allowAppConfigs = (permissionFlag & ALLOW_APP_CONFIGS) != 0;
        while (true) {
            XmlUtils.nextElement(parser);
            if (parser.getEventType() == XmlPullParser.END_DOCUMENT) {
                break;
            }
            String name = parser.getName();
            if ("group".equals(name) && allowAll) {
                String gidStr = parser.getAttributeValue(null, "gid");
                if (gidStr != null) {
                    int gid = android.os.Process.getGidForName(gidStr);
                    mGlobalGids = appendInt(mGlobalGids, gid);
                } else {
                    Slog.w(TAG, "<group> without gid in " + permFile + " at " + parser.getPositionDescription());
                }
                XmlUtils.skipCurrentTag(parser);
                continue;
            } else if ("allow-permission".equals(name)) {
                String perm = parser.getAttributeValue(null, "name");
                if (perm == null) {
                    Slog.w(TAG, "<allow-permission> without name at " + parser.getPositionDescription());
                    XmlUtils.skipCurrentTag(parser);
                    continue;
                }
                String signature = parser.getAttributeValue(null, "signature");
                if (signature == null) {
                    Slog.w(TAG, "<allow-permission> without signature at " + parser.getPositionDescription());
                    XmlUtils.skipCurrentTag(parser);
                    continue;
                }
                Signature sig = null;
                try {
                    sig = new Signature(signature);
                } catch (IllegalArgumentException e) {
                // sig will be null so we will log it below
                }
                if (sig != null) {
                    ArraySet<String> perms = mSignatureAllowances.get(sig);
                    if (perms == null) {
                        perms = new ArraySet<String>();
                        mSignatureAllowances.put(sig, perms);
                    }
                    perms.add(perm);
                } else {
                    Slog.w(TAG, "<allow-permission> with bad signature at " + parser.getPositionDescription());
                }
                XmlUtils.skipCurrentTag(parser);
            } else if ("permission".equals(name) && allowPermissions) {
                String perm = parser.getAttributeValue(null, "name");
                if (perm == null) {
                    Slog.w(TAG, "<permission> without name in " + permFile + " at " + parser.getPositionDescription());
                    XmlUtils.skipCurrentTag(parser);
                    continue;
                }
                perm = perm.intern();
                readPermission(parser, perm);
            } else if ("assign-permission".equals(name) && allowPermissions) {
                String perm = parser.getAttributeValue(null, "name");
                if (perm == null) {
                    Slog.w(TAG, "<assign-permission> without name in " + permFile + " at " + parser.getPositionDescription());
                    XmlUtils.skipCurrentTag(parser);
                    continue;
                }
                String uidStr = parser.getAttributeValue(null, "uid");
                if (uidStr == null) {
                    Slog.w(TAG, "<assign-permission> without uid in " + permFile + " at " + parser.getPositionDescription());
                    XmlUtils.skipCurrentTag(parser);
                    continue;
                }
                int uid = Process.getUidForName(uidStr);
                if (uid < 0) {
                    Slog.w(TAG, "<assign-permission> with unknown uid \"" + uidStr + "  in " + permFile + " at " + parser.getPositionDescription());
                    XmlUtils.skipCurrentTag(parser);
                    continue;
                }
                perm = perm.intern();
                ArraySet<String> perms = mSystemPermissions.get(uid);
                if (perms == null) {
                    perms = new ArraySet<String>();
                    mSystemPermissions.put(uid, perms);
                }
                perms.add(perm);
                XmlUtils.skipCurrentTag(parser);
            } else if ("library".equals(name) && allowLibs) {
                String lname = parser.getAttributeValue(null, "name");
                String lfile = parser.getAttributeValue(null, "file");
                if (lname == null) {
                    Slog.w(TAG, "<library> without name in " + permFile + " at " + parser.getPositionDescription());
                } else if (lfile == null) {
                    Slog.w(TAG, "<library> without file in " + permFile + " at " + parser.getPositionDescription());
                } else {
                    //Log.i(TAG, "Got library " + lname + " in " + lfile);
                    mSharedLibraries.put(lname, lfile);
                }
                XmlUtils.skipCurrentTag(parser);
                continue;
            } else if ("feature".equals(name) && allowFeatures) {
                String fname = parser.getAttributeValue(null, "name");
                int fversion = XmlUtils.readIntAttribute(parser, "version", 0);
                boolean allowed;
                if (!lowRam) {
                    allowed = true;
                } else {
                    String notLowRam = parser.getAttributeValue(null, "notLowRam");
                    allowed = !"true".equals(notLowRam);
                }
                if (fname == null) {
                    Slog.w(TAG, "<feature> without name in " + permFile + " at " + parser.getPositionDescription());
                } else if (allowed) {
                    addFeature(fname, fversion);
                }
                XmlUtils.skipCurrentTag(parser);
                continue;
            } else if ("unavailable-feature".equals(name) && allowFeatures) {
                String fname = parser.getAttributeValue(null, "name");
                if (fname == null) {
                    Slog.w(TAG, "<unavailable-feature> without name in " + permFile + " at " + parser.getPositionDescription());
                } else {
                    mUnavailableFeatures.add(fname);
                }
                XmlUtils.skipCurrentTag(parser);
                continue;
            } else if ("allow-in-power-save-except-idle".equals(name) && allowAll) {
                String pkgname = parser.getAttributeValue(null, "package");
                if (pkgname == null) {
                    Slog.w(TAG, "<allow-in-power-save-except-idle> without package in " + permFile + " at " + parser.getPositionDescription());
                } else {
                    mAllowInPowerSaveExceptIdle.add(pkgname);
                }
                XmlUtils.skipCurrentTag(parser);
                continue;
            } else if ("allow-in-power-save".equals(name) && allowAll) {
                String pkgname = parser.getAttributeValue(null, "package");
                if (pkgname == null) {
                    Slog.w(TAG, "<allow-in-power-save> without package in " + permFile + " at " + parser.getPositionDescription());
                } else {
                    mAllowInPowerSave.add(pkgname);
                }
                XmlUtils.skipCurrentTag(parser);
                continue;
            } else if ("allow-in-data-usage-save".equals(name) && allowAll) {
                String pkgname = parser.getAttributeValue(null, "package");
                if (pkgname == null) {
                    Slog.w(TAG, "<allow-in-data-usage-save> without package in " + permFile + " at " + parser.getPositionDescription());
                } else {
                    mAllowInDataUsageSave.add(pkgname);
                }
                XmlUtils.skipCurrentTag(parser);
                continue;
            } else if ("app-link".equals(name) && allowAppConfigs) {
                String pkgname = parser.getAttributeValue(null, "package");
                if (pkgname == null) {
                    Slog.w(TAG, "<app-link> without package in " + permFile + " at " + parser.getPositionDescription());
                } else {
                    mLinkedApps.add(pkgname);
                }
                XmlUtils.skipCurrentTag(parser);
            } else if ("system-user-whitelisted-app".equals(name) && allowAppConfigs) {
                String pkgname = parser.getAttributeValue(null, "package");
                if (pkgname == null) {
                    Slog.w(TAG, "<system-user-whitelisted-app> without package in " + permFile + " at " + parser.getPositionDescription());
                } else {
                    mSystemUserWhitelistedApps.add(pkgname);
                }
                XmlUtils.skipCurrentTag(parser);
            } else if ("system-user-blacklisted-app".equals(name) && allowAppConfigs) {
                String pkgname = parser.getAttributeValue(null, "package");
                if (pkgname == null) {
                    Slog.w(TAG, "<system-user-blacklisted-app without package in " + permFile + " at " + parser.getPositionDescription());
                } else {
                    mSystemUserBlacklistedApps.add(pkgname);
                }
                XmlUtils.skipCurrentTag(parser);
            } else if ("default-enabled-vr-app".equals(name) && allowAppConfigs) {
                String pkgname = parser.getAttributeValue(null, "package");
                String clsname = parser.getAttributeValue(null, "class");
                if (pkgname == null) {
                    Slog.w(TAG, "<default-enabled-vr-app without package in " + permFile + " at " + parser.getPositionDescription());
                } else if (clsname == null) {
                    Slog.w(TAG, "<default-enabled-vr-app without class in " + permFile + " at " + parser.getPositionDescription());
                } else {
                    mDefaultVrComponents.add(new ComponentName(pkgname, clsname));
                }
                XmlUtils.skipCurrentTag(parser);
            } else if ("backup-transport-whitelisted-service".equals(name) && allowFeatures) {
                String serviceName = parser.getAttributeValue(null, "service");
                if (serviceName == null) {
                    Slog.w(TAG, "<backup-transport-whitelisted-service> without service in " + permFile + " at " + parser.getPositionDescription());
                } else {
                    ComponentName cn = ComponentName.unflattenFromString(serviceName);
                    if (cn == null) {
                        Slog.w(TAG, "<backup-transport-whitelisted-service> with invalid service name " + serviceName + " in " + permFile + " at " + parser.getPositionDescription());
                    } else {
                        mBackupTransportWhitelist.add(cn);
                    }
                }
                XmlUtils.skipCurrentTag(parser);
            } else if ("disabled-until-used-preinstalled-carrier-associated-app".equals(name) && allowAppConfigs) {
                String pkgname = parser.getAttributeValue(null, "package");
                String carrierPkgname = parser.getAttributeValue(null, "carrierAppPackage");
                if (pkgname == null || carrierPkgname == null) {
                    Slog.w(TAG, "<disabled-until-used-preinstalled-carrier-associated-app" + " without package or carrierAppPackage in " + permFile + " at " + parser.getPositionDescription());
                } else {
                    List<String> associatedPkgs = mDisabledUntilUsedPreinstalledCarrierAssociatedApps.get(carrierPkgname);
                    if (associatedPkgs == null) {
                        associatedPkgs = new ArrayList<>();
                        mDisabledUntilUsedPreinstalledCarrierAssociatedApps.put(carrierPkgname, associatedPkgs);
                    }
                    associatedPkgs.add(pkgname);
                }
                XmlUtils.skipCurrentTag(parser);
            } else {
                XmlUtils.skipCurrentTag(parser);
                continue;
            }
        }
    } catch (XmlPullParserException e) {
        Slog.w(TAG, "Got exception parsing permissions.", e);
    } catch (IOException e) {
        Slog.w(TAG, "Got exception parsing permissions.", e);
    } finally {
        IoUtils.closeQuietly(permReader);
    }
    // those features if not already defined by the static config
    if (StorageManager.isFileEncryptedNativeOnly()) {
        addFeature(PackageManager.FEATURE_FILE_BASED_ENCRYPTION, 0);
        addFeature(PackageManager.FEATURE_SECURELY_REMOVES_USERS, 0);
    }
    for (String featureName : mUnavailableFeatures) {
        removeFeature(featureName);
    }
}
Also used : ArraySet(android.util.ArraySet) FileNotFoundException(java.io.FileNotFoundException) XmlPullParser(org.xmlpull.v1.XmlPullParser) ArrayList(java.util.ArrayList) IOException(java.io.IOException) Signature(android.content.pm.Signature) FileReader(java.io.FileReader) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) ComponentName(android.content.ComponentName) ArrayList(java.util.ArrayList) List(java.util.List)

Example 3 with ArraySet

use of android.util.ArraySet in project android_frameworks_base by ResurrectionRemix.

the class SharedStorageAgent method onFullBackup.

/**
     * Full backup of the shared-storage filesystem
     */
@Override
public void onFullBackup(FullBackupDataOutput output) throws IOException {
    // "primary" shared storage volume is first in the list.
    if (mVolumes != null) {
        if (DEBUG)
            Slog.i(TAG, "Backing up " + mVolumes.length + " shared volumes");
        // Ignore all apps' getExternalFilesDir() content; it is backed up as part of
        // each app-specific payload.
        ArraySet<String> externalFilesDirFilter = new ArraySet();
        final File externalAndroidRoot = new File(Environment.getExternalStorageDirectory(), Environment.DIRECTORY_ANDROID);
        externalFilesDirFilter.add(externalAndroidRoot.getCanonicalPath());
        for (int i = 0; i < mVolumes.length; i++) {
            StorageVolume v = mVolumes[i];
            // Express the contents of volume N this way in the tar stream:
            //     shared/N/path/to/file
            // The restore will then extract to the given volume
            String domain = FullBackup.SHARED_PREFIX + i;
            fullBackupFileTree(null, domain, v.getPath(), null, /* manifestExcludes */
            externalFilesDirFilter, /* systemExcludes */
            output);
        }
    }
}
Also used : StorageVolume(android.os.storage.StorageVolume) ArraySet(android.util.ArraySet) File(java.io.File)

Example 4 with ArraySet

use of android.util.ArraySet in project android_frameworks_base by ResurrectionRemix.

the class TransformState method setClippingDeactivated.

public static void setClippingDeactivated(final View transformedView, boolean deactivated) {
    if (!(transformedView.getParent() instanceof ViewGroup)) {
        return;
    }
    ViewGroup view = (ViewGroup) transformedView.getParent();
    while (true) {
        ArraySet<View> clipSet = (ArraySet<View>) view.getTag(CLIP_CLIPPING_SET);
        if (clipSet == null) {
            clipSet = new ArraySet<>();
            view.setTag(CLIP_CLIPPING_SET, clipSet);
        }
        Boolean clipChildren = (Boolean) view.getTag(CLIP_CHILDREN_TAG);
        if (clipChildren == null) {
            clipChildren = view.getClipChildren();
            view.setTag(CLIP_CHILDREN_TAG, clipChildren);
        }
        Boolean clipToPadding = (Boolean) view.getTag(CLIP_TO_PADDING);
        if (clipToPadding == null) {
            clipToPadding = view.getClipToPadding();
            view.setTag(CLIP_TO_PADDING, clipToPadding);
        }
        ExpandableNotificationRow row = view instanceof ExpandableNotificationRow ? (ExpandableNotificationRow) view : null;
        if (!deactivated) {
            clipSet.remove(transformedView);
            if (clipSet.isEmpty()) {
                view.setClipChildren(clipChildren);
                view.setClipToPadding(clipToPadding);
                view.setTag(CLIP_CLIPPING_SET, null);
                if (row != null) {
                    row.setClipToActualHeight(true);
                }
            }
        } else {
            clipSet.add(transformedView);
            view.setClipChildren(false);
            view.setClipToPadding(false);
            if (row != null && row.isChildInGroup()) {
                // We still want to clip to the parent's height
                row.setClipToActualHeight(false);
            }
        }
        if (row != null && !row.isChildInGroup()) {
            return;
        }
        final ViewParent parent = view.getParent();
        if (parent instanceof ViewGroup) {
            view = (ViewGroup) parent;
        } else {
            return;
        }
    }
}
Also used : ArraySet(android.util.ArraySet) ViewGroup(android.view.ViewGroup) ViewParent(android.view.ViewParent) ImageView(android.widget.ImageView) TransformableView(com.android.systemui.statusbar.TransformableView) TextView(android.widget.TextView) View(android.view.View) NotificationHeaderView(android.view.NotificationHeaderView) ExpandableNotificationRow(com.android.systemui.statusbar.ExpandableNotificationRow)

Example 5 with ArraySet

use of android.util.ArraySet in project android_frameworks_base by ResurrectionRemix.

the class UsageStatsService method cleanUpRemovedUsersLocked.

private void cleanUpRemovedUsersLocked() {
    final List<UserInfo> users = mUserManager.getUsers(true);
    if (users == null || users.size() == 0) {
        throw new IllegalStateException("There can't be no users");
    }
    ArraySet<String> toDelete = new ArraySet<>();
    String[] fileNames = mUsageStatsDir.list();
    if (fileNames == null) {
        // No users to delete.
        return;
    }
    toDelete.addAll(Arrays.asList(fileNames));
    final int userCount = users.size();
    for (int i = 0; i < userCount; i++) {
        final UserInfo userInfo = users.get(i);
        toDelete.remove(Integer.toString(userInfo.id));
    }
    final int deleteCount = toDelete.size();
    for (int i = 0; i < deleteCount; i++) {
        deleteRecursively(new File(mUsageStatsDir, toDelete.valueAt(i)));
    }
}
Also used : ArraySet(android.util.ArraySet) UserInfo(android.content.pm.UserInfo) File(java.io.File)

Aggregations

ArraySet (android.util.ArraySet)521 PublicKey (java.security.PublicKey)94 ArrayList (java.util.ArrayList)87 ComponentName (android.content.ComponentName)82 ArrayMap (android.util.ArrayMap)73 Pair (android.util.Pair)47 RemoteException (android.os.RemoteException)43 ResolveInfo (android.content.pm.ResolveInfo)39 Intent (android.content.Intent)38 XmlPullParserException (org.xmlpull.v1.XmlPullParserException)35 File (java.io.File)33 SSLContext (javax.net.ssl.SSLContext)32 IOException (java.io.IOException)31 PackageManager (android.content.pm.PackageManager)29 UserInfo (android.content.pm.UserInfo)28 ApplicationInfo (android.content.pm.ApplicationInfo)24 Point (android.graphics.Point)24 X509Certificate (java.security.cert.X509Certificate)20 PackageInfo (android.content.pm.PackageInfo)19 Test (org.junit.Test)19