diff --git a/project/java/Settings.java b/project/java/Settings.java index 99ae3a77d..b7b35278e 100644 --- a/project/java/Settings.java +++ b/project/java/Settings.java @@ -425,7 +425,7 @@ class Settings Globals.DownloadToSdcard = false; } Globals.DataDir = Globals.DownloadToSdcard ? - SdcardAppPath.getBestPath(p) : + SdcardAppPath.get().bestPath(p) : p.getFilesDir().getAbsolutePath(); if( Globals.DownloadToSdcard ) { @@ -436,11 +436,11 @@ class Settings if( s.toUpperCase().startsWith(DataDownloader.DOWNLOAD_FLAG_FILENAME.toUpperCase()) ) Globals.DataDir = SdcardAppPath.deprecatedPath(p); // Also check for pre-Kitkat files location - fileList = new File(SdcardAppPath.getPath(p)).list(); + fileList = new File(SdcardAppPath.get().path(p)).list(); if( fileList != null ) for( String s: fileList ) if( s.toUpperCase().startsWith(DataDownloader.DOWNLOAD_FLAG_FILENAME.toUpperCase()) ) - Globals.DataDir = SdcardAppPath.getPath(p); + Globals.DataDir = SdcardAppPath.get().path(p); try { new File(Globals.DataDir).mkdirs(); @@ -464,30 +464,34 @@ class Settings public static boolean deleteRecursively(File dir) { + boolean success = true; if (dir.isDirectory()) { String[] children = dir.list(); for (int i=0; i= android.os.Build.VERSION_CODES.KITKAT) return Kitkat.Holder.sInstance; - else if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.FROYO) - return Froyo.Holder.sInstance; else - return Dummy.Holder.sInstance; + return Froyo.Holder.sInstance; } - public abstract String path(final Context p); - private void setEnvInternal(final Context p) + public String path(final Context p) { - nativeSetEnv( "UNSECURE_STORAGE_DIR_0", Globals.DataDir ); + return get().path(p); } - public static void setEnv(final Context p) + public void setEnv(final Context p) { - get().setEnvInternal(p); + get().setEnv(p); } public String bestPath(final Context p) { - return path(p); + return get().bestPath(p); }; - public static String deprecatedPath(final Context p) + public String[] allPaths(final Context p) + { + return get().allPaths(p); + }; + public static final String deprecatedPath(final Context p) { return Environment.getExternalStorageDirectory().getAbsolutePath() + "/app-data/" + p.getPackageName(); } - public static String getPath(final Context p) - { - try { - return get().path(p); - } catch(Exception e) { } - return Dummy.Holder.sInstance.path(p); - } - public static String getBestPath(final Context p) - { - try { - return get().bestPath(p); - } catch(Exception e) { } - return Dummy.Holder.sInstance.path(p); - } private static class Froyo extends SdcardAppPath { @@ -780,10 +770,26 @@ class Settings { private static final Froyo sInstance = new Froyo(); } + @Override public String path(final Context p) { return p.getExternalFilesDir(null).getAbsolutePath(); } + @Override + public void setEnv(final Context p) + { + nativeSetEnv( "UNSECURE_STORAGE_DIR_0", Globals.DataDir ); + } + @Override + public String bestPath(final Context p) + { + return path(p); + } + @Override + public String[] allPaths(final Context p) + { + return new String[] { path(p), deprecatedPath(p) }; + } } private static class Kitkat extends Froyo { @@ -791,6 +797,7 @@ class Settings { private static final Kitkat sInstance = new Kitkat(); } + @Override public String bestPath(final Context p) { File[] paths = p.getExternalFilesDirs(null); @@ -818,7 +825,8 @@ class Settings } return ret; }; - public void setEnvInternal(final Context p) + @Override + public void setEnv(final Context p) { File[] paths = p.getExternalFilesDirs(null); int index = 0; @@ -832,16 +840,24 @@ class Settings index++; } } - } - private static class Dummy extends SdcardAppPath - { - private static class Holder + @Override + public String[] allPaths(final Context p) { - private static final Dummy sInstance = new Dummy(); - } - public String path(final Context p) - { - return Environment.getExternalStorageDirectory().getAbsolutePath() + "/Android/data/" + p.getPackageName() + "/files"; + ArrayList ret = new ArrayList(); + for( File path: p.getExternalFilesDirs(null) ) + { + if( path == null ) + continue; + try { + path.mkdirs(); + new FileOutputStream( new File(path, ".nomedia") ).close(); + } catch (Exception e) { + continue; + } + ret.add(path.getAbsolutePath()); + } + ret.add(deprecatedPath(p)); + return ret.toArray(new String[0]); } } } diff --git a/project/java/SettingsMenuMisc.java b/project/java/SettingsMenuMisc.java index 403f6d2bb..275f34f28 100644 --- a/project/java/SettingsMenuMisc.java +++ b/project/java/SettingsMenuMisc.java @@ -91,8 +91,8 @@ class SettingsMenuMisc extends SettingsMenu long freePhone = 0; try { - StatFs sdcard = new StatFs(Environment.getExternalStorageDirectory().getPath()); - StatFs phone = new StatFs(Environment.getDataDirectory().getPath()); + StatFs sdcard = new StatFs(Settings.SdcardAppPath.get().bestPath(p)); + StatFs phone = new StatFs(p.getFilesDir().getAbsolutePath()); freeSdcard = (long)sdcard.getAvailableBlocks() * sdcard.getBlockSize() / 1024 / 1024; freePhone = (long)phone.getAvailableBlocks() * phone.getBlockSize() / 1024 / 1024; } @@ -115,7 +115,7 @@ class SettingsMenuMisc extends SettingsMenu { Globals.DownloadToSdcard = (item != 0); Globals.DataDir = Globals.DownloadToSdcard ? - Settings.SdcardAppPath.getPath(p) : + Settings.SdcardAppPath.get().bestPath(p) : p.getFilesDir().getAbsolutePath(); goBack(p); } diff --git a/project/jni/application/openarena/AndroidAppSettings.cfg b/project/jni/application/openarena/AndroidAppSettings.cfg index 5a722ea32..9c3f62f04 100644 --- a/project/jni/application/openarena/AndroidAppSettings.cfg +++ b/project/jni/application/openarena/AndroidAppSettings.cfg @@ -7,10 +7,10 @@ AppName="OpenArena" AppFullName=ws.openarena.sdl # Application version code (integer) -AppVersionCode=08833 +AppVersionCode=08834 # Application user-visible version name (string) -AppVersionName="0.8.8.33" +AppVersionName="0.8.8.34" # Specify path to download application data in zip archive in the form 'Description|URL|MirrorURL^Description2|URL2|MirrorURL2^...' # If you'll start Description with '!' symbol it will be enabled by default, other downloads should be selected by user from startup config menu