From 8c7952f04c9dae02f0c38c992e631db4c4156fde Mon Sep 17 00:00:00 2001
From: fpeterfalvi <fpeterfalvi@gmail.com>
Date: Mon, 30 Apr 2018 18:42:24 +0200
Subject: [PATCH] Storage permission is requested in runtime.

---
 .../java/onlab/kvizserver/GameActivity.java   | 20 +++++++++++
 .../java/onlab/kvizserver/MainActivity.java   | 36 +++++++++++++++++--
 .../kvizserver/QuestionListFragment.java      | 17 ++++++---
 3 files changed, 66 insertions(+), 7 deletions(-)

diff --git a/KvizServer/app/src/main/java/onlab/kvizserver/GameActivity.java b/KvizServer/app/src/main/java/onlab/kvizserver/GameActivity.java
index 8f864f0..9ef05ee 100644
--- a/KvizServer/app/src/main/java/onlab/kvizserver/GameActivity.java
+++ b/KvizServer/app/src/main/java/onlab/kvizserver/GameActivity.java
@@ -1,5 +1,6 @@
 package onlab.kvizserver;
 
+import android.content.pm.PackageManager;
 import android.os.Handler;
 import android.support.v4.view.ViewPager;
 import android.support.v7.app.AppCompatActivity;
@@ -10,6 +11,7 @@ import android.widget.Toast;
 
 import com.google.gson.Gson;
 import com.rustamg.filedialogs.FileDialog;
+import com.rustamg.filedialogs.SaveFileDialog;
 
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
@@ -318,4 +320,22 @@ public class GameActivity extends AppCompatActivity implements GameControlFragme
         questionListFragment.refreshQuestionList();
      }
 
+    @Override
+    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
+        switch (requestCode) {
+            case 1: {
+                // If request is cancelled, the result arrays are empty.
+                if (grantResults.length > 0
+                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                    // permission was granted
+                    SaveFileDialog dialog = new SaveFileDialog();
+                    dialog.show(getSupportFragmentManager(), SaveFileDialog.class.getName());
+                } else {
+                    // permission denied
+                }
+                return;
+            }
+        }
+    }
+
 }
diff --git a/KvizServer/app/src/main/java/onlab/kvizserver/MainActivity.java b/KvizServer/app/src/main/java/onlab/kvizserver/MainActivity.java
index 374ca5f..22e350d 100644
--- a/KvizServer/app/src/main/java/onlab/kvizserver/MainActivity.java
+++ b/KvizServer/app/src/main/java/onlab/kvizserver/MainActivity.java
@@ -1,8 +1,12 @@
 package onlab.kvizserver;
 
+import android.Manifest;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.content.ContextCompat;
 import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
 import android.util.Log;
@@ -56,8 +60,18 @@ public class MainActivity extends AppCompatActivity implements FileDialog.OnFile
         ChooseQuestionFileBtn.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                FileDialog dialog = new OpenFileDialog();
-                dialog.show(getSupportFragmentManager(), OpenFileDialog.class.getName());
+                if (ContextCompat.checkSelfPermission(MainActivity.this,
+                        Manifest.permission.READ_EXTERNAL_STORAGE)
+                        != PackageManager.PERMISSION_GRANTED) {
+
+                    // Permission is not granted; request the permission
+                    ActivityCompat.requestPermissions(MainActivity.this,
+                            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
+                } else {
+                    // Permission has already been granted
+                    FileDialog dialog = new OpenFileDialog();
+                    dialog.show(getSupportFragmentManager(), OpenFileDialog.class.getName());
+                }
             }
         });
 
@@ -133,4 +147,22 @@ public class MainActivity extends AppCompatActivity implements FileDialog.OnFile
         }
     }
 
+    @Override
+    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
+        switch (requestCode) {
+            case 1: {
+                // If request is cancelled, the result arrays are empty.
+                if (grantResults.length > 0
+                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                    // permission was granted
+                    FileDialog dialog = new OpenFileDialog();
+                    dialog.show(getSupportFragmentManager(), OpenFileDialog.class.getName());
+                } else {
+                    // permission denied
+                }
+                return;
+            }
+        }
+    }
+
 }
diff --git a/KvizServer/app/src/main/java/onlab/kvizserver/QuestionListFragment.java b/KvizServer/app/src/main/java/onlab/kvizserver/QuestionListFragment.java
index f3bd0d3..b2d5934 100644
--- a/KvizServer/app/src/main/java/onlab/kvizserver/QuestionListFragment.java
+++ b/KvizServer/app/src/main/java/onlab/kvizserver/QuestionListFragment.java
@@ -9,6 +9,7 @@ import android.support.v4.app.ActivityCompat;
 import android.support.v4.app.DialogFragment;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentTransaction;
+import android.support.v4.content.ContextCompat;
 import android.support.v7.widget.DividerItemDecoration;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
@@ -66,11 +67,17 @@ public class QuestionListFragment extends Fragment {
         exportButton.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                ActivityCompat.requestPermissions(getActivity(),
-                        new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE},
-                        1);
-                SaveFileDialog dialog = new SaveFileDialog();
-                dialog.show(getActivity().getSupportFragmentManager(), SaveFileDialog.class.getName());
+                if (ContextCompat.checkSelfPermission(getActivity(),
+                        Manifest.permission.WRITE_EXTERNAL_STORAGE)
+                        != PackageManager.PERMISSION_GRANTED) {
+                    // Permission is not granted; request the permission
+                    ActivityCompat.requestPermissions(getActivity(),
+                            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
+                } else {
+                    // Permission has already been granted
+                    SaveFileDialog dialog = new SaveFileDialog();
+                    dialog.show(getActivity().getSupportFragmentManager(), SaveFileDialog.class.getName());
+                }
             }
         });
 
-- 
GitLab