fixed add filtered users

refactoring userlist selector
This commit is contained in:
Mariotaku Lee 2017-01-31 16:02:44 +08:00
parent 4ceaf681c4
commit 85ae456b4a
No known key found for this signature in database
GPG Key ID: 15C10F89D7C33535
8 changed files with 58 additions and 45 deletions

View File

@ -23,6 +23,7 @@ import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.support.v4.app.LoaderManager
import android.support.v4.app.hasRunningLoadersSafe
import android.support.v4.content.Loader
import android.view.View
import android.widget.AdapterView.OnItemClickListener
@ -38,12 +39,14 @@ import org.mariotaku.twidere.loader.UserListOwnershipsLoader
import org.mariotaku.twidere.model.ParcelableUser
import org.mariotaku.twidere.model.ParcelableUserList
import org.mariotaku.twidere.model.UserKey
import org.mariotaku.twidere.util.ContentScrollHandler
import org.mariotaku.twidere.util.ListViewScrollHandler
class UserListSelectorActivity : BaseActivity(),
ContentScrollHandler.ContentListSupport<SimpleParcelableUserListsAdapter>,
LoaderManager.LoaderCallbacks<List<ParcelableUserList>> {
private lateinit var adapter: SimpleParcelableUserListsAdapter
override lateinit var adapter: SimpleParcelableUserListsAdapter
private val accountKey: UserKey?
get() = intent.getParcelableExtra<UserKey>(EXTRA_ACCOUNT_KEY)
@ -68,6 +71,7 @@ class UserListSelectorActivity : BaseActivity(),
(findViewById(android.R.id.text1) as TextView).setText(R.string.action_select_user)
}, SelectUserAction, true)
listView.adapter = adapter
listView.setOnScrollListener(ListViewScrollHandler(this, listView))
listView.onItemClickListener = OnItemClickListener { view, child, position, id ->
val item = view.getItemAtPosition(position)
when (item) {
@ -132,6 +136,26 @@ class UserListSelectorActivity : BaseActivity(),
showList()
}
override fun setControlVisible(visible: Boolean) {
}
override var refreshing: Boolean
get() {
return supportLoaderManager.hasRunningLoadersSafe()
}
set(value) {
}
override val reachingStart: Boolean
get() = listView.firstVisiblePosition < 0
override val reachingEnd: Boolean
get() = listView.lastVisiblePosition > (listView.count + listView.headerViewsCount
+ listView.footerViewsCount)
override fun onLoadMoreContents(position: Long) {
}
private fun loadUserLists(accountKey: UserKey, userKey: UserKey) {
if (userKey != this.userKey) {
adapter.clear()

View File

@ -43,9 +43,9 @@ import org.mariotaku.twidere.util.TwidereColorUtils
* Created by mariotaku on 15/4/16.
*/
abstract class AbsContentListViewFragment<A : ListAdapter> : BaseFragment(),
OnRefreshListener, RefreshScrollTopInterface, ControlBarOffsetListener, ContentListSupport,
OnRefreshListener, RefreshScrollTopInterface, ControlBarOffsetListener, ContentListSupport<A>,
AbsListView.OnScrollListener {
private lateinit var scrollHandler: ListViewScrollHandler
private lateinit var scrollHandler: ListViewScrollHandler<A>
// Data fields
private val systemWindowsInsets = Rect()

View File

@ -46,7 +46,7 @@ import org.mariotaku.twidere.view.iface.IExtendedView
abstract class AbsContentRecyclerViewFragment<A : LoadMoreSupportAdapter<RecyclerView.ViewHolder>,
L : RecyclerView.LayoutManager> : BaseFragment(), SwipeRefreshLayout.OnRefreshListener,
HeaderDrawerLayout.DrawerCallback, RefreshScrollTopInterface, IControlBarActivity.ControlBarOffsetListener,
ContentScrollHandler.ContentListSupport, ControlBarShowHideHelper.ControlBarAnimationListener {
ContentScrollHandler.ContentListSupport<A>, ControlBarShowHideHelper.ControlBarAnimationListener {
lateinit var layoutManager: L
protected set
@ -57,7 +57,7 @@ abstract class AbsContentRecyclerViewFragment<A : LoadMoreSupportAdapter<Recycle
// Callbacks and listeners
private lateinit var drawerCallback: SimpleDrawerCallback
lateinit var scrollListener: RecyclerViewScrollHandler
lateinit var scrollListener: RecyclerViewScrollHandler<A>
// Data fields
private val systemWindowsInsets = Rect()

View File

@ -121,14 +121,15 @@ import java.util.*
* Created by mariotaku on 14/12/5.
*/
class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<ParcelableStatus>>,
OnMediaClickListener, StatusClickListener, KeyboardShortcutCallback, ContentListSupport {
OnMediaClickListener, StatusClickListener, KeyboardShortcutCallback,
ContentListSupport<StatusFragment.StatusAdapter> {
private var mItemDecoration: DividerItemDecoration? = null
override lateinit var adapter: StatusAdapter
private lateinit var layoutManager: LinearLayoutManager
private lateinit var navigationHelper: RecyclerViewNavigationHelper
private lateinit var scrollListener: RecyclerViewScrollHandler
private lateinit var scrollListener: RecyclerViewScrollHandler<StatusFragment.StatusAdapter>
private var loadTranslationTask: LoadTranslationTask? = null
// Data fields

View File

@ -34,10 +34,7 @@ import org.mariotaku.twidere.model.`FiltersData$UserItemCursorIndices`
import org.mariotaku.twidere.model.analyzer.PurchaseFinished
import org.mariotaku.twidere.provider.TwidereDataStore.Filters
import org.mariotaku.twidere.text.style.EmojiSpan
import org.mariotaku.twidere.util.Analyzer
import org.mariotaku.twidere.util.ContentValuesCreator
import org.mariotaku.twidere.util.ThemeUtils
import org.mariotaku.twidere.util.UserColorNameManager
import org.mariotaku.twidere.util.*
import org.mariotaku.twidere.util.dagger.GeneralComponentHelper
import org.mariotaku.twidere.util.premium.ExtraFeaturesService
import javax.inject.Inject
@ -55,35 +52,30 @@ class FilteredUsersFragment : BaseFiltersFragment() {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
when (requestCode) {
REQUEST_SELECT_USER -> {
if (resultCode != FragmentActivity.RESULT_OK) return
val user = data!!.getParcelableExtra<ParcelableUser>(EXTRA_USER)
val values = ContentValuesCreator.createFilteredUser(user)
val resolver = context.contentResolver
val where = Expression.equalsArgs(Filters.Users.USER_KEY).sql
val whereArgs = arrayOf(user.key.toString())
resolver.delete(Filters.Users.CONTENT_URI, where, whereArgs)
resolver.insert(Filters.Users.CONTENT_URI, values)
if (resultCode != FragmentActivity.RESULT_OK || data == null) return
val user = data.getParcelableExtra<ParcelableUser>(EXTRA_USER)
DataStoreUtils.addToFilter(context, listOf(user), false)
}
REQUEST_IMPORT_BLOCKS_SELECT_ACCOUNT -> {
if (resultCode != FragmentActivity.RESULT_OK) return
if (resultCode != FragmentActivity.RESULT_OK || data == null) return
val intent = Intent(context, LinkHandlerActivity::class.java)
intent.data = Uri.Builder().scheme(SCHEME_TWIDERE).authority(AUTHORITY_FILTERS).path(PATH_FILTERS_IMPORT_BLOCKS).build()
intent.putExtra(EXTRA_ACCOUNT_KEY, data!!.getParcelableExtra<UserKey>(EXTRA_ACCOUNT_KEY))
intent.putExtra(EXTRA_ACCOUNT_KEY, data.getParcelableExtra<UserKey>(EXTRA_ACCOUNT_KEY))
startActivity(intent)
}
REQUEST_IMPORT_MUTES_SELECT_ACCOUNT -> {
if (resultCode != FragmentActivity.RESULT_OK) return
if (resultCode != FragmentActivity.RESULT_OK || data == null) return
val intent = Intent(context, LinkHandlerActivity::class.java)
intent.data = Uri.Builder().scheme(SCHEME_TWIDERE).authority(AUTHORITY_FILTERS).path(PATH_FILTERS_IMPORT_MUTES).build()
intent.putExtra(EXTRA_ACCOUNT_KEY, data!!.getParcelableExtra<UserKey>(EXTRA_ACCOUNT_KEY))
intent.putExtra(EXTRA_ACCOUNT_KEY, data.getParcelableExtra<UserKey>(EXTRA_ACCOUNT_KEY))
startActivity(intent)
}
REQUEST_ADD_USER_SELECT_ACCOUNT -> {
if (resultCode != FragmentActivity.RESULT_OK) return
if (resultCode != FragmentActivity.RESULT_OK || data == null) return
val intent = Intent(INTENT_ACTION_SELECT_USER)
intent.setClass(context, UserSelectorActivity::class.java)
intent.putExtra(EXTRA_ACCOUNT_KEY, data!!.getParcelableExtra<UserKey>(EXTRA_ACCOUNT_KEY))
startActivityForResult(intent, REQUEST_ADD_USER_SELECT_ACCOUNT)
intent.putExtra(EXTRA_ACCOUNT_KEY, data.getParcelableExtra<UserKey>(EXTRA_ACCOUNT_KEY))
startActivityForResult(intent, REQUEST_SELECT_USER)
}
REQUEST_PURCHASE_EXTRA_FEATURES -> {
if (resultCode == Activity.RESULT_OK) {

View File

@ -29,8 +29,8 @@ import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter.IndicatorPosi
/**
* Created by mariotaku on 15/3/15.
*/
open class ContentScrollHandler(
private val contentListSupport: ContentScrollHandler.ContentListSupport,
open class ContentScrollHandler<A>(
private val contentListSupport: ContentScrollHandler.ContentListSupport<A>,
private val viewCallback: ContentScrollHandler.ViewCallback?
) {
val touchListener: View.OnTouchListener
@ -123,7 +123,7 @@ open class ContentScrollHandler(
scrollDirection = 0
}
internal class TouchListener(private val listener: ContentScrollHandler) : View.OnTouchListener {
internal class TouchListener<A>(private val listener: ContentScrollHandler<A>) : View.OnTouchListener {
private var lastY: Float = 0f
override fun onTouch(v: View, event: MotionEvent): Boolean {
@ -151,9 +151,9 @@ open class ContentScrollHandler(
fun post(runnable: Runnable)
}
interface ContentListSupport {
interface ContentListSupport<A> {
val adapter: Any?
val adapter: A?
val refreshing: Boolean

View File

@ -1,25 +1,25 @@
package org.mariotaku.twidere.util
import android.widget.AbsListView
import android.widget.ListView
import org.mariotaku.twidere.util.support.ViewSupport
/**
* Created by mariotaku on 16/3/1.
*/
class ListViewScrollHandler(
contentListSupport: ContentScrollHandler.ContentListSupport,
class ListViewScrollHandler<A>(
contentListSupport: ContentScrollHandler.ContentListSupport<A>,
viewCallback: ContentScrollHandler.ViewCallback?
) : ContentScrollHandler(contentListSupport, viewCallback), AbsListView.OnScrollListener,
) : ContentScrollHandler<A>(contentListSupport, viewCallback), AbsListView.OnScrollListener,
ListScrollDistanceCalculator.ScrollDistanceListener {
private val calculator: ListScrollDistanceCalculator
private val calculator: ListScrollDistanceCalculator = ListScrollDistanceCalculator()
var onScrollListener: AbsListView.OnScrollListener? = null
private var dy: Int = 0
private var oldState = AbsListView.OnScrollListener.SCROLL_STATE_IDLE
init {
calculator = ListScrollDistanceCalculator()
}
constructor(contentListSupport: ContentScrollHandler.ContentListSupport<A>, listView: ListView)
: this(contentListSupport, ListViewCallback(listView))
override fun onScrollStateChanged(view: AbsListView, scrollState: Int) {
calculator.onScrollStateChanged(view, scrollState)

View File

@ -9,15 +9,11 @@ import org.mariotaku.twidere.util.ContentScrollHandler.ViewCallback
/**
* Created by mariotaku on 16/3/1.
*/
class RecyclerViewScrollHandler(contentListSupport: ContentListSupport, viewCallback: ViewCallback?) : RecyclerView.OnScrollListener() {
class RecyclerViewScrollHandler<A>(contentListSupport: ContentListSupport<A>, viewCallback: ViewCallback?) : RecyclerView.OnScrollListener() {
internal val scrollHandler: ContentScrollHandler
internal val scrollHandler: ContentScrollHandler<A> = ContentScrollHandler(contentListSupport, viewCallback)
private var oldState = RecyclerView.SCROLL_STATE_IDLE
init {
scrollHandler = ContentScrollHandler(contentListSupport, viewCallback)
}
var touchSlop: Int
get() = scrollHandler.touchSlop
set(value) {