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 14ec7e8..6071bb0 100644
--- a/app/src/main/java/de/sebse/fuplanner/MainActivity.java
+++ b/app/src/main/java/de/sebse/fuplanner/MainActivity.java
@@ -9,7 +9,9 @@ import android.widget.TextView;
import com.google.android.material.navigation.NavigationView;
+import java.util.HashMap;
import java.util.Iterator;
+import java.util.function.BiConsumer;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
@@ -35,11 +37,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,
@@ -69,6 +72,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) {
@@ -216,6 +220,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);
+ }
+ }
+
/* --------------------------------------------*/
/* --------------------------------------------*/
/* --------------------------------------------*/
@@ -303,6 +314,9 @@ public class MainActivity extends AppCompatActivity
}
private void changeFragment(int newFragment, String newData) {
+ if (mFragmentManager.isStateSaved())
+ return;
+
//log.d("changeFragment: ", newFragment, newData);
onTitleTextChange(R.string.courses);
Fragment fragment;
@@ -483,4 +497,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 7ae6a94..50526ef 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 androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
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 40f5909..30ee62a 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 0c69320..589deb0 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 androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
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 9248904..224cf9e 100644
--- a/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java
+++ b/app/src/main/java/de/sebse/fuplanner/fragments/ScheduleFragment.java
@@ -19,8 +19,8 @@ import de.sebse.fuplanner.R;
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.MainAcitivityListener;
import de.sebse.fuplanner.tools.UtilsDate;
+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 5b299cb..46be30a 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 4eaab77..d1c2591 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 androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
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 dc4067c..ad0568a 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;
@@ -14,6 +15,7 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import java.io.File;
+import java.util.ArrayList;
import java.util.Arrays;
import androidx.annotation.NonNull;
@@ -27,6 +29,7 @@ import de.sebse.fuplanner.R;
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.UtilsDate;
import de.sebse.fuplanner.tools.logging.Logger;
@@ -35,6 +38,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 +52,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,45 +102,32 @@ public class ModDetailResourceFragment extends Fragment {
onToggle(!node.isExpand(), holder);
// if (!node.isExpand())
// adapter.collapseBrotherNode(node);
- } else {
- KVV kvv = ((MainActivity) getActivity()).getKVV();
+ } else if(node.getContent() instanceof Resource.File) {
+ KVV kvv = ModDetailResourceFragment.this.context.getKVV();
kvv.getModule(mItemPos, (Modules.Module module) -> {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getContext());
Resource.File file = (Resource.File) node.getContent();
- String ordnername = "FU-"+module.title;
+ String folderName = "FU-"+module.title;
File f = new File(Environment.getExternalStoragePublicDirectory(
- Environment.DIRECTORY_DOWNLOADS)+"/"+ordnername+"/"+file.getTitle());
+ Environment.DIRECTORY_DOWNLOADS)+"/"+folderName+"/"+file.getTitle());
+ alertDialogBuilder
+ .setTitle(file.getTitle())
+ .setMessage(
+ getResources().getString(R.string.creator_name, file.getAuthor()) + "\n" +
+ getResources().getString(R.string.last_modified_on, UtilsDate.getModifiedDateTime(context, file.getModifiedDate()))
+ )
+ .setCancelable(true)
+ .setNeutralButton(R.string.close, (dialog, id) -> dialog.cancel());
if (f.exists()) {//prüffen ob bereits herunter geladen
alertDialogBuilder
- .setTitle(file.getTitle())
- .setMessage(
- getResources().getString(R.string.creator_name, file.getAuthor()) + "\n" +
- getResources().getString(R.string.last_modified_on, UtilsDate.getModifiedDateTime(context, file.getModifiedDate()))
- )
- .setCancelable(true)
- .setNeutralButton(R.string.close, (dialog, id) -> dialog.cancel())
- .setNegativeButton(R.string.openFile, (dialog, id) -> download(file, ordnername, false))
- .setPositiveButton(R.string.download, (dialog, id) -> download(file, ordnername, true));
- AlertDialog alertDialog = alertDialogBuilder.create();
- alertDialog.show();
- }
- else {
- alertDialogBuilder
- .setTitle(file.getTitle())
- .setMessage(
- getResources().getString(R.string.creator_name, file.getAuthor()) + "\n" +
- getResources().getString(R.string.last_modified_on, UtilsDate.getModifiedDateTime(context, file.getModifiedDate()))
- )
- .setCancelable(true)
- .setNeutralButton(R.string.close, (dialog, id) -> dialog.cancel())
- .setPositiveButton(R.string.download, (dialog, id) -> download(file, ordnername, true));
- AlertDialog alertDialog = alertDialogBuilder.create();
- alertDialog.show();
+ .setNegativeButton(R.string.openFile, (dialog, id) -> download(file, folderName, false));
}
+ alertDialogBuilder
+ .setPositiveButton(R.string.download, (dialog, id) -> download(file, folderName, true));
+ AlertDialog alertDialog = alertDialogBuilder.create();
+ alertDialog.show();
- }, error -> {
- log.e(error);
- });
+ }, log::e);
}
return false;
}
@@ -159,48 +153,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 +326,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 70fbd10..9326026 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 androidx.annotation.NonNull;
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 0b17123..3efe281 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);
+}