commit 6b212dae5192ae36977f92591b6e242165737b5d Author: litingting Date: Thu Dec 5 10:34:08 2024 +0800 V1.0.1(2) topon集成 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..165bf57 --- /dev/null +++ b/.gitignore @@ -0,0 +1,18 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties +app/src/test/java/com/draw/painting/test/ExampleUnitTest.java +.idea/ +.safedk/ diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/TraceDrawing.jks b/app/TraceDrawing.jks new file mode 100644 index 0000000..bda4918 Binary files /dev/null and b/app/TraceDrawing.jks differ diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..7f66716 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,166 @@ +import java.util.Date +import java.text.SimpleDateFormat + +plugins { + id("com.android.application") + id("org.jetbrains.kotlin.android") + id("com.google.firebase.crashlytics") + id("com.google.gms.google-services") + id("io.objectbox") +} +val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date()) +android { + namespace = "com.paint.trace.drawing" + compileSdk = 34 + + defaultConfig { + //com.paint.trace.drawing + applicationId = "com.paint.trace.drawing" + minSdk = 23 + targetSdk = 34 + versionCode = 2 + versionName = "1.0.1" + setProperty( + "archivesBaseName", + "Trace Drawing_V" + versionName + "(${versionCode})_$timestamp" + ) + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = true + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } +// kotlinOptions { +// jvmTarget = "1.8" +// } + buildFeatures { + viewBinding = true + } +} + +dependencies { + + implementation("androidx.appcompat:appcompat:1.7.0") + implementation("com.google.android.material:material:1.12.0") + implementation("androidx.constraintlayout:constraintlayout:2.1.4") + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.1.5") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") + + val camerax_version = "1.1.0-beta01" + //noinspection GradleDependency + implementation("androidx.camera:camera-core:${camerax_version}") + //noinspection GradleDependency + implementation("androidx.camera:camera-camera2:${camerax_version}") + //noinspection GradleDependency + implementation("androidx.camera:camera-lifecycle:${camerax_version}") + //noinspection GradleDependency + implementation("androidx.camera:camera-video:${camerax_version}") + //noinspection GradleDependency + implementation("androidx.camera:camera-view:${camerax_version}") + //noinspection GradleDependency + implementation("androidx.camera:camera-extensions:${camerax_version}") + + implementation(platform("com.google.firebase:firebase-bom:33.1.1")) + implementation("com.google.firebase:firebase-crashlytics") + implementation("com.google.firebase:firebase-analytics") + +//-----------------------------------------------TopOn(Mintegral、Pangle、UnitAds、Digital Turbine(Fyber)、Chartboost&Helium、Ironsource、Liftoff(Vungle)、Inmobi、Start.io、Appnext、Bigo) + + //Anythink (Necessary) + implementation("com.anythink.sdk:core-tpn:6.4.07") + implementation("com.anythink.sdk:nativead-tpn:6.4.07") + implementation("com.anythink.sdk:banner-tpn:6.4.07") + implementation("com.anythink.sdk:interstitial-tpn:6.4.07") + implementation("com.anythink.sdk:rewardedvideo-tpn:6.4.07") + implementation("com.anythink.sdk:splash-tpn:6.4.07") + + //Androidx (Necessary) + implementation("androidx.appcompat:appcompat:1.1.0") + implementation("androidx.browser:browser:1.4.0") + + //StartApp + implementation("com.anythink.sdk:adapter-tpn-startapp:6.4.07") + implementation("com.startapp:inapp-sdk:5.0.2") + + //Appnext + implementation("com.anythink.sdk:adapter-tpn-appnext:6.4.07") + implementation("com.appnext.sdk:ads:2.7.1.473") + implementation("com.appnext.sdk:banners:2.7.1.473") + implementation("com.appnext.sdk:native-ads2:2.7.1.473") + implementation("com.appnext.sdk:actions:2.4.6.472") + implementation("androidx.constraintlayout:constraintlayout:2.0.4") + + //Vungle + implementation("com.anythink.sdk:adapter-tpn-vungle:6.4.07") + implementation("com.vungle:vungle-ads:7.4.0") + implementation("com.google.android.gms:play-services-basement:18.1.0") + implementation("com.google.android.gms:play-services-ads-identifier:18.0.1") + + //UnityAds + implementation("com.anythink.sdk:adapter-tpn-unityads:6.4.07") + implementation("com.unity3d.ads:unity-ads:4.12.2") + + //Ironsource + implementation("com.anythink.sdk:adapter-tpn-ironsource:6.4.07") + implementation("com.ironsource.sdk:mediationsdk:8.2.1") + implementation("com.google.android.gms:play-services-appset:16.0.2") + implementation("com.google.android.gms:play-services-ads-identifier:18.0.1") + implementation("com.google.android.gms:play-services-basement:18.1.0") + + //Bigo + implementation("com.anythink.sdk:adapter-tpn-bigo:6.4.07") + implementation("com.bigossp:bigo-ads:4.9.0") + + //Pangle + implementation("com.anythink.sdk:adapter-tpn-pangle-nonchina:6.4.07") + implementation("com.pangle.global:ads-sdk:6.1.0.9") + implementation("com.google.android.gms:play-services-ads-identifier:18.0.1") + + //Inmobi + implementation("com.anythink.sdk:adapter-tpn-inmobi:6.4.07") + implementation("com.inmobi.monetization:inmobi-ads-kotlin:10.7.5") + + //Mintegral + implementation("com.anythink.sdk:adapter-tpn-mintegral-nonchina:6.4.07") + implementation("com.mbridge.msdk.oversea:reward:16.8.11") + implementation("com.mbridge.msdk.oversea:newinterstitial:16.8.11") + implementation("com.mbridge.msdk.oversea:mbnative:16.8.11") + implementation("com.mbridge.msdk.oversea:mbnativeadvanced:16.8.11") + implementation("com.mbridge.msdk.oversea:mbsplash:16.8.11") + implementation("com.mbridge.msdk.oversea:mbbanner:16.8.11") + implementation("com.mbridge.msdk.oversea:mbbid:16.8.11") + implementation("androidx.recyclerview:recyclerview:1.1.0") + + //Chartboost + implementation("com.anythink.sdk:adapter-tpn-chartboost:6.4.07") + implementation("com.chartboost:chartboost-sdk:9.7.0") + implementation("com.chartboost:chartboost-mediation-sdk:4.9.1") + implementation("com.chartboost:chartboost-mediation-adapter-chartboost:4.9.7.0.0") + implementation("com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:1.0.0") + implementation("com.squareup.okhttp3:logging-interceptor:4.10.0") + implementation("com.squareup.okhttp3:okhttp:4.10.0") + implementation("com.squareup.retrofit2:converter-scalars:2.9.0") + implementation("com.squareup.retrofit2:retrofit:2.9.0") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1") + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1") + + //Fyber + implementation("com.anythink.sdk:adapter-tpn-fyber:6.4.07") + implementation("com.fyber:marketplace-sdk:8.3.0") + implementation("com.google.android.gms:play-services-ads-identifier:18.0.1") + + // Debugger UI Tools + //implementation ("com.anythink.sdk:debugger-ui:1.0.7") + +} \ No newline at end of file diff --git a/app/google-services.json b/app/google-services.json new file mode 100644 index 0000000..2a4890e --- /dev/null +++ b/app/google-services.json @@ -0,0 +1,29 @@ +{ + "project_info": { + "project_number": "208542375606", + "project_id": "trace-drawing-68e2b", + "storage_bucket": "trace-drawing-68e2b.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:208542375606:android:56c1a338055c2c819f5017", + "android_client_info": { + "package_name": "com.paint.trace.drawing" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyAZjv39iIN-RQN6ezTh4BeDVqtqxS_w-Bk" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/objectbox-models/default.json b/app/objectbox-models/default.json new file mode 100644 index 0000000..f95e7f4 --- /dev/null +++ b/app/objectbox-models/default.json @@ -0,0 +1,65 @@ +{ + "_note1": "KEEP THIS FILE! Check it into a version control system (VCS) like git.", + "_note2": "ObjectBox manages crucial IDs for your object model. See docs for details.", + "_note3": "If you have VCS merge conflicts, you must resolve them according to ObjectBox docs.", + "entities": [ + { + "id": "3:6657683755955689878", + "lastPropertyId": "2:7391488554923755890", + "name": "AssetData", + "properties": [ + { + "id": "1:243415540686520025", + "name": "id", + "type": 6, + "flags": 1 + }, + { + "id": "2:7391488554923755890", + "name": "path", + "type": 9 + } + ], + "relations": [] + }, + { + "id": "4:3825568787982449740", + "lastPropertyId": "2:5348030114980625145", + "name": "ImportData", + "properties": [ + { + "id": "1:1837531769919373488", + "name": "id", + "type": 6, + "flags": 1 + }, + { + "id": "2:5348030114980625145", + "name": "uri", + "type": 9 + } + ], + "relations": [] + } + ], + "lastEntityId": "4:3825568787982449740", + "lastIndexId": "0:0", + "lastRelationId": "0:0", + "lastSequenceId": "0:0", + "modelVersion": 5, + "modelVersionParserMinimum": 5, + "retiredEntityUids": [ + 4752690921563405782, + 3683195988363348208 + ], + "retiredIndexUids": [], + "retiredPropertyUids": [ + 8935738795063358965, + 6634881448055585465, + 5221624129603754986, + 5984527578734576412, + 804363456560139643 + ], + "retiredRelationUids": [], + "version": 1 +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..e90305a --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,150 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile + +#---------------------------------------------Topon + -keep class com.startapp.** { + *; + } + + -keep class com.truenet.** { + *; + } + + -keepattributes Exceptions, InnerClasses, Signature, Deprecated, SourceFile, + LineNumberTable, *Annotation*, EnclosingMethod + -dontwarn android.webkit.JavascriptInterface + -dontwarn com.startapp.** + + -dontwarn org.jetbrains.annotations.** + -keep class com.appnext.** { *; } + -dontwarn com.appnext.** + # Vungle + -dontwarn com.vungle.ads.** + -keepclassmembers class com.vungle.ads.** { + *; + } + -keep class com.vungle.ads.** + + + + # Google + -keep class com.google.android.gms.** { *; } + -dontwarn com.google.android.gms.** + + + + + # START OkHttp + Okio + # JSR 305 annotations are for embedding nullability information. + -dontwarn javax.annotation.** + + + # A resource is loaded with a relative path so the package of this class must be preserved. + -adaptresourcefilenames okhttp3/internal/publicsuffix/PublicSuffixDatabase.gz + + + # Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java. + -dontwarn org.codehaus.mojo.animal_sniffer.* + + + # OkHttp platform used only on JVM and when Conscrypt and other security providers are available. + -dontwarn okhttp3.internal.platform.** + -dontwarn org.conscrypt.** + -dontwarn org.bouncycastle.** + -dontwarn org.openjsse.** + + + # Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java. + -dontwarn org.codehaus.mojo.animal_sniffer.* + + + # END OkHttp + Okio + + + # START Protobuf + -dontwarn com.google.protobuf.** + -keepclassmembers class com.google.protobuf.** { + *; + } + -keep class * extends com.google.protobuf.GeneratedMessageLite { *; } + + + # END Protobuf + -keepclassmembers class com.ironsource.sdk.controller.IronSourceWebView$JSInterface { + public *; + } + -keepclassmembers class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; + } + -keep public class com.google.android.gms.ads.** { + public *; + } + -keep class com.ironsource.adapters.** { *; + } + -dontwarn com.ironsource.mediationsdk.** + -dontwarn com.ironsource.adapters.** + -keepattributes JavascriptInterface + -keepclassmembers class * { + @android.webkit.JavascriptInterface ; + } + -keep class com.bytedance.sdk.** { *; } + -keep class com.inmobi.** { *; } + -keep public class com.google.android.gms.** + -dontwarn com.google.android.gms.** + -dontwarn com.squareup.picasso.** + -keep class com.google.android.gms.ads.identifier.AdvertisingIdClient{ + public *; + } + -keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info{ + public *; + } + # skip the Picasso library classes + -keep class com.squareup.picasso.** {*;} + -dontwarn com.squareup.okhttp.** + # skip Moat classes + -keep class com.moat.** {*;} + -dontwarn com.moat.** + # skip IAB classes + -keep class com.iab.** {*;} + -dontwarn com.iab.** + -keepattributes Signature + -keepattributes *Annotation* + -keep class com.mbridge.** {*; } + -keep interface com.mbridge.** {*; } + -keep class android.support.v4.** { *; } + -dontwarn com.mbridge.** + -keep class **.R$* { public static final int mbridge*; } + -keep public class com.mbridge.* extends androidx.** { *; } + -keep public class androidx.viewpager.widget.PagerAdapter{ *; } + -keep public class androidx.viewpager.widget.ViewPager.OnPageChangeListener{ *; } + -keep interface androidx.annotation.IntDef{ *; } + -keep interface androidx.annotation.Nullable{ *; } + -keep interface androidx.annotation.CheckResult{ *; } + -keep interface androidx.annotation.NonNull{ *; } + -keep public class androidx.fragment.app.Fragment{ *; } + -keep public class androidx.core.content.FileProvider{ *; } + -keep public class androidx.core.app.NotificationCompat{ *; } + -keep public class androidx.appcompat.widget.AppCompatImageView { *; } + -keep public class androidx.recyclerview.*{ *; } + -keep class com.chartboost.** { *; } + + #---------------------------------------------Topon \ No newline at end of file diff --git a/app/src/androidTest/java/com/paint/trace/drawing/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/paint/trace/drawing/ExampleInstrumentedTest.java new file mode 100644 index 0000000..422a9ed --- /dev/null +++ b/app/src/androidTest/java/com/paint/trace/drawing/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.paint.trace.drawing; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.draw.painting.test", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..0f209f6 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/12_Mehndi/1.jpg b/app/src/main/assets/12_Mehndi/1.jpg new file mode 100644 index 0000000..8dd8843 Binary files /dev/null and b/app/src/main/assets/12_Mehndi/1.jpg differ diff --git a/app/src/main/assets/12_Mehndi/10.jpg b/app/src/main/assets/12_Mehndi/10.jpg new file mode 100644 index 0000000..2432a79 Binary files /dev/null and b/app/src/main/assets/12_Mehndi/10.jpg differ diff --git a/app/src/main/assets/12_Mehndi/11.jpg b/app/src/main/assets/12_Mehndi/11.jpg new file mode 100644 index 0000000..aba85bf Binary files /dev/null and b/app/src/main/assets/12_Mehndi/11.jpg differ diff --git a/app/src/main/assets/12_Mehndi/12.jpg b/app/src/main/assets/12_Mehndi/12.jpg new file mode 100644 index 0000000..f71ae22 Binary files /dev/null and b/app/src/main/assets/12_Mehndi/12.jpg differ diff --git a/app/src/main/assets/12_Mehndi/2.jpg b/app/src/main/assets/12_Mehndi/2.jpg new file mode 100644 index 0000000..0f56bf7 Binary files /dev/null and b/app/src/main/assets/12_Mehndi/2.jpg differ diff --git a/app/src/main/assets/12_Mehndi/3.jpg b/app/src/main/assets/12_Mehndi/3.jpg new file mode 100644 index 0000000..2bc7b69 Binary files /dev/null and b/app/src/main/assets/12_Mehndi/3.jpg differ diff --git a/app/src/main/assets/12_Mehndi/4.jpg b/app/src/main/assets/12_Mehndi/4.jpg new file mode 100644 index 0000000..6fc3f70 Binary files /dev/null and b/app/src/main/assets/12_Mehndi/4.jpg differ diff --git a/app/src/main/assets/12_Mehndi/5.jpg b/app/src/main/assets/12_Mehndi/5.jpg new file mode 100644 index 0000000..dccb5cf Binary files /dev/null and b/app/src/main/assets/12_Mehndi/5.jpg differ diff --git a/app/src/main/assets/12_Mehndi/6.jpg b/app/src/main/assets/12_Mehndi/6.jpg new file mode 100644 index 0000000..4e052dd Binary files /dev/null and b/app/src/main/assets/12_Mehndi/6.jpg differ diff --git a/app/src/main/assets/12_Mehndi/7.jpg b/app/src/main/assets/12_Mehndi/7.jpg new file mode 100644 index 0000000..021e789 Binary files /dev/null and b/app/src/main/assets/12_Mehndi/7.jpg differ diff --git a/app/src/main/assets/12_Mehndi/8.jpg b/app/src/main/assets/12_Mehndi/8.jpg new file mode 100644 index 0000000..dd45b50 Binary files /dev/null and b/app/src/main/assets/12_Mehndi/8.jpg differ diff --git a/app/src/main/assets/12_Mehndi/9.jpg b/app/src/main/assets/12_Mehndi/9.jpg new file mode 100644 index 0000000..6ff2300 Binary files /dev/null and b/app/src/main/assets/12_Mehndi/9.jpg differ diff --git a/app/src/main/assets/15_General/1.jpg b/app/src/main/assets/15_General/1.jpg new file mode 100644 index 0000000..eb7c14b Binary files /dev/null and b/app/src/main/assets/15_General/1.jpg differ diff --git a/app/src/main/assets/15_General/10.jpg b/app/src/main/assets/15_General/10.jpg new file mode 100644 index 0000000..eacd298 Binary files /dev/null and b/app/src/main/assets/15_General/10.jpg differ diff --git a/app/src/main/assets/15_General/11.jpg b/app/src/main/assets/15_General/11.jpg new file mode 100644 index 0000000..273a876 Binary files /dev/null and b/app/src/main/assets/15_General/11.jpg differ diff --git a/app/src/main/assets/15_General/12.jpg b/app/src/main/assets/15_General/12.jpg new file mode 100644 index 0000000..5d786c5 Binary files /dev/null and b/app/src/main/assets/15_General/12.jpg differ diff --git a/app/src/main/assets/15_General/13.jpg b/app/src/main/assets/15_General/13.jpg new file mode 100644 index 0000000..486441a Binary files /dev/null and b/app/src/main/assets/15_General/13.jpg differ diff --git a/app/src/main/assets/15_General/14.jpg b/app/src/main/assets/15_General/14.jpg new file mode 100644 index 0000000..c36516b Binary files /dev/null and b/app/src/main/assets/15_General/14.jpg differ diff --git a/app/src/main/assets/15_General/15.jpg b/app/src/main/assets/15_General/15.jpg new file mode 100644 index 0000000..9d19fdf Binary files /dev/null and b/app/src/main/assets/15_General/15.jpg differ diff --git a/app/src/main/assets/15_General/2.jpg b/app/src/main/assets/15_General/2.jpg new file mode 100644 index 0000000..090d5d5 Binary files /dev/null and b/app/src/main/assets/15_General/2.jpg differ diff --git a/app/src/main/assets/15_General/3.jpg b/app/src/main/assets/15_General/3.jpg new file mode 100644 index 0000000..a17f1b2 Binary files /dev/null and b/app/src/main/assets/15_General/3.jpg differ diff --git a/app/src/main/assets/15_General/4.jpg b/app/src/main/assets/15_General/4.jpg new file mode 100644 index 0000000..2f4d8a2 Binary files /dev/null and b/app/src/main/assets/15_General/4.jpg differ diff --git a/app/src/main/assets/15_General/5.jpg b/app/src/main/assets/15_General/5.jpg new file mode 100644 index 0000000..8ac1cdb Binary files /dev/null and b/app/src/main/assets/15_General/5.jpg differ diff --git a/app/src/main/assets/15_General/6.jpg b/app/src/main/assets/15_General/6.jpg new file mode 100644 index 0000000..95cc582 Binary files /dev/null and b/app/src/main/assets/15_General/6.jpg differ diff --git a/app/src/main/assets/15_General/7.jpg b/app/src/main/assets/15_General/7.jpg new file mode 100644 index 0000000..91cbcfd Binary files /dev/null and b/app/src/main/assets/15_General/7.jpg differ diff --git a/app/src/main/assets/15_General/8.jpg b/app/src/main/assets/15_General/8.jpg new file mode 100644 index 0000000..af8da73 Binary files /dev/null and b/app/src/main/assets/15_General/8.jpg differ diff --git a/app/src/main/assets/15_General/9.jpg b/app/src/main/assets/15_General/9.jpg new file mode 100644 index 0000000..d5cfb72 Binary files /dev/null and b/app/src/main/assets/15_General/9.jpg differ diff --git a/app/src/main/assets/19_Properties/1.jpg b/app/src/main/assets/19_Properties/1.jpg new file mode 100644 index 0000000..3289a38 Binary files /dev/null and b/app/src/main/assets/19_Properties/1.jpg differ diff --git a/app/src/main/assets/19_Properties/10.jpg b/app/src/main/assets/19_Properties/10.jpg new file mode 100644 index 0000000..b065539 Binary files /dev/null and b/app/src/main/assets/19_Properties/10.jpg differ diff --git a/app/src/main/assets/19_Properties/11.jpg b/app/src/main/assets/19_Properties/11.jpg new file mode 100644 index 0000000..12d28b1 Binary files /dev/null and b/app/src/main/assets/19_Properties/11.jpg differ diff --git a/app/src/main/assets/19_Properties/12.jpg b/app/src/main/assets/19_Properties/12.jpg new file mode 100644 index 0000000..182879f Binary files /dev/null and b/app/src/main/assets/19_Properties/12.jpg differ diff --git a/app/src/main/assets/19_Properties/13.jpg b/app/src/main/assets/19_Properties/13.jpg new file mode 100644 index 0000000..4263530 Binary files /dev/null and b/app/src/main/assets/19_Properties/13.jpg differ diff --git a/app/src/main/assets/19_Properties/14.jpg b/app/src/main/assets/19_Properties/14.jpg new file mode 100644 index 0000000..42e4ab3 Binary files /dev/null and b/app/src/main/assets/19_Properties/14.jpg differ diff --git a/app/src/main/assets/19_Properties/15.jpg b/app/src/main/assets/19_Properties/15.jpg new file mode 100644 index 0000000..b529436 Binary files /dev/null and b/app/src/main/assets/19_Properties/15.jpg differ diff --git a/app/src/main/assets/19_Properties/16.jpg b/app/src/main/assets/19_Properties/16.jpg new file mode 100644 index 0000000..85caef0 Binary files /dev/null and b/app/src/main/assets/19_Properties/16.jpg differ diff --git a/app/src/main/assets/19_Properties/17.jpg b/app/src/main/assets/19_Properties/17.jpg new file mode 100644 index 0000000..6295f58 Binary files /dev/null and b/app/src/main/assets/19_Properties/17.jpg differ diff --git a/app/src/main/assets/19_Properties/18.jpg b/app/src/main/assets/19_Properties/18.jpg new file mode 100644 index 0000000..f8e4e87 Binary files /dev/null and b/app/src/main/assets/19_Properties/18.jpg differ diff --git a/app/src/main/assets/19_Properties/19.jpg b/app/src/main/assets/19_Properties/19.jpg new file mode 100644 index 0000000..c476493 Binary files /dev/null and b/app/src/main/assets/19_Properties/19.jpg differ diff --git a/app/src/main/assets/19_Properties/2.jpg b/app/src/main/assets/19_Properties/2.jpg new file mode 100644 index 0000000..084fa51 Binary files /dev/null and b/app/src/main/assets/19_Properties/2.jpg differ diff --git a/app/src/main/assets/19_Properties/3.jpg b/app/src/main/assets/19_Properties/3.jpg new file mode 100644 index 0000000..4ee71c4 Binary files /dev/null and b/app/src/main/assets/19_Properties/3.jpg differ diff --git a/app/src/main/assets/19_Properties/4.jpg b/app/src/main/assets/19_Properties/4.jpg new file mode 100644 index 0000000..25912f1 Binary files /dev/null and b/app/src/main/assets/19_Properties/4.jpg differ diff --git a/app/src/main/assets/19_Properties/5.jpg b/app/src/main/assets/19_Properties/5.jpg new file mode 100644 index 0000000..77c2aa8 Binary files /dev/null and b/app/src/main/assets/19_Properties/5.jpg differ diff --git a/app/src/main/assets/19_Properties/6.jpg b/app/src/main/assets/19_Properties/6.jpg new file mode 100644 index 0000000..75b1e32 Binary files /dev/null and b/app/src/main/assets/19_Properties/6.jpg differ diff --git a/app/src/main/assets/19_Properties/7.jpg b/app/src/main/assets/19_Properties/7.jpg new file mode 100644 index 0000000..f059989 Binary files /dev/null and b/app/src/main/assets/19_Properties/7.jpg differ diff --git a/app/src/main/assets/19_Properties/8.jpg b/app/src/main/assets/19_Properties/8.jpg new file mode 100644 index 0000000..6be97eb Binary files /dev/null and b/app/src/main/assets/19_Properties/8.jpg differ diff --git a/app/src/main/assets/19_Properties/9.jpg b/app/src/main/assets/19_Properties/9.jpg new file mode 100644 index 0000000..626cab9 Binary files /dev/null and b/app/src/main/assets/19_Properties/9.jpg differ diff --git a/app/src/main/assets/22_Festivals/1.jpg b/app/src/main/assets/22_Festivals/1.jpg new file mode 100644 index 0000000..125d632 Binary files /dev/null and b/app/src/main/assets/22_Festivals/1.jpg differ diff --git a/app/src/main/assets/22_Festivals/10.jpg b/app/src/main/assets/22_Festivals/10.jpg new file mode 100644 index 0000000..d17b9f1 Binary files /dev/null and b/app/src/main/assets/22_Festivals/10.jpg differ diff --git a/app/src/main/assets/22_Festivals/11.jpg b/app/src/main/assets/22_Festivals/11.jpg new file mode 100644 index 0000000..702f052 Binary files /dev/null and b/app/src/main/assets/22_Festivals/11.jpg differ diff --git a/app/src/main/assets/22_Festivals/12.jpg b/app/src/main/assets/22_Festivals/12.jpg new file mode 100644 index 0000000..6f231e1 Binary files /dev/null and b/app/src/main/assets/22_Festivals/12.jpg differ diff --git a/app/src/main/assets/22_Festivals/13.jpg b/app/src/main/assets/22_Festivals/13.jpg new file mode 100644 index 0000000..20556a1 Binary files /dev/null and b/app/src/main/assets/22_Festivals/13.jpg differ diff --git a/app/src/main/assets/22_Festivals/14.jpg b/app/src/main/assets/22_Festivals/14.jpg new file mode 100644 index 0000000..fb78127 Binary files /dev/null and b/app/src/main/assets/22_Festivals/14.jpg differ diff --git a/app/src/main/assets/22_Festivals/15.jpg b/app/src/main/assets/22_Festivals/15.jpg new file mode 100644 index 0000000..e74f47e Binary files /dev/null and b/app/src/main/assets/22_Festivals/15.jpg differ diff --git a/app/src/main/assets/22_Festivals/16.jpg b/app/src/main/assets/22_Festivals/16.jpg new file mode 100644 index 0000000..136f6e8 Binary files /dev/null and b/app/src/main/assets/22_Festivals/16.jpg differ diff --git a/app/src/main/assets/22_Festivals/17.jpg b/app/src/main/assets/22_Festivals/17.jpg new file mode 100644 index 0000000..fd50e67 Binary files /dev/null and b/app/src/main/assets/22_Festivals/17.jpg differ diff --git a/app/src/main/assets/22_Festivals/18.jpg b/app/src/main/assets/22_Festivals/18.jpg new file mode 100644 index 0000000..d3f7936 Binary files /dev/null and b/app/src/main/assets/22_Festivals/18.jpg differ diff --git a/app/src/main/assets/22_Festivals/19.jpg b/app/src/main/assets/22_Festivals/19.jpg new file mode 100644 index 0000000..9a4f1b8 Binary files /dev/null and b/app/src/main/assets/22_Festivals/19.jpg differ diff --git a/app/src/main/assets/22_Festivals/2.jpg b/app/src/main/assets/22_Festivals/2.jpg new file mode 100644 index 0000000..84aa31a Binary files /dev/null and b/app/src/main/assets/22_Festivals/2.jpg differ diff --git a/app/src/main/assets/22_Festivals/20.jpg b/app/src/main/assets/22_Festivals/20.jpg new file mode 100644 index 0000000..268c943 Binary files /dev/null and b/app/src/main/assets/22_Festivals/20.jpg differ diff --git a/app/src/main/assets/22_Festivals/21.jpg b/app/src/main/assets/22_Festivals/21.jpg new file mode 100644 index 0000000..614bffd Binary files /dev/null and b/app/src/main/assets/22_Festivals/21.jpg differ diff --git a/app/src/main/assets/22_Festivals/22.jpg b/app/src/main/assets/22_Festivals/22.jpg new file mode 100644 index 0000000..f81eb8d Binary files /dev/null and b/app/src/main/assets/22_Festivals/22.jpg differ diff --git a/app/src/main/assets/22_Festivals/3.jpg b/app/src/main/assets/22_Festivals/3.jpg new file mode 100644 index 0000000..5ca2b11 Binary files /dev/null and b/app/src/main/assets/22_Festivals/3.jpg differ diff --git a/app/src/main/assets/22_Festivals/4.jpg b/app/src/main/assets/22_Festivals/4.jpg new file mode 100644 index 0000000..1f8cc81 Binary files /dev/null and b/app/src/main/assets/22_Festivals/4.jpg differ diff --git a/app/src/main/assets/22_Festivals/5.jpg b/app/src/main/assets/22_Festivals/5.jpg new file mode 100644 index 0000000..7f1bd1a Binary files /dev/null and b/app/src/main/assets/22_Festivals/5.jpg differ diff --git a/app/src/main/assets/22_Festivals/6.jpg b/app/src/main/assets/22_Festivals/6.jpg new file mode 100644 index 0000000..9cf832a Binary files /dev/null and b/app/src/main/assets/22_Festivals/6.jpg differ diff --git a/app/src/main/assets/22_Festivals/7.jpg b/app/src/main/assets/22_Festivals/7.jpg new file mode 100644 index 0000000..dcd83f3 Binary files /dev/null and b/app/src/main/assets/22_Festivals/7.jpg differ diff --git a/app/src/main/assets/22_Festivals/8.jpg b/app/src/main/assets/22_Festivals/8.jpg new file mode 100644 index 0000000..1117f09 Binary files /dev/null and b/app/src/main/assets/22_Festivals/8.jpg differ diff --git a/app/src/main/assets/22_Festivals/9.jpg b/app/src/main/assets/22_Festivals/9.jpg new file mode 100644 index 0000000..39d8467 Binary files /dev/null and b/app/src/main/assets/22_Festivals/9.jpg differ diff --git a/app/src/main/assets/23_Flowers/1.jpg b/app/src/main/assets/23_Flowers/1.jpg new file mode 100644 index 0000000..217d9c8 Binary files /dev/null and b/app/src/main/assets/23_Flowers/1.jpg differ diff --git a/app/src/main/assets/23_Flowers/10.jpg b/app/src/main/assets/23_Flowers/10.jpg new file mode 100644 index 0000000..ba84e61 Binary files /dev/null and b/app/src/main/assets/23_Flowers/10.jpg differ diff --git a/app/src/main/assets/23_Flowers/11.jpg b/app/src/main/assets/23_Flowers/11.jpg new file mode 100644 index 0000000..e579753 Binary files /dev/null and b/app/src/main/assets/23_Flowers/11.jpg differ diff --git a/app/src/main/assets/23_Flowers/12.jpg b/app/src/main/assets/23_Flowers/12.jpg new file mode 100644 index 0000000..26092f9 Binary files /dev/null and b/app/src/main/assets/23_Flowers/12.jpg differ diff --git a/app/src/main/assets/23_Flowers/13.jpg b/app/src/main/assets/23_Flowers/13.jpg new file mode 100644 index 0000000..41d2df3 Binary files /dev/null and b/app/src/main/assets/23_Flowers/13.jpg differ diff --git a/app/src/main/assets/23_Flowers/14.jpg b/app/src/main/assets/23_Flowers/14.jpg new file mode 100644 index 0000000..c44df66 Binary files /dev/null and b/app/src/main/assets/23_Flowers/14.jpg differ diff --git a/app/src/main/assets/23_Flowers/15.jpg b/app/src/main/assets/23_Flowers/15.jpg new file mode 100644 index 0000000..ea34d36 Binary files /dev/null and b/app/src/main/assets/23_Flowers/15.jpg differ diff --git a/app/src/main/assets/23_Flowers/16.jpg b/app/src/main/assets/23_Flowers/16.jpg new file mode 100644 index 0000000..506beb1 Binary files /dev/null and b/app/src/main/assets/23_Flowers/16.jpg differ diff --git a/app/src/main/assets/23_Flowers/17.jpg b/app/src/main/assets/23_Flowers/17.jpg new file mode 100644 index 0000000..3764b21 Binary files /dev/null and b/app/src/main/assets/23_Flowers/17.jpg differ diff --git a/app/src/main/assets/23_Flowers/18.jpg b/app/src/main/assets/23_Flowers/18.jpg new file mode 100644 index 0000000..a759ab6 Binary files /dev/null and b/app/src/main/assets/23_Flowers/18.jpg differ diff --git a/app/src/main/assets/23_Flowers/19.jpg b/app/src/main/assets/23_Flowers/19.jpg new file mode 100644 index 0000000..e8c2a84 Binary files /dev/null and b/app/src/main/assets/23_Flowers/19.jpg differ diff --git a/app/src/main/assets/23_Flowers/2.jpg b/app/src/main/assets/23_Flowers/2.jpg new file mode 100644 index 0000000..fb7e56f Binary files /dev/null and b/app/src/main/assets/23_Flowers/2.jpg differ diff --git a/app/src/main/assets/23_Flowers/20.jpg b/app/src/main/assets/23_Flowers/20.jpg new file mode 100644 index 0000000..93e5408 Binary files /dev/null and b/app/src/main/assets/23_Flowers/20.jpg differ diff --git a/app/src/main/assets/23_Flowers/21.jpg b/app/src/main/assets/23_Flowers/21.jpg new file mode 100644 index 0000000..4fa3a77 Binary files /dev/null and b/app/src/main/assets/23_Flowers/21.jpg differ diff --git a/app/src/main/assets/23_Flowers/22.jpg b/app/src/main/assets/23_Flowers/22.jpg new file mode 100644 index 0000000..6f45df7 Binary files /dev/null and b/app/src/main/assets/23_Flowers/22.jpg differ diff --git a/app/src/main/assets/23_Flowers/23.jpg b/app/src/main/assets/23_Flowers/23.jpg new file mode 100644 index 0000000..46e806d Binary files /dev/null and b/app/src/main/assets/23_Flowers/23.jpg differ diff --git a/app/src/main/assets/23_Flowers/3.jpg b/app/src/main/assets/23_Flowers/3.jpg new file mode 100644 index 0000000..22a741c Binary files /dev/null and b/app/src/main/assets/23_Flowers/3.jpg differ diff --git a/app/src/main/assets/23_Flowers/4.jpg b/app/src/main/assets/23_Flowers/4.jpg new file mode 100644 index 0000000..dd0a30f Binary files /dev/null and b/app/src/main/assets/23_Flowers/4.jpg differ diff --git a/app/src/main/assets/23_Flowers/5.jpg b/app/src/main/assets/23_Flowers/5.jpg new file mode 100644 index 0000000..9dcb4f5 Binary files /dev/null and b/app/src/main/assets/23_Flowers/5.jpg differ diff --git a/app/src/main/assets/23_Flowers/6.jpg b/app/src/main/assets/23_Flowers/6.jpg new file mode 100644 index 0000000..cdf1f65 Binary files /dev/null and b/app/src/main/assets/23_Flowers/6.jpg differ diff --git a/app/src/main/assets/23_Flowers/7.jpg b/app/src/main/assets/23_Flowers/7.jpg new file mode 100644 index 0000000..caab990 Binary files /dev/null and b/app/src/main/assets/23_Flowers/7.jpg differ diff --git a/app/src/main/assets/23_Flowers/8.jpg b/app/src/main/assets/23_Flowers/8.jpg new file mode 100644 index 0000000..c43832b Binary files /dev/null and b/app/src/main/assets/23_Flowers/8.jpg differ diff --git a/app/src/main/assets/23_Flowers/9.jpg b/app/src/main/assets/23_Flowers/9.jpg new file mode 100644 index 0000000..5b78ee1 Binary files /dev/null and b/app/src/main/assets/23_Flowers/9.jpg differ diff --git a/app/src/main/assets/23_Nature/1.jpg b/app/src/main/assets/23_Nature/1.jpg new file mode 100644 index 0000000..22c00e3 Binary files /dev/null and b/app/src/main/assets/23_Nature/1.jpg differ diff --git a/app/src/main/assets/23_Nature/10.jpg b/app/src/main/assets/23_Nature/10.jpg new file mode 100644 index 0000000..65aab09 Binary files /dev/null and b/app/src/main/assets/23_Nature/10.jpg differ diff --git a/app/src/main/assets/23_Nature/11.jpg b/app/src/main/assets/23_Nature/11.jpg new file mode 100644 index 0000000..23c6653 Binary files /dev/null and b/app/src/main/assets/23_Nature/11.jpg differ diff --git a/app/src/main/assets/23_Nature/12.jpg b/app/src/main/assets/23_Nature/12.jpg new file mode 100644 index 0000000..36e1835 Binary files /dev/null and b/app/src/main/assets/23_Nature/12.jpg differ diff --git a/app/src/main/assets/23_Nature/13.jpg b/app/src/main/assets/23_Nature/13.jpg new file mode 100644 index 0000000..5816b61 Binary files /dev/null and b/app/src/main/assets/23_Nature/13.jpg differ diff --git a/app/src/main/assets/23_Nature/14.jpg b/app/src/main/assets/23_Nature/14.jpg new file mode 100644 index 0000000..b4e5dc6 Binary files /dev/null and b/app/src/main/assets/23_Nature/14.jpg differ diff --git a/app/src/main/assets/23_Nature/15.jpg b/app/src/main/assets/23_Nature/15.jpg new file mode 100644 index 0000000..5424ac4 Binary files /dev/null and b/app/src/main/assets/23_Nature/15.jpg differ diff --git a/app/src/main/assets/23_Nature/16.jpg b/app/src/main/assets/23_Nature/16.jpg new file mode 100644 index 0000000..fd00791 Binary files /dev/null and b/app/src/main/assets/23_Nature/16.jpg differ diff --git a/app/src/main/assets/23_Nature/17.jpg b/app/src/main/assets/23_Nature/17.jpg new file mode 100644 index 0000000..38410e8 Binary files /dev/null and b/app/src/main/assets/23_Nature/17.jpg differ diff --git a/app/src/main/assets/23_Nature/18.jpg b/app/src/main/assets/23_Nature/18.jpg new file mode 100644 index 0000000..5ae5028 Binary files /dev/null and b/app/src/main/assets/23_Nature/18.jpg differ diff --git a/app/src/main/assets/23_Nature/19.jpg b/app/src/main/assets/23_Nature/19.jpg new file mode 100644 index 0000000..e49b4f1 Binary files /dev/null and b/app/src/main/assets/23_Nature/19.jpg differ diff --git a/app/src/main/assets/23_Nature/2.jpg b/app/src/main/assets/23_Nature/2.jpg new file mode 100644 index 0000000..3b5ec4c Binary files /dev/null and b/app/src/main/assets/23_Nature/2.jpg differ diff --git a/app/src/main/assets/23_Nature/20.jpg b/app/src/main/assets/23_Nature/20.jpg new file mode 100644 index 0000000..cc94724 Binary files /dev/null and b/app/src/main/assets/23_Nature/20.jpg differ diff --git a/app/src/main/assets/23_Nature/21.jpg b/app/src/main/assets/23_Nature/21.jpg new file mode 100644 index 0000000..dfa6c09 Binary files /dev/null and b/app/src/main/assets/23_Nature/21.jpg differ diff --git a/app/src/main/assets/23_Nature/22.jpg b/app/src/main/assets/23_Nature/22.jpg new file mode 100644 index 0000000..c05e638 Binary files /dev/null and b/app/src/main/assets/23_Nature/22.jpg differ diff --git a/app/src/main/assets/23_Nature/23.jpg b/app/src/main/assets/23_Nature/23.jpg new file mode 100644 index 0000000..6f932ec Binary files /dev/null and b/app/src/main/assets/23_Nature/23.jpg differ diff --git a/app/src/main/assets/23_Nature/3.jpg b/app/src/main/assets/23_Nature/3.jpg new file mode 100644 index 0000000..1423546 Binary files /dev/null and b/app/src/main/assets/23_Nature/3.jpg differ diff --git a/app/src/main/assets/23_Nature/4.jpg b/app/src/main/assets/23_Nature/4.jpg new file mode 100644 index 0000000..5499510 Binary files /dev/null and b/app/src/main/assets/23_Nature/4.jpg differ diff --git a/app/src/main/assets/23_Nature/5.jpg b/app/src/main/assets/23_Nature/5.jpg new file mode 100644 index 0000000..434261a Binary files /dev/null and b/app/src/main/assets/23_Nature/5.jpg differ diff --git a/app/src/main/assets/23_Nature/6.jpg b/app/src/main/assets/23_Nature/6.jpg new file mode 100644 index 0000000..f50166b Binary files /dev/null and b/app/src/main/assets/23_Nature/6.jpg differ diff --git a/app/src/main/assets/23_Nature/7.jpg b/app/src/main/assets/23_Nature/7.jpg new file mode 100644 index 0000000..96e178c Binary files /dev/null and b/app/src/main/assets/23_Nature/7.jpg differ diff --git a/app/src/main/assets/23_Nature/8.jpg b/app/src/main/assets/23_Nature/8.jpg new file mode 100644 index 0000000..c68f4f1 Binary files /dev/null and b/app/src/main/assets/23_Nature/8.jpg differ diff --git a/app/src/main/assets/23_Nature/9.jpg b/app/src/main/assets/23_Nature/9.jpg new file mode 100644 index 0000000..6b8ccb4 Binary files /dev/null and b/app/src/main/assets/23_Nature/9.jpg differ diff --git a/app/src/main/assets/25_Christmas/1.jpg b/app/src/main/assets/25_Christmas/1.jpg new file mode 100644 index 0000000..cc1fafb Binary files /dev/null and b/app/src/main/assets/25_Christmas/1.jpg differ diff --git a/app/src/main/assets/25_Christmas/10.jpg b/app/src/main/assets/25_Christmas/10.jpg new file mode 100644 index 0000000..e5e63d6 Binary files /dev/null and b/app/src/main/assets/25_Christmas/10.jpg differ diff --git a/app/src/main/assets/25_Christmas/11.jpg b/app/src/main/assets/25_Christmas/11.jpg new file mode 100644 index 0000000..cae5d66 Binary files /dev/null and b/app/src/main/assets/25_Christmas/11.jpg differ diff --git a/app/src/main/assets/25_Christmas/12.jpg b/app/src/main/assets/25_Christmas/12.jpg new file mode 100644 index 0000000..13fd21f Binary files /dev/null and b/app/src/main/assets/25_Christmas/12.jpg differ diff --git a/app/src/main/assets/25_Christmas/13.jpg b/app/src/main/assets/25_Christmas/13.jpg new file mode 100644 index 0000000..1fa30fe Binary files /dev/null and b/app/src/main/assets/25_Christmas/13.jpg differ diff --git a/app/src/main/assets/25_Christmas/14.jpg b/app/src/main/assets/25_Christmas/14.jpg new file mode 100644 index 0000000..aec6dcf Binary files /dev/null and b/app/src/main/assets/25_Christmas/14.jpg differ diff --git a/app/src/main/assets/25_Christmas/15.jpg b/app/src/main/assets/25_Christmas/15.jpg new file mode 100644 index 0000000..647c8b6 Binary files /dev/null and b/app/src/main/assets/25_Christmas/15.jpg differ diff --git a/app/src/main/assets/25_Christmas/16.jpg b/app/src/main/assets/25_Christmas/16.jpg new file mode 100644 index 0000000..b36a79c Binary files /dev/null and b/app/src/main/assets/25_Christmas/16.jpg differ diff --git a/app/src/main/assets/25_Christmas/17.jpg b/app/src/main/assets/25_Christmas/17.jpg new file mode 100644 index 0000000..2655af2 Binary files /dev/null and b/app/src/main/assets/25_Christmas/17.jpg differ diff --git a/app/src/main/assets/25_Christmas/18.jpg b/app/src/main/assets/25_Christmas/18.jpg new file mode 100644 index 0000000..e784d64 Binary files /dev/null and b/app/src/main/assets/25_Christmas/18.jpg differ diff --git a/app/src/main/assets/25_Christmas/19.jpg b/app/src/main/assets/25_Christmas/19.jpg new file mode 100644 index 0000000..fcf2085 Binary files /dev/null and b/app/src/main/assets/25_Christmas/19.jpg differ diff --git a/app/src/main/assets/25_Christmas/2.jpg b/app/src/main/assets/25_Christmas/2.jpg new file mode 100644 index 0000000..326e86b Binary files /dev/null and b/app/src/main/assets/25_Christmas/2.jpg differ diff --git a/app/src/main/assets/25_Christmas/20.jpg b/app/src/main/assets/25_Christmas/20.jpg new file mode 100644 index 0000000..a9e3c89 Binary files /dev/null and b/app/src/main/assets/25_Christmas/20.jpg differ diff --git a/app/src/main/assets/25_Christmas/21.jpg b/app/src/main/assets/25_Christmas/21.jpg new file mode 100644 index 0000000..71b4150 Binary files /dev/null and b/app/src/main/assets/25_Christmas/21.jpg differ diff --git a/app/src/main/assets/25_Christmas/22.jpg b/app/src/main/assets/25_Christmas/22.jpg new file mode 100644 index 0000000..3c99d0d Binary files /dev/null and b/app/src/main/assets/25_Christmas/22.jpg differ diff --git a/app/src/main/assets/25_Christmas/23.jpg b/app/src/main/assets/25_Christmas/23.jpg new file mode 100644 index 0000000..32c3b03 Binary files /dev/null and b/app/src/main/assets/25_Christmas/23.jpg differ diff --git a/app/src/main/assets/25_Christmas/24.jpg b/app/src/main/assets/25_Christmas/24.jpg new file mode 100644 index 0000000..80fd836 Binary files /dev/null and b/app/src/main/assets/25_Christmas/24.jpg differ diff --git a/app/src/main/assets/25_Christmas/25.jpg b/app/src/main/assets/25_Christmas/25.jpg new file mode 100644 index 0000000..8e2bef6 Binary files /dev/null and b/app/src/main/assets/25_Christmas/25.jpg differ diff --git a/app/src/main/assets/25_Christmas/3.jpg b/app/src/main/assets/25_Christmas/3.jpg new file mode 100644 index 0000000..4c24cd2 Binary files /dev/null and b/app/src/main/assets/25_Christmas/3.jpg differ diff --git a/app/src/main/assets/25_Christmas/4.jpg b/app/src/main/assets/25_Christmas/4.jpg new file mode 100644 index 0000000..28fb1b0 Binary files /dev/null and b/app/src/main/assets/25_Christmas/4.jpg differ diff --git a/app/src/main/assets/25_Christmas/5.jpg b/app/src/main/assets/25_Christmas/5.jpg new file mode 100644 index 0000000..93ad555 Binary files /dev/null and b/app/src/main/assets/25_Christmas/5.jpg differ diff --git a/app/src/main/assets/25_Christmas/6.jpg b/app/src/main/assets/25_Christmas/6.jpg new file mode 100644 index 0000000..02fe302 Binary files /dev/null and b/app/src/main/assets/25_Christmas/6.jpg differ diff --git a/app/src/main/assets/25_Christmas/7.jpg b/app/src/main/assets/25_Christmas/7.jpg new file mode 100644 index 0000000..dc41982 Binary files /dev/null and b/app/src/main/assets/25_Christmas/7.jpg differ diff --git a/app/src/main/assets/25_Christmas/8.jpg b/app/src/main/assets/25_Christmas/8.jpg new file mode 100644 index 0000000..5f13019 Binary files /dev/null and b/app/src/main/assets/25_Christmas/8.jpg differ diff --git a/app/src/main/assets/25_Christmas/9.jpg b/app/src/main/assets/25_Christmas/9.jpg new file mode 100644 index 0000000..e556980 Binary files /dev/null and b/app/src/main/assets/25_Christmas/9.jpg differ diff --git a/app/src/main/assets/25_Rangoli/1.jpg b/app/src/main/assets/25_Rangoli/1.jpg new file mode 100644 index 0000000..e628714 Binary files /dev/null and b/app/src/main/assets/25_Rangoli/1.jpg differ diff --git a/app/src/main/assets/25_Rangoli/10.jpg b/app/src/main/assets/25_Rangoli/10.jpg new file mode 100644 index 0000000..f6e9d09 Binary files /dev/null and b/app/src/main/assets/25_Rangoli/10.jpg differ diff --git a/app/src/main/assets/25_Rangoli/13.jpg b/app/src/main/assets/25_Rangoli/13.jpg new file mode 100644 index 0000000..9741d57 Binary files /dev/null and b/app/src/main/assets/25_Rangoli/13.jpg differ diff --git a/app/src/main/assets/25_Rangoli/14.jpg b/app/src/main/assets/25_Rangoli/14.jpg new file mode 100644 index 0000000..3ca4970 Binary files /dev/null and b/app/src/main/assets/25_Rangoli/14.jpg differ diff --git a/app/src/main/assets/25_Rangoli/15.jpg b/app/src/main/assets/25_Rangoli/15.jpg new file mode 100644 index 0000000..98abac3 Binary files /dev/null and b/app/src/main/assets/25_Rangoli/15.jpg differ diff --git a/app/src/main/assets/25_Rangoli/16.jpg b/app/src/main/assets/25_Rangoli/16.jpg new file mode 100644 index 0000000..150dfdc Binary files /dev/null and b/app/src/main/assets/25_Rangoli/16.jpg differ diff --git a/app/src/main/assets/25_Rangoli/17.jpg b/app/src/main/assets/25_Rangoli/17.jpg new file mode 100644 index 0000000..4127115 Binary files /dev/null and b/app/src/main/assets/25_Rangoli/17.jpg differ diff --git a/app/src/main/assets/25_Rangoli/18.jpg b/app/src/main/assets/25_Rangoli/18.jpg new file mode 100644 index 0000000..6ae96e9 Binary files /dev/null and b/app/src/main/assets/25_Rangoli/18.jpg differ diff --git a/app/src/main/assets/25_Rangoli/19.jpg b/app/src/main/assets/25_Rangoli/19.jpg new file mode 100644 index 0000000..ffcbd6a Binary files /dev/null and b/app/src/main/assets/25_Rangoli/19.jpg differ diff --git a/app/src/main/assets/25_Rangoli/2.jpg b/app/src/main/assets/25_Rangoli/2.jpg new file mode 100644 index 0000000..7329109 Binary files /dev/null and b/app/src/main/assets/25_Rangoli/2.jpg differ diff --git a/app/src/main/assets/25_Rangoli/20.jpg b/app/src/main/assets/25_Rangoli/20.jpg new file mode 100644 index 0000000..b7be138 Binary files /dev/null and b/app/src/main/assets/25_Rangoli/20.jpg differ diff --git a/app/src/main/assets/25_Rangoli/21.jpg b/app/src/main/assets/25_Rangoli/21.jpg new file mode 100644 index 0000000..eaa5fdf Binary files /dev/null and b/app/src/main/assets/25_Rangoli/21.jpg differ diff --git a/app/src/main/assets/25_Rangoli/22.jpg b/app/src/main/assets/25_Rangoli/22.jpg new file mode 100644 index 0000000..28aca48 Binary files /dev/null and b/app/src/main/assets/25_Rangoli/22.jpg differ diff --git a/app/src/main/assets/25_Rangoli/23.jpg b/app/src/main/assets/25_Rangoli/23.jpg new file mode 100644 index 0000000..057d2d4 Binary files /dev/null and b/app/src/main/assets/25_Rangoli/23.jpg differ diff --git a/app/src/main/assets/25_Rangoli/24.jpg b/app/src/main/assets/25_Rangoli/24.jpg new file mode 100644 index 0000000..e933061 Binary files /dev/null and b/app/src/main/assets/25_Rangoli/24.jpg differ diff --git a/app/src/main/assets/25_Rangoli/25.jpg b/app/src/main/assets/25_Rangoli/25.jpg new file mode 100644 index 0000000..569a74c Binary files /dev/null and b/app/src/main/assets/25_Rangoli/25.jpg differ diff --git a/app/src/main/assets/25_Rangoli/3.jpg b/app/src/main/assets/25_Rangoli/3.jpg new file mode 100644 index 0000000..569342c Binary files /dev/null and b/app/src/main/assets/25_Rangoli/3.jpg differ diff --git a/app/src/main/assets/25_Rangoli/4.jpg b/app/src/main/assets/25_Rangoli/4.jpg new file mode 100644 index 0000000..7c5d0de Binary files /dev/null and b/app/src/main/assets/25_Rangoli/4.jpg differ diff --git a/app/src/main/assets/25_Rangoli/5.jpg b/app/src/main/assets/25_Rangoli/5.jpg new file mode 100644 index 0000000..5a3228f Binary files /dev/null and b/app/src/main/assets/25_Rangoli/5.jpg differ diff --git a/app/src/main/assets/25_Rangoli/6.jpg b/app/src/main/assets/25_Rangoli/6.jpg new file mode 100644 index 0000000..270f078 Binary files /dev/null and b/app/src/main/assets/25_Rangoli/6.jpg differ diff --git a/app/src/main/assets/25_Rangoli/7.jpg b/app/src/main/assets/25_Rangoli/7.jpg new file mode 100644 index 0000000..241beac Binary files /dev/null and b/app/src/main/assets/25_Rangoli/7.jpg differ diff --git a/app/src/main/assets/25_Rangoli/8.jpg b/app/src/main/assets/25_Rangoli/8.jpg new file mode 100644 index 0000000..c62e0d7 Binary files /dev/null and b/app/src/main/assets/25_Rangoli/8.jpg differ diff --git a/app/src/main/assets/25_Rangoli/9.jpg b/app/src/main/assets/25_Rangoli/9.jpg new file mode 100644 index 0000000..bcd14a7 Binary files /dev/null and b/app/src/main/assets/25_Rangoli/9.jpg differ diff --git a/app/src/main/assets/26_Cartoons/1.jpg b/app/src/main/assets/26_Cartoons/1.jpg new file mode 100644 index 0000000..74bf123 Binary files /dev/null and b/app/src/main/assets/26_Cartoons/1.jpg differ diff --git a/app/src/main/assets/26_Cartoons/10.jpg b/app/src/main/assets/26_Cartoons/10.jpg new file mode 100644 index 0000000..450fa6e Binary files /dev/null and b/app/src/main/assets/26_Cartoons/10.jpg differ diff --git a/app/src/main/assets/26_Cartoons/11.jpg b/app/src/main/assets/26_Cartoons/11.jpg new file mode 100644 index 0000000..1f2a904 Binary files /dev/null and b/app/src/main/assets/26_Cartoons/11.jpg differ diff --git a/app/src/main/assets/26_Cartoons/12.jpg b/app/src/main/assets/26_Cartoons/12.jpg new file mode 100644 index 0000000..86ef206 Binary files /dev/null and b/app/src/main/assets/26_Cartoons/12.jpg differ diff --git a/app/src/main/assets/26_Cartoons/13.jpg b/app/src/main/assets/26_Cartoons/13.jpg new file mode 100644 index 0000000..92e1d75 Binary files /dev/null and b/app/src/main/assets/26_Cartoons/13.jpg differ diff --git a/app/src/main/assets/26_Cartoons/14.jpg b/app/src/main/assets/26_Cartoons/14.jpg new file mode 100644 index 0000000..c82e897 Binary files /dev/null and b/app/src/main/assets/26_Cartoons/14.jpg differ diff --git a/app/src/main/assets/26_Cartoons/15.jpg b/app/src/main/assets/26_Cartoons/15.jpg new file mode 100644 index 0000000..bcd8678 Binary files /dev/null and b/app/src/main/assets/26_Cartoons/15.jpg differ diff --git a/app/src/main/assets/26_Cartoons/16.jpg b/app/src/main/assets/26_Cartoons/16.jpg new file mode 100644 index 0000000..18377bd Binary files /dev/null and b/app/src/main/assets/26_Cartoons/16.jpg differ diff --git a/app/src/main/assets/26_Cartoons/17.jpg b/app/src/main/assets/26_Cartoons/17.jpg new file mode 100644 index 0000000..45aafbb Binary files /dev/null and b/app/src/main/assets/26_Cartoons/17.jpg differ diff --git a/app/src/main/assets/26_Cartoons/18.jpg b/app/src/main/assets/26_Cartoons/18.jpg new file mode 100644 index 0000000..048d253 Binary files /dev/null and b/app/src/main/assets/26_Cartoons/18.jpg differ diff --git a/app/src/main/assets/26_Cartoons/19.jpg b/app/src/main/assets/26_Cartoons/19.jpg new file mode 100644 index 0000000..c2501b2 Binary files /dev/null and b/app/src/main/assets/26_Cartoons/19.jpg differ diff --git a/app/src/main/assets/26_Cartoons/2.jpg b/app/src/main/assets/26_Cartoons/2.jpg new file mode 100644 index 0000000..8baf95b Binary files /dev/null and b/app/src/main/assets/26_Cartoons/2.jpg differ diff --git a/app/src/main/assets/26_Cartoons/20.jpg b/app/src/main/assets/26_Cartoons/20.jpg new file mode 100644 index 0000000..fb7901c Binary files /dev/null and b/app/src/main/assets/26_Cartoons/20.jpg differ diff --git a/app/src/main/assets/26_Cartoons/21.jpg b/app/src/main/assets/26_Cartoons/21.jpg new file mode 100644 index 0000000..ed7104e Binary files /dev/null and b/app/src/main/assets/26_Cartoons/21.jpg differ diff --git a/app/src/main/assets/26_Cartoons/22.jpg b/app/src/main/assets/26_Cartoons/22.jpg new file mode 100644 index 0000000..cd003eb Binary files /dev/null and b/app/src/main/assets/26_Cartoons/22.jpg differ diff --git a/app/src/main/assets/26_Cartoons/23.jpg b/app/src/main/assets/26_Cartoons/23.jpg new file mode 100644 index 0000000..77b49a4 Binary files /dev/null and b/app/src/main/assets/26_Cartoons/23.jpg differ diff --git a/app/src/main/assets/26_Cartoons/24.jpg b/app/src/main/assets/26_Cartoons/24.jpg new file mode 100644 index 0000000..1c7dc65 Binary files /dev/null and b/app/src/main/assets/26_Cartoons/24.jpg differ diff --git a/app/src/main/assets/26_Cartoons/25.jpg b/app/src/main/assets/26_Cartoons/25.jpg new file mode 100644 index 0000000..442aec2 Binary files /dev/null and b/app/src/main/assets/26_Cartoons/25.jpg differ diff --git a/app/src/main/assets/26_Cartoons/26.jpg b/app/src/main/assets/26_Cartoons/26.jpg new file mode 100644 index 0000000..ec4a2ff Binary files /dev/null and b/app/src/main/assets/26_Cartoons/26.jpg differ diff --git a/app/src/main/assets/26_Cartoons/3.jpg b/app/src/main/assets/26_Cartoons/3.jpg new file mode 100644 index 0000000..e099902 Binary files /dev/null and b/app/src/main/assets/26_Cartoons/3.jpg differ diff --git a/app/src/main/assets/26_Cartoons/4.jpg b/app/src/main/assets/26_Cartoons/4.jpg new file mode 100644 index 0000000..a4c69ba Binary files /dev/null and b/app/src/main/assets/26_Cartoons/4.jpg differ diff --git a/app/src/main/assets/26_Cartoons/5.jpg b/app/src/main/assets/26_Cartoons/5.jpg new file mode 100644 index 0000000..b32485d Binary files /dev/null and b/app/src/main/assets/26_Cartoons/5.jpg differ diff --git a/app/src/main/assets/26_Cartoons/6.jpg b/app/src/main/assets/26_Cartoons/6.jpg new file mode 100644 index 0000000..0e0a7ef Binary files /dev/null and b/app/src/main/assets/26_Cartoons/6.jpg differ diff --git a/app/src/main/assets/26_Cartoons/7.jpg b/app/src/main/assets/26_Cartoons/7.jpg new file mode 100644 index 0000000..ecd8dc0 Binary files /dev/null and b/app/src/main/assets/26_Cartoons/7.jpg differ diff --git a/app/src/main/assets/26_Cartoons/8.jpg b/app/src/main/assets/26_Cartoons/8.jpg new file mode 100644 index 0000000..f6ea587 Binary files /dev/null and b/app/src/main/assets/26_Cartoons/8.jpg differ diff --git a/app/src/main/assets/26_Cartoons/9.jpg b/app/src/main/assets/26_Cartoons/9.jpg new file mode 100644 index 0000000..da4c151 Binary files /dev/null and b/app/src/main/assets/26_Cartoons/9.jpg differ diff --git a/app/src/main/assets/28_Sports/1.jpg b/app/src/main/assets/28_Sports/1.jpg new file mode 100644 index 0000000..cd1cb09 Binary files /dev/null and b/app/src/main/assets/28_Sports/1.jpg differ diff --git a/app/src/main/assets/28_Sports/10.jpg b/app/src/main/assets/28_Sports/10.jpg new file mode 100644 index 0000000..2ec81a5 Binary files /dev/null and b/app/src/main/assets/28_Sports/10.jpg differ diff --git a/app/src/main/assets/28_Sports/11.jpg b/app/src/main/assets/28_Sports/11.jpg new file mode 100644 index 0000000..f00ecb5 Binary files /dev/null and b/app/src/main/assets/28_Sports/11.jpg differ diff --git a/app/src/main/assets/28_Sports/12.jpg b/app/src/main/assets/28_Sports/12.jpg new file mode 100644 index 0000000..b004929 Binary files /dev/null and b/app/src/main/assets/28_Sports/12.jpg differ diff --git a/app/src/main/assets/28_Sports/13.jpg b/app/src/main/assets/28_Sports/13.jpg new file mode 100644 index 0000000..73fa886 Binary files /dev/null and b/app/src/main/assets/28_Sports/13.jpg differ diff --git a/app/src/main/assets/28_Sports/14.jpg b/app/src/main/assets/28_Sports/14.jpg new file mode 100644 index 0000000..3d9069e Binary files /dev/null and b/app/src/main/assets/28_Sports/14.jpg differ diff --git a/app/src/main/assets/28_Sports/15.jpg b/app/src/main/assets/28_Sports/15.jpg new file mode 100644 index 0000000..a090c83 Binary files /dev/null and b/app/src/main/assets/28_Sports/15.jpg differ diff --git a/app/src/main/assets/28_Sports/16.jpg b/app/src/main/assets/28_Sports/16.jpg new file mode 100644 index 0000000..185d6e3 Binary files /dev/null and b/app/src/main/assets/28_Sports/16.jpg differ diff --git a/app/src/main/assets/28_Sports/17.jpg b/app/src/main/assets/28_Sports/17.jpg new file mode 100644 index 0000000..b8193fa Binary files /dev/null and b/app/src/main/assets/28_Sports/17.jpg differ diff --git a/app/src/main/assets/28_Sports/18.jpg b/app/src/main/assets/28_Sports/18.jpg new file mode 100644 index 0000000..ba4fcea Binary files /dev/null and b/app/src/main/assets/28_Sports/18.jpg differ diff --git a/app/src/main/assets/28_Sports/19.jpg b/app/src/main/assets/28_Sports/19.jpg new file mode 100644 index 0000000..617c2af Binary files /dev/null and b/app/src/main/assets/28_Sports/19.jpg differ diff --git a/app/src/main/assets/28_Sports/2.jpg b/app/src/main/assets/28_Sports/2.jpg new file mode 100644 index 0000000..59890e5 Binary files /dev/null and b/app/src/main/assets/28_Sports/2.jpg differ diff --git a/app/src/main/assets/28_Sports/20.jpg b/app/src/main/assets/28_Sports/20.jpg new file mode 100644 index 0000000..4032ff4 Binary files /dev/null and b/app/src/main/assets/28_Sports/20.jpg differ diff --git a/app/src/main/assets/28_Sports/21.jpg b/app/src/main/assets/28_Sports/21.jpg new file mode 100644 index 0000000..23979ba Binary files /dev/null and b/app/src/main/assets/28_Sports/21.jpg differ diff --git a/app/src/main/assets/28_Sports/22.jpg b/app/src/main/assets/28_Sports/22.jpg new file mode 100644 index 0000000..c61e91e Binary files /dev/null and b/app/src/main/assets/28_Sports/22.jpg differ diff --git a/app/src/main/assets/28_Sports/23.jpg b/app/src/main/assets/28_Sports/23.jpg new file mode 100644 index 0000000..7bf0806 Binary files /dev/null and b/app/src/main/assets/28_Sports/23.jpg differ diff --git a/app/src/main/assets/28_Sports/24.jpg b/app/src/main/assets/28_Sports/24.jpg new file mode 100644 index 0000000..23cbc17 Binary files /dev/null and b/app/src/main/assets/28_Sports/24.jpg differ diff --git a/app/src/main/assets/28_Sports/25.jpg b/app/src/main/assets/28_Sports/25.jpg new file mode 100644 index 0000000..06d992e Binary files /dev/null and b/app/src/main/assets/28_Sports/25.jpg differ diff --git a/app/src/main/assets/28_Sports/26.jpg b/app/src/main/assets/28_Sports/26.jpg new file mode 100644 index 0000000..26af61e Binary files /dev/null and b/app/src/main/assets/28_Sports/26.jpg differ diff --git a/app/src/main/assets/28_Sports/27.jpg b/app/src/main/assets/28_Sports/27.jpg new file mode 100644 index 0000000..91bf104 Binary files /dev/null and b/app/src/main/assets/28_Sports/27.jpg differ diff --git a/app/src/main/assets/28_Sports/28.jpg b/app/src/main/assets/28_Sports/28.jpg new file mode 100644 index 0000000..8c790e7 Binary files /dev/null and b/app/src/main/assets/28_Sports/28.jpg differ diff --git a/app/src/main/assets/28_Sports/3.jpg b/app/src/main/assets/28_Sports/3.jpg new file mode 100644 index 0000000..8315af5 Binary files /dev/null and b/app/src/main/assets/28_Sports/3.jpg differ diff --git a/app/src/main/assets/28_Sports/4.jpg b/app/src/main/assets/28_Sports/4.jpg new file mode 100644 index 0000000..8070e68 Binary files /dev/null and b/app/src/main/assets/28_Sports/4.jpg differ diff --git a/app/src/main/assets/28_Sports/5.jpg b/app/src/main/assets/28_Sports/5.jpg new file mode 100644 index 0000000..5bcb837 Binary files /dev/null and b/app/src/main/assets/28_Sports/5.jpg differ diff --git a/app/src/main/assets/28_Sports/6.jpg b/app/src/main/assets/28_Sports/6.jpg new file mode 100644 index 0000000..038521f Binary files /dev/null and b/app/src/main/assets/28_Sports/6.jpg differ diff --git a/app/src/main/assets/28_Sports/7.jpg b/app/src/main/assets/28_Sports/7.jpg new file mode 100644 index 0000000..73bf0de Binary files /dev/null and b/app/src/main/assets/28_Sports/7.jpg differ diff --git a/app/src/main/assets/28_Sports/8.jpg b/app/src/main/assets/28_Sports/8.jpg new file mode 100644 index 0000000..6c565f8 Binary files /dev/null and b/app/src/main/assets/28_Sports/8.jpg differ diff --git a/app/src/main/assets/28_Sports/9.jpg b/app/src/main/assets/28_Sports/9.jpg new file mode 100644 index 0000000..130cd94 Binary files /dev/null and b/app/src/main/assets/28_Sports/9.jpg differ diff --git a/app/src/main/assets/32_Vehicles/1.jpg b/app/src/main/assets/32_Vehicles/1.jpg new file mode 100644 index 0000000..da449f7 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/1.jpg differ diff --git a/app/src/main/assets/32_Vehicles/10.jpg b/app/src/main/assets/32_Vehicles/10.jpg new file mode 100644 index 0000000..0084613 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/10.jpg differ diff --git a/app/src/main/assets/32_Vehicles/11.jpg b/app/src/main/assets/32_Vehicles/11.jpg new file mode 100644 index 0000000..ba5f4d4 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/11.jpg differ diff --git a/app/src/main/assets/32_Vehicles/12.jpg b/app/src/main/assets/32_Vehicles/12.jpg new file mode 100644 index 0000000..32c7908 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/12.jpg differ diff --git a/app/src/main/assets/32_Vehicles/13.jpg b/app/src/main/assets/32_Vehicles/13.jpg new file mode 100644 index 0000000..dd47e76 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/13.jpg differ diff --git a/app/src/main/assets/32_Vehicles/14.jpg b/app/src/main/assets/32_Vehicles/14.jpg new file mode 100644 index 0000000..8b886e6 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/14.jpg differ diff --git a/app/src/main/assets/32_Vehicles/15.jpg b/app/src/main/assets/32_Vehicles/15.jpg new file mode 100644 index 0000000..cf78752 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/15.jpg differ diff --git a/app/src/main/assets/32_Vehicles/16.jpg b/app/src/main/assets/32_Vehicles/16.jpg new file mode 100644 index 0000000..87f8a19 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/16.jpg differ diff --git a/app/src/main/assets/32_Vehicles/17.jpg b/app/src/main/assets/32_Vehicles/17.jpg new file mode 100644 index 0000000..011b53b Binary files /dev/null and b/app/src/main/assets/32_Vehicles/17.jpg differ diff --git a/app/src/main/assets/32_Vehicles/18.jpg b/app/src/main/assets/32_Vehicles/18.jpg new file mode 100644 index 0000000..c4433c8 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/18.jpg differ diff --git a/app/src/main/assets/32_Vehicles/19.jpg b/app/src/main/assets/32_Vehicles/19.jpg new file mode 100644 index 0000000..b9361f1 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/19.jpg differ diff --git a/app/src/main/assets/32_Vehicles/2.jpg b/app/src/main/assets/32_Vehicles/2.jpg new file mode 100644 index 0000000..ff06675 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/2.jpg differ diff --git a/app/src/main/assets/32_Vehicles/20.jpg b/app/src/main/assets/32_Vehicles/20.jpg new file mode 100644 index 0000000..3e22c5c Binary files /dev/null and b/app/src/main/assets/32_Vehicles/20.jpg differ diff --git a/app/src/main/assets/32_Vehicles/21.jpg b/app/src/main/assets/32_Vehicles/21.jpg new file mode 100644 index 0000000..f93b99a Binary files /dev/null and b/app/src/main/assets/32_Vehicles/21.jpg differ diff --git a/app/src/main/assets/32_Vehicles/22.jpg b/app/src/main/assets/32_Vehicles/22.jpg new file mode 100644 index 0000000..952afa9 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/22.jpg differ diff --git a/app/src/main/assets/32_Vehicles/23.jpg b/app/src/main/assets/32_Vehicles/23.jpg new file mode 100644 index 0000000..a6e1c25 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/23.jpg differ diff --git a/app/src/main/assets/32_Vehicles/24.jpg b/app/src/main/assets/32_Vehicles/24.jpg new file mode 100644 index 0000000..83c706a Binary files /dev/null and b/app/src/main/assets/32_Vehicles/24.jpg differ diff --git a/app/src/main/assets/32_Vehicles/25.jpg b/app/src/main/assets/32_Vehicles/25.jpg new file mode 100644 index 0000000..6ebdbf7 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/25.jpg differ diff --git a/app/src/main/assets/32_Vehicles/26.jpg b/app/src/main/assets/32_Vehicles/26.jpg new file mode 100644 index 0000000..3805357 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/26.jpg differ diff --git a/app/src/main/assets/32_Vehicles/27.jpg b/app/src/main/assets/32_Vehicles/27.jpg new file mode 100644 index 0000000..0849027 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/27.jpg differ diff --git a/app/src/main/assets/32_Vehicles/28.jpg b/app/src/main/assets/32_Vehicles/28.jpg new file mode 100644 index 0000000..019baa9 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/28.jpg differ diff --git a/app/src/main/assets/32_Vehicles/29.jpg b/app/src/main/assets/32_Vehicles/29.jpg new file mode 100644 index 0000000..c7e0d3a Binary files /dev/null and b/app/src/main/assets/32_Vehicles/29.jpg differ diff --git a/app/src/main/assets/32_Vehicles/3.jpg b/app/src/main/assets/32_Vehicles/3.jpg new file mode 100644 index 0000000..eb33365 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/3.jpg differ diff --git a/app/src/main/assets/32_Vehicles/30.jpg b/app/src/main/assets/32_Vehicles/30.jpg new file mode 100644 index 0000000..3820102 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/30.jpg differ diff --git a/app/src/main/assets/32_Vehicles/31.jpg b/app/src/main/assets/32_Vehicles/31.jpg new file mode 100644 index 0000000..bba9999 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/31.jpg differ diff --git a/app/src/main/assets/32_Vehicles/32.jpg b/app/src/main/assets/32_Vehicles/32.jpg new file mode 100644 index 0000000..6d64a3f Binary files /dev/null and b/app/src/main/assets/32_Vehicles/32.jpg differ diff --git a/app/src/main/assets/32_Vehicles/4.jpg b/app/src/main/assets/32_Vehicles/4.jpg new file mode 100644 index 0000000..968f0ad Binary files /dev/null and b/app/src/main/assets/32_Vehicles/4.jpg differ diff --git a/app/src/main/assets/32_Vehicles/5.jpg b/app/src/main/assets/32_Vehicles/5.jpg new file mode 100644 index 0000000..abdd96c Binary files /dev/null and b/app/src/main/assets/32_Vehicles/5.jpg differ diff --git a/app/src/main/assets/32_Vehicles/6.jpg b/app/src/main/assets/32_Vehicles/6.jpg new file mode 100644 index 0000000..7eeb870 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/6.jpg differ diff --git a/app/src/main/assets/32_Vehicles/7.jpg b/app/src/main/assets/32_Vehicles/7.jpg new file mode 100644 index 0000000..c5e6294 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/7.jpg differ diff --git a/app/src/main/assets/32_Vehicles/8.jpg b/app/src/main/assets/32_Vehicles/8.jpg new file mode 100644 index 0000000..6628782 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/8.jpg differ diff --git a/app/src/main/assets/32_Vehicles/9.jpg b/app/src/main/assets/32_Vehicles/9.jpg new file mode 100644 index 0000000..367b772 Binary files /dev/null and b/app/src/main/assets/32_Vehicles/9.jpg differ diff --git a/app/src/main/assets/38_Cafe/1.jpg b/app/src/main/assets/38_Cafe/1.jpg new file mode 100644 index 0000000..b347b44 Binary files /dev/null and b/app/src/main/assets/38_Cafe/1.jpg differ diff --git a/app/src/main/assets/38_Cafe/10.jpg b/app/src/main/assets/38_Cafe/10.jpg new file mode 100644 index 0000000..3728490 Binary files /dev/null and b/app/src/main/assets/38_Cafe/10.jpg differ diff --git a/app/src/main/assets/38_Cafe/11.jpg b/app/src/main/assets/38_Cafe/11.jpg new file mode 100644 index 0000000..bff21e1 Binary files /dev/null and b/app/src/main/assets/38_Cafe/11.jpg differ diff --git a/app/src/main/assets/38_Cafe/12.jpg b/app/src/main/assets/38_Cafe/12.jpg new file mode 100644 index 0000000..3966d4a Binary files /dev/null and b/app/src/main/assets/38_Cafe/12.jpg differ diff --git a/app/src/main/assets/38_Cafe/13.jpg b/app/src/main/assets/38_Cafe/13.jpg new file mode 100644 index 0000000..8200e12 Binary files /dev/null and b/app/src/main/assets/38_Cafe/13.jpg differ diff --git a/app/src/main/assets/38_Cafe/14.jpg b/app/src/main/assets/38_Cafe/14.jpg new file mode 100644 index 0000000..65ee383 Binary files /dev/null and b/app/src/main/assets/38_Cafe/14.jpg differ diff --git a/app/src/main/assets/38_Cafe/15.jpg b/app/src/main/assets/38_Cafe/15.jpg new file mode 100644 index 0000000..01df5e5 Binary files /dev/null and b/app/src/main/assets/38_Cafe/15.jpg differ diff --git a/app/src/main/assets/38_Cafe/16.jpg b/app/src/main/assets/38_Cafe/16.jpg new file mode 100644 index 0000000..ff679c1 Binary files /dev/null and b/app/src/main/assets/38_Cafe/16.jpg differ diff --git a/app/src/main/assets/38_Cafe/17.jpg b/app/src/main/assets/38_Cafe/17.jpg new file mode 100644 index 0000000..42fdf87 Binary files /dev/null and b/app/src/main/assets/38_Cafe/17.jpg differ diff --git a/app/src/main/assets/38_Cafe/18.jpg b/app/src/main/assets/38_Cafe/18.jpg new file mode 100644 index 0000000..06d300e Binary files /dev/null and b/app/src/main/assets/38_Cafe/18.jpg differ diff --git a/app/src/main/assets/38_Cafe/19.jpg b/app/src/main/assets/38_Cafe/19.jpg new file mode 100644 index 0000000..42aaa2c Binary files /dev/null and b/app/src/main/assets/38_Cafe/19.jpg differ diff --git a/app/src/main/assets/38_Cafe/2.jpg b/app/src/main/assets/38_Cafe/2.jpg new file mode 100644 index 0000000..14d9b25 Binary files /dev/null and b/app/src/main/assets/38_Cafe/2.jpg differ diff --git a/app/src/main/assets/38_Cafe/20.jpg b/app/src/main/assets/38_Cafe/20.jpg new file mode 100644 index 0000000..5dad84c Binary files /dev/null and b/app/src/main/assets/38_Cafe/20.jpg differ diff --git a/app/src/main/assets/38_Cafe/21.jpg b/app/src/main/assets/38_Cafe/21.jpg new file mode 100644 index 0000000..c019faa Binary files /dev/null and b/app/src/main/assets/38_Cafe/21.jpg differ diff --git a/app/src/main/assets/38_Cafe/22.jpg b/app/src/main/assets/38_Cafe/22.jpg new file mode 100644 index 0000000..28cdc4e Binary files /dev/null and b/app/src/main/assets/38_Cafe/22.jpg differ diff --git a/app/src/main/assets/38_Cafe/23.jpg b/app/src/main/assets/38_Cafe/23.jpg new file mode 100644 index 0000000..973a5c2 Binary files /dev/null and b/app/src/main/assets/38_Cafe/23.jpg differ diff --git a/app/src/main/assets/38_Cafe/24.jpg b/app/src/main/assets/38_Cafe/24.jpg new file mode 100644 index 0000000..3c36d8a Binary files /dev/null and b/app/src/main/assets/38_Cafe/24.jpg differ diff --git a/app/src/main/assets/38_Cafe/25.jpg b/app/src/main/assets/38_Cafe/25.jpg new file mode 100644 index 0000000..c7be496 Binary files /dev/null and b/app/src/main/assets/38_Cafe/25.jpg differ diff --git a/app/src/main/assets/38_Cafe/26.jpg b/app/src/main/assets/38_Cafe/26.jpg new file mode 100644 index 0000000..7229696 Binary files /dev/null and b/app/src/main/assets/38_Cafe/26.jpg differ diff --git a/app/src/main/assets/38_Cafe/27.jpg b/app/src/main/assets/38_Cafe/27.jpg new file mode 100644 index 0000000..f857542 Binary files /dev/null and b/app/src/main/assets/38_Cafe/27.jpg differ diff --git a/app/src/main/assets/38_Cafe/28.jpg b/app/src/main/assets/38_Cafe/28.jpg new file mode 100644 index 0000000..8cde6de Binary files /dev/null and b/app/src/main/assets/38_Cafe/28.jpg differ diff --git a/app/src/main/assets/38_Cafe/29.jpg b/app/src/main/assets/38_Cafe/29.jpg new file mode 100644 index 0000000..8affd30 Binary files /dev/null and b/app/src/main/assets/38_Cafe/29.jpg differ diff --git a/app/src/main/assets/38_Cafe/3.jpg b/app/src/main/assets/38_Cafe/3.jpg new file mode 100644 index 0000000..b1c3cfa Binary files /dev/null and b/app/src/main/assets/38_Cafe/3.jpg differ diff --git a/app/src/main/assets/38_Cafe/30.jpg b/app/src/main/assets/38_Cafe/30.jpg new file mode 100644 index 0000000..f71ce84 Binary files /dev/null and b/app/src/main/assets/38_Cafe/30.jpg differ diff --git a/app/src/main/assets/38_Cafe/31.jpg b/app/src/main/assets/38_Cafe/31.jpg new file mode 100644 index 0000000..a5d22ca Binary files /dev/null and b/app/src/main/assets/38_Cafe/31.jpg differ diff --git a/app/src/main/assets/38_Cafe/32.jpg b/app/src/main/assets/38_Cafe/32.jpg new file mode 100644 index 0000000..8513a5e Binary files /dev/null and b/app/src/main/assets/38_Cafe/32.jpg differ diff --git a/app/src/main/assets/38_Cafe/33.jpg b/app/src/main/assets/38_Cafe/33.jpg new file mode 100644 index 0000000..fcdcbcc Binary files /dev/null and b/app/src/main/assets/38_Cafe/33.jpg differ diff --git a/app/src/main/assets/38_Cafe/34.jpg b/app/src/main/assets/38_Cafe/34.jpg new file mode 100644 index 0000000..51bbf4b Binary files /dev/null and b/app/src/main/assets/38_Cafe/34.jpg differ diff --git a/app/src/main/assets/38_Cafe/35.jpg b/app/src/main/assets/38_Cafe/35.jpg new file mode 100644 index 0000000..e1067da Binary files /dev/null and b/app/src/main/assets/38_Cafe/35.jpg differ diff --git a/app/src/main/assets/38_Cafe/36.jpg b/app/src/main/assets/38_Cafe/36.jpg new file mode 100644 index 0000000..181a84a Binary files /dev/null and b/app/src/main/assets/38_Cafe/36.jpg differ diff --git a/app/src/main/assets/38_Cafe/37.jpg b/app/src/main/assets/38_Cafe/37.jpg new file mode 100644 index 0000000..d8ffb00 Binary files /dev/null and b/app/src/main/assets/38_Cafe/37.jpg differ diff --git a/app/src/main/assets/38_Cafe/38.jpg b/app/src/main/assets/38_Cafe/38.jpg new file mode 100644 index 0000000..abdba50 Binary files /dev/null and b/app/src/main/assets/38_Cafe/38.jpg differ diff --git a/app/src/main/assets/38_Cafe/4.jpg b/app/src/main/assets/38_Cafe/4.jpg new file mode 100644 index 0000000..8792f16 Binary files /dev/null and b/app/src/main/assets/38_Cafe/4.jpg differ diff --git a/app/src/main/assets/38_Cafe/5.jpg b/app/src/main/assets/38_Cafe/5.jpg new file mode 100644 index 0000000..89630aa Binary files /dev/null and b/app/src/main/assets/38_Cafe/5.jpg differ diff --git a/app/src/main/assets/38_Cafe/6.jpg b/app/src/main/assets/38_Cafe/6.jpg new file mode 100644 index 0000000..7e6832e Binary files /dev/null and b/app/src/main/assets/38_Cafe/6.jpg differ diff --git a/app/src/main/assets/38_Cafe/7.jpg b/app/src/main/assets/38_Cafe/7.jpg new file mode 100644 index 0000000..f4d2afb Binary files /dev/null and b/app/src/main/assets/38_Cafe/7.jpg differ diff --git a/app/src/main/assets/38_Cafe/8.jpg b/app/src/main/assets/38_Cafe/8.jpg new file mode 100644 index 0000000..78f5ccf Binary files /dev/null and b/app/src/main/assets/38_Cafe/8.jpg differ diff --git a/app/src/main/assets/38_Cafe/9.jpg b/app/src/main/assets/38_Cafe/9.jpg new file mode 100644 index 0000000..4038bb5 Binary files /dev/null and b/app/src/main/assets/38_Cafe/9.jpg differ diff --git a/app/src/main/assets/39_Fruits/1.jpg b/app/src/main/assets/39_Fruits/1.jpg new file mode 100644 index 0000000..767c0b4 Binary files /dev/null and b/app/src/main/assets/39_Fruits/1.jpg differ diff --git a/app/src/main/assets/39_Fruits/10.jpg b/app/src/main/assets/39_Fruits/10.jpg new file mode 100644 index 0000000..95bdbca Binary files /dev/null and b/app/src/main/assets/39_Fruits/10.jpg differ diff --git a/app/src/main/assets/39_Fruits/11.jpg b/app/src/main/assets/39_Fruits/11.jpg new file mode 100644 index 0000000..b0bb89a Binary files /dev/null and b/app/src/main/assets/39_Fruits/11.jpg differ diff --git a/app/src/main/assets/39_Fruits/12.jpg b/app/src/main/assets/39_Fruits/12.jpg new file mode 100644 index 0000000..c1d9bad Binary files /dev/null and b/app/src/main/assets/39_Fruits/12.jpg differ diff --git a/app/src/main/assets/39_Fruits/13.jpg b/app/src/main/assets/39_Fruits/13.jpg new file mode 100644 index 0000000..f44fb86 Binary files /dev/null and b/app/src/main/assets/39_Fruits/13.jpg differ diff --git a/app/src/main/assets/39_Fruits/14.jpg b/app/src/main/assets/39_Fruits/14.jpg new file mode 100644 index 0000000..459a60c Binary files /dev/null and b/app/src/main/assets/39_Fruits/14.jpg differ diff --git a/app/src/main/assets/39_Fruits/15.jpg b/app/src/main/assets/39_Fruits/15.jpg new file mode 100644 index 0000000..a4e4abe Binary files /dev/null and b/app/src/main/assets/39_Fruits/15.jpg differ diff --git a/app/src/main/assets/39_Fruits/16.jpg b/app/src/main/assets/39_Fruits/16.jpg new file mode 100644 index 0000000..33a7a9a Binary files /dev/null and b/app/src/main/assets/39_Fruits/16.jpg differ diff --git a/app/src/main/assets/39_Fruits/17.jpg b/app/src/main/assets/39_Fruits/17.jpg new file mode 100644 index 0000000..c193b1e Binary files /dev/null and b/app/src/main/assets/39_Fruits/17.jpg differ diff --git a/app/src/main/assets/39_Fruits/18.jpg b/app/src/main/assets/39_Fruits/18.jpg new file mode 100644 index 0000000..f0ca248 Binary files /dev/null and b/app/src/main/assets/39_Fruits/18.jpg differ diff --git a/app/src/main/assets/39_Fruits/19.jpg b/app/src/main/assets/39_Fruits/19.jpg new file mode 100644 index 0000000..d93dfde Binary files /dev/null and b/app/src/main/assets/39_Fruits/19.jpg differ diff --git a/app/src/main/assets/39_Fruits/2.jpg b/app/src/main/assets/39_Fruits/2.jpg new file mode 100644 index 0000000..b32f9f5 Binary files /dev/null and b/app/src/main/assets/39_Fruits/2.jpg differ diff --git a/app/src/main/assets/39_Fruits/20.jpg b/app/src/main/assets/39_Fruits/20.jpg new file mode 100644 index 0000000..cc3fe93 Binary files /dev/null and b/app/src/main/assets/39_Fruits/20.jpg differ diff --git a/app/src/main/assets/39_Fruits/21.jpg b/app/src/main/assets/39_Fruits/21.jpg new file mode 100644 index 0000000..c1813eb Binary files /dev/null and b/app/src/main/assets/39_Fruits/21.jpg differ diff --git a/app/src/main/assets/39_Fruits/22.jpg b/app/src/main/assets/39_Fruits/22.jpg new file mode 100644 index 0000000..47387e1 Binary files /dev/null and b/app/src/main/assets/39_Fruits/22.jpg differ diff --git a/app/src/main/assets/39_Fruits/23.jpg b/app/src/main/assets/39_Fruits/23.jpg new file mode 100644 index 0000000..7f173ec Binary files /dev/null and b/app/src/main/assets/39_Fruits/23.jpg differ diff --git a/app/src/main/assets/39_Fruits/24.jpg b/app/src/main/assets/39_Fruits/24.jpg new file mode 100644 index 0000000..a7ae235 Binary files /dev/null and b/app/src/main/assets/39_Fruits/24.jpg differ diff --git a/app/src/main/assets/39_Fruits/25.jpg b/app/src/main/assets/39_Fruits/25.jpg new file mode 100644 index 0000000..dd664bb Binary files /dev/null and b/app/src/main/assets/39_Fruits/25.jpg differ diff --git a/app/src/main/assets/39_Fruits/26.jpg b/app/src/main/assets/39_Fruits/26.jpg new file mode 100644 index 0000000..c8e4723 Binary files /dev/null and b/app/src/main/assets/39_Fruits/26.jpg differ diff --git a/app/src/main/assets/39_Fruits/27.jpg b/app/src/main/assets/39_Fruits/27.jpg new file mode 100644 index 0000000..816337d Binary files /dev/null and b/app/src/main/assets/39_Fruits/27.jpg differ diff --git a/app/src/main/assets/39_Fruits/28.jpg b/app/src/main/assets/39_Fruits/28.jpg new file mode 100644 index 0000000..29973d5 Binary files /dev/null and b/app/src/main/assets/39_Fruits/28.jpg differ diff --git a/app/src/main/assets/39_Fruits/29.jpg b/app/src/main/assets/39_Fruits/29.jpg new file mode 100644 index 0000000..4f0750f Binary files /dev/null and b/app/src/main/assets/39_Fruits/29.jpg differ diff --git a/app/src/main/assets/39_Fruits/3.jpg b/app/src/main/assets/39_Fruits/3.jpg new file mode 100644 index 0000000..f57893b Binary files /dev/null and b/app/src/main/assets/39_Fruits/3.jpg differ diff --git a/app/src/main/assets/39_Fruits/30.jpg b/app/src/main/assets/39_Fruits/30.jpg new file mode 100644 index 0000000..cfd117a Binary files /dev/null and b/app/src/main/assets/39_Fruits/30.jpg differ diff --git a/app/src/main/assets/39_Fruits/31.jpg b/app/src/main/assets/39_Fruits/31.jpg new file mode 100644 index 0000000..b59a7c5 Binary files /dev/null and b/app/src/main/assets/39_Fruits/31.jpg differ diff --git a/app/src/main/assets/39_Fruits/32.jpg b/app/src/main/assets/39_Fruits/32.jpg new file mode 100644 index 0000000..8f70790 Binary files /dev/null and b/app/src/main/assets/39_Fruits/32.jpg differ diff --git a/app/src/main/assets/39_Fruits/33.jpg b/app/src/main/assets/39_Fruits/33.jpg new file mode 100644 index 0000000..373b142 Binary files /dev/null and b/app/src/main/assets/39_Fruits/33.jpg differ diff --git a/app/src/main/assets/39_Fruits/34.jpg b/app/src/main/assets/39_Fruits/34.jpg new file mode 100644 index 0000000..c5beb91 Binary files /dev/null and b/app/src/main/assets/39_Fruits/34.jpg differ diff --git a/app/src/main/assets/39_Fruits/35.jpg b/app/src/main/assets/39_Fruits/35.jpg new file mode 100644 index 0000000..79cd667 Binary files /dev/null and b/app/src/main/assets/39_Fruits/35.jpg differ diff --git a/app/src/main/assets/39_Fruits/36.jpg b/app/src/main/assets/39_Fruits/36.jpg new file mode 100644 index 0000000..c0cb185 Binary files /dev/null and b/app/src/main/assets/39_Fruits/36.jpg differ diff --git a/app/src/main/assets/39_Fruits/37.jpg b/app/src/main/assets/39_Fruits/37.jpg new file mode 100644 index 0000000..ba1b245 Binary files /dev/null and b/app/src/main/assets/39_Fruits/37.jpg differ diff --git a/app/src/main/assets/39_Fruits/38.jpg b/app/src/main/assets/39_Fruits/38.jpg new file mode 100644 index 0000000..c7eccb8 Binary files /dev/null and b/app/src/main/assets/39_Fruits/38.jpg differ diff --git a/app/src/main/assets/39_Fruits/39.jpg b/app/src/main/assets/39_Fruits/39.jpg new file mode 100644 index 0000000..bc95aaa Binary files /dev/null and b/app/src/main/assets/39_Fruits/39.jpg differ diff --git a/app/src/main/assets/39_Fruits/4.jpg b/app/src/main/assets/39_Fruits/4.jpg new file mode 100644 index 0000000..2d7465d Binary files /dev/null and b/app/src/main/assets/39_Fruits/4.jpg differ diff --git a/app/src/main/assets/39_Fruits/5.jpg b/app/src/main/assets/39_Fruits/5.jpg new file mode 100644 index 0000000..8ed633f Binary files /dev/null and b/app/src/main/assets/39_Fruits/5.jpg differ diff --git a/app/src/main/assets/39_Fruits/6.jpg b/app/src/main/assets/39_Fruits/6.jpg new file mode 100644 index 0000000..06ce330 Binary files /dev/null and b/app/src/main/assets/39_Fruits/6.jpg differ diff --git a/app/src/main/assets/39_Fruits/7.jpg b/app/src/main/assets/39_Fruits/7.jpg new file mode 100644 index 0000000..6153618 Binary files /dev/null and b/app/src/main/assets/39_Fruits/7.jpg differ diff --git a/app/src/main/assets/39_Fruits/8.jpg b/app/src/main/assets/39_Fruits/8.jpg new file mode 100644 index 0000000..e333f0f Binary files /dev/null and b/app/src/main/assets/39_Fruits/8.jpg differ diff --git a/app/src/main/assets/39_Fruits/9.jpg b/app/src/main/assets/39_Fruits/9.jpg new file mode 100644 index 0000000..d549d15 Binary files /dev/null and b/app/src/main/assets/39_Fruits/9.jpg differ diff --git a/app/src/main/assets/Animals/1.jpg b/app/src/main/assets/Animals/1.jpg new file mode 100644 index 0000000..9488c65 Binary files /dev/null and b/app/src/main/assets/Animals/1.jpg differ diff --git a/app/src/main/assets/Animals/10.jpg b/app/src/main/assets/Animals/10.jpg new file mode 100644 index 0000000..78382a4 Binary files /dev/null and b/app/src/main/assets/Animals/10.jpg differ diff --git a/app/src/main/assets/Animals/11.jpg b/app/src/main/assets/Animals/11.jpg new file mode 100644 index 0000000..a4f7512 Binary files /dev/null and b/app/src/main/assets/Animals/11.jpg differ diff --git a/app/src/main/assets/Animals/12.jpg b/app/src/main/assets/Animals/12.jpg new file mode 100644 index 0000000..bab3cff Binary files /dev/null and b/app/src/main/assets/Animals/12.jpg differ diff --git a/app/src/main/assets/Animals/13.jpg b/app/src/main/assets/Animals/13.jpg new file mode 100644 index 0000000..5c3ef19 Binary files /dev/null and b/app/src/main/assets/Animals/13.jpg differ diff --git a/app/src/main/assets/Animals/14.jpg b/app/src/main/assets/Animals/14.jpg new file mode 100644 index 0000000..8b446f2 Binary files /dev/null and b/app/src/main/assets/Animals/14.jpg differ diff --git a/app/src/main/assets/Animals/15.jpg b/app/src/main/assets/Animals/15.jpg new file mode 100644 index 0000000..2f9dc4e Binary files /dev/null and b/app/src/main/assets/Animals/15.jpg differ diff --git a/app/src/main/assets/Animals/16.jpg b/app/src/main/assets/Animals/16.jpg new file mode 100644 index 0000000..aad9788 Binary files /dev/null and b/app/src/main/assets/Animals/16.jpg differ diff --git a/app/src/main/assets/Animals/17.jpg b/app/src/main/assets/Animals/17.jpg new file mode 100644 index 0000000..17c6f07 Binary files /dev/null and b/app/src/main/assets/Animals/17.jpg differ diff --git a/app/src/main/assets/Animals/18.jpg b/app/src/main/assets/Animals/18.jpg new file mode 100644 index 0000000..2ce93a7 Binary files /dev/null and b/app/src/main/assets/Animals/18.jpg differ diff --git a/app/src/main/assets/Animals/19.jpg b/app/src/main/assets/Animals/19.jpg new file mode 100644 index 0000000..2b24f31 Binary files /dev/null and b/app/src/main/assets/Animals/19.jpg differ diff --git a/app/src/main/assets/Animals/2.jpg b/app/src/main/assets/Animals/2.jpg new file mode 100644 index 0000000..0a0c2e7 Binary files /dev/null and b/app/src/main/assets/Animals/2.jpg differ diff --git a/app/src/main/assets/Animals/20.jpg b/app/src/main/assets/Animals/20.jpg new file mode 100644 index 0000000..347cddc Binary files /dev/null and b/app/src/main/assets/Animals/20.jpg differ diff --git a/app/src/main/assets/Animals/21.jpg b/app/src/main/assets/Animals/21.jpg new file mode 100644 index 0000000..5a04764 Binary files /dev/null and b/app/src/main/assets/Animals/21.jpg differ diff --git a/app/src/main/assets/Animals/22.jpg b/app/src/main/assets/Animals/22.jpg new file mode 100644 index 0000000..c18d8ad Binary files /dev/null and b/app/src/main/assets/Animals/22.jpg differ diff --git a/app/src/main/assets/Animals/23.jpg b/app/src/main/assets/Animals/23.jpg new file mode 100644 index 0000000..4270d19 Binary files /dev/null and b/app/src/main/assets/Animals/23.jpg differ diff --git a/app/src/main/assets/Animals/24.jpg b/app/src/main/assets/Animals/24.jpg new file mode 100644 index 0000000..355a944 Binary files /dev/null and b/app/src/main/assets/Animals/24.jpg differ diff --git a/app/src/main/assets/Animals/25.jpg b/app/src/main/assets/Animals/25.jpg new file mode 100644 index 0000000..c670943 Binary files /dev/null and b/app/src/main/assets/Animals/25.jpg differ diff --git a/app/src/main/assets/Animals/26.jpg b/app/src/main/assets/Animals/26.jpg new file mode 100644 index 0000000..4b95b01 Binary files /dev/null and b/app/src/main/assets/Animals/26.jpg differ diff --git a/app/src/main/assets/Animals/27.jpg b/app/src/main/assets/Animals/27.jpg new file mode 100644 index 0000000..87a8c12 Binary files /dev/null and b/app/src/main/assets/Animals/27.jpg differ diff --git a/app/src/main/assets/Animals/28.jpg b/app/src/main/assets/Animals/28.jpg new file mode 100644 index 0000000..770686a Binary files /dev/null and b/app/src/main/assets/Animals/28.jpg differ diff --git a/app/src/main/assets/Animals/29.jpg b/app/src/main/assets/Animals/29.jpg new file mode 100644 index 0000000..7127a11 Binary files /dev/null and b/app/src/main/assets/Animals/29.jpg differ diff --git a/app/src/main/assets/Animals/3.jpg b/app/src/main/assets/Animals/3.jpg new file mode 100644 index 0000000..4bf4897 Binary files /dev/null and b/app/src/main/assets/Animals/3.jpg differ diff --git a/app/src/main/assets/Animals/30.jpg b/app/src/main/assets/Animals/30.jpg new file mode 100644 index 0000000..f1d2047 Binary files /dev/null and b/app/src/main/assets/Animals/30.jpg differ diff --git a/app/src/main/assets/Animals/31.jpg b/app/src/main/assets/Animals/31.jpg new file mode 100644 index 0000000..0d08aa8 Binary files /dev/null and b/app/src/main/assets/Animals/31.jpg differ diff --git a/app/src/main/assets/Animals/4.jpg b/app/src/main/assets/Animals/4.jpg new file mode 100644 index 0000000..838c582 Binary files /dev/null and b/app/src/main/assets/Animals/4.jpg differ diff --git a/app/src/main/assets/Animals/5.jpg b/app/src/main/assets/Animals/5.jpg new file mode 100644 index 0000000..36bd2bf Binary files /dev/null and b/app/src/main/assets/Animals/5.jpg differ diff --git a/app/src/main/assets/Animals/6.jpg b/app/src/main/assets/Animals/6.jpg new file mode 100644 index 0000000..dceb49b Binary files /dev/null and b/app/src/main/assets/Animals/6.jpg differ diff --git a/app/src/main/assets/Animals/7.jpg b/app/src/main/assets/Animals/7.jpg new file mode 100644 index 0000000..ebd4694 Binary files /dev/null and b/app/src/main/assets/Animals/7.jpg differ diff --git a/app/src/main/assets/Animals/8.jpg b/app/src/main/assets/Animals/8.jpg new file mode 100644 index 0000000..e5e3c63 Binary files /dev/null and b/app/src/main/assets/Animals/8.jpg differ diff --git a/app/src/main/assets/Animals/9.jpg b/app/src/main/assets/Animals/9.jpg new file mode 100644 index 0000000..e7a1862 Binary files /dev/null and b/app/src/main/assets/Animals/9.jpg differ diff --git a/app/src/main/assets/Birds/1.jpg b/app/src/main/assets/Birds/1.jpg new file mode 100644 index 0000000..d235225 Binary files /dev/null and b/app/src/main/assets/Birds/1.jpg differ diff --git a/app/src/main/assets/Birds/10.jpg b/app/src/main/assets/Birds/10.jpg new file mode 100644 index 0000000..e348ffe Binary files /dev/null and b/app/src/main/assets/Birds/10.jpg differ diff --git a/app/src/main/assets/Birds/11.jpg b/app/src/main/assets/Birds/11.jpg new file mode 100644 index 0000000..921b5b9 Binary files /dev/null and b/app/src/main/assets/Birds/11.jpg differ diff --git a/app/src/main/assets/Birds/12.jpg b/app/src/main/assets/Birds/12.jpg new file mode 100644 index 0000000..7b4055b Binary files /dev/null and b/app/src/main/assets/Birds/12.jpg differ diff --git a/app/src/main/assets/Birds/13.jpg b/app/src/main/assets/Birds/13.jpg new file mode 100644 index 0000000..021b7a4 Binary files /dev/null and b/app/src/main/assets/Birds/13.jpg differ diff --git a/app/src/main/assets/Birds/14.jpg b/app/src/main/assets/Birds/14.jpg new file mode 100644 index 0000000..2074c6f Binary files /dev/null and b/app/src/main/assets/Birds/14.jpg differ diff --git a/app/src/main/assets/Birds/15.jpg b/app/src/main/assets/Birds/15.jpg new file mode 100644 index 0000000..59b0e47 Binary files /dev/null and b/app/src/main/assets/Birds/15.jpg differ diff --git a/app/src/main/assets/Birds/16.jpg b/app/src/main/assets/Birds/16.jpg new file mode 100644 index 0000000..fe950d1 Binary files /dev/null and b/app/src/main/assets/Birds/16.jpg differ diff --git a/app/src/main/assets/Birds/17.jpg b/app/src/main/assets/Birds/17.jpg new file mode 100644 index 0000000..484f39a Binary files /dev/null and b/app/src/main/assets/Birds/17.jpg differ diff --git a/app/src/main/assets/Birds/18.jpg b/app/src/main/assets/Birds/18.jpg new file mode 100644 index 0000000..2792ed1 Binary files /dev/null and b/app/src/main/assets/Birds/18.jpg differ diff --git a/app/src/main/assets/Birds/19.jpg b/app/src/main/assets/Birds/19.jpg new file mode 100644 index 0000000..9e9bb27 Binary files /dev/null and b/app/src/main/assets/Birds/19.jpg differ diff --git a/app/src/main/assets/Birds/2.jpg b/app/src/main/assets/Birds/2.jpg new file mode 100644 index 0000000..0929272 Binary files /dev/null and b/app/src/main/assets/Birds/2.jpg differ diff --git a/app/src/main/assets/Birds/3.jpg b/app/src/main/assets/Birds/3.jpg new file mode 100644 index 0000000..1376a50 Binary files /dev/null and b/app/src/main/assets/Birds/3.jpg differ diff --git a/app/src/main/assets/Birds/4.jpg b/app/src/main/assets/Birds/4.jpg new file mode 100644 index 0000000..1cd8f9c Binary files /dev/null and b/app/src/main/assets/Birds/4.jpg differ diff --git a/app/src/main/assets/Birds/5.jpg b/app/src/main/assets/Birds/5.jpg new file mode 100644 index 0000000..7637589 Binary files /dev/null and b/app/src/main/assets/Birds/5.jpg differ diff --git a/app/src/main/assets/Birds/6.jpg b/app/src/main/assets/Birds/6.jpg new file mode 100644 index 0000000..3bf16b6 Binary files /dev/null and b/app/src/main/assets/Birds/6.jpg differ diff --git a/app/src/main/assets/Birds/7.jpg b/app/src/main/assets/Birds/7.jpg new file mode 100644 index 0000000..076e51d Binary files /dev/null and b/app/src/main/assets/Birds/7.jpg differ diff --git a/app/src/main/assets/Birds/8.jpg b/app/src/main/assets/Birds/8.jpg new file mode 100644 index 0000000..71f5cf7 Binary files /dev/null and b/app/src/main/assets/Birds/8.jpg differ diff --git a/app/src/main/assets/Birds/9.jpg b/app/src/main/assets/Birds/9.jpg new file mode 100644 index 0000000..8767032 Binary files /dev/null and b/app/src/main/assets/Birds/9.jpg differ diff --git a/app/src/main/assets/Butterfly/1.jpg b/app/src/main/assets/Butterfly/1.jpg new file mode 100644 index 0000000..0d713b7 Binary files /dev/null and b/app/src/main/assets/Butterfly/1.jpg differ diff --git a/app/src/main/assets/Butterfly/10.jpg b/app/src/main/assets/Butterfly/10.jpg new file mode 100644 index 0000000..ae497c8 Binary files /dev/null and b/app/src/main/assets/Butterfly/10.jpg differ diff --git a/app/src/main/assets/Butterfly/11.jpg b/app/src/main/assets/Butterfly/11.jpg new file mode 100644 index 0000000..d2e39ef Binary files /dev/null and b/app/src/main/assets/Butterfly/11.jpg differ diff --git a/app/src/main/assets/Butterfly/12.jpg b/app/src/main/assets/Butterfly/12.jpg new file mode 100644 index 0000000..410af7c Binary files /dev/null and b/app/src/main/assets/Butterfly/12.jpg differ diff --git a/app/src/main/assets/Butterfly/13.jpg b/app/src/main/assets/Butterfly/13.jpg new file mode 100644 index 0000000..233a998 Binary files /dev/null and b/app/src/main/assets/Butterfly/13.jpg differ diff --git a/app/src/main/assets/Butterfly/14.jpg b/app/src/main/assets/Butterfly/14.jpg new file mode 100644 index 0000000..9545c0f Binary files /dev/null and b/app/src/main/assets/Butterfly/14.jpg differ diff --git a/app/src/main/assets/Butterfly/15.jpg b/app/src/main/assets/Butterfly/15.jpg new file mode 100644 index 0000000..aa0da5b Binary files /dev/null and b/app/src/main/assets/Butterfly/15.jpg differ diff --git a/app/src/main/assets/Butterfly/16.jpg b/app/src/main/assets/Butterfly/16.jpg new file mode 100644 index 0000000..4b118cf Binary files /dev/null and b/app/src/main/assets/Butterfly/16.jpg differ diff --git a/app/src/main/assets/Butterfly/17.jpg b/app/src/main/assets/Butterfly/17.jpg new file mode 100644 index 0000000..ebfdc2e Binary files /dev/null and b/app/src/main/assets/Butterfly/17.jpg differ diff --git a/app/src/main/assets/Butterfly/18.jpg b/app/src/main/assets/Butterfly/18.jpg new file mode 100644 index 0000000..7b81ca1 Binary files /dev/null and b/app/src/main/assets/Butterfly/18.jpg differ diff --git a/app/src/main/assets/Butterfly/19.jpg b/app/src/main/assets/Butterfly/19.jpg new file mode 100644 index 0000000..903fd82 Binary files /dev/null and b/app/src/main/assets/Butterfly/19.jpg differ diff --git a/app/src/main/assets/Butterfly/2.jpg b/app/src/main/assets/Butterfly/2.jpg new file mode 100644 index 0000000..f92c438 Binary files /dev/null and b/app/src/main/assets/Butterfly/2.jpg differ diff --git a/app/src/main/assets/Butterfly/20.jpg b/app/src/main/assets/Butterfly/20.jpg new file mode 100644 index 0000000..7d0dc2e Binary files /dev/null and b/app/src/main/assets/Butterfly/20.jpg differ diff --git a/app/src/main/assets/Butterfly/21.jpg b/app/src/main/assets/Butterfly/21.jpg new file mode 100644 index 0000000..ff82d93 Binary files /dev/null and b/app/src/main/assets/Butterfly/21.jpg differ diff --git a/app/src/main/assets/Butterfly/3.jpg b/app/src/main/assets/Butterfly/3.jpg new file mode 100644 index 0000000..5251134 Binary files /dev/null and b/app/src/main/assets/Butterfly/3.jpg differ diff --git a/app/src/main/assets/Butterfly/4.jpg b/app/src/main/assets/Butterfly/4.jpg new file mode 100644 index 0000000..01d5932 Binary files /dev/null and b/app/src/main/assets/Butterfly/4.jpg differ diff --git a/app/src/main/assets/Butterfly/5.jpg b/app/src/main/assets/Butterfly/5.jpg new file mode 100644 index 0000000..cc99ed5 Binary files /dev/null and b/app/src/main/assets/Butterfly/5.jpg differ diff --git a/app/src/main/assets/Butterfly/6.jpg b/app/src/main/assets/Butterfly/6.jpg new file mode 100644 index 0000000..6d02805 Binary files /dev/null and b/app/src/main/assets/Butterfly/6.jpg differ diff --git a/app/src/main/assets/Butterfly/7.jpg b/app/src/main/assets/Butterfly/7.jpg new file mode 100644 index 0000000..dd52dbd Binary files /dev/null and b/app/src/main/assets/Butterfly/7.jpg differ diff --git a/app/src/main/assets/Butterfly/8.jpg b/app/src/main/assets/Butterfly/8.jpg new file mode 100644 index 0000000..d519ca7 Binary files /dev/null and b/app/src/main/assets/Butterfly/8.jpg differ diff --git a/app/src/main/assets/Butterfly/9.jpg b/app/src/main/assets/Butterfly/9.jpg new file mode 100644 index 0000000..0cedb47 Binary files /dev/null and b/app/src/main/assets/Butterfly/9.jpg differ diff --git a/app/src/main/assets/myfont.ttf b/app/src/main/assets/myfont.ttf new file mode 100644 index 0000000..23e4502 Binary files /dev/null and b/app/src/main/assets/myfont.ttf differ diff --git a/app/src/main/java/com/paint/trace/drawing/alllistener/OnLikeListener.java b/app/src/main/java/com/paint/trace/drawing/alllistener/OnLikeListener.java new file mode 100644 index 0000000..992eb91 --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/alllistener/OnLikeListener.java @@ -0,0 +1,7 @@ +package com.paint.trace.drawing.alllistener; + +public interface OnLikeListener { + + void onAddLike(); + void onDeleteLike(); +} diff --git a/app/src/main/java/com/paint/trace/drawing/alllistener/onItemListener.java b/app/src/main/java/com/paint/trace/drawing/alllistener/onItemListener.java new file mode 100644 index 0000000..835a7cc --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/alllistener/onItemListener.java @@ -0,0 +1,6 @@ +package com.paint.trace.drawing.alllistener; + +public interface onItemListener { + + void onClickItem(boolean viewAll,String dir); +} diff --git a/app/src/main/java/com/paint/trace/drawing/customview/MyTextView.java b/app/src/main/java/com/paint/trace/drawing/customview/MyTextView.java new file mode 100644 index 0000000..f977e40 --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/customview/MyTextView.java @@ -0,0 +1,33 @@ +package com.paint.trace.drawing.customview; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; + +import androidx.annotation.Nullable; + +import com.paint.trace.drawing.R; +import com.paint.trace.drawing.other.Utils; + +public class MyTextView extends androidx.appcompat.widget.AppCompatTextView { + + + public MyTextView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + initAttrs(context,attrs); + } + + + private void initAttrs(Context context, AttributeSet attrs){ + TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyTV); + boolean aBoolean = typedArray.getBoolean(R.styleable.MyTV_apply_font,false); + if(aBoolean){ + Utils.initFont(this); + } + + typedArray.recycle(); + } + + + +} diff --git a/app/src/main/java/com/paint/trace/drawing/db/ObjectBox.java b/app/src/main/java/com/paint/trace/drawing/db/ObjectBox.java new file mode 100644 index 0000000..c1945be --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/db/ObjectBox.java @@ -0,0 +1,148 @@ +package com.paint.trace.drawing.db; + +import android.content.Context; +import android.util.Log; + +import com.paint.trace.drawing.alllistener.OnLikeListener; +import com.paint.trace.drawing.other.AssetData; + +import com.paint.trace.drawing.other.AssetData_; +import com.paint.trace.drawing.other.ImportData; + +import com.paint.trace.drawing.other.ImportData_; +import com.paint.trace.drawing.other.MyObjectBox; +import com.paint.trace.drawing.view.MyApplication; + +import java.util.ArrayList; +import java.util.List; + +import io.objectbox.Box; +import io.objectbox.BoxStore; +import io.objectbox.query.QueryBuilder; + +public class ObjectBox { + + private static BoxStore boxStore; + + private static Box LikeBox; + + private static Box ImportBox; + + private static List list = new ArrayList<>(); + + public static void addListener(OnLikeListener listener) { + list.add(listener); + } + + public static void init(Context context) { + boxStore = MyObjectBox.builder().androidContext(context).build(); + } + + private static Box getObjectBoxLike() { + if (LikeBox == null) { + LikeBox = boxStore.boxFor(AssetData.class); + } + + return LikeBox; + } + private static Box getObjectBoxImport() { + if (ImportBox == null) { + ImportBox = boxStore.boxFor(ImportData.class); + } + + return ImportBox; + } + + public static void insertOrUpdateLike(String mPath) { + Box objectBoxLike = getObjectBoxLike(); + AssetData first = objectBoxLike.query() + .equal(AssetData_.path, mPath, QueryBuilder.StringOrder.CASE_SENSITIVE) + .build() + .findFirst(); + if (first == null) { + + AssetData assetData = new AssetData(); + assetData.setPath(mPath); + objectBoxLike.put(assetData); + for(OnLikeListener listener:list){ + listener.onAddLike(); + } + + + } else { + + } + + } + public static void insertImport(String muri) { + Box objectBoxImport = getObjectBoxImport(); + ImportData first = objectBoxImport.query() + .equal(ImportData_.uri, muri, QueryBuilder.StringOrder.CASE_SENSITIVE) + .build() + .findFirst(); + if (first == null) { + + ImportData importData = new ImportData(); + importData.setUri(muri); + objectBoxImport.put(importData); + } else { + + } + + } + + + + public static void deleteLike(String mPath) { + Box objectBoxLike = getObjectBoxLike(); + AssetData boxLike = objectBoxLike.query() + .equal(AssetData_.path, mPath, QueryBuilder.StringOrder.CASE_SENSITIVE) + .build() + .findFirst(); + if (boxLike != null) { + objectBoxLike.remove(boxLike); + for(OnLikeListener listener:list){ + listener.onDeleteLike(); + } + Log.d(MyApplication.TAG, "--------deleteLike imId=" + mPath); + } + + + } + + public static List queryAllLike() { + return getObjectBoxLike().query() + .build() + .find(); + } + + public static List queryAllImport() { + return getObjectBoxImport().query() + .build() + .find(); + } + public static boolean queryIsImport(String mPath) { + Box objectBoxImport = getObjectBoxImport(); + ImportData first = objectBoxImport.query() + .equal(ImportData_.uri, mPath, QueryBuilder.StringOrder.CASE_SENSITIVE) + .build() + .findFirst(); + return first != null; + + } + + + public static boolean queryIsLike(String mPath) { + Box objectBoxLike = getObjectBoxLike(); + AssetData first = objectBoxLike.query() + .equal(AssetData_.path, mPath, QueryBuilder.StringOrder.CASE_SENSITIVE) + .build() + .findFirst(); + return first != null; + + } + + + + +} diff --git a/app/src/main/java/com/paint/trace/drawing/frag/FragmentAlbum.java b/app/src/main/java/com/paint/trace/drawing/frag/FragmentAlbum.java new file mode 100644 index 0000000..08ec4cb --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/frag/FragmentAlbum.java @@ -0,0 +1,210 @@ +package com.paint.trace.drawing.frag; + +import android.Manifest; +import android.app.Activity; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.provider.MediaStore; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; + +import com.paint.trace.drawing.R; +import com.paint.trace.drawing.databinding.FragmentImportBinding; +import com.paint.trace.drawing.db.ObjectBox; +import com.paint.trace.drawing.item.ImportImgAdapter; +import com.paint.trace.drawing.other.ImportData; +import com.paint.trace.drawing.other.Utils; +import com.paint.trace.drawing.topon.AdManager; +import com.paint.trace.drawing.topon.onActionListener; +import com.paint.trace.drawing.view.MyApplication; + +import java.io.File; +import java.util.List; + +public class FragmentAlbum extends Fragment { + private FragmentImportBinding binding; + private String[] permissions; + private boolean hasPermission = false; + private ImportImgAdapter importImgAdapter; + private ActivityResultLauncher intentActivityResultLauncher; + public FragmentAlbum() { + + } + public static FragmentAlbum newInstance() { + FragmentAlbum fragment = new FragmentAlbum(); + return fragment; + } + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + binding = FragmentImportBinding.inflate(getLayoutInflater()); + onInit(); + return binding.getRoot(); + } + + private void onInit() { + binding.loading.setVisibility(View.VISIBLE); + loadImport(); + binding.btnImport.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + AdManager.showTopOn(requireActivity(), new onActionListener() { + @Override + public void onAction() { + checkPermission(); + } + }); + } + }); + + intentActivityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { + if (result.getResultCode() == Activity.RESULT_OK && result.getData() != null) { + Uri imageUri = result.getData().getData(); + if (imageUri != null) { + binding.loading.setVisibility(View.VISIBLE); + double uriFileSize = Utils.getUriFileSize(requireContext(), imageUri); + Log.d(MyApplication.TAG, "------uriFileSize-----" + uriFileSize+"--Mb"); + if(uriFileSize>=5){ + binding.loading.setVisibility(View.GONE); + Toast.makeText(requireContext(), getString(R.string.import_im_too_big), Toast.LENGTH_SHORT).show(); + return; + } + String lastPathSegment = imageUri.getLastPathSegment(); + int index = lastPathSegment.lastIndexOf("/"); + + String name = lastPathSegment.substring(index + 1); + String importPath = Utils.getImportPath(name); + new Thread(new Runnable() { + @Override + public void run() { + File file = new File(importPath); + boolean isimport = ObjectBox.queryIsImport(importPath); + if(file.exists()){ + if(!isimport){ + ObjectBox.insertImport(importPath); + } + requireActivity().runOnUiThread(()->{ + binding.loading.setVisibility(View.GONE); + if (isimport) { + Toast.makeText(requireContext(), getString(R.string.import_already), Toast.LENGTH_SHORT).show(); + } else { + ImportData importData = new ImportData(); + importData.setUri(importPath); + importImgAdapter.addData(importData); + updateUi(true); + } + }); + }else { + boolean b = Utils.saveToInternalStorage(name, imageUri, requireActivity()); + if (b) { + ObjectBox.insertImport(importPath); + } + requireActivity().runOnUiThread(()->{ + binding.loading.setVisibility(View.GONE); + if (b) { + ImportData importData = new ImportData(); + importData.setUri(importPath); + importImgAdapter.addData(importData); + updateUi(true); + } else { + Toast.makeText( requireActivity(), getString(R.string.import_fail), Toast.LENGTH_SHORT).show(); + } + }); + } + + } + }).start(); + } + + } + + }); + } + + private void checkPermission() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + permissions = new String[]{Manifest.permission.READ_MEDIA_IMAGES}; + } else { + permissions = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; + } + if (!Utils.checkPermission( requireActivity(), permissions)) { + hasPermission = false; + ActivityCompat.requestPermissions( requireActivity(), permissions, 0); + } else { + hasPermission = true; + startIntent(); + } + } + + + private void startIntent() { + Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + intentActivityResultLauncher.launch(intent); + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == 0) { + if (Utils.checkPermission(requireActivity(), permissions)) { + hasPermission = true; + startIntent(); + } else { + hasPermission = false; + } + + } + } + + public void permissionResult(){ + if (Utils.checkPermission(requireActivity(), permissions)) { + hasPermission = true; + startIntent(); + } else { + hasPermission = false; + } + } + + private void loadImport() { + importImgAdapter = new ImportImgAdapter( requireActivity()); + new Thread(new Runnable() { + @Override + public void run() { + List importUrises = ObjectBox.queryAllImport(); + requireActivity().runOnUiThread(()->{ + importImgAdapter.setData(importUrises); + updateUi(importUrises.size()>0); + binding.loading.setVisibility(View.GONE); + }); + } + }).start(); + + + binding.recyclerview.setAdapter(importImgAdapter); + binding.recyclerview.setLayoutManager(new GridLayoutManager( requireActivity(), 3)); + } + + + private void updateUi(boolean isShow) { + if (isShow) { + binding.recyclerview.setVisibility(View.VISIBLE); + binding.layoutNoImport.setVisibility(View.GONE); + } else { + binding.recyclerview.setVisibility(View.GONE); + binding.layoutNoImport.setVisibility(View.VISIBLE); + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/paint/trace/drawing/frag/FragmentLike.java b/app/src/main/java/com/paint/trace/drawing/frag/FragmentLike.java new file mode 100644 index 0000000..8196c33 --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/frag/FragmentLike.java @@ -0,0 +1,78 @@ +package com.paint.trace.drawing.frag; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; + +import com.paint.trace.drawing.item.LikeAdapter; +import com.paint.trace.drawing.databinding.FragmentFavoriteBinding; + +import com.paint.trace.drawing.other.AssetData; +import com.paint.trace.drawing.db.ObjectBox; +import com.paint.trace.drawing.alllistener.OnLikeListener; + +import java.util.List; + +public class FragmentLike extends Fragment { + private FragmentFavoriteBinding binding; + + public FragmentLike() { + + } + public static FragmentLike newInstance() { + FragmentLike fragment = new FragmentLike(); + return fragment; + } + + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + binding = FragmentFavoriteBinding.inflate(getLayoutInflater()); + onInit(); + return binding.getRoot(); + } + + private void onInit(){ + List assetData = ObjectBox.queryAllLike(); + LikeAdapter likeAdapter = new LikeAdapter(requireActivity()); + likeAdapter.setData(assetData); + updateUi(assetData); + + binding.recyclerview.setAdapter(likeAdapter); + binding.recyclerview.setLayoutManager(new GridLayoutManager(requireContext(), 3)); + + + ObjectBox.addListener(new OnLikeListener() { + @Override + public void onAddLike() { + List assetData = ObjectBox.queryAllLike(); + likeAdapter.setData(assetData); + updateUi(assetData); + } + + @Override + public void onDeleteLike() { + List assetData = ObjectBox.queryAllLike(); + likeAdapter.setData(assetData); + updateUi(assetData); + } + }); + } + + private void updateUi(List assetData){ + if(assetData.size()>0){ + binding.recyclerview.setVisibility(View.VISIBLE); + binding.layoutNoFavorite.setVisibility(View.GONE); + }else { + binding.recyclerview.setVisibility(View.GONE); + binding.layoutNoFavorite.setVisibility(View.VISIBLE); + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/paint/trace/drawing/frag/HomeFragment.java b/app/src/main/java/com/paint/trace/drawing/frag/HomeFragment.java new file mode 100644 index 0000000..f07c129 --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/frag/HomeFragment.java @@ -0,0 +1,109 @@ +package com.paint.trace.drawing.frag; + +import android.content.Intent; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; + +import com.paint.trace.drawing.topon.AdManager; +import com.paint.trace.drawing.topon.onActionListener; +import com.paint.trace.drawing.view.MyApplication; +import com.paint.trace.drawing.view.PreViewActivity; +import com.paint.trace.drawing.view.CatogryActivity; +import com.paint.trace.drawing.item.HomeAdapter; +import com.paint.trace.drawing.databinding.FragmentMainBinding; +import com.paint.trace.drawing.alllistener.onItemListener; + +public class HomeFragment extends Fragment implements onItemListener { + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + private FragmentMainBinding binding; + + public HomeFragment() { + + } + + public static HomeFragment newInstance() { + HomeFragment fragment = new HomeFragment(); + Bundle args = new Bundle(); + fragment.setArguments(args); + return fragment; + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + binding = FragmentMainBinding.inflate(getLayoutInflater()); + onInitRecycler(); + + return binding.getRoot(); + } + + private void onInitRecycler() { + HomeAdapter homeAdapter = new HomeAdapter(requireContext()); + homeAdapter.setListener(this::onClickItem); + binding.recyclerview.setAdapter(homeAdapter); + binding.recyclerview.setLayoutManager(new LinearLayoutManager(requireContext())); + } + + + @Override + public void onClickItem(boolean viewAll, String dir) { + + + if (viewAll) { + AdManager.showTopOn(requireActivity(), new onActionListener() { + @Override + public void onAction() { + Intent intent = new Intent(requireContext(), CatogryActivity.class); + intent.putExtra(MyApplication.Key_ViewDir, dir); + startActivity(intent); + } + }); + } else { + AdManager.showTopOn(requireActivity(), new onActionListener() { + @Override + public void onAction() { + Intent intent = new Intent(requireContext(), PreViewActivity.class); + intent.putExtra(MyApplication.Key_Camera, dir); + intent.putExtra(MyApplication.Key_ISMAIN, true); + startActivity(intent); + } + }); + + } + + +// String place; +// if(viewAll){ +// place = IronSourceAd.adPlace2; +// }else { +// place = IronSourceAd.adPlace3; +// } +// IronSourceAd.showAd(requireActivity(), place, new Function1() { +// @Override +// public Unit invoke(Integer integer) { +// if (integer == IronSourceAd.SHOW_FAIL || integer == IronSourceAd.NO_CACHE || integer == IronSourceAd.SHOW_CLOSE){ +// +// Intent intent; +// if(viewAll){ +// intent = new Intent(requireContext(), PreViewActivity.class); +// intent.putExtra(PaintingApp.Key_ViewDir, dir); +// }else { +// intent = new Intent(requireContext(), CameraActivity.class); +// intent.putExtra(PaintingApp.Key_Camera,dir); +// } +// startActivity(intent); +// +// } +// +// return null; +// } +// }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/paint/trace/drawing/item/ClassAdapter.java b/app/src/main/java/com/paint/trace/drawing/item/ClassAdapter.java new file mode 100644 index 0000000..401fd2b --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/item/ClassAdapter.java @@ -0,0 +1,113 @@ +package com.paint.trace.drawing.item; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.cardview.widget.CardView; +import androidx.recyclerview.widget.RecyclerView; + +import com.paint.trace.drawing.topon.AdManager; +import com.paint.trace.drawing.topon.onActionListener; +import com.paint.trace.drawing.view.MyApplication; +import com.paint.trace.drawing.R; +import com.paint.trace.drawing.db.ObjectBox; +import com.paint.trace.drawing.other.Utils; +import com.paint.trace.drawing.view.PreViewActivity; + +import java.util.List; + +public class ClassAdapter extends RecyclerView.Adapter { + + + private Activity mCon; + private List data; + + + + public ClassAdapter(Activity mCon, List bitmapList) { + this.mCon = mCon; + data = bitmapList; + } + + + + @NonNull + @Override + public HomeVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_thumb, parent, false); + return new HomeVH(view); + } + + @Override + public void onBindViewHolder(@NonNull HomeVH holder, int position) { + + String name = data.get(position); + Log.d("---------tt", "---------name=" + name); + Bitmap bitmap = Utils.loadImageFromAssets(mCon, name); + holder.previewIm.setImageBitmap(bitmap); + + boolean b = ObjectBox.queryIsLike(name); + holder.imFavorite.setSelected(b); + + + holder.cardView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + AdManager.showTopOn(mCon, new onActionListener() { + @Override + public void onAction() { + Intent intent = new Intent(mCon, PreViewActivity.class); + intent.putExtra(MyApplication.Key_Camera, name); + mCon.startActivity(intent); + } + }); + } + }); + + holder.cardFavorite.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + boolean selected = holder.imFavorite.isSelected(); + holder.imFavorite.setSelected(!selected); + boolean newSelect = holder.imFavorite.isSelected(); + if(newSelect){ + ObjectBox.insertOrUpdateLike(name); + }else { + ObjectBox.deleteLike(name); + + } + } + }); + } + + @Override + public int getItemCount() { + return data.size(); + } + + public static class HomeVH extends RecyclerView.ViewHolder { + private ImageView previewIm, imFavorite; + + private CardView cardView; + private FrameLayout cardFavorite; + + public HomeVH(@NonNull View itemView) { + super(itemView); + previewIm = itemView.findViewById(R.id.imPreview); + cardView = itemView.findViewById(R.id.card_view); + cardFavorite = itemView.findViewById(R.id.card_favorite); + imFavorite = itemView.findViewById(R.id.im_favorite); + } + + + } +} diff --git a/app/src/main/java/com/paint/trace/drawing/item/HomeAdapter.java b/app/src/main/java/com/paint/trace/drawing/item/HomeAdapter.java new file mode 100644 index 0000000..b4e4397 --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/item/HomeAdapter.java @@ -0,0 +1,115 @@ +package com.paint.trace.drawing.item; + +import android.content.Context; +import android.graphics.Bitmap; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.cardview.widget.CardView; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.paint.trace.drawing.R; +import com.paint.trace.drawing.other.DataKey; +import com.paint.trace.drawing.other.ItemDec; +import com.paint.trace.drawing.other.Utils; +import com.paint.trace.drawing.alllistener.onItemListener; + +import java.util.List; + +public class HomeAdapter extends RecyclerView.Adapter { + + private List nameList = DataKey.getAllDir(); + private onItemListener listener; + + private Context mCon; + + + public void setListener(onItemListener listener) { + this.listener = listener; + } + + public HomeAdapter(Context mCon) { + this.mCon = mCon; + } + + @NonNull + @Override + public HomeVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_home, parent, false); + return new HomeVH(view); + } + + @Override + public void onBindViewHolder(@NonNull HomeVH holder, int position) { + String dir = nameList.get(position); + + holder.tvName.setText(dir.substring(dir.lastIndexOf("_") + 1)); + + + GridLayoutManager gridLayoutManager = new GridLayoutManager(mCon,2); + + + HomeChildAdapter homeChildAdapter = new HomeChildAdapter(mCon, dir); + homeChildAdapter.setListener(listener); + holder.preRecycler.setAdapter(homeChildAdapter); + ItemDec itemDec = new ItemDec(10,10,15); +// holder.preRecycler.addItemDecoration(itemDecoration); + holder.preRecycler.setLayoutManager(gridLayoutManager); + + + String filePath = dir + "/" + 1+ ".jpg"; + + Bitmap bitmap = Utils.loadImageFromAssets(mCon, filePath); + holder.imMain.setImageBitmap(bitmap); + + holder.cardView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(listener!= null){ + listener.onClickItem(false,filePath); + } + } + }); + holder.seeAll.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (listener != null) { + listener.onClickItem(true,dir); + } + + + } + }); + } + + @Override + public int getItemCount() { + return nameList.size(); + } + + public static class HomeVH extends RecyclerView.ViewHolder { + private TextView tvName; + + private RecyclerView preRecycler; + private TextView seeAll; + private ImageView imMain; + private CardView cardView; + + public HomeVH(@NonNull View itemView) { + super(itemView); + tvName = itemView.findViewById(R.id.tv_name); + preRecycler = itemView.findViewById(R.id.recycler); + seeAll = itemView.findViewById(R.id.tv_seeAll); + imMain = itemView.findViewById(R.id.im_main); + cardView = itemView.findViewById(R.id.card1); + } + + + } +} diff --git a/app/src/main/java/com/paint/trace/drawing/item/HomeChildAdapter.java b/app/src/main/java/com/paint/trace/drawing/item/HomeChildAdapter.java new file mode 100644 index 0000000..4cf5f04 --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/item/HomeChildAdapter.java @@ -0,0 +1,87 @@ +package com.paint.trace.drawing.item; + +import android.content.Context; +import android.graphics.Bitmap; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.cardview.widget.CardView; +import androidx.recyclerview.widget.RecyclerView; + +import com.paint.trace.drawing.R; +import com.paint.trace.drawing.other.Utils; +import com.paint.trace.drawing.alllistener.onItemListener; + +import java.util.Objects; + +public class HomeChildAdapter extends RecyclerView.Adapter { + + + private Context mCon; + private String dir; + + private int count = 4; + private onItemListener listener; + public HomeChildAdapter(Context mCon, String dirStr) { + this.mCon = mCon; + dir = dirStr; + } + + public void setListener(onItemListener listener) { + this.listener = listener; + } + + @NonNull + @Override + public HomeVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_home_child, parent, false); + return new HomeVH(view); + } + + @Override + public void onBindViewHolder(@NonNull HomeVH holder, int position) { + String filePath = dir + "/" + (position+2) + ".jpg"; + Bitmap bitmap = Utils.loadImageFromAssets(mCon, filePath); + + holder.previewIm.setImageBitmap(bitmap); + + ViewGroup.LayoutParams layoutParams = holder.previewIm.getLayoutParams(); + + holder.cardView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(listener!= null){ + listener.onClickItem(false,filePath); + } + + } + }); + + + } + + @Override + public int getItemCount() { + return count; + } + + public static class HomeVH extends RecyclerView.ViewHolder { + private ImageView previewIm; + private CardView cardView; + private FrameLayout fl; + + public HomeVH(@NonNull View itemView) { + super(itemView); + previewIm = itemView.findViewById(R.id.imPreview); + cardView = itemView.findViewById(R.id.card); + fl = itemView.findViewById(R.id.frame); + } + + + } +} diff --git a/app/src/main/java/com/paint/trace/drawing/item/ImportImgAdapter.java b/app/src/main/java/com/paint/trace/drawing/item/ImportImgAdapter.java new file mode 100644 index 0000000..d7fde80 --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/item/ImportImgAdapter.java @@ -0,0 +1,138 @@ +package com.paint.trace.drawing.item; + +import android.app.Activity; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.cardview.widget.CardView; +import androidx.recyclerview.widget.RecyclerView; + +import com.paint.trace.drawing.topon.AdManager; +import com.paint.trace.drawing.topon.onActionListener; +import com.paint.trace.drawing.view.MyApplication; +import com.paint.trace.drawing.R; +import com.paint.trace.drawing.other.ImportData; +import com.paint.trace.drawing.view.PreViewActivity; +import com.paint.trace.drawing.db.ObjectBox; + +import java.util.ArrayList; +import java.util.List; + +public class ImportImgAdapter extends RecyclerView.Adapter { + + + private Activity mCon; + private List data = new ArrayList<>(); + + + public void setData(List data) { + this.data = data; + notifyDataSetChanged(); + } + public ImportImgAdapter(Activity mCon) { + this.mCon = mCon; + } + + public void addData(ImportData newData){ +// if(data.size() == 0){ +// Log.d(ARApp.TAG, "---------notifyDataSetChanged--"); +// +// notifyDataSetChanged(); +// return; +// } + data.add(newData); + int i = data.size() - 1; + Log.d(MyApplication.TAG, "---------addData i="+i); + notifyItemInserted(i); + notifyItemChanged(i); + + } + + @NonNull + @Override + public HomeVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_thumb, parent, false); + return new HomeVH(view); + } + + @Override + public void onBindViewHolder(@NonNull HomeVH holder, int position) { + ImportData importData = data.get(position); + String path = importData.getUri(); + Log.d(MyApplication.TAG, "---------ImportAdapter position="+position+"------" + path); + new Thread(new Runnable() { + @Override + public void run() { + Bitmap bitmap = BitmapFactory.decodeFile(path); + mCon.runOnUiThread(()->{ + holder.previewIm.setImageBitmap(bitmap); + }); + + } + }).start(); + + + boolean b = ObjectBox.queryIsLike(path); + holder.imFavorite.setSelected(b); + holder.cardView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + AdManager.showTopOn(mCon, new onActionListener() { + @Override + public void onAction() { + Intent intent = new Intent(mCon, PreViewActivity.class); + intent.putExtra(MyApplication.Key_Camera, path); + mCon.startActivity(intent); + } + }); + } + }); + + holder.cardFavorite.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + boolean selected = holder.imFavorite.isSelected(); + holder.imFavorite.setSelected(!selected); + boolean newSelect = holder.imFavorite.isSelected(); + if(newSelect){ + ObjectBox.insertOrUpdateLike(path); + }else { + ObjectBox.deleteLike(path); + + } + } + }); + + + } + + @Override + public int getItemCount() { + return data.size(); + } + + public static class HomeVH extends RecyclerView.ViewHolder { + private ImageView previewIm, imFavorite; + + private CardView cardView; + private FrameLayout cardFavorite; + + public HomeVH(@NonNull View itemView) { + super(itemView); + previewIm = itemView.findViewById(R.id.imPreview); + cardView = itemView.findViewById(R.id.card_view); + cardFavorite = itemView.findViewById(R.id.card_favorite); + imFavorite = itemView.findViewById(R.id.im_favorite); + } + + + } +} diff --git a/app/src/main/java/com/paint/trace/drawing/item/LikeAdapter.java b/app/src/main/java/com/paint/trace/drawing/item/LikeAdapter.java new file mode 100644 index 0000000..90cfb14 --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/item/LikeAdapter.java @@ -0,0 +1,115 @@ +package com.paint.trace.drawing.item; + +import android.app.Activity; +import android.content.Intent; +import android.graphics.Bitmap; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.cardview.widget.CardView; +import androidx.recyclerview.widget.RecyclerView; + +import com.paint.trace.drawing.topon.AdManager; +import com.paint.trace.drawing.topon.onActionListener; +import com.paint.trace.drawing.view.MyApplication; +import com.paint.trace.drawing.R; +import com.paint.trace.drawing.other.AssetData; +import com.paint.trace.drawing.view.PreViewActivity; +import com.paint.trace.drawing.db.ObjectBox; +import com.paint.trace.drawing.other.Utils; + +import java.util.List; + +public class LikeAdapter extends RecyclerView.Adapter { + + + private Activity mCon; + private List data; + + + public void setData(List data) { + this.data = data; + notifyDataSetChanged(); + } + public LikeAdapter(Activity mCon) { + this.mCon = mCon; + } + + @NonNull + @Override + public HomeVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_thumb, parent, false); + return new HomeVH(view); + } + + @Override + public void onBindViewHolder(@NonNull HomeVH holder, int position) { + AssetData assetData = data.get(position); + String name = assetData.getPath(); + Log.d("---------tt", "---------favorite=" + name); + new Thread(new Runnable() { + @Override + public void run() { + Bitmap bitmap = Utils.loadImage(mCon, name); + mCon.runOnUiThread(()->{ + holder.previewIm.setImageBitmap(bitmap); + }); + + } + }).start(); + + + holder.imFavorite.setSelected(true); + holder.cardView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + AdManager.showTopOn(mCon, new onActionListener() { + @Override + public void onAction() { + Intent intent = new Intent(mCon, PreViewActivity.class); + intent.putExtra(MyApplication.Key_Camera, name); + mCon.startActivity(intent); + } + }); + } + }); + + holder.cardFavorite.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + holder.imFavorite.setSelected(false); + ObjectBox.deleteLike(name); + int adapterPosition = holder.getAdapterPosition(); + notifyItemRemoved(adapterPosition); + + } + }); + } + + @Override + public int getItemCount() { + return data.size(); + } + + public static class HomeVH extends RecyclerView.ViewHolder { + private ImageView previewIm, imFavorite; + + private CardView cardView ; + private FrameLayout cardFavorite; + + public HomeVH(@NonNull View itemView) { + super(itemView); + previewIm = itemView.findViewById(R.id.imPreview); + cardView = itemView.findViewById(R.id.card_view); + cardFavorite = itemView.findViewById(R.id.card_favorite); + imFavorite = itemView.findViewById(R.id.im_favorite); + } + + + } +} diff --git a/app/src/main/java/com/paint/trace/drawing/other/AssetData.java b/app/src/main/java/com/paint/trace/drawing/other/AssetData.java new file mode 100644 index 0000000..a838a1f --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/other/AssetData.java @@ -0,0 +1,32 @@ +package com.paint.trace.drawing.other; + + +import io.objectbox.annotation.Entity; +import io.objectbox.annotation.Id; + +@Entity +public class AssetData { + + @Id + private long id; + + private String path; + + + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } +} diff --git a/app/src/main/java/com/paint/trace/drawing/other/DataKey.java b/app/src/main/java/com/paint/trace/drawing/other/DataKey.java new file mode 100644 index 0000000..e2c8a3e --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/other/DataKey.java @@ -0,0 +1,50 @@ +package com.paint.trace.drawing.other; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class DataKey { + + public static String Class_Animals = "Animals"; + public static String Class_birds = "Birds"; + public static String Class_butterfly = "Butterfly"; + public static String Class_cafe = "38_Cafe"; + public static String Class_cartoons = "26_Cartoons"; + public static String Class_christmas = "25_Christmas"; + public static String Class_festivals = "22_Festivals"; + public static String Class_flowers = "23_Flowers"; + public static String Class_fruits = "39_Fruits"; + public static String Class_general = "15_General"; + + public static String Class_mehndi = "12_Mehndi"; + public static String Class_nature = "23_Nature"; + public static String Class_properties = "19_Properties"; + public static String Class_rangoli = "25_Rangoli"; + public static String Class_sports = "28_Sports"; + public static String Class_vehicles = "32_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); + Collections.shuffle(list); + return list; + + + } +} diff --git a/app/src/main/java/com/paint/trace/drawing/other/ImportData.java b/app/src/main/java/com/paint/trace/drawing/other/ImportData.java new file mode 100644 index 0000000..9f27805 --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/other/ImportData.java @@ -0,0 +1,32 @@ +package com.paint.trace.drawing.other; + + +import io.objectbox.annotation.Entity; +import io.objectbox.annotation.Id; + +@Entity +public class ImportData { + + @Id + private long id; + + private String uri; + + + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getUri() { + return uri; + } + + public void setUri(String uri) { + this.uri = uri; + } +} diff --git a/app/src/main/java/com/paint/trace/drawing/other/ItemDec.java b/app/src/main/java/com/paint/trace/drawing/other/ItemDec.java new file mode 100644 index 0000000..d40ab27 --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/other/ItemDec.java @@ -0,0 +1,76 @@ +package com.paint.trace.drawing.other; + +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.paint.trace.drawing.view.MyApplication; + + +public class ItemDec extends RecyclerView.ItemDecoration { + + private int v, h, ex; + + public ItemDec(int v, int h, int ex) { + this.v = Math.round(dpToPx(v)); + this.h = Math.round(dpToPx(h)); + this.ex = Math.round(dpToPx(ex)); + } + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + int spanCount = 1; + int spanSize = 1; + int spanIndex = 0; + + int childAdapterPosition = parent.getChildAdapterPosition(view); + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + if (layoutManager instanceof StaggeredGridLayoutManager) { + StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) layoutManager; + StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams(); + spanCount = staggeredGridLayoutManager.getSpanCount(); + if (layoutParams.isFullSpan()) { + spanSize = spanCount; + } + spanIndex = layoutParams.getSpanIndex(); + } else if (layoutManager instanceof GridLayoutManager) { + GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager; + GridLayoutManager.LayoutParams layoutParams = (GridLayoutManager.LayoutParams) view.getLayoutParams(); + spanCount = gridLayoutManager.getSpanCount(); + spanSize = gridLayoutManager.getSpanSizeLookup().getSpanSize(childAdapterPosition); + spanIndex = layoutParams.getSpanIndex(); + } else if (layoutManager instanceof LinearLayoutManager) { + outRect.left = v; + outRect.right = v; + outRect.bottom = h; + } + + if (spanSize == spanCount) { + outRect.left = v + ex; + outRect.right = v + ex; + outRect.bottom = h; + + } else { + int itemAllSpacing = (v * (spanCount + 1) + ex * 2) / spanCount; + int left = v * (spanIndex + 1) - itemAllSpacing * spanIndex + ex; + int right = itemAllSpacing - left; + outRect.left = left; + outRect.right = right; + outRect.bottom = h; + + } + + } + + + public static float dpToPx(float dpValue) { + float density = MyApplication.app.getResources().getDisplayMetrics().density; + return density * dpValue + 0.5f; + } +} diff --git a/app/src/main/java/com/paint/trace/drawing/other/Utils.java b/app/src/main/java/com/paint/trace/drawing/other/Utils.java new file mode 100644 index 0000000..fa7bd5f --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/other/Utils.java @@ -0,0 +1,220 @@ +package com.paint.trace.drawing.other; + +import android.app.Activity; +import android.content.ContentResolver; +import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.res.AssetManager; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Point; +import android.net.Uri; +import android.util.DisplayMetrics; +import android.util.Log; +import android.util.Range; +import android.view.MotionEvent; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.TextView; + +import androidx.camera.core.Camera; +import androidx.core.app.ActivityCompat; + + +import com.paint.trace.drawing.view.MyApplication; + +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 Utils { + + + public static int getRange(Camera camera) { + Range exposureCompensationRange = camera.getCameraInfo().getExposureState().getExposureCompensationRange(); + Integer upper = exposureCompensationRange.getUpper(); + Integer lower = exposureCompensationRange.getLower(); + return upper; + } + + public static void setStatusBarTextColor(Activity activity, boolean dark) { + Window window = activity.getWindow(); + View decor = window.getDecorView(); + if (dark) { + decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } else { + decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); + } + window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + } + + public static Point getScreen(Context context) { + DisplayMetrics displayMetrics = new DisplayMetrics(); + WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + windowManager.getDefaultDisplay().getMetrics(displayMetrics); + int width = displayMetrics.widthPixels; + int height = displayMetrics.heightPixels; + Point point = new Point(); + point.x = width; + point.y = height; + return point; + } + + + + + public static Bitmap loadImage(Context context, String path) { + Bitmap bitmap = loadImageFromAssets(context, path); + if (bitmap == null) { + Bitmap bitmap1 = BitmapFactory.decodeFile(path); + Log.d(MyApplication.TAG,"--------import"); + return bitmap1; + } else { + Log.d(MyApplication.TAG,"--------Assets"); + return bitmap; + } + } + + + public static Bitmap loadImageFromAssets(Context context, String fileName) { + Bitmap bitmap = null; + AssetManager assetManager = context.getAssets(); + try (InputStream is = assetManager.open(fileName)) { + bitmap = BitmapFactory.decodeStream(is); + } catch (IOException e) { + return bitmap; + } + + return bitmap; + + } + + public static List fileExistsInAssets(Context context, String dir) { + + List pathList = new ArrayList(); + try { + AssetManager assetManager = context.getAssets(); + String[] files = assetManager.list(dir); + + if (files != null) { + for (String name : files) { + pathList.add(dir + "/" + name); + } + return pathList; + } + } catch (IOException e) { + + return pathList; + } + return pathList; + } + + + public static List getAnimalsName(Context context, String dir) { + List list = new ArrayList<>(); + for (int i = 0; i < 40; i++) { + + Bitmap bitmap = loadImageFromAssets(context, dir + "/" + (i + 1) + ".jpg"); + if (bitmap == null) { + break; + } else { + list.add(bitmap); + } + + } + return list; + } + + public static PackageInfo getInfo(Context context) { + PackageInfo packageInfo; + try { + packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); + } catch (PackageManager.NameNotFoundException exception) { + + return null; + } + return packageInfo; + } + + + public static float getDistance(MotionEvent event) { + float x = event.getX(0) - event.getX(1); + float y = event.getY(0) - event.getY(1); + return (float) Math.sqrt(x * x + y * y); + } + + + public static void initFont(TextView tv) { + tv.setTypeface(MyApplication.defaultFont); + } + + + public static boolean saveToInternalStorage(String fileName, Uri fileUri, Context context) { + try { + // 获取输入流 + Bitmap bitmap = BitmapFactory.decodeStream(context.getContentResolver().openInputStream(fileUri)); + // 创建图片文件 + File file = new File(context.getFilesDir(), fileName); + FileOutputStream fileOutputStream = new FileOutputStream(file); + // 将Bitmap图片进行存储 + bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream); + fileOutputStream.close(); + return true; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } + + public static String getImportPath(String name) { + File filesDir = MyApplication.app.getFilesDir(); + String s = filesDir + "/" + name; + return s; + } + + public static float dpToPx(float dpValue) { + float density = MyApplication.app.getResources().getDisplayMetrics().density; + return density * dpValue + 0.5f; + } + + + public static boolean checkPermission(Activity activity,String[] permissions) { + boolean result = true; + for (String per : permissions) { + if (ActivityCompat.checkSelfPermission(activity, per) != PackageManager.PERMISSION_GRANTED) { + result = false; + } + } + return result; + + } + + public static double getUriFileSize(Context context, Uri uri) { + double fileSize = 0; + ContentResolver contentResolver = context.getContentResolver(); + + // 如果Uri是文件类型 + if (uri.getScheme().equals("file")) { + File file = new File(uri.getPath()); + fileSize = file.length(); + } else { // 如果Uri不是文件类型,则通过ContentResolver获取大小 + try { + fileSize = contentResolver.openFileDescriptor(uri, "r").getStatSize(); + + } catch (Exception e) { + Log.e("UriUtils", "Error while retrieving file size: " + e.getMessage()); + } + } + fileSize = fileSize/1048576.0; + return fileSize; + } + + +} diff --git a/app/src/main/java/com/paint/trace/drawing/topon/AdListener.java b/app/src/main/java/com/paint/trace/drawing/topon/AdListener.java new file mode 100644 index 0000000..ffabcf8 --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/topon/AdListener.java @@ -0,0 +1,10 @@ +package com.paint.trace.drawing.topon; + +public interface AdListener { + void loadFail(String placeId); + void showSuccess(); + + void showFail(); + + void showClose(); +} diff --git a/app/src/main/java/com/paint/trace/drawing/topon/AdManager.java b/app/src/main/java/com/paint/trace/drawing/topon/AdManager.java new file mode 100644 index 0000000..4284ae0 --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/topon/AdManager.java @@ -0,0 +1,246 @@ +package com.paint.trace.drawing.topon; + +import android.app.Activity; +import android.os.CountDownTimer; +import android.util.Log; + +import androidx.annotation.NonNull; + +import com.anythink.core.api.ATAdInfo; +import com.anythink.core.api.AdError; +import com.anythink.interstitial.api.ATInterstitial; +import com.anythink.interstitial.api.ATInterstitialListener; +import com.paint.trace.drawing.view.MyApplication; + + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class AdManager { + + private static final int type_no_cache = 0; + private static final int type_has_cache = 1; + private static final int type_show_success = 2; + private static final int type_show_close = 3; + private static final int type_show_fail = 4; + + + + private static final String place1Id = "n67505d5505056"; + private static final String place2Id = "n67505d54bce14"; + private static final String place3Id = "n67505d5479ff9"; + + + private static boolean place1LoadFail = false; + private static boolean place2LoadFail = false; + private static boolean place3LoadFail = false; + + private static boolean alreadyShow = false; + + private static List list = new ArrayList<>(); + + + public static void loadAllAd() { + if (list.size() == 0) { + ATInterstitial mInterstitialAd1 = new ATInterstitial(MyApplication.app, place1Id); + ATInterstitial mInterstitialAd2 = new ATInterstitial(MyApplication.app, place2Id); + ATInterstitial mInterstitialAd3 = new ATInterstitial(MyApplication.app, place3Id); + list.add(mInterstitialAd1); + list.add(mInterstitialAd2); + list.add(mInterstitialAd3); + } + for (ATInterstitial ad : list) { + if (!ad.isAdReady()) { + setCallBack(ad, new AdListener() { + @Override + public void loadFail(@NonNull String placeId) { + if (placeId.equals(place1Id)) { + place1LoadFail = true; + } + if (placeId.equals(place2Id)) { + place2LoadFail = true; + } + if (placeId.equals(place3Id)) { + place3LoadFail = true; + } + } + + @Override + public void showSuccess() { + + } + + @Override + public void showFail() { + + } + + @Override + public void showClose() { + + } + }); + ad.load(); + } + } + + + } + + private static ATInterstitial getReadyAd() { + Collections.shuffle(list); + for (ATInterstitial ad : list) { + if (ad.isAdReady()) { + Log.d(MyApplication.TAG, "-has Cache------------"); + return ad; + } + } + Log.d(MyApplication.TAG, "-No Cache------------"); + return null; + } + + private static void setCallBack(ATInterstitial ad, AdListener listener) { + ad.setAdListener(new ATInterstitialListener() { + + + @Override + public void onInterstitialAdLoaded() { + Log.d(MyApplication.TAG, "LoadLoaded " + ad.mPlacementId); + } + + @Override + public void onInterstitialAdLoadFail(AdError adError) { + listener.loadFail(ad.mPlacementId); + Log.d(MyApplication.TAG, "LoadFail:--" + ad.mPlacementId + "--" + adError.getCode() + "---" + adError.getDesc()); + } + + @Override + public void onInterstitialAdClicked(ATAdInfo atAdInfo) { + + } + + @Override + public void onInterstitialAdShow(ATAdInfo atAdInfo) { + Log.d(MyApplication.TAG, "AdShow " + atAdInfo.getShowId()); + listener.showSuccess(); + ad.load(); + } + + @Override + public void onInterstitialAdClose(ATAdInfo atAdInfo) { + listener.showClose(); + } + + @Override + public void onInterstitialAdVideoStart(ATAdInfo atAdInfo) { + + } + + @Override + public void onInterstitialAdVideoEnd(ATAdInfo atAdInfo) { + + } + + @Override + public void onInterstitialAdVideoError(AdError adError) { + + } + }); + } + + + + + public static CountDownTimer showWelcomeAd( + Activity activity, + Long totalTim, + CountAction countAction, + GoMainAction goMain + ) { + Log.d(MyApplication.TAG,"----------alreadyShow="+alreadyShow); + alreadyShow = false; + CountDownTimer timer = new CountDownTimer(totalTim, 100) { + @Override + public void onTick(long millisUntilFinished) { + countAction.onCount(millisUntilFinished); + if (!alreadyShow) { + showAD(activity, new AdStatusAction() { + @Override + public void onStatus(int adType) { + if (adType == type_has_cache) { + alreadyShow = true; + } + if (adType == type_show_close || adType == type_show_fail) { + goMain.onGo(); + } + + } + }); + } + } + + @Override + public void onFinish() { + if (!alreadyShow) { + showTopOn(activity, new onActionListener() { + @Override + public void onAction() { + goMain.onGo(); + } + }); + } + } + }; + + + return timer; + } + + + + private static void showAD(Activity activity, AdStatusAction action) { + ATInterstitial readyAd = getReadyAd(); + if (readyAd != null) { + action.onStatus(type_has_cache); + setCallBack(readyAd, new AdListener() { + @Override + public void loadFail(@NonNull String placeId) { + + } + + @Override + public void showSuccess() { + action.onStatus(type_show_success); + } + + @Override + public void showFail() { + action.onStatus(type_show_fail); + } + + @Override + public void showClose() { + action.onStatus(type_show_close); + } + }); + readyAd.show(activity); + } else { + action.onStatus(type_no_cache); + + } + } + + + public static void showTopOn(Activity activity, onActionListener listener) { + showAD(activity, new AdStatusAction() { + @Override + public void onStatus(int adType) { + if (adType == type_no_cache || adType == type_show_close || adType == type_show_fail) { + listener.onAction(); + } + } + }); + + } +} diff --git a/app/src/main/java/com/paint/trace/drawing/topon/AdStatusAction.java b/app/src/main/java/com/paint/trace/drawing/topon/AdStatusAction.java new file mode 100644 index 0000000..96678fa --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/topon/AdStatusAction.java @@ -0,0 +1,5 @@ +package com.paint.trace.drawing.topon; + +public interface AdStatusAction { + void onStatus(int adType); +} diff --git a/app/src/main/java/com/paint/trace/drawing/topon/CountAction.java b/app/src/main/java/com/paint/trace/drawing/topon/CountAction.java new file mode 100644 index 0000000..4992e6d --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/topon/CountAction.java @@ -0,0 +1,5 @@ +package com.paint.trace.drawing.topon; + +public interface CountAction { + void onCount(long millisUntilFinished); +} diff --git a/app/src/main/java/com/paint/trace/drawing/topon/GoMainAction.java b/app/src/main/java/com/paint/trace/drawing/topon/GoMainAction.java new file mode 100644 index 0000000..8a9c38f --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/topon/GoMainAction.java @@ -0,0 +1,5 @@ +package com.paint.trace.drawing.topon; + +public interface GoMainAction { + void onGo(); +} diff --git a/app/src/main/java/com/paint/trace/drawing/topon/onActionListener.java b/app/src/main/java/com/paint/trace/drawing/topon/onActionListener.java new file mode 100644 index 0000000..4359dd4 --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/topon/onActionListener.java @@ -0,0 +1,6 @@ +package com.paint.trace.drawing.topon; + +public interface onActionListener { + + void onAction(); +} diff --git a/app/src/main/java/com/paint/trace/drawing/view/CatogryActivity.java b/app/src/main/java/com/paint/trace/drawing/view/CatogryActivity.java new file mode 100644 index 0000000..8d57768 --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/view/CatogryActivity.java @@ -0,0 +1,60 @@ +package com.paint.trace.drawing.view; + +import android.os.Bundle; +import android.view.View; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.GridLayoutManager; + +import com.paint.trace.drawing.databinding.ActivityCategoryBinding; +import com.paint.trace.drawing.item.ClassAdapter; +import com.paint.trace.drawing.other.Utils; +import com.paint.trace.drawing.topon.AdManager; + +import java.util.List; + +public class CatogryActivity extends AppCompatActivity { + + private ActivityCategoryBinding preViewBinding; + + private String dirStr; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + AdManager.loadAllAd(); + preViewBinding = ActivityCategoryBinding.inflate(getLayoutInflater()); + setContentView(preViewBinding.getRoot()); + Utils.setStatusBarTextColor(this, true); + dirStr = getIntent().getStringExtra(MyApplication.Key_ViewDir); + preViewBinding.categoryName.setText(dirStr.substring(dirStr.lastIndexOf("_") + 1)); + + + + onInitList(); + onInitClick(); + } + + private void onInitList() { + + List list = Utils.fileExistsInAssets(this, dirStr); + + ClassAdapter classAdapter = new ClassAdapter(this, list); + preViewBinding.recyclerview.setAdapter(classAdapter); + preViewBinding.recyclerview.setLayoutManager(new GridLayoutManager(this, 3)); + } + + private void onInitClick() { + preViewBinding.back.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + + + +} \ No newline at end of file diff --git a/app/src/main/java/com/paint/trace/drawing/view/MainActivity.java b/app/src/main/java/com/paint/trace/drawing/view/MainActivity.java new file mode 100644 index 0000000..7a52299 --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/view/MainActivity.java @@ -0,0 +1,132 @@ +package com.paint.trace.drawing.view; + +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.viewpager2.adapter.FragmentStateAdapter; +import androidx.viewpager2.widget.ViewPager2; + +import com.paint.trace.drawing.R; +import com.paint.trace.drawing.databinding.ActivityHomeBinding; +import com.paint.trace.drawing.frag.FragmentAlbum; +import com.paint.trace.drawing.frag.FragmentLike; +import com.paint.trace.drawing.frag.HomeFragment; +import com.paint.trace.drawing.other.Utils; +import com.google.android.material.tabs.TabLayout; +import com.paint.trace.drawing.topon.AdManager; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class MainActivity extends AppCompatActivity { + + private ActivityHomeBinding binding; + + private List listFragment = new ArrayList<>(); + + private FragmentAlbum fragmentAlbum; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + Utils.setStatusBarTextColor(this,true); + binding = ActivityHomeBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + AdManager.loadAllAd(); + fragmentAlbum = FragmentAlbum.newInstance(); + listFragment.add(HomeFragment.newInstance()); + listFragment.add(FragmentLike.newInstance()); + listFragment.add(fragmentAlbum); + onTabInit(); + binding.viewPager2.setUserInputEnabled(false); + binding.viewPager2.setAdapter(new FragmentStateAdapter(this) { + @NonNull + @Override + public Fragment createFragment(int position) { + return listFragment.get(position); + } + + @Override + public int getItemCount() { + return listFragment.size(); + } + }); + bingTabVp(); + + } + + + + private void bingTabVp() { + binding.tab.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { + @Override + public void onTabSelected(TabLayout.Tab tab) { + ImageView icon = Objects.requireNonNull(tab.getCustomView()).findViewById(R.id.im_icon); + icon.setSelected(true); + binding.viewPager2.setCurrentItem(tab.getPosition()); + } + + @Override + public void onTabUnselected(TabLayout.Tab tab) { + ImageView icon = Objects.requireNonNull(tab.getCustomView()).findViewById(R.id.im_icon); + icon.setSelected(false); + } + + @Override + public void onTabReselected(TabLayout.Tab tab) { + + } + }); + binding.viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { + @Override + public void onPageSelected(int position) { + super.onPageSelected(position); + Objects.requireNonNull(binding.tab.getTabAt(position)).select(); + } + }); + } + + + private void onTabInit() { + + for (int i = 0; i < listFragment.size(); i++) { + TabLayout.Tab tab = binding.tab.newTab(); + + View inflate = LayoutInflater.from(this).inflate(R.layout.item_tab_view, null, false); + ImageView icon = inflate.findViewById(R.id.im_icon); + TextView textView = inflate.findViewById(R.id.textView); + if (i == 0) { + textView.setText(getString(R.string.tv_home)); + icon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.selector_tab)); + } else if(i ==1){ + textView.setText(getString(R.string.tv_like)); + icon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.selector_like)); + }else { + textView.setText(getString(R.string.tv_album)); + icon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.selector_album)); + } + tab.setCustomView(inflate); + binding.tab.addTab(tab); + } + + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == 0) { + Log.d(MyApplication.TAG,"----------onRequestPermissionsResult-"); + fragmentAlbum.permissionResult(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/paint/trace/drawing/view/MyApplication.java b/app/src/main/java/com/paint/trace/drawing/view/MyApplication.java new file mode 100644 index 0000000..4b0e4fc --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/view/MyApplication.java @@ -0,0 +1,62 @@ +package com.paint.trace.drawing.view; + +import android.app.Application; +import android.content.res.AssetManager; +import android.graphics.Typeface; +import android.util.Log; + +import com.anythink.core.api.ATSDK; +import com.anythink.core.api.NetTrafficeCallback; +import com.paint.trace.drawing.db.ObjectBox; +import com.paint.trace.drawing.topon.AdManager; + +public class MyApplication extends Application { + public static String Key_ViewDir = "pre_dir"; + public static String Key_ISMAIN = "ismain"; + public static String Key_Camera = "camera_data"; + + public static String TAG = "------------Drawing------"; + + + public static MyApplication app; + + private String APPId ="h67505d35951dc"; + + private String AppKey ="a81d17e5cc10cd96a65fe75c0ffd15334"; + + public static Typeface defaultFont; + + @Override + public void onCreate() { + super.onCreate(); + app = this; + initSDk(); + AssetManager assets = getAssets(); + defaultFont = Typeface.createFromAsset(assets, "myfont.ttf"); + + ObjectBox.init(this); + + } + + private void initSDk(){ + ATSDK.checkIsEuTraffic(this, new NetTrafficeCallback() { + + @Override + public void onResultCallback(boolean isEU) { + if (isEU && ATSDK.getGDPRDataLevel(MyApplication.this) == ATSDK.UNKNOWN) { + ATSDK.showGdprAuth(MyApplication.this); + } + + } + + @Override + public void onErrorCallback(String errorMsg) { + + } + }); + ATSDK.init( this, APPId, AppKey); + AdManager.loadAllAd(); + } + + +} diff --git a/app/src/main/java/com/paint/trace/drawing/view/PreViewActivity.java b/app/src/main/java/com/paint/trace/drawing/view/PreViewActivity.java new file mode 100644 index 0000000..36148bb --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/view/PreViewActivity.java @@ -0,0 +1,331 @@ +package com.paint.trace.drawing.view; + +import android.Manifest; +import android.app.Activity; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.Matrix; +import android.graphics.Point; +import android.graphics.PointF; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.provider.MediaStore; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; +import android.widget.SeekBar; +import android.widget.Toast; + +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.camera.core.Camera; +import androidx.camera.core.CameraSelector; +import androidx.camera.core.ImageCapture; +import androidx.camera.core.Preview; +import androidx.camera.lifecycle.ProcessCameraProvider; +import androidx.camera.view.PreviewView; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +import com.paint.trace.drawing.R; +import com.paint.trace.drawing.db.ObjectBox; +import com.paint.trace.drawing.other.Utils; +import com.google.common.util.concurrent.ListenableFuture; +import com.paint.trace.drawing.topon.AdManager; +import com.paint.trace.drawing.topon.onActionListener; + +public class PreViewActivity extends AppCompatActivity implements View.OnTouchListener, View.OnClickListener { + private CameraSelector cameraSelector; + private String[] permissions; + + private Camera camera; + private ImageCapture imageCapture; + private PreviewView previewView; + private ImageView imageView; + private SeekBar seekBar; + + + + + private int MODE;//当前状态 + public static final int MODE_NONE = 0;//无操作 + public static final int MODE_DRAG = 1;//单指操作 + public static final int MODE_SCALE = 2;//双指操作 + + private Matrix startMatrix = new Matrix(); + private Matrix endMatrix = new Matrix();//变化后的矩阵 + private PointF startPointF = new PointF();//初始坐标 + private float distance;//初始距离 + private float scaleMultiple;//缩放倍数 + + private ImageView flashIm, imZoom, imBack; + private ImageView imPhoto; + + private String curBitmapPath; + private boolean hasPermission = false; + private boolean isMain; + private String ismain; + + private ActivityResultLauncher intentActivityResultLauncher; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_preview); + Utils.setStatusBarTextColor(this, true); + AdManager.loadAllAd(); + + Intent intent = getIntent(); + isMain = intent.getBooleanExtra(MyApplication.Key_ISMAIN, false); + + + previewView = findViewById(R.id.preview); + imageView = findViewById(R.id.image); + imBack = findViewById(R.id.back); + + seekBar = findViewById(R.id.seekbar); + flashIm = findViewById(R.id.im_flash); + imPhoto = findViewById(R.id.im_photo); + imZoom = findViewById(R.id.im_zoom); + + curBitmapPath = getIntent().getStringExtra(MyApplication.Key_Camera); + + intentActivityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { + if (result.getResultCode() == Activity.RESULT_OK && result.getData() != null) { + Uri imageUri = result.getData().getData(); + if(imageUri!= null){ + String lastPathSegment = imageUri.getLastPathSegment(); + int index = lastPathSegment.lastIndexOf("/"); + String name = lastPathSegment.substring(index+1); + double uriFileSize = Utils.getUriFileSize(PreViewActivity.this, imageUri); + Log.d(MyApplication.TAG, "------uriFileSize-----" + uriFileSize+"--Mb"); + if(uriFileSize>=5){ + Toast.makeText(PreViewActivity.this, getString(R.string.import_im_too_big), Toast.LENGTH_SHORT).show(); + return; + } + imageView.setImageURI(imageUri); + new Thread(new Runnable() { + @Override + public void run() { + boolean b = Utils.saveToInternalStorage(name, imageUri, PreViewActivity.this); + if(b){ + String importPath = Utils.getImportPath(name); + ObjectBox.insertImport(importPath); + } + } + }).start(); + + + } + + } + + }); + + init(); + initClick(); + } + + + + private void onInitIm(float imW, float imH) { + Point screen = Utils.getScreen(this); + float newX = screen.x / 2f - imW / 2; + float newY = screen.y / 2f - imH / 2; + startMatrix.postTranslate(newX, newY); + imageView.setImageMatrix(startMatrix); + } + + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction() & event.getActionMasked()) { + case MotionEvent.ACTION_DOWN: + + startMatrix.set(imageView.getImageMatrix()); + endMatrix.set(imageView.getImageMatrix()); + + startPointF.set(event.getX(), event.getY()); + + + + + MODE = MODE_DRAG; + + break; + case MotionEvent.ACTION_POINTER_DOWN: + + startMatrix.set(endMatrix); + + distance = Utils.getDistance(event); + + MODE = MODE_SCALE; + + break; + case MotionEvent.ACTION_MOVE://滑动(单+双) + if (MODE == MODE_DRAG) {//单指滑动时 + + endMatrix.set(startMatrix); + //向矩阵传入位移距离 + endMatrix.postTranslate(event.getX() - startPointF.x, event.getY() - startPointF.y); + Log.d("---------------tt", "------ACTION_MOVE-----x=" + event.getX() + "------y=" + event.getY()); + } else if (MODE == MODE_SCALE) {//双指滑动时 + //计算缩放倍数 + scaleMultiple = Utils.getDistance(event) / distance; + //获取初始矩阵 + endMatrix.set(startMatrix); + //向矩阵传入缩放倍数 + endMatrix.postScale(scaleMultiple, scaleMultiple, startPointF.x, startPointF.y); + } + break; + case MotionEvent.ACTION_UP://单指离开 + case MotionEvent.ACTION_POINTER_UP://双指离开 + //手指离开后,重置状态 + MODE = MODE_NONE; + + break; + } + //事件结束后,把矩阵的变化同步到ImageView上 + imageView.setImageMatrix(endMatrix); + return true; + } + + @Override + public void onClick(View v) { + if (v.equals(imBack)) { + + if (isMain) { + finish(); + } else { + finish(); + } + + } else { + if (!hasPermission) { + showNoPermission(); + return; + } + if (v.equals(flashIm)) { + boolean selected = flashIm.isSelected(); + flashIm.setSelected(!selected); + camera.getCameraControl().enableTorch(!selected); + } else if (v.equals(imPhoto)) { + AdManager.showTopOn(PreViewActivity.this, new onActionListener() { + @Override + public void onAction() { + Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + intentActivityResultLauncher.launch(intent); + } + }); + } else if (v.equals(imZoom)) { + if (seekBar.getVisibility() == View.VISIBLE) { + seekBar.setVisibility(View.GONE); + } else if (seekBar.getVisibility() == View.GONE) { + seekBar.setVisibility(View.VISIBLE); + } + } + } + + } + + private void initClick() { + imBack.setOnClickListener(this); + flashIm.setOnClickListener(this); + imPhoto.setOnClickListener(this); + imZoom.setOnClickListener(this); + seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + float v = (seekBar.getMax() - progress) / 10.0f; + imageView.setAlpha(v); + + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + + } + }); + } + + private void init() { + cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA; + permissions = new String[]{android.Manifest.permission.CAMERA}; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + permissions = new String[]{android.Manifest.permission.CAMERA, Manifest.permission.READ_MEDIA_IMAGES}; + } else { + permissions = new String[]{android.Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; + } + if (!Utils.checkPermission(this,permissions)) { + hasPermission = false; + imageView.setOnTouchListener(null); + ActivityCompat.requestPermissions(this, permissions, 0); + } else { + hasPermission = true; + imageView.setOnTouchListener(this); + startCamera(); + } + } + + private void startCamera() { + ListenableFuture future = ProcessCameraProvider.getInstance(this); + future.addListener(() -> { + try { + ProcessCameraProvider cameraProvider = future.get(); + + Preview preview = new Preview.Builder().build(); + cameraProvider.unbindAll(); + ImageCapture.Builder builder1 = new ImageCapture.Builder(); + imageCapture = builder1.build(); + camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageCapture); + + preview.setSurfaceProvider(previewView.getSurfaceProvider()); + + if (curBitmapPath != null) { + Bitmap bitmap = Utils.loadImage(this, curBitmapPath); + imageView.setImageBitmap(bitmap); + int width = bitmap.getWidth(); + int height = bitmap.getHeight(); + onInitIm(width, height); + } + + } catch (Exception e) { + e.printStackTrace(); + } + }, ContextCompat.getMainExecutor(this)); + + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == 0) { + if (Utils.checkPermission(PreViewActivity.this,permissions)) { + hasPermission = true; + imageView.setOnTouchListener(this); + startCamera(); + } else { + hasPermission = false; + imageView.setOnTouchListener(null); + } + + } + } + + + + + private void showNoPermission() { + Toast.makeText(this, getString(R.string.permission_fail), Toast.LENGTH_SHORT).show(); + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/paint/trace/drawing/view/WelActivity.java b/app/src/main/java/com/paint/trace/drawing/view/WelActivity.java new file mode 100644 index 0000000..cb1b840 --- /dev/null +++ b/app/src/main/java/com/paint/trace/drawing/view/WelActivity.java @@ -0,0 +1,59 @@ +package com.paint.trace.drawing.view; + +import android.content.Intent; +import android.os.Bundle; +import android.os.CountDownTimer; + +import androidx.appcompat.app.AppCompatActivity; + +import com.paint.trace.drawing.databinding.ActivityWelcomeBinding; +import com.paint.trace.drawing.other.Utils; +import com.paint.trace.drawing.topon.AdManager; +import com.paint.trace.drawing.topon.CountAction; +import com.paint.trace.drawing.topon.GoMainAction; + +public class WelActivity extends AppCompatActivity { + + private ActivityWelcomeBinding binding; + private long time = 12000; + private CountDownTimer countDownTimer; + + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = ActivityWelcomeBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + Utils.setStatusBarTextColor(this, true); + + countDownTimer = AdManager.showWelcomeAd(this, time, new CountAction() { + @Override + public void onCount(long millisUntilFinished) { + int progressPercentage = (int) ((100 * millisUntilFinished) / time); + int Percentage = 100 - progressPercentage; + binding.loadingPb.setProgress(Percentage); + } + }, new GoMainAction() { + @Override + public void onGo() { + enterMain(); + } + }); + countDownTimer.start(); + } + private void enterMain() { + binding.loadingPb.setProgress(100); + Intent intent = new Intent(WelActivity.this, MainActivity.class); + startActivity(intent); + finish(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (countDownTimer != null) { + countDownTimer.cancel(); + } + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/album.xml b/app/src/main/res/drawable/album.xml new file mode 100644 index 0000000..7079eb2 --- /dev/null +++ b/app/src/main/res/drawable/album.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/album_true.xml b/app/src/main/res/drawable/album_true.xml new file mode 100644 index 0000000..88b5dbc --- /dev/null +++ b/app/src/main/res/drawable/album_true.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/background.jpg b/app/src/main/res/drawable/background.jpg new file mode 100644 index 0000000..6a38b21 Binary files /dev/null and b/app/src/main/res/drawable/background.jpg differ diff --git a/app/src/main/res/drawable/bg_like.xml b/app/src/main/res/drawable/bg_like.xml new file mode 100644 index 0000000..eb5a8e8 --- /dev/null +++ b/app/src/main/res/drawable/bg_like.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/btn_import_bg.xml b/app/src/main/res/drawable/btn_import_bg.xml new file mode 100644 index 0000000..c7cf61a --- /dev/null +++ b/app/src/main/res/drawable/btn_import_bg.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/btn_see_all.xml b/app/src/main/res/drawable/btn_see_all.xml new file mode 100644 index 0000000..533f989 --- /dev/null +++ b/app/src/main/res/drawable/btn_see_all.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/flash_false.xml b/app/src/main/res/drawable/flash_false.xml new file mode 100644 index 0000000..fa9199e --- /dev/null +++ b/app/src/main/res/drawable/flash_false.xml @@ -0,0 +1,17 @@ + + + + diff --git a/app/src/main/res/drawable/flash_true.xml b/app/src/main/res/drawable/flash_true.xml new file mode 100644 index 0000000..83fba09 --- /dev/null +++ b/app/src/main/res/drawable/flash_true.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/icon_import.xml b/app/src/main/res/drawable/icon_import.xml new file mode 100644 index 0000000..95982b7 --- /dev/null +++ b/app/src/main/res/drawable/icon_import.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/icon_photo.xml b/app/src/main/res/drawable/icon_photo.xml new file mode 100644 index 0000000..df4220c --- /dev/null +++ b/app/src/main/res/drawable/icon_photo.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/im_right.xml b/app/src/main/res/drawable/im_right.xml new file mode 100644 index 0000000..52b6331 --- /dev/null +++ b/app/src/main/res/drawable/im_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/im_view_alaph.xml b/app/src/main/res/drawable/im_view_alaph.xml new file mode 100644 index 0000000..32144d9 --- /dev/null +++ b/app/src/main/res/drawable/im_view_alaph.xml @@ -0,0 +1,16 @@ + + + + diff --git a/app/src/main/res/drawable/like_false.xml b/app/src/main/res/drawable/like_false.xml new file mode 100644 index 0000000..4e05173 --- /dev/null +++ b/app/src/main/res/drawable/like_false.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/like_true.xml b/app/src/main/res/drawable/like_true.xml new file mode 100644 index 0000000..8de7a37 --- /dev/null +++ b/app/src/main/res/drawable/like_true.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/placeholder.xml b/app/src/main/res/drawable/placeholder.xml new file mode 100644 index 0000000..20982d1 --- /dev/null +++ b/app/src/main/res/drawable/placeholder.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/selector_album.xml b/app/src/main/res/drawable/selector_album.xml new file mode 100644 index 0000000..8f73162 --- /dev/null +++ b/app/src/main/res/drawable/selector_album.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_favorite.xml b/app/src/main/res/drawable/selector_favorite.xml new file mode 100644 index 0000000..8a67b64 --- /dev/null +++ b/app/src/main/res/drawable/selector_favorite.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_flash.xml b/app/src/main/res/drawable/selector_flash.xml new file mode 100644 index 0000000..e5094e6 --- /dev/null +++ b/app/src/main/res/drawable/selector_flash.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_like.xml b/app/src/main/res/drawable/selector_like.xml new file mode 100644 index 0000000..ceb38af --- /dev/null +++ b/app/src/main/res/drawable/selector_like.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_tab.xml b/app/src/main/res/drawable/selector_tab.xml new file mode 100644 index 0000000..4917ac5 --- /dev/null +++ b/app/src/main/res/drawable/selector_tab.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tab_favorite.xml b/app/src/main/res/drawable/tab_favorite.xml new file mode 100644 index 0000000..41765d7 --- /dev/null +++ b/app/src/main/res/drawable/tab_favorite.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/tab_favorite_false.xml b/app/src/main/res/drawable/tab_favorite_false.xml new file mode 100644 index 0000000..5f2e815 --- /dev/null +++ b/app/src/main/res/drawable/tab_favorite_false.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/tab_home.xml b/app/src/main/res/drawable/tab_home.xml new file mode 100644 index 0000000..06eb4c7 --- /dev/null +++ b/app/src/main/res/drawable/tab_home.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/tab_home_false.xml b/app/src/main/res/drawable/tab_home_false.xml new file mode 100644 index 0000000..3e42930 --- /dev/null +++ b/app/src/main/res/drawable/tab_home_false.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/tool_bar.xml b/app/src/main/res/drawable/tool_bar.xml new file mode 100644 index 0000000..5820ada --- /dev/null +++ b/app/src/main/res/drawable/tool_bar.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/wel_progress.xml b/app/src/main/res/drawable/wel_progress.xml new file mode 100644 index 0000000..53e578c --- /dev/null +++ b/app/src/main/res/drawable/wel_progress.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/wel_thumb.xml b/app/src/main/res/drawable/wel_thumb.xml new file mode 100644 index 0000000..8d94c2d --- /dev/null +++ b/app/src/main/res/drawable/wel_thumb.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/welocm_pb.xml b/app/src/main/res/drawable/welocm_pb.xml new file mode 100644 index 0000000..c12a6da --- /dev/null +++ b/app/src/main/res/drawable/welocm_pb.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_category.xml b/app/src/main/res/layout/activity_category.xml new file mode 100644 index 0000000..1dd5d42 --- /dev/null +++ b/app/src/main/res/layout/activity_category.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml new file mode 100644 index 0000000..c3af4e7 --- /dev/null +++ b/app/src/main/res/layout/activity_home.xml @@ -0,0 +1,27 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_preview.xml b/app/src/main/res/layout/activity_preview.xml new file mode 100644 index 0000000..e97a3be --- /dev/null +++ b/app/src/main/res/layout/activity_preview.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_welcome.xml b/app/src/main/res/layout/activity_welcome.xml new file mode 100644 index 0000000..614fe16 --- /dev/null +++ b/app/src/main/res/layout/activity_welcome.xml @@ -0,0 +1,45 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_home.xml b/app/src/main/res/layout/adapter_home.xml new file mode 100644 index 0000000..8223a37 --- /dev/null +++ b/app/src/main/res/layout/adapter_home.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_home_child.xml b/app/src/main/res/layout/adapter_home_child.xml new file mode 100644 index 0000000..d08092d --- /dev/null +++ b/app/src/main/res/layout/adapter_home_child.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_thumb.xml b/app/src/main/res/layout/adapter_thumb.xml new file mode 100644 index 0000000..d7f0b65 --- /dev/null +++ b/app/src/main/res/layout/adapter_thumb.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_favorite.xml b/app/src/main/res/layout/fragment_favorite.xml new file mode 100644 index 0000000..ba23893 --- /dev/null +++ b/app/src/main/res/layout/fragment_favorite.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_import.xml b/app/src/main/res/layout/fragment_import.xml new file mode 100644 index 0000000..6b102de --- /dev/null +++ b/app/src/main/res/layout/fragment_import.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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..8adefeb --- /dev/null +++ b/app/src/main/res/layout/fragment_main.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_tab_view.xml b/app/src/main/res/layout/item_tab_view.xml new file mode 100644 index 0000000..7198a02 --- /dev/null +++ b/app/src/main/res/layout/item_tab_view.xml @@ -0,0 +1,25 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000..c209e78 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000..b2dfe3d Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000..4f0f1d6 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000..62b611d Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000..948a307 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..1b9a695 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000..28d4b77 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9287f50 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/back_white.png b/app/src/main/res/mipmap-xxxhdpi/back_white.png new file mode 100644 index 0000000..01d12db Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/back_white.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/empty_import.png b/app/src/main/res/mipmap-xxxhdpi/empty_import.png new file mode 100644 index 0000000..6d99044 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/empty_import.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/empty_like.png b/app/src/main/res/mipmap-xxxhdpi/empty_like.png new file mode 100644 index 0000000..1542a43 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/empty_like.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000..aa7d642 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9126ae3 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/im_back_black.png b/app/src/main/res/mipmap-xxxhdpi/im_back_black.png new file mode 100644 index 0000000..99593a4 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/im_back_black.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/image_camera.png b/app/src/main/res/mipmap-xxxhdpi/image_camera.png new file mode 100644 index 0000000..ebca56f Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/image_camera.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/image_gallery.png b/app/src/main/res/mipmap-xxxhdpi/image_gallery.png new file mode 100644 index 0000000..d4159b4 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/image_gallery.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/logo.png b/app/src/main/res/mipmap-xxxhdpi/logo.png new file mode 100644 index 0000000..8db3ef1 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/logo.png differ diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..71efee4 --- /dev/null +++ b/app/src/main/res/values-night/themes.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml new file mode 100644 index 0000000..3e55230 --- /dev/null +++ b/app/src/main/res/values/attrs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..19937e6 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,27 @@ + + + #FF000000 + #FFFFFFFF + #F7F5F4 + #0E0D0C + #343332 + + + + #CF491E + #cccccc + + + #acb6e5 + #87f3fa + #0ED2F7 + #D1D1D1 + + + #80ffffff + + + #37c5ff + + #ff6875 + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..6c0c18a --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,21 @@ + + Trace Drawing + + See All + Home + Favorite + Favorite + + + + + Please grant the relevant permissions and try again. + + No Favorites + Gallery + You haven\'t uploaded any pictures yet + Import pictures + Import failed, please try again + Too big, the image should not be larger than 5M + Already imported + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..2b36a94 --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,10 @@ + + + + +