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 @@ + + + + +