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

Commit 8d112675 authored by Mitsuru Oshima's avatar Mitsuru Oshima Committed by The Android Open Source Project
Browse files

AI 147845: Compatibility mode support. Part 1

  Adding supports-density tag to manifest file/ApplicationInfo.
  BUG=1752478

Automated import of CL 147845
parent 4369397d
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -2594,6 +2594,17 @@
 visibility="public"
>
</field>
<field name="density"
 type="int"
 transient="false"
 volatile="false"
 value="16843372"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="dependency"
 type="int"
 transient="false"
@@ -31607,6 +31618,17 @@
 visibility="public"
>
</field>
<field name="supportsDensities"
 type="int[]"
 transient="false"
 volatile="false"
 value="null"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="taskAffinity"
 type="java.lang.String"
 transient="false"
@@ -33597,6 +33619,17 @@
 visibility="public"
>
</field>
<field name="GET_SUPPORTS_DENSITIES"
 type="int"
 transient="false"
 volatile="false"
 value="32768"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="GET_UNINSTALLED_PACKAGES"
 type="int"
 transient="false"
+15 −3
Original line number Diff line number Diff line
@@ -161,6 +161,14 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
     */
    public int uid;
    

    /**
     * The list of densities in DPI that application supprots. This
     * field is only set if the {@link PackageManager#GET_SUPPORTS_DENSITIES} flag was
     * used when retrieving the structure.
     */
    public int[] supportsDensities;

    /**
     * When false, indicates that all components within this application are
     * considered disabled, regardless of their individually set enabled status.
@@ -183,6 +191,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
        pw.println(prefix + "enabled=" + enabled);
        pw.println(prefix + "manageSpaceActivityName="+manageSpaceActivityName);
        pw.println(prefix + "description=0x"+Integer.toHexString(descriptionRes));
        pw.println(prefix + "supportsDensities=" + supportsDensities);
        super.dumpBack(pw, prefix);
    }
    
@@ -228,6 +237,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
        enabled = orig.enabled;
        manageSpaceActivityName = orig.manageSpaceActivityName;
        descriptionRes = orig.descriptionRes;
        supportsDensities = orig.supportsDensities;
    }


@@ -257,6 +267,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
        dest.writeInt(enabled ? 1 : 0);
        dest.writeString(manageSpaceActivityName);
        dest.writeInt(descriptionRes);
        dest.writeIntArray(supportsDensities);
    }

    public static final Parcelable.Creator<ApplicationInfo> CREATOR
@@ -285,6 +296,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
        enabled = source.readInt() != 0;
        manageSpaceActivityName = source.readString();
        descriptionRes = source.readInt();
        supportsDensities = source.createIntArray();
    }

    /**
+6 −0
Original line number Diff line number Diff line
@@ -165,6 +165,12 @@ public abstract class PackageManager {
     */
    public static final int GET_CONFIGURATIONS = 0x00004000;

    /**
     * {@link ApplicationInfo} flag: return the
     * {@link ApplicationInfo#supportsDensities} that the package supports.
     */
    public static final int GET_SUPPORTS_DENSITIES    = 0x00008000;

    /**
     * Permission check result: this is returned by {@link #checkPermission}
     * if the permission has been granted to the given package.
+34 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import java.security.cert.CertificateEncodingException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

@@ -726,6 +727,14 @@ public class PackageParser {
            pkg.usesLibraries.toArray(pkg.usesLibraryFiles);
        }

        int size = pkg.supportsDensityList.size();
        if (size > 0) {
            int densities[] = pkg.supportsDensities = new int[size];
            List<Integer> densityList = pkg.supportsDensityList;
            for (int i = 0; i < size; i++) {
                densities[i] = densityList.get(i);
            }
        }
        return pkg;
    }

@@ -1173,6 +1182,21 @@ public class PackageParser {

                XmlUtils.skipCurrentTag(parser);

            } else if (tagName.equals("supports-density")) {
                sa = res.obtainAttributes(attrs,
                        com.android.internal.R.styleable.AndroidManifestSupportsDensity);

                int density = sa.getInteger(
                        com.android.internal.R.styleable.AndroidManifestSupportsDensity_density, -1);

                sa.recycle();

                if (density != -1 && !owner.supportsDensityList.contains(density)) {
                    owner.supportsDensityList.add(density);
                }

                XmlUtils.skipCurrentTag(parser);

            } else {
                if (!RIGID_PARSER) {
                    Log.w(TAG, "Problem in package " + mArchiveSourcePath + ":");
@@ -2035,6 +2059,9 @@ public class PackageParser {
        // We store the application meta-data independently to avoid multiple unwanted references
        public Bundle mAppMetaData = null;

        public final ArrayList<Integer> supportsDensityList = new ArrayList<Integer>();
        public int[] supportsDensities = null;

        // If this is a 3rd party app, this is the path of the zip file.
        public String mPath;

@@ -2149,6 +2176,10 @@ public class PackageParser {
                && p.usesLibraryFiles != null) {
            return true;
        }
        if ((flags & PackageManager.GET_SUPPORTS_DENSITIES) != 0
            && p.supportsDensities != null) {
            return true;
        }
        return false;
    }

@@ -2166,6 +2197,9 @@ public class PackageParser {
        if ((flags & PackageManager.GET_SHARED_LIBRARY_FILES) != 0) {
            ai.sharedLibraryFiles = p.usesLibraryFiles;
        }
        if ((flags & PackageManager.GET_SUPPORTS_DENSITIES) != 0) {
            ai.supportsDensities = p.supportsDensities;
        }
        return ai;
    }

+14 −1
Original line number Diff line number Diff line
@@ -954,6 +954,19 @@ public interface WindowManager extends ViewManager {
            return sb.toString();
        }

        void scaleUp(float scale) {
            if (scale != 1.0f) {
                x *= scale;
                y *= scale;
                if (width > 0) {
                    width *= scale;
                }
                if (height > 0) {
                    height *= scale;
                }
            }
        }

        private CharSequence mTitle = "";
    }
}
Loading