commit 1519f1712a2b049f45961421b451d9ab639a96d9 Author: zhouzhijia Date: Mon Aug 19 15:29:55 2024 +0800 1.0.0(1) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7fe9a35 --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +*.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 +.idea/ +app/release/airhornprank_v1.0.0(1)_08_08_17_12-release.apk 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/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..74b322d --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,63 @@ +import java.util.Date +import java.text.SimpleDateFormat + +plugins { + id("com.android.application") + id("org.jetbrains.kotlin.android") + id("kotlin-kapt") +} +val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date()) +android { + namespace = "com.fun.airhornprank" + compileSdk = 34 + + defaultConfig { + applicationId = "com.fun.airhornprank" + minSdk = 23 + targetSdk = 34 + versionCode = 1 + versionName = "1.0.0" + setProperty( + "archivesBaseName", + "airhornprank_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_17 + targetCompatibility = JavaVersion.VERSION_17 + } + buildFeatures { + viewBinding = true + } +} + +dependencies { + + implementation("androidx.appcompat:appcompat:1.7.0") + implementation("com.google.android.material:material:1.12.0") + implementation("androidx.constraintlayout:constraintlayout:2.1.4") + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.2.1") + androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1") + + implementation("com.github.bumptech.glide:glide:4.16.0") + val room_version = "2.6.1" + implementation("androidx.room:room-runtime:$room_version") + annotationProcessor("androidx.room:room-compiler:$room_version") + kapt("androidx.room:room-compiler:$room_version") + + implementation("com.airbnb.android:lottie:6.0.0") + implementation ("javax.annotation:javax.annotation-api:1.3.2") + +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..8a71eb6 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,36 @@ +# 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 + -keepclassmembers class com.fun.airhornprank.PrankSkin{ + public static final java.lang.String DB_Name; + public static final int DB_Version; + } + -keepclassmembers class *{ + @androidx.room.Query ; + } + + -keep class com.fun.airhornprank.data.MyDataBase { *; } + -keep class com.fun.airhornprank.data.LikeDAO { *; } + -keep class com.fun.airhornprank.data.Mydata { *; } + -keep class javax.annotation.** { *; } + # Please add these rules to your existing keep rules in order to suppress warnings. + # This is generated automatically by the Android Gradle plugin. + -dontwarn javax.annotation.Nullable diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json new file mode 100644 index 0000000..f92b9f2 --- /dev/null +++ b/app/release/output-metadata.json @@ -0,0 +1,20 @@ +{ + "version": 3, + "artifactType": { + "type": "APK", + "kind": "Directory" + }, + "applicationId": "com.fun.airhornprank", + "variantName": "release", + "elements": [ + { + "type": "SINGLE", + "filters": [], + "attributes": [], + "versionCode": 1, + "versionName": "1.0.0", + "outputFile": "airhornprank_v1.0.0(1)_08_08_17_12-release.apk" + } + ], + "elementType": "File" +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/fun/airhornprank/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/fun/airhornprank/ExampleInstrumentedTest.java new file mode 100644 index 0000000..b559b09 --- /dev/null +++ b/app/src/androidTest/java/com/fun/airhornprank/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.fun.airhornprank; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.fun.airhornprank", appContext.getPackageName()); + } +} \ 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..cc542a2 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/6PLI2cponf.json b/app/src/main/assets/6PLI2cponf.json new file mode 100644 index 0000000..81475f7 --- /dev/null +++ b/app/src/main/assets/6PLI2cponf.json @@ -0,0 +1 @@ +{"nm":"newScene","ddd":0,"h":470,"w":470,"meta":{"g":"@lottiefiles/toolkit-js 0.33.2"},"layers":[{"ty":4,"nm":"pill top","sr":1,"st":0,"op":1000,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[3.5,-29.75,0]},"s":{"a":0,"k":[100,-100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[237,220.75,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Rectangle 1","np":4,"it":[{"ty":"rc","bm":0,"hd":false,"mn":"ADBE Vector Shape - Rect","nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":20},"s":{"a":0,"k":[26.627,55.588]}},{"ty":"tm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Trim","nm":"Trim Paths 1","ix":2,"e":{"a":0,"k":61,"ix":2},"o":{"a":0,"k":0,"ix":3},"s":{"a":0,"k":16,"ix":1},"m":1},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":4},"c":{"a":0,"k":[1,1,1]}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[3.627,-30.815],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":1},{"ty":4,"nm":"pill down","sr":1,"st":0,"op":1000,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[3.5,-29.75,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[237,220.75,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Rectangle 1","np":4,"it":[{"ty":"rc","bm":0,"hd":false,"mn":"ADBE Vector Shape - Rect","nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":20},"s":{"a":0,"k":[26.627,55.588]}},{"ty":"tm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Trim","nm":"Trim Paths 1","ix":2,"e":{"a":0,"k":58,"ix":2},"o":{"a":0,"k":0,"ix":3},"s":{"a":0,"k":0,"ix":1},"m":1},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":4},"c":{"a":0,"k":[1,1,1]}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[3.627,-30.815],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2},{"ty":4,"nm":"base","sr":1,"st":0,"op":1000,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[3.25,23.5,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[236.802,274,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Rectangle 1","np":3,"it":[{"ty":"rc","bm":0,"hd":false,"mn":"ADBE Vector Shape - Rect","nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":20},"s":{"a":0,"k":[3.99,18.391]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[123.795,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[3.575,23.858],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":3},{"ty":4,"nm":"Half rign","sr":1,"st":0,"op":116,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[3,-16.25,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[236.533,234.25,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","np":4,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[44.426,44.426]}},{"ty":"tm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Trim","nm":"Trim Paths 1","ix":2,"e":{"a":0,"k":75,"ix":2},"o":{"a":0,"k":0,"ix":3},"s":{"a":0,"k":25,"ix":1},"m":1},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":2,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":3},"c":{"a":0,"k":[1,1,1]}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[137.481,137.481],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[3.594,-15.692],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":4},{"ty":4,"nm":"01","sr":1,"st":0,"op":116,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[130,130,100],"t":22.562},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":41.365},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[130,130,100],"t":62.047},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":80.85},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[130,130,100],"t":99.651},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":116.574},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[130,130,100],"t":131.616},{"s":[100,100,100],"t":148.5380859375}]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[235,235,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[198.609,198.609]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.5294,0.4078,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[1,1],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":5},{"ty":4,"nm":"02","sr":1,"st":0,"op":116,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[162,162,100],"t":22.562},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[99,99,100],"t":41.365},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[162,162,100],"t":62.047},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[130,130,100],"t":80.85},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":0.97},"s":[162,162,100],"t":99.651},{"o":{"x":0.333,"y":-0.002},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":116},{"o":{"x":0.167,"y":0},"i":{"x":0.667,"y":1},"s":[133,133,100],"t":116.574},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[162,162,100],"t":131.616},{"s":[99,99,100],"t":148.5380859375}]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[235,235,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":50}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[198.609,198.609]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.5294,0.4078,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[1,1],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":6},{"ty":4,"nm":"03","sr":1,"st":0,"op":116,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[190,190,100],"t":22.562},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[151,151,100],"t":41.365},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[195,195,100],"t":62.047},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[160,160,100],"t":80.85},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":0.947},"s":[195,195,100],"t":99.651},{"o":{"x":0.333,"y":-0.012},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":116},{"o":{"x":0.167,"y":0},"i":{"x":0.667,"y":1},"s":[115,115,100],"t":116.574},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[195,195,100],"t":131.616},{"s":[99,99,100],"t":148.5380859375}]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[235,235,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":30}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[198.609,198.609]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.5294,0.4078,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[1,1],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":7},{"ty":4,"nm":"04","sr":1,"st":0,"op":116,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[130,130,100],"t":22.562},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":41.365},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[130,130,100],"t":62.047},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":80.85},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[130,130,100],"t":99.651},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":116.574},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[130,130,100],"t":131.616},{"s":[100,100,100],"t":148.5380859375}]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[235,235,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[198.609,198.609]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.5294,0.4078,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[1,1],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":8},{"ty":4,"nm":"transparent1","sr":1,"st":0,"op":116,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[224,224,100],"t":22.562},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[127,127,100],"t":41.365},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[224,224,100],"t":62.047},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[145,145,100],"t":80.85},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":0.944},"s":[224,224,100],"t":99.651},{"o":{"x":0.333,"y":-0.016},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":116},{"o":{"x":0.167,"y":0},"i":{"x":0.667,"y":1},"s":[115,115,100],"t":116.574},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[224,224,100],"t":131.616},{"s":[99,99,100],"t":148.5380859375}]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[235,235,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[10],"t":22.562},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[5],"t":41.365},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[20],"t":62.047},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[5],"t":80.85},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[20],"t":99.651},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":116.574},{"s":[20],"t":131.6162109375}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[198.609,198.609]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.5294,0.4078,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[1,1],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":9},{"ty":4,"nm":"transparent2","sr":1,"st":0,"op":116,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[234,234,100],"t":22.562},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":41.365},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[234,234,100],"t":62.047},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":80.85},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[234,234,100],"t":99.651},{"o":{"x":0.167,"y":0},"i":{"x":0.667,"y":1},"s":[100,100,100],"t":116.574},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[234,234,100],"t":131.616},{"s":[99,99,100],"t":148.5380859375}]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[235,235,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0},"i":{"x":0.667,"y":1},"s":[100],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":22.562},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100],"t":41.365},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":62.047},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":80.85},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":99.651},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":116.574},{"s":[0],"t":131.6162109375}]}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[198.609,198.609]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.5294,0.4078,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[1,1],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":10}],"v":"4.5.9","fr":25,"op":116,"ip":0,"assets":[]} \ No newline at end of file diff --git a/app/src/main/assets/DarumadropOne-Regular.ttf b/app/src/main/assets/DarumadropOne-Regular.ttf new file mode 100644 index 0000000..0d924de Binary files /dev/null and b/app/src/main/assets/DarumadropOne-Regular.ttf differ diff --git a/app/src/main/assets/prank.json b/app/src/main/assets/prank.json new file mode 100644 index 0000000..a1348e6 --- /dev/null +++ b/app/src/main/assets/prank.json @@ -0,0 +1,3390 @@ +[ + { + "categoryId": "625f83491fea07887e619063", + "categoryName": "Airhorn", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/3807ddc86891d2f6994cebcc82773f20.png", + "list": [ + { + "title": "Airhorn 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f6f15687ea2f414192c0b473714985fb.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7111dbef323985fa5ce40cc001efc06b.png" + }, + { + "title": "Airhorn 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/3e4d4574dc0ca65457ed1635d8d8a35f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7111dbef323985fa5ce40cc001efc06b.png" + }, + { + "title": "Airhorn 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4d62db79c5ce22e4af02a728df11fea3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7111dbef323985fa5ce40cc001efc06b.png" + }, + { + "title": "Airhorn 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/18423e3b40a7abe5b13fef44a090279d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7111dbef323985fa5ce40cc001efc06b.png" + }, + { + "title": "Airhorn 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a1bdfca1db5913e0889320d039db069d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7111dbef323985fa5ce40cc001efc06b.png" + }, + { + "title": "Airhorn 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b188a56dd6f4d96081dbdc55c9d8189e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7111dbef323985fa5ce40cc001efc06b.png" + }, + { + "title": "Airhorn 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/dd803e0943de2f23e345f7a333ef50f0.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7111dbef323985fa5ce40cc001efc06b.png" + }, + { + "title": "Airhorn 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c7a498cd8ebe972a0d9d290967b0c217.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7111dbef323985fa5ce40cc001efc06b.png" + }, + { + "title": "Airhorn 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7247df90396f71742a19b17cd4b44007.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7111dbef323985fa5ce40cc001efc06b.png" + }, + { + "title": "Airhorn 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b234c324d5ad721eb8d0ee8eb2ca6586.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7111dbef323985fa5ce40cc001efc06b.png" + }, + { + "title": "Airhorn 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/afc85b998457d1401bc942538c834dd4.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7111dbef323985fa5ce40cc001efc06b.png" + }, + { + "title": "Airhorn 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/890fd4c730bf1d22cd47074c9f3f2024.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7111dbef323985fa5ce40cc001efc06b.png" + }, + { + "title": "Airhorn 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a5f49085cfd96acf9af9ae3b0d40d767.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7111dbef323985fa5ce40cc001efc06b.png" + } + ] + }, + { + "categoryId": "625f83491fea07887e619069", + "categoryName": "Fart Sound", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/9a338a79cd2cd19fe9cd33ef789a5508.png", + "list": [ + { + "title": "Fart Sound 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/fd670b056455266357f2a9da86027f92.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9d13c716cd8627cbb385fbddf58c6f9f.png" + }, + { + "title": "Fart Sound 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5b57dca5528a8b918f2e0ccbfa3ad7f8.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9d13c716cd8627cbb385fbddf58c6f9f.png" + }, + { + "title": "Fart Sound 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5ee055b13bf0b80f3b327f88bbc3a342.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9d13c716cd8627cbb385fbddf58c6f9f.png" + }, + { + "title": "Fart Sound 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/671e5a10b64b37afe8d782d2c2b61111.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9d13c716cd8627cbb385fbddf58c6f9f.png" + }, + { + "title": "Fart Sound 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e00eaeafb7dfd572371a74c7c67774b9.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9d13c716cd8627cbb385fbddf58c6f9f.png" + }, + { + "title": "Fart Sound 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/25915fb137e5a205d893b84302bd97ea.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9d13c716cd8627cbb385fbddf58c6f9f.png" + }, + { + "title": "Fart Sound 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9576b7c63248788024ac421dfe6549ec.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9d13c716cd8627cbb385fbddf58c6f9f.png" + }, + { + "title": "Fart Sound 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7c6a693b6554482cf03fbe7e8d89b0f7.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9d13c716cd8627cbb385fbddf58c6f9f.png" + }, + { + "title": "Fart Sound 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/841a885f366574f6cff1d4965b0cea54.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9d13c716cd8627cbb385fbddf58c6f9f.png" + }, + { + "title": "Fart Sound 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/37afe86493a5f5a31c6c18cdc476b530.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9d13c716cd8627cbb385fbddf58c6f9f.png" + }, + { + "title": "Fart Sound 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4bf94832c6a6ff55053a96327ee22e8e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9d13c716cd8627cbb385fbddf58c6f9f.png" + }, + { + "title": "Fart Sound 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7608e95747aa442b7135b79e7abc6791.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9d13c716cd8627cbb385fbddf58c6f9f.png" + }, + { + "title": "Fart Sound 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/edb1357822ad7266389e4e6bc558c515.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9d13c716cd8627cbb385fbddf58c6f9f.png" + }, + { + "title": "Fart Sound 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1230e6751807de13cec5821ed232971b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9d13c716cd8627cbb385fbddf58c6f9f.png" + }, + { + "title": "Fart Sound 15", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/02b7143a9c8b4d49155a4af7e14002c6.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9d13c716cd8627cbb385fbddf58c6f9f.png" + }, + { + "title": "Fart Sound 16", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/39b42fcebac74d4a68887c413107de32.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9d13c716cd8627cbb385fbddf58c6f9f.png" + }, + { + "title": "Fart Sound 17", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a5645abdfe28fcf5a4bfb1a091511ee0.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9d13c716cd8627cbb385fbddf58c6f9f.png" + } + ] + }, + { + "categoryId": "625f83491fea07887e61906b", + "categoryName": "Hair Clipper", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/01e97185a794005a5cd5a8ca6903d68d.png", + "list": [ + { + "title": "Hair Clipper 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/df05f0cb432e9c3fddcc505d37bdc596.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e40b8da118eb07fbd3c6de7fa6749e39.png" + }, + { + "title": "Hair Clipper 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/ae5266af93d2af046777529549da69a2.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e40b8da118eb07fbd3c6de7fa6749e39.png" + }, + { + "title": "Hair Clipper 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/df5e55461640aa6326bd1f27bc961abb.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e40b8da118eb07fbd3c6de7fa6749e39.png" + }, + { + "title": "Hair Clipper 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/ad5285afce500ae8b05d104cd70c16e0.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e40b8da118eb07fbd3c6de7fa6749e39.png" + }, + { + "title": "Hair Clipper 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/173c711dda00a1a683a3e64cb73a01a5.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e40b8da118eb07fbd3c6de7fa6749e39.png" + }, + { + "title": "Hair Clipper 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7ac57b43913e8077e5e9db31426194fe.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e40b8da118eb07fbd3c6de7fa6749e39.png" + }, + { + "title": "Hair Clipper 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a3248ae7e08e69d499dbd50f99a39b22.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e40b8da118eb07fbd3c6de7fa6749e39.png" + }, + { + "title": "Hair Clipper 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/2d43e87e8d312bc0174814dacf15a2bc.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e40b8da118eb07fbd3c6de7fa6749e39.png" + }, + { + "title": "Hair Clipper 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/48828fd5b702259e0bb4a31cb38c002d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e40b8da118eb07fbd3c6de7fa6749e39.png" + }, + { + "title": "Hair Clipper 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/64a3a3936d9083c3fb0cb8af63b62db1.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e40b8da118eb07fbd3c6de7fa6749e39.png" + }, + { + "title": "Hair Clipper 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f4d989eca3644062185bd21f0a7eac98.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e40b8da118eb07fbd3c6de7fa6749e39.png" + }, + { + "title": "Hair Clipper 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/76de9aeaa070bc2bb6010270ef7c91ef.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e40b8da118eb07fbd3c6de7fa6749e39.png" + } + ] + }, + { + "categoryId": "625f83491fea07887e619065", + "categoryName": "Breaking", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/253556740e135a243df384d2bc216757.png", + "list": [ + { + "title": "Breaking 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d5e25e6c6f9bd1316067910ae3f07f96.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5f3bc85e0c23dcb07546b098c3964da7.png" + }, + { + "title": "Breaking 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/777effb7b006cc507c54df2d3ae97956.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5f3bc85e0c23dcb07546b098c3964da7.png" + }, + { + "title": "Breaking 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/12200195df885df378ab7097e3d5e8b5.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5f3bc85e0c23dcb07546b098c3964da7.png" + }, + { + "title": "Breaking 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9512b4aa0bcf477b8b1ee9de6a50428b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5f3bc85e0c23dcb07546b098c3964da7.png" + }, + { + "title": "Breaking 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/61bd13d8cbb5150a7a477bd28d70a4e3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5f3bc85e0c23dcb07546b098c3964da7.png" + }, + { + "title": "Breaking 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c1d49295a8bd5d84fe7c1ce9e84e09fb.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5f3bc85e0c23dcb07546b098c3964da7.png" + }, + { + "title": "Breaking 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9c34aa3d5c4d338958c71a25ca27f687.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5f3bc85e0c23dcb07546b098c3964da7.png" + }, + { + "title": "Breaking 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/3b3c248b515e8c3a95114e43ff5a4d1a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5f3bc85e0c23dcb07546b098c3964da7.png" + }, + { + "title": "Breaking 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e0f0d1f6a131699cbfd25c00192af3cd.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5f3bc85e0c23dcb07546b098c3964da7.png" + }, + { + "title": "Breaking 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/95ea3be095fd6794270ed7dc5adf0da3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5f3bc85e0c23dcb07546b098c3964da7.png" + } + ] + }, + { + "categoryId": "625f83491fea07887e619066", + "categoryName": "Burp", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/c515c437f6ed4f62906fc002cc0db056.png", + "list": [ + { + "title": "Burp 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/2b0a79866b3ff7f526be74f9ece5fa0c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/13119b2bafba96a97062cf0070ac2edd.png" + }, + { + "title": "Burp 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/240512d87919eca52e158ca1c394f52a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/13119b2bafba96a97062cf0070ac2edd.png" + }, + { + "title": "Burp 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/72bb5de165e71bfd9f718070ea610ca0.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/13119b2bafba96a97062cf0070ac2edd.png" + }, + { + "title": "Burp 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c1531b085072be1f0707aa86b90d3efe.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/13119b2bafba96a97062cf0070ac2edd.png" + }, + { + "title": "Burp 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1a2796d86150bf0588f570da12450d62.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/13119b2bafba96a97062cf0070ac2edd.png" + }, + { + "title": "Burp 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/73e22e498d75b1ef991b927b1ce60ab6.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/13119b2bafba96a97062cf0070ac2edd.png" + }, + { + "title": "Burp 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/ffa51c717f144800474472cca3856658.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/13119b2bafba96a97062cf0070ac2edd.png" + }, + { + "title": "Burp 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/56ae2848fa2cf163fc2fbd454699bc8c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/13119b2bafba96a97062cf0070ac2edd.png" + }, + { + "title": "Burp 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/be6771406a30e73aa62bb02157d6c402.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/13119b2bafba96a97062cf0070ac2edd.png" + }, + { + "title": "Burp 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/de622186e8b2b35ae43097db2bb20b45.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/13119b2bafba96a97062cf0070ac2edd.png" + }, + { + "title": "Burp 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7014be86f0fe5c09b796e65340e6df47.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/13119b2bafba96a97062cf0070ac2edd.png" + }, + { + "title": "Burp 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/24c6df56ea75d4cbd467a7352d3faeb1.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/13119b2bafba96a97062cf0070ac2edd.png" + } + ] + }, + { + "categoryId": "625f83491fea07887e619067", + "categoryName": "Car", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/052d4199504f4fcb97b7cc9e07401c54.png", + "list": [ + { + "title": "Car 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/0619759e8da1730d7ccaa0431221b072.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/18af2d20fca7882d644ac1745a63ea6d.png" + }, + { + "title": "Car 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e5b05a82fab3e76d3d3a150ea7c524e0.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/18af2d20fca7882d644ac1745a63ea6d.png" + }, + { + "title": "Car 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6ab888f3cd83e13da07fa38ecd586e82.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/18af2d20fca7882d644ac1745a63ea6d.png" + }, + { + "title": "Car 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/43e740a0298fcb564abaebd3ae888f09.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/18af2d20fca7882d644ac1745a63ea6d.png" + }, + { + "title": "Car 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6b72963c235449841157ff07d3110651.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/18af2d20fca7882d644ac1745a63ea6d.png" + }, + { + "title": "Car 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9f32990305af872e1cd04316ea4dcc92.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/18af2d20fca7882d644ac1745a63ea6d.png" + }, + { + "title": "Car 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6445a57d610fe55393f63409a383e62c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/18af2d20fca7882d644ac1745a63ea6d.png" + }, + { + "title": "Car 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4adf39e09c07a08f9fa2e03108db395e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/18af2d20fca7882d644ac1745a63ea6d.png" + }, + { + "title": "Car 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a2ad7ce685cc1baf74e7425c5ba4eb28.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/18af2d20fca7882d644ac1745a63ea6d.png" + }, + { + "title": "Car 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/298d731cc3b0f698088227385549ffa3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/18af2d20fca7882d644ac1745a63ea6d.png" + }, + { + "title": "Car 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f1696474e6482b97d58b2dc577c8d474.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/18af2d20fca7882d644ac1745a63ea6d.png" + }, + { + "title": "Car 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a98205a6a5a837813a0161446baacadb.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/18af2d20fca7882d644ac1745a63ea6d.png" + }, + { + "title": "Car 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/ec59ac304495a098c3930ca4cf5f376f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/18af2d20fca7882d644ac1745a63ea6d.png" + }, + { + "title": "Car 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a089153bbbaf1d0ea6b71fe94f02eb18.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/18af2d20fca7882d644ac1745a63ea6d.png" + } + ] + }, + { + "categoryId": "625f83491fea07887e619068", + "categoryName": "Door Bell", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/382fcff17bbe80ad45aed28c9d1ae26e.png", + "list": [ + { + "title": "Door Bell 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/038780ebadb3249009710b1781b24871.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f337efcb0e67418bc4f40c67d9914b3d.png" + }, + { + "title": "Door Bell 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e96b5d06eebb2d6001a17293942e4f83.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f337efcb0e67418bc4f40c67d9914b3d.png" + }, + { + "title": "Door Bell 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/93a1fb12fbfd65419677c380cd1ceac3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f337efcb0e67418bc4f40c67d9914b3d.png" + }, + { + "title": "Door Bell 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e926d86a2b234756af495542f020a4e1.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f337efcb0e67418bc4f40c67d9914b3d.png" + }, + { + "title": "Door Bell 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c7e489164f640e750671868b8d5cf177.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f337efcb0e67418bc4f40c67d9914b3d.png" + }, + { + "title": "Door Bell 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5bc2eeab953d604d4400ceaad1ac4809.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f337efcb0e67418bc4f40c67d9914b3d.png" + }, + { + "title": "Door Bell 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9de866aeb7da2605341c3c69a3b1ee46.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f337efcb0e67418bc4f40c67d9914b3d.png" + }, + { + "title": "Door Bell 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/8005cab6c5e7c0f64e243fd0960712ba.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f337efcb0e67418bc4f40c67d9914b3d.png" + }, + { + "title": "Door Bell 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/2a7ded6caaa4d0e601d8066bd5cab926.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f337efcb0e67418bc4f40c67d9914b3d.png" + }, + { + "title": "Door Bell 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/0f4ec6a3a7844c3843f5013fd236cb03.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f337efcb0e67418bc4f40c67d9914b3d.png" + } + ] + }, + { + "categoryId": "625f83491fea07887e61906a", + "categoryName": "Gun", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/e7500deb0a551a15118c87e5cddd8fe0.png", + "list": [ + { + "title": "Gun 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1b70d7932349c66053c18170fc34c483.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0b502b9482b4983cea9d0016222eb151.png" + }, + { + "title": "Gun 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e41bcaab807dce68e4fdf0c8ad3050bd.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0b502b9482b4983cea9d0016222eb151.png" + }, + { + "title": "Gun 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/3adc00280653c1f3801ca604447e1ac2.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0b502b9482b4983cea9d0016222eb151.png" + }, + { + "title": "Gun 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/10bf11c673df6ad35e2c0091c0274b75.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0b502b9482b4983cea9d0016222eb151.png" + }, + { + "title": "Gun 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9ae299c7048214c816051d89b64e73e0.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0b502b9482b4983cea9d0016222eb151.png" + }, + { + "title": "Gun 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/06eb4dad128dc0b38fd9a894e330d18e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0b502b9482b4983cea9d0016222eb151.png" + }, + { + "title": "Gun 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/eca3917ea4bb05de3738e6d56992e068.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0b502b9482b4983cea9d0016222eb151.png" + }, + { + "title": "Gun 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6b6a94f60770a0eed81e2a6cceac990e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0b502b9482b4983cea9d0016222eb151.png" + }, + { + "title": "Gun 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/8217ef2b02efcc620a7693609e763272.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0b502b9482b4983cea9d0016222eb151.png" + }, + { + "title": "Gun 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7ff1c0b254f99647bc15b8d0257c77e1.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0b502b9482b4983cea9d0016222eb151.png" + }, + { + "title": "Gun 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/54d7e3165add3b311cc52e42e2ac358e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0b502b9482b4983cea9d0016222eb151.png" + }, + { + "title": "Gun 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/fab9360f83cd2adedbccf863eef4c00e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0b502b9482b4983cea9d0016222eb151.png" + }, + { + "title": "Gun 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/8aa3109b806dd3af5a19e01cd92eedd7.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0b502b9482b4983cea9d0016222eb151.png" + } + ] + }, + { + "categoryId": "625f83491fea07887e61906c", + "categoryName": "Laughing", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/f5f20f7b929d1895646fa53a11b6e713.png", + "list": [ + { + "title": "Laughing & Clapping 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/53976e14d9dcd04d66a2231dbefa2d25.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d2660175f92e9d66c5ea2438c998f96b.png" + }, + { + "title": "Laughing & Clapping 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/bf5865743949d55a2e60f76e54f406f3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d2660175f92e9d66c5ea2438c998f96b.png" + }, + { + "title": "Laughing & Clapping 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d4b7ac581f1e29e91873fb444bf4a650.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d2660175f92e9d66c5ea2438c998f96b.png" + }, + { + "title": "Laughing & Clapping 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d2d86df37a19d3ba49ee576c9827507e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d2660175f92e9d66c5ea2438c998f96b.png" + }, + { + "title": "Laughing & Clapping 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4b0ad3c4370ef58c65eda79c4ed5da77.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d2660175f92e9d66c5ea2438c998f96b.png" + }, + { + "title": "Laughing & Clapping 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/8ef8e563cbf9fd21d2d692f15e5872fa.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d2660175f92e9d66c5ea2438c998f96b.png" + }, + { + "title": "Laughing & Clapping 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/25e598b57e0b8b1c3577bc79a1f46d8d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d2660175f92e9d66c5ea2438c998f96b.png" + }, + { + "title": "Laughing & Clapping 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/3a890019e262b16ee4347cc8a813992e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d2660175f92e9d66c5ea2438c998f96b.png" + } + ] + }, + { + "categoryId": "625f83491fea07887e61906d", + "categoryName": "Man Cough", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/5ca252ff3bf4df8997dea29778a7b5a2.png", + "list": [ + { + "title": "Man Cough 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a8e5b8919a9d48dc554478ea8f1c4439.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0c1d0ccc9575b1bfcb90709eaca2d87c.png" + }, + { + "title": "Man Cough 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6e70e991809ed445964e664e7aaa9712.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0c1d0ccc9575b1bfcb90709eaca2d87c.png" + }, + { + "title": "Man Cough 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/488555f76ecd73f81fba44ce79735e6a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0c1d0ccc9575b1bfcb90709eaca2d87c.png" + }, + { + "title": "Man Cough 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5a9bb0bf2c45728baaed0802ffcc3785.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0c1d0ccc9575b1bfcb90709eaca2d87c.png" + }, + { + "title": "Man Cough 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/83a38883a26c16352c5ecdc75e895016.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0c1d0ccc9575b1bfcb90709eaca2d87c.png" + }, + { + "title": "Man Cough 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/53ca05546106e9dc029d15791c479c0b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0c1d0ccc9575b1bfcb90709eaca2d87c.png" + } + ] + }, + { + "categoryId": "625f83491fea07887e61906e", + "categoryName": "Man Sneeze", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/3ab4be4f087c6105283b1fce000219d8.png", + "list": [ + { + "title": "Man Sneeze 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/da8ecb9ac9aeed016f19995362a52dda.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/abd829a1371fed85427195644bdecc50.png" + }, + { + "title": "Man Sneeze 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a0283a7c16693263d16dceb903d72876.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/abd829a1371fed85427195644bdecc50.png" + }, + { + "title": "Man Sneeze 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/2d89cf3b56a45040b6a3dd772ddb5ca0.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/abd829a1371fed85427195644bdecc50.png" + }, + { + "title": "Man Sneeze 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9d8cc900cd41b19bf110fc305e1ca23a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/abd829a1371fed85427195644bdecc50.png" + }, + { + "title": "Man Sneeze 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/3063a0e734865ffb985ddccbfb6d8f2a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/abd829a1371fed85427195644bdecc50.png" + }, + { + "title": "Man Sneeze 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/3fe129338e5f251b86ad1e462b3a02be.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/abd829a1371fed85427195644bdecc50.png" + } + ] + }, + { + "categoryId": "625f83491fea07887e61906f", + "categoryName": "Police", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/337c43b1284f89cd5fb01ba72b70bbe0.png", + "list": [ + { + "title": "Police 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/00758055f21c7c847eb17111fbd4fde1.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b14f740e38a3027b0e07809ea3cd9e6a.png" + }, + { + "title": "Police 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/62fd647b38f9085b04388302ec6be903.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b14f740e38a3027b0e07809ea3cd9e6a.png" + }, + { + "title": "Police 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6c1b0258ee9d8d1a8944fade13d299b9.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b14f740e38a3027b0e07809ea3cd9e6a.png" + }, + { + "title": "Police 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/709c8dd0669775acff861c3833f1380f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b14f740e38a3027b0e07809ea3cd9e6a.png" + }, + { + "title": "Police 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/2c0bafc776d3513f4cd84e30581673c6.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b14f740e38a3027b0e07809ea3cd9e6a.png" + }, + { + "title": "Police 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/949fd589e776f0f497755b36b20725be.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b14f740e38a3027b0e07809ea3cd9e6a.png" + } + ] + }, + { + "categoryId": "64b617f06d7b94ebbe2a20fa", + "categoryName": "Siren Head", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/66f62ff246444e7f216b3e3145436ba2.png", + "list": [ + { + "title": "Siren Head 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f1c48bfe7199564a4f65cd366e5bbee1.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/71d4d9da20e9c77932ef1f8e360528b9.png" + }, + { + "title": "Siren Head 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/dd95a7600e0183928a90c9454125b9da.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d0f866a2c593c3d673a5b7c3c5ff65a3.png" + }, + { + "title": "Siren Head 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/717fee29f9cb3771f40eb611fa68ddb7.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/bc39a8d7dc21405b4c9d90bcd4bb763d.png" + }, + { + "title": "Siren Head 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4055968c7925dc385780e5085e87e668.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/11c95a75b76c58e0b7fe948619bf90d5.png" + }, + { + "title": "Siren Head 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7740dcc10a55fd19a9f535117267d167.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/c3532129a7e0c7a90ff1d7f5c840a588.png" + }, + { + "title": "Siren Head 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9cee309d020b9057d3e3817f7bd3c9f6.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/57662e423e3572d248fe25c18e297571.png" + }, + { + "title": "Siren Head 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/76142b5831d017ae2a79bf6f21701848.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/1e2c6f0f9a02a7f16f101d2641dafdfc.png" + }, + { + "title": "Siren Head 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/ea514c12f3c2d600acc25764294d0e36.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/6336d43fda0f23102ed71ab253efd223.png" + }, + { + "title": "Siren Head 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e9b29fb3222e26f98f513495aa94b07f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d1c6f6b2a9954b1c86d9653a6176d3e1.png" + }, + { + "title": "Siren Head 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c67c90fd97b0ff58b663b88b25f5d9c6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Horror toilet head.png" + }, + { + "title": "Siren Head 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5bf293da0ae9defb3ff22f2633c4e8a7.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/40ae0ffc0d72ff35a667c252c57bc21b.png" + }, + { + "title": "Siren Head 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/3e514f44b1a924784e70516f5c14676b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/484c5a84e39b4cf8a89eaf6c0ce33058.png" + }, + { + "title": "Siren Head 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f2d6521b93cb4708c90bc7411e3efe8d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/4ad530a9cd082b6718fc6b0c6314e117.png" + }, + { + "title": "Siren Head 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b783ff32874fab37c529674008d094de.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/8daffdde57d1f112a0c8fa085e5dd342.png" + }, + { + "title": "Siren Head 15", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/39ea5814f83dad94fa03813765cd7be2.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/312a7a167f65006ae12a9c0835381a32.png" + }, + { + "title": "Siren Head 16", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/50ab76c335620fc019b3456ebd998dde.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/25fb210025fef2caf179b6e674132beb.png" + }, + { + "title": "Siren Head 17", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/0d24bfb2863ecd141bf531f8c10f4825.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b16a10b771a10c6de7bbe6fc788ad29e.png" + }, + { + "title": "Siren Head 18", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7a5c47c0a3eee16839d5152cc2534b9a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/641a2ca25cab24bc625bf357ca068cf9.png" + }, + { + "title": "Siren Head 19", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/0ecdb52645d0183434c4adf54c5aa1c2.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/cc034d34f4b651dee403836573953798.png" + }, + { + "title": "Siren Head 20", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/cf4a85cff1bca293fc70ca99413ba3a3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/1ea8ed30ad14f35b8c5414248e71168c.png" + }, + { + "title": "Siren Head 21", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/46b35ad55405ec55ab660f45ab342135.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/bda071bed3d6a2f27b451a0e23529cb8.png" + }, + { + "title": "Siren Head 22", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/98e6b123b0e4b8626be248d9570a0893.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d47035746f6540a7050a6401adabcd5d.png" + }, + { + "title": "Siren Head 23", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f86502f566001ba59633f9e4b436a120.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/20d0f271ccb54260e6fd787e337d54d9.png" + }, + { + "title": "Siren Head 24", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/ca9deeed39c238efa15039fc6c504249.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/6b85ae163ea1702b837e6cef65f4e72d.png" + }, + { + "title": "Siren Head 25", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a11ad1489c9bdcd019f424de3757ceb2.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/40291b6f6ce00d1e5870cf49b2deb169.png" + }, + { + "title": "Siren Head 26", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/2f18cb66ae66f52db7e5f7f7d720614b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/3fa55b1e54a5e3a0e8b5aba438989ebf.png" + }, + { + "title": "Siren Head 27", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/dd392b80f13294931fd3cba97837c1b4.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/c1be056dabc3a43ed1e2fd6dd11e1186.png" + }, + { + "title": "Siren Head 28", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1794f5474e0eecc863dcfbe37e7799ea.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/6af3cd32bcb76a0f9f31aef2697b65be.png" + }, + { + "title": "Siren Head 29", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/caff07c26ba52bbb40d0f6e9375d5117.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e184c7165caae221ba6dd2ed4f14e4da.png" + }, + { + "title": "Siren Head 30", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/feb2a49dc93e4c615e564658550562a4.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/a4cd82ea68f707cb87681545786fe1fd.png" + } + ] + }, + { + "categoryId": "625f83491fea07887e619070", + "categoryName": "Scary", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/6278fe84a68fcd4460cdd386c6e416a9.png", + "list": [ + { + "title": "Scary 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/528d36e86c6c907fcd269dfb11d36e7f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/45dd88855533ed768453de20d00e24d2.png" + }, + { + "title": "Scary 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/017425f1d43d5d5a2ddb30d5c98b833e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/45dd88855533ed768453de20d00e24d2.png" + }, + { + "title": "Scary 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6d4cad59de5cde890f3ad91fc97a01bf.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/45dd88855533ed768453de20d00e24d2.png" + }, + { + "title": "Scary 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/81bd6eccee3776b9f0739c844900589f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/45dd88855533ed768453de20d00e24d2.png" + }, + { + "title": "Scary 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/10e36b4a6be36d66da6e8a412fe2dc38.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/45dd88855533ed768453de20d00e24d2.png" + }, + { + "title": "Scary 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/03be97cf98b8fdfe2bfc6192ca38e295.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/45dd88855533ed768453de20d00e24d2.png" + }, + { + "title": "Scary 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/2c234ea6d1714c5f921a11a0cb04b959.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/45dd88855533ed768453de20d00e24d2.png" + }, + { + "title": "Scary 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e0f85cd581a950931ccd70c0a8f18284.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/45dd88855533ed768453de20d00e24d2.png" + }, + { + "title": "Scary 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/eec0a36a322ba705914de17be1844902.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/45dd88855533ed768453de20d00e24d2.png" + }, + { + "title": "Scary 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c9b387e84b03367983b8c5956c027fd3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/45dd88855533ed768453de20d00e24d2.png" + }, + { + "title": "Scary 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/81950f0fe7a87a8d919f90f6c7a126ac.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/45dd88855533ed768453de20d00e24d2.png" + }, + { + "title": "Scary 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b490c3b6de2845d27f785cc038651a7d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/45dd88855533ed768453de20d00e24d2.png" + }, + { + "title": "Scary 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/54faf2f18d3aa3fdd1cf6288280dee33.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/45dd88855533ed768453de20d00e24d2.png" + }, + { + "title": "Scary 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/ffae2d80b33be19ce3ed46b71fa2e89c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/45dd88855533ed768453de20d00e24d2.png" + }, + { + "title": "Scary 15", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/32469294894ddb9e7f0d0470944c96ef.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/45dd88855533ed768453de20d00e24d2.png" + } + ] + }, + { + "categoryId": "625f83491fea07887e619071", + "categoryName": "Toilet Flushing", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/33b7620ad25844786a8fc223527f5ef6.png", + "list": [ + { + "title": "Toilet Flushing 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4869b8d235565ae0dcfb417730fadfd3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/cb67455649424c9e527ffb8cbe1d4720.png" + }, + { + "title": "Toilet Flushing 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/75fbdd7d378d68bcf9c5265c416d2ea7.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/cb67455649424c9e527ffb8cbe1d4720.png" + }, + { + "title": "Toilet Flushing 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/05b018ec588b59a7ae6aeacffebd090c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/cb67455649424c9e527ffb8cbe1d4720.png" + }, + { + "title": "Toilet Flushing 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d99d871d2b71c2748a4b50a9e412a003.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/cb67455649424c9e527ffb8cbe1d4720.png" + }, + { + "title": "Toilet Flushing 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/569d98c887e4713a8f2ab75d94335471.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/cb67455649424c9e527ffb8cbe1d4720.png" + }, + { + "title": "Toilet Flushing 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/0d784187286cbdad0b86906b0ecf468c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/cb67455649424c9e527ffb8cbe1d4720.png" + }, + { + "title": "Toilet Flushing 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/2b83531021f3adfe140576edaa6ae64a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/cb67455649424c9e527ffb8cbe1d4720.png" + } + ] + }, + { + "categoryId": "625f83491fea07887e619072", + "categoryName": "Woman Cough", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/f2bdfbc0e64c5fc58d2cfb97807760b4.png", + "list": [ + { + "title": "Woman Cough 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f7752eaa1925eae9f35baa413473d947.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5cdfcb21202fd7c0758fd4358ab5388c.png" + }, + { + "title": "Woman Cough 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d12628bab0220fec1f2adfcd11059eee.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5cdfcb21202fd7c0758fd4358ab5388c.png" + }, + { + "title": "Woman Cough 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d328c92c428b9deb701e5ce62e29c3aa.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5cdfcb21202fd7c0758fd4358ab5388c.png" + }, + { + "title": "Woman Cough 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4924914999fdedb0b8805dd3bb351c1c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5cdfcb21202fd7c0758fd4358ab5388c.png" + }, + { + "title": "Woman Cough 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/2bc4822253cec9bea5b1ebc58d864bf5.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5cdfcb21202fd7c0758fd4358ab5388c.png" + }, + { + "title": "Woman Cough 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1f76eff7125e748fe8cbbe9a75bbf065.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5cdfcb21202fd7c0758fd4358ab5388c.png" + } + ] + }, + { + "categoryId": "625f83491fea07887e619073", + "categoryName": "Woman Sneeze", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/53ff3c33cb2978848ad158f5f503f44f.png", + "list": [ + { + "title": "Woman Sneeze 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5e3372221ee2d524c09ea1453241f2ec.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b9d608c945508adf3af63dd897b87962.png" + }, + { + "title": "Woman Sneeze 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/aa62d571978100034f075aa0e6fdfac1.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b9d608c945508adf3af63dd897b87962.png" + }, + { + "title": "Woman Sneeze 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e0cfbb8a8a73b8204faa50c83928c602.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b9d608c945508adf3af63dd897b87962.png" + }, + { + "title": "Woman Sneeze 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/29f9bc8ea11b407997a732036867b690.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b9d608c945508adf3af63dd897b87962.png" + }, + { + "title": "Woman Sneeze 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6ee013abc51374d888d692cbc3dd0113.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b9d608c945508adf3af63dd897b87962.png" + }, + { + "title": "Woman Sneeze 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6d114f02275389c9e2804742e03589f8.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b9d608c945508adf3af63dd897b87962.png" + } + ] + }, + { + "categoryId": "6260b076d7ddc35b5bd96175", + "categoryName": "Fart Song", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/597048640f9327fdf80a9b8c57d1875d.png", + "list": [ + { + "title": "Fart Song 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7f57e37ad26c9340e9f2c4e9513ad16b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2a6fd612ee2d23f205720be5a47b8f0d.png" + }, + { + "title": "Fart Song 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d48603d0f885f0bfb92908dff279fc74.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2a6fd612ee2d23f205720be5a47b8f0d.png" + }, + { + "title": "Fart Song 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a0c91808e3c3f82dde9c4f0c213c277b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2a6fd612ee2d23f205720be5a47b8f0d.png" + }, + { + "title": "Fart Song 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a6402c906f706a2d8ca90623ae25959d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2a6fd612ee2d23f205720be5a47b8f0d.png" + }, + { + "title": "Fart Song 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6e076b6f5cc6b28206855438f5ae1ae8.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2a6fd612ee2d23f205720be5a47b8f0d.png" + }, + { + "title": "Fart Song 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/fe8e179b2cbee41df3307fe986f6c5c3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2a6fd612ee2d23f205720be5a47b8f0d.png" + }, + { + "title": "Fart Song 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/12ffa7d48d8d09603cdd083c35011f07.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2a6fd612ee2d23f205720be5a47b8f0d.png" + }, + { + "title": "Fart Song 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1c57006820d6f0c33bfd98da3876aea6.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2a6fd612ee2d23f205720be5a47b8f0d.png" + }, + { + "title": "Fart Song 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/dca2cd758468a24b069c8fbcf1c58822.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2a6fd612ee2d23f205720be5a47b8f0d.png" + }, + { + "title": "Fart Song 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7197d999f98a8dac6c1db1b1b102bbaa.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2a6fd612ee2d23f205720be5a47b8f0d.png" + }, + { + "title": "Fart Song 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/02d51fe34d1ea224e21a6e81d82d6b34.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2a6fd612ee2d23f205720be5a47b8f0d.png" + }, + { + "title": "Fart Song 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/03f3ae3aad6de892fab252ab1105de9f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2a6fd612ee2d23f205720be5a47b8f0d.png" + } + ] + }, + { + "categoryId": "62be51874d4edd56b588d54d", + "categoryName": "Hair Dryer", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/0cbc3e7ca3f59e483987ada3bf66092b.png", + "list": [ + { + "title": "Hair Dryer 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/ab62180a31684ba85e6ae1ba49969105.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d923a0b99a094f3aa46706d7f4a1adcb.png" + }, + { + "title": "Hair Dryer 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/2ccabf9031bcfa21d48551e79fc83415.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d923a0b99a094f3aa46706d7f4a1adcb.png" + }, + { + "title": "Hair Dryer 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/2c646ee341779cb9c6cbd333fa32d964.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d923a0b99a094f3aa46706d7f4a1adcb.png" + }, + { + "title": "Hair Dryer 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/877dc85a9dfa2fb89a50d14ff78555c4.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d923a0b99a094f3aa46706d7f4a1adcb.png" + }, + { + "title": "Hair Dryer 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/41e6c807cbc7a5121bd85e20c51e2dcf.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d923a0b99a094f3aa46706d7f4a1adcb.png" + }, + { + "title": "Hair Dryer 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/0bcfafc6a6cee193b81dc776ee8978a5.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d923a0b99a094f3aa46706d7f4a1adcb.png" + }, + { + "title": "Hair Dryer 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/0bc4403a27bd81be77ca974858880814.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d923a0b99a094f3aa46706d7f4a1adcb.png" + }, + { + "title": "Hair Dryer 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7fb10282eaf2abd213e5b0748c249c3f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d923a0b99a094f3aa46706d7f4a1adcb.png" + }, + { + "title": "Hair Dryer 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/8fd15fe2cd50c03de4e2e9099b64b605.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d923a0b99a094f3aa46706d7f4a1adcb.png" + }, + { + "title": "Hair Dryer 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e43c49428ea8d722e3f899fa751db5a4.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d923a0b99a094f3aa46706d7f4a1adcb.png" + } + ] + }, + { + "categoryId": "62be51cc4d4edd56b588d54e", + "categoryName": "Scissors", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/b5d48ccbd106fbd1d7c626f91727fa10.png", + "list": [ + { + "title": "Scissors 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/383b87e66571b7d1d61e26559e78c1af.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ad58f8cfd6ddf45319b2c74c5ec3e338.png" + }, + { + "title": "Scissors 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f097fbde71b2d02a5fa7d82c80b2178f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ad58f8cfd6ddf45319b2c74c5ec3e338.png" + }, + { + "title": "Scissors 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/fb3004acf9a716bc01811fe575fc8fa4.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ad58f8cfd6ddf45319b2c74c5ec3e338.png" + }, + { + "title": "Scissors 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/010f00d576f839b749ea679de5071304.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ad58f8cfd6ddf45319b2c74c5ec3e338.png" + }, + { + "title": "Scissors 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/2ec031ff389789dad863624fbe0daa84.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ad58f8cfd6ddf45319b2c74c5ec3e338.png" + }, + { + "title": "Scissors 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1720a6fffea45b1e85960c0e2882e533.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ad58f8cfd6ddf45319b2c74c5ec3e338.png" + }, + { + "title": "Scissors 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9b4263d5ad2bae68cb5bec90119b1677.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ad58f8cfd6ddf45319b2c74c5ec3e338.png" + }, + { + "title": "Scissors 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1a58702466094a2e8f22c357cd6651b7.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ad58f8cfd6ddf45319b2c74c5ec3e338.png" + }, + { + "title": "Scissors 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/534eff4250e113d0b9c9c160f83e7daa.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ad58f8cfd6ddf45319b2c74c5ec3e338.png" + }, + { + "title": "Scissors 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/fd206198f0d10bafd81909ffb1948f7b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ad58f8cfd6ddf45319b2c74c5ec3e338.png" + } + ] + }, + { + "categoryId": "62be51f84d4edd56b588d54f", + "categoryName": "Stun Gun", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/6dbc249836ba3c26eaea8a65246ba007.png", + "list": [ + { + "title": "Stun Gun 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/36714df03c6662fe87bf66775b79e290.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/93ca289c09f6940321e6649e36f1b4b8.png" + }, + { + "title": "Stun Gun 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5ea760c046e892a87572f6ff4b574b21.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/93ca289c09f6940321e6649e36f1b4b8.png" + }, + { + "title": "Stun Gun 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/3c445de6e2182f8bd84dc2013e0c92c6.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/93ca289c09f6940321e6649e36f1b4b8.png" + }, + { + "title": "Stun Gun 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/efb342b94e6705a542bf81b897884891.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/93ca289c09f6940321e6649e36f1b4b8.png" + }, + { + "title": "Stun Gun 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/217cb15dd95d75de47be5ecc25903bc9.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/93ca289c09f6940321e6649e36f1b4b8.png" + }, + { + "title": "Stun Gun 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/3c57ac18cda86a1c64497c5bf71a5df9.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/93ca289c09f6940321e6649e36f1b4b8.png" + }, + { + "title": "Stun Gun 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/71804861ad4c4b9a87cc55233cab13f1.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/93ca289c09f6940321e6649e36f1b4b8.png" + }, + { + "title": "Stun Gun 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/14e0f7d9d2e90455332dbf1fc48f164b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/93ca289c09f6940321e6649e36f1b4b8.png" + }, + { + "title": "Stun Gun 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/86525c1bb7cd3a5c32b8f75d1d246ca1.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/93ca289c09f6940321e6649e36f1b4b8.png" + }, + { + "title": "Stun Gun 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b30e4e8b2f568e68fafe97f020f9cc03.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/93ca289c09f6940321e6649e36f1b4b8.png" + } + ] + }, + { + "categoryId": "636b8e5415831ec42fc7d803", + "categoryName": "Business & Office", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/310d539f09087c633febe6bb47dcbe9d.png", + "list": [ + { + "title": "Business & Office 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/dac34a1833dbc36e5485c9ad605186f9.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f285409f669ec89b073aa32da7c689b5.png" + }, + { + "title": "Business & Office 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/30986c5ed073a225c4f2ecc4e18df94e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d3d198ec14f12000e8000e1e7ca3c2b2.png" + }, + { + "title": "Business & Office 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/15bb74cacee7e2e6774b0486f6f119fd.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/4d4295326110cbc8970c2d5b045fdddc.png" + }, + { + "title": "Business & Office 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/71248827a62bdc2e09f40ac4dafbdddc.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7f79dd59ee84130d97935a6809ee8932.png" + }, + { + "title": "Business & Office 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/de4c54a2e4734ce622e6c0650bee4e29.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0e2bdbf65f930c724f177379cf6e1433.png" + }, + { + "title": "Business & Office 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f7ca6b14b56ea73b369b6bae7c4e4e2c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/4d04e30956a94b46a0ff3f6f3679c668.png" + }, + { + "title": "Business & Office 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/89e347a79b3bdc50302fc921702bb656.wav", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ebf9fc1c3f19a38b04e48051190e98b9.png" + }, + { + "title": "Business & Office 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4b8b9230ad1c31f315d98c04005b9007.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/c2812f24bfc3e17940bd5e8dba2c384d.png" + }, + { + "title": "Business & Office 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/711b2bf9ef1f12f325a1e4a06b67e71a.wav", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/97d22c85cd7c616d6fa304cc24a2d4d2.png" + }, + { + "title": "Business & Office 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b9a2ba10a8c49185f81e9a098b7d8e9e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/a3b2eee907c7e17e2153d0278e844565.png" + }, + { + "title": "Business & Office 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4dad8196b944eb9d7f4aa5ba9fafb1ea.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/02f87fce069b516fabc7cee0b8042380.png" + }, + { + "title": "Business & Office 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4de94407c7b019b4f28e7e47aeaba821.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7170defe4afbac8f2e3adc1c7786efe7.png" + }, + { + "title": "Business & Office 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/75d78fdb2025ffe47867d0c66f940c1d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/17b3e93b2eeff9b952012cf2d77ede26.png" + }, + { + "title": "Business & Office 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9cccbb6715861dedc1d5d788a315cd91.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/baa5002f8777087d433be6c3e27f6407.png" + }, + { + "title": "Business & Office 15", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/804f1003e1a900f0ed58fa855f6b74f5.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/17e051287b5c7d6d2871d169f84b0120.png" + }, + { + "title": "Business & Office 16", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/dc19db1639480a2837bb8fb2e815f3d1.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/29a072366d8a98a411d8b6e979c4ead9.png" + } + ] + }, + { + "categoryId": "636b8e5415831ec42fc7d804", + "categoryName": "Doors", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/fc4acd4d2f4c93c94c65fa122e4bf945.png", + "list": [ + { + "title": "Doors 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5dd61ae1dcaf73548d6fa3b46630c94f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7eb41be957ec7d8b0ecd7584221cbd43.png" + }, + { + "title": "Doors 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/72a49b6da900a94ee9bbf81ea97eebcc.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/abbdcebf90efbfa947b8b65deef8bbf0.png" + }, + { + "title": "Doors 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b532a5815df6aa83d42eee075b7fd0cb.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7a9b205da4fd1cbaee96251bcc72723d.png" + }, + { + "title": "Doors 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/61c804feb9791b324240794466bbecfb.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b2748764ffb0b3f6adee8bec72bc23a7.png" + }, + { + "title": "Doors 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/8196950a7900e1dc7f89e16d884532f7.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/dceaa1d13a61589b26d1984dc43aa935.png" + }, + { + "title": "Doors 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/467373a534d5828b3cfc40e7e15f4c29.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/97e82065e38da733e3873be883680045.png" + }, + { + "title": "Doors 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4d6021931f2cc965b8f4618518519825.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/870c966054eb8e5c8599c87760edf1a0.png" + }, + { + "title": "Doors 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/bc1b8cad303726345b57d53875eb3829.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/87732e14f894bffe1e1037cfec2ab1bd.png" + }, + { + "title": "Doors 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/969d1046fb8e89b08d489ac649710389.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f623e0b8b10afef6a1d5803cdc71c4e5.png" + }, + { + "title": "Doors 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/253cd4367452afe514185d206c880da6.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/1d903b54414d65351897d1d3bc5931d1.png" + }, + { + "title": "Doors 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/484faca48a560a2735e5f263c269dd85.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d526bec2aba09fcc2ef2ffc3d4be162d.png" + }, + { + "title": "Doors 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/fdfadf1f67a7f0fe84fc8fe415b3e780.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/8fcbebdf66ce047de184cbe06a033add.png" + }, + { + "title": "Doors 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4256003d4e427cad1a9d6c91e124c70e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9c1013485295e5f6d7e187b8dbf18d72.png" + }, + { + "title": "Doors 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/53b4d94372e6ad1f00e2588c4a2e6d5a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b1f8e3b5c189c6722080cbfa8e339324.png" + }, + { + "title": "Doors 15", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/976b47bbd63271953dbaa1571af18b33.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e2b7ee1365748dbe029e397b5552a2d2.png" + }, + { + "title": "Doors 16", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/faea69992fb7827e14d58cbc11b48e5c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0996dfe242956c469972c799d5c29838.png" + } + ] + }, + { + "categoryId": "636b8e5415831ec42fc7d80a", + "categoryName": "Tools", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/b52b8ff860d9faa3f1ebfcce9674146a.png", + "list": [ + { + "title": "Tools 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/8ecd92c12f58b998a1995b1165fedb2f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/61bac61bf374b774bada2f2ff2a4c5a9.png" + }, + { + "title": "Tools 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c6b83c50a9ffa835f85a33fbd5456378.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/8236f1eb51b7c1664bc12576904c20dd.png" + }, + { + "title": "Tools 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f87a533bd42391c05919cf42217d0881.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d5dc76bec49925af9eddfae717771d21.png" + }, + { + "title": "Tools 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b60bab2e7a6aa07a1ea7a8cfadb9eb2a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/c230585234a87c66eb77d14d409f314f.png" + }, + { + "title": "Tools 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/749997c97f26bbd68d126063a73e020d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d33fc684d1b061c48198a9fe06a6a435.png" + }, + { + "title": "Tools 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7ac292b1e7e08aa9deac5336c98672c8.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ebd488945e45cb8f9bc4fab61777226f.png" + }, + { + "title": "Tools 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d24fa096945aad87e4e7e826b951cb47.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/87758a660d803d1993163a6174337e86.png" + }, + { + "title": "Tools 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/44d2fa94e973155b6eafc2ebd98a48b5.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/31099ab082cf0c33257ba55b6f158d2d.png" + }, + { + "title": "Tools 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/3d2bb144b89a0f17694976d7c0752fbf.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/bf4f23309c1e286ac774bd7ea905fec2.png" + }, + { + "title": "Tools 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5ca71e456e6fc165ce80670096441054.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/313943eb3bca880b256eb60817bbe794.png" + }, + { + "title": "Tools 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9f6568788aafed3a4e94666556e063a3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/03448a48e39357ff4cb0e5353eb2d84b.png" + }, + { + "title": "Tools 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d598154f78de11d670556446024fe75c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e8e2c49b654cac07f1b9aa435e94a4fd.png" + }, + { + "title": "Tools 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/74e4fb931e8b23db2429b0540206b735.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/4874e00bba3ccdc19fdce2caaa42abe5.png" + }, + { + "title": "Tools 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/8bc825c756c4bc3c650638f00906d8a2.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/c3fbde9b26562ebf3dfa26663caf905e.png" + }, + { + "title": "Tools 15", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/637463e2cb3b2dc56857803be51e740b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d7236b203518ad4d663a77cfe9605797.png" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd33", + "categoryName": "Blowing Nose", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/10ae4d6081899ea2e9a669d984803af1.png", + "list": [ + { + "title": "Blowing Nose 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c21ee72ff053b9af5446a144f3a8f5d9.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/3d852de32ef2cee953cc0052c5434d7c.png" + }, + { + "title": "Blowing Nose 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d8bc2062013cf3898ba22339e05f8937.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/815a8c9f75c08462e5056293b4ac03d6.png" + }, + { + "title": "Blowing Nose 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/738053f0fd11e2e78ebc6982a0ce8d94.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5230615041ab079bc44b5ab4651689ac.png" + }, + { + "title": "Blowing Nose 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/8b39b3c764aa9f24d793ef7ca9b47766.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5db6a01b77d6bec1e77e27ed0250538d.png" + }, + { + "title": "Blowing Nose 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1dec038dcf27e131f378152b6cca19aa.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/c1f25a36e5be3f5e89548ca2df68ec7d.png" + }, + { + "title": "Blowing Nose 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e3ca312da6ccf6c045cf54a3053ec64d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2c70c41bf20ab79c047ab83eb073c7f1.png" + }, + { + "title": "Blowing Nose 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d27f5ee9a14e7abb8647df98bdf78d6d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/615db5ca94702e352df5fe7160405987.png" + }, + { + "title": "Blowing Nose 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f8b89b279b92dcc07fdd21c57b274939.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/335130a491ceb6544dc06030a9099b72.png" + }, + { + "title": "Blowing Nose 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/524df318fb89468b47ecdd24fee0abb3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/cb3589f2bcc4de916b93f1d645bd609c.png" + }, + { + "title": "Blowing Nose 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/85df353b75274d23379db28c793bcda2.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/071640b3fbc881af55fc345aefbcfb8f.png" + }, + { + "title": "Blowing Nose 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/3323d20bae58fba6564d20dddbf54344.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d64135b9fc82bdf24691ba3cd0d219fe.png" + }, + { + "title": "Blowing Nose 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/fec8cf2ef7810aa77c535d30deb424a9.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/be6f421cd6252c727d0849b0485872c7.png" + }, + { + "title": "Blowing Nose 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/181b424184ee04268e010b2d57fc7b3c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e535a74ddb58cd6061b3d12bec3d8108.png" + }, + { + "title": "Blowing Nose 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/8e408532f99f796ca6ef4ddb2536ccb2.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/6200c6c8db8192e6adf9870e6fb3d66c.png" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd34", + "categoryName": "Boom", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/5b1491b8aaf758881c67c8c2b558c2dc.png", + "list": [ + { + "title": "Boom 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5306947bccc61b844e2e6727b457379a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/82c5ab1a9f451de342f3f09216e1fbee.png" + }, + { + "title": "Boom 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1b3cc658778a2341f0d6552f7f4f5962.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/1974c458e5f8872ad86b965695d2099b.png" + }, + { + "title": "Boom 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f86bc4ffc1eaabd2981caee1f0e99340.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/6bae28d8c8769199edafe4131b300fc0.png" + }, + { + "title": "Boom 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/289af25a549128d5283adad2beba9bab.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/c9f3f6a9ffda61356fe9eaba57bbd4f6.png" + }, + { + "title": "Boom 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/479ebd96e9487ff97aab59db83ae7d8a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/a6c2da6f9026bd769cd0839c9e63120a.png" + }, + { + "title": "Boom 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/edb83ff1f94ba7ed4022c9592372f717.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/30312fa0068c7d5b2eb5be68373e2ac9.png" + }, + { + "title": "Boom 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/bee0244d6a055138352e20fc9e657fd1.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f7de1f306d8688582603f28d3f1d2b5b.png" + }, + { + "title": "Boom 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9aa4c5eea7cb1df76482151cfec7143b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/500c164ef2359970562876e7be6f3a69.png" + }, + { + "title": "Boom 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1d1a8d15f3bd34210b32a15fc01e357e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/05af0a4257212c0d05a428bd12f702ea.png" + }, + { + "title": "Boom 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/26979e70465520b90166a19db093b678.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/6ad99a9bc42d9200f5e62a62fdaf263a.png" + }, + { + "title": "Boom 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5c5581b9ef71e552db551b817c6face0.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/056e4e4bcedc33a049702bf2136ce246.png" + }, + { + "title": "Boom 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/2ceff4497dd839813c8180e5b1e85daf.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9d3ff691c62a65fddd11b1971001387e.png" + }, + { + "title": "Boom 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5a01d5adf7cda433c436825285c476c3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2f36ab0b9b3c8d2f3ac825d4cf98ca40.png" + }, + { + "title": "Boom 15", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/68d1372b68af614f0d8a13088c5f997e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5d5f6d6ef003d5ac9aa219cf5e457f1d.png" + }, + { + "title": "Boom 16", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/319b39b164ee36a13d42add262409225.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b1e1e983e25f064323fffa945987ee39.png" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd35", + "categoryName": "Clocking", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/e3541e200135977e948a25f3fa3cf9ae.png", + "list": [ + { + "title": "Clocking 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/032d4c70e10ccc9a058784834525abf0.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/455bb3313b0fbe49583f8d08342d7be9.png" + }, + { + "title": "Clocking 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/0ebcd92a879c0747ca396b7056fc0d77.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0072b82cbe704d382d94163e8a4d7ea5.png" + }, + { + "title": "Clocking 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6c3b8867d8dc5ddae8f6f4dfae2e161c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d1b160240044e24c4d70c1e6e9c13a08.png" + }, + { + "title": "Clocking 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/22a5efd130ecc59ae5b572e411383215.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/54708a377b13ca9220c98d67bb2b05b3.png" + }, + { + "title": "Clocking 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/83d7123a865e59111c8e21c9e84d6f7d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/952339c7f8b628c0076aa67d3a91fe3c.png" + }, + { + "title": "Clocking 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5a6bae02f1218a65bce425a394d359bd.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/c810ed9b81a8d117e976595a79545a1f.png" + }, + { + "title": "Clocking 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d6364d7a241e6229efd69025f64ef4af.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/1222c2c9548466ded15941e3ec870cff.png" + }, + { + "title": "Clocking 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/ffeefb8ac458b79227bd16321bf6141d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ed63edf33b1729c9bda6b3d4cbaa6e95.png" + }, + { + "title": "Clocking 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/62120a53252484f25d5d137f1e414925.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/1fe48f5bc261f2bc56bb74960af59fb0.png" + }, + { + "title": "Clocking 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/072cbbb01d6067011cd5661676c15bec.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/3f1ac1219fbaee5a369325654a4236f3.png" + }, + { + "title": "Clocking 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/35267eb03b6c63b878287ea0a58b465d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f0b356181df23e939e48fd0dbfbde77c.png" + }, + { + "title": "Clocking 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b6bd31db371b35e3e0413b7a1bcaa526.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2679e3065f4b7b1c53706bdbce5db3b7.png" + }, + { + "title": "Clocking 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/657cf0b4daad0b890dad532224eff264.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/58aa57c5a6a2145ef55a91eed36d94bb.png" + }, + { + "title": "Clocking 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e6ec30d7e2328312cec2f81aa4ee8cfd.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/09af64443514248717d999cd3de025a1.png" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd36", + "categoryName": "Fun Anime", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/aaeefafde067a8a581e092da1bded504.png", + "list": [ + { + "title": "Fun Anime 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/82e23478a39727b64319ea9a24305c44.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e531963223deb322b6c1cd82ca35e592.png" + }, + { + "title": "Fun Anime 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4c96810a77998e69fc26c7db700943ba.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/564ed41ed1c50939f678c6ce1615a6e6.png" + }, + { + "title": "Fun Anime 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/abb51fb03ffff3df365a52e1a7909a6e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/4ad9020fbea3aa257808155ab0126d4b.png" + }, + { + "title": "Fun Anime 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e19805327c2fef5e45d7980907e1bff3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7689e7a20fad1560264d4958ca171bb6.png" + }, + { + "title": "Fun Anime 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c581f4a448d6e3a2664400409dd7f1d5.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f957d27cdfed60da55a6c8f19e77d3ad.png" + }, + { + "title": "Fun Anime 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c6768509557bfa64aabf3a50ebec11a2.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/476fa332cc8aa7d52fdee4e7f09b9efe.png" + }, + { + "title": "Fun Anime 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/bc839deec4b513f5ff140d6f10399a82.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/eb251b99ea2a75bd894bba66b06eefa7.png" + }, + { + "title": "Fun Anime 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f39bc98cd9378aae577317073a83a292.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ef6b03b866a7403d1b866e844d2ea0e7.png" + }, + { + "title": "Fun Anime 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d53fc0ae81afeac96df388f6a46b596d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/78a92bcb099672e7410382f5ffb96ebb.png" + }, + { + "title": "Fun Anime 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/0623826682a9e23342ad643442901586.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/dd7baccea4b5f4ec1034ccbf409d0255.png" + }, + { + "title": "Fun Anime 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f871f8a0248e4c72ec23eabe1c5a1c26.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/1b74cfe553a4100f6a2880face866a9b.png" + }, + { + "title": "Fun Anime 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c3c889815549d64a75e8fd4dfbd19ad1.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/95486a7e21e90c104089d0ead67d1b4a.png" + }, + { + "title": "Fun Anime 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1a5f1250826de847860c616847abadc5.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/99eae612ce6f2c0bfb88124494e365ce.png" + }, + { + "title": "Fun Anime 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1d891ffebbdb80288e29e01a0ef3ff06.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f1e484fa2f68496eb14e884a7f1b5193.png" + }, + { + "title": "Fun Anime 15", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9e6efaa721456378dc7f2fd9a4b80431.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/fa29b5549d0dc2922ab022daf74d0618.png" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd37", + "categoryName": "Gurgting", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/47f677ab3d76036aeeb7d883143acc35.png", + "list": [ + { + "title": "Gurgting 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e83587c797c63bda5ba0ba6e9661c10e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/92ebcaceca2f01bc0c5b17685260fab5.png" + }, + { + "title": "Gurgting 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/54a2ae6b7b3a6dade1fb653bee78d725.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/c4bd65ec05dc758a167089ccc70dbc99.png" + }, + { + "title": "Gurgting 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d79da14a8674221c299c546ae5279a0e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/67ff60b6706cba7005666ea00b42a567.png" + }, + { + "title": "Gurgting 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7231f3e4c77dfe4e187ce9567a91a396.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/188336dc146d580464df78f639840322.png" + }, + { + "title": "Gurgting 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9ab0294593e0d91ad4898bed9ac7d07c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/81c9fc90426a5f09550aefaebec609ec.png" + }, + { + "title": "Gurgting 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d92ab4e402006c717d2661db13197f09.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/47f677ab3d76036aeeb7d883143acc35.png" + }, + { + "title": "Gurgting 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9d70e3f7bb5972e369376e594a3a187b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/51b2150f404124ca10d97e4a6810e912.png" + }, + { + "title": "Gurgting 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d30ad11811d29696445ab82646c8948c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/db6626e843b7e7be6fd3b8fab03bb3c6.png" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd38", + "categoryName": "Snoring", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/90513d7237ab90669be0049f8a093fac.png", + "list": [ + { + "title": "Snoring 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d997397b7b670deb5eb3db3e5a0d116b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/71a53b72f1fc60996f118ab40bf7b743.png" + }, + { + "title": "Snoring 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7c5ec7e1aa8dc82d9a65cebd3ccc2f2d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/32d9f31db6f6c4f3cf91bb53c2a329ad.png" + }, + { + "title": "Snoring 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/ddcc94754a778ff7eb96a6d4723e6537.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/1e3ecb4ef600dacaa302349b4c47c8bc.png" + }, + { + "title": "Snoring 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9dd4fda080ab2c3a8fce79d2bc53477f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/4b402486f7c161195d2a59d63710df01.png" + }, + { + "title": "Snoring 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6557e92d1ae88b26aa3fa12297fb57d7.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e1c1ac226e6bd3fdc0b347dc88d83554.png" + }, + { + "title": "Snoring 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/2743eabb2a90c80fdd88521b1d20af58.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/a65b43dafc79ddb0e20db297e479b02f.png" + }, + { + "title": "Snoring 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/727733ca746f831e9ddd2a54d9cb747c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/cfa2e6cbfa5790163388f2532672ad29.png" + }, + { + "title": "Snoring 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4d37ebc5baa7f6dac1d35b5795e017b8.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/6081e93fecf535ad88645553308fe912.png" + }, + { + "title": "Snoring 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5814b09bb3eea1ae7529c922de188b8c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2b922803e5f21b96548c103b2cf36481.png" + }, + { + "title": "Snoring 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/58270fc0616e08a132642f291a655f87.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/c768c8dd29f9d69024b09b1b99b9b0a4.png" + }, + { + "title": "Snoring 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f10bccfc57aec1dac59868d5c3510765.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/210933cae9708dd88bb4e74939a3fc50.png" + }, + { + "title": "Snoring 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6a00470a867d76515fd0e319c2e7d2b1.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7b6b47f6dcde9f9183e4d25208fef6ff.png" + }, + { + "title": "Snoring 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/8dac9187468e2968e732716ef459da70.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5a750988a6584326de4c0060ceedee62.png" + }, + { + "title": "Snoring 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/fc973109aa07c0795d7739caee934c3c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/6cdbd0f5c65ff9e1821e72238f848c4b.png" + } + ] + }, + { + "categoryId": "636b8e5415831ec42fc7d805", + "categoryName": "Meme sound 1", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/3f20b20d6eb55d2c150bfdaab3146d5b.png", + "list": [ + { + "title": "Meme sound 1 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4cd17db699d08db7a00410aa44cfdae6.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/4e54a92c280899133f5748cfcb9ad94f.jpg" + }, + { + "title": "Meme sound 1 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6f4f5d8793fefd662d605051e882e308.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/6ce34decfb7d58cf510ab82dc78aa5b5.jpg" + }, + { + "title": "Meme sound 1 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/83dd4438485bc75d1c2512d211c29e94.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/508463f2dffc6aadc6d97f0dbf0e0f54.jpg" + }, + { + "title": "Meme sound 1 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f72c46ffaa2eb922a5d3862154e4d7da.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/768f3032a5b4d5f108d38315021369b7.jpg" + }, + { + "title": "Meme sound 1 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/49f4f9589e5bc7fccb5025c3bbbf6370.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5145b39e4f37e5e7b19b3eb044da4ca6.jpg" + }, + { + "title": "Meme sound 1 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b70fb22c26fd2b3ede119ed8211c87cb.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/674b7013980d4de4a298d29cf4a453bd.jpg" + }, + { + "title": "Meme sound 1 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/14893595f107aa2400451448d4657dce.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/6201f052d753abc2a69ad0c2193b0021.jpg" + }, + { + "title": "Meme sound 1 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e707fa24de58599a20208974a6104205.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b839257eb37854499a4e40d51cbd6aa2.jpg" + }, + { + "title": "Meme sound 1 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/85eeb4bfb625a5925f4c93a981bbcdec.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9bb5966682457978dd2b13141d1c565b.jpg" + }, + { + "title": "Meme sound 1 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b483172e127951c58db64d47c9446a84.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/881be3402237e08c78e9afd5702ffc0d.jpg" + }, + { + "title": "Meme sound 1 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/cb1a3597611e266d9567e407e89c5805.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/6b569aafac50aa1065d82218effbdd09.jpg" + }, + { + "title": "Meme sound 1 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f6a2966af445835d771d208c656f75e3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/4882cb64aa7f02fccaa771bd3132f320.jpg" + }, + { + "title": "Meme sound 1 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6812b5abf6e98ef65f8b9061baf3a0b3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/4780f9b372215392caf39459ce3b499f.jpg" + }, + { + "title": "Meme sound 1 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/0afec4a83197261ea8c28ecae784b726.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f30debf012bb78a8f80f81884471cec7.jpg" + }, + { + "title": "Meme sound 1 15", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/86cdd28d82081e0d76c4f6091e830792.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/8c1f4b8d2d50d2720531d5ce10f8feb1.jpg" + }, + { + "title": "Meme sound 1 16", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/3651d0108fcb04f43cbdb3923f773c54.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9f1b1cb0b619a9e2ab06df6109a98d36.jpg" + }, + { + "title": "Meme sound 1 17", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/ad0f4afbbba444f44adca6c8f4ef0b1b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/c3ef842c2e46738780d099c66764f7e0.jpg" + }, + { + "title": "Meme sound 1 18", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a1350b1481b1cc8a7e6c9a97c929eb91.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/dcf787322d2f21f06d472ee29f575c42.jpg" + }, + { + "title": "Meme sound 1 19", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5192333458fb60fe9c5234d2f322f32b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/42b905a9bc320ae65ae0e8129bd793d0.jpg" + } + ] + }, + { + "categoryId": "636b8e5415831ec42fc7d806", + "categoryName": "Meme sound 2", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/4ce8347fa345ab501c9f3af2f10b2f72.png", + "list": [ + { + "title": "Meme sound 2 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d3aba7a2f9224139f1b28b72d3afbf61.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/4c9ef927a9222babeb120236f86d8703.jpg" + }, + { + "title": "Meme sound 2 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/371d5e520c35b9d1d85f1422f3107e06.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/22eeccfd81d0c1250e815d1b7cfaeed0.jpg" + }, + { + "title": "Meme sound 2 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9220b4f67e33bc6d9065f0044a5f7540.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9122797892df0cbc618c8f82951f26e1.jpg" + }, + { + "title": "Meme sound 2 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/00f68bdb9de929d4388975d2bb522e52.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/41039b3970942cb52a11ab1b00b1b82b.jpg" + }, + { + "title": "Meme sound 2 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/43b262159fd2c422679e0b069b19fd02.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9e1031d234f6e41034fac222a1bd736d.jpg" + }, + { + "title": "Meme sound 2 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e8984bcbb510fb580b743e63f5302f25.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/8f3f247d3761aad7a8ae1258891b015c.jpg" + }, + { + "title": "Meme sound 2 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/da87964537c41e74dd79877fa0477f5a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/13bcf55c08382797c5e3692f91fb183f.jpg" + }, + { + "title": "Meme sound 2 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9583852f8b38ff95c31362abd1b971eb.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9b1ba9e18d100d573ec8eb4460537dd6.jpg" + }, + { + "title": "Meme sound 2 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/321cf948ef4521b6d25bb4760c183c73.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/be20800a7b112260564585eb30d4e158.jpg" + }, + { + "title": "Meme sound 2 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/cdefab3966d462745c1734a6b4c8d6bc.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2a5d76c4c4485fbe8148c4d1d366fd74.jpg" + }, + { + "title": "Meme sound 2 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4b3c0d029aaf8d89b144dad3282b3919.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/c480137f6e71f38cafcdd03440c69901.jpg" + }, + { + "title": "Meme sound 2 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f15b37e84d953464b92053417e4ca579.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e9f831f381978012560e046ce68c69d9.jpg" + }, + { + "title": "Meme sound 2 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/cfe4de2e2c7bc52bf4c6abce869c0e21.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/da5173be065c93376a8d51d6de963183.jpg" + }, + { + "title": "Meme sound 2 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f0dfb8bbdcced07296c6245995cb7a76.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e9aa4066c75f80de11ad4df4f80849d5.jpg" + }, + { + "title": "Meme sound 2 15", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9a36ed578c106c63a5554b4d76429f57.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/211df0d52a525b827d6c188eefbf634a.jpg" + }, + { + "title": "Meme sound 2 16", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/84498bb4dc3030de465e10d280f7e409.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2e13fe9fee06d9048d1b92f37e392602.jpg" + }, + { + "title": "Meme sound 2 17", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c38d6a583c7e23f8b054851e4b6fa37e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/3ec03e51b2a71153a7af4a0e2e947e97.jpg" + }, + { + "title": "Meme sound 2 18", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/833b37c1be0d7e45e02df03782045bc4.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0e80619eb10ab775ec48616ab695d597.jpg" + }, + { + "title": "Meme sound 2 19", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/2f5d347f0a8938e727d7b67e604810e9.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/22645a92d965b54f0635924c7dd7a047.jpg" + }, + { + "title": "Meme sound 2 20", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c3a2d9d4e3ef4ebea19dbfb172176c74.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/8b31f0bf6ca513ab5e90d37ec710aa3b.jpg" + }, + { + "title": "Meme sound 2 21", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/0dc955a722a13654b1f9f4cd0f19fadc.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/4fb6bf4fed2964f6ee424d9e5ad06ade.jpg" + } + ] + }, + { + "categoryId": "636b8e5415831ec42fc7d807", + "categoryName": "Meme sound 3", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/991f4d7e0b8ce3ca9ebc5f9e7f5cf68f.png", + "list": [ + { + "title": "Meme sound 3 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a927e26b9e9b0f0d734249f42a43ca0e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/000a7d3d6afda260f4f60f8dcc9d3819.jpg" + }, + { + "title": "Meme sound 3 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/2c270e44c922586edb6d2aa4538ed485.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/fcd952d3919aae04fb61f1fd7754c96c.jpg" + }, + { + "title": "Meme sound 3 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/921b2c1bbc72295b480c3191f864c56d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b17746bbf7adad92b3903361864464e1.jpg" + }, + { + "title": "Meme sound 3 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4a376e86dfd73ae191757a9ee4e3336f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/3f08146406c3ec54a260b36d99b70213.jpg" + }, + { + "title": "Meme sound 3 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c8fc4acb5ed591f485a4c05dbe47d196.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/281cd3eb809510959f769a92cbef14bf.jpg" + }, + { + "title": "Meme sound 3 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1d09fa4e130a83895110bacf9936bc08.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7a3c9d99c62804210d83a46c2ef483d9.jpg" + }, + { + "title": "Meme sound 3 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4f1e59550b0740b5121509f0ca14c53b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/faa047812fea681a7ca99c41eb26af0c.jpg" + }, + { + "title": "Meme sound 3 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/009a7f043aeb65538abb6e0b851161fc.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d65babaa76e14d9936aedf26aad3eb0e.jpg" + }, + { + "title": "Meme sound 3 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c42f9de360823efa5f282cdaa8dcdfb2.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/6a048ae07699d2b920be0ef461e2cb1f.jpg" + }, + { + "title": "Meme sound 3 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/95fc6616ee24aa28012b08a26f22aa8a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/bd39e5ae04c6f513d98d7ef7ab5e6fce.jpg" + }, + { + "title": "Meme sound 3 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/14082ceb9f18ced4335183efea0ec8a5.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e2c63eade56ee2d0e1ba41eb151e3114.jpg" + }, + { + "title": "Meme sound 3 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/79b6d68b0964b18b1ffd7a18d62f07c6.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/1a45d50ab697bbbd06d4d5dcee2e676b.jpg" + }, + { + "title": "Meme sound 3 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/763faab8987cb8ed00313ec3e91b705d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/c27dbdd362cdb5e6f892cb3902be7f21.jpg" + }, + { + "title": "Meme sound 3 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/956727fb2bfebb355f10c8b9076cf36d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/93731efe64afad808776b97c0aacbf5c.jpg" + }, + { + "title": "Meme sound 3 15", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/66713b1c3d8306d0ff6b3f553b36c56c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/79d5d5fe3ab51fcbda216fd2b16c3caf.jpg" + }, + { + "title": "Meme sound 3 16", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d78e9acea8e9855870f169b399dd4ad9.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/1ffb2974cfbebc108780ef6c09d114ba.jpg" + }, + { + "title": "Meme sound 3 17", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/69de8ea564a97aedc05ea3de558e21f1.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/060c0d5afba0eb61f48ab6ae3d1cfa94.jpg" + }, + { + "title": "Meme sound 3 18", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5c6d26321b4885f77dc57071d6e26f00.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b23b98c3514f214578f6ec5cd810047e.jpg" + }, + { + "title": "Meme sound 3 19", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/adb8153b33811cc86661adfba3b02a36.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/370af28996b90fb6998f0173e8e9d34a.jpg" + }, + { + "title": "Meme sound 3 20", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9e63caaf95df5b1f01d6b5648c3824af.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7ebeaf99e3cc7df5442227efc7e1453c.jpg" + } + ] + }, + { + "categoryId": "636b8e5415831ec42fc7d808", + "categoryName": "Meme sound 4", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/9050e970de5939d5358be1e58cc139d6.png", + "list": [ + { + "title": "Meme sound 4 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7a649f4231c33e3afbc1c22474d06048.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5a47376faeef054e9aa4ea61ce14b427.jpg" + }, + { + "title": "Meme sound 4 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/bee98ad260c5a66823d7a09bd5a423e2.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/bfdda888e4d95a7223c861ffde959898.jpg" + }, + { + "title": "Meme sound 4 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/ee49eb67378e93ec563d1f715dd5ac04.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/72146479be8c97cd6f92589d378f1ff8.jpg" + }, + { + "title": "Meme sound 4 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6b267b5aa6e0e7e2683509618fc70c8e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/55a85177ed6c1f6797aa53bb56261c46.jpg" + }, + { + "title": "Meme sound 4 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/28e3bb6e134f0c4ed50c79b46dc7d3e8.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/50d1c9bb32c01cf6c4eb4d1718a89555.jpg" + }, + { + "title": "Meme sound 4 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/40922d865af722072a2930634ee3deb4.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/022b3ad8abb7d4f7c9ce7e581f3eae35.jpg" + }, + { + "title": "Meme sound 4 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5a67630338114fa5e6549add918255d0.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/1d7113c73fde73c318f3056d10194fac.jpg" + }, + { + "title": "Meme sound 4 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c7a574daa8527fbdefa8711ee432a760.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/6ff4d677150bbade9299359a612bd0a8.jpg" + }, + { + "title": "Meme sound 4 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/062e1014a3ce5f793bdfa6926d366782.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/02da4270d96b090050c6f5d12e7a3b92.jpg" + }, + { + "title": "Meme sound 4 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/97921af860a1b8a4608c93eaf698d7b5.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/bcfeb56c90258f205bb7c138e39e6686.jpg" + }, + { + "title": "Meme sound 4 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/87bc2c2f0549adccfcb7efd60f08d5c3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ed9baa1d9e965163768e63dca828b7d8.jpg" + }, + { + "title": "Meme sound 4 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1fde554f6df05257c47c60c52b152a1d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/70db7c9770c5a6d7f2d4e0997c754baa.jpg" + }, + { + "title": "Meme sound 4 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/eed5df84833eb3fc0f88040e6d935f68.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/3225f4c4434e4df454211d831a38dbe8.jpg" + }, + { + "title": "Meme sound 4 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/33ab611bf307198983cb5bad90271f69.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/de2b05ba8d73bd08e8521591ca535610.jpg" + }, + { + "title": "Meme sound 4 15", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/39ebde0e167962507a6cc0a1b2b0a43e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5f3c1b6225474f24e03b3cbffe09bad9.jpg" + }, + { + "title": "Meme sound 4 16", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/fce825de32f3e45a25c2723bf77886a9.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/25c365d77f0840c49fb062b65bb828c0.jpg" + }, + { + "title": "Meme sound 4 17", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c7b605aace3b5857014eb16397b73d9c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/a52864c67d2614a08b0a97a618e1959e.jpg" + }, + { + "title": "Meme sound 4 18", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c874245574d11fd62aa751f40094d8c8.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/36ea58b8c21f4ac9fd9543d3bc5b9e47.jpg" + }, + { + "title": "Meme sound 4 19", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/ec2d800276d384e791916cb70259120d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0e705cd5fa0a17f71d77a8e37ef8647a.jpg" + } + ] + }, + { + "categoryId": "636dc88cf512f266a311768d", + "categoryName": "Meme sound 6", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/e6936b3979a284fc32cfade30c6bf4b7.png", + "list": [ + { + "title": "Meme sound 6 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/329971602548f5fdda85ddfcf4d4750e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0868668e6ac9aac537aa5d748ec59120.jpg" + }, + { + "title": "Meme sound 6 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/0d44d826d2e1aaa96b6bc8b7efbcfec3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e59535a07a4f3c49864dc7292952a2d0.jpg" + }, + { + "title": "Meme sound 6 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/675d7aa8adfbbd77a3907014a92a0350.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/486fac53d977b93150890e6a412b8e58.jpg" + }, + { + "title": "Meme sound 6 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/bcf2fd56c6bc1e99d7816bbb653afda1.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/695cf4294618c4f44d5a4ed24b962884.jpg" + }, + { + "title": "Meme sound 6 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f2313c970059bd82560b912e3e796cf3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e80f216e9be298a7ac73169403b71ee1.jpg" + }, + { + "title": "Meme sound 6 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f33fab082b968a9f1b7655fac27cccd8.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7aa63ab3392d0e172a6dbc8653e39fad.jpg" + }, + { + "title": "Meme sound 6 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/19b13cbe8aa919b7a659c67112a32677.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/09e3e8716641ba9685e6a2f668ab7392.jpg" + }, + { + "title": "Meme sound 6 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/320da723c98724cbd2e16278655040f6.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/6c2c1bc64c3c3e7c42a8a6531bef4e8b.jpg" + }, + { + "title": "Meme sound 6 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/bd99b8121af03eb7ff7c656c1b17bf82.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/08660c22eb77ab2eed9720bf0f62dbab.jpg" + }, + { + "title": "Meme sound 6 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d0081e4584ec2544ce12b321b2c76e5a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0766f75be34db4fe4c365dbcd6484d2d.jpg" + }, + { + "title": "Meme sound 6 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/11bf03ddedc8132b325bacf036587433.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f494ceb2062cd947a3ee9fee5f7a98c8.jpg" + }, + { + "title": "Meme sound 6 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b3403a619232ac76a6d7fae3792c6c64.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/caf286fc28088eff04869ffc55ff670e.jpg" + }, + { + "title": "Meme sound 6 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/0509a6574615013c1b1b5e159762ff7a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/627b28437b4b2580161128213a8ca0c2.jpg" + }, + { + "title": "Meme sound 6 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/21db05bf5ecae4ddefd79ca45f571043.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/05b4c395a970af05cfcb12ca7b9e7a39.jpg" + }, + { + "title": "Meme sound 6 15", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5048c14e0b0fb6fa3d7f8cb3f20fe3a3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/304a9f457796f1d6efc947b98e239e06.jpg" + }, + { + "title": "Meme sound 6 16", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/14a7721964d399fb1ff14046aaa8a05f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/24b920a2609777defbccd5a672dbcb42.jpg" + }, + { + "title": "Meme sound 6 17", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c669a98436b196ee02aa9feec12157a4.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/dc58e5c0f632283ea4c47f2d7d48dcd0.jpg" + }, + { + "title": "Meme sound 6 18", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c3a78fe4c0cbcd409ad96f544b78eabc.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/465ccef137a5cd239a6203853cc7b84c.jpg" + }, + { + "title": "Meme sound 6 19", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b0abaf45811bcaf63a2cc72f9eb3bf6f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9161ad4d1a4f2863ca5b9224d4ea5eac.jpg" + }, + { + "title": "Meme sound 6 20", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f11e6556bf48d1d24b8ff040020e6f43.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b9a7ab2203e7a458eb00ae06a5be7090.jpg" + }, + { + "title": "Meme sound 6 21", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/dd972b4b9493dcd5f7670c2ebb8bcdf7.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/58d469e7ea485dd84ea9daa1148002ea.jpg" + }, + { + "title": "Meme sound 6 22", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b0e4fa13785f91d52a0620196081a13f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/228c8e61babff3a1cbd9fb9b0223fb13.jpg" + }, + { + "title": "Meme sound 6 23", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/cfda72d5b5f3c130831d75d7e000782e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2a2217e353c80547fa5155b31758860d.jpg" + }, + { + "title": "Meme sound 6 24", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b31fc1bfcda231ba0cabbe7aa393e05f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/02dc8c61d8bcdd4aa5d3c6345e1419c7.jpg" + }, + { + "title": "Meme sound 6 25", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b470760f4647f924418cbc65790277ae.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/15f0f8521da1aea52878d45b712e6a39.jpg" + }, + { + "title": "Meme sound 6 26", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5fb1770c6a9d95453dd4055c08c7aee0.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0a7d2e597715db7a9577ac21686c576b.jpg" + }, + { + "title": "Meme sound 6 27", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a401d8a439641e01380944f5e9479631.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f313c74f55856f223f46df7081e3599e.jpg" + }, + { + "title": "Meme sound 6 28", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7b3691ddd8b7003f94dad485575f29c8.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/48975447ad46b8b2df53a8fb47476009.jpg" + }, + { + "title": "Meme sound 6 29", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/41131b267c4cf1e66935d8a89f829380.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/654621faf8e63ef7e10b7064f3d721fb.jpg" + }, + { + "title": "Meme sound 6 30", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/06130956631b9114acc5689507ad13dd.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/8065992bf5d7b1c65ecc3a6439f85c00.jpg" + }, + { + "title": "Meme sound 6 31", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/8d4b16a2bb5c7923b990aad974d366de.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/195afbf628564ea641adb7942bfe3bf6.jpg" + }, + { + "title": "Meme sound 6 32", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/dbda8c77a6ca41482982f5e9e0eadfc8.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/1c0227a8c0449471e9bcba1f69316199.jpg" + }, + { + "title": "Meme sound 6 33", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7176264d231269074b8b9534f1feb9bb.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2912730820f802440298c5e5a8162eee.jpg" + }, + { + "title": "Meme sound 6 34", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/672a2686241722ee369fbbaf168af90b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/a74204ad259b2709176bd5dbb9daccc5.jpg" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd47", + "categoryName": "Anime meme", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/e3b711902ebeab5aa59ba28c0d8239e5.png", + "list": [ + { + "title": "Anime meme 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a7107c3791c029153b6447df5bbdbf93.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/c072fdee79639ad62037e5ce65293953.png" + }, + { + "title": "Anime meme 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c44b237dc9bf64e745ebb11f279cfdf8.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/8dcb4de77e8d9647cf238f7b794b8bf1.png" + }, + { + "title": "Anime meme 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/2056dbf4ed3fb5e869ff64325a242570.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5e189c0b758d1a3d50c1b181976098ba.png" + }, + { + "title": "Anime meme 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b22b46a0e6c64e42daace075aa58159a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/a6bbe5e5dfa3aa803463fe640e1149eb.png" + }, + { + "title": "Anime meme 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5f0e00363737b68c8e6469355fe0887d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b34bea898b6fa4937a8f76537828d79f.png" + }, + { + "title": "Anime meme 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/ca3fc9fed78a2f4b9c4f1ff4a1b65b1e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/3c1dceb38be61d063008b964f12d158d.png" + }, + { + "title": "Anime meme 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/181ffe52f8e7525b19196dc0eafbc6c0.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/144bf1628d8649f985ff73aa7722b5aa.png" + }, + { + "title": "Anime meme 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/84defddcf3327f93c63f142e7ab37908.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/6caa05b728c8a180cbcf5a1086761d24.png" + }, + { + "title": "Anime meme 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/065c97cdfa10eca952c862c561477e74.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/dba1d239bc0dda7d1d52d6537ba2b7b7.png" + }, + { + "title": "Anime meme 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b2f1a1f221a0ffa1986ef5ea109f3bd1.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d0cefe5b4b205290c1958e5550f88075.png" + }, + { + "title": "Anime meme 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/388a0f22fcab6261338b897a67cf18db.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f5cf1d7bce8c0ab1243a94e6004054c9.png" + }, + { + "title": "Anime meme 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/342ac706dd55e3d12fd56cda4f9a7d1a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/95c662aac956e395f1bdcdc0e0bbdf26.png" + }, + { + "title": "Anime meme 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/0aeafdd0a4f706c5fb3f36f659ad1601.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d501f4d7bde34fbcaedb06520d876963.png" + }, + { + "title": "Anime meme 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6f90dd5e43fb8d486830a97914d485db.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/65fe1c01b27186bd437633529baf5ee1.png" + }, + { + "title": "Anime meme 15", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a0a4d785b7b1f3f30dc7bad4625e9b19.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e8dbec69a3906d4afcdd2e094a641e38.png" + }, + { + "title": "Anime meme 16", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5f057a0ef2f0d38436b17e6c0886e668.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/85c3f3ea2c28848336409c979be0fa64.png" + }, + { + "title": "Anime meme 17", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e06141603a431b19d9ae9af19badac64.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/56097d4a5ac7cd104d8c0d396db60c9c.png" + }, + { + "title": "Anime meme 18", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/114001c35080918434c4b982555d12f5.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/91cc168e4b2769ed530aa937be13378b.png" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd49", + "categoryName": "Laughing meme", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/423099070cc5c92aaec95c5d7c090307.png", + "list": [ + { + "title": "Laughing meme 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b4cb447b860354cec570325a11f71a8d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/01536a53628daacf6062406e99e31fbc.png" + }, + { + "title": "Laughing meme 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/0c2431340568d80e58aba6a07c41425f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/7936b296c7f9c7e76ca6d9e2e8c5af28.png" + }, + { + "title": "Laughing meme 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/92c8b2e7b99aaf7ee7c0e3f0948cd83b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/3f34fb2705784bbd15253d6cc5ed8df0.png" + }, + { + "title": "Laughing meme 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4c02f87b34ea2d082c1993a678d64d55.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/35baba3942bf6801f9ee7a7b753910d4.png" + }, + { + "title": "Laughing meme 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6691d33ad9c4f61805c12f2fff1ca912.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9edc9040260b40e4a56e702fadb0b8b5.png" + }, + { + "title": "Laughing meme 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1c7c99b1a63fb03a4ca4b68329ee814a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/bcb252e4c0518a4f65ccc83daea498d1.png" + }, + { + "title": "Laughing meme 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/23c8a8ba802b6e66f4141d2fcaf53d0d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/05cbb8d81900840e62789a617795942f.png" + }, + { + "title": "Laughing meme 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5474a770d53fba645d462e4377ea87c8.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/dad70f170d826bb985905dafa70a9291.png" + }, + { + "title": "Laughing meme 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f94aba6f1c0c8d93c2f6b1d928b27e12.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d94b52a7f791c078e2fad9abd0271e0b.png" + }, + { + "title": "Laughing meme 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/0807dda5995ecb102c45622a45501cce.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/70c9bd2a1cec4ec53f10679f992edc86.png" + }, + { + "title": "Laughing meme 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/0a7eaf35fa6aaaf62aa3f128fab8f04f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/c227353b580998e4681d094d3dec78c6.png" + }, + { + "title": "Laughing meme 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9d2ea6b802b104c5fe2868c257cbfe31.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b551c5055a4efe19ecf521afeb953c6f.png" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd50", + "categoryName": "Video effect", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/f30322429a15f99fafac651af6601a1e.png", + "list": [ + { + "title": "Video effect 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/be127a651be21c9d9543551427930e65.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/fb11cf86c9b4317187b2f8d20e813a52.png" + }, + { + "title": "Video effect 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/3fbba72e271c7e245f95be440ae89502.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/affec1cd3b1acf3534f2b1dd54b6e11f.png" + }, + { + "title": "Video effect 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b1ce43dedf92ecf79663f064198d05c8.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e4efb19584a4c6df9292df3d171d96ed.png" + }, + { + "title": "Video effect 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/65003244adcad85bc4f866435208d856.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/55dfa8097e3554f3ff921d4bae1c6360.png" + }, + { + "title": "Video effect 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/242ebe659af90fbb24b35a3de82c86d6.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ae2cfb2a5f2c291e5adc3ec1a6b86fd3.png" + }, + { + "title": "Video effect 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/cb8152a74bb4571725157bf40c8be677.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/776aace8ed0f04dd9957a6f3edd83925.png" + }, + { + "title": "Video effect 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/cbdc15cf69a945d0598dd8ac78325c5f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5f490886e570a860b89dfd7e26e4b7bc.png" + }, + { + "title": "Video effect 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/380b993ecadff751c64a0fb622de439a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d3f15a89bfcfa46acdad754ca8b2d736.png" + }, + { + "title": "Video effect 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f76c37498bb9fca60563d8b2a67653c6.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/be0edab4d77cb56d90db71b7a7d7fec8.png" + }, + { + "title": "Video effect 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/bc09237302c352a08446a7cb194d076d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f033ac2536cf4a0a341e2c00029afec6.png" + }, + { + "title": "Video effect 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a5f431d51547344c66ccdae1eebad93f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e5bb75fff945bac8b3c4070b831fb8bd.png" + }, + { + "title": "Video effect 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/789cdce4f59c71ef84c32cac4896f00e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/82295cecfe039e891067bba2b9012fe3.png" + }, + { + "title": "Video effect 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/fd865eaaaa48796b89e054b112be0774.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/66c604a7978a5390701e1aaadf5b26a7.png" + }, + { + "title": "Video effect 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/ae1f54af64ee5cc1e145b3096604b7b4.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/566156ee20f5dd4825eee2b29ebef57c.png" + }, + { + "title": "Video effect 15", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/382871ca218f1384a012850e610bd0f5.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d982297cd7148a9a8201a7e5db52e2dd.png" + }, + { + "title": "Video effect 16", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7e22a15803c6c18ba1020fb7a12c2ac9.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/176f813f19d83391cc3a94714b3c33e3.png" + }, + { + "title": "Video effect 17", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f3e9cec93ce50e08a61324017e53474b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/cb6fb89351ea96dad75fe012977e9a8d.png" + }, + { + "title": "Video effect 18", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e49c5b23079f42061fc13bc0ec2d96c2.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/609557bbd566aaee85787039d827a8e6.png" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd40", + "categoryName": "Church Bell", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/2b0b47180f68099bd4e3f20f2738a553.png", + "list": [ + { + "title": "Church Bell 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/264749515174f71fc385edc3c58f6dc6.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/bd3dbeb14c909851c9d55a0522ffeb02.png" + }, + { + "title": "Church Bell 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/43663417104a737de0ad75058b3d7dd7.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/00d1bf22be137338977a68288c1e39e3.png" + }, + { + "title": "Church Bell 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9905c68f7a6fac7d90d5075d12462f59.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f16b1bcf9bb12fc1773d7574d6e19198.png" + }, + { + "title": "Church Bell 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/8be3c1a2dbd6ba2b8baa1ea3cdf48590.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/6b2aa96e01e20f0fbfd9d3ad4b1d48da.png" + }, + { + "title": "Church Bell 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4b2cac435ff33013e4a8c6bb5be6408c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d7da9541816f730c7cbd5173e81072a4.png" + }, + { + "title": "Church Bell 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/debe07c42709ac424a015405ab9876c0.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/66aaded545b6bee1925c9736c7533ed4.png" + }, + { + "title": "Church Bell 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/849a9ab93006b3a6fbd462a38deca497.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/bf37e5bb7c3c17e6814082204cbe49a2.png" + }, + { + "title": "Church Bell 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/4e4459bd7dc3e50e4fcbd256a49f9e7d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/85d18158e371a44acffd83307945accc.png" + }, + { + "title": "Church Bell 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/57480a9f7da1e52f9aefe12dab66578e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/25a96e9ee7e5e2c1969caf290a7091df.png" + }, + { + "title": "Church Bell 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6176ef1954a68a705732987d08895bbc.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/09dad424c8103bb12dd2027ff035efb0.png" + }, + { + "title": "Church Bell 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/362939d0d5d7139a5c64b1cf6c52016a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/cb702949346a19dbc4af662a21cd9dc5.png" + }, + { + "title": "Church Bell 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/21dff1513a841b9761bc972e4bdd45af.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/631574c422eae411794dfc0963fdb7d5.png" + }, + { + "title": "Church Bell 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/0e83c42bd8d0e7c22dc35db0f6a4a13e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d8bf12721c58819f5429ec3a68f3cc21.png" + }, + { + "title": "Church Bell 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6cfb5ecbb898054a1964aedb6894d926.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/1ff22218aebe79a5294a8e86215062f7.png" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd41", + "categoryName": "Countdown", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/642d3042f0e7ae829988ee296750471a.png", + "list": [ + { + "title": "Countdown 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/8e96c19766b1caf938430a8e52669166.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9f958c3d3b9860146e686764ac8753bf.png" + }, + { + "title": "Countdown 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a34b3921bba77d4f73e04be79d943f5c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ea9c7eb239739a3062364a1d165f7e9a.png" + }, + { + "title": "Countdown 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/648afb631b170c87b26e01a994455755.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f350711bd7c0f4baafaf5e7fdaab9d15.png" + }, + { + "title": "Countdown 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/bfba411ca5c2bb25be7a2f45dc6560c9.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0186fc0e9badd77dc78db70ee05c3d25.png" + }, + { + "title": "Countdown 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f32b6e6ee555ad5c6d29de13aa8062e1.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/66609a323dbb9b10968349ff4991d14e.png" + }, + { + "title": "Countdown 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/bfdb88d6fddd25d7bbcb3ea2a8a8f93d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0bf572557b5c37bb2663e1e1ea3d7460.png" + }, + { + "title": "Countdown 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/74307f33d3a9132eab490aa5fe245b58.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/18169f46046cb22f46df892f1b477833.png" + }, + { + "title": "Countdown 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d1c880a46262ca737f937d1bd0c44b0d.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/4cacbebf5bbd02920e3fa2d65362602b.png" + }, + { + "title": "Countdown 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1b1661b9a9b7dc08a06d3005edd9a8f6.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e8ba21dcacea89733e6b6beb5118d4d9.png" + }, + { + "title": "Countdown 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/ed6c479005e741530a98285e4dd52f25.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/1cd88a6ee029f88c9474ae47bd5ab121.png" + }, + { + "title": "Countdown 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b155ee94a60c1c02e1423055b2f8868c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/af040a95410239510ef6625203a3d2fc.png" + }, + { + "title": "Countdown 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/be45cfdcfeb775190645512f8b70cd91.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ec33ecf4b90fffedabeeb14ab677f3cf.png" + }, + { + "title": "Countdown 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/38a8289a4ff2e85f3ce6ddce251290ae.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/1fdee0d8661cf9db1e6a16158e1e1852.png" + }, + { + "title": "Countdown 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e37a733ed877f58b5eecf80a9215aadb.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d6e289cbfa828447f45c10a3740c3b41.png" + }, + { + "title": "Countdown 15", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a30c962da761aeca851a464cc9303ef1.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/258a9bc9932fa59771faec37ace6a33f.png" + }, + { + "title": "Countdown 16", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/a9ea0774cd8c96b392a17258a2bbf705.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/a7cab5fb8188a2b8fd64d9bf59657d31.png" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd42", + "categoryName": "Cuckoo Clock", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/775a7b80f8844b2a2e5a90f2602fd38d.png", + "list": [ + { + "title": "Cuckoo Clock 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/2d72953021e40478613543328c3648c3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/a4997b34c82a13cf22489b7aaa0933ce.png" + }, + { + "title": "Cuckoo Clock 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e9cb9ee25a3516b755fb47f887366b11.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d7ceda54d1692aae5e25ef66443c1818.png" + }, + { + "title": "Cuckoo Clock 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d595ccd6c056e78b1eaee3b9019c890f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5c1e5ee795a2ee958e09447ecf6b8c6e.png" + }, + { + "title": "Cuckoo Clock 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/10995e06b7d24db64d3aba867ffaba2e.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/c6023c9fe9af4392fa513fe2708784f5.png" + }, + { + "title": "Cuckoo Clock 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/99fd437069f69508827b2dd41ba8dec0.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/fa25c9faa262645d4d850a10470a0afa.png" + }, + { + "title": "Cuckoo Clock 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/fbb86e27c1416edbc7a1226e4ab2268b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/c8ca42c2854fcad0a70bdb9e2237a8b7.png" + }, + { + "title": "Cuckoo Clock 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/147922945f4fa1cdb66c32abd83edf18.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/49f1f56e8d3e8e7897fc687e664c1bf7.png" + }, + { + "title": "Cuckoo Clock 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f741ff8869dd5e7ec39e5ad0b49c4ef7.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f9793aa7a75f9f434b4259ef5a4712f0.png" + }, + { + "title": "Cuckoo Clock 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/150335b877eb085d49b4a7b1a9ecadde.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9702bb79ea0e23a0b15a9e1dc9db0600.png" + }, + { + "title": "Cuckoo Clock 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1909035da699032a078fc26c6b67a9c3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e9cfc34fc92a17f31972ee70f21d995b.png" + }, + { + "title": "Cuckoo Clock 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/fd6f7a636fc65371decc3264aefa5879.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ae3c8718eae870a97b7c51ab656a83b9.png" + }, + { + "title": "Cuckoo Clock 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c4c297c6360a20c88c868294948491a3.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5645e427f83984febc9a2fd28339e7ea.png" + }, + { + "title": "Cuckoo Clock 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b7fa02d14bf1eb70f41c70cd735577a7.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/197e7e101cae3c78e15b57425beadda8.png" + }, + { + "title": "Cuckoo Clock 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/38c67d23b9fff4afd8e8af826185ce62.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/518ca81123ae1db5f5ffc8720c99f403.png" + }, + { + "title": "Cuckoo Clock 15", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c13c7b3a9a157213eb19dfea09a5e215.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/aacf5c3db406eb6a41ff620c614adfdb.png" + }, + { + "title": "Cuckoo Clock 16", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/357ebc6e99afbb7edb2b0b6abf28aec0.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9b82da41fedb4b98dd4c779264f283c4.png" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd43", + "categoryName": "Fireworks", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/f01dfac6dd9c7745ab80f274edaf7d34.png", + "list": [ + { + "title": "Fireworks 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/07bcb57943a460ff2a0b04eb093b0f3c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/b3943f642ac8b72992ffcf2b88bc6b7c.png" + }, + { + "title": "Fireworks 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b4bf8204e68f6b48377e6dcaf409bb72.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/8f416e70b65f2138b67d677fb4fa615f.png" + }, + { + "title": "Fireworks 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5c8cebcedd1c6ed92a42e8c9135be2fe.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/eb900055ce55cbbcdade84d7fc130a09.png" + }, + { + "title": "Fireworks 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/24b2a5b37cb8136b59880f627498c848.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/8959fe87989b632fc85b8d1670a54814.png" + }, + { + "title": "Fireworks 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/071ae6eacc2497bfdb87e6960255e618.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e63ac1c1ff794746fbc8c4078be1c910.png" + }, + { + "title": "Fireworks 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5a224b247ea78a0834dff359203f6802.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/6ff3515f2df9c687c14ee550a88aaacc.png" + }, + { + "title": "Fireworks 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e18a5052b273aad4a24baebacdb286e0.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f698e862d47dac00773f66006c925b9f.png" + }, + { + "title": "Fireworks 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/44944e44f9a3c1fe1995174054b688eb.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9a80eb9887a449f5ac1816bec6dcd86d.png" + }, + { + "title": "Fireworks 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1e42b4d2061e93f0afda40089fa5fdca.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/3702ce81c81d4a7c3c7add0b32bae7f2.png" + }, + { + "title": "Fireworks 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7c182881bba27610cdad7273559c4aae.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/77c476c59a372832171e0392883e4073.png" + }, + { + "title": "Fireworks 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/1fbb65c58fe5373133445f41d7a22c27.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/dfe6a09c757abe7c61feaddcc70bdd42.png" + }, + { + "title": "Fireworks 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c4d4e05d5b361119350487b0be3247c2.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/4a5504bfc38f9aa7f9e48526fd569df4.png" + }, + { + "title": "Fireworks 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9fec8e8f803ccc8ae2d142d759ac6968.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/bb64c6f4b11f53feafe12503da099c04.png" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd39", + "categoryName": "Champagne", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/23948c0777b58ea43ae231c3adb830c6.png", + "list": [ + { + "title": "Champagne 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/e1cbcd284222ce6099da03810cc1c6b0.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/0cab054498349416ba07520ddb5d6ca8.png" + }, + { + "title": "Champagne 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/01082a26035998ab2a833d775e48af71.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/f27a32a5a84b4d7bbdee2735bb54ab8b.png" + }, + { + "title": "Champagne 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/3866cb7d6614d2139e78a19b234d7b14.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/8597fa7bce4191a8c3282b67632cae44.png" + }, + { + "title": "Champagne 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c26a6128efc5c4187fbd81e1acf0ab08.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/ae7b094815cd0b714a97c56e0e5c4dad.png" + }, + { + "title": "Champagne 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5657320f06928bc20961043becc95e18.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/3c59aebc7c52aa99d8814411c8c7cc68.png" + }, + { + "title": "Champagne 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/ff80172109053f601b406d552178c3ff.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e689358c959b4cd68310070d0bfc5ec5.png" + }, + { + "title": "Champagne 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/cc8338bc8f1a6b5d20f92c59f7a26bb0.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/96aaa4ce44bf3ad7b73a606f1f9e19ad.png" + }, + { + "title": "Champagne 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/bebfc0f8702a4dd30d78a7907af7b93a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/579a09d3b30518b86f7dd67f0cbc05c0.png" + }, + { + "title": "Champagne 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/02cfaa37687cd6d759aed04a03028742.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9d8514f45a8e8ca845fbb16704cfb436.png" + }, + { + "title": "Champagne 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/100eb5628b04d4689843daa8d966ff60.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/400b4f4877f7216d549ec90ee137665b.png" + }, + { + "title": "Champagne 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/bbd5249f29ac098a21617918683c03cf.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/65a46b2626b4f28244ac3c654c89abb7.png" + }, + { + "title": "Champagne 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5518b7be45e8566d65ce10848b919284.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/931633fcd7fc1d817a4dd0f9d1873f1b.png" + }, + { + "title": "Champagne 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/7ef9b5fa25e5254a8fd8920f35255457.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/87b431000db60cb3c6aeeed1bb5487d8.png" + }, + { + "title": "Champagne 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/baad4340a6c42843d12556996100f05c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/fe2daef6052258c1b95d45aa649235d9.png" + }, + { + "title": "Champagne 15", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/89140a8c836648822b52ccd22de8df75.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/10b245d728e59cdf88b73dbb35997bc7.png" + }, + { + "title": "Champagne 16", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c0a788938294d31469f1e929960f5abd.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/814007103cf43c6a1034f2ff72415659.png" + } + ] + }, + { + "categoryId": "634e0d283a35295ff1e9d782", + "categoryName": "Halloween", + "categoryUrl": "https://resource-sg-public.lux-ad.com/prank/346541dfd63bb11359fecb4913bbbf13.png", + "list": [ + { + "title": "Halloween 1", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/addaa62eb812fc77b8c9c62f4a10c87c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5eab6b3a9c261f0248c63b3b96dcd7f4.png" + }, + { + "title": "Halloween 2", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/8dd4ab99f8fa228c05ddd8c36a1fb8ed.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/10de3be681254f26de6351c2ed683ea9.png" + }, + { + "title": "Halloween 3", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/54f1373123ee2d3c6eafcfd0ee1534fb.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/6a500627588ec7c8133cd2e8737a29ef.png" + }, + { + "title": "Halloween 4", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d9639d6b964952898e925057737f179b.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/80c18bc4d370f912d4ba7e99ac389df7.png" + }, + { + "title": "Halloween 5", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/d1fb6ceaa60e105425a016d809f72fcc.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/e3a9a9aed7c1391218e743a61bee052a.png" + }, + { + "title": "Halloween 6", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/bcbc8fbaf653b3f8388ff25211015a18.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/5ac0c7f0469c99417fd12ae7e3fa07af.png" + }, + { + "title": "Halloween 7", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/2adbaf76aad03b5b59e338e7c547e65c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/df60f70ad97c86c77c828605dc106555.png" + }, + { + "title": "Halloween 8", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/8885f6857e6e3aebc8cc0b9aedbe2e88.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/82153ac03f55b18e9d3a57650b86702d.png" + }, + { + "title": "Halloween 9", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/5548a044a4b88dde27d7edbe0fd45a28.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/d430f6bdf723e5c7dfe50f4567aefb88.png" + }, + { + "title": "Halloween 10", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/99a1127659c975822d7f0eff052c54b8.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/2b96582702253e5d88230621d9806ffd.png" + }, + { + "title": "Halloween 11", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/b1f2bd4a4bab0c825367680b8f14580c.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/22eea4ddc2396a8459f8a82cc2fa41a7.png" + }, + { + "title": "Halloween 12", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/00b800fbf34a148d2906aa01306e632f.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/02abab22836fea046ee1b121843aa1c4.png" + }, + { + "title": "Halloween 13", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/407c2a04c6ba9eabffb2d48812676075.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/000d1d7c0026ddb269192cc8a3ed8a36.png" + }, + { + "title": "Halloween 14", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/c0545680e4d81d2040f8ab5be1036221.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/c4d236b50c018013b856d0d6f813f431.png" + }, + { + "title": "Halloween 15", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/40901854f4cf27e3f95e1c5e681d4e94.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/cfc812c4fa5879dc044dbf57848ec829.png" + }, + { + "title": "Halloween 16", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/6acca311c1d0e69f0243a60ee966c763.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/9733f998ea9d592c09cf23dbc9da4218.png" + }, + { + "title": "Halloween 17", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/09f13252d1db5a6b5294527c275fc9a7.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/32d4680f4d064475e6ca4424829d9fd6.png" + }, + { + "title": "Halloween 18", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/9b80fc87cab236dccfdeaabe4770eb50.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/92ab558d70e01ff40d3b12ff27acc6b1.png" + }, + { + "title": "Halloween 19", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/f3dfe8797d1a13a88f9544d3fdc54425.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/300e9423f50ff7b81b7de33d847733d6.png" + }, + { + "title": "Halloween 20", + "mp3Url": "https://resource-sg-public.lux-ad.com/prank/44b966562ddc9d0a5ed2604bf8eac39a.mp3", + "preUrl": "https://resource-sg-public.lux-ad.com/prank/8e3f389ba05c4785961e9abd8a6809bf.png" + } + ] + } +] diff --git a/app/src/main/assets/privacy.html b/app/src/main/assets/privacy.html new file mode 100644 index 0000000..8138fa8 --- /dev/null +++ b/app/src/main/assets/privacy.html @@ -0,0 +1,121 @@ + + + + + + Privacy Policy + + + +

Privacy Policy

+

Date: June 26, 2024

+ +

We provide this Privacy Policy to help you understand how we collect, use, and disclose + information, including what you may provide to us or that we obtain from our products and + services. We treat your privacy very seriously. Your privacy is important to us.

+ +

Information Collection and Use

+

For a better experience, while using our Service, we may require you to provide us with certain + personally identifiable information, such as users' name, address, location, pictures, etc. The + information that we request will be retained on your device and is not collected or retained by + us in any way and used as described in this privacy policy.

+

The app does use third-party services that may collect information used to identify you.

+

Please refer to the privacy policy of the third-party service provider used by the + application:

+ + +

Log Data

+

We want to inform you that whenever you use our Service, in case of an error in the app, we + collect data and information (through third-party products) on your phone called Log Data. This + Log Data may include information such as your device Internet Protocol (“IP”) address, device + name, operating system version, the configuration of the app when utilizing our Service, the + time and date of your use of the Service, and other statistics.

+ +

Cookies

+

Cookies are files with a small amount of data that are commonly used as anonymous unique + identifiers. These are sent to your browser from the websites that you visit and are stored on + your device's internal memory.

+

This Service does not use these “cookies” explicitly. However, the app may use third-party code + and libraries that use “cookies” to collect information and improve their services. You have the + option to either accept or refuse these cookies and know when a cookie is being sent to your + device. If you choose to refuse our cookies, you may not be able to use some portions of this + Service.

+ +

Service Providers

+

We may employ third-party companies and individuals due to the following reasons:

+ +

We want to inform users of this Service that these third parties have access to their Personal + Information. The reason is to perform the tasks assigned to them on our behalf. However, they + are obligated not to disclose or use the information for any other purpose.

+ +

Security

+

We value your trust in providing us your Personal Information, thus we are striving to use + commercially acceptable means of protecting it. But remember that no method of transmission over + the internet, or method of electronic storage is 100% secure and reliable, and we cannot + guarantee its absolute security.

+ +

Links to Other Sites

+

This Service may contain links to other sites. If you click on a third-party link, you will be + directed to that site. Note that these external sites are not operated by us. Therefore, we + strongly advise you to review the Privacy Policy of these websites. We have no control over and + assume no responsibility for the content, privacy policies, or practices of any third-party + sites or services.

+ +

Children’s Privacy

+

These Services do not address anyone under the age of 13. We do not knowingly collect personally + identifiable information from children under 13 years of age. In the case we discover that a + child under 13 has provided us with personal information, we will immediately delete this from + our servers. If you are a parent or guardian and you are aware that your child has provided us + with personal information, please contact us so that we will be able to take the necessary + actions.

+ +

Changes to This Privacy Policy

+

We may update our Privacy Policy from time to time. Thus, you are advised to review this page + periodically for any changes. We will notify you of any changes by posting the new Privacy + Policy on this page.

+ +

Privacy Questions

+

We may update the Privacy Policy from time to time. When we change the policy in a material way, + a notice will be posted on our website along with the updated Privacy Policy.

+

If you have any questions or concerns about our Privacy Policy or data processing, please contact + us: saleemjeeta2@gmail.com.

+ + diff --git a/app/src/main/java/com/fun/airhornprank/PrankSkin.java b/app/src/main/java/com/fun/airhornprank/PrankSkin.java new file mode 100644 index 0000000..d04354c --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/PrankSkin.java @@ -0,0 +1,81 @@ +package com.fun.airhornprank; + +import android.app.Application; +import android.content.SharedPreferences; +import android.util.Log; + + +import com.fun.airhornprank.data.MyDataBase; +import com.fun.airhornprank.data.Mydata; +import com.fun.airhornprank.tool.Mytools; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + + +public class PrankSkin extends Application { + public static PrankSkin app; + public static final String DB_Name = "prank_database"; + public static final String Table_Name = "prank_table"; + public static final int DB_Version = 1; + private List allData = new ArrayList<>(); + private SharedPreferences sp; + private static boolean isinsert; + private static boolean iscreate; + private SharedPreferences.Editor editor; + private static final String PREFS_NAME = "MyPrefs"; + private static final String KEY_IS_INSERTED = "isinserted"; + private static final String KEY_IS_CREATE = "iscreate"; + private static List mydataList = new ArrayList<>(); + + @Override + public void onCreate() { + super.onCreate(); + app = this; + + initData(); + initCreate(); + } + + private void initCreate() { + Mytools.runIO(new Runnable() { + @Override + public void run() { + List allData = MyDataBase.getInstance().likeDAO().getAll(); + mydataList.clear(); + int[] indices = {0, 456, 111, 222, 333, 444, 555, 345, 234}; + + for (int index : indices) { + if (index < allData.size()) { + Mydata data = allData.get(index); + data.setRank(true); + MyDataBase.getInstance().likeDAO().update(data); + mydataList.add(data); + } + } + + } + }); + } + + private void initData() { + allData = Mytools.getList("prank.json"); + sp = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); + isinsert = sp.getBoolean(KEY_IS_INSERTED, false); + iscreate = sp.getBoolean(KEY_IS_CREATE, false); + if (!isinsert) { + Mytools.runIO(new Runnable() { + @Override + public void run() { + MyDataBase.getInstance().likeDAO().insertAll(allData); + editor = sp.edit(); + editor.putBoolean(KEY_IS_INSERTED, true); + editor.commit(); + } + }); + } + + } + +} diff --git a/app/src/main/java/com/fun/airhornprank/activity/ListActivity.java b/app/src/main/java/com/fun/airhornprank/activity/ListActivity.java new file mode 100644 index 0000000..2cf6407 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/activity/ListActivity.java @@ -0,0 +1,83 @@ +package com.fun.airhornprank.activity; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; +import androidx.recyclerview.widget.GridLayoutManager; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; + +import com.fun.airhornprank.R; +import com.fun.airhornprank.adapter.ListAdapter; +import com.fun.airhornprank.data.MyDataBase; +import com.fun.airhornprank.data.Mydata; +import com.fun.airhornprank.databinding.ActivityListBinding; +import com.fun.airhornprank.tool.Mytools; +import com.fun.airhornprank.tool.StaticValue; + +import java.util.ArrayList; +import java.util.List; + +public class ListActivity extends AppCompatActivity { + ActivityListBinding binding; + private List allData = new ArrayList<>(); + private ListAdapter thumAdapter; + private int color; + + @SuppressLint("MissingInflatedId") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityListBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + EdgeToEdge.enable(this); + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.activity_list), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + + initData(); + + binding.listBack.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + + } + + private void initData() { + Intent intent = getIntent(); + color = intent.getIntExtra(StaticValue.KEY_Color, 0); + String name = intent.getStringExtra(StaticValue.KEY_CategoryName); + binding.preListTitle.setText(name); + Mytools.runIO(new Runnable() { + @Override + public void run() { + allData = MyDataBase.getInstance().likeDAO().getlist(name); + if (!allData.isEmpty()) { + runOnUiThread(new Runnable() { + @Override + public void run() { + initView(allData); + } + }); + } + } + }); + } + + private void initView(List allData) { + thumAdapter = new ListAdapter(this, allData, color); + binding.preListRv.setAdapter(thumAdapter); + binding.preListRv.setLayoutManager(new GridLayoutManager(this, 3)); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/airhornprank/activity/MainActivity.java b/app/src/main/java/com/fun/airhornprank/activity/MainActivity.java new file mode 100644 index 0000000..9b10cc2 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/activity/MainActivity.java @@ -0,0 +1,81 @@ +package com.fun.airhornprank.activity; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; +import androidx.viewpager.widget.ViewPager; + +import android.os.Bundle; + +import com.fun.airhornprank.R; +import com.fun.airhornprank.adapter.PageAdapter; +import com.fun.airhornprank.databinding.ActivityMainBinding; +import com.google.android.material.tabs.TabLayout; + +public class MainActivity extends AppCompatActivity { + ActivityMainBinding binding; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityMainBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + EdgeToEdge.enable(this); + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.activity_main), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + + initView(); + + setTab(0); + } + + private void initView() { + + binding.mainPager.setAdapter(new PageAdapter(getSupportFragmentManager())); + binding.mainTab.setupWithViewPager(binding.mainPager); + binding.mainPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + setTab(position); + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); + + } + + private void setTab(int position) { + for (int i = 0; i < binding.mainTab.getTabCount(); i++) { + final TabLayout.Tab tab = binding.mainTab.getTabAt(i); + if (tab != null) { + switch (i) { + case 0 -> + tab.setCustomView(position == 0 ? R.layout.main_check_cons : R.layout.main_uncheck_cons); + case 1 -> + tab.setCustomView(position == 1 ? R.layout.custom_check_cons : R.layout.custom_uncheck_cons); + case 2 -> + tab.setCustomView(position == 2 ? R.layout.rank_check_cons : R.layout.rank_uncheck_cons); + case 3 -> + tab.setCustomView(position == 3 ? R.layout.like_check_cons : R.layout.like_uncheck_cons); + default -> { + } + } + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/airhornprank/activity/PreViewActivity.java b/app/src/main/java/com/fun/airhornprank/activity/PreViewActivity.java new file mode 100644 index 0000000..8c8976d --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/activity/PreViewActivity.java @@ -0,0 +1,289 @@ +package com.fun.airhornprank.activity; + +import androidx.activity.EdgeToEdge; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.res.AssetFileDescriptor; +import android.content.res.AssetManager; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; +import android.media.AudioAttributes; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.net.Uri; +import android.os.Bundle; +import android.provider.MediaStore; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.SeekBar; +import android.widget.Toast; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.target.CustomTarget; +import com.bumptech.glide.request.transition.Transition; +import com.fun.airhornprank.R; +import com.fun.airhornprank.data.MyDataBase; +import com.fun.airhornprank.data.Mydata; +import com.fun.airhornprank.databinding.ActivityPreViewBinding; +import com.fun.airhornprank.tool.Mytools; +import com.fun.airhornprank.tool.SeekBarBroadCast; +import com.fun.airhornprank.tool.StaticValue; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.List; + +public class PreViewActivity extends AppCompatActivity { + ActivityPreViewBinding binding; + private Mydata data = new Mydata(); + private String title; + private boolean islike = false; + private boolean isloop = false; + private boolean isplayer = false; + private MediaPlayer mediaPlayer; + private AudioManager audioManager; + private SeekBarBroadCast seekBarBroadCast; + private IntentFilter filter = new IntentFilter(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityPreViewBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + EdgeToEdge.enable(this); + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.activity_preview), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + + hidemenu(); + initData(); + initEvent(); + + audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); + binding.seekbar.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)); + binding.seekbar.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)); + if (audioManager.getStreamVolume(AudioManager.STREAM_MUSIC) == 0) { + binding.volumeleft.setBackgroundResource(R.drawable.icon_null); + } else { + binding.volumeleft.setBackgroundResource(R.drawable.icon_left); + } + seekBarBroadCast = new SeekBarBroadCast(audioManager, binding.seekbar); + + filter.addAction("android.media.VOLUME_CHANGED_ACTION"); + registerReceiver(seekBarBroadCast, filter); + } + + private void initEvent() { + binding.preBack.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + + binding.preImageLoop.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + checkloop(); + } + }); + + binding.preLike.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + checkLike(); + } + }); + + binding.prePlay.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + try { + playprank(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + }); + + binding.seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0); + if (audioManager.getStreamVolume(AudioManager.STREAM_MUSIC) == 0) { + binding.volumeleft.setBackgroundResource(R.drawable.icon_null); + } else { + binding.volumeleft.setBackgroundResource(R.drawable.icon_left); + } + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + + } + }); + } + + private void playprank() throws IOException { + if (!isplayer) { + starprank(); + } else { + stopprank(); + } + } + + private void stopprank() { + isplayer = false; + binding.prePlay.setBackgroundResource(R.drawable.pre_play); + if (mediaPlayer != null) { + mediaPlayer.release(); + mediaPlayer = null; + } + } + + private void starprank() throws IOException { + + isplayer = true; + binding.prePlay.setBackgroundResource(R.drawable.pre_pause); + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioAttributes( + new AudioAttributes.Builder() + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .setUsage(AudioAttributes.USAGE_MEDIA) + .build()); + mediaPlayer.setDataSource(data.getMp3Url()); + mediaPlayer.setOnPreparedListener(mp -> { + if (isloop) { + mediaPlayer.setLooping(true); + } + mediaPlayer.start(); + }); + mediaPlayer.setOnCompletionListener(mp -> { + if (isloop) { + binding.prePlay.setBackgroundResource(R.drawable.pre_pause); + } else { + binding.prePlay.setBackgroundResource(R.drawable.pre_play); + isplayer = false; + } + }); + mediaPlayer.prepareAsync(); + } + + private void checkLike() { + if (!islike) { + islike = true; + data.setLike(true); + binding.preLike.setBackgroundResource(R.drawable.icon_like); + Mytools.runIO(new Runnable() { + @Override + public void run() { + MyDataBase.getInstance().likeDAO().update(data); + } + }); + + } else { + islike = false; + data.setLike(false); + binding.preLike.setBackgroundResource(R.drawable.icon_unlike); + Mytools.runIO(new Runnable() { + @Override + public void run() { + MyDataBase.getInstance().likeDAO().update(data); + } + }); + } + } + + private void checkloop() { + if (!isloop) { + isloop = true; + binding.preImageLoop.setBackgroundResource(R.drawable.icon_loop); + if (mediaPlayer != null) { + mediaPlayer.setLooping(true); + + } + } else { + isloop = false; + binding.preImageLoop.setBackgroundResource(R.drawable.icon_unloop); + if (mediaPlayer != null) { + mediaPlayer.setLooping(false); + + } + } + } + + private void initData() { + Intent intent = getIntent(); + title = intent.getStringExtra(StaticValue.KEY_TITLE); + binding.preText.setText(title); + Mytools.runIO(new Runnable() { + @Override + public void run() { + List allData = MyDataBase.getInstance().likeDAO().getliketitle(title); + if (!allData.isEmpty()) { + data = allData.get(0); + islike = data.getLike(); + if (islike) { + binding.preLike.setBackgroundResource(R.drawable.icon_like); + } else { + binding.preLike.setBackgroundResource(R.drawable.icon_unlike); + } + if (data.getPreUrl().equals("custom_url")) { + binding.preImage.setImageResource(R.mipmap.save_image); + } else { + Glide.with(PreViewActivity.this) + .asBitmap() + .load(data.getPreUrl()) + .placeholder(R.mipmap.logo) + .into(new CustomTarget() { + @Override + public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) { + binding.preImage.setImageBitmap(resource); + showmenu(); + } + + @Override + public void onLoadCleared(@Nullable Drawable placeholder) { + + } + }); + } + } + } + }); + } + + private void hidemenu() { + + } + + private void showmenu() { + + } + + @Override + protected void onStop() { + super.onStop(); + stopprank(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/airhornprank/activity/RecordActivity.java b/app/src/main/java/com/fun/airhornprank/activity/RecordActivity.java new file mode 100644 index 0000000..2c30751 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/activity/RecordActivity.java @@ -0,0 +1,130 @@ +package com.fun.airhornprank.activity; + +import androidx.activity.EdgeToEdge; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +import android.Manifest; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.annotation.SuppressLint; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.os.CountDownTimer; +import android.os.Handler; +import android.os.SystemClock; +import android.util.Log; +import android.view.View; + +import com.fun.airhornprank.R; +import com.fun.airhornprank.databinding.ActivityRecordBinding; +import com.fun.airhornprank.tool.AudioRecorder; +import com.fun.airhornprank.tool.StaticValue; + +public class RecordActivity extends AppCompatActivity { + ActivityRecordBinding binding; + private long startTime; + private long elapsedTime; + private Handler handler = new Handler(); + private Runnable runnable; + private boolean isCreate = false; + + private AudioRecorder audioRecorder; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityRecordBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + audioRecorder = new AudioRecorder(this); + + EdgeToEdge.enable(this); + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.activity_record), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + binding.recordTime.setText(R.string.time_text); + initEvent(); + + } + + private void initEvent() { + binding.recordBack.setOnClickListener(v -> finish()); + binding.view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + createSound(); + } + }); + } + + + private void createSound() { + binding.view.addAnimatorListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationCancel(Animator animation) { + super.onAnimationCancel(animation); + + if (audioRecorder != null) { + audioRecorder.stopRecording(); + } + } + + + @Override + public void onAnimationStart(Animator animation) { + super.onAnimationStart(animation); + if (audioRecorder != null) { + audioRecorder.startRecording(); + } + } + + }); + + if (!isCreate) { + binding.view.playAnimation(); + binding.view.loop(true); + isCreate = true; + runnable = new Runnable() { + @SuppressLint("DefaultLocale") + @Override + public void run() { + long currentTime = SystemClock.elapsedRealtime(); + elapsedTime = currentTime - startTime; + int milliseconds = (int) (elapsedTime % 1000) / 10; + int seconds = (int) (elapsedTime / 1000) % 60; + int minutes = (int) (elapsedTime / (1000 * 60)) % 60; + binding.recordTime.setText(String.format("%d : %02d : %02d", minutes, seconds, milliseconds)); + handler.postDelayed(this, 10); + } + }; + startTime = SystemClock.elapsedRealtime(); + handler.post(runnable); + } else { + isCreate = false; + binding.view.cancelAnimation(); + handler.removeCallbacks(runnable); + Intent intent = new Intent(RecordActivity.this, SaveActivity.class); + intent.putExtra(StaticValue.KEY_Time, elapsedTime); + intent.putExtra(StaticValue.KEY_Path, audioRecorder.getTempFileName()); + intent.putExtra(StaticValue.KEY_import, 1); + startActivity(intent); + finish(); + } + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + handler.removeCallbacks(runnable); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/airhornprank/activity/SaveActivity.java b/app/src/main/java/com/fun/airhornprank/activity/SaveActivity.java new file mode 100644 index 0000000..d2b2eb1 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/activity/SaveActivity.java @@ -0,0 +1,212 @@ +package com.fun.airhornprank.activity; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +import android.annotation.SuppressLint; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.media.AudioAttributes; +import android.media.MediaPlayer; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.os.SystemClock; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.Toast; + +import com.fun.airhornprank.R; +import com.fun.airhornprank.data.MyDataBase; +import com.fun.airhornprank.data.Mydata; +import com.fun.airhornprank.databinding.ActivitySaveBinding; +import com.fun.airhornprank.tool.Mytools; +import com.fun.airhornprank.tool.StaticValue; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +public class SaveActivity extends AppCompatActivity { + private ActivitySaveBinding binding; + private String path; + private boolean isPlayerActive = false; + private MediaPlayer mediaPlayer; + private Handler handler = new Handler(); + private Runnable timeUpdater; + private long startTime; + private long elapsedTime; + private long audioDuration; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivitySaveBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + EdgeToEdge.enable(this); + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.activity_save), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + + initData(); + initEvent(); + + + } + + private void togglePrank() throws IOException { + if (!isPlayerActive) { + startPrank(); + } else { + stopPrank(); + } + } + + private void stopPrank() { + isPlayerActive = false; + handler.removeCallbacks(timeUpdater); + binding.savePlay.setBackgroundResource(R.drawable.pre_play); + if (mediaPlayer != null) { + mediaPlayer.release(); + mediaPlayer = null; + } + } + + private void startPrank() throws IOException { + isPlayerActive = true; + binding.savePlay.setBackgroundResource(R.drawable.pre_pause); + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioAttributes( + new AudioAttributes.Builder() + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .setUsage(AudioAttributes.USAGE_MEDIA) + .build()); + mediaPlayer.setDataSource(path); + mediaPlayer.setOnPreparedListener(mp -> { + mediaPlayer.start(); + startTimer(); + }); + mediaPlayer.setOnCompletionListener(mp -> { + handler.removeCallbacks(timeUpdater); + binding.savePlay.setBackgroundResource(R.drawable.pre_play); + isPlayerActive = false; + }); + mediaPlayer.prepareAsync(); + } + + private void startTimer() { + timeUpdater = new Runnable() { + @SuppressLint("DefaultLocale") + @Override + public void run() { + long currentTime = SystemClock.elapsedRealtime(); + elapsedTime = currentTime - startTime; + int milliseconds = (int) (elapsedTime % 1000) / 10; + int seconds = (int) (elapsedTime / 1000) % 60; + int minutes = (int) (elapsedTime / (1000 * 60)) % 60; + binding.saveTime.setText(String.format("%d : %02d : %02d", minutes, seconds, milliseconds)); + handler.postDelayed(this, 10); + } + }; + startTime = SystemClock.elapsedRealtime(); + handler.post(timeUpdater); + } + + private void initEvent() { + binding.saveBack.setOnClickListener(v -> finish()); + binding.savePlay.setOnClickListener(v -> { + try { + togglePrank(); + } catch (IOException e) { + Log.e("SaveActivity", "Error toggling prank", e); + } + }); + binding.save.setOnClickListener(v -> { + String name = binding.saveEdit.getText().toString().trim(); + if (!TextUtils.isEmpty(name)) { + saveData(name); + Toast.makeText(SaveActivity.this, getString(R.string.save_tips), Toast.LENGTH_SHORT).show(); + stopPrank(); + finish(); + } else { + Toast.makeText(SaveActivity.this, getString(R.string.save_tip), Toast.LENGTH_SHORT).show(); + } + }); + } + + private void saveData(String name) { + File cacheDir = getCacheDir(); + File sourceFile = new File(path); + File destinationFile = new File(cacheDir, name + ".mp3"); + + if (sourceFile.renameTo(destinationFile)) { + Mydata mydata = new Mydata(); + mydata.setCategoryname("custom"); + mydata.setLike(false); + mydata.setTitle(name); + mydata.setMp3Url(destinationFile.getAbsolutePath()); + mydata.setPreUrl("custom_url"); + mydata.setCategoryUrl("custom_url"); + mydata.setTime(audioDuration); + + Mytools.runIO(() -> MyDataBase.getInstance().likeDAO().insertCustom(mydata)); + } else { + Log.e("SaveActivity", "Failed to rename file"); + } + } + + + private String readFileFromUri(Context context, Uri uri) { + ContentResolver contentResolver = context.getContentResolver(); + try (InputStream inputStream = contentResolver.openInputStream(uri); + FileOutputStream outputStream = new FileOutputStream(new File(getCacheDir(), "temp_audio_file.mp3"))) { + + if (inputStream == null) { + Log.e("SaveActivity", "Input stream is null"); + return null; + } + + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + + return new File(getCacheDir(), "temp_audio_file.mp3").getAbsolutePath(); + } catch (IOException e) { + Log.e("SaveActivity", "Error reading file from URI", e); + return null; + } + } + + private void initData() { + Intent intent = getIntent(); + audioDuration = intent.getLongExtra(StaticValue.KEY_Time, 0); + int importFlag = intent.getIntExtra(StaticValue.KEY_import, 0); + + if (importFlag == 1) { + path = intent.getStringExtra(StaticValue.KEY_Path); + } else { + String uriPath = intent.getStringExtra(StaticValue.KEY_Path); + Uri uri = Uri.parse(uriPath); + path = readFileFromUri(this, uri); + } + } + + @Override + protected void onStop() { + super.onStop(); + stopPrank(); + } +} diff --git a/app/src/main/java/com/fun/airhornprank/activity/SettingActivity.java b/app/src/main/java/com/fun/airhornprank/activity/SettingActivity.java new file mode 100644 index 0000000..992d827 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/activity/SettingActivity.java @@ -0,0 +1,74 @@ +package com.fun.airhornprank.activity; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.view.View; + +import com.fun.airhornprank.R; +import com.fun.airhornprank.databinding.ActivitySettingBinding; + +public class SettingActivity extends AppCompatActivity { + ActivitySettingBinding binding; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivitySettingBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + EdgeToEdge.enable(this); + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.activity_setting), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + + initEvent(); + + } + + private void initEvent() { + binding.settingBack.setOnClickListener(v -> finish()); + binding.versionText.setText("1.0.0"); + + binding.settingPrivacy.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + Intent intent = new Intent(SettingActivity.this, WebActivity.class); + startActivity(intent); + } + }); + + + binding.settingRate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String url = "https://play.google.com/store/apps/details?id=com.fun.airhornprank"; + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse(url)); + startActivity(intent); + } + }); + + binding.settingShare.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent share = new Intent(Intent.ACTION_SEND); + share.setType("text/plain"); + share.putExtra(Intent.EXTRA_SUBJECT, R.string.app_name); + String text = getString(R.string.share_title); + text = text + "\n https://play.google.com/store/apps/details?id=" + "com.fun.airhornprank"; + share.putExtra(Intent.EXTRA_TEXT, text); + startActivity(Intent.createChooser(share, "choose one")); + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/airhornprank/activity/SplashActivity.java b/app/src/main/java/com/fun/airhornprank/activity/SplashActivity.java new file mode 100644 index 0000000..dfdd318 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/activity/SplashActivity.java @@ -0,0 +1,61 @@ +package com.fun.airhornprank.activity; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +import android.content.Intent; +import android.os.Bundle; +import android.os.CountDownTimer; + +import com.fun.airhornprank.R; +import com.fun.airhornprank.databinding.ActivitySplashBinding; + +public class SplashActivity extends AppCompatActivity { + ActivitySplashBinding binding; + private CountDownTimer countDownTimer; + private float i = 0; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivitySplashBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + EdgeToEdge.enable(this); + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.activity_splash), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + + countDownTimer = new CountDownTimer(2100, 100) { + @Override + public void onTick(long l) { + i++; + binding.splashPg.setProgress(i); +// if (!isAlreadyShow) { +// showAd(false); +// } + } + + @Override + public void onFinish() { +// if (!isAlreadyShow) { +// showAd(true); +// } + starMainactivity(); + } + }; + + countDownTimer.start(); + } + + private void starMainactivity() { + Intent intent = new Intent(SplashActivity.this, MainActivity.class); + startActivity(intent); + finish(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/airhornprank/activity/WebActivity.java b/app/src/main/java/com/fun/airhornprank/activity/WebActivity.java new file mode 100644 index 0000000..af2089d --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/activity/WebActivity.java @@ -0,0 +1,35 @@ +package com.fun.airhornprank.activity; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +import android.annotation.SuppressLint; +import android.os.Bundle; +import android.webkit.WebView; +import android.webkit.WebViewClient; + +import com.fun.airhornprank.R; + +public class WebActivity extends AppCompatActivity { + @SuppressLint({"MissingInflatedId", "SetJavaScriptEnabled"}) + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_web); + EdgeToEdge.enable(this); + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.activity_web), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + + WebView webView = findViewById(R.id.web); + webView.getSettings().setJavaScriptEnabled(true); + webView.setWebViewClient(new WebViewClient()); + webView.loadUrl("file:///android_asset/privacy.html"); + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/airhornprank/adapter/CustomAdapter.java b/app/src/main/java/com/fun/airhornprank/adapter/CustomAdapter.java new file mode 100644 index 0000000..59c2bf8 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/adapter/CustomAdapter.java @@ -0,0 +1,200 @@ +package com.fun.airhornprank.adapter; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.fun.airhornprank.R; +import com.fun.airhornprank.activity.PreViewActivity; +import com.fun.airhornprank.data.MyDataBase; +import com.fun.airhornprank.data.Mydata; +import com.fun.airhornprank.databinding.CustomListBinding; +import com.fun.airhornprank.tool.Mytools; +import com.fun.airhornprank.tool.StaticValue; + +import java.util.List; + +public class CustomAdapter extends RecyclerView.Adapter { + private Activity mactivity; + private List mlist; + private boolean islike = false; + private boolean show; + + public CustomAdapter(Activity activity) { + mactivity = activity; + + } + + public void SetData(List list) { + mlist = list; + } + + public void showDelete(boolean isShow) { + show = isShow; + notifyDataSetChanged(); + } + + @NonNull + @Override + public CustomVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + CustomListBinding binding = CustomListBinding.inflate(mactivity.getLayoutInflater(), parent, false); + return new CustomVH(binding); + } + + @SuppressLint("DefaultLocale") + @Override + public void onBindViewHolder(@NonNull CustomVH holder, int position) { + Mydata customdata = mlist.get(position); + boolean like = customdata.getLike(); + if (like) { + holder.getLike().setBackgroundResource(R.drawable.icon_like); + } else { + holder.getLike().setBackgroundResource(R.drawable.icon_custom_unlike); + } + int milliseconds = (int) (customdata.getTime() % 1000) / 10; + int seconds = (int) (customdata.getTime() / 1000) % 60; + int minutes = (int) (customdata.getTime() / (1000 * 60)) % 60; + holder.getTime().setText(String.format("%d : %02d : %02d", minutes, seconds, milliseconds)); + + if (show) { + holder.getDelete().setVisibility(View.VISIBLE); + } else { + holder.getDelete().setVisibility(View.GONE); + } + holder.getDelete().setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new AlertDialog.Builder(mactivity) + .setTitle("Tips") + .setMessage("Are you sure you want to delete" + " " + customdata.getTitle()) + .setPositiveButton("Sure", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Mytools.runIO(new Runnable() { + @Override + public void run() { + MyDataBase.getInstance().likeDAO().deleteCutsom(customdata.id); + } + }); + } + }) + .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + } + }) + .show(); + + } + }); + + holder.getLike().setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!islike) { + islike = true; + customdata.setLike(true); + holder.getLike().setBackgroundResource(R.drawable.icon_like); + Mytools.runIO(new Runnable() { + @Override + public void run() { + MyDataBase.getInstance().likeDAO().update(customdata); + } + }); + } else { + islike = false; + customdata.setLike(false); + holder.getLike().setBackgroundResource(R.drawable.icon_custom_unlike); + Mytools.runIO(new Runnable() { + @Override + public void run() { + MyDataBase.getInstance().likeDAO().update(customdata); + } + }); + } + } + }); + + holder.getImage().setImageResource(R.mipmap.save_image); + if (customdata.getTitle().length() > 3) { + String name = customdata.getTitle().substring(0, 3); + holder.getName().setText(name + "..."); + } else { + holder.getName().setText(customdata.getTitle()); + } + holder.getCustomcons().setBackgroundResource(R.drawable.custom_item_bg); + holder.getImage().setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(mactivity, PreViewActivity.class); + intent.putExtra(StaticValue.KEY_TITLE, customdata.getTitle()); + mactivity.startActivity(intent); + } + }); + } + + + @Override + public int getItemCount() { + return mlist.size(); + } + + public static class CustomVH extends RecyclerView.ViewHolder { + private ConstraintLayout customcons; + private TextView name, time; + private ImageView image; + private ImageView like; + private ConstraintLayout delete; + + public CustomVH(@NonNull CustomListBinding binding) { + super(binding.getRoot()); + name = binding.customName; + customcons = binding.customCons; + time = binding.customTime; + like = binding.customLike; + image = binding.customImage; + delete = binding.customItemDelete; + + } + + public ConstraintLayout getDelete() { + return delete; + } + + public ConstraintLayout getCustomcons() { + return customcons; + } + + public TextView getName() { + return name; + } + + public TextView getTime() { + return time; + } + + public ImageView getImage() { + return image; + } + + public ImageView getLike() { + return like; + } + } +} diff --git a/app/src/main/java/com/fun/airhornprank/adapter/LikeAdapter.java b/app/src/main/java/com/fun/airhornprank/adapter/LikeAdapter.java new file mode 100644 index 0000000..6d3db01 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/adapter/LikeAdapter.java @@ -0,0 +1,112 @@ +package com.fun.airhornprank.adapter; + +import android.app.Activity; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.fun.airhornprank.R; +import com.fun.airhornprank.activity.PreViewActivity; +import com.fun.airhornprank.data.Mydata; +import com.fun.airhornprank.databinding.LikeListBinding; +import com.fun.airhornprank.tool.StaticValue; + +import java.util.List; + +public class LikeAdapter extends RecyclerView.Adapter { + private final LayoutInflater minflater; + private List mlist; + private int currentIndex = 0; + private int listIndex = 0; + + public LikeAdapter(Activity activity, List list) { + minflater = LayoutInflater.from(activity); + mlist = list; + } + + @NonNull + @Override + public LikeVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + LikeListBinding binding = LikeListBinding.inflate(minflater, parent, false); + return new LikeVH(binding); + } + + @Override + public void onBindViewHolder(@NonNull LikeVH holder, int position) { + Mydata likeData = mlist.get(position); + if (likeData.getPreUrl().equals("custom_url")) { + holder.getImage().setImageResource(R.mipmap.save_image); + } else { + Glide.with(minflater.getContext()) + .load(likeData.getPreUrl()) + .placeholder(R.mipmap.logo) + .into(holder.getImage()); + } + holder.getText().setText(likeData.getTitle()); + + if (position == getItemCount() - 1) { + holder.getView().setVisibility(View.VISIBLE); + } else { + holder.getView().setVisibility(View.GONE); + } + holder.getLikecons().setBackgroundResource(R.drawable.like_item_bg); + holder.getLikecons().setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(minflater.getContext(), PreViewActivity.class); + intent.putExtra(StaticValue.KEY_TITLE, likeData.getTitle()); + minflater.getContext().startActivity(intent); + } + }); + } + + + @Override + public int getItemCount() { + return mlist.size(); + } + + public class LikeVH extends RecyclerView.ViewHolder { + private ConstraintLayout likecons; + private TextView text; + private ImageView image; + + private View view; + + public LikeVH(@NonNull LikeListBinding binding) { + super(binding.getRoot()); + + text = binding.likeText; + likecons = binding.likeCons; + image = binding.likeImage; + view = binding.likeView; + } + + public TextView getText() { + return text; + } + + public View getView() { + return view; + } + + public ImageView getImage() { + return image; + } + + public ConstraintLayout getLikecons() { + return likecons; + } + + } +} diff --git a/app/src/main/java/com/fun/airhornprank/adapter/ListAdapter.java b/app/src/main/java/com/fun/airhornprank/adapter/ListAdapter.java new file mode 100644 index 0000000..911259d --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/adapter/ListAdapter.java @@ -0,0 +1,115 @@ +package com.fun.airhornprank.adapter; + +import android.app.Activity; +import android.content.Intent; +import android.graphics.PorterDuff; +import android.graphics.drawable.Drawable; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.fun.airhornprank.R; +import com.fun.airhornprank.activity.PreViewActivity; +import com.fun.airhornprank.data.Mydata; +import com.fun.airhornprank.databinding.ListRvItemBinding; +import com.fun.airhornprank.tool.StaticValue; + + +import java.util.List; + +public class ListAdapter extends RecyclerView.Adapter { + private List otherdataList; + private final LayoutInflater mInflater; + private int mcolor; + + public ListAdapter(Activity activity, List list, int color) { + mInflater = LayoutInflater.from(activity); + otherdataList = list; + mcolor = color; + } + + @NonNull + @Override + public PreVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + ListRvItemBinding binding = ListRvItemBinding.inflate(mInflater, parent, false); + return new PreVH(binding); + } + + @Override + public void onBindViewHolder(@NonNull PreVH holder, int position) { + Mydata otherdata = otherdataList.get(position); + + if (otherdata.getPreUrl().equals("custom_url")) { + holder.getImageViewThumb().setImageResource(R.mipmap.save_image); + } else { + Glide.with(mInflater.getContext()) + .load(otherdata.getPreUrl()) + .placeholder(R.mipmap.logo) + .into(holder.getImageViewThumb()); + } + if (otherdata.getTitle().length() > 6) { + String name = otherdata.getTitle().substring(0, 6); + holder.getTextView().setText(name + "..."); + } else { + holder.getTextView().setText(otherdata.getTitle()); + } + Drawable backgroundDrawable = ContextCompat.getDrawable(mInflater.getContext(), R.drawable.list_rv_item_bg); + if (backgroundDrawable != null) { + backgroundDrawable.setColorFilter(mcolor, PorterDuff.Mode.SRC_ATOP); + holder.getConstraintLayout().setBackground(backgroundDrawable); + } + holder.getConstraintLayout().setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(mInflater.getContext(), PreViewActivity.class); + intent.putExtra(StaticValue.KEY_TITLE, otherdata.getTitle()); +// intent.putExtra(StaticValue.KEY_Color,mcolor); +// intent.putExtra(StaticValue.KEY_CategoryName, otherdata.getCategoryname()); + mInflater.getContext().startActivity(intent); + } + }); + } + + @Override + public int getItemCount() { + return otherdataList.size(); + } + + public class PreVH extends RecyclerView.ViewHolder { + private ImageView imageViewThumb; + private ConstraintLayout constraintLayout; + private TextView textView; + + public TextView getTextView() { + return textView; + } + + + public PreVH(@NonNull ListRvItemBinding binding) { + super(binding.getRoot()); + imageViewThumb = binding.listItemImage; + constraintLayout = binding.listRvCons; + textView = binding.listItemText; + + + } + + public ConstraintLayout getConstraintLayout() { + return constraintLayout; + } + + public ImageView getImageViewThumb() { + return imageViewThumb; + } + + } +} diff --git a/app/src/main/java/com/fun/airhornprank/adapter/PageAdapter.java b/app/src/main/java/com/fun/airhornprank/adapter/PageAdapter.java new file mode 100644 index 0000000..4d116f0 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/adapter/PageAdapter.java @@ -0,0 +1,37 @@ +package com.fun.airhornprank.adapter; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentStatePagerAdapter; + +import com.fun.airhornprank.fragment.CustomFragment; +import com.fun.airhornprank.fragment.LikeFragment; +import com.fun.airhornprank.fragment.MainFragment; +import com.fun.airhornprank.fragment.RankingFragment; + +import java.util.ArrayList; +import java.util.List; + +public class PageAdapter extends FragmentStatePagerAdapter { + private List mlist = new ArrayList<>(); + + public PageAdapter(@NonNull FragmentManager fm) { + super(fm); + mlist.add(new MainFragment()); + mlist.add(new CustomFragment()); + mlist.add(new RankingFragment()); + mlist.add(new LikeFragment()); + } + + @NonNull + @Override + public Fragment getItem(int position) { + return mlist.get(position); + } + + @Override + public int getCount() { + return mlist.size(); + } +} diff --git a/app/src/main/java/com/fun/airhornprank/adapter/RankAdapter.java b/app/src/main/java/com/fun/airhornprank/adapter/RankAdapter.java new file mode 100644 index 0000000..dbd0916 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/adapter/RankAdapter.java @@ -0,0 +1,169 @@ +package com.fun.airhornprank.adapter; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.fun.airhornprank.R; +import com.fun.airhornprank.activity.PreViewActivity; +import com.fun.airhornprank.data.MyDataBase; +import com.fun.airhornprank.data.Mydata; +import com.fun.airhornprank.databinding.CustomListBinding; +import com.fun.airhornprank.databinding.RankListBinding; +import com.fun.airhornprank.tool.Mytools; +import com.fun.airhornprank.tool.StaticValue; + +import java.util.List; + +public class RankAdapter extends RecyclerView.Adapter { + private Activity mactivity; + private List mlist; + private boolean islike = false; + + public RankAdapter(Activity activity) { + mactivity = activity; + + } + + public void SetData(List list) { + mlist = list; + } + + @NonNull + @Override + public RankVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + RankListBinding binding = RankListBinding.inflate(mactivity.getLayoutInflater(), parent, false); + return new RankVH(binding); + } + + @SuppressLint("DefaultLocale") + @Override + public void onBindViewHolder(@NonNull RankVH holder, int position) { + Mydata customdata = mlist.get(position); + boolean like = customdata.getLike(); + + if (position == getItemCount() - 1) { + holder.getView().setVisibility(View.VISIBLE); + } else { + holder.getView().setVisibility(View.GONE); + } + + if (like) { + holder.getLike().setBackgroundResource(R.drawable.icon_like); + } else { + holder.getLike().setBackgroundResource(R.drawable.icon_unlike); + } + Glide.with(mactivity.getApplicationContext()) + .load(customdata.getPreUrl()) + .placeholder(R.mipmap.logo) + .into(holder.getImage()); + + holder.getLike().setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!islike) { + islike = true; + customdata.setLike(true); + holder.getLike().setBackgroundResource(R.drawable.icon_like); + Mytools.runIO(new Runnable() { + @Override + public void run() { + MyDataBase.getInstance().likeDAO().update(customdata); + } + }); + } else { + islike = false; + customdata.setLike(false); + holder.getLike().setBackgroundResource(R.drawable.icon_unlike); + Mytools.runIO(new Runnable() { + @Override + public void run() { + MyDataBase.getInstance().likeDAO().update(customdata); + } + }); + } + } + }); + int id = position + 4; + holder.getId().setText(String.valueOf(id)); + if (customdata.getTitle().length() > 10) { + String name = customdata.getTitle().substring(0, 10); + holder.getName().setText(name + "..."); + } else { + holder.getName().setText(customdata.getTitle()); + } + + holder.getRela().setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(mactivity, PreViewActivity.class); + intent.putExtra(StaticValue.KEY_TITLE, customdata.getTitle()); + mactivity.startActivity(intent); + } + }); + + } + + + @Override + public int getItemCount() { + return mlist.size(); + } + + public static class RankVH extends RecyclerView.ViewHolder { + private TextView id; + private TextView name; + private ImageView image; + private ImageView like; + private RelativeLayout rela; + private View view; + + public View getView() { + return view; + } + + public TextView getId() { + return id; + } + + public TextView getName() { + return name; + } + + public ImageView getImage() { + return image; + } + + public ImageView getLike() { + return like; + } + + public RelativeLayout getRela() { + return rela; + } + + public RankVH(@NonNull RankListBinding binding) { + super(binding.getRoot()); + name = binding.rankItemName; + like = binding.rankItemLike; + image = binding.rankItemImage; + id = binding.rankItemId; + rela = binding.rankItemRelative; + view = binding.rankItemView; + } + + + } +} diff --git a/app/src/main/java/com/fun/airhornprank/adapter/ThumAdapter.java b/app/src/main/java/com/fun/airhornprank/adapter/ThumAdapter.java new file mode 100644 index 0000000..7ea00ec --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/adapter/ThumAdapter.java @@ -0,0 +1,153 @@ +package com.fun.airhornprank.adapter; + +import android.app.Activity; +import android.content.Intent; +import android.graphics.PorterDuff; +import android.graphics.drawable.Drawable; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.fun.airhornprank.PrankSkin; +import com.fun.airhornprank.R; +import com.fun.airhornprank.activity.ListActivity; +import com.fun.airhornprank.data.Mydata; +import com.fun.airhornprank.databinding.MainRvItemBinding; +import com.fun.airhornprank.tool.StaticValue; + +import java.util.List; + +public class ThumAdapter extends RecyclerView.Adapter { + private List myDataList; + + private LayoutInflater minflater; + private int[] randomcolor; + private int[] draw; + + public ThumAdapter(Activity activity, List list) { + myDataList = list; + minflater = LayoutInflater.from(activity); + + randomcolor = new int[]{ + ContextCompat.getColor(minflater.getContext(), R.color.color_1), + ContextCompat.getColor(minflater.getContext(), R.color.color_2), + ContextCompat.getColor(minflater.getContext(), R.color.color_3), + ContextCompat.getColor(minflater.getContext(), R.color.color_4), + ContextCompat.getColor(minflater.getContext(), R.color.color_5), + ContextCompat.getColor(minflater.getContext(), R.color.color_6), + }; + + draw = new int[]{ + R.drawable.bg_1, + R.drawable.bg_2, + R.drawable.bg_3, + R.drawable.bg_4, + R.drawable.bg_5, + R.drawable.bg_6, + }; + } + + @NonNull + @Override + public ThumVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + MainRvItemBinding binding = MainRvItemBinding.inflate(minflater, parent, false); + return new ThumVH(binding); + } + + @Override + public void onBindViewHolder(@NonNull ThumVH holder, int position) { + Mydata myData = myDataList.get(position); + String url = myData.getCategoryUrl(); + + if (url.equals("custom_url")) { + holder.getImageViewThumb().setImageResource(R.mipmap.save_image); + } else { + Glide.with(minflater.getContext()) + .load(myData.getCategoryUrl()) + .placeholder(R.mipmap.logo) + .into(holder.getImageViewThumb()); + } + + if (position == getItemCount() - 1) { + holder.getView().setVisibility(View.VISIBLE); + } else if (position == getItemCount() - 2) { + holder.getView().setVisibility(View.VISIBLE); + } else { + holder.getView().setVisibility(View.GONE); + } + + if (myData.getCategoryname().length() > 6) { + String name = myData.getCategoryname().substring(0, 6); + + holder.getTextView().setText(name + "..."); + } else { + holder.getTextView().setText(myData.getCategoryname()); + } + + int i = position % 6; + Drawable backgroundDrawable1 = ContextCompat.getDrawable(minflater.getContext(), draw[i]); + if (backgroundDrawable1 != null) { + holder.getMainlistcons().setBackground(backgroundDrawable1); + } + + holder.getConstraintLayout().setOnClickListener(v -> { + Intent intent = new Intent(minflater.getContext(), ListActivity.class); + intent.putExtra(StaticValue.KEY_CategoryName, myData.getCategoryname()); + intent.putExtra(StaticValue.KEY_Color, randomcolor[i]); + minflater.getContext().startActivity(intent); + }); + } + + + @Override + public int getItemCount() { + return myDataList.size(); + } + + public class ThumVH extends RecyclerView.ViewHolder { + + private ImageView imageViewThumb; + private ConstraintLayout constraintLayout, mainlistcons; + private TextView textView; + private View view; + + + public ThumVH(@NonNull MainRvItemBinding binding) { + super(binding.getRoot()); + imageViewThumb = binding.mainRvImage; + constraintLayout = binding.mainCons; + mainlistcons = binding.mainListCons; + textView = binding.mainRvText; + view = binding.view; + } + + public View getView() { + return view; + } + + public ConstraintLayout getConstraintLayout() { + return constraintLayout; + } + + public ImageView getImageViewThumb() { + return imageViewThumb; + } + + public ConstraintLayout getMainlistcons() { + return mainlistcons; + } + + public TextView getTextView() { + return textView; + } + } +} diff --git a/app/src/main/java/com/fun/airhornprank/data/LikeDAO.java b/app/src/main/java/com/fun/airhornprank/data/LikeDAO.java new file mode 100644 index 0000000..5c29af2 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/data/LikeDAO.java @@ -0,0 +1,47 @@ +package com.fun.airhornprank.data; + +import androidx.lifecycle.LiveData; +import androidx.room.Dao; +import androidx.room.Insert; +import androidx.room.OnConflictStrategy; +import androidx.room.Query; +import androidx.room.Update; + +import java.util.List; + +@Dao +public interface LikeDAO { + @Query("SELECT * FROM prank_table") + List getAll(); + + @Query("SELECT * FROM prank_table") + LiveData> livegetAll(); + + @Query("select * from prank_table where islike =:islike ") + LiveData> getLikedata(boolean islike); + @Query("select * from prank_table where isRank =:isrank ") + LiveData> getRankdata(boolean isrank); + @Query("select * from prank_table where title =:title ") + List getliketitle(String title); + + @Query("select * from prank_table where categoryname =:name ") + List getlist(String name); + + @Query("select * from prank_table where categoryname =:name ") + LiveData> getCustom(String name); + + @Insert + void insertAll(List likeDataList); + + @Insert + void insertCustom(Mydata mydata); + + @Query("DELETE FROM prank_table WHERE title = :title") + void deleteByTitle(String title); + + @Query("DELETE FROM prank_table WHERE id = :id") + void deleteCutsom(int id); + + @Update + void update(Mydata likeData); +} diff --git a/app/src/main/java/com/fun/airhornprank/data/MyDataBase.java b/app/src/main/java/com/fun/airhornprank/data/MyDataBase.java new file mode 100644 index 0000000..bdfe7aa --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/data/MyDataBase.java @@ -0,0 +1,27 @@ +package com.fun.airhornprank.data; + +import androidx.room.Database; +import androidx.room.Room; +import androidx.room.RoomDatabase; + +import com.fun.airhornprank.PrankSkin; + +@Database(entities = {Mydata.class},version = PrankSkin.DB_Version,exportSchema = false) +public abstract class MyDataBase extends RoomDatabase { + public abstract LikeDAO likeDAO(); + + private static MyDataBase INSTANCE; + + public static MyDataBase getInstance() { + if (INSTANCE == null) { + synchronized (MyDataBase.class) { + if (INSTANCE == null) { + INSTANCE = Room.databaseBuilder(PrankSkin.app, MyDataBase.class, PrankSkin.DB_Name).build(); + } + } + + } + return INSTANCE; + + } +} diff --git a/app/src/main/java/com/fun/airhornprank/data/Mydata.java b/app/src/main/java/com/fun/airhornprank/data/Mydata.java new file mode 100644 index 0000000..5815071 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/data/Mydata.java @@ -0,0 +1,93 @@ +package com.fun.airhornprank.data; + +import androidx.room.Entity; +import androidx.room.PrimaryKey; + +import com.fun.airhornprank.PrankSkin; + +@Entity(tableName = PrankSkin.Table_Name) +public class Mydata { + @PrimaryKey(autoGenerate = true) + public int id; + + public String categoryname; + + public String title; + + public String mp3Url; + + public String preUrl; + + public Boolean islike; + public String categoryUrl; + public long time; + public Boolean isRank; + + public Boolean getRank() { + return isRank; + } + + public void setRank(Boolean rank) { + isRank = rank; + } + + public long getTime() { + return time; + } + + public void setTime(long time) { + this.time = time; + } + + public String getCategoryUrl() { + return categoryUrl; + } + + public void setCategoryUrl(String categoryUrl) { + this.categoryUrl = categoryUrl; + } + + public String getCategoryname() { + return categoryname; + } + + public void setCategoryname(String categoryname) { + this.categoryname = categoryname; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getMp3Url() { + return mp3Url; + } + + public void setMp3Url(String mp3Url) { + this.mp3Url = mp3Url; + } + + public String getPreUrl() { + return preUrl; + } + + public void setPreUrl(String preUrl) { + this.preUrl = preUrl; + } + + public Boolean getLike() { + return islike; + } + + public void setLike(Boolean like) { + this.islike = like; + } + + public int getId() { + return id; + } +} diff --git a/app/src/main/java/com/fun/airhornprank/fragment/CustomFragment.java b/app/src/main/java/com/fun/airhornprank/fragment/CustomFragment.java new file mode 100644 index 0000000..63b10d4 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/fragment/CustomFragment.java @@ -0,0 +1,235 @@ +package com.fun.airhornprank.fragment; + +import android.Manifest; +import android.app.Dialog; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.drawable.ColorDrawable; +import android.media.MediaMetadataRetriever; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.recyclerview.widget.LinearLayoutManager; + +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; + +import com.fun.airhornprank.R; +import com.fun.airhornprank.activity.RecordActivity; +import com.fun.airhornprank.activity.SaveActivity; +import com.fun.airhornprank.adapter.CustomAdapter; +import com.fun.airhornprank.data.MyDataBase; +import com.fun.airhornprank.data.Mydata; +import com.fun.airhornprank.databinding.FragmentCustomBinding; +import com.fun.airhornprank.tool.StaticValue; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + + +public class CustomFragment extends Fragment { + FragmentCustomBinding binding; + private List customData = new ArrayList<>(); + private CustomAdapter customAdapter; + private Dialog dialog; + private static final int REQUEST_RECORD_AUDIO_PERMISSION = 200; + private static final int REQUEST_READ_STORAGE_PERMISSION = 500; + private static final int REQUEST_PICK_AUDIO = 300; + private String[] permissions = {Manifest.permission.RECORD_AUDIO}; + private String[] permission = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}; + private boolean show = false; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + binding = FragmentCustomBinding.inflate(inflater, container, false); + + initData(); + + initEvent(); + + return binding.getRoot(); + } + + private void initData() { + customAdapter = new CustomAdapter(requireActivity()); + binding.customRv.setLayoutManager(new LinearLayoutManager(requireContext())); + MyDataBase.getInstance().likeDAO().getCustom("custom").observe(getViewLifecycleOwner(), new Observer>() { + @Override + public void onChanged(List mydata) { + if (!mydata.isEmpty()) { + initView(mydata); + } else { + show = false; + customAdapter.showDelete(false); + binding.customDelete.setVisibility(View.GONE); + binding.addHide.setVisibility(View.VISIBLE); + binding.addTips.setVisibility(View.VISIBLE); + binding.add.setVisibility(View.GONE); + binding.customRv.setVisibility(View.GONE); + } + } + }); + } + + private void initView(List customData) { + binding.customDelete.setVisibility(View.VISIBLE); + binding.addHide.setVisibility(View.GONE); + binding.addTips.setVisibility(View.GONE); + binding.add.setVisibility(View.VISIBLE); + binding.customRv.setVisibility(View.VISIBLE); + customAdapter.SetData(customData); + binding.customRv.setAdapter(customAdapter); + } + + private void initEvent() { + binding.add.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + showDialog(); + } + }); + binding.addHide.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + showDialog(); + } + }); + binding.customDelete.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + show = !show; + customAdapter.showDelete(show); + } + }); + } + + private void showDialog() { + dialog = new Dialog(requireContext()); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(R.layout.dialog); + dialog.setCancelable(true); + dialog.getWindow().setGravity(Gravity.BOTTOM); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); + + WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); + lp.copyFrom(dialog.getWindow().getAttributes()); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + lp.height = WindowManager.LayoutParams.WRAP_CONTENT; + + dialog.findViewById(R.id.dialog_import).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + if (ContextCompat.checkSelfPermission(requireActivity(), Manifest.permission.READ_MEDIA_AUDIO) + != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(requireActivity(), + new String[]{Manifest.permission.READ_MEDIA_AUDIO}, + REQUEST_READ_STORAGE_PERMISSION); + } else { + importAudio(); + } + } else { + if (ContextCompat.checkSelfPermission(requireActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) + != PackageManager.PERMISSION_GRANTED || + ContextCompat.checkSelfPermission(requireActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) + != PackageManager.PERMISSION_GRANTED) { + + ActivityCompat.requestPermissions(requireActivity(), permission, REQUEST_READ_STORAGE_PERMISSION); + } else { + importAudio(); + } + } + + + } + }); + dialog.findViewById(R.id.dialog_record).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (ContextCompat.checkSelfPermission(requireActivity(), Manifest.permission.RECORD_AUDIO) + != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(requireActivity(), permissions, REQUEST_RECORD_AUDIO_PERMISSION); + } else { + Intent intent = new Intent(requireContext(), RecordActivity.class); + startActivity(intent); + } + + } + }); + + dialog.show(); + dialog.getWindow().setAttributes(lp); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + if (requestCode == REQUEST_PICK_AUDIO && resultCode == getActivity().RESULT_OK) { + if (data != null) { + Uri selectedAudioUri = data.getData(); + if (selectedAudioUri != null) { + long duration = getAudioDuration(requireContext(), selectedAudioUri); + Intent intent = new Intent(requireContext(), SaveActivity.class); + intent.putExtra(StaticValue.KEY_Path, selectedAudioUri.toString()); + intent.putExtra(StaticValue.KEY_Time, duration); + startActivity(intent); + } + } + } + } + + private long getAudioDuration(Context context, Uri uri) { + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + long duration = 0; + + try { + ContentResolver contentResolver = context.getContentResolver(); + retriever.setDataSource(context, uri); + String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); + duration = Long.parseLong(time); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + retriever.release(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + return duration; + } + + private void importAudio() { + Intent intent = new Intent(Intent.ACTION_GET_CONTENT); + intent.setType("audio/*"); + startActivityForResult(Intent.createChooser(intent, "Select Audio"), REQUEST_PICK_AUDIO); + } + + @Override + public void onStop() { + super.onStop(); + if (dialog != null) { + dialog.dismiss(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/airhornprank/fragment/LikeFragment.java b/app/src/main/java/com/fun/airhornprank/fragment/LikeFragment.java new file mode 100644 index 0000000..837c5ef --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/fragment/LikeFragment.java @@ -0,0 +1,56 @@ +package com.fun.airhornprank.fragment; + +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.recyclerview.widget.LinearLayoutManager; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.fun.airhornprank.R; +import com.fun.airhornprank.adapter.LikeAdapter; +import com.fun.airhornprank.data.MyDataBase; +import com.fun.airhornprank.data.Mydata; +import com.fun.airhornprank.databinding.FragmentLikeBinding; +import com.fun.airhornprank.tool.Mytools; + +import java.util.ArrayList; +import java.util.List; + + +public class LikeFragment extends Fragment { + + FragmentLikeBinding binding; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + binding = FragmentLikeBinding.inflate(inflater, container, false); + + initData(); + + return binding.getRoot(); + } + + private void initData() { + MyDataBase.getInstance().likeDAO().getLikedata(true).observe(getViewLifecycleOwner(), new Observer>() { + @Override + public void onChanged(List mydata) { + if (mydata.isEmpty()) { + binding.likeHintText.setVisibility(View.VISIBLE); + binding.likeHintImage.setVisibility(View.VISIBLE); + binding.likeRv.setVisibility(View.GONE); + } else { + binding.likeRv.setVisibility(View.VISIBLE); + binding.likeHintImage.setVisibility(View.GONE); + binding.likeHintText.setVisibility(View.GONE); + binding.likeRv.setAdapter(new LikeAdapter(requireActivity(), mydata)); + binding.likeRv.setLayoutManager(new LinearLayoutManager(requireContext())); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/airhornprank/fragment/MainFragment.java b/app/src/main/java/com/fun/airhornprank/fragment/MainFragment.java new file mode 100644 index 0000000..cf9a368 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/fragment/MainFragment.java @@ -0,0 +1,107 @@ +package com.fun.airhornprank.fragment; + +import android.content.Intent; +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; + +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.fun.airhornprank.R; +import com.fun.airhornprank.activity.SettingActivity; +import com.fun.airhornprank.adapter.ThumAdapter; +import com.fun.airhornprank.data.MyDataBase; +import com.fun.airhornprank.data.Mydata; +import com.fun.airhornprank.databinding.FragmentMainBinding; +import com.fun.airhornprank.tool.Mytools; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + + +public class MainFragment extends Fragment { + FragmentMainBinding binding; + private List allData = new ArrayList<>(); + private List maindata = new ArrayList<>(); + private ThumAdapter thumAdapter; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + binding = FragmentMainBinding.inflate(inflater, container, false); + + initData(); + + binding.mainSetting.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(requireContext(), SettingActivity.class); + startActivity(intent); + } + }); + + return binding.getRoot(); + } + + private void initData() { + MyDataBase.getInstance().likeDAO().livegetAll().observe(getViewLifecycleOwner(), new Observer>() { + @Override + public void onChanged(List list) { +// maindata = chekData(list); + initView(chekData(list)); + + } + }); +// Mytools.runIO(new Runnable() { +// @Override +// public void run() { +// allData = MyDataBase.getInstance().likeDAO().getAll(); +// chekData(allData); +// if (!chekData(allData).isEmpty()) { +// maindata = chekData(allData); +// requireActivity().runOnUiThread(new Runnable() { +// @Override +// public void run() { +// initView(maindata); +// } +// }); +// } +// } +// }); + } + + private void initView(List maindata) { + thumAdapter = new ThumAdapter(requireActivity(), maindata); + binding.marinRv.setAdapter(thumAdapter); + binding.marinRv.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)); + } + + private static List chekData(List data) { +// Collections.shuffle(data); +// data.subList(0, 10); + List main = new ArrayList<>(); + Set name = new HashSet<>(); + for (Mydata mydata : data) { + if (!name.contains(mydata.getCategoryname())) { + main.add(mydata); + name.add(mydata.getCategoryname()); + } + } + return main; + } + +// @Override +// public void onResume() { +// super.onResume(); +// initData(); +// } +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/airhornprank/fragment/RankingFragment.java b/app/src/main/java/com/fun/airhornprank/fragment/RankingFragment.java new file mode 100644 index 0000000..b204deb --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/fragment/RankingFragment.java @@ -0,0 +1,249 @@ +package com.fun.airhornprank.fragment; + +import android.content.Intent; +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.recyclerview.widget.LinearLayoutManager; + +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import com.bumptech.glide.Glide; +import com.fun.airhornprank.PrankSkin; +import com.fun.airhornprank.R; +import com.fun.airhornprank.activity.PreViewActivity; +import com.fun.airhornprank.adapter.RankAdapter; +import com.fun.airhornprank.data.MyDataBase; +import com.fun.airhornprank.data.Mydata; +import com.fun.airhornprank.databinding.FragmentRankingBinding; +import com.fun.airhornprank.tool.Mytools; +import com.fun.airhornprank.tool.StaticValue; + +import java.util.ArrayList; +import java.util.List; + +public class RankingFragment extends Fragment { + FragmentRankingBinding binding; + private RankAdapter rankAdapter; + private boolean islike1 = false; + private boolean islike2 = false; + private boolean islike3 = false; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + binding = FragmentRankingBinding.inflate(getLayoutInflater()); + rankAdapter = new RankAdapter(requireActivity()); + binding.rankRv.setLayoutManager(new LinearLayoutManager(requireContext())); + initRankData(); + return binding.getRoot(); + } + + private void initRankData() { + MyDataBase.getInstance().likeDAO().getRankdata(true).observe(getViewLifecycleOwner(), new Observer>() { + @Override + public void onChanged(List list) { + Mydata mydata1 = list.get(0); + Mydata mydata2 = list.get(1); + Mydata mydata3 = list.get(2); + Glide.with(requireContext()) + .load(mydata1.getPreUrl()) + .placeholder(R.mipmap.logo) + .into(binding.rankImage1); + if (mydata1.getTitle().length() > 6) { + String name = mydata1.getTitle().substring(0, 6); + binding.rankText1.setText(name + "..."); + } else { + binding.rankText1.setText(mydata1.getTitle()); + } + + Mytools.runIO(new Runnable() { + @Override + public void run() { + List list = MyDataBase.getInstance().likeDAO().getliketitle(mydata1.getTitle()); + Mydata mydata = list.get(0); + requireActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + if (mydata.getLike()) { + binding.rankLike1.setBackgroundResource(R.drawable.icon_like); + } else { + binding.rankLike1.setBackgroundResource(R.drawable.icon_unlike); + } + } + }); + } + }); + binding.rankRelative1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(requireContext(), PreViewActivity.class); + intent.putExtra(StaticValue.KEY_TITLE, mydata1.getTitle()); + requireContext().startActivity(intent); + } + }); + binding.rankLike1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!islike1) { + islike1 = true; + mydata1.setLike(true); + binding.rankLike1.setBackgroundResource(R.drawable.icon_like); + Mytools.runIO(new Runnable() { + @Override + public void run() { + MyDataBase.getInstance().likeDAO().update(mydata1); + } + }); + } else { + islike1 = false; + mydata1.setLike(false); + binding.rankLike1.setBackgroundResource(R.drawable.icon_unlike); + Mytools.runIO(new Runnable() { + @Override + public void run() { + MyDataBase.getInstance().likeDAO().update(mydata1); + } + }); + } + } + }); + + Glide.with(requireContext()) + .load(mydata2.getPreUrl()) + .placeholder(R.mipmap.logo) + .into(binding.rankImage2); + if (mydata2.getTitle().length() > 6) { + String name = mydata2.getTitle().substring(0, 6); + binding.rankText2.setText(name + "..."); + } else { + binding.rankText2.setText(mydata1.getTitle()); + } + Mytools.runIO(new Runnable() { + @Override + public void run() { + List list = MyDataBase.getInstance().likeDAO().getliketitle(mydata2.getTitle()); + Mydata mydata = list.get(0); + requireActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + if (mydata.getLike()) { + binding.rankLike2.setBackgroundResource(R.drawable.icon_like); + } else { + binding.rankLike2.setBackgroundResource(R.drawable.icon_unlike); + } + } + }); + } + }); + binding.rankRelative2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(requireContext(), PreViewActivity.class); + intent.putExtra(StaticValue.KEY_TITLE, mydata2.getTitle()); + requireContext().startActivity(intent); + } + }); + binding.rankLike2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!islike2) { + islike2 = true; + mydata2.setLike(true); + binding.rankLike2.setBackgroundResource(R.drawable.icon_like); + Mytools.runIO(new Runnable() { + @Override + public void run() { + MyDataBase.getInstance().likeDAO().update(mydata2); + } + }); + } else { + islike2 = false; + mydata2.setLike(false); + binding.rankLike2.setBackgroundResource(R.drawable.icon_unlike); + Mytools.runIO(new Runnable() { + @Override + public void run() { + MyDataBase.getInstance().likeDAO().update(mydata2); + } + }); + } + } + }); + + Glide.with(requireContext()) + .load(mydata3.getPreUrl()) + .placeholder(R.mipmap.logo) + .into(binding.rankImage3); + if (mydata3.getTitle().length() > 6) { + String name = mydata3.getTitle().substring(0, 6); + binding.rankText3.setText(name + "..."); + } else { + binding.rankText3.setText(mydata1.getTitle()); + } + Mytools.runIO(new Runnable() { + @Override + public void run() { + List list = MyDataBase.getInstance().likeDAO().getliketitle(mydata3.getTitle()); + Mydata mydata = list.get(0); + requireActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + if (mydata.getLike()) { + binding.rankLike3.setBackgroundResource(R.drawable.icon_like); + } else { + binding.rankLike3.setBackgroundResource(R.drawable.icon_unlike); + } + } + }); + } + }); + binding.rankRelative3.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(requireContext(), PreViewActivity.class); + intent.putExtra(StaticValue.KEY_TITLE, mydata3.getTitle()); + requireContext().startActivity(intent); + } + }); + binding.rankLike3.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!islike3) { + islike3 = true; + mydata3.setLike(true); + binding.rankLike3.setBackgroundResource(R.drawable.icon_like); + Mytools.runIO(new Runnable() { + @Override + public void run() { + MyDataBase.getInstance().likeDAO().update(mydata3); + } + }); + } else { + islike3 = false; + mydata3.setLike(false); + binding.rankLike3.setBackgroundResource(R.drawable.icon_unlike); + Mytools.runIO(new Runnable() { + @Override + public void run() { + MyDataBase.getInstance().likeDAO().update(mydata3); + } + }); + } + } + }); + + + List reList = list.subList(3, 9); + rankAdapter.SetData(reList); + binding.rankRv.setAdapter(rankAdapter); + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/airhornprank/tool/AudioRecorder.java b/app/src/main/java/com/fun/airhornprank/tool/AudioRecorder.java new file mode 100644 index 0000000..53cf867 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/tool/AudioRecorder.java @@ -0,0 +1,59 @@ +package com.fun.airhornprank.tool; + +import android.content.Context; +import android.media.MediaRecorder; +import android.os.Environment; + +import java.io.File; +import java.io.IOException; + +public class AudioRecorder { + private MediaRecorder mediaRecorder; + private String tempFileName; + private String fileName; + private boolean isRecording = false; + + public AudioRecorder(Context context) { + + File dir = context.getCacheDir(); + File file = new File(dir, "temp_audio.mp3"); + tempFileName = file.getAbsolutePath(); + } + + + public void startRecording() { + if (isRecording) return; + + mediaRecorder = new MediaRecorder(); + mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); + mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); + mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); + mediaRecorder.setOutputFile(tempFileName); + + try { + mediaRecorder.prepare(); + mediaRecorder.start(); + isRecording = true; + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void stopRecording() { + if (!isRecording) return; + + try { + mediaRecorder.stop(); + } catch (IllegalStateException e) { + e.printStackTrace(); + } finally { + mediaRecorder.release(); + mediaRecorder = null; + isRecording = false; + } + } + + public String getTempFileName() { + return tempFileName; + } +} diff --git a/app/src/main/java/com/fun/airhornprank/tool/CustomProgressBar.kt b/app/src/main/java/com/fun/airhornprank/tool/CustomProgressBar.kt new file mode 100644 index 0000000..cdbb509 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/tool/CustomProgressBar.kt @@ -0,0 +1,62 @@ +package com.`fun`.airhornprank.tool + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.LinearGradient +import android.graphics.Paint +import android.graphics.RectF +import android.graphics.Shader +import android.util.AttributeSet +import android.view.View + +class CustomProgressBar(context: Context, attrs: AttributeSet?) : View(context, attrs) { + private var progress = 0f // 当前进度 + private val maxProgress = 100f // 最大进度 + private val progressBarHeight = 20f // 进度条高度 + private val cornerRadius = 10f // 圆角半径 + private val backgroundColor = Color.parseColor("#26FFFFFF") + private val startColor = Color.parseColor("#FF9ce8ff") // 起始颜色 + private val middleColor = Color.parseColor("#FFa4c4fb") // 中间颜色 + private val endColor = Color.parseColor("#FFbfa4ee") // 结束颜色 + private val paint = Paint() + private val paintTow = Paint() + + init { + paint.style = Paint.Style.FILL + paint.isAntiAlias = true + paintTow.style = Paint.Style.FILL + paintTow.isAntiAlias = true + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + // 绘制底色矩形 + paint.shader = null // 重置着色器 + paint.color = backgroundColor + val backgroundRect = RectF(0f, (height / 2 - progressBarHeight / 2), width.toFloat(), (height / 2 + progressBarHeight / 2)) + canvas.drawRoundRect(backgroundRect, cornerRadius, cornerRadius, paint) + + + // 计算进度条的宽度 + val progressBarWidth = (width * progress / maxProgress) + + // 创建颜色渐变对象 + val gradient = LinearGradient(0f, 0f, width.toFloat(), 0f, intArrayOf(startColor, middleColor, endColor), null, Shader.TileMode.CLAMP) + paintTow.shader = gradient + + // 绘制带圆角的进度条矩形 + val rect = RectF(0f, (height / 2 - progressBarHeight / 2), progressBarWidth.toFloat(), (height / 2 + progressBarHeight / 2)) + canvas.drawRoundRect(rect, cornerRadius, cornerRadius, paintTow) + } + + fun getProgress():Float{ + return progress + } + + // 设置进度 + fun setProgress(progress: Float) { + this.progress = progress + invalidate() // 请求重绘 + } +} diff --git a/app/src/main/java/com/fun/airhornprank/tool/MyTextView.java b/app/src/main/java/com/fun/airhornprank/tool/MyTextView.java new file mode 100644 index 0000000..82b6fd9 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/tool/MyTextView.java @@ -0,0 +1,36 @@ +package com.fun.airhornprank.tool; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Typeface; +import android.util.AttributeSet; +import android.widget.TextView; + +import androidx.annotation.Nullable; + +@SuppressLint("AppCompatCustomView") +public class MyTextView extends TextView { + public MyTextView(Context context) { + super(context); + initData(); + } + + public MyTextView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + initData(); + } + + public MyTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initData(); + } + + public MyTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + initData(); + } + + private void initData() { + setTypeface(Typeface.createFromAsset(getContext().getAssets(), "DarumadropOne-Regular.ttf")); + } +} diff --git a/app/src/main/java/com/fun/airhornprank/tool/Mytools.java b/app/src/main/java/com/fun/airhornprank/tool/Mytools.java new file mode 100644 index 0000000..41e7d61 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/tool/Mytools.java @@ -0,0 +1,83 @@ +package com.fun.airhornprank.tool; + +import android.content.res.AssetManager; + +import com.fun.airhornprank.PrankSkin; +import com.fun.airhornprank.data.Mydata; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +public class Mytools { + private static ExecutorService executorService; + + + public static void runIO(Runnable task) { + getExecutorService().execute(task); + } + + private static ExecutorService getExecutorService() { + if (executorService == null) { + executorService = Executors.newSingleThreadExecutor(); + } + return executorService; + } + + private static JSONArray loadJson(String filename) { + String json; + try { + AssetManager assetManager = PrankSkin.app.getAssets(); + InputStream inputStream = assetManager.open(filename); + int size = inputStream.available(); + byte[] buffer = new byte[size]; + inputStream.read(buffer); + inputStream.close(); + json = new String(buffer, StandardCharsets.UTF_8); + return new JSONArray(json); + } catch (IOException | JSONException e) { + e.printStackTrace(); + return null; + } + } + + public static List getList(String filename) { + List dataList = new ArrayList<>(); + try { + JSONArray jsonObject = loadJson(filename); + for (int a = 0; a < jsonObject.length(); a++) { + JSONObject list = jsonObject.getJSONObject(a); + String categoryName = list.getString("categoryName"); + String categoryUrl = list.getString("categoryUrl"); + JSONArray classArray = list.getJSONArray("list"); + for (int i = 0; i < classArray.length(); i++) { + JSONObject item = classArray.getJSONObject(i); + Mydata allData = new Mydata(); + allData.setCategoryname(categoryName); + allData.setCategoryUrl(categoryUrl); + allData.setLike(false); + allData.setRank(false); + allData.setTitle(item.getString("title")); + allData.setMp3Url(item.getString("mp3Url")); + allData.setPreUrl(item.getString("preUrl")); + dataList.add(allData); + } + } + + } catch (JSONException e) { + e.printStackTrace(); + } + + return dataList; + } + + +} diff --git a/app/src/main/java/com/fun/airhornprank/tool/SeekBarBroadCast.java b/app/src/main/java/com/fun/airhornprank/tool/SeekBarBroadCast.java new file mode 100644 index 0000000..becb163 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/tool/SeekBarBroadCast.java @@ -0,0 +1,23 @@ +package com.fun.airhornprank.tool; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.media.AudioManager; +import android.widget.SeekBar; + +public class SeekBarBroadCast extends BroadcastReceiver { + private AudioManager myaudioManager; + private SeekBar myseekBar; + public SeekBarBroadCast(AudioManager audioManager, SeekBar seekBar){ + myaudioManager = audioManager; + myseekBar = seekBar; + } + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")){ + int currentVolume = myaudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); + myseekBar.setProgress(currentVolume); + } + } +} diff --git a/app/src/main/java/com/fun/airhornprank/tool/StaticValue.java b/app/src/main/java/com/fun/airhornprank/tool/StaticValue.java new file mode 100644 index 0000000..24190f3 --- /dev/null +++ b/app/src/main/java/com/fun/airhornprank/tool/StaticValue.java @@ -0,0 +1,15 @@ +package com.fun.airhornprank.tool; + +public class StaticValue { + + public static String KEY_CategoryName = "key_CategoryName"; + public static String KEY_TITLE = "key_title"; + public static String KEY_Color = "key_color"; + public static String KEY_MP3URL = "key_mp3url"; + public static String KEY_PREURL = "KEY_preurl"; + public static String KEY_LIKE = "KEY_like"; + public static String KEY_Time = "KEY_time"; + public static String KEY_Path = "KEY_path"; + public static String KEY_import = ""; + +} diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_1.xml b/app/src/main/res/drawable/bg_1.xml new file mode 100644 index 0000000..15e1842 --- /dev/null +++ b/app/src/main/res/drawable/bg_1.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/app/src/main/res/drawable/bg_2.xml b/app/src/main/res/drawable/bg_2.xml new file mode 100644 index 0000000..65884bc --- /dev/null +++ b/app/src/main/res/drawable/bg_2.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/app/src/main/res/drawable/bg_3.xml b/app/src/main/res/drawable/bg_3.xml new file mode 100644 index 0000000..ccfa9e5 --- /dev/null +++ b/app/src/main/res/drawable/bg_3.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/app/src/main/res/drawable/bg_4.xml b/app/src/main/res/drawable/bg_4.xml new file mode 100644 index 0000000..ae63de0 --- /dev/null +++ b/app/src/main/res/drawable/bg_4.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/app/src/main/res/drawable/bg_5.xml b/app/src/main/res/drawable/bg_5.xml new file mode 100644 index 0000000..9a5016d --- /dev/null +++ b/app/src/main/res/drawable/bg_5.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/app/src/main/res/drawable/bg_6.xml b/app/src/main/res/drawable/bg_6.xml new file mode 100644 index 0000000..ed6508a --- /dev/null +++ b/app/src/main/res/drawable/bg_6.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/app/src/main/res/drawable/butoon_tablayout.xml b/app/src/main/res/drawable/butoon_tablayout.xml new file mode 100644 index 0000000..b930559 --- /dev/null +++ b/app/src/main/res/drawable/butoon_tablayout.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/custom_check.xml b/app/src/main/res/drawable/custom_check.xml new file mode 100644 index 0000000..458f0f7 --- /dev/null +++ b/app/src/main/res/drawable/custom_check.xml @@ -0,0 +1,25 @@ + + + + + diff --git a/app/src/main/res/drawable/custom_cons_bg.xml b/app/src/main/res/drawable/custom_cons_bg.xml new file mode 100644 index 0000000..111e1e9 --- /dev/null +++ b/app/src/main/res/drawable/custom_cons_bg.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/custom_delete_cons_bg.xml b/app/src/main/res/drawable/custom_delete_cons_bg.xml new file mode 100644 index 0000000..fc67569 --- /dev/null +++ b/app/src/main/res/drawable/custom_delete_cons_bg.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/custom_item_bg.xml b/app/src/main/res/drawable/custom_item_bg.xml new file mode 100644 index 0000000..ee67733 --- /dev/null +++ b/app/src/main/res/drawable/custom_item_bg.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/custom_uncheck.xml b/app/src/main/res/drawable/custom_uncheck.xml new file mode 100644 index 0000000..046a025 --- /dev/null +++ b/app/src/main/res/drawable/custom_uncheck.xml @@ -0,0 +1,18 @@ + + + + diff --git a/app/src/main/res/drawable/dialog_bg.xml b/app/src/main/res/drawable/dialog_bg.xml new file mode 100644 index 0000000..c68de8d --- /dev/null +++ b/app/src/main/res/drawable/dialog_bg.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dialog_cons_bg.xml b/app/src/main/res/drawable/dialog_cons_bg.xml new file mode 100644 index 0000000..833c72b --- /dev/null +++ b/app/src/main/res/drawable/dialog_cons_bg.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/edit_bg.xml b/app/src/main/res/drawable/edit_bg.xml new file mode 100644 index 0000000..a68d435 --- /dev/null +++ b/app/src/main/res/drawable/edit_bg.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file 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/icon_add.xml b/app/src/main/res/drawable/icon_add.xml new file mode 100644 index 0000000..c1c4672 --- /dev/null +++ b/app/src/main/res/drawable/icon_add.xml @@ -0,0 +1,28 @@ + + + + + diff --git a/app/src/main/res/drawable/icon_back.xml b/app/src/main/res/drawable/icon_back.xml new file mode 100644 index 0000000..ffca3c6 --- /dev/null +++ b/app/src/main/res/drawable/icon_back.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/icon_custom_add.xml b/app/src/main/res/drawable/icon_custom_add.xml new file mode 100644 index 0000000..32cf096 --- /dev/null +++ b/app/src/main/res/drawable/icon_custom_add.xml @@ -0,0 +1,12 @@ + + + diff --git a/app/src/main/res/drawable/icon_custom_import.xml b/app/src/main/res/drawable/icon_custom_import.xml new file mode 100644 index 0000000..049b457 --- /dev/null +++ b/app/src/main/res/drawable/icon_custom_import.xml @@ -0,0 +1,27 @@ + + + + + diff --git a/app/src/main/res/drawable/icon_custom_record.xml b/app/src/main/res/drawable/icon_custom_record.xml new file mode 100644 index 0000000..87fac17 --- /dev/null +++ b/app/src/main/res/drawable/icon_custom_record.xml @@ -0,0 +1,36 @@ + + + + + + + diff --git a/app/src/main/res/drawable/icon_custom_unlike.xml b/app/src/main/res/drawable/icon_custom_unlike.xml new file mode 100644 index 0000000..5117302 --- /dev/null +++ b/app/src/main/res/drawable/icon_custom_unlike.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_delete.xml b/app/src/main/res/drawable/icon_delete.xml new file mode 100644 index 0000000..3fcf14a --- /dev/null +++ b/app/src/main/res/drawable/icon_delete.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/icon_item_delete.xml b/app/src/main/res/drawable/icon_item_delete.xml new file mode 100644 index 0000000..e512371 --- /dev/null +++ b/app/src/main/res/drawable/icon_item_delete.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/icon_left.xml b/app/src/main/res/drawable/icon_left.xml new file mode 100644 index 0000000..cdeeb4f --- /dev/null +++ b/app/src/main/res/drawable/icon_left.xml @@ -0,0 +1,21 @@ + + + + diff --git a/app/src/main/res/drawable/icon_like.xml b/app/src/main/res/drawable/icon_like.xml new file mode 100644 index 0000000..abea2c6 --- /dev/null +++ b/app/src/main/res/drawable/icon_like.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_loop.xml b/app/src/main/res/drawable/icon_loop.xml new file mode 100644 index 0000000..ee32b93 --- /dev/null +++ b/app/src/main/res/drawable/icon_loop.xml @@ -0,0 +1,20 @@ + + + + diff --git a/app/src/main/res/drawable/icon_null.xml b/app/src/main/res/drawable/icon_null.xml new file mode 100644 index 0000000..61cb5f1 --- /dev/null +++ b/app/src/main/res/drawable/icon_null.xml @@ -0,0 +1,27 @@ + + + + + diff --git a/app/src/main/res/drawable/icon_privacy.xml b/app/src/main/res/drawable/icon_privacy.xml new file mode 100644 index 0000000..f228d8e --- /dev/null +++ b/app/src/main/res/drawable/icon_privacy.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/icon_rate.xml b/app/src/main/res/drawable/icon_rate.xml new file mode 100644 index 0000000..5dfec16 --- /dev/null +++ b/app/src/main/res/drawable/icon_rate.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/icon_setting.xml b/app/src/main/res/drawable/icon_setting.xml new file mode 100644 index 0000000..fd5a1b2 --- /dev/null +++ b/app/src/main/res/drawable/icon_setting.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/icon_share.xml b/app/src/main/res/drawable/icon_share.xml new file mode 100644 index 0000000..752d5f7 --- /dev/null +++ b/app/src/main/res/drawable/icon_share.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/icon_unlike.xml b/app/src/main/res/drawable/icon_unlike.xml new file mode 100644 index 0000000..1f715cd --- /dev/null +++ b/app/src/main/res/drawable/icon_unlike.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_unloop.xml b/app/src/main/res/drawable/icon_unloop.xml new file mode 100644 index 0000000..7b630be --- /dev/null +++ b/app/src/main/res/drawable/icon_unloop.xml @@ -0,0 +1,20 @@ + + + + diff --git a/app/src/main/res/drawable/like_check.xml b/app/src/main/res/drawable/like_check.xml new file mode 100644 index 0000000..de6c345 --- /dev/null +++ b/app/src/main/res/drawable/like_check.xml @@ -0,0 +1,23 @@ + + + + + diff --git a/app/src/main/res/drawable/like_item_bg.xml b/app/src/main/res/drawable/like_item_bg.xml new file mode 100644 index 0000000..833c72b --- /dev/null +++ b/app/src/main/res/drawable/like_item_bg.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/like_uncheck.xml b/app/src/main/res/drawable/like_uncheck.xml new file mode 100644 index 0000000..d6c4596 --- /dev/null +++ b/app/src/main/res/drawable/like_uncheck.xml @@ -0,0 +1,23 @@ + + + + + diff --git a/app/src/main/res/drawable/list_rv_item_bg.xml b/app/src/main/res/drawable/list_rv_item_bg.xml new file mode 100644 index 0000000..81bf787 --- /dev/null +++ b/app/src/main/res/drawable/list_rv_item_bg.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/main_check.xml b/app/src/main/res/drawable/main_check.xml new file mode 100644 index 0000000..1c64f3b --- /dev/null +++ b/app/src/main/res/drawable/main_check.xml @@ -0,0 +1,27 @@ + + + + + diff --git a/app/src/main/res/drawable/main_uncheck.xml b/app/src/main/res/drawable/main_uncheck.xml new file mode 100644 index 0000000..3be04e7 --- /dev/null +++ b/app/src/main/res/drawable/main_uncheck.xml @@ -0,0 +1,27 @@ + + + + + diff --git a/app/src/main/res/drawable/pre_pause.xml b/app/src/main/res/drawable/pre_pause.xml new file mode 100644 index 0000000..857b425 --- /dev/null +++ b/app/src/main/res/drawable/pre_pause.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/pre_play.xml b/app/src/main/res/drawable/pre_play.xml new file mode 100644 index 0000000..a76a251 --- /dev/null +++ b/app/src/main/res/drawable/pre_play.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/rank_bg.xml b/app/src/main/res/drawable/rank_bg.xml new file mode 100644 index 0000000..90370c5 --- /dev/null +++ b/app/src/main/res/drawable/rank_bg.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rank_check.xml b/app/src/main/res/drawable/rank_check.xml new file mode 100644 index 0000000..06d065e --- /dev/null +++ b/app/src/main/res/drawable/rank_check.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/rank_rv_bg.xml b/app/src/main/res/drawable/rank_rv_bg.xml new file mode 100644 index 0000000..289109d --- /dev/null +++ b/app/src/main/res/drawable/rank_rv_bg.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rank_uncheck.xml b/app/src/main/res/drawable/rank_uncheck.xml new file mode 100644 index 0000000..137f649 --- /dev/null +++ b/app/src/main/res/drawable/rank_uncheck.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/seek_bar_thumb.xml b/app/src/main/res/drawable/seek_bar_thumb.xml new file mode 100644 index 0000000..c13cb1b --- /dev/null +++ b/app/src/main/res/drawable/seek_bar_thumb.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/seekbar_style.xml b/app/src/main/res/drawable/seekbar_style.xml new file mode 100644 index 0000000..e1d6175 --- /dev/null +++ b/app/src/main/res/drawable/seekbar_style.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/setting_cons_bg.xml b/app/src/main/res/drawable/setting_cons_bg.xml new file mode 100644 index 0000000..d6ee152 --- /dev/null +++ b/app/src/main/res/drawable/setting_cons_bg.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tab_check.xml b/app/src/main/res/drawable/tab_check.xml new file mode 100644 index 0000000..4a801b4 --- /dev/null +++ b/app/src/main/res/drawable/tab_check.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_list.xml b/app/src/main/res/layout/activity_list.xml new file mode 100644 index 0000000..ac611bd --- /dev/null +++ b/app/src/main/res/layout/activity_list.xml @@ -0,0 +1,41 @@ + + + + + + + + + + \ 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..5e3f9a9 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,27 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_pre_view.xml b/app/src/main/res/layout/activity_pre_view.xml new file mode 100644 index 0000000..33f35fb --- /dev/null +++ b/app/src/main/res/layout/activity_pre_view.xml @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_record.xml b/app/src/main/res/layout/activity_record.xml new file mode 100644 index 0000000..cd8adfc --- /dev/null +++ b/app/src/main/res/layout/activity_record.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_save.xml b/app/src/main/res/layout/activity_save.xml new file mode 100644 index 0000000..e6861cf --- /dev/null +++ b/app/src/main/res/layout/activity_save.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml new file mode 100644 index 0000000..46edb57 --- /dev/null +++ b/app/src/main/res/layout/activity_setting.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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..b8762ef --- /dev/null +++ b/app/src/main/res/layout/activity_splash.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_web.xml b/app/src/main/res/layout/activity_web.xml new file mode 100644 index 0000000..d84eb55 --- /dev/null +++ b/app/src/main/res/layout/activity_web.xml @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/custom_check_cons.xml b/app/src/main/res/layout/custom_check_cons.xml new file mode 100644 index 0000000..3212dfc --- /dev/null +++ b/app/src/main/res/layout/custom_check_cons.xml @@ -0,0 +1,32 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/custom_list.xml b/app/src/main/res/layout/custom_list.xml new file mode 100644 index 0000000..1203bdb --- /dev/null +++ b/app/src/main/res/layout/custom_list.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/custom_uncheck_cons.xml b/app/src/main/res/layout/custom_uncheck_cons.xml new file mode 100644 index 0000000..a3d10a5 --- /dev/null +++ b/app/src/main/res/layout/custom_uncheck_cons.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog.xml b/app/src/main/res/layout/dialog.xml new file mode 100644 index 0000000..6792ee5 --- /dev/null +++ b/app/src/main/res/layout/dialog.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_custom.xml b/app/src/main/res/layout/fragment_custom.xml new file mode 100644 index 0000000..6a4af9d --- /dev/null +++ b/app/src/main/res/layout/fragment_custom.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_like.xml b/app/src/main/res/layout/fragment_like.xml new file mode 100644 index 0000000..49f18a3 --- /dev/null +++ b/app/src/main/res/layout/fragment_like.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + \ No newline at end of file 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..79211d7 --- /dev/null +++ b/app/src/main/res/layout/fragment_main.xml @@ -0,0 +1,41 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_ranking.xml b/app/src/main/res/layout/fragment_ranking.xml new file mode 100644 index 0000000..4781442 --- /dev/null +++ b/app/src/main/res/layout/fragment_ranking.xml @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/like_check_cons.xml b/app/src/main/res/layout/like_check_cons.xml new file mode 100644 index 0000000..a6ad844 --- /dev/null +++ b/app/src/main/res/layout/like_check_cons.xml @@ -0,0 +1,32 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/like_list.xml b/app/src/main/res/layout/like_list.xml new file mode 100644 index 0000000..bd9d159 --- /dev/null +++ b/app/src/main/res/layout/like_list.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/like_uncheck_cons.xml b/app/src/main/res/layout/like_uncheck_cons.xml new file mode 100644 index 0000000..17e8e60 --- /dev/null +++ b/app/src/main/res/layout/like_uncheck_cons.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/list_rv_item.xml b/app/src/main/res/layout/list_rv_item.xml new file mode 100644 index 0000000..2ab16ca --- /dev/null +++ b/app/src/main/res/layout/list_rv_item.xml @@ -0,0 +1,35 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/main_check_cons.xml b/app/src/main/res/layout/main_check_cons.xml new file mode 100644 index 0000000..4e553b9 --- /dev/null +++ b/app/src/main/res/layout/main_check_cons.xml @@ -0,0 +1,31 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/main_rv_item.xml b/app/src/main/res/layout/main_rv_item.xml new file mode 100644 index 0000000..ed52649 --- /dev/null +++ b/app/src/main/res/layout/main_rv_item.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/main_uncheck_cons.xml b/app/src/main/res/layout/main_uncheck_cons.xml new file mode 100644 index 0000000..f519906 --- /dev/null +++ b/app/src/main/res/layout/main_uncheck_cons.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/rank_check_cons.xml b/app/src/main/res/layout/rank_check_cons.xml new file mode 100644 index 0000000..e9c6a05 --- /dev/null +++ b/app/src/main/res/layout/rank_check_cons.xml @@ -0,0 +1,31 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/rank_list.xml b/app/src/main/res/layout/rank_list.xml new file mode 100644 index 0000000..0375440 --- /dev/null +++ b/app/src/main/res/layout/rank_list.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/rank_uncheck_cons.xml b/app/src/main/res/layout/rank_uncheck_cons.xml new file mode 100644 index 0000000..d9d4e1f --- /dev/null +++ b/app/src/main/res/layout/rank_uncheck_cons.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file 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-xhdpi/splash_bg_15x.png b/app/src/main/res/mipmap-xhdpi/splash_bg_15x.png new file mode 100644 index 0000000..696e635 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/splash_bg_15x.png 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-xxhdpi/splash_bg_2x.png b/app/src/main/res/mipmap-xxhdpi/splash_bg_2x.png new file mode 100644 index 0000000..9bd03f4 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/splash_bg_2x.png 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/like_hint_image.png b/app/src/main/res/mipmap-xxxhdpi/like_hint_image.png new file mode 100644 index 0000000..5e06483 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/like_hint_image.png 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..75e10a5 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/logo.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/pre_image_bg.png b/app/src/main/res/mipmap-xxxhdpi/pre_image_bg.png new file mode 100644 index 0000000..7dd02a2 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/pre_image_bg.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/rank_bg1.png b/app/src/main/res/mipmap-xxxhdpi/rank_bg1.png new file mode 100644 index 0000000..8707ad1 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/rank_bg1.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/rank_bg2.png b/app/src/main/res/mipmap-xxxhdpi/rank_bg2.png new file mode 100644 index 0000000..af54180 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/rank_bg2.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/rank_bg3.png b/app/src/main/res/mipmap-xxxhdpi/rank_bg3.png new file mode 100644 index 0000000..7d68a8d Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/rank_bg3.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/rank_image_bg_1.png b/app/src/main/res/mipmap-xxxhdpi/rank_image_bg_1.png new file mode 100644 index 0000000..f9b7968 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/rank_image_bg_1.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/rank_image_bg_2.png b/app/src/main/res/mipmap-xxxhdpi/rank_image_bg_2.png new file mode 100644 index 0000000..1edfdfd Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/rank_image_bg_2.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/rank_image_bg_3.png b/app/src/main/res/mipmap-xxxhdpi/rank_image_bg_3.png new file mode 100644 index 0000000..8f9b2e1 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/rank_image_bg_3.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/rank_image_bg_4.png b/app/src/main/res/mipmap-xxxhdpi/rank_image_bg_4.png new file mode 100644 index 0000000..d8746ab Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/rank_image_bg_4.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/save_image.png b/app/src/main/res/mipmap-xxxhdpi/save_image.png new file mode 100644 index 0000000..a5d1f48 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/save_image.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/splash_bg.png b/app/src/main/res/mipmap-xxxhdpi/splash_bg.png new file mode 100644 index 0000000..ef173f4 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/splash_bg.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..6a08e6e --- /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..8fd7254 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,19 @@ + + + #FF000000 + #FFFFFFFF + #F0ECFF + #613EEA + #DED6FF + #9D9BFF + #FF689D + #FAC36C + #0ADBCE + #11C785 + #FE774B + #8768FF + #D8D8D8 + #A7A7A7 + #8768FF + #AA94FD + \ 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..00ccccd --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,30 @@ + + Air Horn Prank + + Hello blank fragment + Settings + Home + Radio + Favorite + There\'s no sound you like right now. \n Browse the front page. + No files are present at the moment. \n Let\'s create one now. + Add sound + Adding sound + Import audio + Record sound + New Record + Create sound + Stop create + Save sound + 00 : 00 : 00 + Successfully save + Please enter the content + Give your created sound a name + Privacy and security + Share + Rate + Version Number + Here is a Air Horn Prank + https://chatgpt.com/ + Ranking + \ 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..05a6676 --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,15 @@ + + + + + + \ 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..fa0f996 --- /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/test/java/com/fun/airhornprank/ExampleUnitTest.java b/app/src/test/java/com/fun/airhornprank/ExampleUnitTest.java new file mode 100644 index 0000000..6509ebc --- /dev/null +++ b/app/src/test/java/com/fun/airhornprank/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.fun.airhornprank; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void 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..1bc1d16 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,5 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +plugins { + id("com.android.application") version "8.1.3" apply false + id("org.jetbrains.kotlin.android") version "1.9.0" apply false +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..3e927b1 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,21 @@ +# 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. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec: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 +# 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/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..a0b5661 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Wed Jul 31 10:28:15 CST 2024 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-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/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..064b40e --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,18 @@ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} + +rootProject.name = "Air Horn Prank" +include(":app") + \ No newline at end of file