commit a5e90bbdb1066388f9f5acc74abc5b7e059c4709 Author: litingting Date: Tue Sep 9 13:50:16 2025 +0800 V1.0(1) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/DynamicCartoonWallpaper.jks b/app/DynamicCartoonWallpaper.jks new file mode 100644 index 0000000..dd74dd7 Binary files /dev/null and b/app/DynamicCartoonWallpaper.jks differ diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..d9c9ec5 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,79 @@ +import java.util.Date +import java.text.SimpleDateFormat +val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date()) +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) + id ("kotlin-parcelize") + id("io.objectbox") +} + +android { + namespace = "com.video.mobile.wallpaper" + compileSdk = 35 + + defaultConfig { + applicationId = "com.video.mobile.wallpaper" + minSdk = 24 + targetSdk = 35 + versionCode = 1 + versionName = "1.0" + setProperty( + "archivesBaseName", + "Dynamic Cartoon Wallpaper_V" + versionName + "(${versionCode})_$timestamp" + ) + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = true + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + kotlinOptions { + jvmTarget = "11" + } + buildFeatures{ + viewBinding = true + buildConfig = true + } +} + +dependencies { + + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.appcompat) + implementation(libs.material) + implementation(libs.androidx.activity) + implementation(libs.androidx.constraintlayout) + testImplementation(libs.junit) + androidTestImplementation(libs.androidx.junit) + androidTestImplementation(libs.androidx.espresso.core) + + + implementation ("androidx.paging:paging-runtime-ktx:3.3.6") + + implementation ("com.google.code.gson:gson:2.12.1") + implementation("com.github.bumptech.glide:glide:4.16.0") + + // ViewModel + LiveData KTX +// implementation ("androidx.lifecycle:lifecycle-viewmodel-ktx:2.9.2") +// implementation ("androidx.lifecycle:lifecycle-livedata-ktx:2.9.2") + // Fragment KTX(提供 viewModels 扩展) + implementation ("androidx.fragment:fragment-ktx:1.8.9") + + implementation("androidx.media3:media3-exoplayer:1.8.0") + implementation ("androidx.media3:media3-ui:1.8.0") + + implementation("com.squareup.retrofit2:retrofit:2.9.0") + implementation("com.squareup.retrofit2:adapter-rxjava2:2.9.0") + implementation("com.squareup.okhttp3:logging-interceptor:4.12.0") +} \ No newline at end of file diff --git a/app/objectbox-models/default.json b/app/objectbox-models/default.json new file mode 100644 index 0000000..1a472c2 --- /dev/null +++ b/app/objectbox-models/default.json @@ -0,0 +1,116 @@ +{ + "_note1": "KEEP THIS FILE! Check it into a version control system (VCS) like git.", + "_note2": "ObjectBox manages crucial IDs for your object model. See docs for details.", + "_note3": "If you have VCS merge conflicts, you must resolve them according to ObjectBox docs.", + "entities": [ + { + "id": "1:5861365936442707683", + "lastPropertyId": "6:8474641495170349359", + "name": "LikeWallpaper", + "properties": [ + { + "id": "1:1896367441224580523", + "name": "objectId", + "type": 6, + "flags": 1 + }, + { + "id": "2:518404838438816658", + "name": "description", + "type": 9 + }, + { + "id": "3:8610300359262444087", + "name": "id", + "type": 6 + }, + { + "id": "4:1799690089661510919", + "name": "image", + "type": 9 + }, + { + "id": "5:3735709230659931937", + "name": "wallpapertype", + "type": 6 + }, + { + "id": "6:8474641495170349359", + "name": "thumbnail", + "type": 9 + } + ], + "relations": [] + }, + { + "id": "2:7214743200838441355", + "lastPropertyId": "10:5928432456802213941", + "name": "VideoWallpaper", + "properties": [ + { + "id": "1:8404628459774998577", + "name": "objectId", + "type": 6, + "flags": 1 + }, + { + "id": "2:2199034792582915578", + "name": "category", + "type": 9 + }, + { + "id": "3:8906378192469633251", + "name": "description", + "type": 9 + }, + { + "id": "4:4298057389705852700", + "name": "downloads", + "type": 9 + }, + { + "id": "5:5956110026349494870", + "name": "id", + "type": 6 + }, + { + "id": "6:6267621209200928594", + "name": "image", + "type": 9 + }, + { + "id": "7:8054649528453649863", + "name": "pro", + "type": 5 + }, + { + "id": "8:6813789647380825500", + "name": "resolution", + "type": 9 + }, + { + "id": "9:3370332525900065977", + "name": "thumbnail", + "type": 9 + }, + { + "id": "10:5928432456802213941", + "name": "wallpapertype", + "type": 6 + } + ], + "relations": [] + } + ], + "lastEntityId": "2:7214743200838441355", + "lastIndexId": "0:0", + "lastRelationId": "0:0", + "lastSequenceId": "0:0", + "modelVersion": 5, + "modelVersionParserMinimum": 5, + "retiredEntityUids": [], + "retiredIndexUids": [], + "retiredPropertyUids": [], + "retiredRelationUids": [], + "version": 1 +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..a977834 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,194 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile + + +# 保持 Gson 和 TypeToken 不被混淆 +-keep class com.google.gson.** { *; } +-keep class com.google.gson.reflect.TypeToken { *; } + +# 保留与泛型相关的 TypeToken 使用,避免泛型信息丢失 +-keep class * extends com.google.gson.reflect.TypeToken { *; } + + + +# 保持 Gson 序列化相关的字段不被混淆 +-keepclassmembers class * { + @com.google.gson.annotations.SerializedName ; +} + +# 保持 Gson 构造方法不被混淆 +-keepclassmembers class com.google.gson.Gson { + public (...); +} + + +#-------------------------Gson +# Gson 反射需要保留字段名 +-keep class com.google.gson.stream.** { *; } +-keepattributes Signature +-keepattributes *Annotation* + +# 保留实体类字段(根据需要,你可以只针对自己的 model 包) +-keepclassmembers class com.video.mobile.wallpaper.database.VideoWallpaper { + ; +} +#-------------------------Gson + + + + +#-------------------------Serializable +-keepclassmembers class * implements java.io.Serializable { + static final long serialVersionUID; + private static final java.io.ObjectStreamField[] serialPersistentFields; + private void writeObject(java.io.ObjectOutputStream); + private void readObject(java.io.ObjectInputStream); + java.lang.Object writeReplace(); + java.lang.Object readResolve(); +} + +-keep class com.video.mobile.wallpaper.database.VideoWallpaper implements java.io.Serializable { *; } +-keep class com.video.mobile.wallpaper.database.LikeWallpaper implements java.io.Serializable { *; } + +#-------------------------Serializable + + +#-------------------------Glide +# Glide v4 混淆规则 +-keep public class * implements com.bumptech.glide.module.GlideModule +-keep public class * extends com.bumptech.glide.AppGlideModule +-keep class com.bumptech.glide.GeneratedAppGlideModuleImpl { *; } +-keep public enum com.bumptech.glide.load.ImageHeaderParser$** { **[] $VALUES; public *; } + +#-------------------------Glide + + + + +# Retrofit +-dontwarn retrofit2.** +-keep class retrofit2.** { *; } +-keepattributes Signature +-keepattributes Exceptions + +# OkHttp +-dontwarn okhttp3.** +-keep class okhttp3.** { *; } + +# RxJava(如果用 RxJava2) +-dontwarn io.reactivex.** + + +-keep class androidx.media3.** { *; } +-dontwarn androidx.media3.** + + + + +# 保留 Retrofit 接口 +-keep interface com.video.mobile.wallpaper.network.VideoApi { *; } +-keep class com.video.mobile.wallpaper.database.LikeWallpaper { *; } +-keep class com.video.mobile.wallpaper.database.VideoWallpaper { *; } + + +# 保留 Retrofit 的所有类 +-keep class retrofit2.** { *; } + +# 保留 RxJava2 的所有类 +-keep class io.reactivex.** { *; } + +# 保留 CallAdapter 和 Converter 相关类 +-keep class retrofit2.adapter.** { *; } +-keep class retrofit2.converter.** { *; } + +# 保留类型 Token、类型适配器等相关类 +-keepclassmembers class * { + @retrofit2.http.* ; +} + +# 保留 Retrofit 和 OkHttp 的类和构造方法 +-keep class retrofit2.** { *; } +-keep class okhttp3.** { *; } + +# 保留 Retrofit 接口和方法 +-keep class retrofit2.Retrofit { *; } +-keep class retrofit2.Call { *; } +-keep class retrofit2.http.** { *; } + +# 保留所有使用 Retrofit 注解的字段、方法和类 +-keepclassmembers class * { + @retrofit2.http.* ; +} + +# 保留 Converter 和 CallAdapter 相关类 +-keep class retrofit2.converter.** { *; } +-keep class retrofit2.adapter.** { *; } + +# 保留 `@GET`, `@POST` 等注解 +-keepclassmembers class * { + @retrofit2.http.GET ; + @retrofit2.http.POST ; + @retrofit2.http.PUT ; + @retrofit2.http.DELETE ; + @retrofit2.http.PATCH ; + @retrofit2.http.Headers ; + @retrofit2.http.Query ; + @retrofit2.http.Body ; + @retrofit2.http.Path ; +} + +# 保留 OkHttp 相关类 +-keep class okhttp3.Request { *; } +-keep class okhttp3.Response { *; } +-keep class okhttp3.OkHttpClient { *; } + +# 保留 OkHttp 相关的拦截器 +-keep class okhttp3.Interceptor { *; } +-keep class okhttp3.logging.HttpLoggingInterceptor { *; } + +# 保留 OkHttp 的构造方法 +-keepclassmembers class okhttp3.** { + public (...); +} + +# 保留 OkHttpClient 的链式构建方式 +-keepclassmembers class okhttp3.OkHttpClient { + public okhttp3.OkHttpClient$Builder newBuilder(...); +} + +# 保留 HttpLoggingInterceptor 相关类 +-keep class okhttp3.logging.HttpLoggingInterceptor { *; } + +# 保留 Call 和 Request 方法 +-keepclassmembers class okhttp3.Call { + public *; +} +-keepclassmembers class okhttp3.Request { + public *; +} +-keepclassmembers class okhttp3.Response { + public *; +} + + + + diff --git a/app/src/androidTest/java/com/video/mobile/wallpaper/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/video/mobile/wallpaper/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..ad99f52 --- /dev/null +++ b/app/src/androidTest/java/com/video/mobile/wallpaper/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.video.mobile.wallpaper + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.video.mobile.wallpaper", appContext.packageName) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..7d05d32 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/Explore.json b/app/src/main/assets/Explore.json new file mode 100644 index 0000000..42f7f7b --- /dev/null +++ b/app/src/main/assets/Explore.json @@ -0,0 +1,4832 @@ +[ + { + "category": "Pattern", + "description": "Tick Tock ⏰", + "downloads": "10522", + "id": 189, + "image": "EX9qN2Sp", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1650692865-ballpattern.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Where am I 🕵🏻‍♀️", + "downloads": "5186", + "id": 188, + "image": "VjDfLBgT", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1650437848-bushsub.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "Never ending triangles 📐", + "downloads": "10538", + "id": 187, + "image": "ViDSUzfG", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1650437837-foldingtriangle.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Hexagonal waves ⚡", + "downloads": "24948", + "id": 186, + "image": "mVsNlo9a", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1650263214-hex0001-0300.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Home sweet home 🌎", + "downloads": "65003", + "id": 185, + "image": "SXkQLevp", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1650263209-solarsystem30.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "I remember every night 🌙", + "downloads": "43685", + "id": 184, + "image": "ZckCjNdM", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1650005692-circlingstartrail.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Chill 🥤", + "downloads": "5713", + "id": 183, + "image": "LXi2ztvh", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1650005674-chill.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "The dead shall raise 💀", + "downloads": "26938", + "id": 326, + "image": "YBsEl3bd", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1666766418-walkingskeleton.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Eat drink and be scary 🎃", + "downloads": "21949", + "id": 324, + "image": "UXmzNlDI", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1666457699-cementry330.png", + "wallpapertype": 3 + }, + { + "category": "Dope", + "description": "Wormhole 🚀", + "downloads": "19846", + "id": 323, + "image": "g3SMjGI8", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1666357791-looper51.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "✖️⭕", + "downloads": "20094", + "id": 321, + "image": "kfISWXG6", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1666073451-glitchface.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Love for RGB ⌨️", + "downloads": "39426", + "id": 320, + "image": "5ZVq6Prd", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1665764837-keys50.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Travel through time ⏳", + "downloads": "23381", + "id": 319, + "image": "lzmt7owB", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1665764832-rgbfinal.png", + "wallpapertype": 3 + }, + { + "category": "Dope", + "description": "Are we in a simulation 🤔", + "downloads": "9950", + "id": 318, + "image": "FQNd2aKp", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1665474502-cybercity.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Splitting halves ⚛️", + "downloads": "3033", + "id": 317, + "image": "FxKsChSA", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1665474490-toggle3.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Countryside 🏕", + "downloads": "22600", + "id": 306, + "image": "Pl1uckY0", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1665245461-nightgrass1.png", + "wallpapertype": 3 + }, + { + "category": "Material", + "description": "Trying to expand 🤔", + "downloads": "8120", + "id": 305, + "image": "e8p9NE2q", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1665245449-criclebreathe.png", + "wallpapertype": 3 + }, + { + "category": "Anime", + "description": "Any technique is worthless before my eyes ⚔️", + "downloads": "113532", + "id": 303, + "image": "o8O5Zjg9", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1664871083-itachiuchiha2.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Stretch some candy 🍬", + "downloads": "16610", + "id": 302, + "image": "QqugVMzt", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1664871075-candy.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Air drops 🪂", + "downloads": "22613", + "id": 301, + "image": "Bdq0uYwg", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1664526005-forestairdrop.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Gamers paradise 🎮", + "downloads": "67120", + "id": 169, + "image": "ZNIgCsTj", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1648711035-pssyarray0.png", + "wallpapertype": 3 + }, + { + "category": "Material", + "description": "Excited cards 🧡", + "downloads": "11782", + "id": 168, + "image": "bN0WaRht", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1648711023-recarray.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Runaway lines 😉", + "downloads": "9402", + "id": 167, + "image": "GLZf5btI", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1648617302-squareill.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Where trekking ends ⛺", + "downloads": "18369", + "id": 166, + "image": "TslXeryf", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1648617295-vectorcamp.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Escaping the chores of life🧳", + "downloads": "72644", + "id": 165, + "image": "1b9Enzr8", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1648446795-van0001-0250.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Recording the life 📼", + "downloads": "38594", + "id": 204, + "image": "fwPayG3u", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1652165587-record1.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Incursion 😉", + "downloads": "12058", + "id": 203, + "image": "5mMz2Xae", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1652165583-frames.png", + "wallpapertype": 3 + }, + { + "category": "Cityscape", + "description": "Riding the town 🚙", + "downloads": "32298", + "id": 202, + "image": "t7c0Vnr9", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1652009046-town.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Break the rules 🤭", + "downloads": "39315", + "id": 201, + "image": "4k7pbWnN", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1652009042-inteldino.png", + "wallpapertype": 3 + }, + { + "category": "Material", + "description": "Mountain of cards ⛰️", + "downloads": "21303", + "id": 200, + "image": "1OUHBt0A", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1651642619-mount.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Juicy Pine 🍍", + "downloads": "16425", + "id": 199, + "image": "uVXhD8zU", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1651642615-pineapple.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Warm beginning 🌄", + "downloads": "54617", + "id": 198, + "image": "6M4yxFB2", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1651467020-birdsflying.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Ripples ⭕", + "downloads": "62834", + "id": 197, + "image": "xtrPQmnY", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1651467012-drops.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Wriggly cosmos 🖤", + "downloads": "13123", + "id": 41, + "image": "xNFSWdyz", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642490906-dark hole0001-0240.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Swing with the lamp 🛋️", + "downloads": "11339", + "id": 40, + "image": "I0GAalQN", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1642488646-hanging light.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Mood for a rain 🌧️", + "downloads": "30615", + "id": 39, + "image": "Zs3BCXJl", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642486515-rain.png", + "wallpapertype": 3 + }, + { + "category": "Typography", + "description": "Think Big 💡", + "downloads": "9340", + "id": 38, + "image": "eOcINzdF", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642486479-think big.png", + "wallpapertype": 3 + }, + { + "category": "Anime", + "description": "The Saiyan Prince 🔥", + "downloads": "21458", + "id": 37, + "image": "ayb6ospZ", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642486467-vegeta.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Christmas eve ☃️", + "downloads": "18453", + "id": 36, + "image": "qO5rKNj9", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642486448-snow fall.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Play with dino 🦕", + "downloads": "5122", + "id": 35, + "image": "xfMGgp1q", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642486428-0001-0125.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Spiral of light 💙", + "downloads": "11455", + "id": 34, + "image": "GeYfZgVw", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642486424-rolling tube0001-0500.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Guider of the sea 🌊", + "downloads": "10444", + "id": 33, + "image": "qMXGWpEH", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642486388-lighthouse0001-0100.png", + "wallpapertype": 3 + }, + + { + "category": "Typography", + "description": "Always be yourself ❤️", + "downloads": "6754", + "id": 32, + "image": "ewJ0fYQr", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642486351-bee.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Bridge through the mist 🌳", + "downloads": "6774", + "id": 645, + "image": "nFAQaw0h", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1723108025-forest waterfalls_2k.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Pinging for the enemies 🪖", + "downloads": "6701", + "id": 644, + "image": "FJLr4j6T", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1723108060-radar_2k.png", + "wallpapertype": 3 + }, + { + "category": "Movies", + "description": "Charting the unknown one map at a time 🧭", + "downloads": "18324", + "id": 509, + "image": "Q0igIXVA", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1700978539-compass.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Gentle breezes and the turning of blades 🍃", + "downloads": "8983", + "id": 508, + "image": "ysKJIc51", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1700978311-windmill valley.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Decked boat dancing on ripples 🛶", + "downloads": "13654", + "id": 504, + "image": "OrfjM83b", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1700211939-boatreflection2k.png", + "wallpapertype": 3 + }, + { + "category": "Typography", + "description": "Dream it do it 🦄", + "downloads": "12236", + "id": 503, + "image": "oGkTW15v", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1700212340-dream.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Eternal hues dance in the void\u0027s embrace 🎗️", + "downloads": "32127", + "id": 501, + "image": "AH5k0P6g", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1699344949-gradstroke_2k.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Every petal tells a story 🌸", + "downloads": "13810", + "id": 500, + "image": "rNv4fW6u", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1699344917-flowerbranch_2k.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Nostalgia meets sound 🎶", + "downloads": "15172", + "id": 498, + "image": "n9VhFq3s", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1698050834-twoshaderecordplayer2k.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Neon tunnel ⚡", + "downloads": "14192", + "id": 497, + "image": "kVy928fx", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1698050818-room2K.png", + "wallpapertype": 3 + }, + { + "category": "Movies", + "description": "Stay on target 💫🛸", + "downloads": "20936", + "id": 496, + "image": "CoeM1An7", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1697521561-starfighter starwars_2k.png", + "wallpapertype": 3 + }, + { + "category": "Dope", + "description": "Lost in luminescence 🟩", + "downloads": "16625", + "id": 495, + "image": "mC6WLnhq", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1697521556-cyberally_2k.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Colors in a mesmerizing dance 🎨", + "downloads": "17455", + "id": 483, + "image": "4DHhiegM", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1696497611-gradlines2k.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Life a flying plane with ever changing backdrop colors ✈️", + "downloads": "11865", + "id": 481, + "image": "P8S2Gopf", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1696496990-planeexpand2K.png", + "wallpapertype": 3 + }, + { + "category": "Superheroes", + "description": "This looks like a job for Superman 💪", + "downloads": "10963", + "id": 640, + "image": "EfkJFC2q", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1722262750-suoerman2k.png", + "wallpapertype": 3 + }, + { + "category": "Typography", + "description": "Gamer Zone ", + "downloads": "5937", + "id": 639, + "image": "jeavPVlk", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1722262736-gameover2k.png", + "wallpapertype": 3 + }, + { + "category": "Dope", + "description": "Neon Tunnel ⚡", + "downloads": "15158", + "id": 635, + "image": "hCUj7aN6", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1721293058-tunetunnel_2k0001-0300.png", + "wallpapertype": 3 + }, + { + "category": "Material", + "description": "Gradient Hue 🔴", + "downloads": "6912", + "id": 634, + "image": "5LFc76e2", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1721293053-gradient timerlinear_2k.png", + "wallpapertype": 3 + }, + { + "category": "Dope", + "description": "Analog warmth in a digital world 🎧", + "downloads": "8204", + "id": 623, + "image": "miEeOcTs", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1720429273-recordplayer2K.png", + "wallpapertype": 3 + }, + { + "category": "Retro", + "description": "Good old days 💻", + "downloads": "14702", + "id": 622, + "image": "N9KsFl3O", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1720429136-windowsxp2K.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Be calm as koi 🐟", + "downloads": "9404", + "id": 618, + "image": "BeIJvh3T", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1719476480-koi fish.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Edge lighting 🌈", + "downloads": "11309", + "id": 617, + "image": "3MqLDHgV", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1719476474-rgb frame.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Rise against the wind 🪁", + "downloads": "11620", + "id": 613, + "image": "Rw3mt7SW", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1718609085-kitevalley2K.png", + "wallpapertype": 3 + }, + { + "category": "Retro", + "description": "An inviting friend 🐈", + "downloads": "5581", + "id": 612, + "image": "3ToUh4n5", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1718609070-cattable2K.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "The Glitch", + "downloads": "5416", + "id": 608, + "image": "IQ432Vmq", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1717667347-cubes2kmain0001-0350.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Pencil Pen and Rubber", + "downloads": "13328", + "id": 607, + "image": "BIZVzLhf", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1717667297-computerportal2k.png", + "wallpapertype": 3 + }, + { + "category": "Movies", + "description": "Peanuts Snoopy ✈️", + "downloads": "21721", + "id": 479, + "image": "9X65KbOj", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1695799095-snoopy.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Sponge loops 🧽", + "downloads": "9122", + "id": 478, + "image": "vWLsGClJ", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1695799085-gradienttube_2k.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Desert nights where stars write their own stories 🌵", + "downloads": "17040", + "id": 476, + "image": "3T8jLvog", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1695198738-pyramid star gaze.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "Life\u0027s like a rolling ball on a track full of twists and turns ", + "downloads": "8669", + "id": 475, + "image": "D1NMe3so", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1695198716-rolling ball2K.png", + "wallpapertype": 3 + }, + { + "category": "Anime", + "description": "When in doubt nap it out - Snorlax\u0027s motto 💤", + "downloads": "23170", + "id": 473, + "image": "kDPZBVYW", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1694594155-snorlax.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Enter the neon-lit future where beats and bytes collide ⚡", + "downloads": "14665", + "id": 472, + "image": "7t3pUOLY", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1694590930-retrodot_2k.png", + "wallpapertype": 3 + }, + { + "category": "Gaming", + "description": "Mario time 💥", + "downloads": "18024", + "id": 470, + "image": "0hzyAtom", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1694076946-supermario2K.png", + "wallpapertype": 3 + }, + { + "category": "Space", + "description": "Imagination is the limit 🧑🏻‍🚀🎈", + "downloads": "28778", + "id": 469, + "image": "0DaVbFgs", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1694076934-flying astronaut.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Melodic Vibrating Wires 🎸", + "downloads": "11127", + "id": 467, + "image": "oVmTNSUe", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1693380422-guitar.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Wind\u0027s Caress 🌼", + "downloads": "6041", + "id": 466, + "image": "XAYWrv2H", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1693380406-flower.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Sunlit meadows 🌲", + "downloads": "18514", + "id": 464, + "image": "1bjIgeUr", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1692776611-vectorbirdscenery.png", + "wallpapertype": 3 + }, + { + "category": "Dope", + "description": "Quantum engine ⚡", + "downloads": "18174", + "id": 463, + "image": "LCYPha4j", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1692776605-cubeneon.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Magical Forest 🌙", + "downloads": "10444", + "id": 603, + "image": "3ZRN94cV", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1716827412-forestbrook2K.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Curved glass ✨", + "downloads": "14164", + "id": 602, + "image": "bnSzZRO0", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1716799592-rainbow_2k0001-0200.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "A feline farewell to daylight ☀️🐈", + "downloads": "12906", + "id": 598, + "image": "V7m6i1fw", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1715848167-cat_2k.png", + "wallpapertype": 3 + }, + { + "category": "Material", + "description": "Embracing the subtle artistry of shades 🟠🟡🟢🔵", + "downloads": "7843", + "id": 597, + "image": "GnYQwXOT", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1715848159-halfcircle_2k.png", + "wallpapertype": 3 + }, + { + "category": "Space", + "description": "Star gazing 💫", + "downloads": "13899", + "id": 593, + "image": "fN82DWoX", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1714984090-star gazing astronaut.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Through the window night whispers its secrets 🪟", + "downloads": "31153", + "id": 592, + "image": "x1sAjaXT", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1714984080-outside window view.png", + "wallpapertype": 3 + }, + { + "category": "Movies", + "description": "EVE 💓", + "downloads": "22127", + "id": 588, + "image": "IgLHh1Sk", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1714060538-eve_2K.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Propelling the colors 🌈", + "downloads": "10949", + "id": 587, + "image": "lhvpF8Rx", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1714060447-propeller_2K.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Never ending ☀️", + "downloads": "21092", + "id": 583, + "image": "rbA5MsC2", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1713257200-retro sun rally.png", + "wallpapertype": 3 + }, + { + "category": "Retro", + "description": "Switch of an era 🎶", + "downloads": "21591", + "id": 582, + "image": "YKog49vH", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1713257189-ipod_2k.png", + "wallpapertype": 3 + }, + { + "category": "Cityscape", + "description": "Soul of the street painted in rain drops", + "downloads": "12640", + "id": 578, + "image": "2qtG1ZMH", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1712388148-rainingsidewalk2k.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Circles shift into places", + "downloads": "7883", + "id": 577, + "image": "rekDpLvG", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1712388120-move2k.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Fourfold Path", + "downloads": "8218", + "id": 461, + "image": "VKy4mqPT", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1692167442-jlines2k.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Red Radiance ⭕", + "downloads": "19172", + "id": 460, + "image": "D0ZKbEIl", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1692167428-energyfield2k.png", + "wallpapertype": 3 + }, + { + "category": "Typography", + "description": "Apple \u0027s Hello 👋🏻", + "downloads": "19110", + "id": 458, + "image": "HumJo4BE", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1691565388-hello2k.png", + "wallpapertype": 3 + }, + { + "category": "Retro", + "description": "Evening in the garage 🔧", + "downloads": "32082", + "id": 457, + "image": "irEbHd9Y", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1691565326-street2k.png", + "wallpapertype": 3 + }, + { + "category": "Movies", + "description": "Hiding in the shadows 🦇 Waiting to strike ⚡", + "downloads": "23746", + "id": 455, + "image": "wfUACS1t", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1690956632-batcave_2k.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Lines of music 🎸", + "downloads": "10193", + "id": 454, + "image": "fayjwWkG", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1690956236-two shade record player_2k.png", + "wallpapertype": 3 + }, + { + "category": "Material", + "description": "Sliding cards 🎴", + "downloads": "11580", + "id": 452, + "image": "QncwPgzG", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1690361489-jumping_shade_2k.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Thunder ⚡", + "downloads": "31019", + "id": 451, + "image": "iBepAVKk", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1690361455-lightning2K.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "A captivating view that holds our gaze refusing to let go 🏞️", + "downloads": "10129", + "id": 449, + "image": "akJXn52S", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1689839410-cloudvalley2K.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Swirling into the hearts ➰", + "downloads": "20209", + "id": 448, + "image": "NWjAcdlJ", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1689838759-gradientloop2K.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Keep smiling until it\u0027s clear 📷", + "downloads": "13533", + "id": 446, + "image": "7iG4Usoh", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "camerafocus2k7676.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "The pop waves 🌊", + "downloads": "20111", + "id": 445, + "image": "WgRq68CP", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1689149442-waves.png", + "wallpapertype": 3 + }, + { + "category": "Anime", + "description": "Itachi Uchiha 🔥", + "downloads": "47419", + "id": 573, + "image": "EuWIeJiO", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1711352204-itachi_moon_2K.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Rise and grind 🍵", + "downloads": "17604", + "id": 572, + "image": "JOuItFm3", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1711352182-coffee_cup_2K.png", + "wallpapertype": 3 + }, + { + "category": "Retro", + "description": "Record Play Repeat 🎤", + "downloads": "14541", + "id": 568, + "image": "69vNVpUj", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1710404402-TeenageEngineering2K.png", + "wallpapertype": 3 + }, + { + "category": "Miscellaneous", + "description": "Pop out Pop in ⚽", + "downloads": "16221", + "id": 567, + "image": "TZUgQRtJ", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1710404359-cylinderballs2k.png", + "wallpapertype": 3 + }, + { + "category": "Movies", + "description": "Welcome to Arrakis ☀️", + "downloads": "17919", + "id": 563, + "image": "m31EhtRz", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1709535876-dune0001-0045.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Glimpse of parallel world 🌍", + "downloads": "18688", + "id": 562, + "image": "oVLnApSP", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1709535857-4 layer land.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Pulses to infinity ♾️", + "downloads": "17887", + "id": 558, + "image": "B2mpiW7j", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1708590245-lineexpand360.png", + "wallpapertype": 3 + }, + { + "category": "Material", + "description": "Melting into the backdrops🔵", + "downloads": "13878", + "id": 557, + "image": "L3dv7UKW", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1708590234-layerlava.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "They glow 🌙", + "downloads": "19554", + "id": 552, + "image": "CkdnroBR", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1707727905-firefilebottle.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "Harnessing the power ⚛️", + "downloads": "16133", + "id": 551, + "image": "DrNBnY6z", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1707727879-spherical2K.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Still a long way to go 🚶🏻‍♀️", + "downloads": "11983", + "id": 547, + "image": "JTL6lDty", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1706956207-long way_2k.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Atoms surfed the waves of fun ⚛️", + "downloads": "16729", + "id": 546, + "image": "JaRcbEiC", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1706956200-wavedots_2k.png", + "wallpapertype": 3 + }, + { + "category": "Space", + "description": "There\u0027s a way out 🌌", + "downloads": "40456", + "id": 443, + "image": "dgHwYSLM", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1688456077-bk2k.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "Rising blocks 🧱", + "downloads": "8798", + "id": 442, + "image": "rjLqdbJn", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1688456022-risingBlocks2K.png", + "wallpapertype": 3 + }, + { + "category": "Travel", + "description": "As the landscape unfolds outside the window 🚊", + "downloads": "14730", + "id": 440, + "image": "mqMsnKui", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1687675294-train doorwindow2k.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Fusion 🌀", + "downloads": "11282", + "id": 439, + "image": "KAVzISrB", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1687675278-test2k.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Era of gamers 🎮", + "downloads": "14820", + "id": 437, + "image": "bVjyp4hr", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1686986248-tv2k.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Flowing qubits 💡", + "downloads": "11363", + "id": 436, + "image": "72WQsAgc", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1686986110-dotlayer2k.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Sky shows the way ✨", + "downloads": "13406", + "id": 434, + "image": "Qirg9kAw", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1686295557-lighthouse2k.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "stripes 🔻", + "downloads": "18209", + "id": 433, + "image": "1FACemca", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1686295552-steplines2k.png", + "wallpapertype": 3 + }, + { + "category": "Gaming", + "description": "Childhood memories 🕹️", + "downloads": "19855", + "id": 431, + "image": "jDKXMEw2", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1685514859-gameboy_2k.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Catch the toast 🍞", + "downloads": "5430", + "id": 430, + "image": "U0FJ38hC", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1685514843-bread toaster_2k.png", + "wallpapertype": 3 + }, + { + "category": "Cityscape", + "description": "Beauty of late night snow ☃️", + "downloads": "27034", + "id": 428, + "image": "CA95YeWL", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1684743860-streetlight_2k.png", + "wallpapertype": 3 + }, + { + "category": "Material", + "description": "Popping pops 🎉", + "downloads": "9486", + "id": 427, + "image": "xoP63fkn", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1684743824-stringingcolour_2k.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "House\u0027s like a step 🪜", + "downloads": "6960", + "id": 542, + "image": "5Zv1adoC", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1705999571-merge houses.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Loops like domino ♦️", + "downloads": "17721", + "id": 541, + "image": "QMpWG2bY", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1705999547-morf lines.png", + "wallpapertype": 3 + }, + { + "category": "Space", + "description": "Spaceship on a joy ride 🚀", + "downloads": "12519", + "id": 537, + "image": "mMaCO5Dp", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1704961330-vector planet.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "A sunny beach day 🏖️", + "downloads": "9754", + "id": 536, + "image": "cnyDCeda", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1704961259-beach guard.png", + "wallpapertype": 3 + }, + { + "category": "Typography", + "description": "Happy New Year 🎆", + "downloads": "4631", + "id": 532, + "image": "PhMH24dz", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1704208922-happynewyear_2k.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Quack quack 🦆", + "downloads": "23614", + "id": 531, + "image": "blzMJ4Ip", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1704208911-duck_2k.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Cubes Glide on Breeze 🟨", + "downloads": "9265", + "id": 528, + "image": "PpxmrE8C", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1703667173-cube cylinder_2k.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Winter\u0027s Silent Whispers ☃️", + "downloads": "4833", + "id": 527, + "image": "MA8NXHL7", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1703667129-snow globe.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Retro vibes ⚡", + "downloads": "16840", + "id": 523, + "image": "LyfTNpZr", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1702654981-neon_lines_2k.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Seaside bliss framed in sunlight 🌊", + "downloads": "14632", + "id": 522, + "image": "xXNtEKmv", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1702654961-horizontal_landscape_2k.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Winter embrace with snowflakes as delicate as whispered dreams ❄️☃️", + "downloads": "10265", + "id": 513, + "image": "NMmZzpDI", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1701677478-colourful snowfall.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "A tapestry of seamless blending 🟥🟧🟨", + "downloads": "7989", + "id": 512, + "image": "bJs7kS5q", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1701677467-square expanition flip.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Planets doing its job 🌍", + "downloads": "16227", + "id": 425, + "image": "kifBrWvn", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1684046356-solar_system_orange_2k.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "Dancing with the flow 🙄", + "downloads": "26572", + "id": 424, + "image": "P1h65qJA", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1684046241-red_black_2k_vbr2.png", + "wallpapertype": 3 + }, + { + "category": "Space", + "description": "Vroooom 🚀", + "downloads": "26702", + "id": 422, + "image": "9mWULPBx", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1683189916-rocket.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Nearing the end of day ⛵", + "downloads": "15541", + "id": 421, + "image": "GqeN0UxH", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1683189872-boatshadow_2k.png", + "wallpapertype": 3 + }, + { + "category": "Dope", + "description": "Trapped in unknown 💢 ", + "downloads": "13065", + "id": 419, + "image": "Qrvs6PAb", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "lineneon.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Fading ghost 👻", + "downloads": "29733", + "id": 418, + "image": "yiYvJB7c", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1682493720-movingghost_2k.png", + "wallpapertype": 3 + }, + { + "category": "Cityscape", + "description": "A rainy night ☔", + "downloads": "68431", + "id": 416, + "image": "ZcCYk74p", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1681804057-rainingstreet.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Mirror reality 😎", + "downloads": "7271", + "id": 415, + "image": "rgALv9TE", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1681804030-flip.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Make a wish 💫", + "downloads": "31631", + "id": 413, + "image": "v48jd1uq", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1681201758-mountainskyview.png", + "wallpapertype": 3 + }, + { + "category": "Dope", + "description": "Frames of reality 🔮", + "downloads": "15110", + "id": 412, + "image": "XJK8uRe4", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1681201744-frame2k.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "Linking links 🔗", + "downloads": "8785", + "id": 410, + "image": "0ugr2XTF", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1680509340-rubber.png", + "wallpapertype": 3 + }, + { + "category": "Cityscape", + "description": "Cruising through the street 🚗", + "downloads": "19331", + "id": 409, + "image": "CegovyQJ", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1680509310-neoncity.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "I can wiggle wiggle 🌻🌵", + "downloads": "10645", + "id": 407, + "image": "4TERVbsO", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1679896707-cactus.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Silky waves 🌊", + "downloads": "16259", + "id": 406, + "image": "KG3R7iX4", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1679896671-waves.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Best part of the day - Evening 🌆", + "downloads": "9277", + "id": 403, + "image": "sMcSilt2", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1679204730-sunlightreflectionvbr1.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "Expanding bubbles 🎈", + "downloads": "7193", + "id": 402, + "image": "OgYCR5WZ", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1679204714-bubble.png", + "wallpapertype": 3 + }, + { + "category": "Anime", + "description": "You are already under my genjutsu 🥷🏻", + "downloads": "133342", + "id": 400, + "image": "I9rPTLMw", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1678429646-itachiuchiha.png", + "wallpapertype": 3 + }, + { + "category": "Typography", + "description": "Let it go 😉", + "downloads": "10826", + "id": 399, + "image": "okXRmlH7", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1678429628-letitgo.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Glitch ⚡", + "downloads": "9707", + "id": 397, + "image": "gvJl2drZ", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1677823065-synth.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Looping trios 😎", + "downloads": "6160", + "id": 396, + "image": "67SLDahN", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1677822985-twotripattern.png", + "wallpapertype": 3 + }, + { + "category": "Gaming", + "description": "Fallen hero 😃", + "downloads": "28919", + "id": 394, + "image": "D4dkOoLq", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1677218914-among us_2k.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Sailing the evening wind ⛵", + "downloads": "10105", + "id": 393, + "image": "oKUqdwa1", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1677218894-lighthouse boat.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Flying above the grass 🍃", + "downloads": "8682", + "id": 390, + "image": "HcKWT93r", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1676443822-hotairballoon.png", + "wallpapertype": 3 + }, + { + "category": "Dope", + "description": "Waves within waves 😁", + "downloads": "18588", + "id": 389, + "image": "R84zOhsM", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1676443809-circlestripes2K.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Gentleness of evening wind 🍃", + "downloads": "13770", + "id": 387, + "image": "o28DawGu", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1675674075-tricutreevalley.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "With me comes the tail ✈️", + "downloads": "33202", + "id": 386, + "image": "bMOCTl9N", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1675674061-planetail.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Yin and yang ☯", + "downloads": "7919", + "id": 384, + "image": "DYWXTiLx", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1674890254-yinyang2K.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Pulse of energy ⚡", + "downloads": "9623", + "id": 383, + "image": "Nh1ofe8P", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1674890229-wave2k.png", + "wallpapertype": 3 + }, + { + "category": "Space", + "description": "Am I on the right planet 🧑🏻‍🚀", + "downloads": "29524", + "id": 381, + "image": "iQW8dSPH", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1674109405-Astrounaut on planet_2k.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "Waves contained in a traingle 📐", + "downloads": "8373", + "id": 380, + "image": "kzDQR9JP", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1674109401-gradientframewave_2k.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Northern lights ☁", + "downloads": "20410", + "id": 378, + "image": "MDuYI51V", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1673154571-lines.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Neon drops 🌟", + "downloads": "19901", + "id": 377, + "image": "b1vrFOlV", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1673154563-raindrops.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "Breathing cubes 🟩", + "downloads": "17639", + "id": 375, + "image": "YGXbzLM1", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1672397960-cubesmerge.png", + "wallpapertype": 3 + }, + { + "category": "Dope", + "description": "Sprint through cyber tunnel ⚡", + "downloads": "14289", + "id": 374, + "image": "HsjFeWJv", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1672397952-tunnel2K.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Window of time 🪟", + "downloads": "17742", + "id": 372, + "image": "oPxUq89D", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1671781199-frame.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Christmas time ❄️", + "downloads": "26055", + "id": 371, + "image": "59PsapVJ", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1671781190-lightsetchristmas_2k .png", + "wallpapertype": 3 + }, + { + "category": "Movies", + "description": "The seeds of the sacred tree 🍃", + "downloads": "21113", + "id": 369, + "image": "q7WLCVaM", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1670919451-avatar0601-1200.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Boo boo 👻", + "downloads": "23431", + "id": 368, + "image": "2G49hE5K", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1670919440-pixelghost2k.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Line that divides dimension 🔮", + "downloads": "8405", + "id": 367, + "image": "OseuYg9c", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1670574738-flipbubbles2k.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Ripples 🌊", + "downloads": "12342", + "id": 366, + "image": "fy6ijzpL", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1670574723-speaker2k.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Energy orb ⚡", + "downloads": "25517", + "id": 352, + "image": "OloNzAQy", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1669881138-scifireactor.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Messing around with lines 🌈", + "downloads": "13971", + "id": 351, + "image": "ktlWo6YM", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1669881134-lineplay.png", + "wallpapertype": 3 + }, + { + "category": "Movies", + "description": "Glitch in the matrix 💾", + "downloads": "37534", + "id": 350, + "image": "p3u7Osyn", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1669615907-matrix.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Colourful memories of old school 📼", + "downloads": "32147", + "id": 349, + "image": "HVKo2fx5", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1669615899-cassetterainbow.png", + "wallpapertype": 3 + }, + { + "category": "Space", + "description": "In search for life 🚀", + "downloads": "15434", + "id": 347, + "image": "zRWeQaAj", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1669098076-exoplanet.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "Streaks through the cracks 🔦", + "downloads": "42678", + "id": 346, + "image": "2YdFqCme", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1669098067-bleedinglight.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Looking for the prey 🦅", + "downloads": "17104", + "id": 344, + "image": "ILohYjwu", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1668584410-treesabove.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Ocean planet 😁", + "downloads": "32764", + "id": 343, + "image": "ToXANS7D", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1668584406-planetinocean.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Wind and flowers 🌷", + "downloads": "9931", + "id": 341, + "image": "9HPnwGeM", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1668151041-flowerfield.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Light bars ⚡", + "downloads": "10833", + "id": 340, + "image": "AOLH63u2", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1668151038-spectrum.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Up up and away ✈", + "downloads": "17367", + "id": 339, + "image": "sxVPWklG", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1667900451-planewindow.png", + "wallpapertype": 3 + }, + { + "category": "Pixel", + "description": "Torii ⛩", + "downloads": "17351", + "id": 338, + "image": "VYeXZAd4", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1667900441-japanesearch.png", + "wallpapertype": 3 + }, + { + "category": "Material", + "description": "Pebble waves 🌌", + "downloads": "16096", + "id": 333, + "image": "f0tcegFG", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1667557680-chips.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Cornering stripes 🏁", + "downloads": "13463", + "id": 332, + "image": "jvMzuYBS", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1667557670-turninglines.png", + "wallpapertype": 3 + }, + { + "category": "Cityscape", + "description": "A day in city 🏙", + "downloads": "11885", + "id": 329, + "image": "uHbALW25", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1667146134-planeabove.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Pew pew 😁", + "downloads": "15250", + "id": 328, + "image": "bKT7ZB8v", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1667146129-pewgun.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Simple as a flower 🌼", + "downloads": "7734", + "id": 327, + "image": "luVyJaZX", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1666766421-flowerpot.png", + "wallpapertype": 3 + }, + + { + "category": "Geometry", + "description": "Bouncers ⭕", + "downloads": "8236", + "id": 300, + "image": "2PXEkfjJ", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1664525996-twoshadeball.png", + "wallpapertype": 3 + }, + { + "category": "Pixel", + "description": "Festival vibe 🎆", + "downloads": "12369", + "id": 299, + "image": "cDJIejZY", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1664170966-pixelfireworks.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Swirl 🌀", + "downloads": "14260", + "id": 298, + "image": "NdU7By6V", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1664170950-spriallines.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Trains are beautiful 🚄", + "downloads": "13239", + "id": 297, + "image": "cskeY8Fx", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1663832513-bridgetrain.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "Magic below the blocks 🪄", + "downloads": "12364", + "id": 296, + "image": "m3i5XUIA", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1663832509-risingneon.png", + "wallpapertype": 3 + }, + { + "category": "Typography", + "description": "Make it count ⏳", + "downloads": "14671", + "id": 295, + "image": "KEUARZqg", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1663568574-makeitcount3.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Just floating around 🌊", + "downloads": "13852", + "id": 294, + "image": "1UWTpG87", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1663568542-jellyfish1.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Gradient strings 🪡", + "downloads": "10977", + "id": 293, + "image": "NiCIf7nO", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1663217492-gradientline.png", + "wallpapertype": 3 + }, + { + "category": "Cityscape", + "description": "Way back home 🪟", + "downloads": "7507", + "id": 292, + "image": "DEBxzG9u", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1663217494-window.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Ring Planet 🌌", + "downloads": "47734", + "id": 285, + "image": "FrinSg37", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1662879807-saturn1.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Kinda spooky 🦇", + "downloads": "26097", + "id": 284, + "image": "i6GlZz4g", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1662879788-spookyforest.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Disco floor 💃🏻", + "downloads": "10471", + "id": 283, + "image": "4tyKUwEl", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1662621794-discovibe.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Buzzing bees 🐝", + "downloads": "9126", + "id": 282, + "image": "JBg1PslY", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1662621769-beehive.png", + "wallpapertype": 3 + }, + { + "category": "Cityscape", + "description": "Golden Gate Bridge 🌉", + "downloads": "14313", + "id": 281, + "image": "Aio6auR2", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1662355278-goldengatebridge.png", + "wallpapertype": 3 + }, + { + "category": "Movies", + "description": "I solemnly swear that I am up to no good 🪄", + "downloads": "9892", + "id": 280, + "image": "q07B9wFL", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1662355270-footprint.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Above the clouds 🛩️", + "downloads": "16277", + "id": 279, + "image": "qYZW1Rv0", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1662008358-planeabovewater.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Halftone 🪄", + "downloads": "6331", + "id": 278, + "image": "4HyjqJlt", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1662008355-Dots.png", + "wallpapertype": 3 + }, + { + "category": "Pixel", + "description": "Pixel warmth 🔥", + "downloads": "13832", + "id": 277, + "image": "hyzI7Pk3", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1661751428-pixelcampfire.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Push and Pull 🥸", + "downloads": "5337", + "id": 276, + "image": "PiAKybTX", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1661751415-pushline.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Meow 🐈", + "downloads": "16366", + "id": 273, + "image": "i0E3UoF9", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1661490668-sleepingcat.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Crystal dimension 🤩", + "downloads": "17247", + "id": 272, + "image": "yCWtPghR", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1661490666-animation81.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Hilltop holidays 🖖🏻", + "downloads": "5709", + "id": 271, + "image": "bC9oJ78l", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1660751887-Hillhouse.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "The maze 🫣", + "downloads": "13626", + "id": 270, + "image": "eYlUWwG3", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1660751880-patternrgb.png", + "wallpapertype": 3 + }, + { + "category": "Cityscape", + "description": "Winter night ☃", + "downloads": "55895", + "id": 269, + "image": "rT350txs", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1660723718-snowapartment.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Minimal waves 🌊", + "downloads": "8365", + "id": 268, + "image": "jxsMPnZO", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1660723701-abstractwaves.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Weekend rides 🚙", + "downloads": "15007", + "id": 267, + "image": "2pHIefF3", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1660376766-sunsetride.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Entering the night 🌙", + "downloads": "6464", + "id": 266, + "image": "GrLxaBz5", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1660376731-lighthousevector.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Go with the flow ⛵", + "downloads": "15836", + "id": 265, + "image": "ZIj76vOl", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1660118394-redboat.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Strings of reality ⭕", + "downloads": "22984", + "id": 264, + "image": "aiVWKcY1", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1660118383-contourarray.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Nature heals 🌳", + "downloads": "19023", + "id": 263, + "image": "PjXMoci9", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1659866405-fallleaves.png", + "wallpapertype": 3 + }, + { + "category": "Material", + "description": "Clash of opposites 🌈", + "downloads": "8520", + "id": 262, + "image": "N8A1wHLX", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1659866395-loopie.png", + "wallpapertype": 3 + }, + { + "category": "Cityscape", + "description": "Wire\u0027s connecting people 👕👖", + "downloads": "11849", + "id": 259, + "image": "xRM4ArGk", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1659593345-hangingclothes.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Everything is energy ⚡", + "downloads": "35593", + "id": 258, + "image": "IN0nhgL4", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1659593329-circuit.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Waves of shades 🌊", + "downloads": "8988", + "id": 257, + "image": "qyIXY1ZG", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1659335310-colourgrid6.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "It\u0027s fading 🤞🏻", + "downloads": "6495", + "id": 256, + "image": "beVy1x6O", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1659335301-fadinglines1.png", + "wallpapertype": 3 + }, + { + "category": "Anime", + "description": "Domain Expansion 🤞🏻", + "downloads": "55325", + "id": 255, + "image": "PiQtZJen", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1658994833-gojo1.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Face towards light 🌻", + "downloads": "13841", + "id": 254, + "image": "RHDuFAgb", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1658994666-sunflower.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Night brings fear 🏰", + "downloads": "28856", + "id": 253, + "image": "nAKjYWZ3", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1658655062-nightcatle.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "The path isn\u0027t a straight line, it\u0027s a spiral 🌀", + "downloads": "17420", + "id": 252, + "image": "qVJI5SN0", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1658649402-crcfluid.png", + "wallpapertype": 3 + }, + { + "category": "Dope", + "description": "Through the unknown 🤐", + "downloads": "19806", + "id": 251, + "image": "zLp2Vj4x", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1658385467-animation 670001-0120.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Endings are beautiful 🌇", + "downloads": "17405", + "id": 250, + "image": "NMy608Ya", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1658385460-sunset.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Glide through your dreams 🛩", + "downloads": "6136", + "id": 249, + "image": "EUqnwDWt", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1658134331-glider.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Strip\u0027s traffic 😉", + "downloads": "10830", + "id": 248, + "image": "kGB3yMqb", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1658134320-grid1.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "To honour the time machine - James Webb Telescope", + "downloads": "17217", + "id": 247, + "image": "n5cMUxgb", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1657812000-galaxy.png", + "wallpapertype": 3 + }, + { + "category": "Typography", + "description": "Life is a journey 🚗 ", + "downloads": "7788", + "id": 246, + "image": "yZvaUhFu", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1657811993-lifejourney.png", + "wallpapertype": 3 + }, + { + "category": "Cityscape", + "description": "Comfort of home 🌃", + "downloads": "20284", + "id": 245, + "image": "BCT9fx3h", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1657517940-window scape new.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Home is where plants are🪴", + "downloads": "17135", + "id": 244, + "image": "5Vu7v1yp", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1657517928-leaves1.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Make a wish 🌠", + "downloads": "40387", + "id": 243, + "image": "cLVaypI2", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1657291661-shootingstar.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Flocking beams ⚡", + "downloads": "19099", + "id": 242, + "image": "578AbrmR", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1657291653-dots.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Raining colors 🌧", + "downloads": "34561", + "id": 241, + "image": "yWAg8i4Q", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1657031337-rainbowrain.png", + "wallpapertype": 3 + }, + { + "category": "Material", + "description": "Looping loops ⭕", + "downloads": "5955", + "id": 240, + "image": "Oi8ofNPb", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1657031328-circle.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Cruising the unknown 🚀", + "downloads": "24491", + "id": 239, + "image": "AFY4hrK0", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1656773205-rocketnew.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Monolith of energy ⚡", + "downloads": "18018", + "id": 238, + "image": "nXOH7dPa", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1656773192-trianglewaves.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Blow 💨", + "downloads": "9642", + "id": 237, + "image": "YwJ2fH5V", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1656482859-paperwindmill.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Fusion 🌀", + "downloads": "25882", + "id": 236, + "image": "RQt2913o", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1656482849-Energyfield.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Land of dreams 🌳", + "downloads": "40565", + "id": 235, + "image": "jkobCr5V", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1656235975-butterflygreen.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Blazing through the tunnel ⚡", + "downloads": "39397", + "id": 234, + "image": "Fa8NqnjJ", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1656235972-circletunnel23.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Chilling through the countryside 🚙", + "downloads": "12497", + "id": 233, + "image": "rzTJdu4Q", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1655976665-countrydrive.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Shades of sun 🕶", + "downloads": "8436", + "id": 232, + "image": "Xwz4GZqr", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1655976648-colour_1.png", + "wallpapertype": 3 + }, + + { + "category": "Movies", + "description": "Stay Out Of My Territory - Heisenberg ⚗️", + "downloads": "28476", + "id": 227, + "image": "NbxPlFc3", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1655190766-breaking bad.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Old school 🎧", + "downloads": "26803", + "id": 225, + "image": "S6F4TnJ7", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1655189835-walkman.png", + "wallpapertype": 3 + }, + { + "category": "Anime", + "description": "It\u0027s my turn 🔥", + "downloads": "92346", + "id": 224, + "image": "K6ySTF5k", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1654933736-gokuhair.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Being minimal 😉", + "downloads": "32791", + "id": 223, + "image": "h4Z5OQDq", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1654933732-snowfall.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Enjoy the smell of rain ☔", + "downloads": "12485", + "id": 222, + "image": "1VcGN9RO", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1654668060-rainvector.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Trying to connect 😉", + "downloads": "9309", + "id": 221, + "image": "ZUkGF4Ez", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1654668052-roundewave.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Spring is nature\u0027s way of saying let\u0027s party 🌄", + "downloads": "6956", + "id": 220, + "image": "LMBHkEXS", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1654413275-landscape.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Digital branches ⚡", + "downloads": "31536", + "id": 219, + "image": "wzT3YAxH", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1654413266-simdots.png", + "wallpapertype": 3 + }, + { + "category": "Movies", + "description": "Beginning of the Hawkin\u0027s curse 🎃", + "downloads": "96580", + "id": 218, + "image": "VKpGv0RL", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1654161170-vecnahouse.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Summer waves 🌊", + "downloads": "6533", + "id": 217, + "image": "Q0HK57si", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1654161159-wavvve.png", + "wallpapertype": 3 + }, + { + "category": "Cityscape", + "description": "Life is like a roller coaster, live it, be happy, enjoy life 🎢", + "downloads": "11891", + "id": 216, + "image": "tUuqKWn5", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1653896481-rollercoster40.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Dustin , Do you copy 😉", + "downloads": "15823", + "id": 215, + "image": "EBMK7NTF", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1653896478-walkietalkie.png", + "wallpapertype": 3 + }, + { + "category": "Dope", + "description": "Through the hurdles ⚡", + "downloads": "24404", + "id": 214, + "image": "wQ37vMgz", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1653546875-animation56.png", + "wallpapertype": 3 + }, + { + "category": "Typography", + "description": "Today is your day 😁", + "downloads": "19519", + "id": 213, + "image": "VnoQmB5a", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1653546861-today.png", + "wallpapertype": 3 + }, + { + "category": "Material", + "description": "Rotary cards 🎴", + "downloads": "47420", + "id": 212, + "image": "a0TEy1IM", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1653291520-roundedsquare2.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "In one drop of water are found all the secrets of all the oceans", + "downloads": "16073", + "id": 211, + "image": "k6uprVsf", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1653291509-boattrip6.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Converging stripes ⭕", + "downloads": "7242", + "id": 210, + "image": "e1Evxh7K", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1653028917-cutcircle2.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Dropping frames 📐", + "downloads": "14824", + "id": 209, + "image": "9QDqL4BM", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1653028915-framerotate2.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Comfort of home 🏡", + "downloads": "50495", + "id": 208, + "image": "nG0Qs51U", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1652767860-livingroom.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Ice and fire 🔥❄️", + "downloads": "15892", + "id": 207, + "image": "eNWAYdob", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1652767839-zig.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Cozy summer 🏖️", + "downloads": "16156", + "id": 206, + "image": "zE9R6gSG", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1652337222-seawave.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Mirror dimension 🪄", + "downloads": "4103", + "id": 205, + "image": "Ukx7qj3K", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1652337215-cutsphere.png", + "wallpapertype": 3 + }, + + { + "category": "Landscape", + "description": "Mining the coins 🪙", + "downloads": "19665", + "id": 196, + "image": "CeFq9Owm", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1651215776-mining.png", + "wallpapertype": 3 + }, + { + "category": "Material", + "description": "Flipping cards 🎴", + "downloads": "21405", + "id": 195, + "image": "5mXc9s83", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1651215762-tilewave.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Blue Planet 🔵", + "downloads": "95474", + "id": 194, + "image": "osJuAmep", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1651049003-planet007.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Droplets 💧", + "downloads": "6104", + "id": 193, + "image": "TMiOn2da", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1651048971-droppattern.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Way back home 🚦", + "downloads": "21282", + "id": 192, + "image": "nCfxJUEd", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1650866841-traffic light.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Ghost Rider 🔥", + "downloads": "28949", + "id": 191, + "image": "agjLlwE3", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1650866838-skullnew.png", + "wallpapertype": 3 + }, + { + "category": "Cityscape", + "description": "Wakeup call 🍵", + "downloads": "15116", + "id": 190, + "image": "5zsv48Oi", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1650692872-windownearsubway.png", + "wallpapertype": 3 + }, + + + { + "category": "Pattern", + "description": "Circling ⭕", + "downloads": "10382", + "id": 164, + "image": "M3w0tZxG", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1648446785-pluspattern.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Confused steps 🤭", + "downloads": "13653", + "id": 163, + "image": "Xi0J6UdY", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1648310198-contour.png", + "wallpapertype": 3 + }, + { + "category": "Typography", + "description": "Taking rest is also being productive 💤", + "downloads": "20668", + "id": 162, + "image": "M8qTZGFQ", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1648195234-restisproductive.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "I\u0027m in love with the grass 🌳", + "downloads": "16630", + "id": 161, + "image": "uHybICne", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1648112120-grasscutter0001-0310.png", + "wallpapertype": 3 + }, + { + "category": "Dope", + "description": "The Eighty\u0027s Vibe 🕺 ", + "downloads": "16953", + "id": 160, + "image": "9hoTBQZL", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1648112112-animation380001-0120.png", + "wallpapertype": 3 + }, + { + "category": "Superheroes", + "description": "I think I\u0027m superman\u0027s favorite 💚", + "downloads": "8838", + "id": 159, + "image": "Oox1TRYe", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1647851269-supperman0001-0093.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Confused ghost 👻", + "downloads": "15853", + "id": 158, + "image": "joyRhH14", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1647851266-panghost.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Joy of smiley\u0027s 😉", + "downloads": "3987", + "id": 157, + "image": "m7hJcMwv", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1647760634-smiley.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Hide and seek with the cats 😸", + "downloads": "18341", + "id": 156, + "image": "BLck8Qrx", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1647760632-cats.png", + "wallpapertype": 3 + }, + { + "category": "Movies", + "description": "The Resistance ski speeder 🔥", + "downloads": "33573", + "id": 155, + "image": "qm6kevX7", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1647590528-starwars0080-0240.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Gift from nature 🌊", + "downloads": "24805", + "id": 154, + "image": "opYn9biL", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1647590523-waterfall.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Rainbow effect 🌈", + "downloads": "29502", + "id": 153, + "image": "IrWp7Pok", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1647418463-circlingrainbowhigh.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Through the town road 🤠", + "downloads": "4135", + "id": 152, + "image": "Gvj8U5RM", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1647418455-cowbo45.png", + "wallpapertype": 3 + }, + { + "category": "Anime", + "description": "There is something you have to protect ⚔️", + "downloads": "19655", + "id": 150, + "image": "9FzEXMxC", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1647246742-nezukobox.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "Beats ⚡", + "downloads": "10892", + "id": 149, + "image": "cqWTe6jN", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1647246737-greenanim.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Countryside are always refreshing 🏡", + "downloads": "7561", + "id": 148, + "image": "dGAhZSgC", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1646986493-house 3.png", + "wallpapertype": 3 + }, + { + "category": "Cityscape", + "description": "Chores of the city 🌇", + "downloads": "7860", + "id": 147, + "image": "prKe6Qwu", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1646986489-sidetrain.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Joy of celebration 🎉", + "downloads": "16140", + "id": 146, + "image": "L4VbOsYe", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1646986481-fireworkview.png", + "wallpapertype": 3 + }, + { + "category": "Cityscape", + "description": "Feeling the calm 📻", + "downloads": "50154", + "id": 145, + "image": "KbaDizGu", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1646888235-windowview.png", + "wallpapertype": 3 + }, + { + "category": "Dope", + "description": "Through the warp tunnel 🚀", + "downloads": "19924", + "id": 144, + "image": "xVDSuvjo", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1646888230-animation390001-0120.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Winter cave 🪵", + "downloads": "5577", + "id": 143, + "image": "YfFaywoH", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1646725986-foresthouse.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Juicy slices 🍉", + "downloads": "5634", + "id": 142, + "image": "CUgLfE0M", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1646725977-watermelon.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Love for old 🎷", + "downloads": "22506", + "id": 141, + "image": "fshCMoKF", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1646500025-musictape.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Joy of baloons 🎈", + "downloads": "4514", + "id": 140, + "image": "4aNESDct", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1646500005-baloon.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Camping nights ⛺", + "downloads": "17785", + "id": 139, + "image": "YzMrhTdj", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1646306068-snowforest.png", + "wallpapertype": 3 + }, + { + "category": "Gaming", + "description": "Gamer\u0027s paradise 👨🏻‍💻", + "downloads": "28767", + "id": 138, + "image": "brocN6Da", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1646306064-pc.png", + "wallpapertype": 3 + }, + { + "category": "Superheroes", + "description": "Batmobile in Action 🦇", + "downloads": "26251", + "id": 137, + "image": "0oKr7TM4", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1646123484-batmobile.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Gateway to the metaverse ⚡️", + "downloads": "10402", + "id": 136, + "image": "ATgbnVti", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1646123475-animation33.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Trying to meet the ends 😁", + "downloads": "3460", + "id": 135, + "image": "E39sJtD8", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1646123470-tripattern.png", + "wallpapertype": 3 + }, + { + "category": "Superheroes", + "description": "On a date 🦇 🐱", + "downloads": "41699", + "id": 134, + "image": "sUMx4igS", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1645948957-thebatman.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Being retro 🕺", + "downloads": "5221", + "id": 133, + "image": "Y5EsZt9h", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645948953-animation330001-0120.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Beats 💓", + "downloads": "32496", + "id": 132, + "image": "UJN3sn7G", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1645948947-heartbeat.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Weekend life 🎣", + "downloads": "21075", + "id": 131, + "image": "UHGgV6xz", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645689678-fishingboat.png", + "wallpapertype": 3 + }, + { + "category": "Anime", + "description": "Pokeball ❤️", + "downloads": "29725", + "id": 130, + "image": "gf98ksKa", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645689676-pokeball0001-0100.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Colour Blades 💚", + "downloads": "7661", + "id": 129, + "image": "byXhakCg", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645689669-yellowpanel.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Serene Night ✨", + "downloads": "23302", + "id": 128, + "image": "MG6JrH1F", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645601780-windmillill.png", + "wallpapertype": 3 + }, + { + "category": "Gaming", + "description": "Pac Man 🕹", + "downloads": "42164", + "id": 127, + "image": "wZWDOt1x", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645601772-pacman.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Cube of Wisdom ⚡", + "downloads": "15387", + "id": 126, + "image": "6nPkafpA", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645601756-icecube.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Run with the stripes 💜", + "downloads": "12677", + "id": 125, + "image": "54nkHS0T", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645515883-intercutline.png", + "wallpapertype": 3 + }, + { + "category": "Dope", + "description": "Cyber Planet ", + "downloads": "7650", + "id": 124, + "image": "FdBayDEC", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645515875-animation620001-0120.png", + "wallpapertype": 3 + }, + { + "category": "Gaming", + "description": "Love\u0027s clicking ⌨️", + "downloads": "51051", + "id": 123, + "image": "Kuj9oSd4", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645515864-key0001-0247.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "Rings and Rings ✌🏻", + "downloads": "28938", + "id": 122, + "image": "NVcnSvTy", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1645515845-vectorgalaxy.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Vroom Vroom 🏎️", + "downloads": "7868", + "id": 121, + "image": "OCXNm04f", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645259201-car0001-0150.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Meow Meow 🐱", + "downloads": "7582", + "id": 120, + "image": "UauRwNgt", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645259197-catdoodles.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "Core of the ancient magic 🔮", + "downloads": "8480", + "id": 119, + "image": "QHtIJZqr", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645259194-cubetemp0001-0250.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Curly curly 🖤", + "downloads": "2843", + "id": 118, + "image": "J0YFxAoq", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645173539-zigzag.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Solve the riddle 🔮", + "downloads": "5099", + "id": 117, + "image": "cxm8NBsl", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645173533-ancientartifact.png", + "wallpapertype": 3 + }, + { + "category": "Typography", + "description": "Just charging 🔋", + "downloads": "9093", + "id": 116, + "image": "6h5i7aTK", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645173517-justcharging.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Rainbow rain 🌈", + "downloads": "4098", + "id": 115, + "image": "A0xUfN6E", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645173469-rainbowcloud.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Imagination is important than knowledge 🔬", + "downloads": "7391", + "id": 114, + "image": "u0sL3bFq", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645087072-galaxyhouse.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Magic steps 🔮", + "downloads": "4093", + "id": 113, + "image": "FTQVdDNo", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645087070-arr0040-0119.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Dancing dots 💚", + "downloads": "2173", + "id": 112, + "image": "wb9c0oGx", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645000768-circlesplashpattern.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Train\u0027s coming 🚞", + "downloads": "9956", + "id": 111, + "image": "JcweovKf", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645000755-train0001-0250.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Follow the wave ⚡", + "downloads": "13076", + "id": 110, + "image": "E9LzS5PG", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645000748-Comp2dot.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Sprouting forest 🌳", + "downloads": "2845", + "id": 109, + "image": "qefFvO0a", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1644653266-colourtree.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Where are the humans 🛸", + "downloads": "14777", + "id": 108, + "image": "xtTe6CAl", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1644653255-ufo.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Hello anybody home 🚀", + "downloads": "27032", + "id": 107, + "image": "EmrYWiA1", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1644653245-blackhole.png", + "wallpapertype": 3 + }, + { + "category": "Typography", + "description": "Error ", + "downloads": "24550", + "id": 106, + "image": "cofEiJ9d", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1644653226-error.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Disco disco 🕺", + "downloads": "3723", + "id": 105, + "image": "0tExmCbu", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1644653213-animation 210001-0240.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Loving the queit life 🏡", + "downloads": "3643", + "id": 104, + "image": "Af0esPFS", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1644566689-hotair.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Sailing through the horizon ⛵", + "downloads": "7979", + "id": 103, + "image": "eBdwiH6f", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1644566665-oceanboat.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Lava lamp ☮️", + "downloads": "14879", + "id": 102, + "image": "l01wioFT", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1644566624-lavalamp.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "Realm of cubes ▪️◻️◾◼️", + "downloads": "7134", + "id": 101, + "image": "hAe9R7wf", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1644566610-decube.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Waves 💜", + "downloads": "7413", + "id": 100, + "image": "MWjAhRZF", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1644566581-gradientwave.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Every action has a reaction 🤓", + "downloads": "16880", + "id": 99, + "image": "9kC2wZUn", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1644566566-pend.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Dots dots go away 😜", + "downloads": "5505", + "id": 98, + "image": "UoYrjhKc", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1644566535-dotarray.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Tik tok Tik tok ⏳", + "downloads": "3457", + "id": 97, + "image": "i3xABMhj", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1644566514-rotateballs.png", + "wallpapertype": 3 + }, + { + "category": "Anime", + "description": "Feeling the rain 🌧️", + "downloads": "13316", + "id": 96, + "image": "H59OQqzb", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1644566465-girl in rain.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Camping folks ⛺", + "downloads": "13276", + "id": 84, + "image": "gYska4tH", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1643356780-camp fire.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Night sky ✨", + "downloads": "11100", + "id": 83, + "image": "xtVHQ5qX", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1643356776-night shy.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Creating memories in the snow, one angel at a time ☃️❄️", + "downloads": "1936", + "id": 705, + "image": "rX1J9fqj", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1733126052-snow angel_2k.png", + "wallpapertype": 3 + }, + { + "category": "Movies", + "description": "Christmas time for snoopy ❄️☃️", + "downloads": "1220", + "id": 704, + "image": "85IPsh6E", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1733125861-snoopy house_2k.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "The wave of joy 🌊", + "downloads": "7106", + "id": 182, + "image": "nYb783FD", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1649835082-wave.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "The opposite pairs 😉", + "downloads": "11237", + "id": 181, + "image": "g4NZzoAl", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1649835076-dna.png", + "wallpapertype": 3 + }, + { + "category": "Movies", + "description": "Roll into adventure with BB-8 💫", + "downloads": "1886", + "id": 700, + "image": "HDabQGWh", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1732175087-BB-8_2k.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Chasing the breeze ⛵", + "downloads": "1682", + "id": 699, + "image": "31HPOwuK", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1732175071-waving boat_2k.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Let\u0027s Bravo 💪🏻", + "downloads": "3553", + "id": 695, + "image": "x3rgHsu0", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1731314484-johnny bravo_2k.png", + "wallpapertype": 3 + }, + { + "category": "Dope", + "description": "Energy tiles ⚡", + "downloads": "1964", + "id": 694, + "image": "35VZSQ2q", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1731314477-cybersandwich_2k0001-0350.png", + "wallpapertype": 3 + }, + { + "category": "Superheroes", + "description": "From the shadows, I rise 🕷✨", + "downloads": "4665", + "id": 690, + "image": "7tphTLSA", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1730447376-spiderman noir_2k.png", + "wallpapertype": 3 + }, + { + "category": "Miscellaneous", + "description": "Under the watchful eye of the moon, she rides the night 🌕✨🧙‍♀️", + "downloads": "2033", + "id": 689, + "image": "l8rWAa52", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1730447262-witch night_2k.png", + "wallpapertype": 3 + }, + { + "category": "Space", + "description": "Moon 🌕", + "downloads": "5277", + "id": 685, + "image": "EDVQUOwk", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1729501659-moon_2k.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Boo want to be scary👻 ", + "downloads": "3210", + "id": 684, + "image": "PUW2EhR0", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1729501572-ghostwind_2k.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Someone\u0027s being cooked 🪦", + "downloads": "2618", + "id": 680, + "image": "eQTYlByI", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1728551180-graveyard_2k.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Woo hahaha 🎃🕯️", + "downloads": "2211", + "id": 679, + "image": "Wwu1pX5t", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1728551171-pumkin candle_2k.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Monsoon cocktail 🍸", + "downloads": "2692", + "id": 675, + "image": "XHRV2kop", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1727687143-cocktail_2k.png", + "wallpapertype": 3 + }, + { + "category": "Space", + "description": "The red planet 🌍", + "downloads": "3070", + "id": 674, + "image": "vufNpc9r", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1727687132-planet landscape_2k.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Ace Burner ♠️♥️♦️♣️", + "downloads": "7229", + "id": 670, + "image": "bHAg0sop", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1726732728-card on fire_2k.png", + "wallpapertype": 3 + }, + { + "category": "Cityscape", + "description": "Golden Gate Bridge 🌉", + "downloads": "4815", + "id": 669, + "image": "NBfadl9x", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1726732699-golden gate bridge view_2k.png", + "wallpapertype": 3 + }, + { + "category": "Dope", + "description": "The core ⚡", + "downloads": "6344", + "id": 665, + "image": "si2RCIbU", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1725870751-hexogen_2k.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Radiate like flowers 🌼", + "downloads": "3406", + "id": 664, + "image": "K6zaDsGx", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1725870736-fadingflowers_2k.png", + "wallpapertype": 3 + }, + { + "category": "Movies", + "description": "Spider Glitch 🕸️", + "downloads": "11606", + "id": 660, + "image": "qducAoan", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1724917214-spiderlogoglitch_2k.png", + "wallpapertype": 3 + }, + { + "category": "Tech", + "description": "Give your device some power surge ⚡", + "downloads": "5455", + "id": 659, + "image": "Ob9d70IC", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1724917204-generator_2k.png", + "wallpapertype": 3 + }, + { + "category": "Anime", + "description": "Autonomous Ultra Instinct 🔥", + "downloads": "20255", + "id": 655, + "image": "9f0Cepkb", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1724059272-gokuultrainstinct2k.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "⭕ pop out ⭕", + "downloads": "4045", + "id": 654, + "image": "Hogh0Jt3", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1724059263-cylinder2k0001-0250.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Wiggly wiggly 😁", + "downloads": "11687", + "id": 82, + "image": "ku28xKdm", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1643356768-deform.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Where\u0027s my mouse 🤔", + "downloads": "7843", + "id": 81, + "image": "ijQndh5H", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1643356755-old computer0001-0250.png", + "wallpapertype": 3 + }, + { + "category": "Dope", + "description": "Enter the metaverse⚡", + "downloads": "14561", + "id": 79, + "image": "pY1Fq7tw", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1643271285-animation 450001-0200.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Busy riding the sands 🌵", + "downloads": "11250", + "id": 78, + "image": "cM85T0jo", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1643010196-car0001-0247.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Atoms play 🔬", + "downloads": "3933", + "id": 77, + "image": "FgTs76uc", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1643010160-animation 250001-0120.png", + "wallpapertype": 3 + }, + { + "category": "Superheroes", + "description": "I am vengeance 🔥", + "downloads": "79041", + "id": 76, + "image": "lRNOhvxW", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1643010123-batman.png", + "wallpapertype": 3 + }, + { + "category": "Typography", + "description": "Vibe 🕺", + "downloads": "4625", + "id": 75, + "image": "86ixr5kA", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1643010117-vibe.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Warp drive through the vaccum ✨", + "downloads": "22782", + "id": 74, + "image": "tFNP0Ywm", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1643010114-erer.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Need a bucket to collect all these 🪣", + "downloads": "22076", + "id": 73, + "image": "FGPpaDgu", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1642839034-playstation symbol0250-0499.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Fabric of reality 😉", + "downloads": "10565", + "id": 71, + "image": "jVHDdWh6", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642752256-dot 1.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Enjoying through the woods 🚗", + "downloads": "19355", + "id": 70, + "image": "4Oiby2ms", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642752242-night forest ride0001-0150.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Don\u0027t tell anyone about this base 🚀", + "downloads": "4460", + "id": 69, + "image": "clMvD7o4", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642752214-pyramid0001-0250.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Festival of light 🕯️", + "downloads": "11457", + "id": 68, + "image": "ABnsbwC3", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1642750093-lanterns0118-1000.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Searching for glaciers ☹️", + "downloads": "7258", + "id": 67, + "image": "32yZIpDV", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642750069-boat ride.png", + "wallpapertype": 3 + }, + { + "category": "Anime", + "description": "Rengoku🔥", + "downloads": "51805", + "id": 66, + "image": "IVLv624U", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642750053-rengoku.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Spiral of spectrum 🌈", + "downloads": "5468", + "id": 65, + "image": "u6lHZCQF", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642750022-circle0001-0200.png", + "wallpapertype": 3 + }, + { + "category": "Geometry", + "description": "Antigravity keeps me floating⚡", + "downloads": "4770", + "id": 64, + "image": "JKvqt5Pa", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642750008-dune0001-0150.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Through the pulses 🔮 .", + "downloads": "9721", + "id": 63, + "image": "CBy8i1kc", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642749980-worm hole0001-0120.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Booo Booo 👻", + "downloads": "79317", + "id": 62, + "image": "VflzaU4B", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642749968-ghost.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Countryside 🚜", + "downloads": "7608", + "id": 61, + "image": "N20IdgeG", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1642749960-farmhouse0001-0250.png", + "wallpapertype": 3 + }, + { + "category": "Typography", + "description": "Be a percent better everyday 💚", + "downloads": "43680", + "id": 60, + "image": "EDLpF1YJ", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1642668016-1better.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "WIndmill 🍃", + "downloads": "6871", + "id": 59, + "image": "AY4nRzhf", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642667421-windmill0001-0250.png", + "wallpapertype": 3 + }, + { + "category": "Anime", + "description": "Founding Titan", + "downloads": "14549", + "id": 58, + "image": "SbVr2TeA", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642667392-Aot.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Ride by the river 🚗", + "downloads": "7984", + "id": 57, + "image": "gDf0iX2S", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642667356-night ride0001-0150.png", + "wallpapertype": 3 + }, + { + "category": "Superheroes", + "description": "God of thunder⚡", + "downloads": "30090", + "id": 56, + "image": "0TIqwLE7", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642667341-thor.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Exploring the deep waters 🌊", + "downloads": "8687", + "id": 55, + "image": "kfMaSvZ4", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642667334-sub0001-0250.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Cyber waves 💜", + "downloads": "6689", + "id": 54, + "image": "ZP4qMsQe", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1642491028-shape10001-0120.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Hoping for Dr Strange to come 😉", + "downloads": "18501", + "id": 53, + "image": "VR4E6smB", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642491015-strange portal.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Have fun at the carnival 🎡", + "downloads": "13168", + "id": 52, + "image": "z4bn3Hlk", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1642491005-carnival0001-0500.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Pink flower ", + "downloads": "7908", + "id": 51, + "image": "VPIEWTYB", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642490992-flower.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Feel the pulse 😊", + "downloads": "10718", + "id": 50, + "image": "41gcyMYN", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642490982-cube0001-0250.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Cat love 🐈", + "downloads": "9241", + "id": 49, + "image": "Om2nPfBg", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642490976-cat.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Have a good day 😎", + "downloads": "5768", + "id": 48, + "image": "Q0Ironk1", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1642490971-coffee.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Magic Flower 💙", + "downloads": "6247", + "id": 47, + "image": "T3YR9Wnf", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642490964-blue flower.png", + "wallpapertype": 3 + }, + { + "category": "Abstract", + "description": "Waveform 🖤", + "downloads": "15265", + "id": 46, + "image": "HpqY1Qxd", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642490957-shape0001-0120.png", + "wallpapertype": 3 + }, + { + "category": "Anime", + "description": "Ultra Instinct 🔥", + "downloads": "70321", + "id": 45, + "image": "mV5S6Qko", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1642490947-goku ultra.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Planet love 🌍", + "downloads": "16894", + "id": 44, + "image": "VZ6i51qI", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642490937-planet.png", + "wallpapertype": 3 + }, + { + "category": "Typography", + "description": "Loading ...... ", + "downloads": "13881", + "id": 43, + "image": "5kdBMGiW", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642490932-loading.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Color popping jet 🌈", + "downloads": "7164", + "id": 42, + "image": "iGXD8kwI", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642490923-jet.png", + "wallpapertype": 3 + }, + + { + "category": "Landscape", + "description": "Climb the hill 💙", + "downloads": "7916", + "id": 31, + "image": "4ldD89Fn", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642486325-ropeway.png", + "wallpapertype": 3 + }, + + + { + "category": "Minimal", + "description": "Dance with the cactus 🌵", + "downloads": "6398", + "id": 30, + "image": "6BiDZEWA", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642486262-catcus.png", + "wallpapertype": 3 + }, + + + { + "category": "Amoled", + "description": "Ball of fire 🔥", + "downloads": "20861", + "id": 29, + "image": "gLiRYKEk", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642486187-geometryball0001-0250.png", + "wallpapertype": 3 + }, + + { + "category": "Abstract", + "description": "The Watcher ⚡", + "downloads": "15915", + "id": 180, + "image": "rcGDtH4i", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1649662069-animation 470001-0250.png", + "wallpapertype": 3 + }, + { + "category": "Movies", + "description": "Banana 🍌", + "downloads": "30165", + "id": 179, + "image": "7f3Bsx60", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1649661826-minions.png", + "wallpapertype": 3 + }, + { + "category": "Nature", + "description": "Soothing of sea ⛵", + "downloads": "30550", + "id": 178, + "image": "3fabqR4C", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1649485172-sunset boat.png", + "wallpapertype": 3 + }, + { + "category": "Material", + "description": "Glide with the cards 💜", + "downloads": "12076", + "id": 177, + "image": "JcHhSQiF", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1649485125-trianglewave.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Keep calm and play 🎧", + "downloads": "23149", + "id": 176, + "image": "Ve8GXgvF", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1649322136-cassette.png", + "wallpapertype": 3 + }, + { + "category": "Anime", + "description": "Awakening the dragon 🔥", + "downloads": "24039", + "id": 175, + "image": "sLUpavix", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1649322130-dragonball.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "The Eighty\u0027s 🕺", + "downloads": "10381", + "id": 174, + "image": "UHF3y6E7", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1649137233-dotshigh.png", + "wallpapertype": 3 + }, + { + "category": "Amoled", + "description": "Raining triangles ⚡️", + "downloads": "16841", + "id": 231, + "image": "Wg13hPZz", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1655713095-triangs.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "A day in the desert 🌵", + "downloads": "8885", + "id": 230, + "image": "CATQUy6K", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1655713087-materialdesert.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Nature has it\u0027s own secrets 🍃", + "downloads": "27997", + "id": 229, + "image": "NfUDOu0K", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1655452812-fantasyland.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Catch with the lines 🤐", + "downloads": "7333", + "id": 228, + "image": "UNgGb3f6", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1655452805-justlines.png", + "wallpapertype": 3 + }, + { + "category": "Pattern", + "description": "Squares are on a trip 😉", + "downloads": "10223", + "id": 173, + "image": "fi49c06E", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1649137222-squares.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "Journey through the color valley 🌈", + "downloads": "26208", + "id": 172, + "image": "xNAUw4vm", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1648970974-plane.png", + "wallpapertype": 3 + }, + { + "category": "Material", + "description": "Rhythm of the circles 💜 ", + "downloads": "17511", + "id": 171, + "image": "582tpb6m", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1648711049-circlegrad.png", + "wallpapertype": 3 + }, + { + "category": "Minimal", + "description": "There\u0027s two sides for everything 😇", + "downloads": "12718", + "id": 170, + "image": "OqL53EQk", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1648711046-minimalsun.png", + "wallpapertype": 3 + }, + { + "category": "Landscape", + "description": "Spooky 🎃", + "downloads": "87567", + "id": 25, + "image": "BHMsxl02", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1639590645-halloween2021.png", + "wallpapertype": 3 + } +] \ No newline at end of file diff --git a/app/src/main/assets/Shift.json b/app/src/main/assets/Shift.json new file mode 100644 index 0000000..13215d9 --- /dev/null +++ b/app/src/main/assets/Shift.json @@ -0,0 +1,1037 @@ +[ + { + "category": "Geometry", + "description": "Harmony unfolds 🟦", + "downloads": "5555", + "id": 539, + "image": "48YVaEuq", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1705651353-cuberotate2k.png", + "wallpapertype": 2 + }, + { + "category": "Nature", + "description": "Day switch ☀️🌙", + "downloads": "3386", + "id": 535, + "image": "8J7czLSB", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1704703062-window sunrise.png", + "wallpapertype": 2 + }, + { + "category": "Minimal", + "description": "Looping to position 💫", + "downloads": "3050", + "id": 534, + "image": "pvYL4hFO", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1704703054-expandingcircle.png", + "wallpapertype": 2 + }, + { + "category": "Landscape", + "description": "Once upon a time in the woods 🌳", + "downloads": "2961", + "id": 530, + "image": "hnseFk3Z", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1703947630-home_bush_2k.png", + "wallpapertype": 2 + }, + { + "category": "Material", + "description": "Popping up 🎈", + "downloads": "2338", + "id": 529, + "image": "WOXEH5D4", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1703947537-popping_colors_2k.png", + "wallpapertype": 2 + }, + { + "category": "Movies", + "description": "It\u0027s a warning 🦇", + "downloads": "9634", + "id": 525, + "image": "sZoI6gRf", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1702968393-bat signal.png", + "wallpapertype": 2 + }, + { + "category": "Material", + "description": "Shades shuffle fun begins 🎨", + "downloads": "2795", + "id": 524, + "image": "GeONUQ6J", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1702967787-circleshift.png", + "wallpapertype": 2 + }, + { + "category": "Pattern", + "description": "Feel the gentle shift 🍃", + "downloads": "4692", + "id": 521, + "image": "z9GA6cHW", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1702286051-cylinder2k.png", + "wallpapertype": 2 + }, + { + "category": "Material", + "description": "Rising sun ☀️", + "downloads": "2985", + "id": 520, + "image": "rwi1MSsY", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1702286038-raising sun.png", + "wallpapertype": 2 + }, + { + "category": "Superheroes", + "description": "I am Ironman 💪🏻", + "downloads": "1326", + "id": 703, + "image": "ICzHuLJP", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1732780381-ironman neon_2k.png", + "wallpapertype": 2 + }, + + { + "category": "Minimal", + "description": "Tower house 🗼", + "downloads": "591", + "id": 698, + "image": "xsjW8gvY", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1731915691-tower_2k.png", + "wallpapertype": 2 + }, + { + "category": "Nature", + "description": "Crayon Mountains Popping 🖍️", + "downloads": "674", + "id": 697, + "image": "t3mSRDCL", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1731915688-colour mountain_2k.png", + "wallpapertype": 2 + }, + { + "category": "Amoled", + "description": "Synth pyramid 📐", + "downloads": "1553", + "id": 693, + "image": "x38Pp6Vr", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1731050705-trineon_2k.png", + "wallpapertype": 2 + }, + { + "category": "Material", + "description": "Falling waves 🌊", + "downloads": "792", + "id": 692, + "image": "yYkH9Vq0", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1731050684-circle to layer_2k.png", + "wallpapertype": 2 + }, + { + "category": "Movies", + "description": "Darth Vader ⚡", + "downloads": "2206", + "id": 688, + "image": "ouPNjUaG", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1730105713-dark vader_2k.png", + "wallpapertype": 2 + }, + { + "category": "Minimal", + "description": "Boooo 👻", + "downloads": "1070", + "id": 687, + "image": "9uTM4ACd", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1730105705-Boo_2k.png", + "wallpapertype": 2 + }, + { + "category": "Miscellaneous", + "description": "Knock knock , Who is there ? 🧛", + "downloads": "1886", + "id": 683, + "image": "KO0uSwXC", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1729154624-opening door_2k.png", + "wallpapertype": 2 + }, + { + "category": "Miscellaneous", + "description": "Way to October vacation 🎃🏰 ", + "downloads": "889", + "id": 682, + "image": "JNEV0mit", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1729151449-haunted mansion_2k.png", + "wallpapertype": 2 + }, + { + "category": "Material", + "description": "Be precise as an arrow ▶️ ", + "downloads": "1534", + "id": 678, + "image": "L0bF283S", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1728292173-slidingtile_2k.png", + "wallpapertype": 2 + }, + { + "category": "Landscape", + "description": "Desert Shift 🌵☀️", + "downloads": "1361", + "id": 677, + "image": "S5dMltrq", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1728292118-desertdunes2K.png", + "wallpapertype": 2 + }, + { + "category": "Pattern", + "description": "The curves 😎", + "downloads": "2478", + "id": 673, + "image": "o6e9FsQv", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1727341664-curvedlines2k.png", + "wallpapertype": 2 + }, + { + "category": "Minimal", + "description": "Good old days 💾", + "downloads": "1559", + "id": 672, + "image": "lx845U6Q", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1727341650-pc2k.png", + "wallpapertype": 2 + }, + { + "category": "Superheroes", + "description": "Spidey zips down 🕸️", + "downloads": "3520", + "id": 668, + "image": "F8hIbuJ4", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1726475725-spidermanhanging2k.png", + "wallpapertype": 2 + }, + { + "category": "Pet", + "description": "Cutie Penguin 🐧", + "downloads": "1474", + "id": 667, + "image": "Tcntw8bH", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1726475712-penguinface2k.png", + "wallpapertype": 2 + }, + { + "category": "Anime", + "description": "⚡Thunder Breathing 1st form⚡", + "downloads": "3094", + "id": 663, + "image": "bAJ08nia", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1725522176-zenitsu_2k.png", + "wallpapertype": 2 + }, + { + "category": "Minimal", + "description": "Don a pair of Air Jordans 👟", + "downloads": "1921", + "id": 662, + "image": "OXSLmJtw", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1725522167-nike shoe_2k.png", + "wallpapertype": 2 + }, + { + "category": "Geometry", + "description": "Building blocks 🟪🟥", + "downloads": "1274", + "id": 658, + "image": "DmvYtg80", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1724667176-blocks2K.png", + "wallpapertype": 2 + }, + { + "category": "Material", + "description": "Pop and mix 🎉", + "downloads": "1549", + "id": 657, + "image": "7EmxM1jV", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1724667168-bubbles2K.png", + "wallpapertype": 2 + }, + { + "category": "Superheroes", + "description": "Wolverine ☠️", + "downloads": "4756", + "id": 653, + "image": "FYVlR1NU", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1723713273-wolverine2k.png", + "wallpapertype": 2 + }, + { + "category": "Material", + "description": "Jiggle Jiggle 🍬", + "downloads": "1994", + "id": 652, + "image": "LCc5pKIB", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1723713251-Gradientpalette2k.png", + "wallpapertype": 2 + }, + { + "category": "Minimal", + "description": "Any one can be a king 👑", + "downloads": "2395", + "id": 643, + "image": "fDpQxayu", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1722847957-chess2k.png", + "wallpapertype": 2 + }, + { + "category": "Pet", + "description": "Kitty gang 🐈🐾", + "downloads": "1439", + "id": 642, + "image": "MlpP4B0S", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1722847942-catpaw2K.png", + "wallpapertype": 2 + }, + { + "category": "Superheroes", + "description": "Deadpool and Wolverine 🔥", + "downloads": "6087", + "id": 638, + "image": "ncBUSZ2L", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1721896129-DeadpoolWolverine2K.png", + "wallpapertype": 2 + }, + { + "category": "Cityscape", + "description": "A new day begins 🪟", + "downloads": "2436", + "id": 637, + "image": "jIEJ9BA1", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1721896117-throughwindow1_2K.png", + "wallpapertype": 2 + }, + { + "category": "Minimal", + "description": "A summer morning 🏡", + "downloads": "2073", + "id": 633, + "image": "XFlIokSP", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1721032986-Dayflip2K.png", + "wallpapertype": 2 + }, + { + "category": "Space", + "description": "Saturn spins adorned with dazzling rings 🌌", + "downloads": "10756", + "id": 545, + "image": "H2aKjmDL", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1706514413-ringplanet_2k.png", + "wallpapertype": 2 + }, + { + "category": "Material", + "description": "Evolving circles ⭕", + "downloads": "7355", + "id": 544, + "image": "ZyDusM4P", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1706513923-circleblow_2k.png", + "wallpapertype": 2 + }, + { + "category": "Landscape", + "description": "Shifting Serenity Views 🏠", + "downloads": "2885", + "id": 540, + "image": "C8g7pe24", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1705651363-newlandscapehouse2k.png", + "wallpapertype": 2 + }, + + { + "category": "Amoled", + "description": "On Off 😎", + "downloads": "5914", + "id": 632, + "image": "QVtPCovm", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1721032969-onoff2K.png", + "wallpapertype": 2 + }, + { + "category": "Superheroes", + "description": "Hiding in the shadows 🦇", + "downloads": "7283", + "id": 621, + "image": "YXD8CmeA", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1720085732-batman_2k.png", + "wallpapertype": 2 + }, + + { + "category": "Minimal", + "description": "Rolling to destiny 🎱", + "downloads": "4790", + "id": 561, + "image": "qC4psWve", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1709273956-billiard2k.png", + "wallpapertype": 2 + }, + { + "category": "Amoled", + "description": "Petals jiggle in the breeze 🌸", + "downloads": "10406", + "id": 560, + "image": "bHiwXdo2", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1709273946-openflower2k.png", + "wallpapertype": 2 + }, + { + "category": "Minimal", + "description": "Day night shift ☀️🌕", + "downloads": "5157", + "id": 556, + "image": "Mlc9oRVH", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1708333651-sunturn.png", + "wallpapertype": 2 + }, + { + "category": "Typography", + "description": "Locked Unlocked 🔒🔓", + "downloads": "11009", + "id": 554, + "image": "Av4VI0qC", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1708332444-unlocked.png", + "wallpapertype": 2 + }, + { + "category": "Landscape", + "description": "Bright arid landscape 🌵", + "downloads": "3443", + "id": 550, + "image": "4aYWQKNS", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1707475758-desert2K.png", + "wallpapertype": 2 + }, + { + "category": "Geometry", + "description": "Rings align ⭕", + "downloads": "4777", + "id": 549, + "image": "pidgYrxB", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1707475745-loopsNew2K.png", + "wallpapertype": 2 + }, + + + + + + + { + "category": "Abstract", + "description": "Orange slices 🟠", + "downloads": "2433", + "id": 606, + "image": "1PtmB6il", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1717395427-orange circle_2k0001-0050.png", + "wallpapertype": 2 + }, + { + "category": "Pattern", + "description": "Falling stripes 🎨", + "downloads": "2070", + "id": 605, + "image": "tfs0AY7l", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1717395410-linerundown_2k.png", + "wallpapertype": 2 + }, + { + "category": "Anime", + "description": "Itadori x Sukuna 🔥", + "downloads": "8954", + "id": 601, + "image": "lrUWHFvP", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1716449636-itadoriandzukuna.png", + "wallpapertype": 2 + }, + { + "category": "Pattern", + "description": "Navigate the maze 🧩", + "downloads": "3419", + "id": 600, + "image": "DxkCl7iq", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1716449627-rectanglelines.png", + "wallpapertype": 2 + }, + { + "category": "Minimal", + "description": "Landscape shift 🖼️", + "downloads": "2727", + "id": 596, + "image": "KtN2sG5w", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1715584110-framezoom2k.png", + "wallpapertype": 2 + }, + { + "category": "Typography", + "description": "Good Vibes Only 😁", + "downloads": "2733", + "id": 595, + "image": "zO5ksKJV", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1715584105-goodvibeonly2k.png", + "wallpapertype": 2 + }, + { + "category": "Gaming", + "description": "Gameboy inside out 🪛", + "downloads": "6698", + "id": 591, + "image": "QjGb2vy5", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1714639479-gameboy_2k.png", + "wallpapertype": 2 + }, + { + "category": "Minimal", + "description": "3 Body Problem ☀️☀️☀️", + "downloads": "2845", + "id": 590, + "image": "zdQN8P3W", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1714639448-3 body problem_2k.png", + "wallpapertype": 2 + }, + { + "category": "Minimal", + "description": "Spring call 🌸", + "downloads": "3753", + "id": 586, + "image": "pL0kMy1C", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1713773909-flowerbranch.png", + "wallpapertype": 2 + }, + { + "category": "Amoled", + "description": "Glitch in existence 🪩", + "downloads": "6597", + "id": 585, + "image": "WeAF2qJm", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1713773884-glitch man0001-0035.png", + "wallpapertype": 2 + }, + { + "category": "Cityscape", + "description": "Pop into existence 🏘", + "downloads": "1301", + "id": 581, + "image": "6r81al3P", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1712997465-risingtown2k.png", + "wallpapertype": 2 + }, + { + "category": "Material", + "description": "Form the Palette 🎨", + "downloads": "2866", + "id": 580, + "image": "0sXSAFkj", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1712997453-linesmmove2k.png", + "wallpapertype": 2 + }, + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + "category": "Geometry", + "description": "Growing bubbles 🫧", + "downloads": "2656", + "id": 519, + "image": "WEf1JHFZ", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1702285284-growingbubble.png", + "wallpapertype": 2 + }, + + + + + + + + + + + + + + + + + + + + + + + + { + "category": "Material", + "description": "Sliding square ⏹", + "downloads": "5871", + "id": 518, + "image": "hOGIEMqX", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1702285263-sliding_square.png", + "wallpapertype": 2 + }, + + + + + + + + + + + + + + + + + + + + + + + { + "category": "Geometry", + "description": "Intertwined cubes ", + "downloads": "5396", + "id": 517, + "image": "Bc20n43T", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1702285251-roundedcube2k.png", + "wallpapertype": 2 + }, + { + "category": "Nature", + "description": "Let it bloom 💮", + "downloads": "3282", + "id": 516, + "image": "W1XC0yrb", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1702285229-flower2K.png", + "wallpapertype": 2 + }, + + + + + + + + + + + + + + + + { + "category": "Miscellaneous", + "description": "Swirl into the green void ", + "downloads": "5267", + "id": 515, + "image": "kPY95NQo", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1702285213-lays2K.png", + "wallpapertype": 2 + }, + { + "category": "Amoled", + "description": "Windows 7", + "downloads": "758", + "id": 702, + "image": "fGSUEenP", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1732780372-windows 7_2k.png", + "wallpapertype": 2 + }, + { + "category": "Material", + "description": "Sticky notes 📒", + "downloads": "2103", + "id": 620, + "image": "YJD7LnCX", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1720085704-square2k.png", + "wallpapertype": 2 + }, + { + "category": "Amoled", + "description": "Get scared 🙀", + "downloads": "2846", + "id": 616, + "image": "rZLjIRhE", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1719215549-glitchskull2K.png", + "wallpapertype": 2 + }, + { + "category": "Landscape", + "description": "The switch 🌵", + "downloads": "1847", + "id": 615, + "image": "vD7QEWG1", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1719215546-desertdune2K.png", + "wallpapertype": 2 + }, + { + "category": "Superheroes", + "description": "Spidey sense ⚡", + "downloads": "9491", + "id": 611, + "image": "lgX9Ano5", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1718267939-spiderman_2k.png", + "wallpapertype": 2 + }, + { + "category": "Minimal", + "description": "Happy for the sunlight ☀️", + "downloads": "1836", + "id": 610, + "image": "tkKnUw0l", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1718267930-sunlight plant_2k.png", + "wallpapertype": 2 + }, + { + "category": "Minimal", + "description": "Morning brew ☕️", + "downloads": "5436", + "id": 576, + "image": "VUPXYARh", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1711962964-coffeecup2k.png", + "wallpapertype": 2 + }, + { + "category": "Geometry", + "description": "Shifting to place", + "downloads": "3785", + "id": 575, + "image": "58hJ1Nr6", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1711962940-cubes2k0001-0050.png", + "wallpapertype": 2 + }, + { + "category": "Space", + "description": "You never know what is on other side 🌌", + "downloads": "8644", + "id": 571, + "image": "7BbSo6rh", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1711087406-blackHole2K_new.png", + "wallpapertype": 2 + }, + { + "category": "Amoled", + "description": "Choose your card ♥️♣️♦️♠️", + "downloads": "7814", + "id": 570, + "image": "1KzDkET8", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1711087377-cards2K.png", + "wallpapertype": 2 + }, + { + "category": "Anime", + "description": "Feel pain, contemplate pain, accept pain, know pain 🍃", + "downloads": "15354", + "id": 566, + "image": "TDObkX4i", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1710142587-pain2k.png", + "wallpapertype": 2 + }, + { + "category": "Pattern", + "description": "Drops that freeze in time 💧", + "downloads": "2622", + "id": 565, + "image": "q04esM6p", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1710142568-cutlines2k.png", + "wallpapertype": 2 + }, + { + "category": "Minimal", + "description": "Christmas tree brings warmth and joy 🎄❄️", + "downloads": "306", + "id": 708, + "image": "91FmL0Jl", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1733734622-christmas tree_2k.png", + "wallpapertype": 2 + }, + { + "category": "Miscellaneous", + "description": "Santa 🎅🏻", + "downloads": "260", + "id": 707, + "image": "ajNEZA8D", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1733734615-santa_2k.png", + "wallpapertype": 2 + }, + { + "category": "Abstract", + "description": "Wafer hues 🔴🟡", + "downloads": "3539", + "id": 514, + "image": "Sf1wL0E6", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1702285186-yellowlayer.png", + "wallpapertype": 2 + } +] \ No newline at end of file diff --git a/app/src/main/assets/Trending.json b/app/src/main/assets/Trending.json new file mode 100644 index 0000000..97928e9 --- /dev/null +++ b/app/src/main/assets/Trending.json @@ -0,0 +1,4834 @@ +[ + { + "category": "Nature", + "description": "Nearing the end of day ⛵", + "downloads": "15541", + "id": 421, + "image": "GqeN0UxH", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1683189872-boatshadow_2k.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Ripples ⭕", + "downloads": "62835", + "id": 197, + "image": "xtrPQmnY", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1651467012-drops.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Travel through time ⏳", + "downloads": "23381", + "id": 319, + "image": "lzmt7owB", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1665764832-rgbfinal.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Silky waves 🌊", + "downloads": "16259", + "id": 406, + "image": "KG3R7iX4", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1679896671-waves.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Land of dreams 🌳", + "downloads": "40565", + "id": 235, + "image": "jkobCr5V", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1656235975-butterflygreen.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Life a flying plane with ever changing backdrop colors ✈️", + "downloads": "11866", + "id": 481, + "image": "P8S2Gopf", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1696496990-planeexpand2K.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Keep smiling until it\u0027s clear 📷", + "downloads": "13533", + "id": 446, + "image": "7iG4Usoh", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "camerafocus2k7676.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Eat drink and be scary 🎃", + "downloads": "21949", + "id": 324, + "image": "UXmzNlDI", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1666457699-cementry330.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Kinda spooky 🦇", + "downloads": "26097", + "id": 284, + "image": "i6GlZz4g", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1662879788-spookyforest.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Blazing through the tunnel ⚡", + "downloads": "39397", + "id": 234, + "image": "Fa8NqnjJ", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1656235972-circletunnel23.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "Breathing cubes 🟩", + "downloads": "17639", + "id": 375, + "image": "YGXbzLM1", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1672397960-cubesmerge.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Hide and seek with the cats 😸", + "downloads": "18342", + "id": 156, + "image": "BLck8Qrx", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1647760632-cats.png", + "wallpapertype": 0 + }, + { + "category": "Anime", + "description": "Pokeball ❤️", + "downloads": "29725", + "id": 130, + "image": "gf98ksKa", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645689676-pokeball0001-0100.png", + "wallpapertype": 0 + }, + { + "category": "Dope", + "description": "The Eighty\u0027s Vibe 🕺 ", + "downloads": "16953", + "id": 160, + "image": "9hoTBQZL", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1648112112-animation380001-0120.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "I\u0027m in love with the grass 🌳", + "downloads": "16630", + "id": 161, + "image": "uHybICne", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1648112120-grasscutter0001-0310.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "A day in the desert 🌵", + "downloads": "8885", + "id": 230, + "image": "CATQUy6K", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1655713087-materialdesert.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "The Watcher ⚡", + "downloads": "15915", + "id": 180, + "image": "rcGDtH4i", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1649662069-animation 470001-0250.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Shades of sun 🕶", + "downloads": "8436", + "id": 232, + "image": "Xwz4GZqr", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1655976648-colour_1.png", + "wallpapertype": 0 + }, + { + "category": "Typography", + "description": "Taking rest is also being productive 💤", + "downloads": "20668", + "id": 162, + "image": "M8qTZGFQ", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1648195234-restisproductive.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Trying to connect 😉", + "downloads": "9309", + "id": 221, + "image": "ZUkGF4Ez", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1654668052-roundewave.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "It\u0027s fading 🤞🏻", + "downloads": "6495", + "id": 256, + "image": "beVy1x6O", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1659335301-fadinglines1.png", + "wallpapertype": 0 + }, + { + "category": "Material", + "description": "Rhythm of the circles 💜 ", + "downloads": "17511", + "id": 171, + "image": "582tpb6m", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1648711049-circlegrad.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Hilltop holidays 🖖🏻", + "downloads": "5709", + "id": 271, + "image": "bC9oJ78l", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1660751887-Hillhouse.png", + "wallpapertype": 0 + }, + { + "category": "Anime", + "description": "You are already under my genjutsu 🥷🏻", + "downloads": "133346", + "id": 400, + "image": "I9rPTLMw", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1678429646-itachiuchiha.png", + "wallpapertype": 0 + }, + { + "category": "Anime", + "description": "Itachi Uchiha 🔥", + "downloads": "47422", + "id": 573, + "image": "EuWIeJiO", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1711352204-itachi_moon_2K.png", + "wallpapertype": 0 + }, + { + "category": "Anime", + "description": "Any technique is worthless before my eyes ⚔️", + "downloads": "113536", + "id": 303, + "image": "o8O5Zjg9", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1664871083-itachiuchiha2.png", + "wallpapertype": 0 + }, + { + "category": "Cityscape", + "description": "A rainy night ☔", + "downloads": "68432", + "id": 416, + "image": "ZcCYk74p", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1681804057-rainingstreet.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Through the window night whispers its secrets 🪟", + "downloads": "31153", + "id": 592, + "image": "x1sAjaXT", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1714984080-outside window view.png", + "wallpapertype": 0 + }, + { + "category": "Space", + "description": "There\u0027s a way out 🌌", + "downloads": "40457", + "id": 443, + "image": "dgHwYSLM", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1688456077-bk2k.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Eternal hues dance in the void\u0027s embrace 🎗️", + "downloads": "32127", + "id": 501, + "image": "AH5k0P6g", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1699344949-gradstroke_2k.png", + "wallpapertype": 0 + }, + { + "category": "Retro", + "description": "Evening in the garage 🔧", + "downloads": "32082", + "id": 457, + "image": "irEbHd9Y", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1691565326-street2k.png", + "wallpapertype": 0 + }, + { + "category": "Anime", + "description": "Autonomous Ultra Instinct 🔥", + "downloads": "20256", + "id": 655, + "image": "9f0Cepkb", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1724059272-gokuultrainstinct2k.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Thunder ⚡", + "downloads": "31019", + "id": 451, + "image": "iBepAVKk", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1690361455-lightning2K.png", + "wallpapertype": 0 + }, + { + "category": "Movies", + "description": "EVE 💓", + "downloads": "22128", + "id": 588, + "image": "IgLHh1Sk", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1714060538-eve_2K.png", + "wallpapertype": 0 + }, + { + "category": "Space", + "description": "Imagination is the limit 🧑🏻‍🚀🎈", + "downloads": "28778", + "id": 469, + "image": "0DaVbFgs", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1694076934-flying astronaut.png", + "wallpapertype": 0 + }, + { + "category": "Anime", + "description": "When in doubt nap it out - Snorlax\u0027s motto 💤", + "downloads": "23170", + "id": 473, + "image": "kDPZBVYW", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1694594155-snorlax.png", + "wallpapertype": 0 + }, + { + "category": "Movies", + "description": "Peanuts Snoopy ✈️", + "downloads": "21721", + "id": 479, + "image": "9X65KbOj", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1695799095-snoopy.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Ring Planet 🌌", + "downloads": "47734", + "id": 285, + "image": "FrinSg37", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1662879807-saturn1.png", + "wallpapertype": 0 + }, + { + "category": "Movies", + "description": "Hiding in the shadows 🦇 Waiting to strike ⚡", + "downloads": "23746", + "id": 455, + "image": "wfUACS1t", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1690956632-batcave_2k.png", + "wallpapertype": 0 + }, + { + "category": "Movies", + "description": "Stay on target 💫🛸", + "downloads": "20936", + "id": 496, + "image": "CoeM1An7", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1697521561-starfighter starwars_2k.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "Dancing with the flow 🙄", + "downloads": "26572", + "id": 424, + "image": "P1h65qJA", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1684046241-red_black_2k_vbr2.png", + "wallpapertype": 0 + }, + { + "category": "Space", + "description": "Vroooom 🚀", + "downloads": "26702", + "id": 422, + "image": "9mWULPBx", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1683189916-rocket.png", + "wallpapertype": 0 + }, + { + "category": "Movies", + "description": "Welcome to Arrakis ☀️", + "downloads": "17919", + "id": 563, + "image": "m31EhtRz", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1709535876-dune0001-0045.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Rise and grind 🍵", + "downloads": "17604", + "id": 572, + "image": "JOuItFm3", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1711352182-coffee_cup_2K.png", + "wallpapertype": 0 + }, + { + "category": "Retro", + "description": "Switch of an era 🎶", + "downloads": "21591", + "id": 582, + "image": "YKog49vH", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1713257189-ipod_2k.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Quack quack 🦆", + "downloads": "23616", + "id": 531, + "image": "blzMJ4Ip", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1704208911-duck_2k.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Never ending ☀️", + "downloads": "21092", + "id": 583, + "image": "rbA5MsC2", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1713257200-retro sun rally.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "Streaks through the cracks 🔦", + "downloads": "42679", + "id": 346, + "image": "2YdFqCme", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1669098067-bleedinglight.png", + "wallpapertype": 0 + }, + { + "category": "Anime", + "description": "It\u0027s my turn 🔥", + "downloads": "92347", + "id": 224, + "image": "K6ySTF5k", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1654933736-gokuhair.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Make a wish 💫", + "downloads": "31632", + "id": 413, + "image": "v48jd1uq", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1681201758-mountainskyview.png", + "wallpapertype": 0 + }, + { + "category": "Movies", + "description": "Beginning of the Hawkin\u0027s curse 🎃", + "downloads": "96580", + "id": 218, + "image": "VKpGv0RL", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1654161170-vecnahouse.png", + "wallpapertype": 0 + }, + { + "category": "Anime", + "description": "Show me where is the enemy ", + "downloads": "44977", + "id": 322, + "image": "25QVbcyG", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1666073442-erenyeager.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Fading ghost 👻", + "downloads": "29733", + "id": 418, + "image": "yiYvJB7c", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1682493720-movingghost_2k.png", + "wallpapertype": 0 + }, + { + "category": "Movies", + "description": "Glitch in the matrix 💾", + "downloads": "37534", + "id": 350, + "image": "p3u7Osyn", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1669615907-matrix.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "With me comes the tail ✈️", + "downloads": "33202", + "id": 386, + "image": "bMOCTl9N", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1675674061-planetail.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "They glow 🌙", + "downloads": "19554", + "id": 552, + "image": "CkdnroBR", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1707727905-firefilebottle.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Pulses to infinity ♾️", + "downloads": "17887", + "id": 558, + "image": "B2mpiW7j", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1708590245-lineexpand360.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Love for RGB ⌨️", + "downloads": "39427", + "id": 320, + "image": "5ZVq6Prd", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1665764837-keys50.png", + "wallpapertype": 0 + }, + { + "category": "Gaming", + "description": "Fallen hero 😃", + "downloads": "28919", + "id": 394, + "image": "D4dkOoLq", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1677218914-among us_2k.png", + "wallpapertype": 0 + }, + { + "category": "Dope", + "description": "Neon Tunnel ⚡", + "downloads": "15158", + "id": 635, + "image": "hCUj7aN6", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1721293058-tunetunnel_2k0001-0300.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Loops like domino ♦️", + "downloads": "17722", + "id": 541, + "image": "QMpWG2bY", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1705999547-morf lines.png", + "wallpapertype": 0 + }, + { + "category": "Anime", + "description": "Domain Expansion 🤞🏻", + "downloads": "55327", + "id": 255, + "image": "PiQtZJen", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1658994833-gojo1.png", + "wallpapertype": 0 + }, + { + "category": "Space", + "description": "Am I on the right planet 🧑🏻‍🚀", + "downloads": "29524", + "id": 381, + "image": "iQW8dSPH", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1674109405-Astrounaut on planet_2k.png", + "wallpapertype": 0 + }, + { + "category": "Retro", + "description": "Good old days 💻", + "downloads": "14702", + "id": 622, + "image": "N9KsFl3O", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1720429136-windowsxp2K.png", + "wallpapertype": 0 + }, + { + "category": "Movies", + "description": "Charting the unknown one map at a time 🧭", + "downloads": "18324", + "id": 509, + "image": "Q0igIXVA", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1700978539-compass.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Colourful memories of old school 📼", + "downloads": "32147", + "id": 349, + "image": "HVKo2fx5", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1669615899-cassetterainbow.png", + "wallpapertype": 0 + }, + { + "category": "Miscellaneous", + "description": "Pop out Pop in ⚽", + "downloads": "16221", + "id": 567, + "image": "TZUgQRtJ", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1710404359-cylinderballs2k.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Ocean planet 😁", + "downloads": "32765", + "id": 343, + "image": "ToXANS7D", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1668584406-planetinocean.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Atoms surfed the waves of fun ⚛️", + "downloads": "16729", + "id": 546, + "image": "JaRcbEiC", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1706956200-wavedots_2k.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "Harnessing the power ⚛️", + "downloads": "16134", + "id": 551, + "image": "DrNBnY6z", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1707727879-spherical2K.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Retro vibes ⚡", + "downloads": "16840", + "id": 523, + "image": "LyfTNpZr", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1702654981-neon_lines_2k.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Curved glass ✨", + "downloads": "14165", + "id": 602, + "image": "bnSzZRO0", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1716799592-rainbow_2k0001-0200.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Swirling into the hearts ➰", + "downloads": "20209", + "id": 448, + "image": "NWjAcdlJ", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1689838759-gradientloop2K.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Blue Planet 🔵", + "downloads": "95474", + "id": 194, + "image": "osJuAmep", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1651049003-planet007.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Red Radiance ⭕", + "downloads": "19173", + "id": 460, + "image": "D0ZKbEIl", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1692167428-energyfield2k.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Colors in a mesmerizing dance 🎨", + "downloads": "17455", + "id": 483, + "image": "4DHhiegM", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1696497611-gradlines2k.png", + "wallpapertype": 0 + }, + { + "category": "Typography", + "description": "Apple \u0027s Hello 👋🏻", + "downloads": "19111", + "id": 458, + "image": "HumJo4BE", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1691565388-hello2k.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "The pop waves 🌊", + "downloads": "20111", + "id": 445, + "image": "WgRq68CP", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1689149442-waves.png", + "wallpapertype": 0 + }, + { + "category": "Space", + "description": "Star gazing 💫", + "downloads": "13899", + "id": 593, + "image": "fN82DWoX", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1714984090-star gazing astronaut.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Sunlit meadows 🌲", + "downloads": "18514", + "id": 464, + "image": "1bjIgeUr", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1692776611-vectorbirdscenery.png", + "wallpapertype": 0 + }, + { + "category": "Retro", + "description": "Record Play Repeat 🎤", + "downloads": "14541", + "id": 568, + "image": "69vNVpUj", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1710404402-TeenageEngineering2K.png", + "wallpapertype": 0 + }, + { + "category": "Gaming", + "description": "Mario time 💥", + "downloads": "18024", + "id": 470, + "image": "0hzyAtom", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1694076946-supermario2K.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Pencil Pen and Rubber", + "downloads": "13329", + "id": 607, + "image": "BIZVzLhf", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1717667297-computerportal2k.png", + "wallpapertype": 0 + }, + { + "category": "Dope", + "description": "Quantum engine ⚡", + "downloads": "18174", + "id": 463, + "image": "LCYPha4j", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1692776605-cubeneon.png", + "wallpapertype": 0 + }, + { + "category": "Dope", + "description": "Lost in luminescence 🟩", + "downloads": "16625", + "id": 495, + "image": "mC6WLnhq", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1697521556-cyberally_2k.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Desert nights where stars write their own stories 🌵", + "downloads": "17040", + "id": 476, + "image": "3T8jLvog", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1695198738-pyramid star gaze.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Christmas time ❄️", + "downloads": "26055", + "id": 371, + "image": "59PsapVJ", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1671781190-lightsetchristmas_2k .png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "A feline farewell to daylight ☀️🐈", + "downloads": "12906", + "id": 598, + "image": "V7m6i1fw", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1715848167-cat_2k.png", + "wallpapertype": 0 + }, + { + "category": "Gaming", + "description": "Childhood memories 🕹️", + "downloads": "19855", + "id": 431, + "image": "jDKXMEw2", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1685514859-gameboy_2k.png", + "wallpapertype": 0 + }, + { + "category": "Movies", + "description": "Spider Glitch 🕸️", + "downloads": "11607", + "id": 660, + "image": "qducAoan", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1724917214-spiderlogoglitch_2k.png", + "wallpapertype": 0 + }, + { + "category": "Material", + "description": "Melting into the backdrops🔵", + "downloads": "13878", + "id": 557, + "image": "L3dv7UKW", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1708590234-layerlava.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Seaside bliss framed in sunlight 🌊", + "downloads": "14632", + "id": 522, + "image": "xXNtEKmv", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1702654961-horizontal_landscape_2k.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Energy orb ⚡", + "downloads": "25517", + "id": 352, + "image": "OloNzAQy", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1669881138-scifireactor.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Nostalgia meets sound 🎶", + "downloads": "15172", + "id": 498, + "image": "n9VhFq3s", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1698050834-twoshaderecordplayer2k.png", + "wallpapertype": 0 + }, + { + "category": "Cityscape", + "description": "Soul of the street painted in rain drops", + "downloads": "12640", + "id": 578, + "image": "2qtG1ZMH", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1712388148-rainingsidewalk2k.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Rise against the wind 🪁", + "downloads": "11621", + "id": 613, + "image": "Rw3mt7SW", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1718609085-kitevalley2K.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "stripes 🔻", + "downloads": "18209", + "id": 433, + "image": "1FACemca", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1686295552-steplines2k.png", + "wallpapertype": 0 + }, + { + "category": "Superheroes", + "description": "This looks like a job for Superman 💪", + "downloads": "10964", + "id": 640, + "image": "EfkJFC2q", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1722262750-suoerman2k.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Edge lighting 🌈", + "downloads": "11309", + "id": 617, + "image": "3MqLDHgV", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1719476474-rgb frame.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Boo boo 👻", + "downloads": "23431", + "id": 368, + "image": "2G49hE5K", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1670919440-pixelghost2k.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "The dead shall raise 💀", + "downloads": "26938", + "id": 326, + "image": "YBsEl3bd", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1666766418-walkingskeleton.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Neon tunnel ⚡", + "downloads": "14192", + "id": 497, + "image": "kVy928fx", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1698050818-room2K.png", + "wallpapertype": 0 + }, + { + "category": "Cityscape", + "description": "Cruising through the street 🚗", + "downloads": "19331", + "id": 409, + "image": "CegovyQJ", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1680509310-neoncity.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Decked boat dancing on ripples 🛶", + "downloads": "13655", + "id": 504, + "image": "OrfjM83b", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1700211939-boatreflection2k.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Every petal tells a story 🌸", + "downloads": "13810", + "id": 500, + "image": "rNv4fW6u", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1699344917-flowerbranch_2k.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Enter the neon-lit future where beats and bytes collide ⚡", + "downloads": "14666", + "id": 472, + "image": "7t3pUOLY", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1694590930-retrodot_2k.png", + "wallpapertype": 0 + }, + { + "category": "Space", + "description": "Spaceship on a joy ride 🚀", + "downloads": "12519", + "id": 537, + "image": "mMaCO5Dp", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1704961330-vector planet.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Still a long way to go 🚶🏻‍♀️", + "downloads": "11983", + "id": 547, + "image": "JTL6lDty", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1706956207-long way_2k.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Propelling the colors 🌈", + "downloads": "10949", + "id": 587, + "image": "lhvpF8Rx", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1714060447-propeller_2K.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Northern lights ☁", + "downloads": "20410", + "id": 378, + "image": "MDuYI51V", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1673154571-lines.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Magical Forest 🌙", + "downloads": "10444", + "id": 603, + "image": "3ZRN94cV", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1716827412-forestbrook2K.png", + "wallpapertype": 0 + }, + { + "category": "Movies", + "description": "The seeds of the sacred tree 🍃", + "downloads": "21113", + "id": 369, + "image": "q7WLCVaM", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1670919451-avatar0601-1200.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Everything is energy ⚡", + "downloads": "35593", + "id": 258, + "image": "IN0nhgL4", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1659593329-circuit.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Neon drops 🌟", + "downloads": "19901", + "id": 377, + "image": "b1vrFOlV", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1673154563-raindrops.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Planets doing its job 🌍", + "downloads": "16227", + "id": 425, + "image": "kifBrWvn", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1684046356-solar_system_orange_2k.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Make a wish 🌠", + "downloads": "40387", + "id": 243, + "image": "cLVaypI2", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1657291661-shootingstar.png", + "wallpapertype": 0 + }, + { + "category": "Dope", + "description": "Waves within waves 😁", + "downloads": "18588", + "id": 389, + "image": "R84zOhsM", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1676443809-circlestripes2K.png", + "wallpapertype": 0 + }, + { + "category": "Typography", + "description": "Dream it do it 🦄", + "downloads": "12236", + "id": 503, + "image": "oGkTW15v", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1700212340-dream.png", + "wallpapertype": 0 + }, + { + "category": "Travel", + "description": "As the landscape unfolds outside the window 🚊", + "downloads": "14730", + "id": 440, + "image": "mqMsnKui", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1687675294-train doorwindow2k.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Era of gamers 🎮", + "downloads": "14820", + "id": 437, + "image": "bVjyp4hr", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1686986248-tv2k.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Be calm as koi 🐟", + "downloads": "9404", + "id": 618, + "image": "BeIJvh3T", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1719476480-koi fish.png", + "wallpapertype": 0 + }, + + { + "category": "Dope", + "description": "Frames of reality 🔮", + "downloads": "15110", + "id": 412, + "image": "XJK8uRe4", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1681201744-frame2k.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Countryside 🏕", + "downloads": "22600", + "id": 306, + "image": "Pl1uckY0", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1665245461-nightgrass1.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Window of time 🪟", + "downloads": "17742", + "id": 372, + "image": "oPxUq89D", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1671781199-frame.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Sky shows the way ✨", + "downloads": "13406", + "id": 434, + "image": "Qirg9kAw", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1686295557-lighthouse2k.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Comfort of home 🏡", + "downloads": "50495", + "id": 208, + "image": "nG0Qs51U", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1652767860-livingroom.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Air drops 🪂", + "downloads": "22613", + "id": 301, + "image": "Bdq0uYwg", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1664526005-forestairdrop.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Winter embrace with snowflakes as delicate as whispered dreams ❄️☃️", + "downloads": "10265", + "id": 513, + "image": "NMmZzpDI", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1701677478-colourful snowfall.png", + "wallpapertype": 0 + }, + { + "category": "Material", + "description": "Rotary cards 🎴", + "downloads": "47420", + "id": 212, + "image": "a0TEy1IM", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1653291520-roundedsquare2.png", + "wallpapertype": 0 + }, + { + "category": "Dope", + "description": "Analog warmth in a digital world 🎧", + "downloads": "8205", + "id": 623, + "image": "miEeOcTs", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1720429273-recordplayer2K.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "A sunny beach day 🏖️", + "downloads": "9754", + "id": 536, + "image": "cnyDCeda", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1704961259-beach guard.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Raining colors 🌧", + "downloads": "34561", + "id": 241, + "image": "yWAg8i4Q", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1657031337-rainbowrain.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Home sweet home 🌎", + "downloads": "65003", + "id": 185, + "image": "SXkQLevp", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1650263209-solarsystem30.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Warm beginning 🌄", + "downloads": "54617", + "id": 198, + "image": "6M4yxFB2", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1651467020-birdsflying.png", + "wallpapertype": 0 + }, + { + "category": "Dope", + "description": "Wormhole 🚀", + "downloads": "19846", + "id": 323, + "image": "g3SMjGI8", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1666357791-looper51.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Melodic Vibrating Wires 🎸", + "downloads": "11127", + "id": 467, + "image": "oVmTNSUe", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1693380422-guitar.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "✖️⭕", + "downloads": "20094", + "id": 321, + "image": "kfISWXG6", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1666073451-glitchface.png", + "wallpapertype": 0 + }, + { + "category": "Material", + "description": "Sliding cards 🎴", + "downloads": "11580", + "id": 452, + "image": "QncwPgzG", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1690361489-jumping_shade_2k.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Ace Burner ♠️♥️♦️♣️", + "downloads": "7229", + "id": 670, + "image": "bHAg0sop", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1726732728-card on fire_2k.png", + "wallpapertype": 0 + }, + { + "category": "Dope", + "description": "Trapped in unknown 💢 ", + "downloads": "13065", + "id": 419, + "image": "Qrvs6PAb", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "lineneon.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Cubes Glide on Breeze 🟨", + "downloads": "9265", + "id": 528, + "image": "PpxmrE8C", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1703667173-cube cylinder_2k.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Night brings fear 🏰", + "downloads": "28856", + "id": 253, + "image": "nAKjYWZ3", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1658655062-nightcatle.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Looking for the prey 🦅", + "downloads": "17104", + "id": 344, + "image": "ILohYjwu", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1668584410-treesabove.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Up up and away ✈", + "downloads": "17367", + "id": 339, + "image": "sxVPWklG", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1667900451-planewindow.png", + "wallpapertype": 0 + }, + { + "category": "Material", + "description": "Embracing the subtle artistry of shades 🟠🟡🟢🔵", + "downloads": "7843", + "id": 597, + "image": "GnYQwXOT", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1715848159-halfcircle_2k.png", + "wallpapertype": 0 + }, + { + "category": "Pixel", + "description": "Torii ⛩", + "downloads": "17351", + "id": 338, + "image": "VYeXZAd4", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1667900441-japanesearch.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Fusion 🌀", + "downloads": "11282", + "id": 439, + "image": "KAVzISrB", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1687675278-test2k.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Circles shift into places", + "downloads": "7883", + "id": 577, + "image": "rekDpLvG", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1712388120-move2k.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Flowing qubits 💡", + "downloads": "11363", + "id": 436, + "image": "72WQsAgc", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1686986110-dotlayer2k.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Gentle breezes and the turning of blades 🍃", + "downloads": "8983", + "id": 508, + "image": "ysKJIc51", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1700978311-windmill valley.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Gentleness of evening wind 🍃", + "downloads": "13770", + "id": 387, + "image": "o28DawGu", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1675674075-tricutreevalley.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Bridge through the mist 🌳", + "downloads": "6774", + "id": 645, + "image": "nFAQaw0h", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1723108025-forest waterfalls_2k.png", + "wallpapertype": 0 + }, + { + "category": "Material", + "description": "Gradient Hue 🔴", + "downloads": "6912", + "id": 634, + "image": "5LFc76e2", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1721293053-gradient timerlinear_2k.png", + "wallpapertype": 0 + }, + { + "category": "Dope", + "description": "Sprint through cyber tunnel ⚡", + "downloads": "14289", + "id": 374, + "image": "HsjFeWJv", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1672397952-tunnel2K.png", + "wallpapertype": 0 + }, + { + "category": "Space", + "description": "In search for life 🚀", + "downloads": "15434", + "id": 347, + "image": "zRWeQaAj", + "pro": 99, + "resolution": "2160 x 3840", + "thumbnail": "1669098076-exoplanet.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Lines of music 🎸", + "downloads": "10193", + "id": 454, + "image": "fayjwWkG", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1690956236-two shade record player_2k.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Pinging for the enemies 🪖", + "downloads": "6701", + "id": 644, + "image": "FJLr4j6T", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1723108060-radar_2k.png", + "wallpapertype": 0 + }, + { + "category": "Material", + "description": "Pebble waves 🌌", + "downloads": "16096", + "id": 333, + "image": "f0tcegFG", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1667557680-chips.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Sponge loops 🧽", + "downloads": "9122", + "id": 478, + "image": "vWLsGClJ", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1695799085-gradienttube_2k.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "A captivating view that holds our gaze refusing to let go 🏞️", + "downloads": "10129", + "id": 449, + "image": "akJXn52S", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1689839410-cloudvalley2K.png", + "wallpapertype": 0 + }, + { + "category": "Dope", + "description": "The core ⚡", + "downloads": "6344", + "id": 665, + "image": "si2RCIbU", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1725870751-hexogen_2k.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Escaping the chores of life🧳", + "downloads": "72644", + "id": 165, + "image": "1b9Enzr8", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1648446795-van0001-0250.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Strings of reality ⭕", + "downloads": "22984", + "id": 264, + "image": "aiVWKcY1", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1660118383-contourarray.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Gamers paradise 🎮", + "downloads": "67122", + "id": 169, + "image": "ZNIgCsTj", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1648711035-pssyarray0.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Being minimal 😉", + "downloads": "32791", + "id": 223, + "image": "h4Z5OQDq", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1654933732-snowfall.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "A tapestry of seamless blending 🟥🟧🟨", + "downloads": "7989", + "id": 512, + "image": "bJs7kS5q", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1701677467-square expanition flip.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Messing around with lines 🌈", + "downloads": "13971", + "id": 351, + "image": "ktlWo6YM", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1669881134-lineplay.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "Life\u0027s like a rolling ball on a track full of twists and turns ", + "downloads": "8669", + "id": 475, + "image": "D1NMe3so", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1695198716-rolling ball2K.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Pew pew 😁", + "downloads": "15250", + "id": 328, + "image": "bKT7ZB8v", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1667146129-pewgun.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Stretch some candy 🍬", + "downloads": "16610", + "id": 302, + "image": "QqugVMzt", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1664871075-candy.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Recording the life 📼", + "downloads": "38594", + "id": 204, + "image": "fwPayG3u", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1652165587-record1.png", + "wallpapertype": 0 + }, + { + "category": "Typography", + "description": "Gamer Zone ", + "downloads": "5937", + "id": 639, + "image": "jeavPVlk", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1722262736-gameover2k.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Break the rules 🤭", + "downloads": "39315", + "id": 201, + "image": "4k7pbWnN", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1652009042-inteldino.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "I can wiggle wiggle 🌻🌵", + "downloads": "10645", + "id": 407, + "image": "4TERVbsO", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1679896707-cactus.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Digital branches ⚡", + "downloads": "31536", + "id": 219, + "image": "wzT3YAxH", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1654413266-simdots.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "House\u0027s like a step 🪜", + "downloads": "6960", + "id": 542, + "image": "5Zv1adoC", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1705999571-merge houses.png", + "wallpapertype": 0 + }, + { + "category": "Typography", + "description": "Let it go 😉", + "downloads": "10826", + "id": 399, + "image": "okXRmlH7", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1678429628-letitgo.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Nature has it\u0027s own secrets 🍃", + "downloads": "27997", + "id": 229, + "image": "NfUDOu0K", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1655452812-fantasyland.png", + "wallpapertype": 0 + }, + { + "category": "Space", + "description": "Moon 🌕", + "downloads": "5279", + "id": 685, + "image": "EDVQUOwk", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1729501659-moon_2k.png", + "wallpapertype": 0 + }, + { + "category": "Movies", + "description": "Stay Out Of My Territory - Heisenberg ⚗️", + "downloads": "28476", + "id": 227, + "image": "NbxPlFc3", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1655190766-breaking bad.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Fusion 🌀", + "downloads": "25882", + "id": 236, + "image": "RQt2913o", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1656482849-Energyfield.png", + "wallpapertype": 0 + }, + { + "category": "Material", + "description": "Popping pops 🎉", + "downloads": "9486", + "id": 427, + "image": "xoP63fkn", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1684743824-stringingcolour_2k.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Ripples 🌊", + "downloads": "12342", + "id": 366, + "image": "fy6ijzpL", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1670574723-speaker2k.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Fourfold Path", + "downloads": "8218", + "id": 461, + "image": "VKy4mqPT", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1692167442-jlines2k.png", + "wallpapertype": 0 + }, + { + "category": "Tech", + "description": "Give your device some power surge ⚡", + "downloads": "5455", + "id": 659, + "image": "Ob9d70IC", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1724917204-generator_2k.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "Rising blocks 🧱", + "downloads": "8798", + "id": 442, + "image": "rjLqdbJn", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1688456022-risingBlocks2K.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Cornering stripes 🏁", + "downloads": "13463", + "id": 332, + "image": "jvMzuYBS", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1667557670-turninglines.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Cruising the unknown 🚀", + "downloads": "24491", + "id": 239, + "image": "AFY4hrK0", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1656773205-rocketnew.png", + "wallpapertype": 0 + }, + { + "category": "Retro", + "description": "An inviting friend 🐈", + "downloads": "5581", + "id": 612, + "image": "3ToUh4n5", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1718609070-cattable2K.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Nature heals 🌳", + "downloads": "19023", + "id": 263, + "image": "PjXMoci9", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1659866405-fallleaves.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Old school 🎧", + "downloads": "26803", + "id": 225, + "image": "S6F4TnJ7", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1655189835-walkman.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Crystal dimension 🤩", + "downloads": "17247", + "id": 272, + "image": "yCWtPghR", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1661490666-animation81.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Sailing the evening wind ⛵", + "downloads": "10105", + "id": 393, + "image": "oKUqdwa1", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1677218894-lighthouse boat.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "I remember every night 🌙", + "downloads": "43686", + "id": 184, + "image": "ZckCjNdM", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1650005692-circlingstartrail.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "The Glitch", + "downloads": "5416", + "id": 608, + "image": "IQ432Vmq", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1717667347-cubes2kmain0001-0350.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Above the clouds 🛩️", + "downloads": "16277", + "id": 279, + "image": "qYZW1Rv0", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1662008358-planeabovewater.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Glitch ⚡", + "downloads": "9707", + "id": 397, + "image": "gvJl2drZ", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1677823065-synth.png", + "wallpapertype": 0 + }, + { + "category": "Superheroes", + "description": "From the shadows, I rise 🕷✨", + "downloads": "4666", + "id": 690, + "image": "7tphTLSA", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1730447376-spiderman noir_2k.png", + "wallpapertype": 0 + }, + { + "category": "Typography", + "description": "Make it count ⏳", + "downloads": "14671", + "id": 295, + "image": "KEUARZqg", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1663568574-makeitcount3.png", + "wallpapertype": 0 + }, + { + "category": "Dope", + "description": "Through the unknown 🤐", + "downloads": "19806", + "id": 251, + "image": "zLp2Vj4x", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1658385467-animation 670001-0120.png", + "wallpapertype": 0 + }, + { + "category": "Cityscape", + "description": "Golden Gate Bridge 🌉", + "downloads": "4815", + "id": 669, + "image": "NBfadl9x", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1726732699-golden gate bridge view_2k.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Swirl 🌀", + "downloads": "14260", + "id": 298, + "image": "NdU7By6V", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1664170950-spriallines.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Best part of the day - Evening 🌆", + "downloads": "9277", + "id": 403, + "image": "sMcSilt2", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1679204730-sunlightreflectionvbr1.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Meow 🐈", + "downloads": "16366", + "id": 273, + "image": "i0E3UoF9", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1661490668-sleepingcat.png", + "wallpapertype": 0 + }, + { + "category": "Cityscape", + "description": "Riding the town 🚙", + "downloads": "32298", + "id": 202, + "image": "t7c0Vnr9", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1652009046-town.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "Linking links 🔗", + "downloads": "8785", + "id": 410, + "image": "0ugr2XTF", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1680509340-rubber.png", + "wallpapertype": 0 + }, + { + "category": "Cityscape", + "description": "Comfort of home 🌃", + "downloads": "20284", + "id": 245, + "image": "BCT9fx3h", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1657517940-window scape new.png", + "wallpapertype": 0 + }, + { + "category": "Cityscape", + "description": "A day in city 🏙", + "downloads": "11885", + "id": 329, + "image": "uHbALW25", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1667146134-planeabove.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Pulse of energy ⚡", + "downloads": "9623", + "id": 383, + "image": "Nh1ofe8P", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1674890229-wave2k.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Just floating around 🌊", + "downloads": "13852", + "id": 294, + "image": "1UWTpG87", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1663568542-jellyfish1.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Trains are beautiful 🚄", + "downloads": "13239", + "id": 297, + "image": "cskeY8Fx", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1663832513-bridgetrain.png", + "wallpapertype": 0 + }, + { + "category": "Cityscape", + "description": "Golden Gate Bridge 🌉", + "downloads": "14313", + "id": 281, + "image": "Aio6auR2", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1662355278-goldengatebridge.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Light bars ⚡", + "downloads": "10833", + "id": 340, + "image": "AOLH63u2", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1668151038-spectrum.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Go with the flow ⛵", + "downloads": "15836", + "id": 265, + "image": "ZIj76vOl", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1660118394-redboat.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "The path isn\u0027t a straight line, it\u0027s a spiral 🌀", + "downloads": "17420", + "id": 252, + "image": "qVJI5SN0", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1658649402-crcfluid.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Flying above the grass 🍃", + "downloads": "8682", + "id": 390, + "image": "HcKWT93r", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1676443822-hotairballoon.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Flocking beams ⚡", + "downloads": "19099", + "id": 242, + "image": "578AbrmR", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1657291653-dots.png", + "wallpapertype": 0 + }, + { + "category": "Pixel", + "description": "Festival vibe 🎆", + "downloads": "12369", + "id": 299, + "image": "cDJIejZY", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1664170966-pixelfireworks.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Endings are beautiful 🌇", + "downloads": "17405", + "id": 250, + "image": "NMy608Ya", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1658385460-sunset.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Weekend rides 🚙", + "downloads": "15007", + "id": 267, + "image": "2pHIefF3", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1660376766-sunsetride.png", + "wallpapertype": 0 + }, + { + "category": "Pixel", + "description": "Pixel warmth 🔥", + "downloads": "13833", + "id": 277, + "image": "hyzI7Pk3", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1661751428-pixelcampfire.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "Magic below the blocks 🪄", + "downloads": "12364", + "id": 296, + "image": "m3i5XUIA", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1663832509-risingneon.png", + "wallpapertype": 0 + }, + { + "category": "Dope", + "description": "Through the hurdles ⚡", + "downloads": "24404", + "id": 214, + "image": "wQ37vMgz", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1653546875-animation56.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Wind and flowers 🌷", + "downloads": "9931", + "id": 341, + "image": "9HPnwGeM", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1668151041-flowerfield.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "To honour the time machine - James Webb Telescope", + "downloads": "17217", + "id": 247, + "image": "n5cMUxgb", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1657812000-galaxy.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Wind\u0027s Caress 🌼", + "downloads": "6041", + "id": 466, + "image": "XAYWrv2H", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1693380406-flower.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Mirror reality 😎", + "downloads": "7271", + "id": 415, + "image": "rgALv9TE", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1681804030-flip.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "⭕ pop out ⭕", + "downloads": "4045", + "id": 654, + "image": "Hogh0Jt3", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1724059263-cylinder2k0001-0250.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "Waves contained in a traingle 📐", + "downloads": "8373", + "id": 380, + "image": "kzDQR9JP", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1674109401-gradientframewave_2k.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Home is where plants are🪴", + "downloads": "17135", + "id": 244, + "image": "5Vu7v1yp", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1657517928-leaves1.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "The maze 🫣", + "downloads": "13626", + "id": 270, + "image": "eYlUWwG3", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1660751880-patternrgb.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Monolith of energy ⚡", + "downloads": "18018", + "id": 238, + "image": "nXOH7dPa", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1656773192-trianglewaves.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Yin and yang ☯", + "downloads": "7919", + "id": 384, + "image": "DYWXTiLx", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1674890254-yinyang2K.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Let\u0027s Bravo 💪🏻", + "downloads": "3554", + "id": 695, + "image": "x3rgHsu0", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1731314484-johnny bravo_2k.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Winter\u0027s Silent Whispers ☃️", + "downloads": "4833", + "id": 527, + "image": "MA8NXHL7", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1703667129-snow globe.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "Expanding bubbles 🎈", + "downloads": "7193", + "id": 402, + "image": "OgYCR5WZ", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1679204714-bubble.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Line that divides dimension 🔮", + "downloads": "8405", + "id": 367, + "image": "OseuYg9c", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1670574738-flipbubbles2k.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Ghost Rider 🔥", + "downloads": "28949", + "id": 191, + "image": "agjLlwE3", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1650866838-skullnew.png", + "wallpapertype": 0 + }, + { + "category": "Typography", + "description": "Happy New Year 🎆", + "downloads": "4631", + "id": 532, + "image": "PhMH24dz", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1704208922-happynewyear_2k.png", + "wallpapertype": 0 + }, + { + "category": "Dope", + "description": "Are we in a simulation 🤔", + "downloads": "9950", + "id": 318, + "image": "FQNd2aKp", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1665474502-cybercity.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Gradient strings 🪡", + "downloads": "10977", + "id": 293, + "image": "NiCIf7nO", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1663217492-gradientline.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Face towards light 🌻", + "downloads": "13841", + "id": 254, + "image": "RHDuFAgb", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1658994666-sunflower.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Radiate like flowers 🌼", + "downloads": "3406", + "id": 664, + "image": "K6zaDsGx", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1725870736-fadingflowers_2k.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Raining triangles ⚡️", + "downloads": "16841", + "id": 231, + "image": "Wg13hPZz", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1655713095-triangs.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Boo want to be scary👻 ", + "downloads": "3210", + "id": 684, + "image": "PUW2EhR0", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1729501572-ghostwind_2k.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Disco floor 💃🏻", + "downloads": "10471", + "id": 283, + "image": "4tyKUwEl", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1662621794-discovibe.png", + "wallpapertype": 0 + }, + { + "category": "Typography", + "description": "Today is your day 😁", + "downloads": "19519", + "id": 213, + "image": "VnoQmB5a", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1653546861-today.png", + "wallpapertype": 0 + }, + { + "category": "Movies", + "description": "Banana 🍌", + "downloads": "30165", + "id": 179, + "image": "7f3Bsx60", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1649661826-minions.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Soothing of sea ⛵", + "downloads": "30550", + "id": 178, + "image": "3fabqR4C", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1649485172-sunset boat.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Catch the toast 🍞", + "downloads": "5430", + "id": 430, + "image": "U0FJ38hC", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1685514843-bread toaster_2k.png", + "wallpapertype": 0 + }, + { + "category": "Cityscape", + "description": "Wire\u0027s connecting people 👕👖", + "downloads": "11849", + "id": 259, + "image": "xRM4ArGk", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1659593345-hangingclothes.png", + "wallpapertype": 0 + }, + { + "category": "Cityscape", + "description": "Feeling the calm 📻", + "downloads": "50154", + "id": 145, + "image": "KbaDizGu", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1646888235-windowview.png", + "wallpapertype": 0 + }, + { + "category": "Space", + "description": "The red planet 🌍", + "downloads": "3070", + "id": 674, + "image": "vufNpc9r", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1727687132-planet landscape_2k.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Looping trios 😎", + "downloads": "6160", + "id": 396, + "image": "67SLDahN", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1677822985-twotripattern.png", + "wallpapertype": 0 + }, + { + "category": "Movies", + "description": "I solemnly swear that I am up to no good 🪄", + "downloads": "9892", + "id": 280, + "image": "q07B9wFL", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1662355270-footprint.png", + "wallpapertype": 0 + }, + { + "category": "Material", + "description": "Mountain of cards ⛰️", + "downloads": "21303", + "id": 200, + "image": "1OUHBt0A", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1651642619-mount.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Simple as a flower 🌼", + "downloads": "7734", + "id": 327, + "image": "luVyJaZX", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1666766421-flowerpot.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Hexagonal waves ⚡", + "downloads": "24948", + "id": 186, + "image": "mVsNlo9a", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1650263214-hex0001-0300.png", + "wallpapertype": 0 + }, + { + "category": "Material", + "description": "Trying to expand 🤔", + "downloads": "8120", + "id": 305, + "image": "e8p9NE2q", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1665245449-criclebreathe.png", + "wallpapertype": 0 + }, + { + "category": "Material", + "description": "Flipping cards 🎴", + "downloads": "21405", + "id": 195, + "image": "5mXc9s83", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1651215762-tilewave.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Buzzing bees 🐝", + "downloads": "9126", + "id": 282, + "image": "JBg1PslY", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1662621769-beehive.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "Bouncers ⭕", + "downloads": "8236", + "id": 300, + "image": "2PXEkfjJ", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1664525996-twoshadeball.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Monsoon cocktail 🍸", + "downloads": "2692", + "id": 675, + "image": "XHRV2kop", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1727687143-cocktail_2k.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Way back home 🚦", + "downloads": "21282", + "id": 192, + "image": "nCfxJUEd", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1650866841-traffic light.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Someone\u0027s being cooked 🪦", + "downloads": "2618", + "id": 680, + "image": "eQTYlByI", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1728551180-graveyard_2k.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Dustin , Do you copy 😉", + "downloads": "15823", + "id": 215, + "image": "EBMK7NTF", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1653896478-walkietalkie.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Mining the coins 🪙", + "downloads": "19665", + "id": 196, + "image": "CeFq9Owm", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1651215776-mining.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "In one drop of water are found all the secrets of all the oceans", + "downloads": "16073", + "id": 211, + "image": "k6uprVsf", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1653291509-boattrip6.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Strip\u0027s traffic 😉", + "downloads": "10830", + "id": 248, + "image": "kGB3yMqb", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1658134320-grid1.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Chilling through the countryside 🚙", + "downloads": "12497", + "id": 233, + "image": "rzTJdu4Q", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1655976665-countrydrive.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Journey through the color valley 🌈", + "downloads": "26208", + "id": 172, + "image": "xNAUw4vm", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1648970974-plane.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Cozy summer 🏖️", + "downloads": "16156", + "id": 206, + "image": "zE9R6gSG", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1652337222-seawave.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Ice and fire 🔥❄️", + "downloads": "15892", + "id": 207, + "image": "eNWAYdob", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1652767839-zig.png", + "wallpapertype": 0 + }, + { + "category": "Movies", + "description": "The Resistance ski speeder 🔥", + "downloads": "33573", + "id": 155, + "image": "qm6kevX7", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1647590528-starwars0080-0240.png", + "wallpapertype": 0 + }, + { + "category": "Anime", + "description": "Awakening the dragon 🔥", + "downloads": "24039", + "id": 175, + "image": "sLUpavix", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1649322130-dragonball.png", + "wallpapertype": 0 + }, + { + "category": "Cityscape", + "description": "Way back home 🪟", + "downloads": "7507", + "id": 292, + "image": "DEBxzG9u", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1663217494-window.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Keep calm and play 🎧", + "downloads": "23149", + "id": 176, + "image": "Ve8GXgvF", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1649322136-cassette.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Minimal waves 🌊", + "downloads": "8365", + "id": 268, + "image": "jxsMPnZO", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1660723701-abstractwaves.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Dropping frames 📐", + "downloads": "14825", + "id": 209, + "image": "9QDqL4BM", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1653028915-framerotate2.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Waves of shades 🌊", + "downloads": "8988", + "id": 257, + "image": "qyIXY1ZG", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1659335310-colourgrid6.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Juicy Pine 🍍", + "downloads": "16425", + "id": 199, + "image": "uVXhD8zU", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1651642615-pineapple.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Enjoy the smell of rain ☔", + "downloads": "12485", + "id": 222, + "image": "1VcGN9RO", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1654668060-rainvector.png", + "wallpapertype": 0 + }, + { + "category": "Material", + "description": "Clash of opposites 🌈", + "downloads": "8520", + "id": 262, + "image": "N8A1wHLX", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1659866395-loopie.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Woo hahaha 🎃🕯️", + "downloads": "2211", + "id": 679, + "image": "Wwu1pX5t", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1728551171-pumkin candle_2k.png", + "wallpapertype": 0 + }, + { + "category": "Miscellaneous", + "description": "Under the watchful eye of the moon, she rides the night 🌕✨🧙‍♀️", + "downloads": "2033", + "id": 689, + "image": "l8rWAa52", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1730447262-witch night_2k.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Creating memories in the snow, one angel at a time ☃️❄️", + "downloads": "1937", + "id": 705, + "image": "rX1J9fqj", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1733126052-snow angel_2k.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Rainbow effect 🌈", + "downloads": "29502", + "id": 153, + "image": "IrWp7Pok", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1647418463-circlingrainbowhigh.png", + "wallpapertype": 0 + }, + { + "category": "Superheroes", + "description": "On a date 🦇 🐱", + "downloads": "41699", + "id": 134, + "image": "sUMx4igS", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1645948957-thebatman.png", + "wallpapertype": 0 + }, + { + "category": "Dope", + "description": "Energy tiles ⚡", + "downloads": "1964", + "id": 694, + "image": "35VZSQ2q", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1731314477-cybersandwich_2k0001-0350.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Blow 💨", + "downloads": "9642", + "id": 237, + "image": "YwJ2fH5V", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1656482859-paperwindmill.png", + "wallpapertype": 0 + }, + { + "category": "Cityscape", + "description": "Life is like a roller coaster, live it, be happy, enjoy life 🎢", + "downloads": "11891", + "id": 216, + "image": "tUuqKWn5", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1653896481-rollercoster40.png", + "wallpapertype": 0 + }, + { + "category": "Movies", + "description": "Roll into adventure with BB-8 💫", + "downloads": "1886", + "id": 700, + "image": "HDabQGWh", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1732175087-BB-8_2k.png", + "wallpapertype": 0 + }, + { + "category": "Gaming", + "description": "Love\u0027s clicking ⌨️", + "downloads": "51051", + "id": 123, + "image": "Kuj9oSd4", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645515864-key0001-0247.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Halftone 🪄", + "downloads": "6331", + "id": 278, + "image": "4HyjqJlt", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1662008355-Dots.png", + "wallpapertype": 0 + }, + { + "category": "Cityscape", + "description": "Wakeup call 🍵", + "downloads": "15116", + "id": 190, + "image": "5zsv48Oi", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1650692872-windownearsubway.png", + "wallpapertype": 0 + }, + { + "category": "Typography", + "description": "Life is a journey 🚗 ", + "downloads": "7788", + "id": 246, + "image": "yZvaUhFu", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1657811993-lifejourney.png", + "wallpapertype": 0 + }, + { + "category": "Gaming", + "description": "Pac Man 🕹", + "downloads": "42164", + "id": 127, + "image": "wZWDOt1x", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645601772-pacman.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Chasing the breeze ⛵", + "downloads": "1683", + "id": 699, + "image": "31HPOwuK", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1732175071-waving boat_2k.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Entering the night 🌙", + "downloads": "6464", + "id": 266, + "image": "GrLxaBz5", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1660376731-lighthousevector.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Gift from nature 🌊", + "downloads": "24805", + "id": 154, + "image": "opYn9biL", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1647590523-waterfall.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Incursion 😉", + "downloads": "12058", + "id": 203, + "image": "5mMz2Xae", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1652165583-frames.png", + "wallpapertype": 0 + }, + + { + "category": "Cityscape", + "description": "Winter night ☃", + "downloads": "55895", + "id": 269, + "image": "rT350txs", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1660723718-snowapartment.png", + "wallpapertype": 0 + }, + + { + "category": "Anime", + "description": "There is something you have to protect ⚔️", + "downloads": "19655", + "id": 150, + "image": "9FzEXMxC", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1647246742-nezukobox.png", + "wallpapertype": 0 + }, + { + "category": "Movies", + "description": "Christmas time for snoopy ❄️☃️", + "downloads": "1221", + "id": 704, + "image": "85IPsh6E", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1733125861-snoopy house_2k.png", + "wallpapertype": 0 + }, + { + "category": "Material", + "description": "Looping loops ⭕", + "downloads": "5955", + "id": 240, + "image": "Oi8ofNPb", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1657031328-circle.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Tick Tock ⏰", + "downloads": "10522", + "id": 189, + "image": "EX9qN2Sp", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1650692865-ballpattern.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Love for old 🎷", + "downloads": "22506", + "id": 141, + "image": "fshCMoKF", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1646500025-musictape.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "Never ending triangles 📐", + "downloads": "10538", + "id": 187, + "image": "ViDSUzfG", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1650437837-foldingtriangle.png", + "wallpapertype": 0 + }, + { + "category": "Material", + "description": "Glide with the cards 💜", + "downloads": "12076", + "id": 177, + "image": "JcHhSQiF", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1649485125-trianglewave.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Spring is nature\u0027s way of saying let\u0027s party 🌄", + "downloads": "6956", + "id": 220, + "image": "LMBHkEXS", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1654413275-landscape.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "The opposite pairs 😉", + "downloads": "11237", + "id": 181, + "image": "g4NZzoAl", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1649835076-dna.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Confused ghost 👻", + "downloads": "15853", + "id": 158, + "image": "joyRhH14", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1647851266-panghost.png", + "wallpapertype": 0 + }, + { + "category": "Dope", + "description": "Through the warp tunnel 🚀", + "downloads": "19924", + "id": 144, + "image": "xVDSuvjo", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1646888230-animation390001-0120.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "There\u0027s two sides for everything 😇", + "downloads": "12718", + "id": 170, + "image": "OqL53EQk", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1648711046-minimalsun.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Converging stripes ⭕", + "downloads": "7242", + "id": 210, + "image": "e1Evxh7K", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1653028917-cutcircle2.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Confused steps 🤭", + "downloads": "13653", + "id": 163, + "image": "Xi0J6UdY", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1648310198-contour.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Summer waves 🌊", + "downloads": "6533", + "id": 217, + "image": "Q0HK57si", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1654161159-wavvve.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "Rings and Rings ✌🏻", + "downloads": "28938", + "id": 122, + "image": "NVcnSvTy", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1645515845-vectorgalaxy.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Splitting halves ⚛️", + "downloads": "3033", + "id": 317, + "image": "FxKsChSA", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1665474490-toggle3.png", + "wallpapertype": 0 + }, + { + "category": "Material", + "description": "Excited cards 🧡", + "downloads": "11782", + "id": 168, + "image": "bN0WaRht", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1648711023-recarray.png", + "wallpapertype": 0 + }, + { + "category": "Superheroes", + "description": "I am vengeance 🔥", + "downloads": "79041", + "id": 76, + "image": "lRNOhvxW", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1643010123-batman.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "The Eighty\u0027s 🕺", + "downloads": "10381", + "id": 174, + "image": "UHF3y6E7", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1649137233-dotshigh.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Joy of celebration 🎉", + "downloads": "16140", + "id": 146, + "image": "L4VbOsYe", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1646986481-fireworkview.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Serene Night ✨", + "downloads": "23302", + "id": 128, + "image": "MG6JrH1F", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645601780-windmillill.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Squares are on a trip 😉", + "downloads": "10223", + "id": 173, + "image": "fi49c06E", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1649137222-squares.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Weekend life 🎣", + "downloads": "21075", + "id": 131, + "image": "UHGgV6xz", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645689678-fishingboat.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Camping nights ⛺", + "downloads": "17785", + "id": 139, + "image": "YzMrhTdj", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1646306068-snowforest.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Circling ⭕", + "downloads": "10382", + "id": 164, + "image": "M3w0tZxG", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1648446785-pluspattern.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Runaway lines 😉", + "downloads": "9402", + "id": 167, + "image": "GLZf5btI", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1648617302-squareill.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "The wave of joy 🌊", + "downloads": "7106", + "id": 182, + "image": "nYb783FD", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1649835082-wave.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Droplets 💧", + "downloads": "6104", + "id": 193, + "image": "TMiOn2da", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1651048971-droppattern.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "Beats ⚡", + "downloads": "10892", + "id": 149, + "image": "cqWTe6jN", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1647246737-greenanim.png", + "wallpapertype": 0 + }, + { + "category": "Superheroes", + "description": "I think I\u0027m superman\u0027s favorite 💚", + "downloads": "8838", + "id": 159, + "image": "Oox1TRYe", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1647851269-supperman0001-0093.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Hello anybody home 🚀", + "downloads": "27032", + "id": 107, + "image": "EmrYWiA1", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1644653245-blackhole.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Chill 🥤", + "downloads": "5713", + "id": 183, + "image": "LXi2ztvh", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1650005674-chill.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Cube of Wisdom ⚡", + "downloads": "15387", + "id": 126, + "image": "6nPkafpA", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645601756-icecube.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Where am I 🕵🏻‍♀️", + "downloads": "5186", + "id": 188, + "image": "VjDfLBgT", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1650437848-bushsub.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Mirror dimension 🪄", + "downloads": "4103", + "id": 205, + "image": "Ukx7qj3K", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1652337215-cutsphere.png", + "wallpapertype": 0 + }, + { + "category": "Typography", + "description": "Error ", + "downloads": "24550", + "id": 106, + "image": "cofEiJ9d", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1644653226-error.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Booo Booo 👻", + "downloads": "79317", + "id": 62, + "image": "VflzaU4B", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642749968-ghost.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Gateway to the metaverse ⚡️", + "downloads": "10402", + "id": 136, + "image": "ATgbnVti", + "pro": 7, + "resolution": "2160 x 3840", + "thumbnail": "1646123475-animation33.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Run with the stripes 💜", + "downloads": "12677", + "id": 125, + "image": "54nkHS0T", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645515883-intercutline.png", + "wallpapertype": 0 + }, + { + "category": "Cityscape", + "description": "Chores of the city 🌇", + "downloads": "7860", + "id": 147, + "image": "prKe6Qwu", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1646986489-sidetrain.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Countryside are always refreshing 🏡", + "downloads": "7561", + "id": 148, + "image": "dGAhZSgC", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1646986493-house 3.png", + "wallpapertype": 0 + }, + { + "category": "Anime", + "description": "Rengoku🔥", + "downloads": "51807", + "id": 66, + "image": "IVLv624U", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642750053-rengoku.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Where are the humans 🛸", + "downloads": "14777", + "id": 108, + "image": "xtTe6CAl", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1644653255-ufo.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Follow the wave ⚡", + "downloads": "13076", + "id": 110, + "image": "E9LzS5PG", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645000748-Comp2dot.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Colour Blades 💚", + "downloads": "7661", + "id": 129, + "image": "byXhakCg", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645689669-yellowpanel.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Every action has a reaction 🤓", + "downloads": "16880", + "id": 99, + "image": "9kC2wZUn", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1644566566-pend.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Winter cave 🪵", + "downloads": "5577", + "id": 143, + "image": "YfFaywoH", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1646725986-foresthouse.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Juicy slices 🍉", + "downloads": "5634", + "id": 142, + "image": "CUgLfE0M", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1646725977-watermelon.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Lava lamp ☮️", + "downloads": "14879", + "id": 102, + "image": "l01wioFT", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1644566624-lavalamp.png", + "wallpapertype": 0 + }, + { + "category": "Dope", + "description": "Cyber Planet ", + "downloads": "7650", + "id": 124, + "image": "FdBayDEC", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645515875-animation620001-0120.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Joy of smiley\u0027s 😉", + "downloads": "3987", + "id": 157, + "image": "m7hJcMwv", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1647760634-smiley.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "Core of the ancient magic 🔮", + "downloads": "8480", + "id": 119, + "image": "QHtIJZqr", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645259194-cubetemp0001-0250.png", + "wallpapertype": 0 + }, + { + "category": "Typography", + "description": "Just charging 🔋", + "downloads": "9093", + "id": 116, + "image": "6h5i7aTK", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645173517-justcharging.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Vroom Vroom 🏎️", + "downloads": "7868", + "id": 121, + "image": "OCXNm04f", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645259201-car0001-0150.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Through the town road 🤠", + "downloads": "4135", + "id": 152, + "image": "Gvj8U5RM", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1647418455-cowbo45.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Train\u0027s coming 🚞", + "downloads": "9956", + "id": 111, + "image": "JcweovKf", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645000755-train0001-0250.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Warp drive through the vaccum ✨", + "downloads": "22782", + "id": 74, + "image": "tFNP0Ywm", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1643010114-erer.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Meow Meow 🐱", + "downloads": "7582", + "id": 120, + "image": "UauRwNgt", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645259197-catdoodles.png", + "wallpapertype": 0 + }, + { + "category": "Typography", + "description": "Be a percent better everyday 💚", + "downloads": "43680", + "id": 60, + "image": "EDLpF1YJ", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1642668016-1better.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Need a bucket to collect all these 🪣", + "downloads": "22076", + "id": 73, + "image": "FGPpaDgu", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1642839034-playstation symbol0250-0499.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Being retro 🕺", + "downloads": "5221", + "id": 133, + "image": "Y5EsZt9h", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645948953-animation330001-0120.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Joy of baloons 🎈", + "downloads": "4514", + "id": 140, + "image": "4aNESDct", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1646500005-baloon.png", + "wallpapertype": 0 + }, + { + "category": "Anime", + "description": "Feeling the rain 🌧️", + "downloads": "13316", + "id": 96, + "image": "H59OQqzb", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1644566465-girl in rain.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Imagination is important than knowledge 🔬", + "downloads": "7391", + "id": 114, + "image": "u0sL3bFq", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645087072-galaxyhouse.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Camping folks ⛺", + "downloads": "13276", + "id": 84, + "image": "gYska4tH", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1643356780-camp fire.png", + "wallpapertype": 0 + }, + { + "category": "Dope", + "description": "Enter the metaverse⚡", + "downloads": "14561", + "id": 79, + "image": "pY1Fq7tw", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1643271285-animation 450001-0200.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Enjoying through the woods 🚗", + "downloads": "19355", + "id": 70, + "image": "4Oiby2ms", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642752242-night forest ride0001-0150.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Wiggly wiggly 😁", + "downloads": "11687", + "id": 82, + "image": "ku28xKdm", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1643356768-deform.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Night sky ✨", + "downloads": "11100", + "id": 83, + "image": "xtVHQ5qX", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1643356776-night shy.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Sailing through the horizon ⛵", + "downloads": "7979", + "id": 103, + "image": "eBdwiH6f", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1644566665-oceanboat.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Trying to meet the ends 😁", + "downloads": "3460", + "id": 135, + "image": "E39sJtD8", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1646123470-tripattern.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Solve the riddle 🔮", + "downloads": "5099", + "id": 117, + "image": "cxm8NBsl", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645173533-ancientartifact.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Busy riding the sands 🌵", + "downloads": "11250", + "id": 78, + "image": "cM85T0jo", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1643010196-car0001-0247.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Waves 💜", + "downloads": "7413", + "id": 100, + "image": "MWjAhRZF", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1644566581-gradientwave.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "Realm of cubes ▪️◻️◾◼️", + "downloads": "7134", + "id": 101, + "image": "hAe9R7wf", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1644566610-decube.png", + "wallpapertype": 0 + }, + { + "category": "Superheroes", + "description": "God of thunder⚡", + "downloads": "30090", + "id": 56, + "image": "0TIqwLE7", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642667341-thor.png", + "wallpapertype": 0 + }, + { + "category": "Anime", + "description": "Ultra Instinct 🔥", + "downloads": "70321", + "id": 45, + "image": "mV5S6Qko", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1642490947-goku ultra.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Rainbow rain 🌈", + "downloads": "4098", + "id": 115, + "image": "A0xUfN6E", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645173469-rainbowcloud.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Magic steps 🔮", + "downloads": "4093", + "id": 113, + "image": "FTQVdDNo", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645087070-arr0040-0119.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Where\u0027s my mouse 🤔", + "downloads": "7843", + "id": 81, + "image": "ijQndh5H", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1643356755-old computer0001-0250.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Fabric of reality 😉", + "downloads": "10566", + "id": 71, + "image": "jVHDdWh6", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642752256-dot 1.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Festival of light 🕯️", + "downloads": "11457", + "id": 68, + "image": "ABnsbwC3", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1642750093-lanterns0118-1000.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Dots dots go away 😜", + "downloads": "5505", + "id": 98, + "image": "UoYrjhKc", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1644566535-dotarray.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Curly curly 🖤", + "downloads": "2843", + "id": 118, + "image": "J0YFxAoq", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1645173539-zigzag.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Disco disco 🕺", + "downloads": "3723", + "id": 105, + "image": "0tExmCbu", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1644653213-animation 210001-0240.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Loving the queit life 🏡", + "downloads": "3643", + "id": 104, + "image": "Af0esPFS", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1644566689-hotair.png", + "wallpapertype": 0 + }, + { + "category": "Anime", + "description": "Founding Titan", + "downloads": "14549", + "id": 58, + "image": "SbVr2TeA", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642667392-Aot.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Sprouting forest 🌳", + "downloads": "2845", + "id": 109, + "image": "qefFvO0a", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1644653266-colourtree.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Hoping for Dr Strange to come 😉", + "downloads": "18502", + "id": 53, + "image": "VR4E6smB", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642491015-strange portal.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Through the pulses 🔮 .", + "downloads": "9721", + "id": 63, + "image": "CBy8i1kc", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642749980-worm hole0001-0120.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Searching for glaciers ☹️", + "downloads": "7258", + "id": 67, + "image": "32yZIpDV", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642750069-boat ride.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Tik tok Tik tok ⏳", + "downloads": "3457", + "id": 97, + "image": "i3xABMhj", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1644566514-rotateballs.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Dancing dots 💚", + "downloads": "2173", + "id": 112, + "image": "wb9c0oGx", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1645000768-circlesplashpattern.png", + "wallpapertype": 0 + }, + { + "category": "Typography", + "description": "Vibe 🕺", + "downloads": "4625", + "id": 75, + "image": "86ixr5kA", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1643010117-vibe.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Atoms play 🔬", + "downloads": "3934", + "id": 77, + "image": "FgTs76uc", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1643010160-animation 250001-0120.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Countryside 🚜", + "downloads": "7608", + "id": 61, + "image": "N20IdgeG", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1642749960-farmhouse0001-0250.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Have fun at the carnival 🎡", + "downloads": "13168", + "id": 52, + "image": "z4bn3Hlk", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1642491005-carnival0001-0500.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Spiral of spectrum 🌈", + "downloads": "5468", + "id": 65, + "image": "u6lHZCQF", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642750022-circle0001-0200.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Don\u0027t tell anyone about this base 🚀", + "downloads": "4460", + "id": 69, + "image": "clMvD7o4", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642752214-pyramid0001-0250.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Ride by the river 🚗", + "downloads": "7984", + "id": 57, + "image": "gDf0iX2S", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642667356-night ride0001-0150.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "WIndmill 🍃", + "downloads": "6871", + "id": 59, + "image": "AY4nRzhf", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642667421-windmill0001-0250.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Exploring the deep waters 🌊", + "downloads": "8687", + "id": 55, + "image": "kfMaSvZ4", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642667334-sub0001-0250.png", + "wallpapertype": 0 + }, + { + "category": "Geometry", + "description": "Antigravity keeps me floating⚡", + "downloads": "4770", + "id": 64, + "image": "JKvqt5Pa", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642750008-dune0001-0150.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Feel the pulse 😊", + "downloads": "10718", + "id": 50, + "image": "41gcyMYN", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642490982-cube0001-0250.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Waveform 🖤", + "downloads": "15265", + "id": 46, + "image": "HpqY1Qxd", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642490957-shape0001-0120.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Planet love 🌍", + "downloads": "16894", + "id": 44, + "image": "VZ6i51qI", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642490937-planet.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Cyber waves 💜", + "downloads": "6689", + "id": 54, + "image": "ZP4qMsQe", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1642491028-shape10001-0120.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Mood for a rain 🌧️", + "downloads": "30616", + "id": 39, + "image": "Zs3BCXJl", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642486515-rain.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Pink flower ", + "downloads": "7908", + "id": 51, + "image": "VPIEWTYB", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642490992-flower.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Cat love 🐈", + "downloads": "9241", + "id": 49, + "image": "Om2nPfBg", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642490976-cat.png", + "wallpapertype": 0 + }, + { + "category": "Typography", + "description": "Loading ...... ", + "downloads": "13881", + "id": 43, + "image": "5kdBMGiW", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642490932-loading.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Wriggly cosmos 🖤", + "downloads": "13123", + "id": 41, + "image": "xNFSWdyz", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642490906-dark hole0001-0240.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Have a good day 😎", + "downloads": "5768", + "id": 48, + "image": "Q0Ironk1", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1642490971-coffee.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Magic Flower 💙", + "downloads": "6247", + "id": 47, + "image": "T3YR9Wnf", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642490964-blue flower.png", + "wallpapertype": 0 + }, + { + "category": "Anime", + "description": "The Saiyan Prince 🔥", + "downloads": "21458", + "id": 37, + "image": "ayb6ospZ", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642486467-vegeta.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Swing with the lamp 🛋️", + "downloads": "11339", + "id": 40, + "image": "I0GAalQN", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1642488646-hanging light.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Color popping jet 🌈", + "downloads": "7164", + "id": 42, + "image": "iGXD8kwI", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642490923-jet.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Christmas eve ☃️", + "downloads": "18453", + "id": 36, + "image": "qO5rKNj9", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642486448-snow fall.png", + "wallpapertype": 0 + }, + { + "category": "Typography", + "description": "Think Big 💡", + "downloads": "9340", + "id": 38, + "image": "eOcINzdF", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642486479-think big.png", + "wallpapertype": 0 + }, + { + "category": "Abstract", + "description": "Spiral of light 💙", + "downloads": "11455", + "id": 34, + "image": "GeYfZgVw", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642486424-rolling tube0001-0500.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Guider of the sea 🌊", + "downloads": "10444", + "id": 33, + "image": "qMXGWpEH", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642486388-lighthouse0001-0100.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Play with dino 🦕", + "downloads": "5122", + "id": 35, + "image": "xfMGgp1q", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642486428-0001-0125.png", + "wallpapertype": 0 + }, + { + "category": "Typography", + "description": "Always be yourself ❤️", + "downloads": "6754", + "id": 32, + "image": "ewJ0fYQr", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642486351-bee.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Spooky 🎃", + "downloads": "87567", + "id": 25, + "image": "BHMsxl02", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1639590645-halloween2021.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Climb the hill 💙", + "downloads": "7916", + "id": 31, + "image": "4ldD89Fn", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642486325-ropeway.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Ball of fire 🔥", + "downloads": "20861", + "id": 29, + "image": "gLiRYKEk", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1642486187-geometryball0001-0250.png", + "wallpapertype": 0 + }, + { + "category": "Cityscape", + "description": "Beauty of late night snow ☃️", + "downloads": "27034", + "id": 428, + "image": "CA95YeWL", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1684743860-streetlight_2k.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Glimpse of parallel world 🌍", + "downloads": "18688", + "id": 562, + "image": "oVLnApSP", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1709535857-4 layer land.png", + "wallpapertype": 0 + }, + { + "category": "Nature", + "description": "Where trekking ends ⛺", + "downloads": "18369", + "id": 166, + "image": "TslXeryf", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1648617295-vectorcamp.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Push and Pull 🥸", + "downloads": "5337", + "id": 276, + "image": "PiAKybTX", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1661751415-pushline.png", + "wallpapertype": 0 + }, + { + "category": "Gaming", + "description": "Gamer\u0027s paradise 👨🏻‍💻", + "downloads": "28767", + "id": 138, + "image": "brocN6Da", + "pro": 5, + "resolution": "2160 x 3840", + "thumbnail": "1646306064-pc.png", + "wallpapertype": 0 + }, + { + "category": "Amoled", + "description": "Beats 💓", + "downloads": "32497", + "id": 132, + "image": "UJN3sn7G", + "pro": 0, + "resolution": "2160 x 3840", + "thumbnail": "1645948947-heartbeat.png", + "wallpapertype": 0 + }, + { + "category": "Landscape", + "description": "Glide through your dreams 🛩", + "downloads": "6136", + "id": 249, + "image": "EUqnwDWt", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1658134331-glider.png", + "wallpapertype": 0 + }, + { + "category": "Pattern", + "description": "Catch with the lines 🤐", + "downloads": "7333", + "id": 228, + "image": "UNgGb3f6", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1655452805-justlines.png", + "wallpapertype": 0 + }, + { + "category": "Superheroes", + "description": "Batmobile in Action 🦇", + "downloads": "26251", + "id": 137, + "image": "0oKr7TM4", + "pro": 10, + "resolution": "2160 x 3840", + "thumbnail": "1646123484-batmobile.png", + "wallpapertype": 0 + }, + { + "category": "Minimal", + "description": "Dance with the cactus 🌵", + "downloads": "6398", + "id": 30, + "image": "6BiDZEWA", + "pro": 3, + "resolution": "2160 x 3840", + "thumbnail": "1642486262-catcus.png", + "wallpapertype": 0 + } +] \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/App.kt b/app/src/main/java/com/video/mobile/wallpaper/App.kt new file mode 100644 index 0000000..bd0b134 --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/App.kt @@ -0,0 +1,19 @@ +package com.video.mobile.wallpaper + +import android.app.Application +import com.video.mobile.wallpaper.database.DataBaseManager + +class App : Application(){ + companion object{ + val TAG = "============" + lateinit var mApp :App + } + override fun onCreate() { + super.onCreate() + mApp = this + DataBaseManager.init(this) + Helper.loadJson(this) + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/BaseViewHolder.kt b/app/src/main/java/com/video/mobile/wallpaper/BaseViewHolder.kt new file mode 100644 index 0000000..ffe4836 --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/BaseViewHolder.kt @@ -0,0 +1,9 @@ +package com.video.mobile.wallpaper + +import androidx.recyclerview.widget.RecyclerView +import androidx.viewbinding.ViewBinding + + +class BaseViewHolder( + itemVb: T +) : RecyclerView.ViewHolder(itemVb.root) \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/Helper.kt b/app/src/main/java/com/video/mobile/wallpaper/Helper.kt new file mode 100644 index 0000000..971603c --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/Helper.kt @@ -0,0 +1,185 @@ +package com.video.mobile.wallpaper + +import android.content.Context +import android.content.Intent +import android.os.Build +import android.os.Parcelable +import android.util.Log +import android.widget.Toast +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.video.mobile.wallpaper.database.DataBaseManager +import com.video.mobile.wallpaper.database.VideoWallpaper +import okhttp3.ResponseBody +import java.io.BufferedReader +import java.io.ByteArrayOutputStream +import java.io.File +import java.io.FileOutputStream +import java.io.IOException +import java.io.InputStream +import java.io.InputStreamReader +import java.io.OutputStream +import java.io.Reader +import java.io.StringWriter +import java.lang.reflect.Type +import java.nio.charset.StandardCharsets +import java.util.concurrent.Executors + +object Helper { + + val thumbnailStr: String = "https://neutrolabgames.com/LiveLoop/CpanelPix/VideoThumb/" + fun showMyLog(message: String) { + Log.d(App.TAG, message) + } + + fun loadJson(context: Context) { + val name = arrayOf("Trending.json", "Explore.json", "Shift.json") + val cachedThreadPool = Executors.newFixedThreadPool(3) + for (i in 0..2) { + val task = i + cachedThreadPool.execute { + val gson: Gson = Gson() + var open = context.assets.open(name[task]) + + val type: Type = + object : TypeToken?>() { + }.type + val covertStr: String = getJsonStr(open) + val data: List = + gson.fromJson(covertStr, type) + for (wallpaper in data) { + DataBaseManager.insertDb(wallpaper) + } +// Shared.INSTANCE.setDbinit("1") + + } + } + } + + fun showToast(context: Context,message: String){ + Toast.makeText(context,message, Toast.LENGTH_SHORT).show() + } + + fun getJsonStr(stream: InputStream): String { + var covertStr = "" + try { + val writer = StringWriter() + val buffer = CharArray(stream.available()) + val reader: Reader = BufferedReader(InputStreamReader(stream, StandardCharsets.UTF_8)) + var a = 0 + while ((reader.read(buffer).also { a = it }) != -1) { + writer.write(buffer, 0, a) + } + covertStr = writer.toString() + } catch (e: IOException) { + return covertStr + } + return covertStr + } + + + + @Suppress("DEPRECATION") + inline fun Intent.getSerializableExtraCompat(key: String): T? { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + getSerializableExtra(key, T::class.java) + } else { + getSerializableExtra(key) as? T + } + } + + + fun writeFile(input: InputStream, filePath: String): Boolean { + try { + val byteArray = ByteArray(4096) + val output = ByteArrayOutputStream() + var bytesRead: Int + while ((input.read(byteArray).also { bytesRead = it }) != -1) { + output.write(byteArray, 0, bytesRead) + } + + val file = File(filePath) + if (!file.exists()) { + file.createNewFile() + } + + val fileOutputStream = FileOutputStream(filePath) + fileOutputStream.write(output.toByteArray()) + output.close() + fileOutputStream.close() + return true + } catch (ex: Exception) { + showMyLog("---------ex=${ex.message}" ) + return false + } + } + + fun writeResponseBodyToDisk(body: ResponseBody, filePath: String): Boolean { + return try { + val file = File(filePath) + var inputStream: InputStream? = null + var outputStream: OutputStream? = null + + try { + val buffer = ByteArray(8 * 1024) + var bytesRead: Int + inputStream = body.byteStream() + outputStream = FileOutputStream(file) + + var totalBytes: Long = 0 + while (inputStream.read(buffer).also { bytesRead = it } != -1) { + outputStream.write(buffer, 0, bytesRead) + totalBytes += bytesRead + } + outputStream.flush() + + showMyLog("downloaded=$totalBytes contentType = ${body.contentType()}") + val bytes = body.bytes() + showMyLog("bytes = ${String(bytes.take(100).toByteArray())}") + + // 这里不能用 contentLength,因为 chunked = -1 + totalBytes > 0 + } finally { + inputStream?.close() + outputStream?.close() + } + } catch (e: Exception) { + e.printStackTrace() + false + } + } + +// fun writeResponseBodyToDisk(body: ResponseBody, filePath: String): Boolean { +// return try { +// val file = File(filePath) +// var inputStream: InputStream? = null +// var outputStream: OutputStream? = null +// +// try { +// val buffer = ByteArray(8 * 1024) +// var bytesRead: Int +// inputStream = body.byteStream() +// outputStream = FileOutputStream(file) +// +// while (inputStream.read(buffer).also { bytesRead = it } != -1) { +// outputStream.write(buffer, 0, bytesRead) +// } +// outputStream.flush() +// +// // ✅ 校验完整性 +// val downloaded = file.length() +// val expected = body.contentLength() +// showMyLog("downloaded=$downloaded , expected=$expected") +// +// downloaded == expected || expected == -1L +// } finally { +// inputStream?.close() +// outputStream?.close() +// } +// } catch (e: Exception) { +// e.printStackTrace() +// false +// } +// } + +} \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/SplashActivity.kt b/app/src/main/java/com/video/mobile/wallpaper/SplashActivity.kt new file mode 100644 index 0000000..d8faefc --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/SplashActivity.kt @@ -0,0 +1,63 @@ +package com.video.mobile.wallpaper + +import android.content.Intent +import android.os.Build +import android.os.Bundle +import android.os.CountDownTimer +import android.widget.ProgressBar +import android.widget.TextView +import androidx.activity.enableEdgeToEdge +import androidx.appcompat.app.AppCompatActivity + +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import com.video.mobile.wallpaper.main.MainActivity + + +class SplashActivity : AppCompatActivity() { + + private var countDownTimer: CountDownTimer? = null + private val timer = 2000L + + private lateinit var progressBar: ProgressBar + private lateinit var textProgress: TextView + + override fun onCreate(savedInstanceState: Bundle?) { +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { +// installSplashScreen() +// } + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContentView(R.layout.activity_splash) + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) + insets + } + progressBar = findViewById(R.id.progress_bar) + textProgress = findViewById(R.id.textview_progress) + countDownTimer = object : CountDownTimer(timer, 100) { + override fun onTick(millisUntilFinished: Long) { + val v: Float = + 100 - millisUntilFinished.toFloat() / timer * 100 + val v1 = v.toInt() + progressBar.progress = v1 + textProgress.text = getString(R.string.splash_progress_text, v1) + } + + override fun onFinish() { + launchMain() + } + + } + countDownTimer?.start() + } + + private fun launchMain() { + val max = 100 + textProgress.text = getString(R.string.splash_progress_text, max) + progressBar.progress = max + startActivity(Intent(this@SplashActivity, MainActivity::class.java)) + finish() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/database/DataBaseManager.kt b/app/src/main/java/com/video/mobile/wallpaper/database/DataBaseManager.kt new file mode 100644 index 0000000..dce866a --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/database/DataBaseManager.kt @@ -0,0 +1,143 @@ +package com.video.mobile.wallpaper.database + +import android.content.Context +import com.video.mobile.wallpaper.BuildConfig +import com.video.mobile.wallpaper.Helper +import io.objectbox.Box +import io.objectbox.BoxStore +import io.objectbox.android.AndroidScheduler +import io.objectbox.config.DebugFlags +import io.objectbox.query.Query +import io.objectbox.reactive.DataSubscription +import io.objectbox.reactive.DataSubscriptionList + +object DataBaseManager { + val pageSize = 10 + + var boxStore: BoxStore? = null + + + var videoWallpaperBox: Box? = null + + var likeWallpaperBox: Box? = null + + + val observer: DataSubscription? = null + + + fun init(context: Context?) { + boxStore = MyObjectBox.builder().androidContext(context) + .debugFlags(DebugFlags.LOG_QUERIES or DebugFlags.LOG_QUERY_PARAMETERS) + .build() + + } + + fun getDataBox(): Box? { + videoWallpaperBox = videoWallpaperBox ?: boxStore?.boxFor(VideoWallpaper::class.java) + + return videoWallpaperBox + } + + fun getLikeBox(): Box? { + likeWallpaperBox = likeWallpaperBox ?: boxStore?.boxFor(LikeWallpaper::class.java) + return likeWallpaperBox + } + + fun setLikeUpdateListener(queryAllLike:(List)->Unit): DataSubscription { + val likeBox: Box? = getLikeBox() + val build: Query = likeBox!!.query() + .build() + return build.subscribe(DataSubscriptionList()) + .on(AndroidScheduler.mainThread()) + .observer { data -> + Helper.showMyLog("---OnLikeUpdateListener-------------" + data.size) + queryAllLike(data) + } + } + + fun insertDb(resultData: VideoWallpaper) { + val objectBox: Box? = getDataBox() + val first: VideoWallpaper? = objectBox!!.query() + .equal(VideoWallpaper_.wallpapertype, resultData.wallpapertype) + .equal(VideoWallpaper_.id, resultData.id) + .build() + .findFirst() + if (first == null) { +// Common.logMsg("---insertDb------Wallpapertype------" + resultData.getWallpapertype() + "-------id=" + resultData.getId()); + Helper.showMyLog("--------insertDb ${resultData.wallpapertype} + ${resultData.id}") + objectBox.put(resultData) + } + } + + + fun insertLike(favoriteData: LikeWallpaper) { + val likeBox: Box? = getLikeBox() + val first: LikeWallpaper? = likeBox!!.query() + .equal(LikeWallpaper_.id, favoriteData.id) + .build() + .findFirst() + if (first == null) { + Helper.showMyLog("---insertLike-----------------id=" + favoriteData.id) + likeBox.put(favoriteData) + } else { + Helper.showMyLog("---insertLike-----------------id=" + favoriteData.id) + } + } + + + fun deleteLike(id: Long,deleteResult:(b: Boolean)-> Unit) { + val likeBox: Box? = getLikeBox() + val first: LikeWallpaper? = likeBox!!.query() + .equal(LikeWallpaper_.id, id) + .build() + .findFirst() + if (first != null) { + val remove = likeBox.remove(first.objectId) + deleteResult(remove) + Helper.showMyLog("---deleteLike-----------------id=$id") + } + } + + fun queryIsLike(id: Long): Boolean { + val likeBox: Box? = getLikeBox() + val first: LikeWallpaper? = likeBox!!.query() + .equal(LikeWallpaper_.id, id) + .build() + .findFirst() + return first != null + } + + + + fun queryData(wallpaperType: Long, currentPage: Int): List { + val offset: Int = (currentPage - 1) * pageSize + + val objectBoxLike: Box? = getDataBox() + val data: List = objectBoxLike!!.query() + .equal(VideoWallpaper_.wallpapertype, wallpaperType) + .build() + .find(offset.toLong(), pageSize.toLong()) + + return data + } + + fun queryLike(currentPage: Int): List { + val offset: Int = (currentPage - 1) * pageSize + val likeBox: Box? = getLikeBox() + val data: List = likeBox!!.query() + .build() + .find(offset.toLong(), pageSize.toLong()) + + return data + } + + fun queryAllData(wallpaperType: Long): List { + val objectBoxLike: Box? = getDataBox() + val data: List = objectBoxLike!!.query() + .equal(VideoWallpaper_.wallpapertype, wallpaperType) + .build() + .find() + + return data + } +} \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/database/LikeWallpaper.kt b/app/src/main/java/com/video/mobile/wallpaper/database/LikeWallpaper.kt new file mode 100644 index 0000000..df20521 --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/database/LikeWallpaper.kt @@ -0,0 +1,23 @@ +package com.video.mobile.wallpaper.database + +import io.objectbox.annotation.Entity +import io.objectbox.annotation.Id +import java.io.Serializable + + +@Entity +data class LikeWallpaper( + + @Id + var objectId: Long = 0, + var description: String? = null, + + var id: Long = 0, + + var image: String? = null, + + //0 :trending 1:dnamic 2:shift 3:explore + var wallpapertype: Long = 0, + + var thumbnail: String? = null +) : Serializable diff --git a/app/src/main/java/com/video/mobile/wallpaper/database/VideoWallpaper.kt b/app/src/main/java/com/video/mobile/wallpaper/database/VideoWallpaper.kt new file mode 100644 index 0000000..78d0e47 --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/database/VideoWallpaper.kt @@ -0,0 +1,24 @@ +package com.video.mobile.wallpaper.database + +import io.objectbox.annotation.Entity +import io.objectbox.annotation.Id +import java.io.Serializable + + +@Entity +data class VideoWallpaper( + @Id + var objectId: Long = 0, + var category: String? = null, + + var description: String? = null, + + var downloads: String? = null, + var id: Long = 0, + var image: String? = null, + var pro: Int = 0, + var resolution: String? = null, + var thumbnail: String? = null, + //0 :trending 1:dnamic 2:shift 3:explore + var wallpapertype: Long = 0 +): Serializable diff --git a/app/src/main/java/com/video/mobile/wallpaper/favorite/FavoriteActivity.kt b/app/src/main/java/com/video/mobile/wallpaper/favorite/FavoriteActivity.kt new file mode 100644 index 0000000..0e5d9c5 --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/favorite/FavoriteActivity.kt @@ -0,0 +1,124 @@ +package com.video.mobile.wallpaper.favorite + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import android.widget.ImageView +import android.widget.LinearLayout +import androidx.activity.enableEdgeToEdge +import androidx.activity.result.contract.ActivityResultContracts +import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.isVisible +import androidx.lifecycle.LiveData +import androidx.lifecycle.Observer +import androidx.paging.Pager +import androidx.paging.PagingConfig +import androidx.paging.PagingData +import androidx.paging.liveData +import androidx.paging.map +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.video.mobile.wallpaper.Helper +import com.video.mobile.wallpaper.R +import com.video.mobile.wallpaper.database.DataBaseManager +import com.video.mobile.wallpaper.database.LikeWallpaper +import com.video.mobile.wallpaper.page.LikePageSource +import com.video.mobile.wallpaper.preview.DisplayVideoActivity +import com.video.mobile.wallpaper.utils.RecyclerViewSpace + +class FavoriteActivity : AppCompatActivity() { + private lateinit var imageBack: ImageView + private lateinit var recyclerView: RecyclerView + private lateinit var layoutEmpty: LinearLayout + private lateinit var favoriteAdapter: FavoriteAdapter + + private val launcher = registerForActivityResult( + ActivityResultContracts.StartActivityForResult() + ) { result -> + if (result.resultCode == RESULT_OK) { + val deleteSuccess = result.data?.getBooleanExtra(DisplayVideoActivity.IS_REFRESH, false) ?: false + if (deleteSuccess) { + favoriteAdapter.refresh() + Helper.showMyLog("--------- favoriteAdapter.refresh()") + } + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContentView(R.layout.activity_favorite) + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) + insets + } + + imageBack = findViewById(R.id.image_back) + imageBack.setOnClickListener { finish() } + recyclerView = findViewById(R.id.favorite_recyclerview) + layoutEmpty = findViewById(R.id.layout_empty) + + + init() + } + + + private fun init() { + favoriteAdapter = FavoriteAdapter(this@FavoriteActivity) { data, strImage -> + launcher.launch(Intent(this@FavoriteActivity, DisplayVideoActivity::class.java).apply { + putExtra(DisplayVideoActivity.KEY_LIKE_WALLPAPER, data) + putExtra(DisplayVideoActivity.THUMBNAIL_STRING, strImage) + putExtra(DisplayVideoActivity.KEY_TYPE, DisplayVideoActivity.SOURCE_LIKE) + }) + } + recyclerView.run { + adapter = favoriteAdapter + layoutManager = GridLayoutManager(this@FavoriteActivity, 2) + addItemDecoration(RecyclerViewSpace(3, 3, 2)) + } + + getPagingData().observe(this@FavoriteActivity, + object : Observer> { + override fun onChanged(value: PagingData) { + value.map { item -> + Helper.showMyLog("---------LikeWallpaper = ${item.id}") // 打印每条数据 + item + }.let { favoriteAdapter.submitData(lifecycle, it) } + + } + + }); + + favoriteAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { + override fun onChanged() { + checkEmpty() + } + + override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { + checkEmpty() + } + + override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) { + checkEmpty() + } + + private fun checkEmpty() { + Helper.showMyLog("---------checkEmpty") // 打印每条数据 + layoutEmpty.isVisible = favoriteAdapter.itemCount == 0 + recyclerView.isVisible = favoriteAdapter.itemCount != 0 + } + }) + + } + + private fun getPagingData(): LiveData> { + + return Pager( + PagingConfig(DataBaseManager.pageSize) + ) { LikePageSource() }.liveData + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/favorite/FavoriteAdapter.kt b/app/src/main/java/com/video/mobile/wallpaper/favorite/FavoriteAdapter.kt new file mode 100644 index 0000000..be279d7 --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/favorite/FavoriteAdapter.kt @@ -0,0 +1,91 @@ +package com.video.mobile.wallpaper.favorite + +import android.content.Context +import android.graphics.drawable.Drawable +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.constraintlayout.utils.widget.ImageFilterView +import androidx.paging.PagingDataAdapter +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.load.DataSource +import com.bumptech.glide.load.engine.GlideException +import com.bumptech.glide.request.RequestListener +import com.bumptech.glide.request.target.Target +import com.video.mobile.wallpaper.Helper +import com.video.mobile.wallpaper.R +import com.video.mobile.wallpaper.database.LikeWallpaper +import com.video.mobile.wallpaper.database.VideoWallpaper + +class FavoriteAdapter(var context: Context,var clickWallpaper:(wallpaper: LikeWallpaper,thumbnailStr: String)-> Unit) : + PagingDataAdapter(DIFF_CALLBACK) { + + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteAdapterViewHolder { + Helper.showMyLog("-----onCreateViewHolder- ") + return FavoriteAdapterViewHolder( + LayoutInflater.from(parent.context).inflate(R.layout.favorite_adapter, parent, false) + ) + } + + override fun onBindViewHolder(holder: FavoriteAdapterViewHolder, position: Int) { + Helper.showMyLog("-----${position}-- ") + val likeWallpaper = getItem(position) + + likeWallpaper?.run { + Helper.showMyLog("-----${position}--${Helper.thumbnailStr + thumbnail}") + val string = Helper.thumbnailStr + thumbnail + holder.imageFilterView.setOnClickListener { + clickWallpaper(likeWallpaper,string) + } + Glide.with(context) + .asDrawable() + .load(string) + .placeholder(R.drawable.thumbnail_placeholder) + .centerCrop() + .listener(object : RequestListener { + override fun onLoadFailed( + e: GlideException?, + model: Any?, + target: Target, + isFirstResource: Boolean + ): Boolean { + Helper.showMyLog("---onLoadFailed--${e?.message}") + return false + } + + override fun onResourceReady( + resource: Drawable, + model: Any, + target: Target, + dataSource: DataSource, + isFirstResource: Boolean + ): Boolean { + return false + } + }) + .into(holder.imageFilterView) + } ?: Helper.showMyLog("-----erro-- ") + + } + + + inner class FavoriteAdapterViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageFilterView: ImageFilterView = itemView.findViewById(R.id.thumbnail) + + + } +} + +val DIFF_CALLBACK: DiffUtil.ItemCallback = + object : DiffUtil.ItemCallback() { + override fun areItemsTheSame(oldItem: LikeWallpaper, newItem: LikeWallpaper): Boolean { + return oldItem.id == newItem.id + } + + override fun areContentsTheSame(oldItem: LikeWallpaper, newItem: LikeWallpaper): Boolean { + return oldItem.id == newItem.id + } + } \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/main/FragmentAdapter.kt b/app/src/main/java/com/video/mobile/wallpaper/main/FragmentAdapter.kt new file mode 100644 index 0000000..8611a5f --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/main/FragmentAdapter.kt @@ -0,0 +1,12 @@ +package com.video.mobile.wallpaper.main + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity +import androidx.viewpager2.adapter.FragmentStateAdapter + +class FragmentAdapter(context: FragmentActivity, var list: List) : + FragmentStateAdapter(context) { + override fun getItemCount(): Int = list.size + + override fun createFragment(position: Int): Fragment = list[position] +} \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/main/MainActivity.kt b/app/src/main/java/com/video/mobile/wallpaper/main/MainActivity.kt new file mode 100644 index 0000000..0792ff4 --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/main/MainActivity.kt @@ -0,0 +1,91 @@ +package com.video.mobile.wallpaper.main + +import android.content.Intent +import android.os.Bundle +import android.widget.ImageView +import android.widget.TextView +import androidx.activity.enableEdgeToEdge +import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.viewpager2.widget.ViewPager2 +import com.video.mobile.wallpaper.R +import com.video.mobile.wallpaper.favorite.FavoriteActivity + +class MainActivity : AppCompatActivity() { + + + private lateinit var tab1: TextView + private lateinit var tab2: TextView + private lateinit var tab3: TextView + private lateinit var tvList: List + private lateinit var viewPager: ViewPager2 + private lateinit var favoriteBtn: ImageView + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContentView(R.layout.activity_main) + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) + insets + } + + tab1 = findViewById(R.id.text_1_explore) + tab2 = findViewById(R.id.text_2_shift) + tab3 = findViewById(R.id.text_3_trending) + viewPager = findViewById(R.id.viewpager2) + favoriteBtn = findViewById(R.id.favorite_btn) + + tvList = listOf(tab1, tab2, tab3) + setTabSelect(tab1) + setClick() + + + + viewPager.run { + adapter = FragmentAdapter( + this@MainActivity, listOf( + MainFragment.newInstance(3), + MainFragment.newInstance(2), + MainFragment.newInstance(0) + ) + ) + registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { + override fun onPageSelected(position: Int) { + super.onPageSelected(position) + when (position) { + 0 -> setTabSelect(tab1) + 1 -> setTabSelect(tab2) + 2 -> setTabSelect(tab3) + } + } + }) + + } + } + + private fun setClick() { + tab1.setOnClickListener { + setTabSelect(tab1) + viewPager.currentItem = 0 + } + tab2.setOnClickListener { + setTabSelect(tab2) + viewPager.currentItem = 1 + } + tab3.setOnClickListener { + setTabSelect(tab3) + viewPager.currentItem = 2 + } + favoriteBtn.setOnClickListener { + startActivity(Intent(this@MainActivity, FavoriteActivity::class.java)) + } + } + + private fun setTabSelect(textView: TextView) { + tvList.forEach { it.isSelected = false } + textView.isSelected = true + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/main/MainAdapter.kt b/app/src/main/java/com/video/mobile/wallpaper/main/MainAdapter.kt new file mode 100644 index 0000000..dc5b67c --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/main/MainAdapter.kt @@ -0,0 +1,94 @@ +package com.video.mobile.wallpaper.main + +import android.content.Context +import android.graphics.drawable.Drawable +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.constraintlayout.utils.widget.ImageFilterView +import androidx.paging.PagingDataAdapter +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.load.DataSource +import com.bumptech.glide.load.engine.GlideException +import com.bumptech.glide.request.RequestListener +import com.bumptech.glide.request.target.Target +import com.video.mobile.wallpaper.Helper +import com.video.mobile.wallpaper.R +import com.video.mobile.wallpaper.database.VideoWallpaper + +class MainAdapter(var context: Context,var clickWallpaper:(wallpaper: VideoWallpaper,thumbnailStr: String)-> Unit) : + PagingDataAdapter(DIFF_CALLBACK) { + + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MainAdapterViewHolder { + Helper.showMyLog("-----onCreateViewHolder- ") + return MainAdapterViewHolder( + LayoutInflater.from(parent.context).inflate(R.layout.main_adapter, parent, false) + ) + } + + override fun onBindViewHolder(holder: MainAdapterViewHolder, position: Int) { + Helper.showMyLog("-----${position}-- ") + val videoWallpaper = getItem(position) + videoWallpaper?.run { + if (position == 0 || position == 1) { + holder.viewPlaceholder.visibility = View.VISIBLE + } else { + holder.viewPlaceholder.visibility = View.GONE + } + Helper.showMyLog("-----${position}--${Helper.thumbnailStr + thumbnail}") + val string = Helper.thumbnailStr + thumbnail + holder.imageFilterView.setOnClickListener { + clickWallpaper(videoWallpaper,string) + } + Glide.with(context) + .asDrawable() + .load(string) + .placeholder(R.drawable.thumbnail_placeholder) + .centerCrop() + .listener(object : RequestListener { + override fun onLoadFailed( + e: GlideException?, + model: Any?, + target: Target, + isFirstResource: Boolean + ): Boolean { + Helper.showMyLog("---onLoadFailed--${e?.message}") + return false + } + + override fun onResourceReady( + resource: Drawable, + model: Any, + target: Target, + dataSource: DataSource, + isFirstResource: Boolean + ): Boolean { + return false + } + }) + .into(holder.imageFilterView) + } ?: Helper.showMyLog("-----erro-- ") + + } + + + inner class MainAdapterViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageFilterView: ImageFilterView = itemView.findViewById(R.id.thumbnail) + + val viewPlaceholder: View = itemView.findViewById(R.id.view_placeholder) + } +} + +val DIFF_CALLBACK: DiffUtil.ItemCallback = + object : DiffUtil.ItemCallback() { + override fun areItemsTheSame(oldItem: VideoWallpaper, newItem: VideoWallpaper): Boolean { + return oldItem.id == newItem.id + } + + override fun areContentsTheSame(oldItem: VideoWallpaper, newItem: VideoWallpaper): Boolean { + return oldItem.id == newItem.id + } + } \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/main/MainFragment.kt b/app/src/main/java/com/video/mobile/wallpaper/main/MainFragment.kt new file mode 100644 index 0000000..de92d88 --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/main/MainFragment.kt @@ -0,0 +1,110 @@ +package com.video.mobile.wallpaper.main + +import android.content.Intent +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import androidx.lifecycle.LiveData +import androidx.lifecycle.Observer +import androidx.lifecycle.lifecycleScope +import androidx.paging.Pager +import androidx.paging.PagingConfig +import androidx.paging.PagingData +import androidx.paging.liveData +import androidx.paging.map +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.video.mobile.wallpaper.Helper +import com.video.mobile.wallpaper.R +import com.video.mobile.wallpaper.database.DataBaseManager +import com.video.mobile.wallpaper.database.VideoWallpaper +import com.video.mobile.wallpaper.page.AllWallpaperPageSource +import com.video.mobile.wallpaper.preview.DisplayVideoActivity +import com.video.mobile.wallpaper.utils.RecyclerViewSpace +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch +import kotlin.properties.Delegates + +private const val ARG_PARAM1 = "param1" + +class MainFragment : Fragment() { + + private var type by Delegates.notNull() + + + private lateinit var recyclerView: RecyclerView + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + arguments?.let { + type = it.getLong(ARG_PARAM1) + + } + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + val view = inflater.inflate(R.layout.fragment_main, container, false) + recyclerView = view.findViewById(R.id.recycler_view) + onInit() + return view + } + + private fun onInit(){ + val mainAdapter = MainAdapter(requireActivity()){ data,strImage-> + startActivity( Intent(requireActivity(), DisplayVideoActivity::class.java).apply { + putExtra(DisplayVideoActivity.KEY_VIDEO_WALLPAPER,data) + putExtra(DisplayVideoActivity.THUMBNAIL_STRING,strImage) + }) + } + recyclerView.run { + adapter = mainAdapter + layoutManager = GridLayoutManager(requireContext(),2) + addItemDecoration(RecyclerViewSpace(3,3,2)) + } +// viewModel.initType(type) +// lifecycleScope.launch { +// viewModel.videoPagingFlow.collectLatest { pagingData -> +// pagingData.map { item -> +// println("VideoWallpaper = ${item.id}") // 打印每条数据 +// item +// }.let { mainAdapter.submitData(it) } +// } +// } + + getPagingData(type).observe(getViewLifecycleOwner(),object :Observer>{ + override fun onChanged(value: PagingData) { +// mainAdapter.submitData(lifecycle, value) + value.map { item -> + Helper.showMyLog("---------VideoWallpaper = ${item.id}") // 打印每条数据 + item + }.let { mainAdapter.submitData(lifecycle,it) } + + } + + }); + } + + fun getPagingData(wallpaperType: Long): LiveData> { + + return Pager( + PagingConfig(DataBaseManager.pageSize) + ) { AllWallpaperPageSource(wallpaperType) }.liveData + } + + + companion object { + @JvmStatic + fun newInstance(type: Long) = + MainFragment().apply { + arguments = Bundle().apply { + putLong(ARG_PARAM1, type) + + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/main/MainViewModel.kt b/app/src/main/java/com/video/mobile/wallpaper/main/MainViewModel.kt new file mode 100644 index 0000000..264f6e6 --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/main/MainViewModel.kt @@ -0,0 +1,41 @@ +//package com.video.mobile.wallpaper.main +// +//import androidx.lifecycle.LiveData +//import androidx.lifecycle.ViewModel +//import androidx.lifecycle.viewModelScope +//import androidx.paging.Pager +//import androidx.paging.PagingConfig +//import androidx.paging.PagingData +//import androidx.paging.cachedIn +//import androidx.paging.liveData +//import com.video.mobile.wallpaper.database.DataBaseManager +//import com.video.mobile.wallpaper.database.VideoWallpaper +//import com.video.mobile.wallpaper.page.AllWallpaperPageSource +//import kotlinx.coroutines.flow.Flow +//import kotlin.properties.Delegates +// +//class MainViewModel : ViewModel() { +// +// fun getPagingData(wallpaperType: Long): LiveData> { +// +// return Pager( +// PagingConfig(DataBaseManager.pageSize) +// ) { AllWallpaperPageSource(wallpaperType) }.liveData +// } +// +// +// private var type by Delegates.notNull() +// +// fun initType(wallpaperType: Long){ +// type = wallpaperType +// } +// val videoPagingFlow: Flow> = Pager( +// config = PagingConfig( +// pageSize = DataBaseManager.pageSize, // 每页加载数量 +// initialLoadSize = DataBaseManager.pageSize, // 首次加载数量 +// enablePlaceholders = false // 是否占位符 +// ), +// pagingSourceFactory = { AllWallpaperPageSource(type) } +// ).flow +// .cachedIn(viewModelScope) +//} \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/network/CustomResponseBody.kt b/app/src/main/java/com/video/mobile/wallpaper/network/CustomResponseBody.kt new file mode 100644 index 0000000..a544bbf --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/network/CustomResponseBody.kt @@ -0,0 +1,37 @@ +package com.video.mobile.wallpaper.network + +import okhttp3.MediaType +import okhttp3.ResponseBody +import okio.Buffer +import okio.BufferedSource +import okio.ForwardingSource +import okio.buffer +import java.io.IOException + +class CustomResponseBody( + var responseBody: ResponseBody, + var contentLength: String, + var progressListener: (mByte: Long,total: Long,complete: Boolean) -> Unit +) : + ResponseBody() { + + private var bufferedSource: BufferedSource? = null + override fun contentLength(): Long = responseBody.contentLength() + + override fun contentType(): MediaType? = responseBody.contentType() + + override fun source(): BufferedSource = + bufferedSource ?: object : ForwardingSource(responseBody.source()) { + var totalBytesRead: Long = 0L + + @Throws(IOException::class) + override fun read(sink: Buffer, byteCount: Long): Long { + val bytesRead = super.read(sink, byteCount) + totalBytesRead += if (bytesRead != -1L) bytesRead else 0 + + progressListener(totalBytesRead, contentLength.toLong(), bytesRead == -1L) + + return bytesRead + } + }.buffer() +} diff --git a/app/src/main/java/com/video/mobile/wallpaper/network/HttpInterceptor.kt b/app/src/main/java/com/video/mobile/wallpaper/network/HttpInterceptor.kt new file mode 100644 index 0000000..56f67c4 --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/network/HttpInterceptor.kt @@ -0,0 +1,18 @@ +package com.video.mobile.wallpaper.network + +import okhttp3.Interceptor +import okhttp3.Response + +class HttpInterceptor(var progressListener: (mByte: Long, total: Long, complete: Boolean) -> Unit) : + Interceptor { + override fun intercept(chain: Interceptor.Chain): Response { + val originalResponse = chain.proceed(chain.request()) + var fileLength = originalResponse.header("File-Length") + if (fileLength == null) { + fileLength = "0" + } + return originalResponse.newBuilder() + .body(CustomResponseBody(originalResponse.body!!, fileLength, progressListener)) + .build() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/network/RetrofitManager.kt b/app/src/main/java/com/video/mobile/wallpaper/network/RetrofitManager.kt new file mode 100644 index 0000000..47b4d97 --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/network/RetrofitManager.kt @@ -0,0 +1,256 @@ +package com.video.mobile.wallpaper.network + + +import com.video.mobile.wallpaper.BuildConfig +import com.video.mobile.wallpaper.Helper +import io.reactivex.Observable +import io.reactivex.disposables.Disposable +import io.reactivex.functions.Consumer +import io.reactivex.schedulers.Schedulers +import okhttp3.OkHttpClient +import okhttp3.ResponseBody +import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Retrofit +import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory +import java.util.concurrent.TimeUnit + +object RetrofitManager { + + private var clientBuilder: OkHttpClient.Builder? = null + + + private const val BASE_URL = "https://neutrolabgames.com/" + private const val DEFAULT_TIMEOUT = 5L // 秒 + + + val retrofit: Retrofit.Builder by lazy { + Retrofit.Builder() + .baseUrl("https://neutrolabgames.com/") + .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) + } + + private fun createRetrofit( + progressListener: (bytesRead: Long, contentLength: Long, done: Boolean) -> Unit + ): Retrofit { + // 日志拦截器 + val loggingInterceptor = HttpLoggingInterceptor().apply { + level = if (BuildConfig.DEBUG) + HttpLoggingInterceptor.Level.HEADERS + else + HttpLoggingInterceptor.Level.NONE + } + + // OkHttpClient + val client = OkHttpClient.Builder() +// .addInterceptor(loggingInterceptor) + .addNetworkInterceptor(HttpInterceptor(progressListener)) + .connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) + .readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) + .writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) + .build() + + return Retrofit.Builder() + .baseUrl(BASE_URL) + .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) + .client(client) + .build() + } + + + @Synchronized + private fun getRetrofit(progressListener: (mByte: Long, total: Long, complete: Boolean) -> Unit): Retrofit? { + +// retrofit = new Retrofit.Builder() +// .baseUrl(base_Host) +// .client(client) +// /**/ .addConverterFactory(ScalarsConverterFactory.create()) // 支持返回 String 类型 +// * / .addConverterFactory(GsonConverterFactory.create()) */ +// .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) +// .build(); + +// builder = builder ?: Retrofit.Builder() +// .baseUrl(base_Host) +// .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) + + + val DEFAULT_TIMEOUT: Long = 5 + val httpLoggingInterceptor = + HttpLoggingInterceptor().apply { setLevel(HttpLoggingInterceptor.Level.BODY) } + + clientBuilder = clientBuilder ?: OkHttpClient.Builder() + .addInterceptor(httpLoggingInterceptor) + .connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) + .writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) + .readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) + + clientBuilder?.apply { + addInterceptor(HttpInterceptor(progressListener)) + }?.build()?.let { + return retrofit.client(it).build() + } ?: return null + + + } + + fun getMp4( + id: Long, + image: String, + path: String, + progressListener: (mByte: Long, total: Long, complete: Boolean) -> Unit, + resultListener: (isOK: Boolean, savePath: String) -> Unit + ): Disposable { +// val retrofit = createRetrofit(progressListener) +// val api = retrofit.create(VideoApi::class.java) +// Helper.showMyLog("----------getMp4----- ") +// return download(api.getMP4(id, "5eV6snEwfY7Yv6Ub", image, "DL8", "ViewLive"),path,resultListener) + val retrofit = createRetrofit(progressListener) + retrofit.let { + Helper.showMyLog("----------get Mp4----- ") + return it.create(VideoApi::class.java) + .getMP4(id, "5eV6snEwfY7Yv6Ub", image, "DL8", "ViewLive") + .subscribeOn(Schedulers.io()) + .unsubscribeOn(Schedulers.io()) + .observeOn(Schedulers.io()) + .subscribe( + { body -> // onNext + val save = Helper.writeResponseBodyToDisk(body, path) + + Helper.showMyLog("-----save =${save}") + }, + { error -> // onError + resultListener(false, error.message ?: "download error") + }, + { // onComplete + resultListener(true, path) + Helper.showMyLog( "Download completed") + }, + { disposable -> // onSubscribe + Helper.showMyLog("Subscribed, can cancel if needed") + // 例如:保存 disposable 用于取消下载 + }) +// .subscribe(object : Consumer { +// @Throws(Exception::class) +// override fun accept(body: ResponseBody) { +// val b: Boolean = Helper.writeFile(body.byteStream(), path) +// resultListener(b, path) +// } +// }, object : Consumer { +// @Throws(Exception::class) +// override fun accept(throwable: Throwable) { +// resultListener(false, throwable.message.toString()) +// } +// }) + + } + + } + + + fun getShiftMp4( + id: Long, + image: String, + path: String, + progressListener: (mByte: Long, total: Long, complete: Boolean) -> Unit, + resultListener: (isOK: Boolean, savePath: String) -> Unit + ): Disposable { +// +// val retrofit = createRetrofit(progressListener) +// val api = retrofit.create(VideoApi::class.java) +// Helper.showMyLog("----------getShiftMp4----- ") +// return download( +// api.getShiftMP4(id, "5eV6snEwfY7Yv6Ub", image, "DL8", "ViewShiftLive"), +// path, +// resultListener +// ) + val retrofit = createRetrofit(progressListener) + + retrofit.let { + Helper.showMyLog("----------getShiftMp4----- ") + return it.create(VideoApi::class.java) + .getShiftMP4(id, "5eV6snEwfY7Yv6Ub", image, "DL8", "ViewShiftLive") + .subscribeOn(Schedulers.io()) + .unsubscribeOn(Schedulers.io()) + .observeOn(Schedulers.io()) + .subscribe(object : Consumer { + @Throws(Exception::class) + override fun accept(body: ResponseBody) { + val b: Boolean = Helper.writeResponseBodyToDisk(body, path) + resultListener(b, path) + } + }, object : Consumer { + @Throws(Exception::class) + override fun accept(throwable: Throwable) { + resultListener(false, throwable.message.toString()) + } + }) + + + } + } + + + private fun download( + apiCall: Observable, + path: String, + resultListener: (Boolean, String) -> Unit + ): Disposable { + return apiCall + .subscribeOn(Schedulers.io()) + .observeOn(Schedulers.io()) + .subscribe(object : Consumer { + @Throws(Exception::class) + override fun accept(body: ResponseBody) { + val success = try { + Helper.writeFile(body.byteStream(), path) + } catch (e: Exception) { + e.printStackTrace() + false + } + resultListener(success, path) + } + }, object : Consumer { + @Throws(Exception::class) + override fun accept(throwable: Throwable) { + resultListener(false, throwable.message ?: "unknown error") + } + }) + } + +// public void getDnamicMp4(int id, String image,String path, OnVideoResultListener listener) { + // musicApi.getDMP4(id,"5eV6snEwfY7Yv6Ub",image,"DL8","ViewTimerLive","1" ) + // .subscribeOn(Schedulers.io()) + // .unsubscribeOn(Schedulers.io()) + // .observeOn(Schedulers.io()) + // .subscribe(new ObserverWrapper<>(new OnRequestListener() { + // @Override + // public void onFail(String errorMsg) { + // listener.onVideoResult(false,errorMsg); + // } + // + // @Override + // public void onSuccess(ResponseBody data) { + // boolean b = Common.writeFile(data.byteStream(), path); + // listener.onVideoResult(b,path); + // } + // + // })); + // } + + +// companion object { +// @Volatile +// private lateinit var REQUEST_MANAGER: RetrofitManager +// +// val instance: RetrofitManager +// get() { +// if (REQUEST_MANAGER == null) { +// synchronized(RetrofitManager::class.java) { +// if (REQUEST_MANAGER == null) { +// REQUEST_MANAGER = RetrofitManager() +// } +// } +// } +// return REQUEST_MANAGER +// } +// } +} diff --git a/app/src/main/java/com/video/mobile/wallpaper/network/VideoApi.kt b/app/src/main/java/com/video/mobile/wallpaper/network/VideoApi.kt new file mode 100644 index 0000000..9163636 --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/network/VideoApi.kt @@ -0,0 +1,41 @@ +package com.video.mobile.wallpaper.network + +import io.reactivex.Observable +import okhttp3.ResponseBody +import retrofit2.http.Field +import retrofit2.http.FormUrlEncoded +import retrofit2.http.POST + +interface VideoApi { + @POST("LiveLoop/AppData/jmywall.php") + @FormUrlEncoded + fun getMP4( + @Field("pi") pi: Long, + @Field("medium") medium: String?, + @Field("alpha") alpha: String?, + @Field("version") version: String?, + @Field("quality") quality: String? + ): Observable + + + //shift + @POST("LiveLoop/AppData/jshiftwall.php") + @FormUrlEncoded + fun getShiftMP4( + @Field("pi") pi: Long, + @Field("medium") medium: String?, + @Field("alpha") alpha: String?, + @Field("version") version: String?, + @Field("quality") quality: String? + ): Observable // + // //Dnamic + // @POST("LiveLoop/AppData/jdaytimewall.php") + // @FormUrlEncoded + // Observable getDMP4(@Field("pi") int pi, + // @Field("medium") String medium, + // @Field("alpha") String alpha, + // @Field("version") String version, + // @Field("quality") String quality, + // @Field("filenumber") String filenumber); + +} \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/page/AllWallpaperPageSource.kt b/app/src/main/java/com/video/mobile/wallpaper/page/AllWallpaperPageSource.kt new file mode 100644 index 0000000..f268bf4 --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/page/AllWallpaperPageSource.kt @@ -0,0 +1,36 @@ +package com.video.mobile.wallpaper.page + +import androidx.paging.PagingSource +import androidx.paging.PagingState +import com.video.mobile.wallpaper.Helper +import com.video.mobile.wallpaper.database.DataBaseManager +import com.video.mobile.wallpaper.database.VideoWallpaper + +class AllWallpaperPageSource(var wallpaperType: Long) : PagingSource() { + + override fun getRefreshKey(state: PagingState): Int? { + + return null + } + + override suspend fun load(params: LoadParams): LoadResult { + + try { + val page = params.key ?: 1 + + page.let { + val data: List = DataBaseManager.queryData(wallpaperType, it) + Helper.showMyLog("--------load data ${data.size} ") + return LoadResult.Page( + data, + if (it > 1) it - 1 else null, + if (data.isEmpty()) null else it + 1 + ) + } + + } catch (e: Exception) { + Helper.showMyLog("--------load ${e.message} ") + return LoadResult.Error(e) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/page/LikePageSource.kt b/app/src/main/java/com/video/mobile/wallpaper/page/LikePageSource.kt new file mode 100644 index 0000000..d549809 --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/page/LikePageSource.kt @@ -0,0 +1,34 @@ +package com.video.mobile.wallpaper.page + +import androidx.paging.PagingSource +import androidx.paging.PagingState +import com.video.mobile.wallpaper.database.DataBaseManager +import com.video.mobile.wallpaper.database.LikeWallpaper +import com.video.mobile.wallpaper.database.VideoWallpaper + +class LikePageSource() : PagingSource() { + + override fun getRefreshKey(state: PagingState): Int? { + + return null + } + + override suspend fun load(params: LoadParams): LoadResult { + + try { + val page = params.key ?: 1 + + page.let { + val data: List = DataBaseManager.queryLike(it) + return LoadResult.Page( + data, + if (it > 1) it - 1 else null, + if (data.isEmpty()) null else it + 1 + ) + } + + } catch (e: Exception) { + return LoadResult.Error(e) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/preview/DisplayVideoActivity.kt b/app/src/main/java/com/video/mobile/wallpaper/preview/DisplayVideoActivity.kt new file mode 100644 index 0000000..7c5f635 --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/preview/DisplayVideoActivity.kt @@ -0,0 +1,502 @@ +package com.video.mobile.wallpaper.preview + +import android.app.WallpaperManager +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import android.graphics.drawable.Drawable +import android.net.Uri +import android.os.Bundle +import android.view.View +import android.view.ViewGroup +import android.widget.FrameLayout +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.ProgressBar +import android.widget.RelativeLayout +import android.widget.TextView +import androidx.activity.OnBackPressedCallback +import androidx.activity.enableEdgeToEdge +import androidx.annotation.OptIn +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.FileProvider +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.media3.common.MediaItem +import androidx.media3.common.PlaybackException +import androidx.media3.common.Player +import androidx.media3.common.util.UnstableApi +import androidx.media3.exoplayer.ExoPlayer +import androidx.media3.ui.PlayerView +import com.bumptech.glide.Glide +import com.bumptech.glide.load.DataSource +import com.bumptech.glide.load.engine.GlideException +import com.bumptech.glide.request.RequestListener +import com.bumptech.glide.request.target.Target +import com.video.mobile.wallpaper.App +import com.video.mobile.wallpaper.Helper +import com.video.mobile.wallpaper.Helper.getSerializableExtraCompat +import com.video.mobile.wallpaper.R +import com.video.mobile.wallpaper.database.DataBaseManager +import com.video.mobile.wallpaper.database.LikeWallpaper +import com.video.mobile.wallpaper.database.VideoWallpaper +import com.video.mobile.wallpaper.network.RetrofitManager +import com.video.mobile.wallpaper.utils.RecyclerViewSpace +import io.reactivex.disposables.Disposable +import java.io.File +import kotlin.properties.Delegates + +class DisplayVideoActivity : AppCompatActivity() { + + + companion object { + val KEY_VIDEO_WALLPAPER = "video_wallpaper" + val KEY_LIKE_WALLPAPER = "like_wallpaper" + val KEY_TYPE = "source" + val SOURCE_MAIN = -1 + val SOURCE_LIKE = -2 + val THUMBNAIL_STRING = "thumbnail_string" + val IS_REFRESH = "is_refresh" + + } + + private var intentVideoWallpaper: VideoWallpaper? = null + private var intentLikeWallpaper: LikeWallpaper? = null + + private var sourceType: Int = -1 + private val loadingType_circle = 0 + private val loadingType_download = 1 + private val loadingType_retry = 2 + private var exoPlayer: ExoPlayer? = null + private lateinit var downloadingProgressLayout: LinearLayout + private lateinit var backFrameLayout: FrameLayout + private lateinit var downloadProgressbar: ProgressBar + private lateinit var progressBar: ProgressBar + private lateinit var playerView: PlayerView + private lateinit var retryLinearLayout: LinearLayout + private lateinit var loadingLayout: RelativeLayout + private lateinit var retryTextView: TextView + + private var wallpaperId by Delegates.notNull() + + private var wallpaperType by Delegates.notNull() + private lateinit var thumbnailImageView: ImageView + + private lateinit var cachePath: String + private lateinit var cacheFile: File + + private var disposable: Disposable? = null + + private lateinit var networkErrorStr: String + private lateinit var playErrorStr: String + private lateinit var thumbnailStr: String + + private lateinit var textDescriptor: TextView + private lateinit var textBtnSet: TextView + private lateinit var frameFavorite: FrameLayout + private lateinit var imageFavorite: ImageView + + private lateinit var textRetry: TextView + + private lateinit var bottomLayout: LinearLayout + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContentView(R.layout.activity_display_video) + backFrameLayout = findViewById(R.id.back_btn) + bottomLayout = findViewById(R.id.layout_btn) + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) +// v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) + val params = backFrameLayout.layoutParams as ViewGroup.MarginLayoutParams + params.topMargin = systemBars.top + backFrameLayout.layoutParams = params + + val marginLayoutParams = bottomLayout.layoutParams as ViewGroup.MarginLayoutParams + marginLayoutParams.bottomMargin = + systemBars.bottom + RecyclerViewSpace.dpToPx(20f).toInt() + bottomLayout.layoutParams = marginLayoutParams + Helper.showMyLog("---systemBars.top--${systemBars.top} bottom = ${systemBars.bottom}") + insets + } + downloadingProgressLayout = findViewById(R.id.download_progress_layout) + downloadProgressbar = findViewById(R.id.horizontal_progressbar) + progressBar = findViewById(R.id.normal_progress) + playerView = findViewById(R.id.player_view) + retryLinearLayout = findViewById(R.id.retry_layout) + loadingLayout = findViewById(R.id.loading_bg_layout) + retryTextView = findViewById(R.id.tv_load_fail) + thumbnailImageView = findViewById(R.id.image_thumbnail) + textRetry = findViewById(R.id.tv_retry_button) + + textDescriptor = findViewById(R.id.tv_video_describe) + textBtnSet = findViewById(R.id.text_btn_set) + frameFavorite = findViewById(R.id.framelayout_favorite) + imageFavorite = findViewById(R.id.im_favorite) + + + networkErrorStr = getString(R.string.download_fail_network) + playErrorStr = getString(R.string.download_fail_unknown) + getIntentData() + setAllClick() + initPlayerView() + if (cacheFile.exists()) { + playVideo(cacheFile) + } else { + getNetWorkVideo(cachePath) + } + onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + Helper.showMyLog("---handleOnBackPressed") + backPage() + } + + }) + + } + + private fun setAllClick() { + backFrameLayout.setOnClickListener { + backPage() + + } + textBtnSet.setOnClickListener { + if (cacheFile.exists()) { + setVideoWallpaper() + } else { + Helper.showToast(this@DisplayVideoActivity, getString(R.string.cache_file_no_lost)) + } + } + textRetry.setOnClickListener { + getNetWorkVideo(cachePath) + } + frameFavorite.setOnClickListener { + showCircleLoading(true, loadingType_circle) + val newStatus = !imageFavorite.isSelected + if (newStatus) { + intentVideoWallpaper?.let { + Helper.showMyLog("--- Video --insertLike ") + DataBaseManager.insertLike(LikeWallpaper().apply { + id = it.id + description = it.description + image = it.image + wallpapertype = it.wallpapertype + thumbnail = it.thumbnail + }) + } + intentLikeWallpaper?.let { + Helper.showMyLog("---Like --insertLike ") + DataBaseManager.insertLike(it) + } + imageFavorite.isSelected = newStatus + showCircleLoading(false) + } else { + DataBaseManager.deleteLike(wallpaperId) { deleteOk -> + showCircleLoading(false) + if (deleteOk) { + imageFavorite.isSelected = newStatus + Helper.showToast( + this@DisplayVideoActivity, + getString(R.string.remove_favorite_ok) + ) + } else { + Helper.showToast( + this@DisplayVideoActivity, + getString(R.string.remove_favorite_fail) + ) + } + } + } + } + } + + + private fun backPage() { + val resultIntent = Intent() + resultIntent.putExtra(IS_REFRESH, !imageFavorite.isSelected) + setResult(RESULT_OK, resultIntent) + finish() + } + + private fun getIntentData() { + sourceType = intent.getIntExtra(KEY_TYPE, SOURCE_MAIN) + when (sourceType) { + SOURCE_MAIN -> { + intentVideoWallpaper = intent.getSerializableExtraCompat(KEY_VIDEO_WALLPAPER) + Helper.showMyLog("---序列化 intentVideoWallpaper=${intentVideoWallpaper} ") + intentVideoWallpaper?.let { + wallpaperId = it.id + wallpaperType = it.wallpapertype + } + + + } + + SOURCE_LIKE -> { + intentLikeWallpaper = intent.getSerializableExtraCompat(KEY_LIKE_WALLPAPER) + Helper.showMyLog("---序列化 intentLikeWallpaper=${intentLikeWallpaper} ") + intentLikeWallpaper?.let { + wallpaperId = it.id + wallpaperType = it.wallpapertype + } + } + } + textDescriptor.text = intentVideoWallpaper?.description ?: intentLikeWallpaper?.description + thumbnailStr = intent.getStringExtra(THUMBNAIL_STRING).toString() + + cachePath = getCachePath(wallpaperId) + cacheFile = File(cachePath) + + Helper.showMyLog("--thumbnailStr=${thumbnailStr} ") + Glide.with(this) + .asDrawable() + .load(thumbnailStr) + .placeholder(R.drawable.thumbnail_placeholder) + .centerCrop() + .listener(object : RequestListener { + override fun onLoadFailed( + e: GlideException?, + model: Any?, + target: Target, + isFirstResource: Boolean + ): Boolean { + Helper.showMyLog("---onLoadFailed--${e?.message}") + return false + } + + override fun onResourceReady( + resource: Drawable, + model: Any, + target: Target, + dataSource: DataSource, + isFirstResource: Boolean + ): Boolean { + return false + } + }) + .into(thumbnailImageView) + + + imageFavorite.setSelected(DataBaseManager.queryIsLike(wallpaperId)) + } + + + private fun initPlayerView() { + exoPlayer = ExoPlayer.Builder(this) + .build() + exoPlayer?.run { + repeatMode = ExoPlayer.REPEAT_MODE_ONE +// addListener(object : Player.Listener { +// override fun onPlaybackStateChanged(playbackState: Int) { +// if (playbackState == Player.STATE_READY) { +//// showCircleLoading(true, loadingType_circle) +// Helper.showMyLog("-------onPlaybackStateChanged-----") +// } +// } +// }) + } + playerView.setPlayer(exoPlayer) + + } + + private fun setVideoWallpaper() { + WallpaperPathManager.video_wallpaper_path = cachePath + Helper.showMyLog("----------setVideo_path---cachePath=$cachePath") + val wallpaperManager = WallpaperManager.getInstance(this) + try { + wallpaperManager.clear() + Helper.showMyLog("----------clear=") + } catch (e: java.lang.Exception) { + Helper.showMyLog("---------e=" + e.message) + } + + try { + val componentName = + ComponentName(this@DisplayVideoActivity, VideoWallpaperService::class.java) + val intent = Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER) + intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, componentName) + startActivity(intent) + } catch (e: java.lang.Exception) { + Helper.showMyLog("---------e=" + e.message) + } + finish() + } + + @OptIn(UnstableApi::class) + private fun playVideo(file: File) { + try { + val uri = Uri.fromFile(file) +// val uriFromFilePath: Uri = Com.getUriFromFilePath(this, filePath) +// val mediaItem = MediaItem.fromUri(uriFromFilePath) +// val mediaSource: ProgressiveMediaSource = createMediaSource(mediaItem) + val mediaItem = MediaItem.fromUri(uri) + exoPlayer?.setMediaItem(mediaItem) + exoPlayer?.addListener(object : Player.Listener { + override fun onPlayerError(error: PlaybackException) { + super.onPlayerError(error) + Helper.showMyLog("-------------onPlayerError error=${error.message}") +// deleteFile(cacheFile) + showCircleLoading(true, loadingType_retry, playErrorStr) + + } + + override fun onRenderedFirstFrame() { + super.onRenderedFirstFrame() + //播放视频第一帧 + showCircleLoading(false) + thumbnailImageView.visibility = View.GONE + + } + }) + exoPlayer?.prepare() + exoPlayer?.play() + } catch (e: Exception) { + Helper.showMyLog("playVideo ${e.message}") +// deleteFile(cacheFile) + showCircleLoading(true, loadingType_retry, playErrorStr) + } + } + + private fun getNetWorkVideo(cachePath: String) { + showCircleLoading(true, loadingType_circle) + val imageStr = intentVideoWallpaper?.image ?: intentLikeWallpaper?.image + imageStr?.let { + if (wallpaperType == 2L) { + //shift + disposable = RetrofitManager + .getShiftMp4( + wallpaperId, + it, + cachePath, + { mByte: Long, total: Long, complete: Boolean -> + runOnUiThread { + updateDownloadProgress(mByte, total, complete) + } + + }) { ok: Boolean, path: String -> + runOnUiThread { + requestResult(ok, path) + } + + } + } else { + disposable = RetrofitManager.getMp4( + wallpaperId, + it, + cachePath, + { mByte: Long, total: Long, complete: Boolean -> + runOnUiThread { + updateDownloadProgress(mByte, total, complete) + } + }) { ok: Boolean, path: String -> + runOnUiThread { + requestResult(ok, path) + } + } + } + } + + } + + private fun requestResult(isOK: Boolean, path: String) { + Helper.showMyLog("------------requestResult-------path= ${path}") + val file = File(path) + if (file.exists() && isOK) { + playVideo(file) + } else { + showCircleLoading(true, loadingType_retry) + } + + } + + private fun showCircleLoading( + show: Boolean, + loadingType: Int? = 0, + retryString: String? = networkErrorStr + ) { + if (show) { + loadingLayout.visibility = View.VISIBLE + when (loadingType) { + loadingType_circle -> { + progressBar.visibility = View.VISIBLE + retryLinearLayout.visibility = View.GONE + downloadingProgressLayout.visibility = View.GONE + } + + loadingType_download -> { + progressBar.visibility = View.GONE + retryLinearLayout.visibility = View.GONE + downloadingProgressLayout.visibility = View.VISIBLE + } + + loadingType_retry -> { + progressBar.visibility = View.GONE + retryLinearLayout.visibility = View.VISIBLE + downloadingProgressLayout.visibility = View.GONE + retryTextView.text = retryString + } + } + + } else { + loadingLayout.visibility = View.GONE + } + + } + + private fun updateDownloadProgress(mByte: Long, total: Long, complete: Boolean) { + Helper.showMyLog("------------updateDownloadProgress---- ${mByte}") + if (total <= 0) { + + } else { + val current = ((100 * mByte) / total).toInt() + if (downloadProgressbar.progress != current) { + runOnUiThread(object : Runnable { + override fun run() { + if (downloadingProgressLayout.visibility !== View.VISIBLE) { + showCircleLoading(true, loadingType_download) + Helper.showMyLog("------------showLoading------11-----") + } else { + Helper.showMyLog("------------showLoading------22-----") + } + downloadProgressbar.progress = current + } + }) + } + } + + } + + /** + * 所有下载的视频保存位置 + */ + private fun getCachePath(id: Long): String { + + return "${App.mApp.cacheDir}/$id.mp4" + } + + private fun deleteFile(file: File): Boolean { + return file.exists() && file.delete() + } + + fun getUriFromFilePath(context: Context, filePath: String): Uri? { + val file = File(filePath) + + // 使用 FileProvider 获取 URI + return FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", file) + } + + override fun onDestroy() { + super.onDestroy() + exoPlayer?.release() +// if (countDownTimer != null) { +// countDownTimer.cancel() +// countDownTimer = null +// } + disposable?.isDisposed?.let { + if (!it) { + Helper.showMyLog("----------- disposable?.dispose()---") + disposable?.dispose() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/preview/VideoWallpaperService.kt b/app/src/main/java/com/video/mobile/wallpaper/preview/VideoWallpaperService.kt new file mode 100644 index 0000000..244f33b --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/preview/VideoWallpaperService.kt @@ -0,0 +1,112 @@ +package com.video.mobile.wallpaper.preview + +import android.net.Uri +import android.service.wallpaper.WallpaperService +import android.view.SurfaceHolder +import androidx.annotation.OptIn +import androidx.media3.common.C +import androidx.media3.common.MediaItem +import androidx.media3.common.PlaybackException +import androidx.media3.common.Player +import androidx.media3.common.util.UnstableApi +import androidx.media3.exoplayer.ExoPlayer +import com.video.mobile.wallpaper.Helper +import java.io.File + +class VideoWallpaperService : WallpaperService() { + override fun onCreateEngine(): Engine? = VideoWallpaperEngine() + + inner class VideoWallpaperEngine : Engine() { + private var exoPlayer: ExoPlayer? = null + + + @OptIn(UnstableApi::class) + private fun initExoPlay() { + exoPlayer = ExoPlayer.Builder(this@VideoWallpaperService).build() + exoPlayer?.repeatMode = ExoPlayer.REPEAT_MODE_ONE + update() + } + + override fun onCreate(surfaceHolder: SurfaceHolder?) { + super.onCreate(surfaceHolder) + Helper.showMyLog("-----Engine-----onCreate") + initExoPlay() + + } + + @OptIn(UnstableApi::class) + override fun onSurfaceCreated(holder: SurfaceHolder?) { + super.onSurfaceCreated(holder) + val surface = holder?.surface + if (surface != null) { + exoPlayer?.setVideoSurface(surface) + exoPlayer?.videoScalingMode = C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING + } + + + } + + override fun onVisibilityChanged(visible: Boolean) { + super.onVisibilityChanged(visible) + Helper.showMyLog("-------Engine---onVisibilityChanged visible=$visible") + if (visible) { + update() + exoPlayer?.play() + } else { + exoPlayer?.pause() + } + } + + + override fun onSurfaceDestroyed(holder: SurfaceHolder?) { + super.onSurfaceDestroyed(holder) + Helper.showMyLog("------Engine----onSurfaceDestroyed---") + exoPlayer?.release() + } + + override fun onDestroy() { + super.onDestroy() + Helper.showMyLog("-------Engine---onDestroy---") + + + } + + override fun onSurfaceChanged( + holder: SurfaceHolder?, + format: Int, + width: Int, + height: Int + ) { + super.onSurfaceChanged(holder, format, width, height) + + } + + + private fun update() { + val file = File(WallpaperPathManager.video_wallpaper_path) + if (file.isFile && file.exists()) { + val uri = Uri.fromFile(file) + val mediaItem = MediaItem.fromUri(uri) + exoPlayer?.run { + setMediaItem(mediaItem) + addListener(object : Player.Listener { + override fun onPlayerError(error: PlaybackException) { + super.onPlayerError(error) + Helper.showMyLog("-----------update--onPlayerError") + } + + override fun onRenderedFirstFrame() { + super.onRenderedFirstFrame() + //播放视频第一帧 + Helper.showMyLog("-----------update--播放视频第一帧") + } + }) + prepare() + playWhenReady = true + } + } + } + + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/preview/WallpaperPathManager.kt b/app/src/main/java/com/video/mobile/wallpaper/preview/WallpaperPathManager.kt new file mode 100644 index 0000000..6dd9dbc --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/preview/WallpaperPathManager.kt @@ -0,0 +1,52 @@ +package com.video.mobile.wallpaper.preview + +import android.content.Context +import android.content.SharedPreferences +import com.video.mobile.wallpaper.App +import androidx.core.content.edit + + +object WallpaperPathManager { + + val KEY_CURRENT_WAPPPAPER_PATH = "video_wallpaper_path" + val DB_INIT_DATAT = "init_db_data" + + private var shared: SharedPreferences? = null + + var video_wallpaper_path: String + get() = queryString( + KEY_CURRENT_WAPPPAPER_PATH, + "" + ) + set(value) { + saveString(KEY_CURRENT_WAPPPAPER_PATH, value) + } + var dbinit: String + get() = queryString( + DB_INIT_DATAT, + "0" + ) + set(value) { + saveString(DB_INIT_DATAT, value) + } + + private fun getShared(): SharedPreferences { + if (shared == null) { + shared = App.mApp.getSharedPreferences("", Context.MODE_PRIVATE) + } + return shared!! + + } + + fun saveString(key: String, value: String) { + getShared().edit { + putString(key, value) + } + } + + fun queryString(key: String, defaultValue: String): String { + return getShared() + .getString(key, defaultValue).orEmpty() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/video/mobile/wallpaper/utils/RecyclerViewSpace.kt b/app/src/main/java/com/video/mobile/wallpaper/utils/RecyclerViewSpace.kt new file mode 100644 index 0000000..c1ca24e --- /dev/null +++ b/app/src/main/java/com/video/mobile/wallpaper/utils/RecyclerViewSpace.kt @@ -0,0 +1,72 @@ +package com.video.mobile.wallpaper.utils + +import android.graphics.Rect +import android.view.View +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView.ItemDecoration +import androidx.recyclerview.widget.StaggeredGridLayoutManager +import com.video.mobile.wallpaper.App +import kotlin.math.roundToInt + + +class RecyclerViewSpace(v: Int, h: Int, ex: Int) : ItemDecoration() { + private val v: Int = dpToPx(v.toFloat()).roundToInt() + private val h: Int = dpToPx(h.toFloat()).roundToInt() + private val ex: Int = dpToPx(ex.toFloat()).roundToInt() + + override fun getItemOffsets( + outRect: Rect, + view: View, + parent: RecyclerView, + state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + var spanCount = 1 + var spanSize = 1 + var spanIndex = 0 + + val childAdapterPosition = parent.getChildAdapterPosition(view) + val layoutManager = parent.layoutManager + if (layoutManager is StaggeredGridLayoutManager) { + val layoutParams = view.layoutParams as StaggeredGridLayoutManager.LayoutParams + spanCount = layoutManager.spanCount + if (layoutParams.isFullSpan) { + spanSize = spanCount + } + spanIndex = layoutParams.spanIndex + } else if (layoutManager is GridLayoutManager) { + val gridLayoutManager = layoutManager + val layoutParams = view.layoutParams as GridLayoutManager.LayoutParams + spanCount = gridLayoutManager.spanCount + spanSize = gridLayoutManager.spanSizeLookup.getSpanSize(childAdapterPosition) + spanIndex = layoutParams.spanIndex + } else if (layoutManager is LinearLayoutManager) { + outRect.left = v + outRect.right = v + outRect.bottom = h + } + + if (spanSize == spanCount) { + outRect.left = v + ex + outRect.right = v + ex + outRect.bottom = h + } else { + val itemAllSpacing = (v * (spanCount + 1) + ex * 2) / spanCount + val left = v * (spanIndex + 1) - itemAllSpacing * spanIndex + ex + val right = itemAllSpacing - left + outRect.left = left + outRect.right = right + outRect.bottom = h + } + } + + + companion object { + fun dpToPx(dpValue: Float): Float { + val density: Float = App.mApp.resources.displayMetrics.density + return density * dpValue + 0.5f + } + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/common_back_button.xml b/app/src/main/res/drawable/common_back_button.xml new file mode 100644 index 0000000..f53206f --- /dev/null +++ b/app/src/main/res/drawable/common_back_button.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/common_back_button_bg.xml b/app/src/main/res/drawable/common_back_button_bg.xml new file mode 100644 index 0000000..b3a80b7 --- /dev/null +++ b/app/src/main/res/drawable/common_back_button_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/common_set_wallpaper_bg.xml b/app/src/main/res/drawable/common_set_wallpaper_bg.xml new file mode 100644 index 0000000..68a8855 --- /dev/null +++ b/app/src/main/res/drawable/common_set_wallpaper_bg.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/display_selector_favorite.xml b/app/src/main/res/drawable/display_selector_favorite.xml new file mode 100644 index 0000000..2fea616 --- /dev/null +++ b/app/src/main/res/drawable/display_selector_favorite.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/empty_favorite.xml b/app/src/main/res/drawable/empty_favorite.xml new file mode 100644 index 0000000..1ef5394 --- /dev/null +++ b/app/src/main/res/drawable/empty_favorite.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/icon_favorite_selected.xml b/app/src/main/res/drawable/icon_favorite_selected.xml new file mode 100644 index 0000000..139dc4e --- /dev/null +++ b/app/src/main/res/drawable/icon_favorite_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_favorite_unselected.xml b/app/src/main/res/drawable/icon_favorite_unselected.xml new file mode 100644 index 0000000..bd2801d --- /dev/null +++ b/app/src/main/res/drawable/icon_favorite_unselected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/main_gradient_border.xml b/app/src/main/res/drawable/main_gradient_border.xml new file mode 100644 index 0000000..99a51ca --- /dev/null +++ b/app/src/main/res/drawable/main_gradient_border.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/main_tab_selected.xml b/app/src/main/res/drawable/main_tab_selected.xml new file mode 100644 index 0000000..3e04ebd --- /dev/null +++ b/app/src/main/res/drawable/main_tab_selected.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/main_tab_selector.xml b/app/src/main/res/drawable/main_tab_selector.xml new file mode 100644 index 0000000..bc64c6f --- /dev/null +++ b/app/src/main/res/drawable/main_tab_selector.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/main_tab_unselect.xml b/app/src/main/res/drawable/main_tab_unselect.xml new file mode 100644 index 0000000..bc34020 --- /dev/null +++ b/app/src/main/res/drawable/main_tab_unselect.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/splash_progress_drawable.xml b/app/src/main/res/drawable/splash_progress_drawable.xml new file mode 100644 index 0000000..63c2e1f --- /dev/null +++ b/app/src/main/res/drawable/splash_progress_drawable.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/thumbnail_placeholder.xml b/app/src/main/res/drawable/thumbnail_placeholder.xml new file mode 100644 index 0000000..2cdfaea --- /dev/null +++ b/app/src/main/res/drawable/thumbnail_placeholder.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/app/src/main/res/layout/activity_display_video.xml b/app/src/main/res/layout/activity_display_video.xml new file mode 100644 index 0000000..74a3dc4 --- /dev/null +++ b/app/src/main/res/layout/activity_display_video.xml @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_favorite.xml b/app/src/main/res/layout/activity_favorite.xml new file mode 100644 index 0000000..0e713ee --- /dev/null +++ b/app/src/main/res/layout/activity_favorite.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..06f6249 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml new file mode 100644 index 0000000..828dfa1 --- /dev/null +++ b/app/src/main/res/layout/activity_splash.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/favorite_adapter.xml b/app/src/main/res/layout/favorite_adapter.xml new file mode 100644 index 0000000..b5db04e --- /dev/null +++ b/app/src/main/res/layout/favorite_adapter.xml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml new file mode 100644 index 0000000..bb257cd --- /dev/null +++ b/app/src/main/res/layout/fragment_main.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/main_adapter.xml b/app/src/main/res/layout/main_adapter.xml new file mode 100644 index 0000000..126be25 --- /dev/null +++ b/app/src/main/res/layout/main_adapter.xml @@ -0,0 +1,20 @@ + + + + + + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000..c209e78 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000..b2dfe3d Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000..4f0f1d6 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000..62b611d Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000..948a307 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..1b9a695 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000..28d4b77 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9287f50 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000..aa7d642 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9126ae3 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/logo.png b/app/src/main/res/mipmap-xxxhdpi/logo.png new file mode 100644 index 0000000..cafae79 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/logo.png differ diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..cfaab71 --- /dev/null +++ b/app/src/main/res/values-night/themes.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..b2402d4 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,13 @@ + + + #FF000000 + #FFFFFFFF + #70D7D6D6 + #D4E7FF + #FFEFFC + #536DFF + #FF7FED + #BFFFFFFF + #CA1919 + #C8C6C6 + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..d12a990 --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,17 @@ + + Dynamic Cartoon Wallpaper + %d%% + Explore + Shift + Trending + Loading failed, please check the network and try again + Some unknown errors occurred during playing, please try again later + Retry + Downloading video, please wait patiently + Set Wallpaper + Favorite + Go collect your favorite wallpapers + Successfully canceled the collection + Failed to cancel collection + The resource is lost, please re-enter this page + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..c4ceef6 --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,16 @@ + + + + + --> + + \ No newline at end of file diff --git a/app/src/main/res/xml/backup_rules.xml b/app/src/main/res/xml/backup_rules.xml new file mode 100644 index 0000000..4df9255 --- /dev/null +++ b/app/src/main/res/xml/backup_rules.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/data_extraction_rules.xml b/app/src/main/res/xml/data_extraction_rules.xml new file mode 100644 index 0000000..9ee9997 --- /dev/null +++ b/app/src/main/res/xml/data_extraction_rules.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml new file mode 100644 index 0000000..5506708 --- /dev/null +++ b/app/src/main/res/xml/file_paths.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/src/main/res/xml/video_wallpaper.xml b/app/src/main/res/xml/video_wallpaper.xml new file mode 100644 index 0000000..013b58f --- /dev/null +++ b/app/src/main/res/xml/video_wallpaper.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/test/java/com/video/mobile/wallpaper/ExampleUnitTest.kt b/app/src/test/java/com/video/mobile/wallpaper/ExampleUnitTest.kt new file mode 100644 index 0000000..2a33ce0 --- /dev/null +++ b/app/src/test/java/com/video/mobile/wallpaper/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package com.video.mobile.wallpaper + +import org.junit.Test + +import org.junit.Assert.* + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..efc3258 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,10 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +plugins { + alias(libs.plugins.android.application) apply false + alias(libs.plugins.kotlin.android) apply false +} +buildscript { + dependencies { + classpath("io.objectbox:objectbox-gradle-plugin:4.0.3") + } +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..20e2a01 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,23 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. For more details, visit +# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official +# Enables namespacing of each library's R class so that its R class includes only the +# resources declared in the library itself and none from the library's dependencies, +# thereby reducing the size of the R class for that library +android.nonTransitiveRClass=true \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 0000000..4fa6cca --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,26 @@ +[versions] +agp = "8.10.1" +kotlin = "2.0.21" +coreKtx = "1.16.0" +junit = "4.13.2" +junitVersion = "1.3.0" +espressoCore = "3.7.0" +appcompat = "1.7.1" +material = "1.12.0" +activity = "1.10.1" +constraintlayout = "2.2.1" + +[libraries] +androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } +junit = { group = "junit", name = "junit", version.ref = "junit" } +androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } +androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } +androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } +material = { group = "com.google.android.material", name = "material", version.ref = "material" } +androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "activity" } +androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } + +[plugins] +android-application = { id = "com.android.application", version.ref = "agp" } +kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } + diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..e708b1c Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..6a41b0f --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Wed Aug 13 18:04:51 CST 2025 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..4f906e0 --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/keystore.properties b/keystore.properties new file mode 100644 index 0000000..f9bb04b --- /dev/null +++ b/keystore.properties @@ -0,0 +1,6 @@ +app_name=Dynamic Cartoon Wallpaper +package_name=com.video.mobile.wallpaper +keystoreFile=app/DynamicCartoonWallpaper.jks +key_alias=DynamicCartoonWallpaperkey0 +key_store_password=DynamicCartoonWallpaper +key_password=DynamicCartoonWallpaper \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..d97fc00 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,24 @@ +pluginManagement { + repositories { + google { + content { + includeGroupByRegex("com\\.android.*") + includeGroupByRegex("com\\.google.*") + includeGroupByRegex("androidx.*") + } + } + mavenCentral() + gradlePluginPortal() + } +} +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} + +rootProject.name = "Dynamic Cartoon Wallpaper" +include(":app") + \ No newline at end of file