diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/AbsActivitiesFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/AbsActivitiesFragment.java index b6dc8ae9c..ddf11688c 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/AbsActivitiesFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/AbsActivitiesFragment.java @@ -214,8 +214,6 @@ public abstract class AbsActivitiesFragment extends AbsContentListRecyclerViewFr final ParcelableStatus status = ParcelableActivityUtils.getActivityStatus(activity); if (status != null) { IntentUtils.openStatus(getContext(), status, null); - } else { - } } @@ -547,6 +545,7 @@ public abstract class AbsActivitiesFragment extends AbsContentListRecyclerViewFr return new StatusesBusCallback(); } + @Nullable protected abstract UserKey[] getAccountKeys(); protected List getAdapterData() { @@ -554,11 +553,6 @@ public abstract class AbsActivitiesFragment extends AbsContentListRecyclerViewFr return adapter.getData(); } - protected void setAdapterData(List data) { - final ParcelableActivitiesAdapter adapter = getAdapter(); - adapter.setData(data); - } - @ReadPositionTag @Nullable protected String getReadPositionTag() { @@ -573,23 +567,26 @@ public abstract class AbsActivitiesFragment extends AbsContentListRecyclerViewFr protected abstract void onLoadingFinished(); protected void saveReadPosition(int position) { + if (getContext() == null) return; final String readPositionTag = getReadPositionTagWithAccounts(); if (readPositionTag == null) return; if (position == RecyclerView.NO_POSITION) return; final ParcelableActivitiesAdapter adapter = getAdapter(); - final ParcelableActivity activity = adapter.getActivity(position); - if (activity == null) return; - if (mReadStateManager.setPosition(readPositionTag, activity.timestamp)) { - mTwitterWrapper.setActivitiesAboutMeUnreadAsync(getAccountKeys(), activity.timestamp); + final ParcelableActivity item = adapter.getActivity(position); + if (item == null) return; + final UserKey[] accountKeys = getAccountKeys(); + assert accountKeys != null; + if (mReadStateManager.setPosition(readPositionTag, item.timestamp)) { + mTwitterWrapper.setActivitiesAboutMeUnreadAsync(accountKeys, item.timestamp); } - for (UserKey accountKey : getAccountKeys()) { + for (UserKey accountKey : accountKeys) { final String tag = Utils.getReadPositionTagWithAccounts(getReadPositionTag(), accountKey); - mReadStateManager.setPosition(tag, activity.timestamp); + mReadStateManager.setPosition(tag, item.timestamp); } - mReadStateManager.setPosition(getCurrentReadPositionTag(), activity.timestamp, true); + mReadStateManager.setPosition(getCurrentReadPositionTag(), item.timestamp, true); } @NonNull diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/CursorActivitiesFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/CursorActivitiesFragment.java index a73e6f965..0e9180931 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/CursorActivitiesFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/CursorActivitiesFragment.java @@ -28,7 +28,6 @@ import android.os.Bundle; import android.os.Handler; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.v4.app.FragmentActivity; import android.support.v4.content.Loader; import android.support.v7.widget.LinearLayoutManager; @@ -67,19 +66,21 @@ import java.util.List; import static org.mariotaku.twidere.util.DataStoreUtils.getTableNameByUri; /** + * Displays statuses from database * Created by mariotaku on 14/12/3. */ public abstract class CursorActivitiesFragment extends AbsActivitiesFragment { @Override protected void onLoadingFinished() { - final UserKey[] accountIds = getAccountKeys(); + final UserKey[] accountKeys = getAccountKeys(); + assert accountKeys != null; final ParcelableActivitiesAdapter adapter = getAdapter(); if (adapter.getItemCount() > 0) { showContent(); - } else if (accountIds.length > 0) { + } else if (accountKeys.length > 0) { final ErrorInfoStore.DisplayErrorInfo errorInfo = ErrorInfoStore.getErrorInfo(getContext(), - mErrorInfoStore.get(getErrorInfoKey(), accountIds[0])); + mErrorInfoStore.get(getErrorInfoKey(), accountKeys[0])); if (errorInfo != null) { showEmpty(errorInfo.getIcon(), errorInfo.getMessage()); } else { @@ -105,6 +106,7 @@ public abstract class CursorActivitiesFragment extends AbsActivitiesFragment { final String table = getTableNameByUri(uri); final String sortOrder = getSortOrder(); final UserKey[] accountKeys = getAccountKeys(); + assert accountKeys != null; final Expression accountWhere = Expression.in(new Column(Activities.ACCOUNT_KEY), new ArgsArray(accountKeys.length)); final Expression filterWhere = getFiltersWhere(table), where; @@ -129,18 +131,20 @@ public abstract class CursorActivitiesFragment extends AbsActivitiesFragment { return new CursorActivitiesBusCallback(); } + @Nullable @Override protected UserKey[] getAccountKeys() { + final Context context = getContext(); + if (context == null) return null; final Bundle args = getArguments(); - final UserKey[] accountKeys = Utils.getAccountKeys(getContext(), args); + final UserKey[] accountKeys = Utils.getAccountKeys(context, args); if (accountKeys != null) { return accountKeys; } - final FragmentActivity activity = getActivity(); - if (activity instanceof HomeActivity) { - return ((HomeActivity) activity).getActivatedAccountKeys(); + if (context instanceof HomeActivity) { + return ((HomeActivity) context).getActivatedAccountKeys(); } - return DataStoreUtils.getActivatedAccountKeys(getActivity()); + return DataStoreUtils.getActivatedAccountKeys(context); } @Override @@ -196,7 +200,9 @@ public abstract class CursorActivitiesFragment extends AbsActivitiesFragment { @NonNull @Override public UserKey[] getAccountKeysWorker() { - return CursorActivitiesFragment.this.getAccountKeys(); + final UserKey[] accountKeys = CursorActivitiesFragment.this.getAccountKeys(); + assert accountKeys != null; + return accountKeys; } @Nullable @@ -233,7 +239,9 @@ public abstract class CursorActivitiesFragment extends AbsActivitiesFragment { @NonNull @Override public UserKey[] getAccountKeysWorker() { - return CursorActivitiesFragment.this.getAccountKeys(); + final UserKey[] accountKeys = CursorActivitiesFragment.this.getAccountKeys(); + assert accountKeys != null; + return accountKeys; } @Nullable @@ -280,8 +288,11 @@ public abstract class CursorActivitiesFragment extends AbsActivitiesFragment { @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); - if (isVisibleToUser) { - for (UserKey accountKey : getAccountKeys()) { + Context context = getContext(); + if (context != null && isVisibleToUser) { + final UserKey[] accountKeys = getAccountKeys(); + assert accountKeys != null; + for (UserKey accountKey : accountKeys) { mTwitterWrapper.clearNotificationAsync(getNotificationType(), accountKey); } } 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 af9222c7f..9b5bd3724 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/DataStoreUtils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/DataStoreUtils.java @@ -449,8 +449,7 @@ public class DataStoreUtils implements Constants { } @NonNull - public static UserKey[] getActivatedAccountKeys(final Context context) { - if (context == null) return new UserKey[0]; + public static UserKey[] getActivatedAccountKeys(@NonNull final Context context) { final Cursor cur = context.getContentResolver().query(Accounts.CONTENT_URI, new String[]{Accounts.ACCOUNT_KEY}, Accounts.IS_ACTIVATED + " = 1", null, null); if (cur == null) return new UserKey[0];