Skip to content

Commit

Permalink
Merge pull request #450 from OxygenCobalt/dev
Browse files Browse the repository at this point in the history
Version 3.1.0
  • Loading branch information
OxygenCobalt authored May 23, 2023
2 parents 78d9f9f + 4ad4be0 commit 9739e01
Show file tree
Hide file tree
Showing 262 changed files with 7,985 additions and 3,605 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ jobs:
uses: actions/checkout@v3
- name: Clone submodules
run: git submodule update --init --recursive
- name: Set up JDK 11
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '11'
java-version: '17'
distribution: 'temurin'
cache: gradle
- name: Grant execute permission for gradlew
Expand Down
7 changes: 3 additions & 4 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
[submodule "ExoPlayer"]
path = ExoPlayer
url = https://github.com/OxygenCobalt/ExoPlayer.git
branch = auxio
[submodule "media"]
path = media
url = https://github.com/OxygenCobalt/media.git
28 changes: 25 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,27 @@
# Changelog

## 3.1.0

#### What's New
- Added playlist functionality

#### What's Improved
- Sorting now handles numbers of arbitrary length
- Punctuation is now ignored in sorting with intelligent sort names disabled

#### What's Fixed
- Fixed issue where vorbis comments in the form of `metadata_block_picture` (lowercase) would not
be parsed as images
- Fixed issue where searches would match song file names case-sensitively
- Fixed issue where the notification would not respond to changes in the album cover setting
- Fixed issue where short names starting with an article would not be correctly sorted (ex. "the 1")
- Fixed incorrect item arrangement on landscape
- Fixed disappearing dividers in search view
- Reduced likelihood that images (eg. album covers) would not update when the music library changed

#### Dev/Meta
- Switched to androidx media3 (New Home of ExoPlayer) for backing player components

## 3.0.5

#### What's Fixed
Expand All @@ -11,23 +33,23 @@ screen
## 3.0.4

#### What's New
- Added support for `COMPILATION` and `ITUNESCOMPILATION` flags.
- Added support for `COMPILATION` and `ITUNESCOMPILATION` flags

#### What's Improved
- Accept `REPLAYGAIN_*` adjustment information on OPUS files alongside
`R128_*` adjustments
- List updates are now consistent across the app
- Fixed jarring header update in detail view
- Search view now trims search queries
- Searching now ignores punctuation and trailing whitespace
- Audio effect (equalizer) session is now broadcast when playing/pausing
rather than on start/stop
- Searching now ignores punctuation
- Numeric names are now logically sorted (i.e 7 before 15)

#### What's Fixed
- Fixed MP4-AAC files not playing due to an accidental audio extractor
deletion
- Fix "format" not appearing in song properties view
- Fix visual bugs when editing duplicate songs in the queue

#### What's Changed
- "Ignore articles when sorting" is now "Intelligent sorting"
Expand Down
1 change: 0 additions & 1 deletion ExoPlayer
Submodule ExoPlayer deleted from fef2bb
11 changes: 6 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
<h1 align="center"><b>Auxio</b></h1>
<h4 align="center">A simple, rational music player for android.</h4>
<p align="center">
<a href="https://github.com/oxygencobalt/Auxio/releases/tag/v3.0.5">
<img alt="Latest Version" src="https://img.shields.io/static/v1?label=tag&message=v3.0.5&color=64B5F6&style=flat">
<a href="https://github.com/oxygencobalt/Auxio/releases/tag/v3.1.0">
<img alt="Latest Version" src="https://img.shields.io/static/v1?label=tag&message=v3.1.0&color=64B5F6&style=flat">
</a>
<a href="https://github.com/oxygencobalt/Auxio/releases/">
<img alt="Releases" src="https://img.shields.io/github/downloads/OxygenCobalt/Auxio/total.svg?color=4B95DE&style=flat">
Expand All @@ -21,7 +21,7 @@

## About

Auxio is a local music player with a fast, reliable UI/UX without the many useless features present in other music players. Built off of <a href="https://exoplayer.dev/">Exoplayer</a>, Auxio has superior library support and listening quality compared to other apps that use outdated android functionality. In short, **It plays music.**
Auxio is a local music player with a fast, reliable UI/UX without the many useless features present in other music players. Built off of [ExoPlayer](https://exoplayer.dev/), Auxio has superior library support and listening quality compared to other apps that use outdated android functionality. In short, **It plays music.**

I primarily built Auxio for myself, but you can use it too, I guess.

Expand All @@ -42,15 +42,16 @@ I primarily built Auxio for myself, but you can use it too, I guess.

## Features

- [ExoPlayer](https://exoplayer.dev/) based playback
- [ExoPlayer](https://exoplayer.dev/)-based playback
- Snappy UI derived from the latest Material Design guidelines
- Opinionated UX that prioritizes ease of use over edge cases
- Customizable behavior
- Support for disc numbers, multiple artists, release types,
precise/original dates, sort tags, and more
- Advanced artist system that unifies artists and album artists
- SD Card-aware folder management
- Reliable playback state persistence
- Reliable playlisting functionality
- Playback state persistence
- Full ReplayGain support (On MP3, FLAC, OGG, OPUS, and MP4 files)
- External equalizer support (ex. Wavelet)
- Edge-to-edge
Expand Down
58 changes: 30 additions & 28 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ android {

defaultConfig {
applicationId namespace
versionName "3.0.5"
versionCode 29
versionName "3.1.0"
versionCode 30

minSdk 21
targetSdk 33
Expand All @@ -30,12 +30,12 @@ android {
}

compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}

kotlinOptions {
jvmTarget = "11"
jvmTarget = "17"
freeCompilerArgs += "-Xjvm-default=all"
}

Expand All @@ -56,15 +56,16 @@ android {
}
}
}

packagingOptions {
exclude "DebugProbesKt.bin"
exclude "kotlin-tooling-metadata.json"
exclude "**/kotlin/**"
exclude "**/okhttp3/**"
exclude "META-INF/*.version"
jniLibs {
excludes += ['**/kotlin/**', '**/okhttp3/**']
}
resources {
excludes += ['DebugProbesKt.bin', 'kotlin-tooling-metadata.json', '**/kotlin/**', '**/okhttp3/**', 'META-INF/*.version']
}
}


buildFeatures {
viewBinding true
}
Expand All @@ -75,26 +76,27 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.6.4"

def coroutines_version = '1.7.1'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-guava:$coroutines_version"

// --- SUPPORT ---

// General
// 1.4.0 is used in order to avoid a ripple bug in material components
implementation "androidx.appcompat:appcompat:1.6.1"
implementation "androidx.core:core-ktx:1.9.0"
implementation "androidx.activity:activity-ktx:1.6.1"
implementation "androidx.fragment:fragment-ktx:1.5.5"
implementation "androidx.core:core-ktx:1.10.1"
implementation "androidx.activity:activity-ktx:1.7.1"
implementation "androidx.fragment:fragment-ktx:1.5.7"

// UI
implementation "androidx.recyclerview:recyclerview:1.3.0"
implementation "androidx.constraintlayout:constraintlayout:2.1.4"
implementation "androidx.viewpager2:viewpager2:1.1.0-beta01"
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.core:core-ktx:1.10.1'

// Lifecycle
def lifecycle_version = "2.6.0"
def lifecycle_version = "2.6.1"
implementation "androidx.lifecycle:lifecycle-common:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
Expand All @@ -111,35 +113,35 @@ dependencies {
implementation "androidx.preference:preference-ktx:1.2.0"

// Database
def room_version = '2.5.0'
def room_version = '2.6.0-alpha01'
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
implementation "androidx.room:room-ktx:$room_version"

// --- THIRD PARTY ---

// Exoplayer (Vendored)
implementation project(":exoplayer-library-core")
implementation project(":exoplayer-extension-ffmpeg")
implementation project(":media-lib-exoplayer")
implementation project(":media-lib-decoder-ffmpeg")

// Image loading
implementation 'io.coil-kt:coil-base:2.2.2'
implementation 'io.coil-kt:coil-base:2.3.0'

// Material
// TODO: Stuck on 1.8.0-alpha01 until ripple bug with tab layout can be worked around
// TODO: Stuck on 1.8.0-alpha01 until ripple bug with tab layout is actually available
// in a version that I can build with
// TODO: Exactly figure out the conditions that the 1.7.0 ripple bug occurred so you can just
// PR a fix.
implementation "com.google.android.material:material:1.8.0-alpha01"

// Dependency Injection
def dagger_version = '2.45'
implementation "com.google.dagger:dagger:$dagger_version"
kapt "com.google.dagger:dagger-compiler:$dagger_version"
implementation "com.google.dagger:dagger:$hilt_version"
kapt "com.google.dagger:dagger-compiler:$hilt_version"
implementation "com.google.dagger:hilt-android:$hilt_version"
kapt "com.google.dagger:hilt-android-compiler:$hilt_version"

// Testing
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.10'
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.11'
testImplementation "junit:junit:4.13.2"
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
Expand Down
13 changes: 12 additions & 1 deletion app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,15 @@

# Obsfucation is what proprietary software does to keep the user unaware of it's abuses.
# Also it's easier to fix issues if the stack trace symbols remain unmangled.
-dontobfuscate
-dontobfuscate

# Make AGP shut up about classes that aren't even used.
-dontwarn org.bouncycastle.jsse.BCSSLParameters
-dontwarn org.bouncycastle.jsse.BCSSLSocket
-dontwarn org.bouncycastle.jsse.provider.BouncyCastleJsseProvider
-dontwarn org.conscrypt.Conscrypt$Version
-dontwarn org.conscrypt.Conscrypt
-dontwarn org.conscrypt.ConscryptHostnameVerifier
-dontwarn org.openjsse.javax.net.ssl.SSLParameters
-dontwarn org.openjsse.javax.net.ssl.SSLSocket
-dontwarn org.openjsse.net.ssl.OpenJSSE
2 changes: 1 addition & 1 deletion app/src/androidTest/java/org/oxycblt/auxio/StubTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,6 @@ class StubTest {
@Test
fun useAppContext() {
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("org.oxycblt.auxio", appContext.packageName)
assertEquals("org.oxycblt.auxio.debug", appContext.packageName)
}
}
3 changes: 3 additions & 0 deletions app/src/main/java/org/oxycblt/auxio/Auxio.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import androidx.core.content.pm.ShortcutManagerCompat
import androidx.core.graphics.drawable.IconCompat
import dagger.hilt.android.HiltAndroidApp
import javax.inject.Inject
import org.oxycblt.auxio.home.HomeSettings
import org.oxycblt.auxio.image.ImageSettings
import org.oxycblt.auxio.playback.PlaybackSettings
import org.oxycblt.auxio.ui.UISettings
Expand All @@ -39,13 +40,15 @@ class Auxio : Application() {
@Inject lateinit var imageSettings: ImageSettings
@Inject lateinit var playbackSettings: PlaybackSettings
@Inject lateinit var uiSettings: UISettings
@Inject lateinit var homeSettings: HomeSettings

override fun onCreate() {
super.onCreate()
// Migrate any settings that may have changed in an app update.
imageSettings.migrate()
playbackSettings.migrate()
uiSettings.migrate()
homeSettings.migrate()
// Adding static shortcuts in a dynamic manner is better than declaring them
// manually, as it will properly handle the difference between debug and release
// Auxio instances.
Expand Down
52 changes: 31 additions & 21 deletions app/src/main/java/org/oxycblt/auxio/IntegerTable.kt
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,26 @@ object IntegerTable {
const val VIEW_TYPE_ARTIST = 0xA002
/** GenreViewHolder */
const val VIEW_TYPE_GENRE = 0xA003
/** PlaylistViewHolder */
const val VIEW_TYPE_PLAYLIST = 0xA004
/** BasicHeaderViewHolder */
const val VIEW_TYPE_BASIC_HEADER = 0xA004
const val VIEW_TYPE_BASIC_HEADER = 0xA005
/** DividerViewHolder */
const val VIEW_TYPE_DIVIDER = 0xA006
/** SortHeaderViewHolder */
const val VIEW_TYPE_SORT_HEADER = 0xA005
const val VIEW_TYPE_SORT_HEADER = 0xA007
/** AlbumSongViewHolder */
const val VIEW_TYPE_ALBUM_SONG = 0xA007
const val VIEW_TYPE_ALBUM_SONG = 0xA008
/** ArtistAlbumViewHolder */
const val VIEW_TYPE_ARTIST_ALBUM = 0xA009
/** ArtistSongViewHolder */
const val VIEW_TYPE_ARTIST_SONG = 0xA00A
/** DiscHeaderViewHolder */
const val VIEW_TYPE_DISC_HEADER = 0xA00C
const val VIEW_TYPE_DISC_HEADER = 0xA00B
/** EditHeaderViewHolder */
const val VIEW_TYPE_EDIT_HEADER = 0xA00C
/** PlaylistSongViewHolder */
const val VIEW_TYPE_PLAYLIST_SONG = 0xA00E
/** "Music playback" notification code */
const val PLAYBACK_NOTIFICATION_CODE = 0xA0A0
/** "Music loading" notification code */
Expand All @@ -65,34 +73,36 @@ object IntegerTable {
const val PLAYBACK_MODE_IN_ALBUM = 0xA105
/** PlaybackMode.ALL_SONGS */
const val PLAYBACK_MODE_ALL_SONGS = 0xA106
/** DisplayMode.NONE (No Longer used but still reserved) */
// const val DISPLAY_MODE_NONE = 0xA107
/** MusicMode._GENRES */
const val MUSIC_MODE_GENRES = 0xA108
/** MusicMode._ARTISTS */
const val MUSIC_MODE_ARTISTS = 0xA109
/** MusicMode._ALBUMS */
const val MUSIC_MODE_ALBUMS = 0xA10A
/** MusicMode.SONGS */
const val MUSIC_MODE_SONGS = 0xA10B
/** Sort.ByName */
/** MusicMode.ALBUMS */
const val MUSIC_MODE_ALBUMS = 0xA10A
/** MusicMode.ARTISTS */
const val MUSIC_MODE_ARTISTS = 0xA109
/** MusicMode.GENRES */
const val MUSIC_MODE_GENRES = 0xA108
/** MusicMode.PLAYLISTS */
const val MUSIC_MODE_PLAYLISTS = 0xA107
/** Sort.Mode.ByName */
const val SORT_BY_NAME = 0xA10C
/** Sort.ByArtist */
/** Sort.Mode.ByArtist */
const val SORT_BY_ARTIST = 0xA10D
/** Sort.ByAlbum */
/** Sort.Mode.ByAlbum */
const val SORT_BY_ALBUM = 0xA10E
/** Sort.ByYear */
/** Sort.Mode.ByYear */
const val SORT_BY_YEAR = 0xA10F
/** Sort.ByDuration */
/** Sort.Mode.ByDuration */
const val SORT_BY_DURATION = 0xA114
/** Sort.ByCount */
/** Sort.Mode.ByCount */
const val SORT_BY_COUNT = 0xA115
/** Sort.ByDisc */
/** Sort.Mode.ByDisc */
const val SORT_BY_DISC = 0xA116
/** Sort.ByTrack */
/** Sort.Mode.ByTrack */
const val SORT_BY_TRACK = 0xA117
/** Sort.ByDateAdded */
/** Sort.Mode.ByDateAdded */
const val SORT_BY_DATE_ADDED = 0xA118
/** Sort.Mode.None */
const val SORT_BY_NONE = 0xA11F
/** ReplayGainMode.Off (No longer used but still reserved) */
// const val REPLAY_GAIN_MODE_OFF = 0xA110
/** ReplayGainMode.Track */
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/java/org/oxycblt/auxio/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ import org.oxycblt.auxio.util.systemBarInsetsCompat
* TODO: Use proper material attributes (Not the weird dimen attributes I currently have)
* TODO: Migrate to material animation system
* TODO: Unit testing
* TODO: Fix UID naming
* TODO: Leverage FlexibleListAdapter more in dialogs (Disable item anims)
* TODO: Add more logging
* TODO: Try to move on from synchronized and volatile in shared objs
*/
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
Expand Down
Loading

0 comments on commit 9739e01

Please sign in to comment.