]> gitweb.fperrin.net Git - Dictionary.git/blobdiff - src/com/hughes/android/dictionary/DictionaryManagerActivity.java
Support runtime permissions.
[Dictionary.git] / src / com / hughes / android / dictionary / DictionaryManagerActivity.java
index 6741b9bfabb966e443f7e9278c498ba567eac93e..b195a9961815554bec14673af8b9be63b14a70ae 100644 (file)
@@ -14,6 +14,7 @@
 
 package com.hughes.android.dictionary;
 
+import android.Manifest;
 import android.app.AlertDialog;
 import android.app.DownloadManager;
 import android.app.DownloadManager.Request;
@@ -24,12 +25,16 @@ import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
+import android.content.pm.PackageManager;
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Environment;
 import android.os.Handler;
 import android.preference.PreferenceManager;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.content.ContextCompat;
+import android.support.v4.view.MenuItemCompat;
 import android.support.v7.app.ActionBar;
 import android.support.v7.app.ActionBarActivity;
 import android.support.v7.widget.SearchView;
@@ -42,6 +47,7 @@ import android.view.ContextMenu;
 import android.view.ContextMenu.ContextMenuInfo;
 import android.view.LayoutInflater;
 import android.view.Menu;
+import android.view.MenuItem;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
@@ -225,6 +231,38 @@ public class DictionaryManagerActivity extends ActionBarActivity {
         return intent;
     }
 
+    public void readableCheckAndError(boolean requestPermission) {
+        final File dictDir = application.getDictDir();
+        if (dictDir.canRead() && dictDir.canExecute()) return;
+        blockAutoLaunch = true;
+        if (requestPermission &&
+            ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
+            ActivityCompat.requestPermissions(this,
+                new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
+                             Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);
+            return;
+        }
+        blockAutoLaunch = true;
+
+        AlertDialog.Builder builder = new AlertDialog.Builder(getListView().getContext());
+        builder.setTitle(getString(R.string.error));
+        builder.setMessage(getString(
+                R.string.unableToReadDictionaryDir,
+                dictDir.getAbsolutePath(),
+                Environment.getExternalStorageDirectory()));
+        builder.setNeutralButton("Close", null);
+        builder.create().show();
+    }
+
+    @Override
+    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
+        readableCheckAndError(false);
+
+        application.backgroundUpdateDictionaries(dictionaryUpdater);
+
+        setMyListAdapater();
+    }
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         // This must be first, otherwise the actiona bar doesn't get
@@ -274,19 +312,7 @@ public class DictionaryManagerActivity extends ActionBarActivity {
         setMyListAdapater();
         registerForContextMenu(getListView());
 
-        final File dictDir = application.getDictDir();
-        if (!dictDir.canRead() || !dictDir.canExecute()) {
-            blockAutoLaunch = true;
-
-            AlertDialog.Builder builder = new AlertDialog.Builder(getListView().getContext());
-            builder.setTitle(getString(R.string.error));
-            builder.setMessage(getString(
-                    R.string.unableToReadDictionaryDir,
-                    dictDir.getAbsolutePath(),
-                    Environment.getExternalStorageDirectory()));
-            builder.setNeutralButton("Close", null);
-            builder.create().show();
-        }
+        readableCheckAndError(true);
 
         onCreateSetupActionBar();
     }
@@ -409,6 +435,16 @@ public class DictionaryManagerActivity extends ActionBarActivity {
 
     @Override
     public boolean onCreateOptionsMenu(final Menu menu) {
+        final MenuItem sort = menu.add(getString(R.string.sortDicts));
+        MenuItemCompat.setShowAsAction(sort, MenuItem.SHOW_AS_ACTION_NEVER);
+        sort.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
+            public boolean onMenuItemClick(final MenuItem menuItem) {
+                application.sortDictionaries();
+                setMyListAdapater();
+                return true;
+            }
+        });
+
         application.onCreateGlobalOptionsMenu(this, menu);
         return true;
     }