commit 5f761784849bc245285214169f26432432849cb9 Author: lihongwei Date: Mon Aug 12 16:49:49 2024 +0800 V1.0.0(1) com.sketch.papertracingart diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/ARDrawSketch.jks b/app/ARDrawSketch.jks new file mode 100644 index 0000000..d164530 Binary files /dev/null and b/app/ARDrawSketch.jks differ diff --git a/app/Inter-Medium.ttf b/app/Inter-Medium.ttf new file mode 100644 index 0000000..a01f377 Binary files /dev/null and b/app/Inter-Medium.ttf differ diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..e0ec4b5 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,60 @@ +import java.util.Date +import java.text.SimpleDateFormat +plugins { + alias(libs.plugins.android.application) +} + +val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date()) +android { + namespace = "com.sketch.papertracingart" + compileSdk = 34 + + defaultConfig { + applicationId = "com.sketch.papertracingart" + minSdk = 23 + targetSdk = 34 + versionCode = 1 + versionName = "1.0.0" + setProperty("archivesBaseName", "AR Draw Sketch_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 + } +} + +dependencies { + + implementation(libs.appcompat) + implementation(libs.material) + implementation(libs.activity) + implementation(libs.constraintlayout) + implementation(libs.camera.view) + testImplementation(libs.junit) + androidTestImplementation(libs.ext.junit) + androidTestImplementation(libs.espresso.core) + implementation(libs.material.v140) + implementation(libs.viewpager2) + implementation(libs.recyclerview) + implementation(libs.glide) + annotationProcessor(libs.compiler) + implementation (libs.camera.core) + implementation (libs.camera.camera2) + implementation (libs.camera.lifecycle) + implementation (libs.camera.view.v100alpha31) + implementation (libs.camera.extensions) + implementation (libs.room.runtime) + annotationProcessor (libs.room.compiler) + implementation (libs.recyclerview.v121) +} \ No newline at end of file diff --git a/app/keystore.properties b/app/keystore.properties new file mode 100644 index 0000000..46f8bbc --- /dev/null +++ b/app/keystore.properties @@ -0,0 +1,6 @@ +app_name=AR Draw Sketch +package_name=com.sketch.papertracingart +keystoreFile=app/ARDrawSketch.jks +key_alias=ARDrawSketchkey0 +key_store_password=ARDrawSketch +key_password=ARDrawSketch diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..1411d5c --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,34 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile +-keepclassmembers class com.sketch.papertracingart.MyApp { + public static final java.lang.String DB_NAme; + public static final int DB_Version; +} + +-keepclassmembers class * { + @androidx.room.Query ; +} +-keep class com.sketch.papertracingart.Room.AppDatabase { *; } +-keep class com.sketch.papertracingart.Room.ImageEntryDao { *; } +-keep class com.sketch.papertracingart.Room.FavoriteImageDao { *; } +-keep class com.sketch.papertracingart.Room.ImageEntry { *; } +-keep class com.sketch.papertracingart.Room.FavoriteImage { *; } diff --git a/app/src/androidTest/java/com/sketch/papertracingart/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/sketch/papertracingart/ExampleInstrumentedTest.java new file mode 100644 index 0000000..77fafd8 --- /dev/null +++ b/app/src/androidTest/java/com/sketch/papertracingart/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.sketch.papertracingart; + +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.example.papertracingart", 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..70cd2d4 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/assets/Inter-Medium.ttf b/app/src/main/assets/Inter-Medium.ttf new file mode 100644 index 0000000..a01f377 Binary files /dev/null and b/app/src/main/assets/Inter-Medium.ttf differ 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/26.jpg b/app/src/main/assets/png_Rangoli/26.jpg new file mode 100644 index 0000000..7c5d0de Binary files /dev/null and b/app/src/main/assets/png_Rangoli/26.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/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/assets/privacy.html b/app/src/main/assets/privacy.html new file mode 100644 index 0000000..022b3d8 --- /dev/null +++ b/app/src/main/assets/privacy.html @@ -0,0 +1,86 @@ + + + + + + Privacy Policy + + + +

Privacy Policy

+

Date: August 9, 2024

+ +

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

+ +

Information Collection and Use

+

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

+

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

+

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

+ + +

Log Data

+

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

+ +

Cookies

+

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

+

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

+ +

Service Providers

+

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

+ +

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

+ +

Security

+

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

+ +

Links to Other Sites

+

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

+ +

Children’s Privacy

+

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

+ +

Changes to This Privacy Policy

+

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

+ +

Privacy Questions

+

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

+

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

+ + diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..1af31a9 Binary files /dev/null and b/app/src/main/ic_launcher-playstore.png differ diff --git a/app/src/main/java/com/sketch/papertracingart/AppAdapter.java b/app/src/main/java/com/sketch/papertracingart/AppAdapter.java new file mode 100644 index 0000000..cb17dd9 --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/AppAdapter.java @@ -0,0 +1,257 @@ +//package com.Sketch.papertracingart; +// +//import android.app.Activity; +//import android.content.Context; +//import android.content.Intent; +//import android.content.SharedPreferences; +//import android.content.pm.ApplicationInfo; +//import android.content.pm.PackageManager; +//import android.graphics.drawable.Drawable; +//import android.os.Handler; +//import android.os.Looper; +//import android.util.Log; +//import android.view.LayoutInflater; +//import android.view.View; +//import android.view.ViewGroup; +//import android.widget.CompoundButton; +//import android.widget.ImageView; +//import android.widget.TextView; +//import android.widget.Toast; +// +//import androidx.annotation.NonNull; +//import androidx.appcompat.widget.AppCompatImageView; +//import androidx.appcompat.widget.SwitchCompat; +//import androidx.recyclerview.widget.DiffUtil; +//import androidx.recyclerview.widget.RecyclerView; +// +//import com.tool.applock.AppLockSkin; +//import com.tool.applock.R; +//import com.tool.applock.activity.SetPWDActivity; +//import com.tool.applock.fragment.LockFragment; +//import com.tool.applock.ironad.IronSourceAd; +//import com.tool.applock.mydb.Mydata; +//import com.tool.applock.mydb.Mydatabase; +//import com.tool.applock.tools.Mytools; +// +//import java.util.ArrayList; +//import java.util.List; +//import java.util.Objects; +// +//import kotlin.Unit; +//import kotlin.jvm.functions.Function1; +// +//public class AppAdapter extends RecyclerView.Adapter { +// private Context mycontext; +// private List mydataList = new ArrayList<>(); +// private PackageManager packageManager; +// private boolean mtost = true; +// public static SharedPreferences keysp; +// public static SharedPreferences.Editor keyeditor; +// private int keyid; +// +// private Activity activity; +// +// public AppAdapter(Context context, Activity activity1) { +// activity = activity1; +// +// mycontext = context; +// packageManager = context.getPackageManager(); +// keysp = mycontext.getSharedPreferences("key", Context.MODE_PRIVATE); +// } +// +// public void setData(List list, boolean istost) { +// List old = mydataList; +// mydataList = list; +// mtost = istost; +// +// DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new MyDiffCallback(old, mydataList)); +// +// diffResult.dispatchUpdatesTo(this); +// +// +// } +// +// @NonNull +// @Override +// public AppVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { +// View itemView = LayoutInflater.from(mycontext).inflate(R.layout.item_app, parent, false); +// return new AppVH(itemView); +// } +// +// @Override +// public void onBindViewHolder(@NonNull AppVH holder, int position) { +// Mydata mydata = mydataList.get(position); +// String appname = mydata.getAppName(); +// +// +// Log.d("-------", "-----------------" + position + "---" + appname); +// boolean lock = mydata.isLock(); +// holder.switchCompat.setSelected(lock); +//// Log.e("1111", String.valueOf(holder.switchCompat.isChecked())+" "+lock); +//// holder.switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { +//// @Override +//// public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { +//// Mytools.runIO(new Runnable() { +//// @Override +//// public void run() { +//// mydata.setLock(isChecked); +//// Mydatabase.getInstance().mydao().update(mydata); +//// +//// } +//// }); +//// String s; +//// if (isChecked) { +//// s = String.format(mycontext.getString(R.string.text_locked), appname); +//// } else { +//// s = String.format(mycontext.getString(R.string.text_unlocked), appname); +//// } +//// +////// if (mtost){ +//// Toast.makeText(mycontext, s, Toast.LENGTH_SHORT).show(); +////// } +//// +//// } +//// }); +// holder.switchCompat.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// keyid = getkey(); +// keyid++; +// keyeditor = keysp.edit(); +// if (keyid % 5 == 0) { +// Log.e("zzj", "111111111111"); +// IronSourceAd.INSTANCE.showAd(activity, AppLockSkin.place2, new Function1() { +// @Override +// public Unit invoke(Boolean aBoolean) { +// keyeditor.putInt("key", keyid); +// keyeditor.apply(); +// Log.e("zzj", String.valueOf(keyid)); +// if (holder.switchCompat.isSelected()) { +// holder.switchCompat.setSelected(false); +// } else { +// holder.switchCompat.setSelected(true); +// } +// Mytools.runIO(new Runnable() { +// @Override +// public void run() { +// mydata.setLock(holder.switchCompat.isSelected()); +// Mydatabase.getInstance().mydao().update(mydata); +// +// } +// }); +// String s; +// if (holder.switchCompat.isSelected()) { +// s = String.format(mycontext.getString(R.string.text_locked), appname); +// } else { +// s = String.format(mycontext.getString(R.string.text_unlocked), appname); +// } +// +// +// Toast.makeText(mycontext, s, Toast.LENGTH_SHORT).show(); +// return null; +// } +// }); +// }else { +// keyeditor.putInt("key", keyid); +// keyeditor.apply(); +// Log.e("zzj", String.valueOf(keyid)); +// if (holder.switchCompat.isSelected()) { +// holder.switchCompat.setSelected(false); +// } else { +// holder.switchCompat.setSelected(true); +// } +// Mytools.runIO(new Runnable() { +// @Override +// public void run() { +// mydata.setLock(holder.switchCompat.isSelected()); +// Mydatabase.getInstance().mydao().update(mydata); +// +// } +// }); +// String s; +// if (holder.switchCompat.isSelected()) { +// s = String.format(mycontext.getString(R.string.text_locked), appname); +// } else { +// s = String.format(mycontext.getString(R.string.text_unlocked), appname); +// } +// +// +// Toast.makeText(mycontext, s, Toast.LENGTH_SHORT).show(); +// } +// +// +// } +// +// }); +// +// holder.textView.setText(mydata.getAppName()); +// try { +// Drawable appLogo = getLogo(mydata.getPackageName()); +// holder.imageView.setImageDrawable(appLogo); +// } catch (PackageManager.NameNotFoundException e) { +// +// } +// } +// +// public static int getkey() { +// return keysp.getInt("key", 0); +// } +// +// @Override +// public int getItemCount() { +// return mydataList.size(); +// } +// +// private Drawable getLogo(String packageName) throws PackageManager.NameNotFoundException { +// ApplicationInfo appInfo = packageManager.getApplicationInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES); +// return packageManager.getApplicationIcon(appInfo); +// } +// +// public static class AppVH extends RecyclerView.ViewHolder { +// +// private ImageView imageView; +// private TextView textView; +// private AppCompatImageView switchCompat; +// +// public AppVH(@NonNull View itemView) { +// super(itemView); +// imageView = itemView.findViewById(R.id.logo); +// textView = itemView.findViewById(R.id.name); +// switchCompat = itemView.findViewById(R.id.app_switch); +// } +// +// } +// +// private static class MyDiffCallback extends DiffUtil.Callback { +// private List oldItems; +// private List newItems; +// +// MyDiffCallback(List oldItems, List newItems) { +// this.oldItems = oldItems; +// this.newItems = newItems; +// } +// +// @Override +// public int getOldListSize() { +// return oldItems.size(); +// } +// +// @Override +// public int getNewListSize() { +// return newItems.size(); +// } +// +// @Override +// public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) { +// return Objects.equals(oldItems.get(oldItemPosition).getPackageName(), newItems.get(newItemPosition).getPackageName()); +// } +// +// @Override +// public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) { +// Mydata newItem = newItems.get(newItemPosition); +// Mydata oldItem = oldItems.get(oldItemPosition); +// return oldItem.isLock() == newItem.isLock(); +// } +// } +// +//} diff --git a/app/src/main/java/com/sketch/papertracingart/Camera/CameraActivity.java b/app/src/main/java/com/sketch/papertracingart/Camera/CameraActivity.java new file mode 100644 index 0000000..121afba --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Camera/CameraActivity.java @@ -0,0 +1,342 @@ +package com.sketch.papertracingart.Camera; + +import android.Manifest; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.res.AssetManager; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +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.provider.MediaStore; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.SeekBar; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.camera.core.Camera; +import androidx.camera.core.CameraControl; +import androidx.camera.core.CameraSelector; +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 com.sketch.papertracingart.R; +import com.sketch.papertracingart.Utils.PermissionUtils; +import com.sketch.papertracingart.Utils.Tracing; + +import com.google.common.util.concurrent.ListenableFuture; + +import java.io.IOException; +import java.io.InputStream; +import java.util.concurrent.ExecutionException; + +public class CameraActivity extends AppCompatActivity implements View.OnTouchListener, SeekBar.OnSeekBarChangeListener { + + // 请求码常量 + private static final int CAMERA_PERMISSION_REQUEST_CODE = 200; // 相机权限请求码 + private static final int STORAGE_PERMISSION_REQUEST_CODE = 201; // 存储权限请求码 + private static final int PICK_IMAGE_REQUEST_CODE = 202; // 选择图片请求码 + + // 界面组件 + private PreviewView previewView; // 预览视图 + private ImageView imageView; // 显示图片的视图 + private SeekBar seekBar; // 透明度调节条 + private ImageView selectImageButton; // 选择图片按钮 + private ImageView flashButton; // 闪光灯按钮 + private ImageView btnBack; // 返回按钮 + + // 变换矩阵和触摸事件相关变量 + private Matrix matrix = new Matrix(); // 当前变换矩阵 + private Matrix savedMatrix = new Matrix(); // 保存的变换矩阵 + private PointF startPointF = new PointF(); // 触摸起始点 + private float initialDistance; // 初始触摸距离 + private int mode = MODE_NONE; // 当前模式 + private static final int MODE_NONE = 0; // 无模式 + private static final int MODE_DRAG = 1; // 拖动模式 + private static final int MODE_ZOOM = 2; // 缩放模式 + + + private Bitmap bitmap; + private boolean isFlashOn = false; // 闪光灯状态 + private Camera camera; // 相机实例 + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_camera); // 设置布局 + + initializeViews(); // 初始化界面组件 + setupListeners(); // 设置监听器 + checkPermissionsAndStartCamera(); // 检查权限并启动相机 + + // 接收传递的图片路径 + String imagePath = getIntent().getStringExtra("imagePath"); + Log.d("imagepath", "imagepath: " + imagePath); + if (imagePath != null) { + displayImage(imagePath); // 显示图片 + } + } + + private void initializeViews() { + // 绑定界面组件 + previewView = findViewById(R.id.preview); + imageView = findViewById(R.id.image); + seekBar = findViewById(R.id.seekbar); + selectImageButton = findViewById(R.id.photo); + flashButton = findViewById(R.id.flash); + btnBack = findViewById(R.id.btn_back); + } + + private void setupListeners() { + // 设置监听器 + seekBar.setOnSeekBarChangeListener(this); // 透明度调节条监听 + selectImageButton.setOnClickListener(v -> openImagePicker()); // 选择图片按钮监听 + flashButton.setOnClickListener(v -> toggleFlash()); // 闪光灯按钮监听 + imageView.setOnTouchListener(this); // 图片触摸监听 + btnBack.setOnClickListener(v -> finish()); // 返回按钮监听 + } + + private void checkPermissionsAndStartCamera() { + // 获取所需的权限 + String[] permissions = getRequiredPermissions(); + // 检查权限并启动相机 + if (PermissionUtils.hasPermissions(this, permissions)) { + startCamera(); + } else { + PermissionUtils.requestPermissions(this, permissions, CAMERA_PERMISSION_REQUEST_CODE); + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + + // 处理权限请求结果 + if (requestCode == CAMERA_PERMISSION_REQUEST_CODE) { + if (PermissionUtils.handlePermissionsResult(grantResults)) { + startCamera(); + } else { + Toast.makeText(this, "相机权限被拒绝,请在设置中启用权限", Toast.LENGTH_SHORT).show(); + } + } else if (requestCode == STORAGE_PERMISSION_REQUEST_CODE) { + if (PermissionUtils.handlePermissionsResult(grantResults)) { + openImagePicker(); + } else { + Toast.makeText(this, "存储权限被拒绝,请在设置中启用权限", Toast.LENGTH_SHORT).show(); + } + } + } + + private String[] getRequiredPermissions() { + // 根据 Android 版本获取所需权限 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + return new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_MEDIA_IMAGES}; + } else { + return new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; + } + } + + private void toggleFlash() { + // 切换闪光灯状态 + if (camera != null) { + CameraControl cameraControl = camera.getCameraControl(); + isFlashOn = !isFlashOn; // 切换状态 + cameraControl.enableTorch(isFlashOn); // 启用或禁用闪光灯 + flashButton.setImageResource(isFlashOn ? R.drawable.un_light : R.drawable.light); // 更新图标 + } + } + + private void openImagePicker() { + // 打开图片选择器 + String[] permissions = PermissionUtils.getStoragePermissions(); + if (ContextCompat.checkSelfPermission(this, permissions[0]) != PackageManager.PERMISSION_GRANTED) { + // 请求存储权限 + ActivityCompat.requestPermissions(this, permissions, STORAGE_PERMISSION_REQUEST_CODE); + } else { + // 启动选择图片的 Intent + Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + startActivityForResult(intent, PICK_IMAGE_REQUEST_CODE); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + // 处理选择的图片 + if (requestCode == PICK_IMAGE_REQUEST_CODE && resultCode == RESULT_OK && data != null) { + Uri selectedImageUri = data.getData(); // 获取选中的图片 URI + if (selectedImageUri != null) { + imageView.setImageURI(selectedImageUri); // 显示选中的图片 + } + } + } + + private void startCamera() { + // 启动相机 + ListenableFuture cameraProviderFuture = ProcessCameraProvider.getInstance(this); + cameraProviderFuture.addListener(() -> { + try { + ProcessCameraProvider cameraProvider = cameraProviderFuture.get(); // 获取相机提供者 + bindPreview(cameraProvider); // 绑定预览 + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + }, ContextCompat.getMainExecutor(this)); // 在主线程中执行 + } + + private void bindPreview(@NonNull ProcessCameraProvider cameraProvider) { + // 绑定相机预览 + Preview preview = new Preview.Builder().build(); // 创建预览对象 + CameraSelector cameraSelector = new CameraSelector.Builder() + .requireLensFacing(CameraSelector.LENS_FACING_BACK) // 选择后置摄像头 + .build(); + preview.setSurfaceProvider(previewView.getSurfaceProvider()); // 设置预览视图 + cameraProvider.unbindAll(); // 解绑所有相机 + camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview); // 绑定生命周期 + + if(bitmap!= null){ + int width = bitmap.getWidth(); + int height = bitmap.getHeight(); + onInitIm(width, height); // 初始化图片位置 + } + } + + @Override + public boolean onTouch(View v, MotionEvent event) { + ImageView view = (ImageView) v; + + switch (event.getActionMasked()) { + case MotionEvent.ACTION_DOWN: + savedMatrix.set(matrix); // 保存当前矩阵 + startPointF.set(event.getX(), event.getY()); // 记录触摸起始点 + mode = MODE_DRAG; // 设置为拖动模式 + break; + + case MotionEvent.ACTION_POINTER_DOWN: + initialDistance = Tracing.getDistance(event); // 计算初始距离 + if (initialDistance > 10f) { + savedMatrix.set(matrix); // 保存当前矩阵 + mode = MODE_ZOOM; // 设置为缩放模式 + } + break; + + case MotionEvent.ACTION_MOVE: + if (mode == MODE_DRAG) { + matrix.set(savedMatrix); // 恢复保存的矩阵 + matrix.postTranslate(event.getX() - startPointF.x, event.getY() - startPointF.y); // 计算平移 + } else if (mode == MODE_ZOOM) { + float newDistance = Tracing.getDistance(event); // 计算新的距离 + if (newDistance > 10f) { + float scale = newDistance / initialDistance; // 计算缩放比例 + matrix.set(savedMatrix); // 恢复保存的矩阵 + matrix.postScale(scale, scale, view.getWidth() / 2f, view.getHeight() / 2f); // 应用缩放 + } + } + break; + + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_POINTER_UP: + mode = MODE_NONE; // 重置模式 + break; + } + + view.setImageMatrix(matrix); // 更新图片矩阵 + return true; // 处理触摸事件 + } + + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + // 调整图片透明度 + imageView.setAlpha((100 - progress) / 100f); // 根据进度设置透明度 + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + // 开始拖动调节条 + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + // 停止拖动调节条 + } + + // 显示本地图片 + private void displayImage(String imagePath) { + if (imagePath.startsWith("/data/user/")) { + // 处理设备存储中的图片路径 + displayImageFromStorage(imagePath); + } else { + // 处理 assets 文件夹中的图片路径 + displayImageFromAssets(imagePath); + } + } + + // 从设备存储中加载图片 + private void displayImageFromStorage(String imagePath) { + Bitmap bitmap = BitmapFactory.decodeFile(imagePath); + if (bitmap != null) { + imageView.setImageBitmap(bitmap); + + + } else { + Toast.makeText(this, "加载图片失败", Toast.LENGTH_SHORT).show(); + } + } + + // 从 assets 文件夹中加载图片 + private void displayImageFromAssets(String imagePath) { + try { + // 获取 AssetManager + AssetManager assetManager = getAssets(); + // 从 assets 中打开文件 + InputStream inputStream = assetManager.open(imagePath); + // 将 InputStream 转换为 Bitmap + bitmap = BitmapFactory.decodeStream(inputStream); + // 显示 Bitmap + imageView.setImageBitmap(bitmap); + } catch (IOException e) { + e.printStackTrace(); + Toast.makeText(this, "加载图片失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 显示错误信息 + } + } + + + // 初始化图片的位置 + private void onInitIm(float imW, float imH) { + Point screen = getScreen(); // 获取屏幕尺寸 + float newX = screen.x / 2f - imW / 2; // 计算图片水平居中位置 + float newY = screen.y / 2f - imH / 2; // 计算图片垂直居中位置 + matrix.postTranslate(newX, newY); // 设置图片初始位置 + imageView.setImageMatrix(matrix); // 应用矩阵 + + Log.d("---------------tt", "------startMatrix-----x=" + newX + "------y=" + newY); + } + + + public Point getScreen() { + DisplayMetrics displayMetrics = new DisplayMetrics(); + WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); + windowManager.getDefaultDisplay().getMetrics(displayMetrics); + int width = displayMetrics.widthPixels; + int height = displayMetrics.heightPixels; + Point point = new Point(); + point.x = width; + point.y = height; + return point; + } + +} diff --git a/app/src/main/java/com/sketch/papertracingart/Category/CategoryFragment.java b/app/src/main/java/com/sketch/papertracingart/Category/CategoryFragment.java new file mode 100644 index 0000000..bd16004 --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Category/CategoryFragment.java @@ -0,0 +1,63 @@ +package com.sketch.papertracingart.Category; + +import android.graphics.Typeface; +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.viewpager2.widget.ViewPager2; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + + +import com.sketch.papertracingart.Utils.Names; +import com.sketch.papertracingart.R; +import com.google.android.material.tabs.TabLayout; +import com.google.android.material.tabs.TabLayoutMediator; + +import java.util.List; + +public class CategoryFragment extends Fragment { + + private static final List categories = Names.getAllDir(); + + public CategoryFragment() { + // Required empty public constructor + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_category, container, false); + + ViewPager2 viewPager = view.findViewById(R.id.main_image_view_pager); + TabLayout tabLayout = view.findViewById(R.id.main_image_tab); + + CategoryViewPagerAdapter adapter = new CategoryViewPagerAdapter(this, categories); + viewPager.setAdapter(adapter); + + + new TabLayoutMediator(tabLayout, viewPager, (tab, position) -> { + + View customView = LayoutInflater.from(requireContext()).inflate(R.layout.category_tab_custom, null); + tab.setCustomView(customView); + + TextView textView = customView.findViewById(R.id.category_tab_custom_title); + Typeface typeface = Typeface.createFromAsset(requireContext().getAssets(), "Inter-Medium.ttf"); + textView.setTypeface(typeface); + String dir = categories.get(position); + textView.setText(dir.substring(dir.lastIndexOf("_") + 1)); + + + }).attach(); + + + return view; + } + +} diff --git a/app/src/main/java/com/sketch/papertracingart/Category/CategoryViewPagerAdapter.java b/app/src/main/java/com/sketch/papertracingart/Category/CategoryViewPagerAdapter.java new file mode 100644 index 0000000..a4f1854 --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Category/CategoryViewPagerAdapter.java @@ -0,0 +1,29 @@ +package com.sketch.papertracingart.Category; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.viewpager2.adapter.FragmentStateAdapter; + +import java.util.List; + +public class CategoryViewPagerAdapter extends FragmentStateAdapter { + + private final List categories; + + public CategoryViewPagerAdapter(@NonNull Fragment fragment, List categories) { + super(fragment); + this.categories = categories; + } + + @NonNull + @Override + public Fragment createFragment(int position) { + return ImageFragment.newInstance(categories.get(position)); + } + + @Override + public int getItemCount() { + return categories.size(); + } + +} diff --git a/app/src/main/java/com/sketch/papertracingart/Category/ImageFragment.java b/app/src/main/java/com/sketch/papertracingart/Category/ImageFragment.java new file mode 100644 index 0000000..3c57f9c --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Category/ImageFragment.java @@ -0,0 +1,89 @@ +package com.sketch.papertracingart.Category; + +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.sketch.papertracingart.R; +import com.sketch.papertracingart.Utils.ItemDecoration; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class ImageFragment extends Fragment { + + private static final String ARG_CATEGORY = "category"; + private String category; + private RecyclerView recyclerView; + private ImageRecyclerViewAdapter adapter; + + public ImageFragment() { + // 必须有一个空的构造函数 + } + + public static ImageFragment newInstance(String category) { + ImageFragment fragment = new ImageFragment(); + Bundle args = new Bundle(); + args.putString(ARG_CATEGORY, category); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + category = getArguments().getString(ARG_CATEGORY); + } + } + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_image, container, false); + recyclerView = view.findViewById(R.id.recyclerview); + recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2)); + + List imagePaths = getImagePaths(category); + adapter = new ImageRecyclerViewAdapter(imagePaths,requireActivity()); + recyclerView.setAdapter(adapter); + ItemDecoration itemDecoration = new ItemDecoration(12, 10, 9); + recyclerView.addItemDecoration(itemDecoration); + + return view; + } + + + + @Override + public void onPause() { + super.onPause(); + + Log.d("-----------","-------------onPause------"); + } + + private List getImagePaths(String category) { + List imagePaths = new ArrayList<>(); + try { + String[] files = requireContext().getAssets().list(category); + if (files != null) { + for (String file : files) { + imagePaths.add(category + "/" + file); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + return imagePaths; + } +} + diff --git a/app/src/main/java/com/sketch/papertracingart/Category/ImageRecyclerViewAdapter.java b/app/src/main/java/com/sketch/papertracingart/Category/ImageRecyclerViewAdapter.java new file mode 100644 index 0000000..afc89c0 --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Category/ImageRecyclerViewAdapter.java @@ -0,0 +1,182 @@ +package com.sketch.papertracingart.Category; + +import android.app.Activity; +import android.content.Intent; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.lifecycle.LifecycleOwner; +import androidx.lifecycle.LiveData; +import androidx.lifecycle.Observer; +import androidx.recyclerview.widget.DiffUtil; +import androidx.recyclerview.widget.RecyclerView; + +import com.sketch.papertracingart.Camera.CameraActivity; +import com.sketch.papertracingart.R; +import com.sketch.papertracingart.Room.AppDatabase; +import com.sketch.papertracingart.Room.FavoriteImage; +import com.sketch.papertracingart.Room.FavoriteImageDao; +import com.sketch.papertracingart.Utils.DiffUtilUtils; +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.engine.DiskCacheStrategy; + +import java.util.List; +import java.util.Objects; + +public class ImageRecyclerViewAdapter extends RecyclerView.Adapter { + private List imagePaths; + + private List imagePathsOld; + private final FavoriteImageDao favoriteImageDao; + private final Activity context; + + public ImageRecyclerViewAdapter(List imagePaths, Activity context) { + this.imagePaths = imagePaths; + this.context = context; + AppDatabase db = AppDatabase.getInstance(context); + this.favoriteImageDao = db.favoriteImageDao(); + } + + // 更新数据并使用 DiffUtil + public void updateImagePaths(List newImagePaths) { + + imagePathsOld = imagePaths; + imagePaths = newImagePaths; + DiffUtil.Callback diffCallback = DiffUtilUtils.createImageDiffCallback(imagePathsOld, imagePaths); + DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(diffCallback); + diffResult.dispatchUpdatesTo(this); + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.item_image, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + String imagePath = imagePaths.get(position); + + Glide.with(context) + .load("file:///android_asset/" + imagePath) + .diskCacheStrategy(DiskCacheStrategy.ALL) + .into(holder.imageView); + + holder.imageView.setOnClickListener(v -> { + Intent intent = new Intent(context, CameraActivity.class); + intent.putExtra("imagePath", imagePath); + context.startActivity(intent); + }); + + updateFavoriteButton(holder, imagePath); + + holder.favoriteButton.setOnClickListener(v -> { + toggleFavorite(holder, imagePath); + }); + } + + @Override + public int getItemCount() { + return imagePaths.size(); + } + + static class ViewHolder extends RecyclerView.ViewHolder { + ImageView imageView; + ImageView favoriteButton; + + ViewHolder(View view) { + super(view); + imageView = view.findViewById(R.id.image_view); + favoriteButton = view.findViewById(R.id.btn_favorite); + } + } + + private static class MyDiffCallback extends DiffUtil.Callback { + private List oldItems; + private List newItems; + + MyDiffCallback(List oldItems, List newItems) { + this.oldItems = oldItems; + this.newItems = newItems; + } + + @Override + public int getOldListSize() { + return oldItems.size(); + } + + @Override + public int getNewListSize() { + return newItems.size(); + } + + @Override + public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) { + return Objects.equals(oldItems.get(oldItemPosition), newItems.get(newItemPosition)); + } + + @Override + public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) { + String newItem = newItems.get(newItemPosition); + String oldItem = oldItems.get(oldItemPosition); + return Objects.equals(oldItem, newItem); + } + } + + private void updateFavoriteButton(ViewHolder holder, String imagePath) { + LiveData favoriteImageLiveData = favoriteImageDao.getFavoriteImageByPath(imagePath); + favoriteImageLiveData.observe((LifecycleOwner) context, new Observer() { + @Override + public void onChanged(FavoriteImage favoriteImage) { + boolean isFavorite = favoriteImage != null && favoriteImage.isFavorite(); + int iconResId = isFavorite ? R.drawable.favorite : R.drawable.unfavorite; + holder.favoriteButton.setImageResource(iconResId); + } + }); + } + + private void toggleFavorite(ViewHolder holder, String imagePath) { + + AppDatabase.getDatabaseWriteExecutor().execute(() -> { + + FavoriteImage favoriteImage = favoriteImageDao.getByImagePath(imagePath); + context.runOnUiThread(new Runnable() { + @Override + public void run() { + Log.d("-----------", "onChanged favoriteImage=" + favoriteImage); + if (favoriteImage != null) { + removeImageFromFavorites(imagePath); + holder.favoriteButton.setImageResource(R.drawable.unfavorite); + } else { + addImageToFavorites(imagePath); + holder.favoriteButton.setImageResource(R.drawable.favorite); + } + } + }); + + }); + + + + } + + private void addImageToFavorites(String imagePath) { + AppDatabase.getDatabaseWriteExecutor().execute(() -> { + FavoriteImage favoriteImage = new FavoriteImage(true, imagePath); + favoriteImageDao.insert(favoriteImage); + }); + } + + private void removeImageFromFavorites(String imagePath) { + AppDatabase.getDatabaseWriteExecutor().execute(() -> { + favoriteImageDao.deleteByImagePath(imagePath); + }); + } +} + diff --git a/app/src/main/java/com/sketch/papertracingart/Favorite/FavoriteAdapter.java b/app/src/main/java/com/sketch/papertracingart/Favorite/FavoriteAdapter.java new file mode 100644 index 0000000..a12dc55 --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Favorite/FavoriteAdapter.java @@ -0,0 +1,146 @@ +package com.sketch.papertracingart.Favorite; + +import android.content.Context; +import android.content.Intent; +import android.os.AsyncTask; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.sketch.papertracingart.Camera.CameraActivity; +import com.sketch.papertracingart.R; +import com.sketch.papertracingart.Room.AppDatabase; +import com.sketch.papertracingart.Room.FavoriteImage; +import com.sketch.papertracingart.Room.FavoriteImageDao; +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.engine.DiskCacheStrategy; + +import java.util.ArrayList; +import java.util.List; + +public class FavoriteAdapter extends RecyclerView.Adapter { + + private List favoriteImages; + private final Context context; + private final FavoriteImageDao favoriteImageDao; + private final FavoriteFragment fragment; + + public FavoriteAdapter(Context context, FavoriteFragment fragment) { + this.context = context; + this.fragment = fragment; + this.favoriteImages = new ArrayList<>(); + this.favoriteImageDao = AppDatabase.getInstance(context).favoriteImageDao(); + } + + @NonNull + @Override + public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_image, parent, false); + return new ImageViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ImageViewHolder holder, int position) { + FavoriteImage favoriteImage = favoriteImages.get(position); + String imagePath = favoriteImage.getImagePath(); + boolean isFavorite = favoriteImage.isFavorite(); + + Glide.with(context) + .load(imagePath.startsWith("/data/user/") ? imagePath : "file:///android_asset/" + imagePath) + .diskCacheStrategy(DiskCacheStrategy.ALL) + .into(holder.imageView); + + holder.favoriteButton.setImageResource(isFavorite ? R.drawable.favorite : R.drawable.unfavorite); + + holder.imageView.setOnClickListener(v -> { + Intent intent = new Intent(context, CameraActivity.class); + intent.putExtra("imagePath", imagePath); + context.startActivity(intent); + }); + + holder.favoriteButton.setOnClickListener(v -> { + new CheckFavoriteTask(holder, favoriteImage).execute(); + }); + } + + @Override + public int getItemCount() { + return favoriteImages.size(); + } + + public void updateData(List newFavoriteImages) { + favoriteImages = newFavoriteImages; + notifyDataSetChanged(); + } + + private void updateFavoriteStatus(FavoriteImage favoriteImage, boolean isFavorite) { + favoriteImage.setFavorite(isFavorite); + AsyncTask.execute(() -> { + if (isFavorite) { + // 如果是收藏,插入新的记录 + if (favoriteImageDao.getByImagePath(favoriteImage.getImagePath()) == null) { + favoriteImageDao.insert(favoriteImage); + } else { + // 如果记录已存在,则更新状态 + favoriteImageDao.update(favoriteImage); + } + } else { + // 如果是取消收藏,删除记录 + favoriteImageDao.delete(favoriteImage); + } + // 确保在 UI 线程中更新 RecyclerView + fragment.requireActivity().runOnUiThread(() -> { + // 刷新数据 + fragment.refreshData(); + }); + }); + } + + private class CheckFavoriteTask extends AsyncTask { + private final ImageViewHolder holder; + private final FavoriteImage favoriteImage; + + CheckFavoriteTask(ImageViewHolder holder, FavoriteImage favoriteImage) { + this.holder = holder; + this.favoriteImage = favoriteImage; + } + + @Override + protected Boolean doInBackground(Void... voids) { + FavoriteImage img = favoriteImageDao.getByImagePath(favoriteImage.getImagePath()); + return img != null && img.isFavorite(); + } + + @Override + protected void onPostExecute(Boolean isFavorite) { + if (isFavorite) { + updateFavoriteStatus(favoriteImage, false); + holder.favoriteButton.setImageResource(R.drawable.unfavorite); +// Toast.makeText(context, "Removed from favorites", Toast.LENGTH_SHORT).show(); + } else { + updateFavoriteStatus(favoriteImage, true); + holder.favoriteButton.setImageResource(R.drawable.favorite); + Toast.makeText(context, "Added to favorites", Toast.LENGTH_SHORT).show(); + } + } + } + + static class ImageViewHolder extends RecyclerView.ViewHolder { + ImageView imageView; + ImageView favoriteButton; + + ImageViewHolder(View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.image_view); + favoriteButton = itemView.findViewById(R.id.btn_favorite); + } + } + + + +} diff --git a/app/src/main/java/com/sketch/papertracingart/Favorite/FavoriteFragment.java b/app/src/main/java/com/sketch/papertracingart/Favorite/FavoriteFragment.java new file mode 100644 index 0000000..cf00912 --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Favorite/FavoriteFragment.java @@ -0,0 +1,82 @@ +package com.sketch.papertracingart.Favorite; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.sketch.papertracingart.R; +import com.sketch.papertracingart.Room.AppDatabase; +import com.sketch.papertracingart.Room.FavoriteImage; +import com.sketch.papertracingart.Room.FavoriteImageDao; +import com.sketch.papertracingart.Utils.ItemDecoration; + +import java.util.List; + +public class FavoriteFragment extends Fragment { + + private RecyclerView recyclerView; + private FavoriteAdapter imageAdapter; + private FavoriteImageDao favoriteImageDao; + private ImageView back; + private ImageView title; + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_favorite, container, false); + + // 初始化 RecyclerView + recyclerView = view.findViewById(R.id.recycler_view); + recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2)); + + back = view.findViewById(R.id.favorite_back); + title = view.findViewById(R.id.favorite_title); + + // 初始化数据库和 DAO + AppDatabase db = AppDatabase.getInstance(requireContext()); + favoriteImageDao = db.favoriteImageDao(); + + // 初始化适配器 + imageAdapter = new FavoriteAdapter(requireContext(), this); + recyclerView.setAdapter(imageAdapter); + ItemDecoration itemDecoration = new ItemDecoration(12, 10, 9); + recyclerView.addItemDecoration(itemDecoration); + + refreshData(); + + return view; + } + + @Override + public void onResume() { + super.onResume(); + refreshData(); + } + + public void refreshData() { + new Thread(() -> { + List favoriteImages = favoriteImageDao.getAll(); + requireActivity().runOnUiThread(() -> { + if (favoriteImages.isEmpty()) { + recyclerView.setVisibility(View.GONE); + back.setVisibility(View.VISIBLE); // Uncomment if you have a placeholder image + title.setVisibility(View.VISIBLE); // Uncomment if you have a placeholder image + } else { + recyclerView.setVisibility(View.VISIBLE); + title.setVisibility(View.GONE); // Uncomment if you have a placeholder image + back.setVisibility(View.GONE); // Uncomment if you have a placeholder image + } + imageAdapter.updateData(favoriteImages); + }); + }).start(); + } + +} diff --git a/app/src/main/java/com/sketch/papertracingart/Import/ImportListAdapter.java b/app/src/main/java/com/sketch/papertracingart/Import/ImportListAdapter.java new file mode 100644 index 0000000..314dd49 --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Import/ImportListAdapter.java @@ -0,0 +1,257 @@ +package com.sketch.papertracingart.Import; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.AsyncTask; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.lifecycle.LifecycleOwner; +import androidx.lifecycle.LiveData; +import androidx.lifecycle.Observer; +import androidx.recyclerview.widget.DiffUtil; +import androidx.recyclerview.widget.RecyclerView; + +import com.sketch.papertracingart.Camera.CameraActivity; +import com.sketch.papertracingart.R; +import com.sketch.papertracingart.Room.AppDatabase; +import com.sketch.papertracingart.Room.FavoriteImage; +import com.sketch.papertracingart.Room.FavoriteImageDao; +import com.sketch.papertracingart.Utils.DiffUtilUtils; +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.engine.DiskCacheStrategy; + +import java.util.List; +import java.util.Objects; + +/** + * RecyclerView 的适配器,用于显示图片。 + */ +public class ImportListAdapter extends RecyclerView.Adapter { + + private List imagePaths; + + private List imagePathsOld; + private final FavoriteImageDao favoriteImageDao; + private final Activity context;// 图片路径列表 + + public ImportListAdapter(List imagePaths, Activity context) { + this.imagePaths = imagePaths; + this.context = context; + AppDatabase db = AppDatabase.getInstance(context); + this.favoriteImageDao = db.favoriteImageDao(); // 初始化 DAO + } + + // 更新数据并使用 DiffUtil + public void updateImagePaths(List newImagePaths) { + +// imagePathsOld = imagePaths; + imagePaths = newImagePaths; +// DiffUtil.Callback diffCallback = DiffUtilUtils.createImageDiffCallback(imagePathsOld, imagePaths); +// DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(diffCallback); +// diffResult.dispatchUpdatesTo(this); + + notifyDataSetChanged(); + } + + @NonNull + @Override + public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + // 创建并返回 ImageViewHolder + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_image, parent, false); + return new ImageViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ImageViewHolder holder, int position) { + String imagePath = imagePaths.get(position); // 获取当前图片的路径 + Log.d("imagepTh","imagePath"+imagePath); + Log.d("imagepTh","imagePaths"+imagePath); + Context context = holder.imageView.getContext(); + + if (imagePath.startsWith("/data/user/")) { + Glide.with(context) + .load(imagePath) + .diskCacheStrategy(DiskCacheStrategy.ALL) + .into(holder.imageView); + } else { + Glide.with(context) + .load("file:///android_asset/" + imagePath) + .diskCacheStrategy(DiskCacheStrategy.ALL) + .into(holder.imageView); + } + + holder.imageView.setOnClickListener(v -> { + Intent intent = new Intent(context, CameraActivity.class); + intent.putExtra("imagePath", imagePath); + context.startActivity(intent); + }); + + // 更新收藏按钮状态 + updateFavoriteButton(holder, imagePath); + + // 设置收藏按钮点击事件 + holder.favoriteButton.setOnClickListener(v -> { + // 检查当前图片是否被收藏 + new CheckFavoriteTask(holder, imagePath).execute(); + }); + + } + + @Override + public int getItemCount() { + return imagePaths.size(); // 返回图片的数量 + } + + + private static class MyDiffCallback extends DiffUtil.Callback { + private List oldItems; + private List newItems; + + MyDiffCallback(List oldItems, List newItems) { + this.oldItems = oldItems; + this.newItems = newItems; + } + + @Override + public int getOldListSize() { + return oldItems.size(); + } + + @Override + public int getNewListSize() { + return newItems.size(); + } + + @Override + public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) { + return Objects.equals(oldItems.get(oldItemPosition), newItems.get(newItemPosition)); + } + + @Override + public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) { + String newItem = newItems.get(newItemPosition); + String oldItem = oldItems.get(oldItemPosition); + return Objects.equals(oldItem, newItem); + } + } + + + + /** + * ViewHolder 类,用于缓存视图 + */ + static class ImageViewHolder extends RecyclerView.ViewHolder { + ImageView imageView; + ImageView favoriteButton; + + ImageViewHolder(View view) { + super(view); + imageView = view.findViewById(R.id.image_view); + favoriteButton = view.findViewById(R.id.btn_favorite); + } + } + + // 更新收藏按钮状态(通过异步任务) + private void updateFavoriteButton(ImportListAdapter.ImageViewHolder holder, String imagePath) { + LiveData favoriteImageLiveData = favoriteImageDao.getFavoriteImageByPath(imagePath); + favoriteImageLiveData.observe((LifecycleOwner) context, new Observer() { + @Override + public void onChanged(FavoriteImage favoriteImage) { + boolean isFavorite = favoriteImage != null && favoriteImage.isFavorite(); + int iconResId = isFavorite ? R.drawable.favorite : R.drawable.unfavorite; + holder.favoriteButton.setImageResource(iconResId); + } + }); + } + + private void toggleFavorite(ImportListAdapter.ImageViewHolder holder, String imagePath) { + + AppDatabase.getDatabaseWriteExecutor().execute(() -> { + + FavoriteImage favoriteImage = favoriteImageDao.getByImagePath(imagePath); + context.runOnUiThread(new Runnable() { + @Override + public void run() { + + Log.d("-----------", "onChanged favoriteImage=" + favoriteImage); + if (favoriteImage != null) { + removeImageFromFavorites(imagePath); + holder.favoriteButton.setImageResource(R.drawable.unfavorite); + } else { + addImageToFavorites(imagePath); + holder.favoriteButton.setImageResource(R.drawable.favorite); + } + } + }); + + }); + + + + } + + // 刷新所有图片的收藏状态 + public void refreshFavoriteStatusImport() { + for (int i = 0; i < imagePaths.size(); i++) { + notifyItemChanged(i); + } + } + + // 添加图片到收藏数据库 + private void addImageToFavorites(String imagePath) { + AsyncTask.execute(() -> { + FavoriteImage favoriteImage = favoriteImageDao.getByImagePath(imagePath); + if (favoriteImage == null) { + favoriteImage = new FavoriteImage(true, imagePath); + favoriteImageDao.insert(favoriteImage); // 插入新的收藏记录 + } else { + favoriteImage.setFavorite(true); + favoriteImageDao.update(favoriteImage); // 更新收藏状态 + } + }); + } + + // 从收藏数据库中移除图片 + private void removeImageFromFavorites(String imagePath) { + AppDatabase.getDatabaseWriteExecutor().execute(() -> { + favoriteImageDao.deleteByImagePath(imagePath); + }); + } + + // 异步任务:检查图片是否收藏 + private class CheckFavoriteTask extends AsyncTask { + private final ImportListAdapter.ImageViewHolder holder; + private final String imagePath; + + CheckFavoriteTask(ImportListAdapter.ImageViewHolder holder, String imagePath) { + this.holder = holder; + this.imagePath = imagePath; + } + + @Override + protected Boolean doInBackground(Void... voids) { + FavoriteImage favoriteImage = favoriteImageDao.getByImagePath(imagePath); + return favoriteImage != null && favoriteImage.isFavorite(); + } + + @Override + protected void onPostExecute(Boolean isFavorite) { + if (isFavorite) { + // 如果已经收藏,则移除收藏 + removeImageFromFavorites(imagePath); + holder.favoriteButton.setImageResource(R.drawable.unfavorite); // 更新按钮图标为未收藏状态 + } else { + // 如果未收藏,则添加到收藏 + addImageToFavorites(imagePath); + holder.favoriteButton.setImageResource(R.drawable.favorite); // 更新按钮图标为收藏状态 + } + } + } + +} diff --git a/app/src/main/java/com/sketch/papertracingart/Import/ImportListFragment.java b/app/src/main/java/com/sketch/papertracingart/Import/ImportListFragment.java new file mode 100644 index 0000000..3f13fb4 --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Import/ImportListFragment.java @@ -0,0 +1,243 @@ +package com.sketch.papertracingart.Import; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.Toast; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.sketch.papertracingart.R; +import com.sketch.papertracingart.Room.AppDatabase; +import com.sketch.papertracingart.Room.ImageEntry; +import com.sketch.papertracingart.Room.ImageEntryDao; +import com.sketch.papertracingart.Utils.ItemDecoration; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +/** + * 显示图片列表的 Fragment。 + */ +public class ImportListFragment extends Fragment { + + private static final int PICK_IMAGE_REQUEST_CODE = 202; // 请求码,用于标识图片选择 + + private ImageView btnSelectImage; // 选择图片按钮 + private RecyclerView recyclerView; // 显示图片的 RecyclerView + private ImportListAdapter importListAdapter; // 图片适配器 + private List imagePaths = new ArrayList<>(); // 图片路径列表 + private AppDatabase appDatabase; // 数据库实例 + private ImageEntryDao imageEntryDao; // 图片条目 DAO + private LinearLayout linearLayout; + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + // 加载 Fragment 的布局 + View view = inflater.inflate(R.layout.fragment_import_list, container, false); + + // 初始化控件 + btnSelectImage = view.findViewById(R.id.btn_select_image); + recyclerView = view.findViewById(R.id.recycler_view); + + linearLayout = view.findViewById(R.id.empty); + + + // 设置 RecyclerView 的布局管理器和适配器 + recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2)); // 网格布局,每行显示两个图片\ + ItemDecoration itemDecoration = new ItemDecoration(12, 10, 9); + recyclerView.addItemDecoration(itemDecoration); + importListAdapter = new ImportListAdapter(imagePaths, requireActivity()); // 初始化适配器 + recyclerView.setAdapter(importListAdapter); // 设置适配器 + + // 设置选择图片按钮的点击事件 + btnSelectImage.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Log.d("-----------", "onClick "); + openImagePicker(); + } + }); + + // 初始化数据库和 DAO + appDatabase = AppDatabase.getInstance(requireContext()); + imageEntryDao = appDatabase.imageEntryDao(); + + // 加载图片路径 + loadImagePaths(); + + return view; + } + + /** + * 打开图片选择器。 + */ + private void openImagePicker() { + Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + startActivityForResult(intent, PICK_IMAGE_REQUEST_CODE); // 启动选择图片的活动 + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + // 处理图片选择结果 + if (requestCode == PICK_IMAGE_REQUEST_CODE && resultCode == getActivity().RESULT_OK && data != null) { + Uri selectedImageUri = data.getData(); // 获取选中的图片 URI + if (selectedImageUri != null) { + saveImageToInternalStorage(selectedImageUri); // 保存图片到内部存储 + } + } + } + + /** + * 将选中的图片保存到内部存储。 + * + * @param uri 选中的图片 URI + */ + private void saveImageToInternalStorage(Uri uri) { + try { + // 从 URI 获取输入流 + InputStream inputStream = requireContext().getContentResolver().openInputStream(uri); + Bitmap bitmap = BitmapFactory.decodeStream(inputStream); // 解码图片 + + if (bitmap == null) { + Toast.makeText(getContext(), "无法加载图片", Toast.LENGTH_SHORT).show(); + return; + } + + // 将图片保存到内部存储 + File internalStorageDir = requireContext().getFilesDir(); // 获取内部存储目录 + File imageFile = new File(internalStorageDir, System.currentTimeMillis() + ".jpg"); // 创建新图片文件 + FileOutputStream outputStream = new FileOutputStream(imageFile); + bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream); // 将图片压缩并保存 + outputStream.close(); + inputStream.close(); + + String imagePath = imageFile.getAbsolutePath(); // 获取图片绝对路径 + + // 检查图片是否已经存在 + new Thread(() -> { + if (isImageAlreadyExists(imagePath)) { + requireActivity().runOnUiThread(() -> Toast.makeText(getContext(), "该图片已经存在", Toast.LENGTH_SHORT).show()); + imageFile.delete(); // 删除重复的文件 + return; + } + imagePaths.add(imagePath); // 添加图片路径到列表 + + requireActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + importListAdapter.updateImagePaths(imagePaths); + + Log.d("--------1111111---", "imagePaths= +" + imagePaths.size()); + setView(!imagePaths.isEmpty()); + } + }); // 更新 RecyclerView + + // 将图片路径插入数据库 + imageEntryDao.insert(new ImageEntry(imagePath)); + + }).start(); + + } catch (IOException e) { + e.printStackTrace(); + Toast.makeText(getContext(), "保存图片失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); + } + } + + /** + * 检查图片是否已经存在。 + * + * @param imagePath 图片路径 + * @return 图片是否已存在 + */ + private boolean isImageAlreadyExists(String imagePath) { + File newImageFile = new File(imagePath); + + // 检查 imagePaths 列表 + for (String path : imagePaths) { + File existingFile = new File(path); + if (filesAreIdentical(existingFile, newImageFile)) { + return true; + } + } + + // 检查数据库 + List imageEntries = imageEntryDao.getAllImages(); + for (ImageEntry imageEntry : imageEntries) { + File existingFile = new File(imageEntry.getImagePath()); + if (filesAreIdentical(existingFile, newImageFile)) { + return true; + } + } + + return false; + } + + /** + * 比较两个文件是否相同。 + * + * @param file1 文件1 + * @param file2 文件2 + * @return 文件是否相同 + */ + private boolean filesAreIdentical(File file1, File file2) { + if (file1.length() != file2.length()) { + return false; // 文件长度不同,则文件不同 + } + // 可以根据需求进一步比较文件内容(例如,通过 MD5 哈希值或逐字节比较) + return true; + } + + /** + * 加载图片路径列表。 + */ + private void loadImagePaths() { + new Thread(() -> { + List imageEntries = imageEntryDao.getAllImages(); + for (ImageEntry imageEntry : imageEntries) { + imagePaths.add(imageEntry.getImagePath()); // 添加路径到列表 + } + requireActivity().runOnUiThread(() -> { + importListAdapter.updateImagePaths(imagePaths); + + Log.d("--------22222222---", "imagePaths= +" + imagePaths.size()); + + setView(!imagePaths.isEmpty()); + + }); // 更新 RecyclerView + }).start(); + } + + + + + + + private void setView(Boolean hasData) { + if (hasData) { + recyclerView.setVisibility(View.VISIBLE); + linearLayout.setVisibility(View.GONE); + } else { + recyclerView.setVisibility(View.GONE); + linearLayout.setVisibility(View.VISIBLE); + } + + } + +} diff --git a/app/src/main/java/com/sketch/papertracingart/Main/MainActivity.java b/app/src/main/java/com/sketch/papertracingart/Main/MainActivity.java new file mode 100644 index 0000000..0215795 --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Main/MainActivity.java @@ -0,0 +1,159 @@ +package com.sketch.papertracingart.Main; + +import android.content.Intent; +import android.graphics.Typeface; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; +import androidx.viewpager2.widget.ViewPager2; + +import com.sketch.papertracingart.Setting.SettingActivity; +import com.sketch.papertracingart.R; +import com.google.android.material.tabs.TabLayout; +import com.google.android.material.tabs.TabLayoutMediator; + +public class MainActivity extends AppCompatActivity { + + private ViewPager2 viewPager2; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_main); + + + ImageView setting = findViewById(R.id.setting); + TextView title = findViewById(R.id.paper_traci); + //设置字体 + Typeface typeface = Typeface.createFromAsset(getAssets(), "Inter-Medium.ttf"); + title.setTypeface(typeface); + + + viewPager2 = findViewById(R.id.main_view_pager); + TabLayout tabLayout = findViewById(R.id.main_tab); + + MainViewPagerAdapter adapter = new MainViewPagerAdapter(this); + viewPager2.setAdapter(adapter); + + setting.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(MainActivity.this, SettingActivity.class); + startActivity(intent); + } + }); + + // 禁用滑动事件 + viewPager2.setUserInputEnabled(false); //true:滑动,false:禁止滑动 + + + //关联tabLayout和viewpager2,设置tabLayout标签样式 + new TabLayoutMediator(tabLayout, viewPager2, (tab, position) -> { + View customView = LayoutInflater.from(this).inflate(R.layout.main_tab_custom, null); + tab.setCustomView(customView); + + View root = customView.findViewById(R.id.main_tab_root); + ImageView tabIcon = customView.findViewById(R.id.main_custom_image); + TextView textView = customView.findViewById(R.id.main_custom_text); + //设置字体 + textView.setTypeface(typeface); + + if (tabIcon != null) { + if (position == 0) { + tabIcon.setImageResource(R.drawable.main_select_draw); + textView.setText(getString(R.string.main_draw)); + textView.setTextColor(ContextCompat.getColor(this, R.color.white)); + } else if (position == 1) { + tabIcon.setImageResource(R.drawable.unimport); + textView.setText(getString(R.string.import_photo)); + textView.setTextColor(ContextCompat.getColor(this, R.color.main_title)); + root.setBackgroundResource(R.drawable.main_tab_white); + } else { + tabIcon.setImageResource(R.drawable.main_unselect_setting); + textView.setText(getString(R.string.favorite)); + textView.setTextColor(ContextCompat.getColor(this, R.color.main_title)); + root.setBackgroundResource(R.drawable.main_tab_white); + } + } + }).attach(); + + + //设置标签选中事件 + tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { + @Override + public void onTabSelected(TabLayout.Tab tab) { + View customView = tab.getCustomView(); + if (customView != null) { + View root = customView.findViewById(R.id.main_tab_root); + ImageView tabIcon = customView.findViewById(R.id.main_custom_image); + TextView textView = customView.findViewById(R.id.main_custom_text); + Typeface typeface = Typeface.createFromAsset(getAssets(), "Inter-Medium.ttf"); + textView.setTypeface(typeface); + if (tabIcon != null) { + if (tab.getPosition() == 0) { + tabIcon.setImageResource(R.drawable.main_select_draw); + textView.setText(getString(R.string.main_draw)); + textView.setTextColor(ContextCompat.getColor(MainActivity.this, R.color.white)); + root.setBackgroundResource(R.drawable.main_tab); + } else if (tab.getPosition() == 1) { + tabIcon.setImageResource(R.drawable.import_photo); + textView.setText(getString(R.string.import_photo)); + textView.setTextColor(ContextCompat.getColor(MainActivity.this, R.color.white)); + root.setBackgroundResource(R.drawable.main_tab); + } else { + tabIcon.setImageResource(R.drawable.main_select_setting); + textView.setText(getString(R.string.favorite)); + textView.setTextColor(ContextCompat.getColor(MainActivity.this, R.color.white)); + root.setBackgroundResource(R.drawable.main_tab); + } + } + } + } + + @Override + public void onTabUnselected(TabLayout.Tab tab) { + View customView = tab.getCustomView(); + if (customView != null) { + View root = customView.findViewById(R.id.main_tab_root); + ImageView tabIcon = customView.findViewById(R.id.main_custom_image); + TextView textView = customView.findViewById(R.id.main_custom_text); + Typeface typeface = Typeface.createFromAsset(getAssets(), "Inter-Medium.ttf"); + textView.setTypeface(typeface); + if (tabIcon != null) { + if (tab.getPosition() == 0) { + tabIcon.setImageResource(R.drawable.main_unselect_draw); + textView.setText(getString(R.string.main_draw)); + textView.setTextColor(ContextCompat.getColor(MainActivity.this, R.color.main_title)); + root.setBackgroundResource(R.drawable.main_tab_white); + } else if (tab.getPosition() == 1) { + tabIcon.setImageResource(R.drawable.unimport); + textView.setText(getString(R.string.import_photo)); + textView.setTextColor(ContextCompat.getColor(MainActivity.this, R.color.main_title)); + root.setBackgroundResource(R.drawable.main_tab_white); + } else { + tabIcon.setImageResource(R.drawable.main_unselect_setting); + textView.setText(getString(R.string.favorite)); + textView.setTextColor(ContextCompat.getColor(MainActivity.this, R.color.main_title)); + root.setBackgroundResource(R.drawable.main_tab_white); + } + } + } + } + + @Override + public void onTabReselected(TabLayout.Tab tab) { + // 处理Tab重新选中事件 + } + }); + + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/sketch/papertracingart/Main/MainViewPagerAdapter.java b/app/src/main/java/com/sketch/papertracingart/Main/MainViewPagerAdapter.java new file mode 100644 index 0000000..17bcabe --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Main/MainViewPagerAdapter.java @@ -0,0 +1,36 @@ +package com.sketch.papertracingart.Main; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.viewpager2.adapter.FragmentStateAdapter; + +import com.sketch.papertracingart.Category.CategoryFragment; +import com.sketch.papertracingart.Favorite.FavoriteFragment; +import com.sketch.papertracingart.Import.ImportListFragment; + + +public class MainViewPagerAdapter extends FragmentStateAdapter { + public MainViewPagerAdapter(@NonNull FragmentActivity fragmentActivity) { + super(fragmentActivity); + } + + @NonNull + @Override + public Fragment createFragment(int position) { + + if (position == 0) { + return new CategoryFragment(); + } else if(position==1){ + return new ImportListFragment(); + }else { + return new FavoriteFragment(); + } + + } + + @Override + public int getItemCount() { + return 3; + } +} diff --git a/app/src/main/java/com/sketch/papertracingart/MyApp.java b/app/src/main/java/com/sketch/papertracingart/MyApp.java new file mode 100644 index 0000000..9cc066d --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/MyApp.java @@ -0,0 +1,23 @@ +package com.sketch.papertracingart; + +import android.app.Application; +import android.media.audiofx.EnvironmentalReverb; + +public class MyApp extends Application { + + public static MyApp myApp; + + public static final int DB_Version= 1; + + public static String DB_NAme= "image_database"; + + @Override + public void onCreate() { + super.onCreate(); + myApp = this; + + + } + + +} diff --git a/app/src/main/java/com/sketch/papertracingart/Room/AppDatabase.java b/app/src/main/java/com/sketch/papertracingart/Room/AppDatabase.java new file mode 100644 index 0000000..9dcfe12 --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Room/AppDatabase.java @@ -0,0 +1,38 @@ +package com.sketch.papertracingart.Room; + +import androidx.room.Database; +import androidx.room.Room; +import androidx.room.RoomDatabase; +import android.content.Context; + +import com.sketch.papertracingart.MyApp; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +@Database(entities = {ImageEntry.class, FavoriteImage.class}, version = MyApp.DB_Version, exportSchema = false) +public abstract class AppDatabase extends RoomDatabase { + + public abstract ImageEntryDao imageEntryDao(); + public abstract FavoriteImageDao favoriteImageDao(); + + private static volatile AppDatabase INSTANCE; + private static final ExecutorService databaseWriteExecutor = Executors.newFixedThreadPool(4); + + public static AppDatabase getInstance(Context context) { + if (INSTANCE == null) { + synchronized (AppDatabase.class) { + if (INSTANCE == null) { + INSTANCE = Room.databaseBuilder(context.getApplicationContext(), + AppDatabase.class, MyApp.DB_NAme) + .build(); + } + } + } + return INSTANCE; + } + + public static ExecutorService getDatabaseWriteExecutor() { + return databaseWriteExecutor; + } +} diff --git a/app/src/main/java/com/sketch/papertracingart/Room/FavoriteImage.java b/app/src/main/java/com/sketch/papertracingart/Room/FavoriteImage.java new file mode 100644 index 0000000..f42cb2a --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Room/FavoriteImage.java @@ -0,0 +1,48 @@ +package com.sketch.papertracingart.Room; + +import androidx.room.ColumnInfo; +import androidx.room.Entity; +import androidx.room.PrimaryKey; + +import java.io.Serializable; + +@Entity(tableName = "favorite_images") +public class FavoriteImage implements Serializable { + @PrimaryKey(autoGenerate = true) + private int id; + + @ColumnInfo(name = "image_path") + private String imagePath; + + @ColumnInfo(name = "is_favorite") + private boolean isFavorite; // 新字段:收藏状态 + + public FavoriteImage(boolean isFavorite, String imagePath) { + this.isFavorite = isFavorite; + this.imagePath = imagePath; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getImagePath() { + return imagePath; + } + + public void setImagePath(String imagePath) { + this.imagePath = imagePath; + } + + public boolean isFavorite() { + return isFavorite; + } + + public void setFavorite(boolean favorite) { + isFavorite = favorite; + } +} diff --git a/app/src/main/java/com/sketch/papertracingart/Room/FavoriteImageDao.java b/app/src/main/java/com/sketch/papertracingart/Room/FavoriteImageDao.java new file mode 100644 index 0000000..bad8460 --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Room/FavoriteImageDao.java @@ -0,0 +1,63 @@ +package com.sketch.papertracingart.Room; + +import androidx.lifecycle.LiveData; +import androidx.room.Dao; +import androidx.room.Delete; +import androidx.room.Insert; +import androidx.room.Query; +import androidx.room.Update; + +import java.util.List; + +@Dao +public interface FavoriteImageDao { + + @Insert + void insert(FavoriteImage favoriteImage); + + @Insert + void insertAll(List favoriteImages); + + @Query("SELECT * FROM favorite_images") + List getAll(); + + @Query("SELECT image_path FROM favorite_images") + List getAllImagePaths(); + + @Query("SELECT * FROM favorite_images WHERE image_path = :imageUrl") + FavoriteImage getByImagePath(String imageUrl); + + @Query("SELECT * FROM favorite_images WHERE is_favorite = 1") + List getAllFavorites(); + + @Query("SELECT * FROM favorite_images WHERE image_path = :imageUrl") + LiveData getFavoriteImageByPath(String imageUrl); + + @Query("SELECT * FROM favorite_images WHERE is_favorite = 1") + LiveData> getAllFavoriteImages(); + + @Update + void update(FavoriteImage favoriteImage); + + @Update + void updateAll(List favoriteImages); + + @Delete + void delete(FavoriteImage favoriteImage); + + @Delete + void deleteAll(List favoriteImages); + + @Query("DELETE FROM favorite_images WHERE image_path = :imageUrl") + void deleteByImagePath(String imageUrl); + + @Query("SELECT COUNT(*) FROM favorite_images WHERE is_favorite = 1") + int getFavoriteCount(); + + @Query("SELECT * FROM favorite_images LIMIT :limit OFFSET :offset") + List getPaginated(int limit, int offset); + + @Query("SELECT * FROM favorite_images ORDER BY image_path ASC") + List getAllSortedByImagePath(); +} + diff --git a/app/src/main/java/com/sketch/papertracingart/Room/ImageEntry.java b/app/src/main/java/com/sketch/papertracingart/Room/ImageEntry.java new file mode 100644 index 0000000..d5f22c6 --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Room/ImageEntry.java @@ -0,0 +1,31 @@ +package com.sketch.papertracingart.Room; + +import androidx.room.Entity; +import androidx.room.PrimaryKey; + +@Entity(tableName = "image_entry") +public class ImageEntry { + @PrimaryKey(autoGenerate = true) + private int id; + private String imagePath; + + public ImageEntry(String imagePath) { + this.imagePath = imagePath; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getImagePath() { + return imagePath; + } + + public void setImagePath(String imagePath) { + this.imagePath = imagePath; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/sketch/papertracingart/Room/ImageEntryDao.java b/app/src/main/java/com/sketch/papertracingart/Room/ImageEntryDao.java new file mode 100644 index 0000000..89e50cb --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Room/ImageEntryDao.java @@ -0,0 +1,23 @@ +package com.sketch.papertracingart.Room; + +import androidx.room.Dao; +import androidx.room.Delete; +import androidx.room.Insert; +import androidx.room.Query; + +import java.util.List; + +@Dao +public interface ImageEntryDao { + @Insert + void insert(ImageEntry imageEntry); + + @Delete + void delete(ImageEntry imageEntry); + + @Query("SELECT * FROM image_entry") + List getAllImages(); + + @Query("SELECT * FROM image_entry WHERE imagePath = :imagePath LIMIT 1") + ImageEntry findByPath(String imagePath); +} diff --git a/app/src/main/java/com/sketch/papertracingart/Setting/PrivacyActivity.java b/app/src/main/java/com/sketch/papertracingart/Setting/PrivacyActivity.java new file mode 100644 index 0000000..87d642a --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Setting/PrivacyActivity.java @@ -0,0 +1,31 @@ +package com.sketch.papertracingart.Setting; + +import android.os.Bundle; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.ImageView; + +import androidx.appcompat.app.AppCompatActivity; + +import com.sketch.papertracingart.R; + + +public class PrivacyActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_privacy); + + WebView webView = findViewById(R.id.webview); + ImageView back = findViewById(R.id.btn_back); + // 设置WebView的客户端 + webView.setWebViewClient(new WebViewClient()); + + back.setOnClickListener(v -> finish()); + + webView.loadUrl("file:///android_asset/privacy.html"); + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/sketch/papertracingart/Setting/SettingActivity.java b/app/src/main/java/com/sketch/papertracingart/Setting/SettingActivity.java new file mode 100644 index 0000000..1d95976 --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Setting/SettingActivity.java @@ -0,0 +1,107 @@ +package com.sketch.papertracingart.Setting; + +import android.content.Intent; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.graphics.Typeface; +import android.net.Uri; +import android.os.Bundle; + +import androidx.appcompat.app.AppCompatActivity; + +import android.util.Log; +import android.view.View; +import android.widget.TextView; + +import com.sketch.papertracingart.R; + + +public class SettingActivity extends AppCompatActivity { + + private PackageInfo packageInfo; + + private String format; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_setting); + + TextView textView1 = findViewById(R.id.privacy_text); + TextView textView2 = findViewById(R.id.version_text); + TextView textView3 = findViewById(R.id.share_text); + TextView textView4 = findViewById(R.id.rate_text); + TextView version = findViewById(R.id.text_version); + View privacy = findViewById(R.id.privacy); + View share = findViewById(R.id.share); + View rate = findViewById(R.id.rate); + + + Typeface typeface = Typeface.createFromAsset(getAssets(), "Inter-Medium.ttf"); + textView1.setTypeface(typeface); + textView2.setTypeface(typeface); + textView3.setTypeface(typeface); + textView4.setTypeface(typeface); + + try { + packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0); + String versionName = packageInfo.versionName; + format = String.format(getString(R.string.gp), packageInfo.packageName); + version.setText(versionName); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + version.setText("1.0.0"); + format = String.format(getString(R.string.gp), "com.sketch.papertracingart"); + } + + Log.d("----------------","---------format"+format); + + + privacy.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + Intent intent = new Intent(SettingActivity.this, PrivacyActivity.class); + startActivity(intent); + + } + }); + + share.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + shareString(format); + + } + }); + + + rate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Uri uri = Uri.parse(format); + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + startActivity(intent); + + + } + }); + + } + + + /** + * 分享纯文本 + * + * @param content 内容 + */ + public void shareString(String content) { + Intent sendIntent = new Intent(); + sendIntent.setAction(Intent.ACTION_SEND); + sendIntent.putExtra(Intent.EXTRA_TEXT, content);//分享的文本内容 + sendIntent.setType("text/plain"); + startActivity(Intent.createChooser(sendIntent, "Share to")); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/sketch/papertracingart/Splash/SplashActivity.java b/app/src/main/java/com/sketch/papertracingart/Splash/SplashActivity.java new file mode 100644 index 0000000..a8ad4da --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Splash/SplashActivity.java @@ -0,0 +1,58 @@ +package com.sketch.papertracingart.Splash; + + +import android.content.Intent; +import android.os.Bundle; +import android.os.CountDownTimer; +import android.os.Handler; +import android.os.Looper; +import android.widget.ProgressBar; + +import androidx.appcompat.app.AppCompatActivity; + +import com.sketch.papertracingart.Main.MainActivity; +import com.sketch.papertracingart.R; + +public class SplashActivity extends AppCompatActivity { + + private static final int SPLASH_TIME_OUT = 1500; + private ProgressBar progressBar; + + private CountDownTimer countDownTimer; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_splash); + + + + progressBar = findViewById(R.id.progress_bar); + countDownTimer = new CountDownTimer(SPLASH_TIME_OUT, 100) { + + @Override + public void onTick(long millisUntilFinished) { + + float v = 100 - (float) millisUntilFinished / SPLASH_TIME_OUT * 100; + int v1 = (int) v; + progressBar.setProgress(v1); + + } + + @Override + public void onFinish() { + progressBar.setProgress(100); + Intent intent = new Intent(SplashActivity.this, MainActivity.class); + startActivity(intent); + finish(); + } + }; + + countDownTimer.start(); + + + + + + } +} diff --git a/app/src/main/java/com/sketch/papertracingart/Utils/DiffUtilUtils.java b/app/src/main/java/com/sketch/papertracingart/Utils/DiffUtilUtils.java new file mode 100644 index 0000000..1fe159a --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Utils/DiffUtilUtils.java @@ -0,0 +1,39 @@ +package com.sketch.papertracingart.Utils; + +import androidx.recyclerview.widget.DiffUtil; + +import java.util.List; + +public class DiffUtilUtils { + + /** + * 创建一个 DiffUtil.Callback 实例 + * + * @param oldList 旧数据列表 + * @param newList 新数据列表 + * @return DiffUtil.Callback 实例 + */ + public static DiffUtil.Callback createImageDiffCallback(List oldList, List newList) { + return new DiffUtil.Callback() { + @Override + public int getOldListSize() { + return oldList.size(); + } + + @Override + public int getNewListSize() { + return newList.size(); + } + + @Override + public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) { + return oldList.get(oldItemPosition).equals(newList.get(newItemPosition)); + } + + @Override + public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) { + return oldList.get(oldItemPosition).equals(newList.get(newItemPosition)); + } + }; + } +} diff --git a/app/src/main/java/com/sketch/papertracingart/Utils/ItemDecoration.java b/app/src/main/java/com/sketch/papertracingart/Utils/ItemDecoration.java new file mode 100644 index 0000000..fce76f5 --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Utils/ItemDecoration.java @@ -0,0 +1,75 @@ +package com.sketch.papertracingart.Utils; + +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; + +import com.sketch.papertracingart.MyApp; + +public class ItemDecoration extends RecyclerView.ItemDecoration { + + private int v, h, ex; + + public ItemDecoration(int v, int h, int ex) { + this.v = Math.round(dpToPx(v)); + this.h = Math.round(dpToPx(h)); + this.ex = Math.round(dpToPx(ex)); + } + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + int spanCount = 1; + int spanSize = 1; + int spanIndex = 0; + + int childAdapterPosition = parent.getChildAdapterPosition(view); + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + if (layoutManager instanceof StaggeredGridLayoutManager) { + StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) layoutManager; + StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams(); + spanCount = staggeredGridLayoutManager.getSpanCount(); + if (layoutParams.isFullSpan()) { + spanSize = spanCount; + } + spanIndex = layoutParams.getSpanIndex(); + } else if (layoutManager instanceof GridLayoutManager) { + GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager; + GridLayoutManager.LayoutParams layoutParams = (GridLayoutManager.LayoutParams) view.getLayoutParams(); + spanCount = gridLayoutManager.getSpanCount(); + spanSize = gridLayoutManager.getSpanSizeLookup().getSpanSize(childAdapterPosition); + spanIndex = layoutParams.getSpanIndex(); + } else if (layoutManager instanceof LinearLayoutManager) { + outRect.left = v; + outRect.right = v; + outRect.bottom = h; + } + + if (spanSize == spanCount) { + outRect.left = v + ex; + outRect.right = v + ex; + outRect.bottom = h; + + } else { + int itemAllSpacing = (v * (spanCount + 1) + ex * 2) / spanCount; + int left = v * (spanIndex + 1) - itemAllSpacing * spanIndex + ex; + int right = itemAllSpacing - left; + outRect.left = left; + outRect.right = right; + outRect.bottom = h; + + } + + } + + + public static float dpToPx(float dpValue) { + float density = MyApp.myApp.getResources().getDisplayMetrics().density; + return density * dpValue + 0.5f; + } +} diff --git a/app/src/main/java/com/sketch/papertracingart/Utils/Names.java b/app/src/main/java/com/sketch/papertracingart/Utils/Names.java new file mode 100644 index 0000000..24b0163 --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Utils/Names.java @@ -0,0 +1,49 @@ +package com.sketch.papertracingart.Utils; + +import java.util.ArrayList; +import java.util.List; + +public class Names { + + 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/sketch/papertracingart/Utils/PermissionUtils.java b/app/src/main/java/com/sketch/papertracingart/Utils/PermissionUtils.java new file mode 100644 index 0000000..764bd3a --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Utils/PermissionUtils.java @@ -0,0 +1,42 @@ +package com.sketch.papertracingart.Utils; + +import android.Manifest; +import android.app.Activity; +import android.content.pm.PackageManager; +import android.os.Build; + +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +public class PermissionUtils { + + public static boolean hasPermissions(Activity activity, String[] permissions) { + for (String permission : permissions) { + if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) { + return false; + } + } + return true; + } + + public static void requestPermissions(Activity activity, String[] permissions, int requestCode) { + ActivityCompat.requestPermissions(activity, permissions, requestCode); + } + + public static boolean handlePermissionsResult(int[] grantResults) { + for (int result : grantResults) { + if (result != PackageManager.PERMISSION_GRANTED) { + return false; + } + } + return true; + } + + public static String[] getStoragePermissions() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + return new String[]{Manifest.permission.READ_MEDIA_IMAGES}; + } else { + return new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; + } + } +} diff --git a/app/src/main/java/com/sketch/papertracingart/Utils/Tracing.java b/app/src/main/java/com/sketch/papertracingart/Utils/Tracing.java new file mode 100644 index 0000000..793c185 --- /dev/null +++ b/app/src/main/java/com/sketch/papertracingart/Utils/Tracing.java @@ -0,0 +1,13 @@ +package com.sketch.papertracingart.Utils; + +import android.view.MotionEvent; + +public class Tracing { + + public static float getDistance(MotionEvent event) { + float dx = event.getX(1) - event.getX(0); + float dy = event.getY(1) - event.getY(0); + return (float) Math.sqrt(dx * dx + dy * dy); + } + +} diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/back.xml b/app/src/main/res/drawable/back.xml new file mode 100644 index 0000000..0ed2b3b --- /dev/null +++ b/app/src/main/res/drawable/back.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/category_text_coloer.xml b/app/src/main/res/drawable/category_text_coloer.xml new file mode 100644 index 0000000..4b08dd5 --- /dev/null +++ b/app/src/main/res/drawable/category_text_coloer.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/favorite.xml b/app/src/main/res/drawable/favorite.xml new file mode 100644 index 0000000..63a921a --- /dev/null +++ b/app/src/main/res/drawable/favorite.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/frame.xml b/app/src/main/res/drawable/frame.xml new file mode 100644 index 0000000..8e3e1ce --- /dev/null +++ b/app/src/main/res/drawable/frame.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..ca3826a --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/import_photo.xml b/app/src/main/res/drawable/import_photo.xml new file mode 100644 index 0000000..5738a58 --- /dev/null +++ b/app/src/main/res/drawable/import_photo.xml @@ -0,0 +1,23 @@ + + + + + diff --git a/app/src/main/res/drawable/light.xml b/app/src/main/res/drawable/light.xml new file mode 100644 index 0000000..338a45f --- /dev/null +++ b/app/src/main/res/drawable/light.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable/lock.xml b/app/src/main/res/drawable/lock.xml new file mode 100644 index 0000000..697edaf --- /dev/null +++ b/app/src/main/res/drawable/lock.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/main_select_draw.xml b/app/src/main/res/drawable/main_select_draw.xml new file mode 100644 index 0000000..f2974bb --- /dev/null +++ b/app/src/main/res/drawable/main_select_draw.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable/main_select_setting.xml b/app/src/main/res/drawable/main_select_setting.xml new file mode 100644 index 0000000..fc0e641 --- /dev/null +++ b/app/src/main/res/drawable/main_select_setting.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/main_tab.xml b/app/src/main/res/drawable/main_tab.xml new file mode 100644 index 0000000..1c152e0 --- /dev/null +++ b/app/src/main/res/drawable/main_tab.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/app/src/main/res/drawable/main_tab_white.xml b/app/src/main/res/drawable/main_tab_white.xml new file mode 100644 index 0000000..6d12ab3 --- /dev/null +++ b/app/src/main/res/drawable/main_tab_white.xml @@ -0,0 +1,8 @@ + + + + + + + diff --git a/app/src/main/res/drawable/main_unselect_draw.xml b/app/src/main/res/drawable/main_unselect_draw.xml new file mode 100644 index 0000000..a5edb90 --- /dev/null +++ b/app/src/main/res/drawable/main_unselect_draw.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/main_unselect_setting.xml b/app/src/main/res/drawable/main_unselect_setting.xml new file mode 100644 index 0000000..9e023e4 --- /dev/null +++ b/app/src/main/res/drawable/main_unselect_setting.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/photo.xml b/app/src/main/res/drawable/photo.xml new file mode 100644 index 0000000..577c5d6 --- /dev/null +++ b/app/src/main/res/drawable/photo.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/question.xml b/app/src/main/res/drawable/question.xml new file mode 100644 index 0000000..e4af058 --- /dev/null +++ b/app/src/main/res/drawable/question.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/rate.xml b/app/src/main/res/drawable/rate.xml new file mode 100644 index 0000000..8c5d2d0 --- /dev/null +++ b/app/src/main/res/drawable/rate.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/rounded_corners.xml b/app/src/main/res/drawable/rounded_corners.xml new file mode 100644 index 0000000..be096fb --- /dev/null +++ b/app/src/main/res/drawable/rounded_corners.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/rounded_grey.xml b/app/src/main/res/drawable/rounded_grey.xml new file mode 100644 index 0000000..357b774 --- /dev/null +++ b/app/src/main/res/drawable/rounded_grey.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/rounded_rectangle.xml b/app/src/main/res/drawable/rounded_rectangle.xml new file mode 100644 index 0000000..d729068 --- /dev/null +++ b/app/src/main/res/drawable/rounded_rectangle.xml @@ -0,0 +1,9 @@ + + + + diff --git a/app/src/main/res/drawable/seek_bar_color.xml b/app/src/main/res/drawable/seek_bar_color.xml new file mode 100644 index 0000000..f8e5913 --- /dev/null +++ b/app/src/main/res/drawable/seek_bar_color.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/seekbar_thumb.xml b/app/src/main/res/drawable/seekbar_thumb.xml new file mode 100644 index 0000000..216b1ce --- /dev/null +++ b/app/src/main/res/drawable/seekbar_thumb.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/setting.xml b/app/src/main/res/drawable/setting.xml new file mode 100644 index 0000000..0ec04a6 --- /dev/null +++ b/app/src/main/res/drawable/setting.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/share.xml b/app/src/main/res/drawable/share.xml new file mode 100644 index 0000000..9af0808 --- /dev/null +++ b/app/src/main/res/drawable/share.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/drawable/skip.xml b/app/src/main/res/drawable/skip.xml new file mode 100644 index 0000000..a655788 --- /dev/null +++ b/app/src/main/res/drawable/skip.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/drawable/un_light.xml b/app/src/main/res/drawable/un_light.xml new file mode 100644 index 0000000..5d13cfb --- /dev/null +++ b/app/src/main/res/drawable/un_light.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/unfavorite.xml b/app/src/main/res/drawable/unfavorite.xml new file mode 100644 index 0000000..43f12c9 --- /dev/null +++ b/app/src/main/res/drawable/unfavorite.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/unimport.xml b/app/src/main/res/drawable/unimport.xml new file mode 100644 index 0000000..ee403c5 --- /dev/null +++ b/app/src/main/res/drawable/unimport.xml @@ -0,0 +1,23 @@ + + + + + diff --git a/app/src/main/res/layout/activity_camera.xml b/app/src/main/res/layout/activity_camera.xml new file mode 100644 index 0000000..ed84d61 --- /dev/null +++ b/app/src/main/res/layout/activity_camera.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..a6b4786 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_privacy.xml b/app/src/main/res/layout/activity_privacy.xml new file mode 100644 index 0000000..89283d2 --- /dev/null +++ b/app/src/main/res/layout/activity_privacy.xml @@ -0,0 +1,26 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml new file mode 100644 index 0000000..5697ff0 --- /dev/null +++ b/app/src/main/res/layout/activity_setting.xml @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml new file mode 100644 index 0000000..fdeb8be --- /dev/null +++ b/app/src/main/res/layout/activity_splash.xml @@ -0,0 +1,44 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/category_tab_custom.xml b/app/src/main/res/layout/category_tab_custom.xml new file mode 100644 index 0000000..bcb7d23 --- /dev/null +++ b/app/src/main/res/layout/category_tab_custom.xml @@ -0,0 +1,21 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_category.xml b/app/src/main/res/layout/fragment_category.xml new file mode 100644 index 0000000..da75bad --- /dev/null +++ b/app/src/main/res/layout/fragment_category.xml @@ -0,0 +1,28 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_favorite.xml b/app/src/main/res/layout/fragment_favorite.xml new file mode 100644 index 0000000..a6a08aa --- /dev/null +++ b/app/src/main/res/layout/fragment_favorite.xml @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_image.xml b/app/src/main/res/layout/fragment_image.xml new file mode 100644 index 0000000..9330dc9 --- /dev/null +++ b/app/src/main/res/layout/fragment_image.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_import_list.xml b/app/src/main/res/layout/fragment_import_list.xml new file mode 100644 index 0000000..c0a848a --- /dev/null +++ b/app/src/main/res/layout/fragment_import_list.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_image.xml b/app/src/main/res/layout/item_image.xml new file mode 100644 index 0000000..275587b --- /dev/null +++ b/app/src/main/res/layout/item_image.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/main_tab_custom.xml b/app/src/main/res/layout/main_tab_custom.xml new file mode 100644 index 0000000..734a732 --- /dev/null +++ b/app/src/main/res/layout/main_tab_custom.xml @@ -0,0 +1,33 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..c4a603d --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..c4a603d --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000..e3c263e Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..e1d79bc Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000..498c865 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000..aaabcbb Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..7849f2d Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000..fcbfa0f Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000..b9ebe6d Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..6474561 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..940fea5 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000..7d209e0 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..c1505e4 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..dea69fd Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ar.png b/app/src/main/res/mipmap-xxxhdpi/ar.png new file mode 100644 index 0000000..b9669d7 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ar.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/back_ground.png b/app/src/main/res/mipmap-xxxhdpi/back_ground.png new file mode 100644 index 0000000..0c02234 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/back_ground.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/favorite_back.png b/app/src/main/res/mipmap-xxxhdpi/favorite_back.png new file mode 100644 index 0000000..16b46dc Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/favorite_back.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/favorite_title.png b/app/src/main/res/mipmap-xxxhdpi/favorite_title.png new file mode 100644 index 0000000..3f70b6d Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/favorite_title.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000..5523a32 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..5e1a5e7 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..05dc5fc Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/image_663.png b/app/src/main/res/mipmap-xxxhdpi/image_663.png new file mode 100644 index 0000000..5164b05 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/image_663.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/import_back.png b/app/src/main/res/mipmap-xxxhdpi/import_back.png new file mode 100644 index 0000000..9e1f319 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/import_back.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/import_title.png b/app/src/main/res/mipmap-xxxhdpi/import_title.png new file mode 100644 index 0000000..b6cef58 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/import_title.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..64ebe32 --- /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..48d6093 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,8 @@ + + + #FF000000 + #FFFFFFFF + #D1D1D1 + #004FB8 + #4C9AF7 + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..d75f006 --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,11 @@ + + AR Draw Sketch + Hello blank fragment + Sketch + Favorite + Import + Privacy information + Version update + https://play.google.com/store/apps/details?id=%s + Version + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..7725ce5 --- /dev/null +++ b/app/src/main/res/values/styles.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..f0b0e84 --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,9 @@ + + + + +