mirror of
https://github.com/TwidereProject/Twidere-Android
synced 2025-02-02 17:56:56 +01:00
fixed account activate state
cleaned up code
This commit is contained in:
parent
ecdc9ab2c4
commit
963ff1c3ca
@ -71,8 +71,6 @@ public interface TwidereDataStore {
|
||||
interface Accounts extends BaseColumns, AccountSupportColumns {
|
||||
|
||||
String TABLE_NAME = "accounts";
|
||||
String CONTENT_PATH = TABLE_NAME;
|
||||
Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, CONTENT_PATH);
|
||||
|
||||
/**
|
||||
* Login name of the account<br>
|
||||
|
@ -24,7 +24,7 @@ class StatusShortenerInterfaceTest {
|
||||
@Test
|
||||
@FlakyTest
|
||||
fun testConnection() {
|
||||
val context = InstrumentationRegistry.getTargetContext();
|
||||
val context = InstrumentationRegistry.getTargetContext()
|
||||
val application = context.applicationContext as Application
|
||||
val preferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE)
|
||||
val shortenerComponent = preferences.getString(TwidereConstants.KEY_STATUS_SHORTENER, null) ?: return
|
||||
|
@ -98,7 +98,6 @@ import org.mariotaku.twidere.model.UserKey;
|
||||
import org.mariotaku.twidere.model.message.UnreadCountUpdatedEvent;
|
||||
import org.mariotaku.twidere.model.util.ParcelableActivityUtils;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.AccountSupportColumns;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Activities;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedHashtags;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedImages;
|
||||
@ -131,8 +130,6 @@ import org.mariotaku.twidere.util.ReadStateManager;
|
||||
import org.mariotaku.twidere.util.SQLiteDatabaseWrapper;
|
||||
import org.mariotaku.twidere.util.SQLiteDatabaseWrapper.LazyLoadCallback;
|
||||
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
|
||||
import org.mariotaku.twidere.util.TwidereArrayUtils;
|
||||
import org.mariotaku.twidere.util.TwidereListUtils;
|
||||
import org.mariotaku.twidere.util.TwidereQueryBuilder.CachedUsersQueryBuilder;
|
||||
import org.mariotaku.twidere.util.TwidereQueryBuilder.ConversationQueryBuilder;
|
||||
import org.mariotaku.twidere.util.UriExtraUtils;
|
||||
@ -149,8 +146,6 @@ import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.net.InetAddress;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -991,29 +986,6 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
||||
throw new SecurityException("Access preferences requires level PERMISSION_LEVEL_PREFERENCES");
|
||||
break;
|
||||
}
|
||||
case TABLE_ID_ACCOUNTS: {
|
||||
// Reading some information like user_id, screen_name etc is
|
||||
// okay, but reading columns like password requires higher
|
||||
// permission level.
|
||||
if (checkPermission(PERMISSION_ACCOUNTS)) {
|
||||
break;
|
||||
}
|
||||
// Only querying basic information
|
||||
if (TwidereArrayUtils.contains(Accounts.COLUMNS_NO_CREDENTIALS, projection) && !checkPermission(PERMISSION_READ)) {
|
||||
final String pkgName = mPermissionsManager.getPackageNameByUid(Binder.getCallingUid());
|
||||
throw new SecurityException("Access database " + table + " requires level PERMISSION_LEVEL_READ, package: " + pkgName);
|
||||
}
|
||||
final String pkgName = mPermissionsManager.getPackageNameByUid(Binder.getCallingUid());
|
||||
final List<String> callingSensitiveCols = new ArrayList<>();
|
||||
if (projection != null) {
|
||||
Collections.addAll(callingSensitiveCols, projection);
|
||||
callingSensitiveCols.removeAll(Arrays.asList(Accounts.COLUMNS_NO_CREDENTIALS));
|
||||
} else {
|
||||
callingSensitiveCols.add("*");
|
||||
}
|
||||
throw new SecurityException("Access column " + TwidereListUtils.toString(callingSensitiveCols, ',', true)
|
||||
+ " in database accounts requires level PERMISSION_LEVEL_ACCOUNTS, package: " + pkgName);
|
||||
}
|
||||
case TABLE_ID_DIRECT_MESSAGES:
|
||||
case TABLE_ID_DIRECT_MESSAGES_INBOX:
|
||||
case TABLE_ID_DIRECT_MESSAGES_OUTBOX:
|
||||
@ -1052,14 +1024,6 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
||||
private void checkWritePermission(final int id, final String table) {
|
||||
if (Binder.getCallingPid() == Process.myPid()) return;
|
||||
switch (id) {
|
||||
case TABLE_ID_ACCOUNTS: {
|
||||
// Writing to accounts database is not allowed for third-party
|
||||
// applications.
|
||||
if (!mPermissionsManager.checkSignature(Binder.getCallingUid()))
|
||||
throw new SecurityException(
|
||||
"Writing to accounts database is not allowed for third-party applications");
|
||||
break;
|
||||
}
|
||||
case TABLE_ID_DIRECT_MESSAGES:
|
||||
case TABLE_ID_DIRECT_MESSAGES_INBOX:
|
||||
case TABLE_ID_DIRECT_MESSAGES_OUTBOX:
|
||||
@ -1223,14 +1187,7 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
||||
|
||||
private void onDatabaseUpdated(final int tableId, final Uri uri) {
|
||||
if (uri == null) return;
|
||||
switch (tableId) {
|
||||
case TABLE_ID_ACCOUNTS: {
|
||||
DataStoreUtils.clearAccountName();
|
||||
break;
|
||||
}
|
||||
}
|
||||
notifyContentObserver(Utils.getNotificationUri(tableId, uri));
|
||||
|
||||
}
|
||||
|
||||
private void onNewItemsInserted(final Uri uri, final int tableId, final ContentValues values) {
|
||||
|
@ -68,7 +68,6 @@ import org.mariotaku.twidere.model.tab.extra.TabExtras;
|
||||
import org.mariotaku.twidere.model.util.AccountUtils;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.AccountSupportColumns;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Activities;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.CacheFiles;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedHashtags;
|
||||
@ -114,8 +113,6 @@ public class DataStoreUtils implements Constants {
|
||||
private static Map<UserKey, String> sAccountNames = new HashMap<>();
|
||||
|
||||
static {
|
||||
CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, Accounts.CONTENT_PATH,
|
||||
TABLE_ID_ACCOUNTS);
|
||||
CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, Statuses.CONTENT_PATH,
|
||||
TABLE_ID_STATUSES);
|
||||
CONTENT_PROVIDER_URI_MATCHER.addURI(TwidereDataStore.AUTHORITY, Activities.AboutMe.CONTENT_PATH,
|
||||
@ -549,8 +546,6 @@ public class DataStoreUtils implements Constants {
|
||||
|
||||
public static String getTableNameById(final int id) {
|
||||
switch (id) {
|
||||
case TwidereConstants.TABLE_ID_ACCOUNTS:
|
||||
return Accounts.TABLE_NAME;
|
||||
case TwidereConstants.TABLE_ID_STATUSES:
|
||||
return Statuses.TABLE_NAME;
|
||||
case TwidereConstants.TABLE_ID_ACTIVITIES_ABOUT_ME:
|
||||
|
@ -356,7 +356,7 @@ public class CompactHashSet<E> extends java.util.AbstractSet<E> {
|
||||
offset = 2;
|
||||
}
|
||||
|
||||
newObjects[index] = (E) o;
|
||||
newObjects[index] = o;
|
||||
}
|
||||
|
||||
objects = newObjects;
|
||||
|
@ -1864,7 +1864,7 @@ class ComposeActivity : BaseActivity(), OnMenuItemClickListener, OnClickListener
|
||||
private class PreviewGridOnStartDragListener(private val activity: ComposeActivity) : SimpleItemTouchHelperCallback.OnStartDragListener {
|
||||
|
||||
override fun onStartDrag(viewHolder: ViewHolder) {
|
||||
val helper = activity.itemTouchHelper ?: return
|
||||
val helper = activity.itemTouchHelper
|
||||
helper.startDrag(viewHolder)
|
||||
}
|
||||
}
|
||||
|
@ -19,19 +19,19 @@
|
||||
|
||||
package org.mariotaku.twidere.activity
|
||||
|
||||
import android.accounts.Account
|
||||
import android.accounts.AccountManager
|
||||
import android.accounts.OnAccountsUpdateListener
|
||||
import android.app.PendingIntent
|
||||
import android.app.SearchManager
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
|
||||
import android.content.res.Configuration
|
||||
import android.database.ContentObserver
|
||||
import android.graphics.Rect
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.net.Uri
|
||||
import android.os.AsyncTask
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.preference.PreferenceActivity
|
||||
import android.support.annotation.StringRes
|
||||
import android.support.v4.app.Fragment
|
||||
@ -76,7 +76,8 @@ import org.mariotaku.twidere.model.Tab
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.message.TaskStateChangedEvent
|
||||
import org.mariotaku.twidere.model.message.UnreadCountUpdatedEvent
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.*
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Activities
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||
import org.mariotaku.twidere.service.StreamingService
|
||||
import org.mariotaku.twidere.util.*
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback
|
||||
@ -85,9 +86,7 @@ import org.mariotaku.twidere.view.TabPagerIndicator
|
||||
|
||||
class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, SupportFragmentCallback, OnLongClickListener, DrawerLayout.DrawerListener {
|
||||
|
||||
private val handler = Handler()
|
||||
|
||||
private val accountChangeObserver = AccountChangeObserver(this, handler)
|
||||
private val accountChangeObserver = AccountChangeObserver(this)
|
||||
|
||||
private var selectedAccountToSearch: AccountDetails? = null
|
||||
private var tabColumns: Int = 0
|
||||
@ -95,12 +94,14 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
|
||||
private lateinit var multiSelectHandler: MultiSelectEventHandler
|
||||
|
||||
private var pagerAdapter: SupportTabsAdapter? = null
|
||||
private lateinit var pagerAdapter: SupportTabsAdapter
|
||||
|
||||
private lateinit var drawerToggle: ActionBarDrawerToggle
|
||||
|
||||
private var updateUnreadCountTask: UpdateUnreadCountTask? = null
|
||||
private val readStateChangeListener = OnSharedPreferenceChangeListener { sharedPreferences, key -> updateUnreadCount() }
|
||||
private val controlBarShowHideHelper = IControlBarActivity.ControlBarShowHideHelper(this)
|
||||
private lateinit var drawerToggle: ActionBarDrawerToggle
|
||||
|
||||
private val homeDrawerToggleDelegate = object : ActionBarDrawerToggle.Delegate {
|
||||
override fun setActionBarUpIndicator(upDrawable: Drawable, @StringRes contentDescRes: Int) {
|
||||
drawerToggleButton.setImageDrawable(upDrawable)
|
||||
@ -120,7 +121,7 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
}
|
||||
|
||||
override fun getActionBarThemedContext(): Context {
|
||||
return toolbar!!.context
|
||||
return toolbar.context
|
||||
}
|
||||
|
||||
override fun isNavigationVisible(): Boolean {
|
||||
@ -138,13 +139,13 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
|
||||
override val currentVisibleFragment: Fragment?
|
||||
get() {
|
||||
val currentItem = mainPager!!.currentItem
|
||||
if (currentItem < 0 || currentItem >= pagerAdapter!!.count) return null
|
||||
return pagerAdapter!!.instantiateItem(mainPager, currentItem) as Fragment
|
||||
val currentItem = mainPager.currentItem
|
||||
if (currentItem < 0 || currentItem >= pagerAdapter.count) return null
|
||||
return pagerAdapter.instantiateItem(mainPager, currentItem) as Fragment
|
||||
}
|
||||
|
||||
override fun triggerRefresh(position: Int): Boolean {
|
||||
val f = pagerAdapter!!.instantiateItem(mainPager, position) as Fragment
|
||||
val f = pagerAdapter.instantiateItem(mainPager, position) as Fragment
|
||||
if (f.activity == null || f.isDetached) return false
|
||||
if (f !is RefreshScrollTopInterface) return false
|
||||
return f.triggerRefresh()
|
||||
@ -221,29 +222,29 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
if (action != null) {
|
||||
when (action) {
|
||||
KeyboardShortcutConstants.ACTION_NAVIGATION_PREVIOUS_TAB -> {
|
||||
val previous = mainPager!!.currentItem - 1
|
||||
val previous = mainPager.currentItem - 1
|
||||
if (previous < 0 && DrawerLayoutAccessor.findDrawerWithGravity(homeMenu, Gravity.START) != null) {
|
||||
homeMenu.openDrawer(GravityCompat.START)
|
||||
setControlBarVisibleAnimate(true)
|
||||
} else if (previous < pagerAdapter!!.count) {
|
||||
} else if (previous < pagerAdapter.count) {
|
||||
if (homeMenu.isDrawerOpen(GravityCompat.END)) {
|
||||
homeMenu.closeDrawers()
|
||||
} else {
|
||||
mainPager!!.setCurrentItem(previous, true)
|
||||
mainPager.setCurrentItem(previous, true)
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
KeyboardShortcutConstants.ACTION_NAVIGATION_NEXT_TAB -> {
|
||||
val next = mainPager!!.currentItem + 1
|
||||
if (next >= pagerAdapter!!.count && DrawerLayoutAccessor.findDrawerWithGravity(homeMenu, Gravity.END) != null) {
|
||||
val next = mainPager.currentItem + 1
|
||||
if (next >= pagerAdapter.count && DrawerLayoutAccessor.findDrawerWithGravity(homeMenu, Gravity.END) != null) {
|
||||
homeMenu.openDrawer(GravityCompat.END)
|
||||
setControlBarVisibleAnimate(true)
|
||||
} else if (next >= 0) {
|
||||
if (homeMenu.isDrawerOpen(GravityCompat.START)) {
|
||||
homeMenu.closeDrawers()
|
||||
} else {
|
||||
mainPager!!.setCurrentItem(next, true)
|
||||
mainPager.setCurrentItem(next, true)
|
||||
}
|
||||
}
|
||||
return true
|
||||
@ -267,18 +268,16 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
|
||||
when (keyCode) {
|
||||
KeyEvent.KEYCODE_MENU -> {
|
||||
val drawer = homeMenu
|
||||
if (isDrawerOpen) {
|
||||
drawer!!.closeDrawers()
|
||||
homeMenu.closeDrawers()
|
||||
} else {
|
||||
drawer!!.openDrawer(GravityCompat.START)
|
||||
homeMenu.openDrawer(GravityCompat.START)
|
||||
}
|
||||
return true
|
||||
}
|
||||
KeyEvent.KEYCODE_BACK -> {
|
||||
val drawer = homeMenu
|
||||
if (isDrawerOpen) {
|
||||
drawer!!.closeDrawers()
|
||||
homeMenu.closeDrawers()
|
||||
return true
|
||||
}
|
||||
}
|
||||
@ -328,9 +327,9 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
|
||||
drawerToggle = ActionBarDrawerToggle(this, homeMenu, R.string.open_accounts_dashboard,
|
||||
R.string.close_accounts_dashboard)
|
||||
homeContent!!.setOnFitSystemWindowsListener(this)
|
||||
homeContent.setOnFitSystemWindowsListener(this)
|
||||
pagerAdapter = SupportTabsAdapter(this, supportFragmentManager, mainTabs, tabColumns)
|
||||
mainPager!!.adapter = pagerAdapter
|
||||
mainPager.adapter = pagerAdapter
|
||||
mainTabs.setViewPager(mainPager)
|
||||
mainTabs.setOnPageChangeListener(this)
|
||||
mainTabs.setColumns(tabColumns)
|
||||
@ -390,8 +389,7 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
multiSelectHandler.dispatchOnStart()
|
||||
val resolver = contentResolver
|
||||
resolver.registerContentObserver(Accounts.CONTENT_URI, true, accountChangeObserver)
|
||||
AccountManager.get(this).addOnAccountsUpdatedListener(accountChangeObserver, null, false)
|
||||
bus.register(this)
|
||||
|
||||
readStateManager.registerOnSharedPreferenceChangeListener(readStateChangeListener)
|
||||
@ -404,17 +402,12 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
updateActionsButton()
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
multiSelectHandler.dispatchOnStop()
|
||||
readStateManager.unregisterOnSharedPreferenceChangeListener(readStateChangeListener)
|
||||
bus.unregister(this)
|
||||
val resolver = contentResolver
|
||||
resolver.unregisterContentObserver(accountChangeObserver)
|
||||
preferences.edit().putInt(SharedPreferenceConstants.KEY_SAVED_TAB_POSITION, mainPager!!.currentItem).apply()
|
||||
AccountManager.get(this).removeOnAccountsUpdatedListener(accountChangeObserver)
|
||||
preferences.edit().putInt(SharedPreferenceConstants.KEY_SAVED_TAB_POSITION, mainPager.currentItem).apply()
|
||||
|
||||
super.onStop()
|
||||
}
|
||||
@ -504,18 +497,18 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
if (mainTabs == null || updateUnreadCountTask != null && updateUnreadCountTask!!.status == AsyncTask.Status.RUNNING)
|
||||
return
|
||||
updateUnreadCountTask = UpdateUnreadCountTask(this, readStateManager, mainTabs,
|
||||
pagerAdapter!!.tabs.toTypedArray())
|
||||
pagerAdapter.tabs.toTypedArray())
|
||||
AsyncTaskUtils.executeTask<UpdateUnreadCountTask, Any>(updateUnreadCountTask)
|
||||
mainTabs.setDisplayBadge(preferences.getBoolean(SharedPreferenceConstants.KEY_UNREAD_COUNT, true))
|
||||
}
|
||||
|
||||
val tabs: List<SupportTabSpec>
|
||||
get() = pagerAdapter!!.tabs
|
||||
get() = pagerAdapter.tabs
|
||||
|
||||
override fun onNewIntent(intent: Intent) {
|
||||
val tabPosition = handleIntent(intent, false, false)
|
||||
if (tabPosition >= 0) {
|
||||
mainPager!!.currentItem = TwidereMathUtils.clamp(tabPosition, pagerAdapter!!.count, 0)
|
||||
mainPager.currentItem = TwidereMathUtils.clamp(tabPosition, pagerAdapter.count, 0)
|
||||
}
|
||||
}
|
||||
|
||||
@ -559,7 +552,7 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
return 1 - actionsButton.translationY / total
|
||||
}
|
||||
val totalHeight = controlBarHeight.toFloat()
|
||||
return 1 + toolbar!!.translationY / totalHeight
|
||||
return 1 + toolbar.translationY / totalHeight
|
||||
}
|
||||
|
||||
override fun setControlBarOffset(offset: Float) {
|
||||
@ -676,7 +669,7 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
var initialTab = -1
|
||||
if (tabType != null) {
|
||||
val accountKey = uri?.getQueryParameter(QUERY_PARAM_ACCOUNT_KEY)?.convert(UserKey::valueOf)
|
||||
val adapter = pagerAdapter!!
|
||||
val adapter = pagerAdapter
|
||||
for (i in 0 until adapter.count) {
|
||||
val tab = adapter.getTab(i)
|
||||
if (tabType == Tab.getTypeAlias(tab.type)) {
|
||||
@ -730,10 +723,10 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
private fun setTabPosition(initialTab: Int) {
|
||||
val rememberPosition = preferences.getBoolean(SharedPreferenceConstants.KEY_REMEMBER_POSITION, true)
|
||||
if (initialTab >= 0) {
|
||||
mainPager!!.currentItem = TwidereMathUtils.clamp(initialTab, pagerAdapter!!.count, 0)
|
||||
mainPager.currentItem = TwidereMathUtils.clamp(initialTab, pagerAdapter.count, 0)
|
||||
} else if (rememberPosition) {
|
||||
val position = preferences.getInt(SharedPreferenceConstants.KEY_SAVED_TAB_POSITION, 0)
|
||||
mainPager!!.currentItem = TwidereMathUtils.clamp(position, pagerAdapter!!.count, 0)
|
||||
mainPager.currentItem = TwidereMathUtils.clamp(position, pagerAdapter.count, 0)
|
||||
}
|
||||
}
|
||||
|
||||
@ -745,11 +738,11 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
}
|
||||
|
||||
private fun setupHomeTabs() {
|
||||
pagerAdapter!!.clear()
|
||||
pagerAdapter!!.addTabs(CustomTabUtils.getHomeTabs(this))
|
||||
val hasNoTab = pagerAdapter!!.count == 0
|
||||
pagerAdapter.clear()
|
||||
pagerAdapter.addTabs(CustomTabUtils.getHomeTabs(this))
|
||||
val hasNoTab = pagerAdapter.count == 0
|
||||
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
|
||||
// mViewPager.setOffscreenPageLimit(mPagerAdapter.getCount() / 2);
|
||||
}
|
||||
|
||||
@ -784,10 +777,9 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
}
|
||||
|
||||
private fun triggerActionsClick() {
|
||||
if (mainPager == null || pagerAdapter == null) return
|
||||
val position = mainPager!!.currentItem
|
||||
if (pagerAdapter!!.count == 0) return
|
||||
val tab = pagerAdapter!!.getTab(position)
|
||||
val position = mainPager.currentItem
|
||||
if (pagerAdapter.count == 0) return
|
||||
val tab = pagerAdapter.getTab(position)
|
||||
if (DirectMessagesFragment::class.java == tab.cls) {
|
||||
IntentUtils.openMessageConversation(this, null, null)
|
||||
} else if (MessagesEntriesFragment::class.java == tab.cls) {
|
||||
@ -800,12 +792,11 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
}
|
||||
|
||||
private fun updateActionsButton() {
|
||||
if (mainPager == null || pagerAdapter == null) return
|
||||
val icon: Int
|
||||
val title: Int
|
||||
val position = mainPager!!.currentItem
|
||||
if (pagerAdapter!!.count == 0) return
|
||||
val tab = pagerAdapter!!.getTab(position)
|
||||
val position = mainPager.currentItem
|
||||
if (pagerAdapter.count == 0) return
|
||||
val tab = pagerAdapter.getTab(position)
|
||||
if (DirectMessagesFragment::class.java == tab.cls) {
|
||||
icon = R.drawable.ic_action_add
|
||||
title = R.string.new_direct_message
|
||||
@ -823,15 +814,11 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
||||
actionsButton.contentDescription = getString(title)
|
||||
}
|
||||
|
||||
private class AccountChangeObserver(private val mActivity: HomeActivity, handler: Handler) : ContentObserver(handler) {
|
||||
private class AccountChangeObserver(private val activity: HomeActivity) : OnAccountsUpdateListener {
|
||||
|
||||
override fun onChange(selfChange: Boolean) {
|
||||
onChange(selfChange, null)
|
||||
}
|
||||
|
||||
override fun onChange(selfChange: Boolean, uri: Uri?) {
|
||||
mActivity.notifyAccountsChanged()
|
||||
mActivity.updateUnreadCount()
|
||||
override fun onAccountsUpdated(accounts: Array<out Account>?) {
|
||||
activity.notifyAccountsChanged()
|
||||
activity.updateUnreadCount()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -81,7 +81,7 @@ class PlusServiceDashboardActivity : BaseActivity() {
|
||||
override fun loadInBackground(): List<ResolveInfo> {
|
||||
val context = context
|
||||
val intent = Intent(INTENT_ACTION_PLUS_SERVICE_SIGN_IN)
|
||||
intent.setPackage(context.packageName)
|
||||
intent.`package` = context.packageName
|
||||
val pm = context.packageManager
|
||||
return pm.queryIntentActivities(intent, PackageManager.GET_META_DATA)
|
||||
}
|
||||
|
@ -116,7 +116,7 @@ abstract class AbsActivitiesFragment protected constructor() : AbsContentListRec
|
||||
private val onScrollListener = object : OnScrollListener() {
|
||||
override fun onScrollStateChanged(recyclerView: RecyclerView?, newState: Int) {
|
||||
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
|
||||
val layoutManager = layoutManager ?: return
|
||||
val layoutManager = layoutManager
|
||||
saveReadPosition(layoutManager.findFirstVisibleItemPosition())
|
||||
}
|
||||
}
|
||||
@ -147,7 +147,7 @@ abstract class AbsActivitiesFragment protected constructor() : AbsContentListRec
|
||||
position = recyclerView!!.getChildLayoutPosition(focusedChild)
|
||||
}
|
||||
if (position != RecyclerView.NO_POSITION) {
|
||||
val activity = adapter!!.getActivity(position) ?: return false
|
||||
val activity = adapter.getActivity(position) ?: return false
|
||||
if (keyCode == KeyEvent.KEYCODE_ENTER) {
|
||||
openActivity(activity)
|
||||
return true
|
||||
@ -233,11 +233,11 @@ abstract class AbsActivitiesFragment protected constructor() : AbsContentListRec
|
||||
val tag = currentReadPositionTag
|
||||
val layoutManager = layoutManager
|
||||
if (readFromBottom) {
|
||||
lastVisiblePos = layoutManager!!.findLastVisibleItemPosition()
|
||||
lastVisiblePos = layoutManager.findLastVisibleItemPosition()
|
||||
} else {
|
||||
lastVisiblePos = layoutManager!!.findFirstVisibleItemPosition()
|
||||
lastVisiblePos = layoutManager.findFirstVisibleItemPosition()
|
||||
}
|
||||
if (lastVisiblePos != RecyclerView.NO_POSITION && lastVisiblePos < adapter!!.itemCount) {
|
||||
if (lastVisiblePos != RecyclerView.NO_POSITION && lastVisiblePos < adapter.itemCount) {
|
||||
val activityStartIndex = adapter.activityStartIndex
|
||||
val activityEndIndex = activityStartIndex + adapter.activityCount
|
||||
val lastItemIndex = Math.min(activityEndIndex, lastVisiblePos)
|
||||
@ -251,7 +251,7 @@ abstract class AbsActivitiesFragment protected constructor() : AbsContentListRec
|
||||
lastReadId = -1
|
||||
lastVisibleTop = 0
|
||||
}
|
||||
adapter!!.setData(data)
|
||||
adapter.setData(data)
|
||||
val activityStartIndex = adapter.activityStartIndex
|
||||
// The last activity is activityEndExclusiveIndex - 1
|
||||
val activityEndExclusiveIndex = activityStartIndex + adapter.activityCount
|
||||
@ -304,7 +304,7 @@ abstract class AbsActivitiesFragment protected constructor() : AbsContentListRec
|
||||
}
|
||||
|
||||
override fun onGapClick(holder: GapViewHolder, position: Int) {
|
||||
val activity = adapter?.getActivity(position) ?: return
|
||||
val activity = adapter.getActivity(position) ?: return
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.v(TwidereConstants.LOGTAG, "Load activity gap $activity")
|
||||
}
|
||||
@ -315,7 +315,7 @@ abstract class AbsActivitiesFragment protected constructor() : AbsContentListRec
|
||||
}
|
||||
|
||||
override fun onMediaClick(holder: IStatusViewHolder, view: View, media: ParcelableMedia, position: Int) {
|
||||
val adapter = adapter ?: return
|
||||
val adapter = adapter
|
||||
val status = adapter.getActivity(position)?.getActivityStatus() ?: return
|
||||
IntentUtils.openMedia(activity, status, media, null, preferences.getBoolean(KEY_NEW_DOCUMENT_API))
|
||||
// BEGIN HotMobi
|
||||
@ -350,7 +350,7 @@ abstract class AbsActivitiesFragment protected constructor() : AbsContentListRec
|
||||
}
|
||||
|
||||
override fun onActivityClick(holder: ActivityTitleSummaryViewHolder, position: Int) {
|
||||
val activity = adapter!!.getActivity(position) ?: return
|
||||
val activity = adapter.getActivity(position) ?: return
|
||||
val list = ArrayList<Parcelable>()
|
||||
if (activity.target_object_statuses?.isNotEmpty() ?: false) {
|
||||
list.addAll(activity.target_object_statuses)
|
||||
@ -363,7 +363,7 @@ abstract class AbsActivitiesFragment protected constructor() : AbsContentListRec
|
||||
|
||||
override fun onStatusMenuClick(holder: IStatusViewHolder, menuView: View, position: Int) {
|
||||
if (activity == null) return
|
||||
val lm = layoutManager ?: return
|
||||
val lm = layoutManager
|
||||
val view = lm.findViewByPosition(position) ?: return
|
||||
if (lm.getItemViewType(view) != ITEM_VIEW_TYPE_STATUS) {
|
||||
return
|
||||
@ -377,7 +377,7 @@ abstract class AbsActivitiesFragment protected constructor() : AbsContentListRec
|
||||
}
|
||||
|
||||
private fun getActivityStatus(position: Int): ParcelableStatus? {
|
||||
return adapter?.getActivity(position)?.getActivityStatus()
|
||||
return adapter.getActivity(position)?.getActivityStatus()
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
@ -437,9 +437,9 @@ abstract class AbsActivitiesFragment protected constructor() : AbsContentListRec
|
||||
scrollListener!!.reversed = preferences.getBoolean(KEY_READ_FROM_BOTTOM)
|
||||
val adapter = adapter
|
||||
val layoutManager = layoutManager
|
||||
adapter!!.setListener(this)
|
||||
adapter.setListener(this)
|
||||
registerForContextMenu(recyclerView)
|
||||
navigationHelper = RecyclerViewNavigationHelper(recyclerView, layoutManager!!, adapter,
|
||||
navigationHelper = RecyclerViewNavigationHelper(recyclerView, layoutManager, adapter,
|
||||
this)
|
||||
pauseOnScrollListener = PauseRecyclerViewOnScrollListener(adapter.mediaLoader.imageLoader, false, true)
|
||||
|
||||
@ -453,8 +453,8 @@ abstract class AbsActivitiesFragment protected constructor() : AbsContentListRec
|
||||
get() {
|
||||
val lm = layoutManager
|
||||
val adapter = adapter
|
||||
val lastPosition = lm!!.findLastCompletelyVisibleItemPosition()
|
||||
val itemCount = adapter!!.itemCount
|
||||
val lastPosition = lm.findLastCompletelyVisibleItemPosition()
|
||||
val itemCount = adapter.itemCount
|
||||
var finalPos = itemCount - 1
|
||||
for (i in lastPosition + 1..itemCount - 1) {
|
||||
if (adapter.getItemViewType(i) != ParcelableActivitiesAdapter.ITEM_VIEW_TYPE_EMPTY) {
|
||||
@ -476,7 +476,7 @@ abstract class AbsActivitiesFragment protected constructor() : AbsContentListRec
|
||||
|
||||
protected val adapterData: List<ParcelableActivity>?
|
||||
get() {
|
||||
return adapter?.getData()
|
||||
return adapter.getData()
|
||||
}
|
||||
|
||||
protected open val readPositionTag: String?
|
||||
@ -493,7 +493,7 @@ abstract class AbsActivitiesFragment protected constructor() : AbsContentListRec
|
||||
protected fun saveReadPosition(position: Int) {
|
||||
if (host == null) return
|
||||
if (position == RecyclerView.NO_POSITION) return
|
||||
val item = adapter!!.getActivity(position) ?: return
|
||||
val item = adapter.getActivity(position) ?: return
|
||||
var positionUpdated = false
|
||||
readPositionTag?.let {
|
||||
for (accountKey in accountKeys) {
|
||||
@ -524,7 +524,7 @@ abstract class AbsActivitiesFragment protected constructor() : AbsContentListRec
|
||||
val inflater = MenuInflater(context)
|
||||
val contextMenuInfo = menuInfo as ExtendedRecyclerView.ContextMenuInfo?
|
||||
val position = contextMenuInfo!!.position
|
||||
when (adapter!!.getItemViewType(position)) {
|
||||
when (adapter.getItemViewType(position)) {
|
||||
ITEM_VIEW_TYPE_STATUS -> {
|
||||
val status = getActivityStatus(position) ?: return
|
||||
inflater.inflate(R.menu.action_status, menu)
|
||||
@ -540,7 +540,7 @@ abstract class AbsActivitiesFragment protected constructor() : AbsContentListRec
|
||||
val contextMenuInfo = item!!.menuInfo as ExtendedRecyclerView.ContextMenuInfo
|
||||
val position = contextMenuInfo.position
|
||||
|
||||
when (adapter!!.getItemViewType(position)) {
|
||||
when (adapter.getItemViewType(position)) {
|
||||
ITEM_VIEW_TYPE_STATUS -> {
|
||||
val status = getActivityStatus(position) ?: return false
|
||||
if (item.itemId == R.id.share) {
|
||||
@ -559,7 +559,7 @@ abstract class AbsActivitiesFragment protected constructor() : AbsContentListRec
|
||||
|
||||
override fun createItemDecoration(context: Context, recyclerView: RecyclerView,
|
||||
layoutManager: LinearLayoutManager): RecyclerView.ItemDecoration? {
|
||||
val adapter = adapter!!
|
||||
val adapter = adapter
|
||||
val itemDecoration = object : DividerItemDecoration(context,
|
||||
(recyclerView.layoutManager as LinearLayoutManager).orientation) {
|
||||
override fun isDividerEnabled(childPos: Int): Boolean {
|
||||
@ -602,7 +602,7 @@ abstract class AbsActivitiesFragment protected constructor() : AbsContentListRec
|
||||
|
||||
@Subscribe
|
||||
fun notifyStatusListChanged(event: StatusListChangedEvent) {
|
||||
adapter!!.notifyDataSetChanged()
|
||||
adapter.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -51,7 +51,7 @@ abstract class AbsContentListRecyclerViewFragment<A : LoadMoreSupportAdapter<Rec
|
||||
}
|
||||
|
||||
override fun scrollToPositionWithOffset(position: Int, offset: Int) {
|
||||
layoutManager?.scrollToPositionWithOffset(0, 0)
|
||||
layoutManager.scrollToPositionWithOffset(0, 0)
|
||||
}
|
||||
|
||||
override fun onCreateLayoutManager(context: Context): LinearLayoutManager {
|
||||
@ -60,13 +60,13 @@ abstract class AbsContentListRecyclerViewFragment<A : LoadMoreSupportAdapter<Rec
|
||||
|
||||
override val reachingEnd: Boolean
|
||||
get() {
|
||||
val lm = layoutManager ?: return false
|
||||
val lm = layoutManager
|
||||
return lm.findLastCompletelyVisibleItemPosition() >= lm.itemCount - 1
|
||||
}
|
||||
|
||||
override val reachingStart: Boolean
|
||||
get() {
|
||||
val lm = layoutManager ?: return false
|
||||
val lm = layoutManager
|
||||
return lm.findFirstCompletelyVisibleItemPosition() <= 0
|
||||
}
|
||||
|
||||
|
@ -46,9 +46,10 @@ import org.mariotaku.twidere.view.iface.IExtendedView
|
||||
abstract class AbsContentRecyclerViewFragment<A : LoadMoreSupportAdapter<RecyclerView.ViewHolder>, L : RecyclerView.LayoutManager> : BaseSupportFragment(), SwipeRefreshLayout.OnRefreshListener, HeaderDrawerLayout.DrawerCallback, RefreshScrollTopInterface, IControlBarActivity.ControlBarOffsetListener, ContentScrollHandler.ContentListSupport, ControlBarShowHideHelper.ControlBarAnimationListener {
|
||||
|
||||
|
||||
var layoutManager: L? = null
|
||||
private set
|
||||
override var adapter: A? = null
|
||||
lateinit var layoutManager: L
|
||||
protected set
|
||||
override lateinit var adapter: A
|
||||
protected set
|
||||
var itemDecoration: ItemDecoration? = null
|
||||
private set
|
||||
|
||||
@ -110,7 +111,7 @@ abstract class AbsContentRecyclerViewFragment<A : LoadMoreSupportAdapter<Recycle
|
||||
val activity = activity
|
||||
if (activity is IControlBarActivity) {
|
||||
//TODO hide only if top > actionBar.height
|
||||
val manager = layoutManager!!
|
||||
val manager = layoutManager
|
||||
if (manager.childCount == 0) return
|
||||
val firstView = manager.getChildAt(0)
|
||||
if (manager.getPosition(firstView) != 0) {
|
||||
@ -138,7 +139,7 @@ abstract class AbsContentRecyclerViewFragment<A : LoadMoreSupportAdapter<Recycle
|
||||
updateRefreshProgressOffset()
|
||||
}
|
||||
if (value == currentRefreshing) return
|
||||
val layoutRefreshing = value && adapter?.loadMoreIndicatorPosition != ILoadMoreSupportAdapter.NONE
|
||||
val layoutRefreshing = value && adapter.loadMoreIndicatorPosition != ILoadMoreSupportAdapter.NONE
|
||||
swipeLayout.isRefreshing = layoutRefreshing
|
||||
}
|
||||
|
||||
@ -207,7 +208,7 @@ abstract class AbsContentRecyclerViewFragment<A : LoadMoreSupportAdapter<Recycle
|
||||
}
|
||||
|
||||
protected open fun setupRecyclerView(context: Context, recyclerView: RecyclerView) {
|
||||
itemDecoration = createItemDecoration(context, recyclerView, layoutManager!!)
|
||||
itemDecoration = createItemDecoration(context, recyclerView, layoutManager)
|
||||
if (itemDecoration != null) {
|
||||
recyclerView.addItemDecoration(itemDecoration)
|
||||
}
|
||||
@ -248,7 +249,7 @@ abstract class AbsContentRecyclerViewFragment<A : LoadMoreSupportAdapter<Recycle
|
||||
}
|
||||
|
||||
open fun setLoadMoreIndicatorPosition(@IndicatorPosition position: Long) {
|
||||
adapter?.loadMoreIndicatorPosition = position
|
||||
adapter.loadMoreIndicatorPosition = position
|
||||
}
|
||||
|
||||
override fun triggerRefresh(): Boolean {
|
||||
|
@ -117,7 +117,7 @@ abstract class AbsStatusesFragment protected constructor() :
|
||||
private val onScrollListener = object : OnScrollListener() {
|
||||
override fun onScrollStateChanged(recyclerView: RecyclerView?, newState: Int) {
|
||||
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
|
||||
val layoutManager = layoutManager ?: return
|
||||
val layoutManager = layoutManager
|
||||
saveReadPosition(layoutManager.findFirstVisibleItemPosition())
|
||||
}
|
||||
}
|
||||
@ -134,10 +134,10 @@ abstract class AbsStatusesFragment protected constructor() :
|
||||
|
||||
protected var adapterData: List<ParcelableStatus>?
|
||||
get() {
|
||||
return adapter?.getData()
|
||||
return adapter.getData()
|
||||
}
|
||||
set(data) {
|
||||
adapter?.setData(data)
|
||||
adapter.setData(data)
|
||||
}
|
||||
|
||||
protected open val readPositionTag: String?
|
||||
@ -170,10 +170,10 @@ abstract class AbsStatusesFragment protected constructor() :
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
scrollListener?.reversed = preferences.getBoolean(SharedPreferenceConstants.KEY_READ_FROM_BOTTOM)
|
||||
val adapter = adapter!!
|
||||
val adapter = adapter
|
||||
adapter.statusClickListener = this
|
||||
registerForContextMenu(recyclerView)
|
||||
navigationHelper = RecyclerViewNavigationHelper(recyclerView, layoutManager!!, adapter, this)
|
||||
navigationHelper = RecyclerViewNavigationHelper(recyclerView, layoutManager, adapter, this)
|
||||
pauseOnScrollListener = PauseRecyclerViewOnScrollListener(adapter.mediaLoader.imageLoader, false, true)
|
||||
|
||||
if (shouldInitLoader) {
|
||||
@ -224,7 +224,7 @@ abstract class AbsStatusesFragment protected constructor() :
|
||||
|
||||
override fun onDestroy() {
|
||||
val adapter = adapter
|
||||
adapter!!.statusClickListener = null
|
||||
adapter.statusClickListener = null
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
@ -245,7 +245,7 @@ abstract class AbsStatusesFragment protected constructor() :
|
||||
position = recyclerView.getChildLayoutPosition(focusedChild)
|
||||
}
|
||||
if (position != -1) {
|
||||
val status = adapter!!.getStatus(position) ?: return false
|
||||
val status = adapter.getStatus(position) ?: return false
|
||||
if (keyCode == KeyEvent.KEYCODE_ENTER) {
|
||||
IntentUtils.openStatus(activity, status, null)
|
||||
return true
|
||||
@ -316,7 +316,7 @@ abstract class AbsStatusesFragment protected constructor() :
|
||||
}
|
||||
|
||||
override fun onLoadFinished(loader: Loader<List<ParcelableStatus>?>, data: List<ParcelableStatus>?) {
|
||||
val adapter = adapter ?: return
|
||||
val adapter = adapter
|
||||
val rememberPosition = preferences.getBoolean(SharedPreferenceConstants.KEY_REMEMBER_POSITION, false)
|
||||
val readFromBottom = preferences.getBoolean(SharedPreferenceConstants.KEY_READ_FROM_BOTTOM, false)
|
||||
var lastReadPositionKey: Long
|
||||
@ -325,9 +325,9 @@ abstract class AbsStatusesFragment protected constructor() :
|
||||
val tag = currentReadPositionTag
|
||||
val layoutManager = layoutManager
|
||||
if (readFromBottom) {
|
||||
lastVisiblePos = layoutManager!!.findLastVisibleItemPosition()
|
||||
lastVisiblePos = layoutManager.findLastVisibleItemPosition()
|
||||
} else {
|
||||
lastVisiblePos = layoutManager!!.findFirstVisibleItemPosition()
|
||||
lastVisiblePos = layoutManager.findFirstVisibleItemPosition()
|
||||
}
|
||||
if (lastVisiblePos != RecyclerView.NO_POSITION && lastVisiblePos < adapter.itemCount) {
|
||||
val statusStartIndex = adapter.statusStartIndex
|
||||
@ -397,7 +397,7 @@ abstract class AbsStatusesFragment protected constructor() :
|
||||
|
||||
|
||||
override fun onGapClick(holder: GapViewHolder, position: Int) {
|
||||
val adapter = this.adapter ?: return
|
||||
val adapter = this.adapter
|
||||
val status = adapter.getStatus(position) ?: return
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.v(TwidereConstants.LOGTAG, "Load activity gap " + status)
|
||||
@ -410,7 +410,7 @@ abstract class AbsStatusesFragment protected constructor() :
|
||||
}
|
||||
|
||||
override fun onMediaClick(holder: IStatusViewHolder, view: View, media: ParcelableMedia, statusPosition: Int) {
|
||||
val adapter = adapter ?: return
|
||||
val adapter = adapter
|
||||
val status = adapter.getStatus(statusPosition) ?: return
|
||||
IntentUtils.openMedia(activity, status, media, null,
|
||||
preferences.getBoolean(SharedPreferenceConstants.KEY_NEW_DOCUMENT_API))
|
||||
@ -424,7 +424,7 @@ abstract class AbsStatusesFragment protected constructor() :
|
||||
override fun onItemActionClick(holder: RecyclerView.ViewHolder, id: Int, position: Int) {
|
||||
val context = context ?: return
|
||||
val adapter = adapter
|
||||
val status = adapter!!.getStatus(position) ?: return
|
||||
val status = adapter.getStatus(position) ?: return
|
||||
handleStatusActionClick(context, fragmentManager, twitterWrapper, holder as StatusViewHolder, status, id)
|
||||
}
|
||||
|
||||
@ -433,7 +433,7 @@ abstract class AbsStatusesFragment protected constructor() :
|
||||
val itemDecoration = DividerItemDecoration(context,
|
||||
(recyclerView.layoutManager as LinearLayoutManager).orientation)
|
||||
val res = context.resources
|
||||
if (adapter!!.profileImageEnabled) {
|
||||
if (adapter.profileImageEnabled) {
|
||||
val decorPaddingLeft = res.getDimensionPixelSize(R.dimen.element_spacing_normal) * 2 + res.getDimensionPixelSize(R.dimen.icon_size_status_profile_image)
|
||||
itemDecoration.setPadding { position, rect ->
|
||||
val itemViewType = adapter.getItemViewType(position)
|
||||
@ -464,7 +464,7 @@ abstract class AbsStatusesFragment protected constructor() :
|
||||
}
|
||||
|
||||
override fun onStatusClick(holder: IStatusViewHolder, position: Int) {
|
||||
IntentUtils.openStatus(activity, adapter!!.getStatus(position)!!, null)
|
||||
IntentUtils.openStatus(activity, adapter.getStatus(position)!!, null)
|
||||
}
|
||||
|
||||
override fun onStatusLongClick(holder: IStatusViewHolder, position: Int): Boolean {
|
||||
@ -474,12 +474,12 @@ abstract class AbsStatusesFragment protected constructor() :
|
||||
|
||||
override fun onItemMenuClick(holder: RecyclerView.ViewHolder, menuView: View, position: Int) {
|
||||
if (activity == null) return
|
||||
val view = layoutManager?.findViewByPosition(position) ?: return
|
||||
val view = layoutManager.findViewByPosition(position) ?: return
|
||||
recyclerView.showContextMenuForChild(view)
|
||||
}
|
||||
|
||||
override fun onUserProfileClick(holder: IStatusViewHolder, position: Int) {
|
||||
val status = adapter!!.getStatus(position)
|
||||
val status = adapter.getStatus(position)
|
||||
val intent = IntentUtils.userProfile(status!!.account_key, status.user_key,
|
||||
status.user_screen_name, Referral.TIMELINE_STATUS,
|
||||
status.extras.user_statusnet_profile_url)
|
||||
@ -511,7 +511,7 @@ abstract class AbsStatusesFragment protected constructor() :
|
||||
protected fun saveReadPosition(position: Int) {
|
||||
if (host == null) return
|
||||
if (position == RecyclerView.NO_POSITION) return
|
||||
val adapter = adapter ?: return
|
||||
val adapter = adapter
|
||||
val status = adapter.getStatus(position) ?: return
|
||||
val positionKey = if (status.position_key > 0) status.position_key else status.timestamp
|
||||
readPositionTagWithArguments?.let {
|
||||
@ -537,7 +537,7 @@ abstract class AbsStatusesFragment protected constructor() :
|
||||
val adapter = adapter
|
||||
val inflater = MenuInflater(context)
|
||||
val contextMenuInfo = menuInfo as ExtendedRecyclerView.ContextMenuInfo?
|
||||
val status = adapter!!.getStatus(contextMenuInfo!!.position)
|
||||
val status = adapter.getStatus(contextMenuInfo!!.position)
|
||||
inflater.inflate(R.menu.action_status, menu)
|
||||
MenuUtils.setupForStatus(context, preferences, menu, status!!, twitterWrapper)
|
||||
}
|
||||
@ -545,7 +545,7 @@ abstract class AbsStatusesFragment protected constructor() :
|
||||
override fun onContextItemSelected(item: MenuItem?): Boolean {
|
||||
if (!userVisibleHint) return false
|
||||
val contextMenuInfo = item!!.menuInfo as ExtendedRecyclerView.ContextMenuInfo
|
||||
val status = adapter!!.getStatus(contextMenuInfo.position) ?: return false
|
||||
val status = adapter.getStatus(contextMenuInfo.position) ?: return false
|
||||
if (item.itemId == R.id.share) {
|
||||
val shareIntent = Utils.createStatusShareIntent(activity, status)
|
||||
val chooser = Intent.createChooser(shareIntent, getString(R.string.share_status))
|
||||
@ -572,7 +572,7 @@ abstract class AbsStatusesFragment protected constructor() :
|
||||
|
||||
@Subscribe
|
||||
fun notifyStatusListChanged(event: StatusListChangedEvent) {
|
||||
adapter?.notifyDataSetChanged()
|
||||
adapter.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -20,11 +20,15 @@
|
||||
package org.mariotaku.twidere.fragment
|
||||
|
||||
import android.accounts.AccountManager
|
||||
import android.accounts.OnAccountsUpdateListener
|
||||
import android.animation.Animator
|
||||
import android.animation.Animator.AnimatorListener
|
||||
import android.animation.AnimatorSet
|
||||
import android.animation.ObjectAnimator
|
||||
import android.content.*
|
||||
import android.content.ContentResolver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.SharedPreferences
|
||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
|
||||
import android.database.ContentObserver
|
||||
import android.graphics.Matrix
|
||||
@ -58,7 +62,6 @@ import org.mariotaku.ktextension.convert
|
||||
import org.mariotaku.ktextension.setItemAvailability
|
||||
import org.mariotaku.ktextension.setMenuItemIcon
|
||||
import org.mariotaku.ktextension.setMenuItemTitle
|
||||
import org.mariotaku.sqliteqb.library.Expression
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.TwidereConstants.*
|
||||
import org.mariotaku.twidere.activity.*
|
||||
@ -66,13 +69,13 @@ import org.mariotaku.twidere.annotation.AccountType
|
||||
import org.mariotaku.twidere.annotation.CustomTabType
|
||||
import org.mariotaku.twidere.annotation.Referral
|
||||
import org.mariotaku.twidere.constant.KeyboardShortcutConstants.*
|
||||
import org.mariotaku.twidere.extension.setActivated
|
||||
import org.mariotaku.twidere.fragment.AccountsDashboardFragment.AccountsInfo
|
||||
import org.mariotaku.twidere.menu.AccountToggleProvider
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
import org.mariotaku.twidere.model.SupportTabSpec
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.util.AccountUtils
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Drafts
|
||||
import org.mariotaku.twidere.util.*
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback
|
||||
@ -139,7 +142,14 @@ class AccountsDashboardFragment : BaseSupportFragment(), LoaderCallbacks<Account
|
||||
val menuInflater = SupportMenuInflater(context)
|
||||
menuInflater.inflate(R.menu.action_dashboard_timeline_toggle, accountDashboardMenu.menu)
|
||||
accountDashboardMenu.setOnMenuItemClickListener(OnMenuItemClickListener { item ->
|
||||
if (item.groupId != AccountToggleProvider.MENU_GROUP) {
|
||||
if (item.groupId == AccountToggleProvider.MENU_GROUP) {
|
||||
val accounts = accountActionProvider!!.accounts
|
||||
val account = accounts[item.order]
|
||||
val newActivated = !account.activated
|
||||
accountActionProvider!!.setAccountActivated(account.key, newActivated)
|
||||
account.account.setActivated(AccountManager.get(context), newActivated)
|
||||
return@OnMenuItemClickListener true
|
||||
} else {
|
||||
when (item.itemId) {
|
||||
R.id.compose -> {
|
||||
val account = accountsAdapter!!.selectedAccount ?: return@OnMenuItemClickListener true
|
||||
@ -150,18 +160,8 @@ class AccountsDashboardFragment : BaseSupportFragment(), LoaderCallbacks<Account
|
||||
return@OnMenuItemClickListener true
|
||||
}
|
||||
}
|
||||
return@OnMenuItemClickListener false
|
||||
}
|
||||
val accounts = accountActionProvider!!.accounts
|
||||
val account = accounts[item.order]
|
||||
val values = ContentValues()
|
||||
val newActivated = !account.activated
|
||||
accountActionProvider!!.setAccountActivated(account.key, newActivated)
|
||||
values.put(Accounts.IS_ACTIVATED, newActivated)
|
||||
val where = Expression.equalsArgs(Accounts.ACCOUNT_KEY).sql
|
||||
val whereArgs = arrayOf(account.key.toString())
|
||||
mResolver!!.update(Accounts.CONTENT_URI, values, where, whereArgs)
|
||||
true
|
||||
return@OnMenuItemClickListener false
|
||||
})
|
||||
|
||||
profileContainer.setOnClickListener(this)
|
||||
@ -722,6 +722,7 @@ class AccountsDashboardFragment : BaseSupportFragment(), LoaderCallbacks<Account
|
||||
|
||||
class AccountsInfoLoader(context: Context) : AsyncTaskLoader<AccountsInfo>(context) {
|
||||
private var contentObserver: ContentObserver? = null
|
||||
private var accountListener: OnAccountsUpdateListener? = null
|
||||
|
||||
private var firstLoad: Boolean
|
||||
|
||||
@ -746,10 +747,13 @@ class AccountsDashboardFragment : BaseSupportFragment(), LoaderCallbacks<Account
|
||||
|
||||
// Stop monitoring for changes.
|
||||
if (contentObserver != null) {
|
||||
val cr = context.contentResolver
|
||||
cr.unregisterContentObserver(contentObserver)
|
||||
context.contentResolver.unregisterContentObserver(contentObserver)
|
||||
contentObserver = null
|
||||
}
|
||||
if (accountListener != null) {
|
||||
AccountManager.get(context).removeOnAccountsUpdatedListener(accountListener)
|
||||
accountListener = null
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -768,9 +772,13 @@ class AccountsDashboardFragment : BaseSupportFragment(), LoaderCallbacks<Account
|
||||
onContentChanged()
|
||||
}
|
||||
}
|
||||
val cr = context.contentResolver
|
||||
cr.registerContentObserver(Accounts.CONTENT_URI, true, contentObserver)
|
||||
cr.registerContentObserver(Drafts.CONTENT_URI, true, contentObserver)
|
||||
context.contentResolver.registerContentObserver(Drafts.CONTENT_URI, true, contentObserver)
|
||||
}
|
||||
if (accountListener == null) {
|
||||
accountListener = OnAccountsUpdateListener { accounts ->
|
||||
onContentChanged()
|
||||
}
|
||||
AccountManager.get(context).addOnAccountsUpdatedListener(accountListener, null, false)
|
||||
}
|
||||
|
||||
if (takeContentChanged() || firstLoad) {
|
||||
|
@ -1,5 +1,6 @@
|
||||
package org.mariotaku.twidere.fragment
|
||||
|
||||
import android.accounts.Account
|
||||
import android.accounts.AccountManager
|
||||
import android.app.Activity
|
||||
import android.app.AlertDialog
|
||||
@ -22,7 +23,9 @@ import org.mariotaku.twidere.activity.ColorPickerDialogActivity
|
||||
import org.mariotaku.twidere.activity.SignInActivity
|
||||
import org.mariotaku.twidere.adapter.AccountDetailsAdapter
|
||||
import org.mariotaku.twidere.annotation.Referral
|
||||
import org.mariotaku.twidere.constant.SharedPreferenceConstants
|
||||
import org.mariotaku.twidere.constant.IntentConstants
|
||||
import org.mariotaku.twidere.constant.SharedPreferenceConstants.KEY_NEW_DOCUMENT_API
|
||||
import org.mariotaku.twidere.extension.getAccountKey
|
||||
import org.mariotaku.twidere.extension.setActivated
|
||||
import org.mariotaku.twidere.extension.setColor
|
||||
import org.mariotaku.twidere.extension.setPosition
|
||||
@ -33,6 +36,7 @@ import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages.Inbox
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages.Outbox
|
||||
import org.mariotaku.twidere.util.IntentUtils
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
import org.mariotaku.twidere.util.support.AccountManagerSupport
|
||||
|
||||
/**
|
||||
* Sort and toggle account availability
|
||||
@ -41,26 +45,33 @@ import org.mariotaku.twidere.util.Utils
|
||||
class AccountsManagerFragment : BaseSupportFragment(), LoaderManager.LoaderCallbacks<List<AccountDetails>>,
|
||||
AdapterView.OnItemClickListener {
|
||||
|
||||
private var adapter: AccountDetailsAdapter? = null
|
||||
private lateinit var adapter: AccountDetailsAdapter
|
||||
private var selectedAccount: AccountDetails? = null
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
val activity = activity
|
||||
adapter = AccountDetailsAdapter(activity).apply {
|
||||
Utils.configBaseAdapter(activity, this)
|
||||
val am = AccountManager.get(context)
|
||||
adapter = AccountDetailsAdapter(context).apply {
|
||||
Utils.configBaseAdapter(context, this)
|
||||
setSortEnabled(true)
|
||||
setSwitchEnabled(true)
|
||||
accountToggleListener = { pos, checked ->
|
||||
getItem(pos).activated = checked
|
||||
val item = getItem(pos)
|
||||
item.activated = checked
|
||||
item.account.setActivated(am, checked)
|
||||
}
|
||||
}
|
||||
listView.adapter = adapter
|
||||
listView.isDragEnabled = true
|
||||
listView.onItemClickListener = this
|
||||
listView.setDropListener { from, to ->
|
||||
adapter?.drop(from, to)
|
||||
adapter.drop(from, to)
|
||||
for (i in 0 until adapter.count) {
|
||||
val item = adapter.getItem(i)
|
||||
item.account.setActivated(am, item.activated)
|
||||
item.account.setPosition(am, i)
|
||||
}
|
||||
}
|
||||
listView.setOnCreateContextMenuListener(this)
|
||||
listView.emptyView = emptyView
|
||||
@ -101,9 +112,8 @@ class AccountsManagerFragment : BaseSupportFragment(), LoaderManager.LoaderCallb
|
||||
|
||||
override fun onContextItemSelected(item: MenuItem?): Boolean {
|
||||
val menuInfo = item!!.menuInfo as? AdapterContextMenuInfo ?: return false
|
||||
val details = adapter!!.getItem(menuInfo.position)
|
||||
val details = adapter.getItem(menuInfo.position) ?: return false
|
||||
selectedAccount = details
|
||||
if (details == null) return false
|
||||
when (item.itemId) {
|
||||
R.id.set_color -> {
|
||||
val intent = Intent(activity, ColorPickerDialogActivity::class.java)
|
||||
@ -123,18 +133,11 @@ class AccountsManagerFragment : BaseSupportFragment(), LoaderManager.LoaderCallb
|
||||
}
|
||||
|
||||
override fun onItemClick(parent: AdapterView<*>, view: View, position: Int, id: Long) {
|
||||
val account = adapter!!.getItem(position)
|
||||
IntentUtils.openUserProfile(context, account.user, null,
|
||||
preferences.getBoolean(SharedPreferenceConstants.KEY_NEW_DOCUMENT_API),
|
||||
val account = adapter.getItem(position)
|
||||
IntentUtils.openUserProfile(context, account.user, null, preferences.getBoolean(KEY_NEW_DOCUMENT_API),
|
||||
Referral.SELF_PROFILE)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
super.onStop()
|
||||
saveActivatedState()
|
||||
saveAccountPositions()
|
||||
}
|
||||
|
||||
override fun onCreateLoader(id: Int, args: Bundle?): Loader<List<AccountDetails>> {
|
||||
return AccountDetailsLoader(context)
|
||||
}
|
||||
@ -144,27 +147,17 @@ class AccountsManagerFragment : BaseSupportFragment(), LoaderManager.LoaderCallb
|
||||
}
|
||||
|
||||
override fun onLoadFinished(loader: Loader<List<AccountDetails>>, data: List<AccountDetails>) {
|
||||
adapter?.apply {
|
||||
adapter.apply {
|
||||
clear()
|
||||
addAll(data)
|
||||
}
|
||||
setListShown(true)
|
||||
}
|
||||
|
||||
private fun saveActivatedState() {
|
||||
val am = AccountManager.get(context)
|
||||
adapter?.let { adapter ->
|
||||
for (i in 0 until adapter.count) {
|
||||
val item = adapter.getItem(i)
|
||||
item.account.setActivated(am, item.activated)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateContextMenu(menu: ContextMenu, v: View, menuInfo: ContextMenuInfo) {
|
||||
if (menuInfo !is AdapterContextMenuInfo) return
|
||||
val account = adapter!!.getItem(menuInfo.position)
|
||||
menu.setHeaderTitle(account!!.user.name)
|
||||
val account = adapter.getItem(menuInfo.position)!!
|
||||
menu.setHeaderTitle(account.user.name)
|
||||
val inflater = MenuInflater(v.context)
|
||||
inflater.inflate(R.menu.action_manager_account, menu)
|
||||
}
|
||||
@ -178,25 +171,18 @@ class AccountsManagerFragment : BaseSupportFragment(), LoaderManager.LoaderCallb
|
||||
progressContainer.visibility = if (shown) View.GONE else View.VISIBLE
|
||||
}
|
||||
|
||||
private fun saveAccountPositions() {
|
||||
val am = AccountManager.get(context)
|
||||
adapter?.let { adapter ->
|
||||
for (i in 0 until adapter.count) {
|
||||
adapter.getItem(i).account.setPosition(am, i)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class AccountDeletionDialogFragment : BaseDialogFragment(), DialogInterface.OnClickListener {
|
||||
|
||||
override fun onClick(dialog: DialogInterface, which: Int) {
|
||||
val id = arguments.getLong(EXTRA_ID)
|
||||
val account: Account = arguments.getParcelable(IntentConstants.EXTRA_ACCOUNT)
|
||||
val resolver = context.contentResolver
|
||||
val am = AccountManager.get(context)
|
||||
when (which) {
|
||||
DialogInterface.BUTTON_POSITIVE -> {
|
||||
val where = Expression.equalsArgs(Accounts._ID).sql
|
||||
val whereArgs = arrayOf(id.toString())
|
||||
resolver.delete(Accounts.CONTENT_URI, where, whereArgs)
|
||||
val accountKey = account.getAccountKey(am)
|
||||
AccountManagerSupport.removeAccount(am, account, activity, null, null)
|
||||
val where = Expression.equalsArgs(AccountSupportColumns.ACCOUNT_KEY).sql
|
||||
val whereArgs = arrayOf(accountKey.toString())
|
||||
// Also delete tweets related to the account we previously
|
||||
// deleted.
|
||||
resolver.delete(Statuses.CONTENT_URI, where, whereArgs)
|
||||
|
@ -19,6 +19,8 @@
|
||||
|
||||
package org.mariotaku.twidere.fragment
|
||||
|
||||
import android.accounts.AccountManager
|
||||
import android.accounts.OnAccountsUpdateListener
|
||||
import android.content.Context
|
||||
import android.database.ContentObserver
|
||||
import android.database.Cursor
|
||||
@ -38,7 +40,8 @@ import org.mariotaku.twidere.constant.IntentConstants.EXTRA_FROM_USER
|
||||
import org.mariotaku.twidere.loader.ExtendedObjectCursorLoader
|
||||
import org.mariotaku.twidere.model.*
|
||||
import org.mariotaku.twidere.model.message.*
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.*
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Activities
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Filters
|
||||
import org.mariotaku.twidere.util.DataStoreUtils
|
||||
import org.mariotaku.twidere.util.DataStoreUtils.getTableNameByUri
|
||||
import org.mariotaku.twidere.util.ErrorInfoStore
|
||||
@ -53,7 +56,7 @@ abstract class CursorActivitiesFragment : AbsActivitiesFragment() {
|
||||
override fun onLoadingFinished() {
|
||||
val accountKeys = accountKeys
|
||||
val adapter = adapter
|
||||
if (adapter!!.itemCount > 0) {
|
||||
if (adapter.itemCount > 0) {
|
||||
showContent()
|
||||
} else if (accountKeys.isNotEmpty()) {
|
||||
val errorInfo = ErrorInfoStore.getErrorInfo(context,
|
||||
@ -71,6 +74,7 @@ abstract class CursorActivitiesFragment : AbsActivitiesFragment() {
|
||||
protected abstract val errorInfoKey: String
|
||||
|
||||
private var contentObserver: ContentObserver? = null
|
||||
private var accountListener: OnAccountsUpdateListener? = null
|
||||
|
||||
abstract val contentUri: Uri
|
||||
|
||||
@ -96,7 +100,7 @@ abstract class CursorActivitiesFragment : AbsActivitiesFragment() {
|
||||
}
|
||||
val expression = processWhere(where, accountSelectionArgs)
|
||||
val selection = expression.sql
|
||||
val adapter = adapter!!
|
||||
val adapter = adapter
|
||||
adapter.showAccountsColor = accountKeys.size > 1
|
||||
val projection = Activities.COLUMNS
|
||||
return CursorActivitiesLoader(context, uri, projection, selection, expression.parameters,
|
||||
@ -108,28 +112,30 @@ abstract class CursorActivitiesFragment : AbsActivitiesFragment() {
|
||||
}
|
||||
|
||||
override val accountKeys: Array<UserKey>
|
||||
get() {
|
||||
val accountKeys = Utils.getAccountKeys(context, arguments)
|
||||
if (accountKeys != null) {
|
||||
return accountKeys
|
||||
}
|
||||
return DataStoreUtils.getActivatedAccountKeys(context)
|
||||
}
|
||||
get() = Utils.getAccountKeys(context, arguments) ?: DataStoreUtils.getActivatedAccountKeys(context)
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
val cr = contentResolver
|
||||
contentObserver = object : ContentObserver(Handler()) {
|
||||
override fun onChange(selfChange: Boolean) {
|
||||
reloadActivities()
|
||||
}
|
||||
}
|
||||
cr.registerContentObserver(Accounts.CONTENT_URI, true, contentObserver!!)
|
||||
cr.registerContentObserver(Filters.CONTENT_URI, true, contentObserver!!)
|
||||
accountListener = OnAccountsUpdateListener { accounts ->
|
||||
reloadActivities()
|
||||
}
|
||||
context.contentResolver.registerContentObserver(Filters.CONTENT_URI, true, contentObserver)
|
||||
AccountManager.get(context).addOnAccountsUpdatedListener(accountListener, null, false)
|
||||
updateRefreshState()
|
||||
reloadActivities()
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
context.contentResolver.unregisterContentObserver(contentObserver)
|
||||
AccountManager.get(context).removeOnAccountsUpdatedListener(accountListener)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
protected fun reloadActivities() {
|
||||
if (activity == null || isDetached) return
|
||||
val args = Bundle()
|
||||
@ -141,18 +147,12 @@ abstract class CursorActivitiesFragment : AbsActivitiesFragment() {
|
||||
loaderManager.restartLoader(0, args, this)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
val cr = contentResolver
|
||||
cr.unregisterContentObserver(contentObserver!!)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
override fun hasMoreData(data: List<ParcelableActivity>?): Boolean {
|
||||
return data?.size != 0
|
||||
}
|
||||
|
||||
override fun onLoaderReset(loader: Loader<List<ParcelableActivity>>) {
|
||||
adapter!!.setData(null)
|
||||
adapter.setData(null)
|
||||
}
|
||||
|
||||
override fun onLoadMoreContents(@IndicatorPosition position: Long) {
|
||||
@ -259,7 +259,7 @@ abstract class CursorActivitiesFragment : AbsActivitiesFragment() {
|
||||
if (result == null) return
|
||||
val lm = layoutManager
|
||||
val adapter = adapter
|
||||
val rangeStart = Math.max(adapter!!.activityStartIndex, lm!!.findFirstVisibleItemPosition())
|
||||
val rangeStart = Math.max(adapter.activityStartIndex, lm.findFirstVisibleItemPosition())
|
||||
val rangeEnd = Math.min(lm.findLastVisibleItemPosition(), adapter.activityStartIndex + adapter.activityCount - 1)
|
||||
loop@ for (i in rangeStart..rangeEnd) {
|
||||
val activity = adapter.getActivity(i)
|
||||
@ -310,7 +310,7 @@ abstract class CursorActivitiesFragment : AbsActivitiesFragment() {
|
||||
|
||||
@Subscribe
|
||||
fun notifyStatusListChanged(event: StatusListChangedEvent) {
|
||||
adapter!!.notifyDataSetChanged()
|
||||
adapter.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
|
@ -19,27 +19,31 @@
|
||||
|
||||
package org.mariotaku.twidere.fragment
|
||||
|
||||
import android.accounts.AccountManager
|
||||
import android.accounts.OnAccountsUpdateListener
|
||||
import android.content.Context
|
||||
import android.database.ContentObserver
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.support.v4.content.Loader
|
||||
import android.util.Log
|
||||
import com.squareup.otto.Subscribe
|
||||
import kotlinx.android.synthetic.main.fragment_content_recyclerview.*
|
||||
import org.mariotaku.sqliteqb.library.ArgsArray
|
||||
import org.mariotaku.sqliteqb.library.Columns.Column
|
||||
import org.mariotaku.sqliteqb.library.Expression
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.TwidereConstants.LOGTAG
|
||||
import org.mariotaku.twidere.adapter.ListParcelableStatusesAdapter
|
||||
import org.mariotaku.twidere.adapter.ParcelableStatusesAdapter
|
||||
import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter
|
||||
import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter.IndicatorPosition
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_FROM_USER
|
||||
import org.mariotaku.twidere.loader.ExtendedObjectCursorLoader
|
||||
import org.mariotaku.twidere.model.*
|
||||
import org.mariotaku.twidere.model.message.*
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.*
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Filters
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||
import org.mariotaku.twidere.util.DataStoreUtils
|
||||
import org.mariotaku.twidere.util.DataStoreUtils.buildStatusFilterWhereClause
|
||||
import org.mariotaku.twidere.util.DataStoreUtils.getTableNameByUri
|
||||
@ -52,6 +56,7 @@ import org.mariotaku.twidere.util.Utils
|
||||
abstract class CursorStatusesFragment : AbsStatusesFragment() {
|
||||
|
||||
private var contentObserver: ContentObserver? = null
|
||||
private var accountListener: OnAccountsUpdateListener? = null
|
||||
|
||||
abstract val errorInfoKey: String
|
||||
abstract val isFilterEnabled: Boolean
|
||||
@ -67,13 +72,11 @@ abstract class CursorStatusesFragment : AbsStatusesFragment() {
|
||||
showContentOrError()
|
||||
}
|
||||
|
||||
override fun onCreateStatusesLoader(context: Context,
|
||||
args: Bundle,
|
||||
fromUser: Boolean): Loader<List<ParcelableStatus>?> {
|
||||
override fun onCreateStatusesLoader(context: Context, args: Bundle, fromUser: Boolean): Loader<List<ParcelableStatus>?> {
|
||||
val uri = contentUri
|
||||
val table = getTableNameByUri(uri)
|
||||
val sortOrder = Statuses.DEFAULT_SORT_ORDER
|
||||
val accountKeys = accountKeys
|
||||
val accountKeys = this.accountKeys
|
||||
val accountWhere = Expression.`in`(Column(Statuses.ACCOUNT_KEY),
|
||||
ArgsArray(accountKeys.size))
|
||||
val filterWhere = getFiltersWhere(table)
|
||||
@ -84,15 +87,14 @@ abstract class CursorStatusesFragment : AbsStatusesFragment() {
|
||||
where = accountWhere
|
||||
}
|
||||
val adapter = adapter
|
||||
adapter!!.showAccountsColor = accountKeys.size > 1
|
||||
adapter.showAccountsColor = accountKeys.size > 1
|
||||
val projection = Statuses.COLUMNS
|
||||
val selectionArgs = Array(accountKeys.size) {
|
||||
accountKeys[it].toString()
|
||||
}
|
||||
val expression = processWhere(where, selectionArgs)
|
||||
return ExtendedObjectCursorLoader(context, ParcelableStatusCursorIndices::class.java, uri,
|
||||
projection, expression.sql, expression.parameters,
|
||||
sortOrder, fromUser)
|
||||
projection, expression.sql, expression.parameters, sortOrder, fromUser)
|
||||
}
|
||||
|
||||
override fun createMessageBusCallback(): Any {
|
||||
@ -102,7 +104,7 @@ abstract class CursorStatusesFragment : AbsStatusesFragment() {
|
||||
|
||||
private fun showContentOrError() {
|
||||
val accountKeys = accountKeys
|
||||
val adapter = adapter!!
|
||||
val adapter = adapter
|
||||
if (adapter.itemCount > 0) {
|
||||
showContent()
|
||||
} else if (accountKeys.isNotEmpty()) {
|
||||
@ -119,29 +121,30 @@ abstract class CursorStatusesFragment : AbsStatusesFragment() {
|
||||
}
|
||||
|
||||
override val accountKeys: Array<UserKey>
|
||||
get() {
|
||||
val args = arguments
|
||||
val accountKeys = Utils.getAccountKeys(context, args)
|
||||
if (accountKeys != null) {
|
||||
return accountKeys
|
||||
}
|
||||
return DataStoreUtils.getActivatedAccountKeys(context)
|
||||
}
|
||||
get() = Utils.getAccountKeys(context, arguments) ?: DataStoreUtils.getActivatedAccountKeys(context)
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
val cr = contentResolver
|
||||
contentObserver = object : ContentObserver(Handler()) {
|
||||
override fun onChange(selfChange: Boolean) {
|
||||
reloadStatuses()
|
||||
}
|
||||
}
|
||||
cr.registerContentObserver(Accounts.CONTENT_URI, true, contentObserver!!)
|
||||
cr.registerContentObserver(Filters.CONTENT_URI, true, contentObserver!!)
|
||||
accountListener = OnAccountsUpdateListener { accounts ->
|
||||
reloadStatuses()
|
||||
}
|
||||
context.contentResolver.registerContentObserver(Filters.CONTENT_URI, true, contentObserver)
|
||||
AccountManager.get(context).addOnAccountsUpdatedListener(accountListener, null, false)
|
||||
updateRefreshState()
|
||||
reloadStatuses()
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
context.contentResolver.unregisterContentObserver(contentObserver)
|
||||
AccountManager.get(context).removeOnAccountsUpdatedListener(accountListener)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
protected fun reloadStatuses() {
|
||||
if (context == null || isDetached) return
|
||||
val args = Bundle()
|
||||
@ -153,11 +156,6 @@ abstract class CursorStatusesFragment : AbsStatusesFragment() {
|
||||
loaderManager.restartLoader(0, args, this)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
contentResolver.unregisterContentObserver(contentObserver!!)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
override fun hasMoreData(data: List<ParcelableStatus>?): Boolean {
|
||||
return data?.size != 0
|
||||
}
|
||||
@ -167,7 +165,7 @@ abstract class CursorStatusesFragment : AbsStatusesFragment() {
|
||||
}
|
||||
|
||||
override fun onLoaderReset(loader: Loader<List<ParcelableStatus>?>) {
|
||||
adapter!!.setData(null)
|
||||
adapter.setData(null)
|
||||
}
|
||||
|
||||
override fun onLoadMoreContents(@IndicatorPosition position: Long) {
|
||||
@ -272,9 +270,9 @@ abstract class CursorStatusesFragment : AbsStatusesFragment() {
|
||||
val status = event.status
|
||||
val data = adapterData
|
||||
if (status == null || data == null || data.isEmpty()) return
|
||||
val adapter = adapter as ParcelableStatusesAdapter
|
||||
val firstVisiblePosition = layoutManager!!.findFirstVisibleItemPosition()
|
||||
val lastVisiblePosition = layoutManager!!.findLastVisibleItemPosition()
|
||||
val adapter = adapter
|
||||
val firstVisiblePosition = layoutManager.findFirstVisibleItemPosition()
|
||||
val lastVisiblePosition = layoutManager.findLastVisibleItemPosition()
|
||||
val startIndex = adapter.statusStartIndex
|
||||
for (i in firstVisiblePosition..lastVisiblePosition) {
|
||||
if (status.account_key == adapter.getAccountKey(i) && status.id == adapter.getStatusId(i)) {
|
||||
@ -294,7 +292,7 @@ abstract class CursorStatusesFragment : AbsStatusesFragment() {
|
||||
|
||||
@Subscribe
|
||||
fun notifyStatusListChanged(event: StatusListChangedEvent) {
|
||||
adapter!!.notifyDataSetChanged()
|
||||
adapter.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
|
@ -19,6 +19,8 @@
|
||||
|
||||
package org.mariotaku.twidere.fragment
|
||||
|
||||
import android.accounts.AccountManager
|
||||
import android.accounts.OnAccountsUpdateListener
|
||||
import android.content.Context
|
||||
import android.database.Cursor
|
||||
import android.os.AsyncTask
|
||||
@ -55,18 +57,17 @@ import org.mariotaku.twidere.model.BaseRefreshTaskParam
|
||||
import org.mariotaku.twidere.model.RefreshTaskParam
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.message.GetMessagesTaskEvent
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.*
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages.Inbox
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||
import org.mariotaku.twidere.util.*
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback
|
||||
import org.mariotaku.twidere.util.content.SupportFragmentReloadCursorObserver
|
||||
import java.util.*
|
||||
|
||||
class DirectMessagesFragment : AbsContentListRecyclerViewFragment<MessageEntriesAdapter>(), LoaderCallbacks<Cursor>, MessageEntriesAdapterListener, KeyboardShortcutCallback {
|
||||
|
||||
// Listeners
|
||||
private val reloadContentObserver = SupportFragmentReloadCursorObserver(
|
||||
this, 0, this)
|
||||
private var accountListener: OnAccountsUpdateListener? = null
|
||||
|
||||
private var mRemoveUnreadCountsTask: RemoveUnreadCountsTask? = null
|
||||
private var mNavigationHelper: RecyclerViewNavigationHelper? = null
|
||||
@ -129,8 +130,7 @@ class DirectMessagesFragment : AbsContentListRecyclerViewFragment<MessageEntries
|
||||
if (activity == null) return
|
||||
val isEmpty = cursor != null && cursor.count == 0
|
||||
mFirstVisibleItem = -1
|
||||
val adapter = adapter
|
||||
adapter!!.setCursor(cursor)
|
||||
adapter.setCursor(cursor)
|
||||
adapter.loadMoreIndicatorPosition = ILoadMoreSupportAdapter.NONE
|
||||
adapter.loadMoreSupportedPosition = if (hasMoreData(cursor)) ILoadMoreSupportAdapter.END else ILoadMoreSupportAdapter.NONE
|
||||
val accountIds = accountKeys
|
||||
@ -155,8 +155,7 @@ class DirectMessagesFragment : AbsContentListRecyclerViewFragment<MessageEntries
|
||||
}
|
||||
|
||||
override fun onLoaderReset(loader: Loader<Cursor>) {
|
||||
val adapter = adapter
|
||||
adapter!!.setCursor(null)
|
||||
adapter.setCursor(null)
|
||||
}
|
||||
|
||||
override fun onEntryClick(position: Int, entry: DirectMessageEntry) {
|
||||
@ -219,8 +218,7 @@ class DirectMessagesFragment : AbsContentListRecyclerViewFragment<MessageEntries
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
setHasOptionsMenu(activity is LinkHandlerActivity)
|
||||
val adapter = adapter!!
|
||||
mNavigationHelper = RecyclerViewNavigationHelper(recyclerView, layoutManager!!, adapter, this)
|
||||
mNavigationHelper = RecyclerViewNavigationHelper(recyclerView, layoutManager, adapter, this)
|
||||
|
||||
adapter.listener = this
|
||||
|
||||
@ -230,15 +228,17 @@ class DirectMessagesFragment : AbsContentListRecyclerViewFragment<MessageEntries
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
contentResolver.registerContentObserver(Accounts.CONTENT_URI, true, reloadContentObserver)
|
||||
accountListener = OnAccountsUpdateListener { accounts ->
|
||||
|
||||
}
|
||||
AccountManager.get(context).addOnAccountsUpdatedListener(accountListener, null, false)
|
||||
bus.register(this)
|
||||
val adapter = adapter
|
||||
adapter!!.updateReadState()
|
||||
adapter.updateReadState()
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
bus.unregister(this)
|
||||
contentResolver.unregisterContentObserver(reloadContentObserver)
|
||||
AccountManager.get(context).removeOnAccountsUpdatedListener(accountListener)
|
||||
super.onStop()
|
||||
}
|
||||
|
||||
@ -350,7 +350,7 @@ class DirectMessagesFragment : AbsContentListRecyclerViewFragment<MessageEntries
|
||||
|
||||
init {
|
||||
this.readPositions = Collections.synchronizedSet(HashSet(readPositions))
|
||||
adapter = fragment.adapter!!
|
||||
adapter = fragment.adapter
|
||||
}
|
||||
|
||||
override fun doInBackground(vararg params: Any): Any? {
|
||||
|
@ -34,7 +34,7 @@ class GroupMembersFragment : CursorSupportUsersListFragment() {
|
||||
val groupId = args.getString(EXTRA_GROUP_ID)
|
||||
val groupName = args.getString(EXTRA_GROUP_NAME)
|
||||
val loader = GroupMembersLoader(context, accountId, groupId,
|
||||
groupName, adapter!!.getData(), fromUser)
|
||||
groupName, adapter.getData(), fromUser)
|
||||
loader.cursor = nextCursor
|
||||
loader.page = nextPage
|
||||
return loader
|
||||
|
@ -38,7 +38,7 @@ class IncomingFriendshipsFragment : CursorSupportUsersListFragment(), IUsersAdap
|
||||
public override fun onCreateUsersLoader(context: Context, args: Bundle,
|
||||
fromUser: Boolean): CursorSupportUsersLoader {
|
||||
val accountKey = args.getParcelable<UserKey>(EXTRA_ACCOUNT_KEY)
|
||||
val loader = IncomingFriendshipsLoader(context, accountKey, adapter!!.getData(), fromUser)
|
||||
val loader = IncomingFriendshipsLoader(context, accountKey, adapter.getData(), fromUser)
|
||||
loader.cursor = nextCursor
|
||||
loader.page = nextPage
|
||||
return loader
|
||||
@ -60,13 +60,13 @@ class IncomingFriendshipsFragment : CursorSupportUsersListFragment(), IUsersAdap
|
||||
|
||||
override fun onAcceptClicked(holder: UserViewHolder, position: Int) {
|
||||
val adapter = adapter
|
||||
val user = adapter!!.getUser(position) ?: return
|
||||
val user = adapter.getUser(position) ?: return
|
||||
twitterWrapper.acceptFriendshipAsync(user.account_key, user.key)
|
||||
}
|
||||
|
||||
override fun onDenyClicked(holder: UserViewHolder, position: Int) {
|
||||
val adapter = adapter
|
||||
val user = adapter!!.getUser(position) ?: return
|
||||
val user = adapter.getUser(position) ?: return
|
||||
twitterWrapper.denyFriendshipAsync(user.account_key, user.key)
|
||||
}
|
||||
|
||||
|
@ -60,7 +60,7 @@ class ItemsListFragment : AbsContentListRecyclerViewFragment<VariousItemsAdapter
|
||||
|
||||
override fun onItemMenuClick(holder: RecyclerView.ViewHolder, menuView: View, position: Int) {
|
||||
if (activity == null) return
|
||||
val view = layoutManager!!.findViewByPosition(position) ?: return
|
||||
val view = layoutManager.findViewByPosition(position) ?: return
|
||||
recyclerView.showContextMenuForChild(view)
|
||||
}
|
||||
|
||||
@ -99,11 +99,11 @@ class ItemsListFragment : AbsContentListRecyclerViewFragment<VariousItemsAdapter
|
||||
}
|
||||
|
||||
override fun onLoadFinished(loader: Loader<List<*>?>, data: List<*>?) {
|
||||
adapter!!.setData(data)
|
||||
adapter.setData(data)
|
||||
}
|
||||
|
||||
override fun onLoaderReset(loader: Loader<List<*>?>) {
|
||||
adapter!!.setData(null)
|
||||
adapter.setData(null)
|
||||
}
|
||||
|
||||
override var refreshing: Boolean
|
||||
@ -117,7 +117,7 @@ class ItemsListFragment : AbsContentListRecyclerViewFragment<VariousItemsAdapter
|
||||
val contextMenuInfo = menuInfo as ExtendedRecyclerView.ContextMenuInfo?
|
||||
val position = contextMenuInfo!!.position
|
||||
val adapter = adapter
|
||||
when (adapter!!.getItemViewType(position)) {
|
||||
when (adapter.getItemViewType(position)) {
|
||||
VariousItemsAdapter.VIEW_TYPE_STATUS -> {
|
||||
val dummyAdapter = adapter.dummyAdapter
|
||||
val status = dummyAdapter.getStatus(contextMenuInfo.position) ?: return
|
||||
@ -133,7 +133,7 @@ class ItemsListFragment : AbsContentListRecyclerViewFragment<VariousItemsAdapter
|
||||
val contextMenuInfo = item!!.menuInfo as ExtendedRecyclerView.ContextMenuInfo
|
||||
val position = contextMenuInfo.position
|
||||
val adapter = adapter
|
||||
when (adapter!!.getItemViewType(position)) {
|
||||
when (adapter.getItemViewType(position)) {
|
||||
VariousItemsAdapter.VIEW_TYPE_STATUS -> {
|
||||
val dummyAdapter = adapter.dummyAdapter
|
||||
val status = dummyAdapter.getStatus(position) ?: return false
|
||||
|
@ -32,7 +32,7 @@ class MutesUsersListFragment : CursorSupportUsersListFragment() {
|
||||
args: Bundle,
|
||||
fromUser: Boolean): CursorSupportUsersLoader {
|
||||
val accountKey = args.getParcelable<UserKey>(EXTRA_ACCOUNT_KEY)
|
||||
val loader = MutesUsersLoader(context, accountKey, adapter!!.getData(), fromUser)
|
||||
val loader = MutesUsersLoader(context, accountKey, adapter.getData(), fromUser)
|
||||
loader.cursor = nextCursor
|
||||
loader.page = nextPage
|
||||
return loader
|
||||
|
@ -77,7 +77,7 @@ abstract class ParcelableGroupsFragment : AbsContentListRecyclerViewFragment<Par
|
||||
|
||||
override fun onLoadFinished(loader: Loader<List<ParcelableGroup>?>, data: List<ParcelableGroup>?) {
|
||||
val adapter = adapter
|
||||
adapter!!.setData(data)
|
||||
adapter.setData(data)
|
||||
if (loader !is IExtendedLoader || loader.fromUser) {
|
||||
adapter.loadMoreSupportedPosition = if (hasMoreData(data)) ILoadMoreSupportAdapter.END else ILoadMoreSupportAdapter.NONE
|
||||
refreshEnabled = true
|
||||
@ -107,7 +107,7 @@ abstract class ParcelableGroupsFragment : AbsContentListRecyclerViewFragment<Par
|
||||
}
|
||||
|
||||
val data: List<ParcelableGroup>?
|
||||
get() = adapter!!.getData()
|
||||
get() = adapter.getData()
|
||||
|
||||
override fun handleKeyboardShortcutSingle(handler: KeyboardShortcutsHandler, keyCode: Int, event: KeyEvent, metaState: Int): Boolean {
|
||||
return mNavigationHelper!!.handleKeyboardShortcutSingle(handler, keyCode, event, metaState)
|
||||
@ -125,9 +125,9 @@ abstract class ParcelableGroupsFragment : AbsContentListRecyclerViewFragment<Par
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
val adapter = adapter
|
||||
val layoutManager = layoutManager
|
||||
adapter!!.groupAdapterListener = this
|
||||
adapter.groupAdapterListener = this
|
||||
|
||||
mNavigationHelper = RecyclerViewNavigationHelper(recyclerView, layoutManager!!, adapter,
|
||||
mNavigationHelper = RecyclerViewNavigationHelper(recyclerView, layoutManager, adapter,
|
||||
this)
|
||||
val loaderArgs = Bundle(arguments)
|
||||
loaderArgs.putBoolean(EXTRA_FROM_USER, true)
|
||||
@ -147,7 +147,7 @@ abstract class ParcelableGroupsFragment : AbsContentListRecyclerViewFragment<Par
|
||||
}
|
||||
|
||||
override fun onGroupClick(holder: GroupViewHolder, position: Int) {
|
||||
IntentUtils.openGroupDetails(context, adapter!!.getGroup(position)!!)
|
||||
IntentUtils.openGroupDetails(context, adapter.getGroup(position)!!)
|
||||
}
|
||||
|
||||
override fun onGroupLongClick(holder: GroupViewHolder, position: Int): Boolean {
|
||||
|
@ -129,7 +129,7 @@ abstract class ParcelableStatusesFragment : AbsStatusesFragment() {
|
||||
refreshing = false
|
||||
setLoadMoreIndicatorPosition(ILoadMoreSupportAdapter.NONE)
|
||||
val adapter = adapter
|
||||
if (adapter!!.itemCount > 0) {
|
||||
if (adapter.itemCount > 0) {
|
||||
showContent()
|
||||
} else if (loader is MicroBlogAPIStatusesLoader) {
|
||||
val e = loader.exception
|
||||
@ -151,7 +151,7 @@ abstract class ParcelableStatusesFragment : AbsStatusesFragment() {
|
||||
if (position == 0L) return
|
||||
val adapter = adapter
|
||||
// Load the last item
|
||||
val idx = adapter!!.statusStartIndex + adapter.rawStatusCount - 1
|
||||
val idx = adapter.statusStartIndex + adapter.rawStatusCount - 1
|
||||
if (idx < 0) return
|
||||
val status = adapter.getStatus(idx) ?: return
|
||||
val accountKeys = arrayOf(status.account_key)
|
||||
@ -166,7 +166,7 @@ abstract class ParcelableStatusesFragment : AbsStatusesFragment() {
|
||||
if (status == null) return
|
||||
val lm = layoutManager
|
||||
val adapter = adapter
|
||||
val rangeStart = Math.max(adapter!!.statusStartIndex, lm!!.findFirstVisibleItemPosition())
|
||||
val rangeStart = Math.max(adapter.statusStartIndex, lm.findFirstVisibleItemPosition())
|
||||
val rangeEnd = Math.min(lm.findLastVisibleItemPosition(), adapter.statusStartIndex + adapter.statusCount - 1)
|
||||
for (i in rangeStart..rangeEnd) {
|
||||
val item = adapter.getStatus(i)
|
||||
@ -183,7 +183,7 @@ abstract class ParcelableStatusesFragment : AbsStatusesFragment() {
|
||||
|
||||
override fun triggerRefresh(): Boolean {
|
||||
super.triggerRefresh()
|
||||
val adapter = adapter ?: return false
|
||||
val adapter = adapter
|
||||
val accountKeys = accountKeys
|
||||
if (adapter.statusCount > 0) {
|
||||
val firstStatus = adapter.getStatus(0)!!
|
||||
@ -251,7 +251,7 @@ abstract class ParcelableStatusesFragment : AbsStatusesFragment() {
|
||||
|
||||
@Subscribe
|
||||
fun notifyStatusListChanged(event: StatusListChangedEvent) {
|
||||
adapter!!.notifyDataSetChanged()
|
||||
adapter.notifyDataSetChanged()
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
|
@ -79,7 +79,7 @@ abstract class ParcelableUserListsFragment : AbsContentListRecyclerViewFragment<
|
||||
|
||||
override fun onLoadFinished(loader: Loader<List<ParcelableUserList>>, data: List<ParcelableUserList>) {
|
||||
val adapter = adapter
|
||||
adapter!!.setData(data)
|
||||
adapter.setData(data)
|
||||
if (loader !is IExtendedLoader || loader.fromUser) {
|
||||
adapter.loadMoreSupportedPosition = if (hasMoreData(data)) ILoadMoreSupportAdapter.END else ILoadMoreSupportAdapter.NONE
|
||||
refreshEnabled = true
|
||||
@ -113,7 +113,7 @@ abstract class ParcelableUserListsFragment : AbsContentListRecyclerViewFragment<
|
||||
}
|
||||
|
||||
val data: List<ParcelableUserList>?
|
||||
get() = adapter!!.getData()
|
||||
get() = adapter.getData()
|
||||
|
||||
override fun handleKeyboardShortcutSingle(handler: KeyboardShortcutsHandler, keyCode: Int, event: KeyEvent, metaState: Int): Boolean {
|
||||
return navigationHelper!!.handleKeyboardShortcutSingle(handler, keyCode, event, metaState)
|
||||
@ -131,9 +131,9 @@ abstract class ParcelableUserListsFragment : AbsContentListRecyclerViewFragment<
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
val adapter = adapter
|
||||
val layoutManager = layoutManager
|
||||
adapter!!.userListClickListener = this
|
||||
adapter.userListClickListener = this
|
||||
|
||||
navigationHelper = RecyclerViewNavigationHelper(recyclerView, layoutManager!!, adapter,
|
||||
navigationHelper = RecyclerViewNavigationHelper(recyclerView, layoutManager, adapter,
|
||||
this)
|
||||
val loaderArgs = Bundle(arguments)
|
||||
loaderArgs.putBoolean(EXTRA_FROM_USER, true)
|
||||
@ -153,7 +153,7 @@ abstract class ParcelableUserListsFragment : AbsContentListRecyclerViewFragment<
|
||||
}
|
||||
|
||||
override fun onUserListClick(holder: UserListViewHolder, position: Int) {
|
||||
val userList = adapter!!.getUserList(position) ?: return
|
||||
val userList = adapter.getUserList(position) ?: return
|
||||
IntentUtils.openUserListDetails(activity, userList)
|
||||
}
|
||||
|
||||
|
@ -63,10 +63,10 @@ abstract class ParcelableUsersFragment : AbsContentListRecyclerViewFragment<Parc
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
val adapter = adapter!!
|
||||
val adapter = adapter
|
||||
adapter.userClickListener = this
|
||||
|
||||
navigationHelper = RecyclerViewNavigationHelper(recyclerView, layoutManager!!, adapter,
|
||||
navigationHelper = RecyclerViewNavigationHelper(recyclerView, layoutManager, adapter,
|
||||
this)
|
||||
val loaderArgs = Bundle(arguments)
|
||||
loaderArgs.putBoolean(IntentConstants.EXTRA_FROM_USER, true)
|
||||
@ -99,7 +99,7 @@ abstract class ParcelableUsersFragment : AbsContentListRecyclerViewFragment<Parc
|
||||
}
|
||||
|
||||
override fun onLoadFinished(loader: Loader<List<ParcelableUser>?>, data: List<ParcelableUser>?) {
|
||||
val adapter = adapter ?: return
|
||||
val adapter = adapter
|
||||
adapter.setData(data)
|
||||
if (loader !is IExtendedLoader || loader.fromUser) {
|
||||
adapter.loadMoreSupportedPosition = if (hasMoreData(data)) ILoadMoreSupportAdapter.END else ILoadMoreSupportAdapter.NONE
|
||||
@ -142,13 +142,13 @@ abstract class ParcelableUsersFragment : AbsContentListRecyclerViewFragment<Parc
|
||||
}
|
||||
|
||||
override fun onUserClick(holder: UserViewHolder, position: Int) {
|
||||
val user = adapter?.getUser(position) ?: return
|
||||
val user = adapter.getUser(position) ?: return
|
||||
IntentUtils.openUserProfile(activity, user, null,
|
||||
preferences.getBoolean(SharedPreferenceConstants.KEY_NEW_DOCUMENT_API), userReferral)
|
||||
}
|
||||
|
||||
override fun onFollowClicked(holder: UserViewHolder, position: Int) {
|
||||
val user = adapter?.getUser(position) ?: return
|
||||
val user = adapter.getUser(position) ?: return
|
||||
if (twitterWrapper.isUpdatingRelationship(user.account_key, user.key)) return
|
||||
if (user.is_following) {
|
||||
DestroyFriendshipDialogFragment.show(fragmentManager, user)
|
||||
@ -158,13 +158,13 @@ abstract class ParcelableUsersFragment : AbsContentListRecyclerViewFragment<Parc
|
||||
}
|
||||
|
||||
override fun onUnblockClicked(holder: UserViewHolder, position: Int) {
|
||||
val user = adapter?.getUser(position) ?: return
|
||||
val user = adapter.getUser(position) ?: return
|
||||
if (twitterWrapper.isUpdatingRelationship(user.account_key, user.key)) return
|
||||
twitterWrapper.destroyBlockAsync(user.account_key, user.key)
|
||||
}
|
||||
|
||||
override fun onUnmuteClicked(holder: UserViewHolder, position: Int) {
|
||||
val user = adapter?.getUser(position) ?: return
|
||||
val user = adapter.getUser(position) ?: return
|
||||
if (twitterWrapper.isUpdatingRelationship(user.account_key, user.key)) return
|
||||
twitterWrapper.destroyMuteAsync(user.account_key, user.key)
|
||||
}
|
||||
@ -183,7 +183,7 @@ abstract class ParcelableUsersFragment : AbsContentListRecyclerViewFragment<Parc
|
||||
|
||||
override fun createItemDecoration(context: Context, recyclerView: RecyclerView,
|
||||
layoutManager: LinearLayoutManager): RecyclerView.ItemDecoration? {
|
||||
val adapter = adapter ?: return null
|
||||
val adapter = adapter
|
||||
val itemDecoration = DividerItemDecoration(context,
|
||||
(recyclerView.layoutManager as LinearLayoutManager).orientation)
|
||||
val res = context.resources
|
||||
@ -208,7 +208,7 @@ abstract class ParcelableUsersFragment : AbsContentListRecyclerViewFragment<Parc
|
||||
}
|
||||
|
||||
private fun findPosition(accountKey: UserKey, userKey: UserKey): Int {
|
||||
return adapter?.findPosition(accountKey, userKey) ?: RecyclerView.NO_POSITION
|
||||
return adapter.findPosition(accountKey, userKey)
|
||||
}
|
||||
|
||||
protected open fun shouldRemoveUser(position: Int, event: FriendshipTaskEvent): Boolean {
|
||||
@ -227,7 +227,7 @@ abstract class ParcelableUsersFragment : AbsContentListRecyclerViewFragment<Parc
|
||||
|
||||
@Subscribe
|
||||
fun onFriendshipTaskEvent(event: FriendshipTaskEvent) {
|
||||
val adapter = adapter ?: return
|
||||
val adapter = adapter
|
||||
val position = findPosition(event.accountKey, event.userKey)
|
||||
val data = adapter.getData() ?: return
|
||||
if (position < 0 || position >= data.size) return
|
||||
|
@ -45,7 +45,7 @@ class SearchUsersFragment : ParcelableUsersFragment() {
|
||||
val accountKey = args.getParcelable<UserKey>(EXTRA_ACCOUNT_KEY)
|
||||
val query = args.getString(EXTRA_QUERY)
|
||||
val page = args.getInt(EXTRA_PAGE, 1)
|
||||
return UserSearchLoader(context, accountKey, query, page, adapter!!.getData(), fromUser)
|
||||
return UserSearchLoader(context, accountKey, query, page, adapter.getData(), fromUser)
|
||||
}
|
||||
|
||||
override fun onLoadFinished(loader: Loader<List<ParcelableUser>?>, data: List<ParcelableUser>?) {
|
||||
|
@ -33,7 +33,7 @@ class StatusFavoritersListFragment : CursorSupportUsersListFragment() {
|
||||
val accountKey = args.getParcelable<UserKey>(EXTRA_ACCOUNT_KEY)
|
||||
val statusId = args.getString(EXTRA_STATUS_ID)
|
||||
val loader = StatusFavoritersLoader(context, accountKey,
|
||||
statusId, adapter!!.getData(), false)
|
||||
statusId, adapter.getData(), false)
|
||||
loader.cursor = nextCursor
|
||||
loader.page = nextPage
|
||||
return loader
|
||||
|
@ -35,7 +35,7 @@ class StatusRetweetersListFragment : CursorSupportUsersListFragment() {
|
||||
val accountKey = args.getParcelable<UserKey>(EXTRA_ACCOUNT_KEY)
|
||||
val statusId = args.getString(EXTRA_STATUS_ID)
|
||||
val loader = StatusRetweetersLoader(context, accountKey, statusId,
|
||||
adapter!!.getData(), fromUser)
|
||||
adapter.getData(), fromUser)
|
||||
loader.cursor = nextCursor
|
||||
loader.page = nextPage
|
||||
return loader
|
||||
|
@ -33,7 +33,7 @@ class UserBlocksListFragment : CursorSupportUsersListFragment() {
|
||||
args: Bundle,
|
||||
fromUser: Boolean): CursorSupportUsersLoader {
|
||||
val accountKey = args.getParcelable<UserKey>(EXTRA_ACCOUNT_KEY)
|
||||
val loader = UserBlocksLoader(context, accountKey, adapter!!.getData(), fromUser)
|
||||
val loader = UserBlocksLoader(context, accountKey, adapter.getData(), fromUser)
|
||||
loader.cursor = nextCursor
|
||||
loader.page = nextPage
|
||||
return loader
|
||||
|
@ -36,7 +36,7 @@ class UserFollowersFragment : CursorSupportUsersListFragment() {
|
||||
val userKey = args.getParcelable<UserKey>(EXTRA_USER_KEY)
|
||||
val screenName = args.getString(EXTRA_SCREEN_NAME)
|
||||
val loader = UserFollowersLoader(context, accountKey, userKey, screenName,
|
||||
adapter!!.getData(), fromUser)
|
||||
adapter.getData(), fromUser)
|
||||
loader.cursor = nextCursor
|
||||
loader.page = nextPage
|
||||
return loader
|
||||
|
@ -1322,7 +1322,7 @@ class UserFragment : BaseSupportFragment(), OnClickListener, OnLinkClickListener
|
||||
private fun setupBaseActionBar() {
|
||||
val activity = activity as? LinkHandlerActivity ?: return
|
||||
val actionBar = activity.supportActionBar ?: return
|
||||
val shadow = ResourcesCompat.getDrawable(activity.getResources(), R.drawable.shadow_user_banner_action_bar, null)
|
||||
val shadow = ResourcesCompat.getDrawable(activity.resources, R.drawable.shadow_user_banner_action_bar, null)
|
||||
mActionBarBackground = ActionBarDrawable(shadow!!)
|
||||
if (!ThemeUtils.isWindowFloating(activity) && ThemeUtils.isTransparentBackground(activity.currentThemeBackgroundOption)) {
|
||||
// mActionBarBackground.setAlpha(ThemeUtils.getActionBarAlpha(linkHandler.getCurrentThemeBackgroundAlpha()));
|
||||
|
@ -35,7 +35,7 @@ class UserFriendsFragment : CursorSupportUsersListFragment() {
|
||||
val userKey = args.getParcelable<UserKey>(EXTRA_USER_KEY)
|
||||
val screenName = args.getString(EXTRA_SCREEN_NAME)
|
||||
val loader = UserFriendsLoader(context, accountKey, userKey,
|
||||
screenName, adapter!!.getData(), fromUser)
|
||||
screenName, adapter.getData(), fromUser)
|
||||
loader.cursor = nextCursor
|
||||
loader.page = nextPage
|
||||
return loader
|
||||
|
@ -50,7 +50,7 @@ class UserListMembersFragment : CursorSupportUsersListFragment() {
|
||||
val screenName = args.getString(EXTRA_SCREEN_NAME)
|
||||
val listName = args.getString(EXTRA_LIST_NAME)
|
||||
val loader = UserListMembersLoader(context, accountId, listId,
|
||||
userKey, screenName, listName, adapter!!.getData(), fromUser)
|
||||
userKey, screenName, listName, adapter.getData(), fromUser)
|
||||
loader.cursor = nextCursor
|
||||
loader.page = nextPage
|
||||
return loader
|
||||
@ -91,7 +91,7 @@ class UserListMembersFragment : CursorSupportUsersListFragment() {
|
||||
val inflater = MenuInflater(context)
|
||||
val contextMenuInfo = menuInfo as ExtendedRecyclerView.ContextMenuInfo?
|
||||
inflater.inflate(R.menu.action_user_list_member, menu)
|
||||
val user = adapter!!.getUser(contextMenuInfo!!.position)
|
||||
val user = adapter.getUser(contextMenuInfo!!.position)
|
||||
menu.setHeaderTitle(userColorNameManager.getDisplayName(user, preferences.getBoolean(KEY_NAME_FIRST)))
|
||||
}
|
||||
|
||||
@ -99,7 +99,7 @@ class UserListMembersFragment : CursorSupportUsersListFragment() {
|
||||
if (!userVisibleHint) return false
|
||||
val userList = userList ?: return false
|
||||
val contextMenuInfo = item!!.menuInfo as ExtendedRecyclerView.ContextMenuInfo
|
||||
val user = adapter!!.getUser(contextMenuInfo.position) ?: return false
|
||||
val user = adapter.getUser(contextMenuInfo.position) ?: return false
|
||||
when (item.itemId) {
|
||||
R.id.delete_from_list -> {
|
||||
DeleteUserListMembersDialogFragment.show(fragmentManager, userList, user)
|
||||
@ -134,7 +134,7 @@ class UserListMembersFragment : CursorSupportUsersListFragment() {
|
||||
UserListMembersChangedEvent.Action.ADDED -> {
|
||||
val adapter = adapter
|
||||
val newUsers = Arrays.asList(*event.users)
|
||||
val users = adapter!!.getData() ?: return
|
||||
val users = adapter.getData() ?: return
|
||||
if (users is MutableList) {
|
||||
users.removeAll(newUsers)
|
||||
users.addAll(0, newUsers)
|
||||
@ -145,7 +145,7 @@ class UserListMembersFragment : CursorSupportUsersListFragment() {
|
||||
UserListMembersChangedEvent.Action.REMOVED -> {
|
||||
val adapter = adapter
|
||||
val removedUsers = Arrays.asList(*event.users)
|
||||
val users = adapter!!.getData() ?: return
|
||||
val users = adapter.getData() ?: return
|
||||
if (users is MutableList) {
|
||||
users.removeAll(removedUsers)
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ class UserListSubscribersFragment : CursorSupportUsersListFragment() {
|
||||
val screenName = args.getString(EXTRA_SCREEN_NAME)
|
||||
val listName = args.getString(EXTRA_LIST_NAME)
|
||||
val loader = UserListSubscribersLoader(context, accountKey,
|
||||
listId, userKey, screenName, listName, adapter!!.getData(), fromUser)
|
||||
listId, userKey, screenName, listName, adapter.getData(), fromUser)
|
||||
loader.cursor = nextCursor
|
||||
loader.page = nextPage
|
||||
return loader
|
||||
|
@ -32,7 +32,7 @@ import org.mariotaku.twidere.view.holder.iface.IStatusViewHolder
|
||||
class UserMediaTimelineFragment : AbsContentRecyclerViewFragment<StaggeredGridParcelableStatusesAdapter, StaggeredGridLayoutManager>(), LoaderCallbacks<List<ParcelableStatus>>, DrawerCallback, IStatusViewHolder.StatusClickListener {
|
||||
|
||||
override fun scrollToPositionWithOffset(position: Int, offset: Int) {
|
||||
layoutManager!!.scrollToPositionWithOffset(position, offset)
|
||||
layoutManager.scrollToPositionWithOffset(position, offset)
|
||||
}
|
||||
|
||||
override var refreshing: Boolean
|
||||
@ -48,7 +48,7 @@ class UserMediaTimelineFragment : AbsContentRecyclerViewFragment<StaggeredGridPa
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
val adapter = adapter
|
||||
adapter!!.statusClickListener = this
|
||||
adapter.statusClickListener = this
|
||||
val loaderArgs = Bundle(arguments)
|
||||
loaderArgs.putBoolean(EXTRA_FROM_USER, true)
|
||||
loaderManager.initLoader(0, loaderArgs, this)
|
||||
@ -95,12 +95,12 @@ class UserMediaTimelineFragment : AbsContentRecyclerViewFragment<StaggeredGridPa
|
||||
val fromUser = args.getBoolean(EXTRA_FROM_USER)
|
||||
val loadingMore = args.getBoolean(EXTRA_LOADING_MORE, false)
|
||||
return MediaTimelineLoader(context, accountKey, userKey, screenName, sinceId, maxId,
|
||||
adapter!!.getData(), null, tabPosition, fromUser, loadingMore)
|
||||
adapter.getData(), null, tabPosition, fromUser, loadingMore)
|
||||
}
|
||||
|
||||
override fun onLoadFinished(loader: Loader<List<ParcelableStatus>>, data: List<ParcelableStatus>?) {
|
||||
val adapter = adapter
|
||||
val changed = adapter!!.setData(data)
|
||||
val changed = adapter.setData(data)
|
||||
if ((loader as IExtendedLoader).fromUser && loader is MediaTimelineLoader) {
|
||||
val maxId = loader.maxId
|
||||
val sinceId = loader.sinceId
|
||||
@ -118,19 +118,19 @@ class UserMediaTimelineFragment : AbsContentRecyclerViewFragment<StaggeredGridPa
|
||||
}
|
||||
|
||||
override fun onLoaderReset(loader: Loader<List<ParcelableStatus>>) {
|
||||
adapter!!.setData(null)
|
||||
adapter.setData(null)
|
||||
}
|
||||
|
||||
override val reachingEnd: Boolean
|
||||
get() {
|
||||
val lm = layoutManager
|
||||
return ArrayUtils.contains(lm!!.findLastCompletelyVisibleItemPositions(null), lm.itemCount - 1)
|
||||
return ArrayUtils.contains(lm.findLastCompletelyVisibleItemPositions(null), lm.itemCount - 1)
|
||||
}
|
||||
|
||||
override val reachingStart: Boolean
|
||||
get() {
|
||||
val lm = layoutManager
|
||||
return ArrayUtils.contains(lm!!.findFirstCompletelyVisibleItemPositions(null), 0)
|
||||
return ArrayUtils.contains(lm.findFirstCompletelyVisibleItemPositions(null), 0)
|
||||
}
|
||||
|
||||
override fun onLoadMoreContents(position: Long) {
|
||||
@ -138,7 +138,7 @@ class UserMediaTimelineFragment : AbsContentRecyclerViewFragment<StaggeredGridPa
|
||||
if (position and ILoadMoreSupportAdapter.START != 0L) return
|
||||
super.onLoadMoreContents(position)
|
||||
if (position == 0L) return
|
||||
val adapter = adapter ?: return
|
||||
val adapter = adapter
|
||||
val maxId = adapter.getStatusId(adapter.statusCount - 1)
|
||||
getStatuses(maxId, null)
|
||||
}
|
||||
@ -149,7 +149,7 @@ class UserMediaTimelineFragment : AbsContentRecyclerViewFragment<StaggeredGridPa
|
||||
}
|
||||
|
||||
override fun onStatusClick(holder: IStatusViewHolder, position: Int) {
|
||||
IntentUtils.openStatus(context, adapter!!.getStatus(position)!!, null)
|
||||
IntentUtils.openStatus(context, adapter.getStatus(position)!!, null)
|
||||
}
|
||||
|
||||
override fun onStatusLongClick(holder: IStatusViewHolder, position: Int): Boolean {
|
||||
|
@ -92,14 +92,14 @@ class UserTimelineFragment : ParcelableStatusesFragment() {
|
||||
val screenName = args.getString(EXTRA_SCREEN_NAME)
|
||||
val tabPosition = args.getInt(EXTRA_TAB_POSITION, -1)
|
||||
val loadingMore = args.getBoolean(EXTRA_LOADING_MORE, 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,
|
||||
savedStatusesFileArgs, tabPosition, fromUser, loadingMore, pinnedIds)
|
||||
}
|
||||
|
||||
override fun onStatusesLoaded(loader: Loader<List<ParcelableStatus>?>, data: List<ParcelableStatus>?) {
|
||||
val timelineLoader = loader as UserTimelineLoader
|
||||
val adapter = adapter!!
|
||||
val adapter = adapter
|
||||
if (!adapter.hasPinnedStatuses) {
|
||||
adapter.pinnedStatuses = timelineLoader.pinnedStatuses
|
||||
}
|
||||
|
@ -1,16 +1,13 @@
|
||||
package org.mariotaku.twidere.service
|
||||
|
||||
import android.accounts.AccountManager
|
||||
import android.accounts.OnAccountsUpdateListener
|
||||
import android.app.NotificationManager
|
||||
import android.app.PendingIntent
|
||||
import android.app.Service
|
||||
import android.content.ContentResolver
|
||||
import android.content.ContentValues
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.database.ContentObserver
|
||||
import android.net.Uri
|
||||
import android.os.Handler
|
||||
import android.os.IBinder
|
||||
import android.support.v4.app.NotificationCompat
|
||||
import android.support.v4.util.SimpleArrayMap
|
||||
@ -42,60 +39,50 @@ import java.nio.charset.Charset
|
||||
|
||||
class StreamingService : Service() {
|
||||
|
||||
private val mCallbacks = SimpleArrayMap<UserKey, UserStreamCallback>()
|
||||
private var mResolver: ContentResolver? = null
|
||||
private val callbacks = SimpleArrayMap<UserKey, UserStreamCallback>()
|
||||
|
||||
private var mNotificationManager: NotificationManager? = null
|
||||
private var notificationManager: NotificationManager? = null
|
||||
|
||||
private var mAccountKeys: Array<UserKey>? = null
|
||||
private var accountKeys: Array<UserKey>? = null
|
||||
|
||||
private val mAccountChangeObserver = object : ContentObserver(Handler()) {
|
||||
|
||||
override fun onChange(selfChange: Boolean) {
|
||||
onChange(selfChange, null)
|
||||
private val accountChangeObserver = OnAccountsUpdateListener {
|
||||
if (!TwidereArrayUtils.contentMatch(accountKeys, DataStoreUtils.getActivatedAccountKeys(this@StreamingService))) {
|
||||
initStreaming()
|
||||
}
|
||||
|
||||
override fun onChange(selfChange: Boolean, uri: Uri?) {
|
||||
if (!TwidereArrayUtils.contentMatch(mAccountKeys, DataStoreUtils.getActivatedAccountKeys(this@StreamingService))) {
|
||||
initStreaming()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun onBind(intent: Intent): IBinder? {
|
||||
return null
|
||||
}
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
mResolver = contentResolver
|
||||
mNotificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||
notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.d(LOGTAG, "Stream service started.")
|
||||
}
|
||||
initStreaming()
|
||||
mResolver!!.registerContentObserver(Accounts.CONTENT_URI, true, mAccountChangeObserver)
|
||||
AccountManager.get(this).addOnAccountsUpdatedListener(accountChangeObserver, null, false)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
clearTwitterInstances()
|
||||
mResolver!!.unregisterContentObserver(mAccountChangeObserver)
|
||||
AccountManager.get(this).removeOnAccountsUpdatedListener(accountChangeObserver)
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.d(LOGTAG, "Stream service stopped.")
|
||||
}
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
override fun onBind(intent: Intent): IBinder? {
|
||||
return null
|
||||
}
|
||||
|
||||
private fun clearTwitterInstances() {
|
||||
var i = 0
|
||||
val j = mCallbacks.size()
|
||||
val j = callbacks.size()
|
||||
while (i < j) {
|
||||
Thread(ShutdownStreamTwitterRunnable(mCallbacks.valueAt(i))).start()
|
||||
Thread(ShutdownStreamTwitterRunnable(callbacks.valueAt(i))).start()
|
||||
i++
|
||||
}
|
||||
mCallbacks.clear()
|
||||
mNotificationManager!!.cancel(NOTIFICATION_SERVICE_STARTED)
|
||||
callbacks.clear()
|
||||
notificationManager!!.cancel(NOTIFICATION_SERVICE_STARTED)
|
||||
}
|
||||
|
||||
private fun initStreaming() {
|
||||
@ -111,7 +98,7 @@ class StreamingService : Service() {
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.d(LOGTAG, "Setting up twitter stream instances")
|
||||
}
|
||||
mAccountKeys = accountKeys
|
||||
this.accountKeys = accountKeys
|
||||
clearTwitterInstances()
|
||||
var result = false
|
||||
accountsList.forEachIndexed { i, account ->
|
||||
@ -121,12 +108,12 @@ class StreamingService : Service() {
|
||||
}
|
||||
val twitter = account.credentials.newMicroBlogInstance(context = this, cls = TwitterUserStream::class.java)
|
||||
val callback = TwidereUserStreamCallback(this, account)
|
||||
mCallbacks.put(account.key, callback)
|
||||
callbacks.put(account.key, callback)
|
||||
object : Thread() {
|
||||
override fun run() {
|
||||
twitter.getUserStream(callback)
|
||||
Log.d(LOGTAG, String.format("Stream %s disconnected", account.key))
|
||||
mCallbacks.remove(account.key)
|
||||
callbacks.remove(account.key)
|
||||
updateStreamState()
|
||||
}
|
||||
}.start()
|
||||
@ -136,7 +123,7 @@ class StreamingService : Service() {
|
||||
}
|
||||
|
||||
private fun updateStreamState() {
|
||||
if (mCallbacks.size() > 0) {
|
||||
if (callbacks.size() > 0) {
|
||||
val intent = Intent(this, SettingsActivity::class.java)
|
||||
val contentIntent = PendingIntent.getActivity(this, 0, intent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT)
|
||||
@ -148,9 +135,9 @@ class StreamingService : Service() {
|
||||
builder.setContentTitle(contentTitle)
|
||||
builder.setContentText(contentText)
|
||||
builder.setContentIntent(contentIntent)
|
||||
mNotificationManager!!.notify(NOTIFICATION_SERVICE_STARTED, builder.build())
|
||||
notificationManager!!.notify(NOTIFICATION_SERVICE_STARTED, builder.build())
|
||||
} else {
|
||||
mNotificationManager!!.cancel(NOTIFICATION_SERVICE_STARTED)
|
||||
notificationManager!!.cancel(NOTIFICATION_SERVICE_STARTED)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user