From 14a18bb15c2fcb9d0249d99912382ccb814f5d4f Mon Sep 17 00:00:00 2001 From: Trumeet Date: Fri, 15 Sep 2017 20:55:18 +0800 Subject: feat: may support KitKat and after --- library/build.gradle | 2 +- library/src/main/java/android/os/Environment.java | 18 ++++ .../redirectstorage/wrapper/AbstractWrapper.java | 20 +++- .../wrapper/UserEnvironmentWrapperMarshmallow.java | 91 ------------------ .../trumeet/redirectstorage/wrapper/WrapperKK.java | 102 +++++++++++++++++++++ .../trumeet/redirectstorage/wrapper/WrapperMM.java | 86 +++++++++++++++++ 6 files changed, 226 insertions(+), 93 deletions(-) delete mode 100644 library/src/main/java/top/trumeet/redirectstorage/wrapper/UserEnvironmentWrapperMarshmallow.java create mode 100644 library/src/main/java/top/trumeet/redirectstorage/wrapper/WrapperKK.java create mode 100644 library/src/main/java/top/trumeet/redirectstorage/wrapper/WrapperMM.java diff --git a/library/build.gradle b/library/build.gradle index bfa8e20..d3fd352 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -8,7 +8,7 @@ android { defaultConfig { - minSdkVersion 21 + minSdkVersion 19 targetSdkVersion 26 versionCode 1 versionName "1.0" diff --git a/library/src/main/java/android/os/Environment.java b/library/src/main/java/android/os/Environment.java index f529268..67faa77 100644 --- a/library/src/main/java/android/os/Environment.java +++ b/library/src/main/java/android/os/Environment.java @@ -108,5 +108,23 @@ public class Environment { public File[] buildExternalStorageAppCacheDirs(String packageName) { throw new RuntimeException("Stub!"); } + public File[] getExternalDirsForVold() { + throw new RuntimeException("Stub!"); + } + public File[] getExternalDirsForApp() { + throw new RuntimeException("Stub!"); + } + public File getMediaDir() { + throw new RuntimeException("Stub!"); + } + public File[] buildExternalStorageAppDataDirsForVold(String packageName) { + throw new RuntimeException("Stub!"); + } + public File[] buildExternalStorageAppMediaDirsForVold(String packageName) { + throw new RuntimeException("Stub!"); + } + public File[] buildExternalStorageAppObbDirsForVold(String packageName) { + throw new RuntimeException("Stub!"); + } } } diff --git a/library/src/main/java/top/trumeet/redirectstorage/wrapper/AbstractWrapper.java b/library/src/main/java/top/trumeet/redirectstorage/wrapper/AbstractWrapper.java index 2a3d2ce..e67c144 100644 --- a/library/src/main/java/top/trumeet/redirectstorage/wrapper/AbstractWrapper.java +++ b/library/src/main/java/top/trumeet/redirectstorage/wrapper/AbstractWrapper.java @@ -4,9 +4,12 @@ import android.os.Build; import android.os.Environment; import java.io.File; +import java.util.ArrayList; +import java.util.List; /** * Created by Trumeet on 2017/9/15. + * @author Trumeet */ public abstract class AbstractWrapper extends Environment.UserEnvironment { @@ -16,7 +19,12 @@ public abstract class AbstractWrapper extends Environment.UserEnvironment { checkNonNull(base); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { checkNonNull(userId); - return new UserEnvironmentWrapperMarshmallow(base, + return new WrapperMM(base, + userId, customPath); + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + checkNonNull(userId); + return new WrapperKK(base, userId, customPath); } return null; @@ -55,4 +63,14 @@ public abstract class AbstractWrapper extends Environment.UserEnvironment { } public abstract File getRealExternalStorageDirectory (); + + public final File[] convertDirs (File... dirs) { + if (dirs == null || dirs.length == 0) + return dirs; + List list = new ArrayList<>(dirs.length); + for (File file : dirs) { + list.add(new File(file.getAbsolutePath() + mCustomPath)); + } + return list.toArray(new File[list.size()]); + } } diff --git a/library/src/main/java/top/trumeet/redirectstorage/wrapper/UserEnvironmentWrapperMarshmallow.java b/library/src/main/java/top/trumeet/redirectstorage/wrapper/UserEnvironmentWrapperMarshmallow.java deleted file mode 100644 index 6565631..0000000 --- a/library/src/main/java/top/trumeet/redirectstorage/wrapper/UserEnvironmentWrapperMarshmallow.java +++ /dev/null @@ -1,91 +0,0 @@ -package top.trumeet.redirectstorage.wrapper; - -import android.os.Environment; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -/** - * Created by Trumeet on 2017/9/15. - * Wrapper for marshmallow+ - */ - -class UserEnvironmentWrapperMarshmallow extends AbstractWrapper { - - UserEnvironmentWrapperMarshmallow(Environment.UserEnvironment ue, int userId, String customPath) { - super(ue, userId, customPath); - } - - @Override - public File[] getExternalDirs() { - return buildExternalDirs(mEnable); - } - - private File[] buildExternalDirs (boolean mEnable) { - File[] dirs = mBase.getExternalDirs(); - if (!mEnable) - return dirs; - if (dirs == null || dirs.length == 0) - return dirs; - List list = new ArrayList<>(dirs.length); - for (File file : dirs) { - list.add(new File(file.getAbsolutePath() + mCustomPath)); - } - return list.toArray(new File[list.size()]); - } - - public File getRealExternalStorageDirectory () { - return buildExternalDirs(false)[0]; - } - - @Override - public File getExternalStorageDirectory() { - return mBase.getExternalStorageDirectory(); - } - - @Override - public File getExternalStoragePublicDirectory(String type) { - return mBase.getExternalStoragePublicDirectory(type); - } - - @Override - public File[] buildExternalStoragePublicDirs(String type) { - return mBase.buildExternalStoragePublicDirs(type); - } - - @Override - public File[] buildExternalStorageAndroidDataDirs() { - return mBase.buildExternalStorageAndroidDataDirs(); - } - - @Override - public File[] buildExternalStorageAndroidObbDirs() { - return mBase.buildExternalStorageAndroidObbDirs(); - } - - @Override - public File[] buildExternalStorageAppDataDirs(String packageName) { - return mBase.buildExternalStorageAppDataDirs(packageName); - } - - @Override - public File[] buildExternalStorageAppMediaDirs(String packageName) { - return mBase.buildExternalStorageAppMediaDirs(packageName); - } - - @Override - public File[] buildExternalStorageAppObbDirs(String packageName) { - return mBase.buildExternalStorageAppObbDirs(packageName); - } - - @Override - public File[] buildExternalStorageAppFilesDirs(String packageName) { - return mBase.buildExternalStorageAppFilesDirs(packageName); - } - - @Override - public File[] buildExternalStorageAppCacheDirs(String packageName) { - return mBase.buildExternalStorageAppCacheDirs(packageName); - } -} \ No newline at end of file diff --git a/library/src/main/java/top/trumeet/redirectstorage/wrapper/WrapperKK.java b/library/src/main/java/top/trumeet/redirectstorage/wrapper/WrapperKK.java new file mode 100644 index 0000000..58d1d65 --- /dev/null +++ b/library/src/main/java/top/trumeet/redirectstorage/wrapper/WrapperKK.java @@ -0,0 +1,102 @@ +package top.trumeet.redirectstorage.wrapper; + +import android.annotation.TargetApi; +import android.os.Build; +import android.os.Environment; + +import java.io.File; + +/** + * Created by Trumeet on 2017/9/15. + * @author Trumeet + */ + +@TargetApi(Build.VERSION_CODES.KITKAT) +class WrapperKK extends AbstractWrapper { + WrapperKK(Environment.UserEnvironment ue, int userId, String customPath) { + super(ue, userId, customPath); + } + + @Override + public File getRealExternalStorageDirectory() { + return null; + } + + private File convert (File dir) { + if (!mEnable) + return dir; + return new File(convertDirs(dir)[0].getAbsolutePath()); + } + + private File[] convert (File[] dirs) { + if (!mEnable) + return dirs; + return convertDirs(dirs); + } + + @Deprecated + public File getExternalStorageDirectory() { + return convert(mBase.getExternalStorageDirectory()); + } + + @Deprecated + public File getExternalStoragePublicDirectory(String type) { + return buildExternalStoragePublicDirs(type)[0]; + } + + public File[] getExternalDirsForVold() { + return convert(mBase.getExternalDirsForVold()); + } + + public File[] getExternalDirsForApp() { + return convert(mBase.getExternalDirsForApp()); + } + + public File getMediaDir() { + return convert(mBase.getMediaDir()); + } + + public File[] buildExternalStoragePublicDirs(String type) { + return convert(mBase.buildExternalStoragePublicDirs(type)); + } + + public File[] buildExternalStorageAndroidDataDirs() { + return convert(mBase.buildExternalStorageAndroidDataDirs()); + } + + public File[] buildExternalStorageAndroidObbDirs() { + return convert(mBase.buildExternalStorageAndroidObbDirs()); + } + + public File[] buildExternalStorageAppDataDirs(String packageName) { + return convert(mBase.buildExternalStorageAppDataDirs(packageName)); + } + + public File[] buildExternalStorageAppDataDirsForVold(String packageName) { + return convert(mBase.buildExternalStorageAppDataDirsForVold(packageName)); + } + + public File[] buildExternalStorageAppMediaDirs(String packageName) { + return convert(mBase.buildExternalStorageAppMediaDirs(packageName)); + } + + public File[] buildExternalStorageAppMediaDirsForVold(String packageName) { + return convert(mBase.buildExternalStorageAppMediaDirsForVold(packageName)); + } + + public File[] buildExternalStorageAppObbDirs(String packageName) { + return convert(mBase.buildExternalStorageAppObbDirs(packageName)); + } + + public File[] buildExternalStorageAppObbDirsForVold(String packageName) { + return convert(mBase.buildExternalStorageAppObbDirsForVold(packageName)); + } + + public File[] buildExternalStorageAppFilesDirs(String packageName) { + return convert(mBase.buildExternalStorageAppFilesDirs(packageName)); + } + + public File[] buildExternalStorageAppCacheDirs(String packageName) { + return convert(mBase.buildExternalStorageAppCacheDirs(packageName)); + } +} diff --git a/library/src/main/java/top/trumeet/redirectstorage/wrapper/WrapperMM.java b/library/src/main/java/top/trumeet/redirectstorage/wrapper/WrapperMM.java new file mode 100644 index 0000000..bc6a698 --- /dev/null +++ b/library/src/main/java/top/trumeet/redirectstorage/wrapper/WrapperMM.java @@ -0,0 +1,86 @@ +package top.trumeet.redirectstorage.wrapper; + +import android.annotation.TargetApi; +import android.os.Build; +import android.os.Environment; + +import java.io.File; + +/** + * Created by Trumeet on 2017/9/15. + * Wrapper for marshmallow+ + */ + +@TargetApi(Build.VERSION_CODES.M) +class WrapperMM extends AbstractWrapper { + + WrapperMM(Environment.UserEnvironment ue, int userId, String customPath) { + super(ue, userId, customPath); + } + + @Override + public File[] getExternalDirs() { + return buildExternalDirs(mEnable); + } + + private File[] buildExternalDirs (boolean mEnable) { + File[] dirs = mBase.getExternalDirs(); + if (!mEnable) + return dirs; + return convertDirs(dirs); + } + + public File getRealExternalStorageDirectory () { + return buildExternalDirs(false)[0]; + } + + @Override + public File getExternalStorageDirectory() { + return mBase.getExternalStorageDirectory(); + } + + @Override + public File getExternalStoragePublicDirectory(String type) { + return mBase.getExternalStoragePublicDirectory(type); + } + + @Override + public File[] buildExternalStoragePublicDirs(String type) { + return mBase.buildExternalStoragePublicDirs(type); + } + + @Override + public File[] buildExternalStorageAndroidDataDirs() { + return mBase.buildExternalStorageAndroidDataDirs(); + } + + @Override + public File[] buildExternalStorageAndroidObbDirs() { + return mBase.buildExternalStorageAndroidObbDirs(); + } + + @Override + public File[] buildExternalStorageAppDataDirs(String packageName) { + return mBase.buildExternalStorageAppDataDirs(packageName); + } + + @Override + public File[] buildExternalStorageAppMediaDirs(String packageName) { + return mBase.buildExternalStorageAppMediaDirs(packageName); + } + + @Override + public File[] buildExternalStorageAppObbDirs(String packageName) { + return mBase.buildExternalStorageAppObbDirs(packageName); + } + + @Override + public File[] buildExternalStorageAppFilesDirs(String packageName) { + return mBase.buildExternalStorageAppFilesDirs(packageName); + } + + @Override + public File[] buildExternalStorageAppCacheDirs(String packageName) { + return mBase.buildExternalStorageAppCacheDirs(packageName); + } +} \ No newline at end of file -- cgit v1.2.3