mirror of
https://github.com/TwidereProject/Twidere-Android
synced 2025-02-02 09:46:51 +01:00
using databases for public timelines
improved link handler title
This commit is contained in:
parent
d98c25c453
commit
9eb346a5ed
@ -6,7 +6,7 @@ buildscript {
|
||||
maven { url 'https://maven.google.com' }
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.0.0-beta6'
|
||||
classpath 'com.android.tools.build:gradle:3.0.0-beta7'
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
}
|
||||
@ -20,7 +20,7 @@ allprojects {
|
||||
projectVersionName = '3.6.33'
|
||||
|
||||
globalCompileSdkVersion = 26
|
||||
globalBuildToolsVersion = '26.0.1'
|
||||
globalBuildToolsVersion = '26.0.2'
|
||||
}
|
||||
|
||||
repositories {
|
||||
@ -79,7 +79,7 @@ subprojects {
|
||||
ACRA : '4.9.2',
|
||||
AbstractTask : '0.9.5',
|
||||
Dagger : '2.11',
|
||||
StethoBeanShellREPL : '0.1',
|
||||
StethoBeanShellREPL : '0.3',
|
||||
]
|
||||
|
||||
}
|
||||
|
@ -217,6 +217,8 @@ public interface TwidereConstants extends SharedPreferenceConstants, IntentConst
|
||||
int TABLE_ID_CACHED_STATUSES = 62;
|
||||
int TABLE_ID_CACHED_HASHTAGS = 63;
|
||||
int TABLE_ID_CACHED_RELATIONSHIPS = 64;
|
||||
int TABLE_ID_PUBLIC_TIMELINE = 71;
|
||||
int TABLE_ID_NETWORK_PUBLIC_TIMELINE = 72;
|
||||
int VIRTUAL_TABLE_ID_PERMISSIONS = 104;
|
||||
int VIRTUAL_TABLE_ID_CACHED_USERS_WITH_RELATIONSHIP = 121;
|
||||
int VIRTUAL_TABLE_ID_CACHED_USERS_WITH_SCORE = 122;
|
||||
|
@ -213,7 +213,6 @@ public class ParcelableActivity extends ParcelableStatus implements Parcelable {
|
||||
", spans=" + Arrays.toString(spans) +
|
||||
", quoted_spans=" + Arrays.toString(quoted_spans) +
|
||||
", account_color=" + account_color +
|
||||
", inserted_date=" + inserted_date +
|
||||
", filter_flags=" + filter_flags +
|
||||
", filter_users=" + Arrays.toString(filter_users) +
|
||||
", filter_sources=" + Arrays.toString(filter_sources) +
|
||||
@ -221,6 +220,7 @@ public class ParcelableActivity extends ParcelableStatus implements Parcelable {
|
||||
", filter_names=" + Arrays.toString(filter_names) +
|
||||
", filter_texts='" + filter_texts + '\'' +
|
||||
", filter_descriptions='" + filter_descriptions + '\'' +
|
||||
", tab_id=" + tab_id +
|
||||
", is_pinned_status=" + is_pinned_status +
|
||||
", is_filtered=" + is_filtered +
|
||||
'}';
|
||||
|
@ -323,9 +323,6 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
||||
@CursorField(Statuses.ACCOUNT_COLOR)
|
||||
public int account_color;
|
||||
|
||||
@CursorField(Statuses.INSERTED_DATE)
|
||||
public long inserted_date;
|
||||
|
||||
@FilterFlags
|
||||
@JsonField(name = "filter_flags")
|
||||
@CursorField(Statuses.FILTER_FLAGS)
|
||||
@ -355,6 +352,9 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
||||
@CursorField(value = Statuses.FILTER_DESCRIPTIONS)
|
||||
public String filter_descriptions;
|
||||
|
||||
@CursorField(Statuses.TAB_ID)
|
||||
public long tab_id;
|
||||
|
||||
public transient boolean is_pinned_status;
|
||||
public transient boolean is_filtered;
|
||||
|
||||
@ -457,7 +457,6 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
||||
", spans=" + Arrays.toString(spans) +
|
||||
", quoted_spans=" + Arrays.toString(quoted_spans) +
|
||||
", account_color=" + account_color +
|
||||
", inserted_date=" + inserted_date +
|
||||
", filter_flags=" + filter_flags +
|
||||
", filter_users=" + Arrays.toString(filter_users) +
|
||||
", filter_sources=" + Arrays.toString(filter_sources) +
|
||||
@ -465,6 +464,7 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
||||
", filter_names=" + Arrays.toString(filter_names) +
|
||||
", filter_texts='" + filter_texts + '\'' +
|
||||
", filter_descriptions='" + filter_descriptions + '\'' +
|
||||
", tab_id=" + tab_id +
|
||||
", is_pinned_status=" + is_pinned_status +
|
||||
", is_filtered=" + is_filtered +
|
||||
'}';
|
||||
|
@ -63,11 +63,6 @@ public interface TwidereDataStore {
|
||||
Uri CONTENT_URI_RAW_QUERY = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH_RAW_QUERY);
|
||||
Uri CONTENT_URI_DATABASE_PREPARE = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH_DATABASE_PREPARE);
|
||||
|
||||
interface InsertedDateColumns {
|
||||
String INSERTED_DATE = "inserted_date";
|
||||
String INSERTED_DATE_TYPE = TYPE_INT;
|
||||
}
|
||||
|
||||
interface AccountSupportColumns {
|
||||
|
||||
String ACCOUNT_KEY = "account_id";
|
||||
@ -342,7 +337,7 @@ public interface TwidereDataStore {
|
||||
String[] COLUMNS = {_ID, NAME, PATH};
|
||||
}
|
||||
|
||||
interface Messages extends BaseColumns, InsertedDateColumns, AccountSupportColumns {
|
||||
interface Messages extends BaseColumns, AccountSupportColumns {
|
||||
String MESSAGE_ID = "message_id";
|
||||
String CONVERSATION_ID = "conversation_id";
|
||||
String MESSAGE_TYPE = "message_type";
|
||||
@ -578,7 +573,7 @@ public interface TwidereDataStore {
|
||||
String[] COLUMNS = {_ID, PACKAGE_NAME, PERMISSION};
|
||||
}
|
||||
|
||||
interface Statuses extends BaseColumns, InsertedDateColumns, AccountSupportColumns {
|
||||
interface Statuses extends BaseColumns, AccountSupportColumns {
|
||||
|
||||
String TABLE_NAME = "statuses";
|
||||
String CONTENT_PATH = TABLE_NAME;
|
||||
@ -738,6 +733,8 @@ public interface TwidereDataStore {
|
||||
String FILTER_TEXTS = "filter_texts";
|
||||
String FILTER_DESCRIPTIONS = "filter_descriptions";
|
||||
|
||||
String TAB_ID = "tab_id";
|
||||
|
||||
String DEFAULT_SORT_ORDER = TIMESTAMP + " DESC, " + SORT_ID + " DESC, " + ID
|
||||
+ " DESC";
|
||||
|
||||
@ -745,9 +742,27 @@ public interface TwidereDataStore {
|
||||
|
||||
String[] TYPES = ParcelableStatusTableInfo.TYPES;
|
||||
|
||||
interface Public extends Statuses {
|
||||
|
||||
String CONTENT_PATH = "public_timeline";
|
||||
String TABLE_NAME = "public_timeline";
|
||||
|
||||
@NonNull
|
||||
Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH);
|
||||
}
|
||||
|
||||
interface Activities extends Statuses, BaseColumns, InsertedDateColumns, AccountSupportColumns {
|
||||
interface NetworkPublic extends Statuses {
|
||||
|
||||
String CONTENT_PATH = "network_public_timeline";
|
||||
String TABLE_NAME = "network_public_timeline";
|
||||
|
||||
@NonNull
|
||||
Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
interface Activities extends Statuses, BaseColumns, AccountSupportColumns {
|
||||
|
||||
String ACTIVITY_ID = "activity_id";
|
||||
|
||||
|
@ -12,7 +12,7 @@ import org.junit.runner.RunWith
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.TwidereConstants
|
||||
import org.mariotaku.twidere.TwidereConstants.SHARED_PREFERENCES_NAME
|
||||
import org.mariotaku.twidere.task.twitter.UpdateStatusTask
|
||||
import org.mariotaku.twidere.task.status.UpdateStatusTask
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 2016/12/7.
|
||||
|
@ -30,7 +30,7 @@ import org.mariotaku.twidere.model.UserKey;
|
||||
public interface Constants extends TwidereConstants {
|
||||
|
||||
String DATABASES_NAME = "twidere.sqlite";
|
||||
int DATABASES_VERSION = 188;
|
||||
int DATABASES_VERSION = 190;
|
||||
|
||||
int EXTRA_FEATURES_NOTICE_VERSION = 2;
|
||||
|
||||
|
@ -11,12 +11,16 @@ import java.lang.annotation.RetentionPolicy;
|
||||
@StringDef({
|
||||
ReadPositionTag.ACTIVITIES_ABOUT_ME,
|
||||
ReadPositionTag.HOME_TIMELINE,
|
||||
ReadPositionTag.PUBLIC_TIMELINE,
|
||||
ReadPositionTag.NETWORK_PUBLIC_TIMELINE,
|
||||
ReadPositionTag.DIRECT_MESSAGES,
|
||||
ReadPositionTag.CUSTOM_TIMELINE,
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface ReadPositionTag {
|
||||
String HOME_TIMELINE = "home_timeline";
|
||||
String PUBLIC_TIMELINE = "public_timeline";
|
||||
String NETWORK_PUBLIC_TIMELINE = "network_public_timeline";
|
||||
String ACTIVITIES_ABOUT_ME = "activities_about_me";
|
||||
String DIRECT_MESSAGES = "direct_messages";
|
||||
String CUSTOM_TIMELINE = "custom_timeline";
|
||||
|
@ -92,7 +92,7 @@ import org.mariotaku.twidere.provider.TwidereDataStore.Drafts
|
||||
import org.mariotaku.twidere.service.LengthyOperationsService
|
||||
import org.mariotaku.twidere.task.compose.AbsAddMediaTask
|
||||
import org.mariotaku.twidere.task.compose.AbsDeleteMediaTask
|
||||
import org.mariotaku.twidere.task.twitter.UpdateStatusTask
|
||||
import org.mariotaku.twidere.task.status.UpdateStatusTask
|
||||
import org.mariotaku.twidere.text.MarkForDeleteSpan
|
||||
import org.mariotaku.twidere.text.style.EmojiSpan
|
||||
import org.mariotaku.twidere.util.*
|
||||
|
@ -48,7 +48,10 @@ import org.mariotaku.twidere.Constants.*
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.activity.iface.IControlBarActivity
|
||||
import org.mariotaku.twidere.activity.iface.IControlBarActivity.ControlBarShowHideHelper
|
||||
import org.mariotaku.twidere.constant.*
|
||||
import org.mariotaku.twidere.constant.CompatibilityConstants
|
||||
import org.mariotaku.twidere.constant.IntentConstants
|
||||
import org.mariotaku.twidere.constant.KeyboardShortcutConstants
|
||||
import org.mariotaku.twidere.constant.floatingDetailedContentsKey
|
||||
import org.mariotaku.twidere.exception.NoAccountException
|
||||
import org.mariotaku.twidere.fragment.*
|
||||
import org.mariotaku.twidere.fragment.drafts.DraftsFragment
|
||||
@ -56,6 +59,8 @@ import org.mariotaku.twidere.fragment.filter.FiltersFragment
|
||||
import org.mariotaku.twidere.fragment.filter.FiltersImportBlocksFragment
|
||||
import org.mariotaku.twidere.fragment.filter.FiltersImportMutesFragment
|
||||
import org.mariotaku.twidere.fragment.filter.FiltersSubscriptionsFragment
|
||||
import org.mariotaku.twidere.fragment.group.GroupFragment
|
||||
import org.mariotaku.twidere.fragment.group.UserGroupsFragment
|
||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment
|
||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowInsetsCallback
|
||||
import org.mariotaku.twidere.fragment.iface.IFloatingActionButtonFragment
|
||||
@ -69,6 +74,9 @@ import org.mariotaku.twidere.fragment.search.MastodonSearchFragment
|
||||
import org.mariotaku.twidere.fragment.search.SearchFragment
|
||||
import org.mariotaku.twidere.fragment.status.StatusFragment
|
||||
import org.mariotaku.twidere.fragment.statuses.*
|
||||
import org.mariotaku.twidere.fragment.userlist.ListsFragment
|
||||
import org.mariotaku.twidere.fragment.userlist.UserListFragment
|
||||
import org.mariotaku.twidere.fragment.userlist.UserListMembershipsFragment
|
||||
import org.mariotaku.twidere.fragment.users.*
|
||||
import org.mariotaku.twidere.graphic.ActionBarColorDrawable
|
||||
import org.mariotaku.twidere.graphic.EmptyDrawable
|
||||
@ -82,11 +90,15 @@ import org.mariotaku.twidere.util.theme.getCurrentThemeResource
|
||||
class LinkHandlerActivity : BaseActivity(), SystemWindowInsetsCallback, IControlBarActivity,
|
||||
SupportFragmentCallback {
|
||||
|
||||
var subtitle: CharSequence? = null
|
||||
set(value) {
|
||||
field = value
|
||||
setupActionBarOption()
|
||||
}
|
||||
private lateinit var multiSelectHandler: MultiSelectEventHandler
|
||||
private lateinit var controlBarShowHideHelper: ControlBarShowHideHelper
|
||||
private var finishOnly: Boolean = false
|
||||
private var actionBarHeight: Int = 0
|
||||
private var subtitle: CharSequence? = null
|
||||
private var hideOffsetNotSupported: Boolean = false
|
||||
private lateinit var fragmentLifecycleCallbacks: FragmentLifecycleCallbacks
|
||||
|
||||
@ -173,7 +185,6 @@ class LinkHandlerActivity : BaseActivity(), SystemWindowInsetsCallback, IControl
|
||||
ft.replace(contentFragmentId, fragment, "content_fragment")
|
||||
ft.commit()
|
||||
}
|
||||
setTitle(linkId, uri)
|
||||
finishOnly = uri.getQueryParameter(QUERY_PARAM_FINISH_ONLY)?.toBoolean() == true
|
||||
|
||||
val theme = overrideTheme
|
||||
@ -299,11 +310,6 @@ class LinkHandlerActivity : BaseActivity(), SystemWindowInsetsCallback, IControl
|
||||
setupActionBarOption()
|
||||
}
|
||||
|
||||
fun setSubtitle(subtitle: CharSequence?) {
|
||||
this.subtitle = subtitle
|
||||
setupActionBarOption()
|
||||
}
|
||||
|
||||
override fun setControlBarVisibleAnimate(visible: Boolean, listener: ControlBarShowHideHelper.ControlBarAnimationListener?) {
|
||||
// Currently only search page needs this pattern, so we only enable this feature for it.
|
||||
actionsButton?.let { fab ->
|
||||
@ -370,140 +376,6 @@ class LinkHandlerActivity : BaseActivity(), SystemWindowInsetsCallback, IControl
|
||||
return getCurrentThemeResource(this, theme, R.style.Theme_Twidere)
|
||||
}
|
||||
|
||||
private fun setTitle(linkId: Int, uri: Uri): Boolean {
|
||||
setSubtitle(null)
|
||||
when (linkId) {
|
||||
LINK_ID_STATUS -> {
|
||||
setTitle(R.string.title_status)
|
||||
}
|
||||
LINK_ID_USER -> {
|
||||
setTitle(R.string.title_user)
|
||||
}
|
||||
LINK_ID_USER_TIMELINE -> {
|
||||
setTitle(R.string.title_statuses)
|
||||
}
|
||||
LINK_ID_USER_FAVORITES -> {
|
||||
if (preferences[iWantMyStarsBackKey]) {
|
||||
setTitle(R.string.title_favorites)
|
||||
} else {
|
||||
setTitle(R.string.title_likes)
|
||||
}
|
||||
}
|
||||
LINK_ID_USER_FOLLOWERS -> {
|
||||
setTitle(R.string.title_followers)
|
||||
}
|
||||
LINK_ID_USER_FRIENDS -> {
|
||||
setTitle(R.string.title_following)
|
||||
}
|
||||
LINK_ID_USER_BLOCKS -> {
|
||||
setTitle(R.string.title_blocked_users)
|
||||
}
|
||||
LINK_ID_MUTES_USERS -> {
|
||||
setTitle(R.string.action_twitter_muted_users)
|
||||
}
|
||||
LINK_ID_USER_LIST -> {
|
||||
setTitle(R.string.title_user_list)
|
||||
}
|
||||
LINK_ID_GROUP -> {
|
||||
setTitle(R.string.group)
|
||||
}
|
||||
LINK_ID_USER_LISTS -> {
|
||||
setTitle(R.string.user_lists)
|
||||
}
|
||||
LINK_ID_USER_GROUPS -> {
|
||||
setTitle(R.string.groups)
|
||||
}
|
||||
LINK_ID_USER_LIST_TIMELINE -> {
|
||||
setTitle(R.string.list_timeline)
|
||||
}
|
||||
LINK_ID_USER_LIST_MEMBERS -> {
|
||||
setTitle(R.string.list_members)
|
||||
}
|
||||
LINK_ID_USER_LIST_SUBSCRIBERS -> {
|
||||
setTitle(R.string.list_subscribers)
|
||||
}
|
||||
LINK_ID_USER_LIST_MEMBERSHIPS -> {
|
||||
setTitle(R.string.lists_following_user)
|
||||
}
|
||||
LINK_ID_SAVED_SEARCHES -> {
|
||||
setTitle(R.string.saved_searches)
|
||||
}
|
||||
LINK_ID_USER_MENTIONS -> {
|
||||
setTitle(R.string.user_mentions)
|
||||
}
|
||||
LINK_ID_INCOMING_FRIENDSHIPS -> {
|
||||
setTitle(R.string.incoming_friendships)
|
||||
}
|
||||
LINK_ID_ITEMS -> {
|
||||
}// TODO show title
|
||||
LINK_ID_USER_MEDIA_TIMELINE -> {
|
||||
setTitle(R.string.media)
|
||||
}
|
||||
LINK_ID_STATUS_RETWEETERS -> {
|
||||
setTitle(R.string.title_users_retweeted_this)
|
||||
}
|
||||
LINK_ID_STATUS_FAVORITERS -> {
|
||||
if (preferences[iWantMyStarsBackKey]) {
|
||||
setTitle(R.string.title_users_favorited_this)
|
||||
} else {
|
||||
setTitle(R.string.title_users_liked_this)
|
||||
}
|
||||
}
|
||||
LINK_ID_SEARCH -> {
|
||||
setTitle(R.string.title_search)
|
||||
setSubtitle(uri.getQueryParameter(QUERY_PARAM_QUERY))
|
||||
}
|
||||
LINK_ID_MASTODON_SEARCH -> {
|
||||
setTitle(R.string.title_search)
|
||||
setSubtitle(uri.getQueryParameter(QUERY_PARAM_QUERY))
|
||||
}
|
||||
LINK_ID_ACCOUNTS -> {
|
||||
setTitle(R.string.title_accounts)
|
||||
}
|
||||
LINK_ID_MAP -> {
|
||||
setTitle(R.string.action_view_map)
|
||||
}
|
||||
LINK_ID_PROFILE_EDITOR -> {
|
||||
setTitle(R.string.title_edit_profile)
|
||||
}
|
||||
LINK_ID_MESSAGES -> {
|
||||
title = getString(R.string.title_direct_messages)
|
||||
}
|
||||
LINK_ID_MESSAGES_CONVERSATION -> {
|
||||
title = getString(R.string.title_direct_messages)
|
||||
}
|
||||
LINK_ID_MESSAGES_CONVERSATION_NEW -> {
|
||||
title = getString(R.string.title_direct_messages_conversation_new)
|
||||
}
|
||||
LINK_ID_MESSAGES_CONVERSATION_INFO -> {
|
||||
title = getString(R.string.title_direct_messages_conversation_info)
|
||||
}
|
||||
LINK_ID_INTERACTIONS -> {
|
||||
title = getString(R.string.interactions)
|
||||
}
|
||||
LINK_ID_PUBLIC_TIMELINE -> {
|
||||
title = getString(R.string.title_public_timeline)
|
||||
}
|
||||
LINK_ID_NETWORK_PUBLIC_TIMELINE -> {
|
||||
title = getString(R.string.title_network_public_timeline)
|
||||
}
|
||||
LINK_ID_FILTERS_IMPORT_BLOCKS -> {
|
||||
title = getString(R.string.title_select_users)
|
||||
}
|
||||
LINK_ID_FILTERS_IMPORT_MUTES -> {
|
||||
title = getString(R.string.title_select_users)
|
||||
}
|
||||
LINK_ID_FILTERS_SUBSCRIPTIONS_ADD,
|
||||
LINK_ID_FILTERS_SUBSCRIPTIONS -> {
|
||||
title = getString(R.string.title_manage_filter_subscriptions)
|
||||
}
|
||||
else -> {
|
||||
title = getString(R.string.app_name)
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
private fun handleFragmentKeyboardShortcutRepeat(handler: KeyboardShortcutsHandler, keyCode: Int,
|
||||
repeatCount: Int, event: KeyEvent, metaState: Int): Boolean {
|
||||
val fragment = currentVisibleFragment
|
||||
|
@ -20,12 +20,16 @@
|
||||
package org.mariotaku.twidere.extension
|
||||
|
||||
import android.support.v4.app.Fragment
|
||||
import org.mariotaku.twidere.activity.LinkHandlerActivity
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 2017/10/4.
|
||||
*/
|
||||
var Fragment.title: CharSequence?
|
||||
get() = activity.title
|
||||
var Fragment.linkHandlerTitle: CharSequence?
|
||||
get() = (activity as? LinkHandlerActivity)?.title
|
||||
set(value) {
|
||||
activity.title
|
||||
(activity as? LinkHandlerActivity)?.title = value
|
||||
}
|
||||
|
||||
var Fragment.linkHandlerSubtitle: CharSequence?
|
||||
get() = (activity as? LinkHandlerActivity)?.subtitle
|
||||
set(value) {
|
||||
(activity as? LinkHandlerActivity)?.subtitle = value
|
||||
}
|
@ -11,7 +11,7 @@ import org.mariotaku.twidere.model.account.StatusNetAccountExtras
|
||||
import org.mariotaku.twidere.model.account.TwitterAccountExtras
|
||||
import org.mariotaku.twidere.model.account.cred.Credentials
|
||||
import org.mariotaku.twidere.model.account.cred.OAuthCredentials
|
||||
import org.mariotaku.twidere.task.twitter.UpdateStatusTask
|
||||
import org.mariotaku.twidere.task.status.UpdateStatusTask
|
||||
import org.mariotaku.twidere.util.InternalTwitterContentUtils
|
||||
|
||||
fun AccountDetails.isOfficial(context: Context): Boolean {
|
||||
|
@ -32,6 +32,7 @@ import org.mariotaku.twidere.adapter.AccountDetailsAdapter
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY
|
||||
import org.mariotaku.twidere.constant.newDocumentApiKey
|
||||
import org.mariotaku.twidere.extension.applyTheme
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.extension.model.getAccountKey
|
||||
import org.mariotaku.twidere.extension.model.setActivated
|
||||
import org.mariotaku.twidere.extension.model.setColor
|
||||
@ -59,6 +60,7 @@ class AccountsManagerFragment : BaseFragment(), LoaderManager.LoaderCallbacks<Li
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
linkHandlerTitle = getString(R.string.title_accounts)
|
||||
val am = AccountManager.get(context)
|
||||
adapter = AccountDetailsAdapter(context, requestManager).apply {
|
||||
sortEnabled = true
|
||||
|
@ -46,7 +46,7 @@ import org.mariotaku.twidere.model.event.*
|
||||
import org.mariotaku.twidere.model.pagination.SinceMaxPagination
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Activities
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Filters
|
||||
import org.mariotaku.twidere.task.twitter.GetStatusesTask
|
||||
import org.mariotaku.twidere.task.statuses.GetStatusesTask
|
||||
import org.mariotaku.twidere.util.DataStoreUtils
|
||||
import org.mariotaku.twidere.util.DataStoreUtils.getTableNameByUri
|
||||
import org.mariotaku.twidere.util.ErrorInfoStore
|
||||
|
@ -50,7 +50,7 @@ import org.mariotaku.twidere.model.event.*
|
||||
import org.mariotaku.twidere.model.pagination.SinceMaxPagination
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Filters
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||
import org.mariotaku.twidere.task.twitter.GetStatusesTask
|
||||
import org.mariotaku.twidere.task.statuses.GetStatusesTask
|
||||
import org.mariotaku.twidere.util.DataStoreUtils
|
||||
import org.mariotaku.twidere.util.ErrorInfoStore
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
@ -256,6 +256,8 @@ abstract class CursorStatusesFragment : AbsStatusesFragment() {
|
||||
}
|
||||
|
||||
private fun clearNotifications() {
|
||||
val notificationType = notificationType
|
||||
if (notificationType <= 0) return
|
||||
if (context != null && userVisibleHint) {
|
||||
for (accountKey in accountKeys) {
|
||||
twitterWrapper.clearNotificationAsync(notificationType, accountKey)
|
||||
|
@ -77,7 +77,7 @@ class HomeTimelineFragment : CursorStatusesFragment() {
|
||||
override fun processWhere(where: Expression, whereArgs: Array<String>): ParameterizedExpression {
|
||||
val arguments = arguments
|
||||
if (arguments != null) {
|
||||
val extras = arguments.getParcelable<HomeTabExtras>(EXTRA_EXTRAS)
|
||||
val extras = arguments.getParcelable<HomeTabExtras?>(EXTRA_EXTRAS)
|
||||
if (extras != null) {
|
||||
val expressions = ArrayList<Expression>()
|
||||
val expressionArgs = ArrayList<String>()
|
||||
|
@ -20,14 +20,17 @@
|
||||
package org.mariotaku.twidere.fragment
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import com.bumptech.glide.RequestManager
|
||||
import org.mariotaku.microblog.library.twitter.model.Activity
|
||||
import org.mariotaku.sqliteqb.library.Expression
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.TwidereConstants.NOTIFICATION_ID_INTERACTIONS_TIMELINE
|
||||
import org.mariotaku.twidere.adapter.ParcelableActivitiesAdapter
|
||||
import org.mariotaku.twidere.annotation.FilterScope
|
||||
import org.mariotaku.twidere.annotation.ReadPositionTag
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_EXTRAS
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.model.ParameterizedExpression
|
||||
import org.mariotaku.twidere.model.RefreshTaskParam
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
@ -54,6 +57,11 @@ class InteractionsTimelineFragment : CursorActivitiesFragment() {
|
||||
override val filterScopes: Int
|
||||
get() = FilterScope.INTERACTIONS
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.interactions)
|
||||
}
|
||||
|
||||
override fun onCreateAdapter(context: Context, requestManager: RequestManager): ParcelableActivitiesAdapter {
|
||||
val adapter = ParcelableActivitiesAdapter(context, requestManager)
|
||||
val extras: InteractionsTabExtras? = arguments.getParcelable(EXTRA_EXTRAS)
|
||||
|
@ -31,8 +31,10 @@ import com.squareup.otto.Subscribe
|
||||
import kotlinx.android.synthetic.main.fragment_content_listview.*
|
||||
import org.mariotaku.microblog.library.twitter.model.ResponseList
|
||||
import org.mariotaku.microblog.library.twitter.model.SavedSearch
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.adapter.SavedSearchesAdapter
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.loader.SavedSearchesLoader
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.event.SavedSearchDestroyedEvent
|
||||
@ -54,6 +56,8 @@ class SavedSearchesListFragment : AbsContentListViewFragment<SavedSearchesAdapte
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.saved_searches)
|
||||
|
||||
listView.onItemClickListener = this
|
||||
listView.onItemLongClickListener = this
|
||||
loaderManager.initLoader(0, null, this)
|
||||
|
@ -654,6 +654,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.title_user)
|
||||
val activity = activity
|
||||
nameFirst = preferences[nameFirstKey]
|
||||
cardBackgroundColor = ThemeUtils.getCardBackgroundColor(activity,
|
||||
|
@ -1,22 +0,0 @@
|
||||
package org.mariotaku.twidere.fragment
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.support.v4.content.Loader
|
||||
import org.mariotaku.twidere.constant.IntentConstants.*
|
||||
import org.mariotaku.twidere.loader.group.UserGroupsLoader
|
||||
import org.mariotaku.twidere.model.ParcelableGroup
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/9.
|
||||
*/
|
||||
class UserGroupsFragment : ParcelableGroupsFragment() {
|
||||
override fun onCreateUserListsLoader(context: Context, args: Bundle, fromUser: Boolean): Loader<List<ParcelableGroup>?> {
|
||||
val accountKey = args.getParcelable<UserKey>(EXTRA_ACCOUNT_KEY)
|
||||
val userKey = args.getParcelable<UserKey>(EXTRA_USER_KEY)
|
||||
val screenName = args.getString(EXTRA_SCREEN_NAME)
|
||||
return UserGroupsLoader(context, accountKey, userKey, screenName, adapter.getData())
|
||||
}
|
||||
|
||||
}
|
@ -50,6 +50,8 @@ import org.mariotaku.twidere.TwidereConstants.*
|
||||
import org.mariotaku.twidere.activity.ColorPickerDialogActivity
|
||||
import org.mariotaku.twidere.activity.ThemedMediaPickerActivity
|
||||
import org.mariotaku.twidere.annotation.AccountType
|
||||
import org.mariotaku.twidere.annotation.ImageShapeStyle
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.extension.loadProfileBanner
|
||||
import org.mariotaku.twidere.extension.loadProfileImage
|
||||
import org.mariotaku.twidere.extension.model.api.mastodon.toParcelable
|
||||
@ -77,6 +79,44 @@ class UserProfileEditorFragment : BaseFragment(), OnSizeChangedListener,
|
||||
private var userInfoLoaderInitialized: Boolean = false
|
||||
private var getUserInfoCalled: Boolean = false
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
linkHandlerTitle = getString(R.string.title_edit_profile)
|
||||
if (!Utils.isMyAccount(activity, accountKey)) {
|
||||
activity.finish()
|
||||
return
|
||||
}
|
||||
|
||||
val lengthChecker = TwitterValidatorMETLengthChecker(Validator())
|
||||
|
||||
editDescription.setLengthChecker(lengthChecker)
|
||||
|
||||
profileImage.setOnClickListener(this)
|
||||
profileBanner.setOnClickListener(this)
|
||||
profileBackground.setOnClickListener(this)
|
||||
|
||||
editProfileImage.setOnClickListener(this)
|
||||
editProfileBanner.setOnClickListener(this)
|
||||
editProfileBackground.setOnClickListener(this)
|
||||
|
||||
setLinkColor.setOnClickListener(this)
|
||||
setBackgroundColor.setOnClickListener(this)
|
||||
|
||||
val savedUser = savedInstanceState?.getParcelable<ParcelableUser?>(EXTRA_USER)
|
||||
val savedAccount = savedInstanceState?.getParcelable<AccountDetails?>(EXTRA_ACCOUNT)
|
||||
if (savedInstanceState != null && savedUser != null && savedAccount != null) {
|
||||
displayUser(savedUser, savedAccount)
|
||||
editName.setText(savedInstanceState.getString(EXTRA_NAME, savedUser.name))
|
||||
editLocation.setText(savedInstanceState.getString(EXTRA_LOCATION, savedUser.location))
|
||||
editDescription.setText(savedInstanceState.getString(EXTRA_DESCRIPTION,
|
||||
ParcelableUserUtils.getExpandedDescription(savedUser)))
|
||||
editUrl.setText(savedInstanceState.getString(EXTRA_URL, savedUser.url_expanded))
|
||||
} else {
|
||||
getUserInfo()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onClick(view: View) {
|
||||
val user = user ?: return
|
||||
val account = account ?: return
|
||||
@ -145,6 +185,7 @@ class UserProfileEditorFragment : BaseFragment(), OnSizeChangedListener,
|
||||
inflater.inflate(R.menu.menu_profile_editor, menu)
|
||||
}
|
||||
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
when (item.itemId) {
|
||||
R.id.save -> {
|
||||
@ -164,44 +205,6 @@ class UserProfileEditorFragment : BaseFragment(), OnSizeChangedListener,
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
if (!Utils.isMyAccount(activity, accountKey)) {
|
||||
activity.finish()
|
||||
return
|
||||
}
|
||||
|
||||
val lengthChecker = TwitterValidatorMETLengthChecker(Validator())
|
||||
|
||||
editDescription.setLengthChecker(lengthChecker)
|
||||
|
||||
profileImage.setOnClickListener(this)
|
||||
profileBanner.setOnClickListener(this)
|
||||
profileBackground.setOnClickListener(this)
|
||||
|
||||
editProfileImage.setOnClickListener(this)
|
||||
editProfileBanner.setOnClickListener(this)
|
||||
editProfileBackground.setOnClickListener(this)
|
||||
|
||||
setLinkColor.setOnClickListener(this)
|
||||
setBackgroundColor.setOnClickListener(this)
|
||||
|
||||
val savedUser = savedInstanceState?.getParcelable<ParcelableUser?>(EXTRA_USER)
|
||||
val savedAccount = savedInstanceState?.getParcelable<AccountDetails?>(EXTRA_ACCOUNT)
|
||||
if (savedInstanceState != null && savedUser != null && savedAccount != null) {
|
||||
displayUser(savedUser, savedAccount)
|
||||
editName.setText(savedInstanceState.getString(EXTRA_NAME, savedUser.name))
|
||||
editLocation.setText(savedInstanceState.getString(EXTRA_LOCATION, savedUser.location))
|
||||
editDescription.setText(savedInstanceState.getString(EXTRA_DESCRIPTION,
|
||||
ParcelableUserUtils.getExpandedDescription(savedUser)))
|
||||
editUrl.setText(savedInstanceState.getString(EXTRA_URL, savedUser.url_expanded))
|
||||
} else {
|
||||
getUserInfo()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
super.onSaveInstanceState(outState)
|
||||
outState.putParcelable(EXTRA_USER, user)
|
||||
@ -277,7 +280,8 @@ class UserProfileEditorFragment : BaseFragment(), OnSizeChangedListener,
|
||||
editLocation.setText(user.location)
|
||||
editUrl.setText(if (isEmpty(user.url_expanded)) user.url else user.url_expanded)
|
||||
|
||||
requestManager.loadProfileImage(context, user, 0).into(profileImage)
|
||||
requestManager.loadProfileImage(context, user,
|
||||
ImageShapeStyle.SHAPE_RECTANGLE).into(profileImage)
|
||||
requestManager.loadProfileBanner(context, user, resources.displayMetrics.widthPixels)
|
||||
.into(profileBanner)
|
||||
requestManager.load(user.profile_background_url).into(profileBackground)
|
||||
|
@ -24,7 +24,7 @@ import org.mariotaku.ktextension.Bundle
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.adapter.SupportTabsAdapter
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACTIONS
|
||||
import org.mariotaku.twidere.extension.title
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.AbsToolbarTabPagesFragment
|
||||
import org.mariotaku.twidere.model.Draft
|
||||
|
||||
@ -35,7 +35,7 @@ import org.mariotaku.twidere.model.Draft
|
||||
class DraftsFragment : AbsToolbarTabPagesFragment() {
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
title = getString(R.string.title_drafts)
|
||||
linkHandlerTitle = getString(R.string.title_drafts)
|
||||
}
|
||||
|
||||
override fun addTabs(adapter: SupportTabsAdapter) {
|
||||
|
@ -22,7 +22,7 @@ package org.mariotaku.twidere.fragment.filter
|
||||
import android.os.Bundle
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.adapter.SupportTabsAdapter
|
||||
import org.mariotaku.twidere.extension.title
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.AbsToolbarTabPagesFragment
|
||||
|
||||
class FiltersFragment : AbsToolbarTabPagesFragment() {
|
||||
@ -30,7 +30,7 @@ class FiltersFragment : AbsToolbarTabPagesFragment() {
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
title = getString(R.string.title_filters)
|
||||
linkHandlerTitle = getString(R.string.title_filters)
|
||||
}
|
||||
|
||||
override fun addTabs(adapter: SupportTabsAdapter) {
|
||||
|
@ -2,8 +2,10 @@ package org.mariotaku.twidere.fragment.filter
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.IntentConstants
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_PAGINATION
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader
|
||||
import org.mariotaku.twidere.loader.users.UserBlocksLoader
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
@ -13,6 +15,10 @@ import org.mariotaku.twidere.model.UserKey
|
||||
*/
|
||||
|
||||
class FiltersImportBlocksFragment : BaseFiltersImportFragment() {
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.title_select_users)
|
||||
}
|
||||
|
||||
override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
|
||||
AbsRequestUsersLoader {
|
||||
|
@ -2,8 +2,10 @@ package org.mariotaku.twidere.fragment.filter
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.IntentConstants
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader
|
||||
import org.mariotaku.twidere.loader.users.MutesUsersLoader
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
@ -13,6 +15,11 @@ import org.mariotaku.twidere.model.UserKey
|
||||
*/
|
||||
class FiltersImportMutesFragment : BaseFiltersImportFragment() {
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.title_select_users)
|
||||
}
|
||||
|
||||
override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
|
||||
AbsRequestUsersLoader {
|
||||
val accountKey = args.getParcelable<UserKey>(EXTRA_ACCOUNT_KEY)
|
||||
|
@ -59,6 +59,7 @@ class FiltersSubscriptionsFragment : BaseFragment(), LoaderManager.LoaderCallbac
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
linkHandlerTitle = getString(R.string.title_manage_filter_subscriptions)
|
||||
|
||||
adapter = FilterSubscriptionsAdapter(context)
|
||||
listView.adapter = adapter
|
||||
|
@ -1,4 +1,23 @@
|
||||
package org.mariotaku.twidere.fragment
|
||||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.fragment.group
|
||||
|
||||
import android.content.Context
|
||||
import android.nfc.NdefMessage
|
||||
@ -13,6 +32,7 @@ import org.mariotaku.microblog.library.statusnet.model.Group
|
||||
import org.mariotaku.twidere.Constants.*
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.adapter.SupportTabsAdapter
|
||||
import org.mariotaku.twidere.fragment.AbsToolbarTabPagesFragment
|
||||
import org.mariotaku.twidere.fragment.statuses.GroupTimelineFragment
|
||||
import org.mariotaku.twidere.fragment.users.GroupMembersFragment
|
||||
import org.mariotaku.twidere.model.ParcelableGroup
|
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.fragment.group
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.support.v4.content.Loader
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.IntentConstants.*
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.ParcelableGroupsFragment
|
||||
import org.mariotaku.twidere.loader.group.UserGroupsLoader
|
||||
import org.mariotaku.twidere.model.ParcelableGroup
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/9.
|
||||
*/
|
||||
class UserGroupsFragment : ParcelableGroupsFragment() {
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.groups)
|
||||
}
|
||||
|
||||
override fun onCreateUserListsLoader(context: Context, args: Bundle, fromUser: Boolean): Loader<List<ParcelableGroup>?> {
|
||||
val accountKey = args.getParcelable<UserKey>(EXTRA_ACCOUNT_KEY)
|
||||
val userKey = args.getParcelable<UserKey>(EXTRA_USER_KEY)
|
||||
val screenName = args.getString(EXTRA_SCREEN_NAME)
|
||||
return UserGroupsLoader(context, accountKey, userKey, screenName, adapter.getData())
|
||||
}
|
||||
|
||||
}
|
@ -91,7 +91,7 @@ import org.mariotaku.twidere.model.ParcelableMessageConversation.ConversationTyp
|
||||
import org.mariotaku.twidere.model.ParcelableMessageConversation.ExtrasType
|
||||
import org.mariotaku.twidere.model.util.AccountUtils
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Messages.Conversations
|
||||
import org.mariotaku.twidere.task.twitter.UpdateStatusTask
|
||||
import org.mariotaku.twidere.task.status.UpdateStatusTask
|
||||
import org.mariotaku.twidere.task.twitter.message.AddParticipantsTask
|
||||
import org.mariotaku.twidere.task.twitter.message.ClearMessagesTask
|
||||
import org.mariotaku.twidere.task.twitter.message.DestroyConversationTask
|
||||
@ -122,6 +122,8 @@ class MessageConversationInfoFragment : BaseFragment(), IToolBarSupportFragment,
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
linkHandlerTitle = getString(R.string.title_direct_messages_conversation_info)
|
||||
|
||||
val activity = this.activity
|
||||
|
||||
if (activity is AppCompatActivity) {
|
||||
|
@ -44,6 +44,7 @@ import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.adapter.SelectableUsersAdapter
|
||||
import org.mariotaku.twidere.constant.IntentConstants.*
|
||||
import org.mariotaku.twidere.constant.nameFirstKey
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.extension.model.isOfficial
|
||||
import org.mariotaku.twidere.extension.queryOne
|
||||
import org.mariotaku.twidere.extension.text.appendCompat
|
||||
@ -98,6 +99,7 @@ class MessageNewConversationFragment : BaseFragment(), LoaderCallbacks<List<Parc
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
linkHandlerTitle = getString(R.string.title_direct_messages_conversation_new)
|
||||
usersAdapter = SelectableUsersAdapter(context, requestManager)
|
||||
recyclerView.adapter = usersAdapter
|
||||
recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
|
||||
|
@ -64,6 +64,7 @@ import org.mariotaku.twidere.constant.IntentConstants.*
|
||||
import org.mariotaku.twidere.constant.nameFirstKey
|
||||
import org.mariotaku.twidere.constant.newDocumentApiKey
|
||||
import org.mariotaku.twidere.constant.profileImageStyleKey
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.extension.loadProfileImage
|
||||
import org.mariotaku.twidere.extension.model.*
|
||||
import org.mariotaku.twidere.fragment.AbsContentListRecyclerViewFragment
|
||||
@ -126,6 +127,7 @@ class MessagesConversationFragment : AbsContentListRecyclerViewFragment<Messages
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
linkHandlerTitle = getString(R.string.title_direct_messages)
|
||||
val account = this.account ?: run {
|
||||
activity?.finish()
|
||||
return
|
||||
|
@ -49,6 +49,7 @@ import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_TYPES
|
||||
import org.mariotaku.twidere.constant.nameFirstKey
|
||||
import org.mariotaku.twidere.constant.newDocumentApiKey
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.extension.model.getTitle
|
||||
import org.mariotaku.twidere.extension.model.user
|
||||
import org.mariotaku.twidere.fragment.AbsContentListRecyclerViewFragment
|
||||
@ -84,6 +85,7 @@ class MessagesEntriesFragment : AbsContentListRecyclerViewFragment<MessagesEntri
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.title_direct_messages)
|
||||
adapter.listener = this
|
||||
adapter.loadMoreSupportedPosition = ILoadMoreSupportAdapter.END
|
||||
loaderManager.initLoader(loaderId, null, this)
|
||||
|
@ -22,6 +22,9 @@ package org.mariotaku.twidere.fragment.search
|
||||
import android.os.Bundle
|
||||
import android.support.v4.content.Loader
|
||||
import org.mariotaku.twidere.Constants.EXTRA_QUERY
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.extension.linkHandlerSubtitle
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.ItemsListFragment
|
||||
import org.mariotaku.twidere.loader.MastodonSearchLoader
|
||||
|
||||
@ -34,6 +37,12 @@ class MastodonSearchFragment : ItemsListFragment() {
|
||||
val query: String
|
||||
get() = arguments.getString(EXTRA_QUERY)
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.title_search)
|
||||
linkHandlerSubtitle = query
|
||||
}
|
||||
|
||||
override fun onCreateLoader(id: Int, args: Bundle?): Loader<List<Any>?> {
|
||||
return MastodonSearchLoader(context, accountKey, query)
|
||||
}
|
||||
|
@ -41,6 +41,8 @@ import org.mariotaku.twidere.activity.QuickSearchBarActivity
|
||||
import org.mariotaku.twidere.activity.iface.IControlBarActivity.ControlBarOffsetListener
|
||||
import org.mariotaku.twidere.adapter.SupportTabsAdapter
|
||||
import org.mariotaku.twidere.annotation.AccountType
|
||||
import org.mariotaku.twidere.extension.linkHandlerSubtitle
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.extension.model.getAccountType
|
||||
import org.mariotaku.twidere.fragment.AbsToolbarTabPagesFragment
|
||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowInsetsCallback
|
||||
@ -85,6 +87,9 @@ class SearchFragment : AbsToolbarTabPagesFragment(), RefreshScrollTopInterface,
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
|
||||
linkHandlerTitle = getString(R.string.title_search)
|
||||
linkHandlerSubtitle = query
|
||||
|
||||
if (savedInstanceState == null && !TextUtils.isEmpty(query)) {
|
||||
val suggestions = SearchRecentSuggestions(activity,
|
||||
RecentSearchProvider.AUTHORITY, RecentSearchProvider.MODE)
|
||||
|
@ -232,6 +232,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
linkHandlerTitle = getString(R.string.title_status)
|
||||
Utils.setNdefPushMessageCallback(activity, CreateNdefMessageCallback {
|
||||
val status = status ?: return@CreateNdefMessageCallback null
|
||||
NdefMessage(arrayOf(NdefRecord.createUri(LinkCreator.getStatusWebLink(status))))
|
||||
|
@ -19,45 +19,86 @@
|
||||
|
||||
package org.mariotaku.twidere.fragment.statuses
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.support.v4.content.Loader
|
||||
import org.mariotaku.twidere.TwidereConstants.*
|
||||
import org.mariotaku.twidere.fragment.ParcelableStatusesFragment
|
||||
import org.mariotaku.twidere.loader.statuses.NetworkPublicTimelineLoader
|
||||
import org.mariotaku.twidere.model.ParcelableStatus
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
import org.mariotaku.abstask.library.TaskStarter
|
||||
import org.mariotaku.sqliteqb.library.Expression
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.annotation.FilterScope
|
||||
import org.mariotaku.twidere.annotation.ReadPositionTag
|
||||
import org.mariotaku.twidere.constant.IntentConstants
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.CursorStatusesFragment
|
||||
import org.mariotaku.twidere.model.ParameterizedExpression
|
||||
import org.mariotaku.twidere.model.RefreshTaskParam
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.tab.extra.HomeTabExtras
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||
import org.mariotaku.twidere.task.statuses.GetNetworkPublicTimelineTask
|
||||
import org.mariotaku.twidere.util.DataStoreUtils
|
||||
import org.mariotaku.twidere.util.ErrorInfoStore
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 14/12/2.
|
||||
*/
|
||||
class NetworkPublicTimelineFragment : ParcelableStatusesFragment() {
|
||||
class NetworkPublicTimelineFragment : CursorStatusesFragment() {
|
||||
|
||||
override val savedStatusesFileArgs: Array<String>?
|
||||
get() {
|
||||
val accountKey = Utils.getAccountKey(context, arguments)
|
||||
val result = ArrayList<String>()
|
||||
result.add(AUTHORITY_NETWORK_PUBLIC_TIMELINE)
|
||||
result.add("account=$accountKey")
|
||||
return result.toTypedArray()
|
||||
override val errorInfoKey = ErrorInfoStore.KEY_NETWORK_PUBLIC_TIMELINE
|
||||
|
||||
override val contentUri = Statuses.NetworkPublic.CONTENT_URI
|
||||
|
||||
override val notificationType = 0
|
||||
|
||||
override val isFilterEnabled = true
|
||||
|
||||
override val readPositionTag = ReadPositionTag.PUBLIC_TIMELINE
|
||||
|
||||
override val timelineSyncTag: String?
|
||||
get() = getTimelineSyncTag(accountKeys)
|
||||
|
||||
override val filterScopes: Int
|
||||
get() = FilterScope.PUBLIC_TIMELINE
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.title_network_public_timeline)
|
||||
}
|
||||
|
||||
override val readPositionTagWithArguments: String?
|
||||
get() {
|
||||
val tabPosition = arguments.getInt(EXTRA_TAB_POSITION, -1)
|
||||
if (tabPosition < 0) return null
|
||||
return "networkpublic_timeline"
|
||||
override fun updateRefreshState() {
|
||||
val twitter = twitterWrapper
|
||||
refreshing = twitter.isStatusTimelineRefreshing(contentUri)
|
||||
}
|
||||
|
||||
override fun getStatuses(param: RefreshTaskParam): Boolean {
|
||||
val task = GetNetworkPublicTimelineTask(context)
|
||||
task.params = param
|
||||
TaskStarter.execute(task)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun processWhere(where: Expression, whereArgs: Array<String>): ParameterizedExpression {
|
||||
val arguments = arguments
|
||||
if (arguments != null) {
|
||||
val extras = arguments.getParcelable<HomeTabExtras?>(IntentConstants.EXTRA_EXTRAS)
|
||||
if (extras != null) {
|
||||
val expressions = ArrayList<Expression>()
|
||||
val expressionArgs = ArrayList<String>()
|
||||
Collections.addAll(expressionArgs, *whereArgs)
|
||||
expressions.add(where)
|
||||
DataStoreUtils.processTabExtras(expressions, expressionArgs, extras)
|
||||
val expression = Expression.and(*expressions.toTypedArray())
|
||||
return ParameterizedExpression(expression, expressionArgs.toTypedArray())
|
||||
}
|
||||
}
|
||||
return super.processWhere(where, whereArgs)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
fun getTimelineSyncTag(accountKeys: Array<UserKey>): String {
|
||||
return "${ReadPositionTag.NETWORK_PUBLIC_TIMELINE}_${accountKeys.sorted().joinToString(",")}"
|
||||
}
|
||||
|
||||
override fun onCreateStatusesLoader(context: Context, args: Bundle,
|
||||
fromUser: Boolean): Loader<List<ParcelableStatus>?> {
|
||||
refreshing = true
|
||||
val data = adapterData
|
||||
val accountKey = Utils.getAccountKey(context, args)
|
||||
val tabPosition = args.getInt(EXTRA_TAB_POSITION, -1)
|
||||
val loadingMore = args.getBoolean(EXTRA_LOADING_MORE, false)
|
||||
return NetworkPublicTimelineLoader(context, accountKey, data, savedStatusesFileArgs,
|
||||
tabPosition, fromUser, loadingMore)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -19,45 +19,86 @@
|
||||
|
||||
package org.mariotaku.twidere.fragment.statuses
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.support.v4.content.Loader
|
||||
import org.mariotaku.twidere.TwidereConstants.*
|
||||
import org.mariotaku.twidere.fragment.ParcelableStatusesFragment
|
||||
import org.mariotaku.twidere.loader.statuses.PublicTimelineLoader
|
||||
import org.mariotaku.twidere.model.ParcelableStatus
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
import org.mariotaku.abstask.library.TaskStarter
|
||||
import org.mariotaku.sqliteqb.library.Expression
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.annotation.FilterScope
|
||||
import org.mariotaku.twidere.annotation.ReadPositionTag
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_EXTRAS
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.CursorStatusesFragment
|
||||
import org.mariotaku.twidere.model.ParameterizedExpression
|
||||
import org.mariotaku.twidere.model.RefreshTaskParam
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.tab.extra.HomeTabExtras
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||
import org.mariotaku.twidere.task.statuses.GetPublicTimelineTask
|
||||
import org.mariotaku.twidere.util.DataStoreUtils
|
||||
import org.mariotaku.twidere.util.ErrorInfoStore
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 14/12/2.
|
||||
*/
|
||||
class PublicTimelineFragment : ParcelableStatusesFragment() {
|
||||
class PublicTimelineFragment : CursorStatusesFragment() {
|
||||
|
||||
override val savedStatusesFileArgs: Array<String>?
|
||||
get() {
|
||||
val accountKey = Utils.getAccountKey(context, arguments)
|
||||
val result = ArrayList<String>()
|
||||
result.add(AUTHORITY_PUBLIC_TIMELINE)
|
||||
result.add("account=$accountKey")
|
||||
return result.toTypedArray()
|
||||
override val errorInfoKey = ErrorInfoStore.KEY_PUBLIC_TIMELINE
|
||||
|
||||
override val contentUri = Statuses.Public.CONTENT_URI
|
||||
|
||||
override val notificationType = 0
|
||||
|
||||
override val isFilterEnabled = true
|
||||
|
||||
override val readPositionTag = ReadPositionTag.PUBLIC_TIMELINE
|
||||
|
||||
override val timelineSyncTag: String?
|
||||
get() = getTimelineSyncTag(accountKeys)
|
||||
|
||||
override val filterScopes: Int
|
||||
get() = FilterScope.PUBLIC_TIMELINE
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.title_public_timeline)
|
||||
}
|
||||
|
||||
override val readPositionTagWithArguments: String?
|
||||
get() {
|
||||
val tabPosition = arguments.getInt(EXTRA_TAB_POSITION, -1)
|
||||
if (tabPosition < 0) return null
|
||||
return "public_timeline"
|
||||
override fun updateRefreshState() {
|
||||
val twitter = twitterWrapper
|
||||
refreshing = twitter.isStatusTimelineRefreshing(contentUri)
|
||||
}
|
||||
|
||||
override fun getStatuses(param: RefreshTaskParam): Boolean {
|
||||
val task = GetPublicTimelineTask(context)
|
||||
task.params = param
|
||||
TaskStarter.execute(task)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun processWhere(where: Expression, whereArgs: Array<String>): ParameterizedExpression {
|
||||
val arguments = arguments
|
||||
if (arguments != null) {
|
||||
val extras = arguments.getParcelable<HomeTabExtras?>(EXTRA_EXTRAS)
|
||||
if (extras != null) {
|
||||
val expressions = ArrayList<Expression>()
|
||||
val expressionArgs = ArrayList<String>()
|
||||
Collections.addAll(expressionArgs, *whereArgs)
|
||||
expressions.add(where)
|
||||
DataStoreUtils.processTabExtras(expressions, expressionArgs, extras)
|
||||
val expression = Expression.and(*expressions.toTypedArray())
|
||||
return ParameterizedExpression(expression, expressionArgs.toTypedArray())
|
||||
}
|
||||
}
|
||||
return super.processWhere(where, whereArgs)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
fun getTimelineSyncTag(accountKeys: Array<UserKey>): String {
|
||||
return "${ReadPositionTag.PUBLIC_TIMELINE}_${accountKeys.sorted().joinToString(",")}"
|
||||
}
|
||||
|
||||
override fun onCreateStatusesLoader(context: Context, args: Bundle,
|
||||
fromUser: Boolean): Loader<List<ParcelableStatus>?> {
|
||||
refreshing = true
|
||||
val data = adapterData
|
||||
val accountKey = Utils.getAccountKey(context, args)
|
||||
val tabPosition = args.getInt(EXTRA_TAB_POSITION, -1)
|
||||
val loadingMore = args.getBoolean(EXTRA_LOADING_MORE, false)
|
||||
return PublicTimelineLoader(context, accountKey, data, savedStatusesFileArgs, tabPosition,
|
||||
fromUser, loadingMore)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,11 @@ package org.mariotaku.twidere.fragment.statuses
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.support.v4.content.Loader
|
||||
import org.mariotaku.kpreferences.get
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.TwidereConstants.*
|
||||
import org.mariotaku.twidere.constant.iWantMyStarsBackKey
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.ParcelableStatusesFragment
|
||||
import org.mariotaku.twidere.loader.statuses.UserFavoritesLoader
|
||||
import org.mariotaku.twidere.model.ParcelableStatus
|
||||
@ -72,6 +76,15 @@ class UserFavoritesFragment : ParcelableStatusesFragment() {
|
||||
return sb.toString()
|
||||
}
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = if (preferences[iWantMyStarsBackKey]) {
|
||||
getString(R.string.title_favorites)
|
||||
} else {
|
||||
getString(R.string.title_likes)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateStatusesLoader(context: Context, args: Bundle, fromUser: Boolean):
|
||||
Loader<List<ParcelableStatus>?> {
|
||||
refreshing = true
|
||||
|
@ -22,8 +22,10 @@ package org.mariotaku.twidere.fragment.statuses
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.support.v4.content.Loader
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.TwidereConstants
|
||||
import org.mariotaku.twidere.constant.IntentConstants.*
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.ParcelableStatusesFragment
|
||||
import org.mariotaku.twidere.loader.statuses.UserListTimelineLoader
|
||||
import org.mariotaku.twidere.model.ParcelableStatus
|
||||
@ -88,6 +90,11 @@ class UserListTimelineFragment : ParcelableStatusesFragment() {
|
||||
return sb.toString()
|
||||
}
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.list_timeline)
|
||||
}
|
||||
|
||||
override fun onCreateStatusesLoader(context: Context, args: Bundle, fromUser: Boolean):
|
||||
Loader<List<ParcelableStatus>?> {
|
||||
refreshing = true
|
||||
|
@ -22,7 +22,9 @@ package org.mariotaku.twidere.fragment.statuses
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.support.v4.content.Loader
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.IntentConstants.*
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.AbsMediaStatusesFragment
|
||||
import org.mariotaku.twidere.loader.statuses.MediaTimelineLoader
|
||||
import org.mariotaku.twidere.model.ParcelableStatus
|
||||
@ -33,6 +35,11 @@ import org.mariotaku.twidere.model.UserKey
|
||||
*/
|
||||
class UserMediaTimelineFragment : AbsMediaStatusesFragment() {
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.media)
|
||||
}
|
||||
|
||||
override fun onCreateStatusesLoader(context: Context, args: Bundle, fromUser: Boolean):
|
||||
Loader<List<ParcelableStatus>?> {
|
||||
val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY)
|
||||
|
@ -22,7 +22,9 @@ package org.mariotaku.twidere.fragment.statuses
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.support.v4.content.Loader
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.TwidereConstants.*
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.loader.statuses.UserMentionsLoader
|
||||
import org.mariotaku.twidere.model.ParcelableStatus
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
@ -42,6 +44,11 @@ class UserMentionsFragment : StatusesSearchFragment() {
|
||||
return result.toTypedArray()
|
||||
}
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.user_mentions)
|
||||
}
|
||||
|
||||
override fun onCreateStatusesLoader(context: Context,
|
||||
args: Bundle,
|
||||
fromUser: Boolean): Loader<List<ParcelableStatus>?> {
|
||||
|
@ -31,6 +31,7 @@ import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.TwidereConstants.*
|
||||
import org.mariotaku.twidere.constant.userTimelineFilterKey
|
||||
import org.mariotaku.twidere.extension.applyTheme
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.extension.onShow
|
||||
import org.mariotaku.twidere.fragment.BaseDialogFragment
|
||||
import org.mariotaku.twidere.fragment.ParcelableStatusesFragment
|
||||
@ -100,6 +101,11 @@ class UserTimelineFragment : ParcelableStatusesFragment() {
|
||||
override val timelineFilter: TimelineFilter?
|
||||
get() = if (enableTimelineFilter) preferences[userTimelineFilterKey] else null
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.title_statuses)
|
||||
}
|
||||
|
||||
override fun onCreateStatusesLoader(context: Context, args: Bundle, fromUser: Boolean):
|
||||
Loader<List<ParcelableStatus>?> {
|
||||
refreshing = true
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -17,18 +17,21 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.fragment
|
||||
package org.mariotaku.twidere.fragment.userlist
|
||||
|
||||
import android.os.Bundle
|
||||
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.adapter.SupportTabsAdapter
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.AbsToolbarTabPagesFragment
|
||||
|
||||
class ListsFragment : AbsToolbarTabPagesFragment() {
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
linkHandlerTitle = getString(R.string.user_lists)
|
||||
}
|
||||
|
||||
override fun addTabs(adapter: SupportTabsAdapter) {
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -17,7 +17,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.fragment
|
||||
package org.mariotaku.twidere.fragment.userlist
|
||||
|
||||
import android.app.Activity
|
||||
import android.app.Dialog
|
||||
@ -53,8 +53,10 @@ import org.mariotaku.twidere.adapter.SupportTabsAdapter
|
||||
import org.mariotaku.twidere.app.TwidereApplication
|
||||
import org.mariotaku.twidere.constant.newDocumentApiKey
|
||||
import org.mariotaku.twidere.extension.applyTheme
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.extension.model.api.microblog.toParcelable
|
||||
import org.mariotaku.twidere.extension.onShow
|
||||
import org.mariotaku.twidere.fragment.*
|
||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowInsetsCallback
|
||||
import org.mariotaku.twidere.fragment.iface.SupportFragmentCallback
|
||||
import org.mariotaku.twidere.fragment.statuses.UserListTimelineFragment
|
||||
@ -78,30 +80,34 @@ class UserListFragment : AbsToolbarTabPagesFragment(), OnClickListener,
|
||||
var userList: ParcelableUserList? = null
|
||||
private set
|
||||
|
||||
fun displayUserList(userList: ParcelableUserList?) {
|
||||
val activity = activity ?: return
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.title_user_list)
|
||||
val activity = activity
|
||||
setHasOptionsMenu(true)
|
||||
|
||||
Utils.setNdefPushMessageCallback(activity, CreateNdefMessageCallback {
|
||||
val userList = userList ?: return@CreateNdefMessageCallback null
|
||||
NdefMessage(arrayOf(NdefRecord.createUri(LinkCreator.getTwitterUserListLink(userList.user_screen_name, userList.name))))
|
||||
})
|
||||
|
||||
getUserListInfo(false)
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
bus.register(this)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
bus.unregister(this)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
userList = null
|
||||
loaderManager.destroyLoader(0)
|
||||
this.userList = userList
|
||||
|
||||
if (userList != null) {
|
||||
activity.title = userList.name
|
||||
} else {
|
||||
activity.setTitle(R.string.title_user_list)
|
||||
}
|
||||
activity.invalidateOptionsMenu()
|
||||
}
|
||||
|
||||
fun getUserListInfo(omitIntentExtra: Boolean) {
|
||||
val lm = loaderManager
|
||||
lm.destroyLoader(0)
|
||||
val args = Bundle(arguments)
|
||||
args.putBoolean(EXTRA_OMIT_INTENT_EXTRA, omitIntentExtra)
|
||||
if (!userListLoaderInitialized) {
|
||||
lm.initLoader(0, args, this)
|
||||
userListLoaderInitialized = true
|
||||
} else {
|
||||
lm.restartLoader(0, args, this)
|
||||
}
|
||||
super.onDestroyView()
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
@ -128,19 +134,6 @@ class UserListFragment : AbsToolbarTabPagesFragment(), OnClickListener,
|
||||
super.onActivityResult(requestCode, resultCode, data)
|
||||
}
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
val activity = activity
|
||||
setHasOptionsMenu(true)
|
||||
|
||||
Utils.setNdefPushMessageCallback(activity, CreateNdefMessageCallback {
|
||||
val userList = userList ?: return@CreateNdefMessageCallback null
|
||||
NdefMessage(arrayOf(NdefRecord.createUri(LinkCreator.getTwitterUserListLink(userList.user_screen_name, userList.name))))
|
||||
})
|
||||
|
||||
getUserListInfo(false)
|
||||
}
|
||||
|
||||
override fun addTabs(adapter: SupportTabsAdapter) {
|
||||
val args = arguments
|
||||
val tabArgs = Bundle()
|
||||
@ -163,22 +156,6 @@ class UserListFragment : AbsToolbarTabPagesFragment(), OnClickListener,
|
||||
adapter.add(cls = UserListSubscribersFragment::class.java, args = tabArgs, name = getString(R.string.title_userlist_subscribers))
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
bus.register(this)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
bus.unregister(this)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
userList = null
|
||||
loaderManager.destroyLoader(0)
|
||||
super.onDestroyView()
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
||||
inflater.inflate(R.menu.menu_user_list, menu)
|
||||
}
|
||||
@ -339,6 +316,32 @@ class UserListFragment : AbsToolbarTabPagesFragment(), OnClickListener,
|
||||
}
|
||||
}
|
||||
|
||||
fun displayUserList(userList: ParcelableUserList?) {
|
||||
val activity = activity ?: return
|
||||
loaderManager.destroyLoader(0)
|
||||
this.userList = userList
|
||||
|
||||
if (userList != null) {
|
||||
linkHandlerTitle = userList.name
|
||||
} else {
|
||||
linkHandlerTitle = getString(R.string.title_user_list)
|
||||
}
|
||||
activity.invalidateOptionsMenu()
|
||||
}
|
||||
|
||||
fun getUserListInfo(omitIntentExtra: Boolean) {
|
||||
val lm = loaderManager
|
||||
lm.destroyLoader(0)
|
||||
val args = Bundle(arguments)
|
||||
args.putBoolean(EXTRA_OMIT_INTENT_EXTRA, omitIntentExtra)
|
||||
if (!userListLoaderInitialized) {
|
||||
lm.initLoader(0, args, this)
|
||||
userListLoaderInitialized = true
|
||||
} else {
|
||||
lm.restartLoader(0, args, this)
|
||||
}
|
||||
}
|
||||
|
||||
internal class ParcelableUserListLoader(
|
||||
context: Context,
|
||||
private val omitIntentExtra: Boolean,
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -17,18 +17,26 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.fragment
|
||||
package org.mariotaku.twidere.fragment.userlist
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.support.v4.content.Loader
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.IntentConstants.*
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.ParcelableUserListsFragment
|
||||
import org.mariotaku.twidere.loader.userlists.UserListMembershipsLoader
|
||||
import org.mariotaku.twidere.model.ParcelableUserList
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
|
||||
class UserListMembershipsFragment : ParcelableUserListsFragment() {
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.lists_following_user)
|
||||
}
|
||||
|
||||
override fun onCreateUserListsLoader(context: Context,
|
||||
args: Bundle, fromUser: Boolean): Loader<List<ParcelableUserList>> {
|
||||
val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY)
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -17,12 +17,13 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.fragment
|
||||
package org.mariotaku.twidere.fragment.userlist
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.support.v4.content.Loader
|
||||
import org.mariotaku.twidere.constant.IntentConstants.*
|
||||
import org.mariotaku.twidere.fragment.ParcelableUserListsFragment
|
||||
import org.mariotaku.twidere.loader.userlists.UserListSubscriptionsLoader
|
||||
import org.mariotaku.twidere.model.ParcelableUserList
|
||||
import org.mariotaku.twidere.model.UserKey
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -17,7 +17,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.fragment
|
||||
package org.mariotaku.twidere.fragment.userlist
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
@ -29,6 +29,8 @@ import com.squareup.otto.Subscribe
|
||||
import org.mariotaku.ktextension.setItemAvailability
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.IntentConstants.*
|
||||
import org.mariotaku.twidere.fragment.CreateUserListDialogFragment
|
||||
import org.mariotaku.twidere.fragment.ParcelableUserListsFragment
|
||||
import org.mariotaku.twidere.loader.userlists.UserListOwnershipsLoader
|
||||
import org.mariotaku.twidere.model.ParcelableUserList
|
||||
import org.mariotaku.twidere.model.UserKey
|
@ -23,10 +23,12 @@ import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import com.bumptech.glide.RequestManager
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.TwidereConstants.USER_TYPE_FANFOU_COM
|
||||
import org.mariotaku.twidere.adapter.ParcelableUsersAdapter
|
||||
import org.mariotaku.twidere.adapter.iface.IUsersAdapter
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.ParcelableUsersFragment
|
||||
import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader
|
||||
import org.mariotaku.twidere.loader.users.IncomingFriendshipsLoader
|
||||
@ -38,6 +40,11 @@ import org.mariotaku.twidere.view.holder.UserViewHolder
|
||||
class IncomingFriendshipsFragment : ParcelableUsersFragment(), IUsersAdapter.RequestClickListener {
|
||||
override val showFollow: Boolean = false
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.incoming_friendships)
|
||||
}
|
||||
|
||||
override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
|
||||
AbsRequestUsersLoader {
|
||||
val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY)
|
||||
|
@ -21,7 +21,9 @@ package org.mariotaku.twidere.fragment.users
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.ParcelableUsersFragment
|
||||
import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader
|
||||
import org.mariotaku.twidere.loader.users.MutesUsersLoader
|
||||
@ -30,6 +32,11 @@ import org.mariotaku.twidere.model.event.FriendshipTaskEvent
|
||||
|
||||
class MutesUsersListFragment : ParcelableUsersFragment() {
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.action_twitter_muted_users)
|
||||
}
|
||||
|
||||
override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
|
||||
AbsRequestUsersLoader {
|
||||
val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY)
|
||||
|
@ -22,16 +22,28 @@ package org.mariotaku.twidere.fragment.users
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import com.bumptech.glide.RequestManager
|
||||
import org.mariotaku.kpreferences.get
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.adapter.ParcelableUsersAdapter
|
||||
import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_STATUS_ID
|
||||
import org.mariotaku.twidere.constant.iWantMyStarsBackKey
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.ParcelableUsersFragment
|
||||
import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader
|
||||
import org.mariotaku.twidere.loader.users.StatusFavoritersLoader
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
|
||||
class StatusFavoritersListFragment : ParcelableUsersFragment() {
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = if (preferences[iWantMyStarsBackKey]) {
|
||||
getString(R.string.title_users_favorited_this)
|
||||
} else {
|
||||
getString(R.string.title_users_liked_this)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
|
||||
AbsRequestUsersLoader {
|
||||
|
@ -21,8 +21,10 @@ package org.mariotaku.twidere.fragment.users
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_STATUS_ID
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.ParcelableUsersFragment
|
||||
import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader
|
||||
import org.mariotaku.twidere.loader.users.StatusRetweetersLoader
|
||||
@ -30,6 +32,11 @@ import org.mariotaku.twidere.model.UserKey
|
||||
|
||||
class StatusRetweetersListFragment : ParcelableUsersFragment() {
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.title_users_retweeted_this)
|
||||
}
|
||||
|
||||
override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
|
||||
AbsRequestUsersLoader {
|
||||
val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY)
|
||||
|
@ -21,7 +21,9 @@ package org.mariotaku.twidere.fragment.users
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.ParcelableUsersFragment
|
||||
import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader
|
||||
import org.mariotaku.twidere.loader.users.UserBlocksLoader
|
||||
@ -30,6 +32,11 @@ import org.mariotaku.twidere.model.event.FriendshipTaskEvent
|
||||
|
||||
class UserBlocksListFragment : ParcelableUsersFragment() {
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.title_blocked_users)
|
||||
}
|
||||
|
||||
override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
|
||||
AbsRequestUsersLoader {
|
||||
val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY)
|
||||
|
@ -21,7 +21,9 @@ package org.mariotaku.twidere.fragment.users
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.IntentConstants.*
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.ParcelableUsersFragment
|
||||
import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader
|
||||
import org.mariotaku.twidere.loader.users.UserFollowersLoader
|
||||
@ -30,6 +32,11 @@ import org.mariotaku.twidere.model.event.FriendshipTaskEvent
|
||||
|
||||
class UserFollowersFragment : ParcelableUsersFragment() {
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.title_followers)
|
||||
}
|
||||
|
||||
override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
|
||||
AbsRequestUsersLoader {
|
||||
val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY)
|
||||
|
@ -21,7 +21,9 @@ package org.mariotaku.twidere.fragment.users
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.IntentConstants.*
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.ParcelableUsersFragment
|
||||
import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader
|
||||
import org.mariotaku.twidere.loader.users.UserFriendsLoader
|
||||
@ -30,6 +32,11 @@ import org.mariotaku.twidere.model.event.FriendshipTaskEvent
|
||||
|
||||
class UserFriendsFragment : ParcelableUsersFragment() {
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.title_following)
|
||||
}
|
||||
|
||||
override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
|
||||
AbsRequestUsersLoader {
|
||||
val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY)
|
||||
|
@ -31,9 +31,10 @@ import org.mariotaku.kpreferences.get
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.IntentConstants.*
|
||||
import org.mariotaku.twidere.constant.nameFirstKey
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.DeleteUserListMembersDialogFragment
|
||||
import org.mariotaku.twidere.fragment.ParcelableUsersFragment
|
||||
import org.mariotaku.twidere.fragment.UserListFragment
|
||||
import org.mariotaku.twidere.fragment.userlist.UserListFragment
|
||||
import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader
|
||||
import org.mariotaku.twidere.loader.users.UserListMembersLoader
|
||||
import org.mariotaku.twidere.model.ParcelableUserList
|
||||
@ -57,6 +58,7 @@ class UserListMembersFragment : ParcelableUsersFragment() {
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.list_members)
|
||||
registerForContextMenu(recyclerView)
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,9 @@ package org.mariotaku.twidere.fragment.users
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.IntentConstants.*
|
||||
import org.mariotaku.twidere.extension.linkHandlerTitle
|
||||
import org.mariotaku.twidere.fragment.ParcelableUsersFragment
|
||||
import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader
|
||||
import org.mariotaku.twidere.loader.users.UserListSubscribersLoader
|
||||
@ -29,6 +31,11 @@ import org.mariotaku.twidere.model.UserKey
|
||||
|
||||
class UserListSubscribersFragment : ParcelableUsersFragment() {
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
linkHandlerTitle = getString(R.string.list_subscribers)
|
||||
}
|
||||
|
||||
override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
|
||||
AbsRequestUsersLoader {
|
||||
val listId = args.getString(EXTRA_LIST_ID)
|
||||
|
@ -41,7 +41,7 @@ import org.mariotaku.twidere.model.pagination.PaginatedList
|
||||
import org.mariotaku.twidere.model.pagination.Pagination
|
||||
import org.mariotaku.twidere.model.pagination.SinceMaxPagination
|
||||
import org.mariotaku.twidere.model.util.AccountUtils
|
||||
import org.mariotaku.twidere.task.twitter.GetStatusesTask
|
||||
import org.mariotaku.twidere.task.statuses.GetStatusesTask
|
||||
import org.mariotaku.twidere.util.DebugLog
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
import org.mariotaku.twidere.util.cache.JsonCache
|
||||
|
@ -6,7 +6,7 @@ import org.mariotaku.twidere.extension.model.draftActionTypeString
|
||||
import org.mariotaku.twidere.extension.model.parcelableMediaTypeString
|
||||
import org.mariotaku.twidere.model.Draft
|
||||
import org.mariotaku.twidere.model.ParcelableMedia
|
||||
import org.mariotaku.twidere.task.twitter.UpdateStatusTask
|
||||
import org.mariotaku.twidere.task.status.UpdateStatusTask
|
||||
import org.mariotaku.twidere.util.Analyzer
|
||||
import java.io.IOException
|
||||
|
||||
|
@ -64,7 +64,7 @@ import org.mariotaku.twidere.model.util.ParcelableStatusUpdateUtils
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Drafts
|
||||
import org.mariotaku.twidere.task.CreateFavoriteTask
|
||||
import org.mariotaku.twidere.task.RetweetStatusTask
|
||||
import org.mariotaku.twidere.task.twitter.UpdateStatusTask
|
||||
import org.mariotaku.twidere.task.status.UpdateStatusTask
|
||||
import org.mariotaku.twidere.task.twitter.message.SendMessageTask
|
||||
import org.mariotaku.twidere.util.deleteDrafts
|
||||
import java.io.IOException
|
||||
|
@ -287,10 +287,9 @@ class StreamingService : BaseService() {
|
||||
} else {
|
||||
parcelableStatus.position_key = parcelableStatus.timestamp
|
||||
}
|
||||
parcelableStatus.inserted_date = currentTimeMillis
|
||||
|
||||
lastStatusTimestamps[0] = parcelableStatus.position_key
|
||||
lastStatusTimestamps[1] = parcelableStatus.inserted_date
|
||||
lastStatusTimestamps[1] = currentTimeMillis
|
||||
|
||||
val values = ObjectCursor.valuesCreatorFrom(ParcelableStatus::class.java)
|
||||
.create(parcelableStatus)
|
||||
|
@ -32,7 +32,7 @@ import org.mariotaku.twidere.model.Draft
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.util.AccountUtils
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Drafts
|
||||
import org.mariotaku.twidere.task.twitter.UpdateStatusTask
|
||||
import org.mariotaku.twidere.task.status.UpdateStatusTask
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 2017/4/20.
|
||||
|
@ -22,7 +22,7 @@ import org.mariotaku.twidere.model.draft.StatusObjectActionExtras
|
||||
import org.mariotaku.twidere.model.event.FavoriteTaskEvent
|
||||
import org.mariotaku.twidere.model.event.StatusListChangedEvent
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||
import org.mariotaku.twidere.task.twitter.UpdateStatusTask
|
||||
import org.mariotaku.twidere.task.status.UpdateStatusTask
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper.Companion.calculateHashCode
|
||||
import org.mariotaku.twidere.util.DataStoreUtils
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
|
@ -22,7 +22,7 @@ import org.mariotaku.twidere.model.draft.StatusObjectActionExtras
|
||||
import org.mariotaku.twidere.model.event.StatusListChangedEvent
|
||||
import org.mariotaku.twidere.model.event.StatusRetweetedEvent
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||
import org.mariotaku.twidere.task.twitter.UpdateStatusTask
|
||||
import org.mariotaku.twidere.task.status.UpdateStatusTask
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper
|
||||
import org.mariotaku.twidere.util.DataStoreUtils
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
|
@ -14,7 +14,7 @@ import org.mariotaku.twidere.model.ParcelableMedia
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.event.ProfileUpdatedEvent
|
||||
import org.mariotaku.twidere.task.twitter.UpdateStatusTask
|
||||
import org.mariotaku.twidere.task.status.UpdateStatusTask
|
||||
import org.mariotaku.twidere.util.DebugLog
|
||||
import java.io.IOException
|
||||
|
||||
|
@ -17,7 +17,7 @@ import org.mariotaku.twidere.model.ParcelableMedia
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.event.ProfileUpdatedEvent
|
||||
import org.mariotaku.twidere.task.twitter.UpdateStatusTask
|
||||
import org.mariotaku.twidere.task.status.UpdateStatusTask
|
||||
import org.mariotaku.twidere.util.DebugLog
|
||||
import java.io.IOException
|
||||
|
||||
|
@ -17,7 +17,7 @@ import org.mariotaku.twidere.model.ParcelableMedia
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.event.ProfileUpdatedEvent
|
||||
import org.mariotaku.twidere.task.twitter.UpdateStatusTask
|
||||
import org.mariotaku.twidere.task.status.UpdateStatusTask
|
||||
import org.mariotaku.twidere.util.DebugLog
|
||||
import java.io.IOException
|
||||
|
||||
|
@ -1,4 +1,23 @@
|
||||
package org.mariotaku.twidere.task.twitter
|
||||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.task.status
|
||||
|
||||
import android.content.ContentResolver
|
||||
import android.content.ContentValues
|
||||
@ -69,7 +88,7 @@ import java.util.concurrent.TimeUnit
|
||||
*/
|
||||
class UpdateStatusTask(
|
||||
context: Context,
|
||||
internal val stateCallback: UpdateStatusTask.StateCallback
|
||||
internal val stateCallback: StateCallback
|
||||
) : BaseAbstractTask<Pair<ParcelableStatusUpdate, ScheduleInfo?>, UpdateStatusTask.UpdateStatusResult, Any?>(context) {
|
||||
|
||||
override fun doLongOperation(params: Pair<ParcelableStatusUpdate, ScheduleInfo?>): UpdateStatusResult {
|
@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.task.statuses
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.mastodon.Mastodon
|
||||
import org.mariotaku.microblog.library.twitter.model.Paging
|
||||
import org.mariotaku.microblog.library.twitter.model.Status
|
||||
import org.mariotaku.twidere.alias.MastodonStatus
|
||||
import org.mariotaku.twidere.annotation.FilterScope
|
||||
import org.mariotaku.twidere.annotation.ReadPositionTag
|
||||
import org.mariotaku.twidere.fragment.HomeTimelineFragment
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||
import org.mariotaku.twidere.util.ErrorInfoStore
|
||||
import org.mariotaku.twidere.util.sync.TimelineSyncManager
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/2/11.
|
||||
*/
|
||||
class GetHomeTimelineTask(context: Context) : GetStatusesTask(context) {
|
||||
|
||||
override val contentUri: Uri = Statuses.CONTENT_URI
|
||||
|
||||
override val filterScopes: Int = FilterScope.HOME
|
||||
|
||||
override val errorInfoKey: String = ErrorInfoStore.KEY_HOME_TIMELINE
|
||||
|
||||
override fun getTwitterStatuses(account: AccountDetails, twitter: MicroBlog, paging: Paging): List<Status> {
|
||||
return twitter.getHomeTimeline(paging)
|
||||
}
|
||||
|
||||
override fun getStatusNetStatuses(account: AccountDetails, statusNet: MicroBlog, paging: Paging): List<Status> {
|
||||
return statusNet.getHomeTimeline(paging)
|
||||
}
|
||||
|
||||
override fun getFanfouStatuses(account: AccountDetails, fanfou: MicroBlog, paging: Paging): List<Status> {
|
||||
return fanfou.getHomeTimeline(paging)
|
||||
}
|
||||
|
||||
override fun getMastodonStatuses(account: AccountDetails, mastodon: Mastodon, paging: Paging): List<MastodonStatus> {
|
||||
return mastodon.getHomeTimeline(paging)
|
||||
}
|
||||
|
||||
override fun syncFetchReadPosition(manager: TimelineSyncManager, accountKeys: Array<UserKey>) {
|
||||
val tag = HomeTimelineFragment.getTimelineSyncTag(accountKeys)
|
||||
manager.fetchSingle(ReadPositionTag.HOME_TIMELINE, tag)
|
||||
}
|
||||
}
|
@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.task.statuses
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.microblog.library.mastodon.Mastodon
|
||||
import org.mariotaku.microblog.library.twitter.model.Paging
|
||||
import org.mariotaku.microblog.library.twitter.model.Status
|
||||
import org.mariotaku.twidere.alias.MastodonStatus
|
||||
import org.mariotaku.twidere.annotation.FilterScope
|
||||
import org.mariotaku.twidere.annotation.ReadPositionTag
|
||||
import org.mariotaku.twidere.fragment.statuses.NetworkPublicTimelineFragment
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||
import org.mariotaku.twidere.util.ErrorInfoStore
|
||||
import org.mariotaku.twidere.util.sync.TimelineSyncManager
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/2/11.
|
||||
*/
|
||||
class GetNetworkPublicTimelineTask(context: Context) : GetStatusesTask(context) {
|
||||
|
||||
override val contentUri: Uri = Statuses.NetworkPublic.CONTENT_URI
|
||||
|
||||
override val filterScopes: Int = FilterScope.PUBLIC_TIMELINE
|
||||
|
||||
override val errorInfoKey: String = ErrorInfoStore.KEY_NETWORK_PUBLIC_TIMELINE
|
||||
|
||||
override fun getTwitterStatuses(account: AccountDetails, twitter: MicroBlog, paging: Paging): List<Status> {
|
||||
throw MicroBlogException("Network public timeline unsupported")
|
||||
}
|
||||
|
||||
override fun getStatusNetStatuses(account: AccountDetails, statusNet: MicroBlog, paging: Paging): List<Status> {
|
||||
return statusNet.getNetworkPublicTimeline(paging)
|
||||
}
|
||||
|
||||
override fun getFanfouStatuses(account: AccountDetails, fanfou: MicroBlog, paging: Paging): List<Status> {
|
||||
throw MicroBlogException("Network public timeline unsupported")
|
||||
}
|
||||
|
||||
override fun getMastodonStatuses(account: AccountDetails, mastodon: Mastodon, paging: Paging): List<MastodonStatus> {
|
||||
return mastodon.getPublicTimeline(paging, false)
|
||||
}
|
||||
|
||||
override fun syncFetchReadPosition(manager: TimelineSyncManager, accountKeys: Array<UserKey>) {
|
||||
val tag = NetworkPublicTimelineFragment.getTimelineSyncTag(accountKeys)
|
||||
manager.fetchSingle(ReadPositionTag.NETWORK_PUBLIC_TIMELINE, tag)
|
||||
}
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.task.statuses
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.mastodon.Mastodon
|
||||
import org.mariotaku.microblog.library.twitter.model.Paging
|
||||
import org.mariotaku.microblog.library.twitter.model.Status
|
||||
import org.mariotaku.twidere.alias.MastodonStatus
|
||||
import org.mariotaku.twidere.annotation.FilterScope
|
||||
import org.mariotaku.twidere.annotation.ReadPositionTag
|
||||
import org.mariotaku.twidere.fragment.statuses.PublicTimelineFragment
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||
import org.mariotaku.twidere.util.ErrorInfoStore
|
||||
import org.mariotaku.twidere.util.sync.TimelineSyncManager
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/2/11.
|
||||
*/
|
||||
class GetPublicTimelineTask(context: Context) : GetStatusesTask(context) {
|
||||
|
||||
override val contentUri: Uri = Statuses.Public.CONTENT_URI
|
||||
|
||||
override val filterScopes: Int = FilterScope.PUBLIC_TIMELINE
|
||||
|
||||
override val errorInfoKey: String = ErrorInfoStore.KEY_PUBLIC_TIMELINE
|
||||
|
||||
override fun getTwitterStatuses(account: AccountDetails, twitter: MicroBlog, paging: Paging): List<Status> {
|
||||
return twitter.getPublicTimeline(paging)
|
||||
}
|
||||
|
||||
override fun getStatusNetStatuses(account: AccountDetails, statusNet: MicroBlog, paging: Paging): List<Status> {
|
||||
return statusNet.getPublicTimeline(paging)
|
||||
}
|
||||
|
||||
override fun getFanfouStatuses(account: AccountDetails, fanfou: MicroBlog, paging: Paging): List<Status> {
|
||||
return fanfou.getPublicTimeline(paging)
|
||||
}
|
||||
|
||||
override fun getMastodonStatuses(account: AccountDetails, mastodon: Mastodon, paging: Paging): List<MastodonStatus> {
|
||||
return mastodon.getPublicTimeline(paging, true)
|
||||
}
|
||||
|
||||
override fun syncFetchReadPosition(manager: TimelineSyncManager, accountKeys: Array<UserKey>) {
|
||||
val tag = PublicTimelineFragment.getTimelineSyncTag(accountKeys)
|
||||
manager.fetchSingle(ReadPositionTag.PUBLIC_TIMELINE, tag)
|
||||
}
|
||||
}
|
@ -1,4 +1,23 @@
|
||||
package org.mariotaku.twidere.task.twitter
|
||||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.task.statuses
|
||||
|
||||
import android.accounts.AccountManager
|
||||
import android.content.ContentValues
|
||||
@ -6,25 +25,29 @@ import android.content.Context
|
||||
import android.net.Uri
|
||||
import org.mariotaku.abstask.library.TaskStarter
|
||||
import org.mariotaku.kpreferences.get
|
||||
import org.mariotaku.ktextension.addTo
|
||||
import org.mariotaku.ktextension.toLongOr
|
||||
import org.mariotaku.library.objectcursor.ObjectCursor
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.microblog.library.mastodon.Mastodon
|
||||
import org.mariotaku.microblog.library.twitter.model.Paging
|
||||
import org.mariotaku.microblog.library.twitter.model.Status
|
||||
import org.mariotaku.sqliteqb.library.Columns
|
||||
import org.mariotaku.sqliteqb.library.Expression
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.TwidereConstants.LOGTAG
|
||||
import org.mariotaku.twidere.TwidereConstants.QUERY_PARAM_NOTIFY_CHANGE
|
||||
import org.mariotaku.twidere.alias.MastodonStatus
|
||||
import org.mariotaku.twidere.annotation.AccountType
|
||||
import org.mariotaku.twidere.annotation.FilterScope
|
||||
import org.mariotaku.twidere.constant.loadItemLimitKey
|
||||
import org.mariotaku.twidere.exception.AccountNotFoundException
|
||||
import org.mariotaku.twidere.extension.model.*
|
||||
import org.mariotaku.twidere.extension.model.api.applyLoadLimit
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
import org.mariotaku.twidere.model.ParcelableStatus
|
||||
import org.mariotaku.twidere.model.RefreshTaskParam
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.extension.model.api.mastodon.toParcelable
|
||||
import org.mariotaku.twidere.extension.model.api.toParcelable
|
||||
import org.mariotaku.twidere.model.*
|
||||
import org.mariotaku.twidere.model.event.GetStatusesTaskEvent
|
||||
import org.mariotaku.twidere.model.task.GetTimelineResult
|
||||
import org.mariotaku.twidere.model.util.AccountUtils
|
||||
@ -48,6 +71,8 @@ abstract class GetStatusesTask(
|
||||
) : BaseAbstractTask<RefreshTaskParam, List<Pair<GetTimelineResult<ParcelableStatus>?, Exception?>>,
|
||||
(Boolean) -> Unit>(context) {
|
||||
|
||||
private val profileImageSize = context.getString(R.string.profile_image_size)
|
||||
|
||||
protected abstract val contentUri: Uri
|
||||
|
||||
@FilterScope
|
||||
@ -129,10 +154,77 @@ abstract class GetStatusesTask(
|
||||
}
|
||||
|
||||
@Throws(MicroBlogException::class)
|
||||
protected abstract fun getStatuses(account: AccountDetails, paging: Paging): GetTimelineResult<ParcelableStatus>
|
||||
protected fun getStatuses(account: AccountDetails, paging: Paging): GetTimelineResult<ParcelableStatus> {
|
||||
when (account.type) {
|
||||
AccountType.TWITTER -> {
|
||||
val twitter = account.newMicroBlogInstance(context, MicroBlog::class.java)
|
||||
val timeline = getTwitterStatuses(account, twitter, paging)
|
||||
val statuses = timeline.map {
|
||||
it.toParcelable(account, profileImageSize)
|
||||
}
|
||||
val hashtags = timeline.flatMap { status ->
|
||||
status.entities?.hashtags?.map { it.text }.orEmpty()
|
||||
}
|
||||
return GetTimelineResult(account, statuses, extractMicroBlogUsers(timeline, account), hashtags)
|
||||
}
|
||||
AccountType.STATUSNET -> {
|
||||
val statusnet = account.newMicroBlogInstance(context, MicroBlog::class.java)
|
||||
val timeline = getStatusNetStatuses(account, statusnet, paging)
|
||||
val statuses = timeline.map {
|
||||
it.toParcelable(account, profileImageSize)
|
||||
}
|
||||
val hashtags = timeline.flatMap { status ->
|
||||
status.entities?.hashtags?.map { it.text }.orEmpty()
|
||||
}
|
||||
return GetTimelineResult(account, statuses, extractMicroBlogUsers(timeline, account), hashtags)
|
||||
}
|
||||
AccountType.FANFOU -> {
|
||||
val fanfou = account.newMicroBlogInstance(context, MicroBlog::class.java)
|
||||
val timeline = getFanfouStatuses(account, fanfou, paging)
|
||||
val statuses = timeline.map {
|
||||
it.toParcelable(account, profileImageSize)
|
||||
}
|
||||
val hashtags = statuses.flatMap { status ->
|
||||
return@flatMap status.extractFanfouHashtags()
|
||||
}
|
||||
return GetTimelineResult(account, statuses, extractMicroBlogUsers(timeline, account), hashtags)
|
||||
}
|
||||
AccountType.MASTODON -> {
|
||||
val mastodon = account.newMicroBlogInstance(context, Mastodon::class.java)
|
||||
val timeline = getMastodonStatuses(account, mastodon, paging)
|
||||
return GetTimelineResult(account, timeline.map {
|
||||
it.toParcelable(account)
|
||||
}, timeline.flatMap { status ->
|
||||
val mapResult = mutableListOf(status.account.toParcelable(account))
|
||||
status.reblog?.account?.toParcelable(account)?.addTo(mapResult)
|
||||
return@flatMap mapResult
|
||||
}, timeline.flatMap { status ->
|
||||
status.tags?.map { it.name }.orEmpty()
|
||||
})
|
||||
}
|
||||
else -> throw UnsupportedOperationException()
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract fun getTwitterStatuses(account: AccountDetails, twitter: MicroBlog, paging: Paging): List<Status>
|
||||
protected abstract fun getStatusNetStatuses(account: AccountDetails, statusNet: MicroBlog, paging: Paging): List<Status>
|
||||
protected abstract fun getFanfouStatuses(account: AccountDetails, fanfou: MicroBlog, paging: Paging): List<Status>
|
||||
protected abstract fun getMastodonStatuses(account: AccountDetails, mastodon: Mastodon, paging: Paging): List<MastodonStatus>
|
||||
|
||||
protected abstract fun syncFetchReadPosition(manager: TimelineSyncManager, accountKeys: Array<UserKey>)
|
||||
|
||||
private fun extractMicroBlogUsers(timeline: List<Status>, account: AccountDetails): List<ParcelableUser> {
|
||||
return timeline.flatMap { status ->
|
||||
val mapResult = mutableListOf(status.user.toParcelable(account,
|
||||
profileImageSize = profileImageSize))
|
||||
status.retweetedStatus?.user?.toParcelable(account,
|
||||
profileImageSize = profileImageSize)?.addTo(mapResult)
|
||||
status.quotedStatus?.user?.toParcelable(account,
|
||||
profileImageSize = profileImageSize)?.addTo(mapResult)
|
||||
return@flatMap mapResult
|
||||
}
|
||||
}
|
||||
|
||||
private fun storeStatus(account: AccountDetails, statuses: List<ParcelableStatus>,
|
||||
sinceId: String?, maxId: String?, sinceSortId: Long, maxSortId: Long,
|
||||
loadItemLimit: Int, notify: Boolean): Int {
|
||||
@ -156,7 +248,6 @@ abstract class GetStatusesTask(
|
||||
statuses.forEachIndexed { i, status ->
|
||||
status.position_key = getPositionKey(status.timestamp, status.sort_id, lastSortId,
|
||||
sortDiff, i, statuses.size)
|
||||
status.inserted_date = System.currentTimeMillis()
|
||||
mediaPreloader.preloadStatus(status)
|
||||
values[i] = creator.create(status)
|
||||
if (minIdx == -1 || status < statuses[minIdx]) {
|
@ -27,6 +27,7 @@ import org.mariotaku.twidere.model.task.GetTimelineResult
|
||||
import org.mariotaku.twidere.model.util.AccountUtils
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Activities
|
||||
import org.mariotaku.twidere.task.BaseAbstractTask
|
||||
import org.mariotaku.twidere.task.statuses.GetStatusesTask
|
||||
import org.mariotaku.twidere.util.DataStoreUtils
|
||||
import org.mariotaku.twidere.util.DebugLog
|
||||
import org.mariotaku.twidere.util.ErrorInfoStore
|
||||
@ -154,7 +155,6 @@ abstract class GetActivitiesTask(
|
||||
minPositionKey = activity.position_key
|
||||
}
|
||||
|
||||
activity.inserted_date = System.currentTimeMillis()
|
||||
valuesList.add(ObjectCursor.valuesCreatorFrom(ParcelableActivity::class.java)
|
||||
.create(activity))
|
||||
}
|
||||
|
@ -1,103 +0,0 @@
|
||||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.task.twitter
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import org.mariotaku.ktextension.addTo
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.microblog.library.mastodon.Mastodon
|
||||
import org.mariotaku.microblog.library.twitter.model.Paging
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.annotation.AccountType
|
||||
import org.mariotaku.twidere.annotation.FilterScope
|
||||
import org.mariotaku.twidere.annotation.ReadPositionTag
|
||||
import org.mariotaku.twidere.extension.model.api.mastodon.toParcelable
|
||||
import org.mariotaku.twidere.extension.model.api.toParcelable
|
||||
import org.mariotaku.twidere.extension.model.extractFanfouHashtags
|
||||
import org.mariotaku.twidere.extension.model.newMicroBlogInstance
|
||||
import org.mariotaku.twidere.fragment.HomeTimelineFragment
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
import org.mariotaku.twidere.model.ParcelableStatus
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.task.GetTimelineResult
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||
import org.mariotaku.twidere.util.ErrorInfoStore
|
||||
import org.mariotaku.twidere.util.sync.TimelineSyncManager
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/2/11.
|
||||
*/
|
||||
class GetHomeTimelineTask(context: Context) : GetStatusesTask(context) {
|
||||
|
||||
override val contentUri: Uri = Statuses.CONTENT_URI
|
||||
|
||||
override val filterScopes: Int = FilterScope.HOME
|
||||
|
||||
override val errorInfoKey: String = ErrorInfoStore.KEY_HOME_TIMELINE
|
||||
|
||||
private val profileImageSize = context.getString(R.string.profile_image_size)
|
||||
|
||||
@Throws(MicroBlogException::class)
|
||||
override fun getStatuses(account: AccountDetails, paging: Paging): GetTimelineResult<ParcelableStatus> {
|
||||
when (account.type) {
|
||||
AccountType.MASTODON -> {
|
||||
val mastodon = account.newMicroBlogInstance(context, Mastodon::class.java)
|
||||
val timeline = mastodon.getHomeTimeline(paging)
|
||||
return GetTimelineResult(account, timeline.map {
|
||||
it.toParcelable(account)
|
||||
}, timeline.flatMap { status ->
|
||||
val mapResult = mutableListOf(status.account.toParcelable(account))
|
||||
status.reblog?.account?.toParcelable(account)?.addTo(mapResult)
|
||||
return@flatMap mapResult
|
||||
}, timeline.flatMap { status ->
|
||||
status.tags?.map { it.name }.orEmpty()
|
||||
})
|
||||
}
|
||||
else -> {
|
||||
val microBlog = account.newMicroBlogInstance(context, MicroBlog::class.java)
|
||||
val timeline = microBlog.getHomeTimeline(paging)
|
||||
val statuses = timeline.map {
|
||||
it.toParcelable(account, profileImageSize)
|
||||
}
|
||||
val hashtags = if (account.type == AccountType.FANFOU) statuses.flatMap { status ->
|
||||
return@flatMap status.extractFanfouHashtags()
|
||||
} else timeline.flatMap { status ->
|
||||
status.entities?.hashtags?.map { it.text }.orEmpty()
|
||||
}
|
||||
return GetTimelineResult(account, statuses, timeline.flatMap { status ->
|
||||
val mapResult = mutableListOf(status.user.toParcelable(account,
|
||||
profileImageSize = profileImageSize))
|
||||
status.retweetedStatus?.user?.toParcelable(account,
|
||||
profileImageSize = profileImageSize)?.addTo(mapResult)
|
||||
status.quotedStatus?.user?.toParcelable(account,
|
||||
profileImageSize = profileImageSize)?.addTo(mapResult)
|
||||
return@flatMap mapResult
|
||||
}, hashtags)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun syncFetchReadPosition(manager: TimelineSyncManager, accountKeys: Array<UserKey>) {
|
||||
val tag = HomeTimelineFragment.getTimelineSyncTag(accountKeys)
|
||||
manager.fetchSingle(ReadPositionTag.HOME_TIMELINE, tag)
|
||||
}
|
||||
}
|
@ -41,8 +41,7 @@ import org.mariotaku.twidere.model.event.SendMessageTaskEvent
|
||||
import org.mariotaku.twidere.model.util.ParcelableMessageUtils
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Messages.Conversations
|
||||
import org.mariotaku.twidere.task.ExceptionHandlingAbstractTask
|
||||
import org.mariotaku.twidere.task.twitter.UpdateStatusTask
|
||||
import org.mariotaku.twidere.task.twitter.message.GetMessagesTask
|
||||
import org.mariotaku.twidere.task.status.UpdateStatusTask
|
||||
import org.mariotaku.twidere.task.twitter.message.GetMessagesTask.Companion.addConversation
|
||||
import org.mariotaku.twidere.task.twitter.message.GetMessagesTask.Companion.addLocalConversations
|
||||
|
||||
|
@ -52,7 +52,7 @@ import org.mariotaku.twidere.model.util.ParcelableRelationshipUtils
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.*
|
||||
import org.mariotaku.twidere.task.*
|
||||
import org.mariotaku.twidere.task.twitter.GetActivitiesAboutMeTask
|
||||
import org.mariotaku.twidere.task.twitter.GetHomeTimelineTask
|
||||
import org.mariotaku.twidere.task.statuses.GetHomeTimelineTask
|
||||
import org.mariotaku.twidere.task.twitter.GetSavedSearchesTask
|
||||
import org.mariotaku.twidere.task.twitter.GetTrendsTask
|
||||
import org.mariotaku.twidere.task.twitter.message.GetMessagesTask
|
||||
|
@ -113,6 +113,10 @@ object DataStoreUtils {
|
||||
TABLE_ID_CACHED_HASHTAGS)
|
||||
CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, CachedRelationships.CONTENT_PATH,
|
||||
TABLE_ID_CACHED_RELATIONSHIPS)
|
||||
CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, Statuses.Public.CONTENT_PATH,
|
||||
TABLE_ID_PUBLIC_TIMELINE)
|
||||
CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, Statuses.NetworkPublic.CONTENT_PATH,
|
||||
TABLE_ID_NETWORK_PUBLIC_TIMELINE)
|
||||
CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, SavedSearches.CONTENT_PATH,
|
||||
TABLE_ID_SAVED_SEARCHES)
|
||||
CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, SearchHistory.CONTENT_PATH,
|
||||
@ -453,6 +457,8 @@ object DataStoreUtils {
|
||||
fun getTableNameById(id: Int): String? {
|
||||
when (id) {
|
||||
TABLE_ID_STATUSES -> return Statuses.TABLE_NAME
|
||||
TABLE_ID_PUBLIC_TIMELINE -> return Statuses.Public.TABLE_NAME
|
||||
TABLE_ID_NETWORK_PUBLIC_TIMELINE -> return Statuses.NetworkPublic.TABLE_NAME
|
||||
TABLE_ID_ACTIVITIES_ABOUT_ME -> return Activities.AboutMe.TABLE_NAME
|
||||
TABLE_ID_DRAFTS -> return Drafts.TABLE_NAME
|
||||
TABLE_ID_FILTERED_USERS -> return Filters.Users.TABLE_NAME
|
||||
|
@ -84,6 +84,8 @@ class ErrorInfoStore(application: Context) {
|
||||
val KEY_DIRECT_MESSAGES = "direct_messages"
|
||||
val KEY_INTERACTIONS = "interactions"
|
||||
val KEY_HOME_TIMELINE = "home_timeline"
|
||||
val KEY_PUBLIC_TIMELINE = "public_timeline"
|
||||
val KEY_NETWORK_PUBLIC_TIMELINE = "network_public_timeline"
|
||||
val KEY_ACTIVITIES_BY_FRIENDS = "activities_by_friends"
|
||||
|
||||
val CODE_NO_DM_PERMISSION = 1
|
||||
|
@ -24,7 +24,7 @@ import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||
import org.mariotaku.twidere.task.filter.RefreshFiltersSubscriptionsTask
|
||||
import org.mariotaku.twidere.task.filter.RefreshLaunchPresentationsTask
|
||||
import org.mariotaku.twidere.task.twitter.GetActivitiesAboutMeTask
|
||||
import org.mariotaku.twidere.task.twitter.GetHomeTimelineTask
|
||||
import org.mariotaku.twidere.task.statuses.GetHomeTimelineTask
|
||||
import org.mariotaku.twidere.task.twitter.message.GetMessagesTask
|
||||
|
||||
/**
|
||||
|
@ -49,8 +49,9 @@ class TwidereSQLiteOpenHelper(
|
||||
) : SQLiteOpenHelper(context, name, null, version) {
|
||||
|
||||
override fun onCreate(db: SQLiteDatabase) {
|
||||
createStatusesTables(db)
|
||||
|
||||
db.beginTransaction()
|
||||
db.execSQL(createTable(Statuses.TABLE_NAME, Statuses.COLUMNS, Statuses.TYPES, true))
|
||||
db.execSQL(createTable(Activities.AboutMe.TABLE_NAME, Activities.AboutMe.COLUMNS, Activities.AboutMe.TYPES, true))
|
||||
db.execSQL(createTable(Drafts.TABLE_NAME, Drafts.COLUMNS, Drafts.TYPES, true))
|
||||
db.setTransactionSuccessful()
|
||||
@ -102,6 +103,16 @@ class TwidereSQLiteOpenHelper(
|
||||
setupDefaultTabs(db)
|
||||
}
|
||||
|
||||
private fun createStatusesTables(db: SQLiteDatabase) {
|
||||
db.beginTransaction()
|
||||
val tableNames = arrayOf(Statuses.TABLE_NAME, Statuses.Public.TABLE_NAME)
|
||||
tableNames.forEach {
|
||||
db.execSQL(createTable(it, Statuses.COLUMNS, Statuses.TYPES, true))
|
||||
}
|
||||
db.setTransactionSuccessful()
|
||||
db.endTransaction()
|
||||
}
|
||||
|
||||
|
||||
private fun setupDefaultTabs(db: SQLiteDatabase) {
|
||||
val creator = ObjectCursor.valuesCreatorFrom(Tab::class.java)
|
||||
@ -225,8 +236,7 @@ class TwidereSQLiteOpenHelper(
|
||||
db.execSQL(SQLQueryBuilder.dropIndex(true, "messages_inbox_index").sql)
|
||||
db.execSQL(SQLQueryBuilder.dropIndex(true, "messages_outbox_index").sql)
|
||||
}
|
||||
|
||||
safeUpgrade(db, Statuses.TABLE_NAME, Statuses.COLUMNS, Statuses.TYPES, true, null)
|
||||
upgradeStatuses(db)
|
||||
safeUpgrade(db, Activities.AboutMe.TABLE_NAME, Activities.AboutMe.COLUMNS,
|
||||
Activities.AboutMe.TYPES, true, null)
|
||||
migrateDrafts(db)
|
||||
@ -263,6 +273,11 @@ class TwidereSQLiteOpenHelper(
|
||||
db.endTransaction()
|
||||
}
|
||||
|
||||
private fun upgradeStatuses(db: SQLiteDatabase) {
|
||||
safeUpgrade(db, Statuses.TABLE_NAME, Statuses.COLUMNS, Statuses.TYPES, true, null)
|
||||
safeUpgrade(db, Statuses.Public.TABLE_NAME, Statuses.COLUMNS, Statuses.TYPES, true, null)
|
||||
}
|
||||
|
||||
private fun migrateDrafts(db: SQLiteDatabase) {
|
||||
val draftsAlias = HashMap<String, String>()
|
||||
draftsAlias.put(Drafts.MEDIA, "medias")
|
||||
|
@ -24,8 +24,8 @@ import android.content.Intent
|
||||
import android.support.annotation.WorkerThread
|
||||
import org.mariotaku.twidere.model.ParcelableStatusUpdate
|
||||
import org.mariotaku.twidere.model.schedule.ScheduleInfo
|
||||
import org.mariotaku.twidere.task.twitter.UpdateStatusTask
|
||||
import org.mariotaku.twidere.task.twitter.UpdateStatusTask.PendingStatusUpdate
|
||||
import org.mariotaku.twidere.task.status.UpdateStatusTask
|
||||
import org.mariotaku.twidere.task.status.UpdateStatusTask.PendingStatusUpdate
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user