diff --git a/jni/NativeFormats/fbreader/src/library/Library.cpp b/jni/NativeFormats/fbreader/src/library/Library.cpp index 60018eae0cc..75d0b35bdac 100644 --- a/jni/NativeFormats/fbreader/src/library/Library.cpp +++ b/jni/NativeFormats/fbreader/src/library/Library.cpp @@ -39,7 +39,7 @@ Library::~Library() { std::string Library::cacheDirectory() const { JNIEnv *env = AndroidUtil::getEnv(); - jstring res = (jstring)AndroidUtil::StaticMethod_Paths_cacheDirectory->call(); + jstring res = (jstring)AndroidUtil::StaticMethod_Paths_tempDirectory->call(); std::string str = AndroidUtil::fromJavaString(env, res); if (res != 0) { env->DeleteLocalRef(res); diff --git a/jni/NativeFormats/util/AndroidUtil.cpp b/jni/NativeFormats/util/AndroidUtil.cpp index 9b067e29892..1f71c70ee32 100644 --- a/jni/NativeFormats/util/AndroidUtil.cpp +++ b/jni/NativeFormats/util/AndroidUtil.cpp @@ -101,7 +101,7 @@ shared_ptr AndroidUtil::Constructor_FileEncryptionInfo; shared_ptr AndroidUtil::Constructor_ZLFileImage; -shared_ptr AndroidUtil::StaticMethod_Paths_cacheDirectory; +shared_ptr AndroidUtil::StaticMethod_Paths_tempDirectory; shared_ptr AndroidUtil::Field_Book_File; shared_ptr AndroidUtil::Method_Book_getTitle; @@ -185,7 +185,7 @@ bool AndroidUtil::init(JavaVM* jvm) { Constructor_ZLFileImage = new Constructor(Class_ZLFileImage, "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;Ljava/lang/String;[I[ILorg/geometerplus/zlibrary/core/drm/FileEncryptionInfo;)V"); - StaticMethod_Paths_cacheDirectory = new StaticObjectMethod(Class_Paths, "cacheDirectory", Class_java_lang_String, "()"); + StaticMethod_Paths_tempDirectory = new StaticObjectMethod(Class_Paths, "tempDirectory", Class_java_lang_String, "()"); Field_Book_File = new ObjectField(Class_Book, "File", Class_ZLFile); Method_Book_getTitle = new StringMethod(Class_Book, "getTitle", "()"); diff --git a/jni/NativeFormats/util/AndroidUtil.h b/jni/NativeFormats/util/AndroidUtil.h index 8fe8eb8ff32..737905a6d83 100644 --- a/jni/NativeFormats/util/AndroidUtil.h +++ b/jni/NativeFormats/util/AndroidUtil.h @@ -139,7 +139,7 @@ class AndroidUtil { //static shared_ptr Method_JavaEncodingCollection_getEncoding_int; static shared_ptr Method_JavaEncodingCollection_providesConverterFor; - static shared_ptr StaticMethod_Paths_cacheDirectory; + static shared_ptr StaticMethod_Paths_tempDirectory; static shared_ptr Field_Book_File; static shared_ptr Method_Book_getTitle; diff --git a/src/org/geometerplus/android/fbreader/preferences/PreferenceActivity.java b/src/org/geometerplus/android/fbreader/preferences/PreferenceActivity.java index f3d8e30dff4..01053e8598b 100644 --- a/src/org/geometerplus/android/fbreader/preferences/PreferenceActivity.java +++ b/src/org/geometerplus/android/fbreader/preferences/PreferenceActivity.java @@ -102,6 +102,7 @@ public void run() { directoriesScreen.addPreference(new ZLStringListOptionPreference( this, Paths.WallpaperPathOption, directoriesScreen.Resource, "wallpaperPath" )); + directoriesScreen.addOption(Paths.TempDirectoryOption(), "tempDir"); final Screen appearanceScreen = createPreferenceScreen("appearance"); appearanceScreen.addPreference(new LanguagePreference( diff --git a/src/org/geometerplus/fbreader/Paths.java b/src/org/geometerplus/fbreader/Paths.java index 82ab43e23cd..23e5193067a 100644 --- a/src/org/geometerplus/fbreader/Paths.java +++ b/src/org/geometerplus/fbreader/Paths.java @@ -29,13 +29,21 @@ public abstract class Paths { public static ZLStringListOption BookPathOption = - directoryOption("BooksDirectory", defaultBookDirectory()); + pathOption("BooksDirectory", defaultBookDirectory()); public static ZLStringListOption FontPathOption = - directoryOption("FontPathOption", cardDirectory() + "/Fonts"); + pathOption("FontPathOption", cardDirectory() + "/Fonts"); public static ZLStringListOption WallpaperPathOption = - directoryOption("WallpapersDirectory", cardDirectory() + "/Wallpapers"); + pathOption("WallpapersDirectory", cardDirectory() + "/Wallpapers"); + + public static ZLStringOption TempDirectoryOption() { + final ZLStringOption option = new ZLStringOption("Files", "tmp", ""); + if (option.getValue().isEmpty()) { + option.setValue(mainBookDirectory() + "/.FBReader"); + } + return option; + } public static String cardDirectory() { if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { @@ -84,7 +92,7 @@ private static String defaultBookDirectory() { return cardDirectory() + "/Books"; } - private static ZLStringListOption directoryOption(String key, String defaultDirectory) { + private static ZLStringListOption pathOption(String key, String defaultDirectory) { final ZLStringListOption option = new ZLStringListOption( "Files", key, Collections.emptyList(), "\n" ); @@ -99,16 +107,12 @@ public static String mainBookDirectory() { return bookPath.isEmpty() ? defaultBookDirectory() : bookPath.get(0); } - public static String cacheDirectory() { - return mainBookDirectory() + "/.FBReader"; - } - public static String tempDirectory() { - return mainBookDirectory() + "/.FBReader"; + return TempDirectoryOption().getValue(); } public static String networkCacheDirectory() { - return cacheDirectory() + "/cache"; + return tempDirectory() + "/cache"; } public static String systemShareDirectory() { diff --git a/src/org/geometerplus/fbreader/bookmodel/JavaBookModel.java b/src/org/geometerplus/fbreader/bookmodel/JavaBookModel.java index 4a00df430e7..1663166c026 100644 --- a/src/org/geometerplus/fbreader/bookmodel/JavaBookModel.java +++ b/src/org/geometerplus/fbreader/bookmodel/JavaBookModel.java @@ -29,8 +29,8 @@ public class JavaBookModel extends BookModelImpl { JavaBookModel(Book book) { super(book); - myInternalHyperlinks = new CachedCharStorage(32768, Paths.cacheDirectory(), "links"); - BookTextModel = new ZLTextWritablePlainModel(null, book.getLanguage(), 1024, 65536, Paths.cacheDirectory(), "cache", myImageMap, FontManager); + myInternalHyperlinks = new CachedCharStorage(32768, Paths.tempDirectory(), "links"); + BookTextModel = new ZLTextWritablePlainModel(null, book.getLanguage(), 1024, 65536, Paths.tempDirectory(), "cache", myImageMap, FontManager); } @Override @@ -42,7 +42,7 @@ public ZLTextModel getTextModel() { public ZLTextModel getFootnoteModel(String id) { ZLTextModel model = myFootnotes.get(id); if (model == null) { - model = new ZLTextWritablePlainModel(id, Book.getLanguage(), 8, 512, Paths.cacheDirectory(), "cache" + myFootnotes.size(), myImageMap, FontManager); + model = new ZLTextWritablePlainModel(id, Book.getLanguage(), 8, 512, Paths.tempDirectory(), "cache" + myFootnotes.size(), myImageMap, FontManager); myFootnotes.put(id, model); } return model; diff --git a/src/org/geometerplus/fbreader/formats/fb2/Base64EncodedImage.java b/src/org/geometerplus/fbreader/formats/fb2/Base64EncodedImage.java index 0be0215eb0f..a9925f0362b 100644 --- a/src/org/geometerplus/fbreader/formats/fb2/Base64EncodedImage.java +++ b/src/org/geometerplus/fbreader/formats/fb2/Base64EncodedImage.java @@ -41,7 +41,7 @@ static void resetCounter() { public Base64EncodedImage(MimeType mimeType, String namePostfix) { // TODO: use contentType super(mimeType); - myDirName = Paths.cacheDirectory(); + myDirName = Paths.tempDirectory(); new File(myDirName).mkdirs(); myFileNumber = ourCounter++; myNamePostfix = namePostfix; diff --git a/src/org/geometerplus/zlibrary/ui/android/view/AndroidFontUtil.java b/src/org/geometerplus/zlibrary/ui/android/view/AndroidFontUtil.java index 603a62f7612..8707d594e88 100644 --- a/src/org/geometerplus/zlibrary/ui/android/view/AndroidFontUtil.java +++ b/src/org/geometerplus/zlibrary/ui/android/view/AndroidFontUtil.java @@ -286,6 +286,7 @@ private static Typeface getOrCreateEmbeddedTypeface(FontEntry entry, boolean bol // ignore } } + new File(realFileName).delete(); } ourCachedEmbeddedTypefaces.put(spec, cached != null ? cached : NULL_OBJECT); }