diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/provider/TwidereDataStore.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/provider/TwidereDataStore.java
index 24ecdbc43..251bc45bb 100644
--- a/twidere.component.common/src/main/java/org/mariotaku/twidere/provider/TwidereDataStore.java
+++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/provider/TwidereDataStore.java
@@ -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
diff --git a/twidere/src/androidTest/java/org/mariotaku/twidere/util/StatusShortenerInterfaceTest.kt b/twidere/src/androidTest/java/org/mariotaku/twidere/util/StatusShortenerInterfaceTest.kt
index eb52fb12c..83d20935c 100644
--- a/twidere/src/androidTest/java/org/mariotaku/twidere/util/StatusShortenerInterfaceTest.kt
+++ b/twidere/src/androidTest/java/org/mariotaku/twidere/util/StatusShortenerInterfaceTest.kt
@@ -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
diff --git a/twidere/src/main/java/org/mariotaku/twidere/provider/TwidereDataProvider.java b/twidere/src/main/java/org/mariotaku/twidere/provider/TwidereDataProvider.java
index 6b67f926e..abe92e5cd 100644
--- a/twidere/src/main/java/org/mariotaku/twidere/provider/TwidereDataProvider.java
+++ b/twidere/src/main/java/org/mariotaku/twidere/provider/TwidereDataProvider.java
@@ -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 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) {
diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/DataStoreUtils.java b/twidere/src/main/java/org/mariotaku/twidere/util/DataStoreUtils.java
index fb720a067..e7808333e 100644
--- a/twidere/src/main/java/org/mariotaku/twidere/util/DataStoreUtils.java
+++ b/twidere/src/main/java/org/mariotaku/twidere/util/DataStoreUtils.java
@@ -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 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:
diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/collection/CompactHashSet.java b/twidere/src/main/java/org/mariotaku/twidere/util/collection/CompactHashSet.java
index 76eb0919b..3d16e6b82 100644
--- a/twidere/src/main/java/org/mariotaku/twidere/util/collection/CompactHashSet.java
+++ b/twidere/src/main/java/org/mariotaku/twidere/util/collection/CompactHashSet.java
@@ -356,7 +356,7 @@ public class CompactHashSet extends java.util.AbstractSet {
offset = 2;
}
- newObjects[index] = (E) o;
+ newObjects[index] = o;
}
objects = newObjects;
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/ComposeActivity.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/ComposeActivity.kt
index 036402bfc..99128e688 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/ComposeActivity.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/ComposeActivity.kt
@@ -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)
}
}
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/HomeActivity.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/HomeActivity.kt
index b21219620..72d4816e4 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/HomeActivity.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/HomeActivity.kt
@@ -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)
mainTabs.setDisplayBadge(preferences.getBoolean(SharedPreferenceConstants.KEY_UNREAD_COUNT, true))
}
val tabs: List
- 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?) {
+ activity.notifyAccountsChanged()
+ activity.updateUnreadCount()
}
}
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/PlusServiceDashboardActivity.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/PlusServiceDashboardActivity.kt
index fa22da244..16d419160 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/activity/PlusServiceDashboardActivity.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/activity/PlusServiceDashboardActivity.kt
@@ -81,7 +81,7 @@ class PlusServiceDashboardActivity : BaseActivity() {
override fun loadInBackground(): List {
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)
}
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsActivitiesFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsActivitiesFragment.kt
index 8849ed8a5..112710ead 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsActivitiesFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsActivitiesFragment.kt
@@ -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()
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?
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()
}
}
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsContentListRecyclerViewFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsContentListRecyclerViewFragment.kt
index 7ceaa5b54..41be66f75 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsContentListRecyclerViewFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsContentListRecyclerViewFragment.kt
@@ -51,7 +51,7 @@ abstract class AbsContentListRecyclerViewFragment= lm.itemCount - 1
}
override val reachingStart: Boolean
get() {
- val lm = layoutManager ?: return false
+ val lm = layoutManager
return lm.findFirstCompletelyVisibleItemPosition() <= 0
}
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsContentRecyclerViewFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsContentRecyclerViewFragment.kt
index 1e7a11c66..914555af1 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsContentRecyclerViewFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AbsContentRecyclerViewFragment.kt
@@ -46,9 +46,10 @@ import org.mariotaku.twidere.view.iface.IExtendedView
abstract class AbsContentRecyclerViewFragment, 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 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?
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?>, data: List?) {
- 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()
}
}
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AccountsDashboardFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AccountsDashboardFragment.kt
index 2f519273e..9016048ae 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AccountsDashboardFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AccountsDashboardFragment.kt
@@ -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
- 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(context) {
private var contentObserver: ContentObserver? = null
+ private var accountListener: OnAccountsUpdateListener? = null
private var firstLoad: Boolean
@@ -746,10 +747,13 @@ class AccountsDashboardFragment : BaseSupportFragment(), LoaderCallbacks
+ onContentChanged()
+ }
+ AccountManager.get(context).addOnAccountsUpdatedListener(accountListener, null, false)
}
if (takeContentChanged() || firstLoad) {
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AccountsManagerFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AccountsManagerFragment.kt
index 81d5e5325..2b4735ffe 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AccountsManagerFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/AccountsManagerFragment.kt
@@ -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>,
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> {
return AccountDetailsLoader(context)
}
@@ -144,27 +147,17 @@ class AccountsManagerFragment : BaseSupportFragment(), LoaderManager.LoaderCallb
}
override fun onLoadFinished(loader: Loader>, data: List) {
- 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)
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/CursorActivitiesFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/CursorActivitiesFragment.kt
index 5033c882b..e87a50930 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/CursorActivitiesFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/CursorActivitiesFragment.kt
@@ -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
- 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?): Boolean {
return data?.size != 0
}
override fun onLoaderReset(loader: Loader>) {
- 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
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/CursorStatusesFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/CursorStatusesFragment.kt
index 1f02eaa2a..eeea4ccdb 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/CursorStatusesFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/CursorStatusesFragment.kt
@@ -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?> {
+ override fun onCreateStatusesLoader(context: Context, args: Bundle, fromUser: Boolean): Loader?> {
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
- 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?): Boolean {
return data?.size != 0
}
@@ -167,7 +165,7 @@ abstract class CursorStatusesFragment : AbsStatusesFragment() {
}
override fun onLoaderReset(loader: Loader?>) {
- 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
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/DirectMessagesFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/DirectMessagesFragment.kt
index 67fb9910d..2fb6f1112 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/DirectMessagesFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/DirectMessagesFragment.kt
@@ -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(), LoaderCallbacks, 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) {
- val adapter = adapter
- adapter!!.setCursor(null)
+ adapter.setCursor(null)
}
override fun onEntryClick(position: Int, entry: DirectMessageEntry) {
@@ -219,8 +218,7 @@ class DirectMessagesFragment : AbsContentListRecyclerViewFragment
+
+ }
+ 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(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)
}
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ItemsListFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ItemsListFragment.kt
index 6a23efc2a..468ec7f0f 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ItemsListFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ItemsListFragment.kt
@@ -60,7 +60,7 @@ class ItemsListFragment : AbsContentListRecyclerViewFragment?>, data: List<*>?) {
- adapter!!.setData(data)
+ adapter.setData(data)
}
override fun onLoaderReset(loader: Loader?>) {
- adapter!!.setData(null)
+ adapter.setData(null)
}
override var refreshing: Boolean
@@ -117,7 +117,7 @@ class ItemsListFragment : AbsContentListRecyclerViewFragment {
val dummyAdapter = adapter.dummyAdapter
val status = dummyAdapter.getStatus(contextMenuInfo.position) ?: return
@@ -133,7 +133,7 @@ class ItemsListFragment : AbsContentListRecyclerViewFragment {
val dummyAdapter = adapter.dummyAdapter
val status = dummyAdapter.getStatus(position) ?: return false
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/MutesUsersListFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/MutesUsersListFragment.kt
index 633c70b11..e59a957c3 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/MutesUsersListFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/MutesUsersListFragment.kt
@@ -32,7 +32,7 @@ class MutesUsersListFragment : CursorSupportUsersListFragment() {
args: Bundle,
fromUser: Boolean): CursorSupportUsersLoader {
val accountKey = args.getParcelable(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
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ParcelableGroupsFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ParcelableGroupsFragment.kt
index 3ebbbe27b..2d46a60ca 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ParcelableGroupsFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ParcelableGroupsFragment.kt
@@ -77,7 +77,7 @@ abstract class ParcelableGroupsFragment : AbsContentListRecyclerViewFragment?>, data: List?) {
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?
- 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 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
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ParcelableUserListsFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ParcelableUserListsFragment.kt
index 6b823fd4a..d162d00f2 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ParcelableUserListsFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ParcelableUserListsFragment.kt
@@ -79,7 +79,7 @@ abstract class ParcelableUserListsFragment : AbsContentListRecyclerViewFragment<
override fun onLoadFinished(loader: Loader>, data: List) {
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?
- 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)
}
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ParcelableUsersFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ParcelableUsersFragment.kt
index 7828e29bf..00a72df89 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ParcelableUsersFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/ParcelableUsersFragment.kt
@@ -63,10 +63,10 @@ abstract class ParcelableUsersFragment : AbsContentListRecyclerViewFragment?>, data: List?) {
- 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= data.size) return
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/SearchUsersFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/SearchUsersFragment.kt
index 550260baa..a3502de83 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/SearchUsersFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/SearchUsersFragment.kt
@@ -45,7 +45,7 @@ class SearchUsersFragment : ParcelableUsersFragment() {
val accountKey = args.getParcelable(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?>, data: List?) {
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/StatusFavoritersListFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/StatusFavoritersListFragment.kt
index 8f083e71b..fbfe5d90e 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/StatusFavoritersListFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/StatusFavoritersListFragment.kt
@@ -33,7 +33,7 @@ class StatusFavoritersListFragment : CursorSupportUsersListFragment() {
val accountKey = args.getParcelable(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
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/StatusRetweetersListFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/StatusRetweetersListFragment.kt
index ee5b762e0..7a0d0fc32 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/StatusRetweetersListFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/StatusRetweetersListFragment.kt
@@ -35,7 +35,7 @@ class StatusRetweetersListFragment : CursorSupportUsersListFragment() {
val accountKey = args.getParcelable(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
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserBlocksListFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserBlocksListFragment.kt
index c5a8a5423..0b6ec188e 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserBlocksListFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserBlocksListFragment.kt
@@ -33,7 +33,7 @@ class UserBlocksListFragment : CursorSupportUsersListFragment() {
args: Bundle,
fromUser: Boolean): CursorSupportUsersLoader {
val accountKey = args.getParcelable(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
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFollowersFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFollowersFragment.kt
index 04e8e83fc..4a6bc59a5 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFollowersFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFollowersFragment.kt
@@ -36,7 +36,7 @@ class UserFollowersFragment : CursorSupportUsersListFragment() {
val userKey = args.getParcelable(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
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFragment.kt
index bc5289df4..51731afa0 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFragment.kt
@@ -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()));
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFriendsFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFriendsFragment.kt
index be5495ccc..c783440a0 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFriendsFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserFriendsFragment.kt
@@ -35,7 +35,7 @@ class UserFriendsFragment : CursorSupportUsersListFragment() {
val userKey = args.getParcelable(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
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserListMembersFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserListMembersFragment.kt
index ae58c96dd..363aa1ded 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserListMembersFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserListMembersFragment.kt
@@ -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)
}
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserListSubscribersFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserListSubscribersFragment.kt
index 888aacf45..3d1842521 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserListSubscribersFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserListSubscribersFragment.kt
@@ -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
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserMediaTimelineFragment.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserMediaTimelineFragment.kt
index c4190440d..0e4dd5328 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserMediaTimelineFragment.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/fragment/UserMediaTimelineFragment.kt
@@ -32,7 +32,7 @@ import org.mariotaku.twidere.view.holder.iface.IStatusViewHolder
class UserMediaTimelineFragment : AbsContentRecyclerViewFragment(), LoaderCallbacks>, 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>, data: List?) {
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>) {
- 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?>, data: List?) {
val timelineLoader = loader as UserTimelineLoader
- val adapter = adapter!!
+ val adapter = adapter
if (!adapter.hasPinnedStatuses) {
adapter.pinnedStatuses = timelineLoader.pinnedStatuses
}
diff --git a/twidere/src/main/kotlin/org/mariotaku/twidere/service/StreamingService.kt b/twidere/src/main/kotlin/org/mariotaku/twidere/service/StreamingService.kt
index e9b635920..fade2ca03 100644
--- a/twidere/src/main/kotlin/org/mariotaku/twidere/service/StreamingService.kt
+++ b/twidere/src/main/kotlin/org/mariotaku/twidere/service/StreamingService.kt
@@ -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()
- private var mResolver: ContentResolver? = null
+ private val callbacks = SimpleArrayMap()
- private var mNotificationManager: NotificationManager? = null
+ private var notificationManager: NotificationManager? = null
- private var mAccountKeys: Array? = null
+ private var accountKeys: Array? = 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)
}
}