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

Commit 05dff2cb authored by Koushik Dutta's avatar Koushik Dutta Committed by Gerrit Code Review
Browse files

Merge "Allow multiple shareable SD Cards by using getShareableVolumes() to get...

Merge "Allow multiple shareable SD Cards by using getShareableVolumes() to get all the volumes that are shareable and allowing sharing/unsharing for all of them rather than just the hardcoded getExternalStorage calls." into gingerbread
parents 8eb4252f 47495ab8
Loading
Loading
Loading
Loading
+76 −55
Original line number Diff line number Diff line
@@ -339,6 +339,13 @@ class MountService extends IMountService.Stub
                case H_UNMOUNT_PM_UPDATE: {
                    if (DEBUG_UNMOUNT) Slog.i(TAG, "H_UNMOUNT_PM_UPDATE");
                    UnmountCallBack ucb = (UnmountCallBack) msg.obj;
                    if (!mUpdatingStatus && !isExternalStorage(ucb.path)) {
                        // If PM isn't already updating, and this isn't an ASEC
                        // mount, then go ahead and do the unmount immediately.
                        if (DEBUG_UNMOUNT) Slog.i(TAG, " skipping PackageManager for " + ucb.path);
                        ucb.handleFinished();
                        break;
                    }
                    mForceUnmounts.add(ucb);
                    if (DEBUG_UNMOUNT) Slog.i(TAG, " registered = " + mUpdatingStatus);
                    // Register only if needed.
@@ -1012,18 +1019,23 @@ class MountService extends IMountService.Stub
            mSendUmsConnectedOnBoot = avail;
        }

        final String path = Environment.getExternalStorageDirectory().getPath();
        if (avail == false && getVolumeState(path).equals(Environment.MEDIA_SHARED)) {
        final ArrayList<String> volumes = getShareableVolumes();
        boolean mediaShared = false;
        for (String path: volumes) {
            if (getVolumeState(path).equals(Environment.MEDIA_SHARED))
                mediaShared = true;
        }
        if (avail == false && mediaShared) {
            /*
             * USB mass storage disconnected while enabled
             */
            final ArrayList<String> volumes = getShareableVolumes();
            new Thread() {
                public void run() {
                    try {
                        int rc;
                        Slog.w(TAG, "Disabling UMS after cable disconnect");
                        for (String path: volumes) {
                            if (getVolumeState(path).equals(Environment.MEDIA_SHARED)) {
                                doShareUnshareVolume(path, "ums", false);
                                if ((rc = doMountVolume(path)) != StorageResultCode.OperationSucceeded) {
                                    Slog.e(TAG, String.format(
@@ -1031,6 +1043,7 @@ class MountService extends IMountService.Stub
                                        path, rc));
                                }
                            }
                        }
                    } catch (Exception ex) {
                        Slog.w(TAG, "Failed to mount media on UMS enabled-disconnect", ex);
                    }
@@ -1125,7 +1138,9 @@ class MountService extends IMountService.Stub

        Slog.i(TAG, "Shutting down");

        String path = Environment.getExternalStorageDirectory().getPath();
        ArrayList<String> volumesToShare = getShareableVolumes();

        for (String path: volumesToShare) {
            String state = getVolumeState(path);

            if (state.equals(Environment.MEDIA_SHARED)) {
@@ -1151,7 +1166,7 @@ class MountService extends IMountService.Stub
                        Slog.e(TAG, "Interrupted while waiting for media", iex);
                        break;
                    }
                state = Environment.getExternalStorageState();
                    state = getVolumeState(path);
                }
                if (retries == 0) {
                    Slog.e(TAG, "Timed out waiting for media to check");
@@ -1175,6 +1190,7 @@ class MountService extends IMountService.Stub
                }
            }
        }
    }

    private boolean getUmsEnabling() {
        synchronized (mListeners) {
@@ -1235,8 +1251,7 @@ class MountService extends IMountService.Stub
                // Override for isUsbMassStorageEnabled()
                setUmsEnabling(enable);
                UmsEnableCallBack umscb = new UmsEnableCallBack(path, method, true);
                int msg = isExternalStorage(path) ? H_UNMOUNT_PM_UPDATE : H_UNMOUNT_MS;
                mHandler.sendMessage(mHandler.obtainMessage(msg, umscb));
                mHandler.sendMessage(mHandler.obtainMessage(H_UNMOUNT_PM_UPDATE, umscb));
                // Clear override
                setUmsEnabling(false);
            }
@@ -1260,7 +1275,14 @@ class MountService extends IMountService.Stub

    public boolean isUsbMassStorageEnabled() {
        waitForReady();
        return doGetVolumeShared(Environment.getExternalStorageDirectory().getPath(), "ums");

        ArrayList<String> volumesToShare = getShareableVolumes();
        for (String path: volumesToShare) {
            if (doGetVolumeShared(path, "ums"))
                return true;
        }
        // no volume is shared
        return false;
    }
    
    /**
@@ -1302,8 +1324,7 @@ class MountService extends IMountService.Stub
            return;
        }
        UnmountCallBack ucb = new UnmountCallBack(path, force);
        int msg = isExternalStorage(path) ? H_UNMOUNT_PM_UPDATE : H_UNMOUNT_MS;
        mHandler.sendMessage(mHandler.obtainMessage(msg, ucb));
        mHandler.sendMessage(mHandler.obtainMessage(H_UNMOUNT_PM_UPDATE, ucb));
    }

    public int formatVolume(String path) {