diff --git a/app/ARCanvasArt.jks b/app/ARCanvasArt.jks new file mode 100644 index 0000000..1dc0f79 Binary files /dev/null and b/app/ARCanvasArt.jks differ diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1b6a807..523f89c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,7 +1,10 @@ +import java.text.SimpleDateFormat +import java.util.Date + plugins { alias(libs.plugins.android.application) } - +val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date()) android { namespace = "com.lock.arcanvasart" compileSdk = 34 @@ -12,7 +15,7 @@ android { targetSdk = 34 versionCode = 1 versionName = "1.0.0" - + setProperty("archivesBaseName", "AR Draw Sketch_V" + versionName + "(${versionCode})_$timestamp") testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } @@ -45,4 +48,15 @@ dependencies { testImplementation(libs.junit) androidTestImplementation(libs.ext.junit) androidTestImplementation(libs.espresso.core) + + implementation (libs.glide) + implementation ("androidx.room:room-runtime:2.5.0") + 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..9e10f61 --- /dev/null +++ b/app/keystore.properties @@ -0,0 +1,6 @@ +app_name=AR Canvas Art +package_name=com.lock.arcanvasart +keystoreFile=app/ARCanvasArt.jks +key_alias=ARCanvasArtkey0 +key_store_password=ARCanvasArt +key_password=ARCanvasArt diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 481bb43..38c465e 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -18,4 +18,18 @@ # 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.lock.arcanvasart.MyApplication { + public static final java.lang.String DB_Name; + public static final int DB_Version; +} + +-keepclassmembers class * { + @androidx.room.Query ; +} +-keep class com.lock.arcanvasart.room.AppDatabase { *; } +-keep class com.lock.arcanvasart.room.ImageEntryDao { *; } +-keep class com.lock.arcanvasart.room.FavoriteImageDao { *; } +-keep class com.lock.arcanvasart.room.ImageEntry { *; } +-keep class com.lock.arcanvasart.room.FavoriteImage { *; } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 85e131d..8feeec9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,17 +2,34 @@ + + + + + + + + + + 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/java/com/lock/arcanvasart/MyApplication.java b/app/src/main/java/com/lock/arcanvasart/MyApplication.java index ed1cd97..ce5fa9c 100644 --- a/app/src/main/java/com/lock/arcanvasart/MyApplication.java +++ b/app/src/main/java/com/lock/arcanvasart/MyApplication.java @@ -1,11 +1,76 @@ package com.lock.arcanvasart; import android.app.Application; +import android.content.Context; +import android.content.SharedPreferences; +import android.util.Log; + +import com.lock.arcanvasart.Utils.ImageRepository; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Executors; public class MyApplication extends Application { + private 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(); + } + } + + private void initializeDatabase() { + Executors.newSingleThreadExecutor().execute(() -> { + List imagePaths = getAllImagePathsFromAssets(); + ImageRepository imageRepository = new ImageRepository(mContext); + imageRepository.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; + } - - + public static Context getContext() { + return mContext; + } } diff --git a/app/src/main/java/com/lock/arcanvasart/Utils/ImageRepository.java b/app/src/main/java/com/lock/arcanvasart/Utils/ImageRepository.java new file mode 100644 index 0000000..e6ba986 --- /dev/null +++ b/app/src/main/java/com/lock/arcanvasart/Utils/ImageRepository.java @@ -0,0 +1,53 @@ +package com.lock.arcanvasart.Utils; + +import android.content.Context; + +import androidx.lifecycle.LiveData; + +import com.lock.arcanvasart.MyApplication; +import com.lock.arcanvasart.room.AppDatabase; +import com.lock.arcanvasart.room.FavoriteImage; +import com.lock.arcanvasart.room.FavoriteImageDao; + +import java.util.ArrayList; +import java.util.List; + +public class ImageRepository { + + private final FavoriteImageDao favoriteImageDao; + + public ImageRepository(Context context) { + // 初始化数据库 + AppDatabase db = AppDatabase.getInstance(context); + favoriteImageDao = db.favoriteImageDao(); + } + + // 批量插入图片路径 + public void insertAllImages(List imagePaths) { + // 将图片路径转化为 FavoriteImage 实体,isFavorite 默认为 false + List images = new ArrayList<>(); + for (String path : imagePaths) { + images.add(new FavoriteImage(path, false)); // 初始化时 isFavorite 为 false + } + + // 执行插入操作 + favoriteImageDao.insertAll(images); + } + + public LiveData> getAllFavoriteImages() { + return favoriteImageDao.getAllFavoriteImages(); + } + + public void updateFavoriteStatus(FavoriteImage favoriteImage) { + new Thread(() -> { + AppDatabase db = AppDatabase.getInstance(MyApplication.getContext()); + db.favoriteImageDao().update(favoriteImage); // 更新数据库中的收藏状态 + }).start(); + } + + public LiveData getImageByPath(String path) { + return favoriteImageDao.getImageByPath(path); // 查询数据库中是否存在该路径的记录 + } + + +} diff --git a/app/src/main/java/com/lock/arcanvasart/Utils/ItemDecoration.java b/app/src/main/java/com/lock/arcanvasart/Utils/ItemDecoration.java new file mode 100644 index 0000000..57095d8 --- /dev/null +++ b/app/src/main/java/com/lock/arcanvasart/Utils/ItemDecoration.java @@ -0,0 +1,98 @@ +package com.lock.arcanvasart.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.lock.arcanvasart.MyApplication; + + +// ItemDecoration 是一个自定义的 RecyclerView.ItemDecoration 类,用于在 RecyclerView 中为每个子项设置间距。 +public class ItemDecoration extends RecyclerView.ItemDecoration { + + // 垂直间距 (vertical spacing)、水平间距 (horizontal spacing) 和额外间距 (extra spacing):这里设置的是第一个的左边距,其它item根据剩余的距离均匀显示。 + private int v, h, ex; + + // 构造函数,传入 dp 值的垂直、水平和额外间距,并将它们转换为像素值。 + public ItemDecoration(int v, int h, int ex) { + // 将 dp 值转换为像素值并四舍五入 + this.v = Math.round(dpToPx(v)); + this.h = Math.round(dpToPx(h)); + this.ex = Math.round(dpToPx(ex)); + } + + // 重写 getItemOffsets 方法,用于为每个子项设置偏移量(间距)。 + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + + // 定义网格的列数(spanCount)、子项所占的列数(spanSize)以及子项在网格中的索引(spanIndex) + int spanCount = 1; // 列数默认为 1 + int spanSize = 1; // 子项所占列数默认为 1 + int spanIndex = 0; // 子项在网格中的索引默认为 0 + + // 获取子项在 Adapter 中的位置 + int childAdapterPosition = parent.getChildAdapterPosition(view); + // 获取 RecyclerView 的布局管理器 + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + + // 如果布局管理器是 StaggeredGridLayoutManager(交错网格布局管理器) + if (layoutManager instanceof StaggeredGridLayoutManager) { + StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) layoutManager; + StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams(); + spanCount = staggeredGridLayoutManager.getSpanCount(); // 获取列数 + // 如果子项占据整行(isFullSpan),将 spanSize 设置为列数 + if (layoutParams.isFullSpan()) { + spanSize = spanCount; + } + spanIndex = layoutParams.getSpanIndex(); // 获取子项的索引 + + // 如果布局管理器是 GridLayoutManager(网格布局管理器) + } 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(); // 获取子项的索引 + + // 如果布局管理器是 LinearLayoutManager(线性布局管理器) + } else if (layoutManager instanceof LinearLayoutManager) { + // 设置子项的左、右和底部的间距 + outRect.left = v; + outRect.right = v; + outRect.bottom = h; + } + + // 如果子项占据整行(spanSize == spanCount),设置左、右和底部的间距 + 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; + } + } + + // 将 dp 值转换为像素值的方法 + public static float dpToPx(float dpValue) { + // 获取当前设备的屏幕密度(dpi) + float density = MyApplication.getContext().getResources().getDisplayMetrics().density; + // 通过公式 density * dp + 0.5f 将 dp 转换为像素,并返回结果 + return density * dpValue + 0.5f; + } +} diff --git a/app/src/main/java/com/lock/arcanvasart/Utils/Names.java b/app/src/main/java/com/lock/arcanvasart/Utils/Names.java new file mode 100644 index 0000000..de26ae5 --- /dev/null +++ b/app/src/main/java/com/lock/arcanvasart/Utils/Names.java @@ -0,0 +1,47 @@ +package com.lock.arcanvasart.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/lock/arcanvasart/Utils/PermissionUtils.java b/app/src/main/java/com/lock/arcanvasart/Utils/PermissionUtils.java new file mode 100644 index 0000000..daf6d5d --- /dev/null +++ b/app/src/main/java/com/lock/arcanvasart/Utils/PermissionUtils.java @@ -0,0 +1,42 @@ +package com.lock.arcanvasart.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/lock/arcanvasart/activity/CameraActivity.java b/app/src/main/java/com/lock/arcanvasart/activity/CameraActivity.java new file mode 100644 index 0000000..27046ce --- /dev/null +++ b/app/src/main/java/com/lock/arcanvasart/activity/CameraActivity.java @@ -0,0 +1,327 @@ +package com.lock.arcanvasart.activity; + +import android.Manifest; +import android.content.ContentValues; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.res.AssetManager; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.provider.MediaStore; +import android.util.Log; +import android.view.View; +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.google.common.util.concurrent.ListenableFuture; +import com.lock.arcanvasart.R; +import com.lock.arcanvasart.Utils.PermissionUtils; +import com.lock.arcanvasart.databinding.ActivityCameraBinding; + +import java.io.IOException; +import java.io.InputStream; +import java.util.concurrent.ExecutionException; + +public class CameraActivity extends AppCompatActivity implements 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 Bitmap bitmap; + private boolean isFlashOn = false; // 闪光灯状态 + private boolean isReOn = false; + private Camera camera; // 相机实例 + private ImageCapture imageCapture; // 拍照实例 + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityCameraBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + 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(v -> openImagePicker()); // 选择图片按钮监听 + binding.light.setOnClickListener(v -> toggleFlash()); // 闪光灯按钮监听 + binding.back.setOnClickListener(v -> finish()); + binding.reversal.setOnClickListener(v -> toggleMirrorEffect()); + binding.topRightImage.setOnClickListener(v -> clearImage()); + binding.play.setOnClickListener(v -> takePhoto()); + } + + 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)); + } + + private void takePhoto() { + // 确保 imageCapture 实例已初始化 + if (imageCapture == null) { + Toast.makeText(this, "拍照功能未初始化", 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, "照片已保存到相册", Toast.LENGTH_SHORT).show(); + } + + @Override + public void onError(@NonNull ImageCaptureException exception) { + Toast.makeText(CameraActivity.this, "拍照失败: " + exception.getMessage(), Toast.LENGTH_SHORT).show(); + } + } + ); + } + + private void clearImage() { + binding.imageFull.setImageBitmap(null); // 清空当前显示的图片 + // 清空图片后显示提示文字和图像 + showCenterTextAndImage(true); + } + + private void toggleMirrorEffect() { + // 获取当前水平缩放值并反转 + float scaleX = binding.imageFull.getScaleX(); + binding.imageFull.setScaleX(scaleX * -1); // 将水平缩放翻转 + isReOn = !isReOn; + binding.reversal.setImageResource(isReOn ? R.drawable.reversal : R.drawable.un_reversal); + } + + private void checkPermissionsAndStartCamera() { + String[] permissions = getRequiredPermissions(); + if (PermissionUtils.hasPermissions(this, permissions)) { + startCamera(); + } else { + PermissionUtils.requestPermissions(this, permissions, CAMERA_PERMISSION_REQUEST_CODE); + } + + // 请求存储权限(用于保存照片和视频) +// String[] storagePermissions = new String[]{ +// Manifest.permission.WRITE_EXTERNAL_STORAGE, +// Manifest.permission.READ_EXTERNAL_STORAGE +// }; +// if (!PermissionUtils.hasPermissions(this, storagePermissions)) { +// ActivityCompat.requestPermissions(this, storagePermissions, STORAGE_PERMISSION_REQUEST_CODE); +// } + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + + // 处理权限请求结果 + if (requestCode == CAMERA_PERMISSION_REQUEST_CODE) { + if (PermissionUtils.handlePermissionsResult(grantResults)) { + startCamera(); + } else { + Toast.makeText(this, "相机权限被拒绝,请在设置中启用权限", Toast.LENGTH_SHORT).show(); + } + } else if (requestCode == STORAGE_PERMISSION_REQUEST_CODE) { + if (PermissionUtils.handlePermissionsResult(grantResults)) { + openImagePicker(); + } else { + Toast.makeText(this, "存储权限被拒绝,请在设置中启用权限", Toast.LENGTH_SHORT).show(); + } + } + } + + private String[] getRequiredPermissions() { + // 根据 Android 版本获取所需权限 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + return new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_MEDIA_IMAGES}; + } else { + return new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; + } + } + + private void toggleFlash() { + // 切换闪光灯状态 + if (camera != null) { + CameraControl cameraControl = camera.getCameraControl(); + isFlashOn = !isFlashOn; // 切换状态 + cameraControl.enableTorch(isFlashOn); // 启用或禁用闪光灯 + 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) { + binding.imageFull.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); // 绑定生命周期 + + } + + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + // 调整图片透明度 + binding.imageFull.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); + } + + // 加载图片后检查是否有图片,并更新视图 + showCenterTextAndImage(false); + } + + private void showCenterTextAndImage(boolean show) { + if (show) { + // 显示中心提示文字和图片 + binding.centerText.setVisibility(View.VISIBLE); + binding.centerImage.setVisibility(View.VISIBLE); + } else { + // 隐藏中心提示文字和图片 + binding.centerText.setVisibility(View.GONE); + binding.centerImage.setVisibility(View.GONE); + } + } + + // 从设备存储中加载图片 + private void displayImageFromStorage(String imagePath) { + Bitmap bitmap = BitmapFactory.decodeFile(imagePath); + if (bitmap != null) { + binding.imageFull.setImageBitmap(bitmap); + } else { + Toast.makeText(this, "加载图片失败", Toast.LENGTH_SHORT).show(); + } + } + + // 从 assets 文件夹中加载图片 + private void displayImageFromAssets(String imagePath) { + try { + // 获取 AssetManager + AssetManager assetManager = getAssets(); + // 从 assets 中打开文件 + InputStream inputStream = assetManager.open(imagePath); + // 将 InputStream 转换为 Bitmap + bitmap = BitmapFactory.decodeStream(inputStream); + // 显示 Bitmap + binding.imageFull.setImageBitmap(bitmap); + } catch (IOException e) { + e.printStackTrace(); + Toast.makeText(this, "加载图片失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 显示错误信息 + } + } + +} diff --git a/app/src/main/java/com/lock/arcanvasart/activity/MainActivity.java b/app/src/main/java/com/lock/arcanvasart/activity/MainActivity.java index 5a0d9d0..627889b 100644 --- a/app/src/main/java/com/lock/arcanvasart/activity/MainActivity.java +++ b/app/src/main/java/com/lock/arcanvasart/activity/MainActivity.java @@ -1,22 +1,165 @@ package com.lock.arcanvasart.activity; +import android.content.Intent; import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; -import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AppCompatActivity; -import androidx.core.graphics.Insets; -import androidx.core.view.ViewCompat; -import androidx.core.view.WindowInsetsCompat; +import com.google.android.material.tabs.TabLayout; +import com.google.android.material.tabs.TabLayoutMediator; import com.lock.arcanvasart.R; +import com.lock.arcanvasart.adapter.MainViewPager2Adapter; +import com.lock.arcanvasart.databinding.ActivityMainBinding; +import com.lock.arcanvasart.databinding.MainTabItemCustomBinding; public class MainActivity extends AppCompatActivity { + private ActivityMainBinding binding; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + binding = ActivityMainBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); - setContentView(R.layout.activity_main); + initData(); + initEvent(); + } + + // 初始化数据 + private void initData() { + MainViewPager2Adapter adapter = new MainViewPager2Adapter(this); + binding.mainViewPager.setAdapter(adapter); + } + + // 初始化事件 + private void initEvent() { + setupTabLayoutMediator(); + setupTabSelectedListener(); + + binding.middleButton.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + Intent intent = new Intent(MainActivity.this, CameraActivity.class); + startActivity(intent); + } + }); } -} \ No newline at end of file + + // 设置TabLayout和ViewPager的关联 + private void setupTabLayoutMediator() { + new TabLayoutMediator(binding.mainTab, binding.mainViewPager, (tab, position) -> { + MainTabItemCustomBinding tabBinding = MainTabItemCustomBinding.inflate(LayoutInflater.from(this)); + tab.setCustomView(tabBinding.getRoot()); + setTabIconAndDotVisibility(tabBinding, position); + + // 设置不同的左右间距 + View tabView = tab.getCustomView(); + if (tabView != null) { + ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) tabView.getLayoutParams(); + switch (position) { + case 1: + layoutParams.setMargins(0, 0, 40, 0); + break; + case 2: + layoutParams.setMargins(40, 0, 0, 0); + break; + default: + layoutParams.setMargins(0, 0, 0, 0); + break; + } + tabView.setLayoutParams(layoutParams); // 更新 Tab 的布局参数 + } + }).attach(); + } + + + // 设置标签图标和小圆点的可见性 + private void setTabIconAndDotVisibility(MainTabItemCustomBinding tabBinding, int position) { + switch (position) { + case 0: + tabBinding.iconCustom.setImageResource(R.drawable.home_fragment); + tabBinding.dotView.setVisibility(View.VISIBLE); + break; + case 1: + tabBinding.iconCustom.setImageResource(R.drawable.category_fragment); + break; + case 2: + tabBinding.iconCustom.setImageResource(R.drawable.favorite_fragment); + break; + case 3: + tabBinding.iconCustom.setImageResource(R.drawable.profile_fragment); + break; + default: + tabBinding.iconCustom.setImageResource(R.drawable.home_fragment); + break; + } + } + + // 设置标签选中事件 + private void setupTabSelectedListener() { + binding.mainTab.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.category_fragment; + case 2: + return R.drawable.favorite_fragment; + case 3: + return R.drawable.profile_fragment; + default: + return R.drawable.home_fragment; + } + } + + // 显示小圆点 + 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/lock/arcanvasart/activity/SettingActivity.java b/app/src/main/java/com/lock/arcanvasart/activity/SettingActivity.java new file mode 100644 index 0000000..c07e3fe --- /dev/null +++ b/app/src/main/java/com/lock/arcanvasart/activity/SettingActivity.java @@ -0,0 +1,72 @@ +package com.lock.arcanvasart.activity; + +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.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; + +import com.lock.arcanvasart.R; + + +public class SettingActivity extends AppCompatActivity { + + private PackageInfo packageInfo; + + private String format; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_setting); + + TextView version = findViewById(R.id.text_version); + View share = findViewById(R.id.share); + ImageView back = findViewById(R.id.back); + + back.setOnClickListener(v -> finish()); + + try { + packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0); + String versionName = packageInfo.versionName; + format = String.format(getString(R.string.gp), packageInfo.packageName); + version.setText(versionName); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + version.setText("1.0.0"); + format = String.format(getString(R.string.gp), "com.sketch.papertracingart"); + } + + Log.d("----------------", "---------format" + format); + + share.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + shareString(format); + + } + }); + + } + + + /** + * 分享纯文本 + * + * @param content 内容 + */ + public void shareString(String content) { + Intent sendIntent = new Intent(); + sendIntent.setAction(Intent.ACTION_SEND); + sendIntent.putExtra(Intent.EXTRA_TEXT, content);//分享的文本内容 + sendIntent.setType("text/plain"); + startActivity(Intent.createChooser(sendIntent, "Share to")); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/lock/arcanvasart/adapter/CategoryAdapter.java b/app/src/main/java/com/lock/arcanvasart/adapter/CategoryAdapter.java new file mode 100644 index 0000000..5929313 --- /dev/null +++ b/app/src/main/java/com/lock/arcanvasart/adapter/CategoryAdapter.java @@ -0,0 +1,107 @@ +package com.lock.arcanvasart.adapter; + +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.bumptech.glide.Glide; +import com.lock.arcanvasart.R; +import com.lock.arcanvasart.activity.CameraActivity; +import com.lock.arcanvasart.room.AppDatabase; +import com.lock.arcanvasart.room.FavoriteImage; + +import java.util.List; +import java.util.concurrent.Executors; + +public class CategoryAdapter extends RecyclerView.Adapter { + + private List favoriteImages; // 收藏的图片列表 + private final Context context; // 上下文对象 + + // 构造方法,传入上下文和图片列表 + public CategoryAdapter(Context context, List favoriteImages) { + this.context = context; + this.favoriteImages = favoriteImages; + } + + // 更新适配器的数据 + public void updateData(List newFavoriteImages) { + this.favoriteImages = newFavoriteImages; + notifyDataSetChanged(); // 通知 RecyclerView 数据已更新 + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + // 膨胀 item 视图 + View view = LayoutInflater.from(context).inflate(R.layout.item_category, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + // 获取当前 position 对应的 FavoriteImage 对象 + FavoriteImage favoriteImage = favoriteImages.get(position); + holder.bind(favoriteImage); // 绑定数据到 ViewHolder + } + + @Override + public int getItemCount() { + // 返回列表中项的数量 + return favoriteImages.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(FavoriteImage favoriteImage) { + // 使用 Glide 加载图片,路径为 assets 中的图片 + Glide.with(context) + .load("file:///android_asset/" + favoriteImage.getImagePath()) // 加载 assets 中的图片 + .into(imageView); + + imageView.setOnClickListener(v -> { + + Intent intent = new Intent(context, CameraActivity.class); + intent.putExtra("imagePath", favoriteImage.getImagePath()); + context.startActivity(intent); + + }); + + // 动态观察 'isFavorite' 状态,并更新按钮的图标 + favoriteButton.setImageResource(favoriteImage.isFavorite() ? R.drawable.select_favorite : R.drawable.unselect_favorite); + + // 设置收藏按钮的点击事件,切换收藏状态 + favoriteButton.setOnClickListener(v -> { + boolean newStatus = !favoriteImage.isFavorite(); // 取反收藏状态 + favoriteImage.setFavorite(newStatus); // 更新状态 + + // 在后台线程中更新数据库 + Executors.newSingleThreadExecutor().execute(() -> { + AppDatabase.getInstance(context) + .favoriteImageDao() + .update(favoriteImage); // 更新数据库中的收藏状态 + }); + + // 更新当前项的收藏按钮图标 + notifyItemChanged(getAdapterPosition()); + }); + } + } +} diff --git a/app/src/main/java/com/lock/arcanvasart/adapter/MainAdapter.java b/app/src/main/java/com/lock/arcanvasart/adapter/MainAdapter.java new file mode 100644 index 0000000..4803e08 --- /dev/null +++ b/app/src/main/java/com/lock/arcanvasart/adapter/MainAdapter.java @@ -0,0 +1,94 @@ +package com.lock.arcanvasart.adapter; + +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.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.lock.arcanvasart.R; +import com.lock.arcanvasart.activity.CameraActivity; +import com.lock.arcanvasart.room.AppDatabase; +import com.lock.arcanvasart.room.FavoriteImage; + +import java.util.List; +import java.util.concurrent.Executors; + +public class MainAdapter extends RecyclerView.Adapter { + + private Context context; + private List images; + + public MainAdapter(Context context, List imagePaths) { + this.context = context; + this.images = imagePaths; + } + + @Override + public ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_image_viewpager, parent, false); + return new ImageViewHolder(view); + } + + @Override + public void onBindViewHolder(ImageViewHolder holder, int position) { + FavoriteImage image = images.get(position); + holder.bind(image); + } + + @Override + public int getItemCount() { + return images.size(); + } + + public class ImageViewHolder extends RecyclerView.ViewHolder { + ImageView imageView; + ImageView favorite; + public ImageViewHolder(View itemView) { + super(itemView); + imageView = itemView.findViewById(R.id.image_view); + favorite = itemView.findViewById(R.id.btn_favorite); + } + + void bind(FavoriteImage favoriteImage) { + // 加载图片 + Glide.with(context) + .load("file:///android_asset/" + favoriteImage.getImagePath()) // 加载 assets 中的图片 + .into(imageView); + + imageView.setOnClickListener(v -> { + + Intent intent = new Intent(context, CameraActivity.class); + intent.putExtra("imagePath", favoriteImage.getImagePath()); + context.startActivity(intent); + + }); + + // 设置收藏按钮状态 + favorite.setImageResource(favoriteImage.isFavorite() ? R.drawable.select_favorite : R.drawable.unselect_favorite); + + // 点击切换收藏状态 + favorite.setOnClickListener(v -> { + boolean newStatus = !favoriteImage.isFavorite(); + favoriteImage.setFavorite(newStatus); + + // 在后台线程中执行数据库更新操作 + Executors.newSingleThreadExecutor().execute(() -> { + AppDatabase.getInstance(context) + .favoriteImageDao() + .update(favoriteImage); // 更新数据库状态 + }); + + // 更新按钮图标 + notifyItemChanged(getAdapterPosition()); + }); + + } + + } +} + diff --git a/app/src/main/java/com/lock/arcanvasart/adapter/MainViewPager2Adapter.java b/app/src/main/java/com/lock/arcanvasart/adapter/MainViewPager2Adapter.java new file mode 100644 index 0000000..f8cbe9d --- /dev/null +++ b/app/src/main/java/com/lock/arcanvasart/adapter/MainViewPager2Adapter.java @@ -0,0 +1,42 @@ +package com.lock.arcanvasart.adapter; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.viewpager2.adapter.FragmentStateAdapter; + +import com.lock.arcanvasart.fragment.CategoryFragment; +import com.lock.arcanvasart.fragment.FavoriteFragment; +import com.lock.arcanvasart.fragment.MainFragment; +import com.lock.arcanvasart.fragment.ProfileFragment; + +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 MainFragment()); + fragmentList.add(new CategoryFragment()); + fragmentList.add(new FavoriteFragment()); + fragmentList.add(new ProfileFragment()); + } + + @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/lock/arcanvasart/adapter/ProfileAdapter.java b/app/src/main/java/com/lock/arcanvasart/adapter/ProfileAdapter.java new file mode 100644 index 0000000..eb18722 --- /dev/null +++ b/app/src/main/java/com/lock/arcanvasart/adapter/ProfileAdapter.java @@ -0,0 +1,122 @@ +package com.lock.arcanvasart.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.bumptech.glide.Glide; +import com.bumptech.glide.load.engine.DiskCacheStrategy; +import com.bumptech.glide.load.resource.bitmap.CenterCrop; +import com.bumptech.glide.load.resource.bitmap.RoundedCorners; +import com.bumptech.glide.request.RequestOptions; +import com.lock.arcanvasart.R; +import com.lock.arcanvasart.activity.CameraActivity; +import com.lock.arcanvasart.room.ImageEntry; + +import java.util.List; + +public class ProfileAdapter 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 ProfileAdapter(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_image_work, parent, false); + return new ItemViewHolder(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 { + ItemViewHolder itemHolder = (ItemViewHolder) holder; + ImageEntry imageEntry = imageEntries.get(position - 1); + + RequestOptions requestOptions = new RequestOptions() + .transform(new CenterCrop(), new RoundedCorners(20)); + + Glide.with(context) + .load(imageEntry.getImagePath()) + .diskCacheStrategy(DiskCacheStrategy.ALL) + .apply(requestOptions) + .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 控件 + } + } + + // Item ViewHolder 类(普通控件) + static class ItemViewHolder extends RecyclerView.ViewHolder { + ImageView imageView; + + public ItemViewHolder(View view) { + super(view); + imageView = view.findViewById(R.id.image_view); + } + } +} diff --git a/app/src/main/java/com/lock/arcanvasart/fragment/CategoryFragment.java b/app/src/main/java/com/lock/arcanvasart/fragment/CategoryFragment.java new file mode 100644 index 0000000..6579115 --- /dev/null +++ b/app/src/main/java/com/lock/arcanvasart/fragment/CategoryFragment.java @@ -0,0 +1,139 @@ +package com.lock.arcanvasart.fragment; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; + +import androidx.fragment.app.Fragment; +import androidx.lifecycle.LiveData; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; + +import com.lock.arcanvasart.R; +import com.lock.arcanvasart.Utils.ItemDecoration; +import com.lock.arcanvasart.Utils.Names; +import com.lock.arcanvasart.adapter.CategoryAdapter; +import com.lock.arcanvasart.databinding.FragmentCategoryBinding; +import com.lock.arcanvasart.room.AppDatabase; +import com.lock.arcanvasart.room.FavoriteImage; + +import java.util.ArrayList; +import java.util.List; + +public class CategoryFragment extends Fragment { + + private FragmentCategoryBinding binding; + private CategoryAdapter imageAdapter; + private List images = new ArrayList<>(); + private boolean isSingleColumn = true; // 默认单列布局 + private AppDatabase appDatabase; + private LiveData> favoriteImagesLiveData; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + binding = FragmentCategoryBinding.inflate(inflater, container, false); + + // 初始化 AppDatabase 和 LiveData + appDatabase = AppDatabase.getInstance(getContext()); + + // 初始化下拉框(Spinner) + setupSpinner(); + + // 初始化 RecyclerView + setupRecyclerView(); + + // 初始化列切换按钮 + setupColumnToggleButtons(); + + return binding.getRoot(); + } + + private void setupSpinner() { + // 获取所有类别的原始列表 + List originalCategories = Names.getAllDir(); + List displayCategories = new ArrayList<>(); // 用于显示的类别名称列表(去掉前缀) + + // 遍历原始类别,去掉每个类别的 "png_" 前缀 + for (String category : originalCategories) { + if (category.startsWith("png_")) { + displayCategories.add(category.substring(4)); // 去掉前缀 "png_" + } else { + displayCategories.add(category); + } + } + + // 使用处理后的类别列表创建 ArrayAdapter + ArrayAdapter adapter = new ArrayAdapter<>(requireContext(), android.R.layout.simple_spinner_item, displayCategories); + adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + binding.categorySpinner.setAdapter(adapter); + + // 设置 Spinner 的选择监听器 + binding.categorySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + // 根据选择的类别加载图片(使用原始类别名称) + String selectedCategory = originalCategories.get(position); + loadImages(selectedCategory); // 加载选中类别的图片 + } + + @Override + public void onNothingSelected(AdapterView parent) { + // 如果没有选中任何项,则不做任何操作 + } + }); + } + + private void setupRecyclerView() { + // 初始化适配器并设置 RecyclerView 的布局管理器 + imageAdapter = new CategoryAdapter(getContext(), images); + binding.recyclerview.setLayoutManager(new LinearLayoutManager(getContext())); // 默认使用单列布局 + binding.recyclerview.setAdapter(imageAdapter); + + // 添加自定义的 ItemDecoration 用于设置 item 间距 + ItemDecoration itemDecoration = new ItemDecoration(12, 10, 9); + binding.recyclerview.addItemDecoration(itemDecoration); + } + + private void setupColumnToggleButtons() { + // 设置列切换按钮的默认状态 + binding.btnSingleColumn.setImageResource(R.drawable.single); + binding.btnDoubleColumn.setImageResource(R.drawable.un_double); + + // 设置单列按钮的点击事件 + binding.btnSingleColumn.setOnClickListener(v -> { + if (!isSingleColumn) { + // 切换为单列布局 + binding.recyclerview.setLayoutManager(new LinearLayoutManager(getContext())); + binding.btnSingleColumn.setImageResource(R.drawable.single); + binding.btnDoubleColumn.setImageResource(R.drawable.un_double); + isSingleColumn = true; // 更新状态 + } + }); + + // 设置双列按钮的点击事件 + binding.btnDoubleColumn.setOnClickListener(v -> { + if (isSingleColumn) { + // 切换为双列布局 + binding.recyclerview.setLayoutManager(new GridLayoutManager(getContext(), 2)); + binding.btnSingleColumn.setImageResource(R.drawable.un_single); + binding.btnDoubleColumn.setImageResource(R.drawable.double_row); + isSingleColumn = false; // 更新状态 + } + }); + } + + private void loadImages(String category) { + // 获取指定类别的图片,并将其包装成 LiveData 进行观察 + favoriteImagesLiveData = appDatabase.favoriteImageDao().getImagesByCategory(category); + + // 观察 LiveData 数据变化 + favoriteImagesLiveData.observe(getViewLifecycleOwner(), favoriteImages -> { + images.clear(); // 清空现有的图片列表 + images.addAll(favoriteImages); // 添加新的图片数据 + imageAdapter.notifyDataSetChanged(); // 更新 RecyclerView + }); + } +} diff --git a/app/src/main/java/com/lock/arcanvasart/fragment/FavoriteFragment.java b/app/src/main/java/com/lock/arcanvasart/fragment/FavoriteFragment.java new file mode 100644 index 0000000..70c2e93 --- /dev/null +++ b/app/src/main/java/com/lock/arcanvasart/fragment/FavoriteFragment.java @@ -0,0 +1,82 @@ +package com.lock.arcanvasart.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.lock.arcanvasart.Utils.ItemDecoration; +import com.lock.arcanvasart.adapter.CategoryAdapter; +import com.lock.arcanvasart.databinding.FragmentFavoriteBinding; +import com.lock.arcanvasart.room.AppDatabase; +import com.lock.arcanvasart.room.FavoriteImage; + +import java.util.ArrayList; +import java.util.List; + +public class FavoriteFragment extends Fragment { + + private FragmentFavoriteBinding binding; + private CategoryAdapter imageAdapter; + + @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() { + // 初始化适配器,传入一个空列表 + imageAdapter = new CategoryAdapter(getContext(), new ArrayList<>()); + + // 设置 RecyclerView 的布局管理器为 GridLayoutManager,列数为2 + binding.recyclerview.setLayoutManager(new GridLayoutManager(getContext(), 2)); + + // 设置适配器 + binding.recyclerview.setAdapter(imageAdapter); + + // 添加自定义的装饰,设置间距 + ItemDecoration itemDecoration = new ItemDecoration(12, 10, 9); + binding.recyclerview.addItemDecoration(itemDecoration); + } + + private void loadFavoriteImages() { + // 获取数据库实例并调用查询方法 + AppDatabase.getInstance(getContext()) + .favoriteImageDao() + .getFavoriteImages() + .observe(getViewLifecycleOwner(), new Observer>() { + @Override + public void onChanged(List favoriteImages) { + if (favoriteImages.isEmpty()){ + binding.backgroundImage.setVisibility(View.VISIBLE); + binding.backgroundText.setVisibility(View.VISIBLE); + }else { + binding.backgroundImage.setVisibility(View.GONE); + binding.backgroundText.setVisibility(View.GONE); + } + imageAdapter.updateData(favoriteImages); + } + }); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + // 在视图销毁时将绑定对象设为 null,防止内存泄漏 + binding = null; + } +} diff --git a/app/src/main/java/com/lock/arcanvasart/fragment/MainFragment.java b/app/src/main/java/com/lock/arcanvasart/fragment/MainFragment.java new file mode 100644 index 0000000..5285cdc --- /dev/null +++ b/app/src/main/java/com/lock/arcanvasart/fragment/MainFragment.java @@ -0,0 +1,202 @@ +package com.lock.arcanvasart.fragment; + +import android.os.Bundle; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.widget.ImageView; +import android.widget.LinearLayout; + +import androidx.fragment.app.Fragment; +import androidx.lifecycle.LiveData; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.viewpager2.widget.ViewPager2; + +import com.lock.arcanvasart.R; +import com.lock.arcanvasart.Utils.ItemDecoration; +import com.lock.arcanvasart.adapter.CategoryAdapter; +import com.lock.arcanvasart.adapter.MainAdapter; +import com.lock.arcanvasart.databinding.FragmentMainBinding; +import com.lock.arcanvasart.room.AppDatabase; +import com.lock.arcanvasart.room.FavoriteImage; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Random; + +public class MainFragment extends Fragment { + + private FragmentMainBinding binding; + private CategoryAdapter imageAdapter; + private final List images = new ArrayList<>(); + private Handler handler; + private AppDatabase appDatabase; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + binding = FragmentMainBinding.inflate(inflater, container, false); + appDatabase = AppDatabase.getInstance(getContext()); + + // 设置 RecyclerView + setupRecyclerView(); + + // 加载并观察数据 + loadImagesForCarousel(); + + loadImagesForRecyclerView(); + + return binding.getRoot(); + } + + private void setupRecyclerView() { + imageAdapter = new CategoryAdapter(getContext(), images); + binding.recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2)); + binding.recyclerView.setAdapter(imageAdapter); + + ItemDecoration itemDecoration = new ItemDecoration(12, 10, 9); + binding.recyclerView.addItemDecoration(itemDecoration); + } + + private void loadImagesForRecyclerView() { + + int randomLimit = new Random().nextInt(321) + 20; + + LiveData> recyclerImagesLiveData = appDatabase.favoriteImageDao().getImagesForRecyclerView(randomLimit, randomLimit-20); + + // 观察 LiveData 的变化 + recyclerImagesLiveData.observe(getViewLifecycleOwner(), recyclerImages -> { + if (recyclerImages != null) { + images.clear(); + images.addAll(recyclerImages); + imageAdapter.notifyDataSetChanged(); // 刷新 RecyclerView + } + }); + } + + private void loadImagesForCarousel() { + new Thread(() -> { + List carouselImages = AppDatabase + .getInstance(getContext()) + .favoriteImageDao() + .getRandomImagesForCarousel(); + + requireActivity().runOnUiThread(() -> { + MainAdapter adapter = new MainAdapter(getContext(), carouselImages); + binding.viewPager.setAdapter(adapter); + setupIndicators(carouselImages.size()); + + // 等待 ViewPager2 布局完成后再设置指示器 + binding.viewPager.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + // 移除布局监听器,避免重复执行 + binding.viewPager.getViewTreeObserver().removeOnGlobalLayoutListener(this); + // 动态生成圆点指示器 + setupIndicators(carouselImages.size()); + // 初始设置选中的圆点 + updateIndicators(0); + } + }); + + // 设置轮播图的监听器 + setupViewPagerListener(); + + // 在数据加载完毕后再开始自动滚动 + autoScrollViewPager(); // 确保自动滚动在数据加载后开始 + + }); + }).start(); + } + + + private void setupViewPagerListener() { + binding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { + @Override + public void onPageSelected(int position) { + super.onPageSelected(position); + + updateIndicators(position); // 更新圆点 + + } + }); + + } + + private void autoScrollViewPager() { + final int delay = 3000; // 设置轮播间隔时间(毫秒) + final int period = 3000; // 设置轮播间隔时间(毫秒) + + // 使用 Handler 来实现定时任务 + handler = new Handler(); + Runnable runnable = new Runnable() { + @Override + public void run() { + // 获取当前页面的位置 + int currentItem = binding.viewPager.getCurrentItem(); + + // 切换到下一个页面 + int nextItem = currentItem + 1; + if (nextItem >= Objects.requireNonNull(binding.viewPager.getAdapter()).getItemCount()) { + nextItem = 0; // 如果已经到最后一页,则回到第一页 + } + + binding.viewPager.setCurrentItem(nextItem, true); // 平滑切换 + + // 每隔一定时间执行一次,达到自动切换的效果 + handler.postDelayed(this, period); + } + }; + + // 延迟执行第一次轮播 + handler.postDelayed(runnable, delay); + } + + private void setupIndicators(int count) { + LinearLayout indicatorLayout = binding.indicatorLayout; + indicatorLayout.removeAllViews(); // 清空原有的圆点 + + for (int i = 0; i < count; i++) { + ImageView indicator = new ImageView(getContext()); + indicator.setImageResource(R.drawable.circle_indicator); // 默认圆点 + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + params.setMargins(8, 0, 8, 0); // 设置圆点间距 + indicator.setLayoutParams(params); + indicatorLayout.addView(indicator); + } + + // 延迟设置选中的圆点 + indicatorLayout.post(() -> updateIndicators(0)); // 设置第一个圆点为选中状态 + } + + private void updateIndicators(int position) { + LinearLayout indicatorLayout = binding.indicatorLayout; + int childCount = indicatorLayout.getChildCount(); + + for (int i = 0; i < childCount; i++) { + ImageView indicator = (ImageView) indicatorLayout.getChildAt(i); + if (i == position) { + indicator.setImageResource(R.drawable.circle_indicator_selected); // 当前页选中的圆点 + } else { + indicator.setImageResource(R.drawable.circle_indicator); // 默认圆点 + } + } + + // 强制更新布局,确保圆点大小正确 + indicatorLayout.requestLayout(); + } + + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (handler != null) { + handler.removeCallbacksAndMessages(null); // 移除所有回调 + } + binding = null; + } +} diff --git a/app/src/main/java/com/lock/arcanvasart/fragment/ProfileFragment.java b/app/src/main/java/com/lock/arcanvasart/fragment/ProfileFragment.java new file mode 100644 index 0000000..8772bf4 --- /dev/null +++ b/app/src/main/java/com/lock/arcanvasart/fragment/ProfileFragment.java @@ -0,0 +1,249 @@ +package com.lock.arcanvasart.fragment; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.os.Bundle; + +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.Toast; + +import com.lock.arcanvasart.R; +import com.lock.arcanvasart.Utils.ItemDecoration; +import com.lock.arcanvasart.activity.CameraActivity; +import com.lock.arcanvasart.activity.SettingActivity; +import com.lock.arcanvasart.adapter.ProfileAdapter; +import com.lock.arcanvasart.databinding.FragmentProfileBinding; +import com.lock.arcanvasart.room.AppDatabase; +import com.lock.arcanvasart.room.FavoriteImage; +import com.lock.arcanvasart.room.ImageEntry; +import com.lock.arcanvasart.room.ImageEntryDao; + +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 ProfileFragment extends Fragment implements ProfileAdapter.OnHeaderClickListener { + + private FragmentProfileBinding binding; + + private static final int PICK_IMAGE_REQUEST_CODE = 202; // 请求码,用于标识图片选择 + + private ProfileAdapter adapter; // 图片适配器 + private List imagePaths = new ArrayList<>(); // 图片路径列表 + private AppDatabase appDatabase; // 数据库实例 + private ImageEntryDao imageEntryDao; // 图片条目 DAO + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + + binding = FragmentProfileBinding.inflate(inflater, container, false); + + // 设置 RecyclerView 的布局管理器和适配器 + binding.recyclerview.setLayoutManager(new GridLayoutManager(getContext(), 2)); + ItemDecoration itemDecoration = new ItemDecoration(12, 10, 9); + binding.recyclerview.addItemDecoration(itemDecoration); + adapter = new ProfileAdapter(new ArrayList<>(), requireActivity(), this); + binding.recyclerview.setAdapter(adapter); + + binding.backgroundImage.setOnClickListener(v -> start()); + + // 初始化数据库和 DAO + appDatabase = AppDatabase.getInstance(requireContext()); + imageEntryDao = appDatabase.imageEntryDao(); + + loadImages(); + + return binding.getRoot(); + } + + private void start() { + Intent intent = new Intent(getActivity(), SettingActivity.class); + startActivity(intent); + + } + + + @Override + public void onResume() { + super.onResume(); + + adapter.notifyDataSetChanged(); + + } + + private void loadImages() { + // 获取数据库实例并调用查询方法 + AppDatabase.getInstance(getContext()) + .imageEntryDao() + .getAllImages() + .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(), "图片大小超过限制", Toast.LENGTH_SHORT).show(); + } + } catch (IOException e) { + e.printStackTrace(); + Toast.makeText(getContext(), "无法获取图片大小: " + 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(), "无法加载图片", Toast.LENGTH_SHORT).show(); + return; + } + + // 将图片保存到内部存储 + File internalStorageDir = requireContext().getFilesDir(); // 获取内部存储目录 + File imageFile = new File(internalStorageDir, System.currentTimeMillis() + ".jpg"); // 创建新图片文件 + FileOutputStream outputStream = new FileOutputStream(imageFile); + bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream); // 将图片压缩并保存 + outputStream.close(); + inputStream.close(); + + String imagePath = imageFile.getAbsolutePath(); // 获取图片绝对路径 + + // 检查图片是否已经存在 + new Thread(() -> { + if (isImageAlreadyExists(imagePath)) { + requireActivity().runOnUiThread(() -> Toast.makeText(getContext(), "该图片已经存在", Toast.LENGTH_SHORT).show()); + imageFile.delete(); // 删除重复的文件 + return; + } + imagePaths.add(imagePath); // 添加图片路径到列表 + + // 将图片路径插入数据库 + imageEntryDao.insert(new ImageEntry(imagePath)); + + }).start(); + + } catch (IOException e) { + e.printStackTrace(); + Toast.makeText(getContext(), "保存图片失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); + } + } + + /** + * 检查图片是否已经存在。 + * + * @param imagePath 图片路径 + * @return 图片是否已存在 + */ + private boolean isImageAlreadyExists(String imagePath) { + File newImageFile = new File(imagePath); + + // 检查 imagePaths 列表 + for (String path : imagePaths) { + File existingFile = new File(path); + if (filesAreIdentical(existingFile, newImageFile)) { + return true; + } + } + + // 检查数据库 + List imageEntries = imageEntryDao.getAllImagesList(); + 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/lock/arcanvasart/room/AppDatabase.java b/app/src/main/java/com/lock/arcanvasart/room/AppDatabase.java new file mode 100644 index 0000000..668de5d --- /dev/null +++ b/app/src/main/java/com/lock/arcanvasart/room/AppDatabase.java @@ -0,0 +1,32 @@ +package com.lock.arcanvasart.room; + +import android.content.Context; + +import androidx.room.Database; +import androidx.room.Room; +import androidx.room.RoomDatabase; + +import com.lock.arcanvasart.MyApplication; + +@Database(entities = {FavoriteImage.class,ImageEntry.class}, version = MyApplication.DB_Version, exportSchema = false) +public abstract class AppDatabase extends RoomDatabase { + + private static volatile AppDatabase INSTANCE; + + public abstract FavoriteImageDao favoriteImageDao(); + public abstract ImageEntryDao imageEntryDao(); + + 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/lock/arcanvasart/room/FavoriteImage.java b/app/src/main/java/com/lock/arcanvasart/room/FavoriteImage.java new file mode 100644 index 0000000..4722154 --- /dev/null +++ b/app/src/main/java/com/lock/arcanvasart/room/FavoriteImage.java @@ -0,0 +1,48 @@ +package com.lock.arcanvasart.room; + +import androidx.room.ColumnInfo; +import androidx.room.Entity; +import androidx.room.PrimaryKey; + +import java.io.Serializable; + +@Entity(tableName = "favorite_images") +public class FavoriteImage implements Serializable { + @PrimaryKey(autoGenerate = true) + private int id; + + @ColumnInfo(name = "image_path") + private String imagePath; + + @ColumnInfo(name = "is_favorite") + private boolean isFavorite = false; // 新字段:收藏状态 + + public FavoriteImage(String imagePath, boolean isFavorite) { + this.imagePath = imagePath; + this.isFavorite = isFavorite; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getImagePath() { + return imagePath; + } + + public void setImagePath(String imagePath) { + this.imagePath = imagePath; + } + + public boolean isFavorite() { + return isFavorite; + } + + public void setFavorite(boolean favorite) { + isFavorite = favorite; + } +} diff --git a/app/src/main/java/com/lock/arcanvasart/room/FavoriteImageDao.java b/app/src/main/java/com/lock/arcanvasart/room/FavoriteImageDao.java new file mode 100644 index 0000000..b5e9e9a --- /dev/null +++ b/app/src/main/java/com/lock/arcanvasart/room/FavoriteImageDao.java @@ -0,0 +1,56 @@ +package com.lock.arcanvasart.room; + +import androidx.lifecycle.LiveData; +import androidx.room.Dao; +import androidx.room.Insert; +import androidx.room.OnConflictStrategy; +import androidx.room.Query; +import androidx.room.Update; + +import java.util.List; + +@Dao +public interface FavoriteImageDao { + + @Insert(onConflict = OnConflictStrategy.IGNORE) + void insertAll(List images); + + @Update + void update(FavoriteImage image); + + @Query("SELECT * FROM favorite_images WHERE is_favorite = 1") + LiveData> getFavoriteImages(); + + @Query("SELECT * FROM favorite_images WHERE image_path = :path LIMIT 1") + LiveData getImageByPath(String path); + + @Query("SELECT * FROM favorite_images WHERE is_favorite = 1") + LiveData> getAllFavoriteImages(); + + @Query("UPDATE favorite_images SET is_favorite = :isFavorite WHERE image_path = :imagePath") + void updateFavoriteStatusByPath(String imagePath, boolean isFavorite); + + @Query("SELECT * FROM favorite_images WHERE image_path LIKE :category || '/%'") + LiveData> getImagesByCategory(String category); + + @Query("SELECT * FROM favorite_images ORDER BY RANDOM() LIMIT 20") + LiveData> getRandomImagesForRecyclerView(); + + @Query("SELECT * FROM favorite_images ORDER BY RANDOM() LIMIT 4") + List getRandomImagesForCarousel(); + + @Query("SELECT * FROM favorite_images ORDER BY RANDOM() LIMIT 20") + LiveData> getInitialRandomImagesForRecyclerView(); + + @Query("SELECT * FROM favorite_images LIMIT :limit OFFSET :offset") + LiveData> getImagesForRecyclerView(int limit, int offset); + + // 随机获取20张图片 + @Query("SELECT * FROM favorite_images ORDER BY RANDOM() LIMIT :count") + List getRandomFavoriteImagesSync(int count); + + // 更新图片的收藏状态 + @Query("UPDATE favorite_images SET is_favorite = :isFavorite WHERE id = :imageId") + void updateFavoriteStatus(int imageId, boolean isFavorite); +} + diff --git a/app/src/main/java/com/lock/arcanvasart/room/ImageEntry.java b/app/src/main/java/com/lock/arcanvasart/room/ImageEntry.java new file mode 100644 index 0000000..c953868 --- /dev/null +++ b/app/src/main/java/com/lock/arcanvasart/room/ImageEntry.java @@ -0,0 +1,31 @@ +package com.lock.arcanvasart.room; + +import androidx.room.Entity; +import androidx.room.PrimaryKey; + +@Entity(tableName = "image_entry") +public class ImageEntry { + @PrimaryKey(autoGenerate = true) + private int id; + private String imagePath; + + public ImageEntry(String imagePath) { + this.imagePath = imagePath; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getImagePath() { + return imagePath; + } + + public void setImagePath(String imagePath) { + this.imagePath = imagePath; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lock/arcanvasart/room/ImageEntryDao.java b/app/src/main/java/com/lock/arcanvasart/room/ImageEntryDao.java new file mode 100644 index 0000000..93545ff --- /dev/null +++ b/app/src/main/java/com/lock/arcanvasart/room/ImageEntryDao.java @@ -0,0 +1,27 @@ +package com.lock.arcanvasart.room; + +import androidx.lifecycle.LiveData; +import androidx.room.Dao; +import androidx.room.Delete; +import androidx.room.Insert; +import androidx.room.Query; + +import java.util.List; + +@Dao +public interface ImageEntryDao { + @Insert + void insert(ImageEntry imageEntry); + + @Delete + void delete(ImageEntry imageEntry); + + @Query("SELECT * FROM image_entry") + LiveData> getAllImages(); + + @Query("SELECT * FROM image_entry") + List getAllImagesList(); + + @Query("SELECT * FROM image_entry WHERE imagePath = :imagePath LIMIT 1") + ImageEntry findByPath(String imagePath); +} 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_button.xml b/app/src/main/res/drawable/back_button.xml new file mode 100644 index 0000000..4fa5561 --- /dev/null +++ b/app/src/main/res/drawable/back_button.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/camera.xml b/app/src/main/res/drawable/camera.xml new file mode 100644 index 0000000..254283f --- /dev/null +++ b/app/src/main/res/drawable/camera.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/camera_tablayout.xml b/app/src/main/res/drawable/camera_tablayout.xml new file mode 100644 index 0000000..915f378 --- /dev/null +++ b/app/src/main/res/drawable/camera_tablayout.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/category_fragment.xml b/app/src/main/res/drawable/category_fragment.xml new file mode 100644 index 0000000..08b335f --- /dev/null +++ b/app/src/main/res/drawable/category_fragment.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/app/src/main/res/drawable/circle_indicator.xml b/app/src/main/res/drawable/circle_indicator.xml new file mode 100644 index 0000000..59ad4e9 --- /dev/null +++ b/app/src/main/res/drawable/circle_indicator.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/app/src/main/res/drawable/circle_indicator_selected.xml b/app/src/main/res/drawable/circle_indicator_selected.xml new file mode 100644 index 0000000..941c09d --- /dev/null +++ b/app/src/main/res/drawable/circle_indicator_selected.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/app/src/main/res/drawable/delete.xml b/app/src/main/res/drawable/delete.xml new file mode 100644 index 0000000..08decf2 --- /dev/null +++ b/app/src/main/res/drawable/delete.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/dot.xml b/app/src/main/res/drawable/dot.xml new file mode 100644 index 0000000..7b078e1 --- /dev/null +++ b/app/src/main/res/drawable/dot.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/app/src/main/res/drawable/double_row.xml b/app/src/main/res/drawable/double_row.xml new file mode 100644 index 0000000..95ca2f7 --- /dev/null +++ b/app/src/main/res/drawable/double_row.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/favorite_fragment.xml b/app/src/main/res/drawable/favorite_fragment.xml new file mode 100644 index 0000000..4d4c033 --- /dev/null +++ b/app/src/main/res/drawable/favorite_fragment.xml @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/group.xml b/app/src/main/res/drawable/group.xml new file mode 100644 index 0000000..29362f5 --- /dev/null +++ b/app/src/main/res/drawable/group.xml @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/home_fragment.xml b/app/src/main/res/drawable/home_fragment.xml new file mode 100644 index 0000000..3cfa8ce --- /dev/null +++ b/app/src/main/res/drawable/home_fragment.xml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/app/src/main/res/drawable/light.xml b/app/src/main/res/drawable/light.xml new file mode 100644 index 0000000..7e479f6 --- /dev/null +++ b/app/src/main/res/drawable/light.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/main_tablayout.xml b/app/src/main/res/drawable/main_tablayout.xml new file mode 100644 index 0000000..624ed5b --- /dev/null +++ b/app/src/main/res/drawable/main_tablayout.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/pause.xml b/app/src/main/res/drawable/pause.xml new file mode 100644 index 0000000..8ce6833 --- /dev/null +++ b/app/src/main/res/drawable/pause.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/photo.xml b/app/src/main/res/drawable/photo.xml new file mode 100644 index 0000000..2e9a746 --- /dev/null +++ b/app/src/main/res/drawable/photo.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/placeholder.xml b/app/src/main/res/drawable/placeholder.xml new file mode 100644 index 0000000..20320c1 --- /dev/null +++ b/app/src/main/res/drawable/placeholder.xml @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/play.xml b/app/src/main/res/drawable/play.xml new file mode 100644 index 0000000..5a37410 --- /dev/null +++ b/app/src/main/res/drawable/play.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/profile_fragment.xml b/app/src/main/res/drawable/profile_fragment.xml new file mode 100644 index 0000000..97fff44 --- /dev/null +++ b/app/src/main/res/drawable/profile_fragment.xml @@ -0,0 +1,30 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable/reversal.xml b/app/src/main/res/drawable/reversal.xml new file mode 100644 index 0000000..f4c63f1 --- /dev/null +++ b/app/src/main/res/drawable/reversal.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/rotate.xml b/app/src/main/res/drawable/rotate.xml new file mode 100644 index 0000000..aad1a4e --- /dev/null +++ b/app/src/main/res/drawable/rotate.xml @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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..be096fb --- /dev/null +++ b/app/src/main/res/drawable/rounded_corners.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/run.xml b/app/src/main/res/drawable/run.xml new file mode 100644 index 0000000..95fb240 --- /dev/null +++ b/app/src/main/res/drawable/run.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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..0100e68 --- /dev/null +++ b/app/src/main/res/drawable/seek_bar_color.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + 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/select_favorite.xml b/app/src/main/res/drawable/select_favorite.xml new file mode 100644 index 0000000..9119955 --- /dev/null +++ b/app/src/main/res/drawable/select_favorite.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/app/src/main/res/drawable/setting.xml b/app/src/main/res/drawable/setting.xml new file mode 100644 index 0000000..b9120fd --- /dev/null +++ b/app/src/main/res/drawable/setting.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/share.xml b/app/src/main/res/drawable/share.xml new file mode 100644 index 0000000..b3d3fb5 --- /dev/null +++ b/app/src/main/res/drawable/share.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/shoot.xml b/app/src/main/res/drawable/shoot.xml new file mode 100644 index 0000000..a28c6f0 --- /dev/null +++ b/app/src/main/res/drawable/shoot.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/single.xml b/app/src/main/res/drawable/single.xml new file mode 100644 index 0000000..8df53ca --- /dev/null +++ b/app/src/main/res/drawable/single.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/skip.xml b/app/src/main/res/drawable/skip.xml new file mode 100644 index 0000000..34c146f --- /dev/null +++ b/app/src/main/res/drawable/skip.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + 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_camera.xml b/app/src/main/res/drawable/un_camera.xml new file mode 100644 index 0000000..79d64ff --- /dev/null +++ b/app/src/main/res/drawable/un_camera.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/un_double.xml b/app/src/main/res/drawable/un_double.xml new file mode 100644 index 0000000..6a13a6e --- /dev/null +++ b/app/src/main/res/drawable/un_double.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/un_group.xml b/app/src/main/res/drawable/un_group.xml new file mode 100644 index 0000000..0e995f2 --- /dev/null +++ b/app/src/main/res/drawable/un_group.xml @@ -0,0 +1,15 @@ + + + + + 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..150aa06 --- /dev/null +++ b/app/src/main/res/drawable/un_light.xml @@ -0,0 +1,9 @@ + + + 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..aee6af8 --- /dev/null +++ b/app/src/main/res/drawable/un_reversal.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/un_shoot.xml b/app/src/main/res/drawable/un_shoot.xml new file mode 100644 index 0000000..ce66780 --- /dev/null +++ b/app/src/main/res/drawable/un_shoot.xml @@ -0,0 +1,16 @@ + + + + diff --git a/app/src/main/res/drawable/un_single.xml b/app/src/main/res/drawable/un_single.xml new file mode 100644 index 0000000..e757cf1 --- /dev/null +++ b/app/src/main/res/drawable/un_single.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/unselect_favorite.xml b/app/src/main/res/drawable/unselect_favorite.xml new file mode 100644 index 0000000..083675c --- /dev/null +++ b/app/src/main/res/drawable/unselect_favorite.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/app/src/main/res/drawable/version.xml b/app/src/main/res/drawable/version.xml new file mode 100644 index 0000000..cd5ccbb --- /dev/null +++ b/app/src/main/res/drawable/version.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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..677b773 --- /dev/null +++ b/app/src/main/res/layout/activity_camera.xml @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 5dfe6e2..ab8b855 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -5,15 +5,39 @@ android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" + android:fitsSystemWindows="true" tools:context=".activity.MainActivity"> - + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml new file mode 100644 index 0000000..d46d286 --- /dev/null +++ b/app/src/main/res/layout/activity_setting.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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..685bbea --- /dev/null +++ b/app/src/main/res/layout/fragment_category.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + 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..e63ed79 --- /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_main.xml b/app/src/main/res/layout/fragment_main.xml new file mode 100644 index 0000000..7913a97 --- /dev/null +++ b/app/src/main/res/layout/fragment_main.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_profile.xml b/app/src/main/res/layout/fragment_profile.xml new file mode 100644 index 0000000..2e11985 --- /dev/null +++ b/app/src/main/res/layout/fragment_profile.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + \ 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..b86b2da --- /dev/null +++ b/app/src/main/res/layout/item_category.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_image_viewpager.xml b/app/src/main/res/layout/item_image_viewpager.xml new file mode 100644 index 0000000..bad3659 --- /dev/null +++ b/app/src/main/res/layout/item_image_viewpager.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_image_work.xml b/app/src/main/res/layout/item_image_work.xml new file mode 100644 index 0000000..921f9c4 --- /dev/null +++ b/app/src/main/res/layout/item_image_work.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + 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..50b3912 --- /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..448704e --- /dev/null +++ b/app/src/main/res/layout/main_tab_item_custom.xml @@ -0,0 +1,28 @@ + + + + + + + + diff --git a/app/src/main/res/mipmap-xxxhdpi/logo.png b/app/src/main/res/mipmap-xxxhdpi/logo.png new file mode 100644 index 0000000..06cb17d Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/logo.png 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..5233996 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 b964bee..f480290 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,6 @@ AR Canvas Art + + Hello blank fragment + https://play.google.com/store/apps/details?id=%s \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 55a1cad..900c955 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,6 @@ [versions] agp = "8.5.1" +glide = "4.16.0" junit = "4.13.2" junitVersion = "1.2.1" espressoCore = "3.6.1" @@ -7,8 +8,10 @@ appcompat = "1.7.0" material = "1.12.0" activity = "1.9.3" constraintlayout = "2.1.4" +roomRuntime = "2.6.1" [libraries] +glide = { module = "com.github.bumptech.glide:glide", version.ref = "glide" } junit = { group = "junit", name = "junit", version.ref = "junit" } ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } @@ -16,6 +19,7 @@ appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "a material = { group = "com.google.android.material", name = "material", version.ref = "material" } activity = { group = "androidx.activity", name = "activity", version.ref = "activity" } constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } +room-runtime = { module = "androidx.room:room-runtime", version.ref = "roomRuntime" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" }