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

Commit a5402dab authored by Kenny Root's avatar Kenny Root Committed by Android (Google) Code Review
Browse files

Merge "OBB API for PackageManager" into gingerbread

parents c9535de8 93565c4b
Loading
Loading
Loading
Loading
+15 −0
Original line number Original line Diff line number Diff line
@@ -154519,6 +154519,21 @@
<parameter name="flags" type="int">
<parameter name="flags" type="int">
</parameter>
</parameter>
</method>
</method>
<method name="setPackageObbPath"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="packageName" type="java.lang.String">
</parameter>
<parameter name="path" type="java.lang.String">
</parameter>
</method>
</class>
</class>
<class name="MockResources"
<class name="MockResources"
 extends="android.content.res.Resources"
 extends="android.content.res.Resources"
+9 −0
Original line number Original line Diff line number Diff line
@@ -2657,6 +2657,15 @@ class ContextImpl extends Context {
            return PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
            return PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
        }
        }


        @Override
        public void setPackageObbPath(String packageName, String path) {
            try {
                mPM.setPackageObbPath(packageName, path);
            } catch (RemoteException e) {
                // Should never happen!
            }
        }

        private final ContextImpl mContext;
        private final ContextImpl mContext;
        private final IPackageManager mPM;
        private final IPackageManager mPM;


+2 −0
Original line number Original line Diff line number Diff line
@@ -319,4 +319,6 @@ interface IPackageManager {


    boolean setInstallLocation(int loc);
    boolean setInstallLocation(int loc);
    int getInstallLocation();
    int getInstallLocation();

    void setPackageObbPath(String packageName, String path);
}
}
+13 −0
Original line number Original line Diff line number Diff line
@@ -2193,4 +2193,17 @@ public abstract class PackageManager {
     */
     */
    public abstract void movePackage(
    public abstract void movePackage(
            String packageName, IPackageMoveObserver observer, int flags);
            String packageName, IPackageMoveObserver observer, int flags);

    /**
     * Sets the Opaque Binary Blob (OBB) file location.
     * <p>
     * NOTE: The existence or format of this file is not currently checked, but
     * it may be in the future.
     * 
     * @param packageName Name of the package with which to associate the .obb
     *            file
     * @param path Path on the filesystem to the .obb file
     * @hide
     */
    public abstract void setPackageObbPath(String packageName, String path);
}
}
+31 −0
Original line number Original line Diff line number Diff line
@@ -4583,6 +4583,8 @@ class PackageManagerService extends IPackageManager.Stub {
        }
        }
    };
    };


    private static final boolean DEBUG_OBB = false;

    private static final void sendPackageBroadcast(String action, String pkg,
    private static final void sendPackageBroadcast(String action, String pkg,
            Bundle extras, IIntentReceiver finishedReceiver) {
            Bundle extras, IIntentReceiver finishedReceiver) {
        IActivityManager am = ActivityManagerNative.getDefault();
        IActivityManager am = ActivityManagerNative.getDefault();
@@ -4757,6 +4759,27 @@ class PackageManagerService extends IPackageManager.Stub {
        mHandler.sendMessage(msg);
        mHandler.sendMessage(msg);
    }
    }


    public void setPackageObbPath(String packageName, String path) {
        if (DEBUG_OBB)
            Log.v(TAG, "Setting .obb path for " + packageName + " to: " + path);
        PackageSetting pkgSetting;
        final int uid = Binder.getCallingUid();
        boolean allowedByPermission = false;
        synchronized (mPackages) {
            pkgSetting = mSettings.mPackages.get(packageName);
            if (pkgSetting == null) {
                throw new IllegalArgumentException("Unknown package: " + packageName);
            }
            if (!allowedByPermission && (uid != pkgSetting.userId)) {
                throw new SecurityException("Permission denial: attempt to set .obb file from pid="
                        + Binder.getCallingPid() + ", uid=" + uid + ", package uid="
                        + pkgSetting.userId);
            }
            pkgSetting.obbPathString = path;
            mSettings.writeLP();
        }
    }

    private void processPendingInstall(final InstallArgs args, final int currentStatus) {
    private void processPendingInstall(final InstallArgs args, final int currentStatus) {
        // Queue up an async operation since the package installation may take a little while.
        // Queue up an async operation since the package installation may take a little while.
        mHandler.post(new Runnable() {
        mHandler.post(new Runnable() {
@@ -7118,6 +7141,7 @@ class PackageManagerService extends IPackageManager.Stub {
                    pw.print("    pkg="); pw.println(ps.pkg);
                    pw.print("    pkg="); pw.println(ps.pkg);
                    pw.print("    codePath="); pw.println(ps.codePathString);
                    pw.print("    codePath="); pw.println(ps.codePathString);
                    pw.print("    resourcePath="); pw.println(ps.resourcePathString);
                    pw.print("    resourcePath="); pw.println(ps.resourcePathString);
                    pw.print("    obbPath="); pw.println(ps.obbPathString);
                    if (ps.pkg != null) {
                    if (ps.pkg != null) {
                        pw.print("    dataDir="); pw.println(ps.pkg.applicationInfo.dataDir);
                        pw.print("    dataDir="); pw.println(ps.pkg.applicationInfo.dataDir);
                        pw.print("    targetSdk="); pw.println(ps.pkg.applicationInfo.targetSdkVersion);
                        pw.print("    targetSdk="); pw.println(ps.pkg.applicationInfo.targetSdkVersion);
@@ -7684,6 +7708,7 @@ class PackageManagerService extends IPackageManager.Stub {
        String codePathString;
        String codePathString;
        File resourcePath;
        File resourcePath;
        String resourcePathString;
        String resourcePathString;
        String obbPathString;
        private long timeStamp;
        private long timeStamp;
        private String timeStampString = "0";
        private String timeStampString = "0";
        int versionCode;
        int versionCode;
@@ -8684,6 +8709,9 @@ class PackageManagerService extends IPackageManager.Stub {
            if (pkg.installerPackageName != null) {
            if (pkg.installerPackageName != null) {
                serializer.attribute(null, "installer", pkg.installerPackageName);
                serializer.attribute(null, "installer", pkg.installerPackageName);
            }
            }
            if (pkg.obbPathString != null) {
                serializer.attribute(null, "obbPath", pkg.obbPathString);
            }
            pkg.signatures.writeXml(serializer, "sigs", mPastSignatures);
            pkg.signatures.writeXml(serializer, "sigs", mPastSignatures);
            if ((pkg.pkgFlags&ApplicationInfo.FLAG_SYSTEM) == 0) {
            if ((pkg.pkgFlags&ApplicationInfo.FLAG_SYSTEM) == 0) {
                serializer.startTag(null, "perms");
                serializer.startTag(null, "perms");
@@ -9060,6 +9088,7 @@ class PackageManagerService extends IPackageManager.Stub {
            String sharedIdStr = null;
            String sharedIdStr = null;
            String codePathStr = null;
            String codePathStr = null;
            String resourcePathStr = null;
            String resourcePathStr = null;
            String obbPathStr = null;
            String systemStr = null;
            String systemStr = null;
            String installerPackageName = null;
            String installerPackageName = null;
            String uidError = null;
            String uidError = null;
@@ -9077,6 +9106,7 @@ class PackageManagerService extends IPackageManager.Stub {
                sharedIdStr = parser.getAttributeValue(null, "sharedUserId");
                sharedIdStr = parser.getAttributeValue(null, "sharedUserId");
                codePathStr = parser.getAttributeValue(null, "codePath");
                codePathStr = parser.getAttributeValue(null, "codePath");
                resourcePathStr = parser.getAttributeValue(null, "resourcePath");
                resourcePathStr = parser.getAttributeValue(null, "resourcePath");
                obbPathStr = parser.getAttributeValue(null, "obbPath");
                version = parser.getAttributeValue(null, "version");
                version = parser.getAttributeValue(null, "version");
                if (version != null) {
                if (version != null) {
                    try {
                    try {
@@ -9174,6 +9204,7 @@ class PackageManagerService extends IPackageManager.Stub {
            if (packageSetting != null) {
            if (packageSetting != null) {
                packageSetting.uidError = "true".equals(uidError);
                packageSetting.uidError = "true".equals(uidError);
                packageSetting.installerPackageName = installerPackageName;
                packageSetting.installerPackageName = installerPackageName;
                packageSetting.obbPathString = obbPathStr;
                final String enabledStr = parser.getAttributeValue(null, "enabled");
                final String enabledStr = parser.getAttributeValue(null, "enabled");
                if (enabledStr != null) {
                if (enabledStr != null) {
                    if (enabledStr.equalsIgnoreCase("true")) {
                    if (enabledStr.equalsIgnoreCase("true")) {
Loading