Merge pull request #4472 from FineFindus/feat/tooltips

feat: add tooltips to various icon buttons for better accessibility
This commit is contained in:
Bnyro 2023-08-15 15:00:48 +02:00 committed by GitHub
commit eef864a819
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 80 additions and 9 deletions

View File

@ -19,11 +19,11 @@ import com.github.libretube.obj.NewPipeSubscription
import com.github.libretube.obj.NewPipeSubscriptions import com.github.libretube.obj.NewPipeSubscriptions
import com.github.libretube.obj.PipedImportPlaylist import com.github.libretube.obj.PipedImportPlaylist
import com.github.libretube.obj.PipedImportPlaylistFile import com.github.libretube.obj.PipedImportPlaylistFile
import java.util.stream.Collectors
import kotlin.streams.toList import kotlin.streams.toList
import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.json.decodeFromStream import kotlinx.serialization.json.decodeFromStream
import kotlinx.serialization.json.encodeToStream import kotlinx.serialization.json.encodeToStream
import java.util.stream.Collectors
object ImportHelper { object ImportHelper {
/** /**

View File

@ -62,7 +62,11 @@ class AddToPlaylistDialog(
if (playlists.isEmpty()) return@repeatOnLifecycle if (playlists.isEmpty()) return@repeatOnLifecycle
binding.playlistsSpinner.adapter = binding.playlistsSpinner.adapter =
ArrayAdapter(requireContext(), R.layout.dropdown_item, playlists.map { it.name!! }) ArrayAdapter(
requireContext(),
R.layout.dropdown_item,
playlists.map { it.name!! }
)
// select the last used playlist // select the last used playlist
viewModel.lastSelectedPlaylistId?.let { id -> viewModel.lastSelectedPlaylistId?.let { id ->

View File

@ -0,0 +1,15 @@
package com.github.libretube.ui.extensions
import android.os.Build
import android.widget.ImageView
/**
* Attempts to set the tooltip for the ImageView.
* If the OS does not support tooltips, this function will have no effect.
* @param tooltip The tooltip of the image
*/
fun ImageView.trySetTooltip(tooltip: String) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
tooltipText = tooltip
}
}

View File

@ -49,6 +49,7 @@ import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.obj.BottomSheetItem import com.github.libretube.obj.BottomSheetItem
import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.base.BaseActivity
import com.github.libretube.ui.extensions.toggleSystemBars import com.github.libretube.ui.extensions.toggleSystemBars
import com.github.libretube.ui.extensions.trySetTooltip
import com.github.libretube.ui.interfaces.PlayerGestureOptions import com.github.libretube.ui.interfaces.PlayerGestureOptions
import com.github.libretube.ui.interfaces.PlayerOptions import com.github.libretube.ui.interfaces.PlayerOptions
import com.github.libretube.ui.listeners.PlayerGestureController import com.github.libretube.ui.listeners.PlayerGestureController
@ -127,13 +128,15 @@ open class CustomExoPlayerView(
// locking the player // locking the player
binding.lockPlayer.setOnClickListener { binding.lockPlayer.setOnClickListener {
// change the locked/unlocked icon // change the locked/unlocked icon
binding.lockPlayer.setImageResource( val icon = if (!isPlayerLocked) R.drawable.ic_locked else R.drawable.ic_unlocked
if (!isPlayerLocked) { val tooltip = if (!isPlayerLocked) {
R.drawable.ic_locked R.string.tooltip_unlocked
} else { } else {
R.drawable.ic_unlocked R.string.tooltip_locked
} }
)
binding.lockPlayer.setImageResource(icon)
binding.lockPlayer.trySetTooltip(context.getString(tooltip))
// show/hide all the controls // show/hide all the controls
lockPlayer(isPlayerLocked) lockPlayer(isPlayerLocked)

View File

@ -30,6 +30,7 @@
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/notification_bell" android:id="@+id/notification_bell"
android:tooltipText="@string/notifications"
style="@style/ElevatedIconButton" style="@style/ElevatedIconButton"
android:layout_gravity="center" android:layout_gravity="center"
app:icon="@drawable/ic_notification" app:icon="@drawable/ic_notification"

View File

@ -54,6 +54,7 @@
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/btnScrollToTop" android:id="@+id/btnScrollToTop"
android:tooltipText="@string/tooltip_scroll_to_top"
android:layout_width="35dp" android:layout_width="35dp"
android:layout_height="35dp" android:layout_height="35dp"
android:background="?selectableItemBackgroundBorderless" android:background="?selectableItemBackgroundBorderless"
@ -64,6 +65,7 @@
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/btnClose" android:id="@+id/btnClose"
android:tooltipText="@string/tooltip_close"
android:layout_width="35dp" android:layout_width="35dp"
android:layout_height="35dp" android:layout_height="35dp"
android:background="?selectableItemBackgroundBorderless" android:background="?selectableItemBackgroundBorderless"

View File

@ -32,6 +32,7 @@
<ImageView <ImageView
android:id="@+id/close_imageButton" android:id="@+id/close_imageButton"
android:tooltipText="@string/tooltip_minimize"
style="@style/PlayerControlTop" style="@style/PlayerControlTop"
android:layout_marginEnd="-10dp" android:layout_marginEnd="-10dp"
android:src="@drawable/ic_close" android:src="@drawable/ic_close"
@ -68,6 +69,7 @@
<androidx.appcompat.widget.SwitchCompat <androidx.appcompat.widget.SwitchCompat
android:id="@+id/autoPlay" android:id="@+id/autoPlay"
android:tooltipText="@string/player_autoplay"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="2dp" android:layout_marginEnd="2dp"
@ -81,6 +83,7 @@
<ImageButton <ImageButton
android:id="@+id/sb_toggle" android:id="@+id/sb_toggle"
android:tooltipText="@string/tooltip_sponsorblock"
style="@style/PlayerControlTop" style="@style/PlayerControlTop"
android:layout_marginEnd="2dp" android:layout_marginEnd="2dp"
android:src="@drawable/ic_sb_enabled" android:src="@drawable/ic_sb_enabled"
@ -89,6 +92,7 @@
<ImageButton <ImageButton
android:id="@+id/queue_toggle" android:id="@+id/queue_toggle"
android:tooltipText="@string/queue"
style="@style/PlayerControlTop" style="@style/PlayerControlTop"
android:layout_marginEnd="2dp" android:layout_marginEnd="2dp"
android:src="@drawable/ic_queue" android:src="@drawable/ic_queue"
@ -97,6 +101,7 @@
<ImageButton <ImageButton
android:id="@+id/toggle_options" android:id="@+id/toggle_options"
android:tooltipText="@string/tooltip_options"
style="@style/PlayerControlTop" style="@style/PlayerControlTop"
android:src="@drawable/ic_player_settings" android:src="@drawable/ic_player_settings"
app:tint="@android:color/white" /> app:tint="@android:color/white" />
@ -311,6 +316,7 @@
<ImageButton <ImageButton
android:id="@+id/fullscreen" android:id="@+id/fullscreen"
android:tooltipText="@string/tooltip_fullscreen"
style="@style/PlayerControlBottom" style="@style/PlayerControlBottom"
android:src="@drawable/ic_fullscreen" android:src="@drawable/ic_fullscreen"
app:tint="@android:color/white" /> app:tint="@android:color/white" />

View File

@ -72,12 +72,14 @@
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/channel_share" android:id="@+id/channel_share"
android:tooltipText="@string/share"
style="@style/ElevatedIconButton" style="@style/ElevatedIconButton"
app:icon="@drawable/ic_share" app:icon="@drawable/ic_share"
tools:targetApi="m" /> tools:targetApi="m" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/notification_bell" android:id="@+id/notification_bell"
android:tooltipText="@string/notifications"
style="@style/ElevatedIconButton" style="@style/ElevatedIconButton"
app:icon="@drawable/ic_notification" app:icon="@drawable/ic_notification"
tools:targetApi="m" /> tools:targetApi="m" />

View File

@ -96,6 +96,7 @@
<TextView <TextView
android:id="@+id/sortTV" android:id="@+id/sortTV"
android:layout_width="0dp" android:layout_width="0dp"
android:tooltipText="@string/tooltip_sort"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:drawablePadding="5dp" android:drawablePadding="5dp"
@ -182,6 +183,7 @@
<com.google.android.material.floatingactionbutton.FloatingActionButton <com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/create_playlist" android:id="@+id/create_playlist"
android:tooltipText="@string/tooltip_create_playlist"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="bottom|end" android:layout_gravity="bottom|end"

View File

@ -367,6 +367,7 @@
<ImageView <ImageView
android:id="@+id/close_imageView" android:id="@+id/close_imageView"
android:tooltipText="@string/tooltip_close"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:alpha="0" android:alpha="0"
@ -380,6 +381,7 @@
<ImageView <ImageView
android:id="@+id/play_imageView" android:id="@+id/play_imageView"
android:tooltipText="@string/tooltip_play"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:alpha="0" android:alpha="0"

View File

@ -106,6 +106,7 @@
<TextView <TextView
android:id="@+id/filterTV" android:id="@+id/filterTV"
android:tooltipText="@string/tooltip_filter"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="start" android:layout_gravity="start"
@ -118,6 +119,7 @@
<TextView <TextView
android:id="@+id/sortTV" android:id="@+id/sortTV"
android:tooltipText="@string/tooltip_sort"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="end" android:layout_gravity="end"
@ -142,6 +144,7 @@
<ImageView <ImageView
android:id="@+id/edit_groups" android:id="@+id/edit_groups"
android:tooltipText="@string/tooltip_edit_groups"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"

View File

@ -57,6 +57,7 @@
<ImageView <ImageView
android:id="@+id/reset_speed" android:id="@+id/reset_speed"
android:tooltipText="@string/reset"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
@ -95,6 +96,7 @@
<ImageView <ImageView
android:id="@+id/reset_pitch" android:id="@+id/reset_pitch"
android:tooltipText="@string/reset"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"

View File

@ -39,40 +39,49 @@
<ImageView <ImageView
android:id="@+id/repeat" android:id="@+id/repeat"
android:tooltipText="@string/tooltip_repeat"
style="@style/QueueSheetOption" style="@style/QueueSheetOption"
android:src="@drawable/ic_repeat" /> android:src="@drawable/ic_repeat" />
<ImageView <ImageView
android:id="@+id/shuffle" android:id="@+id/shuffle"
android:tooltipText="@string/shuffle"
style="@style/QueueSheetOption" style="@style/QueueSheetOption"
android:src="@drawable/ic_shuffle" /> android:src="@drawable/ic_shuffle" />
<ImageView <ImageView
android:id="@+id/reverse" android:id="@+id/reverse"
android:tooltipText="@string/tooltip_reverse"
style="@style/QueueSheetOption" style="@style/QueueSheetOption"
android:src="@drawable/ic_reverse" /> android:src="@drawable/ic_reverse" />
<ImageView <ImageView
android:id="@+id/add_to_playlist" android:id="@+id/add_to_playlist"
android:tooltipText="@string/addToPlaylist"
style="@style/QueueSheetOption" style="@style/QueueSheetOption"
android:src="@drawable/ic_playlist_add" /> android:src="@drawable/ic_playlist_add" />
<ImageView <ImageView
android:id="@+id/sort" android:id="@+id/sort"
android:tooltipText="@string/tooltip_sort"
style="@style/QueueSheetOption" style="@style/QueueSheetOption"
android:src="@drawable/ic_sort" /> android:src="@drawable/ic_sort" />
<ImageView <ImageView
android:id="@+id/watch_positions_options" android:id="@+id/watch_positions_options"
android:tooltipText="@string/tooltip_watch_position"
style="@style/QueueSheetOption" style="@style/QueueSheetOption"
android:src="@drawable/ic_eye" /> android:src="@drawable/ic_eye" />
<ImageView <ImageView
android:id="@+id/clear_queue" android:id="@+id/clear_queue"
android:tooltipText="@string/tooltip_clear_queue"
style="@style/QueueSheetOption" style="@style/QueueSheetOption"
android:src="@drawable/ic_close" /> android:src="@drawable/ic_close" />
<ImageView <ImageView
android:id="@+id/dismiss"
android:tooltipText="@string/tooltip_dismiss"
style="@style/QueueSheetOption" style="@style/QueueSheetOption"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_weight="1" android:layout_weight="1"

View File

@ -486,4 +486,24 @@
<item quantity="one">%d new stream</item> <item quantity="one">%d new stream</item>
<item quantity="other">%d new streams</item> <item quantity="other">%d new streams</item>
</plurals> </plurals>
<!--Tooltips -->
<string name="tooltip_repeat">Repeat</string>
<string name="tooltip_reverse">Reverse</string>
<string name="tooltip_sort">Sort</string>
<string name="tooltip_watch_position">Watch position</string>
<string name="tooltip_clear_queue">Clear queue</string>
<string name="tooltip_dismiss">Dismiss</string>
<string name="tooltip_locked">Lock player</string>
<string name="tooltip_unlocked">Unlock player</string>
<string name="tooltip_sponsorblock">Toggle Sponsorblock</string>
<string name="tooltip_options">Options</string>
<string name="tooltip_minimize">Minimze</string>
<string name="tooltip_fullscreen">Fullscreen</string>
<string name="tooltip_close">Close</string>
<string name="tooltip_play">Play</string>
<string name="tooltip_filter">Filter</string>
<string name="tooltip_edit_groups">Edit groups</string>
<string name="tooltip_create_playlist">Create playlist</string>
<string name="tooltip_scroll_to_top">Scroll to top</string>
</resources> </resources>