2016-06-29 15:47:52 +02:00
|
|
|
package org.mariotaku.twidere.fragment
|
|
|
|
|
|
|
|
import android.content.Context
|
|
|
|
import android.content.Intent
|
|
|
|
import android.os.Bundle
|
|
|
|
import android.os.Parcelable
|
|
|
|
import android.support.v4.app.LoaderManager.LoaderCallbacks
|
2017-02-07 16:36:29 +01:00
|
|
|
import android.support.v4.content.FixedAsyncTaskLoader
|
2016-06-29 15:47:52 +02:00
|
|
|
import android.support.v4.content.Loader
|
|
|
|
import android.support.v7.widget.RecyclerView
|
|
|
|
import android.view.ContextMenu
|
|
|
|
import android.view.MenuInflater
|
|
|
|
import android.view.MenuItem
|
|
|
|
import android.view.View
|
2017-09-03 15:23:45 +02:00
|
|
|
import com.bumptech.glide.RequestManager
|
2016-06-29 15:47:52 +02:00
|
|
|
import kotlinx.android.synthetic.main.fragment_content_recyclerview.*
|
2017-01-20 15:08:42 +01:00
|
|
|
import org.mariotaku.kpreferences.get
|
2016-06-29 15:47:52 +02:00
|
|
|
import org.mariotaku.twidere.R
|
|
|
|
import org.mariotaku.twidere.adapter.VariousItemsAdapter
|
|
|
|
import org.mariotaku.twidere.adapter.iface.IUsersAdapter
|
2017-04-23 13:09:16 +02:00
|
|
|
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY
|
2016-06-29 15:47:52 +02:00
|
|
|
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ITEMS
|
2017-01-20 15:08:42 +01:00
|
|
|
import org.mariotaku.twidere.constant.displaySensitiveContentsKey
|
|
|
|
import org.mariotaku.twidere.constant.newDocumentApiKey
|
2017-04-23 13:09:16 +02:00
|
|
|
import org.mariotaku.twidere.extension.model.prefixedHashtag
|
2017-02-13 17:44:56 +01:00
|
|
|
import org.mariotaku.twidere.fragment.AbsStatusesFragment.Companion.handleActionClick
|
2017-04-23 13:09:16 +02:00
|
|
|
import org.mariotaku.twidere.model.ParcelableHashtag
|
2016-06-29 15:47:52 +02:00
|
|
|
import org.mariotaku.twidere.model.ParcelableMedia
|
2017-04-23 13:09:16 +02:00
|
|
|
import org.mariotaku.twidere.model.UserKey
|
2016-06-29 15:47:52 +02:00
|
|
|
import org.mariotaku.twidere.util.IntentUtils
|
|
|
|
import org.mariotaku.twidere.util.MenuUtils
|
|
|
|
import org.mariotaku.twidere.util.Utils
|
|
|
|
import org.mariotaku.twidere.view.ExtendedRecyclerView
|
|
|
|
import org.mariotaku.twidere.view.holder.StatusViewHolder
|
|
|
|
import org.mariotaku.twidere.view.holder.UserViewHolder
|
|
|
|
import org.mariotaku.twidere.view.holder.iface.IStatusViewHolder
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Created by mariotaku on 16/3/20.
|
|
|
|
*/
|
2017-04-23 13:09:16 +02:00
|
|
|
open class ItemsListFragment : AbsContentListRecyclerViewFragment<VariousItemsAdapter>(),
|
|
|
|
LoaderCallbacks<List<Any>?> {
|
|
|
|
|
|
|
|
protected val accountKey: UserKey?
|
|
|
|
get() = arguments.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY)
|
|
|
|
|
2016-06-29 15:47:52 +02:00
|
|
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
|
|
|
super.onActivityCreated(savedInstanceState)
|
|
|
|
registerForContextMenu(recyclerView)
|
|
|
|
loaderManager.initLoader(0, null, this)
|
2016-07-03 08:42:28 +02:00
|
|
|
refreshEnabled = false
|
2017-04-23 13:09:16 +02:00
|
|
|
showProgress()
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
|
|
|
when (requestCode) {
|
|
|
|
AbsStatusesFragment.REQUEST_FAVORITE_SELECT_ACCOUNT,
|
|
|
|
AbsStatusesFragment.REQUEST_RETWEET_SELECT_ACCOUNT -> {
|
|
|
|
AbsStatusesFragment.handleActionActivityResult(this, requestCode, resultCode, data)
|
|
|
|
}
|
|
|
|
}
|
2016-06-29 15:47:52 +02:00
|
|
|
}
|
|
|
|
|
2017-09-03 15:23:45 +02:00
|
|
|
override fun onCreateAdapter(context: Context, requestManager: RequestManager): VariousItemsAdapter {
|
|
|
|
val adapter = VariousItemsAdapter(context, requestManager)
|
2016-06-29 15:47:52 +02:00
|
|
|
val dummyItemAdapter = adapter.dummyAdapter
|
2017-01-17 18:59:44 +01:00
|
|
|
dummyItemAdapter.statusClickListener = object : IStatusViewHolder.StatusClickListener {
|
2016-06-29 15:47:52 +02:00
|
|
|
override fun onStatusClick(holder: IStatusViewHolder, position: Int) {
|
2017-03-21 14:36:06 +01:00
|
|
|
val status = dummyItemAdapter.getStatus(position)
|
2016-06-29 15:47:52 +02:00
|
|
|
IntentUtils.openStatus(getContext(), status, null)
|
|
|
|
}
|
|
|
|
|
2017-01-17 18:59:44 +01:00
|
|
|
override fun onQuotedStatusClick(holder: IStatusViewHolder, position: Int) {
|
2017-03-21 14:36:06 +01:00
|
|
|
val status = dummyItemAdapter.getStatus(position)
|
2017-01-17 18:59:44 +01:00
|
|
|
IntentUtils.openStatus(getContext(), status.account_key, status.quoted_id)
|
|
|
|
}
|
|
|
|
|
2016-06-29 15:47:52 +02:00
|
|
|
override fun onItemActionClick(holder: RecyclerView.ViewHolder, id: Int, position: Int) {
|
2017-03-21 14:36:06 +01:00
|
|
|
val status = dummyItemAdapter.getStatus(position)
|
2017-04-12 10:17:20 +02:00
|
|
|
handleActionClick(this@ItemsListFragment, id, status, holder as StatusViewHolder)
|
2016-06-29 15:47:52 +02:00
|
|
|
}
|
|
|
|
|
2017-02-08 10:36:47 +01:00
|
|
|
override fun onItemActionLongClick(holder: RecyclerView.ViewHolder, id: Int, position: Int): Boolean {
|
2017-03-21 14:36:06 +01:00
|
|
|
val status = dummyItemAdapter.getStatus(position)
|
2017-02-08 10:36:47 +01:00
|
|
|
return AbsStatusesFragment.handleActionLongClick(this@ItemsListFragment, status,
|
|
|
|
adapter.getItemId(position), id)
|
|
|
|
}
|
|
|
|
|
2016-06-29 15:47:52 +02:00
|
|
|
override fun onItemMenuClick(holder: RecyclerView.ViewHolder, menuView: View, position: Int) {
|
|
|
|
if (activity == null) return
|
2016-12-08 15:43:18 +01:00
|
|
|
val view = layoutManager.findViewByPosition(position) ?: return
|
2016-06-29 15:47:52 +02:00
|
|
|
recyclerView.showContextMenuForChild(view)
|
|
|
|
}
|
|
|
|
|
2017-02-28 03:37:03 +01:00
|
|
|
override fun onMediaClick(holder: IStatusViewHolder, view: View, current: ParcelableMedia, statusPosition: Int) {
|
2017-03-21 14:36:06 +01:00
|
|
|
val status = dummyItemAdapter.getStatus(statusPosition)
|
2017-02-28 03:37:03 +01:00
|
|
|
IntentUtils.openMedia(activity, status, current, preferences[newDocumentApiKey], preferences[displaySensitiveContentsKey],
|
2017-01-20 15:08:42 +01:00
|
|
|
null)
|
2016-06-29 15:47:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun onUserProfileClick(holder: IStatusViewHolder, position: Int) {
|
|
|
|
val activity = activity
|
2017-03-21 14:36:06 +01:00
|
|
|
val status = dummyItemAdapter.getStatus(position)
|
2016-06-29 15:47:52 +02:00
|
|
|
IntentUtils.openUserProfile(activity, status.account_key, status.user_key,
|
2017-04-07 13:05:02 +02:00
|
|
|
status.user_screen_name, status.extras?.user_statusnet_profile_url,
|
|
|
|
preferences[newDocumentApiKey])
|
2016-06-29 15:47:52 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
dummyItemAdapter.userClickListener = object : IUsersAdapter.SimpleUserClickListener() {
|
|
|
|
override fun onUserClick(holder: UserViewHolder, position: Int) {
|
|
|
|
val user = dummyItemAdapter.getUser(position) ?: return
|
2017-04-23 13:09:16 +02:00
|
|
|
IntentUtils.openUserProfile(context, user, preferences[newDocumentApiKey],
|
2017-08-28 06:31:19 +02:00
|
|
|
null)
|
2016-06-29 15:47:52 +02:00
|
|
|
}
|
|
|
|
}
|
2017-04-23 13:09:16 +02:00
|
|
|
adapter.hashtagClickListener = { position ->
|
|
|
|
val hashtag = adapter.getItem(position) as ParcelableHashtag
|
|
|
|
IntentUtils.openTweetSearch(context, accountKey, hashtag.prefixedHashtag)
|
2017-02-08 10:36:47 +01:00
|
|
|
}
|
2017-04-23 13:09:16 +02:00
|
|
|
return adapter
|
2017-02-08 10:36:47 +01:00
|
|
|
}
|
|
|
|
|
2017-04-23 13:09:16 +02:00
|
|
|
override fun onCreateLoader(id: Int, args: Bundle?): Loader<List<Any>?> {
|
2016-06-29 15:47:52 +02:00
|
|
|
return ItemsLoader(context, arguments)
|
|
|
|
}
|
|
|
|
|
2017-04-23 13:09:16 +02:00
|
|
|
override final fun onLoadFinished(loader: Loader<List<Any>?>, data: List<Any>?) {
|
2016-12-08 15:43:18 +01:00
|
|
|
adapter.setData(data)
|
2017-04-23 13:09:16 +02:00
|
|
|
showContent()
|
2016-06-29 15:47:52 +02:00
|
|
|
}
|
|
|
|
|
2017-04-23 13:09:16 +02:00
|
|
|
override fun onLoaderReset(loader: Loader<List<Any>?>) {
|
2016-12-08 15:43:18 +01:00
|
|
|
adapter.setData(null)
|
2016-06-29 15:47:52 +02:00
|
|
|
}
|
|
|
|
|
2016-07-03 08:42:28 +02:00
|
|
|
override var refreshing: Boolean
|
2016-06-29 15:47:52 +02:00
|
|
|
get() = false
|
2016-07-03 08:42:28 +02:00
|
|
|
set(value) {
|
|
|
|
}
|
2016-06-29 15:47:52 +02:00
|
|
|
|
|
|
|
override fun onCreateContextMenu(menu: ContextMenu, v: View, menuInfo: ContextMenu.ContextMenuInfo?) {
|
|
|
|
if (!userVisibleHint || menuInfo == null) return
|
|
|
|
val inflater = MenuInflater(context)
|
|
|
|
val contextMenuInfo = menuInfo as ExtendedRecyclerView.ContextMenuInfo?
|
|
|
|
val position = contextMenuInfo!!.position
|
2016-12-08 15:43:18 +01:00
|
|
|
when (adapter.getItemViewType(position)) {
|
2016-06-29 15:47:52 +02:00
|
|
|
VariousItemsAdapter.VIEW_TYPE_STATUS -> {
|
|
|
|
val dummyAdapter = adapter.dummyAdapter
|
2017-03-21 14:36:06 +01:00
|
|
|
val status = dummyAdapter.getStatus(contextMenuInfo.position)
|
2016-06-29 15:47:52 +02:00
|
|
|
inflater.inflate(R.menu.action_status, menu)
|
2017-04-12 10:17:20 +02:00
|
|
|
MenuUtils.setupForStatus(context, menu, preferences, twitterWrapper,
|
|
|
|
userColorNameManager, status)
|
2016-06-29 15:47:52 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-04-12 10:17:20 +02:00
|
|
|
override fun onContextItemSelected(item: MenuItem): Boolean {
|
2016-06-29 15:47:52 +02:00
|
|
|
if (!userVisibleHint) return false
|
2017-04-12 10:17:20 +02:00
|
|
|
val contextMenuInfo = item.menuInfo as ExtendedRecyclerView.ContextMenuInfo
|
2016-06-29 15:47:52 +02:00
|
|
|
val position = contextMenuInfo.position
|
2016-12-08 15:43:18 +01:00
|
|
|
when (adapter.getItemViewType(position)) {
|
2016-06-29 15:47:52 +02:00
|
|
|
VariousItemsAdapter.VIEW_TYPE_STATUS -> {
|
|
|
|
val dummyAdapter = adapter.dummyAdapter
|
2017-03-21 14:36:06 +01:00
|
|
|
val status = dummyAdapter.getStatus(position)
|
2016-06-29 15:47:52 +02:00
|
|
|
if (item.itemId == R.id.share) {
|
|
|
|
val shareIntent = Utils.createStatusShareIntent(activity, status)
|
|
|
|
val chooser = Intent.createChooser(shareIntent, getString(R.string.share_status))
|
|
|
|
startActivity(chooser)
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
return MenuUtils.handleStatusClick(activity, this, fragmentManager,
|
2017-04-12 10:17:20 +02:00
|
|
|
preferences, userColorNameManager, twitterWrapper, status, item)
|
2016-06-29 15:47:52 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
2017-04-23 13:09:16 +02:00
|
|
|
class ItemsLoader(context: Context, private val arguments: Bundle) : FixedAsyncTaskLoader<List<Any>>(context) {
|
2016-06-29 15:47:52 +02:00
|
|
|
|
2017-04-23 13:09:16 +02:00
|
|
|
override fun loadInBackground(): List<Any> {
|
2016-07-03 08:42:28 +02:00
|
|
|
return arguments.getParcelableArrayList<Parcelable>(EXTRA_ITEMS)
|
2016-06-29 15:47:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun onStartLoading() {
|
|
|
|
forceLoad()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|