diff --git a/TODO.fileManager b/TODO.fileManager index 69f36e3b3..50c83c0a2 100644 --- a/TODO.fileManager +++ b/TODO.fileManager @@ -8,5 +8,6 @@ VR: NP: DONE Локализовать все сообщения * Отдельная иконка для архивов + * Отдельная иконка для каталогов, к которым нет доступа (?) -- с замочком на папке DONE Архивы в архивах - * filesystem: return special result (exception?) if directory is not readable + DONE filesystem: return special result (exception?) if directory is not readable diff --git a/assets/resources/application/cs.xml b/assets/resources/application/cs.xml index bbba2acb6..c999cd46a 100644 --- a/assets/resources/application/cs.xml +++ b/assets/resources/application/cs.xml @@ -41,7 +41,6 @@ - @@ -538,6 +537,7 @@ + diff --git a/assets/resources/application/de.xml b/assets/resources/application/de.xml index cee461a43..8228dee94 100644 --- a/assets/resources/application/de.xml +++ b/assets/resources/application/de.xml @@ -42,7 +42,6 @@ - @@ -539,6 +538,7 @@ + diff --git a/assets/resources/application/en.xml b/assets/resources/application/en.xml index 802fee258..d494be59a 100644 --- a/assets/resources/application/en.xml +++ b/assets/resources/application/en.xml @@ -40,7 +40,6 @@ - @@ -540,6 +539,7 @@ + diff --git a/assets/resources/application/fr.xml b/assets/resources/application/fr.xml index 7db195526..74b88fc23 100644 --- a/assets/resources/application/fr.xml +++ b/assets/resources/application/fr.xml @@ -44,7 +44,6 @@ - @@ -541,6 +540,7 @@ + diff --git a/assets/resources/application/hu.xml b/assets/resources/application/hu.xml index 1cff7147c..6beab5ba9 100644 --- a/assets/resources/application/hu.xml +++ b/assets/resources/application/hu.xml @@ -41,7 +41,6 @@ - @@ -538,6 +537,7 @@ + diff --git a/assets/resources/application/it.xml b/assets/resources/application/it.xml index bae200956..f0a6be9e6 100644 --- a/assets/resources/application/it.xml +++ b/assets/resources/application/it.xml @@ -41,7 +41,6 @@ - @@ -538,6 +537,7 @@ + diff --git a/assets/resources/application/ru.xml b/assets/resources/application/ru.xml index b2c59b274..583efb994 100644 --- a/assets/resources/application/ru.xml +++ b/assets/resources/application/ru.xml @@ -40,7 +40,6 @@ - @@ -540,6 +539,7 @@ + diff --git a/assets/resources/application/uk.xml b/assets/resources/application/uk.xml index e5bad3f0a..3b160595f 100644 --- a/assets/resources/application/uk.xml +++ b/assets/resources/application/uk.xml @@ -41,7 +41,6 @@ - @@ -538,6 +537,7 @@ + diff --git a/assets/resources/application/vi.xml b/assets/resources/application/vi.xml index 897cee1f6..5623e8522 100644 --- a/assets/resources/application/vi.xml +++ b/assets/resources/application/vi.xml @@ -41,7 +41,6 @@ - @@ -538,6 +537,7 @@ + diff --git a/assets/resources/application/zh.xml b/assets/resources/application/zh.xml index 0ad68dc97..8eeb9df85 100644 --- a/assets/resources/application/zh.xml +++ b/assets/resources/application/zh.xml @@ -41,7 +41,6 @@ - @@ -538,6 +537,7 @@ + diff --git a/src/org/geometerplus/android/fbreader/SearchActivity.java b/src/org/geometerplus/android/fbreader/SearchActivity.java index 4605f9df8..a6c5966a6 100644 --- a/src/org/geometerplus/android/fbreader/SearchActivity.java +++ b/src/org/geometerplus/android/fbreader/SearchActivity.java @@ -22,7 +22,6 @@ package org.geometerplus.android.fbreader; import android.os.*; import android.app.*; import android.content.Intent; -import android.widget.Toast; import org.geometerplus.zlibrary.core.resources.ZLResource; @@ -48,13 +47,7 @@ public abstract class SearchActivity extends Activity { }; final Handler failureHandler = new Handler() { public void handleMessage(Message message) { - Toast.makeText( - getParentActivity(), - ZLResource.resource("errorMessage").getResource( - getFailureMessageResourceKey() - ).getValue(), - Toast.LENGTH_SHORT - ).show(); + UIUtil.showErrorMessage(getParentActivity(), getFailureMessageResourceKey()); } }; final Runnable runnable = new Runnable() { diff --git a/src/org/geometerplus/android/fbreader/library/FileManager.java b/src/org/geometerplus/android/fbreader/library/FileManager.java index 5c37a540c..646699188 100644 --- a/src/org/geometerplus/android/fbreader/library/FileManager.java +++ b/src/org/geometerplus/android/fbreader/library/FileManager.java @@ -298,34 +298,31 @@ public final class FileManager extends BaseActivity { } public void run() { - try { - for (ZLFile file : myFile.children()) { - if (Thread.currentThread().isInterrupted()) { - break; - } - if (file.isDirectory() || - file.isArchive() || - PluginCollection.Instance().getPlugin(file) != null) { - final FileListAdapter adapter = (FileListAdapter)getListAdapter(); - adapter.add(new FileItem(file)); -// adapter.notifyDataSetChanged(); // TODO question! - runOnUiThread(new Runnable() { - public void run() { - adapter.notifyDataSetChanged(); - } - }); - } - } - } catch (Exception e) { + if (!myFile.isReadable()) { runOnUiThread(new Runnable() { public void run() { - Toast.makeText(FileManager.this, - myResource.getResource("permissionDenied").getValue(), - Toast.LENGTH_SHORT - ).show(); + UIUtil.showErrorMessage(FileManager.this, "permissionDenied"); } }); finish(); + return; + } + + for (ZLFile file : myFile.children()) { + if (Thread.currentThread().isInterrupted()) { + break; + } + if (file.isDirectory() || file.isArchive() || + PluginCollection.Instance().getPlugin(file) != null) { + final FileListAdapter adapter = (FileListAdapter)getListAdapter(); + adapter.add(new FileItem(file)); +// adapter.notifyDataSetChanged(); // TODO question! + runOnUiThread(new Runnable() { + public void run() { + adapter.notifyDataSetChanged(); + } + }); + } } } } diff --git a/src/org/geometerplus/android/fbreader/library/LibraryBaseActivity.java b/src/org/geometerplus/android/fbreader/library/LibraryBaseActivity.java index 43d6e3487..d9afa5947 100644 --- a/src/org/geometerplus/android/fbreader/library/LibraryBaseActivity.java +++ b/src/org/geometerplus/android/fbreader/library/LibraryBaseActivity.java @@ -82,11 +82,7 @@ abstract class LibraryBaseActivity extends BaseActivity { } protected void showNotFoundToast() { - Toast.makeText( - this, - ZLResource.resource("errorMessage").getResource("bookNotFound").getValue(), - Toast.LENGTH_SHORT - ).show(); + UIUtil.showErrorMessage(this, "bookNotFound"); } protected final class LibraryAdapter extends BaseAdapter implements View.OnCreateContextMenuListener { diff --git a/src/org/geometerplus/android/util/UIUtil.java b/src/org/geometerplus/android/util/UIUtil.java index ac7adf4b9..6325cbc83 100644 --- a/src/org/geometerplus/android/util/UIUtil.java +++ b/src/org/geometerplus/android/util/UIUtil.java @@ -26,6 +26,7 @@ import android.content.Context; import android.app.ProgressDialog; import android.os.Handler; import android.os.Message; +import android.widget.Toast; import org.geometerplus.zlibrary.core.resources.ZLResource; @@ -108,4 +109,12 @@ public abstract class UIUtil { runner.setPriority(Thread.MIN_PRIORITY); runner.start(); } + + public static void showErrorMessage(Context context, String resourceKey) { + Toast.makeText( + context, + ZLResource.resource("errorMessage").getResource(resourceKey).getValue(), + Toast.LENGTH_SHORT + ).show(); + } } diff --git a/src/org/geometerplus/zlibrary/core/filesystem/ZLFile.java b/src/org/geometerplus/zlibrary/core/filesystem/ZLFile.java index 2f31e3f88..47ec14591 100644 --- a/src/org/geometerplus/zlibrary/core/filesystem/ZLFile.java +++ b/src/org/geometerplus/zlibrary/core/filesystem/ZLFile.java @@ -132,6 +132,10 @@ public abstract class ZLFile { public abstract ZLPhysicalFile getPhysicalFile(); public abstract InputStream getInputStream() throws IOException; + public boolean isReadable() { + return true; + } + public final boolean isCompressed() { return (0 != (myArchiveType & ArchiveType.COMPRESSED)); } diff --git a/src/org/geometerplus/zlibrary/core/filesystem/ZLPhysicalFile.java b/src/org/geometerplus/zlibrary/core/filesystem/ZLPhysicalFile.java index eb768d253..d0c557972 100644 --- a/src/org/geometerplus/zlibrary/core/filesystem/ZLPhysicalFile.java +++ b/src/org/geometerplus/zlibrary/core/filesystem/ZLPhysicalFile.java @@ -49,6 +49,11 @@ public final class ZLPhysicalFile extends ZLFile { return myFile.isDirectory(); } + @Override + public boolean isReadable() { + return myFile.canRead(); + } + public boolean delete() { return myFile.delete(); }