Remove references to android system strings, in favor of in-house
translations.
Previously Auxio would use the `android.R.string.ok` and
`android.R.string.cancel` strings to represent Ok and Cancel
respectively, but these system strings are actually untranslated on
some devices, so it is better for i18n if we use our own strings
for such.
Rework the asynchronous aspects of MusicStore to rely on a more
conventional callback system.
In preparation for automatic rescanning, it would be more elegant
for music consumers to use a callback, so that updates can be
registered easier than if a co-routine continued to be used.
Convert MusicStore to this new model and rework the accesses of
MusicStore in-app to line up with this new system.
Create a ViewModel for the more complicated navigation pathways.
Normally, navigation was fragmented along a complicated stretch of
fragment hacks and DetailViewModel's navToItem attitbute, both of which
were not really that ideal. Dumpster them for a single, unified
viewmodel for the more complicated navigation situations. This removes
much of the duplicate navigation logic and is likely much more
maintainable for future situations.
Move all fragment instances to the new ViewBindingFragment paradigm,
which should help immensely with reducing memory leaks from list
bindings and to really alleviate the overloaded onCreate functions.
Rework the playback slide up implementation to be more straightfoward.
This is really composed of stylistic improvements, very little in
actual behavior changes. This does re-introduce a regression when
nothing is playing where the scroll position will become off when
rotating, but that desynchronization happens often so unless I were
to completely migrate both the panel and the bar to a view, I don't
really see it as an issue.
Switch to the spotless linter with ktfmt used as a backend instead of
ktlint.
This switch was done for two reasons:
1. ktfmt is more thorough than ktlint
2. License headers can be added more effectively with spotless than
the default Android Studio behavior.
Dump all of the changes now so I don't have to deal with it over a long
period of time. I don't care.
Change createMosaic to use SquareFrameTransform.
This should help fix a theoretical bug where non-1:1 album covers will
be oddly stretched in a generated mosaic, as all album covers will be
forcefully cropped to a 1:1 ratio.
Create a custom view for rounded images, making them more nuanced in
the process.
The previous method for applying rounded images in-app was generally
clunky and fragile. Introduce a new custom view that actually takes a
cornerRadius attribute from the ImageView itself that then applies it
whenever the user enables the setting. This also allows rounded images
to be more nuanced, as typical 8dp elevation can be used for small
views and a more fitting 16dp radius can be used for large views.
Rework logging to be clearer and more standardized.
Rework all usages of lossing to follow a single unified style,
introducing a new "warn" option alongside this.
Switch auxio to a single-queue system. "Play next" adds songs to the top
of the queue, similar to before, and then "Add to queue" adds songs to
the bottom of the queue. This enables many more enhancements to be made
to the playback experience, at the cost of a feature I preferred.
Resolves#44.
Split screen layouts in android are completely borked. You can
resize Auxio down to the point where the UI is completely
unusable, and there is NO WAY TO SET A MINIMUM HEIGHT. This is
also not to mention that smallestScreenWidthDp is completely
busted too and still uses the size of the whole screen! Just
band-aid the first issue so that when the layout becomes so
small as to result in a messed up UI, just show a splash that
says that the app can't work at the specific window size.
Turns out playback controls wouldn't actually work because the view
would detach but not the actual fragment, resulting in onCreateView
never being called and the entire system falling apart. This fixes
it by just giving PlaybackLayout the viewmodel instance it needs.
I'll need to release a hotfix for this issue since this is really
easy the trigger and really hard to fix unless you know why it
occurs. Android lifecycles suck so much.
Completely refactor PlaybackBarLayout into PlaybackLayout, which now
not only handles the bar behavior but also allows for one to slide
up the bar layout into the full playback layout. This was largely
adapted from umano's AndroidSlidingUpPanel, albeit heavily minified
and mixed with the previous window inset tricks of the previous layout.
There are still some tweaks to be made, but this implementation seems
to be really good.
Upgrade to coil 2.0.0 and completely refactor the usage of coil to work
with the new library structure. This also fixes the issue where error
icons will just re-appear due to blocking calls. I had to add a fix on
my end and also use the new caching system in coil 2.0.0.
Change CompactPlaybackFragment into a View. This completely fixes the
issue I tried to band-aid in ae39054. The code is a bit uglier, but
that's tolerable.
Move the main loading response code to MainFragment and add a new
method for other objects to be notified of the progress of the
music loading process. There's probably a better way to do this,
but kotlin coroutines are so complex that I don't know where I
would start. This also adds some enhancements, such as the error
message now showing in more parts of the app and SearchFragment
now re-running the query if the MusicStore instance is loaded.
Make MusicLoader instantiation fully asynchronous. This implementation
changes a lot about Auxio. For one, the loading screen is now gone.
However, many parts of the app now run under the fact that MusicStore
might not be available. However, I don't think there will be too much bugs
from it. Some more changes will be made to improve this implementation.
Make playback/about UIs follow the new liftOnScroll and edge-to-edge
idioms. This finally allows me to collapse a lot of duplicate code
into MainActivity and in general reduce code mess.
Once again fix annoying issues that arise from the quirks of phone
landscape mode. A lot of these fixes can be re-rolled back into the
edge-to-edge code eventually, but it requires fitsSystemWindows to
be phased out entirely.
Do the final utility refactor, placing custom views into a .ui
submodule and the general utils into a new .util module. This
system seems to stick well.
Add a nice elevation effect to queue dragging operations. This has no
purpose outside of looking nicer. Luckily it doesn't effect queue
behavior at all.
Merge LibraryFragment, SongsFragment, and others into a new fragment
called HomeFragment. This is the beginning of the Auxio UI overhaul.
This has caused some regressions here and there, but these will be
rectified over time.
Fix a plethora of style issues that lead to a worse touch experience.
I tried to optimize these solutions so that they didn't reduce the layout
density too much. More updates may have to be made in the future.
Move the AndroidUtils file into the root Auxio directory, renaming it
to AuxioUtils as well. This also changes some methods to be extension
methods instead of argument functions.
Actually bother to add license boilerplate. Even though I've written
the entirety of Auxio, the boilerplate will be under "Auxio Project"
instead, as I don't want to share my real name.
Use viewLifecycleOwner for all fragments that rely on databinding. This
should solve some possible memory leaks, as viewLifecycleOwner is tied
to the lifecycle of the fragment views instead of the fragments them
selves.
Yet another dependency upgrade churn:
Android Plugin -> 4.2.2
Material -> 1.4.0
Androidx Core -> 1.6.0
Apparently material deprecated a bunch of BottomNavigationView's stuff
for no good reason. Okay.
Instead of using @color/background directly, use ?attr/colorSurface
so that changes can be made to the theming easier. This also
resolves some more minor issues regarding certain widget's
backgrounds.
Remove the fixAnimInfoLeak hack since it seems that issue was fixed in the new android plugin, and once again modify with the styles to get the dialogs to use the correct style again.
Another day another magic flag I need to fiddle with to get this busted android app working. This platform sucks so much.