From 71f5bb735ca003b54eb1f987df01f01a92910cff Mon Sep 17 00:00:00 2001
From: Joshua <8Joshua@web.de>
Date: Thu, 18 Oct 2018 19:25:46 +0200
Subject: [PATCH] =?UTF-8?q?Download=20Bugs=20gefixt=20und=20Berechtigungsp?=
=?UTF-8?q?r=C3=BCfung=20verbessert?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/misc.xml | 2 +-
.idea/modules.xml | 1 +
.idea/vcs.xml | 2 +-
.../java/de/sebse/fuplanner/MainActivity.java | 23 ++-
.../fuplanner/fragments/CanteensFragment.java | 6 +-
.../fuplanner/fragments/LoginFragment.java | 6 +-
.../fuplanner/fragments/ModulesFragment.java | 6 +-
.../fuplanner/fragments/ScheduleFragment.java | 10 +-
.../canteen/DaySwitcherFragment.java | 10 +-
.../moddetails/ModDetailFragment.java | 10 +-
.../moddetails/ModDetailResourceFragment.java | 138 +++++++++++++-----
.../services/Canteen/CanteenBrowser.java | 6 +-
.../de/sebse/fuplanner/services/KVV/KVV.java | 6 +-
...istener.java => MainActivityListener.java} | 6 +-
.../RequestPermissionsResultListener.java | 5 +
15 files changed, 168 insertions(+), 69 deletions(-)
rename app/src/main/java/de/sebse/fuplanner/tools/{MainAcitivityListener.java => MainActivityListener.java} (72%)
create mode 100644 app/src/main/java/de/sebse/fuplanner/tools/RequestPermissionsResultListener.java
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 26dc4f5..a8cce1b 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -25,5 +25,5 @@
-
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 62306f1..1192ec5 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -3,6 +3,7 @@
+
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 94a25f7..35eb1dd 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/app/src/main/java/de/sebse/fuplanner/MainActivity.java b/app/src/main/java/de/sebse/fuplanner/MainActivity.java
index 56c3c79..7d44634 100644
--- a/app/src/main/java/de/sebse/fuplanner/MainActivity.java
+++ b/app/src/main/java/de/sebse/fuplanner/MainActivity.java
@@ -18,7 +18,9 @@ import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
+import java.util.HashMap;
import java.util.Iterator;
+import java.util.function.BiConsumer;
import de.sebse.fuplanner.fragments.CanteensFragment;
import de.sebse.fuplanner.fragments.LoginFragment;
@@ -34,11 +36,12 @@ import de.sebse.fuplanner.services.GoogleAuth.GoogleAuth;
import de.sebse.fuplanner.services.KVV.KVV;
import de.sebse.fuplanner.services.KVV.types.LoginToken;
import de.sebse.fuplanner.services.KVV.types.Modules;
-import de.sebse.fuplanner.tools.MainAcitivityListener;
+import de.sebse.fuplanner.tools.MainActivityListener;
+import de.sebse.fuplanner.tools.RequestPermissionsResultListener;
import de.sebse.fuplanner.tools.logging.Logger;
public class MainActivity extends AppCompatActivity
- implements MainAcitivityListener,
+ implements MainActivityListener,
NavigationView.OnNavigationItemSelectedListener,
LoginFragment.OnLoginFragmentInteractionListener,
ModulesFragment.OnModulesFragmentInteractionListener,
@@ -68,6 +71,7 @@ public class MainActivity extends AppCompatActivity
private String fragmentData = "";
private CanteenBrowser mCanteenBrowser;
private boolean mOfflineMode = false;
+ private HashMap permissionListeners = new HashMap<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -215,6 +219,13 @@ public class MainActivity extends AppCompatActivity
super.onSaveInstanceState(savedInstanceState);
}
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ for (RequestPermissionsResultListener listener: permissionListeners.values()) {
+ listener.callback(requestCode, permissions, grantResults);
+ }
+ }
+
/* --------------------------------------------*/
/* --------------------------------------------*/
/* --------------------------------------------*/
@@ -482,4 +493,12 @@ public class MainActivity extends AppCompatActivity
public void refreshFailed(boolean isFailed) {
setRefreshFailedBanner(isFailed);
}
+
+ public void addRequestPermissionsResultListener(RequestPermissionsResultListener listener, String id) {
+ permissionListeners.put(id, listener);
+ }
+
+ public void removeRequestPermissionsResultListener(String id) {
+ permissionListeners.remove(id);
+ }
}
diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/CanteensFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/CanteensFragment.java
index efb5813..f9a2e75 100644
--- a/app/src/main/java/de/sebse/fuplanner/fragments/CanteensFragment.java
+++ b/app/src/main/java/de/sebse/fuplanner/fragments/CanteensFragment.java
@@ -14,7 +14,7 @@ import android.view.ViewGroup;
import de.sebse.fuplanner.MainActivity;
import de.sebse.fuplanner.R;
import de.sebse.fuplanner.services.Canteen.CanteenBrowser;
-import de.sebse.fuplanner.tools.MainAcitivityListener;
+import de.sebse.fuplanner.tools.MainActivityListener;
import de.sebse.fuplanner.tools.logging.Logger;
/**
@@ -87,8 +87,8 @@ public class CanteensFragment extends Fragment {
throw new RuntimeException(context.toString()
+ " must implement OnCanteensFragmentInteractionListener");
}
- if (context instanceof MainAcitivityListener)
- ((MainAcitivityListener) context).onTitleTextChange(R.string.canteens);
+ if (context instanceof MainActivityListener)
+ ((MainActivityListener) context).onTitleTextChange(R.string.canteens);
else
throw new RuntimeException(context.toString() + "must implement MainActivityListener");
}
diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/LoginFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/LoginFragment.java
index 8a43ba5..7cc16dd 100644
--- a/app/src/main/java/de/sebse/fuplanner/fragments/LoginFragment.java
+++ b/app/src/main/java/de/sebse/fuplanner/fragments/LoginFragment.java
@@ -19,7 +19,7 @@ import de.sebse.fuplanner.services.GoogleAuth.GoogleAuth;
import de.sebse.fuplanner.services.KVV.KVV;
import de.sebse.fuplanner.services.KVV.types.LoginToken;
import de.sebse.fuplanner.services.KVV.types.Modules;
-import de.sebse.fuplanner.tools.MainAcitivityListener;
+import de.sebse.fuplanner.tools.MainActivityListener;
import de.sebse.fuplanner.tools.logging.Logger;
/**
@@ -120,8 +120,8 @@ public class LoginFragment extends Fragment {
throw new RuntimeException(context.toString()
+ " must implement OnLoginFragmentInteractionListener");
}
- if (context instanceof MainAcitivityListener)
- ((MainAcitivityListener) context).onTitleTextChange(R.string.log_in);
+ if (context instanceof MainActivityListener)
+ ((MainActivityListener) context).onTitleTextChange(R.string.log_in);
else
throw new RuntimeException(context.toString() + "must implement MainActivityListener");
}
diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/ModulesFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/ModulesFragment.java
index e0a3ae0..28fd0b8 100644
--- a/app/src/main/java/de/sebse/fuplanner/fragments/ModulesFragment.java
+++ b/app/src/main/java/de/sebse/fuplanner/fragments/ModulesFragment.java
@@ -14,7 +14,7 @@ import android.view.ViewGroup;
import de.sebse.fuplanner.MainActivity;
import de.sebse.fuplanner.R;
import de.sebse.fuplanner.services.KVV.KVV;
-import de.sebse.fuplanner.tools.MainAcitivityListener;
+import de.sebse.fuplanner.tools.MainActivityListener;
import de.sebse.fuplanner.tools.logging.Logger;
/**
@@ -87,8 +87,8 @@ public class ModulesFragment extends Fragment {
throw new RuntimeException(context.toString()
+ " must implement OnModulesFragmentInteractionListener");
}
- if (context instanceof MainAcitivityListener)
- ((MainAcitivityListener) context).onTitleTextChange(R.string.courses);
+ if (context instanceof MainActivityListener)
+ ((MainActivityListener) context).onTitleTextChange(R.string.courses);
else
throw new RuntimeException(context.toString() + "must implement MainActivityListener");
}
diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java
index 3c63246..b7176cd 100644
--- a/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java
+++ b/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java
@@ -20,7 +20,7 @@ import de.sebse.fuplanner.services.KVV.KVV;
import de.sebse.fuplanner.services.KVV.types.Event;
import de.sebse.fuplanner.services.KVV.types.Modules;
import de.sebse.fuplanner.tools.UtilsDate;
-import de.sebse.fuplanner.tools.MainAcitivityListener;
+import de.sebse.fuplanner.tools.MainActivityListener;
import de.sebse.fuplanner.tools.logging.Logger;
import de.sebse.fuplanner.tools.ui.weekview.MonthLoader;
import de.sebse.fuplanner.tools.ui.weekview.WeekView;
@@ -29,14 +29,14 @@ import de.sebse.fuplanner.tools.ui.weekview.WeekViewEvent;
/**
* A simple {@link Fragment} subclass.
* Activities that contain this fragment must implement the
- * {@link MainAcitivityListener} interface
+ * {@link MainActivityListener} interface
* to handle interaction events.
* Use the {@link ScheduleFragment#newInstance} factory method to
* create an instance of this fragment.
*
*/
public class ScheduleFragment extends Fragment implements MonthLoader.MonthChangeListener, WeekView.ScrollListener, WeekView.DoubleTapListener, WeekView.EventClickListener {
- private MainAcitivityListener mListener;
+ private MainActivityListener mListener;
private WeekView mWeekView;
private final Logger log = new Logger(this);
private Modules mModules = null;
@@ -99,8 +99,8 @@ public class ScheduleFragment extends Fragment implements MonthLoader.MonthChang
@Override
public void onAttach(Context context) {
super.onAttach(context);
- if (context instanceof MainAcitivityListener) {
- mListener = (MainAcitivityListener) context;
+ if (context instanceof MainActivityListener) {
+ mListener = (MainActivityListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/canteen/DaySwitcherFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/canteen/DaySwitcherFragment.java
index a855b50..86ff0a2 100644
--- a/app/src/main/java/de/sebse/fuplanner/fragments/canteen/DaySwitcherFragment.java
+++ b/app/src/main/java/de/sebse/fuplanner/fragments/canteen/DaySwitcherFragment.java
@@ -13,7 +13,7 @@ import de.sebse.fuplanner.MainActivity;
import de.sebse.fuplanner.R;
import de.sebse.fuplanner.services.Canteen.CanteenBrowser;
import de.sebse.fuplanner.services.Canteen.types.Canteen;
-import de.sebse.fuplanner.tools.MainAcitivityListener;
+import de.sebse.fuplanner.tools.MainActivityListener;
import de.sebse.fuplanner.tools.logging.Logger;
import de.sebse.fuplanner.tools.network.NetworkCallback;
import de.sebse.fuplanner.tools.network.NetworkErrorCallback;
@@ -21,7 +21,7 @@ import de.sebse.fuplanner.tools.network.NetworkErrorCallback;
/**
* A simple {@link Fragment} subclass.
* Activities that contain this fragment must implement the
- * {@link MainAcitivityListener} interface
+ * {@link MainActivityListener} interface
* to handle interaction events.
* Use the {@link DaySwitcherFragment#newInstance} factory method to
* create an instance of this fragment.
@@ -32,7 +32,7 @@ public class DaySwitcherFragment extends Fragment implements DaySwitcherListener
// Parameters
private int mCanteenId;
- private MainAcitivityListener mListener;
+ private MainActivityListener mListener;
private final Logger log = new Logger(this);
private ViewPager mViewPager;
private DaySwitcherAdapter adapterViewPager;
@@ -90,8 +90,8 @@ public class DaySwitcherFragment extends Fragment implements DaySwitcherListener
@Override
public void onAttach(Context context) {
super.onAttach(context);
- if (context instanceof MainAcitivityListener) {
- mListener = (MainAcitivityListener) context;
+ if (context instanceof MainActivityListener) {
+ mListener = (MainActivityListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement MainActivityListener");
diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailFragment.java
index bdede97..7dca767 100644
--- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailFragment.java
+++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailFragment.java
@@ -11,13 +11,13 @@ import android.view.ViewGroup;
import de.sebse.fuplanner.R;
import de.sebse.fuplanner.services.KVV.types.Modules;
-import de.sebse.fuplanner.tools.MainAcitivityListener;
+import de.sebse.fuplanner.tools.MainActivityListener;
import de.sebse.fuplanner.tools.logging.Logger;
/**
* A simple {@link Fragment} subclass.
* Activities that contain this fragment must implement the
- * {@link MainAcitivityListener} interface
+ * {@link MainActivityListener} interface
* to handle interaction events.
* Use the {@link ModDetailFragment#newInstance} factory method to
* create an instance of this fragment.
@@ -28,7 +28,7 @@ public class ModDetailFragment extends Fragment implements ModDetailListener {
// Parameters
private String mItemPos;
- private MainAcitivityListener mListener;
+ private MainActivityListener mListener;
private final Logger log = new Logger(this);
private ViewPager mViewPager;
private String mPageRestoreRequest = null;
@@ -97,8 +97,8 @@ public class ModDetailFragment extends Fragment implements ModDetailListener {
@Override
public void onAttach(Context context) {
super.onAttach(context);
- if (context instanceof MainAcitivityListener) {
- mListener = (MainAcitivityListener) context;
+ if (context instanceof MainActivityListener) {
+ mListener = (MainActivityListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement MainActivityListener");
diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailResourceFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailResourceFragment.java
index c4bd605..d6755d3 100644
--- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailResourceFragment.java
+++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailResourceFragment.java
@@ -5,6 +5,7 @@ import android.Manifest;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
@@ -20,14 +21,18 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import java.io.File;
+import java.util.ArrayList;
import java.util.Arrays;
import de.sebse.fuplanner.MainActivity;
import de.sebse.fuplanner.R;
+import de.sebse.fuplanner.fragments.LoginFragment;
import de.sebse.fuplanner.services.KVV.KVV;
import de.sebse.fuplanner.services.KVV.types.Modules;
import de.sebse.fuplanner.services.KVV.types.Resource;
+import de.sebse.fuplanner.tools.MainActivityListener;
import de.sebse.fuplanner.tools.Regex;
+import de.sebse.fuplanner.tools.RequestPermissionsResultListener;
import de.sebse.fuplanner.tools.UtilsDate;
import de.sebse.fuplanner.tools.logging.Logger;
import de.sebse.fuplanner.tools.ui.treeview.DirectoryNodeBinder;
@@ -35,6 +40,8 @@ import de.sebse.fuplanner.tools.ui.treeview.FileNodeBinder;
import de.sebse.fuplanner.tools.ui.treeview.TreeNode;
import de.sebse.fuplanner.tools.ui.treeview.TreeViewAdapter;
+import static android.support.v4.content.ContextCompat.checkSelfPermission;
+
/**
* A simple {@link Fragment} subclass.
* Use the {@link ModDetailResourceFragment#newInstance} factory method to
@@ -47,6 +54,8 @@ public class ModDetailResourceFragment extends Fragment {
private final Logger log = new Logger(this);
private ModDetailResourceAdapter adapter;
private SwipeRefreshLayout swipeLayout;
+ private MainActivityListener context;
+ private RequestedDownload requestedDownload;
public ModDetailResourceFragment() {
@@ -95,7 +104,7 @@ public class ModDetailResourceFragment extends Fragment {
onToggle(!node.isExpand(), holder);
// if (!node.isExpand())
// adapter.collapseBrotherNode(node);
- } else {
+ } else if(node.getContent() instanceof Resource.File) {
KVV kvv = ((MainActivity) getActivity()).getKVV();
kvv.getModule(mItemPos, (Modules.Module module) -> {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getContext());
@@ -159,48 +168,94 @@ public class ModDetailResourceFragment extends Fragment {
return view;
}
- private void download(Resource.File file, String modul, boolean downloadNew){
- KVV kvv = ((MainActivity) getActivity()).getKVV();
-
+ private void download(Resource.File file, String folderName, boolean downloadNew){
+ if (getActivity() == null) {
+ showDownloadError();
+ return;
+ }
+ if (checkSelfPermission(getActivity(), android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
+ // Access granted
+ downloadOrOpen(file, folderName, downloadNew);
+ } else {
+ this.requestedDownload = new RequestedDownload(file, folderName, downloadNew);
ActivityCompat.requestPermissions(ModDetailResourceFragment.super.getActivity(),
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
1);
+ }
+ }
- if(isExternalStorageWritable()){
- kvv.getResourceFile(success1 -> {
- if (success1.equals("")){//Datei wurde nicht heruntergeladen
- AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getContext());
- alertDialogBuilder
- .setTitle(R.string.ErrorFileDownload)
- .setMessage(
- R.string.ErrorFileDownloadText
- )
- .setCancelable(true)
- .setNeutralButton(R.string.close, (dialog, id) -> dialog.cancel());
- AlertDialog alertDialog = alertDialogBuilder.create();
- alertDialog.show();
- }else {
- if (Regex.has("^http", success1)){
- Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(success1));
- startActivity(intent);
- }
- else {
- fileOpen(new File(success1));
- }
-
+ private void downloadOrOpen(Resource.File file, String folderName, boolean downloadNew) {
+ KVV kvv = this.context.getKVV();
+ if(isExternalStorageWritable()){
+ kvv.getResourceFile(success1 -> {
+ if (success1.equals("")){//Datei wurde nicht heruntergeladen
+ showDownloadError();
+ }else {
+ if (Regex.has("^http", success1)){
+ Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(success1));
+ startActivity(intent);
+ }
+ else {
+ fileOpen(new File(success1));
}
- }, error -> {
-
- log.e(error);
- }, file.getTitle(), file.getUrl(), modul, downloadNew );
- }
-
-
-
+ }
+ }, log::e, file.getTitle(), file.getUrl(), folderName, downloadNew);
+ }
+ }
+ private void showDownloadError() {
+ AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getContext());
+ alertDialogBuilder
+ .setTitle(R.string.ErrorFileDownload)
+ .setMessage(
+ R.string.ErrorFileDownloadText
+ )
+ .setCancelable(true)
+ .setNeutralButton(R.string.close, (dialog, id) -> dialog.cancel());
+ AlertDialog alertDialog = alertDialogBuilder.create();
+ alertDialog.show();
+ }
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ if (context instanceof MainActivityListener) {
+ this.context = ((MainActivityListener) context);
+ this.context.addRequestPermissionsResultListener((requestCode, permissions, grantResults) -> {
+ if (requestedDownload == null) {
+ log.d("No request");
+ return;
+ }
+ if (getActivity() == null) {
+ showDownloadError();
+ return;
+ }
+ ArrayList intList = new ArrayList<>();
+ for (int i : grantResults)
+ {
+ intList.add(i);
+ }
+ log.d(requestCode, Arrays.asList(permissions), intList);
+ int pos = Arrays.asList(permissions).indexOf("android.permission.WRITE_EXTERNAL_STORAGE");
+ if (pos != -1) {
+ if (grantResults[pos] != -1) {
+ downloadOrOpen(requestedDownload.file, requestedDownload.folderName, requestedDownload.downloadNew);
+ } else {
+ log.d(requestedDownload, pos, grantResults[pos]);
+ showDownloadError();
+ }
+ requestedDownload = null;
+ }
+ }, "ModDetailResourceFragment");
+ } else
+ throw new RuntimeException(context.toString() + "must implement MainActivityListener");
+ }
+ @Override
+ public void onDetach() {
+ super.onDetach();
+ this.context.removeRequestPermissionsResultListener("ModDetailResourceFragment");
}
/* Checks if external storage is available for read and write */
@@ -286,4 +341,19 @@ public class ModDetailResourceFragment extends Fragment {
}
}
+
+
+
+
+ private class RequestedDownload {
+ Resource.File file;
+ String folderName;
+ boolean downloadNew;
+
+ RequestedDownload(Resource.File file, String folderName, boolean downloadNew) {
+ this.file = file;
+ this.folderName = folderName;
+ this.downloadNew = downloadNew;
+ }
+ }
}
diff --git a/app/src/main/java/de/sebse/fuplanner/services/Canteen/CanteenBrowser.java b/app/src/main/java/de/sebse/fuplanner/services/Canteen/CanteenBrowser.java
index f21dbd8..88df91d 100644
--- a/app/src/main/java/de/sebse/fuplanner/services/Canteen/CanteenBrowser.java
+++ b/app/src/main/java/de/sebse/fuplanner/services/Canteen/CanteenBrowser.java
@@ -13,7 +13,7 @@ import de.sebse.fuplanner.services.Canteen.types.Canteen;
import de.sebse.fuplanner.services.Canteen.types.Canteens;
import de.sebse.fuplanner.services.Canteen.types.Day;
import de.sebse.fuplanner.tools.AsyncQueue;
-import de.sebse.fuplanner.tools.MainAcitivityListener;
+import de.sebse.fuplanner.tools.MainActivityListener;
import de.sebse.fuplanner.tools.network.HTTPService;
import de.sebse.fuplanner.tools.network.NetworkCallback;
import de.sebse.fuplanner.tools.network.NetworkError;
@@ -23,12 +23,12 @@ public class CanteenBrowser extends HTTPService {
private Canteens canteens;
private final AsyncQueue queue = new AsyncQueue();
private final Context context;
- private MainAcitivityListener mListener;
+ private MainActivityListener mListener;
public CanteenBrowser(Context context) {
super(context);
this.context = context;
- if (context instanceof MainAcitivityListener)
+ if (context instanceof MainActivityListener)
mListener = (MainActivity) context;
else
throw new RuntimeException(context.toString() + "must implement MainActivityListener");
diff --git a/app/src/main/java/de/sebse/fuplanner/services/KVV/KVV.java b/app/src/main/java/de/sebse/fuplanner/services/KVV/KVV.java
index f815c5b..5cfd049 100644
--- a/app/src/main/java/de/sebse/fuplanner/services/KVV/KVV.java
+++ b/app/src/main/java/de/sebse/fuplanner/services/KVV/KVV.java
@@ -10,7 +10,7 @@ import java.util.HashMap;
import de.sebse.fuplanner.services.KVV.types.LoginToken;
import de.sebse.fuplanner.services.KVV.types.Modules;
-import de.sebse.fuplanner.tools.MainAcitivityListener;
+import de.sebse.fuplanner.tools.MainActivityListener;
import de.sebse.fuplanner.tools.logging.Logger;
import de.sebse.fuplanner.tools.network.NetworkCallback;
import de.sebse.fuplanner.tools.network.NetworkErrorCallback;
@@ -25,11 +25,11 @@ public class KVV {
private boolean isLoginPending = true;
private final ArrayList updatingList;
private final HashMap addons = new HashMap<>();
- private final MainAcitivityListener mListener;
+ private final MainActivityListener mListener;
private Logger log = new Logger(this);
public KVV(Context context) {
- mListener = (MainAcitivityListener) context;
+ mListener = (MainActivityListener) context;
this.context = context;
this.updatingList = new ArrayList<>();
}
diff --git a/app/src/main/java/de/sebse/fuplanner/tools/MainAcitivityListener.java b/app/src/main/java/de/sebse/fuplanner/tools/MainActivityListener.java
similarity index 72%
rename from app/src/main/java/de/sebse/fuplanner/tools/MainAcitivityListener.java
rename to app/src/main/java/de/sebse/fuplanner/tools/MainActivityListener.java
index 114d984..f5ed544 100644
--- a/app/src/main/java/de/sebse/fuplanner/tools/MainAcitivityListener.java
+++ b/app/src/main/java/de/sebse/fuplanner/tools/MainActivityListener.java
@@ -6,7 +6,7 @@ import de.sebse.fuplanner.services.Canteen.CanteenBrowser;
import de.sebse.fuplanner.services.GoogleAuth.GoogleAuth;
import de.sebse.fuplanner.services.KVV.KVV;
-public interface MainAcitivityListener {
+public interface MainActivityListener {
void onTitleTextChange(String newTitle);
void onTitleTextChange(@StringRes int titleId);
@@ -20,4 +20,8 @@ public interface MainAcitivityListener {
void refreshFailed(boolean isFailed);
CanteenBrowser getCanteenBrowser();
+
+ void addRequestPermissionsResultListener(RequestPermissionsResultListener listener, String id);
+
+ void removeRequestPermissionsResultListener(String id);
}
diff --git a/app/src/main/java/de/sebse/fuplanner/tools/RequestPermissionsResultListener.java b/app/src/main/java/de/sebse/fuplanner/tools/RequestPermissionsResultListener.java
new file mode 100644
index 0000000..f42f55e
--- /dev/null
+++ b/app/src/main/java/de/sebse/fuplanner/tools/RequestPermissionsResultListener.java
@@ -0,0 +1,5 @@
+package de.sebse.fuplanner.tools;
+
+public interface RequestPermissionsResultListener {
+ void callback(int requestCode, String[] permissions, int[] grantResults);
+}