migrate profile fields to input layouts for Material3

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
Andy Scherzinger 2022-07-29 00:18:54 +02:00
parent 23d436f314
commit b34765ccf4
No known key found for this signature in database
GPG key ID: 6CADC7E3523C308B
4 changed files with 50 additions and 48 deletions

View file

@ -24,10 +24,8 @@ package com.nextcloud.talk.controllers
import android.app.Activity import android.app.Activity
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.content.res.ColorStateList
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.BitmapFactory import android.graphics.BitmapFactory
import android.graphics.Color
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.text.Editable import android.text.Editable
@ -43,7 +41,6 @@ import android.view.ViewGroup
import android.widget.Toast import android.widget.Toast
import androidx.annotation.ColorInt import androidx.annotation.ColorInt
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.DrawableCompat import androidx.core.graphics.drawable.DrawableCompat
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@ -764,22 +761,14 @@ class ProfileController : NewBaseController(R.layout.controller_profile) {
DrawableCompat.setTint(holder.binding.icon.drawable, mTintColor) DrawableCompat.setTint(holder.binding.icon.drawable, mTintColor)
if (!TextUtils.isEmpty(item.text) || controller.edit) { if (!TextUtils.isEmpty(item.text) || controller.edit) {
holder.binding.userInfoDetailContainer.visibility = View.VISIBLE holder.binding.userInfoDetailContainer.visibility = View.VISIBLE
if (controller.activity != null) { controller.viewThemeUtils.colorTextInputLayout(holder.binding.userInfoInputLayout)
holder.binding.userInfoEditText.setTextColor(
ContextCompat.getColor(
controller.activity!!,
R.color.conversation_item_header
)
)
}
if (controller.edit && if (controller.edit &&
controller.editableFields.contains(item.field.toString().lowercase()) controller.editableFields.contains(item.field.toString().lowercase())
) { ) {
holder.binding.userInfoEditText.isEnabled = true holder.binding.userInfoEditTextEdit.isEnabled = true
holder.binding.userInfoEditText.isFocusableInTouchMode = true holder.binding.userInfoEditTextEdit.isFocusableInTouchMode = true
holder.binding.userInfoEditText.isEnabled = true holder.binding.userInfoEditTextEdit.isEnabled = true
holder.binding.userInfoEditText.isCursorVisible = true holder.binding.userInfoEditTextEdit.isCursorVisible = true
holder.binding.userInfoEditText.backgroundTintList = ColorStateList.valueOf(mTintColor)
holder.binding.scope.setOnClickListener { holder.binding.scope.setOnClickListener {
ScopeDialog( ScopeDialog(
controller.activity!!, controller.activity!!,
@ -790,11 +779,10 @@ class ProfileController : NewBaseController(R.layout.controller_profile) {
} }
holder.binding.scope.alpha = HIGH_EMPHASIS_ALPHA holder.binding.scope.alpha = HIGH_EMPHASIS_ALPHA
} else { } else {
holder.binding.userInfoEditText.isEnabled = false holder.binding.userInfoEditTextEdit.isEnabled = false
holder.binding.userInfoEditText.isFocusableInTouchMode = false holder.binding.userInfoEditTextEdit.isFocusableInTouchMode = false
holder.binding.userInfoEditText.isEnabled = false holder.binding.userInfoEditTextEdit.isEnabled = false
holder.binding.userInfoEditText.isCursorVisible = false holder.binding.userInfoEditTextEdit.isCursorVisible = false
holder.binding.userInfoEditText.backgroundTintList = ColorStateList.valueOf(Color.TRANSPARENT)
holder.binding.scope.setOnClickListener(null) holder.binding.scope.setOnClickListener(null)
holder.binding.scope.alpha = MEDIUM_EMPHASIS_ALPHA holder.binding.scope.alpha = MEDIUM_EMPHASIS_ALPHA
} }
@ -807,19 +795,19 @@ class ProfileController : NewBaseController(R.layout.controller_profile) {
holder: ViewHolder, holder: ViewHolder,
item: UserInfoDetailsItem item: UserInfoDetailsItem
) { ) {
holder.binding.userInfoEditText.setText(item.text) holder.binding.userInfoEditTextEdit.setText(item.text)
holder.binding.userInfoEditText.hint = item.hint holder.binding.userInfoInputLayout.hint = item.hint
holder.binding.userInfoEditText.addTextChangedListener(object : TextWatcher { holder.binding.userInfoEditTextEdit.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) { override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {
// unused atm // unused atm
} }
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) { override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
if (controller.edit) { if (controller.edit) {
displayList!![holder.adapterPosition].text = holder.binding.userInfoEditText.text.toString() displayList!![holder.adapterPosition].text = holder.binding.userInfoEditTextEdit.text.toString()
} else { } else {
filteredDisplayList[holder.adapterPosition].text = filteredDisplayList[holder.adapterPosition].text =
holder.binding.userInfoEditText.text.toString() holder.binding.userInfoEditTextEdit.text.toString()
} }
} }

View file

@ -29,7 +29,8 @@
<RelativeLayout <RelativeLayout
android:id="@+id/avatarContainer" android:id="@+id/avatarContainer"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:paddingBottom="@dimen/standard_padding">
<com.facebook.drawee.view.SimpleDraweeView <com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/avatar_image" android:id="@+id/avatar_image"

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?><!-- <?xml version="1.0" encoding="utf-8"?><!--
Nextcloud Android client application Nextcloud Android client application
Copyright (C) 2018-2021 Andy Scherzinger Copyright (C) 2018-2022 Andy Scherzinger
Copyright (C) 2018 Nextcloud Copyright (C) 2018 Nextcloud
This program is free software; you can redistribute it and/or This program is free software; you can redistribute it and/or
@ -22,8 +22,10 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/user_info_detail_container" android:id="@+id/user_info_detail_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/iconized_single_line_item_layout_height" android:layout_height="wrap_content"
android:orientation="horizontal"> android:minHeight="@dimen/min_size_clickable_area"
android:orientation="horizontal"
android:paddingBottom="@dimen/standard_padding">
<ImageView <ImageView
android:id="@+id/icon" android:id="@+id/icon"
@ -36,34 +38,44 @@
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/ic_phone" /> tools:src="@drawable/ic_phone" />
<EditText <com.google.android.material.textfield.TextInputLayout
android:id="@+id/user_info_edit_text" android:id="@+id/user_info_input_layout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="48dp" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/standard_double_margin" android:layout_marginStart="@dimen/standard_margin"
android:layout_marginEnd="@dimen/standard_margin" android:minHeight="@dimen/min_size_clickable_area"
android:autofillHints="none" app:boxStrokeColor="@color/colorPrimary"
android:ellipsize="end" app:errorTextAppearance="@style/ErrorAppearance"
android:inputType="text" app:hintTextColor="@color/colorPrimary"
android:maxLines="1"
android:textSize="@dimen/two_line_primary_text_size"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/scope" app:layout_constraintEnd_toStartOf="@id/scope"
app:layout_constraintStart_toEndOf="@id/icon" app:layout_constraintStart_toEndOf="@id/icon"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent">
tools:ignore="LabelFor"
<com.nextcloud.talk.utils.EmojiTextInputEditText
android:id="@+id/user_info_edit_text_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeOptions="actionNext"
android:inputType="text"
android:singleLine="true"
android:textAlignment="viewStart"
tools:text="+49 123 456 789 12" /> tools:text="+49 123 456 789 12" />
</com.google.android.material.textfield.TextInputLayout>
<ImageView <ImageView
android:id="@+id/scope" android:id="@+id/scope"
android:layout_width="48dp" android:layout_width="@dimen/min_size_clickable_area"
android:layout_height="48dp" android:layout_height="@dimen/min_size_clickable_area"
android:padding="12dp" android:layout_marginStart="@dimen/standard_quarter_margin"
android:layout_marginEnd="4dp" android:layout_marginEnd="@dimen/standard_quarter_margin"
android:contentDescription="@string/scope_toggle" android:contentDescription="@string/scope_toggle"
android:padding="@dimen/scope_padding"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/user_info_edit_text" app:layout_constraintStart_toEndOf="@id/user_info_input_layout"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/ic_link" /> tools:src="@drawable/ic_link" />

View file

@ -72,6 +72,7 @@
<dimen name="activity_row_layout_height">48dp</dimen> <dimen name="activity_row_layout_height">48dp</dimen>
<dimen name="reaction_bottom_sheet_layout_size">40dp</dimen> <dimen name="reaction_bottom_sheet_layout_size">40dp</dimen>
<dimen name="standard_eighth_margin">2dp</dimen> <dimen name="standard_eighth_margin">2dp</dimen>
<dimen name="scope_padding">12dp</dimen>
<dimen name="default_checkbox_dialog_start_margin">18dp</dimen> <dimen name="default_checkbox_dialog_start_margin">18dp</dimen>