diff --git a/app/ARTraceStudio.jks b/app/ARTraceStudio.jks new file mode 100644 index 0000000..9d015be Binary files /dev/null and b/app/ARTraceStudio.jks differ diff --git a/app/build.gradle.kts b/app/build.gradle.kts index be7ee77..2e8b0af 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,7 +1,10 @@ +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.ar.artracestudio" compileSdk = 34 @@ -11,20 +14,25 @@ android { minSdk = 23 targetSdk = 34 versionCode = 1 - versionName = "1.0" - + versionName = "1.0.0" + setProperty("archivesBaseName", "AR Trace Studio" + versionName + "(${versionCode})_$timestamp") testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { - isMinifyEnabled = false + isMinifyEnabled = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } + + buildFeatures { + viewBinding = true + } + compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 @@ -40,4 +48,17 @@ dependencies { testImplementation(libs.junit) androidTestImplementation(libs.ext.junit) androidTestImplementation(libs.espresso.core) + + implementation("com.github.bumptech.glide:glide:4.16.0") + annotationProcessor("com.github.bumptech.glide:compiler:4.16.0") + + implementation ("androidx.room:room-runtime:2.6.1") + annotationProcessor ("androidx.room:room-compiler:2.6.1") + + implementation ("androidx.camera:camera-core:1.4.0") + implementation ("androidx.camera:camera-lifecycle:1.4.0") + implementation ("androidx.camera:camera-view:1.4.0") + implementation ("androidx.camera:camera-extensions:1.4.0") + implementation ("androidx.camera:camera-camera2:1.4.0") + } \ No newline at end of file diff --git a/app/keystore.properties b/app/keystore.properties new file mode 100644 index 0000000..bbe7a75 --- /dev/null +++ b/app/keystore.properties @@ -0,0 +1,6 @@ +app_name=AR Trace Studio +package_name=com.ar.artracestudio +keystoreFile=app/ARTraceStudio.jks +key_alias=ARTraceStudiokey0 +key_store_password=ARTraceStudio +key_password=ARTraceStudio diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 481bb43..5107776 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -18,4 +18,16 @@ # If you keep the line number information, uncomment this to # hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file +#-renamesourcefileattribute SourceFile + +-keepclassmembers class com.ar.artracestudio.MyApplication { + public static final java.lang.String DB_Name; + public static final int DB_Version; +} + +-keepclassmembers class * { + @androidx.room.Query ; +} +-keep class com.ar.artracestudio.room.AppDatabase { *; } +-keep class com.ar.artracestudio.room.ImageEntryDao { *; } +-keep class com.ar.artracestudio.room.ImageEntry { *; } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d83bb69..b271f84 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,7 +2,22 @@ + + + + + + + + + + + + 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/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..8784aff Binary files /dev/null and b/app/src/main/ic_launcher-playstore.png differ diff --git a/app/src/main/java/com/ar/artracestudio/MainActivity.java b/app/src/main/java/com/ar/artracestudio/MainActivity.java deleted file mode 100644 index 5db824c..0000000 --- a/app/src/main/java/com/ar/artracestudio/MainActivity.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.ar.artracestudio; - -import android.os.Bundle; - -import androidx.activity.EdgeToEdge; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.graphics.Insets; -import androidx.core.view.ViewCompat; -import androidx.core.view.WindowInsetsCompat; - -public class MainActivity extends AppCompatActivity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - EdgeToEdge.enable(this); - setContentView(R.layout.activity_main); - ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { - Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); - v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); - return insets; - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/ar/artracestudio/MyApplication.java b/app/src/main/java/com/ar/artracestudio/MyApplication.java new file mode 100644 index 0000000..85495fa --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/MyApplication.java @@ -0,0 +1,82 @@ +package com.ar.artracestudio; + +import android.app.Application; +import android.content.Context; +import android.content.SharedPreferences; +import android.util.Log; + +import com.ar.artracestudio.utils.DatabaseUtils; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Executors; + + +public class MyApplication extends Application { + + public static Context mContext; + + public static final int DB_Version = 1; + public static final String DB_Name = "image_database"; + + private static final String PREF_NAME = "app_preferences"; + private static final String KEY_INITIALIZED = "isDatabaseInitialized"; + + + @Override + public void onCreate() { + super.onCreate(); + + mContext = getApplicationContext(); + + // 检查是否需要初始化数据库 + SharedPreferences preferences = getSharedPreferences(PREF_NAME, MODE_PRIVATE); + boolean isDatabaseInitialized = preferences.getBoolean(KEY_INITIALIZED, false); + + if (!isDatabaseInitialized) { + initializeDatabase(); + preferences.edit().putBoolean(KEY_INITIALIZED, true).apply(); + } + + } + + public static Context getContext() { + return mContext; + } + + private void initializeDatabase() { + Executors.newSingleThreadExecutor().execute(() -> { + List imagePaths = getAllImagePathsFromAssets(); + DatabaseUtils databaseUtils = new DatabaseUtils(mContext); + databaseUtils.insertAllImages(imagePaths); + }); + } + + private List getAllImagePathsFromAssets() { + List imagePaths = new ArrayList<>(); + try { + // 获取 assets 目录下的所有类别 + String[] categories = mContext.getAssets().list(""); // 获取 assets 根目录下的所有文件夹 + if (categories != null) { + // 遍历所有类别 + for (String category : categories) { + if (category.startsWith("png_")) { // 只处理类别类别前缀为 "png_" + // 获取指定类别下的所有图片文件 + String[] files = mContext.getAssets().list(category); + if (files != null) { + // 将每个文件路径加到列表中 + for (String file : files) { + imagePaths.add(category + "/" + file); // 更新为完整路径 + } + } + } + } + } + } catch (IOException e) { + Log.e("MyApplication", "Error loading images from assets", e); + } + return imagePaths; + } + +} diff --git a/app/src/main/java/com/ar/artracestudio/activity/CameraActivity.java b/app/src/main/java/com/ar/artracestudio/activity/CameraActivity.java new file mode 100644 index 0000000..a2daacd --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/activity/CameraActivity.java @@ -0,0 +1,415 @@ +package com.ar.artracestudio.activity; + +import android.Manifest; +import android.content.ContentValues; +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.os.Environment; +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.ImageCapture; +import androidx.camera.core.ImageCaptureException; +import androidx.camera.core.Preview; +import androidx.camera.lifecycle.ProcessCameraProvider; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +import com.ar.artracestudio.R; +import com.ar.artracestudio.databinding.ActivityCameraBinding; +import com.ar.artracestudio.utils.PermissionUtils; +import com.ar.artracestudio.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 ActivityCameraBinding binding; + + 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 boolean isReOn = false; + private Camera camera; // 相机实例 + private ImageCapture imageCapture; // 拍照实例 + + private ImageView imageView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityCameraBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + imageView = findViewById(R.id.image_full); + imageView.setOnTouchListener(this); + + setupListeners(); // 设置监听器 + checkPermissionsAndStartCamera(); // 检查权限并启动相机 + + + // 接收传递的图片路径 + String imagePath = getIntent().getStringExtra("imagePath"); + Log.d("imagepath", "imagepath: " + imagePath); + if (imagePath != null) { + displayImage(imagePath); // 显示图片 + } + } + + private void setupListeners() { + // 设置监听器 + binding.seekbar.setOnSeekBarChangeListener(this); // 透明度调节条监听 + binding.importImage.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + openImagePicker(); + } + }); // 选择图片按钮监听 + binding.light.setOnClickListener(v -> toggleFlash()); // 闪光灯按钮监听 + binding.back.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + binding.reversal.setOnClickListener(v -> toggleMirrorEffect()); +// binding.topRightImage.setOnClickListener(v -> clearImage()); + binding.play.setOnClickListener(v -> takePhoto()); + imageView.setOnTouchListener(this); + } + + private void checkPermissionsAndStartCamera() { + String[] permissions = getRequiredPermissions(); + if (PermissionUtils.hasPermissions(this, permissions)) { + startCamera(); + } else { + PermissionUtils.requestPermissions(this, permissions, CAMERA_PERMISSION_REQUEST_CODE); + } + + } + + private void startCamera() { + // 启动相机 + ListenableFuture cameraProviderFuture = ProcessCameraProvider.getInstance(this); + cameraProviderFuture.addListener(() -> { + try { + // 获取 CameraProvider 实例 + ProcessCameraProvider cameraProvider = cameraProviderFuture.get(); + bindPreview(cameraProvider); // 绑定预览 + // 创建 Preview 实例并设置 SurfaceProvider + Preview preview = new Preview.Builder().build(); + preview.setSurfaceProvider(binding.preview.getSurfaceProvider()); + + // 创建 ImageCapture 实例 + imageCapture = new ImageCapture.Builder().build(); + + // 选择后置摄像头 + CameraSelector cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA; + + // 绑定生命周期和用例 + cameraProvider.unbindAll(); + cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageCapture); + + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + }, ContextCompat.getMainExecutor(this)); + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + + // 处理权限请求结果 + if (requestCode == CAMERA_PERMISSION_REQUEST_CODE) { + if (PermissionUtils.handlePermissionsResult(grantResults)) { + startCamera(); + } else { + Toast.makeText(this, "Camera permissions denied, please enable permissions in Settings", Toast.LENGTH_SHORT).show(); + } + } else if (requestCode == STORAGE_PERMISSION_REQUEST_CODE) { + if (PermissionUtils.handlePermissionsResult(grantResults)) { + openImagePicker(); + } else { + Toast.makeText(this, "Storage permission is denied. Please enable the permission in the Settings", Toast.LENGTH_SHORT).show(); + } + } + } + + private void takePhoto() { + // 确保 imageCapture 实例已初始化 + if (imageCapture == null) { + Toast.makeText(this, "The photo function is not initialized", Toast.LENGTH_SHORT).show(); + return; + } + + // 创建 ContentValues 来定义图片的保存信息 + ContentValues contentValues = new ContentValues(); + contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, "photo_" + System.currentTimeMillis() + ".jpg"); + contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg"); + contentValues.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES); + + // 使用 MediaStore 创建 OutputFileOptions + ImageCapture.OutputFileOptions outputOptions = new ImageCapture.OutputFileOptions.Builder( + getContentResolver(), + MediaStore.Images.Media.EXTERNAL_CONTENT_URI, + contentValues + ).build(); + + // 拍照并保存 + imageCapture.takePicture( + outputOptions, + ContextCompat.getMainExecutor(this), + new ImageCapture.OnImageSavedCallback() { + @Override + public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) { + Toast.makeText(CameraActivity.this, "The photo has been saved to the album", Toast.LENGTH_SHORT).show(); + } + + @Override + public void onError(@NonNull ImageCaptureException exception) { + Toast.makeText(CameraActivity.this, "Photo failure: " + exception.getMessage(), Toast.LENGTH_SHORT).show(); + } + } + ); + } + + private void clearImage() { + imageView.setImageBitmap(null); // 清空当前显示的图片 + // 清空图片后显示提示文字和图像 +// showCenterTextAndImage(true); + } + + private void toggleMirrorEffect() { + // 获取当前水平缩放值并反转 + float scaleX = imageView.getScaleX(); + imageView.setScaleX(scaleX * -1); // 将水平缩放翻转 + isReOn = !isReOn; + binding.reversal.setImageResource(isReOn ? R.drawable.reversal : R.drawable.un_reversal); + } + + 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); // 启用或禁用闪光灯 + binding.light.setImageResource(isFlashOn ? R.drawable.light : R.drawable.un_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); + } + +// showCenterTextAndImage(false); + } + + @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 bindPreview(@NonNull ProcessCameraProvider cameraProvider) { + // 绑定相机预览 + Preview preview = new Preview.Builder().build(); // 创建预览对象 + CameraSelector cameraSelector = new CameraSelector.Builder() + .requireLensFacing(CameraSelector.LENS_FACING_BACK) // 选择后置摄像头 + .build(); + preview.setSurfaceProvider(binding.preview.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 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 { + displayImageFromAssets(imagePath); + } + + } + + // 从设备存储中加载图片 + private void displayImageFromStorage(String imagePath) { + Bitmap bitmap = BitmapFactory.decodeFile(imagePath); + if (bitmap != null) { + imageView.setImageBitmap(bitmap); + } else { + Toast.makeText(this, "Image loading failed", 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, "Image loading failed: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 显示错误信息 + } + } + + @Override + public boolean onTouch(View v, MotionEvent event) { + ImageView view = (ImageView) v; + + Log.d("----", "--------a=" + event); + 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; // 处理触摸事件 + } + + // 初始化图片的位置 + 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/ar/artracestudio/activity/ImageActivity.java b/app/src/main/java/com/ar/artracestudio/activity/ImageActivity.java new file mode 100644 index 0000000..27da8d5 --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/activity/ImageActivity.java @@ -0,0 +1,76 @@ +package com.ar.artracestudio.activity; + +import android.content.Intent; +import android.os.Bundle; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.lifecycle.Observer; +import androidx.recyclerview.widget.GridLayoutManager; + +import com.ar.artracestudio.adapter.FavoriteAdapter; +import com.ar.artracestudio.databinding.ActivityImageBinding; +import com.ar.artracestudio.room.AppDatabase; +import com.ar.artracestudio.room.ImageEntry; +import com.ar.artracestudio.utils.ItemDecoration; + +import java.util.ArrayList; +import java.util.List; + +public class ImageActivity extends AppCompatActivity { + + private ActivityImageBinding binding; + private String original; + private String title; + private FavoriteAdapter adapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + binding = ActivityImageBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + initData(); + initEvent(); + setRecyclerview(); + + loadImages(); + } + + private void initData() { + + Intent intent = getIntent(); + original = intent.getStringExtra("Original"); + title = intent.getStringExtra("Title"); + + } + + private void initEvent() { + binding.title.setText(title); + + binding.back.setOnClickListener(v -> finish()); + } + + private void setRecyclerview() { + binding.recyclerview.setLayoutManager(new GridLayoutManager(this, 2)); + adapter = new FavoriteAdapter(this, new ArrayList<>()); + binding.recyclerview.setAdapter(adapter); + + ItemDecoration itemDecoration = new ItemDecoration(16, 19, 10); + binding.recyclerview.addItemDecoration(itemDecoration); + } + + private void loadImages() { + // 获取数据库实例并调用查询方法 + AppDatabase.getInstance(this) + .imageEntryDao() + .getImagesByCategoryLive(original) + .observe(this, new Observer>() { + @Override + public void onChanged(List imageEntries) { + adapter.updateData(imageEntries); + } + }); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/ar/artracestudio/activity/MainActivity.java b/app/src/main/java/com/ar/artracestudio/activity/MainActivity.java new file mode 100644 index 0000000..5158601 --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/activity/MainActivity.java @@ -0,0 +1,121 @@ +package com.ar.artracestudio.activity; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; + +import androidx.appcompat.app.AppCompatActivity; + +import com.ar.artracestudio.R; +import com.ar.artracestudio.adapter.MainViewPager2Adapter; +import com.ar.artracestudio.databinding.ActivityMainBinding; +import com.ar.artracestudio.databinding.MainTabItemCustomBinding; +import com.google.android.material.tabs.TabLayout; +import com.google.android.material.tabs.TabLayoutMediator; + +public class MainActivity extends AppCompatActivity { + + private ActivityMainBinding binding; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityMainBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + MainViewPager2Adapter adapter = new MainViewPager2Adapter(this); + binding.mainViewpager.setAdapter(adapter); + + setupTabLayoutMediator(); + setupTabSelectedListener(); + } + + // 设置TabLayout和ViewPager的关联 + private void setupTabLayoutMediator() { + new TabLayoutMediator(binding.mainTablayout, binding.mainViewpager, (tab, position) -> { + MainTabItemCustomBinding tabBinding = MainTabItemCustomBinding.inflate(LayoutInflater.from(this)); + tab.setCustomView(tabBinding.getRoot()); + setTabIconAndDotVisibility(tabBinding, position); + }).attach(); + } + + // 设置标签图标和小圆点的可见性 + private void setTabIconAndDotVisibility(MainTabItemCustomBinding tabBinding, int position) { + switch (position) { + case 0: + tabBinding.iconCustom.setImageResource(R.drawable.home); + tabBinding.dotView.setVisibility(View.VISIBLE); + break; + case 1: + tabBinding.iconCustom.setImageResource(R.drawable.import_image); + break; + case 2: + tabBinding.iconCustom.setImageResource(R.drawable.collection); + break; + default: + tabBinding.iconCustom.setImageResource(R.drawable.home); + break; + } + } + + // 设置标签选中事件 + private void setupTabSelectedListener() { + binding.mainTablayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { + @Override + public void onTabSelected(TabLayout.Tab tab) { + updateTabIcon(tab, true); + showDot(tab); + } + + @Override + public void onTabUnselected(TabLayout.Tab tab) { + updateTabIcon(tab, false); + hideDot(tab); + } + + @Override + public void onTabReselected(TabLayout.Tab tab) { + // 处理Tab重新选中事件 + } + + // 更新Tab图标 + private void updateTabIcon(TabLayout.Tab tab, boolean isSelected) { + if (tab.getCustomView() != null) { + MainTabItemCustomBinding tabBinding = MainTabItemCustomBinding.bind(tab.getCustomView()); + int iconResId = getIconResource(tab.getPosition(), isSelected); + tabBinding.iconCustom.setImageResource(iconResId); + } + } + + // 获取图标资源 + private int getIconResource(int position, boolean isSelected) { + // 选中状态图标 + switch (position) { + case 1: + return R.drawable.import_image; + case 2: + return R.drawable.collection; + default: + return R.drawable.home; + } + } + + // 显示小圆点 + private void showDot(TabLayout.Tab tab) { + View dotView = tab.view.findViewById(R.id.dot_view); + if (dotView != null) { + dotView.setVisibility(View.VISIBLE); + } + } + + // 隐藏小圆点 + private void hideDot(TabLayout.Tab tab) { + View dotView = tab.view.findViewById(R.id.dot_view); + if (dotView != null) { + dotView.setVisibility(View.GONE); + } + } + }); + } + +} diff --git a/app/src/main/java/com/ar/artracestudio/activity/SplashActivity.java b/app/src/main/java/com/ar/artracestudio/activity/SplashActivity.java new file mode 100644 index 0000000..86ddb29 --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/activity/SplashActivity.java @@ -0,0 +1,60 @@ +package com.ar.artracestudio.activity; + +import android.content.Intent; +import android.os.Bundle; +import android.os.CountDownTimer; +import android.widget.ImageView; +import android.widget.ProgressBar; + +import androidx.appcompat.app.AppCompatActivity; + +import com.ar.artracestudio.R; +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.engine.DiskCacheStrategy; +import com.bumptech.glide.load.resource.bitmap.RoundedCorners; + +public class SplashActivity extends AppCompatActivity { + + private static final int SPLASH_TIME_OUT = 1500; + private ProgressBar progressBar; + private ImageView imageView; + + private CountDownTimer countDownTimer; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_splash); + + progressBar = findViewById(R.id.progress_bar); + imageView = findViewById(R.id.splash_image); + 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(); + } + }; + + Glide.with(this) + .load(R.mipmap.ic_launcher_foreground) + .transform(new RoundedCorners(20)) + .into(imageView); + + countDownTimer.start(); + } + +} + diff --git a/app/src/main/java/com/ar/artracestudio/adapter/CategoryAdapter.java b/app/src/main/java/com/ar/artracestudio/adapter/CategoryAdapter.java new file mode 100644 index 0000000..cef6954 --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/adapter/CategoryAdapter.java @@ -0,0 +1,99 @@ +package com.ar.artracestudio.adapter; + +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 android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.ar.artracestudio.R; +import com.ar.artracestudio.activity.ImageActivity; +import com.ar.artracestudio.room.ImageEntry; +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.resource.bitmap.RoundedCorners; + +import java.util.List; + + +public class CategoryAdapter extends RecyclerView.Adapter { + + private final Activity activity; + private List categories; + private final List originalCategories; + private final List displayCategories; + + public CategoryAdapter(Activity activity, List categories, List originalCategories ,List displayCategories) { + this.activity = activity; + this.categories = categories; + this.originalCategories = originalCategories; + this.displayCategories = displayCategories; + + } + + public void updateData(List newImageEntries) { + this.categories = newImageEntries; + notifyDataSetChanged(); + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_category, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + + String original = originalCategories.get(position); + String title = displayCategories.get(position); + ImageEntry imageEntry = categories.get(position); + + holder.textView.setText(title); + + Log.d("category_adapter","imagepaths: " +categories.size() ); + Log.d("category_adapter","imagepaths: " +title ); + Log.d("category_adapter","imagepaths: " +imageEntry.getImagePath() ); + + Glide.with(activity) + .load("file:///android_asset/" + imageEntry.getImagePath()) + .transform(new RoundedCorners(20)) + .into(holder.imageView); + + holder.imageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(activity, ImageActivity.class); + intent.putExtra("Original", original); + intent.putExtra("Title", title); + activity.startActivity(intent); + } + }); + + } + + @Override + public int getItemCount() { + return categories.size(); + } + + static class ViewHolder extends RecyclerView.ViewHolder { + + ImageView imageView; + TextView textView; + + public ViewHolder(@NonNull View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.item_imageview); + textView = itemView.findViewById(R.id.item_textview); + } + } + + +} diff --git a/app/src/main/java/com/ar/artracestudio/adapter/FavoriteAdapter.java b/app/src/main/java/com/ar/artracestudio/adapter/FavoriteAdapter.java new file mode 100644 index 0000000..6e21d5e --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/adapter/FavoriteAdapter.java @@ -0,0 +1,112 @@ +package com.ar.artracestudio.adapter; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.ar.artracestudio.R; +import com.ar.artracestudio.activity.CameraActivity; +import com.ar.artracestudio.room.AppDatabase; +import com.ar.artracestudio.room.ImageEntry; +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.resource.bitmap.RoundedCorners; + +import java.util.List; +import java.util.concurrent.Executors; + +public class FavoriteAdapter extends RecyclerView.Adapter { + + private List imageEntries; // 收藏的图片列表 + private final Context context; // 上下文对象 + + // 构造方法,传入上下文和图片列表 + public FavoriteAdapter(Context context, List imageEntries) { + this.context = context; + this.imageEntries = imageEntries; + } + + // 更新适配器的数据 + public void updateData(List newFavoriteImages) { + this.imageEntries = newFavoriteImages; + notifyDataSetChanged(); // 通知 RecyclerView 数据已更新 + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + // 膨胀 item 视图 + View view = LayoutInflater.from(context).inflate(R.layout.item_import, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + // 获取当前 position 对应的 FavoriteImage 对象 + ImageEntry imageEntry = imageEntries.get(position); + holder.bind(imageEntry); // 绑定数据到 ViewHolder + } + + @Override + public int getItemCount() { + // 返回列表中项的数量 + return imageEntries.size(); + } + + // ViewHolder 类,包含 RecyclerView 的每个 item 的视图 + class ViewHolder extends RecyclerView.ViewHolder { + ImageView imageView; // 显示图片的 ImageView + ImageView favoriteButton; // 显示收藏状态的按钮 + + // 构造方法,初始化视图组件 + ViewHolder(View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.image_view); + favoriteButton = itemView.findViewById(R.id.btn_favorite); + } + + // 绑定数据到 ViewHolder 中的视图组件 + void bind(ImageEntry favoriteImage) { + // 使用 Glide 加载图片,路径为 assets 中的图片 + String favoritePath = favoriteImage.getImagePath(); + + Glide.with(context) + .load(favoritePath.startsWith("/data/user/")? favoritePath : "file:///android_asset/" + favoritePath) // 加载 assets 中的图片 + .transform(new RoundedCorners(20)) + .into(imageView); + + imageView.setOnClickListener(v -> { + + Intent intent = new Intent(context, CameraActivity.class); + intent.putExtra("imagePath", favoritePath); + context.startActivity(intent); + + }); + + // 动态观察 'isFavorite' 状态,并更新按钮的图标 + favoriteButton.setImageResource(favoriteImage.isFavoriteStatus() ? R.drawable.like : R.drawable.unlike); + + // 设置收藏按钮的点击事件,切换收藏状态 + favoriteButton.setOnClickListener(v -> { + boolean newStatus = !favoriteImage.isFavoriteStatus(); // 取反收藏状态 + favoriteImage.setFavoriteStatus(newStatus); // 更新状态 + + // 在后台线程中更新数据库 + Executors.newSingleThreadExecutor().execute(() -> { + AppDatabase.getInstance(context) + .imageEntryDao() + .update(favoriteImage); // 更新数据库中的收藏状态 + }); + + // 更新当前项的收藏按钮图标 + notifyItemChanged(getAdapterPosition()); + }); + } + } +} diff --git a/app/src/main/java/com/ar/artracestudio/adapter/ImportAdapter.java b/app/src/main/java/com/ar/artracestudio/adapter/ImportAdapter.java new file mode 100644 index 0000000..31fbbaf --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/adapter/ImportAdapter.java @@ -0,0 +1,154 @@ +package com.ar.artracestudio.adapter; + +import android.app.Activity; +import android.content.Intent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.ar.artracestudio.R; +import com.ar.artracestudio.activity.CameraActivity; +import com.ar.artracestudio.room.AppDatabase; +import com.ar.artracestudio.room.ImageEntry; +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.engine.DiskCacheStrategy; +import com.bumptech.glide.load.resource.bitmap.RoundedCorners; + +import java.util.List; +import java.util.concurrent.Executors; + +public class ImportAdapter extends RecyclerView.Adapter { + private static final int VIEW_TYPE_HEADER = 0; + private static final int VIEW_TYPE_ITEM = 1; + + private List imageEntries; + private final Activity context; + private final OnHeaderClickListener onHeaderClickListener; + + public ImportAdapter(List imageEntries, Activity context, OnHeaderClickListener onHeaderClickListener) { + this.imageEntries = imageEntries; + this.context = context; + this.onHeaderClickListener = onHeaderClickListener; + } + + public interface OnHeaderClickListener { + void onHeaderClick(); + } + + @Override + public int getItemViewType(int position) { + return position == 0 ? VIEW_TYPE_HEADER : VIEW_TYPE_ITEM; + } + + @NonNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + if (viewType == VIEW_TYPE_HEADER) { + // 加载特殊控件的布局 + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.item_special_view, parent, false); + return new HeaderViewHolder(view); + } else { + // 加载普通控件的布局 + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.item_import, parent, false); + return new ViewHolder(view); + } + } + + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { + if (getItemViewType(position) == VIEW_TYPE_HEADER) { + HeaderViewHolder headerHolder = (HeaderViewHolder) holder; + + headerHolder.itemView.setOnClickListener(v -> { + if (onHeaderClickListener != null) { + onHeaderClickListener.onHeaderClick(); + } + }); + } else { + ViewHolder itemHolder = (ViewHolder) holder; + ImageEntry imageEntry = imageEntries.get(position - 1); + + ((ViewHolder) holder).bind(imageEntry); + + Glide.with(context) + .load(imageEntry.getImagePath()) + .diskCacheStrategy(DiskCacheStrategy.ALL) + .transform(new RoundedCorners(20)) + .into(itemHolder.imageView); + + itemHolder.imageView.setOnClickListener(v -> { + Intent intent = new Intent(context, CameraActivity.class); + intent.putExtra("imagePath", imageEntry.getImagePath()); // 传递图片路径 + context.startActivity(intent); + }); + + } + } + + @Override + public int getItemCount() { + return imageEntries.size() + 1; // 加上 header 的项数 + } + + public void updateData(List newImageEntries) { + this.imageEntries = newImageEntries; + notifyDataSetChanged(); + } + + // Header ViewHolder 类(特殊控件) + static class HeaderViewHolder extends RecyclerView.ViewHolder { + public HeaderViewHolder(View view) { + super(view); + // 在这里可以初始化 Header 控件 + } + } + + class ViewHolder extends RecyclerView.ViewHolder { + ImageView imageView; + ImageView favoriteButton; + + public ViewHolder(View view) { + super(view); + imageView = view.findViewById(R.id.image_view); + favoriteButton = view.findViewById(R.id.btn_favorite); + } + + void bind(ImageEntry favoriteImage) { + + String favoritePath = favoriteImage.getImagePath(); + + Glide.with(context) + .load(favoritePath) + .diskCacheStrategy(DiskCacheStrategy.ALL) + .transform(new RoundedCorners(20)) + .into(imageView); + + // 动态观察 'isFavorite' 状态,并更新按钮的图标 + favoriteButton.setImageResource(favoriteImage.isFavoriteStatus() ? R.drawable.like : R.drawable.unlike); + + // 设置收藏按钮的点击事件,切换收藏状态 + favoriteButton.setOnClickListener(v -> { + boolean newStatus = !favoriteImage.isFavoriteStatus(); // 取反收藏状态 + favoriteImage.setFavoriteStatus(newStatus); // 更新状态 + + // 在后台线程中更新数据库 + Executors.newSingleThreadExecutor().execute(() -> { + AppDatabase.getInstance(context) + .imageEntryDao() + .update(favoriteImage); // 更新数据库中的收藏状态 + }); + + // 更新当前项的收藏按钮图标 + notifyItemChanged(getAdapterPosition()); + }); + + } + + } +} diff --git a/app/src/main/java/com/ar/artracestudio/adapter/MainViewPager2Adapter.java b/app/src/main/java/com/ar/artracestudio/adapter/MainViewPager2Adapter.java new file mode 100644 index 0000000..9b16d77 --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/adapter/MainViewPager2Adapter.java @@ -0,0 +1,40 @@ +package com.ar.artracestudio.adapter; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.viewpager2.adapter.FragmentStateAdapter; + +import com.ar.artracestudio.fragment.CategoryFragment; +import com.ar.artracestudio.fragment.FavoriteFragment; +import com.ar.artracestudio.fragment.ImportFragment; + +import java.util.ArrayList; +import java.util.List; + +public class MainViewPager2Adapter extends FragmentStateAdapter { + + private List fragmentList; + + public MainViewPager2Adapter(@NonNull FragmentActivity fragmentActivity) { + super(fragmentActivity); + // 初始化fragmentList并添加Fragment对象 + fragmentList = new ArrayList<>(); + fragmentList.add(new CategoryFragment()); + fragmentList.add(new ImportFragment()); + fragmentList.add(new FavoriteFragment()); + } + + @NonNull + @Override + public Fragment createFragment(int position) { + // 根据位置返回相应的Fragment + return fragmentList.get(position); + } + + @Override + public int getItemCount() { + // 返回Fragment列表的大小 + return fragmentList.size(); + } +} diff --git a/app/src/main/java/com/ar/artracestudio/fragment/CategoryFragment.java b/app/src/main/java/com/ar/artracestudio/fragment/CategoryFragment.java new file mode 100644 index 0000000..341ec44 --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/fragment/CategoryFragment.java @@ -0,0 +1,175 @@ +package com.ar.artracestudio.fragment; + +import android.content.Intent; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.recyclerview.widget.GridLayoutManager; + +import com.ar.artracestudio.MyApplication; +import com.ar.artracestudio.R; +import com.ar.artracestudio.adapter.CategoryAdapter; +import com.ar.artracestudio.databinding.FragmentCategoryBinding; +import com.ar.artracestudio.room.AppDatabase; +import com.ar.artracestudio.room.ImageEntry; +import com.ar.artracestudio.utils.DatabaseUtils; +import com.ar.artracestudio.utils.ItemDecoration; +import com.ar.artracestudio.utils.Names; +import com.google.android.material.bottomsheet.BottomSheetDialog; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicInteger; + +public class CategoryFragment extends Fragment { + + private FragmentCategoryBinding binding; + private String format; + private final List originalCategories = Names.getAllDir(); + private List displayCategories = new ArrayList<>(); + private List images = new ArrayList<>(); + private CategoryAdapter adapter; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + binding = FragmentCategoryBinding.inflate(inflater, container, false); + + + initData(); + initEvent(); + setupRecyclerView(); + + loadImages(originalCategories); + + return binding.getRoot(); + } + + private void initData() { + + for (String category : originalCategories) { + displayCategories.add(category.substring(4)); // 去掉前缀 "png_" + Log.d("---", "displayCategories: " + displayCategories); + } + + } + + + private void initEvent() { + binding.setting.setOnClickListener(v -> showCustomBottomSheetDialog()); + } + + private void setupRecyclerView() { + + binding.recyclerview.setLayoutManager(new GridLayoutManager(getContext(), 2)); + + adapter = new CategoryAdapter(requireActivity(), new ArrayList<>(), originalCategories, displayCategories); + Log.d("---", "image" + images); + binding.recyclerview.setAdapter(adapter); + + ItemDecoration itemDecoration = new ItemDecoration(16, 19, 10); + binding.recyclerview.addItemDecoration(itemDecoration); + } + + private void loadImages(List originalList) { + // 用于合并所有查询结果的列表 + Map> queryResultsMap = new HashMap<>(); + int totalQueries = originalList.size(); + + for (int i = 0; i < totalQueries; i++) { + String original = originalList.get(i); + int finalI = i; + AppDatabase.getInstance(requireContext()) + .imageEntryDao() + .getFirstImagesByCategoryLive(original) + .observe(getViewLifecycleOwner(), new Observer>() { + @Override + public void onChanged(List imageEntries) { + queryResultsMap.put(finalI, imageEntries); + if (queryResultsMap.size() == totalQueries) { + // 所有查询结果都已返回,按照索引顺序合并数据并更新适配器 + List allImageEntries = new CopyOnWriteArrayList<>(); + for (int j = 0; j < totalQueries; j++) { + List currentEntries = queryResultsMap.get(j); + if (currentEntries!= null) { + allImageEntries.addAll(currentEntries); + } + } + adapter.updateData(allImageEntries); + } + } + }); + } + } + + private void showCustomBottomSheetDialog() { + BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(requireContext()); + View dialogView = LayoutInflater.from(requireContext()).inflate(R.layout.setting_dialog, null); + // 禁止点击其他页面取消 + bottomSheetDialog.setCanceledOnTouchOutside(false); + + TextView version = dialogView.findViewById(R.id.version_number); + + try { + PackageInfo packageInfo = MyApplication.getContext().getPackageManager().getPackageInfo(MyApplication.getContext().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.ar.artracestudio"); + } + + +// dialogView.findViewById(R.id.privacy).setOnClickListener(v -> { +// // 处理选项 1 +// Intent intent = new Intent(requireActivity(), PrivacyActivity.class); +// startActivity(intent); +// // 销毁 BottomSheetDialog 对象 +// bottomSheetDialog.dismiss(); +// }); + + dialogView.findViewById(R.id.share).setOnClickListener(v -> { + + shareString(format); + // 处理选项 2 + bottomSheetDialog.dismiss(); + }); + + dialogView.findViewById(R.id.version).setOnClickListener(v -> { + + }); + + dialogView.findViewById(R.id.cancel_button).setOnClickListener(v -> { + + bottomSheetDialog.dismiss(); + }); + + bottomSheetDialog.setContentView(dialogView); + bottomSheetDialog.show(); + } + + 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/ar/artracestudio/fragment/FavoriteFragment.java b/app/src/main/java/com/ar/artracestudio/fragment/FavoriteFragment.java new file mode 100644 index 0000000..bd6f45d --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/fragment/FavoriteFragment.java @@ -0,0 +1,82 @@ +package com.ar.artracestudio.fragment; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.recyclerview.widget.GridLayoutManager; + +import com.ar.artracestudio.adapter.FavoriteAdapter; +import com.ar.artracestudio.databinding.FragmentFavoriteBinding; +import com.ar.artracestudio.room.AppDatabase; +import com.ar.artracestudio.room.ImageEntry; +import com.ar.artracestudio.utils.ItemDecoration; + +import java.util.ArrayList; +import java.util.List; + + +public class FavoriteFragment extends Fragment { + + private FragmentFavoriteBinding binding; + private FavoriteAdapter adapter; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + binding = FragmentFavoriteBinding.inflate(inflater, container, false); + + + // 设置 RecyclerView + setupRecyclerView(); + + // 加载收藏的图片数据 + loadFavoriteImages(); + + return binding.getRoot(); + } + + private void setupRecyclerView() { + + binding.recyclerview.setLayoutManager(new GridLayoutManager(getContext(), 2)); + + adapter = new FavoriteAdapter(requireContext(),new ArrayList<>()); + binding.recyclerview.setAdapter(adapter); + + ItemDecoration itemDecoration = new ItemDecoration(16, 19, 10); + binding.recyclerview.addItemDecoration(itemDecoration); + } + + private void loadFavoriteImages() { + // 获取数据库实例并调用查询方法 + AppDatabase.getInstance(requireContext()) + .imageEntryDao() + .getAllFavoriteLive() + .observe(getViewLifecycleOwner(), new Observer>() { + @Override + public void onChanged(List imageEntries) { + if (imageEntries.isEmpty()) { + binding.backgroundImage.setVisibility(View.VISIBLE); + binding.backgroundText.setVisibility(View.VISIBLE); + } else { + binding.backgroundImage.setVisibility(View.GONE); + binding.backgroundText.setVisibility(View.GONE); + } + adapter.updateData(imageEntries); + } + }); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + // 在视图销毁时将绑定对象设为 null,防止内存泄漏 + binding = null; + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/ar/artracestudio/fragment/ImportFragment.java b/app/src/main/java/com/ar/artracestudio/fragment/ImportFragment.java new file mode 100644 index 0000000..5011ca1 --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/fragment/ImportFragment.java @@ -0,0 +1,231 @@ +package com.ar.artracestudio.fragment; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.recyclerview.widget.GridLayoutManager; + +import com.ar.artracestudio.adapter.ImportAdapter; +import com.ar.artracestudio.databinding.FragmentImportBinding; +import com.ar.artracestudio.room.AppDatabase; +import com.ar.artracestudio.room.ImageEntry; +import com.ar.artracestudio.room.ImageEntryDao; +import com.ar.artracestudio.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; + + +public class ImportFragment extends Fragment implements ImportAdapter.OnHeaderClickListener { + + private FragmentImportBinding binding; + + private static final int PICK_IMAGE_REQUEST_CODE = 202; // 请求码,用于标识图片选择 + + private ImportAdapter adapter; // 图片适配器 + private List imagePaths = new ArrayList<>(); // 图片路径列表 + private AppDatabase appDatabase; // 数据库实例 + private ImageEntryDao imageEntryDao; // 图片条目 DAO + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + + binding = FragmentImportBinding.inflate(inflater, container, false); + + binding.recyclerview.setLayoutManager(new GridLayoutManager(getContext(), 2)); + ItemDecoration itemDecoration = new ItemDecoration(16, 19, 10); + binding.recyclerview.addItemDecoration(itemDecoration); + adapter = new ImportAdapter(new ArrayList<>(), requireActivity(), this); + binding.recyclerview.setAdapter(adapter); + + // 初始化数据库和 DAO + appDatabase = AppDatabase.getInstance(requireContext()); + imageEntryDao = appDatabase.imageEntryDao(); + + loadImages(); + + return binding.getRoot(); + } + + @Override + public void onResume() { + super.onResume(); + + adapter.notifyDataSetChanged(); + + } + + private void loadImages() { + // 获取数据库实例并调用查询方法 + AppDatabase.getInstance(requireContext()) + .imageEntryDao() + .getAllImportImageLive() + .observe(getViewLifecycleOwner(), new Observer>() { + @Override + public void onChanged(List imageEntries) { + adapter.updateData(imageEntries); + } + }); + } + + /** + * 打开图片选择器。 + */ + 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) { + try { + if (isImageSizeAcceptable(selectedImageUri)) { + saveImageToInternalStorage(selectedImageUri); // 保存图片到内部存储 + } else { + Toast.makeText(getContext(), "The image size is out of limit", Toast.LENGTH_SHORT).show(); + } + } catch (IOException e) { + e.printStackTrace(); + Toast.makeText(getContext(), "Could not get image size: " + e.getMessage(), Toast.LENGTH_SHORT).show(); + } + } + } + } + + /** + * 检查图片大小是否在允许范围内。 + * + * @param uri 选中的图片 URI + * @return 图片大小是否符合要求 + * @throws IOException 读取图片时可能抛出的异常 + */ + private boolean isImageSizeAcceptable(Uri uri) throws IOException { + InputStream inputStream = requireContext().getContentResolver().openInputStream(uri); + if (inputStream == null) { + return false; + } + + // 获取图片大小(字节) + long fileSize = inputStream.available(); + inputStream.close(); + + // 设置图片大小限制,单位为字节(例如,2MB = 2 * 1024 * 1024 字节) + long maxFileSize = 10 * 1024 * 1024; + + return fileSize <= maxFileSize; + } + + /** + * 将选中的图片保存到内部存储。 + * + * @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(), "Unable to load image", 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(), "The image already exists", Toast.LENGTH_SHORT).show()); + imageFile.delete(); // 删除重复的文件 + return; + } + imagePaths.add(imagePath); // 添加图片路径到列表 + + // 将图片路径插入数据库 + imageEntryDao.insert(new ImageEntry(false, true, imagePath)); + + }).start(); + + } catch (IOException e) { + e.printStackTrace(); + Toast.makeText(getContext(), "Failed to save picture: " + 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.getAllImportImage(); + 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; + } + + @Override + public void onHeaderClick() { + openImagePicker(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/ar/artracestudio/room/AppDatabase.java b/app/src/main/java/com/ar/artracestudio/room/AppDatabase.java new file mode 100644 index 0000000..6d8f780 --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/room/AppDatabase.java @@ -0,0 +1,33 @@ +package com.ar.artracestudio.room; + +import android.content.Context; + +import androidx.room.Database; +import androidx.room.Room; +import androidx.room.RoomDatabase; + +import com.ar.artracestudio.MyApplication; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +@Database(entities = {ImageEntry.class}, version = MyApplication.DB_Version, exportSchema = false) +public abstract class AppDatabase extends RoomDatabase { + + public abstract ImageEntryDao imageEntryDao(); + 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, MyApplication.DB_Name) + .build(); + } + } + } + return INSTANCE; + } +} diff --git a/app/src/main/java/com/ar/artracestudio/room/ImageEntry.java b/app/src/main/java/com/ar/artracestudio/room/ImageEntry.java new file mode 100644 index 0000000..6a766f3 --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/room/ImageEntry.java @@ -0,0 +1,61 @@ +package com.ar.artracestudio.room; + +import androidx.room.Entity; +import androidx.room.PrimaryKey; + +import androidx.room.Entity; +import androidx.room.PrimaryKey; + +import java.io.Serializable; +import java.util.Date; + +@Entity(tableName = "image_entry") +public class ImageEntry implements Serializable { + + @PrimaryKey(autoGenerate = true) + private int id; + + private String imagePath; + + private boolean imageType; + + private boolean favoriteStatus = false; + + public ImageEntry(boolean favoriteStatus, Boolean imageType, String imagePath) { + this.favoriteStatus = favoriteStatus; + this.imageType = imageType; + 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 getImageType() { + return imageType; + } + + public void setImageType(Boolean imageType) { + this.imageType = imageType; + } + + public boolean isFavoriteStatus() { + return favoriteStatus; + } + + public void setFavoriteStatus(boolean favoriteStatus) { + this.favoriteStatus = favoriteStatus; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/ar/artracestudio/room/ImageEntryDao.java b/app/src/main/java/com/ar/artracestudio/room/ImageEntryDao.java new file mode 100644 index 0000000..f9697ad --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/room/ImageEntryDao.java @@ -0,0 +1,49 @@ +package com.ar.artracestudio.room; + +import androidx.lifecycle.LiveData; +import androidx.room.Dao; +import androidx.room.Insert; +import androidx.room.Query; +import androidx.room.Update; + +import java.util.List; + +@Dao +public interface ImageEntryDao { + @Insert + void insertAll(List imageEntry); + + @Insert + void insert(ImageEntry imageEntry); + + @Update + void update(ImageEntry imageEntry); + + @Query("SELECT * FROM image_entry WHERE imagePath LIKE :category || '/%' AND imageType = 0") + List getImagesByCategory(String category); + + @Query("SELECT * FROM image_entry WHERE imagePath LIKE :category || '/%' AND imageType = 0") + LiveData> getImagesByCategoryLive(String category); + + @Query("SELECT * FROM image_entry WHERE imagePath LIKE :category || '/%' AND imageType = 0 LIMIT 1") + ImageEntry getFirstImagesByCategory(String category); + + @Query("SELECT * FROM image_entry WHERE imagePath LIKE :category || '/%' AND imageType = 0 LIMIT 1") + LiveData> getFirstImagesByCategoryLive(String category); + + @Query("SELECT * FROM image_entry WHERE imageType = 1 ") + LiveData> getAllImportImageLive(); + + @Query("SELECT * FROM image_entry WHERE imageType = 1 ") + List getAllImportImage(); + + @Query("SELECT * FROM image_entry WHERE favoriteStatus = 1 ") + LiveData> getAllFavoriteLive(); + + @Query("SELECT * FROM image_entry") + List getAllImagesList(); + + @Query("SELECT * FROM image_entry") + LiveData> getAllImages(); + +} diff --git a/app/src/main/java/com/ar/artracestudio/utils/DatabaseUtils.java b/app/src/main/java/com/ar/artracestudio/utils/DatabaseUtils.java new file mode 100644 index 0000000..883d8a1 --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/utils/DatabaseUtils.java @@ -0,0 +1,53 @@ +package com.ar.artracestudio.utils; + +import android.content.Context; + +import com.ar.artracestudio.room.AppDatabase; +import com.ar.artracestudio.room.ImageEntry; +import com.ar.artracestudio.room.ImageEntryDao; + +import java.util.ArrayList; +import java.util.List; + +public class DatabaseUtils { + + private final ImageEntryDao imageEntryDao; + + public DatabaseUtils(Context context) { + // 初始化数据库 + AppDatabase db = AppDatabase.getInstance(context); + imageEntryDao = db.imageEntryDao(); + } + + // 批量插入图片路径 + public void insertAllImages(List imagePaths) { + // 将图片路径转化为 ImageEntry 实体,favoriteStatus 默认为 false + List imageEntries = new ArrayList<>(); + for (String path : imagePaths) { + imageEntries.add(new ImageEntry(false, false, path)); + } + + imageEntryDao.insertAll(imageEntries); + } + + public List getFirstCategoryImage(List categories) { + + List imageEntries = new ArrayList<>(); + for (String category : categories) { + imageEntries.add(imageEntryDao.getFirstImagesByCategory(category)); + } + return imageEntries; + } + + public List getCategoryImage(String category) { + + List imageEntries = new ArrayList<>(); + + imageEntries = imageEntryDao.getImagesByCategory(category); + + return imageEntries; + + } + + +} diff --git a/app/src/main/java/com/ar/artracestudio/utils/ItemDecoration.java b/app/src/main/java/com/ar/artracestudio/utils/ItemDecoration.java new file mode 100644 index 0000000..9784a03 --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/utils/ItemDecoration.java @@ -0,0 +1,76 @@ +package com.ar.artracestudio.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.ar.artracestudio.MyApplication; + + +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 = MyApplication.mContext.getResources().getDisplayMetrics().density; + return density * dpValue + 0.5f; + } +} diff --git a/app/src/main/java/com/ar/artracestudio/utils/Names.java b/app/src/main/java/com/ar/artracestudio/utils/Names.java new file mode 100644 index 0000000..a6ffa50 --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/utils/Names.java @@ -0,0 +1,49 @@ +package com.ar.artracestudio.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/ar/artracestudio/utils/PermissionUtils.java b/app/src/main/java/com/ar/artracestudio/utils/PermissionUtils.java new file mode 100644 index 0000000..91a2117 --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/utils/PermissionUtils.java @@ -0,0 +1,42 @@ +package com.ar.artracestudio.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/ar/artracestudio/utils/Tracing.java b/app/src/main/java/com/ar/artracestudio/utils/Tracing.java new file mode 100644 index 0000000..73f5397 --- /dev/null +++ b/app/src/main/java/com/ar/artracestudio/utils/Tracing.java @@ -0,0 +1,13 @@ +package com.ar.artracestudio.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/add.xml b/app/src/main/res/drawable/add.xml new file mode 100644 index 0000000..94f4be4 --- /dev/null +++ b/app/src/main/res/drawable/add.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/back.xml b/app/src/main/res/drawable/back.xml new file mode 100644 index 0000000..4688d64 --- /dev/null +++ b/app/src/main/res/drawable/back.xml @@ -0,0 +1,20 @@ + + + + diff --git a/app/src/main/res/drawable/camera.xml b/app/src/main/res/drawable/camera.xml new file mode 100644 index 0000000..bc78179 --- /dev/null +++ b/app/src/main/res/drawable/camera.xml @@ -0,0 +1,24 @@ + + + + + diff --git a/app/src/main/res/drawable/camera_background.xml b/app/src/main/res/drawable/camera_background.xml new file mode 100644 index 0000000..dec7c28 --- /dev/null +++ b/app/src/main/res/drawable/camera_background.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/app/src/main/res/drawable/close.xml b/app/src/main/res/drawable/close.xml new file mode 100644 index 0000000..c832c53 --- /dev/null +++ b/app/src/main/res/drawable/close.xml @@ -0,0 +1,26 @@ + + + + + diff --git a/app/src/main/res/drawable/collection.xml b/app/src/main/res/drawable/collection.xml new file mode 100644 index 0000000..38315b6 --- /dev/null +++ b/app/src/main/res/drawable/collection.xml @@ -0,0 +1,27 @@ + + + + + diff --git a/app/src/main/res/drawable/dot.xml b/app/src/main/res/drawable/dot.xml new file mode 100644 index 0000000..2ddbe8e --- /dev/null +++ b/app/src/main/res/drawable/dot.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/app/src/main/res/drawable/home.xml b/app/src/main/res/drawable/home.xml new file mode 100644 index 0000000..732d2b3 --- /dev/null +++ b/app/src/main/res/drawable/home.xml @@ -0,0 +1,25 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml index 07d5da9..ca3826a 100644 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -1,170 +1,74 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + xmlns:android="http://schemas.android.com/apk/res/android"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/import_image.xml b/app/src/main/res/drawable/import_image.xml new file mode 100644 index 0000000..d658150 --- /dev/null +++ b/app/src/main/res/drawable/import_image.xml @@ -0,0 +1,30 @@ + + + + + + diff --git a/app/src/main/res/drawable/light.xml b/app/src/main/res/drawable/light.xml new file mode 100644 index 0000000..83b12e3 --- /dev/null +++ b/app/src/main/res/drawable/light.xml @@ -0,0 +1,40 @@ + + + + + + + diff --git a/app/src/main/res/drawable/like.xml b/app/src/main/res/drawable/like.xml new file mode 100644 index 0000000..a3068a3 --- /dev/null +++ b/app/src/main/res/drawable/like.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/drawable/more.xml b/app/src/main/res/drawable/more.xml new file mode 100644 index 0000000..4bfa392 --- /dev/null +++ b/app/src/main/res/drawable/more.xml @@ -0,0 +1,27 @@ + + + + + diff --git a/app/src/main/res/drawable/photo.xml b/app/src/main/res/drawable/photo.xml new file mode 100644 index 0000000..85736e3 --- /dev/null +++ b/app/src/main/res/drawable/photo.xml @@ -0,0 +1,34 @@ + + + + + + diff --git a/app/src/main/res/drawable/reversal.xml b/app/src/main/res/drawable/reversal.xml new file mode 100644 index 0000000..c68b9c7 --- /dev/null +++ b/app/src/main/res/drawable/reversal.xml @@ -0,0 +1,25 @@ + + + + + diff --git a/app/src/main/res/drawable/rounded_background.xml b/app/src/main/res/drawable/rounded_background.xml new file mode 100644 index 0000000..e7a81ea --- /dev/null +++ b/app/src/main/res/drawable/rounded_background.xml @@ -0,0 +1,4 @@ + + + + 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..127b9d6 --- /dev/null +++ b/app/src/main/res/drawable/rounded_corners.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..71213e0 --- /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/share.xml b/app/src/main/res/drawable/share.xml new file mode 100644 index 0000000..fe5087d --- /dev/null +++ b/app/src/main/res/drawable/share.xml @@ -0,0 +1,38 @@ + + + + + + + diff --git a/app/src/main/res/drawable/subtract.xml b/app/src/main/res/drawable/subtract.xml new file mode 100644 index 0000000..3ae4bdb --- /dev/null +++ b/app/src/main/res/drawable/subtract.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + 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..8540f1c --- /dev/null +++ b/app/src/main/res/drawable/un_light.xml @@ -0,0 +1,40 @@ + + + + + + + diff --git a/app/src/main/res/drawable/un_reversal.xml b/app/src/main/res/drawable/un_reversal.xml new file mode 100644 index 0000000..f0a75ab --- /dev/null +++ b/app/src/main/res/drawable/un_reversal.xml @@ -0,0 +1,25 @@ + + + + + diff --git a/app/src/main/res/drawable/unlike.xml b/app/src/main/res/drawable/unlike.xml new file mode 100644 index 0000000..f3afc46 --- /dev/null +++ b/app/src/main/res/drawable/unlike.xml @@ -0,0 +1,27 @@ + + + + + diff --git a/app/src/main/res/drawable/work_import.xml b/app/src/main/res/drawable/work_import.xml new file mode 100644 index 0000000..5226cfe --- /dev/null +++ b/app/src/main/res/drawable/work_import.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + 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..6998aff --- /dev/null +++ b/app/src/main/res/layout/activity_camera.xml @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_image.xml b/app/src/main/res/layout/activity_image.xml new file mode 100644 index 0000000..26ccd51 --- /dev/null +++ b/app/src/main/res/layout/activity_image.xml @@ -0,0 +1,38 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 86a5d97..1db98cb 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -5,15 +5,23 @@ android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".MainActivity"> + android:background="@mipmap/activity_background" + tools:activity=".activity.MainActivity"> - + + \ 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..1785151 --- /dev/null +++ b/app/src/main/res/layout/activity_splash.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + \ 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..0ff504f --- /dev/null +++ b/app/src/main/res/layout/fragment_category.xml @@ -0,0 +1,44 @@ + + + + + + + + + + \ 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..01de172 --- /dev/null +++ b/app/src/main/res/layout/fragment_favorite.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_import.xml b/app/src/main/res/layout/fragment_import.xml new file mode 100644 index 0000000..919c63d --- /dev/null +++ b/app/src/main/res/layout/fragment_import.xml @@ -0,0 +1,32 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_category.xml b/app/src/main/res/layout/item_category.xml new file mode 100644 index 0000000..be524f2 --- /dev/null +++ b/app/src/main/res/layout/item_category.xml @@ -0,0 +1,22 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_import.xml b/app/src/main/res/layout/item_import.xml new file mode 100644 index 0000000..52562ae --- /dev/null +++ b/app/src/main/res/layout/item_import.xml @@ -0,0 +1,21 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_special_view.xml b/app/src/main/res/layout/item_special_view.xml new file mode 100644 index 0000000..c2e3a1f --- /dev/null +++ b/app/src/main/res/layout/item_special_view.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/main_tab_item_custom.xml b/app/src/main/res/layout/main_tab_item_custom.xml new file mode 100644 index 0000000..2c045bc --- /dev/null +++ b/app/src/main/res/layout/main_tab_item_custom.xml @@ -0,0 +1,26 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/setting_dialog.xml b/app/src/main/res/layout/setting_dialog.xml new file mode 100644 index 0000000..5bd7562 --- /dev/null +++ b/app/src/main/res/layout/setting_dialog.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index 6f3b755..c4a603d 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,6 +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 index 6f3b755..c4a603d 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,6 +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 index c209e78..0989a86 100644 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.webp 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..cc8b504 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 index b2dfe3d..ba2941a 100644 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp 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 index 4f0f1d6..c8a3a4c 100644 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.webp 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..d7a5821 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 index 62b611d..1d68129 100644 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp 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 index 948a307..f325884 100644 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp 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..bbc195f 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 index 1b9a695..3bbac77 100644 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp 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 index 28d4b77..7edf9ae 100644 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp 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..310b278 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 index 9287f50..2969da3 100644 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/activity_background.png b/app/src/main/res/mipmap-xxxhdpi/activity_background.png new file mode 100644 index 0000000..9cc1177 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/activity_background.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp index aa7d642..a39c7d5 100644 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp 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..f1a9c3d 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 index 9126ae3..52bc3df 100644 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/no_favorite.png b/app/src/main/res/mipmap-xxxhdpi/no_favorite.png new file mode 100644 index 0000000..d7ce33a Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/no_favorite.png differ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 64392d1..297d960 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,10 @@ AR Trace Studio + + Hello blank fragment + Favorite + Import + https://play.google.com/store/apps/details?id=%s + Settings + You have not yet included any favorite photos in the folder. \ No newline at end of file