Search in sources :

Example 21 with ResName

use of org.robolectric.res.ResName in project robolectric by robolectric.

the class ShadowLegacyResourcesImpl method newNotFoundException.

private Resources.NotFoundException newNotFoundException(int id) {
    ResourceTable resourceTable = legacyShadowOf(realResourcesImpl.getAssets()).getResourceTable();
    ResName resName = resourceTable.getResName(id);
    if (resName == null) {
        return new Resources.NotFoundException("resource ID #0x" + Integer.toHexString(id));
    } else {
        return new Resources.NotFoundException(resName.getFullyQualifiedName());
    }
}
Also used : ResName(org.robolectric.res.ResName) ResourceTable(org.robolectric.res.ResourceTable)

Example 22 with ResName

use of org.robolectric.res.ResName in project robolectric by robolectric.

the class ShadowResources method newNotFoundException.

private Resources.NotFoundException newNotFoundException(int id) {
    ResourceTable resourceTable = legacyShadowOf(realResources.getAssets()).getResourceTable();
    ResName resName = resourceTable.getResName(id);
    if (resName == null) {
        return new Resources.NotFoundException("resource ID #0x" + Integer.toHexString(id));
    } else {
        return new Resources.NotFoundException(resName.getFullyQualifiedName());
    }
}
Also used : NotFoundException(android.content.res.Resources.NotFoundException) ResName(org.robolectric.res.ResName) ResourceTable(org.robolectric.res.ResourceTable)

Example 23 with ResName

use of org.robolectric.res.ResName in project robolectric by robolectric.

the class LegacyManifestParser method createPermissionGroupInfo.

private static PermissionGroupInfo createPermissionGroupInfo(Package owner, PermissionGroupItemData itemData) {
    PermissionGroupInfo permissionGroupInfo = new PermissionGroupInfo();
    populatePackageItemInfo(permissionGroupInfo, owner, itemData);
    permissionGroupInfo.metaData = metaDataToBundle(itemData.getMetaData().getValueMap());
    String descriptionRef = itemData.getDescription();
    if (descriptionRef != null) {
        ResName descResName = AttributeResource.getResourceReference(descriptionRef, owner.packageName, "string");
        permissionGroupInfo.descriptionRes = RuntimeEnvironment.getAppResourceTable().getResourceId(descResName);
    }
    String labelRefOrString = itemData.getLabel();
    if (labelRefOrString != null) {
        if (AttributeResource.isResourceReference(labelRefOrString)) {
            ResName labelResName = AttributeResource.getResourceReference(labelRefOrString, owner.packageName, "string");
            permissionGroupInfo.labelRes = RuntimeEnvironment.getAppResourceTable().getResourceId(labelResName);
        } else {
            permissionGroupInfo.nonLocalizedLabel = labelRefOrString;
        }
    }
    return permissionGroupInfo;
}
Also used : PermissionGroupInfo(android.content.pm.PermissionGroupInfo) ResName(org.robolectric.res.ResName)

Example 24 with ResName

use of org.robolectric.res.ResName in project robolectric by robolectric.

the class LegacyManifestParser method createPackage.

public static Package createPackage(AndroidManifest androidManifest) {
    Package pkg = new Package(androidManifest.getPackageName());
    pkg.mVersionName = androidManifest.getVersionName();
    pkg.mVersionCode = androidManifest.getVersionCode();
    Map<String, PermissionItemData> permissionItemData = androidManifest.getPermissions();
    for (PermissionItemData itemData : permissionItemData.values()) {
        Permission permission = new Permission(pkg, createPermissionInfo(pkg, itemData));
        permission.metaData = permission.info.metaData;
        pkg.permissions.add(permission);
    }
    Map<String, PermissionGroupItemData> permissionGroupItemData = androidManifest.getPermissionGroups();
    for (PermissionGroupItemData itemData : permissionGroupItemData.values()) {
        PermissionGroup permissionGroup = new PermissionGroup(pkg, createPermissionGroupInfo(pkg, itemData));
        permissionGroup.metaData = permissionGroup.info.metaData;
        pkg.permissionGroups.add(permissionGroup);
    }
    pkg.requestedPermissions.addAll(androidManifest.getUsedPermissions());
    if (RuntimeEnvironment.getApiLevel() < VERSION_CODES.M) {
        List<Boolean> permissionsRequired = ReflectionHelpers.getField(pkg, "requestedPermissionsRequired");
        permissionsRequired.addAll(buildBooleanList(pkg.requestedPermissions.size(), true));
    }
    pkg.applicationInfo.flags = decodeFlags(androidManifest.getApplicationAttributes());
    pkg.applicationInfo.targetSdkVersion = androidManifest.getTargetSdkVersion();
    pkg.applicationInfo.packageName = androidManifest.getPackageName();
    pkg.applicationInfo.processName = androidManifest.getProcessName();
    if (!Strings.isNullOrEmpty(androidManifest.getApplicationName())) {
        pkg.applicationInfo.className = buildClassName(pkg.applicationInfo.packageName, androidManifest.getApplicationName());
        if (RuntimeEnvironment.getApiLevel() >= VERSION_CODES.N_MR1) {
            pkg.applicationInfo.name = pkg.applicationInfo.className;
        }
    }
    pkg.applicationInfo.metaData = metaDataToBundle(androidManifest.getApplicationMetaData());
    pkg.applicationInfo.uid = Process.myUid();
    if (androidManifest.getThemeRef() != null) {
        pkg.applicationInfo.theme = RuntimeEnvironment.getAppResourceTable().getResourceId(ResName.qualifyResName(androidManifest.getThemeRef().replace("@", ""), pkg.packageName, "style"));
    }
    int labelRes = 0;
    if (androidManifest.getLabelRef() != null) {
        String fullyQualifiedName = ResName.qualifyResName(androidManifest.getLabelRef(), androidManifest.getPackageName());
        Integer id = fullyQualifiedName == null ? null : RuntimeEnvironment.getAppResourceTable().getResourceId(new ResName(fullyQualifiedName));
        labelRes = id != null ? id : 0;
    }
    pkg.applicationInfo.labelRes = labelRes;
    String labelRef = androidManifest.getLabelRef();
    if (labelRef != null && !labelRef.startsWith("@")) {
        pkg.applicationInfo.nonLocalizedLabel = labelRef;
    }
    Map<String, ActivityData> activityDatas = androidManifest.getActivityDatas();
    for (ActivityData data : activityDatas.values()) {
        ActivityInfo activityInfo = new ActivityInfo();
        activityInfo.name = buildClassName(pkg.packageName, data.getName());
        activityInfo.packageName = pkg.packageName;
        activityInfo.configChanges = getConfigChanges(data);
        activityInfo.parentActivityName = data.getParentActivityName();
        activityInfo.metaData = metaDataToBundle(data.getMetaData().getValueMap());
        activityInfo.applicationInfo = pkg.applicationInfo;
        activityInfo.targetActivity = data.getTargetActivityName();
        activityInfo.exported = data.isExported();
        activityInfo.permission = data.getPermission();
        activityInfo.enabled = data.isEnabled();
        String themeRef;
        // Based on ShadowActivity
        if (data.getThemeRef() != null) {
            themeRef = data.getThemeRef();
        } else {
            themeRef = androidManifest.getThemeRef();
        }
        if (themeRef != null) {
            activityInfo.theme = RuntimeEnvironment.getAppResourceTable().getResourceId(ResName.qualifyResName(themeRef.replace("@", ""), pkg.packageName, "style"));
        }
        if (data.getLabel() != null) {
            activityInfo.labelRes = RuntimeEnvironment.getAppResourceTable().getResourceId(ResName.qualifyResName(data.getLabel().replace("@", ""), pkg.packageName, "string"));
            if (activityInfo.labelRes == 0) {
                activityInfo.nonLocalizedLabel = data.getLabel();
            }
        }
        Activity activity = createActivity(pkg, activityInfo);
        for (IntentFilterData intentFilterData : data.getIntentFilters()) {
            ActivityIntentInfo outInfo = new ActivityIntentInfo(activity);
            populateIntentInfo(intentFilterData, outInfo);
            activity.intents.add(outInfo);
        }
        pkg.activities.add(activity);
    }
    for (ContentProviderData data : androidManifest.getContentProviders()) {
        ProviderInfo info = new ProviderInfo();
        populateComponentInfo(info, pkg, data);
        info.authority = data.getAuthorities();
        List<PathPermission> permissions = new ArrayList<>();
        for (PathPermissionData permissionData : data.getPathPermissionDatas()) {
            permissions.add(createPathPermission(permissionData));
        }
        info.pathPermissions = permissions.toArray(new PathPermission[permissions.size()]);
        info.readPermission = data.getReadPermission();
        info.writePermission = data.getWritePermission();
        info.grantUriPermissions = data.getGrantUriPermissions();
        info.enabled = data.isEnabled();
        pkg.providers.add(createProvider(pkg, info));
    }
    for (BroadcastReceiverData data : androidManifest.getBroadcastReceivers()) {
        ActivityInfo info = new ActivityInfo();
        populateComponentInfo(info, pkg, data);
        info.permission = data.getPermission();
        info.exported = data.isExported();
        info.enabled = data.isEnabled();
        Activity receiver = createActivity(pkg, info);
        for (IntentFilterData intentFilterData : data.getIntentFilters()) {
            ActivityIntentInfo outInfo = new ActivityIntentInfo(receiver);
            populateIntentInfo(intentFilterData, outInfo);
            receiver.intents.add(outInfo);
        }
        pkg.receivers.add(receiver);
    }
    for (ServiceData data : androidManifest.getServices()) {
        ServiceInfo info = new ServiceInfo();
        populateComponentInfo(info, pkg, data);
        info.permission = data.getPermission();
        info.exported = data.isExported();
        info.enabled = data.isEnabled();
        Service service = createService(pkg, info);
        for (IntentFilterData intentFilterData : data.getIntentFilters()) {
            ServiceIntentInfo outInfo = new ServiceIntentInfo(service);
            populateIntentInfo(intentFilterData, outInfo);
            service.intents.add(outInfo);
        }
        pkg.services.add(service);
    }
    String codePath = RuntimeEnvironment.getTempDirectory().createIfNotExists(pkg.packageName + "-codePath").toAbsolutePath().toString();
    if (RuntimeEnvironment.getApiLevel() >= LOLLIPOP) {
        pkg.codePath = codePath;
    } else {
        ReflectionHelpers.setField(Package.class, pkg, "mPath", codePath);
    }
    return pkg;
}
Also used : PermissionItemData(org.robolectric.manifest.PermissionItemData) ContentProviderData(org.robolectric.manifest.ContentProviderData) ArrayList(java.util.ArrayList) PathPermissionData(org.robolectric.manifest.PathPermissionData) PermissionGroup(android.content.pm.PackageParser.PermissionGroup) Activity(android.content.pm.PackageParser.Activity) ServiceInfo(android.content.pm.ServiceInfo) ProviderInfo(android.content.pm.ProviderInfo) Permission(android.content.pm.PackageParser.Permission) PathPermission(android.content.pm.PathPermission) ActivityData(org.robolectric.manifest.ActivityData) ActivityInfo(android.content.pm.ActivityInfo) IntentFilterData(org.robolectric.manifest.IntentFilterData) PathPermission(android.content.pm.PathPermission) BroadcastReceiverData(org.robolectric.manifest.BroadcastReceiverData) PermissionGroupItemData(org.robolectric.manifest.PermissionGroupItemData) Service(android.content.pm.PackageParser.Service) ActivityIntentInfo(android.content.pm.PackageParser.ActivityIntentInfo) ServiceData(org.robolectric.manifest.ServiceData) ServiceIntentInfo(android.content.pm.PackageParser.ServiceIntentInfo) ResName(org.robolectric.res.ResName) Package(android.content.pm.PackageParser.Package)

Example 25 with ResName

use of org.robolectric.res.ResName in project robolectric by robolectric.

the class XmlResourceParserImpl method getResourceId.

private int getResourceId(String possiblyQualifiedResourceName, String defaultPackageName, String defaultType) {
    if (AttributeResource.isNull(possiblyQualifiedResourceName))
        return 0;
    if (AttributeResource.isStyleReference(possiblyQualifiedResourceName)) {
        ResName styleReference = AttributeResource.getStyleReference(possiblyQualifiedResourceName, defaultPackageName, "attr");
        Integer resourceId = resourceTable.getResourceId(styleReference);
        if (resourceId == null) {
            throw new Resources.NotFoundException(styleReference.getFullyQualifiedName());
        }
        return resourceId;
    }
    if (AttributeResource.isResourceReference(possiblyQualifiedResourceName)) {
        ResName resourceReference = AttributeResource.getResourceReference(possiblyQualifiedResourceName, defaultPackageName, defaultType);
        Integer resourceId = resourceTable.getResourceId(resourceReference);
        if (resourceId == null) {
            throw new Resources.NotFoundException(resourceReference.getFullyQualifiedName());
        }
        return resourceId;
    }
    possiblyQualifiedResourceName = removeLeadingSpecialCharsIfAny(possiblyQualifiedResourceName);
    ResName resName = ResName.qualifyResName(possiblyQualifiedResourceName, defaultPackageName, defaultType);
    Integer resourceId = resourceTable.getResourceId(resName);
    return resourceId == null ? 0 : resourceId;
}
Also used : ResName(org.robolectric.res.ResName)

Aggregations

ResName (org.robolectric.res.ResName)26 AttributeResource (org.robolectric.res.AttributeResource)9 TypedValue (android.util.TypedValue)6 FileTypedResource (org.robolectric.res.FileTypedResource)6 ResourceTable (org.robolectric.res.ResourceTable)6 HiddenApi (org.robolectric.annotation.HiddenApi)4 Implementation (org.robolectric.annotation.Implementation)4 TypedResource (org.robolectric.res.TypedResource)4 SuppressLint (android.annotation.SuppressLint)2 PermissionInfo (android.content.pm.PermissionInfo)2 ByteArrayInputStream (java.io.ByteArrayInputStream)2 FileNotFoundException (java.io.FileNotFoundException)2 IOException (java.io.IOException)2 Test (org.junit.Test)2 PermissionItemData (org.robolectric.manifest.PermissionItemData)2 AttrData (org.robolectric.res.AttrData)2 EmptyStyle (org.robolectric.res.EmptyStyle)2 ResType (org.robolectric.res.ResType)2 Style (org.robolectric.res.Style)2 ThemeStyleSet (org.robolectric.res.ThemeStyleSet)2