From bf56a50b59c5619508542a9c8e5ca39dd9b90004 Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Fri, 30 Dec 2022 19:26:09 -0700 Subject: [PATCH] all: refactor associating class naming Standardize from/new companion method usage, Callback/Listener usage, and companion object visibility across the app. --- .../java/org/oxycblt/auxio/MainActivity.kt | 12 +---- .../auxio/detail/DetailAppBarLayout.kt | 5 +- .../oxycblt/auxio/detail/DetailViewModel.kt | 2 +- .../detail/recycler/AlbumDetailAdapter.kt | 22 ++++---- .../detail/recycler/ArtistDetailAdapter.kt | 22 ++++---- .../auxio/detail/recycler/DetailAdapter.kt | 10 ++-- .../detail/recycler/GenreDetailAdapter.kt | 12 ++--- .../org/oxycblt/auxio/home/HomeFragment.kt | 10 ++-- .../org/oxycblt/auxio/home/HomeViewModel.kt | 2 +- .../home/fastscroll/FastScrollPopupView.kt | 4 +- .../home/fastscroll/FastScrollRecyclerView.kt | 4 +- .../auxio/home/list/AlbumListFragment.kt | 2 +- .../auxio/home/list/ArtistListFragment.kt | 2 +- .../auxio/home/list/GenreListFragment.kt | 2 +- .../auxio/home/list/SongListFragment.kt | 2 +- .../org/oxycblt/auxio/home/tabs/TabAdapter.kt | 10 ++-- .../auxio/home/tabs/TabCustomizeDialog.kt | 4 +- .../list/recycler/PlayingIndicatorAdapter.kt | 4 +- .../recycler/SelectionIndicatorAdapter.kt | 4 +- .../auxio/list/recycler/ViewHolders.kt | 22 ++++---- .../list/selection/SelectionViewModel.kt | 2 +- .../main/java/org/oxycblt/auxio/music/Date.kt | 16 ++++-- .../java/org/oxycblt/auxio/music/Music.kt | 4 +- .../org/oxycblt/auxio/music/MusicStore.kt | 32 +++++------ .../org/oxycblt/auxio/music/MusicViewModel.kt | 2 +- .../music/extractor/MediaStoreExtractor.kt | 8 +-- .../music/extractor/MetadataExtractor.kt | 4 +- .../auxio/music/extractor/SeparatorsDialog.kt | 14 ++--- .../auxio/music/picker/ArtistChoiceAdapter.kt | 6 +-- .../auxio/music/picker/GenreChoiceAdapter.kt | 6 +-- .../auxio/music/picker/PickerViewModel.kt | 2 +- .../auxio/music/storage/DirectoryAdapter.kt | 6 +-- .../auxio/music/storage/MusicDirsDialog.kt | 2 +- .../org/oxycblt/auxio/music/system/Indexer.kt | 44 +++++++-------- .../auxio/music/system/IndexerService.kt | 8 +-- .../auxio/playback/PlaybackPanelFragment.kt | 1 - .../auxio/playback/PlaybackViewModel.kt | 2 +- .../auxio/playback/queue/QueueAdapter.kt | 10 ++-- .../auxio/playback/queue/QueueFragment.kt | 3 +- .../auxio/playback/queue/QueueViewModel.kt | 2 +- .../replaygain/ReplayGainAudioProcessor.kt | 13 +++-- .../auxio/playback/state/InternalPlayer.kt | 5 +- .../playback/state/PlaybackStateManager.kt | 54 +++++++++---------- .../playback/system/MediaSessionComponent.kt | 14 ++--- .../playback/system/NotificationComponent.kt | 4 +- .../auxio/playback/system/PlaybackService.kt | 8 +-- .../org/oxycblt/auxio/search/SearchAdapter.kt | 14 ++--- .../oxycblt/auxio/search/SearchViewModel.kt | 6 +-- .../oxycblt/auxio/settings/AboutFragment.kt | 10 ++-- .../org/oxycblt/auxio/settings/Settings.kt | 12 ++--- .../auxio/settings/prefs/IntListPreference.kt | 4 +- .../settings/prefs/IntListPreferenceDialog.kt | 7 ++- .../settings/prefs/PreferenceFragment.kt | 2 +- .../org/oxycblt/auxio/ui/AuxioAppBarLayout.kt | 4 +- .../oxycblt/auxio/ui/accent/AccentAdapter.kt | 12 +++-- .../auxio/ui/accent/AccentCustomizeDialog.kt | 4 +- .../oxycblt/auxio/widgets/WidgetComponent.kt | 2 +- 57 files changed, 253 insertions(+), 253 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt index f33f9d2b1..25d40c62c 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt @@ -42,20 +42,12 @@ import org.oxycblt.auxio.util.systemBarInsetsCompat * * TODO: Custom language support * - * TODO: Add multi-select - * * TODO: Use proper material attributes (Not the weird dimen attributes I currently have) * * TODO: Migrate to material animation system * * TODO: Unit testing * - * TODO: Standardize from/new usage - * - * TODO: Standardize companion object usage - * - * TODO: Standardize callback/listener naming. - * * @author Alexander Capehart (OxygenCobalt) */ class MainActivity : AppCompatActivity() { @@ -146,7 +138,7 @@ class MainActivity : AppCompatActivity() { return true } - companion object { - private const val KEY_INTENT_USED = BuildConfig.APPLICATION_ID + ".key.FILE_INTENT_USED" + private companion object { + const val KEY_INTENT_USED = BuildConfig.APPLICATION_ID + ".key.FILE_INTENT_USED" } } diff --git a/app/src/main/java/org/oxycblt/auxio/detail/DetailAppBarLayout.kt b/app/src/main/java/org/oxycblt/auxio/detail/DetailAppBarLayout.kt index 8e4a4ed6d..c523bb5a9 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/DetailAppBarLayout.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailAppBarLayout.kt @@ -166,8 +166,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr } } - companion object { - private val TOOLBAR_TITLE_TEXT_FIELD: Field by - lazyReflectedField(Toolbar::class, "mTitleTextView") + private companion object { + val TOOLBAR_TITLE_TEXT_FIELD: Field by lazyReflectedField(Toolbar::class, "mTitleTextView") } } diff --git a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt index f350fcba1..f29a4999e 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt @@ -51,7 +51,7 @@ import org.oxycblt.auxio.util.* * @author Alexander Capehart (OxygenCobalt) */ class DetailViewModel(application: Application) : - AndroidViewModel(application), MusicStore.Callback { + AndroidViewModel(application), MusicStore.Listener { private val musicStore = MusicStore.getInstance() private val settings = Settings(application) diff --git a/app/src/main/java/org/oxycblt/auxio/detail/recycler/AlbumDetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/recycler/AlbumDetailAdapter.kt index a61135a61..769db5c4f 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/recycler/AlbumDetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/recycler/AlbumDetailAdapter.kt @@ -67,9 +67,9 @@ class AlbumDetailAdapter(private val listener: Listener) : DetailAdapter(listene override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = when (viewType) { - AlbumDetailViewHolder.VIEW_TYPE -> AlbumDetailViewHolder.new(parent) - DiscHeaderViewHolder.VIEW_TYPE -> DiscHeaderViewHolder.new(parent) - AlbumSongViewHolder.VIEW_TYPE -> AlbumSongViewHolder.new(parent) + AlbumDetailViewHolder.VIEW_TYPE -> AlbumDetailViewHolder.from(parent) + DiscHeaderViewHolder.VIEW_TYPE -> DiscHeaderViewHolder.from(parent) + AlbumSongViewHolder.VIEW_TYPE -> AlbumSongViewHolder.from(parent) else -> super.onCreateViewHolder(parent, viewType) } @@ -88,9 +88,9 @@ class AlbumDetailAdapter(private val listener: Listener) : DetailAdapter(listene return super.isItemFullWidth(position) || item is Album || item is DiscHeader } - companion object { + private companion object { /** A comparator that can be used with DiffUtil. */ - private val DIFF_CALLBACK = + val DIFF_CALLBACK = object : SimpleItemCallback() { override fun areContentsTheSame(oldItem: Item, newItem: Item): Boolean { return when { @@ -110,7 +110,7 @@ class AlbumDetailAdapter(private val listener: Listener) : DetailAdapter(listene } /** - * A [RecyclerView.ViewHolder] that displays the [Album] header in the detail view. Use [new] to + * A [RecyclerView.ViewHolder] that displays the [Album] header in the detail view. Use [from] to * create an instance. * @author Alexander Capehart (OxygenCobalt) */ @@ -161,7 +161,7 @@ private class AlbumDetailViewHolder private constructor(private val binding: Ite * @param parent The parent to inflate this instance from. * @return A new instance. */ - fun new(parent: View) = + fun from(parent: View) = AlbumDetailViewHolder(ItemDetailBinding.inflate(parent.context.inflater)) /** A comparator that can be used with DiffUtil. */ @@ -180,7 +180,7 @@ private class AlbumDetailViewHolder private constructor(private val binding: Ite /** * A [RecyclerView.ViewHolder] that displays a [DiscHeader] to delimit different disc groups. Use - * [new] to create an instance. + * [from] to create an instance. * @author Alexander Capehart (OxygenCobalt) */ private class DiscHeaderViewHolder(private val binding: ItemDiscHeaderBinding) : @@ -202,7 +202,7 @@ private class DiscHeaderViewHolder(private val binding: ItemDiscHeaderBinding) : * @param parent The parent to inflate this instance from. * @return A new instance. */ - fun new(parent: View) = + fun from(parent: View) = DiscHeaderViewHolder(ItemDiscHeaderBinding.inflate(parent.context.inflater)) /** A comparator that can be used with DiffUtil. */ @@ -215,7 +215,7 @@ private class DiscHeaderViewHolder(private val binding: ItemDiscHeaderBinding) : } /** - * A [RecyclerView.ViewHolder] that displays a [Song] in the context of an [Album]. Use [new] to + * A [RecyclerView.ViewHolder] that displays a [Song] in the context of an [Album]. Use [from] to * create an instance. * @author Alexander Capehart (OxygenCobalt) */ @@ -269,7 +269,7 @@ private class AlbumSongViewHolder private constructor(private val binding: ItemA * @param parent The parent to inflate this instance from. * @return A new instance. */ - fun new(parent: View) = + fun from(parent: View) = AlbumSongViewHolder(ItemAlbumSongBinding.inflate(parent.context.inflater)) /** A comparator that can be used with DiffUtil. */ diff --git a/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt index f8c213852..d9ab4fbe8 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt @@ -54,9 +54,9 @@ class ArtistDetailAdapter(private val listener: Listener) : DetailAdapter(listen override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = when (viewType) { - ArtistDetailViewHolder.VIEW_TYPE -> ArtistDetailViewHolder.new(parent) - ArtistAlbumViewHolder.VIEW_TYPE -> ArtistAlbumViewHolder.new(parent) - ArtistSongViewHolder.VIEW_TYPE -> ArtistSongViewHolder.new(parent) + ArtistDetailViewHolder.VIEW_TYPE -> ArtistDetailViewHolder.from(parent) + ArtistAlbumViewHolder.VIEW_TYPE -> ArtistAlbumViewHolder.from(parent) + ArtistSongViewHolder.VIEW_TYPE -> ArtistSongViewHolder.from(parent) else -> super.onCreateViewHolder(parent, viewType) } @@ -76,9 +76,9 @@ class ArtistDetailAdapter(private val listener: Listener) : DetailAdapter(listen return super.isItemFullWidth(position) || item is Artist } - companion object { + private companion object { /** A comparator that can be used with DiffUtil. */ - private val DIFF_CALLBACK = + val DIFF_CALLBACK = object : SimpleItemCallback() { override fun areContentsTheSame(oldItem: Item, newItem: Item): Boolean { return when { @@ -97,7 +97,7 @@ class ArtistDetailAdapter(private val listener: Listener) : DetailAdapter(listen } /** - * A [RecyclerView.ViewHolder] that displays the [Artist] header in the detail view. Use [new] to + * A [RecyclerView.ViewHolder] that displays the [Artist] header in the detail view. Use [from] to * create an instance. * @author Alexander Capehart (OxygenCobalt) */ @@ -156,7 +156,7 @@ private class ArtistDetailViewHolder private constructor(private val binding: It * @param parent The parent to inflate this instance from. * @return A new instance. */ - fun new(parent: View) = + fun from(parent: View) = ArtistDetailViewHolder(ItemDetailBinding.inflate(parent.context.inflater)) /** A comparator that can be used with DiffUtil. */ @@ -172,7 +172,7 @@ private class ArtistDetailViewHolder private constructor(private val binding: It } /** - * A [RecyclerView.ViewHolder] that displays an [Album] in the context of an [Artist]. Use [new] to + * A [RecyclerView.ViewHolder] that displays an [Album] in the context of an [Artist]. Use [from] to * create an instance. * @author Alexander Capehart (OxygenCobalt) */ @@ -211,7 +211,7 @@ private class ArtistAlbumViewHolder private constructor(private val binding: Ite * @param parent The parent to inflate this instance from. * @return A new instance. */ - fun new(parent: View) = + fun from(parent: View) = ArtistAlbumViewHolder(ItemParentBinding.inflate(parent.context.inflater)) /** A comparator that can be used with DiffUtil. */ @@ -224,7 +224,7 @@ private class ArtistAlbumViewHolder private constructor(private val binding: Ite } /** - * A [RecyclerView.ViewHolder] that displays a [Song] in the context of an [Artist]. Use [new] to + * A [RecyclerView.ViewHolder] that displays a [Song] in the context of an [Artist]. Use [from] to * create an instance. * @author Alexander Capehart (OxygenCobalt) */ @@ -260,7 +260,7 @@ private class ArtistSongViewHolder private constructor(private val binding: Item * @param parent The parent to inflate this instance from. * @return A new instance. */ - fun new(parent: View) = + fun from(parent: View) = ArtistSongViewHolder(ItemSongBinding.inflate(parent.context.inflater)) /** A comparator that can be used with DiffUtil. */ diff --git a/app/src/main/java/org/oxycblt/auxio/detail/recycler/DetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/recycler/DetailAdapter.kt index dcb21b67a..8775f4b9b 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/recycler/DetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/recycler/DetailAdapter.kt @@ -57,8 +57,8 @@ abstract class DetailAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = when (viewType) { - HeaderViewHolder.VIEW_TYPE -> HeaderViewHolder.new(parent) - SortHeaderViewHolder.VIEW_TYPE -> SortHeaderViewHolder.new(parent) + HeaderViewHolder.VIEW_TYPE -> HeaderViewHolder.from(parent) + SortHeaderViewHolder.VIEW_TYPE -> SortHeaderViewHolder.from(parent) else -> error("Invalid item type $viewType") } @@ -109,7 +109,7 @@ abstract class DetailAdapter( fun onOpenSortMenu(anchor: View) } - companion object { + protected companion object { /** A comparator that can be used with DiffUtil. */ val DIFF_CALLBACK = object : SimpleItemCallback() { @@ -128,7 +128,7 @@ abstract class DetailAdapter( /** * A [RecyclerView.ViewHolder] that displays a [SortHeader], a variation on [Header] that adds a - * button opening a menu for sorting. Use [new] to create an instance. + * button opening a menu for sorting. Use [from] to create an instance. * @author Alexander Capehart (OxygenCobalt) */ private class SortHeaderViewHolder(private val binding: ItemSortHeaderBinding) : @@ -157,7 +157,7 @@ private class SortHeaderViewHolder(private val binding: ItemSortHeaderBinding) : * @param parent The parent to inflate this instance from. * @return A new instance. */ - fun new(parent: View) = + fun from(parent: View) = SortHeaderViewHolder(ItemSortHeaderBinding.inflate(parent.context.inflater)) /** A comparator that can be used with DiffUtil. */ diff --git a/app/src/main/java/org/oxycblt/auxio/detail/recycler/GenreDetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/recycler/GenreDetailAdapter.kt index 6d6326dc7..fad27aa8a 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/recycler/GenreDetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/recycler/GenreDetailAdapter.kt @@ -54,9 +54,9 @@ class GenreDetailAdapter(private val listener: Listener) : DetailAdapter(listene override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = when (viewType) { - GenreDetailViewHolder.VIEW_TYPE -> GenreDetailViewHolder.new(parent) - ArtistViewHolder.VIEW_TYPE -> ArtistViewHolder.new(parent) - SongViewHolder.VIEW_TYPE -> SongViewHolder.new(parent) + GenreDetailViewHolder.VIEW_TYPE -> GenreDetailViewHolder.from(parent) + ArtistViewHolder.VIEW_TYPE -> ArtistViewHolder.from(parent) + SongViewHolder.VIEW_TYPE -> SongViewHolder.from(parent) else -> super.onCreateViewHolder(parent, viewType) } @@ -75,7 +75,7 @@ class GenreDetailAdapter(private val listener: Listener) : DetailAdapter(listene return super.isItemFullWidth(position) || item is Genre } - companion object { + private companion object { val DIFF_CALLBACK = object : SimpleItemCallback() { override fun areContentsTheSame(oldItem: Item, newItem: Item): Boolean { @@ -94,7 +94,7 @@ class GenreDetailAdapter(private val listener: Listener) : DetailAdapter(listene } /** - * A [RecyclerView.ViewHolder] that displays the [Genre] header in the detail view. Use [new] to + * A [RecyclerView.ViewHolder] that displays the [Genre] header in the detail view. Use [from] to * create an instance. * @author Alexander Capehart (OxygenCobalt) */ @@ -130,7 +130,7 @@ private class GenreDetailViewHolder private constructor(private val binding: Ite * @param parent The parent to inflate this instance from. * @return A new instance. */ - fun new(parent: View) = + fun from(parent: View) = GenreDetailViewHolder(ItemDetailBinding.inflate(parent.context.inflater)) /** A comparator that can be used with DiffUtil. */ diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt index 7c9ace57b..64a5b2696 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt @@ -493,12 +493,10 @@ class HomeFragment : } } - companion object { - private val VP_RECYCLER_FIELD: Field by - lazyReflectedField(ViewPager2::class, "mRecyclerView") - private val RV_TOUCH_SLOP_FIELD: Field by - lazyReflectedField(RecyclerView::class, "mTouchSlop") - private const val KEY_LAST_TRANSITION_AXIS = + private companion object { + val VP_RECYCLER_FIELD: Field by lazyReflectedField(ViewPager2::class, "mRecyclerView") + val RV_TOUCH_SLOP_FIELD: Field by lazyReflectedField(RecyclerView::class, "mTouchSlop") + const val KEY_LAST_TRANSITION_AXIS = BuildConfig.APPLICATION_ID + ".key.LAST_TRANSITION_AXIS" } } diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt index d6be75fd4..157736366 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt @@ -39,7 +39,7 @@ import org.oxycblt.auxio.util.logD * @author Alexander Capehart (OxygenCobalt) */ class HomeViewModel(application: Application) : - AndroidViewModel(application), Settings.Callback, MusicStore.Callback { + AndroidViewModel(application), Settings.Listener, MusicStore.Listener { private val musicStore = MusicStore.getInstance() private val settings = Settings(application, this) diff --git a/app/src/main/java/org/oxycblt/auxio/home/fastscroll/FastScrollPopupView.kt b/app/src/main/java/org/oxycblt/auxio/home/fastscroll/FastScrollPopupView.kt index ba1de4483..da7cd4554 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/fastscroll/FastScrollPopupView.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/fastscroll/FastScrollPopupView.kt @@ -169,8 +169,8 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyleRes: Int = 0) } } - companion object { + private companion object { // Pre-calculate sqrt(2) - private const val SQRT2 = 1.4142135f + const val SQRT2 = 1.4142135f } } diff --git a/app/src/main/java/org/oxycblt/auxio/home/fastscroll/FastScrollRecyclerView.kt b/app/src/main/java/org/oxycblt/auxio/home/fastscroll/FastScrollRecyclerView.kt index 4add92475..48fc32617 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/fastscroll/FastScrollRecyclerView.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/fastscroll/FastScrollRecyclerView.kt @@ -524,7 +524,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr else -> 0 } - companion object { - private const val AUTO_HIDE_SCROLLBAR_DELAY_MILLIS = 1500 + private companion object { + const val AUTO_HIDE_SCROLLBAR_DELAY_MILLIS = 1500 } } diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt index 01d2637fa..ad91fdade 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt @@ -152,7 +152,7 @@ class AlbumListFragment : get() = differ.currentList override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = - AlbumViewHolder.new(parent) + AlbumViewHolder.from(parent) override fun onBindViewHolder(holder: AlbumViewHolder, position: Int) { holder.bind(differ.currentList[position], listener) diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt index 29fecfd17..2dd51edf6 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt @@ -127,7 +127,7 @@ class ArtistListFragment : get() = differ.currentList override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = - ArtistViewHolder.new(parent) + ArtistViewHolder.from(parent) override fun onBindViewHolder(holder: ArtistViewHolder, position: Int) { holder.bind(differ.currentList[position], listener) diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt index 1019a85eb..fa3484d90 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt @@ -126,7 +126,7 @@ class GenreListFragment : get() = differ.currentList override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = - GenreViewHolder.new(parent) + GenreViewHolder.from(parent) override fun onBindViewHolder(holder: GenreViewHolder, position: Int) { holder.bind(differ.currentList[position], listener) diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt index 1a2cc40c0..0b85bcb5f 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt @@ -166,7 +166,7 @@ class SongListFragment : get() = differ.currentList override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = - SongViewHolder.new(parent) + SongViewHolder.from(parent) override fun onBindViewHolder(holder: SongViewHolder, position: Int) { holder.bind(differ.currentList[position], listener) diff --git a/app/src/main/java/org/oxycblt/auxio/home/tabs/TabAdapter.kt b/app/src/main/java/org/oxycblt/auxio/home/tabs/TabAdapter.kt index 10a459d5c..18025e3b1 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/tabs/TabAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/tabs/TabAdapter.kt @@ -38,7 +38,7 @@ class TabAdapter(private val listener: Listener) : RecyclerView.Adapter(), TabAd touchHelper.startDrag(viewHolder) } - companion object { - private const val KEY_TABS = BuildConfig.APPLICATION_ID + ".key.PENDING_TABS" + private companion object { + const val KEY_TABS = BuildConfig.APPLICATION_ID + ".key.PENDING_TABS" } } diff --git a/app/src/main/java/org/oxycblt/auxio/list/recycler/PlayingIndicatorAdapter.kt b/app/src/main/java/org/oxycblt/auxio/list/recycler/PlayingIndicatorAdapter.kt index 17b016575..ceb1fbf0b 100644 --- a/app/src/main/java/org/oxycblt/auxio/list/recycler/PlayingIndicatorAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/list/recycler/PlayingIndicatorAdapter.kt @@ -115,7 +115,7 @@ abstract class PlayingIndicatorAdapter : RecyclerV abstract fun updatePlayingIndicator(isActive: Boolean, isPlaying: Boolean) } - companion object { - private val PAYLOAD_PLAYING_INDICATOR_CHANGED = Any() + private companion object { + val PAYLOAD_PLAYING_INDICATOR_CHANGED = Any() } } diff --git a/app/src/main/java/org/oxycblt/auxio/list/recycler/SelectionIndicatorAdapter.kt b/app/src/main/java/org/oxycblt/auxio/list/recycler/SelectionIndicatorAdapter.kt index 29ecc2582..64036c7cd 100644 --- a/app/src/main/java/org/oxycblt/auxio/list/recycler/SelectionIndicatorAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/list/recycler/SelectionIndicatorAdapter.kt @@ -77,7 +77,7 @@ abstract class SelectionIndicatorAdapter : abstract fun updateSelectionIndicator(isSelected: Boolean) } - companion object { - private val PAYLOAD_SELECTION_INDICATOR_CHANGED = Any() + private companion object { + val PAYLOAD_SELECTION_INDICATOR_CHANGED = Any() } } diff --git a/app/src/main/java/org/oxycblt/auxio/list/recycler/ViewHolders.kt b/app/src/main/java/org/oxycblt/auxio/list/recycler/ViewHolders.kt index 9f3d07805..f8fa090b8 100644 --- a/app/src/main/java/org/oxycblt/auxio/list/recycler/ViewHolders.kt +++ b/app/src/main/java/org/oxycblt/auxio/list/recycler/ViewHolders.kt @@ -35,7 +35,7 @@ import org.oxycblt.auxio.util.getPlural import org.oxycblt.auxio.util.inflater /** - * A [RecyclerView.ViewHolder] that displays a [Song]. Use [new] to create an instance. + * A [RecyclerView.ViewHolder] that displays a [Song]. Use [from] to create an instance. * @author Alexander Capehart (OxygenCobalt) */ class SongViewHolder private constructor(private val binding: ItemSongBinding) : @@ -70,7 +70,7 @@ class SongViewHolder private constructor(private val binding: ItemSongBinding) : * @param parent The parent to inflate this instance from. * @return A new instance. */ - fun new(parent: View) = SongViewHolder(ItemSongBinding.inflate(parent.context.inflater)) + fun from(parent: View) = SongViewHolder(ItemSongBinding.inflate(parent.context.inflater)) /** A comparator that can be used with DiffUtil. */ val DIFF_CALLBACK = @@ -82,7 +82,7 @@ class SongViewHolder private constructor(private val binding: ItemSongBinding) : } /** - * A [RecyclerView.ViewHolder] that displays a [Album]. Use [new] to create an instance. + * A [RecyclerView.ViewHolder] that displays a [Album]. Use [from] to create an instance. * @author Alexander Capehart (OxygenCobalt) */ class AlbumViewHolder private constructor(private val binding: ItemParentBinding) : @@ -117,7 +117,7 @@ class AlbumViewHolder private constructor(private val binding: ItemParentBinding * @param parent The parent to inflate this instance from. * @return A new instance. */ - fun new(parent: View) = AlbumViewHolder(ItemParentBinding.inflate(parent.context.inflater)) + fun from(parent: View) = AlbumViewHolder(ItemParentBinding.inflate(parent.context.inflater)) /** A comparator that can be used with DiffUtil. */ val DIFF_CALLBACK = @@ -131,7 +131,7 @@ class AlbumViewHolder private constructor(private val binding: ItemParentBinding } /** - * A [RecyclerView.ViewHolder] that displays a [Artist]. Use [new] to create an instance. + * A [RecyclerView.ViewHolder] that displays a [Artist]. Use [from] to create an instance. * @author Alexander Capehart (OxygenCobalt) */ class ArtistViewHolder private constructor(private val binding: ItemParentBinding) : @@ -175,7 +175,8 @@ class ArtistViewHolder private constructor(private val binding: ItemParentBindin * @param parent The parent to inflate this instance from. * @return A new instance. */ - fun new(parent: View) = ArtistViewHolder(ItemParentBinding.inflate(parent.context.inflater)) + fun from(parent: View) = + ArtistViewHolder(ItemParentBinding.inflate(parent.context.inflater)) /** A comparator that can be used with DiffUtil. */ val DIFF_CALLBACK = @@ -189,7 +190,7 @@ class ArtistViewHolder private constructor(private val binding: ItemParentBindin } /** - * A [RecyclerView.ViewHolder] that displays a [Genre]. Use [new] to create an instance. + * A [RecyclerView.ViewHolder] that displays a [Genre]. Use [from] to create an instance. * @author Alexander Capehart (OxygenCobalt) */ class GenreViewHolder private constructor(private val binding: ItemParentBinding) : @@ -228,7 +229,7 @@ class GenreViewHolder private constructor(private val binding: ItemParentBinding * @param parent The parent to inflate this instance from. * @return A new instance. */ - fun new(parent: View) = GenreViewHolder(ItemParentBinding.inflate(parent.context.inflater)) + fun from(parent: View) = GenreViewHolder(ItemParentBinding.inflate(parent.context.inflater)) /** A comparator that can be used with DiffUtil. */ val DIFF_CALLBACK = @@ -240,7 +241,7 @@ class GenreViewHolder private constructor(private val binding: ItemParentBinding } /** - * A [RecyclerView.ViewHolder] that displays a [Header]. Use [new] to create an instance. + * A [RecyclerView.ViewHolder] that displays a [Header]. Use [from] to create an instance. * @author Alexander Capehart (OxygenCobalt) */ class HeaderViewHolder private constructor(private val binding: ItemHeaderBinding) : @@ -262,7 +263,8 @@ class HeaderViewHolder private constructor(private val binding: ItemHeaderBindin * @param parent The parent to inflate this instance from. * @return A new instance. */ - fun new(parent: View) = HeaderViewHolder(ItemHeaderBinding.inflate(parent.context.inflater)) + fun from(parent: View) = + HeaderViewHolder(ItemHeaderBinding.inflate(parent.context.inflater)) /** A comparator that can be used with DiffUtil. */ val DIFF_CALLBACK = diff --git a/app/src/main/java/org/oxycblt/auxio/list/selection/SelectionViewModel.kt b/app/src/main/java/org/oxycblt/auxio/list/selection/SelectionViewModel.kt index ae6b0bb60..efc654077 100644 --- a/app/src/main/java/org/oxycblt/auxio/list/selection/SelectionViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/list/selection/SelectionViewModel.kt @@ -26,7 +26,7 @@ import org.oxycblt.auxio.music.* * A [ViewModel] that manages the current selection. * @author Alexander Capehart (OxygenCobalt) */ -class SelectionViewModel : ViewModel(), MusicStore.Callback { +class SelectionViewModel : ViewModel(), MusicStore.Listener { private val musicStore = MusicStore.getInstance() private val _selected = MutableStateFlow(listOf()) diff --git a/app/src/main/java/org/oxycblt/auxio/music/Date.kt b/app/src/main/java/org/oxycblt/auxio/music/Date.kt index 11a2378bd..510eebb84 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/Date.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/Date.kt @@ -29,7 +29,8 @@ import org.oxycblt.auxio.util.nonZeroOrNull * An ISO-8601/RFC 3339 Date. * * This class only encodes the timestamp spec and it's conversion to a human-readable date, without - * any other time management or validation. In general, this should only be used for display. + * any other time management or validation. In general, this should only be used for display. Use + * [from] to create an instance. * * @author Alexander Capehart (OxygenCobalt) */ @@ -112,12 +113,17 @@ class Date private constructor(private val tokens: List) : Comparable /** * A range of [Date]s. This is used in contexts where the [Date] of an item is derived from - * several sub-items and thus can have a "range" of release dates. - * @param min The earliest [Date] in the range. - * @param max The latest [Date] in the range. May be the same as [min]. + * several sub-items and thus can have a "range" of release dates. Use [from] to create an + * instance. * @author Alexander Capehart */ - class Range private constructor(val min: Date, val max: Date) : Comparable { + class Range + private constructor( + /** The earliest [Date] in the range. */ + val min: Date, + /** the latest [Date] in the range. May be the same as [min]. ] */ + val max: Date + ) : Comparable { /** * Resolve this instance into a human-readable date range. diff --git a/app/src/main/java/org/oxycblt/auxio/music/Music.kt b/app/src/main/java/org/oxycblt/auxio/music/Music.kt index 8d86c5c78..50ad6b6d8 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/Music.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/Music.kt @@ -280,9 +280,9 @@ sealed class Music : Item { } } - companion object { + private companion object { /** Cached collator instance re-used with [makeCollationKeyImpl]. */ - private val COLLATOR = Collator.getInstance().apply { strength = Collator.PRIMARY } + val COLLATOR = Collator.getInstance().apply { strength = Collator.PRIMARY } } } diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt index 185cbb6ad..df3fad818 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt @@ -33,42 +33,42 @@ import org.oxycblt.auxio.music.storage.useQuery * @author Alexander Capehart (OxygenCobalt) */ class MusicStore private constructor() { - private val callbacks = mutableListOf() + private val listeners = mutableListOf() /** * The current [Library]. May be null if a [Library] has not been successfully loaded yet. This * can change, so it's highly recommended to not access this directly and instead rely on - * [Callback]. + * [Listener]. */ var library: Library? = null set(value) { field = value - for (callback in callbacks) { + for (callback in listeners) { callback.onLibraryChanged(library) } } /** - * Add a [Callback] to this instance. This can be used to receive changes in the music library. - * Will invoke all [Callback] methods to initialize the instance with the current state. - * @param callback The [Callback] to add. - * @see Callback + * Add a [Listener] to this instance. This can be used to receive changes in the music library. + * Will invoke all [Listener] methods to initialize the instance with the current state. + * @param listener The [Listener] to add. + * @see Listener */ @Synchronized - fun addCallback(callback: Callback) { - callback.onLibraryChanged(library) - callbacks.add(callback) + fun addCallback(listener: Listener) { + listener.onLibraryChanged(library) + listeners.add(listener) } /** - * Remove a [Callback] from this instance, preventing it from recieving any further updates. - * @param callback The [Callback] to remove. Does nothing if the [Callback] was never added in + * Remove a [Listener] from this instance, preventing it from recieving any further updates. + * @param listener The [Listener] to remove. Does nothing if the [Listener] was never added in * the first place. - * @see Callback + * @see Listener */ @Synchronized - fun removeCallback(callback: Callback) { - callbacks.remove(callback) + fun removeCallback(listener: Listener) { + listeners.remove(listener) } /** @@ -167,7 +167,7 @@ class MusicStore private constructor() { } /** A listener for changes in the music library. */ - interface Callback { + interface Listener { /** * Called when the current [Library] has changed. * @param library The new [Library], or null if no [Library] has been loaded yet. diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt index c115d080b..117495e7d 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt @@ -26,7 +26,7 @@ import org.oxycblt.auxio.music.system.Indexer * A [ViewModel] providing data specific to the music loading process. * @author Alexander Capehart (OxygenCobalt) */ -class MusicViewModel : ViewModel(), Indexer.Callback { +class MusicViewModel : ViewModel(), Indexer.Listener { private val indexer = Indexer.getInstance() private val _indexerState = MutableStateFlow(null) diff --git a/app/src/main/java/org/oxycblt/auxio/music/extractor/MediaStoreExtractor.kt b/app/src/main/java/org/oxycblt/auxio/music/extractor/MediaStoreExtractor.kt index 8ec2adadd..93b9e2aa4 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/extractor/MediaStoreExtractor.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/extractor/MediaStoreExtractor.kt @@ -322,12 +322,12 @@ abstract class MediaStoreExtractor( genreNamesMap[raw.mediaStoreId]?.let { raw.genreNames = listOf(it) } } - companion object { + private companion object { /** * The base selector that works across all versions of android. Does not exclude * directories. */ - private const val BASE_SELECTOR = "NOT ${MediaStore.Audio.Media.SIZE}=0" + const val BASE_SELECTOR = "NOT ${MediaStore.Audio.Media.SIZE}=0" /** * The album artist of a song. This column has existed since at least API 21, but until API @@ -335,13 +335,13 @@ abstract class MediaStoreExtractor( * versions that Auxio supports. */ @Suppress("InlinedApi") - private const val AUDIO_COLUMN_ALBUM_ARTIST = MediaStore.Audio.AudioColumns.ALBUM_ARTIST + const val AUDIO_COLUMN_ALBUM_ARTIST = MediaStore.Audio.AudioColumns.ALBUM_ARTIST /** * The external volume. This naming has existed since API 21, but no constant existed for it * until API 29. This will work on all versions that Auxio supports. */ - @Suppress("InlinedApi") private const val VOLUME_EXTERNAL = MediaStore.VOLUME_EXTERNAL + @Suppress("InlinedApi") const val VOLUME_EXTERNAL = MediaStore.VOLUME_EXTERNAL } } diff --git a/app/src/main/java/org/oxycblt/auxio/music/extractor/MetadataExtractor.kt b/app/src/main/java/org/oxycblt/auxio/music/extractor/MetadataExtractor.kt index f50b34d59..74910c959 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/extractor/MetadataExtractor.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/extractor/MetadataExtractor.kt @@ -116,8 +116,8 @@ class MetadataExtractor( } } - companion object { - private const val TASK_CAPACITY = 8 + private companion object { + const val TASK_CAPACITY = 8 } } diff --git a/app/src/main/java/org/oxycblt/auxio/music/extractor/SeparatorsDialog.kt b/app/src/main/java/org/oxycblt/auxio/music/extractor/SeparatorsDialog.kt index 12d8eae5d..c302f8646 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/extractor/SeparatorsDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/extractor/SeparatorsDialog.kt @@ -94,13 +94,13 @@ class SeparatorsDialog : ViewBindingDialogFragment() { return separators } - companion object { - private val KEY_PENDING_SEPARATORS = BuildConfig.APPLICATION_ID + ".key.PENDING_SEPARATORS" + private companion object { + val KEY_PENDING_SEPARATORS = BuildConfig.APPLICATION_ID + ".key.PENDING_SEPARATORS" // TODO: Move these to a more "Correct" location? - private const val SEPARATOR_COMMA = ',' - private const val SEPARATOR_SEMICOLON = ';' - private const val SEPARATOR_SLASH = '/' - private const val SEPARATOR_PLUS = '+' - private const val SEPARATOR_AND = '&' + const val SEPARATOR_COMMA = ',' + const val SEPARATOR_SEMICOLON = ';' + const val SEPARATOR_SLASH = '/' + const val SEPARATOR_PLUS = '+' + const val SEPARATOR_AND = '&' } } diff --git a/app/src/main/java/org/oxycblt/auxio/music/picker/ArtistChoiceAdapter.kt b/app/src/main/java/org/oxycblt/auxio/music/picker/ArtistChoiceAdapter.kt index 89c502d04..f2bbf540d 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/picker/ArtistChoiceAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/picker/ArtistChoiceAdapter.kt @@ -39,7 +39,7 @@ class ArtistChoiceAdapter(private val listener: ClickableListListener) : override fun getItemCount() = artists.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = - ArtistChoiceViewHolder.new(parent) + ArtistChoiceViewHolder.from(parent) override fun onBindViewHolder(holder: ArtistChoiceViewHolder, position: Int) = holder.bind(artists[position], listener) @@ -58,7 +58,7 @@ class ArtistChoiceAdapter(private val listener: ClickableListListener) : /** * A [DialogRecyclerView.ViewHolder] that displays a smaller variant of a typical [Artist] item, for - * use with [ArtistChoiceAdapter]. Use [new] to create an instance. + * use with [ArtistChoiceAdapter]. Use [from] to create an instance. */ class ArtistChoiceViewHolder(private val binding: ItemPickerChoiceBinding) : DialogRecyclerView.ViewHolder(binding.root) { @@ -79,7 +79,7 @@ class ArtistChoiceViewHolder(private val binding: ItemPickerChoiceBinding) : * @param parent The parent to inflate this instance from. * @return A new instance. */ - fun new(parent: View) = + fun from(parent: View) = ArtistChoiceViewHolder(ItemPickerChoiceBinding.inflate(parent.context.inflater)) } } diff --git a/app/src/main/java/org/oxycblt/auxio/music/picker/GenreChoiceAdapter.kt b/app/src/main/java/org/oxycblt/auxio/music/picker/GenreChoiceAdapter.kt index 0d6fceae1..527c9e9d9 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/picker/GenreChoiceAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/picker/GenreChoiceAdapter.kt @@ -39,7 +39,7 @@ class GenreChoiceAdapter(private val listener: ClickableListListener) : override fun getItemCount() = genres.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = - GenreChoiceViewHolder.new(parent) + GenreChoiceViewHolder.from(parent) override fun onBindViewHolder(holder: GenreChoiceViewHolder, position: Int) = holder.bind(genres[position], listener) @@ -58,7 +58,7 @@ class GenreChoiceAdapter(private val listener: ClickableListListener) : /** * A [DialogRecyclerView.ViewHolder] that displays a smaller variant of a typical [Genre] item, for - * use with [GenreChoiceAdapter]. Use [new] to create an instance. + * use with [GenreChoiceAdapter]. Use [from] to create an instance. */ class GenreChoiceViewHolder(private val binding: ItemPickerChoiceBinding) : DialogRecyclerView.ViewHolder(binding.root) { @@ -79,7 +79,7 @@ class GenreChoiceViewHolder(private val binding: ItemPickerChoiceBinding) : * @param parent The parent to inflate this instance from. * @return A new instance. */ - fun new(parent: View) = + fun from(parent: View) = GenreChoiceViewHolder(ItemPickerChoiceBinding.inflate(parent.context.inflater)) } } diff --git a/app/src/main/java/org/oxycblt/auxio/music/picker/PickerViewModel.kt b/app/src/main/java/org/oxycblt/auxio/music/picker/PickerViewModel.kt index 31939e371..825ed4061 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/picker/PickerViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/picker/PickerViewModel.kt @@ -28,7 +28,7 @@ import org.oxycblt.auxio.util.unlikelyToBeNull * contain the music themselves and then exit if the library changes. * @author Alexander Capehart (OxygenCobalt) */ -class PickerViewModel : ViewModel(), MusicStore.Callback { +class PickerViewModel : ViewModel(), MusicStore.Listener { private val musicStore = MusicStore.getInstance() private val _currentItem = MutableStateFlow(null) diff --git a/app/src/main/java/org/oxycblt/auxio/music/storage/DirectoryAdapter.kt b/app/src/main/java/org/oxycblt/auxio/music/storage/DirectoryAdapter.kt index f0474c364..dcdedc0ef 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/storage/DirectoryAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/storage/DirectoryAdapter.kt @@ -41,7 +41,7 @@ class DirectoryAdapter(private val listener: Listener) : override fun getItemCount() = dirs.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = - MusicDirViewHolder.new(parent) + MusicDirViewHolder.from(parent) override fun onBindViewHolder(holder: MusicDirViewHolder, position: Int) = holder.bind(dirs[position], listener) @@ -86,7 +86,7 @@ class DirectoryAdapter(private val listener: Listener) : } /** - * A [RecyclerView.Recycler] that displays a [Directory]. Use [new] to create an instance. + * A [RecyclerView.Recycler] that displays a [Directory]. Use [from] to create an instance. * @author Alexander Capehart (OxygenCobalt) */ class MusicDirViewHolder private constructor(private val binding: ItemMusicDirBinding) : @@ -107,7 +107,7 @@ class MusicDirViewHolder private constructor(private val binding: ItemMusicDirBi * @param parent The parent to inflate this instance from. * @return A new instance. */ - fun new(parent: View) = + fun from(parent: View) = MusicDirViewHolder(ItemMusicDirBinding.inflate(parent.context.inflater)) } } diff --git a/app/src/main/java/org/oxycblt/auxio/music/storage/MusicDirsDialog.kt b/app/src/main/java/org/oxycblt/auxio/music/storage/MusicDirsDialog.kt index 90507e915..a0308a91e 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/storage/MusicDirsDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/storage/MusicDirsDialog.kt @@ -176,7 +176,7 @@ class MusicDirsDialog : private fun isUiModeInclude(binding: DialogMusicDirsBinding) = binding.folderModeGroup.checkedButtonId == R.id.dirs_mode_include - companion object { + private companion object { const val KEY_PENDING_DIRS = BuildConfig.APPLICATION_ID + ".key.PENDING_DIRS" const val KEY_PENDING_MODE = BuildConfig.APPLICATION_ID + ".key.SHOULD_INCLUDE" } diff --git a/app/src/main/java/org/oxycblt/auxio/music/system/Indexer.kt b/app/src/main/java/org/oxycblt/auxio/music/system/Indexer.kt index 028fee788..2e13d05d4 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/system/Indexer.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/system/Indexer.kt @@ -54,7 +54,7 @@ class Indexer private constructor() { private var lastResponse: Response? = null private var indexingState: Indexing? = null private var controller: Controller? = null - private var callback: Callback? = null + private var listener: Listener? = null /** Whether music loading is occurring or not. */ val isIndexing: Boolean @@ -71,7 +71,7 @@ class Indexer private constructor() { /** * Register a [Controller] for this instance. This instance will handle any commands to start * the music loading process. There can be only one [Controller] at a time. Will invoke all - * [Callback] methods to initialize the instance with the current state. + * [Listener] methods to initialize the instance with the current state. * @param controller The [Controller] to register. Will do nothing if already registered. */ @Synchronized @@ -105,14 +105,14 @@ class Indexer private constructor() { } /** - * Register the [Callback] for this instance. This can be used to receive rapid-fire updates to - * the current music loading state. There can be only one [Callback] at a time. Will invoke all - * [Callback] methods to initialize the instance with the current state. - * @param callback The [Callback] to add. + * Register the [Listener] for this instance. This can be used to receive rapid-fire updates to + * the current music loading state. There can be only one [Listener] at a time. Will invoke all + * [Listener] methods to initialize the instance with the current state. + * @param listener The [Listener] to add. */ @Synchronized - fun registerCallback(callback: Callback) { - if (BuildConfig.DEBUG && this.callback != null) { + fun registerCallback(listener: Listener) { + if (BuildConfig.DEBUG && this.listener != null) { logW("Listener is already registered") return } @@ -120,24 +120,24 @@ class Indexer private constructor() { // Initialize the listener with the current state. val currentState = indexingState?.let { State.Indexing(it) } ?: lastResponse?.let { State.Complete(it) } - callback.onIndexerStateChanged(currentState) - this.callback = callback + listener.onIndexerStateChanged(currentState) + this.listener = listener } /** - * Unregister a [Callback] from this instance, preventing it from recieving any further updates. - * @param callback The [Callback] to unregister. Must be the current [Callback]. Does nothing if - * invoked by another [Callback] implementation. - * @see Callback + * Unregister a [Listener] from this instance, preventing it from recieving any further updates. + * @param listener The [Listener] to unregister. Must be the current [Listener]. Does nothing if + * invoked by another [Listener] implementation. + * @see Listener */ @Synchronized - fun unregisterCallback(callback: Callback) { - if (BuildConfig.DEBUG && this.callback !== callback) { + fun unregisterCallback(listener: Listener) { + if (BuildConfig.DEBUG && this.listener !== listener) { logW("Given controller did not match current controller") return } - this.callback = null + this.listener = null } /** @@ -388,7 +388,7 @@ class Indexer private constructor() { val state = indexingState?.let { State.Indexing(it) } ?: lastResponse?.let { State.Complete(it) } controller?.onIndexerStateChanged(state) - callback?.onIndexerStateChanged(state) + listener?.onIndexerStateChanged(state) } /** @@ -411,7 +411,7 @@ class Indexer private constructor() { // Signal that the music loading process has been completed. val state = State.Complete(response) controller?.onIndexerStateChanged(state) - callback?.onIndexerStateChanged(state) + listener?.onIndexerStateChanged(state) } } } @@ -476,10 +476,10 @@ class Indexer private constructor() { * A listener for rapid-fire changes in the music loading state. * * This is only useful for code that absolutely must show the current loading process. - * Otherwise, [MusicStore.Callback] is highly recommended due to it's updates only consisting of + * Otherwise, [MusicStore.Listener] is highly recommended due to it's updates only consisting of * the [MusicStore.Library]. */ - interface Callback { + interface Listener { /** * Called when the current state of the Indexer changed. * @@ -495,7 +495,7 @@ class Indexer private constructor() { * Context that runs the music loading process. Implementations should be capable of running the * background for long periods of time without android killing the process. */ - interface Controller : Callback { + interface Controller : Listener { /** * Called when a new music loading process was requested. Implementations should forward * this to [index]. diff --git a/app/src/main/java/org/oxycblt/auxio/music/system/IndexerService.kt b/app/src/main/java/org/oxycblt/auxio/music/system/IndexerService.kt index b024890eb..35f3e7f50 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/system/IndexerService.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/system/IndexerService.kt @@ -54,7 +54,7 @@ import org.oxycblt.auxio.util.logD * * @author Alexander Capehart (OxygenCobalt) */ -class IndexerService : Service(), Indexer.Controller, Settings.Callback { +class IndexerService : Service(), Indexer.Controller, Settings.Listener { private val indexer = Indexer.getInstance() private val musicStore = MusicStore.getInstance() private val playbackManager = PlaybackStateManager.getInstance() @@ -287,8 +287,8 @@ class IndexerService : Service(), Indexer.Controller, Settings.Callback { } } - companion object { - private const val WAKELOCK_TIMEOUT_MS = 60 * 1000L - private const val REINDEX_DELAY_MS = 500L + private companion object { + const val WAKELOCK_TIMEOUT_MS = 60 * 1000L + const val REINDEX_DELAY_MS = 500L } } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt index 37bd179e7..fd9ebc425 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt @@ -127,7 +127,6 @@ class PlaybackPanelFragment : when (item.itemId) { R.id.action_open_equalizer -> { // Launch the system equalizer app, if possible. - // TODO: Move this to a utility val equalizerIntent = Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL) // Provide audio session ID so equalizer can show options for this app diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt index 42a37159b..ab12b5cd8 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt @@ -38,7 +38,7 @@ import org.oxycblt.auxio.util.context * @author Alexander Capehart (OxygenCobalt) */ class PlaybackViewModel(application: Application) : - AndroidViewModel(application), PlaybackStateManager.Callback { + AndroidViewModel(application), PlaybackStateManager.Listener { private val settings = Settings(application) private val playbackManager = PlaybackStateManager.getInstance() private var lastPositionJob: Job? = null diff --git a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt index d8d761dc5..cc2f7c3d1 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueAdapter.kt @@ -52,7 +52,7 @@ class QueueAdapter(private val listener: Listener) : RecyclerView.Adapter(), QueueAdapter. val lmm = binding.queueRecycler.layoutManager as LinearLayoutManager val start = lmm.findFirstCompletelyVisibleItemPosition() val end = lmm.findLastCompletelyVisibleItemPosition() - val notInitialized = start == RecyclerView.NO_POSITION || end == RecyclerView.NO_POSITION + val notInitialized = + start == RecyclerView.NO_POSITION || end == RecyclerView.NO_POSITION // When we scroll, we want to scroll to the almost-top so the user can see // future songs instead of past songs. The way we have to do this however is // dependent on where we have to scroll to get to the currently playing song. diff --git a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueViewModel.kt b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueViewModel.kt index 6502bef8c..f35019fde 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/queue/QueueViewModel.kt @@ -29,7 +29,7 @@ import org.oxycblt.auxio.playback.state.PlaybackStateManager * * @author Alexander Capehart (OxygenCobalt) */ -class QueueViewModel : ViewModel(), PlaybackStateManager.Callback { +class QueueViewModel : ViewModel(), PlaybackStateManager.Listener { private val playbackManager = PlaybackStateManager.getInstance() private val _queue = MutableStateFlow(listOf()) diff --git a/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGainAudioProcessor.kt b/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGainAudioProcessor.kt index f0ee563f9..6ff100fba 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGainAudioProcessor.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/replaygain/ReplayGainAudioProcessor.kt @@ -281,12 +281,11 @@ class ReplayGainAudioProcessor(context: Context) : BaseAudioProcessor() { private data class GainTag(val key: String, val value: Float) // TODO: Try to phase this out - companion object { - private const val TAG_RG_TRACK = "replaygain_track_gain" - private const val TAG_RG_ALBUM = "replaygain_album_gain" - private const val R128_TRACK = "r128_track_gain" - private const val R128_ALBUM = "r128_album_gain" - - private val REPLAY_GAIN_TAGS = arrayOf(TAG_RG_TRACK, TAG_RG_ALBUM, R128_ALBUM, R128_TRACK) + private companion object { + const val TAG_RG_TRACK = "replaygain_track_gain" + const val TAG_RG_ALBUM = "replaygain_album_gain" + const val R128_TRACK = "r128_track_gain" + const val R128_ALBUM = "r128_album_gain" + val REPLAY_GAIN_TAGS = arrayOf(TAG_RG_TRACK, TAG_RG_ALBUM, R128_ALBUM, R128_TRACK) } } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/state/InternalPlayer.kt b/app/src/main/java/org/oxycblt/auxio/playback/state/InternalPlayer.kt index b7c533b85..7c2487458 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/state/InternalPlayer.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/state/InternalPlayer.kt @@ -85,6 +85,9 @@ interface InternalPlayer { data class Open(val uri: Uri) : Action() } + /** + * A representation of the current state of audio playback. Use [from] to create an instance. + */ class State private constructor( /** Whether the player is actively playing audio or set to play audio in the future. */ @@ -157,7 +160,7 @@ interface InternalPlayer { * @param isAdvancing Whether the player is actively playing audio in this moment. * @param positionMs The current position of the player. */ - fun new(isPlaying: Boolean, isAdvancing: Boolean, positionMs: Long) = + fun from(isPlaying: Boolean, isAdvancing: Boolean, positionMs: Long) = State( isPlaying, // Minor sanity check: Make sure that advancing can't occur if already paused. diff --git a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt index f9fe57c12..18bbeea0f 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt @@ -27,7 +27,7 @@ import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.MusicStore import org.oxycblt.auxio.music.Song -import org.oxycblt.auxio.playback.state.PlaybackStateManager.Callback +import org.oxycblt.auxio.playback.state.PlaybackStateManager.Listener import org.oxycblt.auxio.settings.Settings import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logE @@ -45,7 +45,7 @@ import org.oxycblt.auxio.util.logW * - If you want to use the playback state with the ExoPlayer instance or system-side things, use * [org.oxycblt.auxio.playback.system.PlaybackService]. * - * Internal consumers should usually use [Callback], however the component that manages the player + * Internal consumers should usually use [Listener], however the component that manages the player * itself should instead use [InternalPlayer]. * * All access should be done with [PlaybackStateManager.getInstance]. @@ -54,7 +54,7 @@ import org.oxycblt.auxio.util.logW */ class PlaybackStateManager private constructor() { private val musicStore = MusicStore.getInstance() - private val callbacks = mutableListOf() + private val listeners = mutableListOf() private var internalPlayer: InternalPlayer? = null private var pendingAction: InternalPlayer.Action? = null private var isInitialized = false @@ -74,7 +74,7 @@ class PlaybackStateManager private constructor() { var index = -1 private set /** The current [InternalPlayer] state. */ - var playerState = InternalPlayer.State.new(isPlaying = false, isAdvancing = false, 0) + var playerState = InternalPlayer.State.from(isPlaying = false, isAdvancing = false, 0) private set /** The current [RepeatMode] */ var repeatMode = RepeatMode.NONE @@ -93,32 +93,32 @@ class PlaybackStateManager private constructor() { get() = internalPlayer?.audioSessionId /** - * Add a [Callback] to this instance. This can be used to receive changes in the playback state. - * Will immediately invoke [Callback] methods to initialize the instance with the current state. - * @param callback The [Callback] to add. - * @see Callback + * Add a [Listener] to this instance. This can be used to receive changes in the playback state. + * Will immediately invoke [Listener] methods to initialize the instance with the current state. + * @param listener The [Listener] to add. + * @see Listener */ @Synchronized - fun addCallback(callback: Callback) { + fun addCallback(listener: Listener) { if (isInitialized) { - callback.onNewPlayback(index, queue, parent) - callback.onRepeatChanged(repeatMode) - callback.onShuffledChanged(isShuffled) - callback.onStateChanged(playerState) + listener.onNewPlayback(index, queue, parent) + listener.onRepeatChanged(repeatMode) + listener.onShuffledChanged(isShuffled) + listener.onStateChanged(playerState) } - callbacks.add(callback) + listeners.add(listener) } /** - * Remove a [Callback] from this instance, preventing it from recieving any further updates. - * @param callback The [Callback] to remove. Does nothing if the [Callback] was never added in + * Remove a [Listener] from this instance, preventing it from recieving any further updates. + * @param listener The [Listener] to remove. Does nothing if the [Listener] was never added in * the first place. - * @see Callback + * @see Listener */ @Synchronized - fun removeCallback(callback: Callback) { - callbacks.remove(callback) + fun removeCallback(listener: Listener) { + listeners.remove(listener) } /** @@ -586,43 +586,43 @@ class PlaybackStateManager private constructor() { // --- CALLBACKS --- private fun notifyIndexMoved() { - for (callback in callbacks) { + for (callback in listeners) { callback.onIndexMoved(index) } } private fun notifyQueueChanged() { - for (callback in callbacks) { + for (callback in listeners) { callback.onQueueChanged(queue) } } private fun notifyQueueReworked() { - for (callback in callbacks) { + for (callback in listeners) { callback.onQueueReworked(index, queue) } } private fun notifyNewPlayback() { - for (callback in callbacks) { + for (callback in listeners) { callback.onNewPlayback(index, queue, parent) } } private fun notifyStateChanged() { - for (callback in callbacks) { + for (callback in listeners) { callback.onStateChanged(playerState) } } private fun notifyRepeatModeChanged() { - for (callback in callbacks) { + for (callback in listeners) { callback.onRepeatChanged(repeatMode) } } private fun notifyShuffledChanged() { - for (callback in callbacks) { + for (callback in listeners) { callback.onShuffledChanged(isShuffled) } } @@ -631,7 +631,7 @@ class PlaybackStateManager private constructor() { * The interface for receiving updates from [PlaybackStateManager]. Add the listener to * [PlaybackStateManager] using [addCallback], remove them on destruction with [removeCallback]. */ - interface Callback { + interface Listener { /** * Called when the position of the currently playing item has changed, changing the current * [Song], but no other queue attribute has changed. diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/MediaSessionComponent.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/MediaSessionComponent.kt index c3d8041f7..c34bdb628 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/MediaSessionComponent.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/MediaSessionComponent.kt @@ -43,11 +43,11 @@ import org.oxycblt.auxio.util.logD * A component that mirrors the current playback state into the [MediaSessionCompat] and * [NotificationComponent]. * @param context [Context] required to initialize components. - * @param callback [Callback] to forward notification updates to. + * @param listener [Listener] to forward notification updates to. * @author Alexander Capehart (OxygenCobalt) */ -class MediaSessionComponent(private val context: Context, private val callback: Callback) : - MediaSessionCompat.Callback(), PlaybackStateManager.Callback, Settings.Callback { +class MediaSessionComponent(private val context: Context, private val listener: Listener) : + MediaSessionCompat.Callback(), PlaybackStateManager.Listener, Settings.Listener { private val mediaSession = MediaSessionCompat(context, context.packageName).apply { isActive = true @@ -113,7 +113,7 @@ class MediaSessionComponent(private val context: Context, private val callback: invalidateSessionState() notification.updatePlaying(playbackManager.playerState.isPlaying) if (!provider.isBusy) { - callback.onPostNotification(notification) + listener.onPostNotification(notification) } } @@ -306,7 +306,7 @@ class MediaSessionComponent(private val context: Context, private val callback: val metadata = builder.build() mediaSession.setMetadata(metadata) notification.updateMetadata(metadata) - callback.onPostNotification(notification) + listener.onPostNotification(notification) } }) } @@ -393,12 +393,12 @@ class MediaSessionComponent(private val context: Context, private val callback: } if (!provider.isBusy) { - callback.onPostNotification(notification) + listener.onPostNotification(notification) } } /** An interface for handling changes in the notification configuration. */ - interface Callback { + interface Listener { /** * Called when the [NotificationComponent] changes, requiring it to be re-posed. * @param notification The new [NotificationComponent]. diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/NotificationComponent.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/NotificationComponent.kt index 823efd20f..21cb16676 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/NotificationComponent.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/NotificationComponent.kt @@ -148,9 +148,9 @@ class NotificationComponent(private val context: Context, sessionToken: MediaSes iconRes, actionName, context.newBroadcastPendingIntent(actionName)) .build() - companion object { + private companion object { /** Notification channel used by solely the playback notification. */ - private val CHANNEL_INFO = + val CHANNEL_INFO = ChannelInfo( id = BuildConfig.APPLICATION_ID + ".channel.PLAYBACK", nameRes = R.string.lbl_playback) diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt index d35555cfe..82f60bb51 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt @@ -79,9 +79,9 @@ class PlaybackService : Service(), Player.Listener, InternalPlayer, - MediaSessionComponent.Callback, - Settings.Callback, - MusicStore.Callback { + MediaSessionComponent.Listener, + Settings.Listener, + MusicStore.Listener { // Player components private lateinit var player: ExoPlayer private lateinit var replayGainProcessor: ReplayGainAudioProcessor @@ -217,7 +217,7 @@ class PlaybackService : get() = settings.rewindWithPrev && player.currentPosition > REWIND_THRESHOLD override fun getState(durationMs: Long) = - InternalPlayer.State.new( + InternalPlayer.State.from( player.playWhenReady, player.isPlaying, // The position value can be below zero or past the expected duration, make diff --git a/app/src/main/java/org/oxycblt/auxio/search/SearchAdapter.kt b/app/src/main/java/org/oxycblt/auxio/search/SearchAdapter.kt index 3f9cca499..a1260859b 100644 --- a/app/src/main/java/org/oxycblt/auxio/search/SearchAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/search/SearchAdapter.kt @@ -51,11 +51,11 @@ class SearchAdapter(private val listener: SelectableListListener) : override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = when (viewType) { - SongViewHolder.VIEW_TYPE -> SongViewHolder.new(parent) - AlbumViewHolder.VIEW_TYPE -> AlbumViewHolder.new(parent) - ArtistViewHolder.VIEW_TYPE -> ArtistViewHolder.new(parent) - GenreViewHolder.VIEW_TYPE -> GenreViewHolder.new(parent) - HeaderViewHolder.VIEW_TYPE -> HeaderViewHolder.new(parent) + SongViewHolder.VIEW_TYPE -> SongViewHolder.from(parent) + AlbumViewHolder.VIEW_TYPE -> AlbumViewHolder.from(parent) + ArtistViewHolder.VIEW_TYPE -> ArtistViewHolder.from(parent) + GenreViewHolder.VIEW_TYPE -> GenreViewHolder.from(parent) + HeaderViewHolder.VIEW_TYPE -> HeaderViewHolder.from(parent) else -> error("Invalid item type $viewType") } @@ -81,9 +81,9 @@ class SearchAdapter(private val listener: SelectableListListener) : differ.submitList(newList, callback) } - companion object { + private companion object { /** A comparator that can be used with DiffUtil. */ - private val DIFF_CALLBACK = + val DIFF_CALLBACK = object : SimpleItemCallback() { override fun areContentsTheSame(oldItem: Item, newItem: Item) = when { diff --git a/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt b/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt index a088e32e7..0be8d3926 100644 --- a/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt @@ -43,7 +43,7 @@ import org.oxycblt.auxio.util.logD * @author Alexander Capehart (OxygenCobalt) */ class SearchViewModel(application: Application) : - AndroidViewModel(application), MusicStore.Callback { + AndroidViewModel(application), MusicStore.Listener { private val musicStore = MusicStore.getInstance() private val settings = Settings(context) private var lastQuery: String? = null @@ -212,11 +212,11 @@ class SearchViewModel(application: Application) : search(lastQuery) } - companion object { + private companion object { /** * Converts the output of [Normalizer] to remove any junk characters added by it's * replacements. */ - private val NORMALIZATION_SANITIZE_REGEX = Regex("\\p{InCombiningDiacriticalMarks}+") + val NORMALIZATION_SANITIZE_REGEX = Regex("\\p{InCombiningDiacriticalMarks}+") } } diff --git a/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt index 81c52a22a..bb4d9109b 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt @@ -152,14 +152,14 @@ class AboutFragment : ViewBindingFragment() { startActivity(chooserIntent) } - companion object { + private companion object { /** The URL to the source code. */ - private const val LINK_SOURCE = "https://github.com/OxygenCobalt/Auxio" + const val LINK_SOURCE = "https://github.com/OxygenCobalt/Auxio" /** The URL to the app wiki. */ - private const val LINK_WIKI = "$LINK_SOURCE/wiki" + const val LINK_WIKI = "$LINK_SOURCE/wiki" /** The URL to the licenses wiki page. */ - private const val LINK_LICENSES = "$LINK_WIKI/Licenses" + const val LINK_LICENSES = "$LINK_WIKI/Licenses" /** The URL to the app author. */ - private const val LINK_AUTHOR = "https://github.com/OxygenCobalt" + const val LINK_AUTHOR = "https://github.com/OxygenCobalt" } } diff --git a/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt b/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt index 50887fede..64bebac04 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/Settings.kt @@ -44,12 +44,12 @@ import org.oxycblt.auxio.util.unlikelyToBeNull * mutability * @author Alexander Capehart (OxygenCobalt) */ -class Settings(private val context: Context, private val callback: Callback? = null) : +class Settings(private val context: Context, private val listener: Listener? = null) : SharedPreferences.OnSharedPreferenceChangeListener { private val inner = PreferenceManager.getDefaultSharedPreferences(context.applicationContext) init { - if (callback != null) { + if (listener != null) { inner.registerOnSharedPreferenceChangeListener(this) } } @@ -154,7 +154,7 @@ class Settings(private val context: Context, private val callback: Callback? = n } /** - * Release this instance and any callbacks held by it. This is not needed if no [Callback] was + * Release this instance and any callbacks held by it. This is not needed if no [Listener] was * originally attached. */ fun release() { @@ -162,11 +162,11 @@ class Settings(private val context: Context, private val callback: Callback? = n } override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) { - unlikelyToBeNull(callback).onSettingChanged(key) + unlikelyToBeNull(listener).onSettingChanged(key) } - /** Simplified callback for settings changes. */ - interface Callback { + /** Simplified listener for settings changes. */ + interface Listener { // TODO: Refactor this lifecycle /** * Called when a setting has changed. diff --git a/app/src/main/java/org/oxycblt/auxio/settings/prefs/IntListPreference.kt b/app/src/main/java/org/oxycblt/auxio/settings/prefs/IntListPreference.kt index a25d7a718..8afa0ec8d 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/prefs/IntListPreference.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/prefs/IntListPreference.kt @@ -162,8 +162,8 @@ constructor( } } - companion object { - private val PREFERENCE_DEFAULT_VALUE_FIELD: Field by + private companion object { + val PREFERENCE_DEFAULT_VALUE_FIELD: Field by lazyReflectedField(Preference::class, "mDefaultValue") } } diff --git a/app/src/main/java/org/oxycblt/auxio/settings/prefs/IntListPreferenceDialog.kt b/app/src/main/java/org/oxycblt/auxio/settings/prefs/IntListPreferenceDialog.kt index b66bfe309..72f8f3383 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/prefs/IntListPreferenceDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/prefs/IntListPreferenceDialog.kt @@ -24,7 +24,7 @@ import org.oxycblt.auxio.BuildConfig import org.oxycblt.auxio.R /** - * The companion dialog to [IntListPreference]. Use [new] to create an instance. + * The companion dialog to [IntListPreference]. Use [from] to create an instance. * @author Alexander Capehart (OxygenCobalt) */ class IntListPreferenceDialog : PreferenceDialogFragmentCompat() { @@ -62,11 +62,10 @@ class IntListPreferenceDialog : PreferenceDialogFragmentCompat() { * @param preference The [IntListPreference] to display. * @return A new instance. */ - fun new(preference: IntListPreference): IntListPreferenceDialog { - return IntListPreferenceDialog().apply { + fun from(preference: IntListPreference) = + IntListPreferenceDialog().apply { // Populate the key field required by PreferenceDialogFragmentCompat. arguments = Bundle().apply { putString(ARG_KEY, preference.key) } } - } } } diff --git a/app/src/main/java/org/oxycblt/auxio/settings/prefs/PreferenceFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/prefs/PreferenceFragment.kt index da944e309..4a3d378c4 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/prefs/PreferenceFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/prefs/PreferenceFragment.kt @@ -76,7 +76,7 @@ class PreferenceFragment : PreferenceFragmentCompat() { is IntListPreference -> { // Copy the built-in preference dialog launching code into our project so // we can automatically use the provided preference class. - val dialog = IntListPreferenceDialog.new(preference) + val dialog = IntListPreferenceDialog.from(preference) dialog.setTargetFragment(this, 0) dialog.show(parentFragmentManager, IntListPreferenceDialog.TAG) } diff --git a/app/src/main/java/org/oxycblt/auxio/ui/AuxioAppBarLayout.kt b/app/src/main/java/org/oxycblt/auxio/ui/AuxioAppBarLayout.kt index 91e122dad..b652b438a 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/AuxioAppBarLayout.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/AuxioAppBarLayout.kt @@ -136,8 +136,8 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr } } - companion object { + private companion object { /** @see AppBarLayout.BaseBehavior.MAX_OFFSET_ANIMATION_DURATION */ - private const val APP_BAR_LAYOUT_MAX_OFFSET_ANIMATION_DURATION = 600 + const val APP_BAR_LAYOUT_MAX_OFFSET_ANIMATION_DURATION = 600 } } diff --git a/app/src/main/java/org/oxycblt/auxio/ui/accent/AccentAdapter.kt b/app/src/main/java/org/oxycblt/auxio/ui/accent/AccentAdapter.kt index 790e9ca54..8ac060be5 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/accent/AccentAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/accent/AccentAdapter.kt @@ -41,7 +41,8 @@ class AccentAdapter(private val listener: ClickableListListener) : override fun getItemCount() = Accent.MAX - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = AccentViewHolder.new(parent) + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = + AccentViewHolder.from(parent) override fun onBindViewHolder(holder: AccentViewHolder, position: Int) = throw NotImplementedError() @@ -75,13 +76,13 @@ class AccentAdapter(private val listener: ClickableListListener) : notifyItemChanged(accent.index, PAYLOAD_SELECTION_CHANGED) } - companion object { - private val PAYLOAD_SELECTION_CHANGED = Any() + private companion object { + val PAYLOAD_SELECTION_CHANGED = Any() } } /** - * A [RecyclerView.ViewHolder] that displays an [Accent] choice. Use [new] to create an instance. + * A [RecyclerView.ViewHolder] that displays an [Accent] choice. Use [from] to create an instance. * @author Alexander Capehart (OxygenCobalt) */ class AccentViewHolder private constructor(private val binding: ItemAccentBinding) : @@ -124,6 +125,7 @@ class AccentViewHolder private constructor(private val binding: ItemAccentBindin * @param parent The parent to inflate this instance from. * @return A new instance. */ - fun new(parent: View) = AccentViewHolder(ItemAccentBinding.inflate(parent.context.inflater)) + fun from(parent: View) = + AccentViewHolder(ItemAccentBinding.inflate(parent.context.inflater)) } } diff --git a/app/src/main/java/org/oxycblt/auxio/ui/accent/AccentCustomizeDialog.kt b/app/src/main/java/org/oxycblt/auxio/ui/accent/AccentCustomizeDialog.kt index a90ce9720..c14e38985 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/accent/AccentCustomizeDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/accent/AccentCustomizeDialog.kt @@ -85,7 +85,7 @@ class AccentCustomizeDialog : accentAdapter.setSelectedAccent(item) } - companion object { - private const val KEY_PENDING_ACCENT = BuildConfig.APPLICATION_ID + ".key.PENDING_ACCENT" + private companion object { + const val KEY_PENDING_ACCENT = BuildConfig.APPLICATION_ID + ".key.PENDING_ACCENT" } } diff --git a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetComponent.kt b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetComponent.kt index d51a34530..b6e9f437c 100644 --- a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetComponent.kt +++ b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetComponent.kt @@ -41,7 +41,7 @@ import org.oxycblt.auxio.util.logD * @author Alexander Capehart (OxygenCobalt) */ class WidgetComponent(private val context: Context) : - PlaybackStateManager.Callback, Settings.Callback { + PlaybackStateManager.Listener, Settings.Listener { private val playbackManager = PlaybackStateManager.getInstance() private val settings = Settings(context, this) private val widgetProvider = WidgetProvider()