android.content.res.TypedArray#getNonResourceString()源码实例Demo

下面列出了android.content.res.TypedArray#getNonResourceString() 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: Android-plugin-support   文件: DynamicApkParser.java
private FeatureInfo parseUsesFeature(Resources res, AttributeSet attrs)
        throws XmlPullParserException, IOException {
    FeatureInfo fi = new FeatureInfo();
    TypedArray sa = res.obtainAttributes(attrs,
            Hooks.getStyleableArray("AndroidManifestUsesFeature"));
    // Note: don't allow this value to be a reference to a resource
    // that may change.
    fi.name = sa.getNonResourceString(
            Hooks.getStyleable("AndroidManifestUsesFeature_name"));
    if (fi.name == null) {
        fi.reqGlEsVersion = sa.getInt(
                Hooks.getStyleable("AndroidManifestUsesFeature_glEsVersion"),
                FeatureInfo.GL_ES_VERSION_UNDEFINED);
    }
    if (sa.getBoolean(
            Hooks.getStyleable("AndroidManifestUsesFeature_required"), true)) {
        fi.flags |= FeatureInfo.FLAG_REQUIRED;
    }
    sa.recycle();
    return fi;
}
 
源代码2 项目: AndroidComponentPlugin   文件: PackageParser.java
private boolean parseUsesPermission(Package pkg, Resources res, XmlResourceParser parser,
                                        AttributeSet attrs, String[] outError)
            throws XmlPullParserException, IOException {
        TypedArray sa = res.obtainAttributes(attrs,
                com.android.internal.R.styleable.AndroidManifestUsesPermission);

        // Note: don't allow this value to be a reference to a resource
        // that may change.
        String name = sa.getNonResourceString(
                com.android.internal.R.styleable.AndroidManifestUsesPermission_name);
/*
        boolean required = sa.getBoolean(
                com.android.internal.R.styleable.AndroidManifestUsesPermission_required, true);
*/
        boolean required = true; // Optional <uses-permission> not supported

        sa.recycle();

        if (name != null) {
            int index = pkg.requestedPermissions.indexOf(name);
            if (index == -1) {
                pkg.requestedPermissions.add(name.intern());
                pkg.requestedPermissionsRequired.add(required ? Boolean.TRUE : Boolean.FALSE);
            } else {
                if (pkg.requestedPermissionsRequired.get(index) != required) {
                    outError[0] = "conflicting <uses-permission> entries";
                    mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
                    return false;
                }
            }
        }

        XmlUtils.skipCurrentTag(parser);
        return true;
    }
 
源代码3 项目: AndroidComponentPlugin   文件: PackageParser.java
private static VerifierInfo parseVerifier(Resources res, XmlPullParser parser,
        AttributeSet attrs, int flags, String[] outError) throws XmlPullParserException,
        IOException {
    final TypedArray sa = res.obtainAttributes(attrs,
            com.android.internal.R.styleable.AndroidManifestPackageVerifier);

    final String packageName = sa.getNonResourceString(
            com.android.internal.R.styleable.AndroidManifestPackageVerifier_name);

    final String encodedPublicKey = sa.getNonResourceString(
            com.android.internal.R.styleable.AndroidManifestPackageVerifier_publicKey);

    sa.recycle();

    if (packageName == null || packageName.length() == 0) {
        Slog.i(TAG, "verifier package name was null; skipping");
        return null;
    } else if (encodedPublicKey == null) {
        Slog.i(TAG, "verifier " + packageName + " public key was null; skipping");
    }

    PublicKey publicKey = parsePublicKey(encodedPublicKey);
    if (publicKey != null) {
        return new VerifierInfo(packageName, publicKey);
    }

    return null;
}
 
源代码4 项目: android_9.0.0_r45   文件: ShortcutParser.java
private static String parseCategories(ShortcutService service, AttributeSet attrs) {
    final TypedArray sa = service.mContext.getResources().obtainAttributes(attrs,
            R.styleable.ShortcutCategories);
    try {
        if (sa.getType(R.styleable.ShortcutCategories_name) == TypedValue.TYPE_STRING) {
            return sa.getNonResourceString(R.styleable.ShortcutCategories_name);
        } else {
            Log.w(TAG, "android:name for shortcut category must be string literal.");
            return null;
        }
    } finally {
        sa.recycle();
    }
}
 
源代码5 项目: Android-plugin-support   文件: DynamicApkParser.java
private boolean parseUsesPermission(DynamicApkInfo pkg, Resources res, XmlResourceParser parser,
                                    AttributeSet attrs) throws XmlPullParserException, IOException {
    TypedArray sa = res.obtainAttributes(attrs,
            Hooks.getStyleableArray("AndroidManifestUsesPermission"));

    // Note: don't allow this value to be a reference to a resource
    // that may change.
    String name = sa.getNonResourceString(
            Hooks.getStyleable("AndroidManifestUsesPermission_name"));

    int maxSdkVersion = 0;
    TypedValue val = sa.peekValue(
            Hooks.getStyleable("AndroidManifestUsesPermission_maxSdkVersion"));
    if (val != null) {
        if (val.type >= TypedValue.TYPE_FIRST_INT && val.type <= TypedValue.TYPE_LAST_INT) {
            maxSdkVersion = val.data;
        }
    }

    sa.recycle();

    if ((maxSdkVersion == 0) || (maxSdkVersion >= Build.VERSION.SDK_INT)) {
        if (name != null) {
            int index = pkg.requestedPermissions.indexOf(name);
            if (index == -1) {
                pkg.requestedPermissions.add(name.intern());
            } else {
                Log.w(TAG, "Ignoring duplicate uses-permissions/uses-permissions-sdk-m: "
                        + name + " in package: " + pkg.packageName + " at: "
                        + parser.getPositionDescription());
            }
        }
    }

    XmlUtils.skipCurrentTag(parser);
    return true;
}
 
源代码6 项目: AndroidComponentPlugin   文件: PackageParser.java
private Permission parsePermission(Package owner, Resources res,
        XmlPullParser parser, AttributeSet attrs, String[] outError)
    throws XmlPullParserException, IOException {
    Permission perm = new Permission(owner);

    TypedArray sa = res.obtainAttributes(attrs,
            com.android.internal.R.styleable.AndroidManifestPermission);

    if (!parsePackageItemInfo(owner, perm.info, outError,
            "<permission>", sa,
            com.android.internal.R.styleable.AndroidManifestPermission_name,
            com.android.internal.R.styleable.AndroidManifestPermission_label,
            com.android.internal.R.styleable.AndroidManifestPermission_icon,
            com.android.internal.R.styleable.AndroidManifestPermission_logo)) {
        sa.recycle();
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    // Note: don't allow this value to be a reference to a resource
    // that may change.
    perm.info.group = sa.getNonResourceString(
            com.android.internal.R.styleable.AndroidManifestPermission_permissionGroup);
    if (perm.info.group != null) {
        perm.info.group = perm.info.group.intern();
    }
    
    perm.info.descriptionRes = sa.getResourceId(
            com.android.internal.R.styleable.AndroidManifestPermission_description,
            0);

    perm.info.protectionLevel = sa.getInt(
            com.android.internal.R.styleable.AndroidManifestPermission_protectionLevel,
            PermissionInfo.PROTECTION_NORMAL);

    sa.recycle();

    if (perm.info.protectionLevel == -1) {
        outError[0] = "<permission> does not specify protectionLevel";
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    perm.info.protectionLevel = PermissionInfo.fixProtectionLevel(perm.info.protectionLevel);

    if ((perm.info.protectionLevel&PermissionInfo.PROTECTION_MASK_FLAGS) != 0) {
        if ((perm.info.protectionLevel&PermissionInfo.PROTECTION_MASK_BASE) !=
                PermissionInfo.PROTECTION_SIGNATURE) {
            outError[0] = "<permission>  protectionLevel specifies a flag but is "
                    + "not based on signature type";
            mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
            return null;
        }
    }
    
    if (!parseAllMetaData(res, parser, attrs, "<permission>", perm,
            outError)) {
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    owner.permissions.add(perm);

    return perm;
}
 
源代码7 项目: AndroidComponentPlugin   文件: PackageParser.java
private Instrumentation parseInstrumentation(Package owner, Resources res,
        XmlPullParser parser, AttributeSet attrs, String[] outError)
    throws XmlPullParserException, IOException {
    TypedArray sa = res.obtainAttributes(attrs,
            com.android.internal.R.styleable.AndroidManifestInstrumentation);

    if (mParseInstrumentationArgs == null) {
        mParseInstrumentationArgs = new ParsePackageItemArgs(owner, outError,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_name,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_label,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_icon,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_logo);
        mParseInstrumentationArgs.tag = "<instrumentation>";
    }
    
    mParseInstrumentationArgs.sa = sa;
    
    Instrumentation a = new Instrumentation(mParseInstrumentationArgs,
            new InstrumentationInfo());
    if (outError[0] != null) {
        sa.recycle();
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    String str;
    // Note: don't allow this value to be a reference to a resource
    // that may change.
    str = sa.getNonResourceString(
            com.android.internal.R.styleable.AndroidManifestInstrumentation_targetPackage);
    a.info.targetPackage = str != null ? str.intern() : null;

    a.info.handleProfiling = sa.getBoolean(
            com.android.internal.R.styleable.AndroidManifestInstrumentation_handleProfiling,
            false);

    a.info.functionalTest = sa.getBoolean(
            com.android.internal.R.styleable.AndroidManifestInstrumentation_functionalTest,
            false);

    sa.recycle();

    if (a.info.targetPackage == null) {
        outError[0] = "<instrumentation> does not specify targetPackage";
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    if (!parseAllMetaData(res, parser, attrs, "<instrumentation>", a,
            outError)) {
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    owner.instrumentation.add(a);

    return a;
}
 
源代码8 项目: AndroidComponentPlugin   文件: PackageParser.java
private Permission parsePermission(Package owner, Resources res,
        XmlPullParser parser, AttributeSet attrs, String[] outError)
    throws XmlPullParserException, IOException {
    Permission perm = new Permission(owner);

    TypedArray sa = res.obtainAttributes(attrs,
            com.android.internal.R.styleable.AndroidManifestPermission);

    if (!parsePackageItemInfo(owner, perm.info, outError,
            "<permission>", sa,
            com.android.internal.R.styleable.AndroidManifestPermission_name,
            com.android.internal.R.styleable.AndroidManifestPermission_label,
            com.android.internal.R.styleable.AndroidManifestPermission_icon,
            com.android.internal.R.styleable.AndroidManifestPermission_logo)) {
        sa.recycle();
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    // Note: don't allow this value to be a reference to a resource
    // that may change.
    perm.info.group = sa.getNonResourceString(
            com.android.internal.R.styleable.AndroidManifestPermission_permissionGroup);
    if (perm.info.group != null) {
        perm.info.group = perm.info.group.intern();
    }
    
    perm.info.descriptionRes = sa.getResourceId(
            com.android.internal.R.styleable.AndroidManifestPermission_description,
            0);

    perm.info.protectionLevel = sa.getInt(
            com.android.internal.R.styleable.AndroidManifestPermission_protectionLevel,
            PermissionInfo.PROTECTION_NORMAL);

    sa.recycle();
    
    if (perm.info.protectionLevel == -1) {
        outError[0] = "<permission> does not specify protectionLevel";
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }
    
    if (!parseAllMetaData(res, parser, attrs, "<permission>", perm,
            outError)) {
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    owner.permissions.add(perm);

    return perm;
}
 
源代码9 项目: AndroidComponentPlugin   文件: PackageParser.java
private Instrumentation parseInstrumentation(Package owner, Resources res,
        XmlPullParser parser, AttributeSet attrs, String[] outError)
    throws XmlPullParserException, IOException {
    TypedArray sa = res.obtainAttributes(attrs,
            com.android.internal.R.styleable.AndroidManifestInstrumentation);

    if (mParseInstrumentationArgs == null) {
        mParseInstrumentationArgs = new ParsePackageItemArgs(owner, outError,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_name,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_label,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_icon,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_logo);
        mParseInstrumentationArgs.tag = "<instrumentation>";
    }
    
    mParseInstrumentationArgs.sa = sa;
    
    Instrumentation a = new Instrumentation(mParseInstrumentationArgs,
            new InstrumentationInfo());
    if (outError[0] != null) {
        sa.recycle();
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    String str;
    // Note: don't allow this value to be a reference to a resource
    // that may change.
    str = sa.getNonResourceString(
            com.android.internal.R.styleable.AndroidManifestInstrumentation_targetPackage);
    a.info.targetPackage = str != null ? str.intern() : null;

    a.info.handleProfiling = sa.getBoolean(
            com.android.internal.R.styleable.AndroidManifestInstrumentation_handleProfiling,
            false);

    a.info.functionalTest = sa.getBoolean(
            com.android.internal.R.styleable.AndroidManifestInstrumentation_functionalTest,
            false);

    sa.recycle();

    if (a.info.targetPackage == null) {
        outError[0] = "<instrumentation> does not specify targetPackage";
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    if (!parseAllMetaData(res, parser, attrs, "<instrumentation>", a,
            outError)) {
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    owner.instrumentation.add(a);

    return a;
}
 
源代码10 项目: AndroidComponentPlugin   文件: PackageParser.java
private Permission parsePermission(Package owner, Resources res,
        XmlPullParser parser, AttributeSet attrs, String[] outError)
    throws XmlPullParserException, IOException {
    Permission perm = new Permission(owner);

    TypedArray sa = res.obtainAttributes(attrs,
            com.android.internal.R.styleable.AndroidManifestPermission);

    if (!parsePackageItemInfo(owner, perm.info, outError,
            "<permission>", sa,
            com.android.internal.R.styleable.AndroidManifestPermission_name,
            com.android.internal.R.styleable.AndroidManifestPermission_label,
            com.android.internal.R.styleable.AndroidManifestPermission_icon,
            com.android.internal.R.styleable.AndroidManifestPermission_logo)) {
        sa.recycle();
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    // Note: don't allow this value to be a reference to a resource
    // that may change.
    perm.info.group = sa.getNonResourceString(
            com.android.internal.R.styleable.AndroidManifestPermission_permissionGroup);
    if (perm.info.group != null) {
        perm.info.group = perm.info.group.intern();
    }
    
    perm.info.descriptionRes = sa.getResourceId(
            com.android.internal.R.styleable.AndroidManifestPermission_description,
            0);

    perm.info.protectionLevel = sa.getInt(
            com.android.internal.R.styleable.AndroidManifestPermission_protectionLevel,
            PermissionInfo.PROTECTION_NORMAL);

    perm.info.flags = sa.getInt(
            com.android.internal.R.styleable.AndroidManifestPermission_permissionFlags, 0);

    sa.recycle();

    if (perm.info.protectionLevel == -1) {
        outError[0] = "<permission> does not specify protectionLevel";
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    perm.info.protectionLevel = PermissionInfo.fixProtectionLevel(perm.info.protectionLevel);

    if ((perm.info.protectionLevel&PermissionInfo.PROTECTION_MASK_FLAGS) != 0) {
        if ((perm.info.protectionLevel&PermissionInfo.PROTECTION_MASK_BASE) !=
                PermissionInfo.PROTECTION_SIGNATURE) {
            outError[0] = "<permission>  protectionLevel specifies a flag but is "
                    + "not based on signature type";
            mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
            return null;
        }
    }
    
    if (!parseAllMetaData(res, parser, attrs, "<permission>", perm,
            outError)) {
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    owner.permissions.add(perm);

    return perm;
}
 
源代码11 项目: AndroidComponentPlugin   文件: PackageParser.java
private Instrumentation parseInstrumentation(Package owner, Resources res,
        XmlPullParser parser, AttributeSet attrs, String[] outError)
    throws XmlPullParserException, IOException {
    TypedArray sa = res.obtainAttributes(attrs,
            com.android.internal.R.styleable.AndroidManifestInstrumentation);

    if (mParseInstrumentationArgs == null) {
        mParseInstrumentationArgs = new ParsePackageItemArgs(owner, outError,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_name,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_label,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_icon,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_logo);
        mParseInstrumentationArgs.tag = "<instrumentation>";
    }
    
    mParseInstrumentationArgs.sa = sa;
    
    Instrumentation a = new Instrumentation(mParseInstrumentationArgs,
            new InstrumentationInfo());
    if (outError[0] != null) {
        sa.recycle();
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    String str;
    // Note: don't allow this value to be a reference to a resource
    // that may change.
    str = sa.getNonResourceString(
            com.android.internal.R.styleable.AndroidManifestInstrumentation_targetPackage);
    a.info.targetPackage = str != null ? str.intern() : null;

    a.info.handleProfiling = sa.getBoolean(
            com.android.internal.R.styleable.AndroidManifestInstrumentation_handleProfiling,
            false);

    a.info.functionalTest = sa.getBoolean(
            com.android.internal.R.styleable.AndroidManifestInstrumentation_functionalTest,
            false);

    sa.recycle();

    if (a.info.targetPackage == null) {
        outError[0] = "<instrumentation> does not specify targetPackage";
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    if (!parseAllMetaData(res, parser, attrs, "<instrumentation>", a,
            outError)) {
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    owner.instrumentation.add(a);

    return a;
}
 
源代码12 项目: AndroidComponentPlugin   文件: PackageParser.java
private Permission parsePermission(Package owner, Resources res,
        XmlPullParser parser, AttributeSet attrs, String[] outError)
    throws XmlPullParserException, IOException {
    Permission perm = new Permission(owner);

    TypedArray sa = res.obtainAttributes(attrs,
            com.android.internal.R.styleable.AndroidManifestPermission);

    if (!parsePackageItemInfo(owner, perm.info, outError,
            "<permission>", sa,
            com.android.internal.R.styleable.AndroidManifestPermission_name,
            com.android.internal.R.styleable.AndroidManifestPermission_label,
            com.android.internal.R.styleable.AndroidManifestPermission_icon,
            com.android.internal.R.styleable.AndroidManifestPermission_logo)) {
        sa.recycle();
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    // Note: don't allow this value to be a reference to a resource
    // that may change.
    perm.info.group = sa.getNonResourceString(
            com.android.internal.R.styleable.AndroidManifestPermission_permissionGroup);
    if (perm.info.group != null) {
        perm.info.group = perm.info.group.intern();
    }
    
    perm.info.descriptionRes = sa.getResourceId(
            com.android.internal.R.styleable.AndroidManifestPermission_description,
            0);

    perm.info.protectionLevel = sa.getInt(
            com.android.internal.R.styleable.AndroidManifestPermission_protectionLevel,
            PermissionInfo.PROTECTION_NORMAL);

    perm.info.flags = sa.getInt(
            com.android.internal.R.styleable.AndroidManifestPermission_permissionFlags, 0);

    sa.recycle();

    if (perm.info.protectionLevel == -1) {
        outError[0] = "<permission> does not specify protectionLevel";
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    perm.info.protectionLevel = PermissionInfo.fixProtectionLevel(perm.info.protectionLevel);

    if ((perm.info.protectionLevel&PermissionInfo.PROTECTION_MASK_FLAGS) != 0) {
        if ((perm.info.protectionLevel&PermissionInfo.PROTECTION_MASK_BASE) !=
                PermissionInfo.PROTECTION_SIGNATURE) {
            outError[0] = "<permission>  protectionLevel specifies a flag but is "
                    + "not based on signature type";
            mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
            return null;
        }
    }
    
    if (!parseAllMetaData(res, parser, attrs, "<permission>", perm,
            outError)) {
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    owner.permissions.add(perm);

    return perm;
}
 
源代码13 项目: AndroidComponentPlugin   文件: PackageParser.java
private Instrumentation parseInstrumentation(Package owner, Resources res,
        XmlPullParser parser, AttributeSet attrs, String[] outError)
    throws XmlPullParserException, IOException {
    TypedArray sa = res.obtainAttributes(attrs,
            com.android.internal.R.styleable.AndroidManifestInstrumentation);

    if (mParseInstrumentationArgs == null) {
        mParseInstrumentationArgs = new ParsePackageItemArgs(owner, outError,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_name,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_label,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_icon,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_logo);
        mParseInstrumentationArgs.tag = "<instrumentation>";
    }
    
    mParseInstrumentationArgs.sa = sa;
    
    Instrumentation a = new Instrumentation(mParseInstrumentationArgs,
            new InstrumentationInfo());
    if (outError[0] != null) {
        sa.recycle();
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    String str;
    // Note: don't allow this value to be a reference to a resource
    // that may change.
    str = sa.getNonResourceString(
            com.android.internal.R.styleable.AndroidManifestInstrumentation_targetPackage);
    a.info.targetPackage = str != null ? str.intern() : null;

    a.info.handleProfiling = sa.getBoolean(
            com.android.internal.R.styleable.AndroidManifestInstrumentation_handleProfiling,
            false);

    a.info.functionalTest = sa.getBoolean(
            com.android.internal.R.styleable.AndroidManifestInstrumentation_functionalTest,
            false);

    sa.recycle();

    if (a.info.targetPackage == null) {
        outError[0] = "<instrumentation> does not specify targetPackage";
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    if (!parseAllMetaData(res, parser, attrs, "<instrumentation>", a,
            outError)) {
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    owner.instrumentation.add(a);

    return a;
}
 
源代码14 项目: AndroidComponentPlugin   文件: PackageParser.java
private boolean parseUsesPermission(Package pkg, Resources res, XmlResourceParser parser,
                                        AttributeSet attrs, String[] outError)
            throws XmlPullParserException, IOException {
        TypedArray sa = res.obtainAttributes(attrs,
                com.android.internal.R.styleable.AndroidManifestUsesPermission);

        // Note: don't allow this value to be a reference to a resource
        // that may change.
        String name = sa.getNonResourceString(
                com.android.internal.R.styleable.AndroidManifestUsesPermission_name);
/*
        boolean required = sa.getBoolean(
                com.android.internal.R.styleable.AndroidManifestUsesPermission_required, true);
*/
        boolean required = true; // Optional <uses-permission> not supported

        int maxSdkVersion = 0;
        TypedValue val = sa.peekValue(
                com.android.internal.R.styleable.AndroidManifestUsesPermission_maxSdkVersion);
        if (val != null) {
            if (val.type >= TypedValue.TYPE_FIRST_INT && val.type <= TypedValue.TYPE_LAST_INT) {
                maxSdkVersion = val.data;
            }
        }

        sa.recycle();

        if ((maxSdkVersion == 0) || (maxSdkVersion >= Build.VERSION.RESOURCES_SDK_INT)) {
            if (name != null) {
                int index = pkg.requestedPermissions.indexOf(name);
                if (index == -1) {
                    pkg.requestedPermissions.add(name.intern());
                    pkg.requestedPermissionsRequired.add(required ? Boolean.TRUE : Boolean.FALSE);
                } else {
                    if (pkg.requestedPermissionsRequired.get(index) != required) {
                        outError[0] = "conflicting <uses-permission> entries";
                        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
                        return false;
                    }
                }
            }
        }

        XmlUtils.skipCurrentTag(parser);
        return true;
    }
 
源代码15 项目: AndroidComponentPlugin   文件: PackageParser.java
private Permission parsePermission(Package owner, Resources res,
        XmlPullParser parser, AttributeSet attrs, String[] outError)
    throws XmlPullParserException, IOException {
    Permission perm = new Permission(owner);

    TypedArray sa = res.obtainAttributes(attrs,
            com.android.internal.R.styleable.AndroidManifestPermission);

    if (!parsePackageItemInfo(owner, perm.info, outError,
            "<permission>", sa,
            com.android.internal.R.styleable.AndroidManifestPermission_name,
            com.android.internal.R.styleable.AndroidManifestPermission_label,
            com.android.internal.R.styleable.AndroidManifestPermission_icon,
            com.android.internal.R.styleable.AndroidManifestPermission_logo)) {
        sa.recycle();
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    // Note: don't allow this value to be a reference to a resource
    // that may change.
    perm.info.group = sa.getNonResourceString(
            com.android.internal.R.styleable.AndroidManifestPermission_permissionGroup);
    if (perm.info.group != null) {
        perm.info.group = perm.info.group.intern();
    }
    
    perm.info.descriptionRes = sa.getResourceId(
            com.android.internal.R.styleable.AndroidManifestPermission_description,
            0);

    perm.info.protectionLevel = sa.getInt(
            com.android.internal.R.styleable.AndroidManifestPermission_protectionLevel,
            PermissionInfo.PROTECTION_NORMAL);

    perm.info.flags = sa.getInt(
            com.android.internal.R.styleable.AndroidManifestPermission_permissionFlags, 0);

    sa.recycle();

    if (perm.info.protectionLevel == -1) {
        outError[0] = "<permission> does not specify protectionLevel";
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    perm.info.protectionLevel = PermissionInfo.fixProtectionLevel(perm.info.protectionLevel);

    if ((perm.info.protectionLevel&PermissionInfo.PROTECTION_MASK_FLAGS) != 0) {
        if ((perm.info.protectionLevel&PermissionInfo.PROTECTION_MASK_BASE) !=
                PermissionInfo.PROTECTION_SIGNATURE) {
            outError[0] = "<permission>  protectionLevel specifies a flag but is "
                    + "not based on signature type";
            mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
            return null;
        }
    }
    
    if (!parseAllMetaData(res, parser, attrs, "<permission>", perm,
            outError)) {
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    owner.permissions.add(perm);

    return perm;
}
 
源代码16 项目: AndroidComponentPlugin   文件: PackageParser.java
private Instrumentation parseInstrumentation(Package owner, Resources res,
        XmlPullParser parser, AttributeSet attrs, String[] outError)
    throws XmlPullParserException, IOException {
    TypedArray sa = res.obtainAttributes(attrs,
            com.android.internal.R.styleable.AndroidManifestInstrumentation);

    if (mParseInstrumentationArgs == null) {
        mParseInstrumentationArgs = new ParsePackageItemArgs(owner, outError,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_name,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_label,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_icon,
                com.android.internal.R.styleable.AndroidManifestInstrumentation_logo);
        mParseInstrumentationArgs.tag = "<instrumentation>";
    }
    
    mParseInstrumentationArgs.sa = sa;
    
    Instrumentation a = new Instrumentation(mParseInstrumentationArgs,
            new InstrumentationInfo());
    if (outError[0] != null) {
        sa.recycle();
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    String str;
    // Note: don't allow this value to be a reference to a resource
    // that may change.
    str = sa.getNonResourceString(
            com.android.internal.R.styleable.AndroidManifestInstrumentation_targetPackage);
    a.info.targetPackage = str != null ? str.intern() : null;

    a.info.handleProfiling = sa.getBoolean(
            com.android.internal.R.styleable.AndroidManifestInstrumentation_handleProfiling,
            false);

    a.info.functionalTest = sa.getBoolean(
            com.android.internal.R.styleable.AndroidManifestInstrumentation_functionalTest,
            false);

    sa.recycle();

    if (a.info.targetPackage == null) {
        outError[0] = "<instrumentation> does not specify targetPackage";
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    if (!parseAllMetaData(res, parser, attrs, "<instrumentation>", a,
            outError)) {
        mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    owner.instrumentation.add(a);

    return a;
}
 
源代码17 项目: android_9.0.0_r45   文件: ShortcutParser.java
private static ShortcutInfo parseShortcutAttributes(ShortcutService service,
        AttributeSet attrs, String packageName, ComponentName activity,
        @UserIdInt int userId, int rank) {
    final TypedArray sa = service.mContext.getResources().obtainAttributes(attrs,
            R.styleable.Shortcut);
    try {
        if (sa.getType(R.styleable.Shortcut_shortcutId) != TypedValue.TYPE_STRING) {
            Log.w(TAG, "android:shortcutId must be string literal. activity=" + activity);
            return null;
        }
        final String id = sa.getNonResourceString(R.styleable.Shortcut_shortcutId);
        final boolean enabled = sa.getBoolean(R.styleable.Shortcut_enabled, true);
        final int iconResId = sa.getResourceId(R.styleable.Shortcut_icon, 0);
        final int titleResId = sa.getResourceId(R.styleable.Shortcut_shortcutShortLabel, 0);
        final int textResId = sa.getResourceId(R.styleable.Shortcut_shortcutLongLabel, 0);
        final int disabledMessageResId = sa.getResourceId(
                R.styleable.Shortcut_shortcutDisabledMessage, 0);

        if (TextUtils.isEmpty(id)) {
            Log.w(TAG, "android:shortcutId must be provided. activity=" + activity);
            return null;
        }
        if (titleResId == 0) {
            Log.w(TAG, "android:shortcutShortLabel must be provided. activity=" + activity);
            return null;
        }

        return createShortcutFromManifest(
                service,
                userId,
                id,
                packageName,
                activity,
                titleResId,
                textResId,
                disabledMessageResId,
                rank,
                iconResId,
                enabled);
    } finally {
        sa.recycle();
    }
}
 
源代码18 项目: Android-plugin-support   文件: DynamicApkParser.java
private Permission parsePermission(DynamicApkInfo owner, Resources res,
                                       XmlPullParser parser, AttributeSet attrs, String[] outError)
            throws XmlPullParserException, IOException {
        Permission perm = new Permission(owner);

        TypedArray sa = res.obtainAttributes(attrs,
                Hooks.getStyleableArray("AndroidManifestPermission"));

        if (!parsePackageItemInfo(owner, perm.info, outError,
                "<permission>", sa,
                Hooks.getStyleable("AndroidManifestPermission_name"),
                Hooks.getStyleable("AndroidManifestPermission_label"),
                Hooks.getStyleable("AndroidManifestPermission_icon"),
                Hooks.getStyleable("AndroidManifestPermission_logo"),
                Hooks.getStyleable("AndroidManifestPermission_banner"))) {
            sa.recycle();
            mParseError = INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
            return null;
        }

        // Note: don't allow this value to be a reference to a resource
        // that may change.
        perm.info.group = sa.getNonResourceString(
                Hooks.getStyleable("AndroidManifestPermission_permissionGroup"));
        if (perm.info.group != null) {
            perm.info.group = perm.info.group.intern();
        }

        perm.info.descriptionRes = sa.getResourceId(
                Hooks.getStyleable("AndroidManifestPermission_description"),
                0);

        perm.info.protectionLevel = sa.getInt(
                Hooks.getStyleable("AndroidManifestPermission_protectionLevel"),
                PermissionInfo.PROTECTION_NORMAL);

        perm.info.flags = sa.getInt(
                Hooks.getStyleable("AndroidManifestPermission_permissionFlags"), 0);

        sa.recycle();

        if (perm.info.protectionLevel == -1) {
            outError[0] = "<permission> does not specify protectionLevel";
            mParseError = INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
            return null;
        }

//        perm.info.protectionLevel = PermissionInfo.fixProtectionLevel(perm.info.protectionLevel);

        if ((perm.info.protectionLevel&PermissionInfo.PROTECTION_MASK_FLAGS) != 0) {
            if ((perm.info.protectionLevel&PermissionInfo.PROTECTION_MASK_BASE) !=
                    PermissionInfo.PROTECTION_SIGNATURE) {
                outError[0] = "<permission>  protectionLevel specifies a flag but is "
                        + "not based on signature type";
                mParseError = INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
                return null;
            }
        }

        if (!parseAllMetaData(res, parser, attrs, "<permission>", perm,
                outError)) {
            mParseError = INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
            return null;
        }

        owner.permissions.add(perm);

        return perm;
    }
 
源代码19 项目: Android-plugin-support   文件: DynamicApkParser.java
private Instrumentation parseInstrumentation(DynamicApkInfo owner, Resources res,
                                             XmlPullParser parser, AttributeSet attrs, String[] outError)
        throws XmlPullParserException, IOException {
    TypedArray sa = res.obtainAttributes(attrs,
            Hooks.getStyleableArray("AndroidManifestInstrumentation"));

    if (mParseInstrumentationArgs == null) {
        mParseInstrumentationArgs = new ParsePackageItemArgs(owner, outError,
                Hooks.getStyleable("AndroidManifestInstrumentation_name"),
                Hooks.getStyleable("AndroidManifestInstrumentation_label"),
                Hooks.getStyleable("AndroidManifestInstrumentation_icon"),
                Hooks.getStyleable("AndroidManifestInstrumentation_logo"),
                Hooks.getStyleable("AndroidManifestInstrumentation_banner"));
        mParseInstrumentationArgs.tag = "<instrumentation>";
    }

    mParseInstrumentationArgs.sa = sa;

    Instrumentation a = new Instrumentation(mParseInstrumentationArgs,
            new InstrumentationInfo());
    if (outError[0] != null) {
        sa.recycle();
        mParseError = INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    String str;
    // Note: don't allow this value to be a reference to a resource
    // that may change.
    str = sa.getNonResourceString(
            Hooks.getStyleable("AndroidManifestInstrumentation_targetPackage"));
    a.info.targetPackage = str != null ? str.intern() : null;

    a.info.handleProfiling = sa.getBoolean(
            Hooks.getStyleable("AndroidManifestInstrumentation_handleProfiling"),
            false);

    a.info.functionalTest = sa.getBoolean(
            Hooks.getStyleable("AndroidManifestInstrumentation_functionalTest"),
            false);

    sa.recycle();

    if (a.info.targetPackage == null) {
        outError[0] = "<instrumentation> does not specify targetPackage";
        mParseError = INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    if (!parseAllMetaData(res, parser, attrs, "<instrumentation>", a,
            outError)) {
        mParseError = INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
        return null;
    }

    owner.instrumentation.add(a);

    return a;
}
 
源代码20 项目: Androzic   文件: ScrollLayout.java
public ScrollLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.setWillNotDraw(false);
    rightShadow = getContext().getResources().getDrawable(R.drawable.right_shadow);
    leftShadow = getContext().getResources().getDrawable(R.drawable.left_shadow);
    mScroller = new Scroller(getContext());
    setGravity(Gravity.CENTER_VERTICAL);
    setOrientation(HORIZONTAL);
    final ViewConfiguration configuration = ViewConfiguration.get(getContext());
    mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();
    // as mMaximumVelocity does not exist in API<4
    float density = getContext().getResources().getDisplayMetrics().density;
    mMaximumVelocity = (int)(4000 * 0.5f * density);

    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ScrollLayout,
            0, 0);

    // Get the labeler class and construct an instance
    String className = a.getNonResourceString(R.styleable.ScrollLayout_labelerClass);
    if (className == null) {
        throw new RuntimeException("Must specify labeler class at " + a.getPositionDescription());
    }

    String labelerFormat = a.getString(R.styleable.ScrollLayout_labelerFormat);
    if (labelerFormat == null) {
        throw new RuntimeException("Must specify labelerFormat at " + a.getPositionDescription());
    }

    try {
        Class<?> klazz = Class.forName(className);
        Constructor<?> ctor = klazz.getConstructor(String.class);
        mLabeler = (Labeler)ctor.newInstance(labelerFormat);
    } catch (Exception e) {
        throw new RuntimeException("Failed to construct labeler at " + a.getPositionDescription(), e);
    }

    // Determine the width and height of our children, using the labelers preferred
    // values as defaults
    objWidth = a.getDimensionPixelSize(R.styleable.ScrollLayout_childWidth,
            mLabeler.getPreferredViewWidth(context));
    objHeight = a.getDimensionPixelSize(R.styleable.ScrollLayout_childHeight,
            mLabeler.getPreferredViewHeight(context));

    a.recycle();
}