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="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>

View File

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

View File

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