separated tweets and tweets w/ replies
This commit is contained in:
parent
5d91cd05b3
commit
0cc43f5b9c
|
@ -60,8 +60,10 @@ install:
|
||||||
- cat private/ssh_config >> ~/.ssh/config
|
- cat private/ssh_config >> ~/.ssh/config
|
||||||
# Append known_hosts
|
# Append known_hosts
|
||||||
- cat private/ssh_known_hosts >> ~/.ssh/known_hosts
|
- cat private/ssh_known_hosts >> ~/.ssh/known_hosts
|
||||||
# Checkout Google components
|
# Clone Google components
|
||||||
- ssh-agent bash -c "ssh-add private/ssh_id_rsa; git clone $COMPONENT_GOOGLE_REPO twidere/src/google" > /dev/null 2>&1
|
- ssh-agent bash -c "ssh-add private/ssh_id_rsa; git clone $COMPONENT_GOOGLE_REPO twidere/src/google" > /dev/null 2>&1
|
||||||
|
# Force reset to required commit id
|
||||||
|
- git -C twidere/src/google reset --hard `cat twidere/src/.google.commit-id` > /dev/null 2>&1
|
||||||
# Dropbox accessToken for uploading logs
|
# Dropbox accessToken for uploading logs
|
||||||
- cat private/dropbox_uploader >> ~/.dropbox_uploader
|
- cat private/dropbox_uploader >> ~/.dropbox_uploader
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ subprojects {
|
||||||
MariotakuCommons: '0.9.11',
|
MariotakuCommons: '0.9.11',
|
||||||
RestFu : '0.9.43',
|
RestFu : '0.9.43',
|
||||||
ObjectCursor : '0.9.16',
|
ObjectCursor : '0.9.16',
|
||||||
PlayServices : '10.2.0',
|
PlayServices : '10.2.1',
|
||||||
MapsUtils : '0.4.4',
|
MapsUtils : '0.4.4',
|
||||||
Crashlyrics : '2.6.7',
|
Crashlyrics : '2.6.7',
|
||||||
FabricPlugin : '1.22.1',
|
FabricPlugin : '1.22.1',
|
||||||
|
|
|
@ -26,6 +26,7 @@ import org.mariotaku.microblog.library.MicroBlogException;
|
||||||
import org.mariotaku.microblog.library.twitter.model.Paging;
|
import org.mariotaku.microblog.library.twitter.model.Paging;
|
||||||
import org.mariotaku.microblog.library.twitter.model.ResponseList;
|
import org.mariotaku.microblog.library.twitter.model.ResponseList;
|
||||||
import org.mariotaku.microblog.library.twitter.model.Status;
|
import org.mariotaku.microblog.library.twitter.model.Status;
|
||||||
|
import org.mariotaku.microblog.library.twitter.model.TimelineOption;
|
||||||
import org.mariotaku.microblog.library.twitter.template.StatusAnnotationTemplate;
|
import org.mariotaku.microblog.library.twitter.template.StatusAnnotationTemplate;
|
||||||
import org.mariotaku.restfu.annotation.method.GET;
|
import org.mariotaku.restfu.annotation.method.GET;
|
||||||
import org.mariotaku.restfu.annotation.param.Queries;
|
import org.mariotaku.restfu.annotation.param.Queries;
|
||||||
|
@ -47,11 +48,14 @@ public interface TimelineResources {
|
||||||
ResponseList<Status> getRetweetsOfMe(@Query Paging paging) throws MicroBlogException;
|
ResponseList<Status> getRetweetsOfMe(@Query Paging paging) throws MicroBlogException;
|
||||||
|
|
||||||
@GET("/statuses/user_timeline.json")
|
@GET("/statuses/user_timeline.json")
|
||||||
ResponseList<Status> getUserTimeline(@Query("user_id") String userId, @Query Paging paging) throws MicroBlogException;
|
ResponseList<Status> getUserTimeline(@Query("user_id") String userId, @Query Paging paging,
|
||||||
|
@Query TimelineOption option) throws MicroBlogException;
|
||||||
|
|
||||||
@GET("/statuses/user_timeline.json")
|
@GET("/statuses/user_timeline.json")
|
||||||
ResponseList<Status> getUserTimeline(@Query Paging paging) throws MicroBlogException;
|
ResponseList<Status> getUserTimeline(@Query Paging paging, @Query TimelineOption option)
|
||||||
|
throws MicroBlogException;
|
||||||
|
|
||||||
@GET("/statuses/user_timeline.json")
|
@GET("/statuses/user_timeline.json")
|
||||||
ResponseList<Status> getUserTimelineByScreenName(@Query("screen_name") String screenName, @Query Paging paging) throws MicroBlogException;
|
ResponseList<Status> getUserTimelineByScreenName(@Query("screen_name") String screenName,
|
||||||
|
@Query Paging paging, @Query TimelineOption option) throws MicroBlogException;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
/*
|
||||||
|
* Twidere - Twitter client for Android
|
||||||
|
*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.mariotaku.microblog.library.twitter.model;
|
||||||
|
|
||||||
|
import org.mariotaku.restfu.http.SimpleValueMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by mariotaku on 2017/3/27.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class TimelineOption extends SimpleValueMap {
|
||||||
|
public void setExcludeReplies(boolean excludeReplies) {
|
||||||
|
put("exclude_replies", excludeReplies);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIncludeRetweets(boolean includeRetweets) {
|
||||||
|
put("include_rts", includeRetweets);
|
||||||
|
}
|
||||||
|
}
|
|
@ -94,6 +94,7 @@ public interface IntentConstants {
|
||||||
String EXTRA_SINCE_SORT_ID = "since_sort_id";
|
String EXTRA_SINCE_SORT_ID = "since_sort_id";
|
||||||
String EXTRA_STATUS_ID = "status_id";
|
String EXTRA_STATUS_ID = "status_id";
|
||||||
String EXTRA_SCREEN_NAME = "screen_name";
|
String EXTRA_SCREEN_NAME = "screen_name";
|
||||||
|
String EXTRA_EXCLUDE_REPLIES = "exclude_replies";
|
||||||
String EXTRA_SCREEN_NAMES = "screen_names";
|
String EXTRA_SCREEN_NAMES = "screen_names";
|
||||||
String EXTRA_LIST_NAME = "list_name";
|
String EXTRA_LIST_NAME = "list_name";
|
||||||
String EXTRA_GROUP_NAME = "group_name";
|
String EXTRA_GROUP_NAME = "group_name";
|
||||||
|
|
|
@ -198,7 +198,7 @@ dependencies {
|
||||||
|
|
||||||
task svgToDrawable(type: SvgDrawableTask) {
|
task svgToDrawable(type: SvgDrawableTask) {
|
||||||
// specify where to pick SVG from
|
// specify where to pick SVG from
|
||||||
from = files('src/main/svg/drawable')
|
from = files(android.sourceSets.collect { "src/${it.name}/svg/drawable" })
|
||||||
// specify the android res folder
|
// specify the android res folder
|
||||||
to = file('src/main/res-svg2png')
|
to = file('src/main/res-svg2png')
|
||||||
// override files only if necessary
|
// override files only if necessary
|
||||||
|
@ -215,7 +215,7 @@ task svgToDrawable(type: SvgDrawableTask) {
|
||||||
|
|
||||||
task svgToMipmap(type: SvgDrawableTask) {
|
task svgToMipmap(type: SvgDrawableTask) {
|
||||||
// specify where to pick SVG from
|
// specify where to pick SVG from
|
||||||
from = files('src/main/svg/mipmap')
|
from = files(android.sourceSets.collect { "src/${it.name}/svg/mipmap" })
|
||||||
// specify the android res folder
|
// specify the android res folder
|
||||||
to = file('src/main/res-svg2png')
|
to = file('src/main/res-svg2png')
|
||||||
// override files only if necessary
|
// override files only if necessary
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
c0f1eb42515bb3fdf53ff429103f8806bbe97830
|
|
@ -95,13 +95,14 @@ public class TwitterWrapper implements Constants {
|
||||||
return user;
|
return user;
|
||||||
}
|
}
|
||||||
if (id != null) {
|
if (id != null) {
|
||||||
final ResponseList<Status> timeline = twitter.getUserTimeline(id, paging);
|
final ResponseList<Status> timeline = twitter.getUserTimeline(id, paging, null);
|
||||||
for (final Status status : timeline) {
|
for (final Status status : timeline) {
|
||||||
final User user = status.getUser();
|
final User user = status.getUser();
|
||||||
if (TextUtils.equals(user.getId(), id)) return user;
|
if (TextUtils.equals(user.getId(), id)) return user;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
final ResponseList<Status> timeline = twitter.getUserTimelineByScreenName(screenName, paging);
|
final ResponseList<Status> timeline = twitter.getUserTimelineByScreenName(screenName,
|
||||||
|
paging, null);
|
||||||
for (final Status status : timeline) {
|
for (final Status status : timeline) {
|
||||||
final User user = status.getUser();
|
final User user = status.getUser();
|
||||||
if (searchScreenName.equalsIgnoreCase(user.getScreenName()))
|
if (searchScreenName.equalsIgnoreCase(user.getScreenName()))
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
/*
|
||||||
|
* 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.ktextension
|
||||||
|
|
||||||
|
import android.support.v4.app.DialogFragment
|
||||||
|
import android.support.v4.app.FragmentManager
|
||||||
|
|
||||||
|
fun FragmentManager.dismissDialogFragment(tag: String): Boolean {
|
||||||
|
val f = findFragmentByTag(tag) as? DialogFragment ?: return false
|
||||||
|
f.dismiss()
|
||||||
|
return true
|
||||||
|
}
|
|
@ -6,6 +6,7 @@ import android.os.AsyncTask
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.support.v4.app.DialogFragment
|
import android.support.v4.app.DialogFragment
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import org.mariotaku.ktextension.dismissDialogFragment
|
||||||
import org.mariotaku.twidere.Constants.*
|
import org.mariotaku.twidere.Constants.*
|
||||||
import org.mariotaku.twidere.R
|
import org.mariotaku.twidere.R
|
||||||
import org.mariotaku.twidere.constant.IntentConstants
|
import org.mariotaku.twidere.constant.IntentConstants
|
||||||
|
@ -105,11 +106,8 @@ class DataExportActivity : BaseActivity(), DataExportImportTypeSelectorDialogFra
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPostExecute(result: Boolean?) {
|
override fun onPostExecute(result: Boolean?) {
|
||||||
activity.executeAfterFragmentResumed {
|
activity.executeAfterFragmentResumed { activity ->
|
||||||
val activity = it as DataExportActivity
|
activity.supportFragmentManager.dismissDialogFragment(FRAGMENT_TAG)
|
||||||
val fm = activity.supportFragmentManager
|
|
||||||
val f = fm.findFragmentByTag(FRAGMENT_TAG) as? DialogFragment
|
|
||||||
f?.dismiss()
|
|
||||||
}
|
}
|
||||||
if (result != null && result) {
|
if (result != null && result) {
|
||||||
activity.setResult(Activity.RESULT_OK)
|
activity.setResult(Activity.RESULT_OK)
|
||||||
|
|
|
@ -5,6 +5,7 @@ import android.os.AsyncTask
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.support.v4.app.DialogFragment
|
import android.support.v4.app.DialogFragment
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import org.mariotaku.ktextension.dismissDialogFragment
|
||||||
import org.mariotaku.twidere.R
|
import org.mariotaku.twidere.R
|
||||||
import org.mariotaku.twidere.TwidereConstants.*
|
import org.mariotaku.twidere.TwidereConstants.*
|
||||||
import org.mariotaku.twidere.fragment.DataExportImportTypeSelectorDialogFragment
|
import org.mariotaku.twidere.fragment.DataExportImportTypeSelectorDialogFragment
|
||||||
|
@ -107,11 +108,8 @@ class DataImportActivity : BaseActivity(), DataExportImportTypeSelectorDialogFra
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPostExecute(result: Boolean?) {
|
override fun onPostExecute(result: Boolean?) {
|
||||||
activity.executeAfterFragmentResumed {
|
activity.executeAfterFragmentResumed { activity ->
|
||||||
val activity = it as DataImportActivity
|
activity.supportFragmentManager.dismissDialogFragment(FRAGMENT_TAG)
|
||||||
val fm = activity.supportFragmentManager
|
|
||||||
val f = fm.findFragmentByTag(FRAGMENT_TAG) as? DialogFragment
|
|
||||||
f?.dismiss()
|
|
||||||
}
|
}
|
||||||
if (result != null && result) {
|
if (result != null && result) {
|
||||||
activity.setResult(RESULT_OK)
|
activity.setResult(RESULT_OK)
|
||||||
|
@ -148,11 +146,8 @@ class DataImportActivity : BaseActivity(), DataExportImportTypeSelectorDialogFra
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPostExecute(flags: Int?) {
|
override fun onPostExecute(flags: Int?) {
|
||||||
activity.executeAfterFragmentResumed {
|
activity.executeAfterFragmentResumed { activity ->
|
||||||
val activity = it as DataImportActivity
|
activity.supportFragmentManager.dismissDialogFragment(FRAGMENT_TAG)
|
||||||
val fm = activity.supportFragmentManager
|
|
||||||
val f = fm.findFragmentByTag(FRAGMENT_TAG) as? DialogFragment
|
|
||||||
f?.dismiss()
|
|
||||||
}
|
}
|
||||||
val df = DataExportImportTypeSelectorDialogFragment()
|
val df = DataExportImportTypeSelectorDialogFragment()
|
||||||
val args = Bundle()
|
val args = Bundle()
|
||||||
|
|
|
@ -684,7 +684,7 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||||
val accountKey = uri?.getQueryParameter(QUERY_PARAM_ACCOUNT_KEY)?.let(UserKey::valueOf)
|
val accountKey = uri?.getQueryParameter(QUERY_PARAM_ACCOUNT_KEY)?.let(UserKey::valueOf)
|
||||||
val adapter = pagerAdapter
|
val adapter = pagerAdapter
|
||||||
for (i in 0 until adapter.count) {
|
for (i in 0 until adapter.count) {
|
||||||
val tab = adapter.getTab(i)
|
val tab = adapter.get(i)
|
||||||
if (tabType == Tab.getTypeAlias(tab.type)) {
|
if (tabType == Tab.getTypeAlias(tab.type)) {
|
||||||
val args = tab.args
|
val args = tab.args
|
||||||
if (args != null && CustomTabUtils.hasAccountId(this, args,
|
if (args != null && CustomTabUtils.hasAccountId(this, args,
|
||||||
|
@ -788,7 +788,7 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||||
|
|
||||||
private fun setupHomeTabs() {
|
private fun setupHomeTabs() {
|
||||||
pagerAdapter.clear()
|
pagerAdapter.clear()
|
||||||
pagerAdapter.addTabs(CustomTabUtils.getHomeTabs(this))
|
pagerAdapter.addAll(CustomTabUtils.getHomeTabs(this))
|
||||||
val hasNoTab = pagerAdapter.count == 0
|
val hasNoTab = pagerAdapter.count == 0
|
||||||
emptyTabHint.visibility = if (hasNoTab) View.VISIBLE else View.GONE
|
emptyTabHint.visibility = if (hasNoTab) View.VISIBLE else View.GONE
|
||||||
mainPager.visibility = if (hasNoTab) View.GONE else View.VISIBLE
|
mainPager.visibility = if (hasNoTab) View.GONE else View.VISIBLE
|
||||||
|
|
|
@ -38,7 +38,7 @@ import org.mariotaku.twidere.view.iface.PagerIndicator.TabListener
|
||||||
import org.mariotaku.twidere.view.iface.PagerIndicator.TabProvider
|
import org.mariotaku.twidere.view.iface.PagerIndicator.TabProvider
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class SupportTabsAdapter @JvmOverloads constructor(
|
class SupportTabsAdapter(
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
fm: FragmentManager,
|
fm: FragmentManager,
|
||||||
private val indicator: PagerIndicator? = null
|
private val indicator: PagerIndicator? = null
|
||||||
|
@ -47,35 +47,18 @@ class SupportTabsAdapter @JvmOverloads constructor(
|
||||||
var hasMultipleColumns: Boolean = false
|
var hasMultipleColumns: Boolean = false
|
||||||
var preferredColumnWidth: Float = 0f
|
var preferredColumnWidth: Float = 0f
|
||||||
|
|
||||||
private val tab = ArrayList<SupportTabSpec>()
|
var tabs = ArrayList<SupportTabSpec>()
|
||||||
|
set(value) {
|
||||||
|
field = tabs
|
||||||
|
notifyDataSetChanged()
|
||||||
|
}
|
||||||
|
|
||||||
init {
|
init {
|
||||||
clear()
|
clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addTab(cls: Class<out Fragment>, args: Bundle? = null, name: String,
|
|
||||||
icon: DrawableHolder? = null, type: String? = null, position: Int = 0, tag: String? = null) {
|
|
||||||
addTab(SupportTabSpec(name = name, icon = icon, cls = cls, args = args,
|
|
||||||
position = position, type = type, tag = tag))
|
|
||||||
}
|
|
||||||
|
|
||||||
fun addTab(spec: SupportTabSpec) {
|
|
||||||
tab.add(spec)
|
|
||||||
notifyDataSetChanged()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun addTabs(specs: Collection<SupportTabSpec>) {
|
|
||||||
tab.addAll(specs)
|
|
||||||
notifyDataSetChanged()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun clear() {
|
|
||||||
tab.clear()
|
|
||||||
notifyDataSetChanged()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getCount(): Int {
|
override fun getCount(): Int {
|
||||||
return tab.size
|
return this.tabs.size
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getItemPosition(obj: Any?): Int {
|
override fun getItemPosition(obj: Any?): Int {
|
||||||
|
@ -90,7 +73,7 @@ class SupportTabsAdapter @JvmOverloads constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getPageTitle(position: Int): CharSequence? {
|
override fun getPageTitle(position: Int): CharSequence? {
|
||||||
return tab[position].name
|
return this.tabs[position].name
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getPageWidth(position: Int): Float {
|
override fun getPageWidth(position: Int): Float {
|
||||||
|
@ -109,8 +92,8 @@ class SupportTabsAdapter @JvmOverloads constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getItem(position: Int): Fragment {
|
override fun getItem(position: Int): Fragment {
|
||||||
val fragment = Fragment.instantiate(context, tab[position].cls.name)
|
val fragment = Fragment.instantiate(context, this.tabs[position].cls.name)
|
||||||
fragment.arguments = getPageArguments(tab[position], position)
|
fragment.arguments = getPageArguments(this.tabs[position], position)
|
||||||
return fragment
|
return fragment
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,16 +102,9 @@ class SupportTabsAdapter @JvmOverloads constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getPageIcon(position: Int): Drawable {
|
override fun getPageIcon(position: Int): Drawable {
|
||||||
return getTabIconDrawable(context, tab[position].icon)
|
return getTabIconDrawable(context, this.tabs[position].icon)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getTab(position: Int): SupportTabSpec {
|
|
||||||
return tab[position]
|
|
||||||
}
|
|
||||||
|
|
||||||
val tabs: List<SupportTabSpec>
|
|
||||||
get() = tab
|
|
||||||
|
|
||||||
override fun onPageReselected(position: Int) {
|
override fun onPageReselected(position: Int) {
|
||||||
if (context !is SupportFragmentCallback) return
|
if (context !is SupportFragmentCallback) return
|
||||||
val f = context.currentVisibleFragment
|
val f = context.currentVisibleFragment
|
||||||
|
@ -151,8 +127,33 @@ class SupportTabsAdapter @JvmOverloads constructor(
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setTabLabel(position: Int, label: CharSequence) {
|
fun add(cls: Class<out Fragment>, args: Bundle? = null, name: String,
|
||||||
tab.filter { position == it.position }.forEach { it.name = label }
|
icon: DrawableHolder? = null, type: String? = null, position: Int = 0, tag: String? = null) {
|
||||||
|
add(SupportTabSpec(name = name, icon = icon, cls = cls, args = args,
|
||||||
|
position = position, type = type, tag = tag))
|
||||||
|
}
|
||||||
|
|
||||||
|
fun add(spec: SupportTabSpec) {
|
||||||
|
this.tabs.add(spec)
|
||||||
|
notifyDataSetChanged()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun addAll(specs: Collection<SupportTabSpec>) {
|
||||||
|
this.tabs.addAll(specs)
|
||||||
|
notifyDataSetChanged()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun get(position: Int): SupportTabSpec {
|
||||||
|
return this.tabs[position]
|
||||||
|
}
|
||||||
|
|
||||||
|
fun clear() {
|
||||||
|
this.tabs.clear()
|
||||||
|
notifyDataSetChanged()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setLabel(position: Int, label: CharSequence) {
|
||||||
|
this.tabs.filter { position == it.position }.forEach { it.name = label }
|
||||||
notifyDataSetChanged()
|
notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ abstract class AbsToolbarTabPagesFragment : BaseFragment(), RefreshScrollTopInte
|
||||||
SupportFragmentCallback, IBaseFragment.SystemWindowsInsetsCallback, ControlBarOffsetListener,
|
SupportFragmentCallback, IBaseFragment.SystemWindowsInsetsCallback, ControlBarOffsetListener,
|
||||||
HideUiOnScroll, OnPageChangeListener, IToolBarSupportFragment, KeyboardShortcutCallback {
|
HideUiOnScroll, OnPageChangeListener, IToolBarSupportFragment, KeyboardShortcutCallback {
|
||||||
|
|
||||||
private lateinit var pagerAdapter: SupportTabsAdapter
|
protected lateinit var pagerAdapter: SupportTabsAdapter
|
||||||
override val toolbar: Toolbar
|
override val toolbar: Toolbar
|
||||||
get() = toolbarContainer.toolbar
|
get() = toolbarContainer.toolbar
|
||||||
|
|
||||||
|
@ -53,6 +53,8 @@ abstract class AbsToolbarTabPagesFragment : BaseFragment(), RefreshScrollTopInte
|
||||||
|
|
||||||
|
|
||||||
addTabs(pagerAdapter)
|
addTabs(pagerAdapter)
|
||||||
|
toolbarTabs.notifyDataSetChanged()
|
||||||
|
|
||||||
toolbarContainer.setOnSizeChangedListener { _, _, _, _, _ ->
|
toolbarContainer.setOnSizeChangedListener { _, _, _, _, _ ->
|
||||||
val pageLimit = viewPager.offscreenPageLimit
|
val pageLimit = viewPager.offscreenPageLimit
|
||||||
val currentItem = viewPager.currentItem
|
val currentItem = viewPager.currentItem
|
||||||
|
@ -71,7 +73,7 @@ abstract class AbsToolbarTabPagesFragment : BaseFragment(), RefreshScrollTopInte
|
||||||
val initialTab = arguments?.getString(EXTRA_INITIAL_TAB)
|
val initialTab = arguments?.getString(EXTRA_INITIAL_TAB)
|
||||||
if (initialTab != null) {
|
if (initialTab != null) {
|
||||||
for (i in 0 until pagerAdapter.count) {
|
for (i in 0 until pagerAdapter.count) {
|
||||||
if (initialTab == pagerAdapter.getTab(i).tag) {
|
if (initialTab == pagerAdapter.get(i).tag) {
|
||||||
viewPager.currentItem = i
|
viewPager.currentItem = i
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,8 +30,8 @@ class GroupFragment : AbsToolbarTabPagesFragment(), LoaderCallbacks<SingleRespon
|
||||||
|
|
||||||
override fun addTabs(adapter: SupportTabsAdapter) {
|
override fun addTabs(adapter: SupportTabsAdapter) {
|
||||||
val args = arguments
|
val args = arguments
|
||||||
adapter.addTab(cls = GroupTimelineFragment::class.java, args = args, name = getString(R.string.title_statuses), tag = "statuses")
|
adapter.add(cls = GroupTimelineFragment::class.java, args = args, name = getString(R.string.title_statuses), tag = "statuses")
|
||||||
adapter.addTab(cls = GroupMembersFragment::class.java, args = args, name = getString(R.string.members), tag = "members")
|
adapter.add(cls = GroupMembersFragment::class.java, args = args, name = getString(R.string.members), tag = "members")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||||
|
|
|
@ -32,11 +32,11 @@ class ListsFragment : AbsToolbarTabPagesFragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun addTabs(adapter: SupportTabsAdapter) {
|
override fun addTabs(adapter: SupportTabsAdapter) {
|
||||||
adapter.addTab(cls = UserListsOwnershipsFragment::class.java, args = arguments,
|
adapter.add(cls = UserListsOwnershipsFragment::class.java, args = arguments,
|
||||||
name = getString(R.string.title_user_list_ownerships))
|
name = getString(R.string.title_user_list_ownerships))
|
||||||
adapter.addTab(cls = UserListSubscriptionsFragment::class.java, args = arguments,
|
adapter.add(cls = UserListSubscriptionsFragment::class.java, args = arguments,
|
||||||
name = getString(R.string.title_user_list_subscriptions))
|
name = getString(R.string.title_user_list_subscriptions))
|
||||||
adapter.addTab(cls = UserListMembershipsFragment::class.java, args = arguments,
|
adapter.add(cls = UserListMembershipsFragment::class.java, args = arguments,
|
||||||
name = getString(R.string.title_user_list_memberships))
|
name = getString(R.string.title_user_list_memberships))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,6 +46,7 @@ class ProgressDialogFragment : BaseDialogFragment() {
|
||||||
f.show(fm, tag)
|
f.show(fm, tag)
|
||||||
return f
|
return f
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -114,9 +114,9 @@ class SearchFragment : AbsToolbarTabPagesFragment(), RefreshScrollTopInterface,
|
||||||
|
|
||||||
|
|
||||||
override fun addTabs(adapter: SupportTabsAdapter) {
|
override fun addTabs(adapter: SupportTabsAdapter) {
|
||||||
adapter.addTab(cls = StatusesSearchFragment::class.java, args = arguments,
|
adapter.add(cls = StatusesSearchFragment::class.java, args = arguments,
|
||||||
name = getString(R.string.search_type_statuses), icon = DrawableHolder.resource(R.drawable.ic_action_twitter))
|
name = getString(R.string.search_type_statuses), icon = DrawableHolder.resource(R.drawable.ic_action_twitter))
|
||||||
adapter.addTab(cls = SearchUsersFragment::class.java, args = arguments,
|
adapter.add(cls = SearchUsersFragment::class.java, args = arguments,
|
||||||
name = getString(R.string.search_type_users), icon = DrawableHolder.resource(R.drawable.ic_action_user))
|
name = getString(R.string.search_type_users), icon = DrawableHolder.resource(R.drawable.ic_action_user))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -119,7 +119,6 @@ import org.mariotaku.twidere.model.event.FriendshipTaskEvent
|
||||||
import org.mariotaku.twidere.model.event.FriendshipUpdatedEvent
|
import org.mariotaku.twidere.model.event.FriendshipUpdatedEvent
|
||||||
import org.mariotaku.twidere.model.event.ProfileUpdatedEvent
|
import org.mariotaku.twidere.model.event.ProfileUpdatedEvent
|
||||||
import org.mariotaku.twidere.model.event.TaskStateChangedEvent
|
import org.mariotaku.twidere.model.event.TaskStateChangedEvent
|
||||||
import org.mariotaku.twidere.model.tab.DrawableHolder
|
|
||||||
import org.mariotaku.twidere.model.util.*
|
import org.mariotaku.twidere.model.util.*
|
||||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedRelationships
|
import org.mariotaku.twidere.provider.TwidereDataStore.CachedRelationships
|
||||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedUsers
|
import org.mariotaku.twidere.provider.TwidereDataStore.CachedUsers
|
||||||
|
@ -373,10 +372,10 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||||
actionBar.subtitle = null
|
actionBar.subtitle = null
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
val spec = pagerAdapter.getTab(viewPager.currentItem)
|
val spec = pagerAdapter.get(viewPager.currentItem)
|
||||||
assert(spec.type != null)
|
assert(spec.type != null)
|
||||||
when (spec.type) {
|
when (spec.type) {
|
||||||
TAB_TYPE_STATUSES -> {
|
TAB_TYPE_STATUSES, TAB_TYPE_STATUSES_WITH_REPLIES -> {
|
||||||
actionBar.subtitle = resources.getQuantityString(R.plurals.N_statuses,
|
actionBar.subtitle = resources.getQuantityString(R.plurals.N_statuses,
|
||||||
user.statuses_count.toInt(), user.statuses_count)
|
user.statuses_count.toInt(), user.statuses_count)
|
||||||
}
|
}
|
||||||
|
@ -1415,16 +1414,24 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||||
tabArgs.putParcelable(EXTRA_USER_KEY, args.getParcelable<Parcelable>(EXTRA_USER_KEY))
|
tabArgs.putParcelable(EXTRA_USER_KEY, args.getParcelable<Parcelable>(EXTRA_USER_KEY))
|
||||||
tabArgs.putString(EXTRA_SCREEN_NAME, args.getString(EXTRA_SCREEN_NAME))
|
tabArgs.putString(EXTRA_SCREEN_NAME, args.getString(EXTRA_SCREEN_NAME))
|
||||||
}
|
}
|
||||||
pagerAdapter.addTab(cls = UserTimelineFragment::class.java, args = tabArgs, name = getString(R.string.title_statuses),
|
pagerAdapter.add(cls = UserTimelineFragment::class.java, args = Bundle(tabArgs).apply {
|
||||||
icon = DrawableHolder.resource(R.drawable.ic_action_quote), type = TAB_TYPE_STATUSES, position = TAB_POSITION_STATUSES)
|
putBoolean(EXTRA_EXCLUDE_REPLIES, true)
|
||||||
pagerAdapter.addTab(cls = UserMediaTimelineFragment::class.java, args = tabArgs, name = getString(R.string.media),
|
}, name = getString(R.string.title_statuses), type = TAB_TYPE_STATUSES,
|
||||||
icon = DrawableHolder.resource(R.drawable.ic_action_gallery), type = TAB_TYPE_MEDIA, position = TAB_POSITION_MEDIA)
|
position = TAB_POSITION_STATUSES)
|
||||||
|
pagerAdapter.add(cls = UserTimelineFragment::class.java, args = tabArgs,
|
||||||
|
name = getString(R.string.title_statuses_and_replies), type = TAB_TYPE_STATUSES_WITH_REPLIES,
|
||||||
|
position = TAB_POSITION_STATUSES)
|
||||||
|
pagerAdapter.add(cls = UserMediaTimelineFragment::class.java, args = tabArgs,
|
||||||
|
name = getString(R.string.media), type = TAB_TYPE_MEDIA,
|
||||||
|
position = TAB_POSITION_MEDIA)
|
||||||
if (preferences.getBoolean(KEY_I_WANT_MY_STARS_BACK)) {
|
if (preferences.getBoolean(KEY_I_WANT_MY_STARS_BACK)) {
|
||||||
pagerAdapter.addTab(cls = UserFavoritesFragment::class.java, args = tabArgs, name = getString(R.string.title_favorites),
|
pagerAdapter.add(cls = UserFavoritesFragment::class.java, args = tabArgs,
|
||||||
icon = DrawableHolder.resource(R.drawable.ic_action_star), type = TAB_TYPE_FAVORITES, position = TAB_POSITION_FAVORITES)
|
name = getString(R.string.title_favorites), type = TAB_TYPE_FAVORITES,
|
||||||
|
position = TAB_POSITION_FAVORITES)
|
||||||
} else {
|
} else {
|
||||||
pagerAdapter.addTab(cls = UserFavoritesFragment::class.java, args = tabArgs, name = getString(R.string.title_likes),
|
pagerAdapter.add(cls = UserFavoritesFragment::class.java, args = tabArgs,
|
||||||
icon = DrawableHolder.resource(R.drawable.ic_action_heart), type = TAB_TYPE_FAVORITES, position = TAB_POSITION_FAVORITES)
|
name = getString(R.string.title_likes), type = TAB_TYPE_FAVORITES,
|
||||||
|
position = TAB_POSITION_FAVORITES)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1736,6 +1743,7 @@ class UserFragment : BaseFragment(), OnClickListener, OnLinkClickListener,
|
||||||
private val TAB_POSITION_MEDIA = 1
|
private val TAB_POSITION_MEDIA = 1
|
||||||
private val TAB_POSITION_FAVORITES = 2
|
private val TAB_POSITION_FAVORITES = 2
|
||||||
private val TAB_TYPE_STATUSES = "statuses"
|
private val TAB_TYPE_STATUSES = "statuses"
|
||||||
|
private val TAB_TYPE_STATUSES_WITH_REPLIES = "statuses_with_replies"
|
||||||
private val TAB_TYPE_MEDIA = "media"
|
private val TAB_TYPE_MEDIA = "media"
|
||||||
private val TAB_TYPE_FAVORITES = "favorites"
|
private val TAB_TYPE_FAVORITES = "favorites"
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,9 +153,9 @@ class UserListFragment : AbsToolbarTabPagesFragment(), OnClickListener,
|
||||||
tabArgs.putString(EXTRA_LIST_ID, args.getString(EXTRA_LIST_ID))
|
tabArgs.putString(EXTRA_LIST_ID, args.getString(EXTRA_LIST_ID))
|
||||||
tabArgs.putString(EXTRA_LIST_NAME, args.getString(EXTRA_LIST_NAME))
|
tabArgs.putString(EXTRA_LIST_NAME, args.getString(EXTRA_LIST_NAME))
|
||||||
}
|
}
|
||||||
adapter.addTab(cls = UserListTimelineFragment::class.java, args = tabArgs, name = getString(R.string.title_statuses))
|
adapter.add(cls = UserListTimelineFragment::class.java, args = tabArgs, name = getString(R.string.title_statuses))
|
||||||
adapter.addTab(cls = UserListMembersFragment::class.java, args = tabArgs, name = getString(R.string.members))
|
adapter.add(cls = UserListMembersFragment::class.java, args = tabArgs, name = getString(R.string.members))
|
||||||
adapter.addTab(cls = UserListSubscribersFragment::class.java, args = tabArgs, name = getString(R.string.subscribers))
|
adapter.add(cls = UserListSubscribersFragment::class.java, args = tabArgs, name = getString(R.string.subscribers))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
|
|
|
@ -42,7 +42,7 @@ import com.twitter.Validator
|
||||||
import kotlinx.android.synthetic.main.fragment_user_profile_editor.*
|
import kotlinx.android.synthetic.main.fragment_user_profile_editor.*
|
||||||
import org.mariotaku.abstask.library.AbstractTask
|
import org.mariotaku.abstask.library.AbstractTask
|
||||||
import org.mariotaku.abstask.library.TaskStarter
|
import org.mariotaku.abstask.library.TaskStarter
|
||||||
import org.mariotaku.kpreferences.get
|
import org.mariotaku.ktextension.dismissDialogFragment
|
||||||
import org.mariotaku.microblog.library.MicroBlog
|
import org.mariotaku.microblog.library.MicroBlog
|
||||||
import org.mariotaku.microblog.library.MicroBlogException
|
import org.mariotaku.microblog.library.MicroBlogException
|
||||||
import org.mariotaku.microblog.library.twitter.model.ProfileUpdate
|
import org.mariotaku.microblog.library.twitter.model.ProfileUpdate
|
||||||
|
@ -51,7 +51,6 @@ import org.mariotaku.twidere.R
|
||||||
import org.mariotaku.twidere.TwidereConstants.*
|
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.constant.profileImageStyleKey
|
|
||||||
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.newMicroBlogInstance
|
import org.mariotaku.twidere.extension.model.newMicroBlogInstance
|
||||||
|
@ -407,9 +406,9 @@ class UserProfileEditorFragment : BaseFragment(), OnSizeChangedListener, TextWat
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun afterExecute(handler: UserProfileEditorFragment?, result: SingleResponse<ParcelableUser>) {
|
override fun afterExecute(callback: UserProfileEditorFragment?, result: SingleResponse<ParcelableUser>) {
|
||||||
if (handler == null) return
|
if (callback == null) return
|
||||||
val activity = handler.activity ?: return
|
val activity = callback.activity ?: return
|
||||||
if (result.hasData()) {
|
if (result.hasData()) {
|
||||||
val account: AccountDetails? = result.extras.getParcelable(EXTRA_ACCOUNT)
|
val account: AccountDetails? = result.extras.getParcelable(EXTRA_ACCOUNT)
|
||||||
if (account != null) {
|
if (account != null) {
|
||||||
|
@ -418,20 +417,16 @@ class UserProfileEditorFragment : BaseFragment(), OnSizeChangedListener, TextWat
|
||||||
TaskStarter.execute(task)
|
TaskStarter.execute(task)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
handler.executeAfterFragmentResumed { fragment ->
|
callback.executeAfterFragmentResumed { fragment ->
|
||||||
val f = (fragment as UserProfileEditorFragment).fragmentManager.findFragmentByTag(DIALOG_FRAGMENT_TAG)
|
fragment.childFragmentManager.dismissDialogFragment(DIALOG_FRAGMENT_TAG)
|
||||||
if (f is DialogFragment) {
|
fragment.activity.finish()
|
||||||
f.dismissAllowingStateLoss()
|
|
||||||
}
|
|
||||||
f.activity.finish()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun beforeExecute() {
|
override fun beforeExecute() {
|
||||||
super.beforeExecute()
|
super.beforeExecute()
|
||||||
callback?.executeAfterFragmentResumed { fragment ->
|
callback?.executeAfterFragmentResumed { fragment ->
|
||||||
val fm = (fragment as UserProfileEditorFragment).activity.supportFragmentManager
|
val df = ProgressDialogFragment.show(fragment.childFragmentManager, DIALOG_FRAGMENT_TAG)
|
||||||
val df = ProgressDialogFragment.show(fm, DIALOG_FRAGMENT_TAG)
|
|
||||||
df.isCancelable = false
|
df.isCancelable = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -451,8 +446,8 @@ class UserProfileEditorFragment : BaseFragment(), OnSizeChangedListener, TextWat
|
||||||
return TwitterWrapper.deleteProfileBannerImage(activity, accountKey)
|
return TwitterWrapper.deleteProfileBannerImage(activity, accountKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun afterExecute(handler: UserProfileEditorFragment?, result: SingleResponse<Boolean>) {
|
override fun afterExecute(callback: UserProfileEditorFragment?, result: SingleResponse<Boolean>) {
|
||||||
super.afterExecute(handler, result)
|
super.afterExecute(callback, result)
|
||||||
if (result.data != null) {
|
if (result.data != null) {
|
||||||
getUserInfo()
|
getUserInfo()
|
||||||
Toast.makeText(activity, R.string.message_toast_profile_banner_image_updated, Toast.LENGTH_SHORT).show()
|
Toast.makeText(activity, R.string.message_toast_profile_banner_image_updated, Toast.LENGTH_SHORT).show()
|
||||||
|
@ -473,8 +468,8 @@ class UserProfileEditorFragment : BaseFragment(), OnSizeChangedListener, TextWat
|
||||||
private inner class UpdateProfileBannerImageTaskInternal(context: Context, accountKey: UserKey,
|
private inner class UpdateProfileBannerImageTaskInternal(context: Context, accountKey: UserKey,
|
||||||
imageUri: Uri, deleteImage: Boolean) : UpdateProfileBannerImageTask<UserProfileEditorFragment>(context, accountKey, imageUri, deleteImage) {
|
imageUri: Uri, deleteImage: Boolean) : UpdateProfileBannerImageTask<UserProfileEditorFragment>(context, accountKey, imageUri, deleteImage) {
|
||||||
|
|
||||||
override fun afterExecute(handler: UserProfileEditorFragment?, result: SingleResponse<ParcelableUser>?) {
|
override fun afterExecute(callback: UserProfileEditorFragment?, result: SingleResponse<ParcelableUser>?) {
|
||||||
super.afterExecute(handler, result)
|
super.afterExecute(callback, result)
|
||||||
setUpdateState(false)
|
setUpdateState(false)
|
||||||
getUserInfo()
|
getUserInfo()
|
||||||
}
|
}
|
||||||
|
@ -495,8 +490,8 @@ class UserProfileEditorFragment : BaseFragment(), OnSizeChangedListener, TextWat
|
||||||
) : UpdateProfileBackgroundImageTask<UserProfileEditorFragment>(context, accountKey, imageUri,
|
) : UpdateProfileBackgroundImageTask<UserProfileEditorFragment>(context, accountKey, imageUri,
|
||||||
tile, deleteImage) {
|
tile, deleteImage) {
|
||||||
|
|
||||||
override fun afterExecute(handler: UserProfileEditorFragment?, result: SingleResponse<ParcelableUser>) {
|
override fun afterExecute(callback: UserProfileEditorFragment?, result: SingleResponse<ParcelableUser>) {
|
||||||
super.afterExecute(handler, result)
|
super.afterExecute(callback, result)
|
||||||
setUpdateState(false)
|
setUpdateState(false)
|
||||||
getUserInfo()
|
getUserInfo()
|
||||||
}
|
}
|
||||||
|
@ -515,8 +510,8 @@ class UserProfileEditorFragment : BaseFragment(), OnSizeChangedListener, TextWat
|
||||||
deleteImage: Boolean
|
deleteImage: Boolean
|
||||||
) : UpdateProfileImageTask<UserProfileEditorFragment>(context, accountKey, imageUri, deleteImage) {
|
) : UpdateProfileImageTask<UserProfileEditorFragment>(context, accountKey, imageUri, deleteImage) {
|
||||||
|
|
||||||
override fun afterExecute(handler: UserProfileEditorFragment?, result: SingleResponse<ParcelableUser>) {
|
override fun afterExecute(callback: UserProfileEditorFragment?, result: SingleResponse<ParcelableUser>) {
|
||||||
super.afterExecute(handler, result)
|
super.afterExecute(callback, result)
|
||||||
if (result.data != null) {
|
if (result.data != null) {
|
||||||
displayUser(result.data)
|
displayUser(result.data)
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,7 @@ class UserTimelineFragment : ParcelableStatusesFragment() {
|
||||||
val accountKey = Utils.getAccountKey(context, args)!!
|
val accountKey = Utils.getAccountKey(context, args)!!
|
||||||
val userKey = args.getParcelable<UserKey>(EXTRA_USER_KEY)
|
val userKey = args.getParcelable<UserKey>(EXTRA_USER_KEY)
|
||||||
val screenName = args.getString(EXTRA_SCREEN_NAME)
|
val screenName = args.getString(EXTRA_SCREEN_NAME)
|
||||||
|
val excludeReplies = args.getBoolean(EXTRA_EXCLUDE_REPLIES)
|
||||||
val result = ArrayList<String>()
|
val result = ArrayList<String>()
|
||||||
result.add(AUTHORITY_USER_TIMELINE)
|
result.add(AUTHORITY_USER_TIMELINE)
|
||||||
result.add("account=$accountKey")
|
result.add("account=$accountKey")
|
||||||
|
@ -58,6 +59,9 @@ class UserTimelineFragment : ParcelableStatusesFragment() {
|
||||||
} else {
|
} else {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
if (excludeReplies) {
|
||||||
|
result.add("exclude_replies")
|
||||||
|
}
|
||||||
return result.toTypedArray()
|
return result.toTypedArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,9 +95,10 @@ class UserTimelineFragment : ParcelableStatusesFragment() {
|
||||||
val screenName = args.getString(EXTRA_SCREEN_NAME)
|
val screenName = args.getString(EXTRA_SCREEN_NAME)
|
||||||
val tabPosition = args.getInt(EXTRA_TAB_POSITION, -1)
|
val tabPosition = args.getInt(EXTRA_TAB_POSITION, -1)
|
||||||
val loadingMore = args.getBoolean(EXTRA_LOADING_MORE, false)
|
val loadingMore = args.getBoolean(EXTRA_LOADING_MORE, false)
|
||||||
|
val excludeReplies = args.getBoolean(EXTRA_EXCLUDE_REPLIES, false)
|
||||||
val pinnedIds = if (adapter.hasPinnedStatuses) null else pinnedStatusIds
|
val pinnedIds = if (adapter.hasPinnedStatuses) null else pinnedStatusIds
|
||||||
return UserTimelineLoader(context, accountKey, userKey, screenName, sinceId, maxId, data,
|
return UserTimelineLoader(context, accountKey, userKey, screenName, sinceId, maxId, data,
|
||||||
savedStatusesFileArgs, tabPosition, fromUser, loadingMore, pinnedIds)
|
savedStatusesFileArgs, tabPosition, fromUser, loadingMore, pinnedIds, excludeReplies)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStatusesLoaded(loader: Loader<List<ParcelableStatus>?>, data: List<ParcelableStatus>?) {
|
override fun onStatusesLoaded(loader: Loader<List<ParcelableStatus>?>, data: List<ParcelableStatus>?) {
|
||||||
|
|
|
@ -203,9 +203,7 @@ abstract class BaseFiltersImportFragment : AbsContentListRecyclerViewFragment<Se
|
||||||
DataStoreUtils.addToFilter(context, selectedUsers, filterEverywhere)
|
DataStoreUtils.addToFilter(context, selectedUsers, filterEverywhere)
|
||||||
}.alwaysUi {
|
}.alwaysUi {
|
||||||
executeAfterFragmentResumed(true) { fragment ->
|
executeAfterFragmentResumed(true) { fragment ->
|
||||||
val fm = fragment.fragmentManager
|
fragment.childFragmentManager.dismissDialogFragment("import_progress")
|
||||||
val df = fm.findFragmentByTag("import_progress") as? DialogFragment
|
|
||||||
df?.dismiss()
|
|
||||||
}
|
}
|
||||||
weakThis.get()?.adapter?.notifyDataSetChanged()
|
weakThis.get()?.adapter?.notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,11 +32,11 @@ class FiltersFragment : AbsToolbarTabPagesFragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun addTabs(adapter: SupportTabsAdapter) {
|
override fun addTabs(adapter: SupportTabsAdapter) {
|
||||||
adapter.addTab(cls = FilteredUsersFragment::class.java, name = getString(R.string.filter_type_users), tag = "users")
|
adapter.add(cls = FilteredUsersFragment::class.java, name = getString(R.string.filter_type_users), tag = "users")
|
||||||
adapter.addTab(cls = FilteredKeywordsFragment::class.java, name = getString(R.string.filter_type_keywords), tag = "keywords")
|
adapter.add(cls = FilteredKeywordsFragment::class.java, name = getString(R.string.filter_type_keywords), tag = "keywords")
|
||||||
adapter.addTab(cls = FilteredSourcesFragment::class.java, name = getString(R.string.filter_type_sources), tag = "sources")
|
adapter.add(cls = FilteredSourcesFragment::class.java, name = getString(R.string.filter_type_sources), tag = "sources")
|
||||||
adapter.addTab(cls = FilteredLinksFragment::class.java, name = getString(R.string.filter_type_links), tag = "links")
|
adapter.add(cls = FilteredLinksFragment::class.java, name = getString(R.string.filter_type_links), tag = "links")
|
||||||
adapter.addTab(cls = FilterSettingsFragment::class.java, name = getString(R.string.settings), tag = "settings")
|
adapter.add(cls = FilterSettingsFragment::class.java, name = getString(R.string.settings), tag = "settings")
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,6 @@ import android.content.DialogInterface
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.support.v4.app.DialogFragment
|
|
||||||
import android.support.v4.app.LoaderManager
|
import android.support.v4.app.LoaderManager
|
||||||
import android.support.v4.content.CursorLoader
|
import android.support.v4.content.CursorLoader
|
||||||
import android.support.v4.content.Loader
|
import android.support.v4.content.Loader
|
||||||
|
@ -138,8 +137,7 @@ class FiltersSubscriptionsFragment : BaseFragment(), LoaderManager.LoaderCallbac
|
||||||
val fragmentRef = WeakReference(fragment)
|
val fragmentRef = WeakReference(fragment)
|
||||||
task.callback = {
|
task.callback = {
|
||||||
fragmentRef.get()?.executeAfterFragmentResumed { fragment ->
|
fragmentRef.get()?.executeAfterFragmentResumed { fragment ->
|
||||||
val df = fragment.childFragmentManager.findFragmentByTag(FRAGMENT_TAG_RREFRESH_FILTERS) as? DialogFragment
|
fragment.fragmentManager.dismissDialogFragment(FRAGMENT_TAG_RREFRESH_FILTERS)
|
||||||
df?.dismiss()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TaskStarter.execute(task)
|
TaskStarter.execute(task)
|
||||||
|
|
|
@ -32,6 +32,7 @@ import android.support.v4.app.DialogFragment
|
||||||
import android.support.v4.app.FragmentActivity
|
import android.support.v4.app.FragmentActivity
|
||||||
import android.support.v4.app.LoaderManager
|
import android.support.v4.app.LoaderManager
|
||||||
import android.support.v4.content.AsyncTaskLoader
|
import android.support.v4.content.AsyncTaskLoader
|
||||||
|
import android.support.v4.content.FixedAsyncTaskLoader
|
||||||
import android.support.v4.content.Loader
|
import android.support.v4.content.Loader
|
||||||
import android.support.v7.app.AlertDialog
|
import android.support.v7.app.AlertDialog
|
||||||
import android.support.v7.app.AppCompatActivity
|
import android.support.v7.app.AppCompatActivity
|
||||||
|
@ -473,7 +474,8 @@ class MessageConversationInfoFragment : BaseFragment(), IToolBarSupportFragment,
|
||||||
internal class ConversationInfoLoader(
|
internal class ConversationInfoLoader(
|
||||||
context: Context,
|
context: Context,
|
||||||
val accountKey: UserKey,
|
val accountKey: UserKey,
|
||||||
val conversationId: String) : AsyncTaskLoader<ParcelableMessageConversation?>(context) {
|
val conversationId: String
|
||||||
|
) : FixedAsyncTaskLoader<ParcelableMessageConversation?>(context) {
|
||||||
|
|
||||||
override fun loadInBackground(): ParcelableMessageConversation? {
|
override fun loadInBackground(): ParcelableMessageConversation? {
|
||||||
val where = Expression.and(Expression.equalsArgs(Conversations.ACCOUNT_KEY),
|
val where = Expression.and(Expression.equalsArgs(Conversations.ACCOUNT_KEY),
|
||||||
|
|
|
@ -28,6 +28,7 @@ import org.mariotaku.microblog.library.MicroBlogException
|
||||||
import org.mariotaku.microblog.library.twitter.model.Paging
|
import org.mariotaku.microblog.library.twitter.model.Paging
|
||||||
import org.mariotaku.microblog.library.twitter.model.ResponseList
|
import org.mariotaku.microblog.library.twitter.model.ResponseList
|
||||||
import org.mariotaku.microblog.library.twitter.model.Status
|
import org.mariotaku.microblog.library.twitter.model.Status
|
||||||
|
import org.mariotaku.microblog.library.twitter.model.TimelineOption
|
||||||
import org.mariotaku.twidere.R
|
import org.mariotaku.twidere.R
|
||||||
import org.mariotaku.twidere.model.AccountDetails
|
import org.mariotaku.twidere.model.AccountDetails
|
||||||
import org.mariotaku.twidere.model.ParcelableStatus
|
import org.mariotaku.twidere.model.ParcelableStatus
|
||||||
|
@ -48,7 +49,8 @@ class UserTimelineLoader(
|
||||||
tabPosition: Int,
|
tabPosition: Int,
|
||||||
fromUser: Boolean,
|
fromUser: Boolean,
|
||||||
loadingMore: Boolean,
|
loadingMore: Boolean,
|
||||||
val pinnedStatusIds: Array<String>?
|
val pinnedStatusIds: Array<String>?,
|
||||||
|
val excludeReplies: Boolean = false
|
||||||
) : MicroBlogAPIStatusesLoader(context, accountId, sinceId, maxId, -1, data, savedStatusesArgs,
|
) : MicroBlogAPIStatusesLoader(context, accountId, sinceId, maxId, -1, data, savedStatusesArgs,
|
||||||
tabPosition, fromUser, loadingMore) {
|
tabPosition, fromUser, loadingMore) {
|
||||||
|
|
||||||
|
@ -77,10 +79,12 @@ class UserTimelineLoader(
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
val option = TimelineOption()
|
||||||
|
option.setExcludeReplies(excludeReplies)
|
||||||
if (userId != null) {
|
if (userId != null) {
|
||||||
return microBlog.getUserTimeline(userId.id, paging)
|
return microBlog.getUserTimeline(userId.id, paging, option)
|
||||||
} else if (screenName != null) {
|
} else if (screenName != null) {
|
||||||
return microBlog.getUserTimelineByScreenName(screenName, paging)
|
return microBlog.getUserTimelineByScreenName(screenName, paging, option)
|
||||||
} else {
|
} else {
|
||||||
throw MicroBlogException("Invalid user")
|
throw MicroBlogException("Invalid user")
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,8 +27,8 @@ open class UpdateProfileBackgroundImageTask<ResultHandler>(
|
||||||
private val deleteImage: Boolean
|
private val deleteImage: Boolean
|
||||||
) : BaseAbstractTask<Any?, SingleResponse<ParcelableUser>, ResultHandler>(context) {
|
) : BaseAbstractTask<Any?, SingleResponse<ParcelableUser>, ResultHandler>(context) {
|
||||||
|
|
||||||
override fun afterExecute(handler: ResultHandler?, result: SingleResponse<ParcelableUser>) {
|
override fun afterExecute(callback: ResultHandler?, result: SingleResponse<ParcelableUser>) {
|
||||||
super.afterExecute(handler, result)
|
super.afterExecute(callback, result)
|
||||||
if (result.hasData()) {
|
if (result.hasData()) {
|
||||||
Utils.showOkMessage(context, R.string.message_toast_profile_banner_image_updated, false)
|
Utils.showOkMessage(context, R.string.message_toast_profile_banner_image_updated, false)
|
||||||
bus.post(ProfileUpdatedEvent(result.data!!))
|
bus.post(ProfileUpdatedEvent(result.data!!))
|
||||||
|
|
|
@ -28,8 +28,8 @@ open class UpdateProfileBannerImageTask<ResultHandler>(
|
||||||
|
|
||||||
private val profileImageSize = context.getString(R.string.profile_image_size)
|
private val profileImageSize = context.getString(R.string.profile_image_size)
|
||||||
|
|
||||||
override fun afterExecute(handler: ResultHandler?, result: SingleResponse<ParcelableUser>?) {
|
override fun afterExecute(callback: ResultHandler?, result: SingleResponse<ParcelableUser>?) {
|
||||||
super.afterExecute(handler, result)
|
super.afterExecute(callback, result)
|
||||||
if (result!!.hasData()) {
|
if (result!!.hasData()) {
|
||||||
Utils.showOkMessage(context, R.string.message_toast_profile_banner_image_updated, false)
|
Utils.showOkMessage(context, R.string.message_toast_profile_banner_image_updated, false)
|
||||||
bus.post(ProfileUpdatedEvent(result.data!!))
|
bus.post(ProfileUpdatedEvent(result.data!!))
|
||||||
|
|
|
@ -52,8 +52,8 @@ open class UpdateProfileImageTask<ResultHandler>(
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun afterExecute(handler: ResultHandler?, result: SingleResponse<ParcelableUser>) {
|
override fun afterExecute(callback: ResultHandler?, result: SingleResponse<ParcelableUser>) {
|
||||||
super.afterExecute(handler, result)
|
super.afterExecute(callback, result)
|
||||||
if (result.hasData()) {
|
if (result.hasData()) {
|
||||||
Utils.showOkMessage(context, R.string.profile_image_updated, false)
|
Utils.showOkMessage(context, R.string.profile_image_updated, false)
|
||||||
bus.post(ProfileUpdatedEvent(result.data!!))
|
bus.post(ProfileUpdatedEvent(result.data!!))
|
||||||
|
|
|
@ -70,7 +70,7 @@ class GetTrendsTask(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun afterExecute(handler: Any?, result: Unit) {
|
override fun afterExecute(callback: Any?, result: Unit) {
|
||||||
bus.post(TrendsRefreshedEvent())
|
bus.post(TrendsRefreshedEvent())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -85,7 +85,7 @@ class UpdateStatusTask(
|
||||||
stateCallback.beforeExecute()
|
stateCallback.beforeExecute()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun afterExecute(handler: Any?, result: UpdateStatusResult) {
|
override fun afterExecute(callback: Any?, result: UpdateStatusResult) {
|
||||||
stateCallback.afterExecute(result)
|
stateCallback.afterExecute(result)
|
||||||
logUpdateStatus(params.first, result)
|
logUpdateStatus(params.first, result)
|
||||||
}
|
}
|
||||||
|
|
|
@ -147,9 +147,9 @@ class CardPollViewController : ContainerView.ViewController() {
|
||||||
cardData.putString("selected_choice", (i + 1).toString())
|
cardData.putString("selected_choice", (i + 1).toString())
|
||||||
val task = object : AbstractTask<CardDataMap, ParcelableCardEntity, CardPollViewController>() {
|
val task = object : AbstractTask<CardDataMap, ParcelableCardEntity, CardPollViewController>() {
|
||||||
|
|
||||||
override fun afterExecute(handler: CardPollViewController?, result: ParcelableCardEntity?) {
|
override fun afterExecute(callback: CardPollViewController?, result: ParcelableCardEntity?) {
|
||||||
result ?: return
|
result ?: return
|
||||||
handler?.displayAndReloadPoll(result, status)
|
callback?.displayAndReloadPoll(result, status)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun doLongOperation(cardDataMap: CardDataMap): ParcelableCardEntity? {
|
override fun doLongOperation(cardDataMap: CardDataMap): ParcelableCardEntity? {
|
||||||
|
|
|
@ -71,6 +71,7 @@
|
||||||
<!-- [verb] e.g. An action label on a tweet to like this tweet. Formerly Twitter favorite. -->
|
<!-- [verb] e.g. An action label on a tweet to like this tweet. Formerly Twitter favorite. -->
|
||||||
<string name="action_like">Like</string>
|
<string name="action_like">Like</string>
|
||||||
<string name="action_liking">liking</string>
|
<string name="action_liking">liking</string>
|
||||||
|
<string name="action_manage_in_buffer">Manage in Buffer</string>
|
||||||
<string name="action_mark_as_read">Mark as read</string>
|
<string name="action_mark_as_read">Mark as read</string>
|
||||||
<string name="action_modifying_lists">modifying lists</string>
|
<string name="action_modifying_lists">modifying lists</string>
|
||||||
<string name="action_mute">Mute</string>
|
<string name="action_mute">Mute</string>
|
||||||
|
@ -1155,12 +1156,14 @@
|
||||||
<string name="title_open_source_license">Open source license</string>
|
<string name="title_open_source_license">Open source license</string>
|
||||||
<string name="title_premium_features_name">Twidere ∞</string>
|
<string name="title_premium_features_name">Twidere ∞</string>
|
||||||
<string name="title_quick_action">Quick action</string>
|
<string name="title_quick_action">Quick action</string>
|
||||||
|
<string name="title_scheduled_statuses">Scheduled tweets</string>
|
||||||
<string name="title_search">Search</string>
|
<string name="title_search">Search</string>
|
||||||
<string name="title_select_users">Select users</string>
|
<string name="title_select_users">Select users</string>
|
||||||
<string name="title_set_nickname">Set nickname</string>
|
<string name="title_set_nickname">Set nickname</string>
|
||||||
<string name="title_sign_in_to_buffer">Sign in to Buffer</string>
|
<string name="title_sign_in_to_buffer">Sign in to Buffer</string>
|
||||||
<string name="title_status">Tweet</string>
|
<string name="title_status">Tweet</string>
|
||||||
<string name="title_statuses">Tweets</string>
|
<string name="title_statuses">Tweets</string>
|
||||||
|
<string name="title_statuses_and_replies">Tweets & replies</string>
|
||||||
<string name="title_statuses_scheduling">Tweets scheduling</string>
|
<string name="title_statuses_scheduling">Tweets scheduling</string>
|
||||||
<string name="title_streaming">Streaming</string>
|
<string name="title_streaming">Streaming</string>
|
||||||
<string name="title_subscription_name">Name</string>
|
<string name="title_subscription_name">Name</string>
|
||||||
|
@ -1263,5 +1266,5 @@
|
||||||
<string name="users_statuses">User\'s tweets</string>
|
<string name="users_statuses">User\'s tweets</string>
|
||||||
|
|
||||||
<string name="vibration">Vibration</string>
|
<string name="vibration">Vibration</string>
|
||||||
<string name="title_scheduled_statuses">Scheduled tweets</string>
|
<string name="action_buffer_disconnect">Disconnect from Buffer</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in New Issue