commit 048673a261391fe358eca67cb53c8bbba8d72665
Author: ocean <503259349@qq.com>
Date: Mon Dec 29 15:06:10 2025 +0800
first commit
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..aa724b7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,15 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+.cxx
+local.properties
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..eaf91e2
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..8543d21
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+CakePainting Helper
\ No newline at end of file
diff --git a/.idea/AndroidProjectSystem.xml b/.idea/AndroidProjectSystem.xml
new file mode 100644
index 0000000..d58d49b
--- /dev/null
+++ b/.idea/AndroidProjectSystem.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..8b3f102
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml
new file mode 100644
index 0000000..0a53a4a
--- /dev/null
+++ b/.idea/dbnavigator.xml
@@ -0,0 +1,440 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
new file mode 100644
index 0000000..df8cccd
--- /dev/null
+++ b/.idea/deploymentTargetSelector.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/deviceManager.xml b/.idea/deviceManager.xml
new file mode 100644
index 0000000..81c3e56
--- /dev/null
+++ b/.idea/deviceManager.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000..d852598
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
new file mode 100644
index 0000000..2a5f53f
--- /dev/null
+++ b/.idea/kotlinc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/migrations.xml b/.idea/migrations.xml
new file mode 100644
index 0000000..48052b2
--- /dev/null
+++ b/.idea/migrations.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..e756225
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 0000000..5bd6771
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
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/CakePaintingHelper b/app/CakePaintingHelper
new file mode 100644
index 0000000..b488dfa
Binary files /dev/null and b/app/CakePaintingHelper differ
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
new file mode 100644
index 0000000..a272ab2
--- /dev/null
+++ b/app/build.gradle.kts
@@ -0,0 +1,110 @@
+
+import java.util.Date
+import java.text.SimpleDateFormat
+plugins {
+ id("com.android.application")
+ id ("org.jetbrains.kotlin.android")
+ id("com.google.gms.google-services")
+ id("com.google.firebase.crashlytics")
+}
+val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date())
+android {
+ namespace = "com.cake.draw.painting"
+ compileSdk = 36
+
+ defaultConfig {
+ applicationId = "com.cake.draw.painting"
+ minSdk = 24
+ targetSdk = 36
+ versionCode = 2
+ versionName = "1.1"
+ setProperty("archivesBaseName", "CakePainting Helper_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_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ }
+ kotlinOptions {
+ jvmTarget = "1.8"
+ }
+ buildFeatures{
+ viewBinding = true
+ dataBinding = true
+ }
+}
+
+dependencies {
+
+ implementation("androidx.appcompat:appcompat:1.7.1")
+ implementation("com.google.android.material:material:1.13.0")
+ implementation("androidx.constraintlayout:constraintlayout:2.1.4")
+ implementation("androidx.activity:activity:1.12.1")
+ testImplementation("junit:junit:4.13.2")
+ androidTestImplementation("androidx.test.ext:junit:1.1.5")
+ androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
+
+ val camerax_version = "1.5.1"
+ implementation ("androidx.camera:camera-core:${camerax_version}")
+ implementation ("androidx.camera:camera-camera2:${camerax_version}")
+ implementation ("androidx.camera:camera-lifecycle:${camerax_version}")
+ implementation ("androidx.camera:camera-view:${camerax_version}")
+ implementation ("androidx.camera:camera-extensions:${camerax_version}")
+
+ implementation(files("libs/UpLoadLibrary_12_03_15_13-release.aar"))
+ implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
+ implementation("com.google.android.gms:play-services-ads-identifier:18.0.1")
+ implementation("com.google.android.gms:play-services-location:21.0.1")
+ implementation("com.google.android.gms:play-services-appset:16.0.1")
+ // Import the Firebase BoM
+ implementation(platform("com.google.firebase:firebase-bom:34.6.0"))
+ implementation("com.google.firebase:firebase-crashlytics-ndk")
+ implementation("com.google.firebase:firebase-analytics")
+ // okhttp
+ implementation ("com.squareup.okhttp3:okhttp:4.12.0")
+ implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")
+
+ // TradPlus
+ implementation("com.tradplusad:tradplus:15.1.10.1")
+//noinspection GradleCompatible
+ implementation("androidx.legacy:legacy-support-v4:1.0.0")
+ implementation("androidx.appcompat:appcompat:1.3.0-alpha02")
+// Ironsource
+ implementation("com.ironsource.sdk:mediationsdk:9.0.0")
+ implementation("com.tradplusad:tradplus-ironsource:10.15.1.10.1")
+// Pangle
+ implementation("com.tradplusad:tradplus-pangle:19.15.1.10.1")
+ implementation("com.pangle.global:pag-sdk:7.7.0.2")
+// UnityAds
+ implementation("com.tradplusad:tradplus-unity:5.15.1.10.1")
+ implementation("com.unity3d.ads:unity-ads:4.16.3")
+//optional dependency for better targeting
+ implementation("androidx.browser:browser:1.8.0")
+ implementation("com.squareup.picasso:picasso:2.8")
+ implementation("androidx.viewpager:viewpager:1.0.0")
+ implementation("androidx.recyclerview:recyclerview:1.2.1")
+// Mintegral
+ implementation("com.tradplusad:tradplus-mintegralx_overseas:18.15.1.10.1")
+ implementation("androidx.recyclerview:recyclerview:1.1.0")
+ implementation("com.mbridge.msdk.oversea:mbridge_android_sdk:16.10.11")
+// Liftoff
+ implementation("com.tradplusad:tradplus-vunglex:7.15.1.10.1")
+ implementation("com.vungle:vungle-ads:7.6.0")
+// Cross Promotion
+ implementation("com.tradplusad:tradplus-crosspromotion:27.15.1.10.1")
+// TP Exchange
+// 请注意保持与主包版本同步更新
+ implementation("com.google.code.gson:gson:2.8.6")
+ implementation("com.tradplusad:tp_exchange:40.15.1.10.1")
+
+}
\ No newline at end of file
diff --git a/app/google-services.json b/app/google-services.json
new file mode 100644
index 0000000..934c36b
--- /dev/null
+++ b/app/google-services.json
@@ -0,0 +1,29 @@
+{
+ "project_info": {
+ "project_number": "582920979346",
+ "project_id": "cakepaintinghelper",
+ "storage_bucket": "cakepaintinghelper.firebasestorage.app"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:582920979346:android:4c49925065c80d273ab74b",
+ "android_client_info": {
+ "package_name": "com.cake.draw.painting"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyB4KspWeLdYj71pYY9d0iehqV7Hlq1dX3k"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/app/libs/UpLoadLibrary_12_03_15_13-release.aar b/app/libs/UpLoadLibrary_12_03_15_13-release.aar
new file mode 100644
index 0000000..a3e30aa
Binary files /dev/null and b/app/libs/UpLoadLibrary_12_03_15_13-release.aar differ
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000..7cf0db3
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,23 @@
+# 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
+-keep public class com.tradplus.** { *; }
+-keep class com.tradplus.ads.** { *; }
diff --git a/app/src/androidTest/java/com/draw/painting/test/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/draw/painting/test/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..6d6b1ff
--- /dev/null
+++ b/app/src/androidTest/java/com/draw/painting/test/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.draw.painting.test;
+
+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.draw.painting.test", 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..a23d012
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/assets/png_Animals/1.jpg b/app/src/main/assets/png_Animals/1.jpg
new file mode 100644
index 0000000..9488c65
Binary files /dev/null and b/app/src/main/assets/png_Animals/1.jpg differ
diff --git a/app/src/main/assets/png_Animals/10.jpg b/app/src/main/assets/png_Animals/10.jpg
new file mode 100644
index 0000000..78382a4
Binary files /dev/null and b/app/src/main/assets/png_Animals/10.jpg differ
diff --git a/app/src/main/assets/png_Animals/11.jpg b/app/src/main/assets/png_Animals/11.jpg
new file mode 100644
index 0000000..a4f7512
Binary files /dev/null and b/app/src/main/assets/png_Animals/11.jpg differ
diff --git a/app/src/main/assets/png_Animals/12.jpg b/app/src/main/assets/png_Animals/12.jpg
new file mode 100644
index 0000000..bab3cff
Binary files /dev/null and b/app/src/main/assets/png_Animals/12.jpg differ
diff --git a/app/src/main/assets/png_Animals/13.jpg b/app/src/main/assets/png_Animals/13.jpg
new file mode 100644
index 0000000..5c3ef19
Binary files /dev/null and b/app/src/main/assets/png_Animals/13.jpg differ
diff --git a/app/src/main/assets/png_Animals/14.jpg b/app/src/main/assets/png_Animals/14.jpg
new file mode 100644
index 0000000..8b446f2
Binary files /dev/null and b/app/src/main/assets/png_Animals/14.jpg differ
diff --git a/app/src/main/assets/png_Animals/15.jpg b/app/src/main/assets/png_Animals/15.jpg
new file mode 100644
index 0000000..2f9dc4e
Binary files /dev/null and b/app/src/main/assets/png_Animals/15.jpg differ
diff --git a/app/src/main/assets/png_Animals/16.jpg b/app/src/main/assets/png_Animals/16.jpg
new file mode 100644
index 0000000..aad9788
Binary files /dev/null and b/app/src/main/assets/png_Animals/16.jpg differ
diff --git a/app/src/main/assets/png_Animals/17.jpg b/app/src/main/assets/png_Animals/17.jpg
new file mode 100644
index 0000000..17c6f07
Binary files /dev/null and b/app/src/main/assets/png_Animals/17.jpg differ
diff --git a/app/src/main/assets/png_Animals/18.jpg b/app/src/main/assets/png_Animals/18.jpg
new file mode 100644
index 0000000..2ce93a7
Binary files /dev/null and b/app/src/main/assets/png_Animals/18.jpg differ
diff --git a/app/src/main/assets/png_Animals/19.jpg b/app/src/main/assets/png_Animals/19.jpg
new file mode 100644
index 0000000..2b24f31
Binary files /dev/null and b/app/src/main/assets/png_Animals/19.jpg differ
diff --git a/app/src/main/assets/png_Animals/2.jpg b/app/src/main/assets/png_Animals/2.jpg
new file mode 100644
index 0000000..0a0c2e7
Binary files /dev/null and b/app/src/main/assets/png_Animals/2.jpg differ
diff --git a/app/src/main/assets/png_Animals/20.jpg b/app/src/main/assets/png_Animals/20.jpg
new file mode 100644
index 0000000..347cddc
Binary files /dev/null and b/app/src/main/assets/png_Animals/20.jpg differ
diff --git a/app/src/main/assets/png_Animals/21.jpg b/app/src/main/assets/png_Animals/21.jpg
new file mode 100644
index 0000000..5a04764
Binary files /dev/null and b/app/src/main/assets/png_Animals/21.jpg differ
diff --git a/app/src/main/assets/png_Animals/22.jpg b/app/src/main/assets/png_Animals/22.jpg
new file mode 100644
index 0000000..c18d8ad
Binary files /dev/null and b/app/src/main/assets/png_Animals/22.jpg differ
diff --git a/app/src/main/assets/png_Animals/23.jpg b/app/src/main/assets/png_Animals/23.jpg
new file mode 100644
index 0000000..4270d19
Binary files /dev/null and b/app/src/main/assets/png_Animals/23.jpg differ
diff --git a/app/src/main/assets/png_Animals/24.jpg b/app/src/main/assets/png_Animals/24.jpg
new file mode 100644
index 0000000..355a944
Binary files /dev/null and b/app/src/main/assets/png_Animals/24.jpg differ
diff --git a/app/src/main/assets/png_Animals/25.jpg b/app/src/main/assets/png_Animals/25.jpg
new file mode 100644
index 0000000..c670943
Binary files /dev/null and b/app/src/main/assets/png_Animals/25.jpg differ
diff --git a/app/src/main/assets/png_Animals/26.jpg b/app/src/main/assets/png_Animals/26.jpg
new file mode 100644
index 0000000..4b95b01
Binary files /dev/null and b/app/src/main/assets/png_Animals/26.jpg differ
diff --git a/app/src/main/assets/png_Animals/27.jpg b/app/src/main/assets/png_Animals/27.jpg
new file mode 100644
index 0000000..87a8c12
Binary files /dev/null and b/app/src/main/assets/png_Animals/27.jpg differ
diff --git a/app/src/main/assets/png_Animals/28.jpg b/app/src/main/assets/png_Animals/28.jpg
new file mode 100644
index 0000000..770686a
Binary files /dev/null and b/app/src/main/assets/png_Animals/28.jpg differ
diff --git a/app/src/main/assets/png_Animals/29.jpg b/app/src/main/assets/png_Animals/29.jpg
new file mode 100644
index 0000000..7127a11
Binary files /dev/null and b/app/src/main/assets/png_Animals/29.jpg differ
diff --git a/app/src/main/assets/png_Animals/3.jpg b/app/src/main/assets/png_Animals/3.jpg
new file mode 100644
index 0000000..4bf4897
Binary files /dev/null and b/app/src/main/assets/png_Animals/3.jpg differ
diff --git a/app/src/main/assets/png_Animals/30.jpg b/app/src/main/assets/png_Animals/30.jpg
new file mode 100644
index 0000000..f1d2047
Binary files /dev/null and b/app/src/main/assets/png_Animals/30.jpg differ
diff --git a/app/src/main/assets/png_Animals/31.jpg b/app/src/main/assets/png_Animals/31.jpg
new file mode 100644
index 0000000..0d08aa8
Binary files /dev/null and b/app/src/main/assets/png_Animals/31.jpg differ
diff --git a/app/src/main/assets/png_Animals/4.jpg b/app/src/main/assets/png_Animals/4.jpg
new file mode 100644
index 0000000..838c582
Binary files /dev/null and b/app/src/main/assets/png_Animals/4.jpg differ
diff --git a/app/src/main/assets/png_Animals/5.jpg b/app/src/main/assets/png_Animals/5.jpg
new file mode 100644
index 0000000..36bd2bf
Binary files /dev/null and b/app/src/main/assets/png_Animals/5.jpg differ
diff --git a/app/src/main/assets/png_Animals/6.jpg b/app/src/main/assets/png_Animals/6.jpg
new file mode 100644
index 0000000..dceb49b
Binary files /dev/null and b/app/src/main/assets/png_Animals/6.jpg differ
diff --git a/app/src/main/assets/png_Animals/7.jpg b/app/src/main/assets/png_Animals/7.jpg
new file mode 100644
index 0000000..ebd4694
Binary files /dev/null and b/app/src/main/assets/png_Animals/7.jpg differ
diff --git a/app/src/main/assets/png_Animals/8.jpg b/app/src/main/assets/png_Animals/8.jpg
new file mode 100644
index 0000000..e5e3c63
Binary files /dev/null and b/app/src/main/assets/png_Animals/8.jpg differ
diff --git a/app/src/main/assets/png_Animals/9.jpg b/app/src/main/assets/png_Animals/9.jpg
new file mode 100644
index 0000000..e7a1862
Binary files /dev/null and b/app/src/main/assets/png_Animals/9.jpg differ
diff --git a/app/src/main/assets/png_Birds/1.jpg b/app/src/main/assets/png_Birds/1.jpg
new file mode 100644
index 0000000..d235225
Binary files /dev/null and b/app/src/main/assets/png_Birds/1.jpg differ
diff --git a/app/src/main/assets/png_Birds/10.jpg b/app/src/main/assets/png_Birds/10.jpg
new file mode 100644
index 0000000..e348ffe
Binary files /dev/null and b/app/src/main/assets/png_Birds/10.jpg differ
diff --git a/app/src/main/assets/png_Birds/11.jpg b/app/src/main/assets/png_Birds/11.jpg
new file mode 100644
index 0000000..921b5b9
Binary files /dev/null and b/app/src/main/assets/png_Birds/11.jpg differ
diff --git a/app/src/main/assets/png_Birds/12.jpg b/app/src/main/assets/png_Birds/12.jpg
new file mode 100644
index 0000000..7b4055b
Binary files /dev/null and b/app/src/main/assets/png_Birds/12.jpg differ
diff --git a/app/src/main/assets/png_Birds/13.jpg b/app/src/main/assets/png_Birds/13.jpg
new file mode 100644
index 0000000..021b7a4
Binary files /dev/null and b/app/src/main/assets/png_Birds/13.jpg differ
diff --git a/app/src/main/assets/png_Birds/14.jpg b/app/src/main/assets/png_Birds/14.jpg
new file mode 100644
index 0000000..2074c6f
Binary files /dev/null and b/app/src/main/assets/png_Birds/14.jpg differ
diff --git a/app/src/main/assets/png_Birds/15.jpg b/app/src/main/assets/png_Birds/15.jpg
new file mode 100644
index 0000000..59b0e47
Binary files /dev/null and b/app/src/main/assets/png_Birds/15.jpg differ
diff --git a/app/src/main/assets/png_Birds/16.jpg b/app/src/main/assets/png_Birds/16.jpg
new file mode 100644
index 0000000..fe950d1
Binary files /dev/null and b/app/src/main/assets/png_Birds/16.jpg differ
diff --git a/app/src/main/assets/png_Birds/17.jpg b/app/src/main/assets/png_Birds/17.jpg
new file mode 100644
index 0000000..484f39a
Binary files /dev/null and b/app/src/main/assets/png_Birds/17.jpg differ
diff --git a/app/src/main/assets/png_Birds/18.jpg b/app/src/main/assets/png_Birds/18.jpg
new file mode 100644
index 0000000..2792ed1
Binary files /dev/null and b/app/src/main/assets/png_Birds/18.jpg differ
diff --git a/app/src/main/assets/png_Birds/19.jpg b/app/src/main/assets/png_Birds/19.jpg
new file mode 100644
index 0000000..9e9bb27
Binary files /dev/null and b/app/src/main/assets/png_Birds/19.jpg differ
diff --git a/app/src/main/assets/png_Birds/2.jpg b/app/src/main/assets/png_Birds/2.jpg
new file mode 100644
index 0000000..0929272
Binary files /dev/null and b/app/src/main/assets/png_Birds/2.jpg differ
diff --git a/app/src/main/assets/png_Birds/3.jpg b/app/src/main/assets/png_Birds/3.jpg
new file mode 100644
index 0000000..1376a50
Binary files /dev/null and b/app/src/main/assets/png_Birds/3.jpg differ
diff --git a/app/src/main/assets/png_Birds/4.jpg b/app/src/main/assets/png_Birds/4.jpg
new file mode 100644
index 0000000..1cd8f9c
Binary files /dev/null and b/app/src/main/assets/png_Birds/4.jpg differ
diff --git a/app/src/main/assets/png_Birds/5.jpg b/app/src/main/assets/png_Birds/5.jpg
new file mode 100644
index 0000000..7637589
Binary files /dev/null and b/app/src/main/assets/png_Birds/5.jpg differ
diff --git a/app/src/main/assets/png_Birds/6.jpg b/app/src/main/assets/png_Birds/6.jpg
new file mode 100644
index 0000000..3bf16b6
Binary files /dev/null and b/app/src/main/assets/png_Birds/6.jpg differ
diff --git a/app/src/main/assets/png_Birds/7.jpg b/app/src/main/assets/png_Birds/7.jpg
new file mode 100644
index 0000000..076e51d
Binary files /dev/null and b/app/src/main/assets/png_Birds/7.jpg differ
diff --git a/app/src/main/assets/png_Birds/8.jpg b/app/src/main/assets/png_Birds/8.jpg
new file mode 100644
index 0000000..71f5cf7
Binary files /dev/null and b/app/src/main/assets/png_Birds/8.jpg differ
diff --git a/app/src/main/assets/png_Birds/9.jpg b/app/src/main/assets/png_Birds/9.jpg
new file mode 100644
index 0000000..8767032
Binary files /dev/null and b/app/src/main/assets/png_Birds/9.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/1.jpg b/app/src/main/assets/png_Butterfly/1.jpg
new file mode 100644
index 0000000..0d713b7
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/1.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/10.jpg b/app/src/main/assets/png_Butterfly/10.jpg
new file mode 100644
index 0000000..ae497c8
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/10.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/11.jpg b/app/src/main/assets/png_Butterfly/11.jpg
new file mode 100644
index 0000000..d2e39ef
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/11.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/12.jpg b/app/src/main/assets/png_Butterfly/12.jpg
new file mode 100644
index 0000000..410af7c
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/12.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/13.jpg b/app/src/main/assets/png_Butterfly/13.jpg
new file mode 100644
index 0000000..233a998
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/13.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/14.jpg b/app/src/main/assets/png_Butterfly/14.jpg
new file mode 100644
index 0000000..9545c0f
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/14.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/15.jpg b/app/src/main/assets/png_Butterfly/15.jpg
new file mode 100644
index 0000000..aa0da5b
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/15.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/16.jpg b/app/src/main/assets/png_Butterfly/16.jpg
new file mode 100644
index 0000000..4b118cf
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/16.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/17.jpg b/app/src/main/assets/png_Butterfly/17.jpg
new file mode 100644
index 0000000..ebfdc2e
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/17.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/18.jpg b/app/src/main/assets/png_Butterfly/18.jpg
new file mode 100644
index 0000000..7b81ca1
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/18.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/19.jpg b/app/src/main/assets/png_Butterfly/19.jpg
new file mode 100644
index 0000000..903fd82
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/19.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/2.jpg b/app/src/main/assets/png_Butterfly/2.jpg
new file mode 100644
index 0000000..f92c438
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/2.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/20.jpg b/app/src/main/assets/png_Butterfly/20.jpg
new file mode 100644
index 0000000..7d0dc2e
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/20.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/21.jpg b/app/src/main/assets/png_Butterfly/21.jpg
new file mode 100644
index 0000000..ff82d93
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/21.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/3.jpg b/app/src/main/assets/png_Butterfly/3.jpg
new file mode 100644
index 0000000..5251134
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/3.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/4.jpg b/app/src/main/assets/png_Butterfly/4.jpg
new file mode 100644
index 0000000..01d5932
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/4.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/5.jpg b/app/src/main/assets/png_Butterfly/5.jpg
new file mode 100644
index 0000000..cc99ed5
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/5.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/6.jpg b/app/src/main/assets/png_Butterfly/6.jpg
new file mode 100644
index 0000000..6d02805
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/6.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/7.jpg b/app/src/main/assets/png_Butterfly/7.jpg
new file mode 100644
index 0000000..dd52dbd
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/7.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/8.jpg b/app/src/main/assets/png_Butterfly/8.jpg
new file mode 100644
index 0000000..d519ca7
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/8.jpg differ
diff --git a/app/src/main/assets/png_Butterfly/9.jpg b/app/src/main/assets/png_Butterfly/9.jpg
new file mode 100644
index 0000000..0cedb47
Binary files /dev/null and b/app/src/main/assets/png_Butterfly/9.jpg differ
diff --git a/app/src/main/assets/png_Cafe/1.jpg b/app/src/main/assets/png_Cafe/1.jpg
new file mode 100644
index 0000000..b347b44
Binary files /dev/null and b/app/src/main/assets/png_Cafe/1.jpg differ
diff --git a/app/src/main/assets/png_Cafe/10.jpg b/app/src/main/assets/png_Cafe/10.jpg
new file mode 100644
index 0000000..3728490
Binary files /dev/null and b/app/src/main/assets/png_Cafe/10.jpg differ
diff --git a/app/src/main/assets/png_Cafe/11.jpg b/app/src/main/assets/png_Cafe/11.jpg
new file mode 100644
index 0000000..bff21e1
Binary files /dev/null and b/app/src/main/assets/png_Cafe/11.jpg differ
diff --git a/app/src/main/assets/png_Cafe/12.jpg b/app/src/main/assets/png_Cafe/12.jpg
new file mode 100644
index 0000000..3966d4a
Binary files /dev/null and b/app/src/main/assets/png_Cafe/12.jpg differ
diff --git a/app/src/main/assets/png_Cafe/13.jpg b/app/src/main/assets/png_Cafe/13.jpg
new file mode 100644
index 0000000..8200e12
Binary files /dev/null and b/app/src/main/assets/png_Cafe/13.jpg differ
diff --git a/app/src/main/assets/png_Cafe/14.jpg b/app/src/main/assets/png_Cafe/14.jpg
new file mode 100644
index 0000000..65ee383
Binary files /dev/null and b/app/src/main/assets/png_Cafe/14.jpg differ
diff --git a/app/src/main/assets/png_Cafe/15.jpg b/app/src/main/assets/png_Cafe/15.jpg
new file mode 100644
index 0000000..01df5e5
Binary files /dev/null and b/app/src/main/assets/png_Cafe/15.jpg differ
diff --git a/app/src/main/assets/png_Cafe/16.jpg b/app/src/main/assets/png_Cafe/16.jpg
new file mode 100644
index 0000000..ff679c1
Binary files /dev/null and b/app/src/main/assets/png_Cafe/16.jpg differ
diff --git a/app/src/main/assets/png_Cafe/17.jpg b/app/src/main/assets/png_Cafe/17.jpg
new file mode 100644
index 0000000..42fdf87
Binary files /dev/null and b/app/src/main/assets/png_Cafe/17.jpg differ
diff --git a/app/src/main/assets/png_Cafe/18.jpg b/app/src/main/assets/png_Cafe/18.jpg
new file mode 100644
index 0000000..06d300e
Binary files /dev/null and b/app/src/main/assets/png_Cafe/18.jpg differ
diff --git a/app/src/main/assets/png_Cafe/19.jpg b/app/src/main/assets/png_Cafe/19.jpg
new file mode 100644
index 0000000..42aaa2c
Binary files /dev/null and b/app/src/main/assets/png_Cafe/19.jpg differ
diff --git a/app/src/main/assets/png_Cafe/2.jpg b/app/src/main/assets/png_Cafe/2.jpg
new file mode 100644
index 0000000..14d9b25
Binary files /dev/null and b/app/src/main/assets/png_Cafe/2.jpg differ
diff --git a/app/src/main/assets/png_Cafe/20.jpg b/app/src/main/assets/png_Cafe/20.jpg
new file mode 100644
index 0000000..5dad84c
Binary files /dev/null and b/app/src/main/assets/png_Cafe/20.jpg differ
diff --git a/app/src/main/assets/png_Cafe/21.jpg b/app/src/main/assets/png_Cafe/21.jpg
new file mode 100644
index 0000000..c019faa
Binary files /dev/null and b/app/src/main/assets/png_Cafe/21.jpg differ
diff --git a/app/src/main/assets/png_Cafe/22.jpg b/app/src/main/assets/png_Cafe/22.jpg
new file mode 100644
index 0000000..28cdc4e
Binary files /dev/null and b/app/src/main/assets/png_Cafe/22.jpg differ
diff --git a/app/src/main/assets/png_Cafe/23.jpg b/app/src/main/assets/png_Cafe/23.jpg
new file mode 100644
index 0000000..973a5c2
Binary files /dev/null and b/app/src/main/assets/png_Cafe/23.jpg differ
diff --git a/app/src/main/assets/png_Cafe/24.jpg b/app/src/main/assets/png_Cafe/24.jpg
new file mode 100644
index 0000000..3c36d8a
Binary files /dev/null and b/app/src/main/assets/png_Cafe/24.jpg differ
diff --git a/app/src/main/assets/png_Cafe/25.jpg b/app/src/main/assets/png_Cafe/25.jpg
new file mode 100644
index 0000000..c7be496
Binary files /dev/null and b/app/src/main/assets/png_Cafe/25.jpg differ
diff --git a/app/src/main/assets/png_Cafe/26.jpg b/app/src/main/assets/png_Cafe/26.jpg
new file mode 100644
index 0000000..7229696
Binary files /dev/null and b/app/src/main/assets/png_Cafe/26.jpg differ
diff --git a/app/src/main/assets/png_Cafe/27.jpg b/app/src/main/assets/png_Cafe/27.jpg
new file mode 100644
index 0000000..f857542
Binary files /dev/null and b/app/src/main/assets/png_Cafe/27.jpg differ
diff --git a/app/src/main/assets/png_Cafe/28.jpg b/app/src/main/assets/png_Cafe/28.jpg
new file mode 100644
index 0000000..8cde6de
Binary files /dev/null and b/app/src/main/assets/png_Cafe/28.jpg differ
diff --git a/app/src/main/assets/png_Cafe/29.jpg b/app/src/main/assets/png_Cafe/29.jpg
new file mode 100644
index 0000000..8affd30
Binary files /dev/null and b/app/src/main/assets/png_Cafe/29.jpg differ
diff --git a/app/src/main/assets/png_Cafe/3.jpg b/app/src/main/assets/png_Cafe/3.jpg
new file mode 100644
index 0000000..b1c3cfa
Binary files /dev/null and b/app/src/main/assets/png_Cafe/3.jpg differ
diff --git a/app/src/main/assets/png_Cafe/30.jpg b/app/src/main/assets/png_Cafe/30.jpg
new file mode 100644
index 0000000..f71ce84
Binary files /dev/null and b/app/src/main/assets/png_Cafe/30.jpg differ
diff --git a/app/src/main/assets/png_Cafe/31.jpg b/app/src/main/assets/png_Cafe/31.jpg
new file mode 100644
index 0000000..a5d22ca
Binary files /dev/null and b/app/src/main/assets/png_Cafe/31.jpg differ
diff --git a/app/src/main/assets/png_Cafe/32.jpg b/app/src/main/assets/png_Cafe/32.jpg
new file mode 100644
index 0000000..8513a5e
Binary files /dev/null and b/app/src/main/assets/png_Cafe/32.jpg differ
diff --git a/app/src/main/assets/png_Cafe/33.jpg b/app/src/main/assets/png_Cafe/33.jpg
new file mode 100644
index 0000000..fcdcbcc
Binary files /dev/null and b/app/src/main/assets/png_Cafe/33.jpg differ
diff --git a/app/src/main/assets/png_Cafe/34.jpg b/app/src/main/assets/png_Cafe/34.jpg
new file mode 100644
index 0000000..51bbf4b
Binary files /dev/null and b/app/src/main/assets/png_Cafe/34.jpg differ
diff --git a/app/src/main/assets/png_Cafe/35.jpg b/app/src/main/assets/png_Cafe/35.jpg
new file mode 100644
index 0000000..e1067da
Binary files /dev/null and b/app/src/main/assets/png_Cafe/35.jpg differ
diff --git a/app/src/main/assets/png_Cafe/36.jpg b/app/src/main/assets/png_Cafe/36.jpg
new file mode 100644
index 0000000..181a84a
Binary files /dev/null and b/app/src/main/assets/png_Cafe/36.jpg differ
diff --git a/app/src/main/assets/png_Cafe/37.jpg b/app/src/main/assets/png_Cafe/37.jpg
new file mode 100644
index 0000000..d8ffb00
Binary files /dev/null and b/app/src/main/assets/png_Cafe/37.jpg differ
diff --git a/app/src/main/assets/png_Cafe/38.jpg b/app/src/main/assets/png_Cafe/38.jpg
new file mode 100644
index 0000000..abdba50
Binary files /dev/null and b/app/src/main/assets/png_Cafe/38.jpg differ
diff --git a/app/src/main/assets/png_Cafe/4.jpg b/app/src/main/assets/png_Cafe/4.jpg
new file mode 100644
index 0000000..8792f16
Binary files /dev/null and b/app/src/main/assets/png_Cafe/4.jpg differ
diff --git a/app/src/main/assets/png_Cafe/5.jpg b/app/src/main/assets/png_Cafe/5.jpg
new file mode 100644
index 0000000..89630aa
Binary files /dev/null and b/app/src/main/assets/png_Cafe/5.jpg differ
diff --git a/app/src/main/assets/png_Cafe/6.jpg b/app/src/main/assets/png_Cafe/6.jpg
new file mode 100644
index 0000000..7e6832e
Binary files /dev/null and b/app/src/main/assets/png_Cafe/6.jpg differ
diff --git a/app/src/main/assets/png_Cafe/7.jpg b/app/src/main/assets/png_Cafe/7.jpg
new file mode 100644
index 0000000..f4d2afb
Binary files /dev/null and b/app/src/main/assets/png_Cafe/7.jpg differ
diff --git a/app/src/main/assets/png_Cafe/8.jpg b/app/src/main/assets/png_Cafe/8.jpg
new file mode 100644
index 0000000..78f5ccf
Binary files /dev/null and b/app/src/main/assets/png_Cafe/8.jpg differ
diff --git a/app/src/main/assets/png_Cafe/9.jpg b/app/src/main/assets/png_Cafe/9.jpg
new file mode 100644
index 0000000..4038bb5
Binary files /dev/null and b/app/src/main/assets/png_Cafe/9.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/1.jpg b/app/src/main/assets/png_Cartoons/1.jpg
new file mode 100644
index 0000000..74bf123
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/1.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/10.jpg b/app/src/main/assets/png_Cartoons/10.jpg
new file mode 100644
index 0000000..450fa6e
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/10.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/11.jpg b/app/src/main/assets/png_Cartoons/11.jpg
new file mode 100644
index 0000000..1f2a904
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/11.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/12.jpg b/app/src/main/assets/png_Cartoons/12.jpg
new file mode 100644
index 0000000..86ef206
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/12.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/13.jpg b/app/src/main/assets/png_Cartoons/13.jpg
new file mode 100644
index 0000000..92e1d75
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/13.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/14.jpg b/app/src/main/assets/png_Cartoons/14.jpg
new file mode 100644
index 0000000..c82e897
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/14.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/15.jpg b/app/src/main/assets/png_Cartoons/15.jpg
new file mode 100644
index 0000000..bcd8678
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/15.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/16.jpg b/app/src/main/assets/png_Cartoons/16.jpg
new file mode 100644
index 0000000..18377bd
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/16.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/17.jpg b/app/src/main/assets/png_Cartoons/17.jpg
new file mode 100644
index 0000000..45aafbb
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/17.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/18.jpg b/app/src/main/assets/png_Cartoons/18.jpg
new file mode 100644
index 0000000..048d253
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/18.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/19.jpg b/app/src/main/assets/png_Cartoons/19.jpg
new file mode 100644
index 0000000..c2501b2
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/19.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/2.jpg b/app/src/main/assets/png_Cartoons/2.jpg
new file mode 100644
index 0000000..8baf95b
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/2.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/20.jpg b/app/src/main/assets/png_Cartoons/20.jpg
new file mode 100644
index 0000000..fb7901c
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/20.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/21.jpg b/app/src/main/assets/png_Cartoons/21.jpg
new file mode 100644
index 0000000..ed7104e
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/21.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/22.jpg b/app/src/main/assets/png_Cartoons/22.jpg
new file mode 100644
index 0000000..cd003eb
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/22.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/23.jpg b/app/src/main/assets/png_Cartoons/23.jpg
new file mode 100644
index 0000000..77b49a4
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/23.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/24.jpg b/app/src/main/assets/png_Cartoons/24.jpg
new file mode 100644
index 0000000..1c7dc65
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/24.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/25.jpg b/app/src/main/assets/png_Cartoons/25.jpg
new file mode 100644
index 0000000..442aec2
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/25.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/26.jpg b/app/src/main/assets/png_Cartoons/26.jpg
new file mode 100644
index 0000000..ec4a2ff
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/26.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/3.jpg b/app/src/main/assets/png_Cartoons/3.jpg
new file mode 100644
index 0000000..e099902
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/3.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/4.jpg b/app/src/main/assets/png_Cartoons/4.jpg
new file mode 100644
index 0000000..a4c69ba
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/4.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/5.jpg b/app/src/main/assets/png_Cartoons/5.jpg
new file mode 100644
index 0000000..b32485d
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/5.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/6.jpg b/app/src/main/assets/png_Cartoons/6.jpg
new file mode 100644
index 0000000..0e0a7ef
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/6.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/7.jpg b/app/src/main/assets/png_Cartoons/7.jpg
new file mode 100644
index 0000000..ecd8dc0
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/7.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/8.jpg b/app/src/main/assets/png_Cartoons/8.jpg
new file mode 100644
index 0000000..f6ea587
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/8.jpg differ
diff --git a/app/src/main/assets/png_Cartoons/9.jpg b/app/src/main/assets/png_Cartoons/9.jpg
new file mode 100644
index 0000000..da4c151
Binary files /dev/null and b/app/src/main/assets/png_Cartoons/9.jpg differ
diff --git a/app/src/main/assets/png_Christmas/1.jpg b/app/src/main/assets/png_Christmas/1.jpg
new file mode 100644
index 0000000..cc1fafb
Binary files /dev/null and b/app/src/main/assets/png_Christmas/1.jpg differ
diff --git a/app/src/main/assets/png_Christmas/10.jpg b/app/src/main/assets/png_Christmas/10.jpg
new file mode 100644
index 0000000..e5e63d6
Binary files /dev/null and b/app/src/main/assets/png_Christmas/10.jpg differ
diff --git a/app/src/main/assets/png_Christmas/11.jpg b/app/src/main/assets/png_Christmas/11.jpg
new file mode 100644
index 0000000..cae5d66
Binary files /dev/null and b/app/src/main/assets/png_Christmas/11.jpg differ
diff --git a/app/src/main/assets/png_Christmas/12.jpg b/app/src/main/assets/png_Christmas/12.jpg
new file mode 100644
index 0000000..13fd21f
Binary files /dev/null and b/app/src/main/assets/png_Christmas/12.jpg differ
diff --git a/app/src/main/assets/png_Christmas/13.jpg b/app/src/main/assets/png_Christmas/13.jpg
new file mode 100644
index 0000000..1fa30fe
Binary files /dev/null and b/app/src/main/assets/png_Christmas/13.jpg differ
diff --git a/app/src/main/assets/png_Christmas/14.jpg b/app/src/main/assets/png_Christmas/14.jpg
new file mode 100644
index 0000000..aec6dcf
Binary files /dev/null and b/app/src/main/assets/png_Christmas/14.jpg differ
diff --git a/app/src/main/assets/png_Christmas/15.jpg b/app/src/main/assets/png_Christmas/15.jpg
new file mode 100644
index 0000000..647c8b6
Binary files /dev/null and b/app/src/main/assets/png_Christmas/15.jpg differ
diff --git a/app/src/main/assets/png_Christmas/16.jpg b/app/src/main/assets/png_Christmas/16.jpg
new file mode 100644
index 0000000..b36a79c
Binary files /dev/null and b/app/src/main/assets/png_Christmas/16.jpg differ
diff --git a/app/src/main/assets/png_Christmas/17.jpg b/app/src/main/assets/png_Christmas/17.jpg
new file mode 100644
index 0000000..2655af2
Binary files /dev/null and b/app/src/main/assets/png_Christmas/17.jpg differ
diff --git a/app/src/main/assets/png_Christmas/18.jpg b/app/src/main/assets/png_Christmas/18.jpg
new file mode 100644
index 0000000..e784d64
Binary files /dev/null and b/app/src/main/assets/png_Christmas/18.jpg differ
diff --git a/app/src/main/assets/png_Christmas/19.jpg b/app/src/main/assets/png_Christmas/19.jpg
new file mode 100644
index 0000000..fcf2085
Binary files /dev/null and b/app/src/main/assets/png_Christmas/19.jpg differ
diff --git a/app/src/main/assets/png_Christmas/2.jpg b/app/src/main/assets/png_Christmas/2.jpg
new file mode 100644
index 0000000..326e86b
Binary files /dev/null and b/app/src/main/assets/png_Christmas/2.jpg differ
diff --git a/app/src/main/assets/png_Christmas/20.jpg b/app/src/main/assets/png_Christmas/20.jpg
new file mode 100644
index 0000000..a9e3c89
Binary files /dev/null and b/app/src/main/assets/png_Christmas/20.jpg differ
diff --git a/app/src/main/assets/png_Christmas/21.jpg b/app/src/main/assets/png_Christmas/21.jpg
new file mode 100644
index 0000000..71b4150
Binary files /dev/null and b/app/src/main/assets/png_Christmas/21.jpg differ
diff --git a/app/src/main/assets/png_Christmas/22.jpg b/app/src/main/assets/png_Christmas/22.jpg
new file mode 100644
index 0000000..3c99d0d
Binary files /dev/null and b/app/src/main/assets/png_Christmas/22.jpg differ
diff --git a/app/src/main/assets/png_Christmas/23.jpg b/app/src/main/assets/png_Christmas/23.jpg
new file mode 100644
index 0000000..32c3b03
Binary files /dev/null and b/app/src/main/assets/png_Christmas/23.jpg differ
diff --git a/app/src/main/assets/png_Christmas/24.jpg b/app/src/main/assets/png_Christmas/24.jpg
new file mode 100644
index 0000000..80fd836
Binary files /dev/null and b/app/src/main/assets/png_Christmas/24.jpg differ
diff --git a/app/src/main/assets/png_Christmas/25.jpg b/app/src/main/assets/png_Christmas/25.jpg
new file mode 100644
index 0000000..8e2bef6
Binary files /dev/null and b/app/src/main/assets/png_Christmas/25.jpg differ
diff --git a/app/src/main/assets/png_Christmas/3.jpg b/app/src/main/assets/png_Christmas/3.jpg
new file mode 100644
index 0000000..4c24cd2
Binary files /dev/null and b/app/src/main/assets/png_Christmas/3.jpg differ
diff --git a/app/src/main/assets/png_Christmas/4.jpg b/app/src/main/assets/png_Christmas/4.jpg
new file mode 100644
index 0000000..28fb1b0
Binary files /dev/null and b/app/src/main/assets/png_Christmas/4.jpg differ
diff --git a/app/src/main/assets/png_Christmas/5.jpg b/app/src/main/assets/png_Christmas/5.jpg
new file mode 100644
index 0000000..93ad555
Binary files /dev/null and b/app/src/main/assets/png_Christmas/5.jpg differ
diff --git a/app/src/main/assets/png_Christmas/6.jpg b/app/src/main/assets/png_Christmas/6.jpg
new file mode 100644
index 0000000..02fe302
Binary files /dev/null and b/app/src/main/assets/png_Christmas/6.jpg differ
diff --git a/app/src/main/assets/png_Christmas/7.jpg b/app/src/main/assets/png_Christmas/7.jpg
new file mode 100644
index 0000000..dc41982
Binary files /dev/null and b/app/src/main/assets/png_Christmas/7.jpg differ
diff --git a/app/src/main/assets/png_Christmas/8.jpg b/app/src/main/assets/png_Christmas/8.jpg
new file mode 100644
index 0000000..5f13019
Binary files /dev/null and b/app/src/main/assets/png_Christmas/8.jpg differ
diff --git a/app/src/main/assets/png_Christmas/9.jpg b/app/src/main/assets/png_Christmas/9.jpg
new file mode 100644
index 0000000..e556980
Binary files /dev/null and b/app/src/main/assets/png_Christmas/9.jpg differ
diff --git a/app/src/main/assets/png_Festivals/1.jpg b/app/src/main/assets/png_Festivals/1.jpg
new file mode 100644
index 0000000..125d632
Binary files /dev/null and b/app/src/main/assets/png_Festivals/1.jpg differ
diff --git a/app/src/main/assets/png_Festivals/10.jpg b/app/src/main/assets/png_Festivals/10.jpg
new file mode 100644
index 0000000..d17b9f1
Binary files /dev/null and b/app/src/main/assets/png_Festivals/10.jpg differ
diff --git a/app/src/main/assets/png_Festivals/11.jpg b/app/src/main/assets/png_Festivals/11.jpg
new file mode 100644
index 0000000..702f052
Binary files /dev/null and b/app/src/main/assets/png_Festivals/11.jpg differ
diff --git a/app/src/main/assets/png_Festivals/12.jpg b/app/src/main/assets/png_Festivals/12.jpg
new file mode 100644
index 0000000..6f231e1
Binary files /dev/null and b/app/src/main/assets/png_Festivals/12.jpg differ
diff --git a/app/src/main/assets/png_Festivals/13.jpg b/app/src/main/assets/png_Festivals/13.jpg
new file mode 100644
index 0000000..20556a1
Binary files /dev/null and b/app/src/main/assets/png_Festivals/13.jpg differ
diff --git a/app/src/main/assets/png_Festivals/14.jpg b/app/src/main/assets/png_Festivals/14.jpg
new file mode 100644
index 0000000..fb78127
Binary files /dev/null and b/app/src/main/assets/png_Festivals/14.jpg differ
diff --git a/app/src/main/assets/png_Festivals/15.jpg b/app/src/main/assets/png_Festivals/15.jpg
new file mode 100644
index 0000000..e74f47e
Binary files /dev/null and b/app/src/main/assets/png_Festivals/15.jpg differ
diff --git a/app/src/main/assets/png_Festivals/16.jpg b/app/src/main/assets/png_Festivals/16.jpg
new file mode 100644
index 0000000..136f6e8
Binary files /dev/null and b/app/src/main/assets/png_Festivals/16.jpg differ
diff --git a/app/src/main/assets/png_Festivals/17.jpg b/app/src/main/assets/png_Festivals/17.jpg
new file mode 100644
index 0000000..fd50e67
Binary files /dev/null and b/app/src/main/assets/png_Festivals/17.jpg differ
diff --git a/app/src/main/assets/png_Festivals/18.jpg b/app/src/main/assets/png_Festivals/18.jpg
new file mode 100644
index 0000000..d3f7936
Binary files /dev/null and b/app/src/main/assets/png_Festivals/18.jpg differ
diff --git a/app/src/main/assets/png_Festivals/19.jpg b/app/src/main/assets/png_Festivals/19.jpg
new file mode 100644
index 0000000..9a4f1b8
Binary files /dev/null and b/app/src/main/assets/png_Festivals/19.jpg differ
diff --git a/app/src/main/assets/png_Festivals/2.jpg b/app/src/main/assets/png_Festivals/2.jpg
new file mode 100644
index 0000000..84aa31a
Binary files /dev/null and b/app/src/main/assets/png_Festivals/2.jpg differ
diff --git a/app/src/main/assets/png_Festivals/20.jpg b/app/src/main/assets/png_Festivals/20.jpg
new file mode 100644
index 0000000..268c943
Binary files /dev/null and b/app/src/main/assets/png_Festivals/20.jpg differ
diff --git a/app/src/main/assets/png_Festivals/21.jpg b/app/src/main/assets/png_Festivals/21.jpg
new file mode 100644
index 0000000..614bffd
Binary files /dev/null and b/app/src/main/assets/png_Festivals/21.jpg differ
diff --git a/app/src/main/assets/png_Festivals/22.jpg b/app/src/main/assets/png_Festivals/22.jpg
new file mode 100644
index 0000000..f81eb8d
Binary files /dev/null and b/app/src/main/assets/png_Festivals/22.jpg differ
diff --git a/app/src/main/assets/png_Festivals/3.jpg b/app/src/main/assets/png_Festivals/3.jpg
new file mode 100644
index 0000000..5ca2b11
Binary files /dev/null and b/app/src/main/assets/png_Festivals/3.jpg differ
diff --git a/app/src/main/assets/png_Festivals/4.jpg b/app/src/main/assets/png_Festivals/4.jpg
new file mode 100644
index 0000000..1f8cc81
Binary files /dev/null and b/app/src/main/assets/png_Festivals/4.jpg differ
diff --git a/app/src/main/assets/png_Festivals/5.jpg b/app/src/main/assets/png_Festivals/5.jpg
new file mode 100644
index 0000000..7f1bd1a
Binary files /dev/null and b/app/src/main/assets/png_Festivals/5.jpg differ
diff --git a/app/src/main/assets/png_Festivals/6.jpg b/app/src/main/assets/png_Festivals/6.jpg
new file mode 100644
index 0000000..9cf832a
Binary files /dev/null and b/app/src/main/assets/png_Festivals/6.jpg differ
diff --git a/app/src/main/assets/png_Festivals/7.jpg b/app/src/main/assets/png_Festivals/7.jpg
new file mode 100644
index 0000000..dcd83f3
Binary files /dev/null and b/app/src/main/assets/png_Festivals/7.jpg differ
diff --git a/app/src/main/assets/png_Festivals/8.jpg b/app/src/main/assets/png_Festivals/8.jpg
new file mode 100644
index 0000000..1117f09
Binary files /dev/null and b/app/src/main/assets/png_Festivals/8.jpg differ
diff --git a/app/src/main/assets/png_Festivals/9.jpg b/app/src/main/assets/png_Festivals/9.jpg
new file mode 100644
index 0000000..39d8467
Binary files /dev/null and b/app/src/main/assets/png_Festivals/9.jpg differ
diff --git a/app/src/main/assets/png_Flowers/1.jpg b/app/src/main/assets/png_Flowers/1.jpg
new file mode 100644
index 0000000..217d9c8
Binary files /dev/null and b/app/src/main/assets/png_Flowers/1.jpg differ
diff --git a/app/src/main/assets/png_Flowers/10.jpg b/app/src/main/assets/png_Flowers/10.jpg
new file mode 100644
index 0000000..ba84e61
Binary files /dev/null and b/app/src/main/assets/png_Flowers/10.jpg differ
diff --git a/app/src/main/assets/png_Flowers/11.jpg b/app/src/main/assets/png_Flowers/11.jpg
new file mode 100644
index 0000000..e579753
Binary files /dev/null and b/app/src/main/assets/png_Flowers/11.jpg differ
diff --git a/app/src/main/assets/png_Flowers/12.jpg b/app/src/main/assets/png_Flowers/12.jpg
new file mode 100644
index 0000000..26092f9
Binary files /dev/null and b/app/src/main/assets/png_Flowers/12.jpg differ
diff --git a/app/src/main/assets/png_Flowers/13.jpg b/app/src/main/assets/png_Flowers/13.jpg
new file mode 100644
index 0000000..41d2df3
Binary files /dev/null and b/app/src/main/assets/png_Flowers/13.jpg differ
diff --git a/app/src/main/assets/png_Flowers/14.jpg b/app/src/main/assets/png_Flowers/14.jpg
new file mode 100644
index 0000000..c44df66
Binary files /dev/null and b/app/src/main/assets/png_Flowers/14.jpg differ
diff --git a/app/src/main/assets/png_Flowers/15.jpg b/app/src/main/assets/png_Flowers/15.jpg
new file mode 100644
index 0000000..ea34d36
Binary files /dev/null and b/app/src/main/assets/png_Flowers/15.jpg differ
diff --git a/app/src/main/assets/png_Flowers/16.jpg b/app/src/main/assets/png_Flowers/16.jpg
new file mode 100644
index 0000000..506beb1
Binary files /dev/null and b/app/src/main/assets/png_Flowers/16.jpg differ
diff --git a/app/src/main/assets/png_Flowers/17.jpg b/app/src/main/assets/png_Flowers/17.jpg
new file mode 100644
index 0000000..3764b21
Binary files /dev/null and b/app/src/main/assets/png_Flowers/17.jpg differ
diff --git a/app/src/main/assets/png_Flowers/18.jpg b/app/src/main/assets/png_Flowers/18.jpg
new file mode 100644
index 0000000..a759ab6
Binary files /dev/null and b/app/src/main/assets/png_Flowers/18.jpg differ
diff --git a/app/src/main/assets/png_Flowers/19.jpg b/app/src/main/assets/png_Flowers/19.jpg
new file mode 100644
index 0000000..e8c2a84
Binary files /dev/null and b/app/src/main/assets/png_Flowers/19.jpg differ
diff --git a/app/src/main/assets/png_Flowers/2.jpg b/app/src/main/assets/png_Flowers/2.jpg
new file mode 100644
index 0000000..fb7e56f
Binary files /dev/null and b/app/src/main/assets/png_Flowers/2.jpg differ
diff --git a/app/src/main/assets/png_Flowers/20.jpg b/app/src/main/assets/png_Flowers/20.jpg
new file mode 100644
index 0000000..93e5408
Binary files /dev/null and b/app/src/main/assets/png_Flowers/20.jpg differ
diff --git a/app/src/main/assets/png_Flowers/21.jpg b/app/src/main/assets/png_Flowers/21.jpg
new file mode 100644
index 0000000..4fa3a77
Binary files /dev/null and b/app/src/main/assets/png_Flowers/21.jpg differ
diff --git a/app/src/main/assets/png_Flowers/22.jpg b/app/src/main/assets/png_Flowers/22.jpg
new file mode 100644
index 0000000..6f45df7
Binary files /dev/null and b/app/src/main/assets/png_Flowers/22.jpg differ
diff --git a/app/src/main/assets/png_Flowers/23.jpg b/app/src/main/assets/png_Flowers/23.jpg
new file mode 100644
index 0000000..46e806d
Binary files /dev/null and b/app/src/main/assets/png_Flowers/23.jpg differ
diff --git a/app/src/main/assets/png_Flowers/3.jpg b/app/src/main/assets/png_Flowers/3.jpg
new file mode 100644
index 0000000..22a741c
Binary files /dev/null and b/app/src/main/assets/png_Flowers/3.jpg differ
diff --git a/app/src/main/assets/png_Flowers/4.jpg b/app/src/main/assets/png_Flowers/4.jpg
new file mode 100644
index 0000000..dd0a30f
Binary files /dev/null and b/app/src/main/assets/png_Flowers/4.jpg differ
diff --git a/app/src/main/assets/png_Flowers/5.jpg b/app/src/main/assets/png_Flowers/5.jpg
new file mode 100644
index 0000000..9dcb4f5
Binary files /dev/null and b/app/src/main/assets/png_Flowers/5.jpg differ
diff --git a/app/src/main/assets/png_Flowers/6.jpg b/app/src/main/assets/png_Flowers/6.jpg
new file mode 100644
index 0000000..cdf1f65
Binary files /dev/null and b/app/src/main/assets/png_Flowers/6.jpg differ
diff --git a/app/src/main/assets/png_Flowers/7.jpg b/app/src/main/assets/png_Flowers/7.jpg
new file mode 100644
index 0000000..caab990
Binary files /dev/null and b/app/src/main/assets/png_Flowers/7.jpg differ
diff --git a/app/src/main/assets/png_Flowers/8.jpg b/app/src/main/assets/png_Flowers/8.jpg
new file mode 100644
index 0000000..c43832b
Binary files /dev/null and b/app/src/main/assets/png_Flowers/8.jpg differ
diff --git a/app/src/main/assets/png_Flowers/9.jpg b/app/src/main/assets/png_Flowers/9.jpg
new file mode 100644
index 0000000..5b78ee1
Binary files /dev/null and b/app/src/main/assets/png_Flowers/9.jpg differ
diff --git a/app/src/main/assets/png_Fruits/1.jpg b/app/src/main/assets/png_Fruits/1.jpg
new file mode 100644
index 0000000..767c0b4
Binary files /dev/null and b/app/src/main/assets/png_Fruits/1.jpg differ
diff --git a/app/src/main/assets/png_Fruits/10.jpg b/app/src/main/assets/png_Fruits/10.jpg
new file mode 100644
index 0000000..95bdbca
Binary files /dev/null and b/app/src/main/assets/png_Fruits/10.jpg differ
diff --git a/app/src/main/assets/png_Fruits/11.jpg b/app/src/main/assets/png_Fruits/11.jpg
new file mode 100644
index 0000000..b0bb89a
Binary files /dev/null and b/app/src/main/assets/png_Fruits/11.jpg differ
diff --git a/app/src/main/assets/png_Fruits/12.jpg b/app/src/main/assets/png_Fruits/12.jpg
new file mode 100644
index 0000000..c1d9bad
Binary files /dev/null and b/app/src/main/assets/png_Fruits/12.jpg differ
diff --git a/app/src/main/assets/png_Fruits/13.jpg b/app/src/main/assets/png_Fruits/13.jpg
new file mode 100644
index 0000000..f44fb86
Binary files /dev/null and b/app/src/main/assets/png_Fruits/13.jpg differ
diff --git a/app/src/main/assets/png_Fruits/14.jpg b/app/src/main/assets/png_Fruits/14.jpg
new file mode 100644
index 0000000..459a60c
Binary files /dev/null and b/app/src/main/assets/png_Fruits/14.jpg differ
diff --git a/app/src/main/assets/png_Fruits/15.jpg b/app/src/main/assets/png_Fruits/15.jpg
new file mode 100644
index 0000000..a4e4abe
Binary files /dev/null and b/app/src/main/assets/png_Fruits/15.jpg differ
diff --git a/app/src/main/assets/png_Fruits/16.jpg b/app/src/main/assets/png_Fruits/16.jpg
new file mode 100644
index 0000000..33a7a9a
Binary files /dev/null and b/app/src/main/assets/png_Fruits/16.jpg differ
diff --git a/app/src/main/assets/png_Fruits/17.jpg b/app/src/main/assets/png_Fruits/17.jpg
new file mode 100644
index 0000000..c193b1e
Binary files /dev/null and b/app/src/main/assets/png_Fruits/17.jpg differ
diff --git a/app/src/main/assets/png_Fruits/18.jpg b/app/src/main/assets/png_Fruits/18.jpg
new file mode 100644
index 0000000..f0ca248
Binary files /dev/null and b/app/src/main/assets/png_Fruits/18.jpg differ
diff --git a/app/src/main/assets/png_Fruits/19.jpg b/app/src/main/assets/png_Fruits/19.jpg
new file mode 100644
index 0000000..d93dfde
Binary files /dev/null and b/app/src/main/assets/png_Fruits/19.jpg differ
diff --git a/app/src/main/assets/png_Fruits/2.jpg b/app/src/main/assets/png_Fruits/2.jpg
new file mode 100644
index 0000000..b32f9f5
Binary files /dev/null and b/app/src/main/assets/png_Fruits/2.jpg differ
diff --git a/app/src/main/assets/png_Fruits/20.jpg b/app/src/main/assets/png_Fruits/20.jpg
new file mode 100644
index 0000000..cc3fe93
Binary files /dev/null and b/app/src/main/assets/png_Fruits/20.jpg differ
diff --git a/app/src/main/assets/png_Fruits/21.jpg b/app/src/main/assets/png_Fruits/21.jpg
new file mode 100644
index 0000000..c1813eb
Binary files /dev/null and b/app/src/main/assets/png_Fruits/21.jpg differ
diff --git a/app/src/main/assets/png_Fruits/22.jpg b/app/src/main/assets/png_Fruits/22.jpg
new file mode 100644
index 0000000..47387e1
Binary files /dev/null and b/app/src/main/assets/png_Fruits/22.jpg differ
diff --git a/app/src/main/assets/png_Fruits/23.jpg b/app/src/main/assets/png_Fruits/23.jpg
new file mode 100644
index 0000000..7f173ec
Binary files /dev/null and b/app/src/main/assets/png_Fruits/23.jpg differ
diff --git a/app/src/main/assets/png_Fruits/24.jpg b/app/src/main/assets/png_Fruits/24.jpg
new file mode 100644
index 0000000..a7ae235
Binary files /dev/null and b/app/src/main/assets/png_Fruits/24.jpg differ
diff --git a/app/src/main/assets/png_Fruits/25.jpg b/app/src/main/assets/png_Fruits/25.jpg
new file mode 100644
index 0000000..dd664bb
Binary files /dev/null and b/app/src/main/assets/png_Fruits/25.jpg differ
diff --git a/app/src/main/assets/png_Fruits/26.jpg b/app/src/main/assets/png_Fruits/26.jpg
new file mode 100644
index 0000000..c8e4723
Binary files /dev/null and b/app/src/main/assets/png_Fruits/26.jpg differ
diff --git a/app/src/main/assets/png_Fruits/27.jpg b/app/src/main/assets/png_Fruits/27.jpg
new file mode 100644
index 0000000..816337d
Binary files /dev/null and b/app/src/main/assets/png_Fruits/27.jpg differ
diff --git a/app/src/main/assets/png_Fruits/28.jpg b/app/src/main/assets/png_Fruits/28.jpg
new file mode 100644
index 0000000..29973d5
Binary files /dev/null and b/app/src/main/assets/png_Fruits/28.jpg differ
diff --git a/app/src/main/assets/png_Fruits/29.jpg b/app/src/main/assets/png_Fruits/29.jpg
new file mode 100644
index 0000000..4f0750f
Binary files /dev/null and b/app/src/main/assets/png_Fruits/29.jpg differ
diff --git a/app/src/main/assets/png_Fruits/3.jpg b/app/src/main/assets/png_Fruits/3.jpg
new file mode 100644
index 0000000..f57893b
Binary files /dev/null and b/app/src/main/assets/png_Fruits/3.jpg differ
diff --git a/app/src/main/assets/png_Fruits/30.jpg b/app/src/main/assets/png_Fruits/30.jpg
new file mode 100644
index 0000000..cfd117a
Binary files /dev/null and b/app/src/main/assets/png_Fruits/30.jpg differ
diff --git a/app/src/main/assets/png_Fruits/31.jpg b/app/src/main/assets/png_Fruits/31.jpg
new file mode 100644
index 0000000..b59a7c5
Binary files /dev/null and b/app/src/main/assets/png_Fruits/31.jpg differ
diff --git a/app/src/main/assets/png_Fruits/32.jpg b/app/src/main/assets/png_Fruits/32.jpg
new file mode 100644
index 0000000..8f70790
Binary files /dev/null and b/app/src/main/assets/png_Fruits/32.jpg differ
diff --git a/app/src/main/assets/png_Fruits/33.jpg b/app/src/main/assets/png_Fruits/33.jpg
new file mode 100644
index 0000000..373b142
Binary files /dev/null and b/app/src/main/assets/png_Fruits/33.jpg differ
diff --git a/app/src/main/assets/png_Fruits/34.jpg b/app/src/main/assets/png_Fruits/34.jpg
new file mode 100644
index 0000000..c5beb91
Binary files /dev/null and b/app/src/main/assets/png_Fruits/34.jpg differ
diff --git a/app/src/main/assets/png_Fruits/35.jpg b/app/src/main/assets/png_Fruits/35.jpg
new file mode 100644
index 0000000..79cd667
Binary files /dev/null and b/app/src/main/assets/png_Fruits/35.jpg differ
diff --git a/app/src/main/assets/png_Fruits/36.jpg b/app/src/main/assets/png_Fruits/36.jpg
new file mode 100644
index 0000000..c0cb185
Binary files /dev/null and b/app/src/main/assets/png_Fruits/36.jpg differ
diff --git a/app/src/main/assets/png_Fruits/37.jpg b/app/src/main/assets/png_Fruits/37.jpg
new file mode 100644
index 0000000..ba1b245
Binary files /dev/null and b/app/src/main/assets/png_Fruits/37.jpg differ
diff --git a/app/src/main/assets/png_Fruits/38.jpg b/app/src/main/assets/png_Fruits/38.jpg
new file mode 100644
index 0000000..c7eccb8
Binary files /dev/null and b/app/src/main/assets/png_Fruits/38.jpg differ
diff --git a/app/src/main/assets/png_Fruits/39.jpg b/app/src/main/assets/png_Fruits/39.jpg
new file mode 100644
index 0000000..bc95aaa
Binary files /dev/null and b/app/src/main/assets/png_Fruits/39.jpg differ
diff --git a/app/src/main/assets/png_Fruits/4.jpg b/app/src/main/assets/png_Fruits/4.jpg
new file mode 100644
index 0000000..2d7465d
Binary files /dev/null and b/app/src/main/assets/png_Fruits/4.jpg differ
diff --git a/app/src/main/assets/png_Fruits/5.jpg b/app/src/main/assets/png_Fruits/5.jpg
new file mode 100644
index 0000000..8ed633f
Binary files /dev/null and b/app/src/main/assets/png_Fruits/5.jpg differ
diff --git a/app/src/main/assets/png_Fruits/6.jpg b/app/src/main/assets/png_Fruits/6.jpg
new file mode 100644
index 0000000..06ce330
Binary files /dev/null and b/app/src/main/assets/png_Fruits/6.jpg differ
diff --git a/app/src/main/assets/png_Fruits/7.jpg b/app/src/main/assets/png_Fruits/7.jpg
new file mode 100644
index 0000000..6153618
Binary files /dev/null and b/app/src/main/assets/png_Fruits/7.jpg differ
diff --git a/app/src/main/assets/png_Fruits/8.jpg b/app/src/main/assets/png_Fruits/8.jpg
new file mode 100644
index 0000000..e333f0f
Binary files /dev/null and b/app/src/main/assets/png_Fruits/8.jpg differ
diff --git a/app/src/main/assets/png_Fruits/9.jpg b/app/src/main/assets/png_Fruits/9.jpg
new file mode 100644
index 0000000..d549d15
Binary files /dev/null and b/app/src/main/assets/png_Fruits/9.jpg differ
diff --git a/app/src/main/assets/png_General/1.jpg b/app/src/main/assets/png_General/1.jpg
new file mode 100644
index 0000000..eb7c14b
Binary files /dev/null and b/app/src/main/assets/png_General/1.jpg differ
diff --git a/app/src/main/assets/png_General/10.jpg b/app/src/main/assets/png_General/10.jpg
new file mode 100644
index 0000000..eacd298
Binary files /dev/null and b/app/src/main/assets/png_General/10.jpg differ
diff --git a/app/src/main/assets/png_General/11.jpg b/app/src/main/assets/png_General/11.jpg
new file mode 100644
index 0000000..273a876
Binary files /dev/null and b/app/src/main/assets/png_General/11.jpg differ
diff --git a/app/src/main/assets/png_General/12.jpg b/app/src/main/assets/png_General/12.jpg
new file mode 100644
index 0000000..5d786c5
Binary files /dev/null and b/app/src/main/assets/png_General/12.jpg differ
diff --git a/app/src/main/assets/png_General/13.jpg b/app/src/main/assets/png_General/13.jpg
new file mode 100644
index 0000000..486441a
Binary files /dev/null and b/app/src/main/assets/png_General/13.jpg differ
diff --git a/app/src/main/assets/png_General/14.jpg b/app/src/main/assets/png_General/14.jpg
new file mode 100644
index 0000000..c36516b
Binary files /dev/null and b/app/src/main/assets/png_General/14.jpg differ
diff --git a/app/src/main/assets/png_General/15.jpg b/app/src/main/assets/png_General/15.jpg
new file mode 100644
index 0000000..9d19fdf
Binary files /dev/null and b/app/src/main/assets/png_General/15.jpg differ
diff --git a/app/src/main/assets/png_General/2.jpg b/app/src/main/assets/png_General/2.jpg
new file mode 100644
index 0000000..090d5d5
Binary files /dev/null and b/app/src/main/assets/png_General/2.jpg differ
diff --git a/app/src/main/assets/png_General/3.jpg b/app/src/main/assets/png_General/3.jpg
new file mode 100644
index 0000000..a17f1b2
Binary files /dev/null and b/app/src/main/assets/png_General/3.jpg differ
diff --git a/app/src/main/assets/png_General/4.jpg b/app/src/main/assets/png_General/4.jpg
new file mode 100644
index 0000000..2f4d8a2
Binary files /dev/null and b/app/src/main/assets/png_General/4.jpg differ
diff --git a/app/src/main/assets/png_General/5.jpg b/app/src/main/assets/png_General/5.jpg
new file mode 100644
index 0000000..8ac1cdb
Binary files /dev/null and b/app/src/main/assets/png_General/5.jpg differ
diff --git a/app/src/main/assets/png_General/6.jpg b/app/src/main/assets/png_General/6.jpg
new file mode 100644
index 0000000..95cc582
Binary files /dev/null and b/app/src/main/assets/png_General/6.jpg differ
diff --git a/app/src/main/assets/png_General/7.jpg b/app/src/main/assets/png_General/7.jpg
new file mode 100644
index 0000000..91cbcfd
Binary files /dev/null and b/app/src/main/assets/png_General/7.jpg differ
diff --git a/app/src/main/assets/png_General/8.jpg b/app/src/main/assets/png_General/8.jpg
new file mode 100644
index 0000000..af8da73
Binary files /dev/null and b/app/src/main/assets/png_General/8.jpg differ
diff --git a/app/src/main/assets/png_General/9.jpg b/app/src/main/assets/png_General/9.jpg
new file mode 100644
index 0000000..d5cfb72
Binary files /dev/null and b/app/src/main/assets/png_General/9.jpg differ
diff --git a/app/src/main/assets/png_Mehndi/1.jpg b/app/src/main/assets/png_Mehndi/1.jpg
new file mode 100644
index 0000000..8dd8843
Binary files /dev/null and b/app/src/main/assets/png_Mehndi/1.jpg differ
diff --git a/app/src/main/assets/png_Mehndi/10.jpg b/app/src/main/assets/png_Mehndi/10.jpg
new file mode 100644
index 0000000..2432a79
Binary files /dev/null and b/app/src/main/assets/png_Mehndi/10.jpg differ
diff --git a/app/src/main/assets/png_Mehndi/11.jpg b/app/src/main/assets/png_Mehndi/11.jpg
new file mode 100644
index 0000000..aba85bf
Binary files /dev/null and b/app/src/main/assets/png_Mehndi/11.jpg differ
diff --git a/app/src/main/assets/png_Mehndi/12.jpg b/app/src/main/assets/png_Mehndi/12.jpg
new file mode 100644
index 0000000..f71ae22
Binary files /dev/null and b/app/src/main/assets/png_Mehndi/12.jpg differ
diff --git a/app/src/main/assets/png_Mehndi/2.jpg b/app/src/main/assets/png_Mehndi/2.jpg
new file mode 100644
index 0000000..0f56bf7
Binary files /dev/null and b/app/src/main/assets/png_Mehndi/2.jpg differ
diff --git a/app/src/main/assets/png_Mehndi/3.jpg b/app/src/main/assets/png_Mehndi/3.jpg
new file mode 100644
index 0000000..2bc7b69
Binary files /dev/null and b/app/src/main/assets/png_Mehndi/3.jpg differ
diff --git a/app/src/main/assets/png_Mehndi/4.jpg b/app/src/main/assets/png_Mehndi/4.jpg
new file mode 100644
index 0000000..6fc3f70
Binary files /dev/null and b/app/src/main/assets/png_Mehndi/4.jpg differ
diff --git a/app/src/main/assets/png_Mehndi/5.jpg b/app/src/main/assets/png_Mehndi/5.jpg
new file mode 100644
index 0000000..dccb5cf
Binary files /dev/null and b/app/src/main/assets/png_Mehndi/5.jpg differ
diff --git a/app/src/main/assets/png_Mehndi/6.jpg b/app/src/main/assets/png_Mehndi/6.jpg
new file mode 100644
index 0000000..4e052dd
Binary files /dev/null and b/app/src/main/assets/png_Mehndi/6.jpg differ
diff --git a/app/src/main/assets/png_Mehndi/7.jpg b/app/src/main/assets/png_Mehndi/7.jpg
new file mode 100644
index 0000000..021e789
Binary files /dev/null and b/app/src/main/assets/png_Mehndi/7.jpg differ
diff --git a/app/src/main/assets/png_Mehndi/8.jpg b/app/src/main/assets/png_Mehndi/8.jpg
new file mode 100644
index 0000000..dd45b50
Binary files /dev/null and b/app/src/main/assets/png_Mehndi/8.jpg differ
diff --git a/app/src/main/assets/png_Mehndi/9.jpg b/app/src/main/assets/png_Mehndi/9.jpg
new file mode 100644
index 0000000..6ff2300
Binary files /dev/null and b/app/src/main/assets/png_Mehndi/9.jpg differ
diff --git a/app/src/main/assets/png_Nature/1.jpg b/app/src/main/assets/png_Nature/1.jpg
new file mode 100644
index 0000000..22c00e3
Binary files /dev/null and b/app/src/main/assets/png_Nature/1.jpg differ
diff --git a/app/src/main/assets/png_Nature/10.jpg b/app/src/main/assets/png_Nature/10.jpg
new file mode 100644
index 0000000..65aab09
Binary files /dev/null and b/app/src/main/assets/png_Nature/10.jpg differ
diff --git a/app/src/main/assets/png_Nature/11.jpg b/app/src/main/assets/png_Nature/11.jpg
new file mode 100644
index 0000000..23c6653
Binary files /dev/null and b/app/src/main/assets/png_Nature/11.jpg differ
diff --git a/app/src/main/assets/png_Nature/12.jpg b/app/src/main/assets/png_Nature/12.jpg
new file mode 100644
index 0000000..36e1835
Binary files /dev/null and b/app/src/main/assets/png_Nature/12.jpg differ
diff --git a/app/src/main/assets/png_Nature/13.jpg b/app/src/main/assets/png_Nature/13.jpg
new file mode 100644
index 0000000..5816b61
Binary files /dev/null and b/app/src/main/assets/png_Nature/13.jpg differ
diff --git a/app/src/main/assets/png_Nature/14.jpg b/app/src/main/assets/png_Nature/14.jpg
new file mode 100644
index 0000000..b4e5dc6
Binary files /dev/null and b/app/src/main/assets/png_Nature/14.jpg differ
diff --git a/app/src/main/assets/png_Nature/15.jpg b/app/src/main/assets/png_Nature/15.jpg
new file mode 100644
index 0000000..5424ac4
Binary files /dev/null and b/app/src/main/assets/png_Nature/15.jpg differ
diff --git a/app/src/main/assets/png_Nature/16.jpg b/app/src/main/assets/png_Nature/16.jpg
new file mode 100644
index 0000000..fd00791
Binary files /dev/null and b/app/src/main/assets/png_Nature/16.jpg differ
diff --git a/app/src/main/assets/png_Nature/17.jpg b/app/src/main/assets/png_Nature/17.jpg
new file mode 100644
index 0000000..38410e8
Binary files /dev/null and b/app/src/main/assets/png_Nature/17.jpg differ
diff --git a/app/src/main/assets/png_Nature/18.jpg b/app/src/main/assets/png_Nature/18.jpg
new file mode 100644
index 0000000..5ae5028
Binary files /dev/null and b/app/src/main/assets/png_Nature/18.jpg differ
diff --git a/app/src/main/assets/png_Nature/19.jpg b/app/src/main/assets/png_Nature/19.jpg
new file mode 100644
index 0000000..e49b4f1
Binary files /dev/null and b/app/src/main/assets/png_Nature/19.jpg differ
diff --git a/app/src/main/assets/png_Nature/2.jpg b/app/src/main/assets/png_Nature/2.jpg
new file mode 100644
index 0000000..3b5ec4c
Binary files /dev/null and b/app/src/main/assets/png_Nature/2.jpg differ
diff --git a/app/src/main/assets/png_Nature/20.jpg b/app/src/main/assets/png_Nature/20.jpg
new file mode 100644
index 0000000..cc94724
Binary files /dev/null and b/app/src/main/assets/png_Nature/20.jpg differ
diff --git a/app/src/main/assets/png_Nature/21.jpg b/app/src/main/assets/png_Nature/21.jpg
new file mode 100644
index 0000000..dfa6c09
Binary files /dev/null and b/app/src/main/assets/png_Nature/21.jpg differ
diff --git a/app/src/main/assets/png_Nature/22.jpg b/app/src/main/assets/png_Nature/22.jpg
new file mode 100644
index 0000000..c05e638
Binary files /dev/null and b/app/src/main/assets/png_Nature/22.jpg differ
diff --git a/app/src/main/assets/png_Nature/23.jpg b/app/src/main/assets/png_Nature/23.jpg
new file mode 100644
index 0000000..6f932ec
Binary files /dev/null and b/app/src/main/assets/png_Nature/23.jpg differ
diff --git a/app/src/main/assets/png_Nature/3.jpg b/app/src/main/assets/png_Nature/3.jpg
new file mode 100644
index 0000000..1423546
Binary files /dev/null and b/app/src/main/assets/png_Nature/3.jpg differ
diff --git a/app/src/main/assets/png_Nature/4.jpg b/app/src/main/assets/png_Nature/4.jpg
new file mode 100644
index 0000000..5499510
Binary files /dev/null and b/app/src/main/assets/png_Nature/4.jpg differ
diff --git a/app/src/main/assets/png_Nature/5.jpg b/app/src/main/assets/png_Nature/5.jpg
new file mode 100644
index 0000000..434261a
Binary files /dev/null and b/app/src/main/assets/png_Nature/5.jpg differ
diff --git a/app/src/main/assets/png_Nature/6.jpg b/app/src/main/assets/png_Nature/6.jpg
new file mode 100644
index 0000000..f50166b
Binary files /dev/null and b/app/src/main/assets/png_Nature/6.jpg differ
diff --git a/app/src/main/assets/png_Nature/7.jpg b/app/src/main/assets/png_Nature/7.jpg
new file mode 100644
index 0000000..96e178c
Binary files /dev/null and b/app/src/main/assets/png_Nature/7.jpg differ
diff --git a/app/src/main/assets/png_Nature/8.jpg b/app/src/main/assets/png_Nature/8.jpg
new file mode 100644
index 0000000..c68f4f1
Binary files /dev/null and b/app/src/main/assets/png_Nature/8.jpg differ
diff --git a/app/src/main/assets/png_Nature/9.jpg b/app/src/main/assets/png_Nature/9.jpg
new file mode 100644
index 0000000..6b8ccb4
Binary files /dev/null and b/app/src/main/assets/png_Nature/9.jpg differ
diff --git a/app/src/main/assets/png_Properties/1.jpg b/app/src/main/assets/png_Properties/1.jpg
new file mode 100644
index 0000000..3289a38
Binary files /dev/null and b/app/src/main/assets/png_Properties/1.jpg differ
diff --git a/app/src/main/assets/png_Properties/10.jpg b/app/src/main/assets/png_Properties/10.jpg
new file mode 100644
index 0000000..b065539
Binary files /dev/null and b/app/src/main/assets/png_Properties/10.jpg differ
diff --git a/app/src/main/assets/png_Properties/11.jpg b/app/src/main/assets/png_Properties/11.jpg
new file mode 100644
index 0000000..12d28b1
Binary files /dev/null and b/app/src/main/assets/png_Properties/11.jpg differ
diff --git a/app/src/main/assets/png_Properties/12.jpg b/app/src/main/assets/png_Properties/12.jpg
new file mode 100644
index 0000000..182879f
Binary files /dev/null and b/app/src/main/assets/png_Properties/12.jpg differ
diff --git a/app/src/main/assets/png_Properties/13.jpg b/app/src/main/assets/png_Properties/13.jpg
new file mode 100644
index 0000000..4263530
Binary files /dev/null and b/app/src/main/assets/png_Properties/13.jpg differ
diff --git a/app/src/main/assets/png_Properties/14.jpg b/app/src/main/assets/png_Properties/14.jpg
new file mode 100644
index 0000000..42e4ab3
Binary files /dev/null and b/app/src/main/assets/png_Properties/14.jpg differ
diff --git a/app/src/main/assets/png_Properties/15.jpg b/app/src/main/assets/png_Properties/15.jpg
new file mode 100644
index 0000000..b529436
Binary files /dev/null and b/app/src/main/assets/png_Properties/15.jpg differ
diff --git a/app/src/main/assets/png_Properties/16.jpg b/app/src/main/assets/png_Properties/16.jpg
new file mode 100644
index 0000000..85caef0
Binary files /dev/null and b/app/src/main/assets/png_Properties/16.jpg differ
diff --git a/app/src/main/assets/png_Properties/17.jpg b/app/src/main/assets/png_Properties/17.jpg
new file mode 100644
index 0000000..6295f58
Binary files /dev/null and b/app/src/main/assets/png_Properties/17.jpg differ
diff --git a/app/src/main/assets/png_Properties/18.jpg b/app/src/main/assets/png_Properties/18.jpg
new file mode 100644
index 0000000..f8e4e87
Binary files /dev/null and b/app/src/main/assets/png_Properties/18.jpg differ
diff --git a/app/src/main/assets/png_Properties/19.jpg b/app/src/main/assets/png_Properties/19.jpg
new file mode 100644
index 0000000..c476493
Binary files /dev/null and b/app/src/main/assets/png_Properties/19.jpg differ
diff --git a/app/src/main/assets/png_Properties/2.jpg b/app/src/main/assets/png_Properties/2.jpg
new file mode 100644
index 0000000..084fa51
Binary files /dev/null and b/app/src/main/assets/png_Properties/2.jpg differ
diff --git a/app/src/main/assets/png_Properties/3.jpg b/app/src/main/assets/png_Properties/3.jpg
new file mode 100644
index 0000000..4ee71c4
Binary files /dev/null and b/app/src/main/assets/png_Properties/3.jpg differ
diff --git a/app/src/main/assets/png_Properties/4.jpg b/app/src/main/assets/png_Properties/4.jpg
new file mode 100644
index 0000000..25912f1
Binary files /dev/null and b/app/src/main/assets/png_Properties/4.jpg differ
diff --git a/app/src/main/assets/png_Properties/5.jpg b/app/src/main/assets/png_Properties/5.jpg
new file mode 100644
index 0000000..77c2aa8
Binary files /dev/null and b/app/src/main/assets/png_Properties/5.jpg differ
diff --git a/app/src/main/assets/png_Properties/6.jpg b/app/src/main/assets/png_Properties/6.jpg
new file mode 100644
index 0000000..75b1e32
Binary files /dev/null and b/app/src/main/assets/png_Properties/6.jpg differ
diff --git a/app/src/main/assets/png_Properties/7.jpg b/app/src/main/assets/png_Properties/7.jpg
new file mode 100644
index 0000000..f059989
Binary files /dev/null and b/app/src/main/assets/png_Properties/7.jpg differ
diff --git a/app/src/main/assets/png_Properties/8.jpg b/app/src/main/assets/png_Properties/8.jpg
new file mode 100644
index 0000000..6be97eb
Binary files /dev/null and b/app/src/main/assets/png_Properties/8.jpg differ
diff --git a/app/src/main/assets/png_Properties/9.jpg b/app/src/main/assets/png_Properties/9.jpg
new file mode 100644
index 0000000..626cab9
Binary files /dev/null and b/app/src/main/assets/png_Properties/9.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/1.jpg b/app/src/main/assets/png_Rangoli/1.jpg
new file mode 100644
index 0000000..e628714
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/1.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/10.jpg b/app/src/main/assets/png_Rangoli/10.jpg
new file mode 100644
index 0000000..f6e9d09
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/10.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/13.jpg b/app/src/main/assets/png_Rangoli/13.jpg
new file mode 100644
index 0000000..9741d57
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/13.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/14.jpg b/app/src/main/assets/png_Rangoli/14.jpg
new file mode 100644
index 0000000..3ca4970
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/14.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/15.jpg b/app/src/main/assets/png_Rangoli/15.jpg
new file mode 100644
index 0000000..98abac3
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/15.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/16.jpg b/app/src/main/assets/png_Rangoli/16.jpg
new file mode 100644
index 0000000..150dfdc
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/16.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/17.jpg b/app/src/main/assets/png_Rangoli/17.jpg
new file mode 100644
index 0000000..4127115
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/17.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/18.jpg b/app/src/main/assets/png_Rangoli/18.jpg
new file mode 100644
index 0000000..6ae96e9
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/18.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/19.jpg b/app/src/main/assets/png_Rangoli/19.jpg
new file mode 100644
index 0000000..ffcbd6a
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/19.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/2.jpg b/app/src/main/assets/png_Rangoli/2.jpg
new file mode 100644
index 0000000..7329109
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/2.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/20.jpg b/app/src/main/assets/png_Rangoli/20.jpg
new file mode 100644
index 0000000..b7be138
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/20.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/21.jpg b/app/src/main/assets/png_Rangoli/21.jpg
new file mode 100644
index 0000000..eaa5fdf
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/21.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/22.jpg b/app/src/main/assets/png_Rangoli/22.jpg
new file mode 100644
index 0000000..28aca48
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/22.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/23.jpg b/app/src/main/assets/png_Rangoli/23.jpg
new file mode 100644
index 0000000..057d2d4
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/23.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/24.jpg b/app/src/main/assets/png_Rangoli/24.jpg
new file mode 100644
index 0000000..e933061
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/24.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/25.jpg b/app/src/main/assets/png_Rangoli/25.jpg
new file mode 100644
index 0000000..569a74c
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/25.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/3.jpg b/app/src/main/assets/png_Rangoli/3.jpg
new file mode 100644
index 0000000..569342c
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/3.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/4.jpg b/app/src/main/assets/png_Rangoli/4.jpg
new file mode 100644
index 0000000..7c5d0de
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/4.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/5.jpg b/app/src/main/assets/png_Rangoli/5.jpg
new file mode 100644
index 0000000..5a3228f
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/5.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/6.jpg b/app/src/main/assets/png_Rangoli/6.jpg
new file mode 100644
index 0000000..270f078
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/6.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/7.jpg b/app/src/main/assets/png_Rangoli/7.jpg
new file mode 100644
index 0000000..241beac
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/7.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/8.jpg b/app/src/main/assets/png_Rangoli/8.jpg
new file mode 100644
index 0000000..c62e0d7
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/8.jpg differ
diff --git a/app/src/main/assets/png_Rangoli/9.jpg b/app/src/main/assets/png_Rangoli/9.jpg
new file mode 100644
index 0000000..bcd14a7
Binary files /dev/null and b/app/src/main/assets/png_Rangoli/9.jpg differ
diff --git a/app/src/main/assets/png_Sports/1.jpg b/app/src/main/assets/png_Sports/1.jpg
new file mode 100644
index 0000000..cd1cb09
Binary files /dev/null and b/app/src/main/assets/png_Sports/1.jpg differ
diff --git a/app/src/main/assets/png_Sports/10.jpg b/app/src/main/assets/png_Sports/10.jpg
new file mode 100644
index 0000000..2ec81a5
Binary files /dev/null and b/app/src/main/assets/png_Sports/10.jpg differ
diff --git a/app/src/main/assets/png_Sports/11.jpg b/app/src/main/assets/png_Sports/11.jpg
new file mode 100644
index 0000000..f00ecb5
Binary files /dev/null and b/app/src/main/assets/png_Sports/11.jpg differ
diff --git a/app/src/main/assets/png_Sports/12.jpg b/app/src/main/assets/png_Sports/12.jpg
new file mode 100644
index 0000000..b004929
Binary files /dev/null and b/app/src/main/assets/png_Sports/12.jpg differ
diff --git a/app/src/main/assets/png_Sports/13.jpg b/app/src/main/assets/png_Sports/13.jpg
new file mode 100644
index 0000000..73fa886
Binary files /dev/null and b/app/src/main/assets/png_Sports/13.jpg differ
diff --git a/app/src/main/assets/png_Sports/14.jpg b/app/src/main/assets/png_Sports/14.jpg
new file mode 100644
index 0000000..3d9069e
Binary files /dev/null and b/app/src/main/assets/png_Sports/14.jpg differ
diff --git a/app/src/main/assets/png_Sports/15.jpg b/app/src/main/assets/png_Sports/15.jpg
new file mode 100644
index 0000000..a090c83
Binary files /dev/null and b/app/src/main/assets/png_Sports/15.jpg differ
diff --git a/app/src/main/assets/png_Sports/16.jpg b/app/src/main/assets/png_Sports/16.jpg
new file mode 100644
index 0000000..185d6e3
Binary files /dev/null and b/app/src/main/assets/png_Sports/16.jpg differ
diff --git a/app/src/main/assets/png_Sports/17.jpg b/app/src/main/assets/png_Sports/17.jpg
new file mode 100644
index 0000000..b8193fa
Binary files /dev/null and b/app/src/main/assets/png_Sports/17.jpg differ
diff --git a/app/src/main/assets/png_Sports/18.jpg b/app/src/main/assets/png_Sports/18.jpg
new file mode 100644
index 0000000..ba4fcea
Binary files /dev/null and b/app/src/main/assets/png_Sports/18.jpg differ
diff --git a/app/src/main/assets/png_Sports/19.jpg b/app/src/main/assets/png_Sports/19.jpg
new file mode 100644
index 0000000..617c2af
Binary files /dev/null and b/app/src/main/assets/png_Sports/19.jpg differ
diff --git a/app/src/main/assets/png_Sports/2.jpg b/app/src/main/assets/png_Sports/2.jpg
new file mode 100644
index 0000000..59890e5
Binary files /dev/null and b/app/src/main/assets/png_Sports/2.jpg differ
diff --git a/app/src/main/assets/png_Sports/20.jpg b/app/src/main/assets/png_Sports/20.jpg
new file mode 100644
index 0000000..4032ff4
Binary files /dev/null and b/app/src/main/assets/png_Sports/20.jpg differ
diff --git a/app/src/main/assets/png_Sports/21.jpg b/app/src/main/assets/png_Sports/21.jpg
new file mode 100644
index 0000000..23979ba
Binary files /dev/null and b/app/src/main/assets/png_Sports/21.jpg differ
diff --git a/app/src/main/assets/png_Sports/22.jpg b/app/src/main/assets/png_Sports/22.jpg
new file mode 100644
index 0000000..c61e91e
Binary files /dev/null and b/app/src/main/assets/png_Sports/22.jpg differ
diff --git a/app/src/main/assets/png_Sports/23.jpg b/app/src/main/assets/png_Sports/23.jpg
new file mode 100644
index 0000000..7bf0806
Binary files /dev/null and b/app/src/main/assets/png_Sports/23.jpg differ
diff --git a/app/src/main/assets/png_Sports/24.jpg b/app/src/main/assets/png_Sports/24.jpg
new file mode 100644
index 0000000..23cbc17
Binary files /dev/null and b/app/src/main/assets/png_Sports/24.jpg differ
diff --git a/app/src/main/assets/png_Sports/25.jpg b/app/src/main/assets/png_Sports/25.jpg
new file mode 100644
index 0000000..06d992e
Binary files /dev/null and b/app/src/main/assets/png_Sports/25.jpg differ
diff --git a/app/src/main/assets/png_Sports/26.jpg b/app/src/main/assets/png_Sports/26.jpg
new file mode 100644
index 0000000..26af61e
Binary files /dev/null and b/app/src/main/assets/png_Sports/26.jpg differ
diff --git a/app/src/main/assets/png_Sports/27.jpg b/app/src/main/assets/png_Sports/27.jpg
new file mode 100644
index 0000000..91bf104
Binary files /dev/null and b/app/src/main/assets/png_Sports/27.jpg differ
diff --git a/app/src/main/assets/png_Sports/28.jpg b/app/src/main/assets/png_Sports/28.jpg
new file mode 100644
index 0000000..8c790e7
Binary files /dev/null and b/app/src/main/assets/png_Sports/28.jpg differ
diff --git a/app/src/main/assets/png_Sports/3.jpg b/app/src/main/assets/png_Sports/3.jpg
new file mode 100644
index 0000000..8315af5
Binary files /dev/null and b/app/src/main/assets/png_Sports/3.jpg differ
diff --git a/app/src/main/assets/png_Sports/4.jpg b/app/src/main/assets/png_Sports/4.jpg
new file mode 100644
index 0000000..8070e68
Binary files /dev/null and b/app/src/main/assets/png_Sports/4.jpg differ
diff --git a/app/src/main/assets/png_Sports/5.jpg b/app/src/main/assets/png_Sports/5.jpg
new file mode 100644
index 0000000..5bcb837
Binary files /dev/null and b/app/src/main/assets/png_Sports/5.jpg differ
diff --git a/app/src/main/assets/png_Sports/6.jpg b/app/src/main/assets/png_Sports/6.jpg
new file mode 100644
index 0000000..038521f
Binary files /dev/null and b/app/src/main/assets/png_Sports/6.jpg differ
diff --git a/app/src/main/assets/png_Sports/7.jpg b/app/src/main/assets/png_Sports/7.jpg
new file mode 100644
index 0000000..73bf0de
Binary files /dev/null and b/app/src/main/assets/png_Sports/7.jpg differ
diff --git a/app/src/main/assets/png_Sports/8.jpg b/app/src/main/assets/png_Sports/8.jpg
new file mode 100644
index 0000000..6c565f8
Binary files /dev/null and b/app/src/main/assets/png_Sports/8.jpg differ
diff --git a/app/src/main/assets/png_Sports/9.jpg b/app/src/main/assets/png_Sports/9.jpg
new file mode 100644
index 0000000..130cd94
Binary files /dev/null and b/app/src/main/assets/png_Sports/9.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/1.jpg b/app/src/main/assets/png_Vehicles/1.jpg
new file mode 100644
index 0000000..da449f7
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/1.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/10.jpg b/app/src/main/assets/png_Vehicles/10.jpg
new file mode 100644
index 0000000..0084613
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/10.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/11.jpg b/app/src/main/assets/png_Vehicles/11.jpg
new file mode 100644
index 0000000..ba5f4d4
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/11.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/12.jpg b/app/src/main/assets/png_Vehicles/12.jpg
new file mode 100644
index 0000000..32c7908
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/12.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/13.jpg b/app/src/main/assets/png_Vehicles/13.jpg
new file mode 100644
index 0000000..dd47e76
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/13.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/14.jpg b/app/src/main/assets/png_Vehicles/14.jpg
new file mode 100644
index 0000000..8b886e6
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/14.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/15.jpg b/app/src/main/assets/png_Vehicles/15.jpg
new file mode 100644
index 0000000..cf78752
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/15.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/16.jpg b/app/src/main/assets/png_Vehicles/16.jpg
new file mode 100644
index 0000000..87f8a19
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/16.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/17.jpg b/app/src/main/assets/png_Vehicles/17.jpg
new file mode 100644
index 0000000..011b53b
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/17.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/18.jpg b/app/src/main/assets/png_Vehicles/18.jpg
new file mode 100644
index 0000000..c4433c8
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/18.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/19.jpg b/app/src/main/assets/png_Vehicles/19.jpg
new file mode 100644
index 0000000..b9361f1
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/19.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/2.jpg b/app/src/main/assets/png_Vehicles/2.jpg
new file mode 100644
index 0000000..ff06675
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/2.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/20.jpg b/app/src/main/assets/png_Vehicles/20.jpg
new file mode 100644
index 0000000..3e22c5c
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/20.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/21.jpg b/app/src/main/assets/png_Vehicles/21.jpg
new file mode 100644
index 0000000..f93b99a
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/21.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/22.jpg b/app/src/main/assets/png_Vehicles/22.jpg
new file mode 100644
index 0000000..952afa9
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/22.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/23.jpg b/app/src/main/assets/png_Vehicles/23.jpg
new file mode 100644
index 0000000..a6e1c25
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/23.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/24.jpg b/app/src/main/assets/png_Vehicles/24.jpg
new file mode 100644
index 0000000..83c706a
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/24.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/25.jpg b/app/src/main/assets/png_Vehicles/25.jpg
new file mode 100644
index 0000000..6ebdbf7
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/25.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/26.jpg b/app/src/main/assets/png_Vehicles/26.jpg
new file mode 100644
index 0000000..3805357
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/26.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/27.jpg b/app/src/main/assets/png_Vehicles/27.jpg
new file mode 100644
index 0000000..0849027
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/27.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/28.jpg b/app/src/main/assets/png_Vehicles/28.jpg
new file mode 100644
index 0000000..019baa9
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/28.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/29.jpg b/app/src/main/assets/png_Vehicles/29.jpg
new file mode 100644
index 0000000..c7e0d3a
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/29.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/3.jpg b/app/src/main/assets/png_Vehicles/3.jpg
new file mode 100644
index 0000000..eb33365
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/3.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/30.jpg b/app/src/main/assets/png_Vehicles/30.jpg
new file mode 100644
index 0000000..3820102
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/30.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/31.jpg b/app/src/main/assets/png_Vehicles/31.jpg
new file mode 100644
index 0000000..bba9999
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/31.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/32.jpg b/app/src/main/assets/png_Vehicles/32.jpg
new file mode 100644
index 0000000..6d64a3f
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/32.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/4.jpg b/app/src/main/assets/png_Vehicles/4.jpg
new file mode 100644
index 0000000..968f0ad
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/4.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/5.jpg b/app/src/main/assets/png_Vehicles/5.jpg
new file mode 100644
index 0000000..abdd96c
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/5.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/6.jpg b/app/src/main/assets/png_Vehicles/6.jpg
new file mode 100644
index 0000000..7eeb870
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/6.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/7.jpg b/app/src/main/assets/png_Vehicles/7.jpg
new file mode 100644
index 0000000..c5e6294
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/7.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/8.jpg b/app/src/main/assets/png_Vehicles/8.jpg
new file mode 100644
index 0000000..6628782
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/8.jpg differ
diff --git a/app/src/main/assets/png_Vehicles/9.jpg b/app/src/main/assets/png_Vehicles/9.jpg
new file mode 100644
index 0000000..367b772
Binary files /dev/null and b/app/src/main/assets/png_Vehicles/9.jpg differ
diff --git a/app/src/main/java/com/cake/draw/painting/CakePaintingApp.java b/app/src/main/java/com/cake/draw/painting/CakePaintingApp.java
new file mode 100644
index 0000000..fcbf63b
--- /dev/null
+++ b/app/src/main/java/com/cake/draw/painting/CakePaintingApp.java
@@ -0,0 +1,25 @@
+package com.cake.draw.painting;
+
+import android.app.Application;
+
+import com.tradplus.ads.open.TradPlusSdk;
+import com.up.uploadlibrary.UpLoadManager;
+
+public class CakePaintingApp extends Application {
+
+ public static String Key_ViewDir = "pre_dir";
+
+ public static String Key_Camera = "camera_data";
+
+
+
+
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+
+ UpLoadManager.INSTANCE.init(this, "ocean", (s, s2) -> null);
+ TradPlusSdk.initSdk(this, "2F7E23998B25E09E546263F2CABDFF11");
+ }
+}
diff --git a/app/src/main/java/com/cake/draw/painting/activity/BaseActivity.kt b/app/src/main/java/com/cake/draw/painting/activity/BaseActivity.kt
new file mode 100644
index 0000000..91b3df5
--- /dev/null
+++ b/app/src/main/java/com/cake/draw/painting/activity/BaseActivity.kt
@@ -0,0 +1,36 @@
+package com.cake.draw.painting.activity
+
+import android.os.Bundle
+import androidx.activity.OnBackPressedCallback
+import androidx.appcompat.app.AppCompatActivity
+
+open class BaseActivity: AppCompatActivity() {
+ protected var backPressedCallback: OnBackPressedCallback? = null
+ /** 子类是否需要拦截返回 */
+ protected open fun shouldInterceptBackPress(): Boolean = false
+
+ /** 子类定义拦截后的操作(例如弹窗) */
+ protected open fun onInterceptBackPressed() {}
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setupBackPressedCallback()//初始化back事件
+ }
+ private fun setupBackPressedCallback() {
+ backPressedCallback = object : OnBackPressedCallback(true) {
+ override fun handleOnBackPressed() {
+ if (shouldInterceptBackPress()) {
+ // 由子类处理拦截动作
+ onInterceptBackPressed()
+ } else {
+ // 不拦截:关闭自己
+ isEnabled = false
+ onBackPressedDispatcher.onBackPressed()
+ }
+ }
+ }
+
+ onBackPressedDispatcher.addCallback(this, backPressedCallback!!)
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/cake/draw/painting/activity/CameraCakeActivity.java b/app/src/main/java/com/cake/draw/painting/activity/CameraCakeActivity.java
new file mode 100644
index 0000000..f98809e
--- /dev/null
+++ b/app/src/main/java/com/cake/draw/painting/activity/CameraCakeActivity.java
@@ -0,0 +1,400 @@
+package com.cake.draw.painting.activity;
+
+import androidx.activity.EdgeToEdge;
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.PickVisualMediaRequest;
+import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.camera.core.Camera;
+import androidx.camera.core.CameraSelector;
+import androidx.camera.core.ImageCapture;
+import androidx.camera.core.Preview;
+import androidx.camera.lifecycle.ProcessCameraProvider;
+import androidx.camera.view.PreviewView;
+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.app.Activity;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.Bitmap;
+import android.graphics.Matrix;
+import android.graphics.Point;
+import android.graphics.PointF;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.ParcelFileDescriptor;
+import android.provider.MediaStore;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.SeekBar;
+import android.widget.Toast;
+
+import com.cake.draw.painting.ad.AdsInsUtil;
+import com.cake.draw.painting.ad.LoadListener;
+import com.cake.draw.painting.ad.ShowListener;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.cake.draw.painting.CakePaintingApp;
+import com.cake.draw.painting.R;
+import com.cake.draw.painting.tools.Utils;
+import com.tradplus.ads.base.bean.TPAdInfo;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Objects;
+
+public class CameraCakeActivity extends AppCompatActivity implements View.OnTouchListener, View.OnClickListener {
+ private CameraSelector cameraSelector;
+ private String[] permissions;
+ private int range;
+ private Camera camera;
+ private ImageCapture imageCapture;
+ private PreviewView previewView;
+ private ImageView imageView;
+ private SeekBar seekBar;
+
+ private Double d;
+
+
+ private int MODE;//当前状态
+ public static final int MODE_NONE = 0;//无操作
+ public static final int MODE_DRAG = 1;//单指操作
+ public static final int MODE_SCALE = 2;//双指操作
+
+ private Matrix startMatrix;
+ private Matrix endMatrix = new Matrix();//变化后的矩阵
+ private PointF startPointF = new PointF();//初始坐标
+ private float distance;//初始距离
+ private float scaleMultiple;//缩放倍数
+
+ private ImageView imflash, imScale, imBack;
+ private ImageView imPhoto;
+
+ private String curBitmapPath;
+ private boolean hasPermission = false;
+ private ActivityResultLauncher pickImageLauncher;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ EdgeToEdge.enable(this);
+ // 1. 正确设置布局(仅一次)
+ setContentView(R.layout.activity_camera_cake);
+
+ AdsInsUtil.INSTANCE.showAd(this, AdsInsUtil.Placement.TOP_ON_AD_THREE, new ShowListener() {
+ @Override
+ public void onAdShown(@org.jetbrains.annotations.Nullable TPAdInfo ad) {
+ loadAd();
+ }
+
+ @Override
+ public void onAdClosed() {
+ loadAd();
+ }
+ });
+
+ // 2. 修复:绑定根布局(用系统内置的 android.R.id.content 兜底)
+ View rootView = findViewById(android.R.id.content);
+ if (rootView != null) {
+ ViewCompat.setOnApplyWindowInsetsListener(rootView, (v, insets) -> {
+ Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
+ // 可选:注释下面这行实现完全全屏
+ //v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
+ return insets;
+ });
+ }
+
+ //Utils.setStatusBarTextColor(this, true);
+ previewView = findViewById(R.id.preview);
+ imageView = findViewById(R.id.image);
+ imBack = findViewById(R.id.back);
+
+ seekBar = findViewById(R.id.seekbar);
+ imflash = findViewById(R.id.im_flash);
+ imPhoto = findViewById(R.id.im_photo);
+ imScale = findViewById(R.id.im_scale);
+
+ curBitmapPath = getIntent().getStringExtra(CakePaintingApp.Key_Camera);
+
+ pickImageLauncher = registerForActivityResult(new ActivityResultContracts.PickVisualMedia(), result -> {
+ if(result== null){
+ // TODO: 2025/12/16 toast提示 上传失败
+ Toast.makeText(this,R.string.upload_failed,Toast.LENGTH_SHORT).show();
+ Log.d("----------------tt","msg:----imageUri-111--null");
+ return;
+ }
+ double uriFileSize = getUriFileSize(CameraCakeActivity.this, result);
+ if(uriFileSize>=4){
+ // TODO: 2025/12/16 toast提示 文件不要超过4M
+ Toast.makeText(this,R.string.Documents_not_exceed,Toast.LENGTH_SHORT).show();
+ Log.d("----------------tt","msg:----imageUri-222--uriFileSize="+uriFileSize);
+ return;
+ }
+ Log.d("----------------tt","msg:----imageUri-333--uriFileSize="+uriFileSize);
+
+ imageView.setImageURI(result);
+ });
+
+ init();
+ initClick();
+ }
+
+ public static double getUriFileSize(Context context, Uri uri) {
+ double fileSize = 0.0;
+ ContentResolver contentResolver = context.getContentResolver();
+ if ("file".equals(uri.getScheme())) {
+ File file = new File(Objects.requireNonNull(uri.getPath()));
+ if (file.exists()) {
+ fileSize = (double) file.length();
+ }
+ } else {
+ ParcelFileDescriptor pfd = null;
+ try {
+ pfd = contentResolver.openFileDescriptor(uri, "r");
+ if (pfd != null) {
+ fileSize = (double) pfd.getStatSize();
+ }
+ } catch (Exception e) {
+ Log.e("UriUtils", "Error while retrieving file size: " + e.getMessage(), e);
+ } finally {
+ if (pfd != null) {
+ try {
+ pfd.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ }
+ }
+ return fileSize / 1048576.0;
+ }
+ private void onInitIm(float imW, float imH) {
+ Point screen = Utils.getScreen(this);
+ float newX = screen.x / 2f - imW / 2;
+ float newY = screen.y / 2f - imH / 2;
+ startMatrix = new Matrix();
+ startMatrix.postTranslate(newX, newY);
+ imageView.setImageMatrix(startMatrix);
+
+ Log.d("---------------tt", "------startMatrix-----x=" + newX + "------y=" + newY);
+ }
+
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ switch (event.getAction() & event.getActionMasked()) {
+ case MotionEvent.ACTION_DOWN:
+
+ startMatrix.set(imageView.getImageMatrix());
+ endMatrix.set(imageView.getImageMatrix());
+
+ startPointF.set(event.getX(), event.getY());
+
+
+ Log.d("---------------tt", "------ACTION_DOWN-----x=" + event.getX() + "------y=" + event.getY());
+
+ MODE = MODE_DRAG;
+
+ break;
+ case MotionEvent.ACTION_POINTER_DOWN:
+
+ startMatrix.set(endMatrix);
+
+ distance = Utils.getDistance(event);
+
+ MODE = MODE_SCALE;
+
+ break;
+ case MotionEvent.ACTION_MOVE://滑动(单+双)
+ if (MODE == MODE_DRAG) {//单指滑动时
+
+ endMatrix.set(startMatrix);
+ //向矩阵传入位移距离
+ endMatrix.postTranslate(event.getX() - startPointF.x, event.getY() - startPointF.y);
+ Log.d("---------------tt", "------ACTION_MOVE-----x=" + event.getX() + "------y=" + event.getY());
+ } else if (MODE == MODE_SCALE) {//双指滑动时
+ //计算缩放倍数
+ scaleMultiple = Utils.getDistance(event) / distance;
+ //获取初始矩阵
+ endMatrix.set(startMatrix);
+ //向矩阵传入缩放倍数
+ endMatrix.postScale(scaleMultiple, scaleMultiple, startPointF.x, startPointF.y);
+ }
+ break;
+ case MotionEvent.ACTION_UP://单指离开
+ case MotionEvent.ACTION_POINTER_UP://双指离开
+ //手指离开后,重置状态
+ MODE = MODE_NONE;
+
+ break;
+ }
+ //事件结束后,把矩阵的变化同步到ImageView上
+ imageView.setImageMatrix(endMatrix);
+ return true;
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (v.equals(imBack)) {
+ finish();
+ } else {
+ if (!hasPermission) {
+ showNoPermission();
+ return;
+ }
+ if (v.equals(imflash)) {
+ // 切换闪光灯选中状态
+ // 对camera做空判断,避免空指针
+ if (camera == null) {
+ Toast.makeText(this, getString(R.string.camera_not_ready), Toast.LENGTH_SHORT).show();
+ return;
+ }
+ // 切换闪光灯选中状态
+ boolean selected = imflash.isSelected();
+ imflash.setSelected(!selected);
+ camera.getCameraControl().enableTorch(!selected);
+ } else if (v.equals(imPhoto)) {
+ pickImageLauncher.launch(
+ new PickVisualMediaRequest.Builder()
+ .setMediaType(ActivityResultContracts.PickVisualMedia.ImageOnly.INSTANCE)
+ .build()
+ );
+ } else if (v.equals(imScale)) {
+ // 切换缩放图标选中状态
+ imScale.setSelected(!imScale.isSelected());
+ if (seekBar.getVisibility() == View.VISIBLE) {
+ seekBar.setVisibility(View.GONE);
+ } else if (seekBar.getVisibility() == View.GONE) {
+ seekBar.setVisibility(View.VISIBLE);
+ }
+ }
+ }
+
+ }
+
+ private void initClick() {
+ imBack.setOnClickListener(this);
+ imflash.setOnClickListener(this);
+ imPhoto.setOnClickListener(this);
+ imScale.setOnClickListener(this);
+ seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+ float v = (seekBar.getMax() - progress) / 10.0f;
+ imageView.setAlpha(v);
+
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {
+
+ }
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {
+
+ }
+ });
+ }
+
+ private void init() {
+ cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA;
+ permissions = new String[]{android.Manifest.permission.CAMERA};
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ permissions = new String[]{android.Manifest.permission.CAMERA};
+ } else {
+ permissions = new String[]{android.Manifest.permission.CAMERA};
+ }
+ if (!checkPermission()) {
+ hasPermission = false;
+ imageView.setOnTouchListener(null);
+ ActivityCompat.requestPermissions(this, permissions, 0);
+ } else {
+ hasPermission = true;
+ imageView.setOnTouchListener(this);
+ startCamera();
+ }
+ }
+
+ private void startCamera() {
+ ListenableFuture future = ProcessCameraProvider.getInstance(this);
+ future.addListener(() -> {
+ try {
+ ProcessCameraProvider cameraProvider = future.get();
+
+ Preview preview = new Preview.Builder().build();
+ cameraProvider.unbindAll();
+ ImageCapture.Builder builder1 = new ImageCapture.Builder();
+ imageCapture = builder1.build();
+ camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageCapture);
+ range = Utils.getRange(camera);
+ preview.setSurfaceProvider(previewView.getSurfaceProvider());
+
+ if (curBitmapPath != null) {
+ Bitmap bitmap = Utils.loadImageFromAssets(this, curBitmapPath);
+ imageView.setImageBitmap(bitmap);
+ int width = bitmap.getWidth();
+ int height = bitmap.getHeight();
+ onInitIm(width, height);
+
+
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }, ContextCompat.getMainExecutor(this));
+
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ if (requestCode == 0) {
+ if (checkPermission()) {
+ hasPermission = true;
+ imageView.setOnTouchListener(this);
+ startCamera();
+ } else {
+ hasPermission = false;
+ imageView.setOnTouchListener(null);
+ }
+
+ }
+ }
+
+
+ private boolean checkPermission() {
+ boolean result = true;
+ for (String per : permissions) {
+ if (ActivityCompat.checkSelfPermission(this, per) != PackageManager.PERMISSION_GRANTED) {
+ result = false;
+ }
+ }
+ return result;
+
+ }
+
+ private void showNoPermission() {
+ Toast.makeText(this, getString(R.string.permission_fail), Toast.LENGTH_SHORT).show();
+ }
+
+ private void loadAd(){
+ AdsInsUtil.INSTANCE.loadAd(this, AdsInsUtil.Placement.TOP_ON_AD_THREE, new LoadListener() {
+ @Override
+ public void loadFailed(@NotNull String error) {
+
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/cake/draw/painting/activity/HomeCakeActivity.java b/app/src/main/java/com/cake/draw/painting/activity/HomeCakeActivity.java
new file mode 100644
index 0000000..5f98882
--- /dev/null
+++ b/app/src/main/java/com/cake/draw/painting/activity/HomeCakeActivity.java
@@ -0,0 +1,186 @@
+package com.cake.draw.painting.activity;
+
+import android.Manifest;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+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 androidx.fragment.app.Fragment;
+import androidx.viewpager2.adapter.FragmentStateAdapter;
+import androidx.viewpager2.widget.ViewPager2;
+
+import com.cake.draw.painting.ad.AdsInsUtil;
+import com.cake.draw.painting.ad.LoadListener;
+import com.cake.draw.painting.tools.Utils;
+import com.cake.draw.painting.fragment.HomeCakeFragment;
+import com.cake.draw.painting.fragment.SettingCakeFragment;
+import com.google.android.material.tabs.TabLayout;
+import com.cake.draw.painting.R;
+import com.cake.draw.painting.databinding.ActivityHomeCakeBinding;
+import com.tradplus.ads.base.bean.TPAdInfo;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class HomeCakeActivity extends AppCompatActivity {
+
+ private ActivityHomeCakeBinding binding;
+ private List listFragment = new ArrayList<>();
+ private String[] permissions;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ EdgeToEdge.enable(this);
+
+ binding = ActivityHomeCakeBinding.inflate(getLayoutInflater());
+ setContentView(binding.getRoot());
+ View rootView = binding.getRoot();
+ if (rootView != null) {
+ ViewCompat.setOnApplyWindowInsetsListener(rootView, (v, insets) -> {
+ Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
+ return insets;
+ });
+ }
+
+ binding.tab.setSelectedTabIndicatorHeight(0); // 设置指示条高度为0
+ binding.tab.setSelectedTabIndicator(null); // 清空指示条样式
+ binding.tab.setTabIndicatorFullWidth(false); // 确保指示条完全不显示(兜底)
+
+ listFragment.add(HomeCakeFragment.newInstance());
+ listFragment.add(SettingCakeFragment.newInstance());
+ onTabInit();
+ binding.viewPager2.setUserInputEnabled(false);
+ binding.viewPager2.setAdapter(new FragmentStateAdapter(this) {
+ @NonNull
+ @Override
+ public Fragment createFragment(int position) {
+ return listFragment.get(position);
+ }
+
+ @Override
+ public int getItemCount() {
+ return listFragment.size();
+ }
+ });
+ bingTabVp();
+ TabLayout.Tab firstTab = binding.tab.getTabAt(0);
+ if (firstTab != null) {
+ View customView = firstTab.getCustomView();
+ if (customView != null) {
+ ImageView icon = customView.findViewById(R.id.im_icon);
+ TextView tv = customView.findViewById(R.id.textView);
+ icon.setSelected(true);
+ tv.setSelected(true);
+ }
+ }
+ }
+
+ private void bingTabVp() {
+ binding.tab.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
+ @Override
+ public void onTabSelected(TabLayout.Tab tab) {
+ View tabView = tab.getCustomView();
+ if (tabView != null) {
+ ImageView ivIcon = tabView.findViewById(R.id.im_icon);
+ TextView tvText = tabView.findViewById(R.id.textView);
+ ivIcon.setSelected(true);
+ tvText.setSelected(true);
+ }
+ binding.viewPager2.setCurrentItem(tab.getPosition());
+ }
+
+ @Override
+ public void onTabUnselected(TabLayout.Tab tab) {
+ View tabView = tab.getCustomView();
+ if (tabView != null) {
+ ImageView ivIcon = tabView.findViewById(R.id.im_icon);
+ TextView tvText = tabView.findViewById(R.id.textView);
+ ivIcon.setSelected(false);
+ tvText.setSelected(false);
+ }
+ }
+
+ @Override
+ public void onTabReselected(TabLayout.Tab tab) {}
+ });
+
+ // ViewPager2联动Tab
+ binding.viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
+ @Override
+ public void onPageSelected(int position) {
+ super.onPageSelected(position);
+ binding.tab.getTabAt(position).select();
+ }
+ });
+ }
+
+ private void onTabInit() {
+ for (int i = 0; i < listFragment.size(); i++) {
+ TabLayout.Tab tab = binding.tab.newTab();
+ View inflate = LayoutInflater.from(this).inflate(R.layout.item_tab_selector_cake, null, false);
+ ImageView icon = inflate.findViewById(R.id.im_icon);
+ TextView textView = inflate.findViewById(R.id.textView);
+
+ if (i == 0) {
+ textView.setText(getString(R.string.tab_draw));
+ icon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.selector_tab_home_cake));
+ icon.setSelected(true);
+ textView.setSelected(true);
+ } else {
+ textView.setText(getString(R.string.tab_set));
+ icon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.selector_tab_setting_cake));
+ icon.setSelected(false);
+ textView.setSelected(false);
+ }
+
+ tab.setCustomView(inflate);
+ binding.tab.addTab(tab);
+ }
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ loadAd();
+ }
+
+ private void loadAd() {
+ AdsInsUtil.INSTANCE.loadAd(this, AdsInsUtil.Placement.TOP_ON_AD_THREE, new LoadListener() {
+ @Override
+ public void loaded(@NotNull TPAdInfo ad) {
+
+ }
+
+ @Override
+ public void loadFailed(@NotNull String error) {
+
+ }
+ });
+ AdsInsUtil.INSTANCE.loadAd(this, AdsInsUtil.Placement.TOP_ON_AD_TOW, new LoadListener() {
+ @Override
+ public void loaded(@NotNull TPAdInfo ad) {
+
+ }
+
+ @Override
+ public void loadFailed(@NotNull String error) {
+
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/com/cake/draw/painting/activity/SearchCakeActivity.java b/app/src/main/java/com/cake/draw/painting/activity/SearchCakeActivity.java
new file mode 100644
index 0000000..f539c77
--- /dev/null
+++ b/app/src/main/java/com/cake/draw/painting/activity/SearchCakeActivity.java
@@ -0,0 +1,299 @@
+package com.cake.draw.painting.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.Toast;
+
+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 androidx.recyclerview.widget.RecyclerView;
+
+import com.cake.draw.painting.CakePaintingApp;
+import com.cake.draw.painting.ad.AdsInsUtil;
+import com.cake.draw.painting.ad.LoadListener;
+import com.cake.draw.painting.ad.ShowListener;
+import com.cake.draw.painting.tools.Keys;
+import com.cake.draw.painting.R;
+import com.cake.draw.painting.adapter.HomeCakeAdapter;
+import com.cake.draw.painting.databinding.ActivitySearchCakeBinding;
+import com.cake.draw.painting.tools.Utils;
+import com.cake.draw.painting.onClickListener;
+import com.cake.draw.painting.fragment.HomeCakeFragment;
+import com.tradplus.ads.base.bean.TPAdInfo;
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+public class SearchCakeActivity extends BaseActivity implements onClickListener {
+ private ActivitySearchCakeBinding binding;
+ private HomeCakeAdapter searchAdapter;
+ private ExecutorService executorService; // 异步线程池(避免主线程阻塞)
+ private boolean isSearching = false; // 防止重复搜索
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ // 启用EdgeToEdge
+ EdgeToEdge.enable(this);
+ // 绑定布局(ViewBinding方式)
+ binding = ActivitySearchCakeBinding.inflate(getLayoutInflater());
+ setContentView(binding.getRoot());
+
+
+
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.search), (v, insets) -> {
+ Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
+ return insets;
+ });
+
+ // 初始化控件
+ initView();
+ // 初始化RecyclerView
+ initRecycler();
+ // 初始化搜索事件
+ initSearchEvent();
+ // 初始化返回按钮
+ initBackButton();
+ }
+
+ /**
+ * 初始化基础控件
+ */
+ private void initView() {
+ // 隐藏初始状态的空布局和加载进度条
+ binding.emptyLayout.setVisibility(View.GONE);
+ binding.searchPb.setVisibility(View.GONE);
+ // 给输入框设置默认提示
+ binding.etSearch.setHint(getString(R.string.search_sketches));
+ }
+
+ /**
+ * 初始化RecyclerView(搜索结果列表)
+ */
+ private void initRecycler() {
+ // 使用和HomeFragment相同的Adapter(也可自定义SearchAdapter)
+ searchAdapter = new HomeCakeAdapter(this);
+ searchAdapter.setListener(this::onClickItem);
+
+ // 网格布局(3列,和首页保持一致)
+ GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);
+ gridLayoutManager.setOrientation(RecyclerView.VERTICAL);
+ binding.resultRecycler.setLayoutManager(gridLayoutManager);
+
+ // 添加网格间距(复用HomeFragment的装饰器)
+ binding.resultRecycler.addItemDecoration(new HomeCakeFragment.GridSpacingItemDecoration(
+ 3, dp2px(12), true));
+ binding.resultRecycler.setHasFixedSize(true);
+ binding.resultRecycler.setItemAnimator(null);
+ binding.resultRecycler.setAdapter(searchAdapter);
+ }
+
+ /**
+ * 初始化搜索事件(输入框回车 + 搜索按钮点击)
+ */
+ private void initSearchEvent() {
+ // 1. 搜索按钮点击事件
+ binding.btnSearch.setOnClickListener(v -> performSearch());
+
+ // 2. 输入框回车触发搜索
+ binding.etSearch.setOnEditorActionListener((v, actionId, event) -> {
+ if (actionId == EditorInfo.IME_ACTION_SEARCH) {
+ performSearch();
+ // 隐藏软键盘
+ hideKeyboard();
+ return true;
+ }
+ return false;
+ });
+ }
+
+ /**
+ * 初始化返回按钮
+ */
+ private void initBackButton() {
+ binding.imBack.setOnClickListener(v -> {
+ // 返回上一页(销毁当前Activity)
+ onInterceptBackPressed();
+ });
+ }
+
+ /**
+ * 执行搜索逻辑
+ */
+ private void performSearch() {
+ // 防止重复搜索
+ if (isSearching) {
+ return;
+ }
+
+ // 获取搜索关键词
+ String keyword = binding.etSearch.getText().toString().trim();
+ if (TextUtils.isEmpty(keyword)) {
+ Toast.makeText(this, R.string.please_input_search_keyword, Toast.LENGTH_SHORT).show();
+ return;
+ }
+
+ // 显示加载状态
+ showLoading(true);
+ // 隐藏空布局
+ binding.emptyLayout.setVisibility(View.GONE);
+
+ // 异步搜索(避免主线程阻塞Assets文件遍历)
+ if (executorService == null) {
+ executorService = Executors.newSingleThreadExecutor();
+ }
+ executorService.execute(() -> {
+ // 模拟搜索耗时(实际可移除)
+ try {
+ Thread.sleep(300);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+
+ // 核心:遍历Assets所有目录,匹配包含关键词的图片路径
+ List allImagePaths = new ArrayList<>();
+ // 替换为实际的全量目录(如Keys.getAllDir())
+ List allDirs = Keys.getAllDir();
+ if (allDirs != null) {
+ for (String dir : allDirs) {
+ List dirImagePaths = Utils.getImagePathsByDir(this, dir);
+ for (String path : dirImagePaths) {
+ // 匹配规则:路径/文件名包含关键词(不区分大小写)
+ if (path.toLowerCase().contains(keyword.toLowerCase())) {
+ allImagePaths.add(path);
+ }
+ }
+ }
+ }
+
+ // 切回主线程更新UI
+ runOnUiThread(() -> {
+ isSearching = false;
+ showLoading(false);
+
+ if (allImagePaths.isEmpty()) {
+ // 无搜索结果:显示空布局
+ showEmptyState(true);
+ searchAdapter.setData(new ArrayList<>());
+ } else {
+ // 有搜索结果:更新Adapter
+ showEmptyState(false);
+ searchAdapter.setData(allImagePaths);
+ }
+ });
+ });
+ }
+
+ /**
+ * 显示/隐藏加载状态
+ */
+ private void showLoading(boolean show) {
+ isSearching = show;
+ binding.searchPb.setVisibility(show ? View.VISIBLE : View.GONE);
+ binding.resultRecycler.setVisibility(show ? View.GONE : View.VISIBLE);
+ }
+
+ /**
+ * 显示/隐藏空状态
+ */
+ private void showEmptyState(boolean show) {
+ binding.emptyLayout.setVisibility(show ? View.VISIBLE : View.GONE);
+ binding.resultRecycler.setVisibility(show ? View.GONE : View.VISIBLE);
+ }
+
+ /**
+ * 隐藏软键盘
+ */
+ private void hideKeyboard() {
+ InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
+ if (imm.isActive() && getCurrentFocus() != null) {
+ imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
+ }
+ }
+
+ /**
+ * 搜索结果Item点击跳转
+ */
+ @Override
+ public void onClickItem(boolean viewAll, String dir) {
+ if (TextUtils.isEmpty(dir)) {
+ Toast.makeText(this, R.string.invalid_directory, Toast.LENGTH_SHORT).show();
+ return;
+ }
+ // 跳转到CameraActivity(和首页Item点击逻辑一致)
+ Intent intent = new Intent(this, CameraCakeActivity.class);
+ intent.putExtra(CakePaintingApp.Key_Camera, dir);
+ intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ startActivity(intent);
+ }
+
+ /**
+ * dp转px适配
+ */
+ private int dp2px(int dp) {
+ return (int) (getResources().getDisplayMetrics().density * dp + 0.5f);
+ }
+
+ /**
+ * 释放资源(防止内存泄漏)
+ */
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ // 关闭线程池
+ if (executorService != null && !executorService.isShutdown()) {
+ executorService.shutdown();
+ }
+ // 解绑ViewBinding
+ binding = null;
+ searchAdapter = null;
+ }
+
+
+ @Override
+ protected boolean shouldInterceptBackPress() {
+ return true;
+ }
+
+ @Override
+ protected void onInterceptBackPressed() {
+ AdsInsUtil.INSTANCE.showAd(this, AdsInsUtil.Placement.TOP_ON_AD_TOW, new ShowListener() {
+ @Override
+ public void onAdShown(@Nullable TPAdInfo ad) {
+ loadAd();
+ }
+
+ @Override
+ public void onAdClosed() {
+ loadAd();
+ }
+ });
+ if (getBackPressedCallback() != null) {
+ getBackPressedCallback().setEnabled(false);
+ }
+ getOnBackPressedDispatcher().onBackPressed();
+ }
+
+ private void loadAd(){
+ AdsInsUtil.INSTANCE.loadAd(this, AdsInsUtil.Placement.TOP_ON_AD_TOW, new LoadListener() {
+ @Override
+ public void loadFailed(@NotNull String error) {
+
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/cake/draw/painting/activity/SplashActivity.kt b/app/src/main/java/com/cake/draw/painting/activity/SplashActivity.kt
new file mode 100644
index 0000000..f9559ad
--- /dev/null
+++ b/app/src/main/java/com/cake/draw/painting/activity/SplashActivity.kt
@@ -0,0 +1,172 @@
+package com.cake.draw.painting.activity
+
+import android.annotation.SuppressLint
+import android.content.Intent
+import android.os.Bundle
+import android.os.CountDownTimer
+import android.widget.Toast
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowCompat
+import androidx.core.view.WindowInsetsCompat
+import com.cake.draw.painting.R
+import com.cake.draw.painting.ad.AdShowFailed
+import com.cake.draw.painting.ad.AdsInsUtil
+import com.cake.draw.painting.ad.LoadListener
+import com.cake.draw.painting.ad.ShowListener
+import com.cake.draw.painting.databinding.ActivityStartCakeBinding
+import com.tradplus.ads.base.bean.TPAdInfo
+
+class SplashActivity : BaseActivity() {
+
+ private var countDownTimer: CountDownTimer? = null
+ private lateinit var vb: ActivityStartCakeBinding
+
+ private val tickInterval = 100L
+ private val totalTime = 15_000L
+
+ /**
+ * 总 tick 次数 15次
+ */
+ private val totalTicks = totalTime / tickInterval
+
+ /**
+ * 每 tick 增加的进度 0.6666~
+ */
+ private val normalStep = 100f / totalTicks
+ private val fastStep = normalStep * 4 // 加速倍率
+ private var currentStep = normalStep
+
+ // 进度控制
+ private var progress = 0f
+
+ // 广告状态
+ private var adAvailable = false
+ private var hasNavigated = false
+
+ @SuppressLint("MissingInflatedId")
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ vb = ActivityStartCakeBinding.inflate(layoutInflater)
+ setContentView(vb.root)
+
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.start)) { v, insets ->
+ val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
+ insets
+ }
+ val windowInsetsController = WindowCompat.getInsetsController(window, window.decorView)
+ windowInsetsController.isAppearanceLightStatusBars = true//状态栏文字颜色
+
+ // 1. 进来就 load 广告
+ loadSplashAd()
+
+ // 2. 启动进度条(只启动一次)
+ startProgressTimer()
+ }
+
+ private fun startProgressTimer() {
+ countDownTimer?.cancel()
+
+ countDownTimer = object : CountDownTimer(totalTime, tickInterval) {
+
+ @SuppressLint("SetTextI18n")
+ override fun onTick(millisUntilFinished: Long) {
+ progress += currentStep
+ if (progress >= 100f) {
+ progress = 100f
+ vb.loadingProgressBar.progress = 100
+ cancel()
+ onProgressFinished()
+ } else {
+ vb.loadingProgressBar.progress = progress.toInt()
+ }
+ }
+
+ override fun onFinish() {
+ // 不使用
+ }
+ }.start()
+ }
+
+
+ // 进度走完后的统一出口
+ private fun onProgressFinished() {
+ if (hasNavigated) return
+
+ if (adAvailable) {
+ showSplashAd()
+ } else {
+ navigateToNext()
+ }
+ }
+
+ private fun loadSplashAd() {
+ AdsInsUtil.loadAd(
+ act = this,
+ adID = AdsInsUtil.Placement.TOP_ON_AD_ONE,
+ loadListener = object : LoadListener {
+
+ override fun loaded(ad: TPAdInfo) {
+ adAvailable = true
+ accelerateProgress()
+ }
+
+ override fun loadFailed(error: String) {
+ adAvailable = false
+ accelerateProgress()
+ }
+ }
+ )
+ }
+
+ // 广告 load 完 → 加速
+ private fun accelerateProgress() {
+ currentStep = fastStep
+ }
+
+ private fun showSplashAd() {
+ AdsInsUtil.showAd(
+ act = this,
+ adID = AdsInsUtil.Placement.TOP_ON_AD_ONE,
+ listener = object : ShowListener {
+
+ override fun onAdShown(ad: TPAdInfo?) {}
+
+ override fun onAdShowFailed(error: AdShowFailed?) {
+ navigateToNext()
+ }
+
+ override fun onAdClosed() {
+ navigateToNext()
+ }
+ }
+ )
+ }
+
+ private fun navigateToNext() {
+ if (hasNavigated) return
+ hasNavigated = true
+ navigateToMainActivity()
+ }
+
+ override fun shouldInterceptBackPress(): Boolean = true
+ override fun onInterceptBackPressed() {}
+
+ @SuppressLint("QueryPermissionsNeeded")
+ private fun navigateToMainActivity() {
+ try {
+ startActivity(Intent(this, HomeCakeActivity::class.java))
+ finish()
+ } catch (e: Exception) {
+ Toast.makeText(this, "跳转失败", Toast.LENGTH_SHORT).show()
+ e.printStackTrace()
+ finish()
+ }
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ countDownTimer?.cancel()
+ countDownTimer = null
+ }
+}
diff --git a/app/src/main/java/com/cake/draw/painting/ad/AdInstLoad.kt b/app/src/main/java/com/cake/draw/painting/ad/AdInstLoad.kt
new file mode 100644
index 0000000..1877fcc
--- /dev/null
+++ b/app/src/main/java/com/cake/draw/painting/ad/AdInstLoad.kt
@@ -0,0 +1,95 @@
+package com.cake.draw.painting.ad
+
+import android.app.Activity
+import android.util.Log
+import com.mbridge.msdk.interstitial.signalcommon.interstitial
+import com.tradplus.ads.base.bean.TPAdError
+import com.tradplus.ads.base.bean.TPAdInfo
+import com.tradplus.ads.open.interstitial.InterstitialAdListener
+import com.tradplus.ads.open.interstitial.TPInterstitial
+
+class AdInstLoad {
+ private var mPlace: String
+ private var adLoadListener: LoadListener? = null
+ private var activity: Activity? = null
+
+ constructor(activity: Activity, place: String, listener: LoadListener?) {
+ this.mPlace = place
+ this.adLoadListener = listener
+ this.activity = activity
+ init()
+ }
+
+ constructor(place: String, listener: LoadListener?) {
+ this.mPlace = place
+ this.adLoadListener = listener
+ init()
+ }
+
+ private fun init() {
+ val interstitialAd = InstAdCacheManager.instance.getAdCache(mPlace)
+ if (interstitialAd != null && interstitialAd.isReady) {
+ Log.d("ocean", "$mPlace 有缓存不进行load")
+ adLoadListener?.loadFailed("有缓存不进行load")
+ return
+ }
+
+ val tpInterstitial = TPInterstitial(activity, mPlace)
+ tpInterstitial.setAdListener(object : InterstitialAdListener {
+ //广告加载完成 首个广告源加载成功时回调 一次加载流程只会回调一次
+ override fun onAdLoaded(tpAdInfo: TPAdInfo?) {
+ if (tpAdInfo != null) {
+ Log.d("ocean", "$mPlace 广告load成功,tpAdInfo有值")
+ InstAdCacheManager.Companion.instance.setAdCache(mPlace, tpInterstitial)
+ adLoadListener?.loaded(tpAdInfo)
+ } else {
+ adLoadListener?.loadFailed("tpAdInfo没有值")
+ Log.d("ocean", "$mPlace tpAdInfo没有值")
+ }
+ }
+
+ // 广告被点击
+ override fun onAdClicked(tpAdInfo: TPAdInfo?) {
+ Log.d("ocean", "$mPlace tradplus onAdClicked")
+ }
+
+ // 广告成功展示在页面上
+ override fun onAdImpression(tpAdInfo: TPAdInfo?) {
+ Log.d("ocean", "$mPlace tradplus onAdImpression")
+ }
+
+ // 广告加载失败
+ override fun onAdFailed(error: TPAdError?) {
+ adLoadListener?.loadFailed("code->${error?.errorCode}message->${error?.errorMsg}")
+ Log.d(
+ "ocean",
+ "$mPlace load ad onError->code->${error?.errorCode}message->${error?.errorMsg}"
+ )
+ }
+
+ // 广告被关闭
+ override fun onAdClosed(tpAdInfo: TPAdInfo?) {
+ Log.d("ocean", "$mPlace tradplus onAdClosed")
+ }
+
+ // 视频播放开始(部分广告源支持)
+ override fun onAdVideoStart(tpAdInfo: TPAdInfo?) {
+ Log.d("ocean", "$mPlace tradplus onAdVideoStart")
+ }
+
+ //视频播放结束(部分广告源支持)
+ override fun onAdVideoEnd(tpAdInfo: TPAdInfo?) {
+ Log.d("ocean", "$mPlace tradplus onAdVideoEnd")
+ }
+
+ //视频播放失败(部分广告源支持)
+ override fun onAdVideoError(tpAdInfo: TPAdInfo?, error: TPAdError?) {
+ Log.d(
+ "ocean",
+ "$mPlace onAdVideoError code->${error?.errorCode}message->${error?.errorMsg}"
+ )
+ }
+ })
+ tpInterstitial.loadAd()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/cake/draw/painting/ad/AdInstShower.kt b/app/src/main/java/com/cake/draw/painting/ad/AdInstShower.kt
new file mode 100644
index 0000000..85d326c
--- /dev/null
+++ b/app/src/main/java/com/cake/draw/painting/ad/AdInstShower.kt
@@ -0,0 +1,69 @@
+package com.cake.draw.painting.ad
+
+import android.app.Activity
+import android.util.Log
+import com.tradplus.ads.base.bean.TPAdError
+import com.tradplus.ads.base.bean.TPAdInfo
+import com.tradplus.ads.open.interstitial.InterstitialAdListener
+
+class AdInstShower {
+ private var mPlace: String
+ private var showListener: ShowListener? = null
+ private var activity: Activity? = null
+
+ constructor(activity: Activity, place: String, showListener: ShowListener?) {
+ this.mPlace = place
+ this.showListener = showListener
+ this.activity = activity
+ init()
+ }
+
+ constructor(place: String, showListener: ShowListener?) {
+ this.mPlace = place
+ this.showListener = showListener
+ init()
+ }
+
+ private fun init() {
+ val interstitialAd = InstAdCacheManager.Companion.instance.getAdCache(mPlace)
+ interstitialAd?.setAdListener(object : InterstitialAdListener {
+ //广告加载完成 首个广告源加载成功时回调 一次加载流程只会回调一次
+ override fun onAdLoaded(tpAdInfo: TPAdInfo?) {}
+
+ // 广告被点击
+ override fun onAdClicked(tpAdInfo: TPAdInfo?) {
+ showListener?.onAdClicked()
+ Log.d("ocean", "AdInstShower 广告点击回调")
+ }
+
+ // 广告成功展示在页面上
+ override fun onAdImpression(tpAdInfo: TPAdInfo?) {
+ showListener?.onAdShown(tpAdInfo)
+ Log.d("ocean", "AdInstShower 广告展示回调")
+ }
+
+ // 广告加载失败
+ override fun onAdFailed(error: TPAdError?) {}
+
+ // 广告被关闭
+ override fun onAdClosed(tpAdInfo: TPAdInfo?) {
+ showListener?.onAdClosed()
+ Log.d("ocean", "AdInstShower 广告关闭回调")
+ }
+
+ // 视频播放开始(部分广告源支持)
+ override fun onAdVideoStart(tpAdInfo: TPAdInfo?) {}
+
+ //视频播放结束(部分广告源支持)
+ override fun onAdVideoEnd(tpAdInfo: TPAdInfo?) {}
+
+ //视频播放失败(部分广告源支持)
+ override fun onAdVideoError(tpAdInfo: TPAdInfo?, error: TPAdError?) {
+ Log.d("ocean", "AdInstShower 视频广告播放失败回调->${error}")
+ showListener?.onAdShowFailed(AdShowFailed(error?.errorMsg.toString()))
+ }
+ })
+ interstitialAd?.showAd(activity!!, mPlace)
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/cake/draw/painting/ad/AdShowFailed.kt b/app/src/main/java/com/cake/draw/painting/ad/AdShowFailed.kt
new file mode 100644
index 0000000..1fa83de
--- /dev/null
+++ b/app/src/main/java/com/cake/draw/painting/ad/AdShowFailed.kt
@@ -0,0 +1,5 @@
+package com.cake.draw.painting.ad
+
+data class AdShowFailed(
+ val msg: String = "",
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/cake/draw/painting/ad/AdsInsUtil.kt b/app/src/main/java/com/cake/draw/painting/ad/AdsInsUtil.kt
new file mode 100644
index 0000000..481f5bf
--- /dev/null
+++ b/app/src/main/java/com/cake/draw/painting/ad/AdsInsUtil.kt
@@ -0,0 +1,28 @@
+package com.cake.draw.painting.ad
+
+import android.app.Activity
+
+object AdsInsUtil {
+
+ object Placement {
+ const val TOP_ON_AD_ONE = "59E907EE6D2723893762AF6D37478E12"
+ const val TOP_ON_AD_TOW = "F88C6C0524B477A3C684EF3701DA2612"
+ const val TOP_ON_AD_THREE = "C54011FD9ACB782C1DCBE2C5B534C912"
+ }
+
+ fun loadAd(
+ act: Activity,
+ adID: String,
+ loadListener: LoadListener?
+ ): AdInstLoad {
+ return AdInstLoad(act, adID, loadListener)
+ }
+
+ fun showAd(
+ act: Activity,
+ adID: String,
+ listener: ShowListener
+ ): AdInstShower {
+ return AdInstShower(act, adID, listener)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/cake/draw/painting/ad/InstAdCacheManager.kt b/app/src/main/java/com/cake/draw/painting/ad/InstAdCacheManager.kt
new file mode 100644
index 0000000..90e68dc
--- /dev/null
+++ b/app/src/main/java/com/cake/draw/painting/ad/InstAdCacheManager.kt
@@ -0,0 +1,35 @@
+package com.cake.draw.painting.ad
+
+import com.tradplus.ads.open.interstitial.TPInterstitial
+
+class InstAdCacheManager {
+ private val mAdCacheDict: MutableMap = mutableMapOf()
+
+ companion object {
+ val instance: InstAdCacheManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+ InstAdCacheManager()
+ }
+ }
+
+ fun setAdCache(place: String, adCache: TPInterstitial) {
+ mAdCacheDict[place] = adCache
+ }
+
+ fun getAdCache(place: String): TPInterstitial? {
+ return mAdCacheDict[place]
+ }
+
+ fun getLoadedInstCount(): Int {
+ var count = 0
+ try {
+ mAdCacheDict.forEach { (key, value) ->
+ if (value.isReady) {
+ count += 1
+ }
+ }
+ } catch (_: Exception) {
+
+ }
+ return count
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/cake/draw/painting/ad/LoadListener.kt b/app/src/main/java/com/cake/draw/painting/ad/LoadListener.kt
new file mode 100644
index 0000000..d0653dd
--- /dev/null
+++ b/app/src/main/java/com/cake/draw/painting/ad/LoadListener.kt
@@ -0,0 +1,8 @@
+package com.cake.draw.painting.ad
+
+import com.tradplus.ads.base.bean.TPAdInfo
+
+interface LoadListener {
+ fun loadFailed(error: String) {}
+ fun loaded(ad: TPAdInfo) {}
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/cake/draw/painting/ad/ShowListener.kt b/app/src/main/java/com/cake/draw/painting/ad/ShowListener.kt
new file mode 100644
index 0000000..10934ca
--- /dev/null
+++ b/app/src/main/java/com/cake/draw/painting/ad/ShowListener.kt
@@ -0,0 +1,10 @@
+package com.cake.draw.painting.ad
+
+import com.tradplus.ads.base.bean.TPAdInfo
+
+interface ShowListener {
+ fun onAdShown(ad: TPAdInfo?) {}
+ fun onAdShowFailed(error: AdShowFailed?) {}
+ fun onAdClosed() {}
+ fun onAdClicked() {}
+}
diff --git a/app/src/main/java/com/cake/draw/painting/adapter/HomeCakeAdapter.java b/app/src/main/java/com/cake/draw/painting/adapter/HomeCakeAdapter.java
new file mode 100644
index 0000000..91b36d2
--- /dev/null
+++ b/app/src/main/java/com/cake/draw/painting/adapter/HomeCakeAdapter.java
@@ -0,0 +1,78 @@
+package com.cake.draw.painting.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+import com.cake.draw.painting.databinding.ItemHomeImageCakeBinding;
+import com.cake.draw.painting.tools.Utils;
+import com.cake.draw.painting.onClickListener;
+import java.util.List;
+
+public class HomeCakeAdapter extends RecyclerView.Adapter {
+ private Context context;
+ private List imagePathList; // 唯一图片路径列表(删除data变量)
+ private String currentCategoryDir;
+ private onClickListener listener;
+
+ public void setData(List newImagePathList) {
+ this.imagePathList = newImagePathList;
+ notifyDataSetChanged(); // 刷新列表
+ }
+
+ public HomeCakeAdapter(Context context) {
+ this.context = context;
+ }
+
+ // 设置item点击监听
+ public void setListener(onClickListener listener) {
+ this.listener = listener;
+ }
+
+ // 核心:刷新分类图片数据
+ public void refreshData(List newImagePathList, String categoryDir) {
+ this.imagePathList = newImagePathList;
+ this.currentCategoryDir = categoryDir;
+ notifyDataSetChanged(); // 刷新列表
+ }
+
+ @NonNull
+ @Override
+ public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ // 加载图片item布局(见第三步)
+ ItemHomeImageCakeBinding binding = ItemHomeImageCakeBinding.inflate(
+ LayoutInflater.from(context), parent, false);
+ return new ViewHolder(binding);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
+ String imageAssetPath = imagePathList.get(position);
+ // 从Assets加载图片(调用Utils的loadImageFromAssets方法)
+ holder.binding.ivImage.setImageBitmap(Utils.loadImageFromAssets(context, imageAssetPath));
+
+ // 图片点击事件(可跳转Camera/PreView)
+ holder.binding.ivImage.setOnClickListener(v -> {
+ if (listener != null) {
+ listener.onClickItem(false, imageAssetPath);
+ }
+ });
+ }
+
+ @Override
+ public int getItemCount() {
+ return imagePathList == null ? 0 : imagePathList.size();
+ }
+
+ // ViewHolder:绑定图片item布局
+ public static class ViewHolder extends RecyclerView.ViewHolder {
+ ItemHomeImageCakeBinding binding;
+
+ public ViewHolder(ItemHomeImageCakeBinding binding) {
+ super(binding.getRoot());
+ this.binding = binding;
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/cake/draw/painting/fragment/HomeCakeFragment.java b/app/src/main/java/com/cake/draw/painting/fragment/HomeCakeFragment.java
new file mode 100644
index 0000000..f45ba2e
--- /dev/null
+++ b/app/src/main/java/com/cake/draw/painting/fragment/HomeCakeFragment.java
@@ -0,0 +1,291 @@
+package com.cake.draw.painting.fragment;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.widget.AppCompatButton;
+import androidx.fragment.app.Fragment;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.cake.draw.painting.CakePaintingApp;
+import com.cake.draw.painting.R;
+import com.cake.draw.painting.activity.CameraCakeActivity;
+import com.cake.draw.painting.activity.SearchCakeActivity;
+import com.cake.draw.painting.adapter.HomeCakeAdapter;
+import com.cake.draw.painting.databinding.FragmentHomeCakeBinding;
+import com.cake.draw.painting.tools.Keys;
+import com.cake.draw.painting.tools.Utils;
+import com.cake.draw.painting.onClickListener;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class HomeCakeFragment extends Fragment implements onClickListener {
+ private static final String TAG = "HomeFragment";
+ private FragmentHomeCakeBinding fragmentHomeBinding;
+ private List allCategoryDirs;
+ private AppCompatButton selectedButton;
+ private HomeCakeAdapter homeCakeAdapter;
+ // 加载状态标记
+ private boolean isLoading = false;
+
+ public HomeCakeFragment() {
+ }
+
+ public static HomeCakeFragment newInstance() {
+ return new HomeCakeFragment();
+ }
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ allCategoryDirs = Keys.getAllDir();
+ if (allCategoryDirs == null) {
+ allCategoryDirs = new ArrayList<>();
+ }
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ fragmentHomeBinding = FragmentHomeCakeBinding.inflate(inflater, container, false);
+ initCategoryButtons();
+ initRecycler();
+ initSearch(); // 初始化搜索图标跳转逻辑
+
+ // 初始化时加载第一个分类的数据(关键:补充默认加载)
+ if (!allCategoryDirs.isEmpty()) {
+ loadCategoryData(allCategoryDirs.get(0));
+ }
+
+ return fragmentHomeBinding.getRoot();
+ }
+
+ /**
+ * 初始化分类按钮栏
+ */
+ private void initCategoryButtons() {
+ LinearLayout buttonContainer = fragmentHomeBinding.llCategoryButtons;
+ buttonContainer.removeAllViews();
+
+ for (int i = 0; i < allCategoryDirs.size(); i++) {
+ String dir = allCategoryDirs.get(i);
+ String categoryName = dir.contains("_") ? dir.substring(dir.lastIndexOf("_") + 1) : dir;
+
+ AppCompatButton btn = new AppCompatButton(requireContext());
+ btn.setText(categoryName);
+ btn.setTextSize(14);
+ // dp转px适配
+ int paddingHorizontal = dp2px(16);
+ int paddingVertical = dp2px(8);
+ btn.setPadding(paddingHorizontal, paddingVertical, paddingHorizontal, paddingVertical);
+ btn.setBackgroundResource(R.drawable.selector_btn_category_cake);
+ btn.setTextColor(getResources().getColorStateList(R.color.selector_btn_text_cake));
+
+ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.WRAP_CONTENT,
+ LinearLayout.LayoutParams.WRAP_CONTENT
+ );
+ params.setMargins(dp2px(8), 0, dp2px(8), 0);
+ btn.setLayoutParams(params);
+
+ int finalI = i;
+ btn.setOnClickListener(v -> {
+ if (selectedButton != null) {
+ selectedButton.setSelected(false);
+ }
+ btn.setSelected(true);
+ selectedButton = btn;
+
+ String targetDir = allCategoryDirs.get(finalI);
+ if (targetDir == null || targetDir.isEmpty()) {
+ Toast.makeText(requireContext(), R.string.invalid_category, Toast.LENGTH_SHORT).show();
+ return;
+ }
+
+ // 关键:点击分类按钮时加载对应数据
+ loadCategoryData(targetDir);
+ });
+
+ buttonContainer.addView(btn);
+
+ // 默认选中第一个按钮
+ if (i == 0) {
+ btn.setSelected(true);
+ selectedButton = btn;
+ }
+ }
+ }
+
+ /**
+ * 初始化RecyclerView
+ */
+ private void initRecycler() {
+ homeCakeAdapter = new HomeCakeAdapter(requireContext());
+ homeCakeAdapter.setListener(this::onClickItem);
+
+ GridLayoutManager gridLayoutManager = new GridLayoutManager(requireContext(), 3);
+ gridLayoutManager.setOrientation(GridLayoutManager.VERTICAL);
+ fragmentHomeBinding.recyclerview.setLayoutManager(gridLayoutManager);
+
+ fragmentHomeBinding.recyclerview.addItemDecoration(new GridSpacingItemDecoration(3, dp2px(12), true));
+ fragmentHomeBinding.recyclerview.setHasFixedSize(true);
+ fragmentHomeBinding.recyclerview.setItemAnimator(null);
+ fragmentHomeBinding.recyclerview.setAdapter(homeCakeAdapter);
+ }
+
+ /**
+ * 初始化搜索图标:点击跳转到SearchActivity
+ */
+ private void initSearch() {
+ fragmentHomeBinding.ivSearch.setOnClickListener(v -> {
+ // 跳转到SearchActivity
+ Intent intent = new Intent(requireContext(), SearchCakeActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ startActivity(intent);
+ });
+ }
+
+ /**
+ * 加载指定分类的数据(关键:补充完整的加载逻辑)
+ * @param dir 分类目录
+ */
+ private void loadCategoryData(String dir) {
+ if (isLoading) {
+ return; // 防止重复加载
+ }
+ isLoading = true;
+ showLoading(true); // 显示加载中
+ showEmptyState(false); // 加载时隐藏空状态
+
+ // 异步加载Assets中的图片路径(避免主线程阻塞)
+ new Thread(() -> {
+ try {
+ // 模拟加载耗时(实际项目可移除,仅为用户体验)
+ Thread.sleep(300);
+
+ // 从Assets获取指定目录下的所有图片路径
+ List imagePaths = Utils.getImagePathsByDir(requireContext(), dir);
+ Log.d(TAG, "分类:" + dir + ",图片数量:" + (imagePaths == null ? 0 : imagePaths.size()));
+
+ // 切回主线程更新UI
+ requireActivity().runOnUiThread(() -> {
+ isLoading = false;
+ showLoading(false); // 隐藏加载中
+
+ if (imagePaths == null || imagePaths.isEmpty()) {
+ // 无数据时显示空状态
+ showEmptyState(true);
+ homeCakeAdapter.setData(new ArrayList<>()); // 传递空列表避免空指针
+ Toast.makeText(requireContext(), R.string.no_sketches_found, Toast.LENGTH_SHORT).show();
+ } else {
+ // 有数据时更新Adapter
+ showEmptyState(false);
+ homeCakeAdapter.setData(imagePaths); // 给Adapter设置图片路径列表
+ }
+ });
+ } catch (Exception e) {
+ e.printStackTrace();
+ requireActivity().runOnUiThread(() -> {
+ isLoading = false;
+ showLoading(false);
+ showEmptyState(true); // 加载失败也显示空状态
+ homeCakeAdapter.setData(new ArrayList<>());
+ Toast.makeText(requireContext(), R.string.load_data_failed, Toast.LENGTH_SHORT).show();
+ });
+ }
+ }).start();
+ }
+
+ /**
+ * 显示/隐藏加载状态
+ */
+ private void showLoading(boolean show) {
+ fragmentHomeBinding.progressLoading.setVisibility(show ? View.VISIBLE : View.GONE);
+ }
+
+ /**
+ * 显示/隐藏空状态
+ */
+ private void showEmptyState(boolean show) {
+ fragmentHomeBinding.llEmptyState.setVisibility(show ? View.VISIBLE : View.GONE);
+ fragmentHomeBinding.recyclerview.setVisibility(show ? View.GONE : View.VISIBLE);
+ }
+
+ /**
+ * 图片Item点击跳转
+ */
+ @Override
+ public void onClickItem(boolean viewAll, String dir) {
+ if (dir == null || dir.isEmpty()) {
+ Toast.makeText(requireContext(), R.string.invalid_directory, Toast.LENGTH_SHORT).show();
+ return;
+ }
+ Intent intent = new Intent(requireContext(), CameraCakeActivity.class);
+ intent.putExtra(CakePaintingApp.Key_Camera, dir);
+ intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ startActivity(intent);
+ }
+
+ /**
+ * dp转px适配
+ */
+ private int dp2px(int dp) {
+ return (int) (getResources().getDisplayMetrics().density * dp + 0.5f);
+ }
+
+ /**
+ * 网格间距装饰器
+ */
+ public static class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {
+ private int spanCount;
+ private int spacing;
+ private boolean includeEdge;
+
+ public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) {
+ this.spanCount = spanCount;
+ this.spacing = spacing;
+ this.includeEdge = includeEdge;
+ }
+
+ @Override
+ public void getItemOffsets(@NonNull android.graphics.Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
+ int position = parent.getChildAdapterPosition(view);
+ if (position == RecyclerView.NO_POSITION) return;
+ int column = position % spanCount;
+
+ if (includeEdge) {
+ outRect.left = spacing - column * spacing / spanCount;
+ outRect.right = (column + 1) * spacing / spanCount;
+ outRect.top = position < spanCount ? spacing : spacing / 2;
+ outRect.bottom = spacing;
+ } else {
+ outRect.left = column * spacing / spanCount;
+ outRect.right = spacing - (column + 1) * spacing / spanCount;
+ outRect.top = position >= spanCount ? spacing : 0;
+ outRect.bottom = spacing;
+ }
+ }
+ }
+
+ /**
+ * 防止内存泄漏
+ */
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ fragmentHomeBinding = null;
+ selectedButton = null;
+ homeCakeAdapter = null;
+ allCategoryDirs = null;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/cake/draw/painting/fragment/SettingCakeFragment.java b/app/src/main/java/com/cake/draw/painting/fragment/SettingCakeFragment.java
new file mode 100644
index 0000000..3ffdd04
--- /dev/null
+++ b/app/src/main/java/com/cake/draw/painting/fragment/SettingCakeFragment.java
@@ -0,0 +1,61 @@
+package com.cake.draw.painting.fragment;
+
+import android.content.pm.PackageInfo;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.fragment.app.Fragment;
+
+import com.cake.draw.painting.R;
+import com.cake.draw.painting.databinding.FragmentSettingCakeBinding;
+import com.cake.draw.painting.tools.Utils;
+
+public class SettingCakeFragment extends Fragment {
+ private static final String ARG_PARAM1 = "param1";
+ private static final String ARG_PARAM2 = "param2";
+
+
+ private String mParam1;
+ private String mParam2;
+ private FragmentSettingCakeBinding fragmentSettingBinding;
+
+ public SettingCakeFragment() {
+
+ }
+ public static SettingCakeFragment newInstance() {
+ SettingCakeFragment fragment = new SettingCakeFragment();
+ Bundle args = new Bundle();
+
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getArguments() != null) {
+ mParam1 = getArguments().getString(ARG_PARAM1);
+ mParam2 = getArguments().getString(ARG_PARAM2);
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ fragmentSettingBinding = FragmentSettingCakeBinding.inflate(getLayoutInflater());
+ onInit();
+ return fragmentSettingBinding.getRoot();
+ }
+
+ private void onInit(){
+ String version = "1.0";
+ PackageInfo info = Utils.getInfo(requireContext());
+ if(info!=null){
+ version = info.versionName;
+ }
+ String format = String.format(getString(R.string.version_code), version);
+ fragmentSettingBinding.textAppVersion.setText(format);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/cake/draw/painting/onClickListener.java b/app/src/main/java/com/cake/draw/painting/onClickListener.java
new file mode 100644
index 0000000..be007ee
--- /dev/null
+++ b/app/src/main/java/com/cake/draw/painting/onClickListener.java
@@ -0,0 +1,6 @@
+package com.cake.draw.painting;
+
+public interface onClickListener {
+
+ void onClickItem(boolean viewAll,String dir);
+}
diff --git a/app/src/main/java/com/cake/draw/painting/tools/Keys.java b/app/src/main/java/com/cake/draw/painting/tools/Keys.java
new file mode 100644
index 0000000..037243b
--- /dev/null
+++ b/app/src/main/java/com/cake/draw/painting/tools/Keys.java
@@ -0,0 +1,48 @@
+package com.cake.draw.painting.tools;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Keys {
+
+ public static String Class_Animals = "png_Animals";
+ public static String Class_birds = "png_Birds";
+ public static String Class_butterfly = "png_Butterfly";
+ public static String Class_cafe = "png_Cafe";
+ public static String Class_cartoons = "png_Cartoons";
+ public static String Class_christmas = "png_Christmas";
+ public static String Class_festivals = "png_Festivals";
+ public static String Class_flowers = "png_Flowers";
+ public static String Class_fruits = "png_Fruits";
+ public static String Class_general = "png_General";
+
+ public static String Class_mehndi = "png_Mehndi";
+ public static String Class_nature = "png_Nature";
+ public static String Class_properties = "png_Properties";
+ public static String Class_rangoli = "png_Rangoli";
+ public static String Class_sports = "png_Sports";
+ public static String Class_vehicles = "png_Vehicles";
+
+ public static List getAllDir() {
+ ArrayList list = new ArrayList<>();
+ list.add(Class_Animals);
+ list.add(Class_birds);
+ list.add(Class_butterfly);
+ list.add(Class_cafe);
+ list.add(Class_cartoons);
+ list.add(Class_christmas);
+ list.add(Class_festivals);
+ list.add(Class_flowers);
+ list.add(Class_fruits);
+ list.add(Class_general);
+ list.add(Class_mehndi);
+ list.add(Class_nature);
+ list.add(Class_properties);
+ list.add(Class_rangoli);
+ list.add(Class_sports);
+ list.add(Class_vehicles);
+ return list;
+
+
+ }
+}
diff --git a/app/src/main/java/com/cake/draw/painting/tools/Utils.java b/app/src/main/java/com/cake/draw/painting/tools/Utils.java
new file mode 100644
index 0000000..25d6762
--- /dev/null
+++ b/app/src/main/java/com/cake/draw/painting/tools/Utils.java
@@ -0,0 +1,299 @@
+package com.cake.draw.painting.tools;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.res.AssetManager;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Point;
+import android.util.DisplayMetrics;
+import android.util.Range;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.WindowManager;
+
+import androidx.camera.core.Camera;
+import androidx.core.app.ActivityCompat;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class Utils {
+ // 支持的图片格式(用于过滤非图片文件)
+ private static final List SUPPORTED_IMAGE_FORMATS = Arrays.asList(".jpg", ".jpeg", ".png", ".gif", ".bmp");
+
+ /**
+ * 获取相机曝光补偿上限
+ * @param camera 相机实例
+ * @return 曝光补偿上限值,无则返回0
+ */
+ public static int getRange(Camera camera) {
+ if (camera == null || camera.getCameraInfo() == null || camera.getCameraInfo().getExposureState() == null) {
+ return 0;
+ }
+ Range exposureCompensationRange = camera.getCameraInfo().getExposureState().getExposureCompensationRange();
+ return exposureCompensationRange.getUpper();
+ }
+
+ /**
+ * 设置状态栏文字颜色
+ * @param activity 活动实例
+ * @param dark 是否为深色文字
+ */
+ public static void setStatusBarTextColor(Activity activity, boolean dark) {
+ if (activity == null || activity.getWindow() == null) {
+ return;
+ }
+ View decor = activity.getWindow().getDecorView();
+ if (dark) {
+ decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ } else {
+ decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
+ }
+ }
+
+ /**
+ * 获取屏幕宽高
+ * @param context 上下文
+ * @return 屏幕宽高Point(x=宽,y=高)
+ */
+ public static Point getScreen(Context context) {
+ if (context == null) {
+ return new Point(0, 0);
+ }
+ DisplayMetrics displayMetrics = new DisplayMetrics();
+ WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
+ if (windowManager == null) {
+ return new Point(0, 0);
+ }
+ windowManager.getDefaultDisplay().getMetrics(displayMetrics);
+ Point point = new Point();
+ point.x = displayMetrics.widthPixels;
+ point.y = displayMetrics.heightPixels;
+ return point;
+ }
+
+ /**
+ * 检查权限是否全部授予
+ * @param context 上下文
+ * @param permissions 权限数组
+ * @return 全部授予返回true,否则false
+ */
+ public static boolean checkPermission(Context context, String[] permissions) {
+ if (context == null || permissions == null || permissions.length == 0) {
+ return false;
+ }
+ for (String per : permissions) {
+ if (ActivityCompat.checkSelfPermission(context, per) != PackageManager.PERMISSION_GRANTED) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * 从Assets加载图片(带尺寸压缩,避免OOM)
+ * @param context 上下文
+ * @param fileName Assets内的文件路径(如 "category/1.jpg")
+ * @return 压缩后的Bitmap,加载失败返回null
+ */
+ public static Bitmap loadImageFromAssets(Context context, String fileName) {
+ if (context == null || fileName == null || fileName.isEmpty()) {
+ return null;
+ }
+ AssetManager assetManager = context.getAssets();
+ try (InputStream is = assetManager.open(fileName)) {
+ // 先获取图片尺寸,再压缩加载
+ BitmapFactory.Options options = new BitmapFactory.Options();
+ options.inJustDecodeBounds = true;
+ BitmapFactory.decodeStream(is, null, options);
+
+ // 计算压缩比例(适配屏幕宽度,避免大图)
+ Point screen = getScreen(context);
+ options.inSampleSize = calculateInSampleSize(options, screen.x / 3, screen.x / 3);
+ options.inJustDecodeBounds = false;
+ options.inPreferredConfig = Bitmap.Config.RGB_565; // 降低内存占用
+ options.inPurgeable = true;
+ options.inInputShareable = true;
+
+ // 重新打开流(因为之前decodeStream会消耗流)
+ InputStream is2 = assetManager.open(fileName);
+ Bitmap bitmap = BitmapFactory.decodeStream(is2, null, options);
+ is2.close();
+ return bitmap;
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ /**
+ * 计算图片压缩比例
+ * @param options BitmapFactory.Options
+ * @param reqWidth 目标宽度
+ * @param reqHeight 目标高度
+ * @return 压缩比例
+ */
+ private static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
+ final int height = options.outHeight;
+ final int width = options.outWidth;
+ int inSampleSize = 1;
+
+ if (height > reqHeight || width > reqWidth) {
+ final int halfHeight = height / 2;
+ final int halfWidth = width / 2;
+
+ while ((halfHeight / inSampleSize) >= reqHeight
+ && (halfWidth / inSampleSize) >= reqWidth) {
+ inSampleSize *= 2;
+ }
+ }
+ return inSampleSize;
+ }
+
+ /**
+ * 遍历Assets指定目录下的所有文件(支持递归)
+ * @param context 上下文
+ * @param dir Assets内的目录路径(如 "category/animal")
+ * @return 目录下所有文件路径列表
+ */
+ public static List fileExistsInAssets(Context context, String dir) {
+ List pathList = new ArrayList<>();
+ if (context == null || dir == null || dir.isEmpty()) {
+ return pathList;
+ }
+ try {
+ AssetManager assetManager = context.getAssets();
+ String[] files = assetManager.list(dir);
+ if (files != null) {
+ for (String name : files) {
+ String fullPath = dir + "/" + name;
+ // 递归判断:如果是目录则继续遍历,否则添加文件路径
+ if (isDirectoryInAssets(assetManager, fullPath)) {
+ pathList.addAll(fileExistsInAssets(context, fullPath));
+ } else {
+ pathList.add(fullPath);
+ }
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return pathList;
+ }
+
+ /**
+ * 判断Assets路径是否为目录
+ * @param assetManager AssetManager实例
+ * @param path 待判断路径
+ * @return 是目录返回true,否则false
+ */
+ private static boolean isDirectoryInAssets(AssetManager assetManager, String path) {
+ try {
+ String[] files = assetManager.list(path);
+ return files != null && files.length > 0;
+ } catch (IOException e) {
+ return false;
+ }
+ }
+
+ /**
+ * 根据分类目录获取Assets内的图片路径列表(HomeFragment专用)
+ * @param context 上下文
+ * @param dir 分类目录(如 "category/animal")
+ * @return 过滤后的图片路径列表
+ */
+ public static List getImagePathsByDir(Context context, String dir) {
+ List allFiles = fileExistsInAssets(context, dir);
+ List imagePaths = new ArrayList<>();
+ // 过滤仅保留支持的图片格式
+ for (String path : allFiles) {
+ String lowerPath = path.toLowerCase();
+ for (String format : SUPPORTED_IMAGE_FORMATS) {
+ if (lowerPath.endsWith(format)) {
+ imagePaths.add(path);
+ break;
+ }
+ }
+ }
+ return imagePaths;
+ }
+
+ /**
+ * 加载指定目录下的连续命名图片(1.jpg ~ 40.jpg)
+ * @param context 上下文
+ * @param dir 目录路径
+ * @return 图片Bitmap列表
+ */
+ public static List getAnimalsName(Context context, String dir) {
+ List list = new ArrayList<>();
+ if (context == null || dir == null || dir.isEmpty()) {
+ return list;
+ }
+ // 缩小循环上限,避免无效遍历(可根据实际需求调整)
+ for (int i = 0; i < 40; i++) {
+ String fileName = dir + "/" + (i + 1) + ".jpg";
+ Bitmap bitmap = loadImageFromAssets(context, fileName);
+ if (bitmap == null) {
+ break;
+ }
+ list.add(bitmap);
+ }
+ return list;
+ }
+
+ /**
+ * 获取应用包信息
+ * @param context 上下文
+ * @return PackageInfo实例,失败返回null
+ */
+ public static PackageInfo getInfo(Context context) {
+ if (context == null) {
+ return null;
+ }
+ try {
+ return context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
+ } catch (PackageManager.NameNotFoundException exception) {
+ exception.printStackTrace();
+ return null;
+ }
+ }
+
+ /**
+ * 计算双指触摸距离(用于缩放)
+ * @param event 触摸事件
+ * @return 双指距离,异常返回0
+ */
+ public static float getDistance(MotionEvent event) {
+ if (event == null || event.getPointerCount() < 2) {
+ return 0;
+ }
+ float x = event.getX(0) - event.getX(1);
+ float y = event.getY(0) - event.getY(1);
+ return (float) Math.sqrt(x * x + y * y);
+ }
+
+ /**
+ * 计算双指触摸中点(补充:用于缩放中心定位)
+ * @param event 触摸事件
+ * @return 双指中点坐标
+ */
+ public static Point getMidPoint(MotionEvent event) {
+ Point point = new Point();
+ if (event == null || event.getPointerCount() < 2) {
+ return point;
+ }
+ float x = (event.getX(0) + event.getX(1)) / 2;
+ float y = (event.getY(0) + event.getY(1)) / 2;
+ point.x = (int) x;
+ point.y = (int) y;
+ return point;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/color/selector_btn_text_cake.xml b/app/src/main/res/color/selector_btn_text_cake.xml
new file mode 100644
index 0000000..bfa52b6
--- /dev/null
+++ b/app/src/main/res/color/selector_btn_text_cake.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/color/selector_tab_text_cake.xml b/app/src/main/res/color/selector_tab_text_cake.xml
new file mode 100644
index 0000000..064dae9
--- /dev/null
+++ b/app/src/main/res/color/selector_tab_text_cake.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/background_cake.xml b/app/src/main/res/drawable/background_cake.xml
new file mode 100644
index 0000000..dd4d5b1
--- /dev/null
+++ b/app/src/main/res/drawable/background_cake.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_search_shape_cake.xml b/app/src/main/res/drawable/bg_search_shape_cake.xml
new file mode 100644
index 0000000..a433f32
--- /dev/null
+++ b/app/src/main/res/drawable/bg_search_shape_cake.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_tab_cake.xml b/app/src/main/res/drawable/bg_tab_cake.xml
new file mode 100644
index 0000000..e729c33
--- /dev/null
+++ b/app/src/main/res/drawable/bg_tab_cake.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/scale_point_cake.xml b/app/src/main/res/drawable/scale_point_cake.xml
new file mode 100644
index 0000000..e610032
--- /dev/null
+++ b/app/src/main/res/drawable/scale_point_cake.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/scale_progress_cake.xml b/app/src/main/res/drawable/scale_progress_cake.xml
new file mode 100644
index 0000000..3374546
--- /dev/null
+++ b/app/src/main/res/drawable/scale_progress_cake.xml
@@ -0,0 +1,17 @@
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_btn_category_cake.xml b/app/src/main/res/drawable/selector_btn_category_cake.xml
new file mode 100644
index 0000000..3c12a02
--- /dev/null
+++ b/app/src/main/res/drawable/selector_btn_category_cake.xml
@@ -0,0 +1,17 @@
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_flash_cake.xml b/app/src/main/res/drawable/selector_flash_cake.xml
new file mode 100644
index 0000000..21d6c34
--- /dev/null
+++ b/app/src/main/res/drawable/selector_flash_cake.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_scale_cake.xml b/app/src/main/res/drawable/selector_scale_cake.xml
new file mode 100644
index 0000000..2695250
--- /dev/null
+++ b/app/src/main/res/drawable/selector_scale_cake.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_tab_home_cake.xml b/app/src/main/res/drawable/selector_tab_home_cake.xml
new file mode 100644
index 0000000..5dbba80
--- /dev/null
+++ b/app/src/main/res/drawable/selector_tab_home_cake.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_tab_setting_cake.xml b/app/src/main/res/drawable/selector_tab_setting_cake.xml
new file mode 100644
index 0000000..5c6be44
--- /dev/null
+++ b/app/src/main/res/drawable/selector_tab_setting_cake.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/tool_bar_shape_cake.xml b/app/src/main/res/drawable/tool_bar_shape_cake.xml
new file mode 100644
index 0000000..33a2811
--- /dev/null
+++ b/app/src/main/res/drawable/tool_bar_shape_cake.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_camera_cake.xml b/app/src/main/res/layout/activity_camera_cake.xml
new file mode 100644
index 0000000..18e450a
--- /dev/null
+++ b/app/src/main/res/layout/activity_camera_cake.xml
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_home_cake.xml b/app/src/main/res/layout/activity_home_cake.xml
new file mode 100644
index 0000000..984d38d
--- /dev/null
+++ b/app/src/main/res/layout/activity_home_cake.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search_cake.xml b/app/src/main/res/layout/activity_search_cake.xml
new file mode 100644
index 0000000..83fdaa8
--- /dev/null
+++ b/app/src/main/res/layout/activity_search_cake.xml
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_start_cake.xml b/app/src/main/res/layout/activity_start_cake.xml
new file mode 100644
index 0000000..fd7bca7
--- /dev/null
+++ b/app/src/main/res/layout/activity_start_cake.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home_cake.xml b/app/src/main/res/layout/fragment_home_cake.xml
new file mode 100644
index 0000000..686567f
--- /dev/null
+++ b/app/src/main/res/layout/fragment_home_cake.xml
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_setting_cake.xml b/app/src/main/res/layout/fragment_setting_cake.xml
new file mode 100644
index 0000000..5af1476
--- /dev/null
+++ b/app/src/main/res/layout/fragment_setting_cake.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_home_image_cake.xml b/app/src/main/res/layout/item_home_image_cake.xml
new file mode 100644
index 0000000..97481b8
--- /dev/null
+++ b/app/src/main/res/layout/item_home_image_cake.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_tab_selector_cake.xml b/app/src/main/res/layout/item_tab_selector_cake.xml
new file mode 100644
index 0000000..e4b4b0d
--- /dev/null
+++ b/app/src/main/res/layout/item_tab_selector_cake.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-xxxhdpi/about.png b/app/src/main/res/mipmap-xxxhdpi/about.png
new file mode 100644
index 0000000..cb50494
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/about.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/back_left.png b/app/src/main/res/mipmap-xxxhdpi/back_left.png
new file mode 100644
index 0000000..426e55c
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/back_left.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/flash_0.png b/app/src/main/res/mipmap-xxxhdpi/flash_0.png
new file mode 100644
index 0000000..94f01eb
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/flash_0.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/flash_1.png b/app/src/main/res/mipmap-xxxhdpi/flash_1.png
new file mode 100644
index 0000000..e45b243
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/flash_1.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..5bf1494
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/logo.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/nodata.png b/app/src/main/res/mipmap-xxxhdpi/nodata.png
new file mode 100644
index 0000000..6c0108d
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/nodata.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/painting_0.png b/app/src/main/res/mipmap-xxxhdpi/painting_0.png
new file mode 100644
index 0000000..a229dcb
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/painting_0.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/painting_1.png b/app/src/main/res/mipmap-xxxhdpi/painting_1.png
new file mode 100644
index 0000000..7f66989
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/painting_1.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/photo.png b/app/src/main/res/mipmap-xxxhdpi/photo.png
new file mode 100644
index 0000000..efdc462
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/photo.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/scale_0.png b/app/src/main/res/mipmap-xxxhdpi/scale_0.png
new file mode 100644
index 0000000..ec76133
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/scale_0.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/scale_1.png b/app/src/main/res/mipmap-xxxhdpi/scale_1.png
new file mode 100644
index 0000000..6f0512a
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/scale_1.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/search.png b/app/src/main/res/mipmap-xxxhdpi/search.png
new file mode 100644
index 0000000..2722c92
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/search.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/setting_0.png b/app/src/main/res/mipmap-xxxhdpi/setting_0.png
new file mode 100644
index 0000000..048e5f9
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/setting_0.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/setting_1.png b/app/src/main/res/mipmap-xxxhdpi/setting_1.png
new file mode 100644
index 0000000..7dca637
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/setting_1.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..71efee4
--- /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..eb36cb7
--- /dev/null
+++ b/app/src/main/res/values/colors.xml
@@ -0,0 +1,14 @@
+
+
+ #FF000000
+ #FFFFFFFF
+ #707070
+ #43655a
+
+ #bfbfbf
+ #bfbfbf
+ #bfbfbf
+ #bfbfbf
+ #71878d
+ #a8abb0
+
\ No newline at end of file
diff --git a/app/src/main/res/values/string.xml b/app/src/main/res/values/string.xml
new file mode 100644
index 0000000..8635e5b
--- /dev/null
+++ b/app/src/main/res/values/string.xml
@@ -0,0 +1,32 @@
+
+ CakePainting Helper
+
+ Paintings
+ More Settings
+ Sketch Categories
+ Settings
+ Version
+ V%s
+
+ camera not ready
+
+ Invalid classification
+
+
+ Please grant the relevant permissions and try again.
+
+
+ Please enter the search keywords
+ Search for sketches
+ Invalid file path
+ No relevant sketches were found
+
+ load data failed
+
+ no sketches found
+
+ Upload Failed
+
+ Documents not exceed 4M
+
+
\ 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..8b76734
--- /dev/null
+++ b/app/src/main/res/values/themes.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
\ 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/main/res/xml/net.xml b/app/src/main/res/xml/net.xml
new file mode 100644
index 0000000..69cc842
--- /dev/null
+++ b/app/src/main/res/xml/net.xml
@@ -0,0 +1,6 @@
+
+
+
+ mobile-server.lux-ad.com
+
+
diff --git a/app/src/test/java/com/draw/painting/test/ExampleUnitTest.java b/app/src/test/java/com/draw/painting/test/ExampleUnitTest.java
new file mode 100644
index 0000000..94d3279
--- /dev/null
+++ b/app/src/test/java/com/draw/painting/test/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.draw.painting.test;
+
+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..43c4ef3
--- /dev/null
+++ b/build.gradle.kts
@@ -0,0 +1,7 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+plugins {
+ id("com.android.application") version "8.9.1" apply false
+ id("org.jetbrains.kotlin.android") version "2.2.21" apply false
+ id("com.google.gms.google-services") version "4.4.4" apply false
+ id("com.google.firebase.crashlytics") version "3.0.6" 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..17ae699
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Mon Dec 15 10:39:56 CST 2025
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
new file mode 100644
index 0000000..4f906e0
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,185 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=`expr $i + 1`
+ done
+ case $i in
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..ac1b06f
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,89 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/keystore.properties b/keystore.properties
new file mode 100644
index 0000000..546fe01
--- /dev/null
+++ b/keystore.properties
@@ -0,0 +1,6 @@
+app_name=CakePaintingHelper
+package_name=com.cake.draw.painting
+keystoreFile=app/CakePaintingHelper
+key_alias=CakePaintingHelperkey0
+key_store_password=123456
+key_password=123456
\ No newline at end of file
diff --git a/settings.gradle.kts b/settings.gradle.kts
new file mode 100644
index 0000000..1b4082d
--- /dev/null
+++ b/settings.gradle.kts
@@ -0,0 +1,33 @@
+pluginManagement {
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ flatDir {
+ dirs("libs")
+ }
+ maven("https://jitpack.io")
+ // TradPlus
+ mavenCentral()
+ // Ironsource
+ maven("https://android-sdk.is.com/")
+ // Pangle
+ maven("https://artifact.bytedance.com/repository/pangle")
+ // Mintegral
+ //Launch GP market application, Android X Version
+ //If you fail to pull the code using gradle, add the maven warehouse configuration to the project root build.gradle file
+ maven("https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea")
+
+ }
+}
+
+rootProject.name = "CakePaintingHelper"
+include(":app")
+
\ No newline at end of file