From d17993f4cea5c5eb8c741b6213def1f4b88522b3 Mon Sep 17 00:00:00 2001 From: litingting Date: Tue, 13 Aug 2024 17:43:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 10 + app/proguard-rules.pro | 17 +- app/src/main/AndroidManifest.xml | 18 +- .../main/assets/Pink_Wallpapers_privacy.html | 144 +++++++ app/src/main/assets/wallres.json | 41 ++ .../pink/cute/wallpapers/PinkWallpapers.kt | 25 +- .../cute/wallpapers/SetWallpaperActivity.kt | 232 ----------- .../cute/wallpapers/activity/AboutActivity.kt | 77 ++++ .../wallpapers/{ => activity}/LaunActivity.kt | 3 +- .../wallpapers/{ => activity}/MainActivity.kt | 14 +- .../wallpapers/activity/PrivacyActivity.kt | 29 ++ .../activity/SetWallpaperActivity.kt | 393 ++++++++++++++++++ .../{ => activity}/WallpaperListActivity.kt | 22 +- .../com/pink/cute/wallpapers/bean/Category.kt | 14 +- .../pink/cute/wallpapers/bean/Wallpaper.kt | 25 +- .../pink/cute/wallpapers/manager/Common.kt | 19 +- .../cute/wallpapers/myroom/CategoryDao.java | 31 ++ .../pink/cute/wallpapers/myroom/MyDatabase.kt | 31 ++ .../cute/wallpapers/myroom/WallpaperDao.java | 30 ++ .../ui/dashboard/DashboardFragment.kt | 26 +- .../ui/dashboard/DashboardViewModel.kt | 41 +- .../cute/wallpapers/ui/home/HomeFragment.kt | 25 +- .../cute/wallpapers/ui/home/HomeViewModel.kt | 23 +- .../ui/notifications/FavoriteFragment.kt | 57 +++ .../ui/notifications/FavoriteViewModel.kt | 21 + .../ui/notifications/NotificationsFragment.kt | 42 -- .../notifications/NotificationsViewModel.kt | 13 - .../wallpapers/viewadapter/AdapterCategory.kt | 8 +- .../viewadapter/AdapterRecommend.kt | 2 +- app/src/main/res/drawable/download.xml | 9 + app/src/main/res/drawable/download_bg.xml | 7 + .../drawable/ic_notifications_black_24dp.xml | 9 - app/src/main/res/drawable/icon_set.xml | 9 + app/src/main/res/drawable/like_gray.xml | 9 + app/src/main/res/drawable/like_red.xml | 9 + app/src/main/res/drawable/navgation_like.xml | 9 + app/src/main/res/drawable/selector_like.xml | 6 + app/src/main/res/layout/activity_about.xml | 120 ++++++ app/src/main/res/layout/activity_laun.xml | 15 +- app/src/main/res/layout/activity_privacy.xml | 43 ++ .../res/layout/activity_set_wallpaper.xml | 40 +- .../res/layout/activity_wallpaper_list.xml | 4 +- .../main/res/layout/fragment_dashboard.xml | 23 +- ...otifications.xml => fragment_favorite.xml} | 27 +- app/src/main/res/layout/fragment_home.xml | 4 +- app/src/main/res/menu/bottom_nav_menu.xml | 16 +- .../main/res/navigation/mobile_navigation.xml | 22 +- app/src/main/res/values/colors.xml | 4 + app/src/main/res/values/strings.xml | 15 +- build.gradle.kts | 1 + 50 files changed, 1425 insertions(+), 409 deletions(-) create mode 100644 app/src/main/assets/Pink_Wallpapers_privacy.html delete mode 100644 app/src/main/java/com/pink/cute/wallpapers/SetWallpaperActivity.kt create mode 100644 app/src/main/java/com/pink/cute/wallpapers/activity/AboutActivity.kt rename app/src/main/java/com/pink/cute/wallpapers/{ => activity}/LaunActivity.kt (95%) rename app/src/main/java/com/pink/cute/wallpapers/{ => activity}/MainActivity.kt (72%) create mode 100644 app/src/main/java/com/pink/cute/wallpapers/activity/PrivacyActivity.kt create mode 100644 app/src/main/java/com/pink/cute/wallpapers/activity/SetWallpaperActivity.kt rename app/src/main/java/com/pink/cute/wallpapers/{ => activity}/WallpaperListActivity.kt (68%) create mode 100644 app/src/main/java/com/pink/cute/wallpapers/myroom/CategoryDao.java create mode 100644 app/src/main/java/com/pink/cute/wallpapers/myroom/MyDatabase.kt create mode 100644 app/src/main/java/com/pink/cute/wallpapers/myroom/WallpaperDao.java create mode 100644 app/src/main/java/com/pink/cute/wallpapers/ui/notifications/FavoriteFragment.kt create mode 100644 app/src/main/java/com/pink/cute/wallpapers/ui/notifications/FavoriteViewModel.kt delete mode 100644 app/src/main/java/com/pink/cute/wallpapers/ui/notifications/NotificationsFragment.kt delete mode 100644 app/src/main/java/com/pink/cute/wallpapers/ui/notifications/NotificationsViewModel.kt create mode 100644 app/src/main/res/drawable/download.xml create mode 100644 app/src/main/res/drawable/download_bg.xml delete mode 100644 app/src/main/res/drawable/ic_notifications_black_24dp.xml create mode 100644 app/src/main/res/drawable/icon_set.xml create mode 100644 app/src/main/res/drawable/like_gray.xml create mode 100644 app/src/main/res/drawable/like_red.xml create mode 100644 app/src/main/res/drawable/navgation_like.xml create mode 100644 app/src/main/res/drawable/selector_like.xml create mode 100644 app/src/main/res/layout/activity_about.xml create mode 100644 app/src/main/res/layout/activity_privacy.xml rename app/src/main/res/layout/{fragment_notifications.xml => fragment_favorite.xml} (54%) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 276c4b1..0a0527d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,10 +1,12 @@ import java.util.Date import java.text.SimpleDateFormat plugins { + kotlin("kapt") id("com.android.application") id("org.jetbrains.kotlin.android") id("com.google.gms.google-services") id("com.google.firebase.crashlytics") + } val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date()) @@ -63,4 +65,12 @@ dependencies { + val room_version = "2.6.1" + implementation ("androidx.room:room-runtime:$room_version") + kapt("androidx.room:room-compiler:$room_version") + + implementation("com.squareup.okhttp3:okhttp:4.11.0") + + + } \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index e4a45eb..266f1b3 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -33,4 +33,19 @@ java.lang.Object writeReplace(); java.lang.Object readResolve(); -} \ No newline at end of file +} + + +-keepclassmembers class com.pink.cute.wallpapers.PinkWallpapers { + public static final java.lang.String DB_NAME; + public static final int DB_VERSION; +} + +-keepclassmembers class * { + @androidx.room.Query ; +} +-keep class com.pink.cute.wallpapers.bean.Wallpaper { *; } +-keep class com.pink.cute.wallpapers.bean.Category { *; } +-keep class com.pink.cute.wallpapers.myroom.MyDatabase { *; } +-keep class com.pink.cute.wallpapers.myroom.CategoryDao { *; } +-keep class com.pink.cute.wallpapers.myroom.WallpaperDao { *; } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 47915a2..3fd7164 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,6 +5,9 @@ + - + + @@ -34,7 +42,7 @@ diff --git a/app/src/main/assets/Pink_Wallpapers_privacy.html b/app/src/main/assets/Pink_Wallpapers_privacy.html new file mode 100644 index 0000000..5486378 --- /dev/null +++ b/app/src/main/assets/Pink_Wallpapers_privacy.html @@ -0,0 +1,144 @@ + + + + + + Privacy Policy + + + +
+

Privacy Policy

+

This page is used to inform visitors regarding our policies with the collection, use, and + disclosure of Personal Information if anyone decided to use our Service.

+ +

If you choose to use our Service, then you agree to the collection and use of information in + relation to this policy. The Personal Information that We collect is used for providing and + improving the Service. We will not use or share your information with anyone except as + described in this Privacy Policy.

+ +

The terms used in this Privacy Policy have the same meanings as in our Terms and Conditions, + which are accessible at [Terms and Conditions link] unless otherwise defined in this Privacy + Policy.

+ +

Information Collection and Use

+

For a better experience, while using our Service, We may require you to provide us with + certain personally identifiable information add whatever else you collect here, e.g. users + name, address, location, pictures. The information that We request will be retained on your + device and is not collected by us in any way retained by us and used as described in this + privacy policy.

+ +

The app does use third-party services that may collect information used to identify you. + Please refer to the privacy policy of the third-party service provider used by the + application.

+ +
    +
  • Google Play Services
  • +
  • Google Analytics for Firebase
  • +
  • Firebase Crashlytics
  • +
  • Unity
  • +
  • AppLovin
  • +
  • Vungle
  • +
+ +

Log Data

+

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

+ +

Cookies

+

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

+ +

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

+ +

Service Providers

+

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

+
    +
  • To facilitate our Service;
  • +
  • To provide the Service on our behalf;
  • +
  • To perform Service-related services; or
  • +
  • To assist us in analyzing how our Service is used.
  • +
+ +

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

+ +

Security

+

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

+ +

Links to Other Sites

+

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

+ +

Children’s Privacy

+

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

+ +

Changes to This Privacy Policy

+

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

+ +

This policy is effective as of 2024-01-09

+ +

Contact Us

+

If you have any questions or suggestions about our Privacy Policy, do not hesitate to contact + us at angiewiles2@gmail.com.

+
+ + diff --git a/app/src/main/assets/wallres.json b/app/src/main/assets/wallres.json index b86455f..7bc7433 100644 --- a/app/src/main/assets/wallres.json +++ b/app/src/main/assets/wallres.json @@ -1,6 +1,7 @@ [ { "name": "feature", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/d799900c0ed4448a858fabe9a97adb74.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/0778d29d9df3135981fa983db6447d4c.jpeg", @@ -102,6 +103,7 @@ }, { "name": "recent", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/35b096446e9a5d5f48ceb0200a8f998a.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/e3e9cfd7ecb0f9291a40577ccd5a6041.jpeg", @@ -191,6 +193,7 @@ }, { "name": "popular", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/450cfe73f9504835f27f7e86dff24d7f.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/cb1e57d9a8a8b74bd9da3a59d048b5f5.jpeg", @@ -280,6 +283,7 @@ }, { "name": "anime", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/4dedaccf8e3cdec4bab521ba2714735d.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/78a53756b869919dea40478e803165fe.jpeg", @@ -333,6 +337,7 @@ }, { "name": "unicorn", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/66e51fb0c777083a33c87169ff431c27.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/f394722f00db0df931ea62d8e0f1f273.jpeg", @@ -386,6 +391,7 @@ }, { "name": "kitty", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/77b08753cd065bd8e60873b1c119538d.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/0b52fe7cc5b2cf2d11cda94cf6dd77a9.jpeg", @@ -439,6 +445,7 @@ }, { "name": "puppies", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/29c711336f36473a3cacd4d9661f953a.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/d86f07746d129601913d2bf09599f6e8.jpeg", @@ -492,6 +499,7 @@ }, { "name": "flowers", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/c7a1784fb016359f7a62a882333cc83b.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/2a05f339aa023822a6b07c843910241d.jpeg", @@ -545,6 +553,7 @@ }, { "name": "eiffel tower", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/b6cde087dab857fdb24b0f0abd2385fa.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/d7ea774c7936847034e7d47c6a4c3621.jpeg", @@ -598,6 +607,7 @@ }, { "name": "dreamy", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/b66b86b24e7d5998b3ea5a6536929fa6.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/078a2934e9bd4e91691040427e42c1cf.jpeg", @@ -651,6 +661,7 @@ }, { "name": "animals", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/ad04501013a619c9b579dc2d9e593bf2.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/10a20226dda3cf01850566e1cfe2e57b.jpeg", @@ -704,6 +715,7 @@ }, { "name": "nature", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/aeaf0a95791d5064adf22a0dffc59692.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/0a0068552c7716f4e62b52389be2e7aa.jpeg", @@ -757,6 +769,7 @@ }, { "name": "cute", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/7a5e9212400d93fd5f5d6c1848b3d76e.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/6a53bf315f64477d85ceb46298475b8d.jpeg", @@ -810,6 +823,7 @@ }, { "name": "cute", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/6af1ac41c0bda2023d5b8268b7e1295b.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/24281fc765fce9da4c3d9d86e1e9ccf3.jpeg", @@ -863,6 +877,7 @@ }, { "name": "beautiful", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/0045a8e120149c1088dcc90669b4e08c.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/a2e09a56793fbf9e8104833a199cf332.jpeg", @@ -916,6 +931,7 @@ }, { "name": "love", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/7929459c12e04cfdc0613518a620b44b.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/93d96dd6956db5e77d25d83b9f46624c.jpeg", @@ -969,6 +985,7 @@ }, { "name": "quotes", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/3deec3b8eaeff16459a684cef5224b9b.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/ffdee201ab115879fd038a7f529d7d2c.jpeg", @@ -1022,6 +1039,7 @@ }, { "name": "kawaii", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/59eecae04d88aafdfc27dbdbed3f7206.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/de00f68d508f814beb905cd2fcb105b6.jpeg", @@ -1075,6 +1093,7 @@ }, { "name": "butterflies", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/2be531772db23680710b0ae0f6bbd6b1.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/14bec2138e0dbbb8269fcd823373ec81.jpeg", @@ -1128,6 +1147,7 @@ }, { "name": "ice-cream", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/0bf796c657ed4d6f71a87506f78d5810.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/1bbcf0d4423449788cbc823441a3639a.jpeg", @@ -1181,6 +1201,7 @@ }, { "name": "birds", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/eb8cff06bba7da5f3bdc7171815f30b0.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/d027d5c75d46118a8ff86257f87a7818.jpeg", @@ -1234,6 +1255,7 @@ }, { "name": "candy", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/e249865fcb0a40a9e64fbb125b467643.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/d0522722bb51d48e79670f07e4ec94ed.jpeg", @@ -1287,6 +1309,7 @@ }, { "name": "illustration", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/0bd89baff334793eac9ea18c651d43b5.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/741a4f4e3c11a30f5f250eabb255f3d5.jpeg", @@ -1340,6 +1363,7 @@ }, { "name": "colorful", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/2af2a4d4e9ab05a8ed888fb4a704ee07.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/668845fe70cd30c376a78f566e4b89c6.jpeg", @@ -1393,6 +1417,7 @@ }, { "name": "pattern", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/9e75b52e8e3fee0ad35f4145935c2cb2.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/8b570d932db8d172bb9c1aca58972d4d.jpeg", @@ -1446,6 +1471,7 @@ }, { "name": "floral", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/2831602ba02537da94d995723ccf7267.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/4ae5e4942ebe89d59e9cdc92b2805ccb.jpeg", @@ -1499,6 +1525,7 @@ }, { "name": "cakes", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/b18657ce8505fca699060de13b37ce03.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/96e101029fa82cad3fba032e4d907874.jpeg", @@ -1540,6 +1567,7 @@ }, { "name": "abstract", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/043429d95275d9ac3b571751507632d1.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/4bff588558b80ede14e99fdeeef127ad.jpeg", @@ -1593,6 +1621,7 @@ }, { "name": "amoled", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/c7e353bebb4b98ecd4cd3d5311fcc84d.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/13362a433eeb77a8fddc8c5a75291d57.jpeg", @@ -1646,6 +1675,7 @@ }, { "name": "vintage", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/0d7fe05abaa5a041d26b3c0541533f88.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/a4e335102bf1bd6e2b9a305afff7c9b0.jpeg", @@ -1699,6 +1729,7 @@ }, { "name": "cool", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/0d183f9e2cc4ad2626d58bf60ef423e6.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/de36a2eae65bb24a433f22d2de2adf2f.jpeg", @@ -1752,6 +1783,7 @@ }, { "name": "variety", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/fe57f912ce3eedf20716b20335b92a7a.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/3a5965c4291dba859c4b7f0b196f99c2.jpeg", @@ -1805,6 +1837,7 @@ }, { "name": "funny", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/b2e70fdc63bcefd5846f136da3975f9c.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/1bd4c32c2eb2045a19c4cf7afb8201d4.jpeg", @@ -1858,6 +1891,7 @@ }, { "name": "food", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/d04ee07feb44c02fcf92a7c3094370fb.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/3a49c824f553e1b8f2ce743cb89e1b6c.jpeg", @@ -1911,6 +1945,7 @@ }, { "name": "fashion", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/d9fb7a20ef94b3c8379eeabd2f085211.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/f90e441b77b209c856bb2441ba11bac4.jpeg", @@ -1964,6 +1999,7 @@ }, { "name": "sad", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/3670282caa3a1b93913827c103476de4.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/c59007c4e8b3befb96dbecb3ec326cc1.jpeg", @@ -2017,6 +2053,7 @@ }, { "name": "music", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/ba895bdb432d5ae1315777e89f07b2de.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/d5f3a2230952dab694ff0a80825e0a9d.jpeg", @@ -2038,6 +2075,7 @@ }, { "name": "fruit", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/25defad4df6676943fee66672cd9c469.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/e0f64bd789ef513368865c9f42adfaab.jpeg", @@ -2091,6 +2129,7 @@ }, { "name": "doll", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/cf99a915f6e25f8a84edb0297ae5d5a7.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/8adbcdd5abe61cc2210d8d5bdc7343e8.jpeg", @@ -2144,6 +2183,7 @@ }, { "name": "teddy", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/0cd0f61b1feaaca0be9d35baecfa9fb3.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/03b962f4e3ff5cc220544c6589a49482.jpeg", @@ -2197,6 +2237,7 @@ }, { "name": "winter", + "preUrl": "https://resource-sg-public.lux-ad.com/wallpaper/8497b431b92946723d7acbd1c9836bde.jpeg", "list": [ { "sourceUrl": "https://resource-sg-public.lux-ad.com/wallpaper/028622eed6c6083a721b5c6af19053d1.jpeg", diff --git a/app/src/main/java/com/pink/cute/wallpapers/PinkWallpapers.kt b/app/src/main/java/com/pink/cute/wallpapers/PinkWallpapers.kt index 6b8306e..89341bf 100644 --- a/app/src/main/java/com/pink/cute/wallpapers/PinkWallpapers.kt +++ b/app/src/main/java/com/pink/cute/wallpapers/PinkWallpapers.kt @@ -1,13 +1,24 @@ package com.pink.cute.wallpapers import android.app.Application +import android.util.Log import com.pink.cute.wallpapers.bean.Category import com.pink.cute.wallpapers.manager.Common +import com.pink.cute.wallpapers.myroom.MyDatabase +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch class PinkWallpapers : Application() { companion object { + + const val DB_NAME = "Wall" + const val DB_VERSION = 1 + const val TB_NAME_CATEGORY = "category" + const val TB_NAME_WALLPAPER = "wallpaper" + lateinit var pinkWallpapers: PinkWallpapers lateinit var categoryList: List @@ -22,9 +33,17 @@ class PinkWallpapers : Application() { } private fun analyzeFiles() { - val fdInput = assets.open("wallres.json") - val jsonStr = Common.getJsonString(fdInput) - categoryList = Common.getListCategory(jsonStr) + + CoroutineScope(Dispatchers.IO).launch { + val queryAllData = MyDatabase.myDatabase.CategoryDao().queryAllData() + Log.d("ting","---------queryAllData=${queryAllData.size}") + if (queryAllData.size <= 0) { + val fdInput = assets.open("wallres.json") + val jsonStr = Common.getJsonString(fdInput) + categoryList = Common.getListCategory(jsonStr) + } + + } } diff --git a/app/src/main/java/com/pink/cute/wallpapers/SetWallpaperActivity.kt b/app/src/main/java/com/pink/cute/wallpapers/SetWallpaperActivity.kt deleted file mode 100644 index e0ce059..0000000 --- a/app/src/main/java/com/pink/cute/wallpapers/SetWallpaperActivity.kt +++ /dev/null @@ -1,232 +0,0 @@ -package com.pink.cute.wallpapers - -import android.app.WallpaperManager -import android.graphics.Bitmap -import android.graphics.BitmapFactory -import android.graphics.drawable.Drawable -import android.os.Build -import android.os.Bundle -import android.util.Log -import android.view.LayoutInflater -import android.view.View -import android.view.WindowManager -import android.widget.Toast -import androidx.appcompat.app.AppCompatActivity -import androidx.core.view.isVisible -import androidx.lifecycle.lifecycleScope -import com.bumptech.glide.Glide -import com.bumptech.glide.load.DataSource -import com.bumptech.glide.load.engine.GlideException -import com.bumptech.glide.request.RequestListener -import com.bumptech.glide.request.target.CustomTarget -import com.bumptech.glide.request.target.Target -import com.bumptech.glide.request.transition.Transition -import com.pink.cute.wallpapers.bean.Wallpaper -import com.pink.cute.wallpapers.databinding.ActivitySetWallpaperBinding -import com.pink.cute.wallpapers.manager.Common -import com.pink.cute.wallpapers.manager.CropTransformation -import com.pink.cute.wallpapers.ui.DialogWallpaper -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import java.io.File - -class SetWallpaperActivity : AppCompatActivity() { - private lateinit var viewbing: ActivitySetWallpaperBinding - private lateinit var wallpaper: Wallpaper - private lateinit var wallpaperManager: WallpaperManager - - private var mFile: File? = null - private var mBitmap: Bitmap? = null - private var selectDialog: DialogWallpaper? = null - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - viewbing = ActivitySetWallpaperBinding.inflate(LayoutInflater.from(this), null, false) - setContentView(viewbing.root) - initBar() - - wallpaper = intent.getSerializableExtra(Common.KEY_WALLPAPER) as Wallpaper - wallpaperManager = WallpaperManager.getInstance(this) - loadSource() - - viewbing.btnBack.setOnClickListener { - finish() - } - viewbing.textSetBtn.setOnClickListener { - - startShowAd{ - startSet() - } - - } - } - - private fun startSet() { - if (selectDialog == null) { - selectDialog = DialogWallpaper.newInstance() - selectDialog?.onSetListener { - viewbing.loading.isVisible = true - mBitmap?.let { bitmap -> - when (it) { - Common.TYPE_BOTH -> { - lifecycleScope.launch { - withContext(Dispatchers.IO){ - wallpaperManager.setBitmap(bitmap)//FLAG_SYSTEM | FLAG_LOCK) - } - runOnUiThread { - viewbing.loading.isVisible = false - Toast.makeText( - this@SetWallpaperActivity, - getString(R.string.set_ok), - Toast.LENGTH_SHORT - ).show() - } - } - - - } - - - Common.TYPE_HOME -> { - lifecycleScope.launch { - withContext(Dispatchers.IO){ - Log.d("------","-------thread=${Thread.currentThread().name}") - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { - wallpaperManager.setBitmap(bitmap) - } else { - wallpaperManager.setBitmap( - bitmap, - null, - true, - WallpaperManager.FLAG_SYSTEM - ) - } - } - - runOnUiThread { - viewbing.loading.isVisible = false - Toast.makeText( - this@SetWallpaperActivity, - getString(R.string.set_ok), - Toast.LENGTH_SHORT - ).show() - } - - } - - } - - Common.TYPE_LOCK -> { - lifecycleScope.launch { - withContext(Dispatchers.IO) { - Log.d("------","-------IO thread=${Thread.currentThread().name}") - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { - wallpaperManager.setBitmap(bitmap) - } else { - wallpaperManager.setBitmap( - mBitmap, - null, - true, - WallpaperManager.FLAG_LOCK - ) - } - } - runOnUiThread { - viewbing.loading.isVisible = false - Toast.makeText( - this@SetWallpaperActivity, - getString(R.string.set_ok), - Toast.LENGTH_SHORT - ).show() - } - - } - - } - - Common.TYPE_DISSMISS -> { - viewbing.loading.isVisible = false - } - } - } - - } - } - selectDialog?.show(supportFragmentManager, "") - - } - - - - private fun startShowAd(action:()->Unit) { - // TODO: showAd - action.invoke() - } - - private fun initBar() { - window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) - window.decorView.systemUiVisibility = - View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN - } - - private fun loadSource1() { -// viewbing.loading.isVisible = true - Glide.with(this) - .asFile() - .load(wallpaper.source) - .thumbnail(0.1f) - .transform(CropTransformation()) - .into(object : CustomTarget() { - override fun onResourceReady(resource: File, transition: Transition?) { - if (resource.exists()) { - mFile = resource - Log.d("--------", "--------resource=${resource.absolutePath}") - val decodeFile = BitmapFactory.decodeFile(resource.absolutePath) - viewbing.previewImg.setImageBitmap(decodeFile) - } - - } - - override fun onLoadCleared(placeholder: Drawable?) { - - } - }) - } - - private fun loadSource() { - viewbing.loading.isVisible = true - Glide.with(this) - .asBitmap() - .load(wallpaper.source) - .thumbnail(0.1f) - .transform(CropTransformation()) - .listener(object : RequestListener { - override fun onLoadFailed( - e: GlideException?, - model: Any?, - target: Target, - isFirstResource: Boolean - ): Boolean { - - viewbing.loading.isVisible = false - return false - } - - override fun onResourceReady( - resource: Bitmap, - model: Any, - target: Target?, - dataSource: DataSource, - isFirstResource: Boolean - ): Boolean { - viewbing.loading.isVisible = false - mBitmap = resource - - return false - } - - - }).into(viewbing.previewImg) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/pink/cute/wallpapers/activity/AboutActivity.kt b/app/src/main/java/com/pink/cute/wallpapers/activity/AboutActivity.kt new file mode 100644 index 0000000..0a9c45a --- /dev/null +++ b/app/src/main/java/com/pink/cute/wallpapers/activity/AboutActivity.kt @@ -0,0 +1,77 @@ +package com.pink.cute.wallpapers.activity + + +import android.content.Intent +import android.content.pm.PackageInfo +import android.content.pm.PackageManager +import android.net.Uri +import android.os.Bundle +import android.util.Log +import androidx.appcompat.app.AppCompatActivity +import com.pink.cute.wallpapers.R +import com.pink.cute.wallpapers.databinding.ActivityAboutBinding + + +class AboutActivity : AppCompatActivity() { + private lateinit var vb: ActivityAboutBinding + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + vb = ActivityAboutBinding.inflate(layoutInflater) + setContentView(vb.root) +// AdManager.loadAllAd() + val appVersionName = getAppVersionName() + appVersionName?.run { + vb.tvVersion.text = String.format(getString(R.string.app_version), this.versionName) + } ?: run { + vb.tvVersion.text = String.format(getString(R.string.app_version), "1.0.0") + } + vb.back.setOnClickListener { +// AdManager.showTopOn(this@AboutActivity) { + finish() +// } + } + vb.tvRate.setOnClickListener { + try { + + val uri = String.format(getString(R.string.gp), packageName) + startActivity(Intent(Intent.ACTION_VIEW).apply { + data = Uri.parse(uri) + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + }) + + }catch (ex:Exception){ + Log.d("ting","---------ex=${ex.message}") + } + } + + vb.tvPrivacy.setOnClickListener { + startActivity(Intent(this@AboutActivity, PrivacyActivity::class.java)) + + } + vb.tvShare.setOnClickListener { + val uri = String.format(getString(R.string.gp), packageName) + val sendIntent = Intent(Intent.ACTION_SEND).apply { + putExtra(Intent.EXTRA_TEXT, uri) + type = "text/plain" + } + startActivity(Intent.createChooser(sendIntent, resources.getString(R.string.share_title))) + } + } + + + override fun onBackPressed() { + super.onBackPressed() +// AdManager.showTopOn(this@AboutActivity) { +// +// } + } + + private fun getAppVersionName(): PackageInfo? { + return try { + packageManager.getPackageInfo(packageName, 0) + + } catch (e: PackageManager.NameNotFoundException) { + null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/pink/cute/wallpapers/LaunActivity.kt b/app/src/main/java/com/pink/cute/wallpapers/activity/LaunActivity.kt similarity index 95% rename from app/src/main/java/com/pink/cute/wallpapers/LaunActivity.kt rename to app/src/main/java/com/pink/cute/wallpapers/activity/LaunActivity.kt index 08e5aa4..9f22b41 100644 --- a/app/src/main/java/com/pink/cute/wallpapers/LaunActivity.kt +++ b/app/src/main/java/com/pink/cute/wallpapers/activity/LaunActivity.kt @@ -1,4 +1,4 @@ -package com.pink.cute.wallpapers +package com.pink.cute.wallpapers.activity import android.content.Intent import androidx.appcompat.app.AppCompatActivity @@ -20,7 +20,6 @@ class LaunActivity : AppCompatActivity() { startActivity(Intent(this@LaunActivity, MainActivity::class.java)) finish() - } override fun onDestroy() { diff --git a/app/src/main/java/com/pink/cute/wallpapers/MainActivity.kt b/app/src/main/java/com/pink/cute/wallpapers/activity/MainActivity.kt similarity index 72% rename from app/src/main/java/com/pink/cute/wallpapers/MainActivity.kt rename to app/src/main/java/com/pink/cute/wallpapers/activity/MainActivity.kt index ee2026d..2a3335c 100644 --- a/app/src/main/java/com/pink/cute/wallpapers/MainActivity.kt +++ b/app/src/main/java/com/pink/cute/wallpapers/activity/MainActivity.kt @@ -1,12 +1,14 @@ -package com.pink.cute.wallpapers +package com.pink.cute.wallpapers.activity import android.os.Bundle -import com.google.android.material.bottomnavigation.BottomNavigationView import androidx.appcompat.app.AppCompatActivity import androidx.navigation.findNavController import androidx.navigation.ui.setupWithNavController +import com.google.android.material.bottomnavigation.BottomNavigationView +import com.pink.cute.wallpapers.R import com.pink.cute.wallpapers.databinding.ActivityMainBinding + class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding @@ -20,12 +22,8 @@ class MainActivity : AppCompatActivity() { val navView: BottomNavigationView = binding.navView val navController = findNavController(R.id.nav_host_fragment_activity_main) -// val appBarConfiguration = AppBarConfiguration( -// setOf( -// R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications -// ) -// ) -// setupActionBarWithNavController(navController, appBarConfiguration) + navView.setupWithNavController(navController) + } } \ No newline at end of file diff --git a/app/src/main/java/com/pink/cute/wallpapers/activity/PrivacyActivity.kt b/app/src/main/java/com/pink/cute/wallpapers/activity/PrivacyActivity.kt new file mode 100644 index 0000000..7345ebc --- /dev/null +++ b/app/src/main/java/com/pink/cute/wallpapers/activity/PrivacyActivity.kt @@ -0,0 +1,29 @@ +package com.pink.cute.wallpapers.activity + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import com.pink.cute.wallpapers.databinding.ActivityPrivacyBinding + + +class PrivacyActivity : AppCompatActivity() { + + private lateinit var vb: ActivityPrivacyBinding + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + vb = ActivityPrivacyBinding.inflate(layoutInflater) + setContentView(vb.root) + vb.webView.loadUrl("file:///android_asset/Pink_Wallpapers_privacy.html") + vb.back.setOnClickListener { + + finish() + + } + + } + + override fun onBackPressed() { + super.onBackPressed() + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/pink/cute/wallpapers/activity/SetWallpaperActivity.kt b/app/src/main/java/com/pink/cute/wallpapers/activity/SetWallpaperActivity.kt new file mode 100644 index 0000000..49be79d --- /dev/null +++ b/app/src/main/java/com/pink/cute/wallpapers/activity/SetWallpaperActivity.kt @@ -0,0 +1,393 @@ +package com.pink.cute.wallpapers.activity + +import android.Manifest +import android.app.Activity +import android.app.WallpaperManager +import android.content.ContentValues +import android.content.Context +import android.content.pm.PackageManager +import android.graphics.Bitmap +import android.graphics.BitmapFactory +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.WindowManager +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import androidx.core.app.ActivityCompat +import androidx.core.graphics.drawable.toBitmap +import androidx.core.view.isVisible +import androidx.lifecycle.lifecycleScope +import com.bumptech.glide.Glide +import com.bumptech.glide.load.DataSource +import com.bumptech.glide.load.engine.GlideException +import com.bumptech.glide.request.RequestListener +import com.bumptech.glide.request.target.Target +import com.pink.cute.wallpapers.PinkWallpapers +import com.pink.cute.wallpapers.R +import com.pink.cute.wallpapers.bean.Wallpaper +import com.pink.cute.wallpapers.databinding.ActivitySetWallpaperBinding +import com.pink.cute.wallpapers.manager.Common +import com.pink.cute.wallpapers.manager.CropTransformation +import com.pink.cute.wallpapers.myroom.MyDatabase +import com.pink.cute.wallpapers.ui.DialogWallpaper +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import java.io.File +import java.io.FileInputStream +import java.io.IOException + +class SetWallpaperActivity : AppCompatActivity() { + private lateinit var viewbing: ActivitySetWallpaperBinding + private lateinit var wallpaper: Wallpaper + private lateinit var wallpaperManager: WallpaperManager + + private var mBitmap: Bitmap? = null + private var selectDialog: DialogWallpaper? = null + + private val code = -23 + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + viewbing = ActivitySetWallpaperBinding.inflate(LayoutInflater.from(this), null, false) + setContentView(viewbing.root) + initBar() + + wallpaper = intent.getSerializableExtra(Common.KEY_WALLPAPER) as Wallpaper + refrshLike() + wallpaperManager = WallpaperManager.getInstance(this) + loadSource() + + + + + + viewbing.btnBack.setOnClickListener { + finish() + } + viewbing.textSetBtn.setOnClickListener { + startShowAd { + startSet() + } + + } + viewbing.btnSave.setOnClickListener { + if (requestPermission(this@SetWallpaperActivity, code)) { + startSave() + } + } + + viewbing.btnLike.setOnClickListener { + viewbing.imLike.isSelected = !viewbing.imLike.isSelected + if(viewbing.imLike.isSelected){ + Toast.makeText(this, getString(R.string.add_like), Toast.LENGTH_SHORT) + .show() + }else{ + Toast.makeText(this, getString(R.string.cancel_like), Toast.LENGTH_SHORT) + .show() + } + } + } + + private fun refrshLike(){ + CoroutineScope(Dispatchers.IO).launch { + wallpaper = MyDatabase.myDatabase.WallpaperDao().queryWallpaper(wallpaper.id) + withContext(Dispatchers.Main){ + viewbing.imLike.isSelected = wallpaper.like + } + } + + } + + override fun onPause() { + super.onPause() + CoroutineScope(Dispatchers.IO).launch { + MyDatabase.myDatabase.WallpaperDao().updateWallpaper(wallpaper.apply { + like = viewbing.imLike.isSelected + }) + } + } + + private fun startSave() { + viewbing.loading.isVisible = true + wallpaper.sourceCache?.let { + val file = File(it) + if (file.exists()) { + val saveToGallery = saveToGallery(PinkWallpapers.pinkWallpapers, file) + if (saveToGallery != null) { + Toast.makeText(this, getString(R.string.save_success), Toast.LENGTH_SHORT) + .show() + } else { + Toast.makeText(this, getString(R.string.save_fail), Toast.LENGTH_SHORT) + .show() + } + viewbing.loading.isVisible = false + } + } ?: run { + Toast.makeText(this, getString(R.string.save_fail), Toast.LENGTH_SHORT) + .show() + viewbing.loading.isVisible = false + } + + } + + private fun startSet() { + mBitmap = viewbing.previewImg.drawable.toBitmap() + if (selectDialog == null) { + selectDialog = DialogWallpaper.newInstance() + selectDialog?.onSetListener { + viewbing.loading.isVisible = true + mBitmap?.let { bitmap -> + when (it) { + Common.TYPE_BOTH -> { + lifecycleScope.launch { + withContext(Dispatchers.IO) { + wallpaperManager.setBitmap(bitmap)//FLAG_SYSTEM | FLAG_LOCK) + } + runOnUiThread { + viewbing.loading.isVisible = false + Toast.makeText( + this@SetWallpaperActivity, + getString(R.string.set_ok), + Toast.LENGTH_SHORT + ).show() + } + } + + + } + + + Common.TYPE_HOME -> { + lifecycleScope.launch { + withContext(Dispatchers.IO) { + Log.d("------", "-------thread=${Thread.currentThread().name}") + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { + wallpaperManager.setBitmap(bitmap) + } else { + wallpaperManager.setBitmap( + bitmap, + null, + true, + WallpaperManager.FLAG_SYSTEM + ) + } + } + + runOnUiThread { + viewbing.loading.isVisible = false + Toast.makeText( + this@SetWallpaperActivity, + getString(R.string.set_ok), + Toast.LENGTH_SHORT + ).show() + } + + } + + } + + Common.TYPE_LOCK -> { + lifecycleScope.launch { + withContext(Dispatchers.IO) { + Log.d( + "------", + "-------IO thread=${Thread.currentThread().name}" + ) + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { + wallpaperManager.setBitmap(bitmap) + } else { + wallpaperManager.setBitmap( + mBitmap, + null, + true, + WallpaperManager.FLAG_LOCK + ) + } + } + runOnUiThread { + viewbing.loading.isVisible = false + Toast.makeText( + this@SetWallpaperActivity, + getString(R.string.set_ok), + Toast.LENGTH_SHORT + ).show() + } + + } + + } + + Common.TYPE_DISSMISS -> { + viewbing.loading.isVisible = false + } + } + } + + } + } + selectDialog?.show(supportFragmentManager, "") + + } + + + private fun startShowAd(action: () -> Unit) { + action.invoke() + } + + private fun initBar() { + window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) + window.decorView.systemUiVisibility = + View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN + } + + private fun loadSource() { + viewbing.loading.isVisible = true + Glide.with(this) + .asFile() + .load(wallpaper.source) + .thumbnail(0.1f) + .transform(CropTransformation()) + .listener(object : RequestListener { + override fun onLoadFailed( + e: GlideException?, + model: Any?, + target: Target, + isFirstResource: Boolean + ): Boolean { + viewbing.loading.isVisible = false + Toast.makeText( + this@SetWallpaperActivity, + getString(R.string.load_file), + Toast.LENGTH_SHORT + ) + .show() + return false + } + + override fun onResourceReady( + resource: File, + model: Any, + target: Target?, + dataSource: DataSource, + isFirstResource: Boolean + ): Boolean { + wallpaper.sourceCache = resource.absolutePath + val bitmap = BitmapFactory.decodeFile(resource.absolutePath) + viewbing.previewImg.setImageBitmap(bitmap) + viewbing.loading.isVisible = false + return false + } + + }).preload() + } + + /** + * .listener(object : RequestListener { + * override fun onLoadFailed( + * e: GlideException?, + * model: Any?, + * target: Target, + * isFirstResource: Boolean + * ): Boolean { + * + * viewbing.loading.isVisible = false + * return false + * } + * + * override fun onResourceReady( + * resource: Bitmap, + * model: Any, + * target: Target?, + * dataSource: DataSource, + * isFirstResource: Boolean + * ): Boolean { + * viewbing.loading.isVisible = false + * mBitmap = resource + * + * return false + * } + * }) + */ + override fun onRequestPermissionsResult( + requestCode: Int, + permissions: Array, + grantResults: IntArray + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + if (requestCode == code) { + if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + startSave() + } else { + Toast.makeText(this, getString(R.string.grant_permission), Toast.LENGTH_SHORT) + .show() + } + } + } + + private fun requestPermission(context: Activity, requestCode: Int): Boolean { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + return true + } + return if (context.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions( + context, + arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), + requestCode + ) + false + } else { + true + } + } + + + private fun saveToGallery(context: Context, photoFile: File): Uri? { + val displayName = "${System.currentTimeMillis()}.jpg" + val contentValues = ContentValues().apply { + put(MediaStore.Images.Media.DISPLAY_NAME, displayName) + put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg") + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + put(MediaStore.Images.Media.IS_PENDING, 1) + } + } + + val contentResolver = context.contentResolver + val collectionUri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY) + } else { + MediaStore.Images.Media.EXTERNAL_CONTENT_URI + } + + val imageUri = contentResolver.insert(collectionUri, contentValues) + + imageUri?.let { uri -> + try { + contentResolver.openOutputStream(uri)?.use { outputStream -> + val inputStream = FileInputStream(photoFile) + inputStream.copyTo(outputStream) + inputStream.close() + outputStream.close() + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + contentValues.clear() + contentValues.put(MediaStore.Images.Media.IS_PENDING, 0) + contentResolver.update(uri, contentValues, null, null) + } else { + + } + return uri + } catch (e: IOException) { + return null + } + } ?: run { + return null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/pink/cute/wallpapers/WallpaperListActivity.kt b/app/src/main/java/com/pink/cute/wallpapers/activity/WallpaperListActivity.kt similarity index 68% rename from app/src/main/java/com/pink/cute/wallpapers/WallpaperListActivity.kt rename to app/src/main/java/com/pink/cute/wallpapers/activity/WallpaperListActivity.kt index bd5b749..3efd9ed 100644 --- a/app/src/main/java/com/pink/cute/wallpapers/WallpaperListActivity.kt +++ b/app/src/main/java/com/pink/cute/wallpapers/activity/WallpaperListActivity.kt @@ -1,35 +1,41 @@ -package com.pink.cute.wallpapers +package com.pink.cute.wallpapers.activity import android.os.Bundle import android.view.LayoutInflater import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.GridLayoutManager +import com.pink.cute.wallpapers.PinkWallpapers +import com.pink.cute.wallpapers.bean.Category import com.pink.cute.wallpapers.databinding.ActivityWallpaperListBinding import com.pink.cute.wallpapers.manager.Common import com.pink.cute.wallpapers.manager.ItemDecoration +import com.pink.cute.wallpapers.myroom.MyDatabase import com.pink.cute.wallpapers.viewadapter.AdapterRecommend +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch class WallpaperListActivity : AppCompatActivity() { private lateinit var viewbing: ActivityWallpaperListBinding private lateinit var mAdapter: AdapterRecommend + private lateinit var mCategory: Category + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) viewbing = ActivityWallpaperListBinding.inflate(LayoutInflater.from(this), null, false) setContentView(viewbing.root) - val categoryName = intent.getStringExtra(Common.KEY_CATEGORY_NAME) + mCategory = intent.getSerializableExtra(Common.KEY_CATEGORY_NAME) as Category mAdapter = AdapterRecommend(this) - PinkWallpapers.categoryList.filter { - it.category == categoryName - }.let { - mAdapter.updateList(it[0].list) - + CoroutineScope(Dispatchers.IO).launch{ + val queryList = MyDatabase.myDatabase.WallpaperDao().queryList(mCategory.id) + mAdapter.updateList(queryList) } setList() - viewbing.textName.text = categoryName + viewbing.textName.text = mCategory.category viewbing.btnBack.setOnClickListener { startShowAd { finish() diff --git a/app/src/main/java/com/pink/cute/wallpapers/bean/Category.kt b/app/src/main/java/com/pink/cute/wallpapers/bean/Category.kt index 9cd4aed..041a3ac 100644 --- a/app/src/main/java/com/pink/cute/wallpapers/bean/Category.kt +++ b/app/src/main/java/com/pink/cute/wallpapers/bean/Category.kt @@ -1,4 +1,16 @@ package com.pink.cute.wallpapers.bean -class Category(var category: String,var list:List) { +import androidx.room.Entity +import androidx.room.PrimaryKey +import com.pink.cute.wallpapers.PinkWallpapers +import java.io.Serializable + + +@Entity(tableName = PinkWallpapers.TB_NAME_CATEGORY) +class Category( + @PrimaryKey(autoGenerate = true) + var id: Long = 0, + var category: String, + var covert:String +):Serializable{ } \ No newline at end of file diff --git a/app/src/main/java/com/pink/cute/wallpapers/bean/Wallpaper.kt b/app/src/main/java/com/pink/cute/wallpapers/bean/Wallpaper.kt index aa9318b..2e7cc3b 100644 --- a/app/src/main/java/com/pink/cute/wallpapers/bean/Wallpaper.kt +++ b/app/src/main/java/com/pink/cute/wallpapers/bean/Wallpaper.kt @@ -1,6 +1,29 @@ package com.pink.cute.wallpapers.bean +import androidx.room.Entity +import androidx.room.ForeignKey +import androidx.room.Index +import androidx.room.PrimaryKey +import com.pink.cute.wallpapers.PinkWallpapers import java.io.Serializable -class Wallpaper(var source: String,var preview:String) :Serializable{ +@Entity( + tableName = PinkWallpapers.TB_NAME_WALLPAPER, foreignKeys = arrayOf( + ForeignKey( + entity = Category::class, + parentColumns = arrayOf("id"), + childColumns = arrayOf("categoryId"), + onDelete = ForeignKey.CASCADE + ) + ), + indices = [Index(value = ["id"], unique = true)] +) +class Wallpaper( + @PrimaryKey(autoGenerate = true) + var id: Long = 0, + var categoryId: Long = 0, + var source: String, var preview: String, + var sourceCache: String?= null, + var like: Boolean = false +) : Serializable { } \ No newline at end of file diff --git a/app/src/main/java/com/pink/cute/wallpapers/manager/Common.kt b/app/src/main/java/com/pink/cute/wallpapers/manager/Common.kt index ec03ba4..46fe78f 100644 --- a/app/src/main/java/com/pink/cute/wallpapers/manager/Common.kt +++ b/app/src/main/java/com/pink/cute/wallpapers/manager/Common.kt @@ -1,8 +1,10 @@ package com.pink.cute.wallpapers.manager +import android.util.Log import com.pink.cute.wallpapers.PinkWallpapers import com.pink.cute.wallpapers.bean.Category import com.pink.cute.wallpapers.bean.Wallpaper +import com.pink.cute.wallpapers.myroom.MyDatabase import org.json.JSONArray import java.io.BufferedReader import java.io.ByteArrayOutputStream @@ -29,15 +31,28 @@ object Common { for (i in 0 until array.length()) { val any = array.getJSONObject(i) val title = any.getString("name") + val mCovert = any.getString("preUrl") + val category = Category(category = title, covert = mCovert) + data.add(category) + val insertCateId = MyDatabase.myDatabase.CategoryDao().insertData(category) + val jsonArray = any.getJSONArray("list") var wallpaperMutableList = mutableListOf() + + Log.d("ting","-----------category=${category.category} $insertCateId") for (k in 0 until jsonArray.length()) { val jsonObject = jsonArray.getJSONObject(k) val source = jsonObject.getString("sourceUrl") val preview = jsonObject.getString("preUrl") - wallpaperMutableList.add(Wallpaper(preview = preview, source = source)) + + val wallpaper = Wallpaper(preview = preview, source = source, categoryId = insertCateId) + MyDatabase.myDatabase.WallpaperDao().insertWallpaper(wallpaper) + + wallpaperMutableList.add(wallpaper) } - data.add(Category(title, wallpaperMutableList)) + + + } return data diff --git a/app/src/main/java/com/pink/cute/wallpapers/myroom/CategoryDao.java b/app/src/main/java/com/pink/cute/wallpapers/myroom/CategoryDao.java new file mode 100644 index 0000000..f8834db --- /dev/null +++ b/app/src/main/java/com/pink/cute/wallpapers/myroom/CategoryDao.java @@ -0,0 +1,31 @@ +package com.pink.cute.wallpapers.myroom; + +import androidx.lifecycle.LiveData; +import androidx.room.Dao; +import androidx.room.Insert; +import androidx.room.OnConflictStrategy; +import androidx.room.Query; + + +import com.pink.cute.wallpapers.bean.Category; + +import java.util.List; + +@Dao +public interface CategoryDao { + + @Insert(onConflict = OnConflictStrategy.IGNORE) + long insertData(Category data); + + + @Query("select * from category order by id desc") + LiveData> queryAll(); + + @Query("select * from category where category = :title") + Category queryCateId(String title); + + @Query("select * from category order by id desc") + List queryAllData(); + + +} diff --git a/app/src/main/java/com/pink/cute/wallpapers/myroom/MyDatabase.kt b/app/src/main/java/com/pink/cute/wallpapers/myroom/MyDatabase.kt new file mode 100644 index 0000000..00861a1 --- /dev/null +++ b/app/src/main/java/com/pink/cute/wallpapers/myroom/MyDatabase.kt @@ -0,0 +1,31 @@ +package com.pink.cute.wallpapers.myroom + +import androidx.room.Database +import androidx.room.Room +import androidx.room.RoomDatabase + +import com.pink.cute.wallpapers.PinkWallpapers +import com.pink.cute.wallpapers.bean.Category +import com.pink.cute.wallpapers.bean.Wallpaper + +@Database( + entities = [Category::class, Wallpaper::class], + version = PinkWallpapers.DB_VERSION, + exportSchema = false +) +abstract class MyDatabase : RoomDatabase() { + + abstract fun CategoryDao(): CategoryDao + abstract fun WallpaperDao(): WallpaperDao + + + companion object { + val myDatabase: MyDatabase by lazy { + Room.databaseBuilder( + PinkWallpapers.pinkWallpapers, MyDatabase::class.java, + PinkWallpapers.DB_NAME + ).build() + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/pink/cute/wallpapers/myroom/WallpaperDao.java b/app/src/main/java/com/pink/cute/wallpapers/myroom/WallpaperDao.java new file mode 100644 index 0000000..068b220 --- /dev/null +++ b/app/src/main/java/com/pink/cute/wallpapers/myroom/WallpaperDao.java @@ -0,0 +1,30 @@ +package com.pink.cute.wallpapers.myroom; + +import androidx.lifecycle.LiveData; +import androidx.room.Dao; +import androidx.room.Insert; +import androidx.room.OnConflictStrategy; +import androidx.room.Query; +import androidx.room.Update; + +import com.pink.cute.wallpapers.bean.Wallpaper; + +import java.util.List; + +@Dao +public interface WallpaperDao { + + @Insert(onConflict = OnConflictStrategy.IGNORE) + void insertWallpaper(Wallpaper prank); + + @Query("select * from wallpaper where `like` ==:mlike") + LiveData> queryAllLike(boolean mlike ); + + @Query("select * from wallpaper where categoryId ==:mId") + List queryList(long mId); + + @Query("select * from wallpaper where id ==:mId") + Wallpaper queryWallpaper(long mId); + @Update + void updateWallpaper(Wallpaper wallpaper); +} diff --git a/app/src/main/java/com/pink/cute/wallpapers/ui/dashboard/DashboardFragment.kt b/app/src/main/java/com/pink/cute/wallpapers/ui/dashboard/DashboardFragment.kt index cda28f2..f2d6f21 100644 --- a/app/src/main/java/com/pink/cute/wallpapers/ui/dashboard/DashboardFragment.kt +++ b/app/src/main/java/com/pink/cute/wallpapers/ui/dashboard/DashboardFragment.kt @@ -1,5 +1,6 @@ package com.pink.cute.wallpapers.ui.dashboard +import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -7,6 +8,7 @@ import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.GridLayoutManager +import com.pink.cute.wallpapers.activity.AboutActivity import com.pink.cute.wallpapers.databinding.FragmentDashboardBinding import com.pink.cute.wallpapers.manager.ItemDecoration import com.pink.cute.wallpapers.viewadapter.AdapterRecommend @@ -15,8 +17,7 @@ class DashboardFragment : Fragment() { private var _binding: FragmentDashboardBinding? = null - // This property is only valid between onCreateView and - // onDestroyView. + private val binding get() = _binding!! private lateinit var mAdapter: AdapterRecommend @@ -30,21 +31,30 @@ class DashboardFragment : Fragment() { _binding = FragmentDashboardBinding.inflate(inflater, container, false) val root: View = binding.root - dashboardViewModel.setListValue() + mAdapter = AdapterRecommend(requireContext()) setList() dashboardViewModel.listLiveData.observe(viewLifecycleOwner) { mAdapter.updateList(it) } + onClick() return root } - private fun setList() { - binding.recomonedRecycler.run { - layoutManager = GridLayoutManager(requireContext(),3) - adapter = mAdapter - addItemDecoration(ItemDecoration(8,8,2)) + + private fun onClick() { + binding.set.setOnClickListener { + startActivity(Intent(requireContext(), AboutActivity::class.java)) } } + + private fun setList() { + binding.recomonedRecycler.run { + layoutManager = GridLayoutManager(requireContext(), 3) + adapter = mAdapter + addItemDecoration(ItemDecoration(8, 8, 2)) + } + } + override fun onDestroyView() { super.onDestroyView() _binding = null diff --git a/app/src/main/java/com/pink/cute/wallpapers/ui/dashboard/DashboardViewModel.kt b/app/src/main/java/com/pink/cute/wallpapers/ui/dashboard/DashboardViewModel.kt index 04e6387..18b8ec8 100644 --- a/app/src/main/java/com/pink/cute/wallpapers/ui/dashboard/DashboardViewModel.kt +++ b/app/src/main/java/com/pink/cute/wallpapers/ui/dashboard/DashboardViewModel.kt @@ -5,6 +5,12 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.pink.cute.wallpapers.PinkWallpapers import com.pink.cute.wallpapers.bean.Wallpaper +import com.pink.cute.wallpapers.myroom.CategoryDao +import com.pink.cute.wallpapers.myroom.MyDatabase +import com.pink.cute.wallpapers.myroom.WallpaperDao +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch class DashboardViewModel : ViewModel() { @@ -12,15 +18,32 @@ class DashboardViewModel : ViewModel() { val listLiveData: LiveData> = _list - fun setListValue() { - val wallpaperList = mutableListOf() - val data = PinkWallpapers.categoryList.filter { - it.category == "recent" || it.category == "feature" || it.category == "popular" + init { + CoroutineScope(Dispatchers.IO).launch { + val queryCateId1 = MyDatabase.myDatabase.CategoryDao().queryCateId("recent") + val queryCateId2 = MyDatabase.myDatabase.CategoryDao().queryCateId("feature") + val queryCateId3 = MyDatabase.myDatabase.CategoryDao().queryCateId("popular") + + var list = mutableListOf() + + queryCateId1?.let { + val queryList = MyDatabase.myDatabase.WallpaperDao().queryList(queryCateId1.id) + list.addAll(queryList) + } + queryCateId2?.let { + val queryList2 = MyDatabase.myDatabase.WallpaperDao().queryList(queryCateId2.id) + list.addAll(queryList2) + } + queryCateId3?.let { + val queryList3 = MyDatabase.myDatabase.WallpaperDao().queryList(queryCateId3.id) + list.addAll(queryList3) + } + + list.shuffle() + _list.postValue(list) } - data.forEach { - wallpaperList.addAll(it.list) - } - wallpaperList.shuffle() - _list.postValue(wallpaperList) + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/pink/cute/wallpapers/ui/home/HomeFragment.kt b/app/src/main/java/com/pink/cute/wallpapers/ui/home/HomeFragment.kt index 45b8538..753a589 100644 --- a/app/src/main/java/com/pink/cute/wallpapers/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/pink/cute/wallpapers/ui/home/HomeFragment.kt @@ -8,7 +8,9 @@ import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.GridLayoutManager -import com.pink.cute.wallpapers.WallpaperListActivity +import com.pink.cute.wallpapers.activity.AboutActivity +import com.pink.cute.wallpapers.activity.SetWallpaperActivity +import com.pink.cute.wallpapers.activity.WallpaperListActivity import com.pink.cute.wallpapers.databinding.FragmentHomeBinding import com.pink.cute.wallpapers.manager.Common import com.pink.cute.wallpapers.manager.ItemDecoration @@ -29,12 +31,15 @@ class HomeFragment : Fragment() { savedInstanceState: Bundle? ): View { val homeViewModel = ViewModelProvider(this)[HomeViewModel::class.java] - homeViewModel.setListValue() + _binding = FragmentHomeBinding.inflate(inflater, container, false) val root: View = binding.root adapterCategory = AdapterCategory(requireContext()) - homeViewModel.listLiveData.observe(viewLifecycleOwner) { - adapterCategory.updateList(it) + homeViewModel.listLiveData.observe(viewLifecycleOwner) { list-> + val data = list.filter { + it.category != "recent" && it.category != "feature" && it.category != "popular" + } + adapterCategory.updateList(data) } setList() return root @@ -42,18 +47,20 @@ class HomeFragment : Fragment() { private fun setList() { binding.categoryRecycler.run { - layoutManager = GridLayoutManager(requireContext(),2) + layoutManager = GridLayoutManager(requireContext(), 2) adapter = adapterCategory - addItemDecoration(ItemDecoration(12,12,2)) + addItemDecoration(ItemDecoration(12, 12, 2)) } - adapterCategory.setClickAction{ - startActivity( Intent(requireContext(),WallpaperListActivity::class.java).apply { - putExtra(Common.KEY_CATEGORY_NAME,it) + adapterCategory.setClickAction { + startActivity(Intent(requireContext(), WallpaperListActivity::class.java).apply { + putExtra(Common.KEY_CATEGORY_NAME, it) }) } + + } override fun onDestroyView() { diff --git a/app/src/main/java/com/pink/cute/wallpapers/ui/home/HomeViewModel.kt b/app/src/main/java/com/pink/cute/wallpapers/ui/home/HomeViewModel.kt index b16a52e..381921a 100644 --- a/app/src/main/java/com/pink/cute/wallpapers/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/pink/cute/wallpapers/ui/home/HomeViewModel.kt @@ -5,17 +5,22 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.pink.cute.wallpapers.PinkWallpapers import com.pink.cute.wallpapers.bean.Category +import com.pink.cute.wallpapers.myroom.CategoryDao +import com.pink.cute.wallpapers.myroom.MyDatabase -class HomeViewModel : ViewModel() { - - private val _list = MutableLiveData>() - val listLiveData: LiveData> = _list +class HomeViewModel(var cateDao: CategoryDao? = null) : ViewModel() { - fun setListValue() { - val data = PinkWallpapers.categoryList.filter { - it.category != "recent" && it.category != "feature" && it.category != "popular" - } - _list.postValue(data) + var listLiveData: LiveData> + + init { + cateDao = MyDatabase.myDatabase.CategoryDao() + val queryAll = cateDao?.queryAll() +// val data = PinkWallpapers.categoryList.filter { +// it.category != "recent" && it.category != "feature" && it.category != "popular" +// } + listLiveData = queryAll!! } + + } \ No newline at end of file diff --git a/app/src/main/java/com/pink/cute/wallpapers/ui/notifications/FavoriteFragment.kt b/app/src/main/java/com/pink/cute/wallpapers/ui/notifications/FavoriteFragment.kt new file mode 100644 index 0000000..197560a --- /dev/null +++ b/app/src/main/java/com/pink/cute/wallpapers/ui/notifications/FavoriteFragment.kt @@ -0,0 +1,57 @@ +package com.pink.cute.wallpapers.ui.notifications + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.core.view.isVisible +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.GridLayoutManager +import com.pink.cute.wallpapers.databinding.FragmentFavoriteBinding +import com.pink.cute.wallpapers.manager.ItemDecoration +import com.pink.cute.wallpapers.viewadapter.AdapterRecommend + +class FavoriteFragment : Fragment() { + + private var _binding: FragmentFavoriteBinding? = null + + + private val binding get() = _binding!! + private lateinit var mAdapter: AdapterRecommend + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + val favoriteViewModel = + ViewModelProvider(this).get(FavoriteViewModel::class.java) + + _binding = FragmentFavoriteBinding.inflate(inflater, container, false) + val root: View = binding.root + + mAdapter = AdapterRecommend(requireContext()) + setList() + favoriteViewModel.listLiveData.observe(viewLifecycleOwner) { + updateView(it.isNotEmpty()) + mAdapter.updateList(it) + } + return root + } + + private fun updateView(hasData: Boolean){ + binding.tvNoData.isVisible = !hasData + binding.likeRecycler.isVisible = hasData + } + private fun setList() { + binding.likeRecycler.run { + layoutManager = GridLayoutManager(requireContext(),3) + adapter = mAdapter + addItemDecoration(ItemDecoration(8,8,2)) + } + } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/pink/cute/wallpapers/ui/notifications/FavoriteViewModel.kt b/app/src/main/java/com/pink/cute/wallpapers/ui/notifications/FavoriteViewModel.kt new file mode 100644 index 0000000..899b45f --- /dev/null +++ b/app/src/main/java/com/pink/cute/wallpapers/ui/notifications/FavoriteViewModel.kt @@ -0,0 +1,21 @@ +package com.pink.cute.wallpapers.ui.notifications + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import com.pink.cute.wallpapers.bean.Category +import com.pink.cute.wallpapers.bean.Wallpaper +import com.pink.cute.wallpapers.myroom.MyDatabase + +class FavoriteViewModel : ViewModel() { + + + var listLiveData: LiveData> + + init { + var wallDao = MyDatabase.myDatabase.WallpaperDao() + listLiveData = wallDao.queryAllLike(true) + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/pink/cute/wallpapers/ui/notifications/NotificationsFragment.kt b/app/src/main/java/com/pink/cute/wallpapers/ui/notifications/NotificationsFragment.kt deleted file mode 100644 index fc27a6c..0000000 --- a/app/src/main/java/com/pink/cute/wallpapers/ui/notifications/NotificationsFragment.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.pink.cute.wallpapers.ui.notifications - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.fragment.app.Fragment -import androidx.lifecycle.ViewModelProvider -import com.pink.cute.wallpapers.databinding.FragmentNotificationsBinding - -class NotificationsFragment : Fragment() { - - private var _binding: FragmentNotificationsBinding? = null - - // This property is only valid between onCreateView and - // onDestroyView. - private val binding get() = _binding!! - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - val notificationsViewModel = - ViewModelProvider(this).get(NotificationsViewModel::class.java) - - _binding = FragmentNotificationsBinding.inflate(inflater, container, false) - val root: View = binding.root - - val textView: TextView = binding.textNotifications - notificationsViewModel.text.observe(viewLifecycleOwner) { - textView.text = it - } - return root - } - - override fun onDestroyView() { - super.onDestroyView() - _binding = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/pink/cute/wallpapers/ui/notifications/NotificationsViewModel.kt b/app/src/main/java/com/pink/cute/wallpapers/ui/notifications/NotificationsViewModel.kt deleted file mode 100644 index e77febc..0000000 --- a/app/src/main/java/com/pink/cute/wallpapers/ui/notifications/NotificationsViewModel.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.pink.cute.wallpapers.ui.notifications - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.ViewModel - -class NotificationsViewModel : ViewModel() { - - private val _text = MutableLiveData().apply { - value = "This is notifications Fragment" - } - val text: LiveData = _text -} \ No newline at end of file diff --git a/app/src/main/java/com/pink/cute/wallpapers/viewadapter/AdapterCategory.kt b/app/src/main/java/com/pink/cute/wallpapers/viewadapter/AdapterCategory.kt index 6beb2d8..2fe84cd 100644 --- a/app/src/main/java/com/pink/cute/wallpapers/viewadapter/AdapterCategory.kt +++ b/app/src/main/java/com/pink/cute/wallpapers/viewadapter/AdapterCategory.kt @@ -15,7 +15,7 @@ import com.pink.cute.wallpapers.manager.Common open class AdapterCategory(var context: Context) : RecyclerView.Adapter() { var mList: List = emptyList() - private lateinit var mCallback: (String) -> Unit + private lateinit var mCallback: (Category) -> Unit var options = RequestOptions().transform(RoundedCorners(Common.dp2Px(26))) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH { @@ -32,7 +32,7 @@ open class AdapterCategory(var context: Context) : RecyclerView.Adapter Unit) { + fun setClickAction(callback: (Category) -> Unit) { mCallback = callback } @@ -45,10 +45,10 @@ open class AdapterCategory(var context: Context) : RecyclerView.Adapter categoryName.text = data.category - Glide.with(context).load(data.list[2].preview) + Glide.with(context).load(data.covert) .into(imageCovert) root.setOnClickListener { - mCallback.invoke(data.category) + mCallback.invoke(data) } } diff --git a/app/src/main/java/com/pink/cute/wallpapers/viewadapter/AdapterRecommend.kt b/app/src/main/java/com/pink/cute/wallpapers/viewadapter/AdapterRecommend.kt index 0cf86b4..4187528 100644 --- a/app/src/main/java/com/pink/cute/wallpapers/viewadapter/AdapterRecommend.kt +++ b/app/src/main/java/com/pink/cute/wallpapers/viewadapter/AdapterRecommend.kt @@ -8,7 +8,7 @@ import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.request.RequestOptions -import com.pink.cute.wallpapers.SetWallpaperActivity +import com.pink.cute.wallpapers.activity.SetWallpaperActivity import com.pink.cute.wallpapers.bean.Wallpaper import com.pink.cute.wallpapers.databinding.ItemWallpaperBinding import com.pink.cute.wallpapers.manager.Common diff --git a/app/src/main/res/drawable/download.xml b/app/src/main/res/drawable/download.xml new file mode 100644 index 0000000..8d54e3d --- /dev/null +++ b/app/src/main/res/drawable/download.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/download_bg.xml b/app/src/main/res/drawable/download_bg.xml new file mode 100644 index 0000000..0f7d8e0 --- /dev/null +++ b/app/src/main/res/drawable/download_bg.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_notifications_black_24dp.xml b/app/src/main/res/drawable/ic_notifications_black_24dp.xml deleted file mode 100644 index 78b75c3..0000000 --- a/app/src/main/res/drawable/ic_notifications_black_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/icon_set.xml b/app/src/main/res/drawable/icon_set.xml new file mode 100644 index 0000000..b54cb3b --- /dev/null +++ b/app/src/main/res/drawable/icon_set.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/like_gray.xml b/app/src/main/res/drawable/like_gray.xml new file mode 100644 index 0000000..af62439 --- /dev/null +++ b/app/src/main/res/drawable/like_gray.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/like_red.xml b/app/src/main/res/drawable/like_red.xml new file mode 100644 index 0000000..a2d9bf4 --- /dev/null +++ b/app/src/main/res/drawable/like_red.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/navgation_like.xml b/app/src/main/res/drawable/navgation_like.xml new file mode 100644 index 0000000..249df53 --- /dev/null +++ b/app/src/main/res/drawable/navgation_like.xml @@ -0,0 +1,9 @@ + + + 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..15c6c8a --- /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/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml new file mode 100644 index 0000000..089cc14 --- /dev/null +++ b/app/src/main/res/layout/activity_about.xml @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_laun.xml b/app/src/main/res/layout/activity_laun.xml index b36ca00..f23a809 100644 --- a/app/src/main/res/layout/activity_laun.xml +++ b/app/src/main/res/layout/activity_laun.xml @@ -4,18 +4,25 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".LaunActivity"> + tools:context=".activity.LaunActivity"> - + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_set_wallpaper.xml b/app/src/main/res/layout/activity_set_wallpaper.xml index b61cf89..877d64f 100644 --- a/app/src/main/res/layout/activity_set_wallpaper.xml +++ b/app/src/main/res/layout/activity_set_wallpaper.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".SetWallpaperActivity"> + tools:context=".activity.SetWallpaperActivity"> + + + + + + + + + + tools:context=".activity.WallpaperListActivity"> + + + + app:layout_constraintTop_toBottomOf="@id/set" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_notifications.xml b/app/src/main/res/layout/fragment_favorite.xml similarity index 54% rename from app/src/main/res/layout/fragment_notifications.xml rename to app/src/main/res/layout/fragment_favorite.xml index d417935..153ba3a 100644 --- a/app/src/main/res/layout/fragment_notifications.xml +++ b/app/src/main/res/layout/fragment_favorite.xml @@ -4,19 +4,26 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".ui.notifications.NotificationsFragment"> + tools:context=".ui.notifications.FavoriteFragment"> - + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 2496bc4..92480cc 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -10,6 +10,6 @@ android:id="@+id/category_recycler" android:layout_width="match_parent" android:layout_height="wrap_content" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintStart_toStartOf="parent" /> \ No newline at end of file diff --git a/app/src/main/res/menu/bottom_nav_menu.xml b/app/src/main/res/menu/bottom_nav_menu.xml index 62763a4..399e023 100644 --- a/app/src/main/res/menu/bottom_nav_menu.xml +++ b/app/src/main/res/menu/bottom_nav_menu.xml @@ -1,19 +1,17 @@ - + - - - - - + android:id="@+id/navigation_favorite" + android:icon="@drawable/like_gray" + android:title="@string/title_favorite" /> \ No newline at end of file diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index 17d475e..41bd14b 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -3,8 +3,12 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/mobile_navigation" - app:startDestination="@+id/navigation_home"> - + app:startDestination="@+id/navigation_dashboard"> + - - - - - - + android:id="@+id/navigation_favorite" + android:name="com.pink.cute.wallpapers.ui.notifications.FavoriteFragment" + android:label="@string/title_favorite" + tools:layout="@layout/fragment_favorite" /> \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index a56b0c9..df42efd 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -13,4 +13,8 @@ #FFFdfdfd #00000000 #d39bdc + #737373 + #737373 + #D13434 + #1a73e8 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cb5b2cc..05f7eb7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -10,5 +10,18 @@ Lock Screen Both Congratulations, the wallpaper is set successfully - + V%s + Rate Us + Privacy Policy + Share + https://play.google.com/store/apps/details?id=%s + Please grant permission to use related functions + Save Album + Sorry, failed to save the image, please exit the current page and try again + Loading failed, please check the network and re-enter the page + Congratulations, the image was saved successfully + Added to favorites successfully + Successfully canceled the collection + You haven not added any favorite wallpapers yet + There are many wallpapers for you to choose from \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index bf15d75..35a8315 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,6 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { + kotlin("kapt") version "2.0.0" id("com.android.application") version "8.1.3" apply false id("org.jetbrains.kotlin.android") version "1.9.0" apply false id("com.google.gms.google-services") version "4.3.15" apply false