parent
0a5002f10a
commit
fc5b5a0360
|
@ -33,14 +33,15 @@
|
|||
-dontwarn sun.misc.**
|
||||
-dontwarn sun.nio.**
|
||||
-dontwarn java.nio.file.**
|
||||
|
||||
-dontwarn InnerClasses
|
||||
|
||||
-keepattributes *Annotation*
|
||||
-keepattributes EnclosingMethod
|
||||
-keepattributes SourceFile
|
||||
-keepattributes LineNumberTable
|
||||
-keepattributes Signature
|
||||
-keepattributes InnetClasses
|
||||
-keepattributes InnerClasses
|
||||
|
||||
|
||||
# https://github.com/bluelinelabs/LoganSquare
|
||||
-keep class com.bluelinelabs.logansquare.annotation.JsonObject
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
package android.support.v4.app
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 2016/11/26.
|
||||
*/
|
||||
|
||||
fun LoaderManager.hasRunningLoadersSafe(): Boolean {
|
||||
if (!(this is LoaderManagerImpl)) return false
|
||||
var loadersRunning = false
|
||||
val count = mLoaders.size()
|
||||
for (i in 0 until count) {
|
||||
val li = mLoaders.valueAt(i) ?: continue
|
||||
loadersRunning = loadersRunning or (li.mStarted && !li.mDeliveredData)
|
||||
}
|
||||
return loadersRunning
|
||||
}
|
|
@ -24,10 +24,7 @@ import android.net.Uri
|
|||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.Parcelable
|
||||
import android.support.v4.app.ActivityCompat
|
||||
import android.support.v4.app.DialogFragment
|
||||
import android.support.v4.app.Fragment
|
||||
import android.support.v4.app.FragmentActivity
|
||||
import android.support.v4.app.*
|
||||
import android.support.v4.view.ViewPager
|
||||
import android.support.v7.widget.Toolbar
|
||||
import android.view.Menu
|
||||
|
@ -103,10 +100,9 @@ class MediaViewerActivity : BaseActivity(), IExtendedActivity, ATEToolbarCustomi
|
|||
val adapter = viewPager.adapter
|
||||
val currentItem = viewPager.currentItem
|
||||
if (currentItem < 0 || currentItem >= adapter.count) return false
|
||||
val obj = adapter.instantiateItem(viewPager, currentItem)
|
||||
if (obj !is MediaViewerFragment) return false
|
||||
val obj = adapter.instantiateItem(viewPager, currentItem) as? MediaViewerFragment ?: return false
|
||||
if (obj is CacheDownloadMediaViewerFragment) {
|
||||
val running = obj.loaderManager.hasRunningLoaders()
|
||||
val running = obj.loaderManager.hasRunningLoadersSafe()
|
||||
val downloaded = obj.hasDownloadedData()
|
||||
MenuUtils.setItemAvailability(menu, R.id.refresh, !running && !downloaded)
|
||||
MenuUtils.setItemAvailability(menu, R.id.share, !running && downloaded)
|
||||
|
|
|
@ -335,7 +335,7 @@ abstract class AbsStatusesFragment protected constructor() :
|
|||
val lastItemIndex = Math.min(statusEndIndex, lastVisiblePos)
|
||||
lastReadPositionKey = adapter.getStatusPositionKey(lastItemIndex)
|
||||
val positionView = layoutManager.findViewByPosition(lastItemIndex)
|
||||
lastVisibleTop = if (positionView != null) positionView.top else 0
|
||||
lastVisibleTop = positionView?.top ?: 0
|
||||
} else if (rememberPosition && tag != null) {
|
||||
lastReadPositionKey = readStateManager.getPosition(tag)
|
||||
lastVisibleTop = 0
|
||||
|
|
|
@ -22,6 +22,7 @@ package org.mariotaku.twidere.fragment
|
|||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.LoaderManager.LoaderCallbacks
|
||||
import android.support.v4.app.hasRunningLoadersSafe
|
||||
import android.support.v4.content.Loader
|
||||
import android.support.v7.widget.RecyclerView
|
||||
import android.view.KeyEvent
|
||||
|
@ -50,7 +51,7 @@ abstract class ParcelableGroupsFragment : AbsContentListRecyclerViewFragment<Par
|
|||
override var refreshing: Boolean
|
||||
get() {
|
||||
if (context == null || isDetached) return false
|
||||
return loaderManager.hasRunningLoaders()
|
||||
return loaderManager.hasRunningLoadersSafe()
|
||||
}
|
||||
set(value) {
|
||||
super.refreshing = value
|
||||
|
|
|
@ -21,6 +21,7 @@ package org.mariotaku.twidere.fragment
|
|||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.hasRunningLoadersSafe
|
||||
import android.support.v4.content.Loader
|
||||
import android.text.TextUtils
|
||||
import com.squareup.otto.Subscribe
|
||||
|
@ -199,7 +200,7 @@ abstract class ParcelableStatusesFragment : AbsStatusesFragment() {
|
|||
override var refreshing: Boolean
|
||||
get() {
|
||||
if (context == null || isDetached) return false
|
||||
return loaderManager.hasRunningLoaders()
|
||||
return loaderManager.hasRunningLoadersSafe()
|
||||
}
|
||||
set(value) {
|
||||
super.refreshing = value
|
||||
|
|
|
@ -22,6 +22,7 @@ package org.mariotaku.twidere.fragment
|
|||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.LoaderManager.LoaderCallbacks
|
||||
import android.support.v4.app.hasRunningLoadersSafe
|
||||
import android.support.v4.content.Loader
|
||||
import android.support.v7.widget.RecyclerView
|
||||
import android.view.KeyEvent
|
||||
|
@ -52,7 +53,7 @@ abstract class ParcelableUserListsFragment : AbsContentListRecyclerViewFragment<
|
|||
override var refreshing: Boolean
|
||||
get() {
|
||||
if (context == null || isDetached) return false
|
||||
return loaderManager.hasRunningLoaders()
|
||||
return loaderManager.hasRunningLoadersSafe()
|
||||
}
|
||||
set(value) {
|
||||
super.refreshing = value
|
||||
|
|
|
@ -22,6 +22,7 @@ package org.mariotaku.twidere.fragment
|
|||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.LoaderManager.LoaderCallbacks
|
||||
import android.support.v4.app.hasRunningLoadersSafe
|
||||
import android.support.v4.content.Loader
|
||||
import android.support.v7.widget.LinearLayoutManager
|
||||
import android.support.v7.widget.RecyclerView
|
||||
|
@ -85,7 +86,7 @@ abstract class ParcelableUsersFragment : AbsContentListRecyclerViewFragment<Parc
|
|||
override var refreshing: Boolean
|
||||
get() {
|
||||
if (context == null || isDetached) return false
|
||||
return loaderManager.hasRunningLoaders()
|
||||
return loaderManager.hasRunningLoadersSafe()
|
||||
}
|
||||
set(value) {
|
||||
super.refreshing = value
|
||||
|
|
|
@ -22,6 +22,7 @@ package org.mariotaku.twidere.fragment
|
|||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.LoaderManager.LoaderCallbacks
|
||||
import android.support.v4.app.hasRunningLoadersSafe
|
||||
import android.support.v4.content.Loader
|
||||
import android.view.View
|
||||
import android.widget.AdapterView
|
||||
|
@ -100,7 +101,7 @@ class SavedSearchesListFragment : AbsContentListViewFragment<SavedSearchesAdapte
|
|||
}
|
||||
|
||||
override var refreshing: Boolean
|
||||
get() = loaderManager.hasRunningLoaders()
|
||||
get() = loaderManager.hasRunningLoadersSafe()
|
||||
set(value) {
|
||||
super.refreshing = value
|
||||
}
|
||||
|
|
|
@ -35,6 +35,7 @@ import android.os.Bundle
|
|||
import android.support.annotation.UiThread
|
||||
import android.support.v4.app.FragmentManagerAccessor
|
||||
import android.support.v4.app.LoaderManager.LoaderCallbacks
|
||||
import android.support.v4.app.hasRunningLoadersSafe
|
||||
import android.support.v4.content.AsyncTaskLoader
|
||||
import android.support.v4.content.ContextCompat
|
||||
import android.support.v4.content.Loader
|
||||
|
@ -485,7 +486,7 @@ class StatusFragment : BaseSupportFragment(), LoaderCallbacks<SingleResponse<Par
|
|||
}
|
||||
|
||||
override val refreshing: Boolean
|
||||
get() = loaderManager.hasRunningLoaders()
|
||||
get() = loaderManager.hasRunningLoadersSafe()
|
||||
|
||||
override fun onLoadMoreContents(@IndicatorPosition position: Long) {
|
||||
if (!hasMoreConversation) return
|
||||
|
@ -558,6 +559,7 @@ class StatusFragment : BaseSupportFragment(), LoaderCallbacks<SingleResponse<Par
|
|||
private fun displayTranslation(translation: TranslationResult) {
|
||||
adapter?.translationResult = translation
|
||||
val status = this.status
|
||||
val context = this.context ?: return
|
||||
if (status != null) {
|
||||
val event = TranslateEvent.create(context, status, translation.translatedLang)
|
||||
HotMobiLogger.getInstance(context).log(status.account_key, event);
|
||||
|
@ -565,24 +567,27 @@ class StatusFragment : BaseSupportFragment(), LoaderCallbacks<SingleResponse<Par
|
|||
}
|
||||
|
||||
private fun saveReadPosition(): ReadPosition? {
|
||||
val position = layoutManager!!.findFirstVisibleItemPosition()
|
||||
val lm = layoutManager ?: return null
|
||||
val adapter = this.adapter ?: return null
|
||||
val position = lm.findFirstVisibleItemPosition()
|
||||
if (position == RecyclerView.NO_POSITION) return null
|
||||
val itemType = adapter!!.getItemType(position)
|
||||
var itemId = adapter!!.getItemId(position)
|
||||
val itemType = adapter.getItemType(position)
|
||||
var itemId = adapter.getItemId(position)
|
||||
val positionView: View?
|
||||
if (itemType == StatusAdapter.ITEM_IDX_CONVERSATION_LOAD_MORE) {
|
||||
// Should be next item
|
||||
positionView = layoutManager!!.findViewByPosition(position + 1)
|
||||
itemId = adapter!!.getItemId(position + 1)
|
||||
positionView = lm.findViewByPosition(position + 1)
|
||||
itemId = adapter.getItemId(position + 1)
|
||||
} else {
|
||||
positionView = layoutManager!!.findViewByPosition(position)
|
||||
positionView = lm.findViewByPosition(position)
|
||||
}
|
||||
return ReadPosition(itemId, if (positionView != null) positionView.top else 0)
|
||||
return ReadPosition(itemId, positionView?.top ?: 0)
|
||||
}
|
||||
|
||||
private fun restoreReadPosition(position: ReadPosition?) {
|
||||
val adapter = this.adapter ?: return
|
||||
if (position == null) return
|
||||
val adapterPosition = adapter!!.findPositionByItemId(position.statusId)
|
||||
val adapterPosition = adapter.findPositionByItemId(position.statusId)
|
||||
if (adapterPosition < 0) return
|
||||
//TODO maintain read position
|
||||
layoutManager!!.scrollToPositionWithOffset(adapterPosition, position.offsetTop)
|
||||
|
|
|
@ -757,6 +757,7 @@ class UserFragment : BaseSupportFragment(), OnClickListener, OnLinkClickListener
|
|||
@UiThread
|
||||
override fun onPrepareOptionsMenu(menu: Menu?) {
|
||||
val user = user ?: return
|
||||
val account = this.account
|
||||
|
||||
val isMyself = user.account_key.maybeEquals(user.key)
|
||||
val mentionItem = menu!!.findItem(R.id.mention)
|
||||
|
@ -768,21 +769,29 @@ class UserFragment : BaseSupportFragment(), OnClickListener, OnLinkClickListener
|
|||
MenuUtils.setItemAvailability(menu, R.id.mention, !isMyself)
|
||||
MenuUtils.setItemAvailability(menu, R.id.incoming_friendships, isMyself)
|
||||
MenuUtils.setItemAvailability(menu, R.id.saved_searches, isMyself)
|
||||
MenuUtils.setItemAvailability(menu, R.id.scheduled_statuses, isMyself && MicroBlogAPIFactory.getOfficialKeyType(activity, user.account_key) == ConsumerKeyType.TWEETDECK)
|
||||
MenuUtils.setItemAvailability(menu, R.id.muted_users, isMyself)
|
||||
MenuUtils.setItemAvailability(menu, R.id.blocked_users, isMyself)
|
||||
MenuUtils.setItemAvailability(menu, R.id.scheduled_statuses, isMyself &&
|
||||
MicroBlogAPIFactory.getOfficialKeyType(activity, user.account_key)
|
||||
== ConsumerKeyType.TWEETDECK)
|
||||
|
||||
MenuUtils.setItemAvailability(menu, R.id.blocked_users, isMyself)
|
||||
MenuUtils.setItemAvailability(menu, R.id.block, !isMyself)
|
||||
MenuUtils.setItemAvailability(menu, R.id.mute_user, !isMyself)
|
||||
MenuUtils.setItemAvailability(menu, R.id.report_spam, !isMyself)
|
||||
MenuUtils.setItemAvailability(menu, R.id.enable_retweets, !isMyself)
|
||||
|
||||
|
||||
val isTwitter: Boolean
|
||||
|
||||
if (account != null) {
|
||||
MenuUtils.setItemAvailability(menu, R.id.add_to_list, TextUtils.equals(ParcelableAccount.Type.TWITTER,
|
||||
ParcelableAccountUtils.getAccountType(account!!)))
|
||||
isTwitter = TextUtils.equals(ParcelableAccount.Type.TWITTER,
|
||||
ParcelableAccountUtils.getAccountType(account))
|
||||
} else {
|
||||
MenuUtils.setItemAvailability(menu, R.id.add_to_list, false)
|
||||
isTwitter = false
|
||||
}
|
||||
|
||||
MenuUtils.setItemAvailability(menu, R.id.add_to_list, isTwitter)
|
||||
MenuUtils.setItemAvailability(menu, R.id.mute_user, !isMyself && isTwitter)
|
||||
MenuUtils.setItemAvailability(menu, R.id.muted_users, isMyself && isTwitter)
|
||||
MenuUtils.setItemAvailability(menu, R.id.report_spam, !isMyself && isTwitter)
|
||||
MenuUtils.setItemAvailability(menu, R.id.enable_retweets, !isMyself && isTwitter)
|
||||
|
||||
val userRelationship = relationship
|
||||
if (userRelationship != null) {
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ package org.mariotaku.twidere.fragment
|
|||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.support.v4.app.LoaderManager.LoaderCallbacks
|
||||
import android.support.v4.app.hasRunningLoadersSafe
|
||||
import android.support.v4.content.Loader
|
||||
import android.support.v7.widget.RecyclerView
|
||||
import android.support.v7.widget.StaggeredGridLayoutManager
|
||||
|
@ -37,7 +38,7 @@ class UserMediaTimelineFragment : AbsContentRecyclerViewFragment<StaggeredGridPa
|
|||
override var refreshing: Boolean
|
||||
get() {
|
||||
if (context == null || isDetached) return false
|
||||
return loaderManager.hasRunningLoaders()
|
||||
return loaderManager.hasRunningLoadersSafe()
|
||||
}
|
||||
set(value) {
|
||||
super.refreshing = value
|
||||
|
|
Loading…
Reference in New Issue