Bringing my xml dialog styling from my 'Standardise message deletion' branch

This commit is contained in:
ThomasSession 2024-08-30 10:17:04 +10:00
parent 706d1aadd8
commit 86cab0e11e
16 changed files with 111 additions and 38 deletions

View File

@ -9,12 +9,14 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
import android.widget.ArrayAdapter
import android.widget.Button import android.widget.Button
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.LinearLayout.VERTICAL import android.widget.LinearLayout.VERTICAL
import android.widget.Space import android.widget.Space
import android.widget.TextView import android.widget.TextView
import androidx.annotation.AttrRes import androidx.annotation.AttrRes
import androidx.annotation.ColorRes
import androidx.annotation.LayoutRes import androidx.annotation.LayoutRes
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.annotation.StyleRes import androidx.annotation.StyleRes
@ -32,9 +34,10 @@ annotation class DialogDsl
@DialogDsl @DialogDsl
class SessionDialogBuilder(val context: Context) { class SessionDialogBuilder(val context: Context) {
val dp20 = toPx(20, context.resources) private val dp8 = toPx(8, context.resources)
val dp40 = toPx(40, context.resources) private val dp20 = toPx(20, context.resources)
val dp60 = toPx(60, context.resources) private val dp40 = toPx(40, context.resources)
private val dp60 = toPx(60, context.resources)
private val dialogBuilder: AlertDialog.Builder = AlertDialog.Builder(context) private val dialogBuilder: AlertDialog.Builder = AlertDialog.Builder(context)
@ -59,7 +62,7 @@ class SessionDialogBuilder(val context: Context) {
// Main title entry point // Main title entry point
fun title(text: String?) { fun title(text: String?) {
text(text, R.style.TextAppearance_AppCompat_Title) { setPadding(dp20, 0, dp20, 0) } text(text, R.style.TextAppearance_Session_Dialog_Title) { setPadding(dp20, 0, dp20, 0) }
} }
// Convenience assessor for title that takes a string resource // Convenience assessor for title that takes a string resource
@ -68,18 +71,18 @@ class SessionDialogBuilder(val context: Context) {
// Convenience accessor for title that takes a CharSequence // Convenience accessor for title that takes a CharSequence
fun title(text: CharSequence?) = title(text?.toString()) fun title(text: CharSequence?) = title(text?.toString())
fun text(@StringRes id: Int, style: Int = 0) = text(context.getString(id), style) fun text(@StringRes id: Int, style: Int? = null) = text(context.getString(id), style)
fun text(text: CharSequence?, @StyleRes style: Int = 0) { fun text(text: CharSequence?, @StyleRes style: Int? = null) {
text(text, style) { text(text, style) {
layoutParams = LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT) layoutParams = LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT)
.apply { updateMargins(dp40, 0, dp40, 0) } .apply { updateMargins(dp40, 0, dp40, 0) }
} }
} }
private fun text(text: CharSequence?, @StyleRes style: Int, modify: TextView.() -> Unit) { private fun text(text: CharSequence?, @StyleRes style: Int? = null, modify: TextView.() -> Unit) {
text ?: return text ?: return
TextView(context, null, 0, style) TextView(context, null, 0, style ?: R.style.TextAppearance_Session_Dialog_Message)
.apply { .apply {
setText(text) setText(text)
textAlignment = View.TEXT_ALIGNMENT_CENTER textAlignment = View.TEXT_ALIGNMENT_CENTER
@ -87,7 +90,7 @@ class SessionDialogBuilder(val context: Context) {
}.let(topView::addView) }.let(topView::addView)
Space(context).apply { Space(context).apply {
layoutParams = LinearLayout.LayoutParams(0, dp20) layoutParams = LinearLayout.LayoutParams(0, dp8)
}.let(topView::addView) }.let(topView::addView)
} }
@ -104,17 +107,31 @@ class SessionDialogBuilder(val context: Context) {
fun singleChoiceItems( fun singleChoiceItems(
options: Collection<String>, options: Collection<String>,
currentSelected: Int = 0, currentSelected: Int = 0,
dismissOnRadioSelect: Boolean = true,
onSelect: (Int) -> Unit onSelect: (Int) -> Unit
) = singleChoiceItems(options.toTypedArray(), currentSelected, onSelect) ) = singleChoiceItems(
options.toTypedArray(),
currentSelected,
dismissOnRadioSelect,
onSelect
)
fun singleChoiceItems( fun singleChoiceItems(
options: Array<String>, options: Array<String>,
currentSelected: Int = 0, currentSelected: Int = 0,
dismissOnRadioSelect: Boolean = true,
onSelect: (Int) -> Unit onSelect: (Int) -> Unit
): AlertDialog.Builder = dialogBuilder.setSingleChoiceItems( ): AlertDialog.Builder{
options, val adapter = ArrayAdapter<CharSequence>(context, R.layout.view_dialog_single_choice_item, options)
currentSelected
) { dialog, it -> onSelect(it); dialog.dismiss() } return dialogBuilder.setSingleChoiceItems(
adapter,
currentSelected
) { dialog, it ->
onSelect(it)
if(dismissOnRadioSelect) dialog.dismiss()
}
}
fun items( fun items(
options: Array<String>, options: Array<String>,
@ -141,10 +158,14 @@ class SessionDialogBuilder(val context: Context) {
@StringRes text: Int, @StringRes text: Int,
@StringRes contentDescriptionRes: Int = text, @StringRes contentDescriptionRes: Int = text,
@StyleRes style: Int = R.style.Widget_Session_Button_Dialog_UnimportantText, @StyleRes style: Int = R.style.Widget_Session_Button_Dialog_UnimportantText,
@ColorRes textColor: Int? = null,
dismiss: Boolean = true, dismiss: Boolean = true,
listener: (() -> Unit) = {} listener: (() -> Unit) = {}
) = Button(context, null, 0, style).apply { ) = Button(context, null, 0, style).apply {
setText(text) setText(text)
textColor?.let{
setTextColor(it)
}
contentDescription = resources.getString(contentDescriptionRes) contentDescription = resources.getString(contentDescriptionRes)
layoutParams = LinearLayout.LayoutParams(WRAP_CONTENT, dp60, 1f) layoutParams = LinearLayout.LayoutParams(WRAP_CONTENT, dp60, 1f)
setOnClickListener { setOnClickListener {

View File

@ -63,7 +63,6 @@ class ClearAllDataDialog : DialogFragment() {
binding.recyclerView.apply { binding.recyclerView.apply {
itemAnimator = null itemAnimator = null
adapter = optionAdapter adapter = optionAdapter
addItemDecoration(DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL))
setHasFixedSize(true) setHasFixedSize(true)
} }
optionAdapter.submitList(listOf(device, network)) optionAdapter.submitList(listOf(device, network))

View File

@ -4,7 +4,7 @@
android:shape="rectangle"> android:shape="rectangle">
<solid android:color="?backgroundSecondary" /> <solid android:color="?backgroundSecondary" />
<stroke android:width="1dp" android:color="?elementBorderColor" />
<corners android:radius="?dialogCornerRadius" /> <corners android:radius="?dialogCornerRadius" />
</shape> </shape>

View File

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="0dp"
android:insetTop="16dp"
android:insetRight="0dp"
android:insetBottom="16dp">
<shape android:shape="rectangle">
<corners android:radius="2dp" />
<solid android:color="?backgroundSecondary" />
</shape>
</inset>

View File

@ -0,0 +1,13 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="27dp"
android:height="27dp"
android:viewportWidth="27"
android:viewportHeight="27">
<path
android:pathData="M13.567,13.714m-10,0a10,10 0,1 1,20 0a10,10 0,1 1,-20 0"
android:fillColor="?accentColor"/>
<path
android:strokeWidth="1"
android:pathData="M13.567,13.713m-12.5,0a12.5,12.5 0,1 1,25 0a12.5,12.5 0,1 1,-25 0"
android:strokeColor="?textColorAlert"/>
</vector>

View File

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="27dp"
android:height="27dp"
android:viewportWidth="27"
android:viewportHeight="27">
<path
android:strokeWidth="1"
android:pathData="M13.567,13.713m-12.5,0a12.5,12.5 0,1 1,25 0a12.5,12.5 0,1 1,-25 0"
android:fillColor="#00000000"
android:strokeColor="?textColorAlert"/>
</vector>

View File

@ -2,10 +2,10 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true"> <item android:state_selected="true">
<layer-list> <layer-list>
<item android:right="4dp" <item android:right="3dp"
android:top="4dp" android:top="3dp"
android:left="4dp" android:left="3dp"
android:bottom="4dp"> android:bottom="3dp">
<shape <shape
android:shape="oval"> android:shape="oval">
<solid android:color="?colorAccent" /> <solid android:color="?colorAccent" />

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<shape android:shape="oval" <shape android:shape="oval"
xmlns:android="http://schemas.android.com/apk/res/android"> xmlns:android="http://schemas.android.com/apk/res/android">
<stroke android:width="1dp" android:color="?android:textColorPrimary"/> <stroke android:width="1dp" android:color="?textColorAlert"/>
</shape> </shape>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true"
android:drawable="@drawable/ic_radio_selected" /> <!-- checked -->
<item android:state_selected="true"
android:drawable="@drawable/ic_radio_selected" /> <!-- selected -->
<item
android:drawable="@drawable/ic_radio_unselected" /> <!-- unchecked-->
</selector>

View File

@ -13,7 +13,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/clearDataAll" android:text="@string/clearDataAll"
android:textColor="?android:textColorPrimary" android:textColor="?android:textColorPrimary"
android:textStyle="bold" style="@style/TextAppearance.Session.Dialog.Title"
android:textSize="@dimen/medium_font_size" /> android:textSize="@dimen/medium_font_size" />
<TextView <TextView
@ -22,17 +22,17 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="20dp" android:layout_marginStart="20dp"
android:layout_marginEnd="20dp" android:layout_marginEnd="20dp"
android:layout_marginTop="@dimen/large_spacing" android:layout_marginTop="@dimen/small_spacing"
android:text="@string/clearDataAllDescription" android:text="@string/clearDataAllDescription"
android:textAlignment="center" android:textAlignment="center"
android:textColor="?android:textColorPrimary" android:textColor="?android:textColorPrimary"
android:textSize="@dimen/small_font_size" /> style="@style/TextAppearance.Session.Dialog.Message" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView" android:id="@+id/recyclerView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginVertical="@dimen/small_spacing" android:layout_marginTop="@dimen/small_spacing"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="2" tools:itemCount="2"
tools:listitem="@layout/item_selectable"/> tools:listitem="@layout/item_selectable"/>

View File

@ -5,7 +5,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?selectableItemBackground" android:background="?selectableItemBackground"
android:paddingHorizontal="@dimen/medium_spacing" android:paddingHorizontal="@dimen/large_spacing"
android:paddingVertical="@dimen/small_spacing"> android:paddingVertical="@dimen/small_spacing">
<TextView <TextView

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checkMark="@drawable/radio_states"
android:gravity="center_vertical"
android:minHeight="@dimen/dialog_radio_height"
android:paddingEnd="@dimen/large_spacing"
android:paddingStart="@dimen/large_spacing"
android:textAppearance="@style/TextAppearance.Session.Dialog.Message"/>

View File

@ -34,6 +34,7 @@
<attr name="danger" format="reference|color"/> <attr name="danger" format="reference|color"/>
<attr name="backgroundSecondary" format="reference|color"/> <attr name="backgroundSecondary" format="reference|color"/>
<attr name="prominentButtonColor" format="reference|color"/> <attr name="prominentButtonColor" format="reference|color"/>
<attr name="textColorAlert" format="reference|color"/>
<attr name="elementBorderColor" format="reference|color"/> <attr name="elementBorderColor" format="reference|color"/>
<attr name="conversation_background" format="reference|color"/> <attr name="conversation_background" format="reference|color"/>
<attr name="conversation_editor_background" format="reference|color"/> <attr name="conversation_editor_background" format="reference|color"/>

View File

@ -9,6 +9,10 @@
<dimen name="large_font_size">20sp</dimen> <dimen name="large_font_size">20sp</dimen>
<dimen name="very_large_font_size">26sp</dimen> <dimen name="very_large_font_size">26sp</dimen>
<!-- Need to be temporary added until the theming is properly centralised in Compose -->
<dimen name="small2_font_size">16sp</dimen>
<dimen name="medium2_font_size">18sp</dimen>
<!-- Element Sizes --> <!-- Element Sizes -->
<dimen name="dialog_button_height">60dp</dimen> <dimen name="dialog_button_height">60dp</dimen>
<dimen name="small_button_height">34dp</dimen> <dimen name="small_button_height">34dp</dimen>
@ -36,6 +40,7 @@
<dimen name="input_bar_height">56dp</dimen> <dimen name="input_bar_height">56dp</dimen>
<dimen name="input_bar_button_collapsed_size">40dp</dimen> <dimen name="input_bar_button_collapsed_size">40dp</dimen>
<dimen name="input_bar_button_expanded_size">48dp</dimen> <dimen name="input_bar_button_expanded_size">48dp</dimen>
<dimen name="dialog_radio_height">42dp</dimen>
<!-- Distances --> <!-- Distances -->
<dimen name="very_small_spacing">4dp</dimen> <dimen name="very_small_spacing">4dp</dimen>
@ -120,6 +125,6 @@
<dimen name="react_with_any_emoji_bottom_sheet_dialog_fragment_tabs_height">40dp</dimen> <dimen name="react_with_any_emoji_bottom_sheet_dialog_fragment_tabs_height">40dp</dimen>
<dimen name="max_text_width">200dp</dimen> <dimen name="max_text_width">200dp</dimen>
<dimen name="radial_size">34dp</dimen> <dimen name="radial_size">34dp</dimen>
<dimen name="small_radial_size">24dp</dimen> <dimen name="small_radial_size">26dp</dimen>
</resources> </resources>

View File

@ -23,6 +23,15 @@
<item name="android:textSize">@dimen/very_large_font_size</item> <item name="android:textSize">@dimen/very_large_font_size</item>
</style> </style>
<style name="TextAppearance.Session.Dialog.Title" parent="TextAppearance.AppCompat.Title">
<item name="android:textStyle">bold</item>
<item name="android:textSize">@dimen/medium2_font_size</item>
</style>
<style name="TextAppearance.Session.Dialog.Message" parent="TextAppearance.AppCompat.Body1">
<item name="android:textSize">@dimen/small2_font_size</item>
</style>
<style name="ThemeOverlay.Session.AlertDialog" parent="ThemeOverlay.AppCompat.Dialog.Alert"> <style name="ThemeOverlay.Session.AlertDialog" parent="ThemeOverlay.AppCompat.Dialog.Alert">
<item name="android:windowBackground">@drawable/default_dialog_background</item> <item name="android:windowBackground">@drawable/default_dialog_background</item>
<item name="android:colorBackground">?backgroundSecondary</item> <item name="android:colorBackground">?backgroundSecondary</item>

View File

@ -317,6 +317,7 @@
<item name="android:textColorTertiary">@color/classic_dark_5</item> <item name="android:textColorTertiary">@color/classic_dark_5</item>
<item name="android:textColor">?android:textColorPrimary</item> <item name="android:textColor">?android:textColorPrimary</item>
<item name="android:textColorHint">@color/gray27</item> <item name="android:textColorHint">@color/gray27</item>
<item name="textColorAlert">@color/classic_dark_6</item>
<item name="android:windowBackground">?colorPrimary</item> <item name="android:windowBackground">?colorPrimary</item>
<item name="android:navigationBarColor">@color/navigation_bar</item> <item name="android:navigationBarColor">@color/navigation_bar</item>
<item name="bottomSheetDialogTheme">@style/Classic.Dark.BottomSheet</item> <item name="bottomSheetDialogTheme">@style/Classic.Dark.BottomSheet</item>
@ -399,6 +400,7 @@
<item name="android:textColorTertiary">@color/classic_light_1</item> <item name="android:textColorTertiary">@color/classic_light_1</item>
<item name="android:textColor">?android:textColorPrimary</item> <item name="android:textColor">?android:textColorPrimary</item>
<item name="android:textColorHint">@color/gray27</item> <item name="android:textColorHint">@color/gray27</item>
<item name="textColorAlert">@color/classic_light_0</item>
<item name="android:windowBackground">?colorPrimary</item> <item name="android:windowBackground">?colorPrimary</item>
<item name="android:navigationBarColor">@color/classic_light_navigation_bar</item> <item name="android:navigationBarColor">@color/classic_light_navigation_bar</item>
<item name="colorCellBackground">@color/classic_light_6</item> <item name="colorCellBackground">@color/classic_light_6</item>
@ -489,6 +491,7 @@
<item name="android:textColorTertiary">@color/ocean_dark_5</item> <item name="android:textColorTertiary">@color/ocean_dark_5</item>
<item name="android:textColor">?android:textColorPrimary</item> <item name="android:textColor">?android:textColorPrimary</item>
<item name="android:textColorHint">@color/ocean_dark_5</item> <item name="android:textColorHint">@color/ocean_dark_5</item>
<item name="textColorAlert">@color/ocean_dark_7</item>
<item name="android:windowBackground">?colorPrimary</item> <item name="android:windowBackground">?colorPrimary</item>
<item name="android:navigationBarColor">@color/navigation_bar</item> <item name="android:navigationBarColor">@color/navigation_bar</item>
<item name="colorCellBackground">@color/ocean_dark_3</item> <item name="colorCellBackground">@color/ocean_dark_3</item>
@ -574,6 +577,7 @@
<item name="android:textColorTertiary">@color/ocean_light_2</item> <item name="android:textColorTertiary">@color/ocean_light_2</item>
<item name="android:textColor">?android:textColorPrimary</item> <item name="android:textColor">?android:textColorPrimary</item>
<item name="android:textColorHint">@color/ocean_light_6</item> <item name="android:textColorHint">@color/ocean_light_6</item>
<item name="textColorAlert">@color/ocean_light_0</item>
<item name="android:navigationBarColor">@color/ocean_light_navigation_bar</item> <item name="android:navigationBarColor">@color/ocean_light_navigation_bar</item>
<item name="android:windowBackground">?colorPrimary</item> <item name="android:windowBackground">?colorPrimary</item>
<item name="colorCellBackground">@color/ocean_light_5</item> <item name="colorCellBackground">@color/ocean_light_5</item>
@ -680,6 +684,7 @@
<item name="prominentButtonColor">?colorAccent</item> <item name="prominentButtonColor">?colorAccent</item>
<item name="elementBorderColor">@color/classic_dark_3</item> <item name="elementBorderColor">@color/classic_dark_3</item>
<item name="danger">@color/danger_dark</item> <item name="danger">@color/danger_dark</item>
<item name="textColorAlert">@color/classic_dark_6</item>
<!-- Home screen --> <!-- Home screen -->
<item name="searchBackgroundColor">#1B1B1B</item> <item name="searchBackgroundColor">#1B1B1B</item>