From 00c2be62f7e324ccc5fbcea6d96d43fb3f2c89cb Mon Sep 17 00:00:00 2001 From: Dmytro Turskyi Date: Sat, 20 Jul 2024 17:46:01 -0400 Subject: [PATCH] Update API level to target Android 14 (API level 34) (#17) * update dependencies * add kotlin dependency to avoid errors * Enable code shrinking, obfuscation, and optimization for release. * set sdk_version = 32 * add contentDescription for TabLayout * upgrade to compile_sdk_version = 33 * Add image links (not used) * Use java 17 for data layer * set java 17 in codemagic.yaml * Upgrade dependencies and update README.md * Add MVVM pattern to README.md * Increment version to 1.1.0(20) * Update API level to target Android 14 (API level 34) --------- Signed-off-by: Dmytro Turskyi --- .github/workflows/android_ci.yml | 6 +- .gitignore | 1 + README.md | 170 ++++++++++-------- build.gradle | 10 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../android/sensilence/di/AppModule.java | 10 +- 6 files changed, 114 insertions(+), 85 deletions(-) diff --git a/.github/workflows/android_ci.yml b/.github/workflows/android_ci.yml index 083c688..ecbbe9d 100644 --- a/.github/workflows/android_ci.yml +++ b/.github/workflows/android_ci.yml @@ -2,8 +2,8 @@ name: Build & upload to Firebase App Distribution on: push: - branches: - - dev + branches-ignore: + - master jobs: build: @@ -13,7 +13,7 @@ jobs: steps: - uses: actions/checkout@v2.3.3 - - name: Set up JDK environment(JDK 11) + - name: Set up JDK environment(JDK 17) uses: actions/setup-java@v1.4.3 with: java-version: 17 diff --git a/.gitignore b/.gitignore index b7bab3d..de033ce 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ /app/release/ app/release app/debug +/presentation/release/ diff --git a/README.md b/README.md index 2cfd3f2..59006d3 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,13 @@ [![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner-direct-single.svg)](https://stand-with-ukraine.pp.ua) +[![Codemagic build status](https://api.codemagic.io/apps/60d07948ab5163f7f1fb5066/release-workflow/status_badge.svg)](https://codemagic.io/apps/60d07948ab5163f7f1fb5066/release-workflow/latest_build) +[![Build & upload to Firebase App Distribution](https://github.com/Turskyi/OnlinePresentationOfAParticularMusicBand/actions/workflows/android_ci.yml/badge.svg?event=push)](https://github.com/Turskyi/OnlinePresentationOfAParticularMusicBand/actions/workflows/android_ci.yml) +GitHub commit activity # sense.of.silence & Zigmund Afraid -[![Codemagic build status](https://api.codemagic.io/apps/60d07948ab5163f7f1fb5066/release-workflow/status_badge.svg)](https://codemagic.io/apps/60d07948ab5163f7f1fb5066/release-workflow/latest_build) - -Online Music Player for particular Music Band "відчуття.тиші" (where I used to play on piano), with -an opportunity to listen to almost all their songs online. +Online Music Player for particular Music Band "відчуття.тиші" (where I used to +play on a piano), with an opportunity to listen to almost all their songs +online. ## PROJECT SPECIFICATION @@ -13,7 +15,8 @@ an opportunity to listen to almost all their songs online. • SDK: [Android](https://developer.android.com/studio/intro); -• Interface: [XML](https://developer.android.com/guide/topics/ui/declaring-layout); +• +Interface: [XML](https://developer.android.com/guide/topics/ui/declaring-layout); • State management approach: [ViewModel](https://developer.android.com/reference/androidx/lifecycle/ViewModel); @@ -30,10 +33,12 @@ an opportunity to listen to almost all their songs online. • Git Hosting Service: [GitHub](https://github.com); -• CI/CD: [GitHub Actions](https://docs.github.com/en/actions) is used to deliver new Android -Package (APK) to [Firebase App Distribution](https://firebase.google.com/docs/app-distribution) -after every push to the **dev** branch, [Codemagic](https://codemagic.io/start/) is used to deliver -new release app bundle to **Google Play** after every push to **master** branch; +• CI/CD: [GitHub Actions](https://docs.github.com/en/actions) is used to deliver +new Android Package (APK) to +[Firebase App Distribution](https://firebase.google.com/docs/app-distribution) +after every push to the **dev** branch, [Codemagic](https://codemagic.io/start/) +is used to deliver new release app bundle to **Google Play** after every push +to **master** branch; • App testing platforms: [Firebase App Distribution](https://appdistribution.firebase.dev/i/0fab69b4a3a132f6); @@ -43,9 +48,11 @@ new release app bundle to **Google Play** after every push to **master** branch; • Operating system: [Android](https://www.android.com/); -• Cloud services: [Firebase Cloud Messaging](https://firebase.google.com/docs/cloud-messaging); +• Cloud services: +[Firebase Cloud Messaging](https://firebase.google.com/docs/cloud-messaging); -• UI components: [ViewPager2](https://developer.android.com/jetpack/androidx/releases/viewpager2), +• UI components: +[ViewPager2](https://developer.android.com/jetpack/androidx/releases/viewpager2), [View Binding](https://developer.android.com/topic/libraries/view-binding) • Architecture Components: @@ -61,44 +68,51 @@ new release app bundle to **Google Play** after every push to **master** branch; • **Screenshots:** - - - - + +screenshot +screenshot +screenshot +screenshot -• **Layout:** the app contains 5 lists of relevant songs, user can navigate between lists using a -central screen and a View pager, each list item contains information about a song and a picture, -screens include cover pictures of the albums on the background; +• **Layout:** the app contains 5 lists of relevant songs, user can navigate +between lists using a central screen and a View pager, each list item contains +information about a song and a picture, screens include cover pictures of the +albums in the background; -• **Functionality:** app uses a custom adapter to populate the layout with views based on instances -of the custom class, all images are stored as drawables, the code runs without errors; +• **Functionality:** app uses a custom adapter to populate the layout with views +based on instances of the custom class, all images are stored as drawables, +the code runs without errors; -• **Code Readability:** code is easily readable with no unnecessary blank lines, no unused variables -or methods, and no commented-out code, all variables, methods, and resource IDs are descriptively -named such that another developer reading the code can easily understand their function. +• **Code Readability:** code is easily readable with no unnecessary blank lines, +no unused variables or methods, and no commented-out code, all variables, +methods, and resource IDs are descriptively named such that another developer +reading the code can easily understand their function. ## Privacy Policy -Dmytro Turskyi built the Відчуття.Тиші & Zigmund Afraid app as a free app. This service is provided -by Dmytro Turskyi at no cost and is intended for use as is. +Dmytro Turskyi built the Відчуття.Тиші & Zigmund Afraid app as a free app. This +service is provided by Dmytro Turskyi at no cost and is intended for use as it +is. -This page is used to inform visitors regarding policies with the collection, use, and disclosure -of personal information if anyone decided to use this service. +This page is used to inform visitors regarding policies with the collection, +use, and disclosure of personal information if anyone decided to use this +service. -If you choose to use this service, then you agree to the collection and use of information in -relation to this policy. The personal information that app collects is used for providing and -improving -the service. App will not use or share your information with anyone except as described in this -privacy policy. +If you choose to use this service, then you agree to the collection and use of +information in relation to this policy. The personal information that the app +collects is used for providing and improving the service. The App will not use +or share your information with anyone except as described in this privacy +policy. **Information Collection and Use** -For a better experience, while using this service, app may require you to provide with certain -personally identifiable information. The information that app request will be retained on your -device -and is not collected by Dmytro Turskyi in any way. +For a better experience, while using this service, app may require you to +provide with certain personally identifiable information. The information that +app request will be retained on your device and is not collected by Dmytro +Turskyi in any way. -The app does use third-party services that may collect information used to identify you. +The app does use third-party services that may collect information used to +identify you. Link to the privacy policy of third-party service providers used by the app @@ -108,69 +122,83 @@ Link to the privacy policy of third-party service providers used by the app **Log Data** -You should be informed that whenever you use this service, in a case of an error in the app your -data and information will be collected (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 this service, the time -and date of your use of the service, and other statistics. +You should be informed that whenever you use this service, in a case of an error +in the app, your data and information will be collected +(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 this 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. +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. +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** -Dmytro Turskyi may employ third-party companies and individuals due to the following reasons: +Dmytro Turskyi may employ third-party companies and individuals due to the +following reasons: * To facilitate this service; * To provide the service on behalf of Dmytro Turskyi; * To perform service-related services; or * To assist us in analyzing how this service is used. -Users should be informed of this service that these third parties have access to your personal -information. The reason is to perform the tasks assigned to them on Dmytro Turskyi behalf. However, -they are obligated not to disclose or use the information for any other purpose. +Users should be informed of this service that these third parties have access to +your personal information. The reason is to perform the tasks assigned to them +on Dmytro Turskyi's behalf. However, they are obligated not to disclose or use +the information for any other purpose. **Security** -Dmytro Turskyi values your trust in providing your personal information, thus he is 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 he cannot guarantee its +Dmytro Turskyi values your trust in providing your personal information, thus he +is 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 he 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 Dmytro Turskyi. Therefore, -he strongly advises you to review the privacy policy of these websites. Dmytro Turskyi have no -control over and assume no responsibility for the content, privacy policies, or practices of any +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 Dmytro Turskyi. Therefore, he strongly advises you to review +the privacy policy of these websites. Dmytro Turskyi 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. Dmytro Turskyi do not knowingly collect -personally identifiable information from children under 13 years of age. In the case Dmytro Turskyi -discovers that a child under 13 has provided him with personal information, he immediately will -delete this from server. If you are a parent or guardian, and you are aware that your child has -provided Dmytro Turskyi with personal information, please contact Dmytro Turskyi so that he will be -able to do the necessary actions. +These services do not address anyone under the age of 13. Dmytro Turskyi do not +knowingly collect personally identifiable information from children under 13 +years of age. In the case Dmytro Turskyi discovers that a child under 13 has +provided him with personal information, he immediately will delete this from +server. If you are a parent or guardian, and you are aware that your child has +provided Dmytro Turskyi with personal information, please contact Dmytro Turskyi +so that he will be able to do the necessary actions. **Changes to This Privacy Policy** -Dmytro Turskyi may update this privacy policy from time to time. Thus, you are advised to review -this page periodically for any changes. Dmytro Turskyi will notify you of any changes by posting the -new Privacy Policy on this page. +Dmytro Turskyi may update this privacy policy from time to time. Thus, you are +advised to review this page periodically for any changes. Dmytro Turskyi will +notify you of any changes by posting the new Privacy Policy on this page. This policy is effective as of 2023-05-22 **Contact Us** -If you have any questions or suggestions about this privacy policy, do not hesitate to contact -Dmytro Turskyi at dmytro.turskyi@gmail.com. +If you have any questions or suggestions about this privacy policy, do not +hesitate to contact Dmytro Turskyi at dmytro.turskyi@gmail.com. + +## Download + + +google play badge + diff --git a/build.gradle b/build.gradle index 7ee422a..65cf24e 100644 --- a/build.gradle +++ b/build.gradle @@ -5,17 +5,17 @@ buildscript { ext { // sdk versions - compile_sdk_version = 33 + compile_sdk_version = 34 build_tools_version = "30.0.3" min_sdk_version = 21 - target_sdk_version = 33 + target_sdk_version = 34 /* to check the latest version @see [ https://play.google.com/console/u/0/developers/6867856033872987263/app/4974045020812963921/releases/overview ] */ - version_code = 20 - version_name = "1.1.0" + version_code = 21 + version_name = "1.1.1" } repositories { // Google's Maven repository @@ -23,7 +23,7 @@ https://play.google.com/console/u/0/developers/6867856033872987263/app/497404502 mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:8.0.2' + classpath 'com.android.tools.build:gradle:8.2.2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 6566853..69bb82f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip diff --git a/presentation/src/main/java/com/music/android/sensilence/di/AppModule.java b/presentation/src/main/java/com/music/android/sensilence/di/AppModule.java index a6fff53..651d9e1 100644 --- a/presentation/src/main/java/com/music/android/sensilence/di/AppModule.java +++ b/presentation/src/main/java/com/music/android/sensilence/di/AppModule.java @@ -23,6 +23,11 @@ public class AppModule { AppModule() { } + @Provides + public CompositeDisposable providesCompositeDisposable() { + return new CompositeDisposable(); + } + @Singleton @Provides SongsDatabase.Callback provideDatabaseCallback(Application app) { @@ -42,9 +47,4 @@ public SongsDatabase provideDatabase(Application app, SongsDatabase.Callback cal public SongDao provideSongDao(SongsDatabase database) { return database.getSongDao(); } - - @Provides - public CompositeDisposable providesCompositeDisposable() { - return new CompositeDisposable(); - } } \ No newline at end of file