Add proper README
Add a proper readme and other documents for this project.
0
FAQ.md → .github/CONTRIBUTING.md
vendored
12
LICENSES.md
|
@ -0,0 +1,12 @@
|
||||||
|
# Licenses
|
||||||
|
|
||||||
|
Auxio uses a number of third-party libraries, which are listed below with their licenses:
|
||||||
|
|
||||||
|
| Library Name | Author(s) | Purpose | License |
|
||||||
|
|--------------|-----------|---------|---------|
|
||||||
|
| [ExoPlayer](https://github.com/google/ExoPlayer) | [Google](https://github.com/google) | Music Playback | Apache-2.0 |
|
||||||
|
| [Coil](https://github.com/coil-kt/coil) | [coil-kt](https://github.com/coil-kt) | Image Loading | Apache-2.0 |
|
||||||
|
| [Indicator Fast Scroll](https://github.com/reddit/IndicatorFastScroll) | [Reddit](https://github.com/reddit) | Fast Scrolling | MIT |
|
||||||
|
| [Material Dialogs](https://github.com/afollestad/material-dialogs) | [Aiden Follestad](https://github.com/afollestad) | Accent Dialog | Apache-2.0 |
|
||||||
|
| [ktlint](https://github.com/pinterest/ktlint) | [Pinterest](https://github.com/pinterest) | Code Formatting | MIT |
|
||||||
|
| [LeakCanary](https://github.com/square/leakcanary) | [Square](https://github.com/square) | Memory leak detection | Apache-2.0 |
|
76
README.md
|
@ -1,5 +1,75 @@
|
||||||
# Auxio
|
<p align="center"><img src="info/ic_auxio.png" width="150"></p>
|
||||||
|
<h1 align="center"><b>Auxio</b></h1>
|
||||||
|
<h4 align="center">A sensible and customizable music player for android.</h4>
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://github.com/oxygencobalt/Auxio/releases">
|
||||||
|
<img alt="GitHub release" src="https://img.shields.io/static/v1?label=Tag&message=v1.0.0&color=0D5AF5">
|
||||||
|
</a>
|
||||||
|
<a href="https://www.gnu.org/licenses/gpl-3.0">
|
||||||
|
<img src="https://img.shields.io/badge/License-GPL%20v3-blue.svg">
|
||||||
|
</a>
|
||||||
|
<img alt="Minimum SDK" src="https://img.shields.io/badge/API-21%2B-32B5ED">
|
||||||
|
</p>
|
||||||
|
<h4 align="center"><a href="/info/FAQ.md">FAQ</a> / <a href="/info/FORMATS.md">Formats</a> / <a href="/info/LICENSES.md">Licenses</a> / <a href="/.github/CONTRIBUTING.md">Contributing</a></h4>
|
||||||
|
|
||||||
Auxio is a music player for android that I built for myself. It only has the features that I need out of a music player and nothing more.
|
## About
|
||||||
|
|
||||||
***WIP***
|
Auxio is a music player for android that I built for myself, its intended to only have the features that I use out of a music player and nothing more.
|
||||||
|
|
||||||
|
However, Auxio is also structured to be customizable and extendable, in the case you want to add features that I personally don't need.
|
||||||
|
|
||||||
|
## Screenshots
|
||||||
|
|
||||||
|
[<img src="info/shot_library_port.png" width=160>](info/shot_library_port.png)
|
||||||
|
[<img src="info/shot_playback_port.png" width=160>](info/shot_playback_port.png)
|
||||||
|
[<img src="info/shot_songs_port.png" width=160>](info/shot_songs_port.png)
|
||||||
|
[<img src="info/shot_search_port.png" width=160>](info/shot_search_port.png)
|
||||||
|
[<img src="info/shot_album_port.png" width=160>](info/shot_album_port.png)
|
||||||
|
[<img src="info/shot_artist_port.png" width=160>](info/shot_artist_port.png)
|
||||||
|
[<img src="info/shot_queue_port.png" width=160>](info/shot_queue_port.png)
|
||||||
|
[<img src="info/shot_notif.png" width=160>](info/shot_notif.png)
|
||||||
|
[<img src="info/shot_settings_port.png" width=160>](info/shot_settings_port.png)
|
||||||
|
[<img src="info/shot_album_alt.png" width=160>](info/shot_album_alt.png)
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Reliable, ExoPlayer based playback
|
||||||
|
- Customizable UI & Behavior
|
||||||
|
- Extensive Genres/Artists/Albums/Songs support
|
||||||
|
- Powerful queue system
|
||||||
|
- Full playback persistence system
|
||||||
|
- Embedded covers support
|
||||||
|
- Search Functionality
|
||||||
|
- No internet connectivity whatsoever
|
||||||
|
- Kotlin from the ground-up
|
||||||
|
- Modular, feature-based architecture
|
||||||
|
- No rounded corners (The way god intended)
|
||||||
|
|
||||||
|
## To Come in the future:
|
||||||
|
|
||||||
|
- Better music loading system
|
||||||
|
- Improved genre/artist/album UIs
|
||||||
|
- Dedicated search tab
|
||||||
|
- Better edge-to-edge support
|
||||||
|
- Black theme
|
||||||
|
- Custom accents
|
||||||
|
- Playlists
|
||||||
|
- Liked songs
|
||||||
|
- More customization options
|
||||||
|
- Other things, presumably
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Auxio accepts most contributions as long as they follow the [Contribution Guidelines](/.github/CONTRIBUTING.md).
|
||||||
|
|
||||||
|
Feature additions and Major UI changes are less likely to be accepted. See [Accepted Additions](/info/ADDITIONS.md) for more information.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
[](http://www.gnu.org/licenses/gpl-3.0.en.html)
|
||||||
|
|
||||||
|
Auxio is Free Software: You can use, study share and improve it at your
|
||||||
|
will. Specifically you can redistribute and/or modify it under the terms of the
|
||||||
|
[GNU General Public License](https://www.gnu.org/licenses/gpl.html) as
|
||||||
|
published by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
|
@ -430,7 +430,7 @@ class PlaybackStateManager private constructor() {
|
||||||
|
|
||||||
logD("Shuffling queue with seed $newSeed")
|
logD("Shuffling queue with seed $newSeed")
|
||||||
|
|
||||||
val lastSong = mQueue[mIndex]
|
val lastSong = if (mIsInUserQueue) mQueue[mIndex] else mSong
|
||||||
|
|
||||||
mShuffleSeed = newSeed
|
mShuffleSeed = newSeed
|
||||||
|
|
||||||
|
@ -452,7 +452,7 @@ class PlaybackStateManager private constructor() {
|
||||||
private fun resetShuffle() {
|
private fun resetShuffle() {
|
||||||
mShuffleSeed = -1L
|
mShuffleSeed = -1L
|
||||||
|
|
||||||
val lastSong = mQueue[mIndex]
|
val lastSong = if (mIsInUserQueue) mQueue[mIndex] else mSong
|
||||||
|
|
||||||
setupOrderedQueue()
|
setupOrderedQueue()
|
||||||
|
|
||||||
|
|
|
@ -17,12 +17,8 @@ import org.oxycblt.auxio.databinding.FragmentAboutBinding
|
||||||
import org.oxycblt.auxio.logD
|
import org.oxycblt.auxio.logD
|
||||||
import org.oxycblt.auxio.logE
|
import org.oxycblt.auxio.logE
|
||||||
import org.oxycblt.auxio.music.MusicStore
|
import org.oxycblt.auxio.music.MusicStore
|
||||||
import org.oxycblt.auxio.settings.SettingsManager
|
|
||||||
import org.oxycblt.auxio.ui.createToast
|
import org.oxycblt.auxio.ui.createToast
|
||||||
import org.oxycblt.auxio.ui.isEdgeOn
|
|
||||||
import org.oxycblt.auxio.ui.isIrregularLandscape
|
|
||||||
import org.oxycblt.auxio.ui.isLandscape
|
import org.oxycblt.auxio.ui.isLandscape
|
||||||
import org.oxycblt.auxio.ui.toColor
|
|
||||||
import java.lang.Exception
|
import java.lang.Exception
|
||||||
|
|
||||||
class AboutDialog : BottomSheetDialogFragment() {
|
class AboutDialog : BottomSheetDialogFragment() {
|
||||||
|
@ -35,15 +31,6 @@ class AboutDialog : BottomSheetDialogFragment() {
|
||||||
): View {
|
): View {
|
||||||
val binding = FragmentAboutBinding.inflate(layoutInflater)
|
val binding = FragmentAboutBinding.inflate(layoutInflater)
|
||||||
val musicStore = MusicStore.getInstance()
|
val musicStore = MusicStore.getInstance()
|
||||||
val settingsManager = SettingsManager.getInstance()
|
|
||||||
|
|
||||||
// --- UI SETUP ---
|
|
||||||
if (isEdgeOn() && !requireActivity().isIrregularLandscape()) {
|
|
||||||
requireDialog().window?.apply {
|
|
||||||
navigationBarColor = R.color.background.toColor(requireContext())
|
|
||||||
// handleTransparentSystemNavBar(resources.configuration)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
binding.aboutVersion.text = BuildConfig.VERSION_NAME
|
binding.aboutVersion.text = BuildConfig.VERSION_NAME
|
||||||
|
|
||||||
|
@ -55,7 +42,7 @@ class AboutDialog : BottomSheetDialogFragment() {
|
||||||
R.string.format_songs_loaded, musicStore.songs.size.toString()
|
R.string.format_songs_loaded, musicStore.songs.size.toString()
|
||||||
)
|
)
|
||||||
binding.aboutAuthor.text = getString(
|
binding.aboutAuthor.text = getString(
|
||||||
R.string.format_author, getString(R.string.author_oxycblt)
|
R.string.format_author, getString(R.string.label_author_oxycblt)
|
||||||
)
|
)
|
||||||
|
|
||||||
if (isLandscape(resources)) {
|
if (isLandscape(resources)) {
|
||||||
|
|
|
@ -6,15 +6,20 @@ package org.oxycblt.auxio.ui
|
||||||
import android.annotation.TargetApi
|
import android.annotation.TargetApi
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.res.Configuration
|
||||||
import android.graphics.Point
|
import android.graphics.Point
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.util.DisplayMetrics
|
import android.util.DisplayMetrics
|
||||||
|
import android.view.View
|
||||||
|
import android.view.Window
|
||||||
|
import android.view.WindowInsetsController
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
|
import org.oxycblt.auxio.logD
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if we are in the "Irregular" landscape mode [e.g landscape, but nav bar is on the sides]
|
* Check if we are in the "Irregular" landscape mode [e.g landscape, but nav bar is on the sides]
|
||||||
* Used to disable most of edge-to-edge if that's the case, as I cant get it to work on this mode yet.
|
* Used to disable most of edge-to-edge if that's the case, as I cant get it to work on this mode yet.
|
||||||
* TODO: Make edge-to-edge work in irregular mode
|
* TODO: Make edge-to-edge work better in irregular mode
|
||||||
* @return True if we are in the irregular landscape mode, false if not.
|
* @return True if we are in the irregular landscape mode, false if not.
|
||||||
*/
|
*/
|
||||||
fun Activity.isIrregularLandscape(): Boolean {
|
fun Activity.isIrregularLandscape(): Boolean {
|
||||||
|
|
|
@ -26,4 +26,12 @@
|
||||||
<item name="md_color_button_text">@color/control_color</item>
|
<item name="md_color_button_text">@color/control_color</item>
|
||||||
<item name="md_font_title">@font/inter_black</item>
|
<item name="md_font_title">@font/inter_black</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="Theme.BottomSheetFix" parent="@style/Theme.Design.BottomSheetDialog">
|
||||||
|
<item name="android:windowIsFloating">false</item>
|
||||||
|
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||||
|
<item name="android:navigationBarColor">@color/background</item>
|
||||||
|
<item name="android:windowLightStatusBar">false</item>
|
||||||
|
<item name="bottomSheetStyle">@style/Theme.BottomSheetHeightFix</item>
|
||||||
|
</style>
|
||||||
</resources>
|
</resources>
|
|
@ -26,4 +26,12 @@
|
||||||
<item name="md_color_button_text">@color/control_color</item>
|
<item name="md_color_button_text">@color/control_color</item>
|
||||||
<item name="md_font_title">@font/inter_black</item>
|
<item name="md_font_title">@font/inter_black</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="Theme.BottomSheetFix" parent="@style/Theme.Design.BottomSheetDialog">
|
||||||
|
<item name="android:windowIsFloating">false</item>
|
||||||
|
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||||
|
<item name="android:navigationBarColor">@color/background</item>
|
||||||
|
<item name="android:windowLightStatusBar">false</item>
|
||||||
|
<item name="bottomSheetStyle">@style/Theme.BottomSheetHeightFix</item>
|
||||||
|
</style>
|
||||||
</resources>
|
</resources>
|
|
@ -1,4 +1,10 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="author_oxycblt">OxygenCobalt</string>
|
<string name="label_author_oxycblt">OxygenCobalt</string>
|
||||||
|
|
||||||
|
<!-- Format Namespace | Value formatting/plurals -->
|
||||||
|
<string name="format_info">%1$s / %2$s</string>
|
||||||
|
<string name="format_double_info">%1$s / %2$s / %3$s</string>
|
||||||
|
<string name="format_double_counts">%1$s, %2$s</string>
|
||||||
|
<string name="format_accent_summary"><b>%1$s</b>: %2$s</string>
|
||||||
</resources>
|
</resources>
|
|
@ -156,11 +156,7 @@
|
||||||
<string name="color_label_neutral">Neutral</string>
|
<string name="color_label_neutral">Neutral</string>
|
||||||
|
|
||||||
<!-- Format Namespace | Value formatting/plurals -->
|
<!-- Format Namespace | Value formatting/plurals -->
|
||||||
<string name="format_info">%1$s / %2$s</string>
|
|
||||||
<string name="format_double_info">%1$s / %2$s / %3$s</string>
|
|
||||||
<string name="format_double_counts">%1$s, %2$s</string>
|
|
||||||
<string name="format_next_from">Next From: %s</string>
|
<string name="format_next_from">Next From: %s</string>
|
||||||
<string name="format_accent_summary"><b>%1$s</b>: %2$s</string>
|
|
||||||
<string name="format_songs_loaded">Songs Loaded: %s</string>
|
<string name="format_songs_loaded">Songs Loaded: %s</string>
|
||||||
<string name="format_author">Created by %s</string>
|
<string name="format_author">Created by %s</string>
|
||||||
|
|
||||||
|
|
|
@ -172,10 +172,10 @@
|
||||||
<style name="Theme.BottomSheetFix" parent="@style/Theme.Design.BottomSheetDialog">
|
<style name="Theme.BottomSheetFix" parent="@style/Theme.Design.BottomSheetDialog">
|
||||||
<item name="android:windowIsFloating">false</item>
|
<item name="android:windowIsFloating">false</item>
|
||||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||||
<item name="bottomSheetStyle">@style/bottomSheetStyleWrapper</item>
|
<item name="bottomSheetStyle">@style/Theme.BottomSheetHeightFix</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="bottomSheetStyleWrapper" parent="Widget.Design.BottomSheet.Modal">
|
<style name="Theme.BottomSheetHeightFix" parent="Widget.Design.BottomSheet.Modal">
|
||||||
<item name="behavior_peekHeight">500dp</item>
|
<item name="behavior_peekHeight">500dp</item>
|
||||||
</style>
|
</style>
|
||||||
</resources>
|
</resources>
|
BIN
assets/ic_auxio.png
Normal file
After Width: | Height: | Size: 4 KiB |
BIN
assets/shot_album_alt.png
Executable file
After Width: | Height: | Size: 149 KiB |
BIN
assets/shot_album_port.png
Executable file
After Width: | Height: | Size: 689 KiB |
BIN
assets/shot_artist_port.png
Executable file
After Width: | Height: | Size: 946 KiB |
BIN
assets/shot_library_port.png
Executable file
After Width: | Height: | Size: 436 KiB |
BIN
assets/shot_notif.png
Executable file
After Width: | Height: | Size: 309 KiB |
BIN
assets/shot_playback_port.png
Executable file
After Width: | Height: | Size: 179 KiB |
BIN
assets/shot_queue_port.png
Executable file
After Width: | Height: | Size: 400 KiB |
BIN
assets/shot_search_port.png
Executable file
After Width: | Height: | Size: 331 KiB |
BIN
assets/shot_settings_port.png
Executable file
After Width: | Height: | Size: 197 KiB |
BIN
assets/shot_songs_port.png
Executable file
After Width: | Height: | Size: 411 KiB |
27
info/ADDITIONS.md
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
# Accepted Additions and Requests
|
||||||
|
|
||||||
|
I primarily built Auxio as a response to many other music players on android that did far too much, had frustrating UI/UX flaws, or both.
|
||||||
|
|
||||||
|
Since I want to keep this app from suffering the same fate as those others, I have baseline requirements for all contributions.
|
||||||
|
|
||||||
|
All guidelines from the [Contribution Guidelines](../.github/CONTRIBUTING.md) still apply.
|
||||||
|
|
||||||
|
## Bug Fixes, Optimizations, Library Updates, Formatting, etc.
|
||||||
|
|
||||||
|
These will likely be accepted/add as long as they do not cause too much harm to the app's architecture.
|
||||||
|
|
||||||
|
## New Options/Customizations
|
||||||
|
|
||||||
|
These will be accepted/added if I see the value in the addition of those options and if they don't cause too much harm to the app's architecture. While I do want Auxio to remain consistent behavior/UI-wise, new options for certain customizations are still welcome.
|
||||||
|
|
||||||
|
**Note:** I will be adding Black Mode/Custom Accents in the future. Read the [FAQ](FAQ.md) for more information.
|
||||||
|
|
||||||
|
## Feature Additions and UI Changes
|
||||||
|
|
||||||
|
These are far less likely to be accepted/added. As I said, I want to avoid Auxio from becoming overly bloated with features I do not use, and therefore **I will only accept features/UI changes that directly benefit my own usage.** If they do not, then I will reject/ignore them.
|
||||||
|
|
||||||
|
Feel free to fork Auxio to add your own features however.
|
||||||
|
|
||||||
|
## A Final Note
|
||||||
|
|
||||||
|
I am an extremely busy student that only programs in his free time. If I decided to implement/accept an idea, it will take some time. **Be Patient.**
|
53
info/FAQ.md
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
# Auxio - Frequently Asked Questions
|
||||||
|
|
||||||
|
For a list of **supported formats** read [Supported Formats](FORMATS.md)
|
||||||
|
|
||||||
|
This FAQ will be continually updated as new changes and updates are made to Auxio.
|
||||||
|
|
||||||
|
## What is Auxio?
|
||||||
|
|
||||||
|
Auxio is a reliable and customizable local music player that I built for myself, primarily.
|
||||||
|
|
||||||
|
## Where can I download Auxio?
|
||||||
|
|
||||||
|
Nowhere currently, I still need to make some changes before its ready to be put up on public-facing stores. See the [Releases](https://github.com/oxygencobalt/Auxio/releases) to download it for now. It will arrive on F-Droid eventually.
|
||||||
|
|
||||||
|
## Can I translate Auxio to my native language?
|
||||||
|
|
||||||
|
I still need to set up Weblate, but you can open a [Pull Request](https://github.com/enricocid/Music-Player-GO/pulls) with any translations you want to be added for now.
|
||||||
|
|
||||||
|
## Why ExoPlayer?
|
||||||
|
|
||||||
|
ExoPlayer is far more flexible than the native MediaPlayer API, allowing Auxio to be extended to sources that aren't just the local files on the phone, while still providing consistent playback behavior across devices and OEMs.
|
||||||
|
|
||||||
|
## Why is there no black mode?
|
||||||
|
|
||||||
|
Android does not support a black mode directly, only dark and light. Therefore I have to implement the mode myself, which will take some time. **I do plan to add it however.**
|
||||||
|
|
||||||
|
## Why cant I have a custom accent?
|
||||||
|
|
||||||
|
Custom accents would require some changes to the accent system in the app, which will take some time. **I do plan to add them however.**
|
||||||
|
|
||||||
|
## Why are accents lighter/less saturated in dark mode?
|
||||||
|
|
||||||
|
As per the [Material Guidelines](https://material.io/design/color/dark-theme.html), accents should be less saturated on dark mode to reduce eye strain.
|
||||||
|
|
||||||
|
You will be able to set the accent to something less saturated when I implement custom accents.
|
||||||
|
|
||||||
|
## Does Auxio have an equalizer?
|
||||||
|
|
||||||
|
No. Don't need it. Will never add it.
|
||||||
|
|
||||||
|
## Why isn't edge-to-edge enabled on versions below Oreo?
|
||||||
|
|
||||||
|
The APIs for changing system bar colors were only added in API Level 27 (Oreo MR1), meaning that edge-to-edge will not work below that version.
|
||||||
|
|
||||||
|
I could possibly extend edge-to-edge support to those versions, but it would take awhile.
|
||||||
|
|
||||||
|
## How can I contribute/report issues?
|
||||||
|
|
||||||
|
Open an [Issue](https://github.com/OxygenCobalt/Auxio/issues) or a [Pull Request](https://github.com/OxygenCobalt/Auxio/pulls), please note the [Contribution Guidelines](../.github/CONTRIBUTING.md) and [Accepted Additions](ADDITIONS.md).
|
||||||
|
|
||||||
|
## Does this app keep/send any information about myself or my device.
|
||||||
|
|
||||||
|
Never. There's no need. Auxio can't even access the internet.
|
23
info/FORMATS.md
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
# Supported Formats
|
||||||
|
|
||||||
|
Auxio is based off [ExoPlayer](https://exoplayer.dev/), which provides greater flexibility and consistency with how Auxio plays music.
|
||||||
|
|
||||||
|
Here are the music formats that Auxio supports, as per the [Supported ExoPlayer Formats](https://exoplayer.dev/supported-formats.html):
|
||||||
|
|
||||||
|
✅ = Supported
|
||||||
|
|
||||||
|
👎 = Not fully supported
|
||||||
|
|
||||||
|
❌ = Not supported
|
||||||
|
|
||||||
|
| Format | Supported | Comments |
|
||||||
|
|--------|-----------|-----------
|
||||||
|
| M4A | ✅ | |
|
||||||
|
| MP3 | ✅ | Some files may not be seekable |
|
||||||
|
| MKA | ✅ | |
|
||||||
|
| OGG | ✅ | Containing Vorbis, Opus, and FLAC |
|
||||||
|
| WAV | ✅ | |
|
||||||
|
| MPEG_TS | ✅ | |
|
||||||
|
| MPEG_TS | ✅ | |
|
||||||
|
| AAC | 👎 | Not seekable |
|
||||||
|
| FLAC | ❌ | Auxio must be patched with the [FLAC Extension](https://github.com/google/ExoPlayer/tree/release-v2/extensions/flac) |
|
12
info/LICENSES.md
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# Licenses
|
||||||
|
|
||||||
|
Auxio uses a number of third-party libraries, which are listed below with their licenses:
|
||||||
|
|
||||||
|
| Library Name | Author(s) | Purpose | License |
|
||||||
|
|--------------|-----------|---------|---------|
|
||||||
|
| [ExoPlayer](https://github.com/google/ExoPlayer) | [Google](https://github.com/google) | Music Playback | Apache-2.0 |
|
||||||
|
| [Coil](https://github.com/coil-kt/coil) | [coil-kt](https://github.com/coil-kt) | Image Loading | Apache-2.0 |
|
||||||
|
| [Indicator Fast Scroll](https://github.com/reddit/IndicatorFastScroll) | [Reddit](https://github.com/reddit) | Fast Scrolling | MIT |
|
||||||
|
| [Material Dialogs](https://github.com/afollestad/material-dialogs) | [Aiden Follestad](https://github.com/afollestad) | Accent Dialog | Apache-2.0 |
|
||||||
|
| [ktlint](https://github.com/pinterest/ktlint) | [Pinterest](https://github.com/pinterest) | Code Formatting | MIT |
|
||||||
|
| [LeakCanary](https://github.com/square/leakcanary) | [Square](https://github.com/square) | Memory leak detection | Apache-2.0 |
|
BIN
readme/Screenshot_20201218-133806.png
Executable file
After Width: | Height: | Size: 309 KiB |
BIN
readme/shot_album_land.png
Executable file
After Width: | Height: | Size: 201 KiB |
BIN
readme/shot_album_portait.png
Executable file
After Width: | Height: | Size: 689 KiB |
BIN
readme/shot_artist_land.png
Executable file
After Width: | Height: | Size: 318 KiB |
BIN
readme/shot_artist_portrait.png
Executable file
After Width: | Height: | Size: 954 KiB |
BIN
readme/shot_lib_port.png
Executable file
After Width: | Height: | Size: 436 KiB |
BIN
readme/shot_lib_portait.png
Executable file
After Width: | Height: | Size: 436 KiB |
BIN
readme/shot_notif_alt.png
Executable file
After Width: | Height: | Size: 210 KiB |
BIN
readme/shot_playback_land.png
Executable file
After Width: | Height: | Size: 820 KiB |
BIN
readme/shot_playback_portrait.png
Executable file
After Width: | Height: | Size: 179 KiB |
BIN
readme/shot_queue_portrait.png
Executable file
After Width: | Height: | Size: 397 KiB |
BIN
readme/shot_search_port
Executable file
After Width: | Height: | Size: 331 KiB |
BIN
readme/shot_search_portrait
Executable file
After Width: | Height: | Size: 331 KiB |
BIN
readme/shot_settings_portrait.png
Executable file
After Width: | Height: | Size: 196 KiB |
BIN
readme/shot_songs_portrait.png
Executable file
After Width: | Height: | Size: 411 KiB |