close #688
This commit is contained in:
parent
cd91700c75
commit
4d13123caa
|
@ -163,6 +163,10 @@ public class FiltersData {
|
||||||
@JsonField(name = "source")
|
@JsonField(name = "source")
|
||||||
long source = -1;
|
long source = -1;
|
||||||
|
|
||||||
|
public long getId() {
|
||||||
|
return _id;
|
||||||
|
}
|
||||||
|
|
||||||
public String getValue() {
|
public String getValue() {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
|
@ -217,8 +217,8 @@ class MessagesConversationFragment : BaseFragment(), LoaderCallbacks<Cursor?>, O
|
||||||
addImage.setOnClickListener(this)
|
addImage.setOnClickListener(this)
|
||||||
sendMessage.isEnabled = false
|
sendMessage.isEnabled = false
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
val account: AccountDetails = savedInstanceState.getParcelable(EXTRA_ACCOUNT)
|
val account: AccountDetails? = savedInstanceState.getParcelable(EXTRA_ACCOUNT)
|
||||||
val recipient: ParcelableUser = savedInstanceState.getParcelable(EXTRA_USER)
|
val recipient: ParcelableUser? = savedInstanceState.getParcelable(EXTRA_USER)
|
||||||
showConversation(account, recipient)
|
showConversation(account, recipient)
|
||||||
editText.setText(savedInstanceState.getString(EXTRA_TEXT))
|
editText.setText(savedInstanceState.getString(EXTRA_TEXT))
|
||||||
imageUri = savedInstanceState.getString(EXTRA_IMAGE_URI)
|
imageUri = savedInstanceState.getString(EXTRA_IMAGE_URI)
|
||||||
|
@ -289,12 +289,12 @@ class MessagesConversationFragment : BaseFragment(), LoaderCallbacks<Cursor?>, O
|
||||||
updateAddImageButton()
|
updateAddImageButton()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSaveInstanceState(outState: Bundle?) {
|
override fun onSaveInstanceState(outState: Bundle) {
|
||||||
super.onSaveInstanceState(outState)
|
super.onSaveInstanceState(outState)
|
||||||
if (editText != null) {
|
if (editText != null) {
|
||||||
outState!!.putCharSequence(EXTRA_TEXT, editText.text)
|
outState.putCharSequence(EXTRA_TEXT, editText.text)
|
||||||
}
|
}
|
||||||
outState!!.putParcelable(EXTRA_ACCOUNT, account)
|
outState.putParcelable(EXTRA_ACCOUNT, account)
|
||||||
outState.putParcelable(EXTRA_USER, recipient)
|
outState.putParcelable(EXTRA_USER, recipient)
|
||||||
outState.putString(EXTRA_IMAGE_URI, imageUri)
|
outState.putString(EXTRA_IMAGE_URI, imageUri)
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,16 +39,14 @@ import android.text.SpannableStringBuilder
|
||||||
import android.text.Spanned
|
import android.text.Spanned
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
import android.view.*
|
import android.view.*
|
||||||
import android.widget.AbsListView
|
import android.widget.*
|
||||||
import android.widget.AbsListView.MultiChoiceModeListener
|
import android.widget.AbsListView.MultiChoiceModeListener
|
||||||
import android.widget.AutoCompleteTextView
|
|
||||||
import android.widget.ListView
|
|
||||||
import android.widget.TextView
|
|
||||||
import kotlinx.android.synthetic.main.fragment_content_listview.*
|
import kotlinx.android.synthetic.main.fragment_content_listview.*
|
||||||
import org.mariotaku.ktextension.setGroupAvailability
|
import org.mariotaku.ktextension.setGroupAvailability
|
||||||
import org.mariotaku.sqliteqb.library.Columns
|
import org.mariotaku.sqliteqb.library.Columns
|
||||||
import org.mariotaku.sqliteqb.library.Expression
|
import org.mariotaku.sqliteqb.library.Expression
|
||||||
import org.mariotaku.twidere.R
|
import org.mariotaku.twidere.R
|
||||||
|
import org.mariotaku.twidere.TwidereConstants.EXTRA_ID
|
||||||
import org.mariotaku.twidere.TwidereConstants.EXTRA_URI
|
import org.mariotaku.twidere.TwidereConstants.EXTRA_URI
|
||||||
import org.mariotaku.twidere.activity.iface.IControlBarActivity
|
import org.mariotaku.twidere.activity.iface.IControlBarActivity
|
||||||
import org.mariotaku.twidere.adapter.ComposeAutoCompleteAdapter
|
import org.mariotaku.twidere.adapter.ComposeAutoCompleteAdapter
|
||||||
|
@ -59,9 +57,11 @@ import org.mariotaku.twidere.extension.selectNone
|
||||||
import org.mariotaku.twidere.extension.updateSelectionItems
|
import org.mariotaku.twidere.extension.updateSelectionItems
|
||||||
import org.mariotaku.twidere.fragment.AbsContentListViewFragment
|
import org.mariotaku.twidere.fragment.AbsContentListViewFragment
|
||||||
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
||||||
|
import org.mariotaku.twidere.model.FiltersData
|
||||||
import org.mariotaku.twidere.model.`FiltersData$BaseItemCursorIndices`
|
import org.mariotaku.twidere.model.`FiltersData$BaseItemCursorIndices`
|
||||||
import org.mariotaku.twidere.provider.TwidereDataStore.Filters
|
import org.mariotaku.twidere.provider.TwidereDataStore.Filters
|
||||||
import org.mariotaku.twidere.text.style.EmojiSpan
|
import org.mariotaku.twidere.text.style.EmojiSpan
|
||||||
|
import org.mariotaku.twidere.util.DataStoreUtils
|
||||||
import org.mariotaku.twidere.util.ParseUtils
|
import org.mariotaku.twidere.util.ParseUtils
|
||||||
import org.mariotaku.twidere.util.ThemeUtils
|
import org.mariotaku.twidere.util.ThemeUtils
|
||||||
import org.mariotaku.twidere.util.Utils
|
import org.mariotaku.twidere.util.Utils
|
||||||
|
@ -81,11 +81,23 @@ abstract class BaseFiltersFragment : AbsContentListViewFragment<SimpleCursorAdap
|
||||||
protected abstract val contentUri: Uri
|
protected abstract val contentUri: Uri
|
||||||
protected abstract val contentColumns: Array<String>
|
protected abstract val contentColumns: Array<String>
|
||||||
protected open val sortOrder: String? = "${Filters.SOURCE} >= 0"
|
protected open val sortOrder: String? = "${Filters.SOURCE} >= 0"
|
||||||
|
protected open val autoCompleteType: Int = 0
|
||||||
|
protected open val supportsEdit: Boolean = true
|
||||||
|
|
||||||
|
private val isQuickReturnEnabled: Boolean
|
||||||
|
get() = actionMode == null
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||||
super.onActivityCreated(savedInstanceState)
|
super.onActivityCreated(savedInstanceState)
|
||||||
setHasOptionsMenu(true)
|
setHasOptionsMenu(true)
|
||||||
listView.choiceMode = ListView.CHOICE_MODE_MULTIPLE_MODAL
|
listView.choiceMode = ListView.CHOICE_MODE_MULTIPLE_MODAL
|
||||||
|
listView.setOnItemClickListener { view, child, pos, id ->
|
||||||
|
if (!supportsEdit) return@setOnItemClickListener
|
||||||
|
val adapter = this.adapter as FilterListAdapter
|
||||||
|
val item = adapter.getFilterItem(pos) ?: return@setOnItemClickListener
|
||||||
|
if (item.source >= 0) return@setOnItemClickListener
|
||||||
|
addOrEditItem(item.id, item.value)
|
||||||
|
}
|
||||||
listView.setMultiChoiceModeListener(this)
|
listView.setMultiChoiceModeListener(this)
|
||||||
loaderManager.initLoader(0, null, this)
|
loaderManager.initLoader(0, null, this)
|
||||||
setRefreshEnabled(false)
|
setRefreshEnabled(false)
|
||||||
|
@ -103,9 +115,6 @@ abstract class BaseFiltersFragment : AbsContentListViewFragment<SimpleCursorAdap
|
||||||
super.setControlVisible(visible || !isQuickReturnEnabled)
|
super.setControlVisible(visible || !isQuickReturnEnabled)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val isQuickReturnEnabled: Boolean
|
|
||||||
get() = actionMode == null
|
|
||||||
|
|
||||||
override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
|
override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
|
||||||
actionMode = mode
|
actionMode = mode
|
||||||
setControlVisible(true)
|
setControlVisible(true)
|
||||||
|
@ -146,8 +155,7 @@ abstract class BaseFiltersFragment : AbsContentListViewFragment<SimpleCursorAdap
|
||||||
actionMode = null
|
actionMode = null
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onItemCheckedStateChanged(mode: ActionMode, position: Int, id: Long,
|
override fun onItemCheckedStateChanged(mode: ActionMode, position: Int, id: Long, checked: Boolean) {
|
||||||
checked: Boolean) {
|
|
||||||
val adapter = this.adapter
|
val adapter = this.adapter
|
||||||
if (adapter is SelectableItemAdapter) {
|
if (adapter is SelectableItemAdapter) {
|
||||||
if (!adapter.isSelectable(position) && checked) {
|
if (!adapter.isSelectable(position) && checked) {
|
||||||
|
@ -202,28 +210,35 @@ abstract class BaseFiltersFragment : AbsContentListViewFragment<SimpleCursorAdap
|
||||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
R.id.add -> {
|
R.id.add -> {
|
||||||
val args = Bundle()
|
addOrEditItem()
|
||||||
args.putParcelable(EXTRA_URI, contentUri)
|
|
||||||
val dialog = AddItemFragment()
|
|
||||||
dialog.arguments = args
|
|
||||||
dialog.show(fragmentManager, "add_rule")
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return super.onOptionsItemSelected(item)
|
return super.onOptionsItemSelected(item)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun onCreateAdapter(context: Context): SimpleCursorAdapter {
|
override fun onCreateAdapter(context: Context): SimpleCursorAdapter {
|
||||||
return FilterListAdapter(context)
|
return FilterListAdapter(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected open fun performDeletion() {
|
protected open fun performDeletion() {
|
||||||
val ids = listView.checkedItemIds
|
val ids = listView.checkedItemIds
|
||||||
val where = Expression.inArgs(Columns.Column(Filters._ID), ids.size)
|
val where = Expression.inArgs(Columns.Column(Filters._ID), ids.size)
|
||||||
context.contentResolver.delete(contentUri, where.sql, Array(ids.size) { ids[it].toString() })
|
context.contentResolver.delete(contentUri, where.sql, Array(ids.size) { ids[it].toString() })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected open fun addOrEditItem(id: Long = -1, value: String? = null) {
|
||||||
|
val args = Bundle()
|
||||||
|
args.putParcelable(EXTRA_URI, contentUri)
|
||||||
|
args.putInt(EXTRA_AUTO_COMPLETE_TYPE, autoCompleteType)
|
||||||
|
args.putLong(EXTRA_ID, id)
|
||||||
|
args.putString(EXTRA_VALUE, value)
|
||||||
|
val dialog = AddEditItemFragment()
|
||||||
|
dialog.arguments = args
|
||||||
|
dialog.show(fragmentManager, "add_rule")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun updateTitle(mode: ActionMode?) {
|
private fun updateTitle(mode: ActionMode?) {
|
||||||
if (listView == null || mode == null || activity == null) return
|
if (listView == null || mode == null || activity == null) return
|
||||||
|
@ -231,7 +246,7 @@ abstract class BaseFiltersFragment : AbsContentListViewFragment<SimpleCursorAdap
|
||||||
mode.title = resources.getQuantityString(R.plurals.Nitems_selected, count, count)
|
mode.title = resources.getQuantityString(R.plurals.Nitems_selected, count, count)
|
||||||
}
|
}
|
||||||
|
|
||||||
class AddItemFragment : BaseDialogFragment(), OnClickListener {
|
class AddEditItemFragment : BaseDialogFragment(), OnClickListener {
|
||||||
|
|
||||||
override fun onClick(dialog: DialogInterface, which: Int) {
|
override fun onClick(dialog: DialogInterface, which: Int) {
|
||||||
when (which) {
|
when (which) {
|
||||||
|
@ -241,7 +256,20 @@ abstract class BaseFiltersFragment : AbsContentListViewFragment<SimpleCursorAdap
|
||||||
val values = ContentValues()
|
val values = ContentValues()
|
||||||
values.put(Filters.VALUE, text)
|
values.put(Filters.VALUE, text)
|
||||||
val uri: Uri = arguments.getParcelable(EXTRA_URI)
|
val uri: Uri = arguments.getParcelable(EXTRA_URI)
|
||||||
context.contentResolver.insert(uri, values)
|
val id = arguments.getLong(EXTRA_ID, -1)
|
||||||
|
val resolver = context.contentResolver
|
||||||
|
if (id >= 0) {
|
||||||
|
val where = Expression.equalsArgs(Filters._ID).sql
|
||||||
|
val whereArgs = arrayOf(id.toString())
|
||||||
|
if (DataStoreUtils.queryCount(context, uri, where, whereArgs) == 0) {
|
||||||
|
resolver.update(uri, values, where, whereArgs)
|
||||||
|
} else {
|
||||||
|
Toast.makeText(context, R.string.message_toast_duplicate_filter_rule,
|
||||||
|
Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
resolver.insert(uri, values)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,16 +281,21 @@ abstract class BaseFiltersFragment : AbsContentListViewFragment<SimpleCursorAdap
|
||||||
val builder = AlertDialog.Builder(context)
|
val builder = AlertDialog.Builder(context)
|
||||||
builder.setView(R.layout.dialog_auto_complete_textview)
|
builder.setView(R.layout.dialog_auto_complete_textview)
|
||||||
|
|
||||||
|
if (arguments.getLong(EXTRA_ID, -1) >= 0) {
|
||||||
|
builder.setTitle(R.string.action_edit_filter_rule)
|
||||||
|
} else {
|
||||||
builder.setTitle(R.string.action_add_filter_rule)
|
builder.setTitle(R.string.action_add_filter_rule)
|
||||||
|
}
|
||||||
builder.setPositiveButton(android.R.string.ok, this)
|
builder.setPositiveButton(android.R.string.ok, this)
|
||||||
builder.setNegativeButton(android.R.string.cancel, this)
|
builder.setNegativeButton(android.R.string.cancel, this)
|
||||||
val dialog = builder.create()
|
val dialog = builder.create()
|
||||||
dialog.setOnShowListener { dialog ->
|
dialog.setOnShowListener { dialog ->
|
||||||
val alertDialog = dialog as AlertDialog
|
val alertDialog = dialog as AlertDialog
|
||||||
val editText = (alertDialog.findViewById(R.id.edit_text) as AutoCompleteTextView?)!!
|
val editText = (alertDialog.findViewById(R.id.edit_text) as AutoCompleteTextView?)!!
|
||||||
val args = arguments
|
if (savedInstanceState == null) {
|
||||||
val autoCompleteType: Int
|
editText.setText(arguments.getString(EXTRA_VALUE))
|
||||||
autoCompleteType = args.getInt(EXTRA_AUTO_COMPLETE_TYPE, 0)
|
}
|
||||||
|
val autoCompleteType = arguments.getInt(EXTRA_AUTO_COMPLETE_TYPE, 0)
|
||||||
if (autoCompleteType != 0) {
|
if (autoCompleteType != 0) {
|
||||||
val userAutoCompleteAdapter: SimpleCursorAdapter
|
val userAutoCompleteAdapter: SimpleCursorAdapter
|
||||||
if (autoCompleteType == AUTO_COMPLETE_TYPE_SOURCES) {
|
if (autoCompleteType == AUTO_COMPLETE_TYPE_SOURCES) {
|
||||||
|
@ -334,11 +367,20 @@ abstract class BaseFiltersFragment : AbsContentListViewFragment<SimpleCursorAdap
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getFilterItem(position: Int): FiltersData.BaseItem? {
|
||||||
|
val cursor = this.cursor ?: return null
|
||||||
|
if (cursor.moveToPosition(position)) {
|
||||||
|
return indices!!.newObject(cursor)
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
internal const val EXTRA_AUTO_COMPLETE_TYPE = "auto_complete_type"
|
internal const val EXTRA_AUTO_COMPLETE_TYPE = "auto_complete_type"
|
||||||
|
internal const val EXTRA_VALUE = "value"
|
||||||
internal const val AUTO_COMPLETE_TYPE_SOURCES = 2
|
internal const val AUTO_COMPLETE_TYPE_SOURCES = 2
|
||||||
internal const val REQUEST_ADD_USER_SELECT_ACCOUNT = 201
|
internal const val REQUEST_ADD_USER_SELECT_ACCOUNT = 201
|
||||||
internal const val REQUEST_IMPORT_BLOCKS_SELECT_ACCOUNT = 202
|
internal const val REQUEST_IMPORT_BLOCKS_SELECT_ACCOUNT = 202
|
||||||
|
|
|
@ -1,34 +1,14 @@
|
||||||
package org.mariotaku.twidere.fragment.filter
|
package org.mariotaku.twidere.fragment.filter
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import org.mariotaku.twidere.provider.TwidereDataStore.Filters
|
||||||
import android.view.MenuItem
|
|
||||||
import org.mariotaku.twidere.R
|
|
||||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_URI
|
|
||||||
import org.mariotaku.twidere.fragment.filter.BaseFiltersFragment
|
|
||||||
import org.mariotaku.twidere.provider.TwidereDataStore
|
|
||||||
|
|
||||||
class FilteredSourcesFragment : BaseFiltersFragment() {
|
class FilteredSourcesFragment : BaseFiltersFragment() {
|
||||||
|
|
||||||
override val contentColumns: Array<String>
|
override val contentColumns: Array<String> = Filters.Sources.COLUMNS
|
||||||
get() = TwidereDataStore.Filters.Sources.COLUMNS
|
|
||||||
|
|
||||||
override val contentUri: Uri
|
override val contentUri: Uri = Filters.Sources.CONTENT_URI
|
||||||
get() = TwidereDataStore.Filters.Sources.CONTENT_URI
|
|
||||||
|
|
||||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
override val autoCompleteType: Int = AUTO_COMPLETE_TYPE_SOURCES
|
||||||
when (item.itemId) {
|
|
||||||
R.id.add -> {
|
|
||||||
val args = Bundle()
|
|
||||||
args.putInt(EXTRA_AUTO_COMPLETE_TYPE, AUTO_COMPLETE_TYPE_SOURCES)
|
|
||||||
args.putParcelable(EXTRA_URI, contentUri)
|
|
||||||
val dialog = AddItemFragment()
|
|
||||||
dialog.arguments = args
|
|
||||||
dialog.show(fragmentManager, "add_rule")
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return super.onOptionsItemSelected(item)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -33,7 +33,10 @@ import org.mariotaku.twidere.model.`FiltersData$UserItemCursorIndices`
|
||||||
import org.mariotaku.twidere.model.analyzer.PurchaseFinished
|
import org.mariotaku.twidere.model.analyzer.PurchaseFinished
|
||||||
import org.mariotaku.twidere.provider.TwidereDataStore.Filters
|
import org.mariotaku.twidere.provider.TwidereDataStore.Filters
|
||||||
import org.mariotaku.twidere.text.style.EmojiSpan
|
import org.mariotaku.twidere.text.style.EmojiSpan
|
||||||
import org.mariotaku.twidere.util.*
|
import org.mariotaku.twidere.util.Analyzer
|
||||||
|
import org.mariotaku.twidere.util.DataStoreUtils
|
||||||
|
import org.mariotaku.twidere.util.ThemeUtils
|
||||||
|
import org.mariotaku.twidere.util.UserColorNameManager
|
||||||
import org.mariotaku.twidere.util.dagger.GeneralComponentHelper
|
import org.mariotaku.twidere.util.dagger.GeneralComponentHelper
|
||||||
import org.mariotaku.twidere.util.premium.ExtraFeaturesService
|
import org.mariotaku.twidere.util.premium.ExtraFeaturesService
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
@ -43,6 +46,7 @@ class FilteredUsersFragment : BaseFiltersFragment() {
|
||||||
override val contentUri: Uri = Filters.Users.CONTENT_URI
|
override val contentUri: Uri = Filters.Users.CONTENT_URI
|
||||||
override val contentColumns: Array<String> = Filters.Users.COLUMNS
|
override val contentColumns: Array<String> = Filters.Users.COLUMNS
|
||||||
override val sortOrder: String? = "${Filters.Users.SOURCE} >= 0"
|
override val sortOrder: String? = "${Filters.Users.SOURCE} >= 0"
|
||||||
|
override val supportsEdit: Boolean = false
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||||
super.onActivityCreated(savedInstanceState)
|
super.onActivityCreated(savedInstanceState)
|
||||||
|
@ -128,6 +132,10 @@ class FilteredUsersFragment : BaseFiltersFragment() {
|
||||||
return FilterUsersListAdapter(context)
|
return FilterUsersListAdapter(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun addOrEditItem(id: Long, value: String?) {
|
||||||
|
// No-op
|
||||||
|
}
|
||||||
|
|
||||||
class FilterUsersListAdapter(
|
class FilterUsersListAdapter(
|
||||||
context: Context
|
context: Context
|
||||||
) : SimpleCursorAdapter(context, R.layout.list_item_two_line, null,
|
) : SimpleCursorAdapter(context, R.layout.list_item_two_line, null,
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
android:layout_alignParentTop="true"
|
android:layout_alignParentTop="true"
|
||||||
android:background="?colorToolbar"
|
android:background="?colorToolbar"
|
||||||
android:elevation="@dimen/toolbar_elevation"
|
android:elevation="@dimen/toolbar_elevation"
|
||||||
android:tag="ate_ignore"
|
|
||||||
app:popupTheme="?actionBarPopupTheme"
|
app:popupTheme="?actionBarPopupTheme"
|
||||||
tools:elevation="0dp"/>
|
tools:elevation="0dp"/>
|
||||||
|
|
||||||
|
|
|
@ -124,7 +124,6 @@
|
||||||
android:layout_alignParentEnd="true"
|
android:layout_alignParentEnd="true"
|
||||||
android:layout_alignParentRight="true"
|
android:layout_alignParentRight="true"
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
android:tag="mvs_tint|accent_color"
|
|
||||||
tools:max="3"
|
tools:max="3"
|
||||||
tools:position="2"/>
|
tools:position="2"/>
|
||||||
|
|
||||||
|
|
|
@ -55,8 +55,7 @@
|
||||||
android:layout_height="?actionBarSize"
|
android:layout_height="?actionBarSize"
|
||||||
android:layout_weight="0"
|
android:layout_weight="0"
|
||||||
android:background="?actionBarItemBackground"
|
android:background="?actionBarItemBackground"
|
||||||
android:contentDescription="@string/open_accounts_dashboard"
|
android:contentDescription="@string/open_accounts_dashboard"/>
|
||||||
android:tag="tint|primary_color_dependent"/>
|
|
||||||
|
|
||||||
<org.mariotaku.twidere.view.TabPagerIndicator
|
<org.mariotaku.twidere.view.TabPagerIndicator
|
||||||
android:id="@+id/mainTabs"
|
android:id="@+id/mainTabs"
|
||||||
|
|
|
@ -20,15 +20,17 @@
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="8dp">
|
android:padding="8dp">
|
||||||
|
|
||||||
<AutoCompleteTextView
|
<android.support.v7.widget.AppCompatAutoCompleteTextView
|
||||||
android:id="@+id/edit_text"
|
android:id="@+id/edit_text"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:completionThreshold="1"
|
android:completionThreshold="1"
|
||||||
android:maxLines="1"/>
|
android:maxLines="1"
|
||||||
|
app:backgroundTint="?colorAccent"/>
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
|
@ -78,7 +78,6 @@
|
||||||
android:layout_height="?actionBarSize"
|
android:layout_height="?actionBarSize"
|
||||||
android:layout_alignParentTop="true"
|
android:layout_alignParentTop="true"
|
||||||
android:elevation="@dimen/toolbar_elevation"
|
android:elevation="@dimen/toolbar_elevation"
|
||||||
android:tag="ate_ignore"
|
|
||||||
app:popupTheme="?actionBarPopupTheme"
|
app:popupTheme="?actionBarPopupTheme"
|
||||||
tools:elevation="0dp"/>
|
tools:elevation="0dp"/>
|
||||||
|
|
||||||
|
|
|
@ -168,8 +168,7 @@
|
||||||
android:id="@+id/accountDashboardMenu"
|
android:id="@+id/accountDashboardMenu"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:focusable="true"
|
android:focusable="true"/>
|
||||||
android:tag="ate_ignore"/>
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
|
@ -41,7 +41,6 @@
|
||||||
android:maxLines="1"
|
android:maxLines="1"
|
||||||
android:minHeight="@dimen/element_size_small"
|
android:minHeight="@dimen/element_size_small"
|
||||||
android:padding="@dimen/element_spacing_normal"
|
android:padding="@dimen/element_spacing_normal"
|
||||||
android:tag="font_family|user"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||||
android:textColor="?android:textColorSecondary"
|
android:textColor="?android:textColorSecondary"
|
||||||
tools:text="Retweeted by Mariotaku" />
|
tools:text="Retweeted by Mariotaku" />
|
||||||
|
@ -104,7 +103,6 @@
|
||||||
android:id="@+id/name"
|
android:id="@+id/name"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:tag="font_family|user"
|
|
||||||
app:nv_primaryTextColor="?android:textColorPrimary"
|
app:nv_primaryTextColor="?android:textColorPrimary"
|
||||||
app:nv_secondaryTextColor="?android:textColorSecondary"
|
app:nv_secondaryTextColor="?android:textColorSecondary"
|
||||||
app:nv_twoLine="false" />
|
app:nv_twoLine="false" />
|
||||||
|
@ -115,7 +113,6 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="@dimen/element_spacing_small"
|
android:layout_marginTop="@dimen/element_spacing_small"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:tag="font_family|user"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||||
tools:text="Jan 1 2015 0:00 · Twidere" />
|
tools:text="Jan 1 2015 0:00 · Twidere" />
|
||||||
|
|
||||||
|
@ -160,7 +157,6 @@
|
||||||
android:layout_marginTop="@dimen/element_spacing_small"
|
android:layout_marginTop="@dimen/element_spacing_small"
|
||||||
android:paddingLeft="@dimen/element_spacing_normal"
|
android:paddingLeft="@dimen/element_spacing_normal"
|
||||||
android:paddingRight="@dimen/element_spacing_normal"
|
android:paddingRight="@dimen/element_spacing_normal"
|
||||||
android:tag="font_family|user"
|
|
||||||
android:textAppearance="?android:textAppearanceMedium"
|
android:textAppearance="?android:textAppearanceMedium"
|
||||||
android:textColor="?android:textColorPrimary"
|
android:textColor="?android:textColorPrimary"
|
||||||
android:visibility="visible"
|
android:visibility="visible"
|
||||||
|
@ -186,7 +182,6 @@
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:maxLines="1"
|
android:maxLines="1"
|
||||||
android:padding="@dimen/element_spacing_normal"
|
android:padding="@dimen/element_spacing_normal"
|
||||||
android:tag="font_family|user"
|
|
||||||
android:text="@string/unknown_language"
|
android:text="@string/unknown_language"
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||||
android:textColor="?android:textColorSecondary" />
|
android:textColor="?android:textColorSecondary" />
|
||||||
|
@ -196,7 +191,6 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="@dimen/element_spacing_normal"
|
android:padding="@dimen/element_spacing_normal"
|
||||||
android:tag="font_family|user"
|
|
||||||
android:textColor="?android:textColorPrimary"
|
android:textColor="?android:textColorPrimary"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
tools:text="@string/sample_status_text" />
|
tools:text="@string/sample_status_text" />
|
||||||
|
@ -242,7 +236,6 @@
|
||||||
android:drawableLeft="@drawable/ic_action_gallery"
|
android:drawableLeft="@drawable/ic_action_gallery"
|
||||||
android:drawableStart="@drawable/ic_action_gallery"
|
android:drawableStart="@drawable/ic_action_gallery"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:tag="font_family|user"
|
|
||||||
android:text="@string/load_media"
|
android:text="@string/load_media"
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold" />
|
||||||
|
@ -275,7 +268,6 @@
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:paddingLeft="@dimen/element_spacing_normal"
|
android:paddingLeft="@dimen/element_spacing_normal"
|
||||||
android:paddingRight="@dimen/element_spacing_normal"
|
android:paddingRight="@dimen/element_spacing_normal"
|
||||||
android:tag="font_family|user"
|
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
app:nv_primaryTextColor="?android:textColorPrimary"
|
app:nv_primaryTextColor="?android:textColorPrimary"
|
||||||
app:nv_secondaryTextColor="?android:textColorSecondary"
|
app:nv_secondaryTextColor="?android:textColorSecondary"
|
||||||
|
@ -289,7 +281,6 @@
|
||||||
android:layout_margin="@dimen/element_spacing_normal"
|
android:layout_margin="@dimen/element_spacing_normal"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:maxLines="4"
|
android:maxLines="4"
|
||||||
android:tag="font_family|user"
|
|
||||||
android:textAppearance="?android:textAppearanceMedium"
|
android:textAppearance="?android:textAppearanceMedium"
|
||||||
android:textColor="?android:textColorPrimary"
|
android:textColor="?android:textColorPrimary"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
|
@ -355,7 +346,6 @@
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:maxLines="1"
|
android:maxLines="1"
|
||||||
android:padding="@dimen/element_spacing_normal"
|
android:padding="@dimen/element_spacing_normal"
|
||||||
android:tag="font_family|user"
|
|
||||||
android:text="@string/action_view_map"
|
android:text="@string/action_view_map"
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||||
android:textColor="?android:textColorSecondary" />
|
android:textColor="?android:textColorSecondary" />
|
||||||
|
|
|
@ -63,7 +63,6 @@
|
||||||
android:contentDescription="@string/search"
|
android:contentDescription="@string/search"
|
||||||
android:scaleType="centerInside"
|
android:scaleType="centerInside"
|
||||||
android:src="@drawable/ic_action_search"
|
android:src="@drawable/ic_action_search"
|
||||||
android:tag="tint|primary_color_dependent"
|
|
||||||
app:backgroundTintMode="src_atop"/>
|
app:backgroundTintMode="src_atop"/>
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,6 @@
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:minHeight="?android:attr/listPreferredItemHeight"
|
android:minHeight="?android:attr/listPreferredItemHeight"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:tag="tint_background|accent_color"
|
|
||||||
app:backgroundTint="?colorControlActivated">
|
app:backgroundTint="?colorControlActivated">
|
||||||
|
|
||||||
<View
|
<View
|
||||||
|
|
|
@ -28,7 +28,6 @@
|
||||||
android:descendantFocusability="blocksDescendants"
|
android:descendantFocusability="blocksDescendants"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:padding="@dimen/element_spacing_normal"
|
android:padding="@dimen/element_spacing_normal"
|
||||||
android:tag="tint_background|accent_color"
|
|
||||||
app:backgroundTint="?colorControlActivated"
|
app:backgroundTint="?colorControlActivated"
|
||||||
app:ignorePadding="true"
|
app:ignorePadding="true"
|
||||||
tools:context=".adapter.DraftsAdapter">
|
tools:context=".adapter.DraftsAdapter">
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
<string name="action_denying_follow_request">denying follow request</string>
|
<string name="action_denying_follow_request">denying follow request</string>
|
||||||
<!-- [verb] Edit image/settings etc. -->
|
<!-- [verb] Edit image/settings etc. -->
|
||||||
<string name="action_edit">Edit</string>
|
<string name="action_edit">Edit</string>
|
||||||
|
<string name="action_edit_filter_rule">Edit rule</string>
|
||||||
<string name="action_favorite">Favorite</string>
|
<string name="action_favorite">Favorite</string>
|
||||||
<string name="action_favoriting">favoriting</string>
|
<string name="action_favoriting">favoriting</string>
|
||||||
<string name="action_filter_import_from_blocked_users">Import from blocked users</string>
|
<string name="action_filter_import_from_blocked_users">Import from blocked users</string>
|
||||||
|
@ -688,6 +689,7 @@
|
||||||
<string name="message_toast_already_logged_in">You have already logged in</string>
|
<string name="message_toast_already_logged_in">You have already logged in</string>
|
||||||
<string name="message_toast_cannot_get_location">Can\'t get your location</string>
|
<string name="message_toast_cannot_get_location">Can\'t get your location</string>
|
||||||
<string name="message_toast_compose_write_storage_no_permission">Permission required to delete taken photo/video</string>
|
<string name="message_toast_compose_write_storage_no_permission">Permission required to delete taken photo/video</string>
|
||||||
|
<string name="message_toast_duplicate_filter_rule">Rule duplicated</string>
|
||||||
<string name="message_toast_error_occurred">An error occurred, please try again</string>
|
<string name="message_toast_error_occurred">An error occurred, please try again</string>
|
||||||
<!-- Toast message for enhanced (paid) features not purchased while trying to restore purchase -->
|
<!-- Toast message for enhanced (paid) features not purchased while trying to restore purchase -->
|
||||||
<string name="message_toast_extra_features_not_purchased">Enhanced features not purchased</string>
|
<string name="message_toast_extra_features_not_purchased">Enhanced features not purchased</string>
|
||||||
|
|
Loading…
Reference in New Issue