More marshmallow permission support

This commit is contained in:
mhutti1 2016-04-06 22:31:24 +01:00
parent aa2318d161
commit e4351d696b
3 changed files with 102 additions and 63 deletions

View File

@ -56,6 +56,5 @@
<string name="no_bookmarks">No bookmarks!</string>
<string name="menu_bookmarks_list">Bookmarks</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_title">Warning</string>
<string name="request_storage">To access zim files we need access to your storage</string>
</resources>

View File

@ -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() {

View File

@ -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();
}