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

Commit 650a8551 authored by jianzhou's avatar jianzhou Committed by Ethan Chen
Browse files

UsbSettings: Add UMS mode support

Android only supports MTP and PTP mode in UsbSettings screen, this change
is to add USB mass storage mode.

Change-Id: If7e49ae022c187063d30316b6a017d6089d97713
parent 4dad4a4e
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.net.TrafficStats.MB_IN_BYTES;

import android.content.ContentResolver;
import android.content.Context;
import android.hardware.usb.UsbManager;
import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
@@ -380,6 +381,22 @@ public class StorageManager {
       }
    }

    /**
     * Switch USB Mass Storage (UMS) on the device.
     *
     * @hide
     */
    public void setUsbMassStorageEnabled(boolean enable) {
        UsbManager manager = new UsbManager(null, null);
        if (enable && manager.isFunctionEnabled(UsbManager.USB_FUNCTION_MASS_STORAGE)) {
            if(!isUsbMassStorageEnabled()) {
                enableUsbMassStorage();
            }
        } else if (isUsbMassStorageEnabled()) {
            disableUsbMassStorage();
        }
    }

    /**
     * Enables USB Mass Storage (UMS) on the device.
     *
+11 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.hardware.usb.UsbManager;
import android.os.Environment;
import android.os.Handler;
import android.os.HandlerThread;
@@ -64,6 +65,7 @@ public class StorageNotification extends SystemUI {
    private Notification   mMediaStorageNotification;
    private boolean        mUmsAvailable;
    private StorageManager mStorageManager;
    private UsbManager     mUsbManager;

    private Handler        mAsyncEventHandler;

@@ -90,6 +92,7 @@ public class StorageNotification extends SystemUI {
    @Override
    public void start() {
        mStorageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE);
        mUsbManager = (UsbManager) mContext.getSystemService(Context.USB_SERVICE);
        final boolean connected = mStorageManager.isUsbMassStorageConnected();
        if (DEBUG) Log.d(TAG, String.format( "Startup with UMS connection %s (media state %s)",
                mUmsAvailable, Environment.getExternalStorageState()));
@@ -121,6 +124,10 @@ public class StorageNotification extends SystemUI {
             */
            connected = false;
        }
        //once UMS connected and SD card mounted, enable UMS
        if (connected && st.equals(Environment.MEDIA_MOUNTED)) {
            mStorageManager.setUsbMassStorageEnabled(true);
        }
        updateUsbMassStorageNotification(connected);
    }

@@ -140,6 +147,10 @@ public class StorageNotification extends SystemUI {
                "Media {%s} state changed from {%s} -> {%s} (primary = %b, usb storage = %b)",
                path, oldState, newState, isPrimary, isUsbStorage));
        if (newState.equals(Environment.MEDIA_SHARED)) {
            if (!mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_MASS_STORAGE)) {
                mStorageManager.disableUsbMassStorage();
            }

            /*
             * Storage is now shared. Modify the UMS notification
             * for stopping UMS.
+0 −3
Original line number Diff line number Diff line
@@ -1570,9 +1570,6 @@ class MountService extends IMountService.Stub
        waitForReady();
        validatePermission(android.Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS);

        final StorageVolume primary = getPrimaryPhysicalVolume();
        if (primary == null) return;

        // TODO: Add support for multiple share methods

        for (String path : getShareableVolumes()) {
+2 −0
Original line number Diff line number Diff line
@@ -649,6 +649,8 @@ public class UsbDeviceManager {
                case MSG_UPDATE_STATE:
                    mConnected = (msg.arg1 == 1);
                    mConfigured = (msg.arg2 == 1);
                    StorageManager storageManager = StorageManager.from(mContext);
                    storageManager.setUsbMassStorageEnabled(mConnected);
                    updateUsbNotification();
                    updateAdbNotification();
                    if (containsFunction(mCurrentFunctions,