From 4f74ffb1b3e8cd17f0eb9eaa0144242936182cab Mon Sep 17 00:00:00 2001 From: Sandra Forberger Date: Mon, 28 Oct 2019 17:28:44 +0700 Subject: [PATCH 1/3] fix: add parametertypes to complete download process --- .../tavultesoft/kmea/data/CloudApiTypes.java | 2 +- .../kmea/data/CloudDownloadMgr.java | 20 ++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudApiTypes.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudApiTypes.java index f8bb4287de..7cb8f787bf 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudApiTypes.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudApiTypes.java @@ -151,7 +151,7 @@ public class CloudApiTypes { return callback; } - public void setCallback(ICloudDownloadCallback callback) { + public void setCallback(ICloudDownloadCallback callback) { this.callback = callback; } diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudDownloadMgr.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudDownloadMgr.java index 5360ae4127..015930cdda 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudDownloadMgr.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudDownloadMgr.java @@ -94,14 +94,16 @@ public class CloudDownloadMgr{ * called after finishing the download. * @param aContext the context * @param aDownloadSet the download set + * @param the target models type + * @param the cloud requests result type */ - private void processDownloadSet(Context aContext, CloudApiTypes.CloudDownloadSet aDownloadSet) + private void processDownloadSet(Context aContext, CloudApiTypes.CloudDownloadSet aDownloadSet) { aDownloadSet.setResultsReady(); - ICloudDownloadCallback _callback = aDownloadSet.getCallback(); + ICloudDownloadCallback _callback = aDownloadSet.getCallback(); - Object jsonTuple = _callback + ResultType jsonTuple = _callback .extractCloudResultFromDownloadSet(aDownloadSet); _callback.applyCloudDownloadToModel(aContext,aDownloadSet.getTargetModel(),jsonTuple); @@ -124,10 +126,13 @@ public class CloudDownloadMgr{ * @param aTargetModel the target model * @param aCallback the callback * @param params the cloud api params for download + * @param the target models type + * @param the cloud requests result type */ - public void executeAsDownload(Context aContext, String aDownloadIdentifier, - M aTargetModel, - ICloudDownloadCallback aCallback, CloudApiTypes.CloudApiParam... params) + public void executeAsDownload(Context aContext, String aDownloadIdentifier, + ModelType aTargetModel, + ICloudDownloadCallback aCallback, + CloudApiTypes.CloudApiParam... params) { if(!isInitialized) initializeReceiver(aContext); @@ -139,7 +144,8 @@ public class CloudDownloadMgr{ DownloadManager downloadManager = (DownloadManager) aContext.getSystemService(Context.DOWNLOAD_SERVICE); - CloudApiTypes.CloudDownloadSet _downloadSet = new CloudApiTypes.CloudDownloadSet( + CloudApiTypes.CloudDownloadSet _downloadSet = + new CloudApiTypes.CloudDownloadSet( aDownloadIdentifier,aTargetModel); _downloadSet.setCallback(aCallback); From f6894125d0f49e8455325879352b5a1066653a6c Mon Sep 17 00:00:00 2001 From: Sandra Forberger Date: Tue, 29 Oct 2019 09:31:30 +0700 Subject: [PATCH 2/3] docs: add more comments --- .../kmea/data/CloudDownloadMgr.java | 39 +++++++++++++++++-- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudDownloadMgr.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudDownloadMgr.java index 015930cdda..f00c04c65d 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudDownloadMgr.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudDownloadMgr.java @@ -18,12 +18,20 @@ public class CloudDownloadMgr{ private static CloudDownloadMgr instance; + /** + * + * @return get or create shared instance. + */ public static CloudDownloadMgr getInstance() { if(instance==null) createInstance(); return instance; } + + /** + * create singleton instance. + */ private synchronized static void createInstance() { if(instance!=null) @@ -31,11 +39,18 @@ public class CloudDownloadMgr{ instance = new CloudDownloadMgr(); } + /** + * Marks that the download receiver is already appended to the main context. + */ boolean isInitialized = false; private HashMap internalDownloadIdToDownloadIdentifier = new HashMap<>(); private HashMap downloadSetByDownloadIdentifier = new HashMap<>(); + /** + * Append downloadreceiver to the main context. + * @param aContext the context + */ private synchronized void initializeReceiver(Context aContext) { if(isInitialized) @@ -44,6 +59,9 @@ public class CloudDownloadMgr{ isInitialized = true; } + /** + * callback for finished downloads. + */ BroadcastReceiver completeListener = new BroadcastReceiver() { @Override @@ -55,6 +73,11 @@ public class CloudDownloadMgr{ } }; + /** + * find download set by the android internal download id. + * @param anInternalDownloadId the internal download id + * @return the result + */ private CloudApiTypes.CloudDownloadSet getDownloadSetForInternalDownloadId(long anInternalDownloadId) { String _downloadset_id = internalDownloadIdToDownloadIdentifier.get(anInternalDownloadId); @@ -63,6 +86,10 @@ public class CloudDownloadMgr{ return downloadSetByDownloadIdentifier.get(_downloadset_id); } + /** + * clean up a download. + * @param anIdenitifer the identifier + */ private void removeDownload(String anIdenitifer) { synchronized (downloadSetByDownloadIdentifier) @@ -76,12 +103,18 @@ public class CloudDownloadMgr{ } } - private void downloadCompleted(Context aContext,long aDownloadId) + /** + * Executed when a single download is completed. + * If the whole download set is completed the download results will be processed. + * @param aContext the context + * @param anInternalDownloadId an internal id + */ + private void downloadCompleted(Context aContext,long anInternalDownloadId) { synchronized (downloadSetByDownloadIdentifier) { - CloudApiTypes.CloudDownloadSet _parentSet = getDownloadSetForInternalDownloadId(aDownloadId); - _parentSet.setDone(aDownloadId); + CloudApiTypes.CloudDownloadSet _parentSet = getDownloadSetForInternalDownloadId(anInternalDownloadId); + _parentSet.setDone(anInternalDownloadId); if(!_parentSet.hasOpenDownloads()) { processDownloadSet(aContext, _parentSet); From 053f1ef418f2b252b7c50dbea7602a5d43069e62 Mon Sep 17 00:00:00 2001 From: Sandra Forberger Date: Tue, 29 Oct 2019 10:34:18 +0700 Subject: [PATCH 3/3] fix: initialize and shutdown downloadmgr --- .../java/com/tavultesoft/kmea/KMManager.java | 3 +++ .../kmea/data/CloudDownloadMgr.java | 18 +++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMManager.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMManager.java index 238ee1b3ca..0559fc50ec 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMManager.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMManager.java @@ -59,6 +59,7 @@ import com.tavultesoft.kmea.KeyboardEventHandler.EventType; import com.tavultesoft.kmea.KeyboardEventHandler.OnKeyboardDownloadEventListener; import com.tavultesoft.kmea.KeyboardEventHandler.OnKeyboardEventListener; import com.tavultesoft.kmea.data.CloudDataJsonUtil; +import com.tavultesoft.kmea.data.CloudDownloadMgr; import com.tavultesoft.kmea.data.CloudRepository; import com.tavultesoft.kmea.data.Dataset; import com.tavultesoft.kmea.packages.JSONUtils; @@ -240,6 +241,7 @@ public final class KMManager { JSONUtils.initialize(new File(getPackagesDir())); + CloudDownloadMgr.getInstance().initialize(appContext); //TODO: Add resource update here } @@ -375,6 +377,7 @@ public final class KMManager { if (SystemKeyboard != null) { SystemKeyboard.onDestroy(); } + CloudDownloadMgr.getInstance().shutdown(appContext); } public static void onConfigurationChanged(Configuration newConfig) { diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudDownloadMgr.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudDownloadMgr.java index f00c04c65d..4ddbe25994 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudDownloadMgr.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudDownloadMgr.java @@ -51,14 +51,26 @@ public class CloudDownloadMgr{ * Append downloadreceiver to the main context. * @param aContext the context */ - private synchronized void initializeReceiver(Context aContext) + public synchronized void initialize(Context aContext) { if(isInitialized) return; - aContext.getApplicationContext().registerReceiver(completeListener,new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); + aContext.registerReceiver(completeListener,new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); isInitialized = true; } + /** + * Append downloadreceiver to the main context. + * @param aContext the context + */ + public synchronized void shutdown(Context aContext) + { + if(!isInitialized) + return; + aContext.unregisterReceiver(completeListener); + isInitialized = false; + } + /** * callback for finished downloads. */ @@ -168,7 +180,7 @@ public class CloudDownloadMgr{ CloudApiTypes.CloudApiParam... params) { if(!isInitialized) - initializeReceiver(aContext); + throw new IllegalStateException("Downloadmanager is not initialize. Call KMManger.initialize before"); synchronized (downloadSetByDownloadIdentifier) {