diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt index 0294711ae3a2fbac99735a0be617b6f25aa9abd5..c064b344845ea3b689773993f5195e942f892ded 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt @@ -494,13 +494,15 @@ class BufferViewConfigFragment : ServiceBoundFragment() { .mapMap(BufferViewConfig::showSearch) .mapOrElse(false) - combineLatest(viewModel.bufferSearchTemporarilyVisible, bufferSearchPermanentlyVisible) + combineLatest(viewModel.bufferSearchTemporarilyVisible.distinctUntilChanged(), + bufferSearchPermanentlyVisible) .toLiveData().observe(this, Observer { (temporarily, permanently) -> val visible = temporarily || permanently val menuItem = chatListToolbar.menu.findItem(R.id.action_search) menuItem.isVisible = !permanently if (permanently) menuItem.isChecked = false + else menuItem.isChecked = temporarily bufferSearchContainer.visibleIf(visible) if (!visible) bufferSearch.setText("") @@ -516,6 +518,8 @@ class BufferViewConfigFragment : ServiceBoundFragment() { override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) = Unit }) + bufferSearchClear.setTooltip() + bufferSearchClear.setOnClickListener { bufferSearch.setText("") } diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt index adbb64e9abbec12872cce22e72c4fa8e56485f14..07551532306bc284b71c56a44d27a42003935654 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt @@ -157,6 +157,7 @@ class ChatlineFragment : ServiceBoundFragment() { editorHelper.replaceText(text) historyBottomSheet.state = BottomSheetBehavior.STATE_HIDDEN } + close.setTooltip() close.setOnClickListener { historyBottomSheet.state = BottomSheetBehavior.STATE_HIDDEN } @@ -204,6 +205,7 @@ class ChatlineFragment : ServiceBoundFragment() { send.setOnClickListener { send() } send.setTooltip() + tabComplete.setTooltip() tabComplete.visibleIf(autoCompleteSettings.button) tabComplete.setOnClickListener { autoCompleteHelper.autoComplete() diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashAdapter.kt index ecb0c1766d484cd88d3e383dd2b5166cf735d043..b64c470a5162bfe8945a0e4257a0392f6ef29caa 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashAdapter.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashAdapter.kt @@ -26,12 +26,12 @@ import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.recyclerview.widget.DiffUtil -import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import butterknife.BindView import butterknife.ButterKnife import de.kuschku.malheur.data.Report import de.kuschku.quasseldroid.R +import de.kuschku.quasseldroid.util.lists.ListAdapter import org.threeten.bp.Instant import org.threeten.bp.ZoneId import org.threeten.bp.format.DateTimeFormatter @@ -45,6 +45,15 @@ class CrashAdapter : ListAdapter<Pair<Report, Uri>, CrashAdapter.CrashViewHolder oldItem == newItem } ) { + private var onUpdateListener: ((List<Pair<Report, Uri>>) -> Unit)? = null + fun setOnUpdateListener(listener: ((List<Pair<Report, Uri>>) -> Unit)?) { + onUpdateListener = listener + } + + override fun onUpdateFinished(list: List<Pair<Report, Uri>>) { + onUpdateListener?.invoke(list) + } + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = CrashViewHolder( LayoutInflater.from(parent.context).inflate(R.layout.widget_crash, parent, false) ) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashFragment.kt index 8a6651949cb4647ed5e7d0ed15a0c04a540f4213..4ebec0f583473c835fbb284aaa1a0e48bb7ade13 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashFragment.kt @@ -24,6 +24,7 @@ import android.os.Bundle import android.os.Handler import android.os.HandlerThread import android.view.* +import android.widget.TextView import androidx.core.content.FileProvider import androidx.core.view.ViewCompat import androidx.recyclerview.widget.DividerItemDecoration @@ -37,6 +38,7 @@ import de.kuschku.malheur.data.Report import de.kuschku.quasseldroid.BuildConfig import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.util.helper.fromJson +import de.kuschku.quasseldroid.util.helper.visibleIf import java.io.File import javax.inject.Inject @@ -44,6 +46,9 @@ class CrashFragment : DaggerFragment() { @BindView(R.id.list) lateinit var list: RecyclerView + @BindView(R.id.crashes_empty) + lateinit var crashesEmpty: TextView + private lateinit var handlerThread: HandlerThread private lateinit var handler: Handler @@ -80,6 +85,10 @@ class CrashFragment : DaggerFragment() { list.addItemDecoration(DividerItemDecoration(context, LinearLayoutManager.VERTICAL)) ViewCompat.setNestedScrollingEnabled(list, false) + adapter?.setOnUpdateListener { + crashesEmpty.visibleIf(it.isEmpty()) + } + handler.post { val crashDir = this.crashDir val gson = this.gson diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistCertificateAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistCertificateAdapter.kt index d27f63c2d8514c8540da693f2d67616d31550947..2e64005e9bba2708505f5026fd5a7b8ff5a1e8a0 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistCertificateAdapter.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistCertificateAdapter.kt @@ -29,6 +29,7 @@ import butterknife.BindView import butterknife.ButterKnife import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.persistence.QuasselDatabase +import de.kuschku.quasseldroid.util.helper.setTooltip import de.kuschku.quasseldroid.util.helper.visibleIf class WhitelistCertificateAdapter : @@ -114,6 +115,7 @@ class WhitelistCertificateAdapter : clickListener?.invoke(it) } } + delete.setTooltip() } fun bind(item: QuasselDatabase.SslValidityWhitelistEntry) { diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistHostnameAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistHostnameAdapter.kt index 262d08e6f5d66c79e57a3e8b7a975f86b787c973..9f48103209db59c1fc0ef4d0f8478ccb2a454561 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistHostnameAdapter.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/whitelist/WhitelistHostnameAdapter.kt @@ -29,6 +29,7 @@ import butterknife.BindView import butterknife.ButterKnife import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.persistence.QuasselDatabase +import de.kuschku.quasseldroid.util.helper.setTooltip class WhitelistHostnameAdapter : RecyclerView.Adapter<WhitelistHostnameAdapter.WhitelistItemViewHolder>() { @@ -108,6 +109,7 @@ class WhitelistHostnameAdapter : clickListener?.invoke(it) } } + delete.setTooltip() } fun bind(item: QuasselDatabase.SslHostnameWhitelistEntry) { diff --git a/app/src/main/res/layout/fragment_chat_list.xml b/app/src/main/res/layout/fragment_chat_list.xml index 8c8a2b35435400aaead1c462f2c2eb7e2f5f8f14..a30ac1b15fcf3781ce2eb8b9cff675dd1fd3f71b 100644 --- a/app/src/main/res/layout/fragment_chat_list.xml +++ b/app/src/main/res/layout/fragment_chat_list.xml @@ -32,8 +32,7 @@ <androidx.appcompat.widget.Toolbar android:id="@+id/chatListToolbar" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:minHeight="?attr/actionBarSize" + android:layout_height="?attr/actionBarSize" app:contentInsetLeft="0dip" app:contentInsetStart="0dip" app:contentInsetStartWithNavigation="0dip" @@ -60,9 +59,9 @@ android:id="@+id/buffer_search_container" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_margin="6dp" app:cardBackgroundColor="?colorBackgroundSearch" - app:cardElevation="2dp" - android:layout_margin="6dp"> + app:cardElevation="2dp"> <LinearLayout android:layout_width="match_parent" @@ -77,8 +76,8 @@ android:background="@android:color/transparent" android:hint="@string/label_search_buffer" android:imeOptions="actionSearch" - android:inputType="textNoSuggestions" android:importantForAutofill="no" + android:inputType="textNoSuggestions" android:lines="1" android:minHeight="40dp" android:paddingLeft="8dp" @@ -92,6 +91,7 @@ android:layout_width="40dp" android:layout_height="match_parent" android:background="?selectableItemBackgroundBorderless" + android:contentDescription="@string/label_clear_search" app:srcCompat="@drawable/ic_close" app:tint="?colorTextSearchSecondary" /> diff --git a/app/src/main/res/layout/layout_editor.xml b/app/src/main/res/layout/layout_editor.xml index e5b4bc3769f90d3503552b14be7962258ed959a0..e21658b188387b1e6c4bf505afcaee7f36f41c08 100644 --- a/app/src/main/res/layout/layout_editor.xml +++ b/app/src/main/res/layout/layout_editor.xml @@ -46,6 +46,7 @@ android:padding="12dp" android:scaleType="fitXY" app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/ic_tab" app:tint="?attr/colorTextSecondary" /> @@ -90,6 +91,7 @@ android:padding="12dp" android:scaleType="fitXY" app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/ic_send" app:tint="?attr/colorAccent" tools:ignore="UnusedAttribute" /> diff --git a/app/src/main/res/layout/layout_history.xml b/app/src/main/res/layout/layout_history.xml index b8bbea59ed0e952e7bf78ca79be54535f8df570f..5f394dda6718676908cf23d8137d403144d8bd58 100644 --- a/app/src/main/res/layout/layout_history.xml +++ b/app/src/main/res/layout/layout_history.xml @@ -70,6 +70,7 @@ android:layout_height="48dp" android:layout_gravity="top|end" android:background="?attr/selectableItemBackgroundBorderless" + android:contentDescription="@string/label_close" android:padding="12dp" android:scaleType="fitXY" app:srcCompat="@drawable/ic_chevron_down" diff --git a/app/src/main/res/layout/preferences_crash.xml b/app/src/main/res/layout/preferences_crash.xml index a694d99a9c9c1cf117697bf98494468fa9890106..99885becac6143e09e4199dfb9485551f78e29cf 100644 --- a/app/src/main/res/layout/preferences_crash.xml +++ b/app/src/main/res/layout/preferences_crash.xml @@ -17,10 +17,32 @@ with this program. If not, see <http://www.gnu.org/licenses/>. --> -<androidx.recyclerview.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" - android:id="@+id/list" android:layout_width="match_parent" - android:layout_height="match_parent" - android:scrollbars="vertical" - tools:listitem="@layout/widget_crash" /> + android:layout_height="match_parent"> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/list" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:scrollbars="vertical" + tools:listitem="@layout/widget_crash" /> + + <TextView + android:id="@+id/crashes_empty" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:gravity="center" + android:minHeight="?android:attr/listPreferredItemHeightSmall" + android:paddingStart="?listPreferredItemPaddingLeft" + android:paddingLeft="?listPreferredItemPaddingLeft" + android:paddingEnd="?listPreferredItemPaddingRight" + android:paddingRight="?listPreferredItemPaddingRight" + android:text="@string/label_crashes_empty" + android:textColor="?colorTextSecondary" + android:textStyle="italic" + android:visibility="gone" + tools:visibility="visible" /> +</FrameLayout> diff --git a/app/src/main/res/layout/preferences_whitelist_certificate_item.xml b/app/src/main/res/layout/preferences_whitelist_certificate_item.xml index 676710f0b474741fbea9dd3f2d4dcbefc7465910..db1ec33982c8219272d49464c18b58a984f1bf74 100644 --- a/app/src/main/res/layout/preferences_whitelist_certificate_item.xml +++ b/app/src/main/res/layout/preferences_whitelist_certificate_item.xml @@ -66,6 +66,7 @@ android:layout_height="match_parent" android:layout_gravity="center_vertical" android:background="?selectableItemBackgroundBorderless" + android:contentDescription="@string/label_delete" android:paddingStart="32dp" android:paddingLeft="32dp" android:paddingEnd="?listPreferredItemPaddingRight" diff --git a/app/src/main/res/layout/preferences_whitelist_hostname_item.xml b/app/src/main/res/layout/preferences_whitelist_hostname_item.xml index ac81076ff3238cfcf59c203dbff430a5e31bb68d..de5d6daa838aee0d5cef5238176c072b74ff42f5 100644 --- a/app/src/main/res/layout/preferences_whitelist_hostname_item.xml +++ b/app/src/main/res/layout/preferences_whitelist_hostname_item.xml @@ -66,6 +66,7 @@ android:layout_height="match_parent" android:layout_gravity="center_vertical" android:background="?selectableItemBackgroundBorderless" + android:contentDescription="@string/label_delete" android:paddingStart="32dp" android:paddingLeft="32dp" android:paddingEnd="?listPreferredItemPaddingRight" diff --git a/app/src/main/res/layout/widget_core_account.xml b/app/src/main/res/layout/widget_core_account.xml index 71f360a7126da55bab35518690026263a3f2c4f1..35444de796708dedef16dcb421f7fcc8f0e820ec 100644 --- a/app/src/main/res/layout/widget_core_account.xml +++ b/app/src/main/res/layout/widget_core_account.xml @@ -84,6 +84,7 @@ android:layout_height="48dp" android:layout_gravity="center_vertical" android:background="?attr/selectableItemBackgroundBorderless" + android:contentDescription="@string/label_edit_core" android:tint="#757575" app:srcCompat="@drawable/ic_pencil" /> </LinearLayout> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9ecd98da9398a1d11e59c33476dc8d216ded3f69..f3af61d2db8d81c9eed84c0676854fd9882d6f69 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -36,6 +36,7 @@ <string name="label_cancel">Cancel</string> <string name="label_update_user_password">Update User/Password</string> <string name="label_certificates">Certificates</string> + <string name="label_clear_search">Clear Search</string> <string name="label_close">Close</string> <string name="label_colors_custom">Custom</string> <string name="label_colors_mirc">mIRC</string> @@ -44,12 +45,14 @@ <string name="label_contributors">Contributors</string> <string name="label_copy">Copy</string> <string name="label_crashes">Crashes</string> + <string name="label_crashes_empty">No crash reports found</string> <string name="label_shortcut">Shortcut</string> <string name="label_shortcut_long">Create Shortcut on Homescreen</string> <string name="label_delete">Delete</string> <string name="label_delete_all">Delete All</string> <string name="label_disconnect">Disconnect</string> - <string name="label_edit_nick">Edit nickname</string> + <string name="label_edit_core">Edit Account</string> + <string name="label_edit_nick">Edit Nickname</string> <string name="label_edit_topic">Edit Topic</string> <string name="label_edit_topic_long">Open dialog to change the channel topic</string> <string name="label_filter_messages">Filter Messages</string>