migrating account

This commit is contained in:
Mariotaku Lee 2016-03-07 20:39:20 +08:00
parent 8add2c32a5
commit 5fe7ef804c
29 changed files with 297 additions and 96 deletions

View File

@ -123,6 +123,10 @@ public class ParcelableActivity implements Comparable<ParcelableActivity>, Parce
@JsonField(name = "status_user_following")
@CursorField(value = Activities.STATUS_USER_FOLLOWING, excludeWrite = true)
public boolean status_user_following;
@ParcelableThisPlease
public int account_color;
public transient long[] after_filtered_source_ids;
public transient ParcelableUser[] after_filtered_sources;
@ -130,18 +134,6 @@ public class ParcelableActivity implements Comparable<ParcelableActivity>, Parce
public ParcelableActivity() {
}
@Nullable
public static ParcelableStatus getActivityStatus(@NonNull ParcelableActivity activity) {
if (Activity.Action.MENTION.equals(activity.action)) {
return activity.target_object_statuses[0];
} else if (Activity.Action.REPLY.equals(activity.action)) {
return activity.target_statuses[0];
} else if (Activity.Action.QUOTE.equals(activity.action)) {
return activity.target_statuses[0];
}
return null;
}
public static int calculateHashCode(AccountKey accountKey, long timestamp, long maxPosition, long minPosition) {
int result = accountKey.hashCode();
result = 31 * result + (int) (timestamp ^ (timestamp >>> 32));

View File

@ -300,6 +300,10 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
@CursorField(value = Statuses._ID, excludeWrite = true)
long _id;
@ParcelableThisPlease
public int account_color;
public static final Creator<ParcelableStatus> CREATOR = new Creator<ParcelableStatus>() {
public ParcelableStatus createFromParcel(Parcel source) {
ParcelableStatus target = new ParcelableStatus();

View File

@ -27,6 +27,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.database.ContentObserver;
import android.graphics.Color;
import android.graphics.PorterDuff.Mode;
import android.graphics.Rect;
import android.net.Uri;
@ -327,6 +328,10 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
final Window window = getWindow();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
}
}
super.onCreate(savedInstanceState);
mMultiSelectHandler = new MultiSelectEventHandler(this);
@ -691,7 +696,7 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
for (int i = 0, j = mPagerAdapter.getCount(); i < j; i++) {
final SupportTabSpec tab = mPagerAdapter.getTab(i);
if (tabType.equals(CustomTabUtils.getTabTypeAlias(tab.type))) {
if (tab.args != null && CustomTabUtils.hasAccountId(tab.args,
if (tab.args != null && CustomTabUtils.hasAccountId(this, tab.args,
getActivatedAccountKeys(), accountId)) {
initialTab = i;
break;
@ -919,7 +924,7 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
}
switch (spec.type) {
case CustomTabType.HOME_TIMELINE: {
final AccountKey[] accountKeys = Utils.getAccountKeys(spec.args);
final AccountKey[] accountKeys = Utils.getAccountKeys(mContext, spec.args);
final String tagWithAccounts = Utils.getReadPositionTagWithAccounts(mContext,
true, ReadPositionTag.HOME_TIMELINE, accountKeys);
final long position = mReadStateManager.getPosition(tagWithAccounts);
@ -930,7 +935,7 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
break;
}
case CustomTabType.NOTIFICATIONS_TIMELINE: {
final AccountKey[] accountIds = Utils.getAccountKeys(spec.args);
final AccountKey[] accountIds = Utils.getAccountKeys(mContext, spec.args);
final String tagWithAccounts = Utils.getReadPositionTagWithAccounts(mContext,
true, ReadPositionTag.ACTIVITIES_ABOUT_ME, accountIds);
final long position = mReadStateManager.getPosition(tagWithAccounts);

View File

@ -222,7 +222,7 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
switch (getItemViewType(position)) {
case ITEM_VIEW_TYPE_STATUS: {
final ParcelableActivity activity = getActivity(position);
final ParcelableStatus status = ParcelableActivity.getActivityStatus(activity);
final ParcelableStatus status = ParcelableActivityUtils.getActivityStatus(activity);
assert status != null;
final IStatusViewHolder statusViewHolder = (IStatusViewHolder) holder;
statusViewHolder.displayStatus(status, true, true);
@ -436,7 +436,7 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
if (adapter == null) return;
final Context context = adapter.getContext();
final ParcelableActivity activity = adapter.getActivity(position);
final ParcelableStatus status = ParcelableActivity.getActivityStatus(activity);
final ParcelableStatus status = ParcelableActivityUtils.getActivityStatus(activity);
assert status != null;
IntentUtils.openUserProfile(context, status.account_key, status.user_id,
status.user_screen_name, null, true, UserFragment.Referral.TIMELINE_STATUS);

View File

@ -172,7 +172,7 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentListRecycler
openActivity(activity);
return true;
}
final ParcelableStatus status = ParcelableActivity.getActivityStatus(activity);
final ParcelableStatus status = ParcelableActivityUtils.getActivityStatus(activity);
if (status == null) return false;
if (action == null) {
action = handler.getKeyAction(CONTEXT_TAG_STATUS, keyCode, event, metaState);
@ -206,7 +206,7 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentListRecycler
}
private void openActivity(ParcelableActivity activity) {
final ParcelableStatus status = ParcelableActivity.getActivityStatus(activity);
final ParcelableStatus status = ParcelableActivityUtils.getActivityStatus(activity);
if (status != null) {
IntentUtils.openStatus(getContext(), status, null);
} else {
@ -348,7 +348,7 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentListRecycler
@Override
public void onMediaClick(IStatusViewHolder holder, View view, ParcelableMedia media, int position) {
final AbsActivitiesAdapter<Data> adapter = getAdapter();
final ParcelableStatus status = ParcelableActivity.getActivityStatus(adapter.getActivity(position));
final ParcelableStatus status = ParcelableActivityUtils.getActivityStatus(adapter.getActivity(position));
if (status == null) return;
IntentUtils.openMedia(getActivity(), status, media, null, true);
// BEGIN HotMobi
@ -413,6 +413,7 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentListRecycler
@Override
public void onStatusClick(IStatusViewHolder holder, int position) {
final ParcelableStatus status = getActivityStatus(position);
if (status == null) return;
IntentUtils.openStatus(getContext(), status, null);
}
@ -421,7 +422,7 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentListRecycler
final AbsActivitiesAdapter<Data> adapter = getAdapter();
final ParcelableActivity activity = adapter.getActivity(position);
if (activity == null) return null;
return ParcelableActivity.getActivityStatus(activity);
return ParcelableActivityUtils.getActivityStatus(activity);
}
@Override

View File

@ -582,7 +582,7 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
private boolean hasAccountInTab(SupportTabSpec tab, AccountKey accountId, boolean isActivated) {
if (tab.args == null) return false;
final AccountKey[] accountKeys = Utils.getAccountKeys(tab.args);
final AccountKey[] accountKeys = Utils.getAccountKeys(getContext(), tab.args);
if (accountKeys == null) return isActivated;
return ArrayUtils.contains(accountKeys, accountId);
}

View File

@ -44,6 +44,7 @@ import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter.IndicatorPosi
import org.mariotaku.twidere.loader.support.ExtendedObjectCursorLoader;
import org.mariotaku.twidere.model.AccountKey;
import org.mariotaku.twidere.model.BaseRefreshTaskParam;
import org.mariotaku.twidere.model.ParcelableAccount;
import org.mariotaku.twidere.model.ParcelableActivity;
import org.mariotaku.twidere.model.ParcelableActivityCursorIndices;
import org.mariotaku.twidere.model.RefreshTaskParam;
@ -53,6 +54,7 @@ import org.mariotaku.twidere.model.message.GetActivitiesTaskEvent;
import org.mariotaku.twidere.model.message.StatusDestroyedEvent;
import org.mariotaku.twidere.model.message.StatusListChangedEvent;
import org.mariotaku.twidere.model.message.StatusRetweetedEvent;
import org.mariotaku.twidere.model.util.ParcelableAccountUtils;
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
import org.mariotaku.twidere.provider.TwidereDataStore.Activities;
import org.mariotaku.twidere.provider.TwidereDataStore.Filters;
@ -122,7 +124,7 @@ public abstract class CursorActivitiesFragment extends AbsActivitiesFragment<Lis
adapter.setShowAccountsColor(accountKeys.length > 1);
final String[] projection = Activities.COLUMNS;
return new CursorActivitiesLoader(context, uri, projection, selection, expression.whereArgs,
sortOrder, fromUser);
sortOrder, fromUser, accountKeys);
}
@Override
@ -133,7 +135,7 @@ public abstract class CursorActivitiesFragment extends AbsActivitiesFragment<Lis
@Override
protected AccountKey[] getAccountKeys() {
final Bundle args = getArguments();
AccountKey[] accountKeys = Utils.getAccountKeys(args);
final AccountKey[] accountKeys = Utils.getAccountKeys(getContext(), args);
if (accountKeys != null) {
return accountKeys;
}
@ -323,29 +325,48 @@ public abstract class CursorActivitiesFragment extends AbsActivitiesFragment<Lis
}
public static class CursorActivitiesLoader extends ExtendedObjectCursorLoader<ParcelableActivity> {
private final AccountKey[] mAccountKeys;
public CursorActivitiesLoader(Context context, Uri uri, String[] projection,
String selection, String[] selectionArgs, String sortOrder,
boolean fromUser) {
boolean fromUser, AccountKey[] accountKeys) {
super(context, ParcelableActivityCursorIndices.class, uri, projection, selection, selectionArgs, sortOrder, fromUser);
mAccountKeys = accountKeys;
}
@Override
protected ObjectCursor<ParcelableActivity> createObjectCursor(Cursor cursor, ObjectCursor.CursorIndices<ParcelableActivity> indices) {
return new ActivityCursor(cursor, indices, DataStoreUtils.getFilteredUserIds(getContext()));
final long[] filteredUserIds = DataStoreUtils.getFilteredUserIds(getContext());
final ParcelableAccount[] accounts = ParcelableAccountUtils.getAccounts(getContext(), mAccountKeys);
return new ActivityCursor(cursor, indices, filteredUserIds, accounts);
}
public static class ActivityCursor extends ObjectCursor<ParcelableActivity> {
private final long[] filteredUserIds;
private final ParcelableAccount[] accounts;
public ActivityCursor(Cursor cursor, CursorIndices<ParcelableActivity> indies, long[] filteredUserIds) {
public ActivityCursor(Cursor cursor, CursorIndices<ParcelableActivity> indies, long[] filteredUserIds, ParcelableAccount[] accounts) {
super(cursor, indies);
this.filteredUserIds = filteredUserIds;
this.accounts = accounts;
}
public long[] getFilteredUserIds() {
return filteredUserIds;
}
@Override
protected ParcelableActivity get(Cursor cursor, CursorIndices<ParcelableActivity> indices) {
final ParcelableActivity activity = super.get(cursor, indices);
for (ParcelableAccount account : accounts) {
if (account.account_key.equals(activity.account_key)) {
activity.account_color = account.color;
break;
}
}
return activity;
}
}
}
}

View File

@ -22,6 +22,7 @@ package org.mariotaku.twidere.fragment.support;
import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@ -32,10 +33,10 @@ import android.support.v4.content.Loader;
import com.squareup.otto.Subscribe;
import org.mariotaku.library.objectcursor.ObjectCursor;
import org.mariotaku.sqliteqb.library.ArgsArray;
import org.mariotaku.sqliteqb.library.Columns.Column;
import org.mariotaku.sqliteqb.library.Expression;
import org.mariotaku.sqliteqb.library.RawItemArray;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.activity.support.HomeActivity;
import org.mariotaku.twidere.adapter.AbsStatusesAdapter;
@ -43,6 +44,7 @@ import org.mariotaku.twidere.adapter.ListParcelableStatusesAdapter;
import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter.IndicatorPosition;
import org.mariotaku.twidere.loader.support.ExtendedObjectCursorLoader;
import org.mariotaku.twidere.model.AccountKey;
import org.mariotaku.twidere.model.ParcelableAccount;
import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.model.ParcelableStatusCursorIndices;
import org.mariotaku.twidere.model.SimpleRefreshTaskParam;
@ -52,6 +54,7 @@ import org.mariotaku.twidere.model.message.GetStatusesTaskEvent;
import org.mariotaku.twidere.model.message.StatusDestroyedEvent;
import org.mariotaku.twidere.model.message.StatusListChangedEvent;
import org.mariotaku.twidere.model.message.StatusRetweetedEvent;
import org.mariotaku.twidere.model.util.ParcelableAccountUtils;
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
import org.mariotaku.twidere.provider.TwidereDataStore.Filters;
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses;
@ -118,8 +121,8 @@ public abstract class CursorStatusesFragment extends AbsStatusesFragment<List<Pa
final String[] projection = Statuses.COLUMNS;
final String[] selectionArgs = TwidereArrayUtils.toStringArray(accountKeys, 0,
accountKeys.length);
return new ExtendedObjectCursorLoader<>(context, ParcelableStatusCursorIndices.class, uri,
projection, selection, selectionArgs, sortOrder, fromUser);
return new CursorStatusesLoader(context, uri,
projection, selection, selectionArgs, sortOrder, fromUser, accountKeys);
}
@Override
@ -185,7 +188,7 @@ public abstract class CursorStatusesFragment extends AbsStatusesFragment<List<Pa
@Override
protected AccountKey[] getAccountKeys() {
final Bundle args = getArguments();
final AccountKey[] accountKeys = Utils.getAccountKeys(args);
final AccountKey[] accountKeys = Utils.getAccountKeys(getContext(), args);
if (accountKeys != null) {
return accountKeys;
}
@ -332,4 +335,45 @@ public abstract class CursorStatusesFragment extends AbsStatusesFragment<List<Pa
protected abstract void updateRefreshState();
public static class CursorStatusesLoader extends ExtendedObjectCursorLoader<ParcelableStatus> {
private final AccountKey[] mAccountKeys;
public CursorStatusesLoader(Context context, Uri uri, String[] projection,
String selection, String[] selectionArgs, String sortOrder,
boolean fromUser, AccountKey[] accountKeys) {
super(context, ParcelableStatusCursorIndices.class, uri, projection, selection, selectionArgs, sortOrder, fromUser);
mAccountKeys = accountKeys;
}
@Override
protected ObjectCursor<ParcelableStatus> createObjectCursor(final Cursor cursor,
final ObjectCursor.CursorIndices<ParcelableStatus> indices) {
final ParcelableAccount[] accounts = ParcelableAccountUtils.getAccounts(getContext(), mAccountKeys);
return new StatusCursor(cursor, indices, accounts);
}
public static class StatusCursor extends ObjectCursor<ParcelableStatus> {
private final ParcelableAccount[] accounts;
public StatusCursor(Cursor cursor, CursorIndices<ParcelableStatus> indies, ParcelableAccount[] accounts) {
super(cursor, indies);
this.accounts = accounts;
}
@Override
protected ParcelableStatus get(Cursor cursor, CursorIndices<ParcelableStatus> indices) {
final ParcelableStatus activity = super.get(cursor, indices);
for (ParcelableAccount account : accounts) {
if (account.account_key.equals(activity.account_key)) {
activity.account_color = account.color;
break;
}
}
return activity;
}
}
}
}

View File

@ -42,9 +42,9 @@ import android.view.View;
import com.squareup.otto.Subscribe;
import org.mariotaku.sqliteqb.library.ArgsArray;
import org.mariotaku.sqliteqb.library.Columns.Column;
import org.mariotaku.sqliteqb.library.Expression;
import org.mariotaku.sqliteqb.library.RawItemArray;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.activity.iface.IControlBarActivity;
import org.mariotaku.twidere.activity.support.HomeActivity;
@ -70,6 +70,7 @@ import org.mariotaku.twidere.util.IntentUtils;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback;
import org.mariotaku.twidere.util.RecyclerViewNavigationHelper;
import org.mariotaku.twidere.util.TwidereArrayUtils;
import org.mariotaku.twidere.util.Utils;
import org.mariotaku.twidere.util.content.SupportFragmentReloadCursorObserver;
@ -153,8 +154,10 @@ public class DirectMessagesFragment extends AbsContentListRecyclerViewFragment<M
public Loader<Cursor> onCreateLoader(final int id, final Bundle args) {
final Uri uri = DirectMessages.ConversationEntries.CONTENT_URI;
final AccountKey[] accountIds = getAccountKeys();
final Expression account_where = Expression.in(new Column(Statuses.ACCOUNT_KEY), new RawItemArray(accountIds));
return new CursorLoader(getActivity(), uri, null, account_where.getSQL(), null, null);
final String selection = Expression.in(new Column(Statuses.ACCOUNT_KEY),
new ArgsArray(accountIds.length)).getSQL();
final String[] selectionArgs = TwidereArrayUtils.toStringArray(accountIds, 0, accountIds.length);
return new CursorLoader(getActivity(), uri, null, selection, selectionArgs, null);
}
@Override
@ -343,7 +346,7 @@ public class DirectMessagesFragment extends AbsContentListRecyclerViewFragment<M
@NonNull
protected AccountKey[] getAccountKeys() {
final Bundle args = getArguments();
AccountKey[] accountKeys = Utils.getAccountKeys(args);
AccountKey[] accountKeys = Utils.getAccountKeys(getContext(), args);
if (accountKeys != null) {
return accountKeys;
}

View File

@ -26,6 +26,7 @@ import android.support.v4.app.LoaderManager;
import com.squareup.otto.Subscribe;
import org.mariotaku.twidere.adapter.AbsStatusesAdapter;
import org.mariotaku.twidere.adapter.ListParcelableStatusesAdapter;
import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter.IndicatorPosition;
import org.mariotaku.twidere.adapter.iface.IStatusesAdapter;
@ -104,7 +105,7 @@ public abstract class ParcelableStatusesFragment extends AbsStatusesFragment<Lis
@Override
protected AccountKey[] getAccountKeys() {
return Utils.getAccountKeys(getArguments());
return Utils.getAccountKeys(getContext(), getArguments());
}
@Override
@ -133,8 +134,9 @@ public abstract class ParcelableStatusesFragment extends AbsStatusesFragment<Lis
if ((position & IndicatorPosition.START) != 0) return;
super.onLoadMoreContents(position);
if (position == 0) return;
final IStatusesAdapter<List<ParcelableStatus>> adapter = getAdapter();
final ParcelableStatus status = adapter.getStatus(adapter.getItemCount() - 1);
final AbsStatusesAdapter<List<ParcelableStatus>> adapter = getAdapter();
final ParcelableStatus status = adapter.getStatus(adapter.getStatusStartIndex() +
adapter.getStatusCount() - 1);
AccountKey[] accountKeys = {status.account_key};
final long[] maxIds = {status.id};
getStatuses(new BaseRefreshTaskParam(accountKeys, maxIds, null));

View File

@ -118,6 +118,7 @@ import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.model.SingleResponse;
import org.mariotaku.twidere.model.message.FavoriteTaskEvent;
import org.mariotaku.twidere.model.message.StatusListChangedEvent;
import org.mariotaku.twidere.model.util.ParcelableActivityUtils;
import org.mariotaku.twidere.model.util.ParcelableMediaUtils;
import org.mariotaku.twidere.model.util.ParcelableStatusUtils;
import org.mariotaku.twidere.model.util.ParcelableUserUtils;
@ -996,7 +997,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
retweetedByView.setVisibility(View.GONE);
}
profileContainer.drawEnd(DataStoreUtils.getAccountColor(context, status.account_key));
profileContainer.drawEnd(status.account_color);
final int layoutPosition = getLayoutPosition();
final boolean skipLinksInText = status.extras != null && status.extras.support_entities;
@ -2484,7 +2485,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
ParcelableActivityCursorIndices ci = new ParcelableActivityCursorIndices(activityCursor);
while (!activityCursor.isAfterLast()) {
final ParcelableActivity activity = ci.newObject(activityCursor);
ParcelableStatus activityStatus = ParcelableActivity.getActivityStatus(activity);
ParcelableStatus activityStatus = ParcelableActivityUtils.getActivityStatus(activity);
if (activityStatus != null) {
activityStatus.favorite_count = activitySummary.favoriteCount;
activityStatus.reply_count = activitySummary.replyCount;

View File

@ -524,11 +524,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
mUser = user;
final int userColor = mUserColorNameManager.getUserColor(user.id, true);
mProfileImageView.setBorderColor(userColor != 0 ? userColor : Color.WHITE);
if (user.account_color != 0) {
mProfileNameContainer.drawEnd(user.account_color);
} else {
mProfileNameContainer.drawEnd(DataStoreUtils.getAccountColor(activity, user.account_key));
}
mProfileNameContainer.drawEnd(user.account_color);
final String nick = mUserColorNameManager.getUserNickname(user.id, true);
mNameView.setText(mBidiFormatter.unicodeWrap(TextUtils.isEmpty(nick) ? user.name : getString(R.string.name_with_nickname, user.name, nick)));
final int typeIconRes = Utils.getUserTypeIconRes(user.is_verified, user.is_protected);

View File

@ -23,13 +23,12 @@ import android.content.Context;
import android.os.Bundle;
import android.support.v4.content.AsyncTaskLoader;
import org.mariotaku.twidere.api.twitter.TwitterException;
import org.mariotaku.twidere.constant.IntentConstants;
import org.mariotaku.twidere.model.AccountKey;
import org.mariotaku.twidere.model.ParcelableCredentials;
import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.model.SingleResponse;
import org.mariotaku.twidere.api.twitter.TwitterException;
import org.mariotaku.twidere.model.util.ParcelableCredentialsUtils;
import static org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT;
@ -66,8 +65,11 @@ public class ParcelableStatusLoader extends AsyncTaskLoader<SingleResponse<Parce
}
}
try {
final ParcelableStatus status = findStatus(getContext(), mAccountId, mStatusId);
final ParcelableCredentials credentials = ParcelableCredentialsUtils.getCredentials(getContext(), mAccountId);
final ParcelableStatus status = findStatus(getContext(), mAccountId, mStatusId);
if (credentials != null) {
status.account_color = credentials.color;
}
final SingleResponse<ParcelableStatus> response = SingleResponse.getInstance(status);
final Bundle extras = response.getExtras();
extras.putParcelable(EXTRA_ACCOUNT, credentials);

View File

@ -73,7 +73,7 @@ public final class ParcelableUserLoader extends AsyncTaskLoader<SingleResponse<P
final Context context = getContext();
final ContentResolver resolver = context.getContentResolver();
final AccountKey accountKey = mAccountKey;
int accountColor = DataStoreUtils.getAccountColor(context, accountKey);
final int accountColor = DataStoreUtils.getAccountColor(context, accountKey);
if (!mOmitIntentExtra && mExtras != null) {
final ParcelableUser user = mExtras.getParcelable(EXTRA_USER);
if (user != null) {

View File

@ -30,7 +30,8 @@ import org.mariotaku.twidere.util.collection.NoDuplicatesArrayList;
import java.util.Collections;
import java.util.List;
public abstract class ParcelableUsersLoader extends AsyncTaskLoader<List<ParcelableUser>> implements IExtendedLoader, Constants {
public abstract class ParcelableUsersLoader extends AsyncTaskLoader<List<ParcelableUser>>
implements IExtendedLoader, Constants {
private final List<ParcelableUser> mData = Collections
.synchronizedList(new NoDuplicatesArrayList<ParcelableUser>());

View File

@ -39,7 +39,9 @@ import org.mariotaku.twidere.api.twitter.model.Status;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.model.AccountKey;
import org.mariotaku.twidere.model.ListResponse;
import org.mariotaku.twidere.model.ParcelableCredentials;
import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.model.util.ParcelableCredentialsUtils;
import org.mariotaku.twidere.model.util.ParcelableStatusUtils;
import org.mariotaku.twidere.util.InternalTwitterContentUtils;
import org.mariotaku.twidere.util.JsonSerializer;
@ -77,7 +79,8 @@ public abstract class TwitterAPIStatusesLoader extends ParcelableStatusesLoader
@Inject
SharedPreferencesWrapper mPreferences;
public TwitterAPIStatusesLoader(final Context context, final AccountKey accountKey,
public TwitterAPIStatusesLoader(@NonNull final Context context,
@Nullable final AccountKey accountKey,
final long sinceId, final long maxId,
final List<ParcelableStatus> data,
@Nullable final String[] savedStatusesArgs,
@ -93,6 +96,16 @@ public abstract class TwitterAPIStatusesLoader extends ParcelableStatusesLoader
@SuppressWarnings("unchecked")
@Override
public final ListResponse<ParcelableStatus> loadInBackground() {
final Context context = getContext();
if (mAccountKey == null) {
return ListResponse.getListInstance(new TwitterException("No Account"));
}
final ParcelableCredentials credentials = ParcelableCredentialsUtils.getCredentials(context,
mAccountKey);
if (credentials == null) {
return ListResponse.getListInstance(new TwitterException("No Account"));
}
List<ParcelableStatus> data = getData();
if (data == null) {
data = new CopyOnWriteArrayList<>();
@ -110,10 +123,12 @@ public abstract class TwitterAPIStatusesLoader extends ParcelableStatusesLoader
}
}
if (!isFromUser()) return ListResponse.getListInstance(data);
final Twitter twitter = getTwitter();
if (twitter == null) return null;
final Twitter twitter = TwitterAPIFactory.getTwitterInstance(context, credentials, true,
true);
if (twitter == null) {
return ListResponse.getListInstance(new TwitterException("No Account"));
}
final List<Status> statuses;
final Context context = getContext();
final SharedPreferences prefs = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
final int loadItemLimit = prefs.getInt(KEY_LOAD_ITEM_LIMIT, DEFAULT_LOAD_ITEM_LIMIT);
final boolean noItemsBefore = data.isEmpty();
@ -130,7 +145,7 @@ public abstract class TwitterAPIStatusesLoader extends ParcelableStatusesLoader
}
}
statuses = getStatuses(twitter, paging);
if (!Utils.isOfficialCredentials(getContext(), getAccountKey())) {
if (!Utils.isOfficialCredentials(context, getAccountKey())) {
InternalTwitterContentUtils.getStatusesWithQuoteData(twitter, statuses);
}
} catch (final TwitterException e) {
@ -166,7 +181,10 @@ public abstract class TwitterAPIStatusesLoader extends ParcelableStatusesLoader
&& statuses.size() >= loadItemLimit;
for (int i = 0, j = statuses.size(); i < j; i++) {
final Status status = statuses.get(i);
data.add(ParcelableStatusUtils.fromStatus(status, mAccountKey, insertGap && isGapEnabled() && minIdx == i));
final ParcelableStatus item = ParcelableStatusUtils.fromStatus(status, mAccountKey,
insertGap && isGapEnabled() && minIdx == i);
item.account_color = credentials.color;
data.add(item);
}
final SQLiteDatabase db = TwidereApplication.getInstance(context).getSQLiteDatabase();
@ -205,11 +223,6 @@ public abstract class TwitterAPIStatusesLoader extends ParcelableStatusesLoader
@NonNull
protected abstract List<Status> getStatuses(@NonNull Twitter twitter, Paging paging) throws TwitterException;
@Nullable
protected final Twitter getTwitter() {
return TwitterAPIFactory.getTwitterInstance(getContext(), mAccountKey, true, true);
}
@WorkerThread
protected abstract boolean shouldFilterStatus(final SQLiteDatabase database, final ParcelableStatus status);

View File

@ -28,6 +28,7 @@ import org.mariotaku.twidere.api.twitter.Twitter;
import org.mariotaku.twidere.api.twitter.TwitterException;
import org.mariotaku.twidere.api.twitter.model.User;
import org.mariotaku.twidere.model.AccountKey;
import org.mariotaku.twidere.model.ListResponse;
import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.model.util.ParcelableUserUtils;
import org.mariotaku.twidere.util.TwitterAPIFactory;
@ -48,16 +49,19 @@ public abstract class TwitterAPIUsersLoader extends ParcelableUsersLoader {
@Override
public List<ParcelableUser> loadInBackground() {
if (mAccountKey == null) return null;
if (mAccountKey == null) {
return ListResponse.getListInstance(new TwitterException("No Account"));
}
final Twitter twitter = TwitterAPIFactory.getTwitterInstance(getContext(), mAccountKey, true);
if (twitter == null) return null;
if (twitter == null)
return ListResponse.getListInstance(new TwitterException("No Account"));
final List<ParcelableUser> data = getData();
final List<User> users;
try {
users = getUsers(twitter);
} catch (final TwitterException e) {
Log.w(LOGTAG, e);
return data;
return ListResponse.getListInstance(data);
}
int pos = data.size();
for (final User user : users) {
@ -68,7 +72,7 @@ public abstract class TwitterAPIUsersLoader extends ParcelableUsersLoader {
pos++;
}
Collections.sort(data);
return data;
return ListResponse.getListInstance(data);
}
@Nullable

View File

@ -13,6 +13,7 @@ import android.text.style.StyleSpan;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.api.twitter.model.Activity;
import org.mariotaku.twidere.model.util.ParcelableActivityUtils;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.oshkimaadziig.george.androidutils.SpanFormatter;
@ -201,7 +202,7 @@ public class ActivityTitleSummaryMessage {
case Activity.Action.MENTION:
case Activity.Action.REPLY:
case Activity.Action.QUOTE: {
final ParcelableStatus status = ParcelableActivity.getActivityStatus(activity);
final ParcelableStatus status = ParcelableActivityUtils.getActivityStatus(activity);
if (status == null) return null;
final SpannableString title = new SpannableString(manager.getDisplayName(status,
nameFirst, false));

View File

@ -0,0 +1,49 @@
package org.mariotaku.twidere.model.util;
import android.content.Context;
import android.database.Cursor;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import org.mariotaku.twidere.model.AccountKey;
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
import org.mariotaku.twidere.util.DataStoreUtils;
import java.util.ArrayList;
/**
* Created by mariotaku on 16/3/7.
*/
public class AccountKeyUtils {
@Nullable
public static AccountKey findById(Context context, long id) {
final String[] projection = {Accounts.ACCOUNT_KEY};
final Cursor cur = DataStoreUtils.findAccountCursorsById(context, projection, id);
if (cur == null) return null;
try {
if (cur.moveToFirst()) return AccountKey.valueOf(cur.getString(0));
} finally {
cur.close();
}
return null;
}
@NonNull
public static AccountKey[] findByIds(Context context, long... id) {
final String[] projection = {Accounts.ACCOUNT_KEY};
final Cursor cur = DataStoreUtils.findAccountCursorsById(context, projection, id);
if (cur == null) return new AccountKey[0];
try {
final ArrayList<AccountKey> accountKeys = new ArrayList<>();
cur.moveToFirst();
while (!cur.isAfterLast()) {
accountKeys.add(AccountKey.valueOf(cur.getString(0)));
cur.moveToNext();
}
return accountKeys.toArray(new AccountKey[accountKeys.size()]);
} finally {
cur.close();
}
}
}

View File

@ -5,14 +5,15 @@ import android.database.Cursor;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import org.mariotaku.sqliteqb.library.ArgsArray;
import org.mariotaku.sqliteqb.library.Columns;
import org.mariotaku.sqliteqb.library.Expression;
import org.mariotaku.sqliteqb.library.RawItemArray;
import org.mariotaku.twidere.model.AccountKey;
import org.mariotaku.twidere.model.ParcelableAccount;
import org.mariotaku.twidere.model.ParcelableAccountCursorIndices;
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
import org.mariotaku.twidere.util.DataStoreUtils;
import org.mariotaku.twidere.util.TwidereArrayUtils;
import java.util.List;
@ -53,12 +54,20 @@ public class ParcelableAccountUtils {
return list.toArray(new ParcelableAccount[list.size()]);
}
public static ParcelableAccount[] getAccounts(@NonNull final Context context) {
final Cursor cur = context.getContentResolver().query(Accounts.CONTENT_URI,
Accounts.COLUMNS_NO_CREDENTIALS, null, null, null);
if (cur == null) return new ParcelableAccount[0];
return getAccounts(cur, new ParcelableAccountCursorIndices(cur));
}
@NonNull
public static ParcelableAccount[] getAccounts(@Nullable final Context context, @Nullable final AccountKey... accountIds) {
if (context == null) return new ParcelableAccount[0];
final String where = accountIds != null ? Expression.in(new Columns.Column(Accounts.ACCOUNT_KEY),
new RawItemArray(AccountKey.getIds(accountIds))).getSQL() : null;
final Cursor cur = context.getContentResolver().query(Accounts.CONTENT_URI, Accounts.COLUMNS_NO_CREDENTIALS, where, null, null);
public static ParcelableAccount[] getAccounts(@NonNull final Context context, @NonNull final AccountKey... accountIds) {
final String where = Expression.in(new Columns.Column(Accounts.ACCOUNT_KEY),
new ArgsArray(accountIds.length)).getSQL();
final String[] whereArgs = TwidereArrayUtils.toStringArray(accountIds);
final Cursor cur = context.getContentResolver().query(Accounts.CONTENT_URI,
Accounts.COLUMNS_NO_CREDENTIALS, where, whereArgs, null);
if (cur == null) return new ParcelableAccount[0];
return getAccounts(cur, new ParcelableAccountCursorIndices(cur));
}

View File

@ -1,10 +1,14 @@
package org.mariotaku.twidere.model.util;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import org.apache.commons.collections.primitives.ArrayLongList;
import org.apache.commons.lang3.ArrayUtils;
import org.mariotaku.twidere.api.twitter.model.Activity;
import org.mariotaku.twidere.model.AccountKey;
import org.mariotaku.twidere.model.ParcelableActivity;
import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.model.ParcelableUser;
/**
@ -84,4 +88,21 @@ public class ParcelableActivityUtils {
}
@Nullable
public static ParcelableStatus getActivityStatus(@NonNull ParcelableActivity activity) {
if (Activity.Action.MENTION.equals(activity.action)) {
final ParcelableStatus status = activity.target_object_statuses[0];
status.account_color = activity.account_color;
return status;
} else if (Activity.Action.REPLY.equals(activity.action)) {
final ParcelableStatus status = activity.target_statuses[0];
status.account_color = activity.account_color;
return status;
} else if (Activity.Action.QUOTE.equals(activity.action)) {
final ParcelableStatus status = activity.target_statuses[0];
status.account_color = activity.account_color;
return status;
}
return null;
}
}

View File

@ -482,13 +482,14 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
rowId = mDatabaseWrapper.insertWithOnConflict(table, null, values,
SQLiteDatabase.CONFLICT_IGNORE);
} else if (tableId == TABLE_ID_CACHED_RELATIONSHIPS) {
final long accountId = values.getAsLong(CachedRelationships.ACCOUNT_KEY);
final String accountKey = values.getAsString(CachedRelationships.ACCOUNT_KEY);
final long userId = values.getAsLong(CachedRelationships.USER_ID);
final Expression where = Expression.and(
Expression.equals(CachedRelationships.ACCOUNT_KEY, accountId),
Expression.equals(CachedRelationships.USER_ID, userId)
Expression.equalsArgs(CachedRelationships.ACCOUNT_KEY),
Expression.equalsArgs(CachedRelationships.USER_ID)
);
if (mDatabaseWrapper.update(table, values, where.getSQL(), null) > 0) {
final String[] whereArgs = {accountKey, String.valueOf(userId)};
if (mDatabaseWrapper.update(table, values, where.getSQL(), whereArgs) > 0) {
final String[] projection = {CachedRelationships._ID};
final Cursor c = mDatabaseWrapper.query(table, projection, where.getSQL(), null,
null, null, null);

View File

@ -44,6 +44,7 @@ import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.model.ParcelableUserMention;
import org.mariotaku.twidere.model.ParcelableUserValuesCreator;
import org.mariotaku.twidere.model.draft.SendDirectMessageActionExtra;
import org.mariotaku.twidere.model.util.ParcelableActivityUtils;
import org.mariotaku.twidere.model.util.ParcelableMediaUtils;
import org.mariotaku.twidere.model.util.ParcelableStatusUtils;
import org.mariotaku.twidere.model.util.ParcelableUserUtils;
@ -202,7 +203,7 @@ public final class ContentValuesCreator implements TwidereConstants {
@NonNull
public static ContentValues createActivity(final ParcelableActivity activity) {
final ContentValues values = new ContentValues();
final ParcelableStatus status = ParcelableActivity.getActivityStatus(activity);
final ParcelableStatus status = ParcelableActivityUtils.getActivityStatus(activity);
if (status != null) {
createStatusActivity(status, values);
}

View File

@ -291,8 +291,9 @@ public class CustomTabUtils implements Constants {
return tabType != null && CUSTOM_TABS_CONFIGURATION_MAP.containsKey(getTabTypeAlias(tabType));
}
public static boolean hasAccountId(@NonNull Bundle args, AccountKey[] activatedAccountKeys, AccountKey accountKey) {
final AccountKey[] accountKeys = Utils.getAccountKeys(args);
public static boolean hasAccountId(final Context context, @NonNull final Bundle args,
final AccountKey[] activatedAccountKeys, AccountKey accountKey) {
final AccountKey[] accountKeys = Utils.getAccountKeys(context, args);
if (accountKeys != null) {
return ArrayUtils.contains(accountKeys, accountKey);
}

View File

@ -29,6 +29,7 @@ import android.os.Bundle;
import android.provider.BaseColumns;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.WorkerThread;
import android.text.TextUtils;
import com.bluelinelabs.logansquare.JsonMapper;
@ -613,6 +614,7 @@ public class DataStoreUtils implements Constants {
return filterExpression;
}
@WorkerThread
public static int getAccountColor(final Context context, final AccountKey accountKey) {
if (context == null) return Color.TRANSPARENT;
final Integer cached = sAccountColors.get(accountKey);
@ -819,8 +821,8 @@ public class DataStoreUtils implements Constants {
if (cur == null) return messageIds;
try {
while (cur.moveToNext()) {
final long accountId = cur.getLong(0);
int idx = ArrayUtils.indexOf(keys, accountId);
final AccountKey accountKey = AccountKey.valueOf(cur.getString(0));
int idx = ArrayUtils.indexOf(keys, accountKey);
if (idx < 0) continue;
messageIds[idx] = cur.getLong(1);
}
@ -894,6 +896,20 @@ public class DataStoreUtils implements Constants {
return cr.query(Accounts.CONTENT_URI, columns, where, whereArgs, null);
}
@Nullable
public static Cursor findAccountCursorsById(@NonNull final Context context, final String[] columns,
final long... ids) {
if (ids == null) return null;
final ContentResolver cr = context.getContentResolver();
Expression[] expressions = new Expression[ids.length];
for (int i = 0, j = ids.length; i < j; i++) {
expressions[i] = Expression.likeRaw(new Column(Accounts.ACCOUNT_KEY), "?||\'@%\'");
}
final String where = Expression.or(expressions).getSQL();
final String[] whereArgs = TwidereArrayUtils.toStringArray(ids);
return cr.query(Accounts.CONTENT_URI, columns, where, whereArgs, null);
}
public static String getAccountType(@NonNull final Context context, @NonNull final AccountKey accountKey) {
final String[] projection = {Accounts.ACCOUNT_TYPE};
final Cursor cur = getAccountCursor(context, projection, accountKey);

View File

@ -109,14 +109,31 @@ public class TwitterAPIFactory implements TwidereConstants {
return getTwitterInstance(context, accountKey, includeEntities, includeRetweets, Twitter.class);
}
@Nullable
public static Twitter getTwitterInstance(@NonNull final Context context,
@NonNull final ParcelableCredentials credentials,
final boolean includeEntities, final boolean includeRetweets) {
return getTwitterInstance(context, credentials, includeEntities, includeRetweets, Twitter.class);
}
@Nullable
@WorkerThread
public static <T> T getTwitterInstance(@NonNull final Context context,
@NonNull final AccountKey accountKey,
final boolean includeEntities, final boolean includeRetweets,
final boolean includeEntities,
final boolean includeRetweets,
@NonNull Class<T> cls) {
final ParcelableCredentials credentials = ParcelableCredentialsUtils.getCredentials(context, accountKey);
if (credentials == null) return null;
return getTwitterInstance(context, credentials, includeEntities, includeRetweets, cls);
}
@Nullable
public static <T> T getTwitterInstance(@NonNull final Context context,
@NonNull final ParcelableCredentials credentials,
final boolean includeEntities, final boolean includeRetweets,
@NonNull Class<T> cls) {
final HashMap<String, String> extraParams = new HashMap<>();
extraParams.put("include_entities", String.valueOf(includeEntities));
extraParams.put("include_retweets", String.valueOf(includeRetweets));

View File

@ -174,6 +174,7 @@ import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.model.ParcelableUserMention;
import org.mariotaku.twidere.model.PebbleMessage;
import org.mariotaku.twidere.model.TwitterAccountExtra;
import org.mariotaku.twidere.model.util.AccountKeyUtils;
import org.mariotaku.twidere.model.util.ParcelableCredentialsUtils;
import org.mariotaku.twidere.model.util.ParcelableStatusUtils;
import org.mariotaku.twidere.model.util.ParcelableUserUtils;
@ -779,26 +780,27 @@ public final class Utils implements Constants {
}
@Nullable
public static AccountKey[] getAccountKeys(@Nullable Bundle args) {
public static AccountKey[] getAccountKeys(@NonNull Context context, @Nullable Bundle args) {
if (args == null) return null;
if (args.containsKey(EXTRA_ACCOUNT_KEYS)) {
return newParcelableArray(args.getParcelableArray(EXTRA_ACCOUNT_KEYS), AccountKey.CREATOR);
} else if (args.containsKey(EXTRA_ACCOUNT_KEY)) {
final AccountKey accountKey = args.getParcelable(EXTRA_ACCOUNT_KEY);
if (accountKey == null) return null;
if (accountKey == null) return new AccountKey[0];
return new AccountKey[]{accountKey};
} else if (args.containsKey(EXTRA_ACCOUNT_IDS)) {
final long[] accountIds = args.getLongArray(EXTRA_ACCOUNT_IDS);
if (accountIds == null) return null;
final AccountKey[] accountKeys = new AccountKey[accountIds.length];
for (int i = 0, accountIdsLength = accountIds.length; i < accountIdsLength; i++) {
accountKeys[i] = new AccountKey(accountIds[i], null);
}
final AccountKey[] accountKeys = AccountKeyUtils.findByIds(context, accountIds);
args.putParcelableArray(EXTRA_ACCOUNT_KEYS, accountKeys);
return accountKeys;
} else if (args.containsKey(EXTRA_ACCOUNT_ID)) {
final long accountId = args.getLong(EXTRA_ACCOUNT_ID, -1);
if (accountId <= 0) return null;
return new AccountKey[]{new AccountKey(accountId, null)};
final AccountKey accountKey = AccountKeyUtils.findById(context, accountId);
args.putParcelable(EXTRA_ACCOUNT_KEY, accountKey);
if (accountKey == null) return new AccountKey[0];
return new AccountKey[]{accountKey};
}
return null;
}

View File

@ -330,7 +330,7 @@ public class StatusViewHolder extends ViewHolder implements Constants, IStatusVi
}
if (adapter.shouldShowAccountsColor()) {
itemContent.drawEnd(DataStoreUtils.getAccountColor(context, status.account_key));
itemContent.drawEnd(status.account_color);
} else {
itemContent.drawEnd();
}

View File

@ -23,7 +23,6 @@
<style name="Theme.Compat.Base" parent="Theme.AppCompat">
<!-- Window attributes -->
<item name="android:windowBackground">@color/background_color_window_dark</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:textColorTertiary">@color/tertiary_text_mtrl_dark</item>
<item name="android:textColorTertiaryInverse">@color/tertiary_text_mtrl_light</item>
@ -32,7 +31,6 @@
<style name="Theme.Compat.Base.NoActionBar" parent="Theme.AppCompat.NoActionBar">
<!-- Window attributes -->
<item name="android:windowBackground">@color/background_color_window_dark</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:textColorTertiary">@color/tertiary_text_mtrl_dark</item>
<item name="android:textColorTertiaryInverse">@color/tertiary_text_mtrl_light</item>
@ -47,7 +45,6 @@
<style name="Theme.Compat.Base.DialogWhenLarge" parent="Theme.AppCompat.DialogWhenLarge">
<!-- Window attributes -->
<item name="windowNormalBackground">@color/background_color_window_dark</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:textColorTertiary">@color/tertiary_text_mtrl_dark</item>
<item name="android:textColorTertiaryInverse">@color/tertiary_text_mtrl_light</item>
@ -56,7 +53,6 @@
<style name="Theme.Compat.Base.Light" parent="Theme.AppCompat.Light">
<!-- Window attributes -->
<item name="android:windowBackground">@color/background_color_window_light</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:textColorTertiary">@color/tertiary_text_mtrl_light</item>
<item name="android:textColorTertiaryInverse">@color/tertiary_text_mtrl_dark</item>
@ -65,7 +61,6 @@
<style name="Theme.Compat.Base.Light.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Window attributes -->
<item name="android:windowBackground">@color/background_color_window_light</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:textColorTertiary">@color/tertiary_text_mtrl_light</item>
<item name="android:textColorTertiaryInverse">@color/tertiary_text_mtrl_dark</item>
@ -80,7 +75,6 @@
<style name="Theme.Compat.Base.Light.DialogWhenLarge" parent="Theme.AppCompat.Light.DialogWhenLarge">
<!-- Window attributes -->
<item name="windowNormalBackground">@color/background_color_window_light</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:textColorTertiary">@color/tertiary_text_mtrl_light</item>
<item name="android:textColorTertiaryInverse">@color/tertiary_text_mtrl_dark</item>