Skip to content

Commit

Permalink
Update API level to target Android 14 (API level 34) (#17)
Browse files Browse the repository at this point in the history
* 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 <[email protected]>
  • Loading branch information
Turskyi authored Jul 20, 2024
1 parent ebc58e3 commit 00c2be6
Show file tree
Hide file tree
Showing 6 changed files with 114 additions and 85 deletions.
6 changes: 3 additions & 3 deletions .github/workflows/android_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ name: Build & upload to Firebase App Distribution

on:
push:
branches:
- dev
branches-ignore:
- master

jobs:
build:
Expand All @@ -13,7 +13,7 @@ jobs:
steps:
- uses: actions/[email protected]

- name: Set up JDK environment(JDK 11)
- name: Set up JDK environment(JDK 17)
uses: actions/[email protected]
with:
java-version: 17
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,4 @@
/app/release/
app/release
app/debug
/presentation/release/
170 changes: 99 additions & 71 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
[![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)
<img alt="GitHub commit activity" src="https://img.shields.io/github/commit-activity/m/Turskyi/OnlinePresentationOfAParticularMusicBand">

# 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

• Programming language: [Java](https://www.oracle.com/java/);

• 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);
Expand All @@ -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);
Expand All @@ -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:
Expand All @@ -61,44 +68,51 @@ new release app bundle to **Google Play** after every push to **master** branch;

**Screenshots:**

<img src="screenshots/bonus-2021-11-01.png" width="200" >
<img src="screenshots/home-2021-11-01.png" width="200" >
<img src="screenshots/za-2021-11-01.png" width="300" >
<img src="screenshots/zombi-2021-11-01.png" width="200" >
<!--suppress CheckImageSize -->
<img src="screenshots/bonus-2021-11-01.png" width="200" alt="screenshot">
<img src="screenshots/home-2021-11-01.png" width="200" alt="screenshot">
<img src="screenshots/za-2021-11-01.png" width="300" alt="screenshot">
<img src="screenshots/zombi-2021-11-01.png" width="200" alt="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

Expand All @@ -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 [email protected].
If you have any questions or suggestions about this privacy policy, do not
hesitate to contact Dmytro Turskyi at [email protected].

## Download

<a href="https://play.google.com/store/apps/details?id=com.music.android.sensilence" target="_blank">
<img src="https://play.google.com/intl/en_gb/badges/static/images/badges/en_badge_web_generic.png" width=240 alt="google play badge"/>
</a>
10 changes: 5 additions & 5 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,25 @@
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
google()
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
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ public class AppModule {
AppModule() {
}

@Provides
public CompositeDisposable providesCompositeDisposable() {
return new CompositeDisposable();
}

@Singleton
@Provides
SongsDatabase.Callback provideDatabaseCallback(Application app) {
Expand All @@ -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();
}
}

0 comments on commit 00c2be6

Please sign in to comment.