From 7692db2815701386475b91eb199ae7fae4c050f4 Mon Sep 17 00:00:00 2001 From: Mohammad Haque Date: Sat, 19 Sep 2015 21:58:25 +0100 Subject: [PATCH 01/10] updated gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index d4dc10f..60301cc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ - +apps/CordovaApp/platforms +apps/CordovaApp/plugins *.tmp From 54fbf571ffebb9ec651e0a020d7186043ad6904b Mon Sep 17 00:00:00 2001 From: Mohammad Haque Date: Sat, 19 Sep 2015 21:59:02 +0100 Subject: [PATCH 02/10] basic cordova app with android plugin --- apps/CordovaApp/config.xml | 26 ++++ apps/CordovaApp/hooks/README.md | 196 ++++++++++++++++++++++++++++++ apps/CordovaApp/www/css/index.css | 115 ++++++++++++++++++ apps/CordovaApp/www/img/logo.png | Bin 0 -> 21814 bytes apps/CordovaApp/www/index.html | 49 ++++++++ apps/CordovaApp/www/js/index.js | 51 ++++++++ 6 files changed, 437 insertions(+) create mode 100644 apps/CordovaApp/config.xml create mode 100644 apps/CordovaApp/hooks/README.md create mode 100644 apps/CordovaApp/www/css/index.css create mode 100644 apps/CordovaApp/www/img/logo.png create mode 100644 apps/CordovaApp/www/index.html create mode 100644 apps/CordovaApp/www/js/index.js diff --git a/apps/CordovaApp/config.xml b/apps/CordovaApp/config.xml new file mode 100644 index 0000000..973e680 --- /dev/null +++ b/apps/CordovaApp/config.xml @@ -0,0 +1,26 @@ + + + QuranApp + + A sample Apache Cordova application that responds to the deviceready event. + + + Apache Cordova Team + + + + + + + + + + + + + + + + + + diff --git a/apps/CordovaApp/hooks/README.md b/apps/CordovaApp/hooks/README.md new file mode 100644 index 0000000..62e58b4 --- /dev/null +++ b/apps/CordovaApp/hooks/README.md @@ -0,0 +1,196 @@ + +# Cordova Hooks + +Cordova Hooks represent special scripts which could be added by application and plugin developers or even by your own build system to customize cordova commands. Hook scripts could be defined by adding them to the special predefined folder (`/hooks`) or via configuration files (`config.xml` and `plugin.xml`) and run serially in the following order: +* Application hooks from `/hooks`; +* Application hooks from `config.xml`; +* Plugin hooks from `plugins/.../plugin.xml`. + +__Remember__: Make your scripts executable. + +__Note__: `.cordova/hooks` directory is also supported for backward compatibility, but we don't recommend using it as it is deprecated. + +## Supported hook types +The following hook types are supported: + + after_build/ + after_compile/ + after_docs/ + after_emulate/ + after_platform_add/ + after_platform_rm/ + after_platform_ls/ + after_plugin_add/ + after_plugin_ls/ + after_plugin_rm/ + after_plugin_search/ + after_plugin_install/ <-- Plugin hooks defined in plugin.xml are executed exclusively for a plugin being installed + after_prepare/ + after_run/ + after_serve/ + before_build/ + before_compile/ + before_docs/ + before_emulate/ + before_platform_add/ + before_platform_rm/ + before_platform_ls/ + before_plugin_add/ + before_plugin_ls/ + before_plugin_rm/ + before_plugin_search/ + before_plugin_install/ <-- Plugin hooks defined in plugin.xml are executed exclusively for a plugin being installed + before_plugin_uninstall/ <-- Plugin hooks defined in plugin.xml are executed exclusively for a plugin being uninstalled + before_prepare/ + before_run/ + before_serve/ + pre_package/ <-- Windows 8 and Windows Phone only. + +## Ways to define hooks +### Via '/hooks' directory +To execute custom action when corresponding hook type is fired, use hook type as a name for a subfolder inside 'hooks' directory and place you script file here, for example: + + # script file will be automatically executed after each build + hooks/after_build/after_build_custom_action.js + + +### Config.xml + +Hooks can be defined in project's `config.xml` using `` elements, for example: + + + + + + + + + + ... + + + + + + + ... + + +### Plugin hooks (plugin.xml) + +As a plugin developer you can define hook scripts using `` elements in a `plugin.xml` like that: + + + + + + + + ... + + +`before_plugin_install`, `after_plugin_install`, `before_plugin_uninstall` plugin hooks will be fired exclusively for the plugin being installed/uninstalled. + +## Script Interface + +### Javascript + +If you are writing hooks in Javascript you should use the following module definition: +```javascript +module.exports = function(context) { + ... +} +``` + +You can make your scipts async using Q: +```javascript +module.exports = function(context) { + var Q = context.requireCordovaModule('q'); + var deferral = new Q.defer(); + + setTimeout(function(){ + console.log('hook.js>> end'); + deferral.resolve(); + }, 1000); + + return deferral.promise; +} +``` + +`context` object contains hook type, executed script full path, hook options, command-line arguments passed to Cordova and top-level "cordova" object: +```json +{ + "hook": "before_plugin_install", + "scriptLocation": "c:\\script\\full\\path\\appBeforePluginInstall.js", + "cmdLine": "The\\exact\\command\\cordova\\run\\with arguments", + "opts": { + "projectRoot":"C:\\path\\to\\the\\project", + "cordova": { + "platforms": ["wp8"], + "plugins": ["com.plugin.withhooks"], + "version": "0.21.7-dev" + }, + "plugin": { + "id": "com.plugin.withhooks", + "pluginInfo": { + ... + }, + "platform": "wp8", + "dir": "C:\\path\\to\\the\\project\\plugins\\com.plugin.withhooks" + } + }, + "cordova": {...} +} + +``` +`context.opts.plugin` object will only be passed to plugin hooks scripts. + +You can also require additional Cordova modules in your script using `context.requireCordovaModule` in the following way: +```javascript +var Q = context.requireCordovaModule('q'); +``` + +__Note__: new module loader script interface is used for the `.js` files defined via `config.xml` or `plugin.xml` only. +For compatibility reasons hook files specified via `/hooks` folders are run via Node child_process spawn, see 'Non-javascript' section below. + +### Non-javascript + +Non-javascript scripts are run via Node child_process spawn from the project's root directory and have the root directory passes as the first argument. All other options are passed to the script using environment variables: + +* CORDOVA_VERSION - The version of the Cordova-CLI. +* CORDOVA_PLATFORMS - Comma separated list of platforms that the command applies to (e.g.: android, ios). +* CORDOVA_PLUGINS - Comma separated list of plugin IDs that the command applies to (e.g.: org.apache.cordova.file, org.apache.cordova.file-transfer) +* CORDOVA_HOOK - Path to the hook that is being executed. +* CORDOVA_CMDLINE - The exact command-line arguments passed to cordova (e.g.: cordova run ios --emulate) + +If a script returns a non-zero exit code, then the parent cordova command will be aborted. + +## Writing hooks + +We highly recommend writing your hooks using Node.js so that they are +cross-platform. Some good examples are shown here: + +[http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/](http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/) + +Also, note that even if you are working on Windows, and in case your hook scripts aren't bat files (which is recommended, if you want your scripts to work in non-Windows operating systems) Cordova CLI will expect a shebang line as the first line for it to know the interpreter it needs to use to launch the script. The shebang line should match the following example: + + #!/usr/bin/env [name_of_interpreter_executable] diff --git a/apps/CordovaApp/www/css/index.css b/apps/CordovaApp/www/css/index.css new file mode 100644 index 0000000..51daa79 --- /dev/null +++ b/apps/CordovaApp/www/css/index.css @@ -0,0 +1,115 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +* { + -webkit-tap-highlight-color: rgba(0,0,0,0); /* make transparent link selection, adjust last value opacity 0 to 1.0 */ +} + +body { + -webkit-touch-callout: none; /* prevent callout to copy image, etc when tap to hold */ + -webkit-text-size-adjust: none; /* prevent webkit from resizing text to fit */ + -webkit-user-select: none; /* prevent copy paste, to allow, change 'none' to 'text' */ + background-color:#E4E4E4; + background-image:linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%); + background-image:-webkit-linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%); + background-image:-ms-linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%); + background-image:-webkit-gradient( + linear, + left top, + left bottom, + color-stop(0, #A7A7A7), + color-stop(0.51, #E4E4E4) + ); + background-attachment:fixed; + font-family:'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, sans-serif; + font-size:12px; + height:100%; + margin:0px; + padding:0px; + text-transform:uppercase; + width:100%; +} + +/* Portrait layout (default) */ +.app { + background:url(../img/logo.png) no-repeat center top; /* 170px x 200px */ + position:absolute; /* position in the center of the screen */ + left:50%; + top:50%; + height:50px; /* text area height */ + width:225px; /* text area width */ + text-align:center; + padding:180px 0px 0px 0px; /* image height is 200px (bottom 20px are overlapped with text) */ + margin:-115px 0px 0px -112px; /* offset vertical: half of image height and text area height */ + /* offset horizontal: half of text area width */ +} + +/* Landscape layout (with min-width) */ +@media screen and (min-aspect-ratio: 1/1) and (min-width:400px) { + .app { + background-position:left center; + padding:75px 0px 75px 170px; /* padding-top + padding-bottom + text area = image height */ + margin:-90px 0px 0px -198px; /* offset vertical: half of image height */ + /* offset horizontal: half of image width and text area width */ + } +} + +h1 { + font-size:24px; + font-weight:normal; + margin:0px; + overflow:visible; + padding:0px; + text-align:center; +} + +.event { + border-radius:4px; + -webkit-border-radius:4px; + color:#FFFFFF; + font-size:12px; + margin:0px 30px; + padding:2px 0px; +} + +.event.listening { + background-color:#333333; + display:block; +} + +.event.received { + background-color:#4B946A; + display:none; +} + +@keyframes fade { + from { opacity: 1.0; } + 50% { opacity: 0.4; } + to { opacity: 1.0; } +} + +@-webkit-keyframes fade { + from { opacity: 1.0; } + 50% { opacity: 0.4; } + to { opacity: 1.0; } +} + +.blink { + animation:fade 3000ms infinite; + -webkit-animation:fade 3000ms infinite; +} diff --git a/apps/CordovaApp/www/img/logo.png b/apps/CordovaApp/www/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9519e7dd78adb6e44548c08510a7bf02442a7697 GIT binary patch literal 21814 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 + + + + + + + + + + Hello World + + +
+

Apache Cordova

+ +
+ + + + diff --git a/apps/CordovaApp/www/js/index.js b/apps/CordovaApp/www/js/index.js new file mode 100644 index 0000000..c31cd83 --- /dev/null +++ b/apps/CordovaApp/www/js/index.js @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +var app = { + // Application Constructor + initialize: function() { + this.bindEvents(); + }, + // Bind Event Listeners + // + // Bind any events that are required on startup. Common events are: + // 'load', 'deviceready', 'offline', and 'online'. + bindEvents: function() { + document.addEventListener('deviceready', this.onDeviceReady, false); + }, + // deviceready Event Handler + // + // The scope of 'this' is the event. In order to call the 'receivedEvent' + // function, we must explicitly call 'app.receivedEvent(...);' + onDeviceReady: function() { + app.receivedEvent('deviceready'); + }, + // Update DOM on a Received Event + receivedEvent: function(id) { + var parentElement = document.getElementById(id); + var listeningElement = parentElement.querySelector('.listening'); + var receivedElement = parentElement.querySelector('.received'); + + listeningElement.setAttribute('style', 'display:none;'); + receivedElement.setAttribute('style', 'display:block;'); + + console.log('Received Event: ' + id); + } +}; + +app.initialize(); \ No newline at end of file From 1ab0cb4ec8ae8b414d50b841687bbed557b71dd9 Mon Sep 17 00:00:00 2001 From: Mohammad Haque Date: Sat, 19 Sep 2015 22:00:44 +0100 Subject: [PATCH 03/10] updated config for android plugin --- apps/CordovaApp/config.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/CordovaApp/config.xml b/apps/CordovaApp/config.xml index 973e680..093685d 100644 --- a/apps/CordovaApp/config.xml +++ b/apps/CordovaApp/config.xml @@ -23,4 +23,5 @@ + From ad87067cad14ff3daf8ba9a4975c1d25a1b1cfd4 Mon Sep 17 00:00:00 2001 From: Mohammad Haque Date: Sat, 3 Oct 2015 18:22:17 +0100 Subject: [PATCH 04/10] added audio downloader/player helper --- .gitignore | 3 + apps/CordovaApp/config.xml | 3 +- apps/CordovaApp/www/css/index.css | 115 ------------------------- apps/CordovaApp/www/img/logo.png | Bin 21814 -> 0 bytes apps/CordovaApp/www/index.html | 49 ----------- apps/CordovaApp/www/js/audio-helper.js | 78 +++++++++++++++++ apps/CordovaApp/www/js/index.js | 51 ----------- apps/QuranAndroidApp/app/build.gradle | 2 +- apps/QuranAndroidApp/build.gradle | 2 +- 9 files changed, 85 insertions(+), 218 deletions(-) delete mode 100644 apps/CordovaApp/www/css/index.css delete mode 100644 apps/CordovaApp/www/img/logo.png delete mode 100644 apps/CordovaApp/www/index.html create mode 100644 apps/CordovaApp/www/js/audio-helper.js delete mode 100644 apps/CordovaApp/www/js/index.js diff --git a/.gitignore b/.gitignore index 60301cc..f1ba02e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ apps/CordovaApp/platforms apps/CordovaApp/plugins *.tmp + +apps/CordovaApp/www/*.* +!apps/CordovaApp/www/js/audio-helper.js diff --git a/apps/CordovaApp/config.xml b/apps/CordovaApp/config.xml index 093685d..ddb496c 100644 --- a/apps/CordovaApp/config.xml +++ b/apps/CordovaApp/config.xml @@ -10,6 +10,7 @@ + @@ -23,5 +24,5 @@ - + diff --git a/apps/CordovaApp/www/css/index.css b/apps/CordovaApp/www/css/index.css deleted file mode 100644 index 51daa79..0000000 --- a/apps/CordovaApp/www/css/index.css +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -* { - -webkit-tap-highlight-color: rgba(0,0,0,0); /* make transparent link selection, adjust last value opacity 0 to 1.0 */ -} - -body { - -webkit-touch-callout: none; /* prevent callout to copy image, etc when tap to hold */ - -webkit-text-size-adjust: none; /* prevent webkit from resizing text to fit */ - -webkit-user-select: none; /* prevent copy paste, to allow, change 'none' to 'text' */ - background-color:#E4E4E4; - background-image:linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%); - background-image:-webkit-linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%); - background-image:-ms-linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%); - background-image:-webkit-gradient( - linear, - left top, - left bottom, - color-stop(0, #A7A7A7), - color-stop(0.51, #E4E4E4) - ); - background-attachment:fixed; - font-family:'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, sans-serif; - font-size:12px; - height:100%; - margin:0px; - padding:0px; - text-transform:uppercase; - width:100%; -} - -/* Portrait layout (default) */ -.app { - background:url(../img/logo.png) no-repeat center top; /* 170px x 200px */ - position:absolute; /* position in the center of the screen */ - left:50%; - top:50%; - height:50px; /* text area height */ - width:225px; /* text area width */ - text-align:center; - padding:180px 0px 0px 0px; /* image height is 200px (bottom 20px are overlapped with text) */ - margin:-115px 0px 0px -112px; /* offset vertical: half of image height and text area height */ - /* offset horizontal: half of text area width */ -} - -/* Landscape layout (with min-width) */ -@media screen and (min-aspect-ratio: 1/1) and (min-width:400px) { - .app { - background-position:left center; - padding:75px 0px 75px 170px; /* padding-top + padding-bottom + text area = image height */ - margin:-90px 0px 0px -198px; /* offset vertical: half of image height */ - /* offset horizontal: half of image width and text area width */ - } -} - -h1 { - font-size:24px; - font-weight:normal; - margin:0px; - overflow:visible; - padding:0px; - text-align:center; -} - -.event { - border-radius:4px; - -webkit-border-radius:4px; - color:#FFFFFF; - font-size:12px; - margin:0px 30px; - padding:2px 0px; -} - -.event.listening { - background-color:#333333; - display:block; -} - -.event.received { - background-color:#4B946A; - display:none; -} - -@keyframes fade { - from { opacity: 1.0; } - 50% { opacity: 0.4; } - to { opacity: 1.0; } -} - -@-webkit-keyframes fade { - from { opacity: 1.0; } - 50% { opacity: 0.4; } - to { opacity: 1.0; } -} - -.blink { - animation:fade 3000ms infinite; - -webkit-animation:fade 3000ms infinite; -} diff --git a/apps/CordovaApp/www/img/logo.png b/apps/CordovaApp/www/img/logo.png deleted file mode 100644 index 9519e7dd78adb6e44548c08510a7bf02442a7697..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21814 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
Qfv&3%?A-1S}IU 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 - - - - - - - - - - Hello World - - -
-

Apache Cordova

- -
- - - - diff --git a/apps/CordovaApp/www/js/audio-helper.js b/apps/CordovaApp/www/js/audio-helper.js new file mode 100644 index 0000000..2b917ab --- /dev/null +++ b/apps/CordovaApp/www/js/audio-helper.js @@ -0,0 +1,78 @@ +//The directory to store data +var store; +var reciter; +var sura; +var aya; +var defaultReciter = 'Husary_128kbps'; + +function play(s, a) { + play(defaultReciter, s, a); +} + +function play(r, s, a) { + reciter = r; + sura = threeDigits(s); + aya = threeDigits(a); + + store = cordova.file.dataDirectory + 'mp3/'; + window.resolveLocalFileSystemURL(getLocalFile(), playLocalFile, downloadFile); +} + +function threeDigits(num) { + var temp = '000'+ num; + return temp.substr(temp.length-3); +} + +function getLocalFile() { + return store + '/' + reciter + '/' + sura + '/' + aya + '.mp3'; +} + +function getDownloadURI() { + return 'http://www.everyayah.com/data/'+ reciter+ '/'+ sura+ aya+ '.mp3'; +} + +function playLocalFile(fileName) { + console.log('Playing local file...'); + console.log(fileName.nativeURL); + var media = new Media(fileName.nativeURL, onMediaComplete, onMediaError, onMediaStatus); + media.play(); +} + +function onMediaError(e) { + console.log('Media Error'); + console.log(JSON.stringify(e)); +} + +function onMediaComplete() { + console.log('Media completed'); +} + +function onMediaStatus(entry) { + console.log('Media status'); + console.log(JSON.stringify(entry)); +} + +function downloadFile() { + var fileTransfer = new FileTransfer(); + var localTargetFile = getLocalFile(); + + console.log("About to start file download..."); + console.log("localTargetFile: " + localTargetFile); + + fileTransfer.download( + getDownloadURI(), + localTargetFile, + function(entry) { + console.log("Successfully file downloaded") + }, + function(error) { + console.log("download error source " + error.source); + console.log("download error target " + error.target); + console.log("download error code" + error.code); + } + ); +} + +function file_test() { + console.log(cordova.file.dataDirectory + 'mp3/'); +} \ No newline at end of file diff --git a/apps/CordovaApp/www/js/index.js b/apps/CordovaApp/www/js/index.js deleted file mode 100644 index c31cd83..0000000 --- a/apps/CordovaApp/www/js/index.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -var app = { - // Application Constructor - initialize: function() { - this.bindEvents(); - }, - // Bind Event Listeners - // - // Bind any events that are required on startup. Common events are: - // 'load', 'deviceready', 'offline', and 'online'. - bindEvents: function() { - document.addEventListener('deviceready', this.onDeviceReady, false); - }, - // deviceready Event Handler - // - // The scope of 'this' is the event. In order to call the 'receivedEvent' - // function, we must explicitly call 'app.receivedEvent(...);' - onDeviceReady: function() { - app.receivedEvent('deviceready'); - }, - // Update DOM on a Received Event - receivedEvent: function(id) { - var parentElement = document.getElementById(id); - var listeningElement = parentElement.querySelector('.listening'); - var receivedElement = parentElement.querySelector('.received'); - - listeningElement.setAttribute('style', 'display:none;'); - receivedElement.setAttribute('style', 'display:block;'); - - console.log('Received Event: ' + id); - } -}; - -app.initialize(); \ No newline at end of file diff --git a/apps/QuranAndroidApp/app/build.gradle b/apps/QuranAndroidApp/app/build.gradle index cd73e9a..afc219f 100644 --- a/apps/QuranAndroidApp/app/build.gradle +++ b/apps/QuranAndroidApp/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 22 - buildToolsVersion "23.0.0 rc2" + buildToolsVersion "23.0.1" defaultConfig { applicationId "com.quranapp.android" diff --git a/apps/QuranAndroidApp/build.gradle b/apps/QuranAndroidApp/build.gradle index 1b7886d..2841f22 100644 --- a/apps/QuranAndroidApp/build.gradle +++ b/apps/QuranAndroidApp/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.3.0' + classpath 'com.android.tools.build:gradle:1.4.0-beta3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files From d8a19a81ff01f507d711d99eefe2da4e2bad4421 Mon Sep 17 00:00:00 2001 From: Mohammad Haque Date: Sat, 3 Oct 2015 21:00:46 +0100 Subject: [PATCH 05/10] minor refactoring --- .gitignore | 2 +- apps/CordovaApp/www/js/audio-helper.js | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index f1ba02e..88ec8cd 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,5 @@ apps/CordovaApp/platforms apps/CordovaApp/plugins *.tmp -apps/CordovaApp/www/*.* +apps/CordovaApp/www/* !apps/CordovaApp/www/js/audio-helper.js diff --git a/apps/CordovaApp/www/js/audio-helper.js b/apps/CordovaApp/www/js/audio-helper.js index 2b917ab..9a7aee8 100644 --- a/apps/CordovaApp/www/js/audio-helper.js +++ b/apps/CordovaApp/www/js/audio-helper.js @@ -1,5 +1,8 @@ //The directory to store data var store; +//media player +var media; + var reciter; var sura; var aya; @@ -34,7 +37,10 @@ function getDownloadURI() { function playLocalFile(fileName) { console.log('Playing local file...'); console.log(fileName.nativeURL); - var media = new Media(fileName.nativeURL, onMediaComplete, onMediaError, onMediaStatus); + if(media != null) + media.release(); + + media = new Media(fileName.nativeURL, onMediaComplete, onMediaError, onMediaStatus); media.play(); } @@ -52,7 +58,8 @@ function onMediaStatus(entry) { console.log(JSON.stringify(entry)); } -function downloadFile() { +function downloadFile(entry) { + console.log(entry) var fileTransfer = new FileTransfer(); var localTargetFile = getLocalFile(); From 518d022e174e55f32e6373cf55a1e1fa96c600b3 Mon Sep 17 00:00:00 2001 From: Mohammad Haque Date: Sun, 4 Oct 2015 08:43:49 +0100 Subject: [PATCH 06/10] removed old android project --- .gitignore | 1 + apps/CordovaApp/extra/build.gradle | 51 ++++++ apps/QuranAndroidApp/.gitignore | 12 -- apps/QuranAndroidApp/QuranAndroidApp.iml | 19 -- apps/QuranAndroidApp/app/.gitignore | 1 - apps/QuranAndroidApp/app/build.gradle | 30 ---- apps/QuranAndroidApp/app/proguard-rules.pro | 17 -- .../quranandroidapp/ApplicationTest.java | 13 -- .../app/src/main/AndroidManifest.xml | 31 ---- .../java/com/quranapp/android/Constants.java | 6 - .../java/com/quranapp/android/QuranApp.java | 22 --- .../android/activity/ReadingActivity.java | 32 ---- .../android/activity/SplashActivity.java | 83 --------- .../service/BundleDownloadService.java | 101 ----------- .../quranapp/android/service/BusFactory.java | 43 ----- .../android/util/IntentExtraKeys.java | 6 - .../android/util/OkHttpClientFactory.java | 59 ------- .../android/util/PreferenceHelper.java | 36 ---- .../quranapp/android/util/StreamHelper.java | 52 ------ .../com/quranapp/android/util/Unzipper.java | 84 --------- .../src/main/res/layout/activity_reading.xml | 12 -- .../src/main/res/layout/activity_splash.xml | 21 --- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3418 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2206 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4842 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 7718 -> 0 bytes .../app/src/main/res/values-w820dp/dimens.xml | 6 - .../app/src/main/res/values/dimens.xml | 5 - .../app/src/main/res/values/strings.xml | 3 - .../app/src/main/res/values/styles.xml | 8 - apps/QuranAndroidApp/build.gradle | 19 -- apps/QuranAndroidApp/gradle.properties | 18 -- .../gradle/wrapper/gradle-wrapper.jar | Bin 49896 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 - apps/QuranAndroidApp/gradlew | 164 ------------------ apps/QuranAndroidApp/gradlew.bat | 90 ---------- apps/QuranAndroidApp/settings.gradle | 1 - index.html | 3 + 38 files changed, 55 insertions(+), 1000 deletions(-) create mode 100644 apps/CordovaApp/extra/build.gradle delete mode 100644 apps/QuranAndroidApp/.gitignore delete mode 100644 apps/QuranAndroidApp/QuranAndroidApp.iml delete mode 100644 apps/QuranAndroidApp/app/.gitignore delete mode 100644 apps/QuranAndroidApp/app/build.gradle delete mode 100644 apps/QuranAndroidApp/app/proguard-rules.pro delete mode 100644 apps/QuranAndroidApp/app/src/androidTest/java/com/quranapp/quranandroidapp/ApplicationTest.java delete mode 100644 apps/QuranAndroidApp/app/src/main/AndroidManifest.xml delete mode 100644 apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/Constants.java delete mode 100644 apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/QuranApp.java delete mode 100644 apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/activity/ReadingActivity.java delete mode 100644 apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/activity/SplashActivity.java delete mode 100644 apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/service/BundleDownloadService.java delete mode 100644 apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/service/BusFactory.java delete mode 100644 apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/IntentExtraKeys.java delete mode 100644 apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/OkHttpClientFactory.java delete mode 100644 apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/PreferenceHelper.java delete mode 100644 apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/StreamHelper.java delete mode 100644 apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/Unzipper.java delete mode 100644 apps/QuranAndroidApp/app/src/main/res/layout/activity_reading.xml delete mode 100644 apps/QuranAndroidApp/app/src/main/res/layout/activity_splash.xml delete mode 100644 apps/QuranAndroidApp/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 apps/QuranAndroidApp/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 apps/QuranAndroidApp/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 apps/QuranAndroidApp/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 apps/QuranAndroidApp/app/src/main/res/values-w820dp/dimens.xml delete mode 100644 apps/QuranAndroidApp/app/src/main/res/values/dimens.xml delete mode 100644 apps/QuranAndroidApp/app/src/main/res/values/strings.xml delete mode 100644 apps/QuranAndroidApp/app/src/main/res/values/styles.xml delete mode 100644 apps/QuranAndroidApp/build.gradle delete mode 100644 apps/QuranAndroidApp/gradle.properties delete mode 100644 apps/QuranAndroidApp/gradle/wrapper/gradle-wrapper.jar delete mode 100644 apps/QuranAndroidApp/gradle/wrapper/gradle-wrapper.properties delete mode 100755 apps/QuranAndroidApp/gradlew delete mode 100644 apps/QuranAndroidApp/gradlew.bat delete mode 100644 apps/QuranAndroidApp/settings.gradle diff --git a/.gitignore b/.gitignore index 88ec8cd..31b2466 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ apps/CordovaApp/platforms apps/CordovaApp/plugins *.tmp +apps/CordovaApp/extra/.gradle apps/CordovaApp/www/* !apps/CordovaApp/www/js/audio-helper.js diff --git a/apps/CordovaApp/extra/build.gradle b/apps/CordovaApp/extra/build.gradle new file mode 100644 index 0000000..cf3f3ba --- /dev/null +++ b/apps/CordovaApp/extra/build.gradle @@ -0,0 +1,51 @@ +task assetCopyTask << { + + copy { + from "../../../css" + into "../../../apps/CordovaApp/www/css" + println 'Copied: css' + } + + copy { + from "../../../data" + into "../../../apps/CordovaApp/www/data" + println 'Copied: data' + } + + + copy { + from "../../../images" + into "../../../apps/CordovaApp/www/images" + println 'Copied: images' + } + + copy { + from "../../../js" + into "../../../apps/CordovaApp/www/js" + println 'Copied: js' + } + + copy { + from "../../../page" + into "../../../apps/CordovaApp/www/page/" + println 'Copied: page' + } + + copy { + from "../../../translations" + into "../../../apps/CordovaApp/www/translations" + println 'Copied: translation' + } + + copy { + from "../../../favicon.ico" + into "../../../apps/CordovaApp/www" + println 'Copied: favicon.ico' + } + + copy { + from "../../../index.html" + into "../../../apps/CordovaApp/www" + println 'Copied: index.html' + } +} \ No newline at end of file diff --git a/apps/QuranAndroidApp/.gitignore b/apps/QuranAndroidApp/.gitignore deleted file mode 100644 index 1b34cd7..0000000 --- a/apps/QuranAndroidApp/.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -.gradle -/local.properties -/.idea/workspace.xml -/.idea/libraries -.DS_Store -/build -/captures - -#Gradle build folders -build/ -.gradle/* -java-tests/.gradle/* diff --git a/apps/QuranAndroidApp/QuranAndroidApp.iml b/apps/QuranAndroidApp/QuranAndroidApp.iml deleted file mode 100644 index 5e5671b..0000000 --- a/apps/QuranAndroidApp/QuranAndroidApp.iml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/apps/QuranAndroidApp/app/.gitignore b/apps/QuranAndroidApp/app/.gitignore deleted file mode 100644 index 796b96d..0000000 --- a/apps/QuranAndroidApp/app/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/apps/QuranAndroidApp/app/build.gradle b/apps/QuranAndroidApp/app/build.gradle deleted file mode 100644 index afc219f..0000000 --- a/apps/QuranAndroidApp/app/build.gradle +++ /dev/null @@ -1,30 +0,0 @@ -apply plugin: 'com.android.application' - -android { - compileSdkVersion 22 - buildToolsVersion "23.0.1" - - defaultConfig { - applicationId "com.quranapp.android" - minSdkVersion 16 - targetSdkVersion 22 - versionCode 1 - versionName "1.0" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } -} - -dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:appcompat-v7:22.2.0' - - compile 'com.squareup.okhttp:okhttp:2.2.0' - compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0' - compile 'com.squareup:otto:1.3.8' - -} diff --git a/apps/QuranAndroidApp/app/proguard-rules.pro b/apps/QuranAndroidApp/app/proguard-rules.pro deleted file mode 100644 index f485910..0000000 --- a/apps/QuranAndroidApp/app/proguard-rules.pro +++ /dev/null @@ -1,17 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in /Users/mohammadhaque/Documents/android-sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} diff --git a/apps/QuranAndroidApp/app/src/androidTest/java/com/quranapp/quranandroidapp/ApplicationTest.java b/apps/QuranAndroidApp/app/src/androidTest/java/com/quranapp/quranandroidapp/ApplicationTest.java deleted file mode 100644 index 13f684b..0000000 --- a/apps/QuranAndroidApp/app/src/androidTest/java/com/quranapp/quranandroidapp/ApplicationTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.quranapp.quranandroidapp; - -import android.app.Application; -import android.test.ApplicationTestCase; - -/** - *
Testing Fundamentals - */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } -} \ No newline at end of file diff --git a/apps/QuranAndroidApp/app/src/main/AndroidManifest.xml b/apps/QuranAndroidApp/app/src/main/AndroidManifest.xml deleted file mode 100644 index af0c02b..0000000 --- a/apps/QuranAndroidApp/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/Constants.java b/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/Constants.java deleted file mode 100644 index 7faff1c..0000000 --- a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/Constants.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.quranapp.android; - -public class Constants { - - public static final String BUNDLE_DOWNLOAD_URL = "https://www.dropbox.com/s/f0jyum4qa9j47o8/quranapp-bundle.zip?dl=1"; -} diff --git a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/QuranApp.java b/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/QuranApp.java deleted file mode 100644 index 83f9122..0000000 --- a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/QuranApp.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.quranapp.android; - -import android.app.Application; -import android.content.Context; - -import com.quranapp.android.util.OkHttpClientFactory; - -public class QuranApp extends Application { - - private static QuranApp instance; - @Override - public void onCreate() { - super.onCreate(); - - instance = this; - OkHttpClientFactory.init(this); - } - - public static Context getContext() { - return instance; - } -} diff --git a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/activity/ReadingActivity.java b/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/activity/ReadingActivity.java deleted file mode 100644 index 11c0c20..0000000 --- a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/activity/ReadingActivity.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.quranapp.android.activity; - -import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.webkit.WebSettings; -import android.webkit.WebView; - -import com.quranapp.android.BuildConfig; -import com.quranapp.android.R; - - -public class ReadingActivity extends AppCompatActivity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_reading); - - WebView webView = (WebView) findViewById(R.id.webview); - WebSettings settings = webView.getSettings(); - settings.setAllowFileAccess(true); - settings.setAllowFileAccessFromFileURLs(true); - settings.setAllowUniversalAccessFromFileURLs(true); - settings.setJavaScriptEnabled(true); - settings.setUseWideViewPort(true); - settings.setLoadWithOverviewMode(true); - webView.loadUrl("file:///" + getFilesDir().getAbsolutePath() + "/www/index.html"); - - if (BuildConfig.DEBUG) - WebView.setWebContentsDebuggingEnabled(true); - } -} diff --git a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/activity/SplashActivity.java b/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/activity/SplashActivity.java deleted file mode 100644 index 9e13ab4..0000000 --- a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/activity/SplashActivity.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.quranapp.android.activity; - -import android.content.Intent; -import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.util.Log; -import android.widget.TextView; - -import com.quranapp.android.R; -import com.quranapp.android.service.BundleDownloadService; -import com.quranapp.android.service.BusFactory; -import com.quranapp.android.util.IntentExtraKeys; -import com.quranapp.android.util.PreferenceHelper; -import com.squareup.otto.Subscribe; - -public class SplashActivity extends AppCompatActivity { - - private final String TAG = SplashActivity.class.getName(); - private TextView progressText; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_splash); - progressText = (TextView) findViewById(R.id.progress_text); - - if (!new PreferenceHelper().hasBundleDownloadBefore()) { - downloadBundle(true); - } else { - checkNewBundleAvailability(); - } - - BusFactory.register(this); - } - - private void downloadBundle(boolean unpackAfterDownload) { - Intent intent = new Intent(this, BundleDownloadService.class); - intent.putExtra(IntentExtraKeys.UNPACK_AFTER_DOWNLOAD, unpackAfterDownload); - startService(intent); - } - - private void checkNewBundleAvailability() { - //TODO - killMeAndStartQuranReadingActivity(); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - BusFactory.unregister(this); - } - - @Subscribe - public void statuspUpdate(final BundleDownloadService.ProgressStatus progressStatus) { - runOnUiThread(new Runnable() { - @Override - public void run() { - updateStatus(progressStatus); - } - }); - } - - private void updateStatus(BundleDownloadService.ProgressStatus progressStatus) { - switch (progressStatus.status) { - case DOWNLOADING: - progressText.setText("Downloading data..."); - break; - case UNPAKING: - progressText.setText("Processing data..."); - break; - case COMPLETE: - default: - killMeAndStartQuranReadingActivity(); - } - - Log.d(TAG, "Status update: " + progressStatus.status.name()); - } - - private void killMeAndStartQuranReadingActivity() { - finish(); - startActivity(new Intent(this, ReadingActivity.class)); - } -} diff --git a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/service/BundleDownloadService.java b/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/service/BundleDownloadService.java deleted file mode 100644 index 95fcbb1..0000000 --- a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/service/BundleDownloadService.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.quranapp.android.service; - -import android.app.IntentService; -import android.content.Intent; -import android.util.Log; - -import com.quranapp.android.QuranApp; -import com.quranapp.android.Constants; -import com.quranapp.android.util.IntentExtraKeys; -import com.quranapp.android.util.OkHttpClientFactory; -import com.quranapp.android.util.PreferenceHelper; -import com.quranapp.android.util.Unzipper; -import com.squareup.okhttp.Request; -import com.squareup.okhttp.Response; - -import java.io.File; -import java.io.IOException; - -import okio.BufferedSink; -import okio.Okio; - -public class BundleDownloadService extends IntentService { - - private static final String TAG = BundleDownloadService.class.getName(); - public static final String BUNDLE_ZIP = "bundle.zip"; - public static final String DESTINATION_FOLDER = "www"; - - public BundleDownloadService() { - super(BundleDownloadService.class.getName()); - } - - @Override - protected void onHandleIntent(Intent intent) { - boolean unpackAfterDownload = intent.getBooleanExtra(IntentExtraKeys.UNPACK_AFTER_DOWNLOAD, false); - boolean unpackOnly = intent.getBooleanExtra(IntentExtraKeys.UNPACK_DOWNLOADED_BUNDLE_ONLY, false); - - if (unpackOnly) { - unpackDownloadedBundle(); - return; - } - - boolean downloadSuccess = downloadBundle(); - if (downloadSuccess && unpackAfterDownload) { - new PreferenceHelper().setBundleDownloadDate(); - unpackDownloadedBundle(); - } - - BusFactory.post(new ProgressStatus(Status.COMPLETE)); - } - - private boolean downloadBundle() { - try { - BusFactory.post(new ProgressStatus(Status.DOWNLOADING)); - - File downloadedFile = new File(QuranApp.getContext().getCacheDir(), BUNDLE_ZIP); - Request request = new Request.Builder() - .url(Constants.BUNDLE_DOWNLOAD_URL) - .build(); - - Response response = OkHttpClientFactory.getClient().newCall(request).execute(); - BufferedSink sink = Okio.buffer(Okio.sink(downloadedFile)); - sink.writeAll(response.body().source()); - sink.close(); - return true; - } catch (IOException e) { - e.printStackTrace(); - return false; - } - } - - private void unpackDownloadedBundle() { - BusFactory.post(new ProgressStatus(Status.UNPAKING)); - Log.d(TAG, "Unzipping...."); - Unzipper unzipper = new Unzipper(BUNDLE_ZIP, QuranApp.getContext().getCacheDir().getAbsolutePath(), new File(QuranApp.getContext().getFilesDir(), DESTINATION_FOLDER).getAbsolutePath()); - unzipper.unzip(); - Log.d(TAG, "Unzip completed"); - } - - public class ProgressStatus { - public final Status status; - public int progress; - - public ProgressStatus(Status status) { - this.status = status; - } - - public int getProgress() { - return progress; - } - - public void setProgress(int progress) { - this.progress = progress; - } - } - - public enum Status { - DOWNLOADING, - UNPAKING, - COMPLETE - } -} diff --git a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/service/BusFactory.java b/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/service/BusFactory.java deleted file mode 100644 index 10caa45..0000000 --- a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/service/BusFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.quranapp.android.service; - -import android.util.Log; - -import com.squareup.otto.Bus; -import com.squareup.otto.ThreadEnforcer; - -public class BusFactory { - - private static final String TAG = BusFactory.class.getName(); - private static Bus bus; - - private static Bus getBus() { - if (bus == null) { - bus = new Bus(ThreadEnforcer.ANY); - } - - return bus; - } - - public static boolean register(Object obj) { - if (obj == null) return false; - - getBus().register(obj); - return true; - } - - public static boolean unregister(Object obj) { - if (obj == null) return false; - - try { - getBus().unregister(obj); - } catch (IllegalArgumentException e) { - Log.e(TAG, " error while unregistering from BUS: " + e.getMessage()); - return false; - } - return true; - } - - public static void post(Object o) { - getBus().post(o); - } -} diff --git a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/IntentExtraKeys.java b/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/IntentExtraKeys.java deleted file mode 100644 index b0e9f19..0000000 --- a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/IntentExtraKeys.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.quranapp.android.util; - -public class IntentExtraKeys { - public static final String UNPACK_AFTER_DOWNLOAD = "unpack_after_download"; - public static final String UNPACK_DOWNLOADED_BUNDLE_ONLY = "unpack_download_bundle_only"; -} diff --git a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/OkHttpClientFactory.java b/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/OkHttpClientFactory.java deleted file mode 100644 index c2e6561..0000000 --- a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/OkHttpClientFactory.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.quranapp.android.util; - -import android.content.Context; - -import com.squareup.okhttp.Cache; -import com.squareup.okhttp.CacheControl; -import com.squareup.okhttp.OkHttpClient; -import com.squareup.okhttp.OkUrlFactory; -import com.squareup.okhttp.Request; -import com.squareup.okhttp.Response; - -import java.io.IOException; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.concurrent.TimeUnit; - -public class OkHttpClientFactory { - private static OkHttpClient client; - private static final int CONNECTION_TIMEOUT = 20; - private static final int READ_TIMEOUT = 20; - - private static OkUrlFactory okUrlFactory; - - public static void init(Context context) { - if (client == null) { - createClient(context); - okUrlFactory = new OkUrlFactory(client); - } - } - - private static void createClient(Context context) { - client = new OkHttpClient(); - client.setConnectTimeout(CONNECTION_TIMEOUT, TimeUnit.SECONDS); - client.setReadTimeout(READ_TIMEOUT, TimeUnit.SECONDS); - } - - public static OkHttpClient getClient() { - if (client == null) - throw new RuntimeException("OkHttp client has not been initialised in OkConnectionFactory"); - return client; - } - - public static HttpURLConnection open(URL url) { - return okUrlFactory.open(url); - } - - public static Response getFromCache(URL url) { - CacheControl.Builder cacheControl = new CacheControl.Builder().onlyIfCached(); - cacheControl.maxStale(Integer.MAX_VALUE, TimeUnit.MILLISECONDS); - Request.Builder request = new Request.Builder().url(url).cacheControl(cacheControl.build()); - try { - return client.newCall(request.build()).execute(); - } catch (IOException e) { - e.printStackTrace(); - } - - return null; - } -} diff --git a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/PreferenceHelper.java b/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/PreferenceHelper.java deleted file mode 100644 index b915c4d..0000000 --- a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/PreferenceHelper.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.quranapp.android.util; - -import android.content.Context; -import android.content.SharedPreferences; - -import com.quranapp.android.QuranApp; - -public class PreferenceHelper { - - private final String LAST_BUNDLE_UPDATE = "last_bundle_update"; - - private SharedPreferences getPreference() { - return QuranApp.getContext().getSharedPreferences("app_settings_preference", Context.MODE_PRIVATE); - } - - public long getLastDataBundleUpdateTime() { - return getLong(LAST_BUNDLE_UPDATE); - } - - public boolean hasBundleDownloadBefore() { - return getLastDataBundleUpdateTime() != 0; - } - - public void setBundleDownloadDate() { - setLong(LAST_BUNDLE_UPDATE, System.currentTimeMillis()); - } - - public long getLong(String key) { - return getPreference().getLong(key, 0L); - } - - public void setLong(String key, long value) { - getPreference().edit().putLong(key, value); - } - -} diff --git a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/StreamHelper.java b/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/StreamHelper.java deleted file mode 100644 index 6d3a861..0000000 --- a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/StreamHelper.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.quranapp.android.util; - -import android.util.Log; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; - -public class StreamHelper { - private static final String TAG = StreamHelper.class.getName(); - - public static void copyStream(InputStream is, OutputStream os) { - final int buffer_size = 1024; - try { - byte[] bytes = new byte[buffer_size]; - for (; ; ) { - int count = is.read(bytes, 0, buffer_size); - if (count == -1) - break; - os.write(bytes, 0, count); - } - } catch (Exception ex) { - Log.e(TAG, "Error in StreamHelper.copyStream", ex); - } - } - - /** - * Get the contents of an InputStream as a String - * using the default character encoding of the platform. - *

- * This method buffers the input internally, so there is no need to use a - * BufferedInputStream. - * - * @param input the InputStream to read from - * @return the requested String - * @throws NullPointerException if the input is null - * @throws IOException if an I/O error occurs - */ - public static String toString(InputStream input) throws IOException { - BufferedReader reader = new BufferedReader(new InputStreamReader(input)); - StringBuilder sb = new StringBuilder(); - String line; - while ((line = reader.readLine()) != null) { - sb.append(line); - } - input.close(); - return sb.toString(); - } - -} \ No newline at end of file diff --git a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/Unzipper.java b/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/Unzipper.java deleted file mode 100644 index 9b0d141..0000000 --- a/apps/QuranAndroidApp/app/src/main/java/com/quranapp/android/util/Unzipper.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.quranapp.android.util; - -import android.util.Log; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.Enumeration; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -public class Unzipper { - - private static final String TAG = Unzipper.class.getName(); - private String fileName; - private String filePath; - private String destinationPath; - - public Unzipper(String fileName, String filePath, String destinationPath) { - this.fileName = fileName; - this.filePath = filePath; - this.destinationPath = destinationPath; - } - - public void unzip() { - Log.d(TAG, "Unzip: " + fileName + " -> " + destinationPath); - File archive = new File(makeFullPath()); - try { - ZipFile zipfile = new ZipFile(archive); - for (Enumeration e = zipfile.entries(); e.hasMoreElements(); ) { - ZipEntry entry = (ZipEntry) e.nextElement(); - if (!entry.getName().contains(".git")) { - unzipEntry(zipfile, entry, destinationPath); - } - } - } catch (Exception e) { - Log.e(TAG,"Error unzipping: " + archive, e); - } - } - - private String makeFullPath() { - return filePath + File.separator + fileName; - } - - private void unzipEntry(ZipFile zipfile, ZipEntry entry, String outputDir) throws IOException { - - if (entry.getName().startsWith("__") || entry.getName().startsWith(".")) { - return; - } - - if (entry.isDirectory()) { - createDir(new File(outputDir, entry.getName())); - return; - } - - File outputFile = new File(outputDir, entry.getName()); - if (!outputFile.getParentFile().exists()) { - createDir(outputFile.getParentFile()); - } - - Log.d(TAG, "Extracting: " + entry + " to:" + outputFile.getAbsolutePath()); - BufferedInputStream inputStream = new BufferedInputStream(zipfile.getInputStream(entry)); - BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile)); - - try { - StreamHelper.copyStream(inputStream, outputStream); - } finally { - outputStream.close(); - inputStream.close(); - } - } - - private void createDir(File dir) { - if (dir.exists()) { - return; - } - Log.d(TAG, "Creating dir: " + dir.getName()); - if (!dir.mkdirs()) { - throw new RuntimeException("Error creating directory: " + dir); - } - } -} diff --git a/apps/QuranAndroidApp/app/src/main/res/layout/activity_reading.xml b/apps/QuranAndroidApp/app/src/main/res/layout/activity_reading.xml deleted file mode 100644 index f639cb8..0000000 --- a/apps/QuranAndroidApp/app/src/main/res/layout/activity_reading.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - diff --git a/apps/QuranAndroidApp/app/src/main/res/layout/activity_splash.xml b/apps/QuranAndroidApp/app/src/main/res/layout/activity_splash.xml deleted file mode 100644 index 03f1340..0000000 --- a/apps/QuranAndroidApp/app/src/main/res/layout/activity_splash.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - diff --git a/apps/QuranAndroidApp/app/src/main/res/mipmap-hdpi/ic_launcher.png b/apps/QuranAndroidApp/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index cde69bcccec65160d92116f20ffce4fce0b5245c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3418 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 diff --git a/apps/QuranAndroidApp/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/apps/QuranAndroidApp/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index bfa42f0e7b91d006d22352c9ff2f134e504e3c1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4842 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 diff --git a/apps/QuranAndroidApp/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/apps/QuranAndroidApp/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 324e72cdd7480cb983fa1bcc7ce686e51ef87fe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7718 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 diff --git a/apps/QuranAndroidApp/app/src/main/res/values-w820dp/dimens.xml b/apps/QuranAndroidApp/app/src/main/res/values-w820dp/dimens.xml deleted file mode 100644 index 63fc816..0000000 --- a/apps/QuranAndroidApp/app/src/main/res/values-w820dp/dimens.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - 64dp - diff --git a/apps/QuranAndroidApp/app/src/main/res/values/dimens.xml b/apps/QuranAndroidApp/app/src/main/res/values/dimens.xml deleted file mode 100644 index 47c8224..0000000 --- a/apps/QuranAndroidApp/app/src/main/res/values/dimens.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - 16dp - 16dp - diff --git a/apps/QuranAndroidApp/app/src/main/res/values/strings.xml b/apps/QuranAndroidApp/app/src/main/res/values/strings.xml deleted file mode 100644 index 3eecdb2..0000000 --- a/apps/QuranAndroidApp/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - QuranAndroidApp - diff --git a/apps/QuranAndroidApp/app/src/main/res/values/styles.xml b/apps/QuranAndroidApp/app/src/main/res/values/styles.xml deleted file mode 100644 index 766ab99..0000000 --- a/apps/QuranAndroidApp/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/apps/QuranAndroidApp/build.gradle b/apps/QuranAndroidApp/build.gradle deleted file mode 100644 index 2841f22..0000000 --- a/apps/QuranAndroidApp/build.gradle +++ /dev/null @@ -1,19 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - -buildscript { - repositories { - jcenter() - } - dependencies { - classpath 'com.android.tools.build:gradle:1.4.0-beta3' - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - -allprojects { - repositories { - jcenter() - } -} diff --git a/apps/QuranAndroidApp/gradle.properties b/apps/QuranAndroidApp/gradle.properties deleted file mode 100644 index 1d3591c..0000000 --- a/apps/QuranAndroidApp/gradle.properties +++ /dev/null @@ -1,18 +0,0 @@ -# Project-wide Gradle settings. - -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html - -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -# Default value: -Xmx10248m -XX:MaxPermSize=256m -# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 - -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true \ No newline at end of file diff --git a/apps/QuranAndroidApp/gradle/wrapper/gradle-wrapper.jar b/apps/QuranAndroidApp/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 8c0fb64a8698b08ecc4158d828ca593c4928e9dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49896 zcmagFb986H(k`5d^NVfUwr$(C?M#x1ZQHiZiEVpg+jrjgoQrerx!>1o_ul)D>ebz~ zs=Mmxr&>W81QY-S1PKWQ%N-;H^tS;2*XwVA`dej1RRn1z<;3VgfE4~kaG`A%QSPsR z#ovnZe+tS9%1MfeDyz`RirvdjPRK~p(#^q2(^5@O&NM19EHdvN-A&StN>0g6QA^VN z0Gx%Gq#PD$QMRFzmK+utjS^Y1F0e8&u&^=w5K<;4Rz|i3A=o|IKLY+g`iK6vfr9?+ z-`>gmU&i?FGSL5&F?TXFu`&Js6h;15QFkXp2M1H9|Eq~bpov-GU(uz%mH0n55wUl- zv#~ccAz`F5wlQ>e_KlJS3@{)B?^v*EQM=IxLa&76^y51a((wq|2-`qON>+4dLc{Oo z51}}o^Zen(oAjxDK7b++9_Yg`67p$bPo3~BCpGM7uAWmvIhWc5Gi+gQZ|Pwa-Gll@<1xmcPy z|NZmu6m)g5Ftu~BG&Xdxclw7Cij{xbBMBn-LMII#Slp`AElb&2^Hw+w>(3crLH!;I zN+Vk$D+wP1#^!MDCiad@vM>H#6+`Ct#~6VHL4lzmy;lSdk>`z6)=>Wh15Q2)dQtGqvn0vJU@+(B5{MUc*qs4!T+V=q=wy)<6$~ z!G>e_4dN@lGeF_$q9`Ju6Ncb*x?O7=l{anm7Eahuj_6lA{*#Gv*TaJclevPVbbVYu z(NY?5q+xxbO6%g1xF0r@Ix8fJ~u)VRUp`S%&rN$&e!Od`~s+64J z5*)*WSi*i{k%JjMSIN#X;jC{HG$-^iX+5f5BGOIHWAl*%15Z#!xntpk($-EGKCzKa zT7{siZ9;4TICsWQ$pu&wKZQTCvpI$Xvzwxoi+XkkpeE&&kFb!B?h2hi%^YlXt|-@5 zHJ~%AN!g_^tmn1?HSm^|gCE#!GRtK2(L{9pL#hp0xh zME}|DB>(5)`iE7CM)&_+S}-Bslc#@B5W4_+k4Cp$l>iVyg$KP>CN?SVGZ(&02>iZK zB<^HP$g$Lq*L$BWd?2(F?-MUbNWTJVQdW7$#8a|k_30#vHAD1Z{c#p;bETk0VnU5A zBgLe2HFJ3032$G<`m*OB!KM$*sdM20jm)It5OSru@tXpK5LT>#8)N!*skNu1$TpIw zufjjdp#lyH5bZ%|Iuo|iu9vG1HrIVWLH>278xo>aVBkPN3V$~!=KnlXQ4eDqS7%E% zQ!z^$Q$b^6Q)g#cLpwur(|<0gWHo6A6jc;n`t(V9T;LzTAU{IAu*uEQ%Ort1k+Kn+f_N`9|bxYC+~Z1 zCC1UCWv*Orx$_@ydv9mIe(liLfOr7mhbV@tKw{6)q^1DH1nmvZ0cj215R<~&I<4S| zgnr;9Cdjqpz#o8i0CQjtl`}{c*P)aSdH|abxGdrR)-3z+02-eX(k*B)Uqv6~^nh** z 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 \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/apps/QuranAndroidApp/gradlew.bat b/apps/QuranAndroidApp/gradlew.bat deleted file mode 100644 index 8a0b282..0000000 --- a/apps/QuranAndroidApp/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/apps/QuranAndroidApp/settings.gradle b/apps/QuranAndroidApp/settings.gradle deleted file mode 100644 index e7b4def..0000000 --- a/apps/QuranAndroidApp/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -include ':app' diff --git a/index.html b/index.html index 012aac4..6756720 100644 --- a/index.html +++ b/index.html @@ -304,6 +304,9 @@

Change page পেইজ নম্বর

+ + + + + + +