fixed fragment crashes

This commit is contained in:
Mariotaku Lee 2016-06-22 08:26:17 +08:00
parent 432aa8dd23
commit 4b00aac5c3
3 changed files with 36 additions and 29 deletions

View File

@ -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<ParcelableActivity> getAdapterData() {
@ -554,11 +553,6 @@ public abstract class AbsActivitiesFragment extends AbsContentListRecyclerViewFr
return adapter.getData();
}
protected void setAdapterData(List<ParcelableActivity> 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

View File

@ -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);
}
}

View File

@ -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];