package com.tianma.tweaks.miui.utils; import android.annotation.SuppressLint; import android.content.Context; import android.os.Environment; import com.tianma.tweaks.miui.BuildConfig; import java.io.File; import androidx.core.content.ContextCompat; /** * Utils for storage. */ public class StorageUtils { private StorageUtils() { } public static boolean isSDCardMounted() { String state = Environment.getExternalStorageState(); return Environment.MEDIA_MOUNTED.equals(state); } /** * Get sdcard directory * * @return SD card directory */ public static File getSDCardDir() { return Environment.getExternalStorageDirectory(); } /** * get sdcard public documents directory * * @return SD card public documents directory */ public static File getPublicDocumentsDir() { return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS); } public static File getSharedPreferencesFile(Context context, String preferencesName) { File dataDir = ContextCompat.getDataDir(context); File prefsDir = new File(dataDir, "shared_prefs"); return new File(prefsDir, preferencesName + ".xml"); } /** * Get internal data dir. /data/data/<package_name>/ */ public static File getInternalDataDir() { return new File(Environment.getDataDirectory(), "data/" + BuildConfig.APPLICATION_ID); } /** * Get internal files dir. /data/data/<package_name>/files/ * * @return */ public static File getInternalFilesDir() { return new File(getInternalDataDir(), "files"); } /** * Get external files dir. /sdcard/Android/data/<package_name>/files/ */ public static File getExternalFilesDir() { return new File(Environment.getExternalStorageDirectory(), "Android/data/" + BuildConfig.APPLICATION_ID + "/files/"); } /** * Get files dir * * @see StorageUtils#getExternalFilesDir() * @see StorageUtils#getInternalFilesDir() */ public static File getFilesDir() { if (isSDCardMounted()) { File externalFilesDir = getExternalFilesDir(); if (!externalFilesDir.exists()) { externalFilesDir.mkdirs(); } return externalFilesDir; } else { return getInternalFilesDir(); } } /** * Set file world writable */ @SuppressLint({"SetWorldWritable", "SetWorldReadable"}) public static void setFileWorldWritable(File file, int parentDepth) { if (!file.exists()) { return; } parentDepth = parentDepth + 1; for (int i = 0; i < parentDepth; i++) { file.setExecutable(true, false); file.setWritable(true, false); file.setReadable(true, false); file = file.getParentFile(); if (file == null) { break; } } } /** * Set file world readable */ @SuppressLint("SetWorldReadable") public static void setFileWorldReadable(File file, int parentDepth) { if (!file.exists()) { return; } for (int i = 0; i < parentDepth; i++) { file.setReadable(true, false); file.setExecutable(true, false); file = file.getParentFile(); if (file == null) { break; } } } }