Files
device_oplus_camera/oplus-fwk/src/com/oplus/os/OplusUsbEnvironment.java
2024-08-20 08:41:09 +05:30

159 lines
4.9 KiB
Java

package com.oplus.os;
import android.content.Context;
import android.os.Environment;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.os.storage.DiskInfo;
import android.os.storage.IStorageManager;
import android.os.storage.StorageManager;
import android.os.storage.VolumeInfo;
import android.util.Log;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class OplusUsbEnvironment extends Environment {
private static final String TAG = "OplusUsbEnvironment";
private static final String DEFAULT_INTERNAL_PATH = "/storage/emulated/0";
private static IStorageManager sMountService = null;
private static Object sLock = new Object();
private static String sExternalSdDir = null;
private static String sInternalSdDir = DEFAULT_INTERNAL_PATH;
private static ArrayList<String> sOtgPathes = new ArrayList<>();
private static void update(Context context) {
if (sMountService == null) {
sMountService = IStorageManager.Stub.asInterface(ServiceManager.getService("mount"));
}
getVolumes();
}
public static File getExternalSdDirectory(Context context) {
String path;
synchronized (sLock) {
update(context);
path = sExternalSdDir;
}
if (path == null) {
return null;
}
return new File(path);
}
public static String getExternalSdState(Context context) {
String path;
final StorageManager sm = context.getSystemService(StorageManager.class);
synchronized (sLock) {
update(context);
path = sExternalSdDir;
}
if (path == null || sm == null) {
return "unknown";
}
return sm.getVolumeState(path);
}
public static String getExternalPath(Context context) {
String path;
synchronized (sLock) {
update(context);
path = sExternalSdDir;
}
return path;
}
public static File getInternalSdDirectory(Context context) {
String path;
synchronized (sLock) {
update(context);
path = sInternalSdDir;
}
if (path == null) {
return null;
}
return new File(path);
}
public static String getInternalSdState(Context context) {
String path;
final StorageManager sm = context.getSystemService(StorageManager.class);
synchronized (sLock) {
update(context);
path = sInternalSdDir;
}
if (path == null || sm == null) {
return "unknown";
}
return sm.getVolumeState(path);
}
public static String getInternalPath(Context context) {
String path;
synchronized (sLock) {
update(context);
path = sInternalSdDir;
}
return path;
}
public static List<String> getOtgPath(Context context) {
synchronized (sLock) {
update(context);
if (sOtgPathes == null) {
return null;
}
return (ArrayList<String>) sOtgPathes.clone();
}
}
public static void getVolumes() {
if (sMountService == null) {
Log.e(TAG, "getVolumes: sMountService is null!!!");
return;
}
try {
final VolumeInfo[] vols = sMountService.getVolumes(0);
sExternalSdDir = null;
sOtgPathes.clear();
for (VolumeInfo vol : vols) {
final String path = vol.path;
if (vol.type == 2) {
final int userId = UserHandle.myUserId();
if (path != null) {
sInternalSdDir = path.concat("/").concat(Integer.toString(userId));
}
} else {
final DiskInfo diskInfo = vol.getDisk();
if (diskInfo != null) {
if (diskInfo.isSd() && path != null) {
sExternalSdDir = path;
}
if (diskInfo.isUsb() && path != null && !sOtgPathes.contains(path)) {
sOtgPathes.add(path);
}
}
}
}
} catch (RemoteException e) {
}
}
public static boolean isVolumeMounted(Context context, String path) {
synchronized (sLock) {
update(context);
}
final StorageManager sm = context.getSystemService(StorageManager.class);
if (path == null || sm == null) {
return false;
}
return "mounted".equals(sm.getVolumeState(path));
}
}