├── .github └── FUNDING.yml ├── .gitignore ├── CHANGELOG.md ├── License.txt ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ └── open_licenses.html │ ├── java │ └── com │ │ └── wallapp │ │ ├── MainActivity.java │ │ ├── MainApplication.java │ │ ├── activities │ │ ├── IntroActivity.java │ │ ├── SettingsActivity.java │ │ └── SplashActivity.java │ │ ├── async │ │ ├── Downloader.java │ │ └── ParseBing.java │ │ ├── fragments │ │ ├── AppInfoFragment.java │ │ └── OpenLicFragment.java │ │ ├── store │ │ └── StaticVars.java │ │ └── utils │ │ ├── CommonUtils.java │ │ ├── FileUtils.java │ │ ├── GradientUtils.java │ │ ├── ImageUtils.java │ │ ├── MetricsUtils.java │ │ ├── RandomizeUtils.java │ │ └── WallpaperUtils.java │ └── res │ ├── drawable-anydpi │ ├── ic_intro.xml │ └── icon_main.xml │ ├── drawable │ ├── about_overlay.jpg │ ├── ic_download.xml │ ├── ic_edit.xml │ ├── ic_error.xml │ ├── ic_more.xml │ ├── ic_random.xml │ ├── ic_retry.xml │ ├── ic_set.xml │ ├── ic_settings.xml │ ├── ic_share.xml │ ├── ic_splash.png │ └── splash_screen.xml │ ├── layout │ ├── activity_main.xml │ ├── activity_settings.xml │ ├── content_main.xml │ ├── layout_about.xml │ └── layout_license.xml │ ├── mipmap-hdpi │ └── ic_launcher.png │ ├── mipmap-mdpi │ └── ic_launcher.png │ ├── mipmap-xhdpi │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ └── ic_launcher.png │ ├── mipmap-xxxhdpi │ └── ic_launcher.png │ ├── values-w820dp │ └── dimens.xml │ ├── values │ ├── colors.xml │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml │ └── xml │ └── preference.xml ├── art ├── Banner.png └── screenshot.png ├── build.gradle ├── gradients.json ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── release ├── WallApp_v161.apk └── WallApp_v164.apk └── settings.gradle /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | custom: https://paypal.me/chatrg/usd 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | 11 | .idea 12 | .build 13 | /build 14 | /app/build 15 | 16 | # tags 17 | tag 18 | tags 19 | *.taghl 20 | 21 | # Built application files 22 | release*.apk 23 | *.ap_ 24 | 25 | # Files for the Dalvik VM 26 | *.dex 27 | 28 | # Java class files 29 | *.class 30 | 31 | # Generated files 32 | bin/ 33 | gen/ 34 | 35 | # Local configuration file (sdk path, etc) 36 | local.properties 37 | 38 | # Windows thumbnail db 39 | Thumbs.db 40 | 41 | # OSX files 42 | .DS_Store 43 | 44 | # Local configuration file (sdk path, etc) 45 | local.properties 46 | 47 | # OS-specific files 48 | .DS_Store 49 | .DS_Store? 50 | ._* 51 | .Spotlight-V100 52 | .Trashes 53 | ehthumbs.db 54 | Thumbs.db 55 | 56 | # Tempory files 57 | *~ 58 | #*# -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # CHANGELOG 2 | 3 | ## Version 1.6.3 4 | 5 | - Added edit feature 6 | - Settings tweaks 7 | - Removed intro (that's boring, anyway) 8 | 9 | ## Version 1.6.1 10 | 11 | - Updated libraries 12 | - Upgraded wallpaper quality 13 | - UI improvements 14 | - Code refactored 15 | - Minor tweaks for UX -------------------------------------------------------------------------------- /License.txt: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright 2017 chatRG 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ###### _Note: Current version is stable and this project is not actively maintained. Forks are welcome!_ 2 | 3 | # WallApp v1.7 4 | 5 | ###### The app that your phone needs and the one it deserves too! 6 | 7 | 8 | 9 | [![Apache 2.0](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://raw.githubusercontent.com/chatRG/WallApp/master/License.txt) 10 | [![](https://img.shields.io/badge/Android-5.0.1+-brightred.svg?style=flat)]() 11 | [![](https://img.shields.io/badge/build-passing-brightgreen.svg?style=flat)]() 12 | [![](https://img.shields.io/badge/download-apk-blue.svg?style=flat)](https://github.com/chatRG/WallApp/blob/master/release/WallApp_v164.apk?raw=true) 13 | 14 | 15 | ![Banner](https://raw.githubusercontent.com/chatRG/WallApp/master/art/Banner.png) 16 | 17 | #### Features: 18 | * Random wallpapers 19 | * Material Design 20 | * Categories to choose from 21 | * Blur / Grayscale / Faded wallpapers 22 | * Download in Full HD 23 | * Set wallpapers without downloading (Set as type: WallApp) 24 | 25 | --- 26 | 27 | ![Screenshot](https://raw.githubusercontent.com/chatRG/WallApp/master/art/screenshot.png) 28 | 29 | ##### Open Source libraries used: 30 | - Android AppCompat (Google) 31 | - Android Support (Google) 32 | - Android Design (Google) 33 | - Butterknife (jakewharton) 34 | 35 | See application for the entire list of open source libraries used. 36 | 37 | Send me a request if you are willing to contribute. :sunglasses: 38 | 39 | 40 | License 41 | ------- 42 | 43 | Copyright 2018 chatRG 44 | 45 | Licensed under the Apache License, Version 2.0 (the "License"); 46 | you may not use this file except in compliance with the License. 47 | You may obtain a copy of the License at 48 | 49 | http://www.apache.org/licenses/LICENSE-2.0 50 | 51 | Unless required by applicable law or agreed to in writing, software 52 | distributed under the License is distributed on an "AS IS" BASIS, 53 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 54 | See the License for the specific language governing permissions and 55 | limitations under the License. 56 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /src/androidTest 3 | /src/test -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 28 5 | buildToolsVersion "28.0.3" 6 | defaultConfig { 7 | applicationId "com.wallapp" 8 | minSdkVersion 23 9 | targetSdkVersion 28 10 | versionCode 2311165 11 | versionName "1.7.0" 12 | resConfigs "en" 13 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 14 | vectorDrawables.useSupportLibrary = true 15 | } 16 | buildTypes { 17 | debug { 18 | minifyEnabled false 19 | useProguard true 20 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 21 | } 22 | release { 23 | shrinkResources false 24 | minifyEnabled false 25 | useProguard true 26 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 27 | } 28 | } 29 | } 30 | 31 | dependencies { 32 | implementation fileTree(dir: 'libs', include: ['*.jar']) 33 | androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { 34 | exclude group: 'com.android.support', module: 'support-annotations' 35 | }) 36 | implementation 'com.android.support:appcompat-v7:28.0.0' 37 | implementation 'com.android.support:preference-v14:28.0.0' 38 | implementation 'com.android.support:support-v4:28.0.0' 39 | implementation 'com.android.support:design:28.0.0' 40 | 41 | implementation 'com.jakewharton:butterknife:8.8.1' 42 | annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' 43 | 44 | // fresco 45 | implementation 'com.parse.bolts:bolts-tasks:1.4.0' 46 | implementation "com.facebook.fresco:fbcore:1.7.0" 47 | implementation "com.facebook.fresco:animated-base:1.7.0" 48 | implementation "com.facebook.fresco:animated-drawable:1.7.0" 49 | implementation "com.facebook.fresco:imagepipeline-base:1.7.0" 50 | implementation "com.facebook.fresco:imagepipeline:1.7.0" 51 | implementation "com.facebook.fresco:drawee:1.7.0" 52 | implementation "com.facebook.fresco:fresco:1.7.0" 53 | implementation 'com.github.stfalcon:frescoimageviewer:0.5.0' 54 | 55 | implementation 'com.github.stfalcon:frescoimageviewer:0.5.0' 56 | /*compile 'com.uniquestudio:lowpoly:1.0.2'*/ 57 | 58 | implementation 'com.afollestad.material-dialogs:core:0.9.6.0' 59 | implementation 'com.github.clans:fab:1.6.4' 60 | implementation 'com.androidadvance:topsnackbar:1.1.1' 61 | implementation 'com.takisoft.fix:preference-v7:27.0.2.0' 62 | implementation 'com.uniquestudio:lowpoly:1.0.2' 63 | 64 | testImplementation 'junit:junit:4.12' 65 | 66 | } 67 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in E:\Installed\Android\SDK/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | 19 | # butterknife 20 | 21 | -keepattributes *Annotation* 22 | -keep class butterknife.** { *; } 23 | -keep class **$$ViewInjector { *; } 24 | 25 | -keepclasseswithmembernames class * { 26 | @butterknife.* ; 27 | } 28 | -keepclasseswithmembernames class * { 29 | @butterknife.* ; 30 | } 31 | -dontwarn butterknife.internal.** 32 | 33 | 34 | # Keep our interfaces so they can be used by other ProGuard rules. 35 | # See http://sourceforge.net/p/proguard/bugs/466/ 36 | -keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip 37 | 38 | # Do not strip any method/class that is annotated with @DoNotStrip 39 | -keep @com.facebook.common.internal.DoNotStrip class * 40 | -keepclassmembers class * { 41 | @com.facebook.common.internal.DoNotStrip *; 42 | } 43 | 44 | # Keep native methods 45 | -keepclassmembers class * { 46 | native ; 47 | } 48 | 49 | -dontwarn okio.** 50 | -dontwarn com.squareup.okhttp.** 51 | -dontwarn okhttp3.** 52 | -dontwarn javax.annotation.** 53 | -dontwarn com.android.volley.toolbox.** 54 | -dontwarn com.facebook.infer.** -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 18 | 19 | 22 | 23 | 24 | 25 | 26 | 27 | 33 | 34 | 37 | 38 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /app/src/main/assets/open_licenses.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 15 | 16 | 17 | 18 |
 19 |         Copyright 2005-2017 Android Open Source Project
 20 | 
 21 |         Licensed under the Apache License, Version 2.0 (the "License");
 22 |         you may not use this file except in compliance with the License.
 23 |         You may obtain a copy of the License at
 24 | 
 25 |         http://www.apache.org/licenses/LICENSE-2.0
 26 | 
 27 |         Unless required by applicable law or agreed to in writing, software
 28 |         distributed under the License is distributed on an "AS IS" BASIS,
 29 |         WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 30 |         See the License for the specific language governing permissions and
 31 |         limitations under the License.
 32 |         
33 |
34 | Copyright 2013 Jake Wharton 35 | 36 | Licensed under the Apache License, Version 2.0 (the "License"); 37 | you may not use this file except in compliance with the License. 38 | You may obtain a copy of the License at 39 | 40 | http://www.apache.org/licenses/LICENSE-2.0 41 | 42 | Unless required by applicable law or agreed to in writing, software 43 | distributed under the License is distributed on an "AS IS" BASIS, 44 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 45 | See the License for the specific language governing permissions and 46 | limitations under the License. 47 |
48 |
49 | Copyright (c) 2015-present, Facebook, Inc. All rights reserved. 50 | 51 | Redistribution and use in source and binary forms, with or without modification, 52 | are permitted provided that the following conditions are met: 53 | 54 | * Redistributions of source code must retain the above copyright notice, this 55 | list of conditions and the following disclaimer. 56 | 57 | * Redistributions in binary form must reproduce the above copyright notice, 58 | this list of conditions and the following disclaimer in the documentation 59 | and/or other materials provided with the distribution. 60 | 61 | * Neither the name Facebook nor the names of its contributors may be used to 62 | endorse or promote products derived from this software without specific 63 | prior written permission. 64 | 65 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 66 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 67 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 68 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 69 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 70 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 71 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 72 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 73 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 74 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 75 |
76 |
77 | Copyright (C) 2016 stfalcon.com 78 | 79 | Licensed under the Apache License, Version 2.0 (the "License"); 80 | you may not use this file except in compliance with the License. 81 | You may obtain a copy of the License at 82 | 83 | http://www.apache.org/licenses/LICENSE-2.0 84 | 85 | Unless required by applicable law or agreed to in writing, software 86 | distributed under the License is distributed on an "AS IS" BASIS, 87 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 88 | See the License for the specific language governing permissions and 89 | limitations under the License. 90 |
91 |
92 | Copyright 2015 Dmytro Tarianyk 93 | 94 | Licensed under the Apache License, Version 2.0 (the "License"); 95 | you may not use this file except in compliance with the License. 96 | You may obtain a copy of the License at 97 | 98 | http://www.apache.org/licenses/LICENSE-2.0 99 | 100 | Unless required by applicable law or agreed to in writing, software 101 | distributed under the License is distributed on an "AS IS" BASIS, 102 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 103 | See the License for the specific language governing permissions and 104 | limitations under the License. 105 |
106 |
107 | Copyright 2015 AndroidAdvance.com 108 | 109 | Licensed under the Apache License, Version 2.0 (the "License"); 110 | you may not use this file except in compliance with the License. 111 | You may obtain a copy of the License at 112 | 113 | http://www.apache.org/licenses/LICENSE-2.0 114 | 115 | Unless required by applicable law or agreed to in writing, software 116 | distributed under the License is distributed on an "AS IS" BASIS, 117 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 118 | See the License for the specific language governing permissions and 119 | limitations under the License. 120 |
121 |
122 | The MIT License (MIT) 123 | 124 | Copyright (c) 2014-2016 Aidan Michael Follestad 125 | 126 | Permission is hereby granted, free of charge, to any person obtaining a copy 127 | of this software and associated documentation files (the "Software"), to deal 128 | in the Software without restriction, including without limitation the rights 129 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 130 | copies of the Software, and to permit persons to whom the Software is 131 | furnished to do so, subject to the following conditions: 132 | 133 | The above copyright notice and this permission notice shall be included in all 134 | copies or substantial portions of the Software. 135 | 136 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 137 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 138 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 139 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 140 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 141 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 142 | SOFTWARE. 143 |
144 | 145 | 146 | -------------------------------------------------------------------------------- /app/src/main/java/com/wallapp/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.wallapp; 2 | 3 | import android.content.Intent; 4 | import android.content.SharedPreferences; 5 | import android.graphics.Bitmap; 6 | import android.net.Uri; 7 | import android.os.Bundle; 8 | import android.preference.PreferenceManager; 9 | import android.support.annotation.Nullable; 10 | import android.support.v7.app.AppCompatActivity; 11 | import android.util.Log; 12 | import android.view.View; 13 | import android.view.Window; 14 | import android.view.WindowManager; 15 | import android.widget.ImageView; 16 | import android.widget.ProgressBar; 17 | 18 | import com.afollestad.materialdialogs.MaterialDialog; 19 | import com.facebook.common.executors.CallerThreadExecutor; 20 | import com.facebook.common.references.CloseableReference; 21 | import com.facebook.datasource.DataSource; 22 | import com.facebook.drawee.backends.pipeline.Fresco; 23 | import com.facebook.drawee.view.SimpleDraweeView; 24 | import com.facebook.imagepipeline.common.Priority; 25 | import com.facebook.imagepipeline.core.ImagePipeline; 26 | import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber; 27 | import com.facebook.imagepipeline.image.CloseableImage; 28 | import com.facebook.imagepipeline.request.ImageRequest; 29 | import com.facebook.imagepipeline.request.ImageRequestBuilder; 30 | import com.github.clans.fab.FloatingActionMenu; 31 | import com.stfalcon.frescoimageviewer.ImageViewer; 32 | import com.uniquestudio.lowpoly.LowPoly; 33 | import com.wallapp.activities.IntroActivity; 34 | import com.wallapp.activities.SettingsActivity; 35 | import com.wallapp.async.Downloader; 36 | import com.wallapp.async.ParseBing; 37 | import com.wallapp.store.StaticVars; 38 | import com.wallapp.utils.FileUtils; 39 | import com.wallapp.utils.GradientUtils; 40 | import com.wallapp.utils.RandomizeUtils; 41 | import com.wallapp.utils.CommonUtils; 42 | import com.wallapp.utils.ImageUtils; 43 | import com.wallapp.utils.WallpaperUtils; 44 | 45 | import java.io.File; 46 | 47 | import butterknife.BindView; 48 | import butterknife.ButterKnife; 49 | import butterknife.OnClick; 50 | 51 | public class MainActivity extends AppCompatActivity 52 | implements Downloader.AsyncResponse, 53 | ParseBing.AsyncResponse { 54 | 55 | private static String TAG = "MainActivity"; 56 | 57 | private static SharedPreferences sharedPref; 58 | private static String BING_DEF; 59 | private static Uri imageUri; 60 | private static Boolean isDownloaded = false; 61 | private static Boolean isSetAs = false; 62 | private static Bitmap mBitmap; 63 | private static Bitmap backupBitmap; 64 | 65 | @BindView(R.id.sdv) 66 | SimpleDraweeView draweeView; 67 | @BindView(android.R.id.content) 68 | View contentView; 69 | @BindView(R.id.progress) 70 | ProgressBar mProgress; 71 | @BindView(R.id.fab_menu) 72 | FloatingActionMenu fabMenu; 73 | 74 | @Override 75 | protected void onCreate(Bundle savedInstanceState) { 76 | super.onCreate(savedInstanceState); 77 | 78 | requestWindowFeature(Window.FEATURE_NO_TITLE); 79 | getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 80 | WindowManager.LayoutParams.FLAG_FULLSCREEN); 81 | 82 | setContentView(R.layout.activity_main); 83 | init(); 84 | } 85 | 86 | private void init() { 87 | sharedPref = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 88 | 89 | // check connection 90 | if (!CommonUtils.isNetworkAvailable(this)) { 91 | CommonUtils.checkNetworkDialog(MainActivity.this); 92 | } else { 93 | new ParseBing(MainActivity.this).execute(); 94 | } 95 | 96 | boolean isFirstStart = sharedPref.getBoolean(StaticVars.PREF_FIRST_START, true); 97 | if (isFirstStart) { 98 | Intent i = new Intent(getBaseContext(), IntroActivity.class); 99 | startActivity(i); 100 | this.finish(); 101 | } 102 | ButterKnife.bind(this); 103 | } 104 | 105 | @OnClick(R.id.download) 106 | public void onDownloadClick() { 107 | mProgress.setVisibility(ProgressBar.VISIBLE); 108 | draweeView.setEnabled(false); 109 | fabMenu.close(true); 110 | fabMenu.setEnabled(false); 111 | 112 | new Downloader(MainActivity.this).execute(mBitmap); 113 | 114 | isDownloaded = true; 115 | fabMenu.setEnabled(true); 116 | draweeView.setEnabled(true); 117 | } 118 | 119 | @OnClick(R.id.sdv) 120 | public void onDraweeViewClick() { 121 | if (mBitmap == null || mBitmap.isRecycled()) 122 | return; 123 | 124 | new ImageViewer.Builder<>(MainActivity.this, new String[]{imageUri.toString()}) 125 | .setStartPosition(0) 126 | .show(); 127 | fabMenu.close(true); 128 | } 129 | 130 | @OnClick(R.id.share) 131 | public void onShareClick() { 132 | fabMenu.close(true); 133 | File lastFile = new FileUtils(MainActivity.this).getLastModFile(); 134 | 135 | if (lastFile == null || !isDownloaded) { 136 | CommonUtils.showSnack(this, contentView, R.string.download_image_first); 137 | return; 138 | } 139 | final Intent shareIntent = new Intent(Intent.ACTION_SEND); 140 | shareIntent.setType("image/jpeg"); 141 | shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(lastFile)); 142 | startActivity(Intent.createChooser(shareIntent, getString(R.string.share_image))); 143 | } 144 | 145 | @OnClick(R.id.edit_wall) 146 | public void onEditClick() { 147 | fabMenu.close(true); 148 | 149 | // When edit wallpaper without generating 150 | if (mBitmap == null || mBitmap.isRecycled()) { 151 | CommonUtils.showSnack(this, contentView, R.string.generate_image_first); 152 | return; 153 | } 154 | 155 | new MaterialDialog.Builder(this) 156 | .title("Filters") 157 | .items(R.array.edit_items) 158 | .positiveText(android.R.string.ok) 159 | .neutralText(android.R.string.cancel) 160 | .itemsCallbackMultiChoice(null, new MaterialDialog.ListCallbackMultiChoice() { 161 | @Override 162 | public boolean onSelection(MaterialDialog dialog, 163 | Integer[] which, CharSequence[] text) { 164 | for (int i : which) { 165 | if (i == 0) { 166 | mBitmap = ImageUtils.getBlurBitmap(MainActivity.this, mBitmap, 25f); 167 | } 168 | if (i == 1) { 169 | mBitmap = ImageUtils.getGrayBitmap(mBitmap); 170 | } 171 | if (i == 2) { 172 | mBitmap = ImageUtils.getDarkenBitmap(mBitmap); 173 | } 174 | if (i == 3) { 175 | mBitmap = LowPoly.generate(mBitmap, 40); 176 | } 177 | if (i == 4) { 178 | mBitmap = Bitmap.createBitmap(backupBitmap); 179 | } 180 | } 181 | draweeView.setImageBitmap(mBitmap); 182 | return true; 183 | } 184 | }) 185 | .cancelable(false) 186 | .show(); 187 | } 188 | 189 | @OnClick(R.id.setwall) 190 | public void onSetWallpaperClick() { 191 | fabMenu.close(true); 192 | 193 | // When set wallpaper is clicked before generating 194 | if (mBitmap == null) { 195 | CommonUtils.showSnack(this, contentView, R.string.generate_image_first); 196 | return; 197 | } 198 | 199 | mProgress.setVisibility(ProgressBar.VISIBLE); 200 | isSetAs = true; 201 | new Downloader(MainActivity.this).execute(mBitmap); 202 | } 203 | 204 | @OnClick(R.id.settings) 205 | public void onSettingsClick() { 206 | fabMenu.close(true); 207 | Intent intent1 = new Intent(MainActivity.this, SettingsActivity.class); 208 | startActivity(intent1); 209 | } 210 | 211 | @OnClick(R.id.rand) 212 | public void onRandomClick() { 213 | fabMenu.close(true); 214 | fabMenu.setEnabled(false); 215 | 216 | if (mBitmap != null && mBitmap.isRecycled()) 217 | mBitmap.recycle(); 218 | 219 | RandomizeUtils mRand = new RandomizeUtils(MainActivity.this, BING_DEF); 220 | mRand.updateURI(); 221 | imageUri = mRand.getURI(); 222 | 223 | draweeView.setVisibility(View.GONE); 224 | draweeView.setEnabled(false); 225 | Fresco.getImagePipeline().clearCaches(); 226 | draweeView.setImageURI(imageUri); 227 | draweeView.setVisibility(View.VISIBLE); 228 | 229 | ImagePipeline imagePipeline = Fresco.getImagePipeline(); 230 | ImageRequest imageRequest = ImageRequestBuilder 231 | .newBuilderWithSource(imageUri) 232 | .setRequestPriority(Priority.HIGH) 233 | .setLowestPermittedRequestLevel(ImageRequest.RequestLevel.FULL_FETCH) 234 | .build(); 235 | 236 | DataSource> dataSource = 237 | imagePipeline.fetchDecodedImage(imageRequest, MainActivity.this); 238 | 239 | try { 240 | dataSource.subscribe(new BaseBitmapDataSubscriber() { 241 | @Override 242 | public void onNewResultImpl(@Nullable Bitmap bitmap) { 243 | // Lifetime of Bitmap is limited to this method only. 244 | mBitmap = bitmap; 245 | backupBitmap = bitmap; 246 | } 247 | 248 | @Override 249 | public void onFailureImpl(DataSource dataSource) { 250 | // No cleanup required here. 251 | } 252 | }, 253 | CallerThreadExecutor.getInstance()); 254 | } catch (Exception e) { 255 | CommonUtils.showSnack(this, contentView, R.string.error_text); 256 | } finally { 257 | //dataSource.close(); 258 | isDownloaded = false; 259 | isSetAs = false; 260 | draweeView.setEnabled(true); 261 | } 262 | } 263 | 264 | @Override 265 | public void onBackPressed() { 266 | if (fabMenu.isOpened()) 267 | fabMenu.close(true); 268 | else { 269 | this.finish(); 270 | super.onBackPressed(); 271 | } 272 | } 273 | 274 | @Override 275 | protected void onDestroy() { 276 | new FileUtils(MainActivity.this).deleteCache(); 277 | super.onDestroy(); 278 | if (mBitmap != null) 279 | mBitmap.recycle(); 280 | } 281 | 282 | @Override 283 | public void processFinish(boolean result) { 284 | mProgress.setVisibility(ProgressBar.GONE); 285 | 286 | if (result && isDownloaded && !isSetAs) 287 | CommonUtils.showSnack(this, contentView, R.string.download_success); 288 | 289 | else if (isDownloaded && !isSetAs) 290 | CommonUtils.showSnack(this, contentView, R.string.download_failed); 291 | 292 | else if (isSetAs) { 293 | File mFile = new FileUtils(MainActivity.this).getLastModFile(); 294 | String setAsType = sharedPref.getString( 295 | StaticVars.PREF_SET_AS, StaticVars.APP_NAME); 296 | WallpaperUtils.setAsWallpaper(MainActivity.this, setAsType, mFile); 297 | CommonUtils.showSnack(this, contentView, R.string.wallpaper_set_success); 298 | isSetAs = false; 299 | } 300 | } 301 | 302 | @Override 303 | public void jsonURI(String mURI) { 304 | BING_DEF = mURI; 305 | } 306 | } 307 | -------------------------------------------------------------------------------- /app/src/main/java/com/wallapp/MainApplication.java: -------------------------------------------------------------------------------- 1 | package com.wallapp; 2 | 3 | import android.app.Application; 4 | 5 | import com.facebook.drawee.backends.pipeline.Fresco; 6 | 7 | public class MainApplication extends Application { 8 | @Override 9 | public void onCreate() { 10 | Fresco.initialize(this); 11 | super.onCreate(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/wallapp/activities/IntroActivity.java: -------------------------------------------------------------------------------- 1 | package com.wallapp.activities; 2 | 3 | import android.Manifest; 4 | import android.content.Intent; 5 | import android.content.pm.PackageManager; 6 | import android.os.Bundle; 7 | import android.preference.PreferenceManager; 8 | import android.support.annotation.NonNull; 9 | import android.support.annotation.Nullable; 10 | import android.support.v4.app.ActivityCompat; 11 | import android.support.v4.content.ContextCompat; 12 | import android.support.v7.app.AppCompatActivity; 13 | 14 | import com.wallapp.store.StaticVars; 15 | import com.wallapp.MainActivity; 16 | 17 | public class IntroActivity extends AppCompatActivity { 18 | 19 | @Override 20 | protected void onCreate(@Nullable Bundle savedInstanceState) { 21 | super.onCreate(savedInstanceState); 22 | 23 | if (ContextCompat.checkSelfPermission(IntroActivity.this, 24 | Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 25 | ActivityCompat.requestPermissions(IntroActivity.this, 26 | new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 200); 27 | } 28 | } 29 | 30 | @Override 31 | public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, 32 | @NonNull int[] grantResults) { 33 | if (requestCode == 200) { 34 | if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 35 | startActivity(new Intent(getBaseContext(), MainActivity.class)); 36 | PreferenceManager.getDefaultSharedPreferences(getBaseContext()) 37 | .edit().putBoolean(StaticVars.PREF_FIRST_START, false).apply(); 38 | finish(); 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/wallapp/activities/SettingsActivity.java: -------------------------------------------------------------------------------- 1 | package com.wallapp.activities; 2 | 3 | import android.app.FragmentTransaction; 4 | import android.content.SharedPreferences; 5 | import android.os.Bundle; 6 | import android.preference.Preference; 7 | import android.preference.PreferenceFragment; 8 | import android.support.v7.app.AppCompatActivity; 9 | import android.support.v7.preference.PreferenceManager; 10 | import android.support.v7.widget.Toolbar; 11 | import android.view.View; 12 | 13 | import com.wallapp.store.StaticVars; 14 | import com.wallapp.R; 15 | import com.wallapp.fragments.AppInfoFragment; 16 | import com.wallapp.fragments.OpenLicFragment; 17 | import com.wallapp.utils.MetricsUtils; 18 | 19 | public class SettingsActivity extends AppCompatActivity { 20 | 21 | @Override 22 | protected void onCreate(Bundle savedInstanceState) { 23 | super.onCreate(savedInstanceState); 24 | setContentView(R.layout.activity_settings); 25 | 26 | setSupportActionBar((Toolbar) findViewById(R.id.toolbar)); 27 | if (getSupportActionBar() != null) 28 | getSupportActionBar().setTitle(R.string.settings); 29 | getSupportActionBar().setDisplayHomeAsUpEnabled(true); 30 | 31 | 32 | getFragmentManager().beginTransaction() 33 | .replace(R.id.content_frame, new SettingsFragment()) 34 | .commit(); 35 | } 36 | 37 | public static class SettingsFragment extends PreferenceFragment 38 | implements Preference.OnPreferenceClickListener, 39 | Preference.OnPreferenceChangeListener { 40 | 41 | private static final String CAT_KEY = "category"; 42 | private static final String SET_AS_KEY = "set_as"; 43 | private static final String SRC_KEY = "source"; 44 | private static final String QUALITY_KEY = "quality"; 45 | private static final String INTER_KEY = "interval"; 46 | private static final String OPEN_LICENSES_KEY = "open_licenses"; 47 | private static final String ABOUT_KEY = "about"; 48 | 49 | private SharedPreferences sharedPref; 50 | private Toolbar mToolbar; 51 | 52 | public SettingsFragment() { 53 | } 54 | 55 | @Override 56 | public void onCreate(Bundle savedInstanceState) { 57 | super.onCreate(savedInstanceState); 58 | addPreferencesFromResource(R.xml.preference); 59 | 60 | init(); 61 | 62 | mToolbar.setNavigationOnClickListener(new View.OnClickListener() { 63 | @Override 64 | public void onClick(View view) { 65 | if (!getFragmentManager().popBackStackImmediate()) { 66 | getActivity().finish(); 67 | } 68 | } 69 | }); 70 | 71 | findPreference(OPEN_LICENSES_KEY) 72 | .setOnPreferenceClickListener(this); 73 | findPreference(ABOUT_KEY) 74 | .setOnPreferenceClickListener(this); 75 | findPreference(CAT_KEY) 76 | .setOnPreferenceChangeListener(this); 77 | findPreference(SET_AS_KEY) 78 | .setOnPreferenceChangeListener(this); 79 | findPreference(SRC_KEY) 80 | .setOnPreferenceChangeListener(this); 81 | findPreference(QUALITY_KEY) 82 | .setOnPreferenceChangeListener(this); 83 | // findPreference(INTER_KEY) 84 | // .setOnPreferenceChangeListener(this); 85 | } 86 | 87 | private void init() { 88 | sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity()); 89 | mToolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); 90 | 91 | if (sharedPref.getString(SRC_KEY, StaticVars.SRC_UNSPLASH) 92 | .equals(StaticVars.SRC_UNSPLASH)) { 93 | togglePref(true); 94 | } else if (sharedPref.getString(SRC_KEY, StaticVars.SRC_UNSPLASH) 95 | .equals(StaticVars.SRC_BING)) { 96 | togglePref(false); 97 | } else { 98 | togglePref(false); 99 | } 100 | 101 | findPreference(CAT_KEY).setSummary(sharedPref.getString(CAT_KEY, "None")); 102 | findPreference(SET_AS_KEY) 103 | .setSummary(sharedPref.getString(SET_AS_KEY, StaticVars.APP_NAME)); 104 | findPreference(SRC_KEY) 105 | .setSummary(sharedPref.getString(SRC_KEY, StaticVars.SRC_UNSPLASH)); 106 | findPreference(QUALITY_KEY).setSummary(sharedPref.getString(QUALITY_KEY, "Best fit")); 107 | // findPreference(INTER_KEY).setSummary(sharedPref.getString(INTER_KEY, "None")); 108 | } 109 | 110 | @Override 111 | public boolean onPreferenceClick(Preference preference) { 112 | FragmentTransaction mTransaction = getFragmentManager().beginTransaction(); 113 | 114 | switch (preference.getKey()) { 115 | 116 | case OPEN_LICENSES_KEY: 117 | 118 | mTransaction.replace(R.id.content_frame, new OpenLicFragment(), null) 119 | .addToBackStack(null).commit(); 120 | mToolbar.setTitle(R.string.open_source_licenses); 121 | 122 | break; 123 | 124 | case ABOUT_KEY: 125 | 126 | mTransaction.detach(getFragmentManager() 127 | .findFragmentById(R.id.content_frame)); 128 | mTransaction.replace(R.id.content, new AppInfoFragment(), null) 129 | .addToBackStack(null).commit(); 130 | break; 131 | } 132 | return true; 133 | } 134 | 135 | @Override 136 | public boolean onPreferenceChange(Preference preference, Object o) { 137 | preference.setSummary(o.toString()); 138 | switch (preference.getKey()) { 139 | 140 | case SRC_KEY: 141 | if (o.toString().equals(StaticVars.SRC_UNSPLASH)) { 142 | togglePref(true); 143 | } else if (o.toString().equals(StaticVars.SRC_BING)) { 144 | togglePref(false); 145 | } else { 146 | togglePref(false); 147 | } 148 | break; 149 | 150 | case QUALITY_KEY: 151 | if (o.toString().equals("HD")) { 152 | sharedPref.edit().putInt("height", MetricsUtils.getHDHeight()).apply(); 153 | sharedPref.edit().putInt("width", MetricsUtils.getHDWidth()).apply(); 154 | } else if (o.toString().equals("Full HD")) { 155 | sharedPref.edit().putInt("height", MetricsUtils.getFullHDHeight()).apply(); 156 | sharedPref.edit().putInt("width", MetricsUtils.getFullHDWidth()).apply(); 157 | } else if (o.toString().equals("Crazy UHD")) { 158 | sharedPref.edit().putInt("height", MetricsUtils.getMaxHeight()).apply(); 159 | sharedPref.edit().putInt("width", MetricsUtils.getMaxWidth()).apply(); 160 | } else { 161 | sharedPref.edit().putInt("height", MetricsUtils.getScreenHeight()).apply(); 162 | sharedPref.edit().putInt("width", MetricsUtils.getScreenWidth()).apply(); 163 | } 164 | break; 165 | 166 | case INTER_KEY: 167 | break; 168 | } 169 | return true; 170 | } 171 | 172 | private void togglePref(boolean val1) { 173 | findPreference(CAT_KEY).setEnabled(val1); 174 | } 175 | } 176 | } -------------------------------------------------------------------------------- /app/src/main/java/com/wallapp/activities/SplashActivity.java: -------------------------------------------------------------------------------- 1 | package com.wallapp.activities; 2 | 3 | 4 | import android.content.Intent; 5 | import android.os.Bundle; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.view.Window; 8 | import android.view.WindowManager; 9 | 10 | import com.wallapp.MainActivity; 11 | 12 | public class SplashActivity extends AppCompatActivity { 13 | 14 | @Override 15 | protected void onCreate(Bundle savedInstanceState) { 16 | super.onCreate(savedInstanceState); 17 | 18 | requestWindowFeature(Window.FEATURE_NO_TITLE); 19 | getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 20 | WindowManager.LayoutParams.FLAG_FULLSCREEN); 21 | 22 | Intent intent = new Intent(this, MainActivity.class); 23 | startActivity(intent); 24 | finish(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/wallapp/async/Downloader.java: -------------------------------------------------------------------------------- 1 | package com.wallapp.async; 2 | 3 | 4 | import android.graphics.Bitmap; 5 | import android.os.AsyncTask; 6 | import android.os.Environment; 7 | 8 | import com.wallapp.store.StaticVars; 9 | 10 | import java.io.ByteArrayInputStream; 11 | import java.io.ByteArrayOutputStream; 12 | import java.io.File; 13 | import java.io.FileOutputStream; 14 | import java.io.InputStream; 15 | import java.io.OutputStream; 16 | import java.text.SimpleDateFormat; 17 | import java.util.Date; 18 | import java.util.Locale; 19 | 20 | public class Downloader extends AsyncTask { 21 | 22 | public AsyncResponse delegate = null; 23 | 24 | public Downloader(AsyncResponse delegate) { 25 | this.delegate = delegate; 26 | } 27 | 28 | @Override 29 | protected Boolean doInBackground(Bitmap... bitmaps) { 30 | 31 | try { 32 | Bitmap bmp = bitmaps[0]; 33 | File root = Environment.getExternalStorageDirectory(); 34 | File mFile = new File(root.getAbsolutePath() + File.separator + StaticVars.APP_NAME); 35 | if (!mFile.exists()) 36 | mFile.mkdir(); 37 | String fileName = StaticVars.APP_NAME + "_" + 38 | new SimpleDateFormat(StaticVars.DATE_FORMAT, Locale.getDefault()) 39 | .format(new Date()) + ".JPEG"; 40 | File input_file = new File(mFile, fileName); 41 | 42 | ByteArrayOutputStream stream = new ByteArrayOutputStream(); 43 | bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream); 44 | InputStream inputStream = new ByteArrayInputStream(stream.toByteArray()); 45 | byte[] data = new byte[1024]; 46 | int count; 47 | OutputStream outputStream = new FileOutputStream(input_file); 48 | while ((count = inputStream.read(data)) != -1) { 49 | outputStream.write(data, 0, count); 50 | } 51 | inputStream.close(); 52 | outputStream.close(); 53 | return true; 54 | } catch (Exception e) { 55 | e.printStackTrace(); 56 | return false; 57 | } 58 | } 59 | 60 | @Override 61 | protected void onPostExecute(Boolean aBoolean) { 62 | delegate.processFinish(aBoolean); 63 | } 64 | 65 | public interface AsyncResponse { 66 | void processFinish(boolean result); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /app/src/main/java/com/wallapp/async/ParseBing.java: -------------------------------------------------------------------------------- 1 | package com.wallapp.async; 2 | 3 | 4 | import android.os.AsyncTask; 5 | 6 | import com.wallapp.store.StaticVars; 7 | 8 | import org.json.JSONArray; 9 | import org.json.JSONException; 10 | import org.json.JSONObject; 11 | 12 | import java.io.BufferedReader; 13 | import java.io.IOException; 14 | import java.io.InputStreamReader; 15 | import java.net.HttpURLConnection; 16 | import java.net.URL; 17 | import java.util.ArrayList; 18 | import java.util.List; 19 | 20 | public class ParseBing extends AsyncTask { 21 | private static final String JSON_URL = StaticVars.BING_DAILY_URL; 22 | private AsyncResponse delegate = null; 23 | 24 | public ParseBing(AsyncResponse delegate) { 25 | this.delegate = delegate; 26 | } 27 | 28 | @Override 29 | protected String doInBackground(Void... voids) { 30 | String jsonData; 31 | StringBuilder mBuilder = new StringBuilder(); 32 | String imageURL; 33 | List imageURI = new ArrayList<>(); 34 | 35 | try { 36 | // JSON fetch 37 | URL url = new URL(JSON_URL); 38 | HttpURLConnection mConnection = (HttpURLConnection) url.openConnection(); 39 | BufferedReader mReader = 40 | new BufferedReader(new InputStreamReader(mConnection.getInputStream())); 41 | while ((jsonData = mReader.readLine()) != null) { 42 | mBuilder.append(jsonData).append("\n"); 43 | } 44 | mReader.close(); 45 | mConnection.disconnect(); 46 | 47 | // JSON parse 48 | JSONObject mJObject = new JSONObject(mBuilder.toString().trim()); 49 | JSONArray mJArray = mJObject.getJSONArray("images"); 50 | for (int i = 0; i < mJArray.length(); i++) { 51 | imageURL = StaticVars.BING_BASE_URL + mJArray.getJSONObject(i).getString("url"); 52 | imageURI.add(imageURL); 53 | } 54 | } catch (IOException | JSONException e) { 55 | e.printStackTrace(); 56 | } 57 | return imageURI.get(0); 58 | } 59 | 60 | @Override 61 | protected void onPostExecute(String s) { 62 | if (delegate != null) 63 | delegate.jsonURI(s); 64 | } 65 | 66 | public interface AsyncResponse { 67 | void jsonURI(String mURI); 68 | } 69 | } -------------------------------------------------------------------------------- /app/src/main/java/com/wallapp/fragments/AppInfoFragment.java: -------------------------------------------------------------------------------- 1 | package com.wallapp.fragments; 2 | 3 | import android.app.Fragment; 4 | import android.content.pm.PackageInfo; 5 | import android.content.pm.PackageManager; 6 | import android.os.Bundle; 7 | import android.support.annotation.Nullable; 8 | import android.view.LayoutInflater; 9 | import android.view.View; 10 | import android.view.ViewGroup; 11 | import android.widget.TextView; 12 | 13 | import com.wallapp.R; 14 | 15 | public class AppInfoFragment extends Fragment { 16 | 17 | TextView versionCode; 18 | 19 | @Nullable 20 | @Override 21 | public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { 22 | View view = inflater.inflate(R.layout.layout_about, container, false); 23 | 24 | versionCode = view.findViewById(R.id.versionCode); 25 | PackageInfo pInfo = null; 26 | try { 27 | pInfo = getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), 0); 28 | } catch (PackageManager.NameNotFoundException e) { 29 | e.printStackTrace(); 30 | } 31 | String version = pInfo != null ? pInfo.versionName : null; 32 | versionCode.setText(String.format("Version %s", version)); 33 | 34 | return view; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/wallapp/fragments/OpenLicFragment.java: -------------------------------------------------------------------------------- 1 | package com.wallapp.fragments; 2 | 3 | import android.app.Fragment; 4 | import android.os.Bundle; 5 | import android.support.annotation.Nullable; 6 | import android.support.v7.widget.Toolbar; 7 | import android.view.LayoutInflater; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | import android.webkit.WebView; 11 | 12 | import com.wallapp.R; 13 | 14 | public class OpenLicFragment extends Fragment { 15 | 16 | WebView mWebView; 17 | 18 | @Nullable 19 | @Override 20 | public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { 21 | View view = inflater.inflate(R.layout.layout_license, container, false); 22 | mWebView = (WebView) view.findViewById(R.id.webview); 23 | mWebView.loadUrl("file:///android_asset/open_licenses.html"); 24 | return view; 25 | } 26 | 27 | @Override 28 | public void onDestroy() { 29 | ((Toolbar) getActivity().findViewById(R.id.toolbar)) 30 | .setTitle(R.string.settings); 31 | super.onDestroy(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/wallapp/store/StaticVars.java: -------------------------------------------------------------------------------- 1 | package com.wallapp.store; 2 | 3 | public interface StaticVars { 4 | String ALPHA_BASE_URL = "https://source.unsplash.com/featured/"; 5 | String BING_BASE_URL = "https://bing.com"; 6 | String BING_DAILY_URL = BING_BASE_URL + "/HPImageArchive.aspx?format=js&n=7&idx=0"; 7 | 8 | String PREF_FIRST_START = "FIRST_START"; 9 | String PREF_SET_AS = "SET_AS"; 10 | 11 | String SRC_UNSPLASH = "Unsplash"; 12 | String SRC_BING = "Bing daily"; 13 | 14 | String DATE_FORMAT = "yyyyMMdd_HHmmss"; 15 | 16 | int HDWidth = 1280; 17 | int HDHeight = 720; 18 | int FHDWidth = 1920; 19 | int FHDHeight = 1080; 20 | int MAXWidth = 2880; 21 | int MAXHeight = 1680; 22 | 23 | String APP_NAME = "WallApp"; 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/wallapp/utils/CommonUtils.java: -------------------------------------------------------------------------------- 1 | package com.wallapp.utils; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | import android.content.DialogInterface; 6 | import android.graphics.Color; 7 | import android.net.ConnectivityManager; 8 | import android.net.NetworkInfo; 9 | import android.support.v4.content.ContextCompat; 10 | import android.support.v7.app.AlertDialog; 11 | import android.view.View; 12 | import android.widget.TextView; 13 | 14 | import com.androidadvance.topsnackbar.TSnackbar; 15 | import com.wallapp.R; 16 | 17 | /** 18 | * Created by chatRG. 19 | */ 20 | 21 | public class CommonUtils { 22 | 23 | public static boolean isNetworkAvailable(Context context) { 24 | ConnectivityManager connectivityManager 25 | = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 26 | NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 27 | return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 28 | } 29 | 30 | public static void checkNetworkDialog(final Context context) { 31 | new AlertDialog.Builder(context) 32 | .setTitle(R.string.no_network_connection) 33 | .setMessage(R.string.no_network_message) 34 | .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { 35 | public void onClick(DialogInterface dialog, int which) { 36 | ((Activity) context).finish(); 37 | } 38 | }) 39 | .setCancelable(false) 40 | .setIcon(R.drawable.ic_error) 41 | .show(); 42 | } 43 | 44 | public static void showSnack(Context context, View contentView, int text) { 45 | TSnackbar snackbar = TSnackbar 46 | .make(contentView, text, TSnackbar.LENGTH_LONG); 47 | snackbar.setActionTextColor(Color.WHITE); 48 | snackbar.setIconLeft(R.drawable.ic_intro, 48); 49 | snackbar.setIconPadding(8); 50 | snackbar.setMaxWidth(3000); 51 | View snackbarView = snackbar.getView(); 52 | snackbarView.setBackgroundColor(ContextCompat.getColor(context, R.color.snack_back)); 53 | TextView textView = (TextView) 54 | snackbarView.findViewById(com.androidadvance.topsnackbar.R.id.snackbar_text); 55 | textView.setTextColor(ContextCompat.getColor(context, R.color.textColorPrimary2)); 56 | snackbar.show(); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /app/src/main/java/com/wallapp/utils/FileUtils.java: -------------------------------------------------------------------------------- 1 | package com.wallapp.utils; 2 | 3 | import android.content.Context; 4 | import android.os.Environment; 5 | import android.support.annotation.Nullable; 6 | 7 | import com.wallapp.R; 8 | 9 | import java.io.File; 10 | 11 | public class FileUtils { 12 | private Context context; 13 | 14 | public FileUtils(Context context) { 15 | this.context = context; 16 | } 17 | 18 | private static boolean deleteDir(File dir) { 19 | if (dir != null && dir.isDirectory()) { 20 | String[] children = dir.list(); 21 | for (String aChildren : children) { 22 | boolean success = deleteDir(new File(dir, aChildren)); 23 | if (!success) { 24 | return false; 25 | } 26 | } 27 | return dir.delete(); 28 | } else if (dir != null && dir.isFile()) { 29 | return dir.delete(); 30 | } else { 31 | return false; 32 | } 33 | } 34 | 35 | @Nullable 36 | public File getLastModFile() { 37 | String dirPath = Environment 38 | .getExternalStorageDirectory() 39 | .getAbsolutePath() + File.separator + context.getString(R.string.app_name) + File.separator; 40 | File dir = new File(dirPath); 41 | File[] files = dir.listFiles(); 42 | if (files == null || files.length == 0) { 43 | return null; 44 | } 45 | 46 | File lastModFile = files[0]; 47 | for (int i = 1; i < files.length; i++) { 48 | if (lastModFile.lastModified() < files[i].lastModified()) { 49 | lastModFile = files[i]; 50 | } 51 | } 52 | return lastModFile; 53 | } 54 | 55 | public void deleteCache() { 56 | try { 57 | File dir = context.getCacheDir(); 58 | deleteDir(dir); 59 | } catch (Exception e) { 60 | e.printStackTrace(); 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /app/src/main/java/com/wallapp/utils/GradientUtils.java: -------------------------------------------------------------------------------- 1 | package com.wallapp.utils; 2 | 3 | import android.graphics.Bitmap; 4 | import android.graphics.Canvas; 5 | import android.graphics.Color; 6 | import android.graphics.LinearGradient; 7 | import android.graphics.Matrix; 8 | import android.graphics.Paint; 9 | import android.graphics.RectF; 10 | import android.graphics.Shader; 11 | import android.graphics.drawable.GradientDrawable; 12 | 13 | public class GradientUtils { 14 | 15 | public Bitmap getGradient() { 16 | 17 | int width = MetricsUtils.getScreenWidth(); 18 | int height = MetricsUtils.getScreenHeight(); 19 | 20 | Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 21 | 22 | /*GradientDrawable gradientDrawable = new GradientDrawable(); 23 | 24 | gradientDrawable.setColors(new int[]{ 25 | Color.RED, 26 | Color.GREEN, 27 | Color.YELLOW, 28 | Color.CYAN 29 | }); 30 | 31 | gradientDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT); 32 | gradientDrawable.setShape(GradientDrawable.RECTANGLE); 33 | gradientDrawable.setSize(width, height);*/ 34 | 35 | LinearGradient gradient = 36 | new LinearGradient(0, 0, 0, 400, 37 | Color.RED, Color.CYAN, Shader.TileMode.CLAMP); 38 | 39 | Paint p = new Paint(); 40 | p.setDither(true); 41 | p.setShader(gradient); 42 | 43 | Canvas canvas = new Canvas(output); 44 | 45 | canvas.drawRect(new RectF(0, 0, width, height), p); 46 | 47 | //canvas.drawBitmap(output, new Matrix(), p); 48 | //gradientDrawable.draw(canvas); 49 | 50 | return output; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/com/wallapp/utils/ImageUtils.java: -------------------------------------------------------------------------------- 1 | package com.wallapp.utils; 2 | 3 | import android.content.Context; 4 | import android.graphics.Bitmap; 5 | import android.graphics.Canvas; 6 | import android.graphics.Color; 7 | import android.graphics.ColorFilter; 8 | import android.graphics.ColorMatrix; 9 | import android.graphics.ColorMatrixColorFilter; 10 | import android.graphics.LightingColorFilter; 11 | import android.graphics.Matrix; 12 | import android.graphics.Paint; 13 | import android.renderscript.Allocation; 14 | import android.renderscript.Element; 15 | import android.renderscript.RenderScript; 16 | import android.renderscript.ScriptIntrinsicBlur; 17 | import android.support.v4.content.ContextCompat; 18 | 19 | public class ImageUtils { 20 | 21 | public static Bitmap getBlurBitmap(Context context, Bitmap bitmap, float radius) { 22 | 23 | float intensity = 25f; 24 | 25 | int width = Math.round(bitmap.getWidth()); 26 | int height = Math.round(bitmap.getHeight()); 27 | 28 | Bitmap input = Bitmap.createScaledBitmap(bitmap, width, height, false); 29 | 30 | Bitmap output = Bitmap.createBitmap(input); 31 | 32 | RenderScript rs = RenderScript.create(context); 33 | ScriptIntrinsicBlur intrinsicBlur = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); 34 | 35 | Allocation inputallocation = Allocation.createFromBitmap(rs, input); 36 | Allocation outputallocation = Allocation.createFromBitmap(rs, output); 37 | intrinsicBlur.setRadius(intensity); 38 | intrinsicBlur.setInput(inputallocation); 39 | intrinsicBlur.forEach(outputallocation); 40 | 41 | outputallocation.copyTo(output); 42 | 43 | return output; 44 | } 45 | 46 | public static Bitmap getGrayBitmap(Bitmap bitmap) { 47 | 48 | int width = bitmap.getWidth(); 49 | int height = bitmap.getHeight(); 50 | 51 | Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 52 | 53 | Canvas canvas = new Canvas(output); 54 | Paint paint = new Paint(); 55 | 56 | ColorMatrix colorMatrix = new ColorMatrix(); 57 | colorMatrix.setSaturation(0); 58 | ColorMatrixColorFilter filter = new ColorMatrixColorFilter(colorMatrix); 59 | 60 | paint.setColorFilter(filter); 61 | canvas.drawBitmap(bitmap, 0, 0, paint); 62 | 63 | bitmap.recycle(); 64 | return output; 65 | } 66 | 67 | public static Bitmap getDarkenBitmap(Bitmap bitmap) { 68 | 69 | int width = bitmap.getWidth(); 70 | int height = bitmap.getHeight(); 71 | 72 | Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 73 | 74 | Canvas canvas = new Canvas(output); 75 | Paint paint = new Paint(); 76 | 77 | ColorFilter filter; 78 | filter = new LightingColorFilter(0xFF999999, 0x00000000); 79 | paint.setColorFilter(filter); 80 | canvas.drawBitmap(bitmap, new Matrix(), paint); 81 | 82 | return output; 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /app/src/main/java/com/wallapp/utils/MetricsUtils.java: -------------------------------------------------------------------------------- 1 | package com.wallapp.utils; 2 | 3 | 4 | import android.content.res.Resources; 5 | 6 | import com.wallapp.store.StaticVars; 7 | 8 | public class MetricsUtils { 9 | 10 | public static int getScreenWidth() { 11 | return Resources.getSystem().getDisplayMetrics().widthPixels; 12 | } 13 | 14 | public static int getScreenHeight() { 15 | return Resources.getSystem().getDisplayMetrics().heightPixels; 16 | } 17 | 18 | public static int getHDWidth() { 19 | return StaticVars.HDWidth; 20 | } 21 | 22 | public static int getHDHeight() { 23 | return StaticVars.HDHeight; 24 | } 25 | 26 | public static int getFullHDWidth() { 27 | return StaticVars.FHDWidth; 28 | } 29 | 30 | public static int getFullHDHeight() { 31 | return StaticVars.FHDHeight; 32 | } 33 | 34 | public static int getMaxWidth() { 35 | return StaticVars.MAXWidth; 36 | } 37 | 38 | public static int getMaxHeight() { 39 | return StaticVars.MAXHeight; 40 | } 41 | } -------------------------------------------------------------------------------- /app/src/main/java/com/wallapp/utils/RandomizeUtils.java: -------------------------------------------------------------------------------- 1 | package com.wallapp.utils; 2 | 3 | import android.content.Context; 4 | import android.content.SharedPreferences; 5 | import android.graphics.Bitmap; 6 | import android.graphics.Canvas; 7 | import android.graphics.drawable.GradientDrawable; 8 | import android.net.Uri; 9 | import android.preference.PreferenceManager; 10 | 11 | import com.wallapp.store.StaticVars; 12 | import com.wallapp.async.ParseBing; 13 | 14 | public class RandomizeUtils implements ParseBing.AsyncResponse { 15 | 16 | private static final String URL_ALT = StaticVars.ALPHA_BASE_URL; 17 | private static String BING_DEF; 18 | private static SharedPreferences sharedPref; 19 | private static Uri imageUri; 20 | private Context context; 21 | 22 | public RandomizeUtils(Context context, String bing) { 23 | this.context = context; 24 | BING_DEF = bing; 25 | sharedPref = PreferenceManager.getDefaultSharedPreferences(context); 26 | } 27 | 28 | public void updateURI() { 29 | String category = sharedPref.getString("category", "None"); 30 | String source = sharedPref.getString("source", StaticVars.SRC_UNSPLASH); 31 | 32 | int width = sharedPref.getInt("width", MetricsUtils.getScreenWidth()); 33 | int height = sharedPref.getInt("height", MetricsUtils.getScreenHeight()); 34 | 35 | if (source.equals(StaticVars.SRC_BING)) { 36 | if (!BING_DEF.isEmpty()) { 37 | setURI(BING_DEF); 38 | } else { 39 | new ParseBing(RandomizeUtils.this).execute(); 40 | } 41 | } else if (source.equals(StaticVars.SRC_UNSPLASH)) { 42 | String url_ext = width + "x" + height; 43 | if (!category.equals("None")) { 44 | url_ext += "/?" + category.toLowerCase(); 45 | } 46 | setURI(URL_ALT + url_ext); 47 | } 48 | } 49 | 50 | public Uri getURI() { 51 | return imageUri; 52 | } 53 | 54 | private void setURI(String url) { 55 | imageUri = Uri.parse(url); 56 | } 57 | 58 | @Override 59 | public void jsonURI(String mURI) { 60 | BING_DEF = mURI; 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /app/src/main/java/com/wallapp/utils/WallpaperUtils.java: -------------------------------------------------------------------------------- 1 | package com.wallapp.utils; 2 | 3 | import android.app.WallpaperManager; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.graphics.Bitmap; 7 | import android.graphics.BitmapFactory; 8 | import android.net.Uri; 9 | 10 | import com.wallapp.utils.MetricsUtils; 11 | 12 | import java.io.File; 13 | import java.io.IOException; 14 | 15 | public class WallpaperUtils { 16 | 17 | public static void setAsWallpaper(Context context, String setAs, File lastFile) { 18 | 19 | if (setAs.equals("System")) { 20 | Intent intent = new Intent(Intent.ACTION_ATTACH_DATA); 21 | intent.addCategory(Intent.CATEGORY_DEFAULT); 22 | intent.setDataAndType(Uri.fromFile(lastFile), "image/jpeg"); 23 | intent.putExtra("mimeType", "image/jpeg"); 24 | context.startActivity(Intent.createChooser(intent, "Set wallpaper with")); 25 | } else { 26 | setWallpaper(context, lastFile); 27 | } 28 | } 29 | 30 | private static void setWallpaper(Context context, File lastFile) { 31 | 32 | int height = MetricsUtils.getScreenHeight(); 33 | int width = MetricsUtils.getScreenWidth() << 1; 34 | 35 | String imagePath = lastFile.getAbsolutePath(); 36 | 37 | final BitmapFactory.Options options = new BitmapFactory.Options(); 38 | options.inJustDecodeBounds = true; 39 | BitmapFactory.decodeFile(imagePath, options); 40 | options.inSampleSize = calculateInSampleSize(options, width, height); 41 | 42 | // Decode bitmap with inSampleSize set 43 | options.inJustDecodeBounds = false; 44 | Bitmap decodedSampleBitmap = BitmapFactory.decodeFile(imagePath, options); 45 | 46 | WallpaperManager wm = WallpaperManager.getInstance(context); 47 | try { 48 | wm.setBitmap(decodedSampleBitmap); 49 | } catch (IOException e) { 50 | e.printStackTrace(); 51 | } finally { 52 | lastFile.delete(); 53 | } 54 | } 55 | 56 | private static int calculateInSampleSize(BitmapFactory.Options options, 57 | int reqWidth, int reqHeight) { 58 | // Raw height and width of image 59 | final int height = options.outHeight; 60 | final int width = options.outWidth; 61 | int inSampleSize = 1; 62 | 63 | if (height > reqHeight || width > reqWidth) { 64 | 65 | // Calculate ratios of height and width to requested height and width 66 | final int heightRatio = Math.round((float) height / (float) reqHeight); 67 | final int widthRatio = Math.round((float) width / (float) reqWidth); 68 | 69 | // Choose the smallest ratio as inSampleSize value, this will guarantee 70 | // a final image with both dimensions larger than or equal to the 71 | // requested height and width. 72 | inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; 73 | } 74 | return inSampleSize; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_intro.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 23 | 40 | 58 | 63 | 68 | 73 | 78 | 83 | 88 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/icon_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 23 | 40 | 58 | 63 | 68 | 73 | 78 | 83 | 88 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/about_overlay.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatRG/WallApp/ee5948b4a61b763b7838c890e0c70ae88019b172/app/src/main/res/drawable/about_overlay.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_download.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_edit.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_error.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_more.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_random.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_retry.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 23 | 40 | 58 | 63 | 68 | 73 | 78 | 83 | 88 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_set.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_settings.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_share.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatRG/WallApp/ee5948b4a61b763b7838c890e0c70ae88019b172/app/src/main/res/drawable/ic_splash.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/splash_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 20 | 21 | 25 | 26 | 27 | 28 | 34 | 35 | 44 | 45 | 46 | 47 | 48 | 49 | 62 | 63 | 70 | 71 | 78 | 79 | 86 | 87 | 94 | 95 | 102 | 103 | 110 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_settings.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 15 | 16 | 21 | 22 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/layout/content_main.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_about.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 22 | 23 | 32 | 33 | 40 | 41 | 48 | 49 | 57 | 58 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_license.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatRG/WallApp/ee5948b4a61b763b7838c890e0c70ae88019b172/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatRG/WallApp/ee5948b4a61b763b7838c890e0c70ae88019b172/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatRG/WallApp/ee5948b4a61b763b7838c890e0c70ae88019b172/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatRG/WallApp/ee5948b4a61b763b7838c890e0c70ae88019b172/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatRG/WallApp/ee5948b4a61b763b7838c890e0c70ae88019b172/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #009688 4 | #00796B 5 | #2979FF 6 | #00796B 7 | 8 | #99009688 9 | 10 | #00695C 11 | 12 | #2979FF 13 | #82B1FF 14 | 15 | #546E7A 16 | 17 | #1E88E5 18 | #D81B60 19 | #5E35B1 20 | 21 | #263238 22 | 23 | #FFFFFF 24 | #EEEEEE 25 | #AAECEFF1 26 | 27 | #000000 28 | #263238 29 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 16dp 3 | 20dp 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | WallApp 3 | App Logo 4 | 5 | 6 | None 7 | Buildings 8 | City 9 | Clock 10 | Coffee 11 | Computer 12 | Couple 13 | Family 14 | Food 15 | Girl 16 | Landscape 17 | Love 18 | Man 19 | Mountains 20 | Music 21 | Nature 22 | Office 23 | Tree 24 | Weddings 25 | 26 | 27 | Settings 28 | Error 29 | Download image first 30 | Generate image first 31 | Share 32 | 33 | Set as type 34 | 35 | 36 | WallApp 37 | System 38 | 39 | 40 | 41 | Unsplash 42 | Bing daily 43 | Gradient 44 | 45 | 46 | 47 | Best fit 48 | HD (720p) 49 | Full HD (1080p) 50 | Crazy UHD (1680p) 51 | 52 | 53 | 60 | 61 | 62 | Blur 63 | Grayscale 64 | Darken 65 | Low Poly 66 | None 67 | 68 | 69 | Downloaded successfully! 70 | Download failed! 71 | 72 | Wallpaper set successfully! 73 | 74 | No Network Connection 75 | Network connection must be switched on to run this application 76 | 77 | Developed by chatRG 78 | © 2016 – today \nAll rights reserved. 79 | Open Source Licenses 80 | 81 | 82 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 14 | 15 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/xml/preference.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 13 | 14 | 20 | 21 | 27 | 28 | 34 | 35 | 41 | 42 | 43 | 44 | 45 | 46 | 49 | 50 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /art/Banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatRG/WallApp/ee5948b4a61b763b7838c890e0c70ae88019b172/art/Banner.png -------------------------------------------------------------------------------- /art/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatRG/WallApp/ee5948b4a61b763b7838c890e0c70ae88019b172/art/screenshot.png -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | jcenter() 6 | mavenCentral() 7 | google() 8 | } 9 | dependencies { 10 | classpath 'com.android.tools.build:gradle:3.3.0' 11 | 12 | // NOTE: Do not place your application dependencies here; they belong 13 | // in the individual module build.gradle files 14 | } 15 | } 16 | 17 | allprojects { 18 | repositories { 19 | jcenter() 20 | maven { url 'https://jitpack.io' } 21 | google() 22 | } 23 | } 24 | 25 | task clean(type: Delete) { 26 | delete rootProject.buildDir 27 | } 28 | -------------------------------------------------------------------------------- /gradients.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Berimbolo", 4 | "colors": ["#02111D", "#037BB5", "#02111D"] 5 | }, 6 | { 7 | "name": "Mango", 8 | "colors": ["#ffe259", "#ffa751"] 9 | }, 10 | { 11 | "name": "Windy", 12 | "colors": ["#acb6e5", "#86fde8"] 13 | }, 14 | { 15 | "name": "Royal Blue", 16 | "colors": ["#536976", "#292E49"] 17 | }, 18 | { 19 | "name": "Royal Blue + Petrol", 20 | "colors": ["#BBD2C5", "#536976", "#292E49"] 21 | }, 22 | { 23 | "name": "Copper", 24 | "colors": ["#B79891", "#94716B"] 25 | }, 26 | { 27 | "name": "Petrol", 28 | "colors": ["#BBD2C5", "#536976"] 29 | }, 30 | { 31 | "name": "Sky", 32 | "colors": ["#076585", "#fff"] 33 | }, 34 | { 35 | "name": "Sel", 36 | "colors": ["#00467F", "#A5CC82"] 37 | }, 38 | { 39 | "name": "Skyline", 40 | "colors": ["#1488CC", "#2B32B2"] 41 | }, 42 | { 43 | "name": "DIMIGO", 44 | "colors": ["#ec008c", "#fc6767"] 45 | }, 46 | { 47 | "name": "Purple Love", 48 | "colors": ["#cc2b5e", "#753a88"] 49 | }, 50 | { 51 | "name": "Sexy Blue", 52 | "colors": ["#2193b0", "#6dd5ed"] 53 | }, 54 | { 55 | "name": "Blooker20", 56 | "colors": ["#e65c00", "#F9D423"] 57 | }, 58 | { 59 | "name": "Sea Blue", 60 | "colors": ["#2b5876", "#4e4376"] 61 | }, 62 | { 63 | "name": "Nimvelo", 64 | "colors": ["#314755", "#26a0da"] 65 | }, 66 | { 67 | "name": "Hazel", 68 | "colors": ["#77A1D3", "#79CBCA", "#E684AE"] 69 | }, 70 | { 71 | "name": "Noon to Dusk", 72 | "colors": ["#ff6e7f", "#bfe9ff"] 73 | }, 74 | { 75 | "name": "YouTube", 76 | "colors": ["#e52d27", "#b31217"] 77 | }, 78 | { 79 | "name": "Cool Brown", 80 | "colors": ["#603813", "#b29f94"] 81 | }, 82 | { 83 | "name": "Harmonic Energy", 84 | "colors": ["#16A085", "#F4D03F"] 85 | }, 86 | { 87 | "name": "Playing with Reds", 88 | "colors": ["#D31027", "#EA384D"] 89 | }, 90 | { 91 | "name": "Sunny Days", 92 | "colors": ["#EDE574", "#E1F5C4"] 93 | }, 94 | { 95 | "name": "Green Beach", 96 | "colors": ["#02AAB0", "#00CDAC"] 97 | }, 98 | { 99 | "name": "Intuitive Purple", 100 | "colors": ["#DA22FF", "#9733EE"] 101 | }, 102 | { 103 | "name": "Emerald Water", 104 | "colors": ["#348F50", "#56B4D3"] 105 | }, 106 | { 107 | "name": "Lemon Twist", 108 | "colors": ["#3CA55C", "#B5AC49"] 109 | }, 110 | { 111 | "name": "Monte Carlo", 112 | "colors": ["#CC95C0", "#DBD4B4", "#7AA1D2"] 113 | }, 114 | { 115 | "name": "Horizon", 116 | "colors": ["#003973", "#E5E5BE"] 117 | }, 118 | { 119 | "name": "Rose Water", 120 | "colors": ["#E55D87", "#5FC3E4"] 121 | }, 122 | { 123 | "name": "Frozen", 124 | "colors": ["#403B4A", "#E7E9BB"] 125 | }, 126 | { 127 | "name": "Mango Pulp", 128 | "colors": ["#F09819", "#EDDE5D"] 129 | }, 130 | { 131 | "name": "Bloody Mary", 132 | "colors": ["#FF512F", "#DD2476"] 133 | }, 134 | { 135 | "name": "Aubergine", 136 | "colors": ["#AA076B", "#61045F"] 137 | }, 138 | { 139 | "name": "Aqua Marine", 140 | "colors": ["#1A2980", "#26D0CE"] 141 | }, 142 | { 143 | "name": "Sunrise", 144 | "colors": ["#FF512F", "#F09819"] 145 | }, 146 | { 147 | "name": "Purple Paradise", 148 | "colors": ["#1D2B64", "#F8CDDA"] 149 | }, 150 | { 151 | "name": "Stripe", 152 | "colors": ["#1FA2FF", "#12D8FA", "#A6FFCB"] 153 | }, 154 | { 155 | "name": "Sea Weed", 156 | "colors": ["#4CB8C4", "#3CD3AD"] 157 | }, 158 | { 159 | "name": "Pinky", 160 | "colors": ["#DD5E89", "#F7BB97"] 161 | }, 162 | { 163 | "name": "Cherry", 164 | "colors": ["#EB3349", "#F45C43"] 165 | }, 166 | { 167 | "name": "Mojito", 168 | "colors": ["#1D976C", "#93F9B9"] 169 | }, 170 | { 171 | "name": "Juicy Orange", 172 | "colors": ["#FF8008", "#FFC837"] 173 | }, 174 | { 175 | "name": "Mirage", 176 | "colors": ["#16222A", "#3A6073"] 177 | }, 178 | { 179 | "name": "Steel Gray", 180 | "colors": ["#1F1C2C", "#928DAB"] 181 | }, 182 | { 183 | "name": "Kashmir", 184 | "colors": ["#614385", "#516395"] 185 | }, 186 | { 187 | "name": "Electric Violet", 188 | "colors": ["#4776E6", "#8E54E9"] 189 | }, 190 | { 191 | "name": "Venice Blue", 192 | "colors": ["#085078", "#85D8CE"] 193 | }, 194 | { 195 | "name": "Bora Bora", 196 | "colors": ["#2BC0E4", "#EAECC6"] 197 | }, 198 | { 199 | "name": "Moss", 200 | "colors": ["#134E5E", "#71B280"] 201 | }, 202 | { 203 | "name": "Shroom Haze", 204 | "colors": ["#5C258D", "#4389A2"] 205 | }, 206 | { 207 | "name": "Mystic", 208 | "colors": ["#757F9A", "#D7DDE8"] 209 | }, 210 | { 211 | "name": "Midnight City", 212 | "colors": ["#232526", "#414345"] 213 | }, 214 | { 215 | "name": "Sea Blizz", 216 | "colors": ["#1CD8D2", "#93EDC7"] 217 | }, 218 | { 219 | "name": "Opa", 220 | "colors": ["#3D7EAA", "#FFE47A"] 221 | }, 222 | { 223 | "name": "Titanium", 224 | "colors": ["#283048", "#859398"] 225 | }, 226 | { 227 | "name": "Mantle", 228 | "colors": ["#24C6DC", "#514A9D"] 229 | }, 230 | { 231 | "name": "Dracula", 232 | "colors": ["#DC2424", "#4A569D"] 233 | }, 234 | { 235 | "name": "Peach", 236 | "colors": ["#ED4264", "#FFEDBC"] 237 | }, 238 | { 239 | "name": "Moonrise", 240 | "colors": ["#DAE2F8", "#D6A4A4"] 241 | }, 242 | { 243 | "name": "Clouds", 244 | "colors": ["#ECE9E6", "#FFFFFF"] 245 | }, 246 | { 247 | "name": "Stellar", 248 | "colors": ["#7474BF", "#348AC7"] 249 | }, 250 | { 251 | "name": "Bourbon", 252 | "colors": ["#EC6F66", "#F3A183"] 253 | }, 254 | { 255 | "name": "Calm Darya", 256 | "colors": ["#5f2c82", "#49a09d"] 257 | }, 258 | { 259 | "name": "Influenza", 260 | "colors": ["#C04848", "#480048"] 261 | }, 262 | { 263 | "name": "Shrimpy", 264 | "colors": ["#e43a15", "#e65245"] 265 | }, 266 | { 267 | "name": "Army", 268 | "colors": ["#414d0b", "#727a17"] 269 | }, 270 | { 271 | "name": "Miaka", 272 | "colors": ["#FC354C", "#0ABFBC"] 273 | }, 274 | { 275 | "name": "Pinot Noir", 276 | "colors": ["#4b6cb7", "#182848"] 277 | }, 278 | { 279 | "name": "Day Tripper", 280 | "colors": ["#f857a6", "#ff5858"] 281 | }, 282 | { 283 | "name": "Namn", 284 | "colors": ["#a73737", "#7a2828"] 285 | }, 286 | { 287 | "name": "Blurry Beach", 288 | "colors": ["#d53369", "#cbad6d"] 289 | }, 290 | { 291 | "name": "Vasily", 292 | "colors": ["#e9d362", "#333333"] 293 | }, 294 | { 295 | "name": "A Lost Memory", 296 | "colors": ["#DE6262", "#FFB88C"] 297 | }, 298 | { 299 | "name": "Petrichor", 300 | "colors": ["#666600", "#999966"] 301 | }, 302 | { 303 | "name": "Jonquil", 304 | "colors": ["#FFEEEE", "#DDEFBB"] 305 | }, 306 | { 307 | "name": "Sirius Tamed", 308 | "colors": ["#EFEFBB", "#D4D3DD"] 309 | }, 310 | { 311 | "name": "Kyoto", 312 | "colors": ["#c21500", "#ffc500"] 313 | }, 314 | { 315 | "name": "Misty Meadow", 316 | "colors": ["#215f00", "#e4e4d9"] 317 | }, 318 | { 319 | "name": "Aqualicious", 320 | "colors": ["#50C9C3", "#96DEDA"] 321 | }, 322 | { 323 | "name": "Moor", 324 | "colors": ["#616161", "#9bc5c3"] 325 | }, 326 | { 327 | "name": "Almost", 328 | "colors": ["#ddd6f3", "#faaca8"] 329 | }, 330 | { 331 | "name": "Forever Lost", 332 | "colors": ["#5D4157", "#A8CABA"] 333 | }, 334 | { 335 | "name": "Winter", 336 | "colors": ["#E6DADA", "#274046"] 337 | }, 338 | { 339 | "name": "Autumn", 340 | "colors": ["#DAD299", "#B0DAB9"] 341 | }, 342 | { 343 | "name": "Candy", 344 | "colors": ["#D3959B", "#BFE6BA"] 345 | }, 346 | { 347 | "name": "Reef", 348 | "colors": ["#00d2ff", "#3a7bd5"] 349 | }, 350 | { 351 | "name": "The Strain", 352 | "colors": ["#870000", "#190A05"] 353 | }, 354 | { 355 | "name": "Dirty Fog", 356 | "colors": ["#B993D6", "#8CA6DB"] 357 | }, 358 | { 359 | "name": "Earthly", 360 | "colors": ["#649173", "#DBD5A4"] 361 | }, 362 | { 363 | "name": "Virgin", 364 | "colors": ["#C9FFBF", "#FFAFBD"] 365 | }, 366 | { 367 | "name": "Ash", 368 | "colors": ["#606c88", "#3f4c6b"] 369 | }, 370 | { 371 | "name": "Shadow Night", 372 | "colors": ["#000000", "#53346D"] 373 | }, 374 | { 375 | "name": "Cherryblossoms", 376 | "colors": ["#FBD3E9", "#BB377D"] 377 | }, 378 | { 379 | "name": "Parklife", 380 | "colors": ["#ADD100", "#7B920A"] 381 | }, 382 | { 383 | "name": "Dance To Forget", 384 | "colors": ["#FF4E50", "#F9D423"] 385 | }, 386 | { 387 | "name": "Starfall", 388 | "colors": ["#F0C27B", "#4B1248"] 389 | }, 390 | { 391 | "name": "Red Mist", 392 | "colors": ["#000000", "#e74c3c"] 393 | }, 394 | { 395 | "name": "Teal Love", 396 | "colors": ["#AAFFA9", "#11FFBD"] 397 | }, 398 | { 399 | "name": "Neon Life", 400 | "colors": ["#B3FFAB", "#12FFF7"] 401 | }, 402 | { 403 | "name": "Man of Steel", 404 | "colors": ["#780206", "#061161"] 405 | }, 406 | { 407 | "name": "Amethyst", 408 | "colors": ["#9D50BB", "#6E48AA"] 409 | }, 410 | { 411 | "name": "Cheer Up Emo Kid", 412 | "colors": ["#556270", "#FF6B6B"] 413 | }, 414 | { 415 | "name": "Shore", 416 | "colors": ["#70e1f5", "#ffd194"] 417 | }, 418 | { 419 | "name": "Facebook Messenger", 420 | "colors": ["#00c6ff", "#0072ff"] 421 | }, 422 | { 423 | "name": "SoundCloud", 424 | "colors": ["#fe8c00", "#f83600"] 425 | }, 426 | { 427 | "name": "Behongo", 428 | "colors": ["#52c234", "#061700"] 429 | }, 430 | { 431 | "name": "ServQuick", 432 | "colors": ["#485563", "#29323c"] 433 | }, 434 | { 435 | "name": "Friday", 436 | "colors": ["#83a4d4", "#b6fbff"] 437 | }, 438 | { 439 | "name": "Martini", 440 | "colors": ["#FDFC47", "#24FE41"] 441 | }, 442 | { 443 | "name": "Metallic Toad", 444 | "colors": ["#abbaab", "#ffffff"] 445 | }, 446 | { 447 | "name": "Between The Clouds", 448 | "colors": ["#73C8A9", "#373B44"] 449 | }, 450 | { 451 | "name": "Crazy Orange I", 452 | "colors": ["#D38312", "#A83279"] 453 | }, 454 | { 455 | "name": "Hersheys", 456 | "colors": ["#1e130c", "#9a8478"] 457 | }, 458 | { 459 | "name": "Talking To Mice Elf", 460 | "colors": ["#948E99", "#2E1437"] 461 | }, 462 | { 463 | "name": "Purple Bliss", 464 | "colors": ["#360033", "#0b8793"] 465 | }, 466 | { 467 | "name": "Predawn", 468 | "colors": ["#FFA17F", "#00223E"] 469 | }, 470 | { 471 | "name": "Endless River", 472 | "colors": ["#43cea2", "#185a9d"] 473 | }, 474 | { 475 | "name": "Pastel Orange at the Sun", 476 | "colors": ["#ffb347", "#ffcc33"] 477 | }, 478 | { 479 | "name": "Twitch", 480 | "colors": ["#6441A5", "#2a0845"] 481 | }, 482 | { 483 | "name": "Atlas", 484 | "colors": ["#FEAC5E", "#C779D0", "#4BC0C8"] 485 | }, 486 | { 487 | "name": "Instagram", 488 | "colors": ["#833ab4", "#fd1d1d", "#fcb045"] 489 | }, 490 | { 491 | "name": "Flickr", 492 | "colors": ["#ff0084", "#33001b"] 493 | }, 494 | { 495 | "name": "Vine", 496 | "colors": ["#00bf8f", "#001510"] 497 | }, 498 | { 499 | "name": "Turquoise flow", 500 | "colors": ["#136a8a", "#267871"] 501 | }, 502 | { 503 | "name": "Portrait", 504 | "colors": ["#8e9eab", "#eef2f3"] 505 | }, 506 | { 507 | "name": "Virgin America", 508 | "colors": ["#7b4397", "#dc2430"] 509 | }, 510 | { 511 | "name": "Koko Caramel", 512 | "colors": ["#D1913C", "#FFD194"] 513 | }, 514 | { 515 | "name": "Fresh Turboscent", 516 | "colors": ["#F1F2B5", "#135058"] 517 | }, 518 | { 519 | "name": "Green to dark", 520 | "colors": ["#6A9113", "#141517"] 521 | }, 522 | { 523 | "name": "Ukraine", 524 | "colors": ["#004FF9", "#FFF94C"] 525 | }, 526 | { 527 | "name": "Curiosity blue", 528 | "colors": ["#525252", "#3d72b4"] 529 | }, 530 | { 531 | "name": "Dark Knight", 532 | "colors": ["#BA8B02", "#181818"] 533 | }, 534 | { 535 | "name": "Piglet", 536 | "colors": ["#ee9ca7", "#ffdde1"] 537 | }, 538 | { 539 | "name": "Lizard", 540 | "colors": ["#304352", "#d7d2cc"] 541 | }, 542 | { 543 | "name": "Sage Persuasion", 544 | "colors": ["#CCCCB2", "#757519"] 545 | }, 546 | { 547 | "name": "Between Night and Day", 548 | "colors": ["#2c3e50", "#3498db"] 549 | }, 550 | { 551 | "name": "Timber", 552 | "colors": ["#fc00ff", "#00dbde"] 553 | }, 554 | { 555 | "name": "Passion", 556 | "colors": ["#e53935", "#e35d5b"] 557 | }, 558 | { 559 | "name": "Clear Sky", 560 | "colors": ["#005C97", "#363795"] 561 | }, 562 | { 563 | "name": "Master Card", 564 | "colors": ["#f46b45", "#eea849"] 565 | }, 566 | { 567 | "name": "Back To Earth", 568 | "colors": ["#00C9FF", "#92FE9D"] 569 | }, 570 | { 571 | "name": "Deep Purple", 572 | "colors": ["#673AB7", "#512DA8"] 573 | }, 574 | { 575 | "name": "Little Leaf", 576 | "colors": ["#76b852", "#8DC26F"] 577 | }, 578 | { 579 | "name": "Netflix", 580 | "colors": ["#8E0E00", "#1F1C18"] 581 | }, 582 | { 583 | "name": "Light Orange", 584 | "colors": ["#FFB75E", "#ED8F03"] 585 | }, 586 | { 587 | "name": "Green and Blue", 588 | "colors": ["#c2e59c", "#64b3f4"] 589 | }, 590 | { 591 | "name": "Poncho", 592 | "colors": ["#403A3E", "#BE5869"] 593 | }, 594 | { 595 | "name": "Back to the Future", 596 | "colors": ["#C02425", "#F0CB35"] 597 | }, 598 | { 599 | "name": "Blush", 600 | "colors": ["#B24592", "#F15F79"] 601 | }, 602 | { 603 | "name": "Inbox", 604 | "colors": ["#457fca", "#5691c8"] 605 | }, 606 | { 607 | "name": "Purplin", 608 | "colors": ["#6a3093", "#a044ff"] 609 | }, 610 | { 611 | "name": "Pale Wood", 612 | "colors": ["#eacda3", "#d6ae7b"] 613 | }, 614 | { 615 | "name": "Haikus", 616 | "colors": ["#fd746c", "#ff9068"] 617 | }, 618 | { 619 | "name": "Pizelex", 620 | "colors": ["#114357", "#F29492"] 621 | }, 622 | { 623 | "name": "Joomla", 624 | "colors": ["#1e3c72", "#2a5298"] 625 | }, 626 | { 627 | "name": "Christmas", 628 | "colors": ["#2F7336", "#AA3A38"] 629 | }, 630 | { 631 | "name": "Minnesota Vikings", 632 | "colors": ["#5614B0", "#DBD65C"] 633 | }, 634 | { 635 | "name": "Miami Dolphins", 636 | "colors": ["#4DA0B0", "#D39D38"] 637 | }, 638 | { 639 | "name": "Forest", 640 | "colors": ["#5A3F37", "#2C7744"] 641 | }, 642 | { 643 | "name": "Nighthawk", 644 | "colors": ["#2980b9", "#2c3e50"] 645 | }, 646 | { 647 | "name": "Superman", 648 | "colors": ["#0099F7", "#F11712"] 649 | }, 650 | { 651 | "name": "Suzy", 652 | "colors": ["#834d9b", "#d04ed6"] 653 | }, 654 | { 655 | "name": "Dark Skies", 656 | "colors": ["#4B79A1", "#283E51"] 657 | }, 658 | { 659 | "name": "Deep Space", 660 | "colors": ["#000000", "#434343"] 661 | }, 662 | { 663 | "name": "Decent", 664 | "colors": ["#4CA1AF", "#C4E0E5"] 665 | }, 666 | { 667 | "name": "Colors Of Sky", 668 | "colors": ["#E0EAFC", "#CFDEF3"] 669 | }, 670 | { 671 | "name": "Purple White", 672 | "colors": ["#BA5370", "#F4E2D8"] 673 | }, 674 | { 675 | "name": "Ali", 676 | "colors": ["#ff4b1f", "#1fddff"] 677 | }, 678 | { 679 | "name": "Alihossein", 680 | "colors": ["#f7ff00", "#db36a4"] 681 | }, 682 | { 683 | "name": "Shahabi", 684 | "colors": ["#a80077", "#66ff00"] 685 | }, 686 | { 687 | "name": "Red Ocean", 688 | "colors": ["#1D4350", "#A43931"] 689 | }, 690 | { 691 | "name": "Tranquil", 692 | "colors": ["#EECDA3", "#EF629F"] 693 | }, 694 | { 695 | "name": "Transfile", 696 | "colors": ["#16BFFD", "#CB3066"] 697 | }, 698 | 699 | { 700 | "name": "Sylvia", 701 | "colors": ["#ff4b1f", "#ff9068"] 702 | }, 703 | { 704 | "name": "Sweet Morning", 705 | "colors": ["#FF5F6D", "#FFC371"] 706 | }, 707 | { 708 | "name": "Politics", 709 | "colors": ["#2196f3", "#f44336"] 710 | }, 711 | { 712 | "name": "Bright Vault", 713 | "colors": ["#00d2ff", "#928DAB"] 714 | }, 715 | { 716 | "name": "Solid Vault", 717 | "colors": ["#3a7bd5", "#3a6073"] 718 | }, 719 | { 720 | "name": "Sunset", 721 | "colors": ["#0B486B", "#F56217"] 722 | }, 723 | { 724 | "name": "Grapefruit Sunset", 725 | "colors": ["#e96443", "#904e95"] 726 | }, 727 | { 728 | "name": "Deep Sea Space", 729 | "colors": ["#2C3E50", "#4CA1AF"] 730 | }, 731 | { 732 | "name": "Dusk", 733 | "colors": ["#2C3E50", "#FD746C"] 734 | }, 735 | { 736 | "name": "Minimal Red", 737 | "colors": ["#F00000", "#DC281E"] 738 | }, 739 | { 740 | "name": "Royal", 741 | "colors": ["#141E30", "#243B55"] 742 | }, 743 | { 744 | "name": "Mauve", 745 | "colors": ["#42275a", "#734b6d"] 746 | }, 747 | { 748 | "name": "Frost", 749 | "colors": ["#000428", "#004e92"] 750 | }, 751 | { 752 | "name": "Lush", 753 | "colors": ["#56ab2f", "#a8e063"] 754 | }, 755 | { 756 | "name": "Firewatch", 757 | "colors": ["#cb2d3e", "#ef473a"] 758 | }, 759 | { 760 | "name": "Sherbert", 761 | "colors": ["#f79d00", "#64f38c"] 762 | }, 763 | { 764 | "name": "Blood Red", 765 | "colors": ["#f85032", "#e73827"] 766 | }, 767 | { 768 | "name": "Sun on the Horizon", 769 | "colors": ["#fceabb", "#f8b500"] 770 | }, 771 | { 772 | "name": "IIIT Delhi", 773 | "colors": ["#808080", "#3fada8"] 774 | }, 775 | { 776 | "name": "Dusk", 777 | "colors": ["#ffd89b", "#19547b"] 778 | }, 779 | { 780 | "name": "50 Shades of Grey", 781 | "colors": ["#bdc3c7", "#2c3e50"] 782 | }, 783 | { 784 | "name": "Dania", 785 | "colors": ["#BE93C5", "#7BC6CC"] 786 | }, 787 | { 788 | "name": "Limeade", 789 | "colors": ["#A1FFCE", "#FAFFD1"] 790 | }, 791 | { 792 | "name": "Disco", 793 | "colors": ["#4ECDC4", "#556270"] 794 | }, 795 | { 796 | "name": "Love Couple", 797 | "colors": ["#3a6186", "#89253e"] 798 | }, 799 | { 800 | "name": "Azure Pop", 801 | "colors": ["#ef32d9", "#89fffd"] 802 | }, 803 | { 804 | "name": "Nepal", 805 | "colors": ["#de6161", "#2657eb"] 806 | }, 807 | { 808 | "name": "Cosmic Fusion", 809 | "colors": ["#ff00cc", "#333399"] 810 | }, 811 | { 812 | "name": "Snapchat", 813 | "colors": ["#fffc00", "#ffffff"] 814 | }, 815 | { 816 | "name": "Ed's Sunset Gradient", 817 | "colors": ["#ff7e5f", "#feb47b"] 818 | }, 819 | { 820 | "name": "Brady Brady Fun Fun", 821 | "colors": ["#00c3ff", "#ffff1c"] 822 | }, 823 | { 824 | "name": "Black Rosé", 825 | "colors": ["#f4c4f3", "#fc67fa"] 826 | }, 827 | { 828 | "name": "80's Purple", 829 | "colors": ["#41295a", "#2F0743"] 830 | }, 831 | { 832 | "name": "Radar", 833 | "colors": ["#A770EF", "#CF8BF3", "#FDB99B"] 834 | }, 835 | { 836 | "name": "Ibiza Sunset", 837 | "colors": ["#ee0979", "#ff6a00"] 838 | }, 839 | { 840 | "name": "Dawn", 841 | "colors": ["#F3904F", "#3B4371"] 842 | }, 843 | { 844 | "name": "Mild", 845 | "colors": ["#67B26F", "#4ca2cd"] 846 | }, 847 | { 848 | 849 | "name": "Vice City", 850 | "colors": ["#3494E6", "#EC6EAD"] 851 | }, 852 | { 853 | "name": "Jaipur", 854 | "colors": ["#DBE6F6", "#C5796D"] 855 | 856 | }, 857 | { 858 | "name": "Jodhpur", 859 | "colors": ["#9CECFB", "#65C7F7", "#0052D4"] 860 | 861 | }, 862 | { 863 | "name": "Cocoaa Ice", 864 | "colors": ["#c0c0aa", "#1cefff"] 865 | }, 866 | { 867 | "name": "EasyMed", 868 | "colors": ["#DCE35B", "#45B649"] 869 | }, 870 | { 871 | "name": "Rose Colored Lenses", 872 | "colors": ["#E8CBC0", "#636FA4"] 873 | }, 874 | { 875 | "name": "What lies Beyond", 876 | "colors": ["#F0F2F0", "#000C40"] 877 | }, 878 | { 879 | "name": "Roseanna", 880 | "colors": ["#FFAFBD", "#ffc3a0"] 881 | }, 882 | { 883 | "name": "Honey Dew", 884 | "colors": ["#43C6AC", "#F8FFAE"] 885 | }, 886 | { 887 | "name": "Under the Lake", 888 | "colors": ["#093028", "#237A57"] 889 | }, 890 | { 891 | "name": "The Blue Lagoon", 892 | "colors": ["#43C6AC", "#191654"] 893 | }, 894 | { 895 | "name": "Can You Feel The Love Tonight", 896 | "colors": ["#4568DC", "#B06AB3"] 897 | }, 898 | { 899 | "name": "Very Blue", 900 | "colors": ["#0575E6", "#021B79"] 901 | }, 902 | { 903 | "name": "Love and Liberty", 904 | "colors": ["#200122", "#6f0000"] 905 | }, 906 | { 907 | "name": "Orca", 908 | "colors": ["#44A08D", "#093637"] 909 | }, 910 | { 911 | "name": "Venice", 912 | "colors": ["#6190E8", "#A7BFE8"] 913 | }, 914 | { 915 | "name": "Pacific Dream", 916 | "colors": ["#34e89e", "#0f3443"] 917 | }, 918 | { 919 | "name": "Learning and Leading", 920 | "colors": ["#F7971E", "#FFD200"] 921 | }, 922 | { 923 | "name": "Celestial", 924 | "colors": ["#C33764", "#1D2671"] 925 | }, 926 | { 927 | "name": "Purplepine", 928 | "colors": ["#20002c", "#cbb4d4"] 929 | }, 930 | { 931 | "name": "Sha la la", 932 | "colors": ["#D66D75", "#E29587"] 933 | }, 934 | { 935 | "name": "Mini", 936 | "colors": ["#30E8BF", "#FF8235"] 937 | }, 938 | { 939 | "name": "Maldives", 940 | "colors": ["#B2FEFA", "#0ED2F7"] 941 | }, 942 | { 943 | "name": "Cinnamint", 944 | "colors": ["#4AC29A", "#BDFFF3"] 945 | }, 946 | { 947 | "name": "Html", 948 | "colors": ["#E44D26", "#F16529"] 949 | }, 950 | { 951 | "name": "Coal", 952 | "colors": ["#EB5757", "#000000"] 953 | }, 954 | { 955 | "name": "Sunkist", 956 | "colors": ["#F2994A", "#F2C94C"] 957 | }, 958 | { 959 | "name": "Blue Skies", 960 | "colors": ["#56CCF2", "#2F80ED"] 961 | }, 962 | { 963 | "name": "Chitty Chitty Bang Bang", 964 | "colors": ["#007991", "#78ffd6"] 965 | }, 966 | { 967 | "name": "Visions of Grandeur", 968 | "colors": ["#000046", "#1CB5E0"] 969 | }, 970 | { 971 | "name": "Crystal Clear", 972 | "colors": ["#159957", "#155799"] 973 | }, 974 | { 975 | "name": "Mello", 976 | "colors": ["#c0392b", "#8e44ad"] 977 | }, 978 | { 979 | "name": "Compare Now", 980 | "colors": ["#EF3B36", "#FFFFFF"] 981 | }, 982 | { 983 | "name": "Meridian", 984 | "colors": ["#283c86", "#45a247"] 985 | }, 986 | { 987 | "name": "Relay", 988 | "colors": ["#3A1C71", "#D76D77", "#FFAF7B"] 989 | }, 990 | { 991 | "name": "Alive", 992 | "colors": ["#CB356B", "#BD3F32"] 993 | }, 994 | { 995 | "name": "Scooter", 996 | "colors": ["#36D1DC", "#5B86E5"] 997 | }, 998 | { 999 | "name": "Terminal", 1000 | "colors": ["#000000", "#0f9b0f"] 1001 | }, 1002 | { 1003 | "name": "Telegram", 1004 | "colors": ["#1c92d2", "#f2fcfe"] 1005 | }, 1006 | { 1007 | "name": "Crimson Tide", 1008 | "colors": ["#642B73", "#C6426E"] 1009 | }, 1010 | { 1011 | "name": "Socialive", 1012 | "colors": ["#06beb6", "#48b1bf"] 1013 | }, 1014 | { 1015 | "name": "Subu", 1016 | "colors": ["#0cebeb", "#20e3b2", "#29ffc6"] 1017 | }, 1018 | { 1019 | "name": "Shift", 1020 | "colors": ["#000000", "#E5008D", "#FF070B"] 1021 | }, 1022 | { 1023 | "name": "Clot", 1024 | "colors": ["#070000", "#4C0001", "#070000"] 1025 | }, 1026 | { 1027 | "name": "Broken Hearts", 1028 | "colors": ["#d9a7c7", "#fffcdc"] 1029 | }, 1030 | { 1031 | "name": "Kimoby Is The New Blue", 1032 | "colors": ["#396afc", "#2948ff"] 1033 | }, 1034 | { 1035 | "name": "Dull", 1036 | "colors": ["#C9D6FF", "#E2E2E2"] 1037 | }, 1038 | { 1039 | "name": "Purpink", 1040 | "colors": ["#7F00FF", "#E100FF"] 1041 | }, 1042 | { 1043 | "name": "Orange Coral", 1044 | "colors": ["#ff9966", "#ff5e62"] 1045 | }, 1046 | { 1047 | "name": "Summer", 1048 | "colors": ["#22c1c3", "#fdbb2d"] 1049 | }, 1050 | { 1051 | "name": "King Yna", 1052 | "colors": ["#1a2a6c", "#b21f1f", "#fdbb2d"] 1053 | }, 1054 | { 1055 | "name": "Velvet Sun", 1056 | "colors": ["#e1eec3", "#f05053"] 1057 | }, 1058 | { 1059 | "name": "Zinc", 1060 | "colors": ["#ADA996", "#F2F2F2", "#DBDBDB", "#EAEAEA"] 1061 | }, 1062 | { 1063 | "name": "Hydrogen", 1064 | "colors": ["#667db6", "#0082c8", "#0082c8", "#667db6"] 1065 | }, 1066 | { 1067 | "name": "Argon", 1068 | "colors": ["#03001e", "#7303c0", "#ec38bc", "#fdeff9"] 1069 | }, 1070 | { 1071 | "name": "Lithium", 1072 | "colors": ["#6D6027", "#D3CBB8"] 1073 | }, 1074 | { 1075 | "name": "Digital Water", 1076 | "colors": ["#74ebd5","#ACB6E5"] 1077 | }, 1078 | { 1079 | "name": "Velvet Sun", 1080 | "colors": ["#e1eec3", "#f05053"] 1081 | }, 1082 | { 1083 | "name": "Orange Fun", 1084 | "colors": ["#fc4a1a", "#f7b733"] 1085 | }, 1086 | { 1087 | "name": "Rainbow Blue", 1088 | "colors": ["#00F260", "#0575E6"] 1089 | }, 1090 | { 1091 | "name": "Pink Flavour", 1092 | "colors": ["#800080", "#ffc0cb"] 1093 | }, 1094 | { 1095 | "name": "Sulphur", 1096 | "colors": ["#CAC531", "#F3F9A7"] 1097 | }, 1098 | { 1099 | "name": "Selenium", 1100 | "colors": ["#3C3B3F", "#605C3C"] 1101 | }, 1102 | { 1103 | "name": "Delicate", 1104 | "colors": ["#D3CCE3", "#E9E4F0"] 1105 | }, 1106 | { 1107 | 1108 | "name": "Ohhappiness", 1109 | "colors": ["#00b09b", "#96c93d"] 1110 | }, 1111 | { 1112 | "name": "Lawrencium", 1113 | "colors": ["#0f0c29", "#302b63", "#24243e"] 1114 | }, 1115 | { 1116 | "name": "Relaxing red", 1117 | "colors": ["#fffbd5", "#b20a2c"] 1118 | }, 1119 | { 1120 | "name": "Taran Tado", 1121 | "colors": ["#23074d", "#cc5333"] 1122 | }, 1123 | { 1124 | "name": "Bighead", 1125 | "colors": ["#c94b4b", "#4b134f"] 1126 | }, 1127 | { 1128 | "name": "Sublime Vivid", 1129 | "colors": ["#FC466B", "#3F5EFB"] 1130 | }, 1131 | { 1132 | "name": "Sublime Light", 1133 | "colors": ["#FC5C7D", "#6A82FB"] 1134 | }, 1135 | { 1136 | "name": "Pun Yeta", 1137 | "colors": ["#108dc7", "#ef8e38"] 1138 | }, 1139 | { 1140 | "name": "Quepal", 1141 | "colors": ["#11998e", "#38ef7d"] 1142 | }, 1143 | { 1144 | "name": "Sand to Blue", 1145 | "colors": ["#3E5151", "#DECBA4"] 1146 | }, 1147 | { 1148 | "name": "Wedding Day Blues", 1149 | "colors": ["#40E0D0", "#FF8C00", "#FF0080"] 1150 | }, 1151 | { 1152 | "name": "Shifter", 1153 | "colors": ["#bc4e9c", "#f80759"] 1154 | }, 1155 | { 1156 | "name": "Red Sunset", 1157 | "colors": ["#355C7D", "#6C5B7B", "#C06C84"] 1158 | }, 1159 | { 1160 | "name": "Moon Purple", 1161 | "colors": ["#4e54c8", "#8f94fb"] 1162 | }, 1163 | { 1164 | "name": "Pure Lust", 1165 | "colors": ["#333333", "#dd1818"] 1166 | }, 1167 | { 1168 | "name": "Slight Ocean View", 1169 | "colors": ["#a8c0ff", "#3f2b96"] 1170 | }, 1171 | { 1172 | "name": "eXpresso", 1173 | "colors": ["#ad5389", "#3c1053"] 1174 | }, 1175 | { 1176 | "name": "Shifty", 1177 | "colors": ["#636363", "#a2ab58"] 1178 | }, 1179 | { 1180 | "name": "Vanusa", 1181 | "colors": ["#DA4453", "#89216B"] 1182 | }, 1183 | { 1184 | "name": "Evening Night", 1185 | "colors": ["#005AA7", "#FFFDE4"] 1186 | } 1187 | ] 1188 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx1536m 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatRG/WallApp/ee5948b4a61b763b7838c890e0c70ae88019b172/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Thu Jan 31 03:18:05 IST 2019 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip 7 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 10 | DEFAULT_JVM_OPTS="" 11 | 12 | APP_NAME="Gradle" 13 | APP_BASE_NAME=`basename "$0"` 14 | 15 | # Use the maximum available, or set MAX_FD != -1 to use that value. 16 | MAX_FD="maximum" 17 | 18 | warn ( ) { 19 | echo "$*" 20 | } 21 | 22 | die ( ) { 23 | echo 24 | echo "$*" 25 | echo 26 | exit 1 27 | } 28 | 29 | # OS specific support (must be 'true' or 'false'). 30 | cygwin=false 31 | msys=false 32 | darwin=false 33 | case "`uname`" in 34 | CYGWIN* ) 35 | cygwin=true 36 | ;; 37 | Darwin* ) 38 | darwin=true 39 | ;; 40 | MINGW* ) 41 | msys=true 42 | ;; 43 | esac 44 | 45 | # Attempt to set APP_HOME 46 | # Resolve links: $0 may be a link 47 | PRG="$0" 48 | # Need this for relative symlinks. 49 | while [ -h "$PRG" ] ; do 50 | ls=`ls -ld "$PRG"` 51 | link=`expr "$ls" : '.*-> \(.*\)$'` 52 | if expr "$link" : '/.*' > /dev/null; then 53 | PRG="$link" 54 | else 55 | PRG=`dirname "$PRG"`"/$link" 56 | fi 57 | done 58 | SAVED="`pwd`" 59 | cd "`dirname \"$PRG\"`/" >/dev/null 60 | APP_HOME="`pwd -P`" 61 | cd "$SAVED" >/dev/null 62 | 63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 64 | 65 | # Determine the Java command to use to start the JVM. 66 | if [ -n "$JAVA_HOME" ] ; then 67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 68 | # IBM's JDK on AIX uses strange locations for the executables 69 | JAVACMD="$JAVA_HOME/jre/sh/java" 70 | else 71 | JAVACMD="$JAVA_HOME/bin/java" 72 | fi 73 | if [ ! -x "$JAVACMD" ] ; then 74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 75 | 76 | Please set the JAVA_HOME variable in your environment to match the 77 | location of your Java installation." 78 | fi 79 | else 80 | JAVACMD="java" 81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 82 | 83 | Please set the JAVA_HOME variable in your environment to match the 84 | location of your Java installation." 85 | fi 86 | 87 | # Increase the maximum file descriptors if we can. 88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then 89 | MAX_FD_LIMIT=`ulimit -H -n` 90 | if [ $? -eq 0 ] ; then 91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 92 | MAX_FD="$MAX_FD_LIMIT" 93 | fi 94 | ulimit -n $MAX_FD 95 | if [ $? -ne 0 ] ; then 96 | warn "Could not set maximum file descriptor limit: $MAX_FD" 97 | fi 98 | else 99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 100 | fi 101 | fi 102 | 103 | # For Darwin, add options to specify how the application appears in the dock 104 | if $darwin; then 105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 106 | fi 107 | 108 | # For Cygwin, switch paths to Windows format before running java 109 | if $cygwin ; then 110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 112 | JAVACMD=`cygpath --unix "$JAVACMD"` 113 | 114 | # We build the pattern for arguments to be converted via cygpath 115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 116 | SEP="" 117 | for dir in $ROOTDIRSRAW ; do 118 | ROOTDIRS="$ROOTDIRS$SEP$dir" 119 | SEP="|" 120 | done 121 | OURCYGPATTERN="(^($ROOTDIRS))" 122 | # Add a user-defined pattern to the cygpath arguments 123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 125 | fi 126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 127 | i=0 128 | for arg in "$@" ; do 129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 131 | 132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 134 | else 135 | eval `echo args$i`="\"$arg\"" 136 | fi 137 | i=$((i+1)) 138 | done 139 | case $i in 140 | (0) set -- ;; 141 | (1) set -- "$args0" ;; 142 | (2) set -- "$args0" "$args1" ;; 143 | (3) set -- "$args0" "$args1" "$args2" ;; 144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 150 | esac 151 | fi 152 | 153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules 154 | function splitJvmOpts() { 155 | JVM_OPTS=("$@") 156 | } 157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS 158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" 159 | 160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" 161 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /release/WallApp_v161.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatRG/WallApp/ee5948b4a61b763b7838c890e0c70ae88019b172/release/WallApp_v161.apk -------------------------------------------------------------------------------- /release/WallApp_v164.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatRG/WallApp/ee5948b4a61b763b7838c890e0c70ae88019b172/release/WallApp_v164.apk -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | --------------------------------------------------------------------------------