1
0
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:
Mariotaku Lee 2017-10-08 17:24:54 +08:00
parent d98c25c453
commit 9eb346a5ed
No known key found for this signature in database
GPG Key ID: 15C10F89D7C33535
80 changed files with 955 additions and 515 deletions

View File

@ -6,7 +6,7 @@ buildscript {
maven { url 'https://maven.google.com' } maven { url 'https://maven.google.com' }
} }
dependencies { 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 // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files // in the individual module build.gradle files
} }
@ -20,7 +20,7 @@ allprojects {
projectVersionName = '3.6.33' projectVersionName = '3.6.33'
globalCompileSdkVersion = 26 globalCompileSdkVersion = 26
globalBuildToolsVersion = '26.0.1' globalBuildToolsVersion = '26.0.2'
} }
repositories { repositories {
@ -79,7 +79,7 @@ subprojects {
ACRA : '4.9.2', ACRA : '4.9.2',
AbstractTask : '0.9.5', AbstractTask : '0.9.5',
Dagger : '2.11', Dagger : '2.11',
StethoBeanShellREPL : '0.1', StethoBeanShellREPL : '0.3',
] ]
} }

View File

@ -217,6 +217,8 @@ public interface TwidereConstants extends SharedPreferenceConstants, IntentConst
int TABLE_ID_CACHED_STATUSES = 62; int TABLE_ID_CACHED_STATUSES = 62;
int TABLE_ID_CACHED_HASHTAGS = 63; int TABLE_ID_CACHED_HASHTAGS = 63;
int TABLE_ID_CACHED_RELATIONSHIPS = 64; 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_PERMISSIONS = 104;
int VIRTUAL_TABLE_ID_CACHED_USERS_WITH_RELATIONSHIP = 121; int VIRTUAL_TABLE_ID_CACHED_USERS_WITH_RELATIONSHIP = 121;
int VIRTUAL_TABLE_ID_CACHED_USERS_WITH_SCORE = 122; int VIRTUAL_TABLE_ID_CACHED_USERS_WITH_SCORE = 122;

View File

@ -213,7 +213,6 @@ public class ParcelableActivity extends ParcelableStatus implements Parcelable {
", spans=" + Arrays.toString(spans) + ", spans=" + Arrays.toString(spans) +
", quoted_spans=" + Arrays.toString(quoted_spans) + ", quoted_spans=" + Arrays.toString(quoted_spans) +
", account_color=" + account_color + ", account_color=" + account_color +
", inserted_date=" + inserted_date +
", filter_flags=" + filter_flags + ", filter_flags=" + filter_flags +
", filter_users=" + Arrays.toString(filter_users) + ", filter_users=" + Arrays.toString(filter_users) +
", filter_sources=" + Arrays.toString(filter_sources) + ", filter_sources=" + Arrays.toString(filter_sources) +
@ -221,6 +220,7 @@ public class ParcelableActivity extends ParcelableStatus implements Parcelable {
", filter_names=" + Arrays.toString(filter_names) + ", filter_names=" + Arrays.toString(filter_names) +
", filter_texts='" + filter_texts + '\'' + ", filter_texts='" + filter_texts + '\'' +
", filter_descriptions='" + filter_descriptions + '\'' + ", filter_descriptions='" + filter_descriptions + '\'' +
", tab_id=" + tab_id +
", is_pinned_status=" + is_pinned_status + ", is_pinned_status=" + is_pinned_status +
", is_filtered=" + is_filtered + ", is_filtered=" + is_filtered +
'}'; '}';

View File

@ -323,9 +323,6 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
@CursorField(Statuses.ACCOUNT_COLOR) @CursorField(Statuses.ACCOUNT_COLOR)
public int account_color; public int account_color;
@CursorField(Statuses.INSERTED_DATE)
public long inserted_date;
@FilterFlags @FilterFlags
@JsonField(name = "filter_flags") @JsonField(name = "filter_flags")
@CursorField(Statuses.FILTER_FLAGS) @CursorField(Statuses.FILTER_FLAGS)
@ -355,6 +352,9 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
@CursorField(value = Statuses.FILTER_DESCRIPTIONS) @CursorField(value = Statuses.FILTER_DESCRIPTIONS)
public String filter_descriptions; public String filter_descriptions;
@CursorField(Statuses.TAB_ID)
public long tab_id;
public transient boolean is_pinned_status; public transient boolean is_pinned_status;
public transient boolean is_filtered; public transient boolean is_filtered;
@ -457,7 +457,6 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
", spans=" + Arrays.toString(spans) + ", spans=" + Arrays.toString(spans) +
", quoted_spans=" + Arrays.toString(quoted_spans) + ", quoted_spans=" + Arrays.toString(quoted_spans) +
", account_color=" + account_color + ", account_color=" + account_color +
", inserted_date=" + inserted_date +
", filter_flags=" + filter_flags + ", filter_flags=" + filter_flags +
", filter_users=" + Arrays.toString(filter_users) + ", filter_users=" + Arrays.toString(filter_users) +
", filter_sources=" + Arrays.toString(filter_sources) + ", filter_sources=" + Arrays.toString(filter_sources) +
@ -465,6 +464,7 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
", filter_names=" + Arrays.toString(filter_names) + ", filter_names=" + Arrays.toString(filter_names) +
", filter_texts='" + filter_texts + '\'' + ", filter_texts='" + filter_texts + '\'' +
", filter_descriptions='" + filter_descriptions + '\'' + ", filter_descriptions='" + filter_descriptions + '\'' +
", tab_id=" + tab_id +
", is_pinned_status=" + is_pinned_status + ", is_pinned_status=" + is_pinned_status +
", is_filtered=" + is_filtered + ", is_filtered=" + is_filtered +
'}'; '}';

View File

@ -63,11 +63,6 @@ public interface TwidereDataStore {
Uri CONTENT_URI_RAW_QUERY = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH_RAW_QUERY); 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); 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 { interface AccountSupportColumns {
String ACCOUNT_KEY = "account_id"; String ACCOUNT_KEY = "account_id";
@ -342,7 +337,7 @@ public interface TwidereDataStore {
String[] COLUMNS = {_ID, NAME, PATH}; String[] COLUMNS = {_ID, NAME, PATH};
} }
interface Messages extends BaseColumns, InsertedDateColumns, AccountSupportColumns { interface Messages extends BaseColumns, AccountSupportColumns {
String MESSAGE_ID = "message_id"; String MESSAGE_ID = "message_id";
String CONVERSATION_ID = "conversation_id"; String CONVERSATION_ID = "conversation_id";
String MESSAGE_TYPE = "message_type"; String MESSAGE_TYPE = "message_type";
@ -578,7 +573,7 @@ public interface TwidereDataStore {
String[] COLUMNS = {_ID, PACKAGE_NAME, PERMISSION}; String[] COLUMNS = {_ID, PACKAGE_NAME, PERMISSION};
} }
interface Statuses extends BaseColumns, InsertedDateColumns, AccountSupportColumns { interface Statuses extends BaseColumns, AccountSupportColumns {
String TABLE_NAME = "statuses"; String TABLE_NAME = "statuses";
String CONTENT_PATH = TABLE_NAME; String CONTENT_PATH = TABLE_NAME;
@ -738,6 +733,8 @@ public interface TwidereDataStore {
String FILTER_TEXTS = "filter_texts"; String FILTER_TEXTS = "filter_texts";
String FILTER_DESCRIPTIONS = "filter_descriptions"; String FILTER_DESCRIPTIONS = "filter_descriptions";
String TAB_ID = "tab_id";
String DEFAULT_SORT_ORDER = TIMESTAMP + " DESC, " + SORT_ID + " DESC, " + ID String DEFAULT_SORT_ORDER = TIMESTAMP + " DESC, " + SORT_ID + " DESC, " + ID
+ " DESC"; + " DESC";
@ -745,9 +742,27 @@ public interface TwidereDataStore {
String[] TYPES = ParcelableStatusTableInfo.TYPES; 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"; String ACTIVITY_ID = "activity_id";

View File

@ -12,7 +12,7 @@ import org.junit.runner.RunWith
import org.mariotaku.twidere.R import org.mariotaku.twidere.R
import org.mariotaku.twidere.TwidereConstants import org.mariotaku.twidere.TwidereConstants
import org.mariotaku.twidere.TwidereConstants.SHARED_PREFERENCES_NAME 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. * Created by mariotaku on 2016/12/7.

View File

@ -30,7 +30,7 @@ import org.mariotaku.twidere.model.UserKey;
public interface Constants extends TwidereConstants { public interface Constants extends TwidereConstants {
String DATABASES_NAME = "twidere.sqlite"; String DATABASES_NAME = "twidere.sqlite";
int DATABASES_VERSION = 188; int DATABASES_VERSION = 190;
int EXTRA_FEATURES_NOTICE_VERSION = 2; int EXTRA_FEATURES_NOTICE_VERSION = 2;

View File

@ -11,12 +11,16 @@ import java.lang.annotation.RetentionPolicy;
@StringDef({ @StringDef({
ReadPositionTag.ACTIVITIES_ABOUT_ME, ReadPositionTag.ACTIVITIES_ABOUT_ME,
ReadPositionTag.HOME_TIMELINE, ReadPositionTag.HOME_TIMELINE,
ReadPositionTag.PUBLIC_TIMELINE,
ReadPositionTag.NETWORK_PUBLIC_TIMELINE,
ReadPositionTag.DIRECT_MESSAGES, ReadPositionTag.DIRECT_MESSAGES,
ReadPositionTag.CUSTOM_TIMELINE, ReadPositionTag.CUSTOM_TIMELINE,
}) })
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
public @interface ReadPositionTag { public @interface ReadPositionTag {
String HOME_TIMELINE = "home_timeline"; 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 ACTIVITIES_ABOUT_ME = "activities_about_me";
String DIRECT_MESSAGES = "direct_messages"; String DIRECT_MESSAGES = "direct_messages";
String CUSTOM_TIMELINE = "custom_timeline"; String CUSTOM_TIMELINE = "custom_timeline";

View File

@ -92,7 +92,7 @@ import org.mariotaku.twidere.provider.TwidereDataStore.Drafts
import org.mariotaku.twidere.service.LengthyOperationsService import org.mariotaku.twidere.service.LengthyOperationsService
import org.mariotaku.twidere.task.compose.AbsAddMediaTask import org.mariotaku.twidere.task.compose.AbsAddMediaTask
import org.mariotaku.twidere.task.compose.AbsDeleteMediaTask 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.MarkForDeleteSpan
import org.mariotaku.twidere.text.style.EmojiSpan import org.mariotaku.twidere.text.style.EmojiSpan
import org.mariotaku.twidere.util.* import org.mariotaku.twidere.util.*

View File

@ -48,7 +48,10 @@ import org.mariotaku.twidere.Constants.*
import org.mariotaku.twidere.R import org.mariotaku.twidere.R
import org.mariotaku.twidere.activity.iface.IControlBarActivity import org.mariotaku.twidere.activity.iface.IControlBarActivity
import org.mariotaku.twidere.activity.iface.IControlBarActivity.ControlBarShowHideHelper 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.exception.NoAccountException
import org.mariotaku.twidere.fragment.* import org.mariotaku.twidere.fragment.*
import org.mariotaku.twidere.fragment.drafts.DraftsFragment 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.FiltersImportBlocksFragment
import org.mariotaku.twidere.fragment.filter.FiltersImportMutesFragment import org.mariotaku.twidere.fragment.filter.FiltersImportMutesFragment
import org.mariotaku.twidere.fragment.filter.FiltersSubscriptionsFragment 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
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowInsetsCallback import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowInsetsCallback
import org.mariotaku.twidere.fragment.iface.IFloatingActionButtonFragment 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.search.SearchFragment
import org.mariotaku.twidere.fragment.status.StatusFragment import org.mariotaku.twidere.fragment.status.StatusFragment
import org.mariotaku.twidere.fragment.statuses.* 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.fragment.users.*
import org.mariotaku.twidere.graphic.ActionBarColorDrawable import org.mariotaku.twidere.graphic.ActionBarColorDrawable
import org.mariotaku.twidere.graphic.EmptyDrawable import org.mariotaku.twidere.graphic.EmptyDrawable
@ -82,11 +90,15 @@ import org.mariotaku.twidere.util.theme.getCurrentThemeResource
class LinkHandlerActivity : BaseActivity(), SystemWindowInsetsCallback, IControlBarActivity, class LinkHandlerActivity : BaseActivity(), SystemWindowInsetsCallback, IControlBarActivity,
SupportFragmentCallback { SupportFragmentCallback {
var subtitle: CharSequence? = null
set(value) {
field = value
setupActionBarOption()
}
private lateinit var multiSelectHandler: MultiSelectEventHandler private lateinit var multiSelectHandler: MultiSelectEventHandler
private lateinit var controlBarShowHideHelper: ControlBarShowHideHelper private lateinit var controlBarShowHideHelper: ControlBarShowHideHelper
private var finishOnly: Boolean = false private var finishOnly: Boolean = false
private var actionBarHeight: Int = 0 private var actionBarHeight: Int = 0
private var subtitle: CharSequence? = null
private var hideOffsetNotSupported: Boolean = false private var hideOffsetNotSupported: Boolean = false
private lateinit var fragmentLifecycleCallbacks: FragmentLifecycleCallbacks private lateinit var fragmentLifecycleCallbacks: FragmentLifecycleCallbacks
@ -173,7 +185,6 @@ class LinkHandlerActivity : BaseActivity(), SystemWindowInsetsCallback, IControl
ft.replace(contentFragmentId, fragment, "content_fragment") ft.replace(contentFragmentId, fragment, "content_fragment")
ft.commit() ft.commit()
} }
setTitle(linkId, uri)
finishOnly = uri.getQueryParameter(QUERY_PARAM_FINISH_ONLY)?.toBoolean() == true finishOnly = uri.getQueryParameter(QUERY_PARAM_FINISH_ONLY)?.toBoolean() == true
val theme = overrideTheme val theme = overrideTheme
@ -299,11 +310,6 @@ class LinkHandlerActivity : BaseActivity(), SystemWindowInsetsCallback, IControl
setupActionBarOption() setupActionBarOption()
} }
fun setSubtitle(subtitle: CharSequence?) {
this.subtitle = subtitle
setupActionBarOption()
}
override fun setControlBarVisibleAnimate(visible: Boolean, listener: ControlBarShowHideHelper.ControlBarAnimationListener?) { override fun setControlBarVisibleAnimate(visible: Boolean, listener: ControlBarShowHideHelper.ControlBarAnimationListener?) {
// Currently only search page needs this pattern, so we only enable this feature for it. // Currently only search page needs this pattern, so we only enable this feature for it.
actionsButton?.let { fab -> actionsButton?.let { fab ->
@ -370,140 +376,6 @@ class LinkHandlerActivity : BaseActivity(), SystemWindowInsetsCallback, IControl
return getCurrentThemeResource(this, theme, R.style.Theme_Twidere) 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, private fun handleFragmentKeyboardShortcutRepeat(handler: KeyboardShortcutsHandler, keyCode: Int,
repeatCount: Int, event: KeyEvent, metaState: Int): Boolean { repeatCount: Int, event: KeyEvent, metaState: Int): Boolean {
val fragment = currentVisibleFragment val fragment = currentVisibleFragment

View File

@ -20,12 +20,16 @@
package org.mariotaku.twidere.extension package org.mariotaku.twidere.extension
import android.support.v4.app.Fragment import android.support.v4.app.Fragment
import org.mariotaku.twidere.activity.LinkHandlerActivity
/** var Fragment.linkHandlerTitle: CharSequence?
* Created by mariotaku on 2017/10/4. get() = (activity as? LinkHandlerActivity)?.title
*/
var Fragment.title: CharSequence?
get() = activity.title
set(value) { 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
} }

View File

@ -11,7 +11,7 @@ import org.mariotaku.twidere.model.account.StatusNetAccountExtras
import org.mariotaku.twidere.model.account.TwitterAccountExtras import org.mariotaku.twidere.model.account.TwitterAccountExtras
import org.mariotaku.twidere.model.account.cred.Credentials import org.mariotaku.twidere.model.account.cred.Credentials
import org.mariotaku.twidere.model.account.cred.OAuthCredentials 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 import org.mariotaku.twidere.util.InternalTwitterContentUtils
fun AccountDetails.isOfficial(context: Context): Boolean { fun AccountDetails.isOfficial(context: Context): Boolean {

View File

@ -32,6 +32,7 @@ import org.mariotaku.twidere.adapter.AccountDetailsAdapter
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY
import org.mariotaku.twidere.constant.newDocumentApiKey import org.mariotaku.twidere.constant.newDocumentApiKey
import org.mariotaku.twidere.extension.applyTheme 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.getAccountKey
import org.mariotaku.twidere.extension.model.setActivated import org.mariotaku.twidere.extension.model.setActivated
import org.mariotaku.twidere.extension.model.setColor import org.mariotaku.twidere.extension.model.setColor
@ -59,6 +60,7 @@ class AccountsManagerFragment : BaseFragment(), LoaderManager.LoaderCallbacks<Li
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onActivityCreated(savedInstanceState)
setHasOptionsMenu(true) setHasOptionsMenu(true)
linkHandlerTitle = getString(R.string.title_accounts)
val am = AccountManager.get(context) val am = AccountManager.get(context)
adapter = AccountDetailsAdapter(context, requestManager).apply { adapter = AccountDetailsAdapter(context, requestManager).apply {
sortEnabled = true sortEnabled = true

View File

@ -46,7 +46,7 @@ import org.mariotaku.twidere.model.event.*
import org.mariotaku.twidere.model.pagination.SinceMaxPagination import org.mariotaku.twidere.model.pagination.SinceMaxPagination
import org.mariotaku.twidere.provider.TwidereDataStore.Activities import org.mariotaku.twidere.provider.TwidereDataStore.Activities
import org.mariotaku.twidere.provider.TwidereDataStore.Filters 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
import org.mariotaku.twidere.util.DataStoreUtils.getTableNameByUri import org.mariotaku.twidere.util.DataStoreUtils.getTableNameByUri
import org.mariotaku.twidere.util.ErrorInfoStore import org.mariotaku.twidere.util.ErrorInfoStore

View File

@ -50,7 +50,7 @@ import org.mariotaku.twidere.model.event.*
import org.mariotaku.twidere.model.pagination.SinceMaxPagination import org.mariotaku.twidere.model.pagination.SinceMaxPagination
import org.mariotaku.twidere.provider.TwidereDataStore.Filters import org.mariotaku.twidere.provider.TwidereDataStore.Filters
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses 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.DataStoreUtils
import org.mariotaku.twidere.util.ErrorInfoStore import org.mariotaku.twidere.util.ErrorInfoStore
import org.mariotaku.twidere.util.Utils import org.mariotaku.twidere.util.Utils
@ -256,6 +256,8 @@ abstract class CursorStatusesFragment : AbsStatusesFragment() {
} }
private fun clearNotifications() { private fun clearNotifications() {
val notificationType = notificationType
if (notificationType <= 0) return
if (context != null && userVisibleHint) { if (context != null && userVisibleHint) {
for (accountKey in accountKeys) { for (accountKey in accountKeys) {
twitterWrapper.clearNotificationAsync(notificationType, accountKey) twitterWrapper.clearNotificationAsync(notificationType, accountKey)

View File

@ -77,7 +77,7 @@ class HomeTimelineFragment : CursorStatusesFragment() {
override fun processWhere(where: Expression, whereArgs: Array<String>): ParameterizedExpression { override fun processWhere(where: Expression, whereArgs: Array<String>): ParameterizedExpression {
val arguments = arguments val arguments = arguments
if (arguments != null) { if (arguments != null) {
val extras = arguments.getParcelable<HomeTabExtras>(EXTRA_EXTRAS) val extras = arguments.getParcelable<HomeTabExtras?>(EXTRA_EXTRAS)
if (extras != null) { if (extras != null) {
val expressions = ArrayList<Expression>() val expressions = ArrayList<Expression>()
val expressionArgs = ArrayList<String>() val expressionArgs = ArrayList<String>()

View File

@ -20,14 +20,17 @@
package org.mariotaku.twidere.fragment package org.mariotaku.twidere.fragment
import android.content.Context import android.content.Context
import android.os.Bundle
import com.bumptech.glide.RequestManager import com.bumptech.glide.RequestManager
import org.mariotaku.microblog.library.twitter.model.Activity import org.mariotaku.microblog.library.twitter.model.Activity
import org.mariotaku.sqliteqb.library.Expression import org.mariotaku.sqliteqb.library.Expression
import org.mariotaku.twidere.R
import org.mariotaku.twidere.TwidereConstants.NOTIFICATION_ID_INTERACTIONS_TIMELINE import org.mariotaku.twidere.TwidereConstants.NOTIFICATION_ID_INTERACTIONS_TIMELINE
import org.mariotaku.twidere.adapter.ParcelableActivitiesAdapter import org.mariotaku.twidere.adapter.ParcelableActivitiesAdapter
import org.mariotaku.twidere.annotation.FilterScope import org.mariotaku.twidere.annotation.FilterScope
import org.mariotaku.twidere.annotation.ReadPositionTag import org.mariotaku.twidere.annotation.ReadPositionTag
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_EXTRAS 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.ParameterizedExpression
import org.mariotaku.twidere.model.RefreshTaskParam import org.mariotaku.twidere.model.RefreshTaskParam
import org.mariotaku.twidere.model.UserKey import org.mariotaku.twidere.model.UserKey
@ -54,6 +57,11 @@ class InteractionsTimelineFragment : CursorActivitiesFragment() {
override val filterScopes: Int override val filterScopes: Int
get() = FilterScope.INTERACTIONS get() = FilterScope.INTERACTIONS
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
linkHandlerTitle = getString(R.string.interactions)
}
override fun onCreateAdapter(context: Context, requestManager: RequestManager): ParcelableActivitiesAdapter { override fun onCreateAdapter(context: Context, requestManager: RequestManager): ParcelableActivitiesAdapter {
val adapter = ParcelableActivitiesAdapter(context, requestManager) val adapter = ParcelableActivitiesAdapter(context, requestManager)
val extras: InteractionsTabExtras? = arguments.getParcelable(EXTRA_EXTRAS) val extras: InteractionsTabExtras? = arguments.getParcelable(EXTRA_EXTRAS)

View File

@ -31,8 +31,10 @@ import com.squareup.otto.Subscribe
import kotlinx.android.synthetic.main.fragment_content_listview.* import kotlinx.android.synthetic.main.fragment_content_listview.*
import org.mariotaku.microblog.library.twitter.model.ResponseList import org.mariotaku.microblog.library.twitter.model.ResponseList
import org.mariotaku.microblog.library.twitter.model.SavedSearch import org.mariotaku.microblog.library.twitter.model.SavedSearch
import org.mariotaku.twidere.R
import org.mariotaku.twidere.adapter.SavedSearchesAdapter import org.mariotaku.twidere.adapter.SavedSearchesAdapter
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY 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.loader.SavedSearchesLoader
import org.mariotaku.twidere.model.UserKey import org.mariotaku.twidere.model.UserKey
import org.mariotaku.twidere.model.event.SavedSearchDestroyedEvent import org.mariotaku.twidere.model.event.SavedSearchDestroyedEvent
@ -54,6 +56,8 @@ class SavedSearchesListFragment : AbsContentListViewFragment<SavedSearchesAdapte
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onActivityCreated(savedInstanceState)
linkHandlerTitle = getString(R.string.saved_searches)
listView.onItemClickListener = this listView.onItemClickListener = this
listView.onItemLongClickListener = this listView.onItemLongClickListener = this
loaderManager.initLoader(0, null, this) loaderManager.initLoader(0, null, this)

View File

@ -654,6 +654,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onActivityCreated(savedInstanceState)
linkHandlerTitle = getString(R.string.title_user)
val activity = activity val activity = activity
nameFirst = preferences[nameFirstKey] nameFirst = preferences[nameFirstKey]
cardBackgroundColor = ThemeUtils.getCardBackgroundColor(activity, cardBackgroundColor = ThemeUtils.getCardBackgroundColor(activity,

View File

@ -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())
}
}

View File

@ -50,6 +50,8 @@ import org.mariotaku.twidere.TwidereConstants.*
import org.mariotaku.twidere.activity.ColorPickerDialogActivity import org.mariotaku.twidere.activity.ColorPickerDialogActivity
import org.mariotaku.twidere.activity.ThemedMediaPickerActivity import org.mariotaku.twidere.activity.ThemedMediaPickerActivity
import org.mariotaku.twidere.annotation.AccountType 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.loadProfileBanner
import org.mariotaku.twidere.extension.loadProfileImage import org.mariotaku.twidere.extension.loadProfileImage
import org.mariotaku.twidere.extension.model.api.mastodon.toParcelable import org.mariotaku.twidere.extension.model.api.mastodon.toParcelable
@ -77,6 +79,44 @@ class UserProfileEditorFragment : BaseFragment(), OnSizeChangedListener,
private var userInfoLoaderInitialized: Boolean = false private var userInfoLoaderInitialized: Boolean = false
private var getUserInfoCalled: 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) { override fun onClick(view: View) {
val user = user ?: return val user = user ?: return
val account = account ?: return val account = account ?: return
@ -145,6 +185,7 @@ class UserProfileEditorFragment : BaseFragment(), OnSizeChangedListener,
inflater.inflate(R.menu.menu_profile_editor, menu) inflater.inflate(R.menu.menu_profile_editor, menu)
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {
R.id.save -> { R.id.save -> {
@ -164,44 +205,6 @@ class UserProfileEditorFragment : BaseFragment(), OnSizeChangedListener,
return super.onOptionsItemSelected(item) 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) { override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState) super.onSaveInstanceState(outState)
outState.putParcelable(EXTRA_USER, user) outState.putParcelable(EXTRA_USER, user)
@ -277,7 +280,8 @@ class UserProfileEditorFragment : BaseFragment(), OnSizeChangedListener,
editLocation.setText(user.location) editLocation.setText(user.location)
editUrl.setText(if (isEmpty(user.url_expanded)) user.url else user.url_expanded) 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) requestManager.loadProfileBanner(context, user, resources.displayMetrics.widthPixels)
.into(profileBanner) .into(profileBanner)
requestManager.load(user.profile_background_url).into(profileBackground) requestManager.load(user.profile_background_url).into(profileBackground)

View File

@ -24,7 +24,7 @@ import org.mariotaku.ktextension.Bundle
import org.mariotaku.twidere.R import org.mariotaku.twidere.R
import org.mariotaku.twidere.adapter.SupportTabsAdapter import org.mariotaku.twidere.adapter.SupportTabsAdapter
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACTIONS 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.fragment.AbsToolbarTabPagesFragment
import org.mariotaku.twidere.model.Draft import org.mariotaku.twidere.model.Draft
@ -35,7 +35,7 @@ import org.mariotaku.twidere.model.Draft
class DraftsFragment : AbsToolbarTabPagesFragment() { class DraftsFragment : AbsToolbarTabPagesFragment() {
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onActivityCreated(savedInstanceState)
title = getString(R.string.title_drafts) linkHandlerTitle = getString(R.string.title_drafts)
} }
override fun addTabs(adapter: SupportTabsAdapter) { override fun addTabs(adapter: SupportTabsAdapter) {

View File

@ -22,7 +22,7 @@ package org.mariotaku.twidere.fragment.filter
import android.os.Bundle import android.os.Bundle
import org.mariotaku.twidere.R import org.mariotaku.twidere.R
import org.mariotaku.twidere.adapter.SupportTabsAdapter import org.mariotaku.twidere.adapter.SupportTabsAdapter
import org.mariotaku.twidere.extension.title import org.mariotaku.twidere.extension.linkHandlerTitle
import org.mariotaku.twidere.fragment.AbsToolbarTabPagesFragment import org.mariotaku.twidere.fragment.AbsToolbarTabPagesFragment
class FiltersFragment : AbsToolbarTabPagesFragment() { class FiltersFragment : AbsToolbarTabPagesFragment() {
@ -30,7 +30,7 @@ class FiltersFragment : AbsToolbarTabPagesFragment() {
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onActivityCreated(savedInstanceState)
setHasOptionsMenu(true) setHasOptionsMenu(true)
title = getString(R.string.title_filters) linkHandlerTitle = getString(R.string.title_filters)
} }
override fun addTabs(adapter: SupportTabsAdapter) { override fun addTabs(adapter: SupportTabsAdapter) {

View File

@ -2,8 +2,10 @@ package org.mariotaku.twidere.fragment.filter
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import org.mariotaku.twidere.R
import org.mariotaku.twidere.constant.IntentConstants import org.mariotaku.twidere.constant.IntentConstants
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_PAGINATION 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.AbsRequestUsersLoader
import org.mariotaku.twidere.loader.users.UserBlocksLoader import org.mariotaku.twidere.loader.users.UserBlocksLoader
import org.mariotaku.twidere.model.UserKey import org.mariotaku.twidere.model.UserKey
@ -13,6 +15,10 @@ import org.mariotaku.twidere.model.UserKey
*/ */
class FiltersImportBlocksFragment : BaseFiltersImportFragment() { 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): override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
AbsRequestUsersLoader { AbsRequestUsersLoader {

View File

@ -2,8 +2,10 @@ package org.mariotaku.twidere.fragment.filter
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import org.mariotaku.twidere.R
import org.mariotaku.twidere.constant.IntentConstants import org.mariotaku.twidere.constant.IntentConstants
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY 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.AbsRequestUsersLoader
import org.mariotaku.twidere.loader.users.MutesUsersLoader import org.mariotaku.twidere.loader.users.MutesUsersLoader
import org.mariotaku.twidere.model.UserKey import org.mariotaku.twidere.model.UserKey
@ -13,6 +15,11 @@ import org.mariotaku.twidere.model.UserKey
*/ */
class FiltersImportMutesFragment : BaseFiltersImportFragment() { 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): override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
AbsRequestUsersLoader { AbsRequestUsersLoader {
val accountKey = args.getParcelable<UserKey>(EXTRA_ACCOUNT_KEY) val accountKey = args.getParcelable<UserKey>(EXTRA_ACCOUNT_KEY)

View File

@ -59,6 +59,7 @@ class FiltersSubscriptionsFragment : BaseFragment(), LoaderManager.LoaderCallbac
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onActivityCreated(savedInstanceState)
setHasOptionsMenu(true) setHasOptionsMenu(true)
linkHandlerTitle = getString(R.string.title_manage_filter_subscriptions)
adapter = FilterSubscriptionsAdapter(context) adapter = FilterSubscriptionsAdapter(context)
listView.adapter = adapter listView.adapter = adapter

View File

@ -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.content.Context
import android.nfc.NdefMessage 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.Constants.*
import org.mariotaku.twidere.R import org.mariotaku.twidere.R
import org.mariotaku.twidere.adapter.SupportTabsAdapter import org.mariotaku.twidere.adapter.SupportTabsAdapter
import org.mariotaku.twidere.fragment.AbsToolbarTabPagesFragment
import org.mariotaku.twidere.fragment.statuses.GroupTimelineFragment import org.mariotaku.twidere.fragment.statuses.GroupTimelineFragment
import org.mariotaku.twidere.fragment.users.GroupMembersFragment import org.mariotaku.twidere.fragment.users.GroupMembersFragment
import org.mariotaku.twidere.model.ParcelableGroup import org.mariotaku.twidere.model.ParcelableGroup

View File

@ -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())
}
}

View File

@ -91,7 +91,7 @@ import org.mariotaku.twidere.model.ParcelableMessageConversation.ConversationTyp
import org.mariotaku.twidere.model.ParcelableMessageConversation.ExtrasType import org.mariotaku.twidere.model.ParcelableMessageConversation.ExtrasType
import org.mariotaku.twidere.model.util.AccountUtils import org.mariotaku.twidere.model.util.AccountUtils
import org.mariotaku.twidere.provider.TwidereDataStore.Messages.Conversations 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.AddParticipantsTask
import org.mariotaku.twidere.task.twitter.message.ClearMessagesTask import org.mariotaku.twidere.task.twitter.message.ClearMessagesTask
import org.mariotaku.twidere.task.twitter.message.DestroyConversationTask import org.mariotaku.twidere.task.twitter.message.DestroyConversationTask
@ -122,6 +122,8 @@ class MessageConversationInfoFragment : BaseFragment(), IToolBarSupportFragment,
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onActivityCreated(savedInstanceState)
setHasOptionsMenu(true) setHasOptionsMenu(true)
linkHandlerTitle = getString(R.string.title_direct_messages_conversation_info)
val activity = this.activity val activity = this.activity
if (activity is AppCompatActivity) { if (activity is AppCompatActivity) {

View File

@ -44,6 +44,7 @@ import org.mariotaku.twidere.R
import org.mariotaku.twidere.adapter.SelectableUsersAdapter import org.mariotaku.twidere.adapter.SelectableUsersAdapter
import org.mariotaku.twidere.constant.IntentConstants.* import org.mariotaku.twidere.constant.IntentConstants.*
import org.mariotaku.twidere.constant.nameFirstKey import org.mariotaku.twidere.constant.nameFirstKey
import org.mariotaku.twidere.extension.linkHandlerTitle
import org.mariotaku.twidere.extension.model.isOfficial import org.mariotaku.twidere.extension.model.isOfficial
import org.mariotaku.twidere.extension.queryOne import org.mariotaku.twidere.extension.queryOne
import org.mariotaku.twidere.extension.text.appendCompat import org.mariotaku.twidere.extension.text.appendCompat
@ -98,6 +99,7 @@ class MessageNewConversationFragment : BaseFragment(), LoaderCallbacks<List<Parc
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onActivityCreated(savedInstanceState)
setHasOptionsMenu(true) setHasOptionsMenu(true)
linkHandlerTitle = getString(R.string.title_direct_messages_conversation_new)
usersAdapter = SelectableUsersAdapter(context, requestManager) usersAdapter = SelectableUsersAdapter(context, requestManager)
recyclerView.adapter = usersAdapter recyclerView.adapter = usersAdapter
recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)

View File

@ -64,6 +64,7 @@ import org.mariotaku.twidere.constant.IntentConstants.*
import org.mariotaku.twidere.constant.nameFirstKey import org.mariotaku.twidere.constant.nameFirstKey
import org.mariotaku.twidere.constant.newDocumentApiKey import org.mariotaku.twidere.constant.newDocumentApiKey
import org.mariotaku.twidere.constant.profileImageStyleKey import org.mariotaku.twidere.constant.profileImageStyleKey
import org.mariotaku.twidere.extension.linkHandlerTitle
import org.mariotaku.twidere.extension.loadProfileImage import org.mariotaku.twidere.extension.loadProfileImage
import org.mariotaku.twidere.extension.model.* import org.mariotaku.twidere.extension.model.*
import org.mariotaku.twidere.fragment.AbsContentListRecyclerViewFragment import org.mariotaku.twidere.fragment.AbsContentListRecyclerViewFragment
@ -126,6 +127,7 @@ class MessagesConversationFragment : AbsContentListRecyclerViewFragment<Messages
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onActivityCreated(savedInstanceState)
setHasOptionsMenu(true) setHasOptionsMenu(true)
linkHandlerTitle = getString(R.string.title_direct_messages)
val account = this.account ?: run { val account = this.account ?: run {
activity?.finish() activity?.finish()
return return

View File

@ -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.IntentConstants.EXTRA_ACCOUNT_TYPES
import org.mariotaku.twidere.constant.nameFirstKey import org.mariotaku.twidere.constant.nameFirstKey
import org.mariotaku.twidere.constant.newDocumentApiKey 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.getTitle
import org.mariotaku.twidere.extension.model.user import org.mariotaku.twidere.extension.model.user
import org.mariotaku.twidere.fragment.AbsContentListRecyclerViewFragment import org.mariotaku.twidere.fragment.AbsContentListRecyclerViewFragment
@ -84,6 +85,7 @@ class MessagesEntriesFragment : AbsContentListRecyclerViewFragment<MessagesEntri
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onActivityCreated(savedInstanceState)
linkHandlerTitle = getString(R.string.title_direct_messages)
adapter.listener = this adapter.listener = this
adapter.loadMoreSupportedPosition = ILoadMoreSupportAdapter.END adapter.loadMoreSupportedPosition = ILoadMoreSupportAdapter.END
loaderManager.initLoader(loaderId, null, this) loaderManager.initLoader(loaderId, null, this)

View File

@ -22,6 +22,9 @@ package org.mariotaku.twidere.fragment.search
import android.os.Bundle import android.os.Bundle
import android.support.v4.content.Loader import android.support.v4.content.Loader
import org.mariotaku.twidere.Constants.EXTRA_QUERY 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.fragment.ItemsListFragment
import org.mariotaku.twidere.loader.MastodonSearchLoader import org.mariotaku.twidere.loader.MastodonSearchLoader
@ -34,6 +37,12 @@ class MastodonSearchFragment : ItemsListFragment() {
val query: String val query: String
get() = arguments.getString(EXTRA_QUERY) 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>?> { override fun onCreateLoader(id: Int, args: Bundle?): Loader<List<Any>?> {
return MastodonSearchLoader(context, accountKey, query) return MastodonSearchLoader(context, accountKey, query)
} }

View File

@ -41,6 +41,8 @@ import org.mariotaku.twidere.activity.QuickSearchBarActivity
import org.mariotaku.twidere.activity.iface.IControlBarActivity.ControlBarOffsetListener import org.mariotaku.twidere.activity.iface.IControlBarActivity.ControlBarOffsetListener
import org.mariotaku.twidere.adapter.SupportTabsAdapter import org.mariotaku.twidere.adapter.SupportTabsAdapter
import org.mariotaku.twidere.annotation.AccountType 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.extension.model.getAccountType
import org.mariotaku.twidere.fragment.AbsToolbarTabPagesFragment import org.mariotaku.twidere.fragment.AbsToolbarTabPagesFragment
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowInsetsCallback import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowInsetsCallback
@ -85,6 +87,9 @@ class SearchFragment : AbsToolbarTabPagesFragment(), RefreshScrollTopInterface,
super.onActivityCreated(savedInstanceState) super.onActivityCreated(savedInstanceState)
setHasOptionsMenu(true) setHasOptionsMenu(true)
linkHandlerTitle = getString(R.string.title_search)
linkHandlerSubtitle = query
if (savedInstanceState == null && !TextUtils.isEmpty(query)) { if (savedInstanceState == null && !TextUtils.isEmpty(query)) {
val suggestions = SearchRecentSuggestions(activity, val suggestions = SearchRecentSuggestions(activity,
RecentSearchProvider.AUTHORITY, RecentSearchProvider.MODE) RecentSearchProvider.AUTHORITY, RecentSearchProvider.MODE)

View File

@ -232,6 +232,7 @@ class StatusFragment : BaseFragment(), LoaderCallbacks<SingleResponse<Parcelable
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onActivityCreated(savedInstanceState)
setHasOptionsMenu(true) setHasOptionsMenu(true)
linkHandlerTitle = getString(R.string.title_status)
Utils.setNdefPushMessageCallback(activity, CreateNdefMessageCallback { Utils.setNdefPushMessageCallback(activity, CreateNdefMessageCallback {
val status = status ?: return@CreateNdefMessageCallback null val status = status ?: return@CreateNdefMessageCallback null
NdefMessage(arrayOf(NdefRecord.createUri(LinkCreator.getStatusWebLink(status)))) NdefMessage(arrayOf(NdefRecord.createUri(LinkCreator.getStatusWebLink(status))))

View File

@ -19,45 +19,86 @@
package org.mariotaku.twidere.fragment.statuses package org.mariotaku.twidere.fragment.statuses
import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.support.v4.content.Loader import org.mariotaku.abstask.library.TaskStarter
import org.mariotaku.twidere.TwidereConstants.* import org.mariotaku.sqliteqb.library.Expression
import org.mariotaku.twidere.fragment.ParcelableStatusesFragment import org.mariotaku.twidere.R
import org.mariotaku.twidere.loader.statuses.NetworkPublicTimelineLoader import org.mariotaku.twidere.annotation.FilterScope
import org.mariotaku.twidere.model.ParcelableStatus import org.mariotaku.twidere.annotation.ReadPositionTag
import org.mariotaku.twidere.util.Utils 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.* import java.util.*
/** /**
* Created by mariotaku on 14/12/2. * Created by mariotaku on 14/12/2.
*/ */
class NetworkPublicTimelineFragment : ParcelableStatusesFragment() { class NetworkPublicTimelineFragment : CursorStatusesFragment() {
override val savedStatusesFileArgs: Array<String>? override val errorInfoKey = ErrorInfoStore.KEY_NETWORK_PUBLIC_TIMELINE
get() {
val accountKey = Utils.getAccountKey(context, arguments) override val contentUri = Statuses.NetworkPublic.CONTENT_URI
val result = ArrayList<String>()
result.add(AUTHORITY_NETWORK_PUBLIC_TIMELINE) override val notificationType = 0
result.add("account=$accountKey")
return result.toTypedArray() 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? override fun updateRefreshState() {
get() { val twitter = twitterWrapper
val tabPosition = arguments.getInt(EXTRA_TAB_POSITION, -1) refreshing = twitter.isStatusTimelineRefreshing(contentUri)
if (tabPosition < 0) return null }
return "networkpublic_timeline"
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)
} }
} }

View File

@ -19,45 +19,86 @@
package org.mariotaku.twidere.fragment.statuses package org.mariotaku.twidere.fragment.statuses
import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.support.v4.content.Loader import org.mariotaku.abstask.library.TaskStarter
import org.mariotaku.twidere.TwidereConstants.* import org.mariotaku.sqliteqb.library.Expression
import org.mariotaku.twidere.fragment.ParcelableStatusesFragment import org.mariotaku.twidere.R
import org.mariotaku.twidere.loader.statuses.PublicTimelineLoader import org.mariotaku.twidere.annotation.FilterScope
import org.mariotaku.twidere.model.ParcelableStatus import org.mariotaku.twidere.annotation.ReadPositionTag
import org.mariotaku.twidere.util.Utils 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.* import java.util.*
/** /**
* Created by mariotaku on 14/12/2. * Created by mariotaku on 14/12/2.
*/ */
class PublicTimelineFragment : ParcelableStatusesFragment() { class PublicTimelineFragment : CursorStatusesFragment() {
override val savedStatusesFileArgs: Array<String>? override val errorInfoKey = ErrorInfoStore.KEY_PUBLIC_TIMELINE
get() {
val accountKey = Utils.getAccountKey(context, arguments) override val contentUri = Statuses.Public.CONTENT_URI
val result = ArrayList<String>()
result.add(AUTHORITY_PUBLIC_TIMELINE) override val notificationType = 0
result.add("account=$accountKey")
return result.toTypedArray() 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? override fun updateRefreshState() {
get() { val twitter = twitterWrapper
val tabPosition = arguments.getInt(EXTRA_TAB_POSITION, -1) refreshing = twitter.isStatusTimelineRefreshing(contentUri)
if (tabPosition < 0) return null }
return "public_timeline"
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)
} }
} }

View File

@ -22,7 +22,11 @@ package org.mariotaku.twidere.fragment.statuses
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.support.v4.content.Loader 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.TwidereConstants.*
import org.mariotaku.twidere.constant.iWantMyStarsBackKey
import org.mariotaku.twidere.extension.linkHandlerTitle
import org.mariotaku.twidere.fragment.ParcelableStatusesFragment import org.mariotaku.twidere.fragment.ParcelableStatusesFragment
import org.mariotaku.twidere.loader.statuses.UserFavoritesLoader import org.mariotaku.twidere.loader.statuses.UserFavoritesLoader
import org.mariotaku.twidere.model.ParcelableStatus import org.mariotaku.twidere.model.ParcelableStatus
@ -72,6 +76,15 @@ class UserFavoritesFragment : ParcelableStatusesFragment() {
return sb.toString() 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): override fun onCreateStatusesLoader(context: Context, args: Bundle, fromUser: Boolean):
Loader<List<ParcelableStatus>?> { Loader<List<ParcelableStatus>?> {
refreshing = true refreshing = true

View File

@ -22,8 +22,10 @@ package org.mariotaku.twidere.fragment.statuses
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.support.v4.content.Loader import android.support.v4.content.Loader
import org.mariotaku.twidere.R
import org.mariotaku.twidere.TwidereConstants import org.mariotaku.twidere.TwidereConstants
import org.mariotaku.twidere.constant.IntentConstants.* import org.mariotaku.twidere.constant.IntentConstants.*
import org.mariotaku.twidere.extension.linkHandlerTitle
import org.mariotaku.twidere.fragment.ParcelableStatusesFragment import org.mariotaku.twidere.fragment.ParcelableStatusesFragment
import org.mariotaku.twidere.loader.statuses.UserListTimelineLoader import org.mariotaku.twidere.loader.statuses.UserListTimelineLoader
import org.mariotaku.twidere.model.ParcelableStatus import org.mariotaku.twidere.model.ParcelableStatus
@ -88,6 +90,11 @@ class UserListTimelineFragment : ParcelableStatusesFragment() {
return sb.toString() 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): override fun onCreateStatusesLoader(context: Context, args: Bundle, fromUser: Boolean):
Loader<List<ParcelableStatus>?> { Loader<List<ParcelableStatus>?> {
refreshing = true refreshing = true

View File

@ -22,7 +22,9 @@ package org.mariotaku.twidere.fragment.statuses
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.support.v4.content.Loader import android.support.v4.content.Loader
import org.mariotaku.twidere.R
import org.mariotaku.twidere.constant.IntentConstants.* import org.mariotaku.twidere.constant.IntentConstants.*
import org.mariotaku.twidere.extension.linkHandlerTitle
import org.mariotaku.twidere.fragment.AbsMediaStatusesFragment import org.mariotaku.twidere.fragment.AbsMediaStatusesFragment
import org.mariotaku.twidere.loader.statuses.MediaTimelineLoader import org.mariotaku.twidere.loader.statuses.MediaTimelineLoader
import org.mariotaku.twidere.model.ParcelableStatus import org.mariotaku.twidere.model.ParcelableStatus
@ -33,6 +35,11 @@ import org.mariotaku.twidere.model.UserKey
*/ */
class UserMediaTimelineFragment : AbsMediaStatusesFragment() { 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): override fun onCreateStatusesLoader(context: Context, args: Bundle, fromUser: Boolean):
Loader<List<ParcelableStatus>?> { Loader<List<ParcelableStatus>?> {
val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY) val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY)

View File

@ -22,7 +22,9 @@ package org.mariotaku.twidere.fragment.statuses
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.support.v4.content.Loader import android.support.v4.content.Loader
import org.mariotaku.twidere.R
import org.mariotaku.twidere.TwidereConstants.* import org.mariotaku.twidere.TwidereConstants.*
import org.mariotaku.twidere.extension.linkHandlerTitle
import org.mariotaku.twidere.loader.statuses.UserMentionsLoader import org.mariotaku.twidere.loader.statuses.UserMentionsLoader
import org.mariotaku.twidere.model.ParcelableStatus import org.mariotaku.twidere.model.ParcelableStatus
import org.mariotaku.twidere.model.UserKey import org.mariotaku.twidere.model.UserKey
@ -42,6 +44,11 @@ class UserMentionsFragment : StatusesSearchFragment() {
return result.toTypedArray() return result.toTypedArray()
} }
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
linkHandlerTitle = getString(R.string.user_mentions)
}
override fun onCreateStatusesLoader(context: Context, override fun onCreateStatusesLoader(context: Context,
args: Bundle, args: Bundle,
fromUser: Boolean): Loader<List<ParcelableStatus>?> { fromUser: Boolean): Loader<List<ParcelableStatus>?> {

View File

@ -31,6 +31,7 @@ import org.mariotaku.twidere.R
import org.mariotaku.twidere.TwidereConstants.* import org.mariotaku.twidere.TwidereConstants.*
import org.mariotaku.twidere.constant.userTimelineFilterKey import org.mariotaku.twidere.constant.userTimelineFilterKey
import org.mariotaku.twidere.extension.applyTheme import org.mariotaku.twidere.extension.applyTheme
import org.mariotaku.twidere.extension.linkHandlerTitle
import org.mariotaku.twidere.extension.onShow import org.mariotaku.twidere.extension.onShow
import org.mariotaku.twidere.fragment.BaseDialogFragment import org.mariotaku.twidere.fragment.BaseDialogFragment
import org.mariotaku.twidere.fragment.ParcelableStatusesFragment import org.mariotaku.twidere.fragment.ParcelableStatusesFragment
@ -100,6 +101,11 @@ class UserTimelineFragment : ParcelableStatusesFragment() {
override val timelineFilter: TimelineFilter? override val timelineFilter: TimelineFilter?
get() = if (enableTimelineFilter) preferences[userTimelineFilterKey] else null 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): override fun onCreateStatusesLoader(context: Context, args: Bundle, fromUser: Boolean):
Loader<List<ParcelableStatus>?> { Loader<List<ParcelableStatus>?> {
refreshing = true refreshing = true

View File

@ -1,7 +1,7 @@
/* /*
* Twidere - Twitter client for Android * 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 * 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 * 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/>. * 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 android.os.Bundle
import org.mariotaku.twidere.R import org.mariotaku.twidere.R
import org.mariotaku.twidere.adapter.SupportTabsAdapter import org.mariotaku.twidere.adapter.SupportTabsAdapter
import org.mariotaku.twidere.extension.linkHandlerTitle
import org.mariotaku.twidere.fragment.AbsToolbarTabPagesFragment
class ListsFragment : AbsToolbarTabPagesFragment() { class ListsFragment : AbsToolbarTabPagesFragment() {
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onActivityCreated(savedInstanceState)
setHasOptionsMenu(true) setHasOptionsMenu(true)
linkHandlerTitle = getString(R.string.user_lists)
} }
override fun addTabs(adapter: SupportTabsAdapter) { override fun addTabs(adapter: SupportTabsAdapter) {

View File

@ -1,7 +1,7 @@
/* /*
* Twidere - Twitter client for Android * 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 * 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 * 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/>. * 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.Activity
import android.app.Dialog import android.app.Dialog
@ -53,8 +53,10 @@ import org.mariotaku.twidere.adapter.SupportTabsAdapter
import org.mariotaku.twidere.app.TwidereApplication import org.mariotaku.twidere.app.TwidereApplication
import org.mariotaku.twidere.constant.newDocumentApiKey import org.mariotaku.twidere.constant.newDocumentApiKey
import org.mariotaku.twidere.extension.applyTheme 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.model.api.microblog.toParcelable
import org.mariotaku.twidere.extension.onShow 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.IBaseFragment.SystemWindowInsetsCallback
import org.mariotaku.twidere.fragment.iface.SupportFragmentCallback import org.mariotaku.twidere.fragment.iface.SupportFragmentCallback
import org.mariotaku.twidere.fragment.statuses.UserListTimelineFragment import org.mariotaku.twidere.fragment.statuses.UserListTimelineFragment
@ -78,30 +80,34 @@ class UserListFragment : AbsToolbarTabPagesFragment(), OnClickListener,
var userList: ParcelableUserList? = null var userList: ParcelableUserList? = null
private set private set
fun displayUserList(userList: ParcelableUserList?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
val activity = activity ?: return 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) loaderManager.destroyLoader(0)
this.userList = userList super.onDestroyView()
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)
}
} }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
@ -128,19 +134,6 @@ class UserListFragment : AbsToolbarTabPagesFragment(), OnClickListener,
super.onActivityResult(requestCode, resultCode, data) 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) { override fun addTabs(adapter: SupportTabsAdapter) {
val args = arguments val args = arguments
val tabArgs = Bundle() 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)) 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) { override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.menu_user_list, menu) 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( internal class ParcelableUserListLoader(
context: Context, context: Context,
private val omitIntentExtra: Boolean, private val omitIntentExtra: Boolean,

View File

@ -1,7 +1,7 @@
/* /*
* Twidere - Twitter client for Android * 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 * 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 * 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/>. * 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.content.Context
import android.os.Bundle import android.os.Bundle
import android.support.v4.content.Loader import android.support.v4.content.Loader
import org.mariotaku.twidere.R
import org.mariotaku.twidere.constant.IntentConstants.* 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.loader.userlists.UserListMembershipsLoader
import org.mariotaku.twidere.model.ParcelableUserList import org.mariotaku.twidere.model.ParcelableUserList
import org.mariotaku.twidere.model.UserKey import org.mariotaku.twidere.model.UserKey
class UserListMembershipsFragment : ParcelableUserListsFragment() { class UserListMembershipsFragment : ParcelableUserListsFragment() {
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
linkHandlerTitle = getString(R.string.lists_following_user)
}
override fun onCreateUserListsLoader(context: Context, override fun onCreateUserListsLoader(context: Context,
args: Bundle, fromUser: Boolean): Loader<List<ParcelableUserList>> { args: Bundle, fromUser: Boolean): Loader<List<ParcelableUserList>> {
val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY) val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY)

View File

@ -1,7 +1,7 @@
/* /*
* Twidere - Twitter client for Android * 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 * 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 * 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/>. * 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.content.Context
import android.os.Bundle import android.os.Bundle
import android.support.v4.content.Loader import android.support.v4.content.Loader
import org.mariotaku.twidere.constant.IntentConstants.* import org.mariotaku.twidere.constant.IntentConstants.*
import org.mariotaku.twidere.fragment.ParcelableUserListsFragment
import org.mariotaku.twidere.loader.userlists.UserListSubscriptionsLoader import org.mariotaku.twidere.loader.userlists.UserListSubscriptionsLoader
import org.mariotaku.twidere.model.ParcelableUserList import org.mariotaku.twidere.model.ParcelableUserList
import org.mariotaku.twidere.model.UserKey import org.mariotaku.twidere.model.UserKey

View File

@ -1,7 +1,7 @@
/* /*
* Twidere - Twitter client for Android * 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 * 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 * 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/>. * 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.content.Context
import android.os.Bundle import android.os.Bundle
@ -29,6 +29,8 @@ import com.squareup.otto.Subscribe
import org.mariotaku.ktextension.setItemAvailability import org.mariotaku.ktextension.setItemAvailability
import org.mariotaku.twidere.R import org.mariotaku.twidere.R
import org.mariotaku.twidere.constant.IntentConstants.* 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.loader.userlists.UserListOwnershipsLoader
import org.mariotaku.twidere.model.ParcelableUserList import org.mariotaku.twidere.model.ParcelableUserList
import org.mariotaku.twidere.model.UserKey import org.mariotaku.twidere.model.UserKey

View File

@ -23,10 +23,12 @@ import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import com.bumptech.glide.RequestManager import com.bumptech.glide.RequestManager
import org.mariotaku.twidere.R
import org.mariotaku.twidere.TwidereConstants.USER_TYPE_FANFOU_COM import org.mariotaku.twidere.TwidereConstants.USER_TYPE_FANFOU_COM
import org.mariotaku.twidere.adapter.ParcelableUsersAdapter import org.mariotaku.twidere.adapter.ParcelableUsersAdapter
import org.mariotaku.twidere.adapter.iface.IUsersAdapter import org.mariotaku.twidere.adapter.iface.IUsersAdapter
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY 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.fragment.ParcelableUsersFragment
import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader
import org.mariotaku.twidere.loader.users.IncomingFriendshipsLoader import org.mariotaku.twidere.loader.users.IncomingFriendshipsLoader
@ -38,6 +40,11 @@ import org.mariotaku.twidere.view.holder.UserViewHolder
class IncomingFriendshipsFragment : ParcelableUsersFragment(), IUsersAdapter.RequestClickListener { class IncomingFriendshipsFragment : ParcelableUsersFragment(), IUsersAdapter.RequestClickListener {
override val showFollow: Boolean = false 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): override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
AbsRequestUsersLoader { AbsRequestUsersLoader {
val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY) val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY)

View File

@ -21,7 +21,9 @@ package org.mariotaku.twidere.fragment.users
import android.content.Context import android.content.Context
import android.os.Bundle 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_ACCOUNT_KEY
import org.mariotaku.twidere.extension.linkHandlerTitle
import org.mariotaku.twidere.fragment.ParcelableUsersFragment import org.mariotaku.twidere.fragment.ParcelableUsersFragment
import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader
import org.mariotaku.twidere.loader.users.MutesUsersLoader import org.mariotaku.twidere.loader.users.MutesUsersLoader
@ -30,6 +32,11 @@ import org.mariotaku.twidere.model.event.FriendshipTaskEvent
class MutesUsersListFragment : ParcelableUsersFragment() { 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): override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
AbsRequestUsersLoader { AbsRequestUsersLoader {
val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY) val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY)

View File

@ -22,16 +22,28 @@ package org.mariotaku.twidere.fragment.users
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import com.bumptech.glide.RequestManager 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.ParcelableUsersAdapter
import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_STATUS_ID 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.fragment.ParcelableUsersFragment
import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader
import org.mariotaku.twidere.loader.users.StatusFavoritersLoader import org.mariotaku.twidere.loader.users.StatusFavoritersLoader
import org.mariotaku.twidere.model.UserKey import org.mariotaku.twidere.model.UserKey
class StatusFavoritersListFragment : ParcelableUsersFragment() { 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): override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
AbsRequestUsersLoader { AbsRequestUsersLoader {

View File

@ -21,8 +21,10 @@ package org.mariotaku.twidere.fragment.users
import android.content.Context import android.content.Context
import android.os.Bundle 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_ACCOUNT_KEY
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_STATUS_ID 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.fragment.ParcelableUsersFragment
import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader
import org.mariotaku.twidere.loader.users.StatusRetweetersLoader import org.mariotaku.twidere.loader.users.StatusRetweetersLoader
@ -30,6 +32,11 @@ import org.mariotaku.twidere.model.UserKey
class StatusRetweetersListFragment : ParcelableUsersFragment() { 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): override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
AbsRequestUsersLoader { AbsRequestUsersLoader {
val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY) val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY)

View File

@ -21,7 +21,9 @@ package org.mariotaku.twidere.fragment.users
import android.content.Context import android.content.Context
import android.os.Bundle 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_ACCOUNT_KEY
import org.mariotaku.twidere.extension.linkHandlerTitle
import org.mariotaku.twidere.fragment.ParcelableUsersFragment import org.mariotaku.twidere.fragment.ParcelableUsersFragment
import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader
import org.mariotaku.twidere.loader.users.UserBlocksLoader import org.mariotaku.twidere.loader.users.UserBlocksLoader
@ -30,6 +32,11 @@ import org.mariotaku.twidere.model.event.FriendshipTaskEvent
class UserBlocksListFragment : ParcelableUsersFragment() { 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): override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
AbsRequestUsersLoader { AbsRequestUsersLoader {
val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY) val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY)

View File

@ -21,7 +21,9 @@ package org.mariotaku.twidere.fragment.users
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import org.mariotaku.twidere.R
import org.mariotaku.twidere.constant.IntentConstants.* import org.mariotaku.twidere.constant.IntentConstants.*
import org.mariotaku.twidere.extension.linkHandlerTitle
import org.mariotaku.twidere.fragment.ParcelableUsersFragment import org.mariotaku.twidere.fragment.ParcelableUsersFragment
import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader
import org.mariotaku.twidere.loader.users.UserFollowersLoader import org.mariotaku.twidere.loader.users.UserFollowersLoader
@ -30,6 +32,11 @@ import org.mariotaku.twidere.model.event.FriendshipTaskEvent
class UserFollowersFragment : ParcelableUsersFragment() { 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): override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
AbsRequestUsersLoader { AbsRequestUsersLoader {
val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY) val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY)

View File

@ -21,7 +21,9 @@ package org.mariotaku.twidere.fragment.users
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import org.mariotaku.twidere.R
import org.mariotaku.twidere.constant.IntentConstants.* import org.mariotaku.twidere.constant.IntentConstants.*
import org.mariotaku.twidere.extension.linkHandlerTitle
import org.mariotaku.twidere.fragment.ParcelableUsersFragment import org.mariotaku.twidere.fragment.ParcelableUsersFragment
import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader
import org.mariotaku.twidere.loader.users.UserFriendsLoader import org.mariotaku.twidere.loader.users.UserFriendsLoader
@ -30,6 +32,11 @@ import org.mariotaku.twidere.model.event.FriendshipTaskEvent
class UserFriendsFragment : ParcelableUsersFragment() { 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): override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
AbsRequestUsersLoader { AbsRequestUsersLoader {
val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY) val accountKey = args.getParcelable<UserKey?>(EXTRA_ACCOUNT_KEY)

View File

@ -31,9 +31,10 @@ import org.mariotaku.kpreferences.get
import org.mariotaku.twidere.R import org.mariotaku.twidere.R
import org.mariotaku.twidere.constant.IntentConstants.* import org.mariotaku.twidere.constant.IntentConstants.*
import org.mariotaku.twidere.constant.nameFirstKey import org.mariotaku.twidere.constant.nameFirstKey
import org.mariotaku.twidere.extension.linkHandlerTitle
import org.mariotaku.twidere.fragment.DeleteUserListMembersDialogFragment import org.mariotaku.twidere.fragment.DeleteUserListMembersDialogFragment
import org.mariotaku.twidere.fragment.ParcelableUsersFragment 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.AbsRequestUsersLoader
import org.mariotaku.twidere.loader.users.UserListMembersLoader import org.mariotaku.twidere.loader.users.UserListMembersLoader
import org.mariotaku.twidere.model.ParcelableUserList import org.mariotaku.twidere.model.ParcelableUserList
@ -57,6 +58,7 @@ class UserListMembersFragment : ParcelableUsersFragment() {
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState) super.onActivityCreated(savedInstanceState)
linkHandlerTitle = getString(R.string.list_members)
registerForContextMenu(recyclerView) registerForContextMenu(recyclerView)
} }

View File

@ -21,7 +21,9 @@ package org.mariotaku.twidere.fragment.users
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import org.mariotaku.twidere.R
import org.mariotaku.twidere.constant.IntentConstants.* import org.mariotaku.twidere.constant.IntentConstants.*
import org.mariotaku.twidere.extension.linkHandlerTitle
import org.mariotaku.twidere.fragment.ParcelableUsersFragment import org.mariotaku.twidere.fragment.ParcelableUsersFragment
import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader import org.mariotaku.twidere.loader.users.AbsRequestUsersLoader
import org.mariotaku.twidere.loader.users.UserListSubscribersLoader import org.mariotaku.twidere.loader.users.UserListSubscribersLoader
@ -29,6 +31,11 @@ import org.mariotaku.twidere.model.UserKey
class UserListSubscribersFragment : ParcelableUsersFragment() { 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): override fun onCreateUsersLoader(context: Context, args: Bundle, fromUser: Boolean):
AbsRequestUsersLoader { AbsRequestUsersLoader {
val listId = args.getString(EXTRA_LIST_ID) val listId = args.getString(EXTRA_LIST_ID)

View File

@ -41,7 +41,7 @@ import org.mariotaku.twidere.model.pagination.PaginatedList
import org.mariotaku.twidere.model.pagination.Pagination import org.mariotaku.twidere.model.pagination.Pagination
import org.mariotaku.twidere.model.pagination.SinceMaxPagination import org.mariotaku.twidere.model.pagination.SinceMaxPagination
import org.mariotaku.twidere.model.util.AccountUtils 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.DebugLog
import org.mariotaku.twidere.util.UserColorNameManager import org.mariotaku.twidere.util.UserColorNameManager
import org.mariotaku.twidere.util.cache.JsonCache import org.mariotaku.twidere.util.cache.JsonCache

View File

@ -6,7 +6,7 @@ import org.mariotaku.twidere.extension.model.draftActionTypeString
import org.mariotaku.twidere.extension.model.parcelableMediaTypeString import org.mariotaku.twidere.extension.model.parcelableMediaTypeString
import org.mariotaku.twidere.model.Draft import org.mariotaku.twidere.model.Draft
import org.mariotaku.twidere.model.ParcelableMedia 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 org.mariotaku.twidere.util.Analyzer
import java.io.IOException import java.io.IOException

View File

@ -64,7 +64,7 @@ import org.mariotaku.twidere.model.util.ParcelableStatusUpdateUtils
import org.mariotaku.twidere.provider.TwidereDataStore.Drafts import org.mariotaku.twidere.provider.TwidereDataStore.Drafts
import org.mariotaku.twidere.task.CreateFavoriteTask import org.mariotaku.twidere.task.CreateFavoriteTask
import org.mariotaku.twidere.task.RetweetStatusTask 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.task.twitter.message.SendMessageTask
import org.mariotaku.twidere.util.deleteDrafts import org.mariotaku.twidere.util.deleteDrafts
import java.io.IOException import java.io.IOException

View File

@ -287,10 +287,9 @@ class StreamingService : BaseService() {
} else { } else {
parcelableStatus.position_key = parcelableStatus.timestamp parcelableStatus.position_key = parcelableStatus.timestamp
} }
parcelableStatus.inserted_date = currentTimeMillis
lastStatusTimestamps[0] = parcelableStatus.position_key lastStatusTimestamps[0] = parcelableStatus.position_key
lastStatusTimestamps[1] = parcelableStatus.inserted_date lastStatusTimestamps[1] = currentTimeMillis
val values = ObjectCursor.valuesCreatorFrom(ParcelableStatus::class.java) val values = ObjectCursor.valuesCreatorFrom(ParcelableStatus::class.java)
.create(parcelableStatus) .create(parcelableStatus)

View File

@ -32,7 +32,7 @@ import org.mariotaku.twidere.model.Draft
import org.mariotaku.twidere.model.UserKey import org.mariotaku.twidere.model.UserKey
import org.mariotaku.twidere.model.util.AccountUtils import org.mariotaku.twidere.model.util.AccountUtils
import org.mariotaku.twidere.provider.TwidereDataStore.Drafts 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. * Created by mariotaku on 2017/4/20.

View File

@ -22,7 +22,7 @@ import org.mariotaku.twidere.model.draft.StatusObjectActionExtras
import org.mariotaku.twidere.model.event.FavoriteTaskEvent import org.mariotaku.twidere.model.event.FavoriteTaskEvent
import org.mariotaku.twidere.model.event.StatusListChangedEvent import org.mariotaku.twidere.model.event.StatusListChangedEvent
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses 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.AsyncTwitterWrapper.Companion.calculateHashCode
import org.mariotaku.twidere.util.DataStoreUtils import org.mariotaku.twidere.util.DataStoreUtils
import org.mariotaku.twidere.util.Utils import org.mariotaku.twidere.util.Utils

View File

@ -22,7 +22,7 @@ import org.mariotaku.twidere.model.draft.StatusObjectActionExtras
import org.mariotaku.twidere.model.event.StatusListChangedEvent import org.mariotaku.twidere.model.event.StatusListChangedEvent
import org.mariotaku.twidere.model.event.StatusRetweetedEvent import org.mariotaku.twidere.model.event.StatusRetweetedEvent
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses 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.AsyncTwitterWrapper
import org.mariotaku.twidere.util.DataStoreUtils import org.mariotaku.twidere.util.DataStoreUtils
import org.mariotaku.twidere.util.Utils import org.mariotaku.twidere.util.Utils

View File

@ -14,7 +14,7 @@ import org.mariotaku.twidere.model.ParcelableMedia
import org.mariotaku.twidere.model.ParcelableUser import org.mariotaku.twidere.model.ParcelableUser
import org.mariotaku.twidere.model.UserKey import org.mariotaku.twidere.model.UserKey
import org.mariotaku.twidere.model.event.ProfileUpdatedEvent 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 org.mariotaku.twidere.util.DebugLog
import java.io.IOException import java.io.IOException

View File

@ -17,7 +17,7 @@ import org.mariotaku.twidere.model.ParcelableMedia
import org.mariotaku.twidere.model.ParcelableUser import org.mariotaku.twidere.model.ParcelableUser
import org.mariotaku.twidere.model.UserKey import org.mariotaku.twidere.model.UserKey
import org.mariotaku.twidere.model.event.ProfileUpdatedEvent 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 org.mariotaku.twidere.util.DebugLog
import java.io.IOException import java.io.IOException

View File

@ -17,7 +17,7 @@ import org.mariotaku.twidere.model.ParcelableMedia
import org.mariotaku.twidere.model.ParcelableUser import org.mariotaku.twidere.model.ParcelableUser
import org.mariotaku.twidere.model.UserKey import org.mariotaku.twidere.model.UserKey
import org.mariotaku.twidere.model.event.ProfileUpdatedEvent 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 org.mariotaku.twidere.util.DebugLog
import java.io.IOException import java.io.IOException

View File

@ -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.ContentResolver
import android.content.ContentValues import android.content.ContentValues
@ -69,7 +88,7 @@ import java.util.concurrent.TimeUnit
*/ */
class UpdateStatusTask( class UpdateStatusTask(
context: Context, context: Context,
internal val stateCallback: UpdateStatusTask.StateCallback internal val stateCallback: StateCallback
) : BaseAbstractTask<Pair<ParcelableStatusUpdate, ScheduleInfo?>, UpdateStatusTask.UpdateStatusResult, Any?>(context) { ) : BaseAbstractTask<Pair<ParcelableStatusUpdate, ScheduleInfo?>, UpdateStatusTask.UpdateStatusResult, Any?>(context) {
override fun doLongOperation(params: Pair<ParcelableStatusUpdate, ScheduleInfo?>): UpdateStatusResult { override fun doLongOperation(params: Pair<ParcelableStatusUpdate, ScheduleInfo?>): UpdateStatusResult {

View File

@ -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)
}
}

View File

@ -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)
}
}

View File

@ -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)
}
}

View File

@ -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.accounts.AccountManager
import android.content.ContentValues import android.content.ContentValues
@ -6,25 +25,29 @@ import android.content.Context
import android.net.Uri import android.net.Uri
import org.mariotaku.abstask.library.TaskStarter import org.mariotaku.abstask.library.TaskStarter
import org.mariotaku.kpreferences.get import org.mariotaku.kpreferences.get
import org.mariotaku.ktextension.addTo
import org.mariotaku.ktextension.toLongOr import org.mariotaku.ktextension.toLongOr
import org.mariotaku.library.objectcursor.ObjectCursor import org.mariotaku.library.objectcursor.ObjectCursor
import org.mariotaku.microblog.library.MicroBlog
import org.mariotaku.microblog.library.MicroBlogException 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.Paging
import org.mariotaku.microblog.library.twitter.model.Status
import org.mariotaku.sqliteqb.library.Columns import org.mariotaku.sqliteqb.library.Columns
import org.mariotaku.sqliteqb.library.Expression import org.mariotaku.sqliteqb.library.Expression
import org.mariotaku.twidere.R import org.mariotaku.twidere.R
import org.mariotaku.twidere.TwidereConstants.LOGTAG import org.mariotaku.twidere.TwidereConstants.LOGTAG
import org.mariotaku.twidere.TwidereConstants.QUERY_PARAM_NOTIFY_CHANGE 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.AccountType
import org.mariotaku.twidere.annotation.FilterScope import org.mariotaku.twidere.annotation.FilterScope
import org.mariotaku.twidere.constant.loadItemLimitKey import org.mariotaku.twidere.constant.loadItemLimitKey
import org.mariotaku.twidere.exception.AccountNotFoundException import org.mariotaku.twidere.exception.AccountNotFoundException
import org.mariotaku.twidere.extension.model.* import org.mariotaku.twidere.extension.model.*
import org.mariotaku.twidere.extension.model.api.applyLoadLimit import org.mariotaku.twidere.extension.model.api.applyLoadLimit
import org.mariotaku.twidere.model.AccountDetails import org.mariotaku.twidere.extension.model.api.mastodon.toParcelable
import org.mariotaku.twidere.model.ParcelableStatus import org.mariotaku.twidere.extension.model.api.toParcelable
import org.mariotaku.twidere.model.RefreshTaskParam import org.mariotaku.twidere.model.*
import org.mariotaku.twidere.model.UserKey
import org.mariotaku.twidere.model.event.GetStatusesTaskEvent import org.mariotaku.twidere.model.event.GetStatusesTaskEvent
import org.mariotaku.twidere.model.task.GetTimelineResult import org.mariotaku.twidere.model.task.GetTimelineResult
import org.mariotaku.twidere.model.util.AccountUtils import org.mariotaku.twidere.model.util.AccountUtils
@ -48,6 +71,8 @@ abstract class GetStatusesTask(
) : BaseAbstractTask<RefreshTaskParam, List<Pair<GetTimelineResult<ParcelableStatus>?, Exception?>>, ) : BaseAbstractTask<RefreshTaskParam, List<Pair<GetTimelineResult<ParcelableStatus>?, Exception?>>,
(Boolean) -> Unit>(context) { (Boolean) -> Unit>(context) {
private val profileImageSize = context.getString(R.string.profile_image_size)
protected abstract val contentUri: Uri protected abstract val contentUri: Uri
@FilterScope @FilterScope
@ -129,10 +154,77 @@ abstract class GetStatusesTask(
} }
@Throws(MicroBlogException::class) @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>) 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>, private fun storeStatus(account: AccountDetails, statuses: List<ParcelableStatus>,
sinceId: String?, maxId: String?, sinceSortId: Long, maxSortId: Long, sinceId: String?, maxId: String?, sinceSortId: Long, maxSortId: Long,
loadItemLimit: Int, notify: Boolean): Int { loadItemLimit: Int, notify: Boolean): Int {
@ -156,7 +248,6 @@ abstract class GetStatusesTask(
statuses.forEachIndexed { i, status -> statuses.forEachIndexed { i, status ->
status.position_key = getPositionKey(status.timestamp, status.sort_id, lastSortId, status.position_key = getPositionKey(status.timestamp, status.sort_id, lastSortId,
sortDiff, i, statuses.size) sortDiff, i, statuses.size)
status.inserted_date = System.currentTimeMillis()
mediaPreloader.preloadStatus(status) mediaPreloader.preloadStatus(status)
values[i] = creator.create(status) values[i] = creator.create(status)
if (minIdx == -1 || status < statuses[minIdx]) { if (minIdx == -1 || status < statuses[minIdx]) {

View File

@ -27,6 +27,7 @@ import org.mariotaku.twidere.model.task.GetTimelineResult
import org.mariotaku.twidere.model.util.AccountUtils import org.mariotaku.twidere.model.util.AccountUtils
import org.mariotaku.twidere.provider.TwidereDataStore.Activities import org.mariotaku.twidere.provider.TwidereDataStore.Activities
import org.mariotaku.twidere.task.BaseAbstractTask import org.mariotaku.twidere.task.BaseAbstractTask
import org.mariotaku.twidere.task.statuses.GetStatusesTask
import org.mariotaku.twidere.util.DataStoreUtils import org.mariotaku.twidere.util.DataStoreUtils
import org.mariotaku.twidere.util.DebugLog import org.mariotaku.twidere.util.DebugLog
import org.mariotaku.twidere.util.ErrorInfoStore import org.mariotaku.twidere.util.ErrorInfoStore
@ -154,7 +155,6 @@ abstract class GetActivitiesTask(
minPositionKey = activity.position_key minPositionKey = activity.position_key
} }
activity.inserted_date = System.currentTimeMillis()
valuesList.add(ObjectCursor.valuesCreatorFrom(ParcelableActivity::class.java) valuesList.add(ObjectCursor.valuesCreatorFrom(ParcelableActivity::class.java)
.create(activity)) .create(activity))
} }

View File

@ -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)
}
}

View File

@ -41,8 +41,7 @@ import org.mariotaku.twidere.model.event.SendMessageTaskEvent
import org.mariotaku.twidere.model.util.ParcelableMessageUtils import org.mariotaku.twidere.model.util.ParcelableMessageUtils
import org.mariotaku.twidere.provider.TwidereDataStore.Messages.Conversations import org.mariotaku.twidere.provider.TwidereDataStore.Messages.Conversations
import org.mariotaku.twidere.task.ExceptionHandlingAbstractTask import org.mariotaku.twidere.task.ExceptionHandlingAbstractTask
import org.mariotaku.twidere.task.twitter.UpdateStatusTask import org.mariotaku.twidere.task.status.UpdateStatusTask
import org.mariotaku.twidere.task.twitter.message.GetMessagesTask
import org.mariotaku.twidere.task.twitter.message.GetMessagesTask.Companion.addConversation import org.mariotaku.twidere.task.twitter.message.GetMessagesTask.Companion.addConversation
import org.mariotaku.twidere.task.twitter.message.GetMessagesTask.Companion.addLocalConversations import org.mariotaku.twidere.task.twitter.message.GetMessagesTask.Companion.addLocalConversations

View File

@ -52,7 +52,7 @@ import org.mariotaku.twidere.model.util.ParcelableRelationshipUtils
import org.mariotaku.twidere.provider.TwidereDataStore.* import org.mariotaku.twidere.provider.TwidereDataStore.*
import org.mariotaku.twidere.task.* import org.mariotaku.twidere.task.*
import org.mariotaku.twidere.task.twitter.GetActivitiesAboutMeTask 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.GetSavedSearchesTask
import org.mariotaku.twidere.task.twitter.GetTrendsTask import org.mariotaku.twidere.task.twitter.GetTrendsTask
import org.mariotaku.twidere.task.twitter.message.GetMessagesTask import org.mariotaku.twidere.task.twitter.message.GetMessagesTask

View File

@ -113,6 +113,10 @@ object DataStoreUtils {
TABLE_ID_CACHED_HASHTAGS) TABLE_ID_CACHED_HASHTAGS)
CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, CachedRelationships.CONTENT_PATH, CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, CachedRelationships.CONTENT_PATH,
TABLE_ID_CACHED_RELATIONSHIPS) 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, CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, SavedSearches.CONTENT_PATH,
TABLE_ID_SAVED_SEARCHES) TABLE_ID_SAVED_SEARCHES)
CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, SearchHistory.CONTENT_PATH, CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, SearchHistory.CONTENT_PATH,
@ -453,6 +457,8 @@ object DataStoreUtils {
fun getTableNameById(id: Int): String? { fun getTableNameById(id: Int): String? {
when (id) { when (id) {
TABLE_ID_STATUSES -> return Statuses.TABLE_NAME 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_ACTIVITIES_ABOUT_ME -> return Activities.AboutMe.TABLE_NAME
TABLE_ID_DRAFTS -> return Drafts.TABLE_NAME TABLE_ID_DRAFTS -> return Drafts.TABLE_NAME
TABLE_ID_FILTERED_USERS -> return Filters.Users.TABLE_NAME TABLE_ID_FILTERED_USERS -> return Filters.Users.TABLE_NAME

View File

@ -84,6 +84,8 @@ class ErrorInfoStore(application: Context) {
val KEY_DIRECT_MESSAGES = "direct_messages" val KEY_DIRECT_MESSAGES = "direct_messages"
val KEY_INTERACTIONS = "interactions" val KEY_INTERACTIONS = "interactions"
val KEY_HOME_TIMELINE = "home_timeline" 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 KEY_ACTIVITIES_BY_FRIENDS = "activities_by_friends"
val CODE_NO_DM_PERMISSION = 1 val CODE_NO_DM_PERMISSION = 1

View File

@ -24,7 +24,7 @@ import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
import org.mariotaku.twidere.task.filter.RefreshFiltersSubscriptionsTask import org.mariotaku.twidere.task.filter.RefreshFiltersSubscriptionsTask
import org.mariotaku.twidere.task.filter.RefreshLaunchPresentationsTask import org.mariotaku.twidere.task.filter.RefreshLaunchPresentationsTask
import org.mariotaku.twidere.task.twitter.GetActivitiesAboutMeTask 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 import org.mariotaku.twidere.task.twitter.message.GetMessagesTask
/** /**

View File

@ -49,8 +49,9 @@ class TwidereSQLiteOpenHelper(
) : SQLiteOpenHelper(context, name, null, version) { ) : SQLiteOpenHelper(context, name, null, version) {
override fun onCreate(db: SQLiteDatabase) { override fun onCreate(db: SQLiteDatabase) {
createStatusesTables(db)
db.beginTransaction() 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(Activities.AboutMe.TABLE_NAME, Activities.AboutMe.COLUMNS, Activities.AboutMe.TYPES, true))
db.execSQL(createTable(Drafts.TABLE_NAME, Drafts.COLUMNS, Drafts.TYPES, true)) db.execSQL(createTable(Drafts.TABLE_NAME, Drafts.COLUMNS, Drafts.TYPES, true))
db.setTransactionSuccessful() db.setTransactionSuccessful()
@ -102,6 +103,16 @@ class TwidereSQLiteOpenHelper(
setupDefaultTabs(db) 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) { private fun setupDefaultTabs(db: SQLiteDatabase) {
val creator = ObjectCursor.valuesCreatorFrom(Tab::class.java) 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_inbox_index").sql)
db.execSQL(SQLQueryBuilder.dropIndex(true, "messages_outbox_index").sql) db.execSQL(SQLQueryBuilder.dropIndex(true, "messages_outbox_index").sql)
} }
upgradeStatuses(db)
safeUpgrade(db, Statuses.TABLE_NAME, Statuses.COLUMNS, Statuses.TYPES, true, null)
safeUpgrade(db, Activities.AboutMe.TABLE_NAME, Activities.AboutMe.COLUMNS, safeUpgrade(db, Activities.AboutMe.TABLE_NAME, Activities.AboutMe.COLUMNS,
Activities.AboutMe.TYPES, true, null) Activities.AboutMe.TYPES, true, null)
migrateDrafts(db) migrateDrafts(db)
@ -263,6 +273,11 @@ class TwidereSQLiteOpenHelper(
db.endTransaction() 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) { private fun migrateDrafts(db: SQLiteDatabase) {
val draftsAlias = HashMap<String, String>() val draftsAlias = HashMap<String, String>()
draftsAlias.put(Drafts.MEDIA, "medias") draftsAlias.put(Drafts.MEDIA, "medias")

View File

@ -24,8 +24,8 @@ import android.content.Intent
import android.support.annotation.WorkerThread import android.support.annotation.WorkerThread
import org.mariotaku.twidere.model.ParcelableStatusUpdate import org.mariotaku.twidere.model.ParcelableStatusUpdate
import org.mariotaku.twidere.model.schedule.ScheduleInfo import org.mariotaku.twidere.model.schedule.ScheduleInfo
import org.mariotaku.twidere.task.twitter.UpdateStatusTask import org.mariotaku.twidere.task.status.UpdateStatusTask
import org.mariotaku.twidere.task.twitter.UpdateStatusTask.PendingStatusUpdate import org.mariotaku.twidere.task.status.UpdateStatusTask.PendingStatusUpdate
import java.util.* import java.util.*
/** /**