diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4f45e58f4..eb4d6da58 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -56,6 +56,5 @@
No bookmarks!
Bookmarks
No Content Headers Found
- To search for zim files we need access to your storage
- Warning
+ To access zim files we need access to your storage
\ No newline at end of file
diff --git a/src/org/kiwix/kiwixmobile/KiwixMobileActivity.java b/src/org/kiwix/kiwixmobile/KiwixMobileActivity.java
index a030bdfa7..e11f883b5 100644
--- a/src/org/kiwix/kiwixmobile/KiwixMobileActivity.java
+++ b/src/org/kiwix/kiwixmobile/KiwixMobileActivity.java
@@ -19,12 +19,14 @@
package org.kiwix.kiwixmobile;
+import android.Manifest;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.graphics.Color;
import android.graphics.PorterDuff;
@@ -37,6 +39,8 @@ import android.os.Handler;
import android.os.Looper;
import android.preference.PreferenceManager;
import android.support.design.widget.Snackbar;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.content.ContextCompat;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
@@ -74,7 +78,17 @@ import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
-
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
import org.json.JSONArray;
import org.kiwix.kiwixmobile.settings.Constants;
import org.kiwix.kiwixmobile.settings.KiwixSettingsActivity;
@@ -89,18 +103,6 @@ import org.kiwix.kiwixmobile.views.BookmarksActivity;
import org.kiwix.kiwixmobile.views.CompatFindActionModeCallback;
import org.kiwix.kiwixmobile.views.KiwixWebView;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-
public class KiwixMobileActivity extends AppCompatActivity {
public static final String TAG_KIWIX = "kiwix";
@@ -199,6 +201,8 @@ public class KiwixMobileActivity extends AppCompatActivity {
private AnimatedProgressBar mProgressBar;
+ private File mFile;
+
// Initialized when onActionModeStarted is triggered.
private ActionMode mActionMode = null;
@@ -816,41 +820,72 @@ public class KiwixMobileActivity extends AppCompatActivity {
}
public boolean openZimFile(File file, boolean clearHistory) {
- if (file.exists()) {
- if (ZimContentProvider.setZimFile(file.getAbsolutePath()) != null) {
+ if (ContextCompat.checkSelfPermission(this,
+ Manifest.permission.READ_EXTERNAL_STORAGE)
+ == PackageManager.PERMISSION_GRANTED) {
+ if (file.exists()) {
+ if (ZimContentProvider.setZimFile(file.getAbsolutePath()) != null) {
- // Apparently with webView.clearHistory() only history before currently (fully)
- // loaded page is cleared -> request clear, actual clear done after load.
- // Probably not working in all corners (e.g. zim file openend
- // while load in progress, mainpage of new zim file invalid, ...
- // but should be good enough.
- // Actually probably redundant if no zim file openend before in session,
- // but to be on save side don't clear history in such cases.
- if (clearHistory) {
- requestClearHistoryAfterLoad = true;
- }
- if (menu != null) {
- initAllMenuItems();
+ // Apparently with webView.clearHistory() only history before currently (fully)
+ // loaded page is cleared -> request clear, actual clear done after load.
+ // Probably not working in all corners (e.g. zim file openend
+ // while load in progress, mainpage of new zim file invalid, ...
+ // but should be good enough.
+ // Actually probably redundant if no zim file openend before in session,
+ // but to be on save side don't clear history in such cases.
+ if (clearHistory) {
+ requestClearHistoryAfterLoad = true;
+ }
+ if (menu != null) {
+ initAllMenuItems();
+ } else {
+ // Menu may not be initialized yet. In this case
+ // signal to menu create to show
+ requestInitAllMenuItems = true;
+ }
+
+ openMainPage();
+ refreshBookmarks();
+ return true;
} else {
- // Menu may not be initialized yet. In this case
- // signal to menu create to show
- requestInitAllMenuItems = true;
+ Toast.makeText(this, getResources().getString(R.string.error_fileinvalid),
+ Toast.LENGTH_LONG).show();
}
-
- openMainPage();
- refreshBookmarks();
- return true;
} else {
- Toast.makeText(this, getResources().getString(R.string.error_fileinvalid),
- Toast.LENGTH_LONG).show();
- }
- } else {
- Log.e(TAG_KIWIX, "ZIM file doesn't exist at " + file.getAbsolutePath());
+ Log.e(TAG_KIWIX, "ZIM file doesn't exist at " + file.getAbsolutePath());
- Toast.makeText(this, getResources().getString(R.string.error_filenotfound), Toast.LENGTH_LONG)
+ Toast.makeText(this, getResources().getString(R.string.error_filenotfound), Toast.LENGTH_LONG)
+ .show();
+ }
+ return false;
+ } else {
+ mFile = file;
+ ActivityCompat.requestPermissions(this,
+ new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
+ KiwixMobileActivity.REQUEST_STORAGE_PERMISSION);
+ Toast.makeText(this, getResources().getString(R.string.request_storage), Toast.LENGTH_LONG)
.show();
+ return false;
+ }
+ }
+ @Override
+ public void onRequestPermissionsResult(int requestCode,
+ String permissions[], int[] grantResults) {
+ switch (requestCode) {
+ case KiwixMobileActivity.REQUEST_STORAGE_PERMISSION: {
+ if (grantResults.length > 0
+ && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ finish();
+ Intent newZimFile = new Intent(KiwixMobileActivity.this, KiwixMobileActivity.class);
+ newZimFile.setData(Uri.fromFile(mFile));
+ startActivity(newZimFile);
+ } else {
+ finish();
+ }
+ return;
+ }
+
}
- return false;
}
private void initAllMenuItems() {
diff --git a/src/org/kiwix/kiwixmobile/ZimFileSelectActivity.java b/src/org/kiwix/kiwixmobile/ZimFileSelectActivity.java
index 4f1c6d336..722533c5a 100644
--- a/src/org/kiwix/kiwixmobile/ZimFileSelectActivity.java
+++ b/src/org/kiwix/kiwixmobile/ZimFileSelectActivity.java
@@ -35,7 +35,6 @@ import android.support.v4.content.ContextCompat;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.SimpleCursorAdapter;
-import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
@@ -52,6 +51,7 @@ import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
+import android.widget.Toast;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
@@ -112,13 +112,34 @@ public class ZimFileSelectActivity extends AppCompatActivity
public void checkPermissions(){
if (ContextCompat.checkSelfPermission(this,
- Manifest.permission.READ_CONTACTS)
+ Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
-
+ Toast.makeText(this, getResources().getString(R.string.request_storage), Toast.LENGTH_LONG)
+ .show();
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
KiwixMobileActivity.REQUEST_STORAGE_PERMISSION);
+ } else {
+ getFiles();
+ }
+ }
+
+ public void getFiles(){
+
+ mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
+ mProgressBarMessage = (TextView) findViewById(R.id.progressbar_message);
+ mZimFileList = (ListView) findViewById(R.id.zimfilelist);
+
+ mZimFileList.setOnItemClickListener(this);
+
+ mProgressBar.setVisibility(View.VISIBLE);
+ setAlpha(true);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
+ startQuery();
+ } else {
+ new RescanFileSystem().execute();
}
}
@@ -129,23 +150,7 @@ public class ZimFileSelectActivity extends AppCompatActivity
case KiwixMobileActivity.REQUEST_STORAGE_PERMISSION: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
-
-
- mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
- mProgressBarMessage = (TextView) findViewById(R.id.progressbar_message);
- mZimFileList = (ListView) findViewById(R.id.zimfilelist);
-
- mZimFileList.setOnItemClickListener(this);
-
- mProgressBar.setVisibility(View.VISIBLE);
- setAlpha(true);
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
- startQuery();
- } else {
- new RescanFileSystem().execute();
- }
-
+ getFiles();
} else {
finish();
}