updated lib versions
This commit is contained in:
parent
e9e2e53af8
commit
96f27fe819
13
build.gradle
13
build.gradle
|
@ -20,7 +20,7 @@ allprojects {
|
||||||
projectVersionName = '4.0.0-SNAPSHOT'
|
projectVersionName = '4.0.0-SNAPSHOT'
|
||||||
|
|
||||||
globalCompileSdkVersion = 27
|
globalCompileSdkVersion = 27
|
||||||
globalBuildToolsVersion = '27.0.2'
|
globalBuildToolsVersion = '27.0.3'
|
||||||
}
|
}
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
|
@ -42,7 +42,8 @@ subprojects {
|
||||||
]
|
]
|
||||||
libVersions = [
|
libVersions = [
|
||||||
Kotlin : "${kotlinVersion}",
|
Kotlin : "${kotlinVersion}",
|
||||||
SupportLib : '27.0.2',
|
MultiDex : '1.0.3',
|
||||||
|
SupportLib : '27.1.0',
|
||||||
SupportTest : '1.0.0',
|
SupportTest : '1.0.0',
|
||||||
MariotakuCommons : '0.9.22',
|
MariotakuCommons : '0.9.22',
|
||||||
RestFu : '0.9.61',
|
RestFu : '0.9.61',
|
||||||
|
@ -56,7 +57,7 @@ subprojects {
|
||||||
Toro : '2.1.0',
|
Toro : '2.1.0',
|
||||||
LoganSquare : '1.3.7',
|
LoganSquare : '1.3.7',
|
||||||
Mime4J : '0.7.2',
|
Mime4J : '0.7.2',
|
||||||
OkHttp : '3.9.0',
|
OkHttp : '3.10.0',
|
||||||
Stetho : '1.5.0',
|
Stetho : '1.5.0',
|
||||||
OSMDroid : '5.6.5',
|
OSMDroid : '5.6.5',
|
||||||
LeakCanary : '1.5.1',
|
LeakCanary : '1.5.1',
|
||||||
|
@ -68,7 +69,7 @@ subprojects {
|
||||||
KPreferences : '0.9.7',
|
KPreferences : '0.9.7',
|
||||||
Kovenant : '3.3.0',
|
Kovenant : '3.3.0',
|
||||||
ParcelablePlease : '1.0.2',
|
ParcelablePlease : '1.0.2',
|
||||||
Chameleon : '0.9.25',
|
Chameleon : '0.9.26',
|
||||||
UniqR : '0.9.6',
|
UniqR : '0.9.6',
|
||||||
SQLiteQB : '0.9.18',
|
SQLiteQB : '0.9.18',
|
||||||
Glide : '3.7.0',
|
Glide : '3.7.0',
|
||||||
|
@ -81,8 +82,8 @@ subprojects {
|
||||||
Dagger : '2.11',
|
Dagger : '2.11',
|
||||||
StethoBeanShellREPL : '0.3',
|
StethoBeanShellREPL : '0.3',
|
||||||
ArchLifecycleExtensions: '1.1.0',
|
ArchLifecycleExtensions: '1.1.0',
|
||||||
ArchPaging : '1.0.0-alpha5',
|
ArchPaging : '1.0.0-alpha6',
|
||||||
ConstraintLayout : '1.1.0-beta4',
|
ConstraintLayout : '1.1.0-beta5',
|
||||||
MessageBubbleView : '2.1',
|
MessageBubbleView : '2.1',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ buildscript {
|
||||||
jcenter()
|
jcenter()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
|
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'
|
||||||
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
|
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,7 @@ android {
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdkVersion 14
|
minSdkVersion 14
|
||||||
targetSdkVersion 26
|
targetSdkVersion 27
|
||||||
versionCode projectVersionCode
|
versionCode projectVersionCode
|
||||||
versionName projectVersionName
|
versionName projectVersionName
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ package org.mariotaku.twidere.model;
|
||||||
|
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.support.annotation.IntDef;
|
import android.support.annotation.LongDef;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
@ -593,7 +593,7 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
||||||
* <p>
|
* <p>
|
||||||
* DO NOT CHANGE ONCE DEFINED!
|
* DO NOT CHANGE ONCE DEFINED!
|
||||||
*/
|
*/
|
||||||
@IntDef(value = {
|
@LongDef(value = {
|
||||||
FilterFlags.QUOTE_NOT_AVAILABLE,
|
FilterFlags.QUOTE_NOT_AVAILABLE,
|
||||||
FilterFlags.BLOCKING_USER,
|
FilterFlags.BLOCKING_USER,
|
||||||
FilterFlags.BLOCKED_BY_USER,
|
FilterFlags.BLOCKED_BY_USER,
|
||||||
|
|
|
@ -201,7 +201,7 @@ dependencies {
|
||||||
|
|
||||||
implementation "android.arch.lifecycle:extensions:${libVersions['ArchLifecycleExtensions']}"
|
implementation "android.arch.lifecycle:extensions:${libVersions['ArchLifecycleExtensions']}"
|
||||||
implementation "android.arch.paging:runtime:${libVersions['ArchPaging']}"
|
implementation "android.arch.paging:runtime:${libVersions['ArchPaging']}"
|
||||||
implementation 'com.android.support:multidex:1.0.2'
|
implementation "com.android.support:multidex:${libVersions['MultiDex']}"
|
||||||
implementation "com.android.support:support-annotations:${libVersions['SupportLib']}"
|
implementation "com.android.support:support-annotations:${libVersions['SupportLib']}"
|
||||||
implementation "com.android.support:support-compat:${libVersions['SupportLib']}"
|
implementation "com.android.support:support-compat:${libVersions['SupportLib']}"
|
||||||
implementation "com.android.support:support-core-utils:${libVersions['SupportLib']}"
|
implementation "com.android.support:support-core-utils:${libVersions['SupportLib']}"
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
9246a03faeacbdf02e60fef3b988ef1e0d7f4bc0
|
e17dccbf0a84adaa5cc963c83f0202923f99f3e6
|
||||||
|
|
|
@ -19,8 +19,8 @@
|
||||||
|
|
||||||
package android.arch.paging
|
package android.arch.paging
|
||||||
|
|
||||||
fun <T> PagedListAdapterHelper<T>.setPagedListListener(listener: ((list: PagedList<T>?) -> Unit)?) {
|
fun <T> AsyncPagedListDiffer<T>.setPagedListListener(listener: ((list: PagedList<T>?) -> Unit)?) {
|
||||||
mListener = if (listener != null) PagedListAdapterHelper.PagedListListener { pagedList ->
|
mListener = if (listener != null) AsyncPagedListDiffer.PagedListListener { pagedList ->
|
||||||
listener(pagedList)
|
listener(pagedList)
|
||||||
} else null
|
} else null
|
||||||
}
|
}
|
|
@ -1,16 +1,10 @@
|
||||||
package android.support.v4.app
|
package android.support.v4.app
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by mariotaku on 2016/11/26.
|
|
||||||
*/
|
|
||||||
|
|
||||||
fun LoaderManager.hasRunningLoadersSafe(): Boolean {
|
fun LoaderManager.hasRunningLoadersSafe(): Boolean {
|
||||||
if (this !is LoaderManagerImpl) return false
|
if (this !is LoaderManagerImpl) return false
|
||||||
var loadersRunning = false
|
return try {
|
||||||
val count = mLoaders.size()
|
hasRunningLoaders()
|
||||||
for (i in 0 until count) {
|
} catch (e: Exception) {
|
||||||
val li = mLoaders.valueAt(i) ?: continue
|
false
|
||||||
loadersRunning = loadersRunning or (li.mStarted && !li.mDeliveredData)
|
|
||||||
}
|
}
|
||||||
return loadersRunning
|
|
||||||
}
|
}
|
|
@ -37,7 +37,9 @@ import org.mariotaku.twidere.TwidereConstants.REQUEST_SELECT_USER
|
||||||
import org.mariotaku.twidere.adapter.SimpleParcelableUserListsAdapter
|
import org.mariotaku.twidere.adapter.SimpleParcelableUserListsAdapter
|
||||||
import org.mariotaku.twidere.annotation.LoadMorePosition
|
import org.mariotaku.twidere.annotation.LoadMorePosition
|
||||||
import org.mariotaku.twidere.constant.IntentConstants.*
|
import org.mariotaku.twidere.constant.IntentConstants.*
|
||||||
|
import org.mariotaku.twidere.extension.accountKey
|
||||||
import org.mariotaku.twidere.extension.adapter.all
|
import org.mariotaku.twidere.extension.adapter.all
|
||||||
|
import org.mariotaku.twidere.extension.userKey
|
||||||
import org.mariotaku.twidere.loader.iface.IPaginationLoader
|
import org.mariotaku.twidere.loader.iface.IPaginationLoader
|
||||||
import org.mariotaku.twidere.loader.userlists.UserListOwnershipsLoader
|
import org.mariotaku.twidere.loader.userlists.UserListOwnershipsLoader
|
||||||
import org.mariotaku.twidere.model.ParcelableUser
|
import org.mariotaku.twidere.model.ParcelableUser
|
||||||
|
@ -144,20 +146,20 @@ class UserListSelectorActivity : BaseActivity(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateLoader(id: Int, args: Bundle): Loader<List<ParcelableUserList>> {
|
override fun onCreateLoader(id: Int, args: Bundle?): Loader<List<ParcelableUserList>> {
|
||||||
val accountKey = args.getParcelable<UserKey>(EXTRA_ACCOUNT_KEY)
|
val accountKey = args!!.accountKey!!
|
||||||
val userKey = args.getParcelable<UserKey>(EXTRA_USER_KEY)
|
val userKey = args.userKey!!
|
||||||
return UserListOwnershipsLoader(this, accountKey, userKey, null, adapter.all).apply {
|
return UserListOwnershipsLoader(this, accountKey, userKey, null, adapter.all).apply {
|
||||||
pagination = args.getParcelable(EXTRA_PAGINATION)
|
pagination = args.getParcelable(EXTRA_PAGINATION)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onLoaderReset(loader: Loader<List<ParcelableUserList>>?) {
|
override fun onLoaderReset(loader: Loader<List<ParcelableUserList>>) {
|
||||||
adapter.setData(null)
|
adapter.setData(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun onLoadFinished(loader: Loader<List<ParcelableUserList>>?, data: List<ParcelableUserList>?) {
|
override fun onLoadFinished(loader: Loader<List<ParcelableUserList>>, data: List<ParcelableUserList>?) {
|
||||||
adapter.loadMoreIndicatorPosition = LoadMorePosition.NONE
|
adapter.loadMoreIndicatorPosition = LoadMorePosition.NONE
|
||||||
adapter.loadMoreSupportedPosition = if (adapter.all != data) {
|
adapter.loadMoreSupportedPosition = if (adapter.all != data) {
|
||||||
LoadMorePosition.END
|
LoadMorePosition.END
|
||||||
|
|
|
@ -19,12 +19,12 @@
|
||||||
|
|
||||||
package org.mariotaku.twidere.adapter
|
package org.mariotaku.twidere.adapter
|
||||||
|
|
||||||
|
import android.arch.paging.AsyncPagedListDiffer
|
||||||
import android.arch.paging.PagedList
|
import android.arch.paging.PagedList
|
||||||
import android.arch.paging.PagedListAdapterHelper
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.res.ColorStateList
|
import android.content.res.ColorStateList
|
||||||
import android.support.v4.graphics.ColorUtils
|
import android.support.v4.graphics.ColorUtils
|
||||||
import android.support.v7.recyclerview.extensions.ListAdapterConfig
|
import android.support.v7.recyclerview.extensions.AsyncDifferConfig
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
@ -99,7 +99,7 @@ class MessagesConversationAdapter(
|
||||||
var messages: PagedList<ParcelableMessage>?
|
var messages: PagedList<ParcelableMessage>?
|
||||||
get() = pagedMessagesHelper.currentList
|
get() = pagedMessagesHelper.currentList
|
||||||
set(value) {
|
set(value) {
|
||||||
pagedMessagesHelper.setList(value)
|
pagedMessagesHelper.submitList(value)
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
itemCounts[0] = 0
|
itemCounts[0] = 0
|
||||||
}
|
}
|
||||||
|
@ -116,8 +116,8 @@ class MessagesConversationAdapter(
|
||||||
val bubbleColorOutgoing: ColorStateList? = ThemeUtils.getColorStateListFromAttribute(context, R.attr.messageBubbleColor)
|
val bubbleColorOutgoing: ColorStateList? = ThemeUtils.getColorStateListFromAttribute(context, R.attr.messageBubbleColor)
|
||||||
val bubbleColorIncoming: ColorStateList? = context.getIncomingMessageColor()
|
val bubbleColorIncoming: ColorStateList? = context.getIncomingMessageColor()
|
||||||
|
|
||||||
private var pagedMessagesHelper = PagedListAdapterHelper<ParcelableMessage>(ItemCountsAdapterListUpdateCallback(this, 0),
|
private var pagedMessagesHelper = AsyncPagedListDiffer<ParcelableMessage>(ItemCountsAdapterListUpdateCallback(this, 0),
|
||||||
ListAdapterConfig.Builder<ParcelableMessage>().setDiffCallback(DiffCallbacks.message).build())
|
AsyncDifferConfig.Builder<ParcelableMessage>(DiffCallbacks.message).build())
|
||||||
|
|
||||||
private val calendars = Pair(Calendar.getInstance(), Calendar.getInstance())
|
private val calendars = Pair(Calendar.getInstance(), Calendar.getInstance())
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
package org.mariotaku.twidere.adapter
|
package org.mariotaku.twidere.adapter
|
||||||
|
|
||||||
|
import android.arch.paging.AsyncPagedListDiffer
|
||||||
import android.arch.paging.PagedList
|
import android.arch.paging.PagedList
|
||||||
import android.arch.paging.PagedListAdapterHelper
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.support.v7.recyclerview.extensions.ListAdapterConfig
|
import android.support.v7.recyclerview.extensions.AsyncDifferConfig
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
@ -38,7 +38,7 @@ class MessagesEntriesAdapter(
|
||||||
var conversations: PagedList<ParcelableMessageConversation>?
|
var conversations: PagedList<ParcelableMessageConversation>?
|
||||||
get() = pagedEntriesHelper.currentList
|
get() = pagedEntriesHelper.currentList
|
||||||
set(value) {
|
set(value) {
|
||||||
pagedEntriesHelper.setList(value)
|
pagedEntriesHelper.submitList(value)
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
itemCounts[0] = 0
|
itemCounts[0] = 0
|
||||||
}
|
}
|
||||||
|
@ -55,8 +55,8 @@ class MessagesEntriesAdapter(
|
||||||
|
|
||||||
var listener: MessageConversationClickListener? = null
|
var listener: MessageConversationClickListener? = null
|
||||||
|
|
||||||
private var pagedEntriesHelper = PagedListAdapterHelper<ParcelableMessageConversation>(ItemCountsAdapterListUpdateCallback(this, 0),
|
private var pagedEntriesHelper = AsyncPagedListDiffer<ParcelableMessageConversation>(ItemCountsAdapterListUpdateCallback(this, 0),
|
||||||
ListAdapterConfig.Builder<ParcelableMessageConversation>().setDiffCallback(DiffCallbacks.conversation).build())
|
AsyncDifferConfig.Builder<ParcelableMessageConversation>(DiffCallbacks.conversation).build())
|
||||||
|
|
||||||
override fun getItemCount(): Int {
|
override fun getItemCount(): Int {
|
||||||
return itemCounts.itemCount
|
return itemCounts.itemCount
|
||||||
|
|
|
@ -20,11 +20,11 @@
|
||||||
package org.mariotaku.twidere.adapter
|
package org.mariotaku.twidere.adapter
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
|
import android.arch.paging.AsyncPagedListDiffer
|
||||||
import android.arch.paging.PagedList
|
import android.arch.paging.PagedList
|
||||||
import android.arch.paging.PagedListAdapterHelper
|
|
||||||
import android.arch.paging.setPagedListListener
|
import android.arch.paging.setPagedListListener
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.support.v7.recyclerview.extensions.ListAdapterConfig
|
import android.support.v7.recyclerview.extensions.AsyncDifferConfig
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
@ -119,7 +119,7 @@ class ParcelableActivitiesAdapter(
|
||||||
var activities: PagedList<ParcelableActivity>?
|
var activities: PagedList<ParcelableActivity>?
|
||||||
get() = pagedActivitiesHelper.currentList
|
get() = pagedActivitiesHelper.currentList
|
||||||
set(value) {
|
set(value) {
|
||||||
pagedActivitiesHelper.setList(value)
|
pagedActivitiesHelper.submitList(value)
|
||||||
gapLoadingIds.clear()
|
gapLoadingIds.clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,8 +137,8 @@ class ParcelableActivitiesAdapter(
|
||||||
private val eventListener: EventListener
|
private val eventListener: EventListener
|
||||||
private val gapLoadingIds: MutableSet<ObjectId<String>> = HashSet()
|
private val gapLoadingIds: MutableSet<ObjectId<String>> = HashSet()
|
||||||
|
|
||||||
private var pagedActivitiesHelper = PagedListAdapterHelper<ParcelableActivity>(ItemCountsAdapterListUpdateCallback(this, ITEM_INDEX_ACTIVITY),
|
private var pagedActivitiesHelper = AsyncPagedListDiffer<ParcelableActivity>(ItemCountsAdapterListUpdateCallback(this, ITEM_INDEX_ACTIVITY),
|
||||||
ListAdapterConfig.Builder<ParcelableActivity>().setDiffCallback(DiffCallbacks.activity).build())
|
AsyncDifferConfig.Builder<ParcelableActivity>(DiffCallbacks.activity).build())
|
||||||
|
|
||||||
init {
|
init {
|
||||||
eventListener = EventListener(this)
|
eventListener = EventListener(this)
|
||||||
|
|
|
@ -19,12 +19,12 @@
|
||||||
|
|
||||||
package org.mariotaku.twidere.adapter
|
package org.mariotaku.twidere.adapter
|
||||||
|
|
||||||
|
import android.arch.paging.AsyncPagedListDiffer
|
||||||
import android.arch.paging.PagedList
|
import android.arch.paging.PagedList
|
||||||
import android.arch.paging.PagedListAdapterHelper
|
|
||||||
import android.arch.paging.setPagedListListener
|
import android.arch.paging.setPagedListListener
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.support.v4.widget.Space
|
import android.support.v4.widget.Space
|
||||||
import android.support.v7.recyclerview.extensions.ListAdapterConfig
|
import android.support.v7.recyclerview.extensions.AsyncDifferConfig
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
import android.util.SparseBooleanArray
|
import android.util.SparseBooleanArray
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
@ -139,7 +139,7 @@ class ParcelableStatusesAdapter(
|
||||||
var statuses: PagedList<ParcelableStatus>?
|
var statuses: PagedList<ParcelableStatus>?
|
||||||
get() = pagedStatusesHelper.currentList
|
get() = pagedStatusesHelper.currentList
|
||||||
set(value) {
|
set(value) {
|
||||||
pagedStatusesHelper.setList(value)
|
pagedStatusesHelper.submitList(value)
|
||||||
gapLoadingIds.clear()
|
gapLoadingIds.clear()
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
itemCounts[ITEM_INDEX_STATUS] = 0
|
itemCounts[ITEM_INDEX_STATUS] = 0
|
||||||
|
@ -164,8 +164,8 @@ class ParcelableStatusesAdapter(
|
||||||
|
|
||||||
private val showingFullTextStates = SparseBooleanArray()
|
private val showingFullTextStates = SparseBooleanArray()
|
||||||
|
|
||||||
private var pagedStatusesHelper = PagedListAdapterHelper<ParcelableStatus>(ItemCountsAdapterListUpdateCallback(this, ITEM_INDEX_STATUS),
|
private var pagedStatusesHelper = AsyncPagedListDiffer<ParcelableStatus>(ItemCountsAdapterListUpdateCallback(this, ITEM_INDEX_STATUS),
|
||||||
ListAdapterConfig.Builder<ParcelableStatus>().setDiffCallback(DiffCallbacks.status).build())
|
AsyncDifferConfig.Builder<ParcelableStatus>(DiffCallbacks.status).build())
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val handler = StatusAdapterLinkClickHandler<List<ParcelableStatus>>(context, preferences)
|
val handler = StatusAdapterLinkClickHandler<List<ParcelableStatus>>(context, preferences)
|
||||||
|
@ -395,7 +395,8 @@ class ParcelableStatusesAdapter(
|
||||||
return if (loadAround) {
|
return if (loadAround) {
|
||||||
pagedStatusesHelper.getItem(dataPosition) ?: ParcelableStatusPlaceholder
|
pagedStatusesHelper.getItem(dataPosition) ?: ParcelableStatusPlaceholder
|
||||||
} else {
|
} else {
|
||||||
pagedStatusesHelper.currentList?.get(dataPosition) ?: ParcelableStatusPlaceholder
|
pagedStatusesHelper.currentList?.get(dataPosition)
|
||||||
|
?: ParcelableStatusPlaceholder
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,11 +19,11 @@
|
||||||
|
|
||||||
package org.mariotaku.twidere.adapter
|
package org.mariotaku.twidere.adapter
|
||||||
|
|
||||||
|
import android.arch.paging.AsyncPagedListDiffer
|
||||||
import android.arch.paging.PagedList
|
import android.arch.paging.PagedList
|
||||||
import android.arch.paging.PagedListAdapterHelper
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.support.v4.util.ArrayMap
|
import android.support.v4.util.ArrayMap
|
||||||
import android.support.v7.recyclerview.extensions.ListAdapterConfig
|
import android.support.v7.recyclerview.extensions.AsyncDifferConfig
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
@ -62,7 +62,7 @@ class ParcelableUsersAdapter(
|
||||||
var users: PagedList<ParcelableUser>?
|
var users: PagedList<ParcelableUser>?
|
||||||
get() = pagedStatusesHelper.currentList
|
get() = pagedStatusesHelper.currentList
|
||||||
set(value) {
|
set(value) {
|
||||||
pagedStatusesHelper.setList(value)
|
pagedStatusesHelper.submitList(value)
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
itemCounts[ITEM_INDEX_USER] = 0
|
itemCounts[ITEM_INDEX_USER] = 0
|
||||||
}
|
}
|
||||||
|
@ -80,8 +80,8 @@ class ParcelableUsersAdapter(
|
||||||
|
|
||||||
private val inflater = LayoutInflater.from(context)
|
private val inflater = LayoutInflater.from(context)
|
||||||
|
|
||||||
private var pagedStatusesHelper = PagedListAdapterHelper<ParcelableUser>(ItemCountsAdapterListUpdateCallback(this, ITEM_INDEX_USER),
|
private var pagedStatusesHelper = AsyncPagedListDiffer<ParcelableUser>(ItemCountsAdapterListUpdateCallback(this, ITEM_INDEX_USER),
|
||||||
ListAdapterConfig.Builder<ParcelableUser>().setDiffCallback(DiffCallbacks.user).build())
|
AsyncDifferConfig.Builder<ParcelableUser>(DiffCallbacks.user).build())
|
||||||
|
|
||||||
override fun getItemCount(): Int {
|
override fun getItemCount(): Int {
|
||||||
val position = loadMoreIndicatorPosition
|
val position = loadMoreIndicatorPosition
|
||||||
|
|
|
@ -420,12 +420,12 @@ class StatusDetailsAdapter(
|
||||||
return itemCounts.itemCount
|
return itemCounts.itemCount
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onAttachedToRecyclerView(recyclerView: RecyclerView?) {
|
override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
|
||||||
super.onAttachedToRecyclerView(recyclerView)
|
super.onAttachedToRecyclerView(recyclerView)
|
||||||
this.recyclerView = recyclerView
|
this.recyclerView = recyclerView
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDetachedFromRecyclerView(recyclerView: RecyclerView?) {
|
override fun onDetachedFromRecyclerView(recyclerView: RecyclerView) {
|
||||||
super.onDetachedFromRecyclerView(recyclerView)
|
super.onDetachedFromRecyclerView(recyclerView)
|
||||||
this.recyclerView = null
|
this.recyclerView = null
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,10 +21,6 @@ package org.mariotaku.twidere.extension
|
||||||
|
|
||||||
import java.lang.reflect.Field
|
import java.lang.reflect.Field
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by mariotaku on 2017/4/17.
|
|
||||||
*/
|
|
||||||
|
|
||||||
fun Class<*>.findFieldByTypes(vararg checkTypes: Class<*>): Field? {
|
fun Class<*>.findFieldByTypes(vararg checkTypes: Class<*>): Field? {
|
||||||
return declaredFields.firstOrNull { field ->
|
return declaredFields.firstOrNull { field ->
|
||||||
checkTypes.all { it.isAssignableFrom(field.type) }
|
checkTypes.all { it.isAssignableFrom(field.type) }
|
||||||
|
|
|
@ -115,8 +115,8 @@ class FileSelectorDialogFragment : BaseDialogFragment(), LoaderCallbacks<List<Fi
|
||||||
return dialog
|
return dialog
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateLoader(id: Int, args: Bundle): Loader<List<File>> {
|
override fun onCreateLoader(id: Int, args: Bundle?): Loader<List<File>> {
|
||||||
val extensions = args.getStringArray(EXTRA_FILE_EXTENSIONS)
|
val extensions = args!!.getStringArray(EXTRA_FILE_EXTENSIONS)
|
||||||
val path = args.getString(EXTRA_PATH)
|
val path = args.getString(EXTRA_PATH)
|
||||||
var currentDir: File? = if (path != null) File(path) else getExternalStorageDirectory()
|
var currentDir: File? = if (path != null) File(path) else getExternalStorageDirectory()
|
||||||
if (currentDir == null) {
|
if (currentDir == null) {
|
||||||
|
|
|
@ -134,8 +134,8 @@ abstract class ParcelableGroupsFragment : AbsContentListRecyclerViewFragment<Par
|
||||||
loaderManager.initLoader(0, loaderArgs, this)
|
loaderManager.initLoader(0, loaderArgs, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateLoader(id: Int, args: Bundle): Loader<List<ParcelableGroup>?> {
|
override fun onCreateLoader(id: Int, args: Bundle?): Loader<List<ParcelableGroup>?> {
|
||||||
val fromUser = args.getBoolean(EXTRA_FROM_USER)
|
val fromUser = args!!.getBoolean(EXTRA_FROM_USER)
|
||||||
args.remove(EXTRA_FROM_USER)
|
args.remove(EXTRA_FROM_USER)
|
||||||
return onCreateUserListsLoader(activity!!, args, fromUser)
|
return onCreateUserListsLoader(activity!!, args, fromUser)
|
||||||
}
|
}
|
||||||
|
|
|
@ -138,8 +138,8 @@ abstract class ParcelableUserListsFragment : AbsContentListRecyclerViewFragment<
|
||||||
loaderManager.initLoader(0, loaderArgs, this)
|
loaderManager.initLoader(0, loaderArgs, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateLoader(id: Int, args: Bundle): Loader<List<ParcelableUserList>> {
|
override fun onCreateLoader(id: Int, args: Bundle?): Loader<List<ParcelableUserList>> {
|
||||||
val fromUser = args.getBoolean(EXTRA_FROM_USER)
|
val fromUser = args!!.getBoolean(EXTRA_FROM_USER)
|
||||||
args.remove(EXTRA_FROM_USER)
|
args.remove(EXTRA_FROM_USER)
|
||||||
return onCreateUserListsLoader(activity!!, args, fromUser)
|
return onCreateUserListsLoader(activity!!, args, fromUser)
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,9 +46,6 @@ import org.mariotaku.twidere.model.SingleResponse
|
||||||
import org.mariotaku.twidere.model.UserKey
|
import org.mariotaku.twidere.model.UserKey
|
||||||
import org.mariotaku.twidere.util.Utils
|
import org.mariotaku.twidere.util.Utils
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by mariotaku on 16/3/23.
|
|
||||||
*/
|
|
||||||
class GroupFragment : AbsToolbarTabPagesFragment(), LoaderCallbacks<SingleResponse<ParcelableGroup>> {
|
class GroupFragment : AbsToolbarTabPagesFragment(), LoaderCallbacks<SingleResponse<ParcelableGroup>> {
|
||||||
var group: ParcelableGroup? = null
|
var group: ParcelableGroup? = null
|
||||||
private set
|
private set
|
||||||
|
@ -70,8 +67,8 @@ class GroupFragment : AbsToolbarTabPagesFragment(), LoaderCallbacks<SingleRespon
|
||||||
getGroupInfo(false)
|
getGroupInfo(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateLoader(id: Int, args: Bundle): Loader<SingleResponse<ParcelableGroup>> {
|
override fun onCreateLoader(id: Int, args: Bundle?): Loader<SingleResponse<ParcelableGroup>> {
|
||||||
val accountKey = args.accountKey
|
val accountKey = args!!.accountKey
|
||||||
val groupId = args.groupId
|
val groupId = args.groupId
|
||||||
val groupName = args.groupName
|
val groupName = args.groupName
|
||||||
val omitIntentExtra = args.getBoolean(EXTRA_OMIT_INTENT_EXTRA, true)
|
val omitIntentExtra = args.getBoolean(EXTRA_OMIT_INTENT_EXTRA, true)
|
||||||
|
|
|
@ -30,9 +30,6 @@ import org.mariotaku.twidere.loader.group.UserGroupsLoader
|
||||||
import org.mariotaku.twidere.model.ParcelableGroup
|
import org.mariotaku.twidere.model.ParcelableGroup
|
||||||
import org.mariotaku.twidere.model.UserKey
|
import org.mariotaku.twidere.model.UserKey
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by mariotaku on 16/3/9.
|
|
||||||
*/
|
|
||||||
class UserGroupsFragment : ParcelableGroupsFragment() {
|
class UserGroupsFragment : ParcelableGroupsFragment() {
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||||
super.onActivityCreated(savedInstanceState)
|
super.onActivityCreated(savedInstanceState)
|
||||||
|
|
|
@ -247,10 +247,10 @@ class MessageConversationInfoFragment : BaseFragment(), IToolBarSupportFragment,
|
||||||
return ConversationInfoLoader(context!!, accountKey, conversationId)
|
return ConversationInfoLoader(context!!, accountKey, conversationId)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onLoaderReset(loader: Loader<ParcelableMessageConversation?>?) {
|
override fun onLoaderReset(loader: Loader<ParcelableMessageConversation?>) {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onLoadFinished(loader: Loader<ParcelableMessageConversation?>?, data: ParcelableMessageConversation?) {
|
override fun onLoadFinished(loader: Loader<ParcelableMessageConversation?>, data: ParcelableMessageConversation?) {
|
||||||
val context = this.context ?: return
|
val context = this.context ?: return
|
||||||
if (data == null) {
|
if (data == null) {
|
||||||
activity?.finish()
|
activity?.finish()
|
||||||
|
|
|
@ -113,12 +113,12 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
|
||||||
|
|
||||||
// Listeners
|
// Listeners
|
||||||
private val conversationsLoaderCallback = object : LoaderCallbacks<List<ParcelableStatus>> {
|
private val conversationsLoaderCallback = object : LoaderCallbacks<List<ParcelableStatus>> {
|
||||||
override fun onCreateLoader(id: Int, args: Bundle): Loader<List<ParcelableStatus>> {
|
override fun onCreateLoader(id: Int, args: Bundle?): Loader<List<ParcelableStatus>> {
|
||||||
val adapter = this@StatusFragment.adapter
|
val adapter = this@StatusFragment.adapter
|
||||||
adapter.isRepliesLoading = true
|
adapter.isRepliesLoading = true
|
||||||
adapter.isConversationsLoading = true
|
adapter.isConversationsLoading = true
|
||||||
adapter.updateItemDecoration()
|
adapter.updateItemDecoration()
|
||||||
val status: ParcelableStatus = args.getParcelable(EXTRA_STATUS)
|
val status: ParcelableStatus = args!!.getParcelable(EXTRA_STATUS)
|
||||||
val loadingMore = args.getBoolean(EXTRA_LOADING_MORE, false)
|
val loadingMore = args.getBoolean(EXTRA_LOADING_MORE, false)
|
||||||
return ConversationLoader(activity!!, status, adapter.data, true, loadingMore).apply {
|
return ConversationLoader(activity!!, status, adapter.data, true, loadingMore).apply {
|
||||||
pagination = args.toPagination()
|
pagination = args.toPagination()
|
||||||
|
@ -328,7 +328,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
|
||||||
repeatCount, event, metaState)
|
repeatCount, event, metaState)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateLoader(id: Int, args: Bundle): Loader<SingleResponse<ParcelableStatus>> {
|
override fun onCreateLoader(id: Int, args: Bundle?): Loader<SingleResponse<ParcelableStatus>> {
|
||||||
val fragmentArgs = arguments!!
|
val fragmentArgs = arguments!!
|
||||||
val accountKey = fragmentArgs.accountKey
|
val accountKey = fragmentArgs.accountKey
|
||||||
val statusId = fragmentArgs.statusId
|
val statusId = fragmentArgs.statusId
|
||||||
|
|
|
@ -45,7 +45,6 @@ import com.squareup.otto.Subscribe
|
||||||
import org.mariotaku.kpreferences.get
|
import org.mariotaku.kpreferences.get
|
||||||
import org.mariotaku.ktextension.Bundle
|
import org.mariotaku.ktextension.Bundle
|
||||||
import org.mariotaku.ktextension.setItemAvailability
|
import org.mariotaku.ktextension.setItemAvailability
|
||||||
import org.mariotaku.microblog.library.MicroBlog
|
|
||||||
import org.mariotaku.microblog.library.MicroBlogException
|
import org.mariotaku.microblog.library.MicroBlogException
|
||||||
import org.mariotaku.microblog.library.Twitter
|
import org.mariotaku.microblog.library.Twitter
|
||||||
import org.mariotaku.twidere.Constants.*
|
import org.mariotaku.twidere.Constants.*
|
||||||
|
@ -279,8 +278,8 @@ class UserListFragment : AbsToolbarTabPagesFragment(), OnClickListener,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateLoader(id: Int, args: Bundle): Loader<SingleResponse<ParcelableUserList>> {
|
override fun onCreateLoader(id: Int, args: Bundle?): Loader<SingleResponse<ParcelableUserList>> {
|
||||||
val accountKey = args.accountKey
|
val accountKey = args!!.accountKey
|
||||||
val userKey = args.userKey
|
val userKey = args.userKey
|
||||||
val listId = args.listId
|
val listId = args.listId
|
||||||
val listName = args.listName
|
val listName = args.listName
|
||||||
|
|
|
@ -103,10 +103,10 @@ class GetMessagesTask(
|
||||||
AccountType.TWITTER -> {
|
AccountType.TWITTER -> {
|
||||||
val twitter = details.newMicroBlogInstance(context, cls = Twitter::class.java)
|
val twitter = details.newMicroBlogInstance(context, cls = Twitter::class.java)
|
||||||
// Use official DM api
|
// Use official DM api
|
||||||
if (details.isOfficial(context)) {
|
// if (details.isOfficial(context)) {
|
||||||
return getTwitterOfficialMessages(twitter, details, param, index)
|
// return getTwitterOfficialMessages(twitter, details, param, index)
|
||||||
}
|
// }
|
||||||
// getTwitterMessages(twitter, details, param, index)
|
getTwitterMessages(twitter, details, param, index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Use default method
|
// Use default method
|
||||||
|
@ -336,7 +336,8 @@ class GetMessagesTask(
|
||||||
val oldestConversations = DataStoreUtils.getOldestConversations(context,
|
val oldestConversations = DataStoreUtils.getOldestConversations(context,
|
||||||
Conversations.CONTENT_URI, twitterOfficialKeys)
|
Conversations.CONTENT_URI, twitterOfficialKeys)
|
||||||
oldestConversations.forEachIndexed { i, conversation ->
|
oldestConversations.forEachIndexed { i, conversation ->
|
||||||
val extras = conversation?.conversation_extras as? TwitterOfficialConversationExtras ?: return@forEachIndexed
|
val extras = conversation?.conversation_extras as? TwitterOfficialConversationExtras
|
||||||
|
?: return@forEachIndexed
|
||||||
incomingIds[i] = extras.maxEntryId
|
incomingIds[i] = extras.maxEntryId
|
||||||
}
|
}
|
||||||
return@lazy (incomingIds + outgoingIds).mapToArray { maxId ->
|
return@lazy (incomingIds + outgoingIds).mapToArray { maxId ->
|
||||||
|
@ -463,11 +464,12 @@ class GetMessagesTask(
|
||||||
if (myLastReadTimestamp > 0) {
|
if (myLastReadTimestamp > 0) {
|
||||||
conversation.last_read_timestamp = myLastReadTimestamp
|
conversation.last_read_timestamp = myLastReadTimestamp
|
||||||
}
|
}
|
||||||
val conversationExtras = conversation.conversation_extras as? TwitterOfficialConversationExtras ?: run {
|
val conversationExtras = conversation.conversation_extras as? TwitterOfficialConversationExtras
|
||||||
val extras = TwitterOfficialConversationExtras()
|
?: run {
|
||||||
conversation.conversation_extras = extras
|
val extras = TwitterOfficialConversationExtras()
|
||||||
return@run extras
|
conversation.conversation_extras = extras
|
||||||
}
|
return@run extras
|
||||||
|
}
|
||||||
conversationExtras.apply {
|
conversationExtras.apply {
|
||||||
this.minEntryId = v.minEntryId
|
this.minEntryId = v.minEntryId
|
||||||
this.maxEntryId = v.maxEntryId
|
this.maxEntryId = v.maxEntryId
|
||||||
|
|
|
@ -6,7 +6,6 @@ import android.os.Build
|
||||||
import android.util.Base64
|
import android.util.Base64
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import okhttp3.*
|
import okhttp3.*
|
||||||
import okhttp3.internal.platform.Platform
|
|
||||||
import org.mariotaku.kpreferences.get
|
import org.mariotaku.kpreferences.get
|
||||||
import org.mariotaku.restfu.http.RestHttpClient
|
import org.mariotaku.restfu.http.RestHttpClient
|
||||||
import org.mariotaku.restfu.okhttp3.OkHttpRestClient
|
import org.mariotaku.restfu.okhttp3.OkHttpRestClient
|
||||||
|
@ -38,9 +37,15 @@ object HttpClientFactory {
|
||||||
connectionPool: ConnectionPool, cache: Cache) {
|
connectionPool: ConnectionPool, cache: Cache) {
|
||||||
updateHttpClientConfiguration(builder, conf, dns, connectionPool, cache)
|
updateHttpClientConfiguration(builder, conf, dns, connectionPool, cache)
|
||||||
if (Build.VERSION.SDK_INT in Build.VERSION_CODES.JELLY_BEAN until Build.VERSION_CODES.LOLLIPOP) {
|
if (Build.VERSION.SDK_INT in Build.VERSION_CODES.JELLY_BEAN until Build.VERSION_CODES.LOLLIPOP) {
|
||||||
val tlsSocketFactory = TLSSocketFactory()
|
val trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm())
|
||||||
val trustManager = Platform.get().trustManager(tlsSocketFactory) ?:
|
trustManagerFactory.init(null as KeyStore?)
|
||||||
systemDefaultTrustManager()
|
val trustManagers = trustManagerFactory.trustManagers
|
||||||
|
if (trustManagers.single() !is X509TrustManager) {
|
||||||
|
throw IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers))
|
||||||
|
}
|
||||||
|
val trustManager = trustManagers[0] as X509TrustManager
|
||||||
|
|
||||||
|
val tlsSocketFactory = TLSSocketFactory(trustManagers)
|
||||||
builder.sslSocketFactory(tlsSocketFactory, trustManager)
|
builder.sslSocketFactory(tlsSocketFactory, trustManager)
|
||||||
}
|
}
|
||||||
updateTLSConnectionSpecs(builder)
|
updateTLSConnectionSpecs(builder)
|
||||||
|
@ -164,17 +169,6 @@ object HttpClientFactory {
|
||||||
|
|
||||||
private fun String.prefix(prefix: String) = prefix + this
|
private fun String.prefix(prefix: String) = prefix + this
|
||||||
|
|
||||||
private fun systemDefaultTrustManager(): X509TrustManager {
|
|
||||||
val trustManagerFactory = TrustManagerFactory.getInstance(
|
|
||||||
TrustManagerFactory.getDefaultAlgorithm())
|
|
||||||
trustManagerFactory.init(null as KeyStore?)
|
|
||||||
val trustManagers = trustManagerFactory.trustManagers
|
|
||||||
if (trustManagers.size != 1 || trustManagers[0] !is X509TrustManager) {
|
|
||||||
throw IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers))
|
|
||||||
}
|
|
||||||
return trustManagers[0] as X509TrustManager
|
|
||||||
}
|
|
||||||
|
|
||||||
private val urlSupportedPatterns = listOf("[SCHEME]", "[HOST]", "[PORT]", "[AUTHORITY]",
|
private val urlSupportedPatterns = listOf("[SCHEME]", "[HOST]", "[PORT]", "[AUTHORITY]",
|
||||||
"[PATH]", "[/PATH]", "[PATH_ENCODED]", "[QUERY]", "[?QUERY]", "[QUERY_ENCODED]",
|
"[PATH]", "[/PATH]", "[PATH_ENCODED]", "[QUERY]", "[?QUERY]", "[QUERY_ENCODED]",
|
||||||
"[FRAGMENT]", "[#FRAGMENT]", "[FRAGMENT_ENCODED]", "[URL_ENCODED]", "[URL_BASE64]")
|
"[FRAGMENT]", "[#FRAGMENT]", "[FRAGMENT_ENCODED]", "[URL_ENCODED]", "[URL_BASE64]")
|
||||||
|
|
|
@ -27,17 +27,18 @@ import java.net.Socket
|
||||||
import javax.net.ssl.SSLContext
|
import javax.net.ssl.SSLContext
|
||||||
import javax.net.ssl.SSLSocket
|
import javax.net.ssl.SSLSocket
|
||||||
import javax.net.ssl.SSLSocketFactory
|
import javax.net.ssl.SSLSocketFactory
|
||||||
|
import javax.net.ssl.TrustManager
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author fkrauthan
|
* @author fkrauthan
|
||||||
*/
|
*/
|
||||||
class TLSSocketFactory : SSLSocketFactory() {
|
class TLSSocketFactory(tm: Array<TrustManager>) : SSLSocketFactory() {
|
||||||
|
|
||||||
private val delegate: SSLSocketFactory
|
private val delegate: SSLSocketFactory
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val context = SSLContext.getInstance("TLS").apply {
|
val context = SSLContext.getInstance("TLS").apply {
|
||||||
init(null, null, null)
|
init(null, tm, null)
|
||||||
}
|
}
|
||||||
delegate = context.socketFactory
|
delegate = context.socketFactory
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue