Browse Source

Improve the RenderersDialog UI

merge-requests/1287/head
Nicolas Pomepuy 5 years ago
parent
commit
e2117554ff
  1. 13
      application/resources/src/main/res/drawable/ic_dialog_renderer.xml
  2. 37
      application/resources/src/main/res/drawable/ic_dialog_unknown.xml
  3. 12
      application/vlc-android/res/layout/dialog_renderers.xml
  4. 37
      application/vlc-android/res/layout/item_renderer.xml
  5. 23
      application/vlc-android/src/org/videolan/vlc/gui/dialogs/RenderersDialog.kt
  6. 2
      libvlc/src/org/videolan/libvlc/RendererItem.java

13
application/resources/src/main/res/drawable/ic_dialog_renderer.xml

@ -0,0 +1,13 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path
android:pathData="m19,28h8c1.108,0 2,-0.892 2,-2L29,10c0,-1.108 -0.892,-2 -2,-2L9,8c-1.108,0 -2,0.892 -2,2L7,16L9,16L9,10L27,10L27,26L19,26ZM7,18v2c4.4183,0 8,3.5817 8,8h2C17,22.4772 12.5229,18 7,18ZM7,22v2c2.2091,0 4,1.7909 4,4h2c0,-3.3137 -2.6863,-6 -6,-6zM7,26v2L9,28C9,26.8954 8.1046,26 7,26Z"
android:strokeLineJoin="round"
android:strokeWidth="1.5"
android:fillColor="?attr/font_default"
android:strokeColor="#00000000"
android:strokeLineCap="round"/>
</vector>

37
application/resources/src/main/res/drawable/ic_dialog_unknown.xml

@ -0,0 +1,37 @@
<!--
~ *************************************************************************
~ ic_browser_unknown_normal.xml
~ **************************************************************************
~ Copyright © 2020 VLC authors and VideoLAN
~ Author: Nicolas POMEPUY
~ This program is free software; you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation; either version 2 of the License, or
~ (at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with this program; if not, write to the Free Software
~ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
~ ***************************************************************************
~
~
-->
<vector android:height="36dp"
android:viewportHeight="24"
android:viewportWidth="24"
android:width="36dp"
xmlns:android="http://schemas.android.com/apk/res/android">
<path
android:fillAlpha="1"
android:fillColor="?attr/font_default"
android:fillType="nonZero"
android:pathData="m12,4c-0.5624,0 -1.1664,0.3892 -1.3333,0.8889l-4.4444,12.8889 -1.3333,0c-0.4909,0 -0.8889,0.3979 -0.8889,0.8889l0,1.3333c5.0909,-0.019 10.9091,-0.019 16,0l0,-1.3333c0,-0.491 -0.398,-0.8889 -0.8889,-0.8889l-1.3333,0 -4.4444,-12.8889C13.1616,4.3909 12.5624,4 12,4zM12,9.3612c1.4756,0 2.6667,1.1911 2.6667,2.6666 0,0.5867 -0.2289,1.1178 -0.6111,1.5 0,0 -0.3533,0.3811 -0.6111,0.6389 -0.4267,0.4266 -0.7222,1.0167 -0.7222,1.4167l-1.4444,0c0,-0.7378 0.4156,-1.3511 0.8333,-1.7778l0.8333,-0.8333c0.24,-0.24 0.3889,-0.58 0.3889,-0.9445 0,-0.7378 -0.5956,-1.3333 -1.3333,-1.3333 -0.7378,0 -1.3333,0.5955 -1.3333,1.3333l-1.3333,0c0,-1.4755 1.1911,-2.6666 2.6667,-2.6666zM11.1667,16.5278 L12.8333,16.5278 12.8333,18.2223 11.1667,18.2223 11.1667,16.5278z"
android:strokeColor="#00000000"
android:strokeWidth="1" />
</vector>

12
application/vlc-android/res/layout/dialog_renderers.xml

@ -30,6 +30,7 @@
android:id="@+id/renderers_list"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="16dp"
app:layout_constraintHeight_default="wrap"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
@ -39,16 +40,15 @@
<Button
android:id="@+id/renderers_disconnect"
style="@style/Widget.MaterialComponents.Button.TextButton.Dialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
style="@style/Widget.MaterialComponents.Button.TextButton.Dialog"
android:onClick="@{() -> holder.connect((RendererItem)null)}"
android:text="@string/renderers_disconnect"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:onClick="@{() -> holder.connect((RendererItem)null)}" />
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

37
application/vlc-android/res/layout/item_renderer.xml

@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<layout>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
@ -12,20 +14,37 @@
type="org.videolan.vlc.gui.dialogs.RenderersDialog.RendererClickhandler" />
</data>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp">
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/renderer_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/renderer_name"
android:layout_width="match_parent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@{renderer.displayName}"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:clickable="true"
android:focusable="true"
android:onClick="@{() -> clicHandler.connect(renderer)}" />
</LinearLayout>
android:onClick="@{() -> clicHandler.connect(renderer)}"
android:text="@{renderer.displayName}"
android:textSize="16sp"
android:textColor="?attr/font_default"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/renderer_icon"
app:layout_constraintTop_toTopOf="parent"
tools:text="Chromecast name" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

23
application/vlc-android/src/org/videolan/vlc/gui/dialogs/RenderersDialog.kt

@ -20,12 +20,16 @@
package org.videolan.vlc.gui.dialogs
import android.app.Dialog
import android.content.res.ColorStateList
import android.content.res.Resources
import android.os.Bundle
import android.util.TypedValue
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.Window
import androidx.core.content.ContextCompat
import androidx.core.widget.ImageViewCompat
import androidx.fragment.app.DialogFragment
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.coroutines.ExperimentalCoroutinesApi
@ -40,6 +44,7 @@ import org.videolan.vlc.gui.DiffUtilAdapter
import org.videolan.vlc.gui.helpers.SelectorViewHolder
import org.videolan.vlc.gui.helpers.UiTools
@ObsoleteCoroutinesApi
@ExperimentalCoroutinesApi
class RenderersDialog : DialogFragment() {
@ -76,13 +81,20 @@ class RenderersDialog : DialogFragment() {
dialogRenderersBinding.holder = clickHandler
dialogRenderersBinding.renderersList.layoutManager = LinearLayoutManager(view.context)
dialogRenderersBinding.renderersList.adapter = adapter
dialogRenderersBinding.renderersDisconnect.isEnabled = PlaybackService.hasRenderer()
dialogRenderersBinding.renderersDisconnect.setTextColor(ContextCompat.getColor(view.context, if (PlaybackService.hasRenderer()) R.color.orange800 else R.color.grey400))
dialogRenderersBinding.renderersDisconnect.visibility = if (PlaybackService.hasRenderer()) View.VISIBLE else View.GONE
adapter.update(renderers)
}
private inner class RendererAdapter : DiffUtilAdapter<RendererItem, SelectorViewHolder<ItemRendererBinding>>() {
val orangeColor by lazy {
val typedValue = TypedValue()
val theme: Resources.Theme = context!!.theme
theme.resolveAttribute(R.attr.colorPrimary, typedValue, true)
typedValue.data
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SelectorViewHolder<ItemRendererBinding> {
val binding = ItemRendererBinding.inflate(LayoutInflater.from(parent.context), parent, false)
binding.clicHandler = clickHandler
@ -91,8 +103,11 @@ class RenderersDialog : DialogFragment() {
override fun onBindViewHolder(holder: SelectorViewHolder<ItemRendererBinding>, position: Int) {
holder.binding.renderer = renderers[position]
if (renderers[position] == PlaybackService.renderer.value)
holder.binding.rendererName.setTextColor(ContextCompat.getColor(holder.itemView.context, R.color.orange800))
holder.binding.rendererIcon.setImageDrawable(ContextCompat.getDrawable(holder.binding.rendererIcon.context, if (renderers[position].type == "chromecast") R.drawable.ic_dialog_renderer else R.drawable.ic_dialog_unknown))
if (renderers[position] == PlaybackService.renderer.value) {
holder.binding.rendererName.setTextColor(orangeColor)
ImageViewCompat.setImageTintList(holder.binding.rendererIcon, ColorStateList.valueOf(orangeColor))
} else ImageViewCompat.setImageTintList(holder.binding.rendererIcon, null)
}
override fun getItemCount() = dataset.size

2
libvlc/src/org/videolan/libvlc/RendererItem.java

@ -14,7 +14,7 @@ public class RendererItem extends VLCObject<RendererItem.Event> {
final public String name;
final public String displayName;
final String type;
final public String type;
final String iconUrl;
final int flags;
private final long ref;

Loading…
Cancel
Save