docs: update metadata
Update metadata in preperation for 2.0.0.
|
@ -41,6 +41,7 @@ I primarily built Auxio for myself, but you can use it too, I guess.
|
|||
- Genres/Artists/Albums/Songs support
|
||||
- Intuitive queue system
|
||||
- Reliable playback state persistence
|
||||
- Material You (Android 12+ only)
|
||||
- Edge-to-edge (Oreo+ Only)
|
||||
- Embedded covers support
|
||||
- Search Functionality
|
||||
|
@ -52,7 +53,6 @@ I primarily built Auxio for myself, but you can use it too, I guess.
|
|||
|
||||
- Playlists
|
||||
- Liked songs
|
||||
- Improved tablet layouts
|
||||
- More notification actions
|
||||
- And other things, probably
|
||||
|
||||
|
|
|
@ -23,10 +23,8 @@ import android.os.Bundle
|
|||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.Button
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.core.content.res.ResourcesCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.navigation.findNavController
|
||||
|
@ -106,12 +104,11 @@ class MainFragment : Fragment(), PlaybackLayout.ActionCallback {
|
|||
musicModel.loaderResponse.observe(viewLifecycleOwner) { response ->
|
||||
// Handle the loader response.
|
||||
when (response) {
|
||||
// OK, start restoring playback now
|
||||
// Ok, start restoring playback now
|
||||
is MusicStore.Response.Ok -> playbackModel.setupPlayback(requireContext())
|
||||
|
||||
// Error, show the error to the user
|
||||
is MusicStore.Response.Err -> {
|
||||
|
||||
logD("Received Error")
|
||||
|
||||
val errorRes = when (response.kind) {
|
||||
|
@ -124,13 +121,6 @@ class MainFragment : Fragment(), PlaybackLayout.ActionCallback {
|
|||
binding.root, getString(errorRes), Snackbar.LENGTH_INDEFINITE
|
||||
)
|
||||
|
||||
snackbar.view.apply {
|
||||
// Change the font family to semibold
|
||||
findViewById<Button>(
|
||||
com.google.android.material.R.id.snackbar_action
|
||||
).typeface = ResourcesCompat.getFont(requireContext(), R.font.inter_semibold)
|
||||
}
|
||||
|
||||
when (response.kind) {
|
||||
MusicStore.ErrorKind.FAILED, MusicStore.ErrorKind.NO_MUSIC -> {
|
||||
snackbar.setAction(R.string.lbl_retry) {
|
||||
|
|
|
@ -48,7 +48,6 @@
|
|||
<ImageView
|
||||
android:id="@+id/about_auxio_icon"
|
||||
style="@style/Widget.Auxio.Image.Small"
|
||||
android:layout_marginStart="@dimen/spacing_medium"
|
||||
android:layout_marginTop="@dimen/spacing_medium"
|
||||
android:contentDescription="@string/desc_auxio_icon"
|
||||
android:src="@mipmap/ic_launcher"
|
||||
|
@ -75,8 +74,8 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/spacing_small"
|
||||
android:gravity="center"
|
||||
android:paddingStart="@dimen/spacing_small"
|
||||
android:paddingEnd="@dimen/spacing_small"
|
||||
android:paddingStart="@dimen/spacing_medium"
|
||||
android:paddingEnd="@dimen/spacing_medium"
|
||||
android:text="@string/info_app_desc"
|
||||
android:textAppearance="@style/TextAppearance.Auxio.BodyLarge"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
|
|
|
@ -164,5 +164,12 @@
|
|||
<string name="def_playback">Keine Musik wird gespielt</string>
|
||||
<string name="def_widget_song">Liedname</string>
|
||||
<string name="def_widget_artist">Künstlername</string>
|
||||
<string name="set_lib_tabs">Bibliothektabs</string>
|
||||
<string name="set_lib_tabs_desc">Sichtbarkeit und Ordnung der Bibliothektabs ändern</string>
|
||||
<string name="lbl_sort_name">Name</string>
|
||||
<string name="desc_shuffle_all">Alle Lieder zufällig</string>
|
||||
<string name="desc_clear_queue_item">Lied in der Warteschlange löschen</string>
|
||||
<string name="desc_tab_handle">Tab versetzen</string>
|
||||
<string name="def_artist">Unbekannter Künstler</string>
|
||||
|
||||
</resources>
|
|
@ -152,4 +152,5 @@
|
|||
<item quantity="one">%d Álbum</item>
|
||||
<item quantity="other">%d Álbumes</item>
|
||||
</plurals>
|
||||
<string name="def_artist">Artista desconocido</string>
|
||||
</resources>
|
||||
|
|
|
@ -150,4 +150,5 @@
|
|||
<item quantity="one">%d Album</item>
|
||||
<item quantity="other">%d Albums</item>
|
||||
</plurals>
|
||||
<string name="def_artist">Onbekend Artist</string>
|
||||
</resources>
|
||||
|
|
|
@ -120,7 +120,7 @@
|
|||
<string name="desc_shuffle_all">Shuffle all songs</string>
|
||||
|
||||
<string name="desc_clear_user_queue">Clear queue</string>
|
||||
<string name="desc_clear_queue_item">Remove this queue item</string>
|
||||
<string name="desc_clear_queue_item">Remove this queue song</string>
|
||||
<string name="desc_queue_handle">Move this queue song</string>
|
||||
<string name="desc_tab_handle">Move this tab</string>
|
||||
<string name="desc_clear_search">Clear search query</string>
|
||||
|
|
3
fastlane/metadata/android/en-US/changelogs/9.txt
Normal file
|
@ -0,0 +1,3 @@
|
|||
Auxio has a new look derived from Material You, with a new music loader that supports album artists, a completely revamped sorting system, greater library customization, and a more streamlined and cohesive user experience.
|
||||
|
||||
For more information, please read the full changelog at https://github.com/oxygencobalt/Auxio/releases/
|
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 245 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 157 KiB After Width: | Height: | Size: 160 KiB |
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 257 KiB |
Before Width: | Height: | Size: 159 KiB After Width: | Height: | Size: 137 KiB |
Before Width: | Height: | Size: 163 KiB After Width: | Height: | Size: 133 KiB |
Before Width: | Height: | Size: 225 KiB After Width: | Height: | Size: 296 KiB |
Before Width: | Height: | Size: 268 KiB After Width: | Height: | Size: 166 KiB |
Before Width: | Height: | Size: 189 KiB After Width: | Height: | Size: 146 KiB |
Before Width: | Height: | Size: 282 KiB After Width: | Height: | Size: 254 KiB |
|
@ -9,7 +9,7 @@ Auxio has a couple of core systems or concepts that should be understood when wo
|
|||
#### Package Structure
|
||||
|
||||
Auxio's package structure is strictly feature-oriented. For example, playback code is exclusively in the `playback` package,
|
||||
detail code is exclusively in the `detail` package. Sub-packages can be related to the code it contains, such as `detail.recycler`
|
||||
and detail code is exclusively in the `detail` package. Sub-packages can be related to the code it contains, such as `detail.recycler`
|
||||
for the detail UI adapters, or they can be related to a sub-feature, like `playback.queue` for the queue UI.
|
||||
|
||||
A full run-down of Auxio's current package structure as of the latest version is shown below.
|
||||
|
@ -54,7 +54,7 @@ is separated into three phases:
|
|||
|
||||
- Create variables [Bindings, Adapters, etc]
|
||||
- Set up the UI
|
||||
- Set up LiveData observers
|
||||
- Set up ViewModel instances and LiveData observers
|
||||
|
||||
`findViewById` is to **only** be used when interfacing with non-Auxio views. Otherwise, viewbinding should be
|
||||
used in all cases. If one needs to keep track of a viewbinding outside of `onCreateView`, then one can declare
|
||||
|
@ -110,12 +110,14 @@ Other data types represent a specific UI configuration or state:
|
|||
|
||||
#### Music Access
|
||||
|
||||
All music on a system is asynchronously indexed into the shared object `MusicStore`. Because of this, **`MusicStore` may not be available at all times**.
|
||||
All music on a system is asynchronously loaded into the shared object `MusicStore`. Because of this, **`MusicStore` may not be available at all times**.
|
||||
|
||||
- ViewModels should try to await or gracefully exit if music is not available
|
||||
- ViewModels should try to await or gracefully exit the called method if `MusicStore` is not available
|
||||
- In the case that a ViewModel needs a `MusicStore` instance to function, an instance can be required. This should be done sparingly.
|
||||
- Other shared objects that rely on `MusicStore` [like `PlaybackStateManager`] will no-op if music is not available.
|
||||
|
||||
If the loading status needs to be shown in a UI, `MusicViewModel` can be used to observe the current music loader response.
|
||||
|
||||
#### Playback System
|
||||
|
||||
Auxio's playback system is somewhat unorthodox, as it avoids much of the android-provided APIs in favor of a more controllable and sensible system.
|
||||
|
@ -145,8 +147,7 @@ that UIs can use to interact with the playback state.
|
|||
|
||||
`PlaybackService`'s job is to use the playback state to manage the ExoPlayer instance, the notification, the widget, and also modify the state depending on
|
||||
system events, such as when a button is pressed on a headset. It should **never** be bound to, mostly because there is no need given that
|
||||
`PlaybackViewModel` exposes the same data in a much safer fashion. `PlaybackService` also controls the `PlaybackSessionConnector`, `AudioReactor`,
|
||||
and `WidgetController` classes, which manage the `MediaSession`, Audio Focus, and Widgets respectively.
|
||||
`PlaybackViewModel` exposes the same data in a much safer fashion.
|
||||
|
||||
#### Data Integers
|
||||
|
||||
|
@ -199,7 +200,7 @@ To prevent any strange bugs, all integer representations must be unique. A table
|
|||
0xA10F | Sort.Year
|
||||
```
|
||||
|
||||
Some datatypes [like `Tab` and `Sort`] have even more fine-grained integer representations for other information. More information can be found in
|
||||
Some datatypes [like `Tab` and `Sort`] have even more fine-grained integer representations for other data. More information can be found in
|
||||
the documentation for these datatypes.
|
||||
|
||||
## Package-by-package rundown
|
||||
|
@ -258,7 +259,7 @@ This package contains the components for the "home" UI in Auxio, or the UI that
|
|||
- The base package contains the top-level components that manage the FloatingActionButton, AppBar, and ViewPager instances.
|
||||
- The `fastscroll` package contains the fast scroll component used in each list of music
|
||||
- The `list` package contains the individual fragments for each list of music. These are all placed in the top-level ViewPager instance.
|
||||
- The `tabs` package contains the data representation of an individual library tab and the UI's for editing them.
|
||||
- The `tabs` package contains the data representation of an individual library tab and the UIs for editing them.
|
||||
|
||||
#### `.music`
|
||||
|
||||
|
@ -270,7 +271,7 @@ data objects have to inherit `BaseModel` so that they can be placed alongside `M
|
|||
This module not only contains the playback system described above, but also multiple other components:
|
||||
|
||||
- `queue` contains the Queue UI and it's fancy item transitions
|
||||
- `state` contains the core playback state system
|
||||
- `state` contains the core playback state and persistence system
|
||||
- `system` contains the system-facing playback system
|
||||
|
||||
The most important part of this module is `PlaybackLayout`, which is a custom `ViewGroup` that implements the playback bar and it's ability to
|
||||
|
|
|
@ -28,8 +28,8 @@ ability to be extended to music sources outside of local files. You can read mor
|
|||
#### What formats does Auxio support?
|
||||
|
||||
As per the [Supported ExoPlayer Formats](https://exoplayer.dev/supported-formats.html), Auxio supports
|
||||
MP4, MP3, MKA, OGG, WAV, MPEG, ACC on all versions of Android. FLAC files are supported on Android 8.1
|
||||
or newer, on lower versions Auxio must be patched with the [FLAC Extension](https://github.com/google/ExoPlayer/tree/release-v2/extensions/flac).
|
||||
MP4, MP3, MKA, OGG, WAV, MPEG, ACC on all versions of Android. However, FLAC files can only be played
|
||||
on Android 8.1 and above. Below that, Auxio must be patched with the [FLAC Extension](https://github.com/google/ExoPlayer/tree/release-v2/extensions/flac).
|
||||
|
||||
#### Why are accents lighter/less saturated in dark mode?
|
||||
|
||||
|
|