Giter Site home page Giter Site logo

themusicmax / musicmax Goto Github PK

View Code? Open in Web Editor NEW
287.0 2.0 11.0 30.94 MB

Musicmax is a Music Player application for Android built with Jetpack Compose and Jetpack Media 3.

License: Apache License 2.0

Kotlin 100.00%
accompanist android clean-architecture dagger-hilt exoplayer gradle-convention-plugins gradle-kotlin-dsl gradle-version-catalogs jetpack-compose jetpack-media3

musicmax's Introduction

Musicmax

Musicmax

Musicmax is a Music Player application for Android built with Jetpack Compose and Jetpack Media 3.

Get it on Google Play

or get the apk from the Releases section.

Preview

Development Environment

Musicmax uses the Gradle build system and can be imported directly into the latest stable version of Android Studio (available here). The debug build can be built and run using the default configuration.

Build

The app contains the usual debug and release build variants.

In addition, the benchmark variant of app is used to test startup performance and generate a baseline profile (see below for more information).

For normal development use the debug variant. For UI performance testing use the release variant.

Architecture

The Musicmax app follows the official architecture guidance.

Architecture diagram

Modularization

The Musicmax app has been fully modularized.

UI

The app was designed using Material 3 guidelines.

The Screens and UI elements are built entirely using Jetpack Compose.

The app has two themes:

  • Dynamic color - uses colors based on the user's current color theme (if supported)
  • Default theme - uses predefined colors when dynamic color is not supported

Each theme also supports dark mode.

Baseline profiles

The baseline profile for this app is located at app/src/main/baseline-prof.txt. It contains rules that enable AOT compilation of the critical user path taken during app launch. For more information on baseline profiles, read this document.

Note: The baseline profile needs to be re-generated for release builds that touch code which changes app startup.

To generate the baseline profile, select the benchmark build variant and run the BaselineProfileGenerator benchmark test on an AOSP Android Emulator. Then copy the resulting baseline profile from the emulator to app/src/main/baseline-prof.txt.

Localization

Musicmax uses Crowdin as a localization management platform and is available on Crowdin at this link.

Crowdin

License

Copyright 2022 Afig Aliyev

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

musicmax's People

Contributors

afigaliyev avatar poussinou avatar renovate[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

musicmax's Issues

Using wavy sliders?

Hi,

I'm doing a self-promotion here :)
Please ignore/close this if you are not interested.

Would you like to use the wavy-slider in your app?
I think Android 13 uses this kind of slider for its media controls.

Demo.

Spanish version

Hi!

If you need translations for spanish version , I can help you😄

crash on start

Process: com.maximillianleonov.musicmax, PID: 17076
java.lang.NoSuchMethodError: No static method AnimatedContent(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Ljava/lang/String;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V in class Landroidx/compose/animation/AnimatedContentKt; or its super classes (declaration of 'androidx.compose.animation.AnimatedContentKt' appears in /data/app/~~5XWP1kghMjTuXVGSSXBJUg==/com.maximillianleonov.musicmax-EDp3bv-eAKqI7bSc49_meQ==/base.apk)
at com.maximillianleonov.musicmax.core.ui.component.MediaHeaderKt$SortButton$1.invoke(MediaHeader.kt:233)
at com.maximillianleonov.musicmax.core.ui.component.MediaHeaderKt$SortButton$1.invoke(MediaHeader.kt:232)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:108)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
at androidx.compose.material3.IconButtonKt.IconButton(IconButton.kt:101)
at com.maximillianleonov.musicmax.core.ui.component.MediaHeaderKt.SortButton(MediaHeader.kt:232)
at com.maximillianleonov.musicmax.core.ui.component.MediaHeaderKt.OutlinedMediaHeader(MediaHeader.kt:166)
at com.maximillianleonov.musicmax.core.ui.component.MediaPagerKt$MediaPager$1$3.invoke(MediaPager.kt:102)
at com.maximillianleonov.musicmax.core.ui.component.MediaPagerKt$MediaPager$1$3.invoke(MediaPager.kt:101)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:117)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
at androidx.compose.animation.AnimatedVisibilityKt.AnimatedEnterExitImpl(AnimatedVisibility.kt:941)
at androidx.compose.animation.AnimatedVisibilityKt.AnimatedVisibility(AnimatedVisibility.kt:277)
at com.maximillianleonov.musicmax.core.ui.component.MediaPagerKt.MediaPager(MediaPager.kt:101)
at com.maximillianleonov.musicmax.feature.home.HomeScreenKt.HomeScreen(HomeScreen.kt:86)
at com.maximillianleonov.musicmax.feature.home.HomeScreenKt.HomeRoute(HomeScreen.kt:44)
at com.maximillianleonov.musicmax.feature.home.navigation.HomeNavigationKt$homeScreen$1$1.invoke(HomeNavigation.kt:35)
at com.maximillianleonov.musicmax.feature.home.navigation.HomeNavigationKt$homeScreen$1$1.invoke(HomeNavigation.kt:34)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:117)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
at androidx.navigation.compose.NavGraphBuilderKt$composable$1.invoke(NavGraphBuilder.kt:53)
at androidx.navigation.compose.NavGraphBuilderKt$composable$1.invoke(NavGraphBuilder.kt:51)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:138)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
at androidx.navigation.compose.NavHostKt$NavHost$14$1.invoke(NavHost.kt:308)
at androidx.navigation.compose.NavHostKt$NavHost$14$1.invoke(NavHost.kt:306)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:108)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:35)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
at androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider(SaveableStateHolder.kt:84)
at androidx.navigation.compose.NavBackStackEntryProviderKt.SaveableStateProvider(NavBackStackEntryProvider.kt:65)
at androidx.navigation.compose.NavBackStackEntryProviderKt.access$SaveableStateProvider(NavBackStackEntryProvider.kt:1)
at androidx.navigation.compose.NavBackStackEntryProviderKt$LocalOwnersProvider$1.invoke(NavBackStackEntryProvider.kt:52)

much thanks and features hope

much thanks as there is so well project with Jetpeck Compose and android.media3 implementation here!

there are the features hoped for my personally, more thanks if could be added:

  • showing song information about size, duration, frequency, rate, and more params, etc
  • showing song lyric
  • playback mode about repeat, shuffle, and playlist
  • music file view about search, folder display, and playlist
  • gesture operation about pull down to close the playback view, etc

Translatable ?

Is the app translatable and when, where are the strings to translate ?
Thanks in advance.

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Rate-Limited

These updates are currently rate-limited. Click on a checkbox below to force their creation now.

  • Update dependency androidx.benchmark:benchmark-macro-junit4 to v1.2.4
  • Update dependency androidx.navigation:navigation-compose to v2.7.7
  • Update dependency com.google.gms.google-services to v4.4.1
  • Update detekt to v1.23.6 (io.gitlab.arturbosch.detekt, io.gitlab.arturbosch.detekt:detekt-gradle-plugin, io.gitlab.arturbosch.detekt:detekt-formatting)
  • Update accompanist to v0.34.0 (com.google.accompanist:accompanist-permissions, com.google.accompanist:accompanist-systemuicontroller)
  • Update androidx.hilt to v1.2.0 (androidx.hilt:hilt-compiler, androidx.hilt:hilt-work, androidx.hilt:hilt-navigation-compose)
  • Update coil to v2.6.0 (io.coil-kt:coil-compose, io.coil-kt:coil)
  • Update dagger to v2.51.1 (com.google.dagger.hilt.android, com.google.dagger:hilt-compiler, com.google.dagger:hilt-android, com.google.dagger:hilt-core)
  • Update dependency androidx.activity:activity-compose to v1.9.0
  • Update dependency androidx.core:core-ktx to v1.13.0
  • Update dependency androidx.datastore:datastore to v1.1.0
  • Update dependency androidx.test.uiautomator:uiautomator to v2.3.0
  • Update dependency gradle to v8.7
  • Update kotlinx.coroutines to v1.8.0 (org.jetbrains.kotlinx:kotlinx-coroutines-guava, org.jetbrains.kotlinx:kotlinx-coroutines-android, org.jetbrains.kotlinx:kotlinx-coroutines-core)
  • Update dependency androidx.compose:compose-bom to v2024
  • Update gradle/wrapper-validation-action action to v3
  • Update protobuf to v4 (major) (com.google.protobuf:protoc, com.google.protobuf:protobuf-kotlin-lite)
  • 🔐 Create all rate-limited PRs at once 🔐

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

github-actions
.github/workflows/musicmax-ci.yml
  • actions/checkout v4
  • gradle/wrapper-validation-action v1
  • actions/checkout v4
  • actions/setup-java v4
  • actions/checkout v4
  • actions/setup-java v4
  • actions/checkout v4
  • actions/setup-java v4
  • actions/checkout v4
  • actions/setup-java v4
gradle
gradle.properties
settings.gradle.kts
build.gradle.kts
app/build.gradle.kts
benchmark/build.gradle.kts
build-logic/settings.gradle.kts
build-logic/plugins/convention/build.gradle.kts
core/core-common/build.gradle.kts
core/core-data/build.gradle.kts
core/core-datastore/build.gradle.kts
core/core-designsystem/build.gradle.kts
core/core-domain/build.gradle.kts
core/core-media-common/build.gradle.kts
core/core-media-notification/build.gradle.kts
core/core-media-service/build.gradle.kts
core/core-mediastore/build.gradle.kts
core/core-model/build.gradle.kts
core/core-permission/build.gradle.kts
core/core-ui/build.gradle.kts
features/feature-favorite/build.gradle.kts
features/feature-home/build.gradle.kts
features/feature-library/build.gradle.kts
features/feature-player/build.gradle.kts
features/feature-search/build.gradle.kts
features/feature-settings/build.gradle.kts
gradle/libs.versions.toml
  • androidx.core:core-ktx 1.12.0
  • androidx.core:core-splashscreen 1.0.1
  • androidx.activity:activity-compose 1.8.2
  • androidx.compose:compose-bom 2023.10.01
  • androidx.compose.compiler:compiler 1.5.4
  • androidx.benchmark:benchmark-macro-junit4 1.2.2
  • androidx.profileinstaller:profileinstaller 1.3.1
  • androidx.lifecycle:lifecycle-runtime-compose 2.6.2
  • androidx.lifecycle:lifecycle-viewmodel-compose 2.6.2
  • androidx.lifecycle:lifecycle-livedata-ktx 2.6.2
  • androidx.navigation:navigation-compose 2.7.6
  • androidx.hilt:hilt-navigation-compose 1.1.0
  • androidx.room:room-common 2.6.1
  • androidx.room:room-runtime 2.6.1
  • androidx.room:room-compiler 2.6.1
  • androidx.room:room-ktx 2.6.1
  • androidx.datastore:datastore 1.0.0
  • com.google.protobuf:protobuf-kotlin-lite 3.25.1
  • com.google.protobuf:protoc 3.25.1
  • androidx.media3:media3-session 1.2.0
  • androidx.media3:media3-exoplayer 1.2.0
  • androidx.constraintlayout:constraintlayout-compose 1.0.1
  • androidx.test.ext:junit 1.1.5
  • androidx.test.espresso:espresso-core 3.5.1
  • androidx.test.uiautomator:uiautomator 2.2.0
  • junit:junit 4.13.2
  • io.mockk:mockk 1.13.8
  • com.android.tools:desugar_jdk_libs 2.0.4
  • org.jetbrains.kotlinx:kotlinx-coroutines-core 1.7.3
  • org.jetbrains.kotlinx:kotlinx-coroutines-android 1.7.3
  • org.jetbrains.kotlinx:kotlinx-coroutines-guava 1.7.3
  • org.jetbrains.kotlinx:kotlinx-datetime 0.5.0
  • com.google.dagger:hilt-core 2.50
  • com.google.dagger:hilt-android 2.50
  • com.google.dagger:hilt-compiler 2.50
  • androidx.hilt:hilt-work 1.1.0
  • androidx.hilt:hilt-compiler 1.1.0
  • javax.inject:javax.inject 1
  • com.google.accompanist:accompanist-systemuicontroller 0.32.0
  • com.google.accompanist:accompanist-permissions 0.32.0
  • io.coil-kt:coil 2.5.0
  • io.coil-kt:coil-compose 2.5.0
  • com.github.maximillianleonov:renderscript-intrinsics-replacement-toolkit 0.8-beta
  • io.gitlab.arturbosch.detekt:detekt-formatting 1.23.4
  • ru.kode:detekt-rules-compose 1.3.0
  • com.twitter.compose.rules:detekt 0.0.26
  • com.android.tools.build:gradle 8.2.0
  • org.jetbrains.kotlin:kotlin-gradle-plugin 1.9.20
  • com.diffplug.spotless:spotless-plugin-gradle 6.23.3
  • io.gitlab.arturbosch.detekt:detekt-gradle-plugin 1.23.4
  • com.google.firebase:firebase-bom 32.7.0
  • com.android.application 8.2.0
  • com.android.library 8.2.0
  • com.android.test 8.2.0
  • org.jetbrains.kotlin.android 1.9.20
  • org.jetbrains.kotlin.jvm 1.9.20
  • org.jetbrains.kotlin.kapt 1.9.20
  • com.google.devtools.ksp 1.9.20-1.0.14
  • com.diffplug.spotless 6.23.3
  • io.gitlab.arturbosch.detekt 1.23.4
  • com.google.dagger.hilt.android 2.50
  • com.google.protobuf 0.9.4
  • com.google.gms.google-services 4.4.0
  • com.google.firebase.crashlytics 2.9.9
gradle-wrapper
gradle/wrapper/gradle-wrapper.properties
  • gradle 8.5

  • Check this box to trigger a request for Renovate to run again on this repository

non-free dependencies

I see with the latest release, Google Ads (and thus the GMS library) have been added – so I had to add the Ads and NonFreeDep anti-features to the app's listing in my repo. This also makes it impossible to get your app to F-Droid.org if you had planned that. Maybe you could provide a free/libre build flavor (and its APK) for the free/libre world? Thanks in advance for considering!

[Feature Request] Speed and Pitch Control

Would it be possible to add speed and pitch control? This functionality is not available in many players, and I think it would be a valuable addition. I would greatly appreciate it if you could consider implementing this feature.

Any plans to include wearos and android auto/automotive support

Any plans to include wearos and android auto/automotive support

Just found out about this code, its great to see app supporting android media3, wearos and android auto are now an essential feature that a music player app should have , you should consider developing for these form factors .

publish it on fdroid

Since Musimax is opensource, it will be great to have it also on fdroid.
( I know that it is available on IzzyOnDroid, but it isn't the main repo )

Best Music App ever...

...if innertune didn't exist and was a copy of vimusic; which exists because of vibemusic; which exists because of blackhole. I'm sure im forgetting some. Oh Right, MUSIFY

what sets this apart from rest? Blackhole has a wide range, Vibemusic was a successor, innertune was the best all-rounder, you get my drift?
Why use your app over the other handful of similar music apps? No disrespect, just curious what is unique of it.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.