mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-08-04 03:06:41 -04:00
More marshmallow permission support
This commit is contained in:
parent
aa2318d161
commit
e4351d696b
@ -56,6 +56,5 @@
|
|||||||
<string name="no_bookmarks">No bookmarks!</string>
|
<string name="no_bookmarks">No bookmarks!</string>
|
||||||
<string name="menu_bookmarks_list">Bookmarks</string>
|
<string name="menu_bookmarks_list">Bookmarks</string>
|
||||||
<string name="no_section_info">No Content Headers Found</string>
|
<string name="no_section_info">No Content Headers Found</string>
|
||||||
<string name="request_storage">To search for zim files we need access to your storage</string>
|
<string name="request_storage">To access zim files we need access to your storage</string>
|
||||||
<string name="request_storage_title">Warning</string>
|
|
||||||
</resources>
|
</resources>
|
@ -19,12 +19,14 @@
|
|||||||
|
|
||||||
package org.kiwix.kiwixmobile;
|
package org.kiwix.kiwixmobile;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.ActivityNotFoundException;
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuff;
|
||||||
@ -37,6 +39,8 @@ import android.os.Handler;
|
|||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.support.design.widget.Snackbar;
|
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.view.GravityCompat;
|
||||||
import android.support.v4.widget.DrawerLayout;
|
import android.support.v4.widget.DrawerLayout;
|
||||||
import android.support.v7.app.ActionBarDrawerToggle;
|
import android.support.v7.app.ActionBarDrawerToggle;
|
||||||
@ -74,7 +78,17 @@ import android.widget.ListView;
|
|||||||
import android.widget.RelativeLayout;
|
import android.widget.RelativeLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
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.json.JSONArray;
|
||||||
import org.kiwix.kiwixmobile.settings.Constants;
|
import org.kiwix.kiwixmobile.settings.Constants;
|
||||||
import org.kiwix.kiwixmobile.settings.KiwixSettingsActivity;
|
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.CompatFindActionModeCallback;
|
||||||
import org.kiwix.kiwixmobile.views.KiwixWebView;
|
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 class KiwixMobileActivity extends AppCompatActivity {
|
||||||
|
|
||||||
public static final String TAG_KIWIX = "kiwix";
|
public static final String TAG_KIWIX = "kiwix";
|
||||||
@ -199,6 +201,8 @@ public class KiwixMobileActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
private AnimatedProgressBar mProgressBar;
|
private AnimatedProgressBar mProgressBar;
|
||||||
|
|
||||||
|
private File mFile;
|
||||||
|
|
||||||
// Initialized when onActionModeStarted is triggered.
|
// Initialized when onActionModeStarted is triggered.
|
||||||
private ActionMode mActionMode = null;
|
private ActionMode mActionMode = null;
|
||||||
|
|
||||||
@ -816,41 +820,72 @@ public class KiwixMobileActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean openZimFile(File file, boolean clearHistory) {
|
public boolean openZimFile(File file, boolean clearHistory) {
|
||||||
if (file.exists()) {
|
if (ContextCompat.checkSelfPermission(this,
|
||||||
if (ZimContentProvider.setZimFile(file.getAbsolutePath()) != null) {
|
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)
|
// Apparently with webView.clearHistory() only history before currently (fully)
|
||||||
// loaded page is cleared -> request clear, actual clear done after load.
|
// loaded page is cleared -> request clear, actual clear done after load.
|
||||||
// Probably not working in all corners (e.g. zim file openend
|
// Probably not working in all corners (e.g. zim file openend
|
||||||
// while load in progress, mainpage of new zim file invalid, ...
|
// while load in progress, mainpage of new zim file invalid, ...
|
||||||
// but should be good enough.
|
// but should be good enough.
|
||||||
// Actually probably redundant if no zim file openend before in session,
|
// Actually probably redundant if no zim file openend before in session,
|
||||||
// but to be on save side don't clear history in such cases.
|
// but to be on save side don't clear history in such cases.
|
||||||
if (clearHistory) {
|
if (clearHistory) {
|
||||||
requestClearHistoryAfterLoad = true;
|
requestClearHistoryAfterLoad = true;
|
||||||
}
|
}
|
||||||
if (menu != null) {
|
if (menu != null) {
|
||||||
initAllMenuItems();
|
initAllMenuItems();
|
||||||
|
} else {
|
||||||
|
// Menu may not be initialized yet. In this case
|
||||||
|
// signal to menu create to show
|
||||||
|
requestInitAllMenuItems = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
openMainPage();
|
||||||
|
refreshBookmarks();
|
||||||
|
return true;
|
||||||
} else {
|
} else {
|
||||||
// Menu may not be initialized yet. In this case
|
Toast.makeText(this, getResources().getString(R.string.error_fileinvalid),
|
||||||
// signal to menu create to show
|
Toast.LENGTH_LONG).show();
|
||||||
requestInitAllMenuItems = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
openMainPage();
|
|
||||||
refreshBookmarks();
|
|
||||||
return true;
|
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(this, getResources().getString(R.string.error_fileinvalid),
|
Log.e(TAG_KIWIX, "ZIM file doesn't exist at " + file.getAbsolutePath());
|
||||||
Toast.LENGTH_LONG).show();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
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();
|
.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() {
|
private void initAllMenuItems() {
|
||||||
|
@ -35,7 +35,6 @@ import android.support.v4.content.ContextCompat;
|
|||||||
import android.support.v4.content.CursorLoader;
|
import android.support.v4.content.CursorLoader;
|
||||||
import android.support.v4.content.Loader;
|
import android.support.v4.content.Loader;
|
||||||
import android.support.v4.widget.SimpleCursorAdapter;
|
import android.support.v4.widget.SimpleCursorAdapter;
|
||||||
import android.support.v7.app.AlertDialog;
|
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@ -52,6 +51,7 @@ import android.widget.ArrayAdapter;
|
|||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -112,13 +112,34 @@ public class ZimFileSelectActivity extends AppCompatActivity
|
|||||||
|
|
||||||
public void checkPermissions(){
|
public void checkPermissions(){
|
||||||
if (ContextCompat.checkSelfPermission(this,
|
if (ContextCompat.checkSelfPermission(this,
|
||||||
Manifest.permission.READ_CONTACTS)
|
Manifest.permission.READ_EXTERNAL_STORAGE)
|
||||||
!= PackageManager.PERMISSION_GRANTED) {
|
!= PackageManager.PERMISSION_GRANTED) {
|
||||||
|
Toast.makeText(this, getResources().getString(R.string.request_storage), Toast.LENGTH_LONG)
|
||||||
|
.show();
|
||||||
ActivityCompat.requestPermissions(this,
|
ActivityCompat.requestPermissions(this,
|
||||||
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
|
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
|
||||||
KiwixMobileActivity.REQUEST_STORAGE_PERMISSION);
|
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: {
|
case KiwixMobileActivity.REQUEST_STORAGE_PERMISSION: {
|
||||||
if (grantResults.length > 0
|
if (grantResults.length > 0
|
||||||
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||||
|
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user