Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bad9db7c authored by Josh Guilfoyle's avatar Josh Guilfoyle
Browse files

Re-fix THEMES-177: Added new manifest attribute pluto:handleThemeConfigChanges.

CR: Dirk Sigurdson
CR: Ed Carrigan
parent 0885ec9a
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -279,7 +279,11 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
    public static final String PLUTO_ISTHEMEABLE_ATTRIBUTE_NAME = "isThemeable";

    /**
     *
     * @hide
     */
    public static final String PLUTO_HANDLE_THEME_CONFIG_CHANGES_ATTRIBUTE_NAME = "handleThemeConfigChanges";

    /**
     * @hide
     */
    public static boolean isPlutoNamespace(String namespace) {
+23 −17
Original line number Diff line number Diff line
@@ -1336,25 +1336,42 @@ public class PackageParser {
        return a;
    }

    private void setIsThemeable(XmlPullParser parser, AttributeSet attrs, ApplicationInfo ai) {
    private void parseAndApplyPlutoAttributes(XmlPullParser parser, AttributeSet attrs,
            ApplicationInfo appInfo) {
        for (int i = 0; i < attrs.getAttributeCount(); i++) {
            if (!ApplicationInfo.isPlutoNamespace(parser.getAttributeNamespace(i))) {
                continue;
            }
            if (attrs.getAttributeName(i).equalsIgnoreCase(ApplicationInfo.PLUTO_ISTHEMEABLE_ATTRIBUTE_NAME)) {
                ai.isThemeable = attrs.getAttributeBooleanValue(i, false);
            String attrName = attrs.getAttributeName(i);
            if (attrName.equalsIgnoreCase(ApplicationInfo.PLUTO_ISTHEMEABLE_ATTRIBUTE_NAME)) {
                appInfo.isThemeable = attrs.getAttributeBooleanValue(i, false);
                return;
            }
        }
    }

    private void parseAndApplyPlutoAttributes(XmlPullParser parser, AttributeSet attrs,
            ActivityInfo ai) {
        for (int i = 0; i < attrs.getAttributeCount(); i++) {
            if (!ApplicationInfo.isPlutoNamespace(parser.getAttributeNamespace(i))) {
                continue;
            }
            String attrName = attrs.getAttributeName(i);
            if (attrName.equalsIgnoreCase(ApplicationInfo.PLUTO_ISTHEMEABLE_ATTRIBUTE_NAME)) {
                ai.setIsThemeable(attrs.getAttributeBooleanValue(i, false));
            } else if (attrName.equalsIgnoreCase(ApplicationInfo.PLUTO_HANDLE_THEME_CONFIG_CHANGES_ATTRIBUTE_NAME)) {
                ai.configChanges |= ActivityInfo.CONFIG_THEME_RESOURCE;
            }
        }
    }

    private boolean parseApplication(Package owner, Resources res,
            XmlPullParser parser, AttributeSet attrs, int flags, String[] outError)
        throws XmlPullParserException, IOException {
        final ApplicationInfo ai = owner.applicationInfo;
        final String pkgName = owner.applicationInfo.packageName;

        setIsThemeable(parser, attrs, ai);
        parseAndApplyPlutoAttributes(parser, attrs, ai);

        TypedArray sa = res.obtainAttributes(attrs,
                com.android.internal.R.styleable.AndroidManifestApplication);
@@ -1628,18 +1645,6 @@ public class PackageParser {
        return true;
    }

    private void setIsThemeableForActivity(XmlPullParser parser, AttributeSet attrs, ActivityInfo ai) {
        for (int i = 0; i < attrs.getAttributeCount(); i++) {
            if (!ApplicationInfo.isPlutoNamespace(parser.getAttributeNamespace(i))) {
                continue;
            }
            if (attrs.getAttributeName(i).equalsIgnoreCase(ApplicationInfo.PLUTO_ISTHEMEABLE_ATTRIBUTE_NAME)) {
                ai.setIsThemeable(attrs.getAttributeBooleanValue(i, false));
                return;
            }
        }
    }

    private Activity parseActivity(Package owner, Resources res,
            XmlPullParser parser, AttributeSet attrs, int flags, String[] outError,
            boolean receiver) throws XmlPullParserException, IOException {
@@ -1661,7 +1666,6 @@ public class PackageParser {
        mParseActivityArgs.flags = flags;
        
        Activity a = new Activity(mParseActivityArgs, new ActivityInfo());
        setIsThemeableForActivity(parser, attrs, a.info);

        if (outError[0] != null) {
            sa.recycle();
@@ -1771,6 +1775,8 @@ public class PackageParser {
            return null;
        }

        parseAndApplyPlutoAttributes(parser, attrs, a.info);

        int outerDepth = parser.getDepth();
        int type;
        while ((type=parser.next()) != XmlPullParser.END_DOCUMENT