From 34a104a8a378e1ef0e03f872b1aebdce42445f0f Mon Sep 17 00:00:00 2001 From: Joshua <8Joshua@web.de> Date: Fri, 12 Oct 2018 18:20:07 +0200 Subject: [PATCH] =?UTF-8?q?Download=20kann=20nun=20ausgew=C3=A4hlt=20werde?= =?UTF-8?q?n=20ob=20Datei=20erneut=20herunter=20geladen=20werden=20soll,?= =?UTF-8?q?=20wenn=20bereits=20vorhanden.=20Es=20wird=20nun=20ein=20Fehler?= =?UTF-8?q?=20angezeigt=20wenn=20der=20Download=20fehl=20schlug.=20Wenn=20?= =?UTF-8?q?die=20App=20keine=20schreibrechte=20hat,=20fragt=20sie=20nach?= =?UTF-8?q?=20welchen.=20Ordner=20von=20Modulename=20zu=20FU-Modulename=20?= =?UTF-8?q?umbenant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../moddetails/ModDetailResourceFragment.java | 111 +++++++++++++----- .../de/sebse/fuplanner/services/KVV/KVV.java | 4 +- .../fuplanner/services/KVV/KVVModuleList.java | 24 ++-- app/src/main/res/values-de/strings.xml | 3 + app/src/main/res/values/strings.xml | 3 + 5 files changed, 107 insertions(+), 38 deletions(-) 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 3dfd993..a5d4509 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 @@ -1,12 +1,15 @@ package de.sebse.fuplanner.fragments.moddetails; +import android.Manifest; import android.app.AlertDialog; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.os.Environment; import android.support.annotation.NonNull; +import android.support.v4.app.ActivityCompat; import android.support.v4.app.Fragment; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; @@ -92,20 +95,44 @@ public class ModDetailResourceFragment extends Fragment { // if (!node.isExpand()) // adapter.collapseBrotherNode(node); } else { - AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getContext()); - Resource.File file = (Resource.File) node.getContent(); - 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)); + KVV kvv = ((MainActivity) getActivity()).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; + File f = new File(Environment.getExternalStoragePublicDirectory( + Environment.DIRECTORY_DOWNLOADS)+"/"+ordnername+"/"+file.getTitle()); + 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(); + } - AlertDialog alertDialog = alertDialogBuilder.create(); - alertDialog.show(); + }, error -> { + log.e(error); + }); } return false; } @@ -131,27 +158,55 @@ public class ModDetailResourceFragment extends Fragment { return view; } - private void download(Resource.File file){ + private void download(Resource.File file, String modul, boolean downloadNew){ KVV kvv = ((MainActivity) getActivity()).getKVV(); - kvv.getModule(mItemPos, (Modules.Module module) -> { - kvv.getResourceFile(success1 -> { - if (success1.equals("")){//Datei wurde nicht heruntergeladen - log.d("ResourceFile Datei nicht vorhanden"); - //todo Nutzer Info senden? - }else { - fileOpen(new File(success1)); - } - }, error -> { - log.e(error); - }, file.getTitle(), file.getUrl(), module.title ); - }, error -> { - log.e(error); - }); + //log.d("ResourceFile berchtigungen: "+ isExternalStorageWritable()); + 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 + log.d("ResourceFile Datei nicht vorhanden"); + 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 { + fileOpen(new File(success1)); + } + }, error -> { + + log.e(error); + }, file.getTitle(), file.getUrl(), modul, downloadNew ); + } + + + + } + + /* Checks if external storage is available for read and write */ + public boolean isExternalStorageWritable() { + String state = Environment.getExternalStorageState(); + //log.d("ResourceFile Environment.getExternalStorageState()"+state); + //log.d("ResourceFile Environment.MEDIA_MOUNTED"+Environment.MEDIA_MOUNTED); + if (Environment.MEDIA_MOUNTED.equals(state)) { + return true; + } + log.d("Dateisystem: kein schreiben möglich"); + return false; } private void fileOpen(File url){ 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 c3dc543..9ff3895 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 @@ -137,8 +137,8 @@ public class KVV { getModulePart(modules -> modules.getResources(module, saveOnCallback(modules, callback, forceRefresh), errorOnCallback(error), forceRefresh)); } - public void getResourceFile(final NetworkCallback callback, final NetworkErrorCallback error, String filename, String url, String moduleName){ - getModulePart(modules -> modules.getResourceFile(callback, errorOnCallback(error),filename, url, moduleName)); + public void getResourceFile(final NetworkCallback callback, final NetworkErrorCallback error, String filename, String url, String moduleName, boolean downloadNew){ + getModulePart(modules -> modules.getResourceFile(callback, errorOnCallback(error),filename, url, moduleName, downloadNew)); } diff --git a/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVModuleList.java b/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVModuleList.java index d5aa9b7..7e1eea5 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVModuleList.java +++ b/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVModuleList.java @@ -36,6 +36,8 @@ import de.sebse.fuplanner.tools.network.NetworkError; import de.sebse.fuplanner.tools.network.NetworkErrorCallback; import de.sebse.fuplanner.tools.network.Result; +import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; + /** * Created by sebastian on 29.10.17. */ @@ -519,13 +521,13 @@ class KVVModuleList extends HTTPService { } - public void getResourceFile( final NetworkCallback callback, final NetworkErrorCallback errorCallback, String Filename, String url, String moduleName) { - + public void getResourceFile( final NetworkCallback callback, final NetworkErrorCallback errorCallback, String Filename, String url, String moduleName, boolean downloadNew) { + //log.d("ResourceFile schreibrechte", WRITE_EXTERNAL_STORAGE); //queueModuleDetails.add(module.getID(), () -> { if (isExternalStorageReadable()){ File f = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_DOWNLOADS)+"/"+moduleName+"/"+Filename); - if (f.exists()) {//prüffen ob bereits herunter gelagen... + if (f.exists() && !downloadNew) {//prüffen ob bereits herunter gelagen und nicht erneut heruntergeladen werden... callback.onResponse(f.getPath()); log.d("ResourceFile laden aus Speicher"); return; @@ -545,19 +547,25 @@ class KVVModuleList extends HTTPService { get(url, token.getCookies(), response ->{ final String[] pfad = {""}; - - if (response.getParsed()==null) + if (response.getBytes()==null){ + log.d("ResourceFile neu einlogen"); testLogin(token, token -> { if (isExternalStorageWritable()) { - pfad[0] = saveFileInDownloads(Filename, response, moduleName); - callback.onResponse(pfad[0]); + get(url, token.getCookies(), response2 ->{//probiern die Datei erneut zu laden + log.d("ResourceFile: response2",response2.getParsed()); + pfad[0] = saveFileInDownloads(Filename, response2, moduleName); + log.d("ResourceFile: pfad[0] 2",pfad[0]); + callback.onResponse(pfad[0]); + log.d("ResourceFile: ", token); + }, error -> errorCallback.onError(new NetworkError(101705, error.networkResponse.statusCode, "Cannot get File!"))); } else { errorCallback.onError(new NetworkError(101703, 403, "Exgternal storage not writeable!")); } }, errorCallback); + } else if (isExternalStorageWritable()) { pfad[0] = saveFileInDownloads(Filename, response, moduleName); - log.d("ResourceFile: ", token); + //log.d("ResourceFile: ", token); callback.onResponse(pfad[0]); } else { errorCallback.onError(new NetworkError(101704, 403, "Exgternal storage not writeable!")); diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 897d9dd..94fba76 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -58,4 +58,7 @@ Erstellt von: %1$s Letzte Änderung: %1$s Download + Datei Öffnen + Download Fehler + Beim herunterladen der Datei ist ein fehler aufgetreten. Prüfen Sie bitte ob sie mit dem Internet Verbunden sind und ob Sie der APP zugriff auf den speicher gewert haben. \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0a8c1f8..134eac8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -65,4 +65,7 @@ Created by: %1$s Last Modified: %1$s Download + Open File + Download Error + An error occurred while downloading the file. Please check if you are connected to the internet and if you have used the app to access the memory.