From 3fb7882d89643bc9ac6af598a2883bc100686b64 Mon Sep 17 00:00:00 2001 From: casey langen Date: Fri, 28 Dec 2018 23:17:36 -0800 Subject: [PATCH] Added the ability to specify title ellipsis mode (beginning/middle/end). Fixes #209. --- .../remote/ui/home/activity/MainActivity.kt | 9 ++---- .../playqueue/activity/PlayQueueActivity.kt | 31 ++++++++++--------- .../ui/playqueue/adapter/PlayQueueAdapter.kt | 6 ++++ .../ui/settings/activity/SettingsActivity.kt | 15 +++++++-- .../remote/ui/settings/constants/Prefs.kt | 2 ++ .../remote/ui/shared/activity/BaseActivity.kt | 2 +- .../remote/ui/shared/extension/Extensions.kt | 15 +++++++++ .../tracks/activity/EditPlaylistActivity.kt | 14 ++++----- .../ui/tracks/activity/TrackListActivity.kt | 2 +- .../ui/tracks/adapter/EditPlaylistAdapter.kt | 21 ++++++++++--- .../ui/tracks/adapter/TrackListAdapter.kt | 23 +++++++++++--- .../src/main/res/layout/activity_settings.xml | 17 ++++++++++ ...playgain_modes.xml => replaygain_mode.xml} | 0 .../app/src/main/res/values/strings.xml | 4 +++ .../main/res/values/title_ellipsis_mode.xml | 8 +++++ 15 files changed, 128 insertions(+), 41 deletions(-) rename src/musikdroid/app/src/main/res/values/{replaygain_modes.xml => replaygain_mode.xml} (100%) create mode 100644 src/musikdroid/app/src/main/res/values/title_ellipsis_mode.xml diff --git a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/home/activity/MainActivity.kt b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/home/activity/MainActivity.kt index 0a624bf35..395b5decb 100644 --- a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/home/activity/MainActivity.kt +++ b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/home/activity/MainActivity.kt @@ -3,7 +3,6 @@ package io.casey.musikcube.remote.ui.home.activity import android.app.Dialog import android.content.Context import android.content.Intent -import android.content.SharedPreferences import android.graphics.Color import android.net.Uri import android.os.Bundle @@ -15,7 +14,6 @@ import android.widget.* import com.wooplr.spotlight.SpotlightView import io.casey.musikcube.remote.R import io.casey.musikcube.remote.service.playback.Playback -import io.casey.musikcube.remote.service.playback.PlaybackServiceFactory import io.casey.musikcube.remote.service.playback.PlaybackState import io.casey.musikcube.remote.service.playback.RepeatMode import io.casey.musikcube.remote.service.websocket.Messages @@ -48,7 +46,6 @@ class MainActivity : BaseActivity() { private var seekbarValue = -1 private var blink = 0 - private lateinit var prefs: SharedPreferences private lateinit var data: DataProviderMixin private lateinit var playback: PlaybackMixin @@ -72,7 +69,7 @@ class MainActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { component.inject(this) data = mixin(DataProviderMixin()) - playback = mixin(PlaybackMixin({ rebindUi() })) + playback = mixin(PlaybackMixin { rebindUi() }) super.onCreate(savedInstanceState) @@ -565,11 +562,11 @@ class MainActivity : BaseActivity() { val dlg = AlertDialog.Builder(activity) .setTitle(R.string.update_check_dialog_title) .setMessage(getString(R.string.update_check_dialog_message, version)) - .setNegativeButton(R.string.button_no, { _, _ -> + .setNegativeButton(R.string.button_no) { _, _ -> if (checkbox.isChecked) { silence() } - }) + } .setPositiveButton(R.string.button_yes) { _, _ -> if (checkbox.isChecked) { silence() diff --git a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/playqueue/activity/PlayQueueActivity.kt b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/playqueue/activity/PlayQueueActivity.kt index 6d591c232..c5d8f0cfd 100644 --- a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/playqueue/activity/PlayQueueActivity.kt +++ b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/playqueue/activity/PlayQueueActivity.kt @@ -49,7 +49,7 @@ class PlayQueueActivity : BaseActivity() { tracks = DefaultSlidingWindow(recyclerView, data.provider, queryFactory) tracks.setInitialPosition(intent.getIntExtra(EXTRA_PLAYING_INDEX, -1)) tracks.setOnMetadataLoadedListener(slidingWindowListener) - adapter = PlayQueueAdapter(tracks, playback, adapterListener) + adapter = PlayQueueAdapter(tracks, playback, prefs, adapterListener) setupDefaultRecyclerView(recyclerView, adapter) @@ -58,18 +58,6 @@ class PlayQueueActivity : BaseActivity() { emptyView.emptyMessage = getString(R.string.play_queue_empty) emptyView.alternateView = recyclerView - data.provider.observeState().subscribeBy( - onNext = { states -> - if (states.first == IDataProvider.State.Connected) { - tracks.requery() - } - else { - emptyView.update(states.first, adapter.itemCount) - } - }, - onError = { - }) - setTitleFromIntent(R.string.play_queue_title) addTransportFragment() enableUpNavigation() @@ -82,14 +70,27 @@ class PlayQueueActivity : BaseActivity() { override fun onResume() { this.tracks.resume() /* needs to happen before */ - super.onResume() - + initObservers() if (offlineQueue) { tracks.requery() } } + private fun initObservers() { + disposables.add(data.provider.observeState().subscribeBy( + onNext = { states -> + if (states.first == IDataProvider.State.Connected) { + tracks.requery() + } + else { + emptyView.update(states.first, adapter.itemCount) + } + }, + onError = { + })) + } + override fun onOptionsItemSelected(item: MenuItem): Boolean { val result = super.onOptionsItemSelected(item) diff --git a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/playqueue/adapter/PlayQueueAdapter.kt b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/playqueue/adapter/PlayQueueAdapter.kt index 374dd561c..f886358d0 100644 --- a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/playqueue/adapter/PlayQueueAdapter.kt +++ b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/playqueue/adapter/PlayQueueAdapter.kt @@ -1,5 +1,6 @@ package io.casey.musikcube.remote.ui.playqueue.adapter +import android.content.SharedPreferences import android.support.v7.widget.RecyclerView import android.view.LayoutInflater import android.view.View @@ -9,13 +10,17 @@ import io.casey.musikcube.remote.R import io.casey.musikcube.remote.service.websocket.model.ITrack import io.casey.musikcube.remote.ui.shared.extension.fallback import io.casey.musikcube.remote.ui.shared.extension.getColorCompat +import io.casey.musikcube.remote.ui.shared.extension.titleEllipsizeMode import io.casey.musikcube.remote.ui.shared.mixin.PlaybackMixin import io.casey.musikcube.remote.ui.shared.model.DefaultSlidingWindow class PlayQueueAdapter(val tracks: DefaultSlidingWindow, val playback: PlaybackMixin, + val prefs: SharedPreferences, val listener: EventListener): RecyclerView.Adapter() { + private val ellipsizeMode = titleEllipsizeMode(prefs) + interface EventListener { fun onItemClicked(position: Int) fun onActionClicked(view: View, value: ITrack) @@ -50,6 +55,7 @@ class PlayQueueAdapter(val tracks: DefaultSlidingWindow, private val action = itemView.findViewById(R.id.action) internal fun bind(track: ITrack?, position: Int) { + title.ellipsize = ellipsizeMode trackNum.text = (position + 1).toString() itemView.tag = position action.tag = track diff --git a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/activity/SettingsActivity.kt b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/activity/SettingsActivity.kt index 0e8373776..2a0e73fb4 100644 --- a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/activity/SettingsActivity.kt +++ b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/activity/SettingsActivity.kt @@ -3,7 +3,6 @@ package io.casey.musikcube.remote.ui.settings.activity import android.app.Dialog import android.content.Context import android.content.Intent -import android.content.SharedPreferences import android.net.Uri import android.os.Bundle import android.support.v4.app.DialogFragment @@ -46,7 +45,7 @@ class SettingsActivity : BaseActivity() { private lateinit var transferCheckbox: CheckBox private lateinit var bitrateSpinner: Spinner private lateinit var cacheSpinner: Spinner - private lateinit var prefs: SharedPreferences + private lateinit var titleEllipsisSpinner: Spinner private lateinit var playback: PlaybackMixin private lateinit var data: DataProviderMixin @@ -140,6 +139,16 @@ class SettingsActivity : BaseActivity() { cacheSpinner.setSelection(prefs.getInt( Keys.DISK_CACHE_SIZE_INDEX, Defaults.DISK_CACHE_SIZE_INDEX)) + /* title ellipsis mode */ + val ellipsisModes = ArrayAdapter.createFromResource( + this, R.array.title_ellipsis_mode_array, android.R.layout.simple_spinner_item) + + ellipsisModes.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + + titleEllipsisSpinner.adapter = ellipsisModes + titleEllipsisSpinner.setSelection(prefs.getInt( + Keys.TITLE_ELLIPSIS_MODE_INDEX, Defaults.TITLE_ELLIPSIS_SIZE_INDEX)) + /* advanced */ transferCheckbox.isChecked = prefs.getBoolean( Keys.TRANSFER_TO_SERVER_ON_HEADSET_DISCONNECT, @@ -199,6 +208,7 @@ class SettingsActivity : BaseActivity() { this.softwareVolume = findViewById(R.id.software_volume) this.bitrateSpinner = findViewById(R.id.transcoder_bitrate_spinner) this.cacheSpinner = findViewById(R.id.streaming_disk_cache_spinner) + this.titleEllipsisSpinner = findViewById(R.id.title_ellipsis_mode_spinner) this.sslCheckbox = findViewById(R.id.ssl_checkbox) this.certCheckbox = findViewById(R.id.cert_validation) this.transferCheckbox = findViewById(R.id.transfer_on_disconnect_checkbox) @@ -271,6 +281,7 @@ class SettingsActivity : BaseActivity() { .putBoolean(Keys.TRANSFER_TO_SERVER_ON_HEADSET_DISCONNECT, transferCheckbox.isChecked) .putInt(Keys.TRANSCODER_BITRATE_INDEX, bitrateSpinner.selectedItemPosition) .putInt(Keys.DISK_CACHE_SIZE_INDEX, cacheSpinner.selectedItemPosition) + .putInt(Keys.TITLE_ELLIPSIS_MODE_INDEX, titleEllipsisSpinner.selectedItemPosition) .apply() if (!softwareVolume.isChecked) { diff --git a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/constants/Prefs.kt b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/constants/Prefs.kt index 44efa81ca..dc0e39d8f 100644 --- a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/constants/Prefs.kt +++ b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/constants/Prefs.kt @@ -15,6 +15,7 @@ class Prefs { const val CERT_VALIDATION_DISABLED = "cert_validation_disabled" const val TRANSCODER_BITRATE_INDEX = "transcoder_bitrate_index" const val DISK_CACHE_SIZE_INDEX = "disk_cache_size_index" + const val TITLE_ELLIPSIS_MODE_INDEX = "title_ellipsis_mode_index" const val UPDATE_DIALOG_SUPPRESSED_VERSION = "update_dialog_suppressed_version" const val TRANSFER_TO_SERVER_ON_HEADSET_DISCONNECT = "transfer_to_server_on_headset_disconnect" const val DEVICE_ID = "device_id" @@ -36,6 +37,7 @@ class Prefs { const val TRANSCODER_BITRATE_INDEX = 0 const val TRANSFER_TO_SERVER_ON_HEADSET_DISCONNECT = false const val DISK_CACHE_SIZE_INDEX = 2 + const val TITLE_ELLIPSIS_SIZE_INDEX = 1 } } diff --git a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/shared/activity/BaseActivity.kt b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/shared/activity/BaseActivity.kt index 1d4a823df..06e047b96 100644 --- a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/shared/activity/BaseActivity.kt +++ b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/shared/activity/BaseActivity.kt @@ -25,7 +25,7 @@ import io.reactivex.disposables.CompositeDisposable abstract class BaseActivity : AppCompatActivity(), ViewModel.Provider, Runner.TaskCallbacks { protected var disposables = CompositeDisposable() - private lateinit var prefs: SharedPreferences + protected lateinit var prefs: SharedPreferences private var paused = false private val mixins = MixinSet() diff --git a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/shared/extension/Extensions.kt b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/shared/extension/Extensions.kt index b65e06d75..aeecc456f 100644 --- a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/shared/extension/Extensions.kt +++ b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/shared/extension/Extensions.kt @@ -2,6 +2,7 @@ package io.casey.musikcube.remote.ui.shared.extension import android.app.SearchManager import android.content.Context +import android.content.SharedPreferences import android.support.design.widget.Snackbar import android.support.v4.app.DialogFragment import android.support.v4.app.Fragment @@ -12,6 +13,7 @@ import android.support.v7.widget.DividerItemDecoration import android.support.v7.widget.LinearLayoutManager import android.support.v7.widget.RecyclerView import android.support.v7.widget.SearchView +import android.text.TextUtils import android.view.Menu import android.view.View import android.view.inputmethod.InputMethodManager @@ -21,6 +23,7 @@ import android.widget.EditText import android.widget.TextView import io.casey.musikcube.remote.Application import io.casey.musikcube.remote.R +import io.casey.musikcube.remote.ui.settings.constants.Prefs import io.casey.musikcube.remote.ui.shared.activity.Filterable import io.casey.musikcube.remote.ui.shared.fragment.TransportFragment import io.casey.musikcube.remote.util.Strings @@ -244,4 +247,16 @@ fun letMany(p1: T1?, p2: T2?, p3: T } fun letMany(p1: T1?, p2: T2?, p3: T3?, p4: T4?, p5: T5?, block: (T1, T2, T3, T4, T5)->R?): R? { return if (p1 != null && p2 != null && p3 != null && p4 != null && p5 != null) block(p1, p2, p3, p4, p5) else null +} + +fun titleEllipsizeMode(prefs: SharedPreferences): TextUtils.TruncateAt { + val modeIndex = prefs.getInt( + Prefs.Key.TITLE_ELLIPSIS_MODE_INDEX, + Prefs.Default.TITLE_ELLIPSIS_SIZE_INDEX) + + return when(modeIndex) { + 0 -> TextUtils.TruncateAt.START + 1 -> TextUtils.TruncateAt.MIDDLE + else -> TextUtils.TruncateAt.END + } } \ No newline at end of file diff --git a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/tracks/activity/EditPlaylistActivity.kt b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/tracks/activity/EditPlaylistActivity.kt index 4a0f4c3aa..7235f26c7 100644 --- a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/tracks/activity/EditPlaylistActivity.kt +++ b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/tracks/activity/EditPlaylistActivity.kt @@ -41,7 +41,7 @@ class EditPlaylistActivity: BaseActivity() { val recycler = findViewById(R.id.recycler_view) val touchHelper = ItemTouchHelper(touchHelperCallback) touchHelper.attachToRecyclerView(recycler) - adapter = EditPlaylistAdapter(viewModel, touchHelper) + adapter = EditPlaylistAdapter(viewModel, touchHelper, prefs) setupDefaultRecyclerView(recycler, adapter) setResult(RESULT_CANCELED) } @@ -85,7 +85,7 @@ class EditPlaylistActivity: BaseActivity() { private fun saveAndFinish() { if (viewModel.modified) { - viewModel.save().subscribeBy( + disposables.add(viewModel.save().subscribeBy( onNext = { playlistId -> if (playlistId != -1L) { val data = Intent() @@ -99,7 +99,7 @@ class EditPlaylistActivity: BaseActivity() { }, onError = { showErrorSnackbar(R.string.playlist_edit_save_failed) - }) + })) } else { finish() @@ -131,8 +131,8 @@ class EditPlaylistActivity: BaseActivity() { return AlertDialog.Builder(editActivity) .setTitle(R.string.playlist_edit_save_changes_title) .setMessage(R.string.playlist_edit_save_changes_message) - .setNegativeButton(R.string.button_discard, { _, _ -> editActivity.finish() }) - .setPositiveButton(R.string.button_save, { _, _ -> editActivity.saveAndFinish() }) + .setNegativeButton(R.string.button_discard) { _, _ -> editActivity.finish() } + .setPositiveButton(R.string.button_save) { _, _ -> editActivity.saveAndFinish() } .create() } @@ -148,8 +148,8 @@ class EditPlaylistActivity: BaseActivity() { } companion object { - val EXTRA_PLAYLIST_ID = "extra_playlist_id" - val EXTRA_PLAYLIST_NAME = "extra_playlist_name" + const val EXTRA_PLAYLIST_ID = "extra_playlist_id" + const val EXTRA_PLAYLIST_NAME = "extra_playlist_name" fun getStartIntent(context: Context, playlistName: String, playlistId: Long): Intent { return Intent(context, EditPlaylistActivity::class.java) diff --git a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/tracks/activity/TrackListActivity.kt b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/tracks/activity/TrackListActivity.kt index 14463c434..006a76033 100644 --- a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/tracks/activity/TrackListActivity.kt +++ b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/tracks/activity/TrackListActivity.kt @@ -68,7 +68,7 @@ class TrackListActivity : BaseActivity(), Filterable { val recyclerView = findViewById(R.id.recycler_view) tracks = DefaultSlidingWindow(recyclerView, data.provider, queryFactory) - adapter = TrackListAdapter(tracks, eventListener, playback) + adapter = TrackListAdapter(tracks, eventListener, playback, prefs) setupDefaultRecyclerView(recyclerView, adapter) diff --git a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/tracks/adapter/EditPlaylistAdapter.kt b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/tracks/adapter/EditPlaylistAdapter.kt index 7a2941fee..f55780eec 100644 --- a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/tracks/adapter/EditPlaylistAdapter.kt +++ b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/tracks/adapter/EditPlaylistAdapter.kt @@ -1,7 +1,9 @@ package io.casey.musikcube.remote.ui.tracks.adapter +import android.content.SharedPreferences import android.support.v7.widget.RecyclerView import android.support.v7.widget.helper.ItemTouchHelper +import android.text.TextUtils import android.view.LayoutInflater import android.view.MotionEvent import android.view.View @@ -10,10 +12,17 @@ import android.widget.TextView import io.casey.musikcube.remote.R import io.casey.musikcube.remote.service.websocket.model.ITrack import io.casey.musikcube.remote.ui.shared.extension.fallback +import io.casey.musikcube.remote.ui.shared.extension.titleEllipsizeMode import io.casey.musikcube.remote.ui.tracks.model.EditPlaylistViewModel -class EditPlaylistAdapter(private val viewModel: EditPlaylistViewModel, - private val touchHelper: ItemTouchHelper): RecyclerView.Adapter() { +class EditPlaylistAdapter( + private val viewModel: EditPlaylistViewModel, + private val touchHelper: ItemTouchHelper, + prefs: SharedPreferences) + : RecyclerView.Adapter() +{ + private val ellipsizeMode = titleEllipsizeMode(prefs) + override fun getItemCount(): Int { return viewModel.count } @@ -21,7 +30,7 @@ class EditPlaylistAdapter(private val viewModel: EditPlaylistViewModel, override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val inflater = LayoutInflater.from(parent.context) val view = inflater.inflate(R.layout.edit_playlist_track_row, parent, false) - val holder = ViewHolder(view) + val holder = ViewHolder(view, ellipsizeMode) val drag = view.findViewById(R.id.dragHandle) val swipe = view.findViewById(R.id.swipeHandle) view.setOnClickListener(emptyClickListener) @@ -58,10 +67,14 @@ class EditPlaylistAdapter(private val viewModel: EditPlaylistViewModel, } } - class ViewHolder internal constructor(internal val view: View) : RecyclerView.ViewHolder(view) { + class ViewHolder internal constructor(view: View, ellipsizeMode: TextUtils.TruncateAt) : RecyclerView.ViewHolder(view) { private val title = itemView.findViewById(R.id.title) private val subtitle = itemView.findViewById(R.id.subtitle) + init { + title.ellipsize = ellipsizeMode + } + fun bind(track: ITrack) { title.text = fallback(track.title, "-") subtitle.text = fallback(track.albumArtist, "-") diff --git a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/tracks/adapter/TrackListAdapter.kt b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/tracks/adapter/TrackListAdapter.kt index 237f53755..b98694a51 100644 --- a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/tracks/adapter/TrackListAdapter.kt +++ b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/tracks/adapter/TrackListAdapter.kt @@ -1,6 +1,8 @@ package io.casey.musikcube.remote.ui.tracks.adapter +import android.content.SharedPreferences import android.support.v7.widget.RecyclerView +import android.text.TextUtils import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -10,13 +12,17 @@ import io.casey.musikcube.remote.service.websocket.model.ITrack import io.casey.musikcube.remote.ui.shared.extension.fallback import io.casey.musikcube.remote.ui.shared.extension.getColorCompat import io.casey.musikcube.remote.ui.shared.extension.letMany +import io.casey.musikcube.remote.ui.shared.extension.titleEllipsizeMode import io.casey.musikcube.remote.ui.shared.mixin.PlaybackMixin import io.casey.musikcube.remote.ui.shared.model.DefaultSlidingWindow class TrackListAdapter(private val tracks: DefaultSlidingWindow, - private val listener: EventListener?, - private var playback: PlaybackMixin) : RecyclerView.Adapter() + private val listener: EventListener, + private var playback: PlaybackMixin, + prefs: SharedPreferences) : RecyclerView.Adapter() { + private val ellipsizeMode = titleEllipsizeMode(prefs) + interface EventListener { fun onItemClick(view: View, track: ITrack, position: Int) fun onActionItemClick(view: View, track: ITrack, position: Int) @@ -43,7 +49,7 @@ class TrackListAdapter(private val tracks: DefaultSlidingWindow, } } - return ViewHolder(view, playback) + return ViewHolder(view, playback, ellipsizeMode) } override fun onBindViewHolder(holder: ViewHolder, position: Int) = @@ -51,13 +57,20 @@ class TrackListAdapter(private val tracks: DefaultSlidingWindow, override fun getItemCount(): Int = tracks.count - class ViewHolder internal constructor(view: View, - private val playback: PlaybackMixin) : RecyclerView.ViewHolder(view) + class ViewHolder internal constructor( + view: View, + private val playback: PlaybackMixin, + ellipsizeMode: TextUtils.TruncateAt) + : RecyclerView.ViewHolder(view) { private val title: TextView = view.findViewById(R.id.title) private val subtitle: TextView = view.findViewById(R.id.subtitle) private val action: View = view.findViewById(R.id.action) + init { + title.ellipsize = ellipsizeMode + } + internal fun bind(track: ITrack?, position: Int) { val tag = itemView.tag as Tag tag.position = position diff --git a/src/musikdroid/app/src/main/res/layout/activity_settings.xml b/src/musikdroid/app/src/main/res/layout/activity_settings.xml index 6b089de2a..1eba3439a 100644 --- a/src/musikdroid/app/src/main/res/layout/activity_settings.xml +++ b/src/musikdroid/app/src/main/res/layout/activity_settings.xml @@ -168,6 +168,23 @@ android:layout_width="0dp" android:layout_height="16dp"/> + + + + + + disabled track album + ellipsize titles: + beginning + middle + end no saved connection presets. show offline songs oops, you don\'t seem to have any songs available offline.\n\nnext time you\'re connected, stream some music! diff --git a/src/musikdroid/app/src/main/res/values/title_ellipsis_mode.xml b/src/musikdroid/app/src/main/res/values/title_ellipsis_mode.xml new file mode 100644 index 000000000..7e5766cc0 --- /dev/null +++ b/src/musikdroid/app/src/main/res/values/title_ellipsis_mode.xml @@ -0,0 +1,8 @@ + + + + @string/ellipsis_mode_beginning + @string/ellipsis_mode_middle + @string/ellipsis_mode_end + + \ No newline at end of file