diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboardDownloaderActivity.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboardDownloaderActivity.java index d2fe30aa72..ce42006102 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboardDownloaderActivity.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboardDownloaderActivity.java @@ -169,6 +169,7 @@ public class KMKeyboardDownloaderActivity extends AppCompatActivity { * Used by the download method to handle asynchronous downloading and evaluation of * packages and keyboards. */ + @Deprecated static class DownloadTask extends AsyncTask { static class Result { public final Integer kbdResult; @@ -539,7 +540,12 @@ public class KMKeyboardDownloaderActivity extends AppCompatActivity { new DownloadTask(context, showProgressDialog, aDownloadOnlyLexicalModel).execute(); } - public static void downloadUsingDownloadManager(final Context context, + /** + * Download in keyboards and lexical model using download manager. + * @param context the context + * @param aDownloadOnlyLexicalModel is lexical model download + */ + private static void downloadUsingDownloadManager(final Context context, final boolean aDownloadOnlyLexicalModel) { if(aDownloadOnlyLexicalModel) @@ -552,19 +558,59 @@ public class KMKeyboardDownloaderActivity extends AppCompatActivity { } } - private static void downloadKeyboardUsingDownloadManager(Context context) { - - - + /** + * prepare and execute keyboard download using downloadmanager. + * @param context the context + */ + private static void downloadKeyboardUsingDownloadManager(Context context) + { if (pkgID == null || pkgID.trim().isEmpty() || (!isCustom && (langID == null || langID.trim().isEmpty() || kbID == null || kbID.trim().isEmpty()))) { throw new IllegalStateException("Invalid keyboard"); } - String deviceType = CloudDataJsonUtil.getDeviceTypeForCloudQuery(context); + + List cloudQueries = getPrepareCloudQueriesForKeyboardDownload(context); + + String _downloadid= CloudKeyboardMetaDataDownloadCallback.createDownloadId(langID , kbID); + + if( CloudDownloadMgr.getInstance().alreadyDownloadingData(_downloadid) + || CloudDownloadMgr.getInstance().alreadyDownloadingData( + CloudKeyboardDataDownloadCallback.createDownloadId(kbID))) + { + Toast.makeText(context, + context.getString(R.string.keyboard_download_is_running_in_background), + Toast.LENGTH_SHORT).show(); + } + else + { + CloudKeyboardMetaDataDownloadCallback _callback = new CloudKeyboardMetaDataDownloadCallback(); + _callback.setDownloadEventListeners(kbDownloadEventListeners); + + Toast.makeText(context, + context.getString(R.string.keyboard_download_start_in_background), + Toast.LENGTH_SHORT).show(); + + CloudDownloadMgr.getInstance().executeAsDownload( + context, _downloadid, null, _callback, + cloudQueries.toArray(new CloudApiTypes.CloudApiParam[0])); + } + + ((AppCompatActivity) context).finish(); + } + + /** + * Prepare the cloud queries for keyboard metadata download. + * @param context the context + * @return the result + */ + private static List getPrepareCloudQueriesForKeyboardDownload(Context context) + { List cloudQueries = new ArrayList<>(); + String deviceType = CloudDataJsonUtil.getDeviceTypeForCloudQuery(context); + if (isCustom) { //TODO: will end up in an exception during download??? cloudQueries.add(new CloudApiTypes.CloudApiParam( @@ -588,34 +634,13 @@ public class KMKeyboardDownloaderActivity extends AppCompatActivity { CloudApiTypes.ApiTarget.KeyBoardLexicalModels, _remoteLexicalModelUrl) .setType(CloudApiTypes.JSONType.Array)); } - - String _downloadid= "metadata_" + langID + "_" + kbID; - - if( CloudDownloadMgr.getInstance().alreadyDownloadingData(_downloadid) - || CloudDownloadMgr.getInstance().alreadyDownloadingData( - CloudKeyboardDataDownloadCallback.createDownloadId(kbID))) - { - Toast.makeText(context, - context.getString(R.string.keyboard_download_is_running_in_background), - Toast.LENGTH_SHORT).show(); - } - else - { - CloudKeyboardMetaDataDownloadCallback _callback = new CloudKeyboardMetaDataDownloadCallback(); - _callback.setDownloadEventListeners(kbDownloadEventListeners); - - Toast.makeText(context, - context.getString(R.string.keyboard_download_start_in_background), - Toast.LENGTH_SHORT).show(); - - CloudDownloadMgr.getInstance().executeAsDownload( - context, _downloadid, null, _callback, - cloudQueries.toArray(new CloudApiTypes.CloudApiParam[0])); - } - - ((AppCompatActivity) context).finish(); + return cloudQueries; } + /** + * prepare and execute lexical model download using downloadmanager. + * @param context the context + */ private static void downloadLexicalModelUsingDownloadManager(Context context) { diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudDataJsonUtil.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudDataJsonUtil.java index 684f58aa1c..274c130aa4 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudDataJsonUtil.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudDataJsonUtil.java @@ -237,6 +237,11 @@ public class CloudDataJsonUtil { return new File(context.getCacheDir(), jsonLexicalCacheFilename); } + /** + * retrieve a json object from a downloaded file. + * @param aDownload the download + * @return the result + */ public static CloudApiTypes.CloudApiReturns retrieveJsonFromDownload( CloudApiTypes.SingleCloudDownload aDownload) { JSONParser jsonParser = new JSONParser(); @@ -397,6 +402,12 @@ public class CloudDataJsonUtil { return keyboard; } + + /** + * select device type for api queries. + * @param aContext a context + * @return the result + */ public static String getDeviceTypeForCloudQuery(Context aContext) { String deviceType = aContext.getString(R.string.device_type); diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudKeyboardDataDownloadCallback.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudKeyboardDataDownloadCallback.java index 5739cc28da..36b144d26a 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudKeyboardDataDownloadCallback.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudKeyboardDataDownloadCallback.java @@ -15,6 +15,10 @@ import java.util.HashMap; import static com.tavultesoft.kmea.KMManager.KMDefault_UndefinedPackageID; +/** + * Install keyboard data, when download is finished. + * Could be keyboard packages or fonts. + */ public class CloudKeyboardDataDownloadCallback implements ICloudDownloadCallback< Void, CloudKeyboardDownloadReturns> { @@ -26,14 +30,34 @@ public class CloudKeyboardDataDownloadCallback implements ICloudDownloadCallback private ArrayList downloadEventListeners = new ArrayList<>(); private HashMap keyboardInfo; + /** + * Additional Cloud API parameter: + * Parameter to force a special destination file name during installation. + * Default name is the file name of the url. + */ public static final String PARAM_DESTINATION_FILE_NAME = "destination_file_name"; + /** + * Additional Cloud API parameter: + * Parameter to force a special destination file name during installation. + * Default name is the file name of the url. + */ + public static final String PARAM_PACKAGE = "package"; + + /** + * listeners to inform after installation is completed. + * @param aDownloadEventListeners the listeners + */ public void setDownloadEventListeners(ArrayList aDownloadEventListeners) { downloadEventListeners.clear(); downloadEventListeners.addAll(aDownloadEventListeners); } + /** + * Keyboard meta data. + * @param aKeyboardInfo the keyboard + */ public void setKeyboardInfo(HashMap aKeyboardInfo) { this.keyboardInfo = aKeyboardInfo; } @@ -56,8 +80,9 @@ public class CloudKeyboardDataDownloadCallback implements ICloudDownloadCallback try { + String _pkg = _d.getCloudParams().getAdditionalProperty(PARAM_PACKAGE,String.class); String destination = dataDir.toString() + - File.separator + KMDefault_UndefinedPackageID + File.separator; + File.separator + _pkg + File.separator; String _filename = _d.getCloudParams().getAdditionalProperty(PARAM_DESTINATION_FILE_NAME,String.class); if (_filename==null) { @@ -99,11 +124,13 @@ public class CloudKeyboardDataDownloadCallback implements ICloudDownloadCallback KeyboardEventHandler.notifyListeners(downloadEventListeners, KeyboardEventHandler.EventType.KEYBOARD_DOWNLOAD_FINISHED, keyboardInfo, aCloudResult.kbdResult); } - - - } + /** + * create a download id for the keyboard data. + * @param aKeyboardId the keyboard id + * @return the result + */ public static String createDownloadId(String aKeyboardId) { return "keyboarddata_" + aKeyboardId; diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudKeyboardDownloadReturns.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudKeyboardDownloadReturns.java index 967d91a5ac..8aaaa21d84 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudKeyboardDownloadReturns.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudKeyboardDownloadReturns.java @@ -3,6 +3,9 @@ package com.tavultesoft.kmea.data; import java.util.List; import java.util.Map; +/** + * key board and lexical model download result. + */ public class CloudKeyboardDownloadReturns { public final Integer kbdResult; public final List> installedLexicalModels; diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudKeyboardMetaDataDownloadCallback.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudKeyboardMetaDataDownloadCallback.java index 759c9f1da5..2afa320cbc 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudKeyboardMetaDataDownloadCallback.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudKeyboardMetaDataDownloadCallback.java @@ -18,9 +18,15 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +/** + * Start the keyboard download when keyboard metadata is downloaded. + */ public class CloudKeyboardMetaDataDownloadCallback implements ICloudDownloadCallback> { + /** + * the metadata result and all necessary downloads which should be started. + */ public static class MetaDataResult { CloudApiTypes.CloudApiReturns returnjson; @@ -32,14 +38,25 @@ public class CloudKeyboardMetaDataDownloadCallback implements ICloudDownloadCall private static final String TAG = "CloudKeyboardMetaDldCb"; - private static ArrayList downloadEventListeners = new ArrayList<>(); - + private ArrayList downloadEventListeners = new ArrayList<>(); + /** + * Additional Cloud API parameter: Is custom keyboard. + */ public static final String PARAM_IS_CUSTOM = "is_custom"; + /** + * Additional Cloud API parameter: language id. + */ public static final String PARAM_LANG_ID = "lang_id"; + /** + * Additional Cloud API parameter: keyboard id. + */ public static final String PARAM_KB_ID = "kb_id"; - + /** + * Listeners to notify about starting the data download. + * @param aDownloadEventListeners + */ public void setDownloadEventListeners(ArrayList aDownloadEventListeners) { downloadEventListeners.clear(); downloadEventListeners.addAll(aDownloadEventListeners); @@ -88,8 +105,13 @@ public class CloudKeyboardMetaDataDownloadCallback implements ICloudDownloadCall startDownloads(aContext, aCloudResult); } - private void startDownloads(Context aContext, List aCloudResult) { - for(MetaDataResult _r:aCloudResult) + /** + * Start the keyboard data and lexical model download. + * @param aContext the context + * @param aMetaDataResult the meta data result + */ + private void startDownloads(Context aContext, List aMetaDataResult) { + for(MetaDataResult _r:aMetaDataResult) { if(_r.additionalDownloads!=null) { @@ -134,8 +156,12 @@ public class CloudKeyboardMetaDataDownloadCallback implements ICloudDownloadCall } } - private void processCloudResults(List aCloudResult) { - for(MetaDataResult _r:aCloudResult) + /** + * process the meta data result and prepare the additional downloads. + * @param aMetaDataResult the meta data results + */ + private void processCloudResults(List aMetaDataResult) { + for(MetaDataResult _r:aMetaDataResult) { if(_r.returnjson.target== CloudApiTypes.ApiTarget.Keyboard) { @@ -229,13 +255,17 @@ public class CloudKeyboardMetaDataDownloadCallback implements ICloudDownloadCall ArrayList oskFontUrls = CloudDataJsonUtil.fontUrls(jsonOskFont, fontBaseUri, true); if (fontUrls != null) { for (String url : fontUrls) { - urls.add(new CloudApiTypes.CloudApiParam(CloudApiTypes.ApiTarget.KeyboardData, url)); + urls.add(new CloudApiTypes.CloudApiParam(CloudApiTypes.ApiTarget.KeyboardData, url) + .setAdditionalProperty( + CloudKeyboardDataDownloadCallback.PARAM_PACKAGE, _pkgID)); } } if (oskFontUrls != null) { for (String url : oskFontUrls) { if (!urls.contains(url)) - urls.add(new CloudApiTypes.CloudApiParam(CloudApiTypes.ApiTarget.KeyboardData, url)); + urls.add(new CloudApiTypes.CloudApiParam(CloudApiTypes.ApiTarget.KeyboardData, url) + .setAdditionalProperty( + CloudKeyboardDataDownloadCallback.PARAM_PACKAGE, _pkgID)); ; } } @@ -285,13 +315,26 @@ public class CloudKeyboardMetaDataDownloadCallback implements ICloudDownloadCall _js_filename = _kbFilename.substring(start); } } + + String _pkgID = aKeyboard.optString(KMManager.KMKey_PackageID, KMManager.KMDefault_UndefinedPackageID); String kbUrl = kbBaseUri + _kbFilename; return new CloudApiTypes.CloudApiParam(CloudApiTypes.ApiTarget.KeyboardData, kbUrl) + .setAdditionalProperty( + CloudKeyboardDataDownloadCallback.PARAM_PACKAGE, _pkgID) .setAdditionalProperty( CloudKeyboardDataDownloadCallback.PARAM_DESTINATION_FILE_NAME, _js_filename); } - + /** + * create a download id for the keyboard metadata. + * @param aLanguageId the language id + * @param aKeyboardId the keyboard id + * @return the result + */ + public static String createDownloadId(String aLanguageId, String aKeyboardId) + { + return "metadata_" + aLanguageId + "_" + aKeyboardId; + } } diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudLexicalPackageDownloadCallback.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudLexicalPackageDownloadCallback.java index 080a52dd8f..91106ad61a 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudLexicalPackageDownloadCallback.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/CloudLexicalPackageDownloadCallback.java @@ -24,6 +24,9 @@ import java.util.Map; import static com.tavultesoft.kmea.KMManager.KMDefault_UndefinedPackageID; +/** + * Install lexical model. + */ public class CloudLexicalPackageDownloadCallback implements ICloudDownloadCallback< Void, CloudKeyboardDownloadReturns> { @@ -35,6 +38,10 @@ public class CloudLexicalPackageDownloadCallback implements ICloudDownloadCallba private ArrayList downloadEventListeners = new ArrayList<>(); + /** + * listeners to inform after installation is completed. + * @param aDownloadEventListeners the listeners + */ public void setDownloadEventListeners(ArrayList aDownloadEventListeners) { downloadEventListeners.clear(); @@ -52,7 +59,6 @@ public class CloudLexicalPackageDownloadCallback implements ICloudDownloadCallba public CloudKeyboardDownloadReturns extractCloudResultFromDownloadSet( CloudApiTypes.CloudDownloadSet aDownload) { - LexicalModelPackageProcessor kmpProcessor = new LexicalModelPackageProcessor(resourceRoot); List> installedLexicalModels = null; @@ -105,12 +111,15 @@ public class CloudLexicalPackageDownloadCallback implements ICloudDownloadCallba KeyboardEventHandler.notifyListeners(downloadEventListeners, KeyboardEventHandler.EventType.LEXICAL_MODEL_INSTALLED, aCloudResult.installedLexicalModels, aCloudResult.kbdResult); } - - } - public static String createDownloadId(String aModelID) + /** + * create a download id for the model. + * @param aModelId the lexical model id + * @return the result + */ + public static String createDownloadId(String aModelId) { - return "dictionary_" + aModelID; + return "dictionary_" + aModelId; } } diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/ICloudDownloadCallback.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/ICloudDownloadCallback.java index 5d63d09ecf..5fe73b75c6 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/ICloudDownloadCallback.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/data/ICloudDownloadCallback.java @@ -9,6 +9,10 @@ import android.content.Context; */ public interface ICloudDownloadCallback { + /** + * Initialize callback using context. + * @param context the context + */ void initializeContext(Context context); /**