close #758
This commit is contained in:
parent
0c748e9ef1
commit
56c65af196
|
@ -38,6 +38,7 @@ import java.lang.annotation.RetentionPolicy;
|
|||
CustomTabType.USER_TIMELINE,
|
||||
CustomTabType.SEARCH_STATUSES,
|
||||
CustomTabType.LIST_TIMELINE,
|
||||
CustomTabType.PUBLIC_TIMELINE,
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface CustomTabType {
|
||||
|
@ -49,4 +50,5 @@ public @interface CustomTabType {
|
|||
String USER_TIMELINE = "user_timeline";
|
||||
String SEARCH_STATUSES = "search_statuses";
|
||||
String LIST_TIMELINE = "list_timeline";
|
||||
String PUBLIC_TIMELINE = "public_timeline";
|
||||
}
|
||||
|
|
|
@ -94,6 +94,9 @@ public class TabArguments implements TwidereConstants {
|
|||
'}';
|
||||
}
|
||||
|
||||
/**
|
||||
* Remember to make this method correspond to {@code CustomTabUtils#newTabArguments(String)}
|
||||
*/
|
||||
@Nullable
|
||||
public static TabArguments parse(@NonNull @CustomTabType String type, @Nullable String json) throws IOException {
|
||||
if (json == null) return null;
|
||||
|
@ -101,7 +104,8 @@ public class TabArguments implements TwidereConstants {
|
|||
case CustomTabType.HOME_TIMELINE:
|
||||
case CustomTabType.NOTIFICATIONS_TIMELINE:
|
||||
case CustomTabType.DIRECT_MESSAGES:
|
||||
case CustomTabType.TRENDS_SUGGESTIONS: {
|
||||
case CustomTabType.TRENDS_SUGGESTIONS:
|
||||
case CustomTabType.PUBLIC_TIMELINE: {
|
||||
return LoganSquare.parse(json, TabArguments.class);
|
||||
}
|
||||
case CustomTabType.USER_TIMELINE:
|
||||
|
|
|
@ -44,6 +44,9 @@ public abstract class TabExtras implements Parcelable {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* Remember to make this method correspond to {@code CustomTabUtils#newTabExtras(String)}
|
||||
*/
|
||||
@Nullable
|
||||
public static TabExtras parse(@NonNull @CustomTabType String type, @Nullable String json) throws IOException {
|
||||
if (json == null) return null;
|
||||
|
|
|
@ -19,6 +19,7 @@ import org.mariotaku.twidere.model.tab.impl.FavoriteTimelineTabConfiguration;
|
|||
import org.mariotaku.twidere.model.tab.impl.HomeTabConfiguration;
|
||||
import org.mariotaku.twidere.model.tab.impl.InteractionsTabConfiguration;
|
||||
import org.mariotaku.twidere.model.tab.impl.MessagesTabConfiguration;
|
||||
import org.mariotaku.twidere.model.tab.impl.PublicTimelineTabConfiguration;
|
||||
import org.mariotaku.twidere.model.tab.impl.SearchTabConfiguration;
|
||||
import org.mariotaku.twidere.model.tab.impl.TrendsTabConfiguration;
|
||||
import org.mariotaku.twidere.model.tab.impl.UserListTimelineTabConfiguration;
|
||||
|
@ -73,10 +74,8 @@ public abstract class TabConfiguration {
|
|||
return false;
|
||||
}
|
||||
|
||||
@IntDef(value = {FLAG_HAS_ACCOUNT, FLAG_ACCOUNT_REQUIRED, FLAG_ACCOUNT_MULTIPLE,
|
||||
FLAG_ACCOUNT_MUTABLE}, flag = true)
|
||||
protected @interface AccountFlags {
|
||||
|
||||
public boolean checkAccountAvailability(@NonNull AccountDetails details) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
@ -98,7 +97,8 @@ public abstract class TabConfiguration {
|
|||
CustomTabType.FAVORITES,
|
||||
CustomTabType.USER_TIMELINE,
|
||||
CustomTabType.SEARCH_STATUSES,
|
||||
CustomTabType.LIST_TIMELINE
|
||||
CustomTabType.LIST_TIMELINE,
|
||||
CustomTabType.PUBLIC_TIMELINE,
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -121,10 +121,18 @@ public abstract class TabConfiguration {
|
|||
return new TrendsTabConfiguration();
|
||||
case CustomTabType.SEARCH_STATUSES:
|
||||
return new SearchTabConfiguration();
|
||||
case CustomTabType.PUBLIC_TIMELINE:
|
||||
return new PublicTimelineTabConfiguration();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@IntDef(value = {FLAG_HAS_ACCOUNT, FLAG_ACCOUNT_REQUIRED, FLAG_ACCOUNT_MULTIPLE,
|
||||
FLAG_ACCOUNT_MUTABLE}, flag = true)
|
||||
protected @interface AccountFlags {
|
||||
|
||||
}
|
||||
|
||||
public static abstract class ExtraConfiguration {
|
||||
private final String key;
|
||||
private StringHolder title;
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
/*
|
||||
* 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.model.tab.impl;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.Fragment;
|
||||
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.annotation.AccountType;
|
||||
import org.mariotaku.twidere.fragment.PublicTimelineFragment;
|
||||
import org.mariotaku.twidere.model.AccountDetails;
|
||||
import org.mariotaku.twidere.model.tab.DrawableHolder;
|
||||
import org.mariotaku.twidere.model.tab.StringHolder;
|
||||
import org.mariotaku.twidere.model.tab.TabConfiguration;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 2016/11/27.
|
||||
*/
|
||||
|
||||
public class PublicTimelineTabConfiguration extends TabConfiguration {
|
||||
@NonNull
|
||||
@Override
|
||||
public StringHolder getName() {
|
||||
return StringHolder.resource(R.string.title_public_timeline);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public DrawableHolder getIcon() {
|
||||
return DrawableHolder.Builtin.QUOTE;
|
||||
}
|
||||
|
||||
@AccountFlags
|
||||
@Override
|
||||
public int getAccountFlags() {
|
||||
return FLAG_HAS_ACCOUNT | FLAG_ACCOUNT_REQUIRED | FLAG_ACCOUNT_MUTABLE;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Class<? extends Fragment> getFragmentClass() {
|
||||
return PublicTimelineFragment.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkAccountAvailability(@NonNull final AccountDetails details) {
|
||||
return AccountType.FANFOU.equals(details.type)
|
||||
|| AccountType.STATUSNET.equals(details.type);
|
||||
}
|
||||
}
|
|
@ -43,6 +43,9 @@ import org.mariotaku.twidere.model.UserKey;
|
|||
import org.mariotaku.twidere.model.tab.DrawableHolder;
|
||||
import org.mariotaku.twidere.model.tab.TabConfiguration;
|
||||
import org.mariotaku.twidere.model.tab.argument.TabArguments;
|
||||
import org.mariotaku.twidere.model.tab.argument.TextQueryArguments;
|
||||
import org.mariotaku.twidere.model.tab.argument.UserArguments;
|
||||
import org.mariotaku.twidere.model.tab.argument.UserListArguments;
|
||||
import org.mariotaku.twidere.model.tab.extra.HomeTabExtras;
|
||||
import org.mariotaku.twidere.model.tab.extra.InteractionsTabExtras;
|
||||
import org.mariotaku.twidere.model.tab.extra.TabExtras;
|
||||
|
@ -110,13 +113,33 @@ public class CustomTabUtils implements Constants {
|
|||
return specs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remember to make this method correspond to {@link TabArguments#parse(String, String)}
|
||||
*
|
||||
* @see TabArguments#parse(String, String)
|
||||
*/
|
||||
@Nullable
|
||||
public static TabArguments newTabArguments(@NonNull @CustomTabType String type) {
|
||||
try {
|
||||
return TabArguments.parse(type, "{}");
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
switch (type) {
|
||||
case CustomTabType.HOME_TIMELINE:
|
||||
case CustomTabType.NOTIFICATIONS_TIMELINE:
|
||||
case CustomTabType.DIRECT_MESSAGES:
|
||||
case CustomTabType.TRENDS_SUGGESTIONS:
|
||||
case CustomTabType.PUBLIC_TIMELINE: {
|
||||
return new TabArguments();
|
||||
}
|
||||
case CustomTabType.USER_TIMELINE:
|
||||
case CustomTabType.FAVORITES: {
|
||||
return new UserArguments();
|
||||
}
|
||||
case CustomTabType.LIST_TIMELINE: {
|
||||
return new UserListArguments();
|
||||
}
|
||||
case CustomTabType.SEARCH_STATUSES: {
|
||||
return new TextQueryArguments();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -457,7 +457,7 @@ class LinkHandlerActivity : BaseActivity(), SystemWindowsInsetsCallback, IContro
|
|||
title = getString(R.string.interactions)
|
||||
}
|
||||
LINK_ID_PUBLIC_TIMELINE -> {
|
||||
title = getString(R.string.public_timeline)
|
||||
title = getString(R.string.title_public_timeline)
|
||||
}
|
||||
LINK_ID_FILTERS_IMPORT_BLOCKS -> {
|
||||
title = getString(R.string.title_select_users)
|
||||
|
|
|
@ -34,6 +34,8 @@ import nl.komponents.kovenant.android.startKovenant
|
|||
import nl.komponents.kovenant.android.stopKovenant
|
||||
import nl.komponents.kovenant.task
|
||||
import okhttp3.Dns
|
||||
import org.apache.commons.lang3.concurrent.ConcurrentUtils
|
||||
import org.mariotaku.commons.logansquare.LoganSquareMapperFinder
|
||||
import org.mariotaku.kpreferences.KPreferences
|
||||
import org.mariotaku.kpreferences.get
|
||||
import org.mariotaku.kpreferences.set
|
||||
|
@ -61,6 +63,8 @@ import org.mariotaku.twidere.util.premium.ExtraFeaturesService
|
|||
import org.mariotaku.twidere.util.refresh.AutoRefreshController
|
||||
import org.mariotaku.twidere.util.sync.SyncController
|
||||
import java.util.*
|
||||
import java.util.concurrent.Callable
|
||||
import java.util.concurrent.Future
|
||||
import java.util.concurrent.TimeUnit
|
||||
import javax.inject.Inject
|
||||
|
||||
|
@ -119,6 +123,11 @@ class TwidereApplication : Application(), Constants, OnSharedPreferenceChangeLis
|
|||
StrictModeUtils.detectAllVmPolicy()
|
||||
}
|
||||
super.onCreate()
|
||||
LoganSquareMapperFinder.setDefaultExecutor(object : LoganSquareMapperFinder.FutureExecutor {
|
||||
override fun <T> submit(callable: Callable<T>): Future<T> {
|
||||
return ConcurrentUtils.constantFuture(callable.call())
|
||||
}
|
||||
})
|
||||
applyLanguageSettings()
|
||||
startKovenant()
|
||||
initializeAsyncTask()
|
||||
|
|
|
@ -95,6 +95,8 @@ abstract class AbsActivitiesFragment protected constructor() :
|
|||
}
|
||||
}
|
||||
|
||||
protected open val loaderId: Int
|
||||
get() = tabId.toInt().coerceIn(0..Int.MAX_VALUE)
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
|
@ -108,7 +110,7 @@ abstract class AbsActivitiesFragment protected constructor() :
|
|||
|
||||
val loaderArgs = Bundle(arguments)
|
||||
loaderArgs.putBoolean(EXTRA_FROM_USER, true)
|
||||
loaderManager.initLoader(0, loaderArgs, this)
|
||||
loaderManager.initLoader(loaderId, loaderArgs, this)
|
||||
showProgress()
|
||||
}
|
||||
|
||||
|
|
|
@ -60,12 +60,15 @@ abstract class AbsMediaStatusesFragment : AbsContentRecyclerViewFragment<Stagger
|
|||
override final val reachingStart: Boolean
|
||||
get() = layoutManager.reachingStart
|
||||
|
||||
protected open val loaderId: Int
|
||||
get() = tabId.toInt().coerceIn(0..Int.MAX_VALUE)
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
adapter.statusClickListener = this
|
||||
val loaderArgs = Bundle(arguments)
|
||||
loaderArgs.putBoolean(EXTRA_FROM_USER, true)
|
||||
loaderManager.initLoader(0, loaderArgs, this)
|
||||
loaderManager.initLoader(loaderId, loaderArgs, this)
|
||||
showProgress()
|
||||
}
|
||||
|
||||
|
|
|
@ -130,6 +130,9 @@ abstract class AbsStatusesFragment : AbsContentListRecyclerViewFragment<Parcelab
|
|||
|
||||
protected open val timelineFilter: TimelineFilter? = null
|
||||
|
||||
protected open val loaderId: Int
|
||||
get() = tabId.toInt().coerceIn(0..Int.MAX_VALUE)
|
||||
|
||||
// Fragment life cycles
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
|
@ -449,7 +452,7 @@ abstract class AbsStatusesFragment : AbsContentListRecyclerViewFragment<Parcelab
|
|||
if (isDetached || host == null || loaderInitialized) return
|
||||
val loaderArgs = Bundle(arguments)
|
||||
loaderArgs.putBoolean(EXTRA_FROM_USER, true)
|
||||
loaderManager.initLoader(0, loaderArgs, this)
|
||||
loaderManager.initLoader(loaderId, loaderArgs, this)
|
||||
loaderInitialized = true
|
||||
}
|
||||
|
||||
|
|
|
@ -334,6 +334,7 @@ class AccountsDashboardFragment : BaseFragment(), LoaderCallbacks<AccountsInfo>,
|
|||
val account = accountsAdapter.selectedAccount ?: return
|
||||
var hasDmTab = false
|
||||
var hasInteractionsTab = false
|
||||
var hasPublicTimelineTab = false
|
||||
for (tab in tabs) {
|
||||
when (tab.type) {
|
||||
CustomTabType.DIRECT_MESSAGES -> {
|
||||
|
@ -346,6 +347,11 @@ class AccountsDashboardFragment : BaseFragment(), LoaderCallbacks<AccountsInfo>,
|
|||
hasInteractionsTab = hasAccountInTab(tab, account.key, account.activated)
|
||||
}
|
||||
}
|
||||
CustomTabType.PUBLIC_TIMELINE -> {
|
||||
if (!hasPublicTimelineTab) {
|
||||
hasPublicTimelineTab = hasAccountInTab(tab, account.key, true)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
val menu = navigationView.menu
|
||||
|
@ -372,9 +378,10 @@ class AccountsDashboardFragment : BaseFragment(), LoaderCallbacks<AccountsInfo>,
|
|||
}
|
||||
AccountType.STATUSNET -> {
|
||||
hasGroups = true
|
||||
hasPublicTimeline = !hasPublicTimelineTab
|
||||
}
|
||||
AccountType.FANFOU -> {
|
||||
hasPublicTimeline = true
|
||||
hasPublicTimeline = !hasPublicTimelineTab
|
||||
}
|
||||
}
|
||||
menu.setItemAvailability(R.id.groups, hasGroups)
|
||||
|
|
|
@ -239,7 +239,7 @@ abstract class CursorActivitiesFragment : AbsActivitiesFragment() {
|
|||
args.putAll(fragmentArgs)
|
||||
args.putBoolean(EXTRA_FROM_USER, true)
|
||||
}
|
||||
loaderManager.restartLoader(0, args, this)
|
||||
loaderManager.restartLoader(loaderId, args, this)
|
||||
}
|
||||
|
||||
private fun showContentOrError() {
|
||||
|
|
|
@ -161,7 +161,7 @@ abstract class CursorStatusesFragment : AbsStatusesFragment() {
|
|||
args.putAll(fragmentArgs)
|
||||
args.putBoolean(EXTRA_FROM_USER, true)
|
||||
}
|
||||
loaderManager.restartLoader(0, args, this)
|
||||
loaderManager.restartLoader(loaderId, args, this)
|
||||
}
|
||||
|
||||
override fun hasMoreData(data: List<ParcelableStatus>?): Boolean {
|
||||
|
|
|
@ -68,7 +68,6 @@ import org.mariotaku.twidere.model.tab.iface.AccountCallback
|
|||
import org.mariotaku.twidere.model.util.AccountUtils
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Tabs
|
||||
import org.mariotaku.twidere.util.CustomTabUtils
|
||||
import org.mariotaku.twidere.util.DataStoreUtils
|
||||
import org.mariotaku.twidere.util.ThemeUtils
|
||||
import org.mariotaku.twidere.view.holder.TwoLineWithIconViewHolder
|
||||
import java.lang.ref.WeakReference
|
||||
|
@ -136,7 +135,7 @@ class CustomTabsFragment : BaseFragment(), LoaderCallbacks<Cursor?>, MultiChoice
|
|||
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
||||
inflater.inflate(R.menu.menu_custom_tabs, menu)
|
||||
val context = this.context
|
||||
val accountKeys = DataStoreUtils.getAccountKeys(context)
|
||||
val accounts = AccountUtils.getAllAccountDetails(AccountManager.get(context), false)
|
||||
val itemAdd = menu.findItem(R.id.add_submenu)
|
||||
val theme = Chameleon.getOverrideTheme(context, context)
|
||||
if (itemAdd != null && itemAdd.hasSubMenu()) {
|
||||
|
@ -145,7 +144,7 @@ class CustomTabsFragment : BaseFragment(), LoaderCallbacks<Cursor?>, MultiChoice
|
|||
for ((type, conf) in TabConfiguration.all()) {
|
||||
val accountRequired = TabConfiguration.FLAG_ACCOUNT_REQUIRED in conf.accountFlags
|
||||
val subItem = subMenu.add(0, 0, conf.sortPosition, conf.name.createString(context))
|
||||
val disabledByNoAccount = accountRequired && accountKeys.isEmpty()
|
||||
val disabledByNoAccount = accountRequired && accounts.none(conf::checkAccountAvailability)
|
||||
val disabledByDuplicateTab = conf.isSingleTab && CustomTabUtils.isTabAdded(context, type)
|
||||
val shouldDisable = disabledByDuplicateTab || disabledByNoAccount
|
||||
subItem.isVisible = !shouldDisable
|
||||
|
@ -297,7 +296,7 @@ class CustomTabsFragment : BaseFragment(), LoaderCallbacks<Cursor?>, MultiChoice
|
|||
if (officialKeyOnly && !it.isOfficial(context)) {
|
||||
return@filter false
|
||||
}
|
||||
return@filter true
|
||||
return@filter conf.checkAccountAvailability(it)
|
||||
})
|
||||
accountsAdapter.setDummyItemText(R.string.activated_accounts)
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ class MediaStatusesSearchFragment : AbsMediaStatusesFragment() {
|
|||
args.putString(EXTRA_MAX_ID, maxId)
|
||||
args.putString(EXTRA_SINCE_ID, sinceId)
|
||||
args.putBoolean(EXTRA_FROM_USER, true)
|
||||
loaderManager.restartLoader(0, args, this)
|
||||
loaderManager.restartLoader(loaderId, args, this)
|
||||
return 0
|
||||
}
|
||||
|
||||
|
|
|
@ -104,7 +104,7 @@ abstract class ParcelableStatusesFragment : AbsStatusesFragment() {
|
|||
args.putInt(EXTRA_PAGE, param.page)
|
||||
}
|
||||
}
|
||||
loaderManager.restartLoader(0, args, this)
|
||||
loaderManager.restartLoader(loaderId, args, this)
|
||||
return true
|
||||
}
|
||||
|
||||
|
|
|
@ -33,8 +33,7 @@ import java.util.*
|
|||
*/
|
||||
class PublicTimelineFragment : ParcelableStatusesFragment() {
|
||||
|
||||
override fun onCreateStatusesLoader(context: Context,
|
||||
args: Bundle,
|
||||
override fun onCreateStatusesLoader(context: Context, args: Bundle,
|
||||
fromUser: Boolean): Loader<List<ParcelableStatus>?> {
|
||||
refreshing = true
|
||||
val data = adapterData
|
||||
|
@ -49,7 +48,7 @@ class PublicTimelineFragment : ParcelableStatusesFragment() {
|
|||
|
||||
override val savedStatusesFileArgs: Array<String>?
|
||||
get() {
|
||||
val accountKey = Utils.getAccountKey(context, arguments!!)!!
|
||||
val accountKey = Utils.getAccountKey(context, arguments)
|
||||
val result = ArrayList<String>()
|
||||
result.add(AUTHORITY_PUBLIC_TIMELINE)
|
||||
result.add("account=$accountKey")
|
||||
|
@ -62,7 +61,7 @@ class PublicTimelineFragment : ParcelableStatusesFragment() {
|
|||
|
||||
override val readPositionTagWithArguments: String?
|
||||
get() {
|
||||
val tabPosition = arguments!!.getInt(EXTRA_TAB_POSITION, -1)
|
||||
val tabPosition = arguments.getInt(EXTRA_TAB_POSITION, -1)
|
||||
if (tabPosition < 0) return null
|
||||
return "public_timeline"
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ class UserMediaTimelineFragment : AbsMediaStatusesFragment() {
|
|||
args.putString(EXTRA_MAX_ID, maxId)
|
||||
args.putString(EXTRA_SINCE_ID, sinceId)
|
||||
args.putBoolean(EXTRA_FROM_USER, true)
|
||||
loaderManager.restartLoader(0, args, this)
|
||||
loaderManager.restartLoader(loaderId, args, this)
|
||||
return 0
|
||||
}
|
||||
|
||||
|
|
|
@ -75,11 +75,14 @@ class MessagesEntriesFragment : AbsContentListRecyclerViewFragment<MessagesEntri
|
|||
|
||||
private val errorInfoKey: String = ErrorInfoStore.KEY_DIRECT_MESSAGES
|
||||
|
||||
private val loaderId: Int
|
||||
get() = tabId.toInt().coerceIn(0..Int.MAX_VALUE)
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
adapter.listener = this
|
||||
adapter.loadMoreSupportedPosition = ILoadMoreSupportAdapter.END
|
||||
loaderManager.initLoader(0, null, this)
|
||||
loaderManager.initLoader(loaderId, null, this)
|
||||
registerForContextMenu(recyclerView)
|
||||
}
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ class JobTaskService : JobService() {
|
|||
}
|
||||
|
||||
override fun onStartJob(params: JobParameters): Boolean {
|
||||
Log.d(LOGTAG, "LegacyTaskService received job $params")
|
||||
Log.d(LOGTAG, "JobTaskService received job $params")
|
||||
if (kPreferences[autoRefreshCompatibilityModeKey]) return false
|
||||
val action = getTaskAction(params.jobId) ?: return false
|
||||
return taskServiceRunner.runTask(action) {
|
||||
|
|
|
@ -763,7 +763,7 @@ Convertilu a un tuit normal amiesta una caráuter estra.</string>
|
|||
<string name="proxy_summary">Usa\'l proxy pa toles solicitúes de rede.</string>
|
||||
<string name="proxy_type">Triba de proxy</string>
|
||||
<string name="proxy_username">Nome d\'usuariu de Proxy</string>
|
||||
<string name="public_timeline">Llinia temporal pública</string>
|
||||
<string name="title_public_timeline">Llinia temporal pública</string>
|
||||
<string name="query">Consulta</string>
|
||||
<string name="quick_send">Primir «Enter» pa unviar</string>
|
||||
<string name="quick_send_summary">Únviase\'l tuit al primir «Enter».</string>
|
||||
|
|
|
@ -525,7 +525,7 @@
|
|||
<string name="proxy_summary">Utilitza el proxy per a totes les solicituds de xarxa.</string>
|
||||
<string name="proxy_type">Tipus de servidor intermediari</string>
|
||||
<string name="proxy_username">Nom d\'usuari del servidor intermediari</string>
|
||||
<string name="public_timeline">Cronologia pública</string>
|
||||
<string name="title_public_timeline">Cronologia pública</string>
|
||||
<string name="query">Consulta</string>
|
||||
<string name="quick_send">Premeu «Retorn» per enviar</string>
|
||||
<string name="quick_send_summary">Envia la piulada quan es premi «Retorn».</string>
|
||||
|
|
|
@ -282,7 +282,7 @@
|
|||
<string name="proxy_summary">Použít proxy server pro všechny síťové požadavky.</string>
|
||||
<string name="proxy_type">Typ proxy serveru</string>
|
||||
<string name="proxy_username">Uživatelské jméno serveru proxy</string>
|
||||
<string name="public_timeline">Veřejná časová osa</string>
|
||||
<string name="title_public_timeline">Veřejná časová osa</string>
|
||||
<string name="quick_send">Stisknout \"Enter\" pro odeslání</string>
|
||||
<string name="quote_format">Formát poznámky</string>
|
||||
<string name="quote_format_summary">\"[TEXT]\" = Text tweetu\n\"[NAME]\" = Jméno uživatele</string>
|
||||
|
|
|
@ -768,7 +768,7 @@
|
|||
<string name="proxy_summary">Proxy für alle Netzwerkanfragen verwenden.</string>
|
||||
<string name="proxy_type">Art des Proxys</string>
|
||||
<string name="proxy_username">Proxy Benutzername</string>
|
||||
<string name="public_timeline">Öffentliche Zeitleiste</string>
|
||||
<string name="title_public_timeline">Öffentliche Zeitleiste</string>
|
||||
<string name="query">Abfrage</string>
|
||||
<string name="quick_send">\"Enter\" zum Abschicken antippen</string>
|
||||
<string name="quick_send_summary">Tweet mit \"Enter\" abschicken.</string>
|
||||
|
|
|
@ -767,7 +767,7 @@
|
|||
<string name="proxy_summary">Usar proxy para todas las solicitudes de red.</string>
|
||||
<string name="proxy_type">Tipo de proxy</string>
|
||||
<string name="proxy_username">Nombre de usuario</string>
|
||||
<string name="public_timeline">Línea de tiempo pública</string>
|
||||
<string name="title_public_timeline">Línea de tiempo pública</string>
|
||||
<string name="query">Consulta</string>
|
||||
<string name="quick_send">Pulsa «Intro» para enviar</string>
|
||||
<string name="quick_send_summary">Enviar el tweet al pulsar \"Intro\".</string>
|
||||
|
|
|
@ -660,7 +660,7 @@
|
|||
<string name="proxy_summary">استفاده از پیشکار برای تمام درخواستهای شبکه.</string>
|
||||
<string name="proxy_type">گونهٔ پیشکار</string>
|
||||
<string name="proxy_username">نام کاربری پیشکار</string>
|
||||
<string name="public_timeline">خط زمانی عمومی</string>
|
||||
<string name="title_public_timeline">خط زمانی عمومی</string>
|
||||
<string name="query">پرسش</string>
|
||||
<string name="quick_send">فشردن «ورود» برای ارسال</string>
|
||||
<string name="quick_send_summary">هنگان زدن کلید «ورود»، توییت را ارسال میکند.</string>
|
||||
|
|
|
@ -517,7 +517,7 @@
|
|||
<string name="proxy_summary">Käytä välityspalvelinta kaikissa verkkoyhteyksissä.</string>
|
||||
<string name="proxy_type">Välityspalvelimen tyyppi</string>
|
||||
<string name="proxy_username">Välityspalvelimen käyttäjätunnus</string>
|
||||
<string name="public_timeline">Julkinen aikajana</string>
|
||||
<string name="title_public_timeline">Julkinen aikajana</string>
|
||||
<string name="query">Kysely</string>
|
||||
<string name="quick_send">Lähetä painamalla \"Enter\"</string>
|
||||
<string name="quick_send_summary">Lähetä twiitti, kun painetaan \"Enter\".</string>
|
||||
|
|
|
@ -764,7 +764,7 @@
|
|||
<string name="proxy_summary">Utiliser le proxy pour toutes les requêtes réseau.</string>
|
||||
<string name="proxy_type">Type de proxy</string>
|
||||
<string name="proxy_username">Nom d\'utilisateur pour le proxy</string>
|
||||
<string name="public_timeline">Fil d\'actualités public</string>
|
||||
<string name="title_public_timeline">Fil d\'actualités public</string>
|
||||
<string name="query">Requête</string>
|
||||
<string name="quick_send">Appuyez « Entrée » pour envoyer</string>
|
||||
<string name="quick_send_summary">Envoyer le tweet lorsqu\'on appuye sur « Entrée ».</string>
|
||||
|
|
|
@ -775,7 +775,7 @@
|
|||
<string name="proxy_summary">Usar proxy para todas as peticións de rede.</string>
|
||||
<string name="proxy_type">Tipo de proxy</string>
|
||||
<string name="proxy_username">Nome de usuario do proxy</string>
|
||||
<string name="public_timeline">Liña de tempo pública</string>
|
||||
<string name="title_public_timeline">Liña de tempo pública</string>
|
||||
<string name="query">Consulta</string>
|
||||
<string name="quick_send">Premer \"Enter\" para enviar</string>
|
||||
<string name="quick_send_summary">Enviar chío cando se preme o \"Enter\".</string>
|
||||
|
|
|
@ -532,7 +532,7 @@
|
|||
<string name="proxy_summary">Proxy használata minden hálózati eléréshez.</string>
|
||||
<string name="proxy_type">Proxy típusa</string>
|
||||
<string name="proxy_username">Proxy felhasználó név</string>
|
||||
<string name="public_timeline">Nyilvános idővonal</string>
|
||||
<string name="title_public_timeline">Nyilvános idővonal</string>
|
||||
<string name="query">Lekérdezés</string>
|
||||
<string name="quick_send">Nyomj \"Enter\"-t az elküldéshez</string>
|
||||
<string name="quick_send_summary">Tweet elküldése, ha \"Enter\"-t nyomsz.</string>
|
||||
|
|
|
@ -588,7 +588,7 @@
|
|||
<string name="proxy_summary">Gunakan proxy untuk semua permintaan jaringan.</string>
|
||||
<string name="proxy_type">Tipe proxy</string>
|
||||
<string name="proxy_username">Nama pengguna proxy</string>
|
||||
<string name="public_timeline">Linimasa publik</string>
|
||||
<string name="title_public_timeline">Linimasa publik</string>
|
||||
<string name="query">Menanyakan</string>
|
||||
<string name="quick_send">Tekan \"Enter\" untuk Mengirim</string>
|
||||
<string name="quick_send_summary">Kirim tweet saat menekan \"Enter\".</string>
|
||||
|
|
|
@ -514,7 +514,7 @@
|
|||
<string name="proxy_summary">Usa un proxy per tutte le connessioni di rete.</string>
|
||||
<string name="proxy_type">Tipo di proxy</string>
|
||||
<string name="proxy_username">Proxy username</string>
|
||||
<string name="public_timeline">Timeline pubblica</string>
|
||||
<string name="title_public_timeline">Timeline pubblica</string>
|
||||
<string name="query">Interroga</string>
|
||||
<string name="quick_send">Premi \"Invio\" per inviare</string>
|
||||
<string name="quick_send_summary">Inviare tweet alla pressione di \"Invio\".</string>
|
||||
|
|
|
@ -781,7 +781,7 @@
|
|||
<string name="proxy_summary">すべてのネットワーク要件においてプロキシを使用します。</string>
|
||||
<string name="proxy_type">プロキシの種類</string>
|
||||
<string name="proxy_username">プロキシのユーザー名</string>
|
||||
<string name="public_timeline">公開タイムライン</string>
|
||||
<string name="title_public_timeline">公開タイムライン</string>
|
||||
<string name="query">クエリ</string>
|
||||
<string name="quick_send">エンターキーで送信</string>
|
||||
<string name="quick_send_summary">エンターキーを押すと送信します。</string>
|
||||
|
|
|
@ -685,7 +685,7 @@
|
|||
<string name="proxy_summary">모든 네트워크 요청에 프록시를 사용합니다.</string>
|
||||
<string name="proxy_type">프록시 유형</string>
|
||||
<string name="proxy_username">프록시 사용자 이름</string>
|
||||
<string name="public_timeline">공개 타임라인</string>
|
||||
<string name="title_public_timeline">공개 타임라인</string>
|
||||
<string name="query">쿼리</string>
|
||||
<string name="quick_send">\"Enter\" 키를 눌러 보내기</string>
|
||||
<string name="quick_send_summary">\"Enter\" 키를 눌러 트윗을 보내세요.</string>
|
||||
|
|
|
@ -532,7 +532,7 @@
|
|||
<string name="proxy_summary">Gebruik proxy voor alle netwerkverkeer.</string>
|
||||
<string name="proxy_type">Proxy-type</string>
|
||||
<string name="proxy_username">Proxy gebruikersnaam</string>
|
||||
<string name="public_timeline">Publieke tijdlijn</string>
|
||||
<string name="title_public_timeline">Publieke tijdlijn</string>
|
||||
<string name="query">Vraag</string>
|
||||
<string name="quick_send">Druk op \"Enter\" om te versturen</string>
|
||||
<string name="quick_send_summary">Verstuur tweet met \"Enter\".</string>
|
||||
|
|
|
@ -529,7 +529,7 @@
|
|||
<string name="proxy_summary">Użyj serwera pośredniczącego do wszystkich żądań.</string>
|
||||
<string name="proxy_type">Typ serwera pośredniczącego</string>
|
||||
<string name="proxy_username">Nazwa użytkownika</string>
|
||||
<string name="public_timeline">Publiczna oś czasu</string>
|
||||
<string name="title_public_timeline">Publiczna oś czasu</string>
|
||||
<string name="query">Zapytanie</string>
|
||||
<string name="quick_send">\"Enter\" wysyła</string>
|
||||
<string name="quick_send_summary">Wyślij tweeta wciskając \"Enter\".</string>
|
||||
|
|
|
@ -571,7 +571,7 @@
|
|||
<string name="proxy_summary">Usar proxy para todas as requisições de rede.</string>
|
||||
<string name="proxy_type">Tipo de proxy</string>
|
||||
<string name="proxy_username">Nome de usuário do proxy</string>
|
||||
<string name="public_timeline">Timeline pública</string>
|
||||
<string name="title_public_timeline">Timeline pública</string>
|
||||
<string name="query">Pesquisar</string>
|
||||
<string name="quick_send">Apertar Enter para Enviar</string>
|
||||
<string name="quick_send_summary">Enviar tweet ao apertar \"Enter\".</string>
|
||||
|
|
|
@ -602,7 +602,7 @@
|
|||
<string name="proxy_summary">Проксировать все сетевые запросы.</string>
|
||||
<string name="proxy_type">Тип прокси</string>
|
||||
<string name="proxy_username">Логин прокси</string>
|
||||
<string name="public_timeline">Публичная лента</string>
|
||||
<string name="title_public_timeline">Публичная лента</string>
|
||||
<string name="query">Запрос</string>
|
||||
<string name="quick_send">Нажмите «Enter» для отправки</string>
|
||||
<string name="quick_send_summary">Отправлять твит по нажатию «Enter».</string>
|
||||
|
|
|
@ -774,7 +774,7 @@
|
|||
<string name="proxy_summary">ใช้ Proxy กับทุกการเชื่อมต่อ</string>
|
||||
<string name="proxy_type">รูปแบบ Proxy</string>
|
||||
<string name="proxy_username">Proxy username</string>
|
||||
<string name="public_timeline">หน้าหลักสาธารณะ</string>
|
||||
<string name="title_public_timeline">หน้าหลักสาธารณะ</string>
|
||||
<string name="query">สอบถาม</string>
|
||||
<string name="quick_send">ใช้ปุ่ม Enter เพื่อส่งทวีต</string>
|
||||
<string name="quick_send_summary">ส่งทวีตเมื่อกด Enter</string>
|
||||
|
|
|
@ -533,7 +533,7 @@
|
|||
<string name="proxy_summary">Tüm ağ istekleri için proxy kullanır.</string>
|
||||
<string name="proxy_type">Proxy türü</string>
|
||||
<string name="proxy_username">Proxy kullanıcı adı</string>
|
||||
<string name="public_timeline">Genel zaman çizelgesi</string>
|
||||
<string name="title_public_timeline">Genel zaman çizelgesi</string>
|
||||
<string name="query">Sorgu</string>
|
||||
<string name="quick_send">Göndermek İçin \"Enter\"a Basın</string>
|
||||
<string name="quick_send_summary">\"Enter\"a basıldığında tweet\'i gönder.</string>
|
||||
|
|
|
@ -534,7 +534,7 @@
|
|||
<string name="proxy_summary">Використовувати Http проксі для всіх мережевих запитів.</string>
|
||||
<string name="proxy_type">Тип проксі</string>
|
||||
<string name="proxy_username">Ім\'я користувача проксі</string>
|
||||
<string name="public_timeline">Публічна стрічка</string>
|
||||
<string name="title_public_timeline">Публічна стрічка</string>
|
||||
<string name="query">Запит</string>
|
||||
<string name="quick_send">Натисніть Enter для надсилання</string>
|
||||
<string name="quick_send_summary">Надсилати твіт натисканням Enter.</string>
|
||||
|
|
|
@ -775,7 +775,7 @@
|
|||
<string name="proxy_summary">为所有网络请求使用代理</string>
|
||||
<string name="proxy_type">代理服务器类型</string>
|
||||
<string name="proxy_username">代理服务器用户名</string>
|
||||
<string name="public_timeline">公共时间线</string>
|
||||
<string name="title_public_timeline">公共时间线</string>
|
||||
<string name="query">查询</string>
|
||||
<string name="quick_send">按“回车”发送</string>
|
||||
<string name="quick_send_summary">按“回车”发送推文</string>
|
||||
|
|
|
@ -778,7 +778,7 @@
|
|||
<string name="proxy_summary">為所有網絡請求使用代理</string>
|
||||
<string name="proxy_type">代理伺服器類型</string>
|
||||
<string name="proxy_username">代理伺服器帳號</string>
|
||||
<string name="public_timeline">公開時間軸</string>
|
||||
<string name="title_public_timeline">公開時間軸</string>
|
||||
<string name="query">查詢</string>
|
||||
<string name="quick_send">按「輸入」發送</string>
|
||||
<string name="quick_send_summary">按「輸入」發送推文</string>
|
||||
|
|
|
@ -778,7 +778,7 @@
|
|||
<string name="proxy_summary">為所有網絡請求使用代理</string>
|
||||
<string name="proxy_type">代理伺服器類型</string>
|
||||
<string name="proxy_username">代理伺服器帳號</string>
|
||||
<string name="public_timeline">公開時間軸</string>
|
||||
<string name="title_public_timeline">公開時間軸</string>
|
||||
<string name="query">查詢</string>
|
||||
<string name="quick_send">按「輸入」發送</string>
|
||||
<string name="quick_send_summary">按「輸入」發送推文</string>
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
<item
|
||||
android:id="@id/public_timeline"
|
||||
android:icon="@drawable/ic_action_quote"
|
||||
android:title="@string/public_timeline"/>
|
||||
android:title="@string/title_public_timeline"/>
|
||||
</group>
|
||||
<group
|
||||
android:id="@+id/app_menu"
|
||||
|
|
|
@ -848,12 +848,12 @@
|
|||
<string name="preference_summary_background_streaming">Press HOME instead of BACK to keep streaming open</string>
|
||||
<string name="preference_summary_chrome_custom_tab">Open links with in-app browser (Powered by Chrome)</string>
|
||||
<string name="preference_summary_database_item_limit">Upper limit of items stored in databases for each account, set to a smaller value to save space and increase loading speed.</string>
|
||||
<string name="preference_summary_favorite_confirmation">Show confirmation before favoriting a tweet</string>
|
||||
<string name="preference_summary_like_confirmation">Show confirmation before liking a tweet</string>
|
||||
<string name="preference_summary_media_preload_non_metered_network">Preload media only on free networks like Wi-Fi</string>
|
||||
<string name="preference_summary_streaming_non_metered_network">Streaming only on free networks like Wi-Fi</string>
|
||||
<string name="preference_summary_streaming_power_saving">Streaming only when charging</string>
|
||||
<string name="preference_summary_trends_location">Now you can set location separately in tab settings.</string>
|
||||
<string name="preference_summary_favorite_confirmation">Show confirmation before favoriting a tweet</string>
|
||||
<string name="preference_summary_like_confirmation">Show confirmation before liking a tweet</string>
|
||||
<string name="preference_title_accounts">Accounts</string>
|
||||
<string name="preference_title_advanced">Advanced</string>
|
||||
<string name="preference_title_auto_refresh_compatibility_mode">Compatibility mode</string>
|
||||
|
@ -934,8 +934,6 @@
|
|||
<string name="proxy_type">Proxy type</string>
|
||||
<string name="proxy_username">Proxy username</string>
|
||||
|
||||
<string name="public_timeline">Public timeline</string>
|
||||
|
||||
<string name="query">Query</string>
|
||||
|
||||
<string name="quick_send">Hit \"Enter\" to Send</string>
|
||||
|
@ -1204,11 +1202,13 @@
|
|||
<!-- [noun] Like, Formerly Twitter's favorite, in the plural -->
|
||||
<string name="title_likes">Likes</string>
|
||||
<string name="title_manage_filter_subscriptions">Filter subscriptions</string>
|
||||
<string name="title_media_timeline">Media timeline</string>
|
||||
<string name="title_mentions">Mentions</string>
|
||||
<string name="title_message_conversation_info">Conversation info</string>
|
||||
<string name="title_nicknames">Nicknames</string>
|
||||
<string name="title_open_source_license">Open source license</string>
|
||||
<string name="title_premium_features_name">Twidere ∞</string>
|
||||
<string name="title_public_timeline">Public timeline</string>
|
||||
<string name="title_quick_action">Quick action</string>
|
||||
<string name="title_retweet_quote_confirm">Retweet to your followers?</string>
|
||||
<string name="title_scheduled_statuses">Scheduled tweets</string>
|
||||
|
|
Loading…
Reference in New Issue