Skip to content
Snippets Groups Projects
Commit 043375de authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Implement highlight rule management UI

parent defcaeac
No related branches found
No related tags found
No related merge requests found
Pipeline #
Showing
with 927 additions and 42 deletions
......@@ -18,6 +18,7 @@ import de.kuschku.libquassel.quassel.syncables.Network
import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.ui.coresettings.chatlist.ChatlistCreateActivity
import de.kuschku.quasseldroid.ui.coresettings.chatlist.ChatlistEditActivity
import de.kuschku.quasseldroid.ui.coresettings.highlightlist.HighlightListActivity
import de.kuschku.quasseldroid.ui.coresettings.identity.IdentityCreateActivity
import de.kuschku.quasseldroid.ui.coresettings.identity.IdentityEditActivity
import de.kuschku.quasseldroid.ui.coresettings.ignorelist.IgnoreListActivity
......@@ -131,6 +132,10 @@ class CoreSettingsFragment : ServiceBoundFragment() {
IgnoreListActivity.launch(requireContext())
}
highlightlist.setOnClickListener {
HighlightListActivity.launch(requireContext())
}
newNetwork.setOnClickListener {
NetworkCreateActivity.launch(requireContext())
}
......
package de.kuschku.quasseldroid.ui.coresettings.highlightlist
import android.support.v7.widget.RecyclerView
import android.support.v7.widget.helper.ItemTouchHelper
class DragSortItemTouchHelperCallback(private val adapter: HighlightRuleAdapter) :
ItemTouchHelper.Callback() {
override fun isLongPressDragEnabled() = true
override fun isItemViewSwipeEnabled() = true
override fun getMovementFlags(recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder): Int {
val dragFlags = ItemTouchHelper.UP or ItemTouchHelper.DOWN
val swipeFlags = ItemTouchHelper.START or ItemTouchHelper.END
return makeMovementFlags(dragFlags, swipeFlags)
}
override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder): Boolean {
adapter.move(viewHolder.adapterPosition, target.adapterPosition)
return true
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
adapter.remove(viewHolder.adapterPosition)
}
}
package de.kuschku.quasseldroid.ui.coresettings.highlightlist
import android.app.Activity
import android.arch.lifecycle.Observer
import android.content.Intent
import android.os.Bundle
import android.support.v7.widget.DefaultItemAnimator
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import android.support.v7.widget.SwitchCompat
import android.support.v7.widget.helper.ItemTouchHelper
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.Spinner
import butterknife.BindView
import butterknife.ButterKnife
import de.kuschku.libquassel.quassel.syncables.HighlightRuleManager
import de.kuschku.libquassel.quassel.syncables.interfaces.IHighlightRuleManager
import de.kuschku.libquassel.util.Optional
import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment
import de.kuschku.quasseldroid.ui.coresettings.highlightrule.HighlightRuleActivity
import de.kuschku.quasseldroid.util.helper.toLiveData
class HighlightListFragment : SettingsFragment(), SettingsFragment.Savable,
SettingsFragment.Changeable {
@BindView(R.id.highlight_nick_type)
lateinit var highlightNickType: Spinner
@BindView(R.id.is_case_sensitive)
lateinit var isCaseSensitive: SwitchCompat
@BindView(R.id.highlight_rules)
lateinit var rules: RecyclerView
@BindView(R.id.new_highlight_rule)
lateinit var newHighlightRule: Button
@BindView(R.id.highlight_ignore_rules)
lateinit var ignoreRules: RecyclerView
@BindView(R.id.new_highlight_ignore_rule)
lateinit var newHighlightIgnoreRule: Button
private var ruleManager: Pair<HighlightRuleManager, HighlightRuleManager>? = null
private lateinit var rulesHelper: ItemTouchHelper
private lateinit var ignoreRulesHelper: ItemTouchHelper
private val rulesAdapter = HighlightRuleAdapter(::ruleClick, ::startRuleDrag)
private val ignoreRulesAdapter = HighlightRuleAdapter(::ignoreRuleClick, ::startIgnoreRuleDrag)
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
return super.onCreateView(inflater, container, savedInstanceState)
val view = inflater.inflate(R.layout.settings_highlightlist, container, false)
ButterKnife.bind(this, view)
rules.adapter = rulesAdapter
rules.layoutManager = LinearLayoutManager(requireContext())
rules.itemAnimator = DefaultItemAnimator()
rulesHelper = ItemTouchHelper(DragSortItemTouchHelperCallback(rulesAdapter))
rulesHelper.attachToRecyclerView(rules)
ignoreRules.adapter = ignoreRulesAdapter
ignoreRules.layoutManager = LinearLayoutManager(requireContext())
ignoreRules.itemAnimator = DefaultItemAnimator()
ignoreRulesHelper = ItemTouchHelper(DragSortItemTouchHelperCallback(ignoreRulesAdapter))
ignoreRulesHelper.attachToRecyclerView(ignoreRules)
newHighlightRule.setOnClickListener {
startActivityForResult(
HighlightRuleActivity.intent(requireContext(), ignore = false),
REQUEST_CREATE_RULE
)
}
newHighlightIgnoreRule.setOnClickListener {
startActivityForResult(
HighlightRuleActivity.intent(requireContext(), ignore = true),
REQUEST_CREATE_RULE
)
}
val highlightNickTypeAdapter = HighlightNickTypeAdapter(listOf(
HighlightNickTypeItem(
value = IHighlightRuleManager.HighlightNickType.AllNicks,
name = R.string.settings_highlightlist_highlight_nick_all_nicks
),
HighlightNickTypeItem(
value = IHighlightRuleManager.HighlightNickType.CurrentNick,
name = R.string.settings_highlightlist_highlight_nick_current_nick
),
HighlightNickTypeItem(
value = IHighlightRuleManager.HighlightNickType.NoNick,
name = R.string.settings_highlightlist_highlight_nick_none
)
))
highlightNickType.adapter = highlightNickTypeAdapter
viewModel.highlightRuleManager
.filter(Optional<HighlightRuleManager>::isPresent)
.map(Optional<HighlightRuleManager>::get)
.toLiveData().observe(this, Observer {
if (it != null) {
if (this.ruleManager == null) {
this.ruleManager = Pair(it, it.copy())
this.ruleManager?.let { (_, data) ->
rulesAdapter.list = data.highlightRuleList().filter { it.isInverse == false }
ignoreRulesAdapter.list = data.highlightRuleList().filter { it.isInverse == true }
highlightNickType.setSelection(highlightNickTypeAdapter.indexOf(data.highlightNick())
?: 0)
isCaseSensitive.isChecked = data.nicksCaseSensitive()
}
}
}
})
return view
}
override fun hasChanged(): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
private fun ruleClick(rule: HighlightRuleManager.HighlightRule) {
startActivityForResult(
HighlightRuleActivity.intent(requireContext(), rule),
REQUEST_UPDATE_RULE
)
}
private fun startRuleDrag(holder: HighlightRuleAdapter.HighlightRuleViewHolder) =
rulesHelper.startDrag(holder)
private fun ignoreRuleClick(rule: HighlightRuleManager.HighlightRule) {
startActivityForResult(
HighlightRuleActivity.intent(requireContext(), rule),
REQUEST_UPDATE_IGNORE_RULE
)
}
private fun startIgnoreRuleDrag(holder: HighlightRuleAdapter.HighlightRuleViewHolder) =
ignoreRulesHelper.startDrag(holder)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == Activity.RESULT_OK && data != null) {
when (requestCode) {
REQUEST_UPDATE_RULE -> {
val oldRule = data.getSerializableExtra("old") as? HighlightRuleManager.HighlightRule
val newRule = data.getSerializableExtra("new") as? HighlightRuleManager.HighlightRule
if (oldRule != null && newRule != null) {
rulesAdapter.replace(rulesAdapter.indexOf(oldRule.name), newRule)
}
}
REQUEST_CREATE_RULE -> {
val newRule = data.getSerializableExtra("new") as? HighlightRuleManager.HighlightRule
if (newRule != null) {
rulesAdapter.add(newRule)
}
}
REQUEST_UPDATE_IGNORE_RULE -> {
val oldRule = data.getSerializableExtra("old") as? HighlightRuleManager.HighlightRule
val newRule = data.getSerializableExtra("new") as? HighlightRuleManager.HighlightRule
if (oldRule != null && newRule != null) {
ignoreRulesAdapter.replace(ignoreRulesAdapter.indexOf(oldRule.name), newRule)
}
}
REQUEST_CREATE_IGNORE_RULE -> {
val newRule = data.getSerializableExtra("new") as? HighlightRuleManager.HighlightRule
if (newRule != null) {
ignoreRulesAdapter.add(newRule)
}
}
}
}
}
override fun onSave() = ruleManager?.let { (it, data) ->
applyChanges(data)
it.requestUpdate(data.toVariantMap())
true
} ?: false
override fun hasChanged() = ruleManager?.let { (it, data) ->
applyChanges(data)
data.highlightNick() != it.highlightNick() ||
data.nicksCaseSensitive() != it.nicksCaseSensitive() ||
data.highlightRuleList() != it.highlightRuleList()
} ?: false
private fun applyChanges(data: HighlightRuleManager) {
data.setHighlightNick(highlightNickType.selectedItemId.toInt())
data.setNicksCaseSensitive(isCaseSensitive.isChecked)
data.setHighlightRuleList(rulesAdapter.list + ignoreRulesAdapter.list)
}
override fun onSave(): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
companion object {
private const val REQUEST_UPDATE_RULE = 1
private const val REQUEST_CREATE_RULE = 2
private const val REQUEST_UPDATE_IGNORE_RULE = 3
private const val REQUEST_CREATE_IGNORE_RULE = 4
}
}
package de.kuschku.quasseldroid.ui.coresettings.highlightlist
import android.support.v7.widget.RecyclerView
import android.support.v7.widget.ThemedSpinnerAdapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import butterknife.BindView
import butterknife.ButterKnife
import de.kuschku.libquassel.quassel.syncables.interfaces.IHighlightRuleManager
import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.util.ui.ContextThemeWrapper
import de.kuschku.quasseldroid.util.ui.RecyclerSpinnerAdapter
class HighlightNickTypeAdapter(val data: List<HighlightNickTypeItem>) :
RecyclerSpinnerAdapter<HighlightNickTypeAdapter.HighlightNickTypeViewHolder>(),
ThemedSpinnerAdapter {
override fun isEmpty() = data.isEmpty()
override fun onBindViewHolder(holder: HighlightNickTypeViewHolder, position: Int) =
holder.bind(getItem(position))
override fun onCreateViewHolder(parent: ViewGroup, dropDown: Boolean)
: HighlightNickTypeViewHolder {
val inflater = LayoutInflater.from(
if (dropDown)
ContextThemeWrapper(parent.context, dropDownViewTheme)
else
parent.context
)
val view = inflater.inflate(R.layout.widget_spinner_item_toolbar, parent, false)
return HighlightNickTypeViewHolder(
view
)
}
override fun getItem(position: Int) = data[position]
override fun getItemId(position: Int) = getItem(position).value.value.toLong()
override fun hasStableIds() = true
override fun getCount() = data.size
fun indexOf(value: IHighlightRuleManager.HighlightNickType): Int? {
for ((key, item) in data.withIndex()) {
if (item.value.value == value.value) {
return key
}
}
return null
}
class HighlightNickTypeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
@BindView(android.R.id.text1)
lateinit var text: TextView
init {
ButterKnife.bind(this, itemView)
}
fun bind(activity: HighlightNickTypeItem?) {
activity?.let {
text.setText(it.name)
}
}
}
}
package de.kuschku.quasseldroid.ui.coresettings.highlightlist
import android.support.annotation.StringRes
import de.kuschku.libquassel.quassel.syncables.interfaces.IHighlightRuleManager
data class HighlightNickTypeItem(
val value: IHighlightRuleManager.HighlightNickType,
@StringRes val name: Int
)
package de.kuschku.quasseldroid.ui.coresettings.highlightlist
import android.support.v7.widget.RecyclerView
import android.support.v7.widget.SwitchCompat
import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import butterknife.BindView
import butterknife.ButterKnife
import de.kuschku.libquassel.quassel.syncables.HighlightRuleManager
import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.util.helper.visibleIf
import java.util.*
class HighlightRuleAdapter(
private val clickListener: (HighlightRuleManager.HighlightRule) -> Unit,
private val dragListener: (HighlightRuleViewHolder) -> Unit
) : RecyclerView.Adapter<HighlightRuleAdapter.HighlightRuleViewHolder>() {
private val data = mutableListOf<HighlightRuleManager.HighlightRule>()
var list: List<HighlightRuleManager.HighlightRule>
get() = data
set(value) {
val length = data.size
data.clear()
notifyItemRangeRemoved(0, length)
data.addAll(value)
notifyItemRangeInserted(0, list.size)
}
fun add(item: HighlightRuleManager.HighlightRule) {
val index = data.size
data.add(item)
notifyItemInserted(index)
}
fun replace(index: Int, item: HighlightRuleManager.HighlightRule) {
data[index] = item
notifyItemChanged(index)
}
fun indexOf(rule: String) = data.map(HighlightRuleManager.HighlightRule::name).indexOf(rule)
fun remove(index: Int) {
data.removeAt(index)
notifyItemRemoved(index)
}
fun move(from: Int, to: Int) {
Collections.swap(data, from, to)
notifyItemMoved(from, to)
}
fun toggle(item: HighlightRuleManager.HighlightRule, isEnabled: Boolean) {
val index = indexOf(item.name)
data[index] = data[index].copy(isEnabled = isEnabled)
}
override fun getItemCount() = data.size
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = HighlightRuleViewHolder(
LayoutInflater.from(parent.context)
.inflate(R.layout.settings_highlightlist_rule, parent, false),
clickListener,
::toggle,
dragListener
)
override fun onBindViewHolder(holder: HighlightRuleViewHolder, position: Int) {
holder.bind(data[position])
}
class HighlightRuleViewHolder(
itemView: View,
clickListener: (HighlightRuleManager.HighlightRule) -> Unit,
toggleListener: (HighlightRuleManager.HighlightRule, Boolean) -> Unit,
dragListener: (HighlightRuleViewHolder) -> Unit
) : RecyclerView.ViewHolder(itemView) {
@BindView(R.id.name)
lateinit var name: TextView
@BindView(R.id.sender)
lateinit var sender: TextView
@BindView(R.id.channel)
lateinit var channel: TextView
@BindView(R.id.toggle)
lateinit var toggle: SwitchCompat
@BindView(R.id.handle)
lateinit var handle: View
private var item: HighlightRuleManager.HighlightRule? = null
init {
ButterKnife.bind(this, itemView)
itemView.setOnClickListener {
item?.let {
clickListener(it)
}
}
toggle.setOnCheckedChangeListener { _, isChecked ->
item?.let {
toggleListener.invoke(it, isChecked)
}
}
handle.setOnTouchListener { _, event ->
if (event.action == MotionEvent.ACTION_DOWN) {
dragListener.invoke(this)
}
false
}
}
fun bind(item: HighlightRuleManager.HighlightRule) {
this.item = item
name.text = item.name
sender.text = item.sender
sender.visibleIf(item.sender.isNotBlank())
channel.text = item.channel
channel.visibleIf(item.channel.isNotBlank())
toggle.isChecked = item.isEnabled
}
}
}
......@@ -9,16 +9,19 @@ class HighlightRuleActivity : SettingsActivity(HighlightRuleFragment()) {
companion object {
fun launch(
context: Context,
rule: HighlightRuleManager.HighlightRule? = null
) = context.startActivity(intent(context, rule))
rule: HighlightRuleManager.HighlightRule? = null,
ignore: Boolean = false
) = context.startActivity(intent(context, rule, ignore))
fun intent(
context: Context,
rule: HighlightRuleManager.HighlightRule? = null
rule: HighlightRuleManager.HighlightRule? = null,
ignore: Boolean = false
) = Intent(context, HighlightRuleActivity::class.java).apply {
if (rule != null) {
putExtra("item", rule)
}
putExtra("ignore", ignore)
}
}
}
package de.kuschku.quasseldroid.ui.coresettings.highlightrule
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.support.v7.widget.SwitchCompat
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.EditText
import butterknife.BindView
import butterknife.ButterKnife
import de.kuschku.libquassel.quassel.syncables.HighlightRuleManager
import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment
class HighlightRuleFragment : SettingsFragment(), SettingsFragment.Savable,
SettingsFragment.Changeable {
@BindView(R.id.enabled)
lateinit var enabled: SwitchCompat
@BindView(R.id.name)
lateinit var name: EditText
@BindView(R.id.is_regex)
lateinit var isRegex: SwitchCompat
@BindView(R.id.is_case_sensitive)
lateinit var isCaseSensitive: SwitchCompat
@BindView(R.id.sender)
lateinit var sender: EditText
@BindView(R.id.channel)
lateinit var channel: EditText
private var rule: HighlightRuleManager.HighlightRule? = null
private var isInverse: Boolean? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
return super.onCreateView(inflater, container, savedInstanceState)
val view = inflater.inflate(R.layout.settings_highlightrule, container, false)
ButterKnife.bind(this, view)
isInverse = arguments?.getBoolean("inverse")
(arguments?.getSerializable("item") as? HighlightRuleManager.HighlightRule)?.let {
rule = it
}
override fun hasChanged(): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
rule?.let { data ->
enabled.isChecked = data.isEnabled
name.setText(data.name)
isRegex.isChecked = data.isRegEx
isCaseSensitive.isChecked = data.isCaseSensitive
sender.setText(data.sender)
channel.setText(data.channel)
}
override fun onSave(): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
return view
}
private fun applyChanges() = HighlightRuleManager.HighlightRule(
isInverse = rule?.isInverse ?: isInverse ?: false,
isEnabled = enabled.isChecked,
name = name.text.toString(),
isRegEx = isRegex.isChecked,
isCaseSensitive = isCaseSensitive.isChecked,
sender = sender.text.toString(),
channel = channel.text.toString()
)
override fun onSave() = rule.let { data ->
requireActivity().setResult(
Activity.RESULT_OK,
Intent().also {
it.putExtra("old", data)
it.putExtra("new", applyChanges())
}
)
true
}
override fun hasChanged() = rule != applyChanges()
}
......@@ -22,7 +22,7 @@ class IgnoreItemFragment : SettingsFragment(), SettingsFragment.Savable,
@BindView(R.id.enabled)
lateinit var enabled: SwitchCompat
@BindView(R.id.ignorerule)
@BindView(R.id.ignore_rule)
lateinit var ignoreRule: EditText
@BindView(R.id.isregex)
......@@ -37,7 +37,7 @@ class IgnoreItemFragment : SettingsFragment(), SettingsFragment.Savable,
@BindView(R.id.scope)
lateinit var scope: Spinner
@BindView(R.id.scoperule)
@BindView(R.id.scope_rule)
lateinit var scopeRule: EditText
@BindView(R.id.scopegroup)
......@@ -125,10 +125,7 @@ class IgnoreItemFragment : SettingsFragment(), SettingsFragment.Savable,
return view
}
override fun onSave() = item.let { data ->
val intent = Intent()
intent.putExtra("old", data)
val new = IgnoreListManager.IgnoreListItem(
private fun applyChanges() = IgnoreListManager.IgnoreListItem(
isActive = enabled.isChecked,
ignoreRule = ignoreRule.text.toString(),
isRegEx = isRegEx.isChecked,
......@@ -137,18 +134,17 @@ class IgnoreItemFragment : SettingsFragment(), SettingsFragment.Savable,
scope = scope.selectedItemId.toInt(),
scopeRule = scopeRule.text.toString()
)
intent.putExtra("new", new)
requireActivity().setResult(Activity.RESULT_OK, intent)
override fun onSave() = item.let { data ->
requireActivity().setResult(
Activity.RESULT_OK,
Intent().also {
it.putExtra("old", data)
it.putExtra("new", applyChanges())
}
)
true
}
override fun hasChanged() = item != IgnoreListManager.IgnoreListItem(
isActive = enabled.isChecked,
ignoreRule = ignoreRule.text.toString(),
isRegEx = isRegEx.isChecked,
type = type.selectedItemId.toInt(),
strictness = strictness.selectedItemId.toInt(),
scope = scope.selectedItemId.toInt(),
scopeRule = scopeRule.text.toString()
)
override fun hasChanged() = item != applyChanges()
}
......@@ -11,6 +11,7 @@ import butterknife.BindView
import butterknife.ButterKnife
import de.kuschku.libquassel.quassel.syncables.IgnoreListManager
import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.util.helper.visibleIf
import java.util.*
class IgnoreListAdapter(
......@@ -75,8 +76,11 @@ class IgnoreListAdapter(
toggleListener: (IgnoreListManager.IgnoreListItem, Boolean) -> Unit,
dragListener: (IgnoreItemViewHolder) -> Unit
) : RecyclerView.ViewHolder(itemView) {
@BindView(R.id.title)
lateinit var title: TextView
@BindView(R.id.ignore_rule)
lateinit var ignoreRule: TextView
@BindView(R.id.scope_rule)
lateinit var scopeRule: TextView
@BindView(R.id.toggle)
lateinit var toggle: SwitchCompat
......@@ -108,7 +112,9 @@ class IgnoreListAdapter(
fun bind(item: IgnoreListManager.IgnoreListItem) {
this.item = item
title.text = item.ignoreRule
ignoreRule.text = item.ignoreRule
scopeRule.text = item.scopeRule
scopeRule.visibleIf(item.scopeRule.isNotBlank() && item.scope != IgnoreListManager.ScopeType.GlobalScope)
toggle.isChecked = item.isActive
}
}
......
......@@ -31,7 +31,7 @@ class IgnoreListFragment : SettingsFragment(), SettingsFragment.Savable,
private var ignoreListManager: Pair<IgnoreListManager, IgnoreListManager>? = null
lateinit var helper: ItemTouchHelper
private lateinit var helper: ItemTouchHelper
private val adapter = IgnoreListAdapter(::itemClick, ::startDrag)
......@@ -83,8 +83,7 @@ class IgnoreListFragment : SettingsFragment(), SettingsFragment.Savable,
val newRule = data.getSerializableExtra("new") as? IgnoreListManager.IgnoreListItem
if (oldRule != null && newRule != null) {
val index = adapter.indexOf(oldRule.ignoreRule)
adapter.replace(index, newRule)
adapter.replace(adapter.indexOf(oldRule.ignoreRule), newRule)
}
}
REQUEST_CREATE_RULE -> {
......
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="?listPreferredItemHeightSmall"
android:paddingEnd="?listPreferredItemPaddingRight"
android:paddingLeft="?listPreferredItemPaddingLeft"
android:paddingRight="?listPreferredItemPaddingRight"
android:paddingStart="?listPreferredItemPaddingLeft">
<android.support.v7.widget.AppCompatImageView
style="@style/Widget.CoreSettings.PrimaryItemIcon"
app:srcCompat="@drawable/ic_server_network" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="16dp"
android:paddingTop="16dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/settings_highlightlist_highlight_nick"
android:textColor="?colorTextPrimary"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="72dp"
android:layout_marginStart="72dp"
android:orientation="vertical">
<Spinner
android:id="@+id/highlight_nick_type"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:listitem="@layout/widget_spinner_item_toolbar" />
<android.support.v7.widget.SwitchCompat
android:id="@+id/is_case_sensitive"
style="@style/Widget.CoreSettings.PrimaryItemSwitch"
android:text="@string/settings_highlightlist_nicks_case_sensitive" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="?listPreferredItemHeightSmall"
android:paddingEnd="?listPreferredItemPaddingRight"
android:paddingLeft="?listPreferredItemPaddingLeft"
android:paddingRight="?listPreferredItemPaddingRight"
android:paddingStart="?listPreferredItemPaddingLeft">
<android.support.v7.widget.AppCompatImageView
style="@style/Widget.CoreSettings.PrimaryItemIcon"
app:srcCompat="@drawable/ic_server_network" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="16dp"
android:paddingTop="16dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/settings_highlightlist_rules"
android:textColor="?colorTextPrimary"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="72dp"
android:layout_marginStart="72dp"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/highlight_rules"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:itemCount="2"
tools:listitem="@layout/settings_highlightlist_rule" />
<LinearLayout
style="@style/Widget.CoreSettings.EditTextLayout"
android:orientation="horizontal">
<Button
android:id="@+id/new_highlight_rule"
style="@style/Widget.Button.Borderless.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_new_highlight_rule" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="?listPreferredItemHeightSmall"
android:paddingEnd="?listPreferredItemPaddingRight"
android:paddingLeft="?listPreferredItemPaddingLeft"
android:paddingRight="?listPreferredItemPaddingRight"
android:paddingStart="?listPreferredItemPaddingLeft">
<android.support.v7.widget.AppCompatImageView
style="@style/Widget.CoreSettings.PrimaryItemIcon"
app:srcCompat="@drawable/ic_server_network" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="16dp"
android:paddingTop="16dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/settings_highlightlist_ignore_rules"
android:textColor="?colorTextPrimary"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="72dp"
android:layout_marginStart="72dp"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/highlight_ignore_rules"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:itemCount="2"
tools:listitem="@layout/settings_highlightlist_rule" />
<LinearLayout
style="@style/Widget.CoreSettings.EditTextLayout"
android:orientation="horizontal">
<Button
android:id="@+id/new_highlight_ignore_rule"
style="@style/Widget.Button.Borderless.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_new_highlight_ignore_rule" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView 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"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="2dp"
app:cardBackgroundColor="?colorBackgroundCard"
app:cardElevation="2dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:focusable="true"
android:gravity="center_vertical"
android:minHeight="?listPreferredItemHeightSmall">
<android.support.v7.widget.AppCompatImageView
android:id="@+id/handle"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:paddingEnd="32dp"
android:paddingLeft="?listPreferredItemPaddingRight"
android:paddingRight="32dp"
android:paddingStart="?listPreferredItemPaddingRight"
app:srcCompat="@drawable/ic_reorder"
app:tint="?colorTextSecondary" />
<LinearLayout
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:paddingBottom="16dp"
android:paddingTop="16dp">
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:orientation="vertical"
android:singleLine="true"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="?colorTextPrimary"
android:textSize="16sp"
tools:text="(janne): " />
<TextView
android:id="@+id/sender"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:singleLine="true"
android:textAppearance="?textAppearanceListItemSecondary"
android:textColor="?colorTextSecondary"
tools:text="TARS" />
<TextView
android:id="@+id/channel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:singleLine="true"
android:textAppearance="?textAppearanceListItemSecondary"
android:textColor="?colorTextSecondary"
tools:text="#yepityha" />
</LinearLayout>
<android.support.v7.widget.SwitchCompat
android:id="@+id/toggle"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:paddingEnd="?listPreferredItemPaddingRight"
android:paddingLeft="?listPreferredItemPaddingLeft"
android:paddingRight="?listPreferredItemPaddingRight"
android:paddingStart="?listPreferredItemPaddingLeft" />
</LinearLayout>
</android.support.v7.widget.CardView>
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical">
<LinearLayout style="@style/Widget.CoreSettings.Wrapper">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp">
<android.support.v7.widget.AppCompatImageView
style="@style/Widget.CoreSettings.PrimaryItemIcon"
app:srcCompat="@drawable/ic_filter" />
<android.support.v7.widget.SwitchCompat
android:id="@+id/enabled"
style="@style/Widget.CoreSettings.PrimaryItemSwitch"
android:text="@string/settings_highlightrule_enabled" />
</LinearLayout>
<LinearLayout
style="@style/Widget.CoreSettings.DependentGroup"
android:visibility="visible">
<android.support.design.widget.TextInputLayout
style="@style/Widget.CoreSettings.EditTextLayout"
android:hint="@string/settings_highlightrule_name">
<android.support.design.widget.TextInputEditText
android:id="@+id/name"
style="@style/Widget.CoreSettings.EditText"
tools:text="https://clbin.com/*.jpg*" />
</android.support.design.widget.TextInputLayout>
<android.support.v7.widget.SwitchCompat
android:id="@+id/is_regex"
style="@style/Widget.CoreSettings.PrimaryItemSwitch"
android:text="@string/settings_highlightrule_regular_expression" />
<android.support.v7.widget.SwitchCompat
android:id="@+id/is_case_sensitive"
style="@style/Widget.CoreSettings.PrimaryItemSwitch"
android:text="@string/settings_highlightrule_case_sensitive" />
<android.support.design.widget.TextInputLayout
style="@style/Widget.CoreSettings.EditTextLayout"
android:hint="@string/settings_highlightrule_sender">
<android.support.design.widget.TextInputEditText
android:id="@+id/sender"
style="@style/Widget.CoreSettings.EditText"
tools:text="TARS" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
style="@style/Widget.CoreSettings.EditTextLayout"
android:hint="@string/settings_highlightrule_channel">
<android.support.design.widget.TextInputEditText
android:id="@+id/channel"
style="@style/Widget.CoreSettings.EditText"
tools:text="#yepityha" />
</android.support.design.widget.TextInputLayout>
</LinearLayout>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
......@@ -32,7 +32,7 @@
android:hint="@string/settings_ignoreitem_ignorerule">
<android.support.design.widget.TextInputEditText
android:id="@+id/ignorerule"
android:id="@+id/ignore_rule"
style="@style/Widget.CoreSettings.EditText"
tools:text="https://clbin.com/*.jpg*" />
</android.support.design.widget.TextInputLayout>
......@@ -98,7 +98,7 @@
android:hint="@string/settings_ignoreitem_scoperule">
<android.support.design.widget.TextInputEditText
android:id="@+id/scoperule"
android:id="@+id/scope_rule"
style="@style/Widget.CoreSettings.EditText"
tools:text="https://clbin.com/*.jpg*" />
</android.support.design.widget.TextInputLayout>
......
......@@ -29,6 +29,38 @@
app:srcCompat="@drawable/ic_reorder"
app:tint="?colorTextSecondary" />
<LinearLayout
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:paddingBottom="16dp"
android:paddingTop="16dp">
<TextView
android:id="@+id/ignore_rule"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:orientation="vertical"
android:singleLine="true"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="?colorTextPrimary"
android:textSize="16sp"
tools:text="SoniEx2" />
<TextView
android:id="@+id/scope_rule"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:singleLine="true"
android:textAppearance="?textAppearanceListItemSecondary"
android:textColor="?colorTextSecondary"
tools:text="#quasseldroid" />
</LinearLayout>
<TextView
android:id="@+id/title"
android:layout_width="0dip"
......
......@@ -42,6 +42,8 @@
<string name="label_mention_long">Kopiert den Nutzernamen in die Eingabezeile</string>
<string name="label_new_account">Account hinzufügen</string>
<string name="label_new_chatlist">Chatliste hinzufügen</string>
<string name="label_new_highlight_rule">Neue Hervorhebungsregel</string>
<string name="label_new_highlight_ignore_rule">Neue Hervorhebungsignorierregel</string>
<string name="label_new_identity">Identität hinzufügen</string>
<string name="label_new_network">Netzwerk hinzufügen</string>
<string name="label_new_nick">Spitzname hinzufügen</string>
......
......@@ -96,8 +96,21 @@
<string name="settings_ignoreitem_scoperule">Gültigkeitsregel</string>
<string name="settings_highlightlist_title">Hervorhebungen</string>
<string name="settings_highlightlist_highlight_nick">Hervorgehobene Spitznamen</string>
<string name="settings_highlightlist_highlight_nick_all_nicks">Alle Spitznamen aus Identität</string>
<string name="settings_highlightlist_highlight_nick_current_nick">Aktueller Spitzname</string>
<string name="settings_highlightlist_highlight_nick_none">Keine</string>
<string name="settings_highlightlist_nicks_case_sensitive">Groß-/Kleinschreibung beachten</string>
<string name="settings_highlightlist_rules">Hervorhebungsregeln</string>
<string name="settings_highlightlist_ignore_rules">Hervorhebungsignorierregeln</string>
<string name="settings_highlightrule_title">Hervorhebungsregel</string>
<string name="settings_highlightrule_enabled">Aktiviert</string>
<string name="settings_highlightrule_name">Name</string>
<string name="settings_highlightrule_regular_expression">Regulärer Ausdruck</string>
<string name="settings_highlightrule_case_sensitive">Groß-/Kleinschreibung beachten</string>
<string name="settings_highlightrule_sender">Absender</string>
<string name="settings_highlightrule_channel">Raum</string>
<string name="settings_aliaslist_title">Aliase</string>
......
......@@ -42,6 +42,8 @@
<string name="label_mention_long">Copy username into input line</string>
<string name="label_new_account">New Account</string>
<string name="label_new_chatlist">New Chatlist</string>
<string name="label_new_highlight_rule">New Highlight Rule</string>
<string name="label_new_highlight_ignore_rule">New Highlight Ignore Rule</string>
<string name="label_new_identity">New Identity</string>
<string name="label_new_network">New Network</string>
<string name="label_new_nick">New Nick</string>
......
......@@ -96,8 +96,21 @@
<string name="settings_ignoreitem_scoperule">Scope Rule</string>
<string name="settings_highlightlist_title">Highlights</string>
<string name="settings_highlightlist_highlight_nick">Highlight Nick</string>
<string name="settings_highlightlist_highlight_nick_all_nicks">All Nicks from Identity</string>
<string name="settings_highlightlist_highlight_nick_current_nick">Current Nick</string>
<string name="settings_highlightlist_highlight_nick_none">None</string>
<string name="settings_highlightlist_nicks_case_sensitive">Case Sensitive</string>
<string name="settings_highlightlist_rules">Highlight Rules</string>
<string name="settings_highlightlist_ignore_rules">Highlight Ignore Rules</string>
<string name="settings_highlightrule_title">Highlight Rule</string>
<string name="settings_highlightrule_enabled">Enabled</string>
<string name="settings_highlightrule_name">Name</string>
<string name="settings_highlightrule_regular_expression">Regular Expression</string>
<string name="settings_highlightrule_case_sensitive">Case Sensitive</string>
<string name="settings_highlightrule_sender">Sender</string>
<string name="settings_highlightrule_channel">Channel</string>
<string name="settings_aliaslist_title">Aliases</string>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment