migrating account
This commit is contained in:
parent
ea54faa184
commit
80b8e1beac
|
@ -20,7 +20,7 @@ package org.mariotaku.twidere;
|
|||
|
||||
interface IStatusShortener {
|
||||
|
||||
String shorten(String statusJson, long currentAccountId, String overrideStatusText);
|
||||
String shorten(String statusJson, String currentAccountId, String overrideStatusText);
|
||||
|
||||
boolean callback(String resultJson, String statusJson);
|
||||
|
||||
|
|
|
@ -45,11 +45,6 @@ public class AccountKey implements Comparable<AccountKey>, Parcelable {
|
|||
this.host = host;
|
||||
}
|
||||
|
||||
public AccountKey(ParcelableAccount account) {
|
||||
this.id = account.account_id;
|
||||
this.host = account.account_host;
|
||||
}
|
||||
|
||||
AccountKey() {
|
||||
|
||||
}
|
||||
|
|
|
@ -30,6 +30,8 @@ import com.hannesdorfmann.parcelableplease.annotation.ParcelableThisPlease;
|
|||
|
||||
import org.mariotaku.library.objectcursor.annotation.CursorField;
|
||||
import org.mariotaku.library.objectcursor.annotation.CursorObject;
|
||||
import org.mariotaku.twidere.model.util.AccountKeyConverter;
|
||||
import org.mariotaku.twidere.model.util.AccountKeyCursorFieldConverter;
|
||||
import org.mariotaku.twidere.model.util.LoganSquareCursorFieldConverter;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
|
||||
|
||||
|
@ -43,6 +45,11 @@ public class ParcelableAccount implements Parcelable {
|
|||
@CursorField(value = Accounts._ID, excludeWrite = true)
|
||||
public long id;
|
||||
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "account_id", typeConverter = AccountKeyConverter.class)
|
||||
@CursorField(value = Accounts.ACCOUNT_KEY, converter = AccountKeyCursorFieldConverter.class)
|
||||
public AccountKey account_key;
|
||||
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "screen_name")
|
||||
@CursorField(Accounts.SCREEN_NAME)
|
||||
|
@ -53,6 +60,12 @@ public class ParcelableAccount implements Parcelable {
|
|||
@CursorField(Accounts.NAME)
|
||||
public String name;
|
||||
|
||||
@Nullable
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "account_type")
|
||||
@CursorField(Accounts.ACCOUNT_TYPE)
|
||||
public String account_type;
|
||||
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "profile_image_url")
|
||||
@CursorField(Accounts.PROFILE_IMAGE_URL)
|
||||
|
@ -63,11 +76,6 @@ public class ParcelableAccount implements Parcelable {
|
|||
@CursorField(Accounts.PROFILE_BANNER_URL)
|
||||
public String profile_banner_url;
|
||||
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "account_id")
|
||||
@CursorField(Accounts.ACCOUNT_ID)
|
||||
public long account_id;
|
||||
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "color")
|
||||
@CursorField(Accounts.COLOR)
|
||||
|
@ -77,18 +85,6 @@ public class ParcelableAccount implements Parcelable {
|
|||
@JsonField(name = "is_activated")
|
||||
@CursorField(Accounts.IS_ACTIVATED)
|
||||
public boolean is_activated;
|
||||
|
||||
@Nullable
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "account_type")
|
||||
@CursorField(Accounts.ACCOUNT_TYPE)
|
||||
public String account_type;
|
||||
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "account_host")
|
||||
@CursorField(Accounts.ACCOUNT_HOST)
|
||||
public String account_host;
|
||||
|
||||
@Nullable
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "account_user")
|
||||
|
@ -121,15 +117,15 @@ public class ParcelableAccount implements Parcelable {
|
|||
@Override
|
||||
public String toString() {
|
||||
return "ParcelableAccount{" +
|
||||
"screen_name='" + screen_name + '\'' +
|
||||
"id=" + id +
|
||||
", account_key=" + account_key +
|
||||
", screen_name='" + screen_name + '\'' +
|
||||
", name='" + name + '\'' +
|
||||
", account_type='" + account_type + '\'' +
|
||||
", profile_image_url='" + profile_image_url + '\'' +
|
||||
", profile_banner_url='" + profile_banner_url + '\'' +
|
||||
", account_id=" + account_id +
|
||||
", color=" + color +
|
||||
", is_activated=" + is_activated +
|
||||
", account_type='" + account_type + '\'' +
|
||||
", account_host='" + account_host + '\'' +
|
||||
", account_user=" + account_user +
|
||||
", is_dummy=" + is_dummy +
|
||||
'}';
|
||||
|
@ -142,16 +138,13 @@ public class ParcelableAccount implements Parcelable {
|
|||
|
||||
ParcelableAccount account = (ParcelableAccount) o;
|
||||
|
||||
if (id != account.id) return false;
|
||||
return !(account_host != null ? !account_host.equals(account.account_host) : account.account_host != null);
|
||||
return account_key.equals(account.account_key);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = (int) (id ^ (id >>> 32));
|
||||
result = 31 * result + (account_host != null ? account_host.hashCode() : 0);
|
||||
return result;
|
||||
return account_key.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -32,6 +32,8 @@ import com.hannesdorfmann.parcelableplease.annotation.ParcelableThisPlease;
|
|||
import org.mariotaku.library.objectcursor.annotation.CursorField;
|
||||
import org.mariotaku.library.objectcursor.annotation.CursorObject;
|
||||
import org.mariotaku.twidere.api.twitter.model.Activity;
|
||||
import org.mariotaku.twidere.model.util.AccountKeyConverter;
|
||||
import org.mariotaku.twidere.model.util.AccountKeyCursorFieldConverter;
|
||||
import org.mariotaku.twidere.model.util.LoganSquareCursorFieldConverter;
|
||||
import org.mariotaku.twidere.model.util.LongArrayConverter;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Activities;
|
||||
|
@ -59,13 +61,9 @@ public class ParcelableActivity implements Comparable<ParcelableActivity>, Parce
|
|||
@CursorField(value = Activities._ID, excludeWrite = true)
|
||||
public long _id;
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "account_id")
|
||||
@CursorField(value = Activities.ACCOUNT_ID)
|
||||
public long account_id;
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "account_host")
|
||||
@CursorField(value = Activities.ACCOUNT_HOST)
|
||||
public String account_host;
|
||||
@JsonField(name = "account_id", typeConverter = AccountKeyConverter.class)
|
||||
@CursorField(value = Activities.ACCOUNT_KEY, converter = AccountKeyCursorFieldConverter.class)
|
||||
public AccountKey account_key;
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "timestamp")
|
||||
@CursorField(value = Activities.TIMESTAMP)
|
||||
|
@ -144,22 +142,24 @@ public class ParcelableActivity implements Comparable<ParcelableActivity>, Parce
|
|||
return null;
|
||||
}
|
||||
|
||||
public static int calculateHashCode(long account_id, long timestamp, long max_position, long min_position) {
|
||||
int result = (int) (account_id ^ (account_id >>> 32));
|
||||
public static int calculateHashCode(AccountKey accountKey, long timestamp, long maxPosition, long minPosition) {
|
||||
int result = accountKey.hashCode();
|
||||
result = 31 * result + (int) (timestamp ^ (timestamp >>> 32));
|
||||
result = 31 * result + (int) (max_position ^ (max_position >>> 32));
|
||||
result = 31 * result + (int) (min_position ^ (min_position >>> 32));
|
||||
result = 31 * result + (int) (maxPosition ^ (maxPosition >>> 32));
|
||||
result = 31 * result + (int) (minPosition ^ (minPosition >>> 32));
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ParcelableActivity{" +
|
||||
"account_id=" + account_id +
|
||||
"_id=" + _id +
|
||||
", account_key=" + account_key +
|
||||
", timestamp=" + timestamp +
|
||||
", max_position=" + max_position +
|
||||
", min_position=" + min_position +
|
||||
", action=" + action +
|
||||
", action='" + action + '\'' +
|
||||
", source_ids=" + Arrays.toString(source_ids) +
|
||||
", sources=" + Arrays.toString(sources) +
|
||||
", target_users=" + Arrays.toString(target_users) +
|
||||
", target_statuses=" + Arrays.toString(target_statuses) +
|
||||
|
@ -168,12 +168,15 @@ public class ParcelableActivity implements Comparable<ParcelableActivity>, Parce
|
|||
", target_object_statuses=" + Arrays.toString(target_object_statuses) +
|
||||
", target_object_users=" + Arrays.toString(target_object_users) +
|
||||
", is_gap=" + is_gap +
|
||||
", status_user_following=" + status_user_following +
|
||||
", after_filtered_source_ids=" + Arrays.toString(after_filtered_source_ids) +
|
||||
", after_filtered_sources=" + Arrays.toString(after_filtered_sources) +
|
||||
'}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return calculateHashCode(account_id, timestamp, max_position, min_position);
|
||||
return calculateHashCode(account_key, timestamp, max_position, min_position);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -30,6 +30,8 @@ import com.hannesdorfmann.parcelableplease.annotation.ParcelableThisPlease;
|
|||
|
||||
import org.mariotaku.library.objectcursor.annotation.CursorField;
|
||||
import org.mariotaku.library.objectcursor.annotation.CursorObject;
|
||||
import org.mariotaku.twidere.model.util.AccountKeyConverter;
|
||||
import org.mariotaku.twidere.model.util.AccountKeyCursorFieldConverter;
|
||||
import org.mariotaku.twidere.model.util.LoganSquareCursorFieldConverter;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages;
|
||||
|
||||
|
@ -53,13 +55,9 @@ public class ParcelableDirectMessage implements Parcelable, Comparable<Parcelabl
|
|||
};
|
||||
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "account_id")
|
||||
@CursorField(DirectMessages.ACCOUNT_ID)
|
||||
public long account_id;
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "account_host")
|
||||
@CursorField(DirectMessages.ACCOUNT_HOST)
|
||||
public String account_host;
|
||||
@JsonField(name = "account_id", typeConverter = AccountKeyConverter.class)
|
||||
@CursorField(value = DirectMessages.ACCOUNT_KEY, converter = AccountKeyCursorFieldConverter.class)
|
||||
public AccountKey account_key;
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "id")
|
||||
@CursorField(DirectMessages.MESSAGE_ID)
|
||||
|
@ -139,29 +137,28 @@ public class ParcelableDirectMessage implements Parcelable, Comparable<Parcelabl
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object obj) {
|
||||
if (this == obj) return true;
|
||||
if (obj == null) return false;
|
||||
if (!(obj instanceof ParcelableDirectMessage)) return false;
|
||||
final ParcelableDirectMessage other = (ParcelableDirectMessage) obj;
|
||||
if (account_id != other.account_id) return false;
|
||||
if (id != other.id) return false;
|
||||
return true;
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
ParcelableDirectMessage that = (ParcelableDirectMessage) o;
|
||||
|
||||
if (id != that.id) return false;
|
||||
return account_key.equals(that.account_key);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + (int) (account_id ^ account_id >>> 32);
|
||||
result = prime * result + (int) (id ^ id >>> 32);
|
||||
int result = account_key.hashCode();
|
||||
result = 31 * result + (int) (id ^ (id >>> 32));
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ParcelableDirectMessage{" +
|
||||
"account_id=" + account_id +
|
||||
"account_key=" + account_key +
|
||||
", id=" + id +
|
||||
", timestamp=" + timestamp +
|
||||
", sender_id=" + sender_id +
|
||||
|
|
|
@ -34,6 +34,8 @@ import com.hannesdorfmann.parcelableplease.annotation.ParcelableThisPlease;
|
|||
import org.mariotaku.library.objectcursor.annotation.AfterCursorObjectCreated;
|
||||
import org.mariotaku.library.objectcursor.annotation.CursorField;
|
||||
import org.mariotaku.library.objectcursor.annotation.CursorObject;
|
||||
import org.mariotaku.twidere.model.util.AccountKeyConverter;
|
||||
import org.mariotaku.twidere.model.util.AccountKeyCursorFieldConverter;
|
||||
import org.mariotaku.twidere.model.util.LoganSquareCursorFieldConverter;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses;
|
||||
|
||||
|
@ -60,13 +62,9 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
|||
}
|
||||
};
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "account_id")
|
||||
@CursorField(Statuses.ACCOUNT_ID)
|
||||
public long account_id;
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "account_host")
|
||||
@CursorField(Statuses.ACCOUNT_HOST)
|
||||
public String account_host;
|
||||
@JsonField(name = "account_id", typeConverter = AccountKeyConverter.class)
|
||||
@CursorField(value = Statuses.ACCOUNT_KEY, converter = AccountKeyCursorFieldConverter.class)
|
||||
public AccountKey account_key;
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "timestamp")
|
||||
@CursorField(Statuses.STATUS_TIMESTAMP)
|
||||
|
@ -340,20 +338,18 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
|||
ParcelableStatus status = (ParcelableStatus) o;
|
||||
|
||||
if (id != status.id) return false;
|
||||
if (account_id != status.account_id) return false;
|
||||
return !(account_host != null ? !account_host.equals(status.account_host) : status.account_host != null);
|
||||
return account_key.equals(status.account_key);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return calculateHashCode(account_id, account_host, id);
|
||||
return calculateHashCode(account_key, id);
|
||||
}
|
||||
|
||||
public static int calculateHashCode(long accountId, String accountHost, long id) {
|
||||
public static int calculateHashCode(AccountKey account_key, long id) {
|
||||
int result = (int) (id ^ (id >>> 32));
|
||||
result = 31 * result + (int) (accountId ^ (accountId >>> 32));
|
||||
result = 31 * result + (accountHost != null ? accountHost.hashCode() : 0);
|
||||
result = 31 * result + account_key.hashCode();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -361,7 +357,7 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
|||
public String toString() {
|
||||
return "ParcelableStatus{" +
|
||||
"id=" + id +
|
||||
", account_id=" + account_id +
|
||||
", account_key=" + account_key +
|
||||
", timestamp=" + timestamp +
|
||||
", user_id=" + user_id +
|
||||
", retweet_id=" + retweet_id +
|
||||
|
@ -416,6 +412,7 @@ public class ParcelableStatus implements Parcelable, Comparable<ParcelableStatus
|
|||
", media=" + Arrays.toString(media) +
|
||||
", quoted_media=" + Arrays.toString(quoted_media) +
|
||||
", card=" + card +
|
||||
", extras=" + extras +
|
||||
", _id=" + _id +
|
||||
'}';
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ import com.hannesdorfmann.parcelableplease.annotation.ParcelableThisPlease;
|
|||
import org.mariotaku.library.objectcursor.annotation.AfterCursorObjectCreated;
|
||||
import org.mariotaku.library.objectcursor.annotation.CursorField;
|
||||
import org.mariotaku.library.objectcursor.annotation.CursorObject;
|
||||
import org.mariotaku.twidere.model.util.AccountKeyConverter;
|
||||
import org.mariotaku.twidere.model.util.LoganSquareCursorFieldConverter;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedUsers;
|
||||
|
||||
|
@ -41,11 +42,8 @@ import org.mariotaku.twidere.provider.TwidereDataStore.CachedUsers;
|
|||
public class ParcelableUser implements Parcelable, Comparable<ParcelableUser> {
|
||||
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "account_id")
|
||||
public long account_id;
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "account_host")
|
||||
public String account_host;
|
||||
@JsonField(name = "account_id", typeConverter = AccountKeyConverter.class)
|
||||
public AccountKey account_key;
|
||||
|
||||
@ParcelableThisPlease
|
||||
public int account_color;
|
||||
|
@ -193,9 +191,9 @@ public class ParcelableUser implements Parcelable, Comparable<ParcelableUser> {
|
|||
public ParcelableUser() {
|
||||
}
|
||||
|
||||
public ParcelableUser(final long account_id, final long id, final String name,
|
||||
public ParcelableUser(final AccountKey account_key, final long id, final String name,
|
||||
final String screen_name, final String profile_image_url) {
|
||||
this.account_id = account_id;
|
||||
this.account_key = account_key;
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.screen_name = screen_name;
|
||||
|
@ -231,25 +229,32 @@ public class ParcelableUser implements Parcelable, Comparable<ParcelableUser> {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object obj) {
|
||||
if (this == obj) return true;
|
||||
if (obj == null) return false;
|
||||
if (!(obj instanceof ParcelableUser)) return false;
|
||||
final ParcelableUser other = (ParcelableUser) obj;
|
||||
if (account_id != other.account_id) return false;
|
||||
if (id != other.id) return false;
|
||||
return true;
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
ParcelableUser user = (ParcelableUser) o;
|
||||
|
||||
if (id != user.id) return false;
|
||||
return account_key.equals(user.account_key);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return calculateHashCode(account_id, id);
|
||||
return calculateHashCode(account_key, id);
|
||||
}
|
||||
|
||||
public static int calculateHashCode(AccountKey account_key, long id) {
|
||||
int result = account_key.hashCode();
|
||||
result = 31 * result + (int) (id ^ (id >>> 32));
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ParcelableUser{" +
|
||||
"account_id=" + account_id +
|
||||
"account_id=" + account_key +
|
||||
", account_color=" + account_color +
|
||||
", id=" + id +
|
||||
", created_at=" + created_at +
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
package org.mariotaku.twidere.model.util;
|
||||
|
||||
import android.content.ContentValues;
|
||||
import android.database.Cursor;
|
||||
|
||||
import com.bluelinelabs.logansquare.typeconverters.StringBasedTypeConverter;
|
||||
|
||||
import org.mariotaku.library.objectcursor.converter.CursorFieldConverter;
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
|
||||
import java.lang.reflect.ParameterizedType;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/7.
|
||||
*/
|
||||
public class AccountKeyConverter extends StringBasedTypeConverter<AccountKey> {
|
||||
|
||||
@Override
|
||||
public AccountKey getFromString(String string) {
|
||||
return AccountKey.valueOf(string);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertToString(AccountKey object) {
|
||||
if (object == null) return null;
|
||||
return object.toString();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package org.mariotaku.twidere.model.util;
|
||||
|
||||
import android.content.ContentValues;
|
||||
import android.database.Cursor;
|
||||
|
||||
import org.mariotaku.library.objectcursor.converter.CursorFieldConverter;
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
|
||||
import java.lang.reflect.ParameterizedType;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/7.
|
||||
*/
|
||||
public class AccountKeyCursorFieldConverter implements CursorFieldConverter<AccountKey> {
|
||||
@Override
|
||||
public AccountKey parseField(Cursor cursor, int columnIndex, ParameterizedType fieldType) {
|
||||
return AccountKey.valueOf(cursor.getString(columnIndex));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeField(ContentValues values, AccountKey object, String columnName, ParameterizedType fieldType) {
|
||||
if (object == null) return;
|
||||
values.put(columnName, object.toString());
|
||||
}
|
||||
|
||||
}
|
|
@ -7,7 +7,6 @@ import org.mariotaku.twidere.model.AccountKey;
|
|||
*/
|
||||
public class AccountKeysCursorFieldConverter extends AbsObjectArrayConverter<AccountKey> {
|
||||
|
||||
|
||||
@Override
|
||||
protected AccountKey[] newArray(int size) {
|
||||
return new AccountKey[size];
|
||||
|
|
|
@ -73,8 +73,7 @@ public interface TwidereDataStore {
|
|||
|
||||
interface AccountSupportColumns {
|
||||
|
||||
String ACCOUNT_ID = "account_id";
|
||||
String ACCOUNT_HOST = "account_host";
|
||||
String ACCOUNT_KEY = "account_id";
|
||||
|
||||
}
|
||||
|
||||
|
@ -155,17 +154,16 @@ public interface TwidereDataStore {
|
|||
|
||||
String ACCOUNT_USER = "account_user";
|
||||
|
||||
String[] COLUMNS_NO_CREDENTIALS = {_ID, NAME, SCREEN_NAME, ACCOUNT_ID, PROFILE_IMAGE_URL,
|
||||
PROFILE_BANNER_URL, COLOR, IS_ACTIVATED, SORT_POSITION, ACCOUNT_TYPE, ACCOUNT_USER,
|
||||
ACCOUNT_HOST};
|
||||
String[] COLUMNS_NO_CREDENTIALS = {_ID, NAME, SCREEN_NAME, ACCOUNT_KEY, PROFILE_IMAGE_URL,
|
||||
PROFILE_BANNER_URL, COLOR, IS_ACTIVATED, SORT_POSITION, ACCOUNT_TYPE, ACCOUNT_USER};
|
||||
|
||||
String[] COLUMNS = {_ID, NAME, SCREEN_NAME, ACCOUNT_ID, AUTH_TYPE, BASIC_AUTH_USERNAME,
|
||||
String[] COLUMNS = {_ID, NAME, SCREEN_NAME, ACCOUNT_KEY, AUTH_TYPE, BASIC_AUTH_USERNAME,
|
||||
BASIC_AUTH_PASSWORD, OAUTH_TOKEN, OAUTH_TOKEN_SECRET, CONSUMER_KEY, CONSUMER_SECRET,
|
||||
API_URL_FORMAT, SAME_OAUTH_SIGNING_URL, NO_VERSION_SUFFIX, PROFILE_IMAGE_URL,
|
||||
PROFILE_BANNER_URL, COLOR, IS_ACTIVATED, SORT_POSITION, ACCOUNT_TYPE, ACCOUNT_EXTRAS,
|
||||
ACCOUNT_USER, ACCOUNT_HOST};
|
||||
ACCOUNT_USER};
|
||||
|
||||
String[] TYPES = {TYPE_PRIMARY_KEY, TYPE_TEXT_NOT_NULL, TYPE_TEXT_NOT_NULL, TYPE_INT,
|
||||
String[] TYPES = {TYPE_PRIMARY_KEY, TYPE_TEXT_NOT_NULL, TYPE_TEXT_NOT_NULL, TYPE_TEXT_NOT_NULL,
|
||||
TYPE_INT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT,
|
||||
TYPE_BOOLEAN, TYPE_BOOLEAN, TYPE_TEXT, TYPE_TEXT, TYPE_INT, TYPE_BOOLEAN, TYPE_INT,
|
||||
TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT};
|
||||
|
@ -405,7 +403,7 @@ public interface TwidereDataStore {
|
|||
|
||||
String MEDIA_JSON = "media_json";
|
||||
|
||||
String[] COLUMNS = {_ID, ACCOUNT_ID, MESSAGE_ID, MESSAGE_TIMESTAMP,
|
||||
String[] COLUMNS = {_ID, ACCOUNT_KEY, MESSAGE_ID, MESSAGE_TIMESTAMP,
|
||||
SENDER_ID, RECIPIENT_ID, CONVERSATION_ID, IS_OUTGOING, TEXT_HTML, TEXT_PLAIN, TEXT_UNESCAPED,
|
||||
SENDER_NAME, RECIPIENT_NAME, SENDER_SCREEN_NAME, RECIPIENT_SCREEN_NAME, SENDER_PROFILE_IMAGE_URL,
|
||||
RECIPIENT_PROFILE_IMAGE_URL, MEDIA_JSON, INSERTED_DATE};
|
||||
|
@ -443,8 +441,7 @@ public interface TwidereDataStore {
|
|||
Uri CONTENT_URI = Uri.withAppendedPath(DirectMessages.CONTENT_URI, CONTENT_PATH_SEGMENT);
|
||||
|
||||
String MESSAGE_ID = DirectMessages.MESSAGE_ID;
|
||||
String ACCOUNT_ID = DirectMessages.ACCOUNT_ID;
|
||||
String ACCOUNT_HOST = DirectMessages.ACCOUNT_HOST;
|
||||
String ACCOUNT_KEY = DirectMessages.ACCOUNT_KEY;
|
||||
String IS_OUTGOING = DirectMessages.IS_OUTGOING;
|
||||
String MESSAGE_TIMESTAMP = DirectMessages.MESSAGE_TIMESTAMP;
|
||||
String NAME = "name";
|
||||
|
@ -456,14 +453,13 @@ public interface TwidereDataStore {
|
|||
int IDX__ID = 0;
|
||||
int IDX_MESSAGE_TIMESTAMP = 1;
|
||||
int IDX_MESSAGE_ID = 2;
|
||||
int IDX_ACCOUNT_ID = 3;
|
||||
int IDX_ACCOUNT_HOST = 4;
|
||||
int IDX_IS_OUTGOING = 5;
|
||||
int IDX_NAME = 6;
|
||||
int IDX_SCREEN_NAME = 7;
|
||||
int IDX_PROFILE_IMAGE_URL = 8;
|
||||
int IDX_TEXT = 9;
|
||||
int IDX_CONVERSATION_ID = 10;
|
||||
int IDX_ACCOUNT_KEY = 3;
|
||||
int IDX_IS_OUTGOING = 4;
|
||||
int IDX_NAME = 5;
|
||||
int IDX_SCREEN_NAME = 6;
|
||||
int IDX_PROFILE_IMAGE_URL = 7;
|
||||
int IDX_TEXT = 8;
|
||||
int IDX_CONVERSATION_ID = 9;
|
||||
}
|
||||
|
||||
interface Inbox extends DirectMessages {
|
||||
|
@ -536,8 +532,8 @@ public interface TwidereDataStore {
|
|||
String NAME = "name";
|
||||
String CREATED_AT = "created_at";
|
||||
|
||||
String[] COLUMNS = {_ID, ACCOUNT_ID, ACCOUNT_HOST, SEARCH_ID, CREATED_AT, QUERY, NAME};
|
||||
String[] TYPES = {TYPE_PRIMARY_KEY, TYPE_INT, TYPE_TEXT, TYPE_INT, TYPE_INT, TYPE_TEXT,
|
||||
String[] COLUMNS = {_ID, ACCOUNT_KEY, SEARCH_ID, CREATED_AT, QUERY, NAME};
|
||||
String[] TYPES = {TYPE_PRIMARY_KEY, TYPE_TEXT, TYPE_TEXT, TYPE_INT, TYPE_INT, TYPE_TEXT,
|
||||
TYPE_TEXT};
|
||||
String DEFAULT_SORT_ORDER = CREATED_AT + " DESC";
|
||||
}
|
||||
|
@ -875,7 +871,7 @@ public interface TwidereDataStore {
|
|||
|
||||
String EXTRAS = "extras";
|
||||
|
||||
String[] COLUMNS = {_ID, ACCOUNT_ID, ACCOUNT_HOST, STATUS_ID, USER_ID, STATUS_TIMESTAMP,
|
||||
String[] COLUMNS = {_ID, ACCOUNT_KEY, STATUS_ID, USER_ID, STATUS_TIMESTAMP,
|
||||
TEXT_HTML, TEXT_PLAIN, TEXT_UNESCAPED, USER_NAME, USER_SCREEN_NAME,
|
||||
USER_PROFILE_IMAGE_URL, IN_REPLY_TO_STATUS_ID, IN_REPLY_TO_USER_ID, IN_REPLY_TO_USER_NAME,
|
||||
IN_REPLY_TO_USER_SCREEN_NAME, SOURCE, LOCATION, RETWEET_COUNT, FAVORITE_COUNT, REPLY_COUNT,
|
||||
|
@ -889,7 +885,7 @@ public interface TwidereDataStore {
|
|||
PLACE_FULL_NAME, LANG, RETWEETED, QUOTED_LOCATION, QUOTED_PLACE_FULL_NAME, INSERTED_DATE,
|
||||
EXTRAS};
|
||||
|
||||
String[] TYPES = {TYPE_PRIMARY_KEY, TYPE_INT, TYPE_TEXT, TYPE_INT, TYPE_INT, TYPE_INT,
|
||||
String[] TYPES = {TYPE_PRIMARY_KEY, TYPE_TEXT, TYPE_INT, TYPE_INT, TYPE_INT,
|
||||
TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT,
|
||||
TYPE_INT, TYPE_INT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_INT,
|
||||
TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_TEXT, TYPE_TEXT,
|
||||
|
@ -930,13 +926,13 @@ public interface TwidereDataStore {
|
|||
String TARGET_OBJECT_USER_LISTS = "target_object_user_lists";
|
||||
String TARGET_OBJECT_USERS = "target_object_users";
|
||||
|
||||
String[] COLUMNS = {_ID, ACCOUNT_ID, ACCOUNT_HOST, ACTION, TIMESTAMP, STATUS_ID, STATUS_USER_ID,
|
||||
String[] COLUMNS = {_ID, ACCOUNT_KEY, ACTION, TIMESTAMP, STATUS_ID, STATUS_USER_ID,
|
||||
STATUS_RETWEETED_BY_USER_ID, STATUS_QUOTED_USER_ID, STATUS_SOURCE, STATUS_QUOTE_SOURCE,
|
||||
STATUS_TEXT_PLAIN, STATUS_QUOTE_TEXT_PLAIN, STATUS_TEXT_HTML, STATUS_QUOTE_TEXT_HTML,
|
||||
IS_GAP, MIN_POSITION, MAX_POSITION, SOURCES, SOURCE_IDS, TARGET_STATUSES, TARGET_USERS,
|
||||
TARGET_USER_LISTS, TARGET_OBJECT_STATUSES, TARGET_OBJECT_USER_LISTS, TARGET_OBJECT_USERS,
|
||||
STATUS_RETWEET_ID, STATUS_USER_FOLLOWING, INSERTED_DATE};
|
||||
String[] TYPES = {TYPE_PRIMARY_KEY, TYPE_INT, TYPE_TEXT, TYPE_TEXT, TYPE_INT, TYPE_INT, TYPE_INT,
|
||||
String[] TYPES = {TYPE_PRIMARY_KEY, TYPE_TEXT, TYPE_TEXT, TYPE_INT, TYPE_INT, TYPE_INT,
|
||||
TYPE_INT, TYPE_INT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT,
|
||||
TYPE_BOOLEAN, TYPE_INT, TYPE_INT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT,
|
||||
TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_INT, TYPE_BOOLEAN, INSERTED_DATE_TYPE};
|
||||
|
@ -1009,10 +1005,10 @@ public interface TwidereDataStore {
|
|||
|
||||
String RETWEET_ENABLED = "retweet_enabled";
|
||||
|
||||
String[] COLUMNS = {_ID, ACCOUNT_ID, ACCOUNT_HOST, USER_ID, FOLLOWING, FOLLOWED_BY, BLOCKING,
|
||||
String[] COLUMNS = {_ID, ACCOUNT_KEY, USER_ID, FOLLOWING, FOLLOWED_BY, BLOCKING,
|
||||
BLOCKED_BY, MUTING, RETWEET_ENABLED};
|
||||
|
||||
String[] TYPES = {TYPE_PRIMARY_KEY, TYPE_INT, TYPE_TEXT, TYPE_INT, TYPE_BOOLEAN_DEFAULT_FALSE,
|
||||
String[] TYPES = {TYPE_PRIMARY_KEY, TYPE_TEXT, TYPE_TEXT, TYPE_INT, TYPE_BOOLEAN_DEFAULT_FALSE,
|
||||
TYPE_BOOLEAN_DEFAULT_FALSE, TYPE_BOOLEAN_DEFAULT_FALSE, TYPE_BOOLEAN_DEFAULT_FALSE,
|
||||
TYPE_BOOLEAN_DEFAULT_FALSE, TYPE_BOOLEAN_DEFAULT_TRUE};
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="status_shortener_service_interface_version">2</string>
|
||||
<string name="status_shortener_service_interface_version">3</string>
|
||||
<string name="media_uploader_service_interface_version">2</string>
|
||||
</resources>
|
|
@ -22,6 +22,7 @@ package org.mariotaku.twidere.extension.shortener.gist;
|
|||
import android.content.SharedPreferences;
|
||||
import android.preference.PreferenceManager;
|
||||
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
import org.mariotaku.twidere.model.ParcelableAccount;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.model.ParcelableStatusUpdate;
|
||||
|
@ -34,7 +35,7 @@ import org.mariotaku.twidere.service.StatusShortenerService;
|
|||
public class GistStatusShortenerService extends StatusShortenerService {
|
||||
|
||||
@Override
|
||||
protected StatusShortenResult shorten(ParcelableStatusUpdate status, long currentAccountId, String overrideStatusText) {
|
||||
protected StatusShortenResult shorten(ParcelableStatusUpdate status, AccountKey currentAccountKey, String overrideStatusText) {
|
||||
final Github github = GithubFactory.getInstance(getApiKey());
|
||||
final NewGist newGist = new NewGist();
|
||||
newGist.setDescription("long tweet");
|
||||
|
|
|
@ -9,6 +9,7 @@ import android.support.annotation.Nullable;
|
|||
import android.util.Log;
|
||||
|
||||
import org.mariotaku.twidere.Twidere;
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
import org.mariotaku.twidere.model.ParcelableCredentials;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.model.ParcelableStatusUpdate;
|
||||
|
@ -30,7 +31,7 @@ public class TwitLongerStatusShortenerService extends StatusShortenerService imp
|
|||
*/
|
||||
@Override
|
||||
protected StatusShortenResult shorten(final ParcelableStatusUpdate status,
|
||||
final long currentAccountId,
|
||||
final AccountKey currentAccountKey,
|
||||
final String overrideStatusText) {
|
||||
final int granted = Twidere.isPermissionGranted(this);
|
||||
if (granted == Twidere.Permission.DENIED) {
|
||||
|
@ -56,7 +57,7 @@ public class TwitLongerStatusShortenerService extends StatusShortenerService imp
|
|||
}
|
||||
final ParcelableCredentials credentials;
|
||||
try {
|
||||
credentials = getOAuthCredentials(currentAccountId);
|
||||
credentials = getOAuthCredentials(currentAccountKey);
|
||||
} catch (SecurityException e) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.w(LOGTAG, e);
|
||||
|
@ -98,7 +99,7 @@ public class TwitLongerStatusShortenerService extends StatusShortenerService imp
|
|||
if (result.extra == null) return false;
|
||||
final ParcelableCredentials credentials;
|
||||
try {
|
||||
credentials = getOAuthCredentials(status.account_id);
|
||||
credentials = getOAuthCredentials(status.account_key);
|
||||
} catch (SecurityException e) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.w(LOGTAG, e);
|
||||
|
@ -118,7 +119,7 @@ public class TwitLongerStatusShortenerService extends StatusShortenerService imp
|
|||
}
|
||||
|
||||
@Nullable
|
||||
private ParcelableCredentials getOAuthCredentials(long accountId) {
|
||||
private ParcelableCredentials getOAuthCredentials(AccountKey accountId) {
|
||||
ParcelableCredentials credentials = Twidere.getCredentials(this, accountId);
|
||||
if (credentials == null) return null;
|
||||
switch (credentials.auth_type) {
|
||||
|
|
|
@ -33,6 +33,7 @@ import android.support.annotation.IntDef;
|
|||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
import org.mariotaku.twidere.model.ComposingStatus;
|
||||
import org.mariotaku.twidere.model.ParcelableCredentials;
|
||||
import org.mariotaku.twidere.model.ParcelableCredentialsCursorIndices;
|
||||
|
@ -232,11 +233,13 @@ public final class Twidere implements TwidereConstants {
|
|||
}
|
||||
|
||||
@Nullable
|
||||
public static ParcelableCredentials getCredentials(final Context context, final long accountId) throws SecurityException {
|
||||
if (context == null || accountId < 0) return null;
|
||||
final String selection = Accounts.ACCOUNT_ID + " = ?";
|
||||
public static ParcelableCredentials getCredentials(@NonNull final Context context,
|
||||
@NonNull final AccountKey accountId)
|
||||
throws SecurityException {
|
||||
final String selection = Accounts.ACCOUNT_KEY + " = ?";
|
||||
final String[] selectionArgs = {String.valueOf(accountId)};
|
||||
Cursor cur = context.getContentResolver().query(Accounts.CONTENT_URI, Accounts.COLUMNS, selection, selectionArgs, null);
|
||||
Cursor cur = context.getContentResolver().query(Accounts.CONTENT_URI, Accounts.COLUMNS,
|
||||
selection, selectionArgs, null);
|
||||
if (cur == null) return null;
|
||||
try {
|
||||
if (cur.moveToFirst()) {
|
||||
|
|
|
@ -7,6 +7,7 @@ import android.os.IBinder;
|
|||
import android.os.RemoteException;
|
||||
|
||||
import org.mariotaku.twidere.IStatusShortener;
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.model.ParcelableStatusUpdate;
|
||||
import org.mariotaku.twidere.model.StatusShortenResult;
|
||||
|
@ -28,7 +29,7 @@ public abstract class StatusShortenerService extends Service {
|
|||
}
|
||||
|
||||
protected abstract StatusShortenResult shorten(ParcelableStatusUpdate status,
|
||||
long currentAccountId,
|
||||
AccountKey currentAccountKey,
|
||||
String overrideStatusText);
|
||||
|
||||
protected abstract boolean callback(StatusShortenResult result, ParcelableStatus status);
|
||||
|
@ -47,13 +48,15 @@ public abstract class StatusShortenerService extends Service {
|
|||
}
|
||||
|
||||
@Override
|
||||
public String shorten(final String statusJson, final long currentAccountId,
|
||||
public String shorten(final String statusJson, final String currentAccountIdStr,
|
||||
final String overrideStatusText)
|
||||
throws RemoteException {
|
||||
try {
|
||||
final ParcelableStatusUpdate statusUpdate = LoganSquareMapperFinder.mapperFor(ParcelableStatusUpdate.class)
|
||||
.parse(statusJson);
|
||||
final StatusShortenResult shorten = mService.get().shorten(statusUpdate, currentAccountId, overrideStatusText);
|
||||
final AccountKey currentAccountId = AccountKey.valueOf(currentAccountIdStr);
|
||||
final StatusShortenResult shorten = mService.get().shorten(statusUpdate, currentAccountId,
|
||||
overrideStatusText);
|
||||
return LoganSquareMapperFinder.mapperFor(StatusShortenResult.class).serialize(shorten);
|
||||
} catch (IOException e) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
|
||||
|
|
|
@ -24,6 +24,8 @@ import android.support.annotation.NonNull;
|
|||
import com.bluelinelabs.logansquare.annotation.JsonField;
|
||||
import com.bluelinelabs.logansquare.annotation.JsonObject;
|
||||
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 15/8/8.
|
||||
*/
|
||||
|
@ -33,6 +35,8 @@ public class ScrollRecord implements LogModel {
|
|||
long id;
|
||||
@JsonField(name = "account_id")
|
||||
long accountId;
|
||||
@JsonField(name = "account_host")
|
||||
String accountHost;
|
||||
@JsonField(name = "timestamp")
|
||||
long timestamp;
|
||||
@JsonField(name = "time_offset")
|
||||
|
@ -40,10 +44,11 @@ public class ScrollRecord implements LogModel {
|
|||
@JsonField(name = "scroll_state")
|
||||
int scrollState;
|
||||
|
||||
public static ScrollRecord create(long id, long accountId, long timestamp, long timeOffset, int scrollState) {
|
||||
public static ScrollRecord create(long id, AccountKey accountKey, long timestamp, long timeOffset, int scrollState) {
|
||||
final ScrollRecord record = new ScrollRecord();
|
||||
record.setId(id);
|
||||
record.setAccountId(accountId);
|
||||
record.setAccountId(accountKey.getId());
|
||||
record.setAccountHost(accountKey.getHost());
|
||||
record.setTimestamp(timestamp);
|
||||
record.setTimeOffset(timeOffset);
|
||||
record.setScrollState(scrollState);
|
||||
|
@ -54,6 +59,10 @@ public class ScrollRecord implements LogModel {
|
|||
this.accountId = accountId;
|
||||
}
|
||||
|
||||
public void setAccountHost(String accountHost) {
|
||||
accountHost = accountHost;
|
||||
}
|
||||
|
||||
public void setTimeOffset(long timeOffset) {
|
||||
this.timeOffset = timeOffset;
|
||||
}
|
||||
|
|
|
@ -83,8 +83,8 @@ public class TweetEvent extends BaseEvent implements Parcelable {
|
|||
final TweetEvent event = new TweetEvent();
|
||||
event.markStart(context);
|
||||
event.setId(status.id);
|
||||
event.setAccountId(status.account_id);
|
||||
event.setAccountHost(status.account_host);
|
||||
event.setAccountId(status.account_key.getId());
|
||||
event.setAccountHost(status.account_key.getHost());
|
||||
event.setUserId(status.user_id);
|
||||
event.setTimelineType(timelineType);
|
||||
event.setTweetType(TwidereDataUtils.getTweetType(status));
|
||||
|
|
|
@ -25,6 +25,9 @@ public class UserEvent extends BaseEvent implements Parcelable {
|
|||
@JsonField(name = "account_id")
|
||||
long accountId;
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "account_host")
|
||||
String accountHost;
|
||||
@ParcelableThisPlease
|
||||
@JsonField(name = "user_id")
|
||||
long userId;
|
||||
@ParcelableThisPlease
|
||||
|
@ -61,7 +64,8 @@ public class UserEvent extends BaseEvent implements Parcelable {
|
|||
}
|
||||
|
||||
public void setUser(@NonNull ParcelableUser user) {
|
||||
accountId = user.account_id;
|
||||
accountId = user.account_key.getId();
|
||||
accountHost = user.account_key.getHost();
|
||||
userId = user.id;
|
||||
statusCount = user.statuses_count;
|
||||
followerCount = user.followers_count;
|
||||
|
@ -87,7 +91,8 @@ public class UserEvent extends BaseEvent implements Parcelable {
|
|||
@Override
|
||||
public String toString() {
|
||||
return "UserEvent{" +
|
||||
"mAccountKey=" + accountId +
|
||||
"accountId=" + accountId +
|
||||
", accountHost='" + accountHost + '\'' +
|
||||
", userId=" + userId +
|
||||
", statusCount=" + statusCount +
|
||||
", followerCount=" + followerCount +
|
||||
|
|
|
@ -38,7 +38,6 @@ import android.widget.Toast;
|
|||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.adapter.AccountsAdapter;
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
import org.mariotaku.twidere.model.ParcelableAccount;
|
||||
import org.mariotaku.twidere.model.ParcelableCredentials;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
|
||||
|
@ -122,8 +121,8 @@ public class AccountSelectorActivity extends BaseSupportDialogActivity implement
|
|||
public void onItemClick(final AdapterView<?> parent, final View view, final int position, final long id) {
|
||||
final Intent data = new Intent();
|
||||
final ParcelableAccount account = mAdapter.getAccount(position);
|
||||
data.putExtra(EXTRA_ID, account.account_id);
|
||||
data.putExtra(EXTRA_KEY, new AccountKey(account.account_id, account.account_host));
|
||||
data.putExtra(EXTRA_ID, account.account_key.getId());
|
||||
data.putExtra(EXTRA_KEY, account.account_key);
|
||||
setResult(RESULT_OK, data);
|
||||
finish();
|
||||
}
|
||||
|
|
|
@ -1023,13 +1023,12 @@ public class ComposeActivity extends ThemedFragmentActivity implements OnMenuIte
|
|||
|
||||
private boolean handleMentionIntent(final ParcelableUser user) {
|
||||
if (user == null || user.id <= 0) return false;
|
||||
final String accountScreenName = DataStoreUtils.getAccountScreenName(this,
|
||||
new AccountKey(user.account_id, user.account_host));
|
||||
final String accountScreenName = DataStoreUtils.getAccountScreenName(this, user.account_key);
|
||||
if (TextUtils.isEmpty(accountScreenName)) return false;
|
||||
mEditText.setText(String.format("@%s ", user.screen_name));
|
||||
final int selection_end = mEditText.length();
|
||||
mEditText.setSelection(selection_end);
|
||||
mAccountsAdapter.setSelectedAccountIds(new AccountKey(user.account_id, user.account_host));
|
||||
mAccountsAdapter.setSelectedAccountIds(user.account_key);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1037,7 +1036,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements OnMenuIte
|
|||
if (status == null || status.id <= 0) return false;
|
||||
mEditText.setText(Utils.getQuoteStatus(this, status.id, status.user_screen_name, status.text_plain));
|
||||
mEditText.setSelection(0);
|
||||
mAccountsAdapter.setSelectedAccountIds(new AccountKey(status.account_id, status.account_host));
|
||||
mAccountsAdapter.setSelectedAccountIds(status.account_key);
|
||||
showQuoteLabel(status);
|
||||
return true;
|
||||
}
|
||||
|
@ -1071,13 +1070,12 @@ public class ComposeActivity extends ThemedFragmentActivity implements OnMenuIte
|
|||
|
||||
private boolean handleReplyIntent(final ParcelableStatus status) {
|
||||
if (status == null || status.id <= 0) return false;
|
||||
final String myScreenName = DataStoreUtils.getAccountScreenName(this,
|
||||
new AccountKey(status.account_id, status.account_host));
|
||||
final String myScreenName = DataStoreUtils.getAccountScreenName(this, status.account_key);
|
||||
if (TextUtils.isEmpty(myScreenName)) return false;
|
||||
int selectionStart = 0;
|
||||
mEditText.append("@" + status.user_screen_name + " ");
|
||||
// If replying status from current user, just exclude it's screen name from selection.
|
||||
if (status.account_id != status.user_id) {
|
||||
if (status.account_key.getId() != status.user_id) {
|
||||
selectionStart = mEditText.length();
|
||||
}
|
||||
if (status.is_retweet) {
|
||||
|
@ -1099,7 +1097,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements OnMenuIte
|
|||
}
|
||||
final int selectionEnd = mEditText.length();
|
||||
mEditText.setSelection(selectionStart, selectionEnd);
|
||||
mAccountsAdapter.setSelectedAccountIds(new AccountKey(status.account_id, status.account_host));
|
||||
mAccountsAdapter.setSelectedAccountIds(status.account_key);
|
||||
showReplyLabel(status);
|
||||
return true;
|
||||
}
|
||||
|
@ -1130,8 +1128,9 @@ public class ComposeActivity extends ThemedFragmentActivity implements OnMenuIte
|
|||
}
|
||||
|
||||
private boolean isQuotingProtectedStatus() {
|
||||
if (!isQuote() || mInReplyToStatus == null) return false;
|
||||
return mInReplyToStatus.user_is_protected && mInReplyToStatus.account_id != mInReplyToStatus.user_id;
|
||||
final ParcelableStatus status = mInReplyToStatus;
|
||||
if (!isQuote() || status == null) return false;
|
||||
return status.user_is_protected && status.account_key.getId() != status.user_id;
|
||||
}
|
||||
|
||||
private boolean noReplyContent(final String text) {
|
||||
|
@ -1147,7 +1146,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements OnMenuIte
|
|||
if (ArrayUtils.isEmpty(accounts)) {
|
||||
mEditText.setAccountKey(Utils.getDefaultAccountKey(this));
|
||||
} else {
|
||||
mEditText.setAccountKey(new AccountKey(accounts[0]));
|
||||
mEditText.setAccountKey(accounts[0].account_key);
|
||||
}
|
||||
mSendTextCountView.setMaxLength(TwidereValidator.getTextLimit(accounts));
|
||||
setMenu();
|
||||
|
@ -1501,7 +1500,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements OnMenuIte
|
|||
|
||||
@Override
|
||||
public long getItemId(int position) {
|
||||
return mAccounts[position].account_id;
|
||||
return System.identityHashCode(mAccounts[position]);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
@ -1510,8 +1509,8 @@ public class ComposeActivity extends ThemedFragmentActivity implements OnMenuIte
|
|||
final AccountKey[] temp = new AccountKey[mAccounts.length];
|
||||
int selectedCount = 0;
|
||||
for (ParcelableAccount account : mAccounts) {
|
||||
if (Boolean.TRUE.equals(mSelection.get(new AccountKey(account.account_id, account.account_host)))) {
|
||||
temp[selectedCount++] = new AccountKey(account.account_id, account.account_host);
|
||||
if (Boolean.TRUE.equals(mSelection.get(account.account_key))) {
|
||||
temp[selectedCount++] = account.account_key;
|
||||
}
|
||||
}
|
||||
final AccountKey[] result = new AccountKey[selectedCount];
|
||||
|
@ -1535,7 +1534,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements OnMenuIte
|
|||
final ParcelableCredentials[] temp = new ParcelableCredentials[mAccounts.length];
|
||||
int selectedCount = 0;
|
||||
for (ParcelableCredentials account : mAccounts) {
|
||||
if (Boolean.TRUE.equals(mSelection.get(new AccountKey(account.account_id, account.account_host)))) {
|
||||
if (Boolean.TRUE.equals(mSelection.get(account.account_key))) {
|
||||
temp[selectedCount++] = account;
|
||||
}
|
||||
}
|
||||
|
@ -1557,7 +1556,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements OnMenuIte
|
|||
@Override
|
||||
public void onBindViewHolder(AccountIconViewHolder holder, int position) {
|
||||
final ParcelableAccount account = mAccounts[position];
|
||||
final boolean isSelected = Boolean.TRUE.equals(mSelection.get(new AccountKey(account.account_id, account.account_host)));
|
||||
final boolean isSelected = Boolean.TRUE.equals(mSelection.get(account.account_key));
|
||||
holder.showAccount(this, account, isSelected);
|
||||
}
|
||||
|
||||
|
@ -1574,8 +1573,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements OnMenuIte
|
|||
private void toggleSelection(int position) {
|
||||
if (mAccounts == null) return;
|
||||
final ParcelableCredentials account = mAccounts[position];
|
||||
final AccountKey accountKey = new AccountKey(account.account_id, account.account_host);
|
||||
mSelection.put(accountKey, !Boolean.TRUE.equals(mSelection.get(accountKey)));
|
||||
mSelection.put(account.account_key, !Boolean.TRUE.equals(mSelection.get(account.account_key)));
|
||||
mActivity.notifyAccountSelectionChanged();
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
|
|
@ -396,7 +396,7 @@ public class CustomTabEditorActivity extends BaseSupportDialogActivity implement
|
|||
final int pos = mAccountSpinner.getSelectedItemPosition();
|
||||
if (mAccountSpinner.getCount() > pos && pos >= 0) {
|
||||
ParcelableCredentials credentials = mAccountsAdapter.getItem(pos);
|
||||
return new AccountKey(credentials.account_id, credentials.account_host);
|
||||
return credentials.account_key;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -294,7 +294,8 @@ public class QuickSearchBarActivity extends ThemedFragmentActivity implements On
|
|||
|
||||
private AccountKey getSelectedAccountKey() {
|
||||
final ParcelableAccount account = (ParcelableAccount) mAccountSpinner.getSelectedItem();
|
||||
return new AccountKey(account.account_id, account.account_host);
|
||||
if (account == null) return null;
|
||||
return account.account_key;
|
||||
}
|
||||
|
||||
private void updateWindowAttributes() {
|
||||
|
|
|
@ -92,7 +92,6 @@ import org.mariotaku.twidere.model.TwitterAccountExtra;
|
|||
import org.mariotaku.twidere.model.util.ParcelableUserUtils;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
|
||||
import org.mariotaku.twidere.util.AsyncTaskUtils;
|
||||
import org.mariotaku.twidere.util.ContentValuesCreator;
|
||||
import org.mariotaku.twidere.util.JsonSerializer;
|
||||
import org.mariotaku.twidere.util.OAuthPasswordAuthenticator;
|
||||
import org.mariotaku.twidere.util.OAuthPasswordAuthenticator.AuthenticationException;
|
||||
|
@ -104,6 +103,7 @@ import org.mariotaku.twidere.util.SharedPreferencesWrapper;
|
|||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.TwidereActionModeForChildListener;
|
||||
import org.mariotaku.twidere.util.TwitterAPIFactory;
|
||||
import org.mariotaku.twidere.util.TwitterContentUtils;
|
||||
import org.mariotaku.twidere.util.UserAgentUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.util.support.ViewSupport;
|
||||
|
@ -115,7 +115,6 @@ import org.mariotaku.twidere.view.iface.TintedStatusLayout;
|
|||
import java.lang.ref.WeakReference;
|
||||
|
||||
import static android.text.TextUtils.isEmpty;
|
||||
import static org.mariotaku.twidere.util.ContentValuesCreator.createAccount;
|
||||
import static org.mariotaku.twidere.util.DataStoreUtils.getActivatedAccountKeys;
|
||||
import static org.mariotaku.twidere.util.Utils.getNonEmptyString;
|
||||
import static org.mariotaku.twidere.util.Utils.isUserLoggedIn;
|
||||
|
@ -452,7 +451,7 @@ public class SignInActivity extends BaseAppCompatActivity implements OnClickList
|
|||
if (result.alreadyLoggedIn) {
|
||||
final ContentValues values = result.toContentValues();
|
||||
if (values != null) {
|
||||
mResolver.update(Accounts.CONTENT_URI, values, Expression.equals(Accounts.ACCOUNT_ID,
|
||||
mResolver.update(Accounts.CONTENT_URI, values, Expression.equals(Accounts.ACCOUNT_KEY,
|
||||
result.user.getId()).getSQL(), null);
|
||||
}
|
||||
Toast.makeText(this, R.string.error_already_logged_in, Toast.LENGTH_SHORT).show();
|
||||
|
@ -991,7 +990,7 @@ public class SignInActivity extends BaseAppCompatActivity implements OnClickList
|
|||
public final User user;
|
||||
public final int authType, color;
|
||||
public final String apiUrlFormat;
|
||||
public final boolean sameOauthSigningUrl, noVersionSuffix;
|
||||
public final boolean sameOAuthSigningUrl, noVersionSuffix;
|
||||
public final Pair<String, String> accountType;
|
||||
|
||||
public SignInResponse(final boolean alreadyLoggedIn, final boolean succeed,
|
||||
|
@ -1004,7 +1003,7 @@ public class SignInActivity extends BaseAppCompatActivity implements OnClickList
|
|||
final Exception exception, final String basicUsername,
|
||||
final String basicPassword, final OAuthAuthorization oauth,
|
||||
final User user, final int authType, final int color,
|
||||
final String apiUrlFormat, final boolean sameOauthSigningUrl,
|
||||
final String apiUrlFormat, final boolean sameOAuthSigningUrl,
|
||||
final boolean noVersionSuffix, final Pair<String, String> accountType) {
|
||||
this.alreadyLoggedIn = alreadyLoggedIn;
|
||||
this.succeed = succeed;
|
||||
|
@ -1016,17 +1015,17 @@ public class SignInActivity extends BaseAppCompatActivity implements OnClickList
|
|||
this.authType = authType;
|
||||
this.color = color;
|
||||
this.apiUrlFormat = apiUrlFormat;
|
||||
this.sameOauthSigningUrl = sameOauthSigningUrl;
|
||||
this.sameOAuthSigningUrl = sameOAuthSigningUrl;
|
||||
this.noVersionSuffix = noVersionSuffix;
|
||||
this.accountType = accountType;
|
||||
}
|
||||
|
||||
public SignInResponse(final boolean alreadyLoggedIn, final OAuthAuthorization oauth,
|
||||
final User user, final int authType, final int color,
|
||||
final String apiUrlFormat, final boolean sameOauthSigningUrl,
|
||||
final String apiUrlFormat, final boolean sameOAuthSigningUrl,
|
||||
final boolean noVersionSuffix, final Pair<String, String> accountType) {
|
||||
this(alreadyLoggedIn, true, null, null, null, oauth, user, authType, color, apiUrlFormat,
|
||||
sameOauthSigningUrl, noVersionSuffix, accountType);
|
||||
sameOAuthSigningUrl, noVersionSuffix, accountType);
|
||||
}
|
||||
|
||||
public SignInResponse(final boolean alreadyLoggedIn, final String basicUsername,
|
||||
|
@ -1047,34 +1046,57 @@ public class SignInActivity extends BaseAppCompatActivity implements OnClickList
|
|||
}
|
||||
|
||||
private ContentValues toContentValues() {
|
||||
if (user == null || user.getId() <= 0) return null;
|
||||
final ContentValues values;
|
||||
switch (authType) {
|
||||
case ParcelableCredentials.AUTH_TYPE_BASIC: {
|
||||
values = createAccount(basicUsername, basicPassword, user, color, apiUrlFormat,
|
||||
noVersionSuffix);
|
||||
values = new ContentValues();
|
||||
values.put(Accounts.BASIC_AUTH_USERNAME, basicUsername);
|
||||
values.put(Accounts.BASIC_AUTH_PASSWORD, basicPassword);
|
||||
values.put(Accounts.AUTH_TYPE, ParcelableCredentials.AUTH_TYPE_BASIC);
|
||||
break;
|
||||
}
|
||||
case ParcelableCredentials.AUTH_TYPE_TWIP_O_MODE: {
|
||||
values = ContentValuesCreator.createAccount(user, color, apiUrlFormat, noVersionSuffix);
|
||||
values = new ContentValues();
|
||||
values.put(Accounts.AUTH_TYPE, ParcelableCredentials.AUTH_TYPE_TWIP_O_MODE);
|
||||
break;
|
||||
}
|
||||
case ParcelableCredentials.AUTH_TYPE_OAUTH:
|
||||
case ParcelableCredentials.AUTH_TYPE_XAUTH: {
|
||||
values = ContentValuesCreator.createAccount(oauth, user, authType, color, apiUrlFormat,
|
||||
sameOauthSigningUrl, noVersionSuffix);
|
||||
values = new ContentValues();
|
||||
final OAuthToken accessToken = oauth.getOauthToken();
|
||||
values.put(Accounts.OAUTH_TOKEN, accessToken.getOauthToken());
|
||||
values.put(Accounts.OAUTH_TOKEN_SECRET, accessToken.getOauthTokenSecret());
|
||||
values.put(Accounts.CONSUMER_KEY, oauth.getConsumerKey());
|
||||
values.put(Accounts.CONSUMER_SECRET, oauth.getConsumerSecret());
|
||||
values.put(Accounts.AUTH_TYPE, authType);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
values = null;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
if (values != null && accountType != null) {
|
||||
|
||||
values.put(Accounts.ACCOUNT_KEY, user.getId());
|
||||
values.put(Accounts.SCREEN_NAME, user.getScreenName());
|
||||
values.put(Accounts.NAME, user.getName());
|
||||
values.put(Accounts.PROFILE_IMAGE_URL, TwitterContentUtils.getProfileImageUrl(user));
|
||||
values.put(Accounts.PROFILE_BANNER_URL, user.getProfileBannerImageUrl());
|
||||
|
||||
values.put(Accounts.COLOR, color);
|
||||
values.put(Accounts.IS_ACTIVATED, 1);
|
||||
|
||||
|
||||
values.put(Accounts.API_URL_FORMAT, apiUrlFormat);
|
||||
values.put(Accounts.SAME_OAUTH_SIGNING_URL, sameOAuthSigningUrl);
|
||||
values.put(Accounts.NO_VERSION_SUFFIX, noVersionSuffix);
|
||||
|
||||
if (accountType != null) {
|
||||
values.put(Accounts.ACCOUNT_TYPE, accountType.first);
|
||||
values.put(Accounts.ACCOUNT_EXTRAS, accountType.second);
|
||||
final AccountKey accountKey = new AccountKey(user.getId(),
|
||||
ParcelableUserUtils.getUserHost(user.getOstatusUri()));
|
||||
final ParcelableUser parcelableUser = ParcelableUserUtils.fromUser(user, accountKey);
|
||||
values.put(Accounts.ACCOUNT_HOST, ParcelableUserUtils.getUserHost(parcelableUser));
|
||||
values.put(Accounts.ACCOUNT_USER, JsonSerializer.serialize(parcelableUser, ParcelableUser.class));
|
||||
}
|
||||
return values;
|
||||
|
|
|
@ -36,7 +36,6 @@ import org.mariotaku.twidere.adapter.iface.IActivitiesAdapter;
|
|||
import org.mariotaku.twidere.api.twitter.model.Activity;
|
||||
import org.mariotaku.twidere.fragment.support.CursorActivitiesFragment;
|
||||
import org.mariotaku.twidere.fragment.support.UserFragment;
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
import org.mariotaku.twidere.model.ParcelableActivity;
|
||||
import org.mariotaku.twidere.model.ParcelableMedia;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
|
@ -439,9 +438,8 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
|
|||
final ParcelableActivity activity = adapter.getActivity(position);
|
||||
final ParcelableStatus status = ParcelableActivity.getActivityStatus(activity);
|
||||
assert status != null;
|
||||
IntentUtils.openUserProfile(context, new AccountKey(status.account_id,
|
||||
status.account_host), status.user_id, status.user_screen_name, null, true,
|
||||
UserFragment.Referral.TIMELINE_STATUS);
|
||||
IntentUtils.openUserProfile(context, status.account_key, status.user_id,
|
||||
status.user_screen_name, null, true, UserFragment.Referral.TIMELINE_STATUS);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -24,6 +24,7 @@ import android.database.Cursor;
|
|||
import android.support.v7.widget.RecyclerView;
|
||||
|
||||
import org.mariotaku.library.objectcursor.ObjectCursor;
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.model.ParcelableStatusCursorIndices;
|
||||
|
||||
|
@ -65,10 +66,9 @@ public abstract class AbsParcelableStatusesAdapter extends AbsStatusesAdapter<Li
|
|||
if (mData instanceof ObjectCursor) {
|
||||
final Cursor cursor = ((ObjectCursor) mData).getCursor(dataPosition);
|
||||
final ParcelableStatusCursorIndices indices = (ParcelableStatusCursorIndices) ((ObjectCursor) mData).getIndices();
|
||||
final long account_id = cursor.getLong(indices.account_id);
|
||||
final String account_host = cursor.getString(indices.account_host);
|
||||
final AccountKey accountKey = AccountKey.valueOf(cursor.getString(indices.account_key));
|
||||
final long id = cursor.getLong(indices.id);
|
||||
return ParcelableStatus.calculateHashCode(account_id, account_host, id);
|
||||
return ParcelableStatus.calculateHashCode(accountKey, id);
|
||||
}
|
||||
return System.identityHashCode(mData.get(dataPosition));
|
||||
}
|
||||
|
@ -86,15 +86,15 @@ public abstract class AbsParcelableStatusesAdapter extends AbsStatusesAdapter<Li
|
|||
}
|
||||
|
||||
@Override
|
||||
public long getAccountId(int adapterPosition) {
|
||||
public AccountKey getAccountKey(int adapterPosition) {
|
||||
int dataPosition = adapterPosition - getStatusStartIndex();
|
||||
if (dataPosition < 0 || dataPosition >= getStatusCount()) return RecyclerView.NO_ID;
|
||||
if (dataPosition < 0 || dataPosition >= getStatusCount()) return null;
|
||||
if (mData instanceof ObjectCursor) {
|
||||
final Cursor cursor = ((ObjectCursor) mData).getCursor(dataPosition);
|
||||
final ParcelableStatusCursorIndices indices = (ParcelableStatusCursorIndices) ((ObjectCursor) mData).getIndices();
|
||||
return cursor.getLong(indices.account_id);
|
||||
return AccountKey.valueOf(cursor.getString(indices.account_key));
|
||||
}
|
||||
return mData.get(dataPosition).account_id;
|
||||
return mData.get(dataPosition).account_key;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -12,6 +12,7 @@ import android.view.ViewGroup;
|
|||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.adapter.iface.IStatusesAdapter;
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
import org.mariotaku.twidere.model.ParcelableMedia;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.util.MediaLoadingHandler;
|
||||
|
@ -282,9 +283,11 @@ public abstract class AbsStatusesAdapter<D> extends LoadMoreSupportAdapter<ViewH
|
|||
|
||||
@Nullable
|
||||
@Override
|
||||
public ParcelableStatus findStatusById(long accountId, long statusId) {
|
||||
public ParcelableStatus findStatusById(AccountKey accountKey, long statusId) {
|
||||
for (int i = 0, j = getStatusCount(); i < j; i++) {
|
||||
if (accountId == getAccountId(i) && statusId == getStatusId(i)) return getStatus(i);
|
||||
if (accountKey.equals(getAccountKey(i)) && statusId == getStatusId(i)) {
|
||||
return getStatus(i);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ import com.mobeta.android.dslv.SimpleDragSortCursorAdapter;
|
|||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.adapter.iface.IBaseAdapter;
|
||||
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;
|
||||
|
@ -54,9 +55,9 @@ public class AccountsAdapter extends SimpleDragSortCursorAdapter implements Cons
|
|||
@Override
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
final Object tag = buttonView.getTag();
|
||||
if (!(tag instanceof Long) || mOnAccountToggleListener == null) return;
|
||||
final long accountId = (Long) tag;
|
||||
mOnAccountToggleListener.onAccountToggle(accountId, isChecked);
|
||||
if (!(tag instanceof String) || mOnAccountToggleListener == null) return;
|
||||
final AccountKey accountKey = AccountKey.valueOf((String) tag);
|
||||
mOnAccountToggleListener.onAccountToggle(accountKey, isChecked);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -85,7 +86,7 @@ public class AccountsAdapter extends SimpleDragSortCursorAdapter implements Cons
|
|||
}
|
||||
holder.toggle.setChecked(cursor.getShort(mIndices.is_activated) == 1);
|
||||
holder.toggle.setOnCheckedChangeListener(mCheckedChangeListener);
|
||||
holder.toggle.setTag(cursor.getLong(mIndices.account_id));
|
||||
holder.toggle.setTag(cursor.getString(mIndices.account_key));
|
||||
holder.toggleContainer.setVisibility(mSwitchEnabled ? View.VISIBLE : View.GONE);
|
||||
holder.setSortEnabled(mSortEnabled);
|
||||
super.bindView(view, context, cursor);
|
||||
|
@ -180,6 +181,6 @@ public class AccountsAdapter extends SimpleDragSortCursorAdapter implements Cons
|
|||
}
|
||||
|
||||
public interface OnAccountToggleListener {
|
||||
void onAccountToggle(long accountId, boolean state);
|
||||
void onAccountToggle(AccountKey accountId, boolean state);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ import org.mariotaku.twidere.R;
|
|||
import org.mariotaku.twidere.TwidereConstants;
|
||||
import org.mariotaku.twidere.adapter.iface.IStatusesAdapter;
|
||||
import org.mariotaku.twidere.constant.SharedPreferenceConstants;
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper;
|
||||
|
@ -181,13 +182,14 @@ public final class DummyStatusHolderAdapter implements IStatusesAdapter<Object>,
|
|||
}
|
||||
|
||||
@Override
|
||||
public long getAccountId(int position) {
|
||||
return 0;
|
||||
@Nullable
|
||||
public AccountKey getAccountKey(int position) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ParcelableStatus findStatusById(long accountId, long statusId) {
|
||||
public ParcelableStatus findStatusById(AccountKey accountId, long statusId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -168,9 +168,9 @@ public class MessageConversationAdapter extends BaseRecyclerViewAdapter<ViewHold
|
|||
final Cursor c = mCursor;
|
||||
if (c == null || c.isClosed()) return null;
|
||||
c.moveToPosition(position);
|
||||
final long account_id = c.getLong(mIndices.account_id);
|
||||
final long message_id = c.getLong(mIndices.id);
|
||||
return Utils.findDirectMessageInDatabases(getContext(), account_id, message_id);
|
||||
final AccountKey accountKey = AccountKey.valueOf(c.getString(mIndices.account_key));
|
||||
final long messageId = c.getLong(mIndices.id);
|
||||
return Utils.findDirectMessageInDatabases(getContext(), accountKey, messageId);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -33,6 +33,7 @@ import org.mariotaku.twidere.Constants;
|
|||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.adapter.iface.IContentCardAdapter;
|
||||
import org.mariotaku.twidere.annotation.CustomTabType;
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
import org.mariotaku.twidere.model.StringLongPair;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages.ConversationEntries;
|
||||
import org.mariotaku.twidere.util.ReadStateManager.OnReadStateChangeListener;
|
||||
|
@ -213,7 +214,7 @@ public class MessageEntriesAdapter extends LoadMoreSupportAdapter<ViewHolder> im
|
|||
|
||||
private boolean isUnread(Cursor c) {
|
||||
if (mPositionPairs == null) return true;
|
||||
final long accountId = c.getLong(ConversationEntries.IDX_ACCOUNT_ID);
|
||||
final long accountId = c.getLong(ConversationEntries.IDX_ACCOUNT_KEY);
|
||||
final long conversationId = c.getLong(ConversationEntries.IDX_CONVERSATION_ID);
|
||||
final long messageId = c.getLong(ConversationEntries.IDX_MESSAGE_ID);
|
||||
final String key = accountId + "-" + conversationId;
|
||||
|
@ -241,14 +242,12 @@ public class MessageEntriesAdapter extends LoadMoreSupportAdapter<ViewHolder> im
|
|||
|
||||
public static class DirectMessageEntry {
|
||||
|
||||
public final long account_id;
|
||||
public final String account_host;
|
||||
public final AccountKey account_key;
|
||||
public final long conversation_id;
|
||||
public final String screen_name, name;
|
||||
|
||||
DirectMessageEntry(Cursor cursor) {
|
||||
account_id = cursor.getLong(ConversationEntries.IDX_ACCOUNT_ID);
|
||||
account_host = cursor.getString(ConversationEntries.IDX_ACCOUNT_HOST);
|
||||
account_key = AccountKey.valueOf(cursor.getString(ConversationEntries.IDX_ACCOUNT_KEY));
|
||||
conversation_id = cursor.getLong(ConversationEntries.IDX_CONVERSATION_ID);
|
||||
screen_name = cursor.getString(ConversationEntries.IDX_SCREEN_NAME);
|
||||
name = cursor.getString(ConversationEntries.IDX_NAME);
|
||||
|
|
|
@ -25,6 +25,7 @@ import android.support.annotation.Nullable;
|
|||
import android.support.v7.widget.RecyclerView;
|
||||
|
||||
import org.mariotaku.library.objectcursor.ObjectCursor;
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
import org.mariotaku.twidere.model.ParcelableActivity;
|
||||
import org.mariotaku.twidere.model.ParcelableActivityCursorIndices;
|
||||
import org.mariotaku.twidere.view.holder.ActivityTitleSummaryViewHolder;
|
||||
|
@ -58,12 +59,11 @@ public class ParcelableActivitiesAdapter extends AbsActivitiesAdapter<List<Parce
|
|||
if (mData instanceof ObjectCursor) {
|
||||
final Cursor cursor = ((ObjectCursor) mData).getCursor(dataPosition);
|
||||
final ParcelableActivityCursorIndices indices = (ParcelableActivityCursorIndices) ((ObjectCursor) mData).getIndices();
|
||||
final long account_id = cursor.getLong(indices.account_id);
|
||||
final AccountKey accountKey = AccountKey.valueOf(cursor.getString(indices.account_key));
|
||||
final long timestamp = cursor.getLong(indices.timestamp);
|
||||
final long max_position = cursor.getLong(indices.max_position);
|
||||
final long min_position = cursor.getLong(indices.min_position);
|
||||
return ParcelableActivity.calculateHashCode(account_id, timestamp, max_position,
|
||||
min_position);
|
||||
final long maxPosition = cursor.getLong(indices.max_position);
|
||||
final long minPosition = cursor.getLong(indices.min_position);
|
||||
return ParcelableActivity.calculateHashCode(accountKey, timestamp, maxPosition, minPosition);
|
||||
}
|
||||
return System.identityHashCode(mData.get(dataPosition));
|
||||
}
|
||||
|
|
|
@ -104,17 +104,14 @@ public class ParcelableUsersAdapter extends AbsUsersAdapter<List<ParcelableUser>
|
|||
}
|
||||
|
||||
public int findPosition(AccountKey accountKey, long userId) {
|
||||
return findPosition(accountKey.getId(), accountKey.getHost(), userId);
|
||||
}
|
||||
|
||||
public int findPosition(long accountId, String accountHost, long userId) {
|
||||
if (mData == null) return RecyclerView.NO_POSITION;
|
||||
for (int i = getUserStartIndex(), j = i + getUserCount(); i < j; i++) {
|
||||
final ParcelableUser user = mData.get(i);
|
||||
if (user.account_id == accountId && user.id == userId) {
|
||||
if (user.account_key.equals(accountKey) && user.id == userId) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return RecyclerView.NO_POSITION;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -101,8 +101,7 @@ public class StaggeredGridParcelableStatusesAdapter extends AbsParcelableStatuse
|
|||
mediaImageView.setHasPlayIcon(ParcelableMediaUtils.hasPlayIcon(firstMedia.type));
|
||||
loader.displayProfileImage(mediaProfileImageView, status.user_profile_image_url);
|
||||
loader.displayPreviewImageWithCredentials(mediaImageView, firstMedia.preview_url,
|
||||
new AccountKey(status.account_id, status.account_host),
|
||||
adapter.getMediaLoadingHandler());
|
||||
status.account_key, adapter.getMediaLoadingHandler());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -3,6 +3,7 @@ package org.mariotaku.twidere.adapter.iface;
|
|||
import android.support.annotation.Nullable;
|
||||
import android.view.View;
|
||||
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
import org.mariotaku.twidere.model.ParcelableMedia;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.util.MediaLoadingHandler;
|
||||
|
@ -25,10 +26,11 @@ public interface IStatusesAdapter<Data> extends IContentCardAdapter, IGapSupport
|
|||
|
||||
long getStatusId(int position);
|
||||
|
||||
long getAccountId(int position);
|
||||
@Nullable
|
||||
AccountKey getAccountKey(int position);
|
||||
|
||||
@Nullable
|
||||
ParcelableStatus findStatusById(long accountId, long statusId);
|
||||
ParcelableStatus findStatusById(AccountKey accountKey, long statusId);
|
||||
|
||||
int getStatusCount();
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ public abstract class BaseAccountPreferenceFragment extends BasePreferenceFragme
|
|||
final PreferenceManager pm = getPreferenceManager();
|
||||
final ParcelableAccount account = getArguments().getParcelable(EXTRA_ACCOUNT);
|
||||
final String preferenceName = ACCOUNT_PREFERENCES_NAME_PREFIX
|
||||
+ (account != null ? account.account_id : "unknown");
|
||||
+ (account != null ? account.account_key : "unknown");
|
||||
pm.setSharedPreferencesName(preferenceName);
|
||||
addPreferencesFromResource(getPreferencesResource());
|
||||
final SharedPreferences prefs = pm.getSharedPreferences();
|
||||
|
@ -58,8 +58,8 @@ public abstract class BaseAccountPreferenceFragment extends BasePreferenceFragme
|
|||
final Intent intent = activity.getIntent();
|
||||
if (account != null && intent.hasExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT)) {
|
||||
final boolean nameFirst = prefs.getBoolean(KEY_NAME_FIRST, true);
|
||||
final String name = mUserColorNameManager.getDisplayName(account.account_id, account.name,
|
||||
account.screen_name, nameFirst, false);
|
||||
final String name = mUserColorNameManager.getDisplayName(account.account_key.getId(),
|
||||
account.name, account.screen_name, nameFirst, false);
|
||||
activity.setTitle(name);
|
||||
}
|
||||
updatePreferenceScreen();
|
||||
|
|
|
@ -90,7 +90,8 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentListRecycler
|
|||
private final OnScrollListener mHotMobiScrollTracker = new OnScrollListener() {
|
||||
|
||||
public List<ScrollRecord> mRecords;
|
||||
private long mFirstVisibleTimestamp = -1, mFirstVisibleAccountId = -1;
|
||||
private long mFirstVisibleTimestamp = -1;
|
||||
private AccountKey mFirstVisibleAccountId = null;
|
||||
private int mFirstVisiblePosition = -1;
|
||||
private int mScrollState;
|
||||
|
||||
|
@ -103,15 +104,16 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentListRecycler
|
|||
final AbsActivitiesAdapter<Data> adapter = (AbsActivitiesAdapter<Data>) recyclerView.getAdapter();
|
||||
final ParcelableActivity activity = adapter.getActivity(firstVisiblePosition);
|
||||
if (activity != null) {
|
||||
final long timestamp = activity.timestamp, accountId = activity.account_id;
|
||||
if (timestamp != mFirstVisibleTimestamp || accountId != mFirstVisibleAccountId) {
|
||||
final long timestamp = activity.timestamp;
|
||||
final AccountKey accountKey = activity.account_key;
|
||||
if (timestamp != mFirstVisibleTimestamp || !accountKey.equals(mFirstVisibleAccountId)) {
|
||||
if (mRecords == null) mRecords = new ArrayList<>();
|
||||
final long time = System.currentTimeMillis();
|
||||
mRecords.add(ScrollRecord.create(timestamp, accountId, time,
|
||||
mRecords.add(ScrollRecord.create(timestamp, accountKey, time,
|
||||
TimeZone.getDefault().getOffset(time), mScrollState));
|
||||
}
|
||||
mFirstVisibleTimestamp = timestamp;
|
||||
mFirstVisibleAccountId = accountId;
|
||||
mFirstVisibleAccountId = accountKey;
|
||||
}
|
||||
}
|
||||
mFirstVisiblePosition = firstVisiblePosition;
|
||||
|
@ -190,8 +192,7 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentListRecycler
|
|||
case ACTION_STATUS_FAVORITE: {
|
||||
final AsyncTwitterWrapper twitter = mTwitterWrapper;
|
||||
if (status.is_favorite) {
|
||||
twitter.destroyFavoriteAsync(new AccountKey(activity.account_id,
|
||||
activity.account_host), status.id);
|
||||
twitter.destroyFavoriteAsync(status.account_key, status.id);
|
||||
} else {
|
||||
final IStatusViewHolder holder = (IStatusViewHolder)
|
||||
recyclerView.findViewHolderForLayoutPosition(position);
|
||||
|
@ -339,7 +340,7 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentListRecycler
|
|||
public void onGapClick(GapViewHolder holder, int position) {
|
||||
final AbsActivitiesAdapter<Data> adapter = getAdapter();
|
||||
final ParcelableActivity activity = adapter.getActivity(position);
|
||||
final AccountKey[] accountIds = {new AccountKey(activity.account_id, activity.account_host)};
|
||||
final AccountKey[] accountIds = {activity.account_key};
|
||||
final long[] maxIds = {activity.min_position};
|
||||
getActivities(new BaseRefreshTaskParam(accountIds, maxIds, null));
|
||||
}
|
||||
|
@ -353,8 +354,7 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentListRecycler
|
|||
// BEGIN HotMobi
|
||||
final MediaEvent event = MediaEvent.create(getActivity(), status, media,
|
||||
getTimelineType(), adapter.isMediaPreviewEnabled());
|
||||
HotMobiLogger.getInstance(getActivity()).log(new AccountKey(status.account_id,
|
||||
status.account_host), event);
|
||||
HotMobiLogger.getInstance(getActivity()).log(status.account_key, event);
|
||||
// END HotMobi
|
||||
}
|
||||
|
||||
|
@ -383,8 +383,7 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentListRecycler
|
|||
final AsyncTwitterWrapper twitter = mTwitterWrapper;
|
||||
if (twitter == null) return;
|
||||
if (status.is_favorite) {
|
||||
twitter.destroyFavoriteAsync(new AccountKey(status.account_id,
|
||||
status.account_host), status.id);
|
||||
twitter.destroyFavoriteAsync(status.account_key, status.id);
|
||||
} else {
|
||||
holder.playLikeAnimation(new DefaultOnLikedListener(twitter, status));
|
||||
}
|
||||
|
|
|
@ -89,7 +89,8 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListRecyclerVi
|
|||
private final OnScrollListener mHotMobiScrollTracker = new OnScrollListener() {
|
||||
|
||||
public List<ScrollRecord> mRecords;
|
||||
private long mFirstVisibleId = -1, mFirstVisibleAccountId = -1;
|
||||
private long mFirstVisibleId = -1;
|
||||
private AccountKey mFirstVisibleAccountId = null;
|
||||
private int mFirstVisiblePosition = -1;
|
||||
private int mScrollState;
|
||||
|
||||
|
@ -102,8 +103,9 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListRecyclerVi
|
|||
final AbsStatusesAdapter<Data> adapter = (AbsStatusesAdapter<Data>) recyclerView.getAdapter();
|
||||
final ParcelableStatus status = adapter.getStatus(firstVisiblePosition);
|
||||
if (status != null) {
|
||||
final long id = status.id, accountId = status.account_id;
|
||||
if (id != mFirstVisibleId || accountId != mFirstVisibleAccountId) {
|
||||
final long id = status.id;
|
||||
final AccountKey accountId = status.account_key;
|
||||
if (id != mFirstVisibleId || !accountId.equals(mFirstVisibleAccountId)) {
|
||||
if (mRecords == null) mRecords = new ArrayList<>();
|
||||
final long time = System.currentTimeMillis();
|
||||
mRecords.add(ScrollRecord.create(id, accountId, time,
|
||||
|
@ -187,8 +189,7 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListRecyclerVi
|
|||
case ACTION_STATUS_FAVORITE: {
|
||||
final AsyncTwitterWrapper twitter = mTwitterWrapper;
|
||||
if (status.is_favorite) {
|
||||
twitter.destroyFavoriteAsync(new AccountKey(status.account_id,
|
||||
status.account_host), status.id);
|
||||
twitter.destroyFavoriteAsync(status.account_key, status.id);
|
||||
} else {
|
||||
final IStatusViewHolder holder = (IStatusViewHolder)
|
||||
recyclerView.findViewHolderForLayoutPosition(position);
|
||||
|
@ -320,7 +321,7 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListRecyclerVi
|
|||
final AbsStatusesAdapter<Data> adapter = getAdapter();
|
||||
final ParcelableStatus status = adapter.getStatus(position);
|
||||
if (status == null) return;
|
||||
final AccountKey[] accountIds = {new AccountKey(status.account_id, status.account_host)};
|
||||
final AccountKey[] accountIds = {status.account_key};
|
||||
final long[] maxIds = {status.id};
|
||||
getStatuses(new BaseRefreshTaskParam(accountIds, maxIds, null));
|
||||
}
|
||||
|
@ -334,8 +335,7 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListRecyclerVi
|
|||
// BEGIN HotMobi
|
||||
final MediaEvent event = MediaEvent.create(getActivity(), status, media, getTimelineType(),
|
||||
adapter.isMediaPreviewEnabled());
|
||||
HotMobiLogger.getInstance(getActivity()).log(new AccountKey(status.account_id,
|
||||
status.account_host), event);
|
||||
HotMobiLogger.getInstance(getActivity()).log(status.account_key, event);
|
||||
// END HotMobi
|
||||
}
|
||||
|
||||
|
@ -372,8 +372,7 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListRecyclerVi
|
|||
final AsyncTwitterWrapper twitter = mTwitterWrapper;
|
||||
if (twitter == null) return;
|
||||
if (status.is_favorite) {
|
||||
twitter.destroyFavoriteAsync(new AccountKey(status.account_id,
|
||||
status.account_host), status.id);
|
||||
twitter.destroyFavoriteAsync(status.account_key, status.id);
|
||||
} else {
|
||||
holder.playLikeAnimation(new DefaultOnLikedListener(twitter, status));
|
||||
}
|
||||
|
@ -406,9 +405,8 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListRecyclerVi
|
|||
@Override
|
||||
public void onUserProfileClick(IStatusViewHolder holder, ParcelableStatus status, int position) {
|
||||
final FragmentActivity activity = getActivity();
|
||||
IntentUtils.openUserProfile(activity, new AccountKey(status.account_id, status.account_host),
|
||||
status.user_id, status.user_screen_name, null, true,
|
||||
UserFragment.Referral.TIMELINE_STATUS);
|
||||
IntentUtils.openUserProfile(activity, status.account_key, status.user_id,
|
||||
status.user_screen_name, null, true, UserFragment.Referral.TIMELINE_STATUS);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -597,8 +595,7 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListRecyclerVi
|
|||
public boolean onLiked() {
|
||||
final ParcelableStatus status = mStatus;
|
||||
if (status.is_favorite) return false;
|
||||
mTwitter.createFavoriteAsync(new AccountKey(status.account_id, status.account_host),
|
||||
status.id);
|
||||
mTwitter.createFavoriteAsync(status.account_key, status.id);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,7 +34,6 @@ import org.mariotaku.twidere.adapter.AbsUsersAdapter;
|
|||
import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter.IndicatorPosition;
|
||||
import org.mariotaku.twidere.adapter.iface.IUsersAdapter.UserAdapterListener;
|
||||
import org.mariotaku.twidere.loader.iface.IExtendedLoader;
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.util.IntentUtils;
|
||||
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
|
||||
|
@ -113,8 +112,8 @@ abstract class AbsUsersFragment<Data> extends AbsContentListRecyclerViewFragment
|
|||
public void onUserClick(UserViewHolder holder, int position) {
|
||||
final ParcelableUser user = getAdapter().getUser(position);
|
||||
final FragmentActivity activity = getActivity();
|
||||
IntentUtils.openUserProfile(activity, new AccountKey(user.account_id, user.account_host),
|
||||
user.id, user.screen_name, null, true, getUserReferral());
|
||||
IntentUtils.openUserProfile(activity, user.account_key, user.id, user.screen_name, null,
|
||||
true, getUserReferral());
|
||||
}
|
||||
|
||||
@UserFragment.Referral
|
||||
|
|
|
@ -76,6 +76,7 @@ import com.commonsware.cwac.merge.MergeAdapter;
|
|||
import com.nostra13.universalimageloader.core.assist.FailReason;
|
||||
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.mariotaku.sqliteqb.library.Expression;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.SettingsActivity;
|
||||
|
@ -247,8 +248,8 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
|||
final ParcelableAccount account = mAccountsAdapter.getSelectedAccount();
|
||||
if (account == null) return;
|
||||
final FragmentActivity activity = getActivity();
|
||||
IntentUtils.openUserProfile(activity, new AccountKey(account.account_id,
|
||||
account.account_host), account.account_id, account.screen_name, null, true,
|
||||
IntentUtils.openUserProfile(activity, account.account_key,
|
||||
account.account_key.getId(), account.screen_name, null, true,
|
||||
UserFragment.Referral.SELF_PROFILE);
|
||||
break;
|
||||
}
|
||||
|
@ -280,7 +281,7 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
|||
AccountKey defaultId = null;
|
||||
for (ParcelableAccount account : accounts) {
|
||||
if (account.is_activated) {
|
||||
defaultId = new AccountKey(account.account_id, account.account_host);
|
||||
defaultId = account.account_key;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -291,7 +292,7 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
|||
if (accountKey == null) {
|
||||
accountKey = defaultId;
|
||||
}
|
||||
mAccountsAdapter.setSelectedAccountId(accountKey);
|
||||
mAccountsAdapter.setSelectedAccountKey(accountKey);
|
||||
|
||||
mAccountOptionsAdapter.setSelectedAccount(mAccountsAdapter.getSelectedAccount());
|
||||
|
||||
|
@ -316,11 +317,10 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
|||
final ParcelableAccount account = mAccountsAdapter.getSelectedAccount();
|
||||
if (account == null || !(item instanceof OptionItem)) return;
|
||||
final OptionItem option = (OptionItem) item;
|
||||
final AccountKey accountKey = new AccountKey(account.account_id, account.account_host);
|
||||
switch (option.id) {
|
||||
case R.id.search: {
|
||||
final Intent intent = new Intent(getActivity(), QuickSearchBarActivity.class);
|
||||
intent.putExtra(EXTRA_ACCOUNT_KEY, accountKey);
|
||||
intent.putExtra(EXTRA_ACCOUNT_KEY, account.account_key);
|
||||
startActivity(intent);
|
||||
closeAccountsDrawer();
|
||||
break;
|
||||
|
@ -328,28 +328,30 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
|||
case R.id.compose: {
|
||||
final Intent composeIntent = new Intent(INTENT_ACTION_COMPOSE);
|
||||
composeIntent.setClass(getActivity(), ComposeActivity.class);
|
||||
composeIntent.putExtra(EXTRA_ACCOUNT_KEY, accountKey);
|
||||
composeIntent.putExtra(EXTRA_ACCOUNT_KEY, account.account_key);
|
||||
startActivity(composeIntent);
|
||||
break;
|
||||
}
|
||||
case R.id.favorites: {
|
||||
IntentUtils.openUserFavorites(getActivity(), accountKey, account.account_id, account.screen_name);
|
||||
IntentUtils.openUserFavorites(getActivity(), account.account_key,
|
||||
account.account_key.getId(), account.screen_name);
|
||||
break;
|
||||
}
|
||||
case R.id.lists: {
|
||||
IntentUtils.openUserLists(getActivity(), accountKey, account.account_id, account.screen_name);
|
||||
IntentUtils.openUserLists(getActivity(), account.account_key,
|
||||
account.account_key.getId(), account.screen_name);
|
||||
break;
|
||||
}
|
||||
case R.id.messages: {
|
||||
IntentUtils.openDirectMessages(getActivity(), accountKey);
|
||||
IntentUtils.openDirectMessages(getActivity(), account.account_key);
|
||||
break;
|
||||
}
|
||||
case R.id.interactions: {
|
||||
IntentUtils.openInteractions(getActivity(), accountKey);
|
||||
IntentUtils.openInteractions(getActivity(), account.account_key);
|
||||
break;
|
||||
}
|
||||
case R.id.edit: {
|
||||
Utils.openProfileEditor(getActivity(), accountKey);
|
||||
Utils.openProfileEditor(getActivity(), account.account_key);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -463,8 +465,7 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
|||
if (account == null) return true;
|
||||
final Intent composeIntent = new Intent(INTENT_ACTION_COMPOSE);
|
||||
composeIntent.setClass(getActivity(), ComposeActivity.class);
|
||||
composeIntent.putExtra(EXTRA_ACCOUNT_KEY,
|
||||
new AccountKey(account.account_id, account.account_host));
|
||||
composeIntent.putExtra(EXTRA_ACCOUNT_KEY, account.account_key);
|
||||
startActivity(composeIntent);
|
||||
return true;
|
||||
}
|
||||
|
@ -475,10 +476,11 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
|||
final ParcelableAccount account = accounts[item.getOrder()];
|
||||
final ContentValues values = new ContentValues();
|
||||
final boolean newActivated = !account.is_activated;
|
||||
mAccountActionProvider.setAccountActivated(account.account_id, newActivated);
|
||||
mAccountActionProvider.setAccountActivated(account.account_key, newActivated);
|
||||
values.put(Accounts.IS_ACTIVATED, newActivated);
|
||||
final String where = Expression.equals(Accounts.ACCOUNT_ID, account.account_id).getSQL();
|
||||
mResolver.update(Accounts.CONTENT_URI, values, where, null);
|
||||
final String where = Expression.equalsArgs(Accounts.ACCOUNT_KEY).getSQL();
|
||||
final String[] whereArgs = {account.account_key.toString()};
|
||||
mResolver.update(Accounts.CONTENT_URI, values, where, whereArgs);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
@ -545,13 +547,13 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
|||
switch (tab.type) {
|
||||
case CustomTabType.DIRECT_MESSAGES: {
|
||||
if (!hasDmTab) {
|
||||
hasDmTab = hasAccountInTab(tab, account.account_id, account.is_activated);
|
||||
hasDmTab = hasAccountInTab(tab, account.account_key, account.is_activated);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CustomTabType.NOTIFICATIONS_TIMELINE: {
|
||||
if (!hasInteractionsTab) {
|
||||
hasInteractionsTab = hasAccountInTab(tab, account.account_id, account.is_activated);
|
||||
hasInteractionsTab = hasAccountInTab(tab, account.account_key, account.is_activated);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -578,14 +580,11 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
|||
mAccountOptionsAdapter.add(new OptionItem(R.string.lists, R.drawable.ic_action_list, R.id.lists));
|
||||
}
|
||||
|
||||
private boolean hasAccountInTab(SupportTabSpec tab, long accountId, boolean isActivated) {
|
||||
private boolean hasAccountInTab(SupportTabSpec tab, AccountKey accountId, boolean isActivated) {
|
||||
if (tab.args == null) return false;
|
||||
final AccountKey[] accountKeys = Utils.getAccountKeys(tab.args);
|
||||
if (accountKeys == null) return isActivated;
|
||||
for (AccountKey accountKey : accountKeys) {
|
||||
if (accountId == accountKey.getId()) return true;
|
||||
}
|
||||
return false;
|
||||
return ArrayUtils.contains(accountKeys, accountId);
|
||||
}
|
||||
|
||||
private void closeAccountsDrawer() {
|
||||
|
@ -683,10 +682,9 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
|||
|
||||
private void finishAnimation() {
|
||||
final Editor editor = mPreferences.edit();
|
||||
final AccountKey accountKey = new AccountKey(account.account_id, account.account_host);
|
||||
editor.putString(KEY_DEFAULT_ACCOUNT_KEY, accountKey.toString());
|
||||
editor.putString(KEY_DEFAULT_ACCOUNT_KEY, account.account_key.toString());
|
||||
editor.apply();
|
||||
mAccountsAdapter.setSelectedAccountId(accountKey);
|
||||
mAccountsAdapter.setSelectedAccountKey(account.account_key);
|
||||
mAccountOptionsAdapter.setSelectedAccount(account);
|
||||
updateAccountActions();
|
||||
updateAccountOptionsSeparatorLabel(clickedDrawable);
|
||||
|
@ -800,9 +798,9 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
|||
setHasStableIds(true);
|
||||
}
|
||||
|
||||
private static int indexOfAccount(List<ParcelableAccount> accounts, long accountId) {
|
||||
private static int indexOfAccount(List<ParcelableAccount> accounts, AccountKey accountId) {
|
||||
for (int i = 0, j = accounts.size(); i < j; i++) {
|
||||
if (accounts.get(i).account_id == accountId) return i;
|
||||
if (accounts.get(i).account_key.equals(accountId)) return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
@ -823,16 +821,16 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
|||
}
|
||||
|
||||
@Nullable
|
||||
public AccountKey getSelectedAccountId() {
|
||||
public AccountKey getSelectedAccountKey() {
|
||||
final ParcelableAccount selectedAccount = getSelectedAccount();
|
||||
if (selectedAccount == null) return null;
|
||||
return new AccountKey(selectedAccount.account_id, selectedAccount.account_host);
|
||||
return selectedAccount.account_key;
|
||||
}
|
||||
|
||||
public void setSelectedAccountId(@Nullable AccountKey accountKey) {
|
||||
public void setSelectedAccountKey(@Nullable AccountKey accountKey) {
|
||||
final ParcelableAccount selectedAccount = getSelectedAccount();
|
||||
if (selectedAccount == null || accountKey == null) return;
|
||||
swap(accountKey, new AccountKey(selectedAccount.account_id, selectedAccount.account_host));
|
||||
swap(accountKey, selectedAccount.account_key);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -850,7 +848,7 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
|||
|
||||
@Override
|
||||
public long getItemId(int position) {
|
||||
return getAdapterAccount(position).account_id;
|
||||
return System.identityHashCode(getAdapterAccount(position));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -868,7 +866,7 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
|||
Collections.addAll(tempList, accounts);
|
||||
if (previousAccounts != null) {
|
||||
for (ParcelableAccount previousAccount : previousAccounts) {
|
||||
final int idx = indexOfAccount(tempList, previousAccount.account_id);
|
||||
final int idx = indexOfAccount(tempList, previousAccount.account_key);
|
||||
if (idx >= 0) {
|
||||
mInternalAccounts[tempIdx++] = tempList.remove(idx);
|
||||
}
|
||||
|
@ -895,10 +893,10 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
|||
int fromIdx = -1, toIdx = -1;
|
||||
for (int i = 0, j = mInternalAccounts.length; i < j; i++) {
|
||||
final ParcelableAccount account = mInternalAccounts[i];
|
||||
if (fromId.isAccount(account.account_id, account.account_host)) {
|
||||
if (fromId.equals(account.account_key)) {
|
||||
fromIdx = i;
|
||||
}
|
||||
if (toId.isAccount(account.account_id, account.account_host)) {
|
||||
if (toId.equals(account.account_key)) {
|
||||
toIdx = i;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ import android.support.v4.app.FragmentActivity;
|
|||
import android.support.v4.app.LoaderManager.LoaderCallbacks;
|
||||
import android.support.v4.content.CursorLoader;
|
||||
import android.support.v4.content.Loader;
|
||||
import android.support.v4.util.LongSparseArray;
|
||||
import android.support.v4.util.SimpleArrayMap;
|
||||
import android.view.ContextMenu;
|
||||
import android.view.ContextMenu.ContextMenuInfo;
|
||||
import android.view.LayoutInflater;
|
||||
|
@ -37,9 +37,9 @@ import android.widget.TextView;
|
|||
import com.mobeta.android.dslv.DragSortListView;
|
||||
import com.mobeta.android.dslv.DragSortListView.DropListener;
|
||||
|
||||
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.R;
|
||||
import org.mariotaku.twidere.activity.support.ColorPickerDialogActivity;
|
||||
import org.mariotaku.twidere.activity.support.SignInActivity;
|
||||
|
@ -53,6 +53,7 @@ import org.mariotaku.twidere.provider.TwidereDataStore.Mentions;
|
|||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses;
|
||||
import org.mariotaku.twidere.util.IntentUtils;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.TwidereCollectionUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.util.collection.CompactHashSet;
|
||||
|
||||
|
@ -69,7 +70,7 @@ public class AccountsManagerFragment extends BaseSupportFragment implements Load
|
|||
|
||||
private AccountsAdapter mAdapter;
|
||||
private ParcelableAccount mSelectedAccount;
|
||||
private LongSparseArray<Boolean> mActivatedState = new LongSparseArray<>();
|
||||
private SimpleArrayMap<AccountKey, Boolean> mActivatedState = new SimpleArrayMap<>();
|
||||
|
||||
private DragSortListView mListView;
|
||||
private View mEmptyView;
|
||||
|
@ -104,9 +105,10 @@ public class AccountsManagerFragment extends BaseSupportFragment implements Load
|
|||
return;
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put(Accounts.COLOR, data.getIntExtra(EXTRA_COLOR, Color.WHITE));
|
||||
final Expression where = Expression.equals(Accounts.ACCOUNT_ID, mSelectedAccount.account_id);
|
||||
final Expression where = Expression.equalsArgs(Accounts.ACCOUNT_KEY);
|
||||
final String[] whereArgs = {mSelectedAccount.account_key.toString()};
|
||||
final ContentResolver cr = getContentResolver();
|
||||
cr.update(Accounts.CONTENT_URI, values, where.getSQL(), null);
|
||||
cr.update(Accounts.CONTENT_URI, values, where.getSQL(), whereArgs);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -137,7 +139,7 @@ public class AccountsManagerFragment extends BaseSupportFragment implements Load
|
|||
case R.id.delete: {
|
||||
final AccountDeletionDialogFragment f = new AccountDeletionDialogFragment();
|
||||
final Bundle args = new Bundle();
|
||||
args.putParcelable(EXTRA_ACCOUNT_KEY, new AccountKey(account.account_id, account.account_host));
|
||||
args.putParcelable(EXTRA_ACCOUNT_KEY, account.account_key);
|
||||
f.setArguments(args);
|
||||
f.show(getChildFragmentManager(), FRAGMENT_TAG_ACCOUNT_DELETION);
|
||||
break;
|
||||
|
@ -149,9 +151,8 @@ public class AccountsManagerFragment extends BaseSupportFragment implements Load
|
|||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
final ParcelableAccount account = mAdapter.getAccount(position);
|
||||
IntentUtils.openUserProfile(getActivity(), new AccountKey(account.account_id,
|
||||
account.account_host), account.account_id, account.screen_name, null, true,
|
||||
UserFragment.Referral.SELF_PROFILE);
|
||||
IntentUtils.openUserProfile(getActivity(), account.account_key, account.account_key.getId(),
|
||||
account.screen_name, null, true, UserFragment.Referral.SELF_PROFILE);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -161,7 +162,7 @@ public class AccountsManagerFragment extends BaseSupportFragment implements Load
|
|||
}
|
||||
|
||||
private void saveActivatedState() {
|
||||
final Set<Long> trueIds = new CompactHashSet<>(), falseIds = new CompactHashSet<>();
|
||||
final Set<AccountKey> trueIds = new CompactHashSet<>(), falseIds = new CompactHashSet<>();
|
||||
for (int i = 0, j = mActivatedState.size(); i < j; i++) {
|
||||
if (mActivatedState.valueAt(i)) {
|
||||
trueIds.add(mActivatedState.keyAt(i));
|
||||
|
@ -172,16 +173,18 @@ public class AccountsManagerFragment extends BaseSupportFragment implements Load
|
|||
final ContentResolver cr = getContentResolver();
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put(Accounts.IS_ACTIVATED, true);
|
||||
Expression where = Expression.in(new Columns.Column(Accounts.ACCOUNT_ID), new RawItemArray(trueIds.toArray()));
|
||||
cr.update(Accounts.CONTENT_URI, values, where.getSQL(), null);
|
||||
Expression where = Expression.in(new Columns.Column(Accounts.ACCOUNT_KEY), new ArgsArray(trueIds.size()));
|
||||
String[] whereArgs = TwidereCollectionUtils.toStringArray(trueIds);
|
||||
cr.update(Accounts.CONTENT_URI, values, where.getSQL(), whereArgs);
|
||||
values.put(Accounts.IS_ACTIVATED, false);
|
||||
where = Expression.in(new Columns.Column(Accounts.ACCOUNT_ID), new RawItemArray(falseIds.toArray()));
|
||||
cr.update(Accounts.CONTENT_URI, values, where.getSQL(), null);
|
||||
where = Expression.in(new Columns.Column(Accounts.ACCOUNT_KEY), new ArgsArray(falseIds.size()));
|
||||
whereArgs = TwidereCollectionUtils.toStringArray(falseIds);
|
||||
cr.update(Accounts.CONTENT_URI, values, where.getSQL(), whereArgs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAccountToggle(long accountId, boolean state) {
|
||||
mActivatedState.append(accountId, state);
|
||||
public void onAccountToggle(AccountKey accountId, boolean state) {
|
||||
mActivatedState.put(accountId, state);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -45,7 +45,7 @@ public class CreateUserBlockDialogFragment extends BaseSupportDialogFragment imp
|
|||
final ParcelableUser user = getUser();
|
||||
final AsyncTwitterWrapper twitter = mTwitterWrapper;
|
||||
if (user == null || twitter == null) return;
|
||||
twitter.createBlockAsync(new AccountKey(user.account_id, user.account_host), user.id);
|
||||
twitter.createBlockAsync(user.account_key, user.id);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -29,7 +29,6 @@ import android.support.v4.app.FragmentManager;
|
|||
import android.support.v7.app.AlertDialog;
|
||||
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
|
@ -45,8 +44,7 @@ public class CreateUserMuteDialogFragment extends BaseSupportDialogFragment impl
|
|||
final ParcelableUser user = getUser();
|
||||
final AsyncTwitterWrapper twitter = mTwitterWrapper;
|
||||
if (user == null || twitter == null) return;
|
||||
twitter.createMuteAsync(new AccountKey(user.account_id, user.account_host),
|
||||
user.id);
|
||||
twitter.createMuteAsync(user.account_key, user.id);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -105,7 +105,7 @@ public abstract class CursorActivitiesFragment extends AbsActivitiesFragment<Lis
|
|||
final String table = getTableNameByUri(uri);
|
||||
final String sortOrder = getSortOrder();
|
||||
final AccountKey[] accountIds = getAccountKeys();
|
||||
final Expression accountWhere = Expression.in(new Column(Activities.ACCOUNT_ID),
|
||||
final Expression accountWhere = Expression.in(new Column(Activities.ACCOUNT_KEY),
|
||||
new RawItemArray(accountIds));
|
||||
final Expression filterWhere = getFiltersWhere(table), where;
|
||||
if (filterWhere != null) {
|
||||
|
|
|
@ -102,7 +102,7 @@ public abstract class CursorStatusesFragment extends AbsStatusesFragment<List<Pa
|
|||
final String table = getTableNameByUri(uri);
|
||||
final String sortOrder = Statuses.DEFAULT_SORT_ORDER;
|
||||
final AccountKey[] accountKeys = getAccountKeys();
|
||||
final Expression accountWhere = Expression.in(new Column(Statuses.ACCOUNT_ID), new RawItemArray(accountKeys));
|
||||
final Expression accountWhere = Expression.in(new Column(Statuses.ACCOUNT_KEY), new RawItemArray(accountKeys));
|
||||
final Expression filterWhere = getFiltersWhere(table), where;
|
||||
if (filterWhere != null) {
|
||||
where = Expression.and(accountWhere, filterWhere);
|
||||
|
@ -147,7 +147,7 @@ public abstract class CursorStatusesFragment extends AbsStatusesFragment<List<Pa
|
|||
final int lastVisiblePosition = getLayoutManager().findLastVisibleItemPosition();
|
||||
final int startIndex = adapter.getStatusStartIndex();
|
||||
for (int i = firstVisiblePosition, j = lastVisiblePosition + 1; i < j; i++) {
|
||||
if (adapter.getAccountId(i) == status.account_id &&
|
||||
if (status.account_key.equals(adapter.getAccountKey(i)) &&
|
||||
adapter.getStatusId(i) == status.id) {
|
||||
data.set(i - startIndex, status);
|
||||
return;
|
||||
|
|
|
@ -29,7 +29,6 @@ import android.support.v4.app.FragmentManager;
|
|||
import android.support.v7.app.AlertDialog;
|
||||
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
|
@ -46,8 +45,7 @@ public class DestroyFriendshipDialogFragment extends BaseSupportDialogFragment i
|
|||
final ParcelableUser user = getUser();
|
||||
final AsyncTwitterWrapper twitter = mTwitterWrapper;
|
||||
if (user == null || twitter == null) return;
|
||||
twitter.destroyFriendshipAsync(new AccountKey(user.account_id, user.account_host),
|
||||
user.id);
|
||||
twitter.destroyFriendshipAsync(user.account_key, user.id);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -28,7 +28,6 @@ import android.support.v4.app.FragmentManager;
|
|||
import android.support.v7.app.AlertDialog;
|
||||
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
|
@ -44,8 +43,7 @@ public class DestroyStatusDialogFragment extends BaseSupportDialogFragment imple
|
|||
final ParcelableStatus status = getStatus();
|
||||
final AsyncTwitterWrapper twitter = mTwitterWrapper;
|
||||
if (status == null || twitter == null) return;
|
||||
twitter.destroyStatusAsync(new AccountKey(status.account_id, status.account_host),
|
||||
status.id);
|
||||
twitter.destroyStatusAsync(status.account_key, status.id);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -31,7 +31,7 @@ import android.support.v4.app.FragmentActivity;
|
|||
import android.support.v4.app.LoaderManager.LoaderCallbacks;
|
||||
import android.support.v4.content.CursorLoader;
|
||||
import android.support.v4.content.Loader;
|
||||
import android.support.v4.util.LongSparseArray;
|
||||
import android.support.v4.util.SimpleArrayMap;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.KeyEvent;
|
||||
|
@ -88,7 +88,7 @@ public class DirectMessagesFragment extends AbsContentListRecyclerViewFragment<M
|
|||
private RecyclerViewNavigationHelper mNavigationHelper;
|
||||
|
||||
// Data fields
|
||||
private final LongSparseArray<Set<Long>> mUnreadCountsToRemove = new LongSparseArray<>();
|
||||
private final SimpleArrayMap<AccountKey, Set<Long>> mUnreadCountsToRemove = new SimpleArrayMap<>();
|
||||
private final Set<Integer> mReadPositions = Collections.synchronizedSet(new HashSet<Integer>());
|
||||
private int mFirstVisibleItem;
|
||||
|
||||
|
@ -120,7 +120,7 @@ public class DirectMessagesFragment extends AbsContentListRecyclerViewFragment<M
|
|||
return twitter != null && (twitter.isReceivedDirectMessagesRefreshing() || twitter.isSentDirectMessagesRefreshing());
|
||||
}
|
||||
|
||||
public final LongSparseArray<Set<Long>> getUnreadCountsToRemove() {
|
||||
public final SimpleArrayMap<AccountKey, Set<Long>> getUnreadCountsToRemove() {
|
||||
return mUnreadCountsToRemove;
|
||||
}
|
||||
|
||||
|
@ -153,7 +153,7 @@ 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_ID), new RawItemArray(accountIds));
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -195,14 +195,13 @@ public class DirectMessagesFragment extends AbsContentListRecyclerViewFragment<M
|
|||
|
||||
@Override
|
||||
public void onEntryClick(int position, DirectMessageEntry entry) {
|
||||
IntentUtils.openMessageConversation(getActivity(), new AccountKey(entry.account_id,
|
||||
entry.account_host), entry.conversation_id);
|
||||
IntentUtils.openMessageConversation(getActivity(), entry.account_key, entry.conversation_id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUserClick(int position, DirectMessageEntry entry) {
|
||||
IntentUtils.openUserProfile(getActivity(), new AccountKey(entry.account_id, entry.account_host),
|
||||
entry.conversation_id, entry.screen_name, null, true, null);
|
||||
IntentUtils.openUserProfile(getActivity(), entry.account_key, entry.conversation_id,
|
||||
entry.screen_name, null, true, null);
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
|
@ -366,7 +365,7 @@ public class DirectMessagesFragment extends AbsContentListRecyclerViewFragment<M
|
|||
mFirstVisibleItem = firstVisibleItem;
|
||||
}
|
||||
|
||||
private void addUnreadCountsToRemove(final long accountId, final long id) {
|
||||
private void addUnreadCountsToRemove(final AccountKey accountId, final long id) {
|
||||
if (mUnreadCountsToRemove.indexOfKey(accountId) < 0) {
|
||||
final Set<Long> counts = new HashSet<>();
|
||||
counts.add(id);
|
||||
|
@ -429,8 +428,9 @@ public class DirectMessagesFragment extends AbsContentListRecyclerViewFragment<M
|
|||
protected Object doInBackground(final Object... params) {
|
||||
for (final int pos : read_positions) {
|
||||
final DirectMessageEntry entry = adapter.getEntry(pos);
|
||||
final long id = entry.conversation_id, account_id = entry.account_id;
|
||||
fragment.addUnreadCountsToRemove(account_id, id);
|
||||
final long id = entry.conversation_id;
|
||||
final AccountKey accountKey = entry.account_key;
|
||||
fragment.addUnreadCountsToRemove(accountKey, id);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -73,8 +73,7 @@ public class IncomingFriendshipsFragment extends CursorSupportUsersListFragment
|
|||
final AbsUsersAdapter<List<ParcelableUser>> adapter = getAdapter();
|
||||
final ParcelableUser user = adapter.getUser(position);
|
||||
if (user == null) return;
|
||||
mTwitterWrapper.acceptFriendshipAsync(new AccountKey(user.account_id, user.account_host),
|
||||
user.id);
|
||||
mTwitterWrapper.acceptFriendshipAsync(user.account_key, user.id);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -82,8 +81,7 @@ public class IncomingFriendshipsFragment extends CursorSupportUsersListFragment
|
|||
final AbsUsersAdapter<List<ParcelableUser>> adapter = getAdapter();
|
||||
final ParcelableUser user = adapter.getUser(position);
|
||||
if (user == null) return;
|
||||
mTwitterWrapper.denyFriendshipAsync(new AccountKey(user.account_id, user.account_host),
|
||||
user.id);
|
||||
mTwitterWrapper.denyFriendshipAsync(user.account_key, user.id);
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
|
|
|
@ -318,7 +318,7 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
|
|||
}
|
||||
showConversation(account, recipient);
|
||||
if (account != null && recipient != null) {
|
||||
final String key = getDraftsTextKey(account.account_id, recipient.id);
|
||||
final String key = getDraftsTextKey(account.account_key, recipient.id);
|
||||
mEditText.setText(mMessageDrafts.getString(key, null));
|
||||
}
|
||||
}
|
||||
|
@ -372,7 +372,7 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
|
|||
final ParcelableCredentials account = mAccount;
|
||||
final ParcelableUser recipient = mRecipient;
|
||||
if (account != null && recipient != null) {
|
||||
final String key = getDraftsTextKey(account.account_id, recipient.id);
|
||||
final String key = getDraftsTextKey(account.account_key, recipient.id);
|
||||
final SharedPreferences.Editor editor = mMessageDrafts.edit();
|
||||
final String text = ParseUtils.parseString(mEditText.getText());
|
||||
if (TextUtils.isEmpty(text)) {
|
||||
|
@ -404,8 +404,7 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
|
|||
case R.id.delete_all: {
|
||||
final ParcelableCredentials account = mAccount;
|
||||
if (account == null || mRecipient == null) return true;
|
||||
mTwitterWrapper.destroyMessageConversationAsync(new AccountKey(account.account_id,
|
||||
account.account_host), mRecipient.id);
|
||||
mTwitterWrapper.destroyMessageConversationAsync(account.account_key, mRecipient.id);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -459,7 +458,7 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
|
|||
}
|
||||
case R.id.query_button: {
|
||||
final ParcelableCredentials account = (ParcelableCredentials) mAccountSpinner.getSelectedItem();
|
||||
searchUsers(account.account_id, ParseUtils.parseString(mEditUserQuery.getText()), false);
|
||||
searchUsers(account.account_key, ParseUtils.parseString(mEditUserQuery.getText()), false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -496,8 +495,7 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
|
|||
if (message != null) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.delete: {
|
||||
mTwitterWrapper.destroyDirectMessageAsync(new AccountKey(message.account_id,
|
||||
message.account_host), message.id);
|
||||
mTwitterWrapper.destroyDirectMessageAsync(message.account_key, message.id);
|
||||
break;
|
||||
}
|
||||
case R.id.copy: {
|
||||
|
@ -567,7 +565,7 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
|
|||
if (account == null || recipient == null) return;
|
||||
final LoaderManager lm = getLoaderManager();
|
||||
final Bundle args = new Bundle();
|
||||
args.putLong(EXTRA_ACCOUNT_ID, account.account_id);
|
||||
args.putParcelable(EXTRA_ACCOUNT_KEY, account.account_key);
|
||||
args.putLong(EXTRA_RECIPIENT_ID, recipient.id);
|
||||
if (mLoaderInitialized) {
|
||||
lm.restartLoader(0, args, this);
|
||||
|
@ -585,13 +583,13 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
|
|||
return mConversationContainer.getVisibility() == View.VISIBLE;
|
||||
}
|
||||
|
||||
private String getDraftsTextKey(long accountId, long userId) {
|
||||
return String.format(Locale.ROOT, "text_%d_to_%d", accountId, userId);
|
||||
private String getDraftsTextKey(AccountKey accountKey, long userId) {
|
||||
return String.format(Locale.ROOT, "text_%s_to_%d", accountKey, userId);
|
||||
}
|
||||
|
||||
private void searchUsers(long accountId, String query, boolean fromCache) {
|
||||
private void searchUsers(AccountKey accountKey, String query, boolean fromCache) {
|
||||
final Bundle args = new Bundle();
|
||||
args.putLong(EXTRA_ACCOUNT_ID, accountId);
|
||||
args.putParcelable(EXTRA_ACCOUNT_KEY, accountKey);
|
||||
args.putString(EXTRA_QUERY, query);
|
||||
args.putBoolean(EXTRA_FROM_CACHE, fromCache);
|
||||
final LoaderManager lm = getLoaderManager();
|
||||
|
@ -639,8 +637,8 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
|
|||
if (TextUtils.isEmpty(message)) {
|
||||
mEditText.setError(getString(R.string.error_message_no_content));
|
||||
} else {
|
||||
final AccountKey accountKey = new AccountKey(account.account_id, account.account_host);
|
||||
mTwitterWrapper.sendDirectMessageAsync(accountKey, recipient.id, message, mImageUri);
|
||||
mTwitterWrapper.sendDirectMessageAsync(account.account_key, recipient.id, message,
|
||||
mImageUri);
|
||||
mEditText.setText(null);
|
||||
mImageUri = null;
|
||||
updateAddImageButton();
|
||||
|
@ -663,8 +661,8 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
|
|||
if (((BaseAppCompatActivity) activity).getKeyMetaState() != 0) return false;
|
||||
final ParcelableCredentials account = (ParcelableCredentials) mAccountSpinner.getSelectedItem();
|
||||
if (account == null) return false;
|
||||
mEditText.setAccountKey(new AccountKey(account.account_id, account.account_host));
|
||||
searchUsers(account.account_id, ParseUtils.parseString(mEditUserQuery.getText()), false);
|
||||
mEditText.setAccountKey(account.account_key);
|
||||
searchUsers(account.account_key, ParseUtils.parseString(mEditUserQuery.getText()), false);
|
||||
return true;
|
||||
}
|
||||
}, true);
|
||||
|
@ -682,8 +680,8 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
|
|||
public void afterTextChanged(Editable s) {
|
||||
final ParcelableCredentials account = (ParcelableCredentials) mAccountSpinner.getSelectedItem();
|
||||
if (account == null) return;
|
||||
mEditText.setAccountKey(new AccountKey(account.account_id, account.account_host));
|
||||
searchUsers(account.account_id, ParseUtils.parseString(s), true);
|
||||
mEditText.setAccountKey(account.account_key);
|
||||
searchUsers(account.account_key, ParseUtils.parseString(s), true);
|
||||
}
|
||||
});
|
||||
mEditUserQuery.addTextChangedListener(new TextWatcher() {
|
||||
|
@ -748,7 +746,7 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
|
|||
final Menu menu = mPopupMenu.getMenu();
|
||||
final MenuItem view_profile_item = menu.findItem(R.id.view_profile);
|
||||
if (view_profile_item != null && dm != null) {
|
||||
view_profile_item.setVisible(dm.account_id != dm.sender_id);
|
||||
view_profile_item.setVisible(dm.account_key.getId() != dm.sender_id);
|
||||
}
|
||||
mPopupMenu.setOnMenuItemClickListener(this);
|
||||
mPopupMenu.show();
|
||||
|
@ -903,8 +901,7 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
|
|||
final ParcelableUser user = args.getParcelable(EXTRA_USER);
|
||||
final AsyncTwitterWrapper twitter = mTwitterWrapper;
|
||||
if (account == null || user == null || twitter == null) return;
|
||||
twitter.destroyMessageConversationAsync(new AccountKey(account.account_id,
|
||||
account.account_host), user.id);
|
||||
twitter.destroyMessageConversationAsync(account.account_key, user.id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -931,18 +928,21 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
|
|||
final ContentResolver resolver = mContext.getContentResolver();
|
||||
final String[] projection = {ConversationEntries.MESSAGE_ID};
|
||||
final String selection = Expression.and(
|
||||
Expression.equals(ConversationEntries.ACCOUNT_ID, mAccount.account_id),
|
||||
Expression.equals(ConversationEntries.CONVERSATION_ID, mRecipient.id)
|
||||
Expression.equalsArgs(ConversationEntries.ACCOUNT_KEY),
|
||||
Expression.equalsArgs(ConversationEntries.CONVERSATION_ID)
|
||||
).getSQL();
|
||||
final String[] selectionArgs = {String.valueOf(mAccount.account_key),
|
||||
String.valueOf(mRecipient.id)};
|
||||
final String orderBy = new OrderBy(ConversationEntries.MESSAGE_ID, false).getSQL();
|
||||
return resolver.query(ConversationEntries.CONTENT_URI, projection, selection, null, orderBy);
|
||||
return resolver.query(ConversationEntries.CONTENT_URI, projection, selection,
|
||||
selectionArgs, orderBy);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Cursor cursor) {
|
||||
if (cursor.moveToFirst()) {
|
||||
final int messageIdIdx = cursor.getColumnIndex(ConversationEntries.MESSAGE_ID);
|
||||
final String key = mAccount.account_id + "-" + mRecipient.id;
|
||||
final String key = mAccount.account_key + "-" + mRecipient.id;
|
||||
mReadStateManager.setPosition(CustomTabType.DIRECT_MESSAGES, key, cursor.getLong(messageIdIdx), false);
|
||||
}
|
||||
cursor.close();
|
||||
|
|
|
@ -135,7 +135,7 @@ public abstract class ParcelableStatusesFragment extends AbsStatusesFragment<Lis
|
|||
if (position == 0) return;
|
||||
final IStatusesAdapter<List<ParcelableStatus>> adapter = getAdapter();
|
||||
final ParcelableStatus status = adapter.getStatus(adapter.getItemCount() - 1);
|
||||
AccountKey[] accountKeys = {new AccountKey(status.account_id, status.account_host)};
|
||||
AccountKey[] accountKeys = {status.account_key};
|
||||
final long[] maxIds = {status.id};
|
||||
getStatuses(new BaseRefreshTaskParam(accountKeys, maxIds, null));
|
||||
}
|
||||
|
@ -187,7 +187,7 @@ public abstract class ParcelableStatusesFragment extends AbsStatusesFragment<Lis
|
|||
if (status == null || status.retweet_id <= 0 || data == null) return;
|
||||
for (int i = 0, j = data.size(); i < j; i++) {
|
||||
final ParcelableStatus orig = data.get(i);
|
||||
if (orig.account_id == status.account_id && orig.id == status.retweet_id) {
|
||||
if (orig.account_key.equals(status.account_key) && orig.id == status.retweet_id) {
|
||||
orig.my_retweet_id = status.my_retweet_id;
|
||||
orig.retweet_count = status.retweet_count;
|
||||
}
|
||||
|
|
|
@ -29,7 +29,6 @@ import android.support.v4.app.FragmentManager;
|
|||
import android.support.v7.app.AlertDialog;
|
||||
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
|
@ -45,8 +44,7 @@ public class ReportSpamDialogFragment extends BaseSupportDialogFragment implemen
|
|||
final ParcelableUser user = getUser();
|
||||
final AsyncTwitterWrapper twitter = mTwitterWrapper;
|
||||
if (user == null || twitter == null) return;
|
||||
twitter.reportSpamAsync(new AccountKey(user.account_id, user.account_host),
|
||||
user.id);
|
||||
twitter.reportSpamAsync(user.account_key, user.id);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -43,7 +43,6 @@ import android.widget.EditText;
|
|||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.adapter.DummyStatusHolderAdapter;
|
||||
import org.mariotaku.twidere.model.AccountKey;
|
||||
import org.mariotaku.twidere.model.Draft;
|
||||
import org.mariotaku.twidere.model.ParcelableCredentials;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
|
@ -108,8 +107,7 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem
|
|||
final IStatusViewHolder holder = new StatusViewHolder(adapter, view.findViewById(R.id.item_content));
|
||||
final ParcelableStatus status = getStatus();
|
||||
assert status != null;
|
||||
final ParcelableCredentials credentials = DataStoreUtils.getCredentials(wrapped,
|
||||
new AccountKey(status.account_id, status.account_host));
|
||||
final ParcelableCredentials credentials = DataStoreUtils.getCredentials(wrapped, status.account_key);
|
||||
assert credentials != null;
|
||||
|
||||
builder.setView(view);
|
||||
|
@ -134,7 +132,7 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem
|
|||
view.findViewById(R.id.item_content).setFocusable(false);
|
||||
view.findViewById(R.id.comment_container).setVisibility(status.user_is_protected ? View.GONE : View.VISIBLE);
|
||||
final ComposeEditText editComment = (ComposeEditText) view.findViewById(R.id.edit_comment);
|
||||
editComment.setAccountKey(new AccountKey(status.account_id, status.account_host));
|
||||
editComment.setAccountKey(status.account_key);
|
||||
|
||||
final boolean sendByEnter = mPreferences.getBoolean(KEY_QUICK_SEND);
|
||||
final EditTextEnterHandler enterHandler = EditTextEnterHandler.attach(editComment, new EditTextEnterHandler.EnterListener() {
|
||||
|
@ -243,19 +241,16 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem
|
|||
final String commentText = editComment.getText() + " " + statusLink;
|
||||
ParcelableStatusUpdate update = new ParcelableStatusUpdate();
|
||||
update.text = commentText;
|
||||
update.accounts = ParcelableAccountUtils.getAccounts(getContext(), new AccountKey(status.account_id,
|
||||
status.account_host));
|
||||
update.accounts = ParcelableAccountUtils.getAccounts(getContext(), status.account_key);
|
||||
if (linkToQuotedStatus.isChecked()) {
|
||||
update.in_reply_to_status = status;
|
||||
}
|
||||
update.is_possibly_sensitive = status.is_possibly_sensitive;
|
||||
BackgroundOperationService.updateStatusesAsync(getContext(), Draft.Action.QUOTE, update);
|
||||
} else if (isMyRetweet(status)) {
|
||||
twitter.cancelRetweetAsync(new AccountKey(status.account_id, status.account_host),
|
||||
status.id, status.my_retweet_id);
|
||||
twitter.cancelRetweetAsync(status.account_key, status.id, status.my_retweet_id);
|
||||
} else {
|
||||
twitter.retweetStatusAsync(new AccountKey(status.account_id, status.account_host),
|
||||
status.id);
|
||||
twitter.retweetStatusAsync(status.account_key, status.id);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -406,8 +406,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
|
||||
MediaEvent event = MediaEvent.create(getActivity(), status, media, TimelineType.DETAILS,
|
||||
mStatusAdapter.isMediaPreviewEnabled());
|
||||
HotMobiLogger.getInstance(getActivity()).log(new AccountKey(status.account_id,
|
||||
status.account_host), event);
|
||||
HotMobiLogger.getInstance(getActivity()).log(status.account_key, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -431,8 +430,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
final AsyncTwitterWrapper twitter = mTwitterWrapper;
|
||||
if (twitter == null) return;
|
||||
if (status.is_favorite) {
|
||||
twitter.destroyFavoriteAsync(new AccountKey(status.account_id,
|
||||
status.account_host), status.id);
|
||||
twitter.destroyFavoriteAsync(status.account_key, status.id);
|
||||
} else {
|
||||
holder.playLikeAnimation(new DefaultOnLikedListener(twitter, status));
|
||||
}
|
||||
|
@ -462,8 +460,8 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
@Override
|
||||
public void onUserProfileClick(IStatusViewHolder holder, ParcelableStatus status, int position) {
|
||||
final FragmentActivity activity = getActivity();
|
||||
IntentUtils.openUserProfile(activity, new AccountKey(status.account_id, status.account_host),
|
||||
status.user_id, status.user_screen_name, null, true, UserFragment.Referral.TIMELINE_STATUS);
|
||||
IntentUtils.openUserProfile(activity, status.account_key, status.user_id,
|
||||
status.user_screen_name, null, true, UserFragment.Referral.TIMELINE_STATUS);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -474,13 +472,14 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
// BEGIN HotMobi
|
||||
MediaEvent event = MediaEvent.create(getActivity(), status, media, TimelineType.OTHER,
|
||||
mStatusAdapter.isMediaPreviewEnabled());
|
||||
HotMobiLogger.getInstance(getActivity()).log(new AccountKey(status.account_id,
|
||||
status.account_host), event);
|
||||
HotMobiLogger.getInstance(getActivity()).log(status.account_key, event);
|
||||
// END HotMobi
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutSingle(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event, int metaState) {
|
||||
public boolean handleKeyboardShortcutSingle(@NonNull final KeyboardShortcutsHandler handler,
|
||||
final int keyCode, @NonNull final KeyEvent event,
|
||||
final int metaState) {
|
||||
if (!KeyboardShortcutsHandler.isValidForHotkey(keyCode, event)) return false;
|
||||
final View focusedChild = RecyclerViewUtils.findRecyclerViewChild(mRecyclerView, mLayoutManager.getFocusedChild());
|
||||
final int position;
|
||||
|
@ -508,11 +507,9 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
case ACTION_STATUS_FAVORITE: {
|
||||
final AsyncTwitterWrapper twitter = mTwitterWrapper;
|
||||
if (status.is_favorite) {
|
||||
twitter.destroyFavoriteAsync(new AccountKey(status.account_id,
|
||||
status.account_host), status.id);
|
||||
twitter.destroyFavoriteAsync(status.account_key, status.id);
|
||||
} else {
|
||||
twitter.createFavoriteAsync(new AccountKey(status.account_id,
|
||||
status.account_host), status.id);
|
||||
twitter.createFavoriteAsync(status.account_key, status.id);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -674,7 +671,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
private void loadConversation(ParcelableStatus status, long sinceId, long maxId) {
|
||||
if (status == null) return;
|
||||
final Bundle args = new Bundle();
|
||||
args.putParcelable(EXTRA_ACCOUNT_KEY, new AccountKey(status.account_id, status.account_host));
|
||||
args.putParcelable(EXTRA_ACCOUNT_KEY, status.account_key);
|
||||
args.putLong(EXTRA_STATUS_ID, status.is_retweet ? status.retweet_id : status.id);
|
||||
args.putLong(EXTRA_SINCE_ID, sinceId);
|
||||
args.putLong(EXTRA_MAX_ID, maxId);
|
||||
|
@ -691,7 +688,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
private void loadActivity(ParcelableStatus status) {
|
||||
if (status == null) return;
|
||||
final Bundle args = new Bundle();
|
||||
args.putParcelable(EXTRA_ACCOUNT_KEY, new AccountKey(status.account_id, status.account_host));
|
||||
args.putParcelable(EXTRA_ACCOUNT_KEY, status.account_key);
|
||||
args.putLong(EXTRA_STATUS_ID, status.is_retweet ? status.retweet_id : status.id);
|
||||
if (mActivityLoaderInitialized) {
|
||||
getLoaderManager().restartLoader(LOADER_ID_STATUS_ACTIVITY, args, mStatusActivityLoaderCallback);
|
||||
|
@ -806,7 +803,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
public void notifyFavoriteTask(FavoriteTaskEvent event) {
|
||||
if (!event.isSucceeded()) return;
|
||||
final StatusAdapter adapter = getAdapter();
|
||||
final ParcelableStatus status = adapter.findStatusById(event.getAccountKey().getId(), event.getStatusId());
|
||||
final ParcelableStatus status = adapter.findStatusById(event.getAccountKey(), event.getStatusId());
|
||||
if (status != null) {
|
||||
switch (event.getAction()) {
|
||||
case FavoriteTaskEvent.Action.CREATE: {
|
||||
|
@ -870,8 +867,8 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
@Override
|
||||
protected SingleResponse<TranslationResult> doInBackground(ParcelableStatus... params) {
|
||||
final ParcelableStatus status = params[0];
|
||||
final Twitter twitter = TwitterAPIFactory.getTwitterInstance(context,
|
||||
new AccountKey(status.account_id, status.account_host), true);
|
||||
final Twitter twitter = TwitterAPIFactory.getTwitterInstance(context, status.account_key,
|
||||
true);
|
||||
final SharedPreferences prefs = context.getSharedPreferences(SHARED_PREFERENCES_NAME,
|
||||
Context.MODE_PRIVATE);
|
||||
if (twitter == null) return SingleResponse.getInstance();
|
||||
|
@ -999,8 +996,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
retweetedByView.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
profileContainer.drawEnd(DataStoreUtils.getAccountColor(context,
|
||||
new AccountKey(status.account_id, status.account_host)));
|
||||
profileContainer.drawEnd(DataStoreUtils.getAccountColor(context, status.account_key));
|
||||
|
||||
final int layoutPosition = getLayoutPosition();
|
||||
final boolean skipLinksInText = status.extras != null && status.extras.support_entities;
|
||||
|
@ -1017,8 +1013,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
final CharSequence quotedText = HtmlSpanBuilder.fromHtml(status.quoted_text_html,
|
||||
status.text_unescaped);
|
||||
if (quotedText instanceof Spanned) {
|
||||
quotedTextView.setText(linkify.applyAllLinks(quotedText,
|
||||
new AccountKey(status.account_id, status.account_host),
|
||||
quotedTextView.setText(linkify.applyAllLinks(quotedText, status.account_key,
|
||||
layoutPosition, status.is_possibly_sensitive, skipLinksInText));
|
||||
}
|
||||
|
||||
|
@ -1072,8 +1067,8 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
final CharSequence text = HtmlSpanBuilder.fromHtml(status.text_html,
|
||||
status.text_unescaped);
|
||||
if (text instanceof Spanned) {
|
||||
textView.setText(linkify.applyAllLinks(text, new AccountKey(status.account_id,
|
||||
status.account_host), layoutPosition, status.is_possibly_sensitive, skipLinksInText));
|
||||
textView.setText(linkify.applyAllLinks(text, status.account_key, layoutPosition,
|
||||
status.is_possibly_sensitive, skipLinksInText));
|
||||
}
|
||||
|
||||
final ParcelableLocation location;
|
||||
|
@ -1127,8 +1122,8 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
mediaPreviewContainer.setVisibility(View.VISIBLE);
|
||||
mediaPreview.setVisibility(View.VISIBLE);
|
||||
mediaPreviewLoad.setVisibility(View.GONE);
|
||||
mediaPreview.displayMedia(media, loader, new AccountKey(status.account_id,
|
||||
status.account_host), -1, adapter.getFragment(), adapter.getMediaLoadingHandler());
|
||||
mediaPreview.displayMedia(media, loader, status.account_key, -1,
|
||||
adapter.getFragment(), adapter.getMediaLoadingHandler());
|
||||
} else {
|
||||
mediaPreviewContainer.setVisibility(View.VISIBLE);
|
||||
mediaPreview.setVisibility(View.GONE);
|
||||
|
@ -1192,7 +1187,6 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
final ParcelableStatus status = adapter.getStatus(getLayoutPosition());
|
||||
final StatusFragment fragment = adapter.getFragment();
|
||||
if (status == null || fragment == null) return;
|
||||
final AccountKey accountKey = new AccountKey(status.account_id, status.account_host);
|
||||
switch (v.getId()) {
|
||||
case R.id.media_preview_load: {
|
||||
if (adapter.isSensitiveContentEnabled() || !status.is_possibly_sensitive) {
|
||||
|
@ -1205,13 +1199,13 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
}
|
||||
case R.id.profile_container: {
|
||||
final FragmentActivity activity = fragment.getActivity();
|
||||
IntentUtils.openUserProfile(activity, accountKey, status.user_id,
|
||||
IntentUtils.openUserProfile(activity, status.account_key, status.user_id,
|
||||
status.user_screen_name, null, true, UserFragment.Referral.STATUS);
|
||||
break;
|
||||
}
|
||||
case R.id.retweeted_by: {
|
||||
if (status.retweet_id > 0) {
|
||||
IntentUtils.openUserProfile(adapter.getContext(), accountKey,
|
||||
IntentUtils.openUserProfile(adapter.getContext(), status.account_key,
|
||||
status.retweeted_by_user_id, status.retweeted_by_user_screen_name,
|
||||
null, true, UserFragment.Referral.STATUS);
|
||||
}
|
||||
|
@ -1224,13 +1218,13 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
break;
|
||||
}
|
||||
case R.id.quoted_name_container: {
|
||||
IntentUtils.openUserProfile(adapter.getContext(), accountKey,
|
||||
IntentUtils.openUserProfile(adapter.getContext(), status.account_key,
|
||||
status.quoted_user_id, status.quoted_user_screen_name, null, true,
|
||||
UserFragment.Referral.STATUS);
|
||||
break;
|
||||
}
|
||||
case R.id.quote_original_link: {
|
||||
IntentUtils.openStatus(adapter.getContext(), accountKey, status.quoted_id);
|
||||
IntentUtils.openStatus(adapter.getContext(), status.account_key, status.quoted_id);
|
||||
break;
|
||||
}
|
||||
case R.id.translate_label: {
|
||||
|
@ -1470,14 +1464,14 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
final LabeledCount count = getCount(position);
|
||||
final ParcelableStatus status = mStatusAdapter.getStatus();
|
||||
if (count == null || status == null) return;
|
||||
final AccountKey accountKey = new AccountKey(status.account_id,
|
||||
status.account_host);
|
||||
switch (count.type) {
|
||||
case KEY_RETWEET_COUNT: {
|
||||
if (status.is_retweet) {
|
||||
IntentUtils.openStatusRetweeters(getContext(), accountKey, status.retweet_id);
|
||||
IntentUtils.openStatusRetweeters(getContext(), status.account_key,
|
||||
status.retweet_id);
|
||||
} else {
|
||||
IntentUtils.openStatusRetweeters(getContext(), accountKey, status.id);
|
||||
IntentUtils.openStatusRetweeters(getContext(), status.account_key,
|
||||
status.id);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1485,9 +1479,11 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
final ParcelableCredentials account = mStatusAdapter.getStatusAccount();
|
||||
if (!Utils.isOfficialCredentials(getContext(), account)) return;
|
||||
if (status.is_retweet) {
|
||||
IntentUtils.openStatusFavoriters(getContext(), accountKey, status.retweet_id);
|
||||
IntentUtils.openStatusFavoriters(getContext(), status.account_key,
|
||||
status.retweet_id);
|
||||
} else {
|
||||
IntentUtils.openStatusFavoriters(getContext(), accountKey, status.id);
|
||||
IntentUtils.openStatusFavoriters(getContext(), status.account_key,
|
||||
status.id);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1817,17 +1813,18 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
}
|
||||
|
||||
@Override
|
||||
public long getAccountId(int position) {
|
||||
public AccountKey getAccountKey(int position) {
|
||||
final ParcelableStatus status = getStatus(position);
|
||||
return status != null ? status.account_id : position;
|
||||
return status != null ? status.account_key : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParcelableStatus findStatusById(long accountId, long statusId) {
|
||||
if (mStatus != null && accountId == mStatus.account_id && statusId == mStatus.id)
|
||||
public ParcelableStatus findStatusById(AccountKey accountId, long statusId) {
|
||||
if (mStatus != null && accountId.equals(mStatus.account_key) && statusId == mStatus.id) {
|
||||
return mStatus;
|
||||
}
|
||||
for (ParcelableStatus status : Nullables.list(mData)) {
|
||||
if (accountId == status.account_id && status.id == statusId) return status;
|
||||
if (accountId.equals(status.account_key) && status.id == statusId) return status;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -295,7 +295,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
displayUser(user);
|
||||
if (user.is_cache) {
|
||||
final Bundle args = new Bundle();
|
||||
args.putParcelable(EXTRA_ACCOUNT_KEY, new AccountKey(user.account_id,
|
||||
args.putParcelable(EXTRA_ACCOUNT_KEY, new AccountKey(user.account_key,
|
||||
user.account_host));
|
||||
args.putLong(EXTRA_USER_ID, user.id);
|
||||
args.putString(EXTRA_SCREEN_NAME, user.screen_name);
|
||||
|
@ -340,7 +340,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
mRelationship = null;
|
||||
return;
|
||||
}
|
||||
if (user.account_id == user.id) {
|
||||
if (user.account_key == user.id) {
|
||||
mFollowButton.setText(R.string.edit);
|
||||
mFollowButton.setVisibility(View.VISIBLE);
|
||||
mRelationship = null;
|
||||
|
@ -527,7 +527,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
if (user.account_color != 0) {
|
||||
mProfileNameContainer.drawEnd(user.account_color);
|
||||
} else {
|
||||
final AccountKey accountKey = new AccountKey(user.account_id, user.account_host);
|
||||
final AccountKey accountKey = new AccountKey(user.account_key, user.account_host);
|
||||
mProfileNameContainer.drawEnd(DataStoreUtils.getAccountColor(activity, accountKey));
|
||||
}
|
||||
final String nick = mUserColorNameManager.getUserNickname(user.id, true);
|
||||
|
@ -543,7 +543,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
mScreenNameView.setText(String.format("@%s", user.screen_name));
|
||||
mDescriptionContainer.setVisibility(TextUtils.isEmpty(user.description_html) ? View.GONE : View.VISIBLE);
|
||||
final TwidereLinkify linkify = new TwidereLinkify(this);
|
||||
final AccountKey accountKey = new AccountKey(user.account_id, user.account_host);
|
||||
final AccountKey accountKey = new AccountKey(user.account_key, user.account_host);
|
||||
mDescriptionView.setText(linkify.applyAllLinks(user.description_html != null ?
|
||||
HtmlSpanBuilder.fromHtml(user.description_html) : user.description_plain,
|
||||
accountKey, false, false));
|
||||
|
@ -646,7 +646,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
@Subscribe
|
||||
public void notifyFriendshipUpdated(FriendshipUpdatedEvent event) {
|
||||
final ParcelableUser user = getUser();
|
||||
if (user == null || !event.isAccount(user.account_id, user.account_host) ||
|
||||
if (user == null || !event.isAccount(user.account_key, user.account_host) ||
|
||||
!event.isUser(user.id)) return;
|
||||
getFriendship();
|
||||
}
|
||||
|
@ -691,7 +691,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
final AsyncTwitterWrapper twitter = mTwitterWrapper;
|
||||
final ParcelableUserList list = data.getParcelableExtra(EXTRA_USER_LIST);
|
||||
if (list == null || twitter == null) return;
|
||||
twitter.addUserListMembersAsync(new AccountKey(user.account_id, user.account_host),
|
||||
twitter.addUserListMembersAsync(new AccountKey(user.account_key, user.account_host),
|
||||
list.id, user);
|
||||
}
|
||||
break;
|
||||
|
@ -903,7 +903,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
if (twitter == null || user == null || userRelationship == null) return;
|
||||
final Relationship relationship = userRelationship.relationship;
|
||||
|
||||
final boolean isMyself = user.account_id == user.id;
|
||||
final boolean isMyself = user.account_key == user.id;
|
||||
final MenuItem mentionItem = menu.findItem(R.id.mention);
|
||||
if (mentionItem != null) {
|
||||
final String displayName = mUserColorNameManager.getDisplayName(user, mNameFirst, true);
|
||||
|
@ -913,7 +913,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
MenuUtils.setMenuItemAvailability(menu, R.id.incoming_friendships, isMyself);
|
||||
MenuUtils.setMenuItemAvailability(menu, R.id.saved_searches, isMyself);
|
||||
MenuUtils.setMenuItemAvailability(menu, R.id.scheduled_statuses, isMyself
|
||||
&& TwitterAPIFactory.getOfficialKeyType(getActivity(), user.account_id) == ConsumerKeyType.TWEETDECK);
|
||||
&& TwitterAPIFactory.getOfficialKeyType(getActivity(), user.account_key) == ConsumerKeyType.TWEETDECK);
|
||||
// final MenuItem followItem = menu.findItem(MENU_FOLLOW);
|
||||
// followItem.setVisible(!isMyself);
|
||||
// final boolean shouldShowFollowItem = !creatingFriendship && !destroyingFriendship && !isMyself
|
||||
|
@ -980,7 +980,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
final ParcelableUser user = getUser();
|
||||
final UserRelationship userRelationship = mRelationship;
|
||||
if (user == null || twitter == null) return false;
|
||||
final AccountKey accountKey = new AccountKey(user.account_id, user.account_host);
|
||||
final AccountKey accountKey = new AccountKey(user.account_key, user.account_host);
|
||||
switch (item.getItemId()) {
|
||||
case R.id.block: {
|
||||
if (userRelationship == null) return true;
|
||||
|
@ -1284,14 +1284,14 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
final FragmentActivity activity = getActivity();
|
||||
final ParcelableUser user = getUser();
|
||||
if (activity == null || user == null) return;
|
||||
final AccountKey accountKey = new AccountKey(user.account_id, user.account_host);
|
||||
final AccountKey accountKey = new AccountKey(user.account_key, user.account_host);
|
||||
switch (view.getId()) {
|
||||
case R.id.error_container: {
|
||||
getUserInfo(true);
|
||||
break;
|
||||
}
|
||||
case R.id.follow: {
|
||||
if (user.id == user.account_id) {
|
||||
if (user.id == user.account_key) {
|
||||
Utils.openProfileEditor(getActivity(), accountKey);
|
||||
break;
|
||||
}
|
||||
|
@ -1337,7 +1337,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
break;
|
||||
}
|
||||
case R.id.name_container: {
|
||||
if (user.account_id != user.id) return;
|
||||
if (user.account_key != user.id) return;
|
||||
Utils.openProfileEditor(getActivity(), accountKey);
|
||||
break;
|
||||
}
|
||||
|
@ -1358,12 +1358,12 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
if (user == null) return;
|
||||
switch (type) {
|
||||
case TwidereLinkify.LINK_TYPE_MENTION: {
|
||||
IntentUtils.openUserProfile(getActivity(), new AccountKey(user.account_id,
|
||||
IntentUtils.openUserProfile(getActivity(), new AccountKey(user.account_key,
|
||||
user.account_host), -1, link, null, true, Referral.USER_MENTION);
|
||||
break;
|
||||
}
|
||||
case TwidereLinkify.LINK_TYPE_HASHTAG: {
|
||||
IntentUtils.openTweetSearch(getActivity(), new AccountKey(user.account_id, user.account_host),
|
||||
IntentUtils.openTweetSearch(getActivity(), new AccountKey(user.account_key, user.account_host),
|
||||
"#" + link);
|
||||
break;
|
||||
}
|
||||
|
@ -1450,7 +1450,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
final LoaderManager lm = getLoaderManager();
|
||||
lm.destroyLoader(LOADER_ID_FRIENDSHIP);
|
||||
final Bundle args = new Bundle();
|
||||
args.putLong(EXTRA_ACCOUNT_ID, user.account_id);
|
||||
args.putLong(EXTRA_ACCOUNT_ID, user.account_key);
|
||||
args.putLong(EXTRA_USER_ID, user.id);
|
||||
if (!mGetFriendShipLoaderInitialized) {
|
||||
lm.initLoader(LOADER_ID_FRIENDSHIP, args, mFriendshipLoaderCallbacks);
|
||||
|
@ -1463,7 +1463,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
private void getUserInfo(final boolean omitIntentExtra) {
|
||||
final ParcelableUser user = mUser;
|
||||
if (user == null) return;
|
||||
getUserInfo(user.account_id, user.id, user.screen_name, omitIntentExtra);
|
||||
getUserInfo(user.account_key, user.id, user.screen_name, omitIntentExtra);
|
||||
}
|
||||
|
||||
private void setUiColor(int color) {
|
||||
|
@ -1531,7 +1531,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
final long accountId;
|
||||
final ParcelableUser user = args.getParcelable(EXTRA_USER);
|
||||
if (user != null) {
|
||||
tabArgs.putLong(EXTRA_ACCOUNT_ID, accountId = user.account_id);
|
||||
tabArgs.putLong(EXTRA_ACCOUNT_ID, accountId = user.account_key);
|
||||
tabArgs.putLong(EXTRA_USER_ID, user.id);
|
||||
tabArgs.putString(EXTRA_SCREEN_NAME, user.screen_name);
|
||||
} else {
|
||||
|
@ -1563,7 +1563,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
}
|
||||
final LoaderManager lm = getLoaderManager();
|
||||
final boolean loadingRelationship = lm.getLoader(LOADER_ID_FRIENDSHIP) != null;
|
||||
final AccountKey accountKey = new AccountKey(user.account_id, user.account_host);
|
||||
final AccountKey accountKey = new AccountKey(user.account_key, user.account_host);
|
||||
final boolean creatingFriendship = twitter.isCreatingFriendship(accountKey, user.id);
|
||||
final boolean destroyingFriendship = twitter.isDestroyingFriendship(accountKey, user.id);
|
||||
final boolean creatingBlock = twitter.isCreatingFriendship(accountKey, user.id);
|
||||
|
@ -1584,7 +1584,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
final ParcelableUser user = getUser();
|
||||
final AsyncTwitterWrapper twitter = mTwitterWrapper;
|
||||
if (user == null || twitter == null) return;
|
||||
final AccountKey accountKey = new AccountKey(user.account_id, user.account_host);
|
||||
final AccountKey accountKey = new AccountKey(user.account_key, user.account_host);
|
||||
final boolean isCreatingFriendship = twitter.isCreatingFriendship(accountKey, user.id);
|
||||
final boolean destroyingFriendship = twitter.isDestroyingFriendship(accountKey, user.id);
|
||||
setProgressBarIndeterminateVisibility(isCreatingFriendship || destroyingFriendship);
|
||||
|
@ -1811,7 +1811,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
}
|
||||
|
||||
public boolean check(@NonNull ParcelableUser user) {
|
||||
return relationship.getSourceUserId() == user.account_id
|
||||
return relationship.getSourceUserId() == user.account_key
|
||||
&& relationship.getTargetUserId() == user.id;
|
||||
}
|
||||
}
|
||||
|
@ -1829,7 +1829,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
final ParcelableUser user = args.first;
|
||||
resolver.insert(CachedUsers.CONTENT_URI, ParcelableUserValuesCreator.create(user));
|
||||
resolver.insert(CachedRelationships.CONTENT_URI, CachedRelationshipValuesCreator.create(
|
||||
new CachedRelationship(user.account_id, user.id, args.second)));
|
||||
new CachedRelationship(user.account_key, user.id, args.second)));
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -102,8 +102,7 @@ public final class ParcelableUserLoader extends AsyncTaskLoader<SingleResponse<P
|
|||
if (cur.moveToFirst()) {
|
||||
final ParcelableUserCursorIndices indices = new ParcelableUserCursorIndices(cur);
|
||||
final ParcelableUser user = indices.newObject(cur);
|
||||
user.account_id = accountKey.getId();
|
||||
user.account_host = accountKey.getHost();
|
||||
user.account_key = accountKey;
|
||||
user.account_color = accountColor;
|
||||
return SingleResponse.getInstance(user);
|
||||
}
|
||||
|
@ -126,8 +125,8 @@ public final class ParcelableUserLoader extends AsyncTaskLoader<SingleResponse<P
|
|||
accountValues.put(Accounts.PROFILE_BANNER_URL, user.profile_banner_url);
|
||||
accountValues.put(Accounts.ACCOUNT_USER, JsonSerializer.serialize(user,
|
||||
ParcelableUser.class));
|
||||
accountValues.put(Accounts.ACCOUNT_HOST, ParcelableUserUtils.getUserHost(user));
|
||||
final String accountWhere = Expression.equals(Accounts.ACCOUNT_ID, userId).getSQL();
|
||||
// TODO update account key
|
||||
final String accountWhere = Expression.equals(Accounts.ACCOUNT_KEY, userId).getSQL();
|
||||
resolver.update(Accounts.CONTENT_URI, accountValues, accountWhere, null);
|
||||
}
|
||||
user.account_color = accountColor;
|
||||
|
|
|
@ -64,7 +64,7 @@ public class AccountActionProvider extends ActionProvider implements TwidereCons
|
|||
final MenuItem item = subMenu.getItem(i);
|
||||
final Intent intent = item.getIntent();
|
||||
final ParcelableAccount account = intent.getParcelableExtra(EXTRA_ACCOUNT);
|
||||
if (ArrayUtils.contains(mAccountIds, account.account_id)) {
|
||||
if (ArrayUtils.contains(mAccountIds, account.account_key)) {
|
||||
item.setChecked(true);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@ public class AccountToggleProvider extends ActionProvider implements TwidereCons
|
|||
int len = 0;
|
||||
for (ParcelableAccount account : mAccounts) {
|
||||
if (account.is_activated) {
|
||||
temp[len++] = new AccountKey(account.account_id, account.account_host);
|
||||
temp[len++] = account.account_key;
|
||||
}
|
||||
}
|
||||
final AccountKey[] result = new AccountKey[len];
|
||||
|
@ -110,10 +110,10 @@ public class AccountToggleProvider extends ActionProvider implements TwidereCons
|
|||
}
|
||||
}
|
||||
|
||||
public void setAccountActivated(long accountId, boolean isChecked) {
|
||||
public void setAccountActivated(AccountKey accountId, boolean isChecked) {
|
||||
if (mAccounts == null) return;
|
||||
for (final ParcelableAccount account : mAccounts) {
|
||||
if (account.account_id == accountId) {
|
||||
if (account.account_key == accountId) {
|
||||
account.is_activated = isChecked;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ import org.mariotaku.twidere.provider.TwidereDataStore.CachedRelationships;
|
|||
@CursorObject(valuesCreator = true)
|
||||
public class CachedRelationship {
|
||||
|
||||
@CursorField(CachedRelationships.ACCOUNT_ID)
|
||||
@CursorField(CachedRelationships.ACCOUNT_KEY)
|
||||
public long account_id;
|
||||
|
||||
@CursorField(CachedRelationships.USER_ID)
|
||||
|
|
|
@ -25,7 +25,7 @@ public class ParcelableAccountUtils {
|
|||
public static AccountKey[] getAccountKeys(@NonNull ParcelableAccount[] accounts) {
|
||||
AccountKey[] ids = new AccountKey[accounts.length];
|
||||
for (int i = 0, j = accounts.length; i < j; i++) {
|
||||
ids[i] = new AccountKey(accounts[i].account_id, accounts[i].account_host);
|
||||
ids[i] = new AccountKey(accounts[i].account_key, accounts[i].account_host);
|
||||
}
|
||||
return ids;
|
||||
}
|
||||
|
@ -34,7 +34,7 @@ public class ParcelableAccountUtils {
|
|||
public static ParcelableAccount getAccount(final Context context, final long accountId,
|
||||
final String accountHost) {
|
||||
if (context == null || accountId < 0) return null;
|
||||
final Expression where = Expression.equals(Accounts.ACCOUNT_ID, accountId);
|
||||
final Expression where = Expression.equals(Accounts.ACCOUNT_KEY, accountId);
|
||||
Cursor cur = context.getContentResolver().query(Accounts.CONTENT_URI,
|
||||
Accounts.COLUMNS_NO_CREDENTIALS, where.getSQL(), null, null);
|
||||
if (cur == null) return null;
|
||||
|
@ -70,7 +70,7 @@ public class ParcelableAccountUtils {
|
|||
@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_ID),
|
||||
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);
|
||||
if (cur == null) return new ParcelableAccount[0];
|
||||
|
|
|
@ -58,7 +58,7 @@ public class ParcelableActivityUtils {
|
|||
public static ParcelableActivity fromActivity(final Activity activity, final AccountKey accountKey,
|
||||
final boolean isGap) {
|
||||
ParcelableActivity result = new ParcelableActivity();
|
||||
result.account_id = accountKey.getId();
|
||||
result.account_key = accountKey.getId();
|
||||
result.account_host = accountKey.getHost();
|
||||
result.timestamp = activity.getCreatedAt().getTime();
|
||||
result.action = activity.getAction();
|
||||
|
|
|
@ -21,7 +21,7 @@ public class ParcelableDirectMessageUtils {
|
|||
|
||||
public static ParcelableDirectMessage fromDirectMessage(DirectMessage message, long accountId, String accountHost, boolean isOutgoing) {
|
||||
ParcelableDirectMessage result = new ParcelableDirectMessage();
|
||||
result.account_id = accountId;
|
||||
result.account_key = accountId;
|
||||
result.account_host = accountHost;
|
||||
result.is_outgoing = isOutgoing;
|
||||
final User sender = message.getSender(), recipient = message.getRecipient();
|
||||
|
|
|
@ -30,7 +30,7 @@ public class ParcelableUserUtils implements TwidereConstants {
|
|||
final ParcelableUser obj = new ParcelableUser();
|
||||
obj.position = position;
|
||||
if (accountKey != null) {
|
||||
obj.account_id = accountKey.getId();
|
||||
obj.account_key = accountKey.getId();
|
||||
obj.account_host = accountKey.getHost();
|
||||
}
|
||||
obj.id = user.getId();
|
||||
|
@ -88,7 +88,7 @@ public class ParcelableUserUtils implements TwidereConstants {
|
|||
}
|
||||
|
||||
public static ParcelableUser fromDirectMessageConversationEntry(final Cursor cursor) {
|
||||
final long accountId = cursor.getLong(DirectMessages.ConversationEntries.IDX_ACCOUNT_ID);
|
||||
final long accountId = cursor.getLong(DirectMessages.ConversationEntries.IDX_ACCOUNT_KEY);
|
||||
final long id = cursor.getLong(DirectMessages.ConversationEntries.IDX_CONVERSATION_ID);
|
||||
final String name = cursor.getString(DirectMessages.ConversationEntries.IDX_NAME);
|
||||
final String screenName = cursor.getString(DirectMessages.ConversationEntries.IDX_SCREEN_NAME);
|
||||
|
|
|
@ -108,7 +108,7 @@ public abstract class AccountsListPreference extends PreferenceCategory implemen
|
|||
final boolean switchDefault) {
|
||||
super(context);
|
||||
GeneralComponentHelper.build(context).inject(this);
|
||||
final String switchPreferenceName = ACCOUNT_PREFERENCES_NAME_PREFIX + account.account_id;
|
||||
final String switchPreferenceName = ACCOUNT_PREFERENCES_NAME_PREFIX + account.account_key;
|
||||
mAccount = account;
|
||||
mSwitchPreference = context.getSharedPreferences(switchPreferenceName, Context.MODE_PRIVATE);
|
||||
mSwitchPreference.registerOnSharedPreferenceChangeListener(this);
|
||||
|
|
|
@ -481,10 +481,10 @@ 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_ID);
|
||||
final long accountId = values.getAsLong(CachedRelationships.ACCOUNT_KEY);
|
||||
final long userId = values.getAsLong(CachedRelationships.USER_ID);
|
||||
final Expression where = Expression.and(
|
||||
Expression.equals(CachedRelationships.ACCOUNT_ID, accountId),
|
||||
Expression.equals(CachedRelationships.ACCOUNT_KEY, accountId),
|
||||
Expression.equals(CachedRelationships.USER_ID, userId)
|
||||
);
|
||||
if (mDatabaseWrapper.update(table, values, where.getSQL(), null) > 0) {
|
||||
|
@ -812,7 +812,7 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
|||
new Column(SQLConstants.NULL, Suggestions.Search.EXTRA).getSQL(),
|
||||
new Column(SavedSearches.QUERY, Suggestions.Search.VALUE).getSQL()
|
||||
};
|
||||
final Expression savedSearchesWhere = Expression.equals(SavedSearches.ACCOUNT_ID, accountId);
|
||||
final Expression savedSearchesWhere = Expression.equals(SavedSearches.ACCOUNT_KEY, accountId);
|
||||
@SuppressLint("Recycle") final Cursor savedSearchesCursor = mDatabaseWrapper.query(true,
|
||||
SavedSearches.TABLE_NAME, savedSearchesProjection, savedSearchesWhere.getSQL(),
|
||||
null, null, null, SavedSearches.DEFAULT_SORT_ORDER, null);
|
||||
|
|
|
@ -315,7 +315,7 @@ public class BackgroundOperationService extends IntentService implements Constan
|
|||
final ContentResolver resolver = getContentResolver();
|
||||
if (result.getData() != null && result.getData().id > 0) {
|
||||
final ContentValues values = ContentValuesCreator.createDirectMessage(result.getData());
|
||||
final String delete_where = DirectMessages.ACCOUNT_ID + " = " + accountId + " AND "
|
||||
final String delete_where = DirectMessages.ACCOUNT_KEY + " = " + accountId + " AND "
|
||||
+ DirectMessages.MESSAGE_ID + " = " + result.getData().id;
|
||||
resolver.delete(DirectMessages.Outbox.CONTENT_URI, delete_where, null);
|
||||
resolver.insert(DirectMessages.Outbox.CONTENT_URI, values);
|
||||
|
@ -584,7 +584,7 @@ public class BackgroundOperationService extends IntentService implements Constan
|
|||
shortener.waitForService();
|
||||
}
|
||||
for (final ParcelableAccount account : statusUpdate.accounts) {
|
||||
final AccountKey accountKey = new AccountKey(account.account_id, account.account_host);
|
||||
final AccountKey accountKey = new AccountKey(account.account_key, account.account_host);
|
||||
final ParcelableCredentials credentials = DataStoreUtils.getCredentials(this,
|
||||
accountKey);
|
||||
// Get Twitter instance corresponding to account
|
||||
|
|
|
@ -130,7 +130,7 @@ public class StreamingService extends Service implements Constants {
|
|||
final AccountKey[] accountKeys = new AccountKey[accountsList.size()];
|
||||
for (int i = 0, j = accountKeys.length; i < j; i++) {
|
||||
final ParcelableCredentials credentials = accountsList.get(i);
|
||||
accountKeys[i] = new AccountKey(credentials.account_id, credentials.account_host);
|
||||
accountKeys[i] = new AccountKey(credentials.account_key, credentials.account_host);
|
||||
}
|
||||
final AccountPreferences[] activatedPreferences = AccountPreferences.getAccountPreferences(this, accountKeys);
|
||||
if (BuildConfig.DEBUG) {
|
||||
|
@ -147,13 +147,13 @@ public class StreamingService extends Service implements Constants {
|
|||
final Authorization authorization = TwitterAPIFactory.getAuthorization(account);
|
||||
final TwitterUserStream twitter = TwitterAPIFactory.getInstance(this, endpoint, authorization, TwitterUserStream.class);
|
||||
final TwidereUserStreamCallback callback = new TwidereUserStreamCallback(this, account);
|
||||
mCallbacks.put(account.account_id, callback);
|
||||
mCallbacks.put(account.account_key, callback);
|
||||
new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
twitter.getUserStream(callback);
|
||||
Log.d(Constants.LOGTAG, String.format("Stream %d disconnected", account.account_id));
|
||||
mCallbacks.remove(account.account_id);
|
||||
Log.d(Constants.LOGTAG, String.format("Stream %d disconnected", account.account_key));
|
||||
mCallbacks.remove(account.account_key);
|
||||
updateStreamState();
|
||||
}
|
||||
}.start();
|
||||
|
@ -241,21 +241,21 @@ public class StreamingService extends Service implements Constants {
|
|||
public void onDirectMessage(final DirectMessage directMessage) {
|
||||
if (directMessage == null || directMessage.getId() <= 0) return;
|
||||
for (final Uri uri : MESSAGES_URIS) {
|
||||
final String where = DirectMessages.ACCOUNT_ID + " = " + account.account_id + " AND "
|
||||
final String where = DirectMessages.ACCOUNT_KEY + " = " + account.account_key + " AND "
|
||||
+ DirectMessages.MESSAGE_ID + " = " + directMessage.getId();
|
||||
resolver.delete(uri, where, null);
|
||||
}
|
||||
final User sender = directMessage.getSender(), recipient = directMessage.getRecipient();
|
||||
if (sender.getId() == account.account_id) {
|
||||
if (sender.getId() == account.account_key) {
|
||||
final ContentValues values = ContentValuesCreator.createDirectMessage(directMessage,
|
||||
account.account_id, account.account_host, true);
|
||||
account.account_key, account.account_host, true);
|
||||
if (values != null) {
|
||||
resolver.insert(DirectMessages.Outbox.CONTENT_URI, values);
|
||||
}
|
||||
}
|
||||
if (recipient.getId() == account.account_id) {
|
||||
if (recipient.getId() == account.account_key) {
|
||||
final ContentValues values = ContentValuesCreator.createDirectMessage(directMessage,
|
||||
account.account_id, account.account_host, false);
|
||||
account.account_key, account.account_host, false);
|
||||
final Uri.Builder builder = DirectMessages.Inbox.CONTENT_URI.buildUpon();
|
||||
builder.appendQueryParameter(QUERY_PARAM_NOTIFY, "true");
|
||||
if (values != null) {
|
||||
|
@ -335,12 +335,12 @@ public class StreamingService extends Service implements Constants {
|
|||
@Override
|
||||
public void onStatus(final Status status) {
|
||||
final ContentValues values = ContentValuesCreator.createStatus(status,
|
||||
new AccountKey(account.account_id, account.account_host));
|
||||
new AccountKey(account.account_key, account.account_host));
|
||||
if (!statusStreamStarted) {
|
||||
statusStreamStarted = true;
|
||||
values.put(Statuses.IS_GAP, true);
|
||||
}
|
||||
final String where = Statuses.ACCOUNT_ID + " = " + account.account_id + " AND " + Statuses.STATUS_ID + " = "
|
||||
final String where = Statuses.ACCOUNT_KEY + " = " + account.account_key + " AND " + Statuses.STATUS_ID + " = "
|
||||
+ status.getId();
|
||||
resolver.delete(Statuses.CONTENT_URI, where, null);
|
||||
resolver.delete(Mentions.CONTENT_URI, where, null);
|
||||
|
|
|
@ -116,8 +116,7 @@ public abstract class GetDirectMessagesTask extends AbstractTask<RefreshTaskPara
|
|||
|
||||
for (int i = 0, j = messages.size(); i < j; i++) {
|
||||
final DirectMessage message = messages.get(i);
|
||||
valuesArray[i] = ContentValuesCreator.createDirectMessage(message, accountKey.getId(),
|
||||
accountKey.getHost(), isOutgoing);
|
||||
valuesArray[i] = ContentValuesCreator.createDirectMessage(message, accountKey, isOutgoing);
|
||||
}
|
||||
|
||||
// Delete all rows conflicting before new data inserted.
|
||||
|
|
|
@ -41,7 +41,7 @@ public class GetSavedSearchesTask extends AbstractTask<AccountKey[], SingleRespo
|
|||
final ResponseList<SavedSearch> searches = twitter.getSavedSearches();
|
||||
final ContentValues[] values = ContentValuesCreator.createSavedSearches(searches,
|
||||
accountKey.getId(), accountKey.getHost());
|
||||
final Expression where = Expression.and(Expression.equalsArgs(SavedSearches.ACCOUNT_ID),
|
||||
final Expression where = Expression.and(Expression.equalsArgs(SavedSearches.ACCOUNT_KEY),
|
||||
Expression.equalsArgs(SavedSearches.ACCOUNT_HOST));
|
||||
final String[] whereArgs = {String.valueOf(accountKey.getId()), accountKey.getHost()};
|
||||
cr.delete(SavedSearches.CONTENT_URI, where.getSQL(), whereArgs);
|
||||
|
|
|
@ -29,6 +29,7 @@ import android.os.AsyncTask;
|
|||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.util.LongSparseArray;
|
||||
import android.support.v4.util.SimpleArrayMap;
|
||||
import android.util.Log;
|
||||
|
||||
import com.squareup.otto.Bus;
|
||||
|
@ -442,7 +443,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
}
|
||||
}
|
||||
|
||||
public void removeUnreadCountsAsync(final int position, final LongSparseArray<Set<Long>> counts) {
|
||||
public void removeUnreadCountsAsync(final int position, final SimpleArrayMap<AccountKey, Set<Long>> counts) {
|
||||
final RemoveUnreadCountsTask task = new RemoveUnreadCountsTask(position, counts);
|
||||
AsyncTaskUtils.executeTask(task);
|
||||
}
|
||||
|
@ -550,7 +551,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
mProcessingFriendshipRequestIds.removeElement(ParcelableUser.calculateHashCode(accountKey.getId(), userId));
|
||||
}
|
||||
|
||||
public boolean isProcessingFollowRequest(long accountId, long userId) {
|
||||
public boolean isProcessingFollowRequest(AccountKey accountId, long userId) {
|
||||
return mProcessingFriendshipRequestIds.contains(ParcelableUser.calculateHashCode(accountId, userId));
|
||||
}
|
||||
|
||||
|
@ -839,8 +840,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
}
|
||||
// I bet you don't want to see this user in your auto complete list.
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put(CachedRelationships.ACCOUNT_ID, mAccountKey.getId());
|
||||
values.put(CachedRelationships.ACCOUNT_HOST, mAccountKey.getHost());
|
||||
values.put(CachedRelationships.ACCOUNT_KEY, mAccountKey.toString());
|
||||
values.put(CachedRelationships.USER_ID, mUserId);
|
||||
values.put(CachedRelationships.BLOCKING, true);
|
||||
mResolver.insert(CachedRelationships.CONTENT_URI, values);
|
||||
|
@ -1025,7 +1025,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
values.put(CachedRelationships.FOLLOWED_BY, false);
|
||||
mResolver.update(CachedRelationships.CONTENT_URI, values,
|
||||
Expression.inArgs(CachedRelationships.USER_ID, list.size()).getSQL(),
|
||||
TwidereListUtils.toStringArray(list));
|
||||
TwidereCollectionUtils.toStringArray(list));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1943,9 +1943,9 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
|
||||
final class RemoveUnreadCountsTask extends AsyncTask<Object, Object, Integer> {
|
||||
private final int position;
|
||||
private final LongSparseArray<Set<Long>> counts;
|
||||
private final SimpleArrayMap<AccountKey, Set<Long>> counts;
|
||||
|
||||
RemoveUnreadCountsTask(final int position, final LongSparseArray<Set<Long>> counts) {
|
||||
RemoveUnreadCountsTask(final int position, final SimpleArrayMap<AccountKey, Set<Long>> counts) {
|
||||
this.position = position;
|
||||
this.counts = counts;
|
||||
}
|
||||
|
|
|
@ -23,8 +23,6 @@ import android.content.ContentValues;
|
|||
import android.support.annotation.NonNull;
|
||||
|
||||
import org.mariotaku.twidere.TwidereConstants;
|
||||
import org.mariotaku.twidere.api.twitter.auth.OAuthAuthorization;
|
||||
import org.mariotaku.twidere.api.twitter.auth.OAuthToken;
|
||||
import org.mariotaku.twidere.api.twitter.model.DirectMessage;
|
||||
import org.mariotaku.twidere.api.twitter.model.Relationship;
|
||||
import org.mariotaku.twidere.api.twitter.model.SavedSearch;
|
||||
|
@ -36,7 +34,6 @@ import org.mariotaku.twidere.model.AccountKey;
|
|||
import org.mariotaku.twidere.model.Draft;
|
||||
import org.mariotaku.twidere.model.ParcelableActivity;
|
||||
import org.mariotaku.twidere.model.ParcelableActivityValuesCreator;
|
||||
import org.mariotaku.twidere.model.ParcelableCredentials;
|
||||
import org.mariotaku.twidere.model.ParcelableDirectMessage;
|
||||
import org.mariotaku.twidere.model.ParcelableDirectMessageValuesCreator;
|
||||
import org.mariotaku.twidere.model.ParcelableMedia;
|
||||
|
@ -50,7 +47,6 @@ import org.mariotaku.twidere.model.draft.SendDirectMessageActionExtra;
|
|||
import org.mariotaku.twidere.model.util.ParcelableMediaUtils;
|
||||
import org.mariotaku.twidere.model.util.ParcelableStatusUtils;
|
||||
import org.mariotaku.twidere.model.util.ParcelableUserUtils;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Activities;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedRelationships;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedTrends;
|
||||
|
@ -68,74 +64,10 @@ import static org.mariotaku.twidere.util.HtmlEscapeHelper.toPlainText;
|
|||
|
||||
public final class ContentValuesCreator implements TwidereConstants {
|
||||
|
||||
public static ContentValues createAccount(final String basicUsername, final String basicPassword,
|
||||
final User user, final int color, final String apiUrlFormat,
|
||||
final boolean noVersionSuffix) {
|
||||
if (user == null || user.getId() <= 0) return null;
|
||||
final ContentValues values = new ContentValues();
|
||||
if (basicUsername == null || basicPassword == null) return null;
|
||||
values.put(Accounts.BASIC_AUTH_USERNAME, basicUsername);
|
||||
values.put(Accounts.BASIC_AUTH_PASSWORD, basicPassword);
|
||||
values.put(Accounts.AUTH_TYPE, ParcelableCredentials.AUTH_TYPE_BASIC);
|
||||
values.put(Accounts.ACCOUNT_ID, user.getId());
|
||||
values.put(Accounts.SCREEN_NAME, user.getScreenName());
|
||||
values.put(Accounts.NAME, user.getName());
|
||||
values.put(Accounts.PROFILE_IMAGE_URL, TwitterContentUtils.getProfileImageUrl(user));
|
||||
values.put(Accounts.PROFILE_BANNER_URL, user.getProfileBannerImageUrl());
|
||||
values.put(Accounts.COLOR, color);
|
||||
values.put(Accounts.IS_ACTIVATED, 1);
|
||||
values.put(Accounts.API_URL_FORMAT, apiUrlFormat);
|
||||
values.put(Accounts.NO_VERSION_SUFFIX, noVersionSuffix);
|
||||
return values;
|
||||
}
|
||||
|
||||
public static ContentValues createAccount(final OAuthAuthorization auth, final User user,
|
||||
final int authType, final int color,
|
||||
final String apiUrlFormat, final boolean sameOAuthSigningUrl,
|
||||
final boolean noVersionSuffix) {
|
||||
if (user == null || auth == null) return null;
|
||||
final ContentValues values = new ContentValues();
|
||||
final OAuthToken accessToken = auth.getOauthToken();
|
||||
values.put(Accounts.OAUTH_TOKEN, accessToken.getOauthToken());
|
||||
values.put(Accounts.OAUTH_TOKEN_SECRET, accessToken.getOauthTokenSecret());
|
||||
values.put(Accounts.CONSUMER_KEY, auth.getConsumerKey());
|
||||
values.put(Accounts.CONSUMER_SECRET, auth.getConsumerSecret());
|
||||
values.put(Accounts.AUTH_TYPE, authType);
|
||||
values.put(Accounts.ACCOUNT_ID, user.getId());
|
||||
values.put(Accounts.SCREEN_NAME, user.getScreenName());
|
||||
values.put(Accounts.NAME, user.getName());
|
||||
values.put(Accounts.PROFILE_IMAGE_URL, TwitterContentUtils.getProfileImageUrl(user));
|
||||
values.put(Accounts.PROFILE_BANNER_URL, user.getProfileBannerImageUrl());
|
||||
values.put(Accounts.COLOR, color);
|
||||
values.put(Accounts.IS_ACTIVATED, 1);
|
||||
values.put(Accounts.API_URL_FORMAT, apiUrlFormat);
|
||||
values.put(Accounts.SAME_OAUTH_SIGNING_URL, sameOAuthSigningUrl);
|
||||
values.put(Accounts.NO_VERSION_SUFFIX, noVersionSuffix);
|
||||
return values;
|
||||
}
|
||||
|
||||
public static ContentValues createAccount(final User user, final int color, final String apiUrlFormat,
|
||||
final boolean noVersionSuffix) {
|
||||
if (user == null || user.getId() <= 0) return null;
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put(Accounts.AUTH_TYPE, ParcelableCredentials.AUTH_TYPE_TWIP_O_MODE);
|
||||
values.put(Accounts.ACCOUNT_ID, user.getId());
|
||||
values.put(Accounts.SCREEN_NAME, user.getScreenName());
|
||||
values.put(Accounts.NAME, user.getName());
|
||||
values.put(Accounts.PROFILE_IMAGE_URL, TwitterContentUtils.getProfileImageUrl(user));
|
||||
values.put(Accounts.PROFILE_BANNER_URL, user.getProfileBannerImageUrl());
|
||||
values.put(Accounts.COLOR, color);
|
||||
values.put(Accounts.IS_ACTIVATED, 1);
|
||||
values.put(Accounts.API_URL_FORMAT, apiUrlFormat);
|
||||
values.put(Accounts.NO_VERSION_SUFFIX, noVersionSuffix);
|
||||
return values;
|
||||
}
|
||||
|
||||
public static ContentValues createCachedRelationship(final Relationship relationship,
|
||||
final AccountKey accountKey) {
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put(CachedRelationships.ACCOUNT_ID, accountKey.getId());
|
||||
values.put(CachedRelationships.ACCOUNT_HOST, accountKey.getHost());
|
||||
values.put(CachedRelationships.ACCOUNT_KEY, accountKey.toString());
|
||||
values.put(CachedRelationships.USER_ID, relationship.getTargetUserId());
|
||||
values.put(CachedRelationships.FOLLOWING, relationship.isSourceFollowingTarget());
|
||||
values.put(CachedRelationships.FOLLOWED_BY, relationship.isSourceFollowedByTarget());
|
||||
|
@ -152,16 +84,16 @@ public final class ContentValuesCreator implements TwidereConstants {
|
|||
return values;
|
||||
}
|
||||
|
||||
public static ContentValues createDirectMessage(final DirectMessage message, final long accountId,
|
||||
final String accountHost, final boolean isOutgoing) {
|
||||
public static ContentValues createDirectMessage(final DirectMessage message,
|
||||
final AccountKey accountKey,
|
||||
final boolean isOutgoing) {
|
||||
if (message == null) return null;
|
||||
final ContentValues values = new ContentValues();
|
||||
final User sender = message.getSender(), recipient = message.getRecipient();
|
||||
if (sender == null || recipient == null) return null;
|
||||
final String sender_profile_image_url = TwitterContentUtils.getProfileImageUrl(sender);
|
||||
final String recipient_profile_image_url = TwitterContentUtils.getProfileImageUrl(recipient);
|
||||
values.put(DirectMessages.ACCOUNT_ID, accountId);
|
||||
values.put(DirectMessages.ACCOUNT_HOST, accountHost);
|
||||
values.put(DirectMessages.ACCOUNT_KEY, accountKey.toString());
|
||||
values.put(DirectMessages.MESSAGE_ID, message.getId());
|
||||
values.put(DirectMessages.MESSAGE_TIMESTAMP, message.getCreatedAt().getTime());
|
||||
values.put(DirectMessages.SENDER_ID, sender.getId());
|
||||
|
@ -241,11 +173,10 @@ public final class ContentValuesCreator implements TwidereConstants {
|
|||
return values;
|
||||
}
|
||||
|
||||
public static ContentValues createSavedSearch(final SavedSearch savedSearch, final long accountId,
|
||||
final String accountHost) {
|
||||
public static ContentValues createSavedSearch(final SavedSearch savedSearch,
|
||||
final AccountKey accountKey) {
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put(SavedSearches.ACCOUNT_ID, accountId);
|
||||
values.put(SavedSearches.ACCOUNT_HOST, accountHost);
|
||||
values.put(SavedSearches.ACCOUNT_KEY, accountKey.toString());
|
||||
values.put(SavedSearches.SEARCH_ID, savedSearch.getId());
|
||||
values.put(SavedSearches.CREATED_AT, savedSearch.getCreatedAt().getTime());
|
||||
values.put(SavedSearches.NAME, savedSearch.getName());
|
||||
|
@ -254,10 +185,10 @@ public final class ContentValuesCreator implements TwidereConstants {
|
|||
}
|
||||
|
||||
public static ContentValues[] createSavedSearches(final List<SavedSearch> savedSearches,
|
||||
final long accountId, final String accountHost) {
|
||||
final AccountKey accountKey) {
|
||||
final ContentValues[] resultValuesArray = new ContentValues[savedSearches.size()];
|
||||
for (int i = 0, j = savedSearches.size(); i < j; i++) {
|
||||
resultValuesArray[i] = createSavedSearch(savedSearches.get(i), accountId, accountHost);
|
||||
resultValuesArray[i] = createSavedSearch(savedSearches.get(i), accountKey);
|
||||
}
|
||||
return resultValuesArray;
|
||||
}
|
||||
|
|
|
@ -200,14 +200,14 @@ public class DataStoreUtils implements Constants {
|
|||
public static long[] getNewestMessageIds(@NonNull final Context context, @NonNull final Uri uri,
|
||||
@NonNull final AccountKey[] accountKeys) {
|
||||
return getLongFieldArray(context, uri, AccountKey.getIds(accountKeys),
|
||||
DirectMessages.ACCOUNT_ID, DirectMessages.MESSAGE_ID,
|
||||
DirectMessages.ACCOUNT_KEY, DirectMessages.MESSAGE_ID,
|
||||
new OrderBy(SQLFunctions.MAX(DirectMessages.MESSAGE_TIMESTAMP)));
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static long[] getNewestStatusIds(@NonNull final Context context, @NonNull final Uri uri,
|
||||
@NonNull final AccountKey[] accountKeys) {
|
||||
return getLongFieldArray(context, uri, AccountKey.getIds(accountKeys), Statuses.ACCOUNT_ID, Statuses.STATUS_ID,
|
||||
return getLongFieldArray(context, uri, AccountKey.getIds(accountKeys), Statuses.ACCOUNT_KEY, Statuses.STATUS_ID,
|
||||
new OrderBy(SQLFunctions.MAX(Statuses.STATUS_TIMESTAMP)));
|
||||
}
|
||||
|
||||
|
@ -215,21 +215,21 @@ public class DataStoreUtils implements Constants {
|
|||
@NonNull
|
||||
public static long[] getOldestMessageIds(@NonNull final Context context, @NonNull final Uri uri,
|
||||
@NonNull final AccountKey[] accountKeys) {
|
||||
return getLongFieldArray(context, uri, AccountKey.getIds(accountKeys), DirectMessages.ACCOUNT_ID,
|
||||
return getLongFieldArray(context, uri, AccountKey.getIds(accountKeys), DirectMessages.ACCOUNT_KEY,
|
||||
DirectMessages.MESSAGE_ID, new OrderBy(SQLFunctions.MIN(DirectMessages.MESSAGE_TIMESTAMP)));
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static long[] getOldestStatusIds(@NonNull final Context context, @NonNull final Uri uri,
|
||||
@NonNull final AccountKey[] accountKeys) {
|
||||
return getLongFieldArray(context, uri, AccountKey.getIds(accountKeys), Statuses.ACCOUNT_ID, Statuses.STATUS_ID,
|
||||
return getLongFieldArray(context, uri, AccountKey.getIds(accountKeys), Statuses.ACCOUNT_KEY, Statuses.STATUS_ID,
|
||||
new OrderBy(SQLFunctions.MIN(Statuses.STATUS_TIMESTAMP)));
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static long[] getNewestActivityMaxPositions(final Context context, final Uri uri,
|
||||
final AccountKey[] accountKeys) {
|
||||
return getLongFieldArray(context, uri, AccountKey.getIds(accountKeys), Activities.ACCOUNT_ID,
|
||||
return getLongFieldArray(context, uri, AccountKey.getIds(accountKeys), Activities.ACCOUNT_KEY,
|
||||
Activities.MAX_POSITION, new OrderBy(SQLFunctions.MAX(Activities.TIMESTAMP)));
|
||||
}
|
||||
|
||||
|
@ -237,7 +237,7 @@ public class DataStoreUtils implements Constants {
|
|||
public static long[] getOldestActivityMaxPositions(@NonNull final Context context,
|
||||
@NonNull final Uri uri,
|
||||
@NonNull final AccountKey[] accountKeys) {
|
||||
return getLongFieldArray(context, uri, AccountKey.getIds(accountKeys), Activities.ACCOUNT_ID,
|
||||
return getLongFieldArray(context, uri, AccountKey.getIds(accountKeys), Activities.ACCOUNT_KEY,
|
||||
Activities.MAX_POSITION, new OrderBy(SQLFunctions.MIN(Activities.TIMESTAMP)));
|
||||
}
|
||||
|
||||
|
@ -387,7 +387,7 @@ public class DataStoreUtils implements Constants {
|
|||
public static String[] getAccountScreenNames(final Context context, @Nullable final AccountKey[] accountKeys) {
|
||||
if (context == null) return new String[0];
|
||||
final String[] cols = new String[]{Accounts.SCREEN_NAME};
|
||||
final String where = accountKeys != null ? Expression.in(new Column(Accounts.ACCOUNT_ID),
|
||||
final String where = accountKeys != null ? Expression.in(new Column(Accounts.ACCOUNT_KEY),
|
||||
new RawItemArray(accountKeys)).getSQL() : null;
|
||||
final Cursor cur = context.getContentResolver().query(Accounts.CONTENT_URI, cols, where, null, null);
|
||||
if (cur == null) return new String[0];
|
||||
|
@ -409,14 +409,14 @@ public class DataStoreUtils implements Constants {
|
|||
public static AccountKey[] getActivatedAccountKeys(final Context context) {
|
||||
if (context == null) return new AccountKey[0];
|
||||
final Cursor cur = context.getContentResolver().query(Accounts.CONTENT_URI,
|
||||
new String[]{Accounts.ACCOUNT_ID, Accounts.ACCOUNT_HOST}, Accounts.IS_ACTIVATED + " = 1", null, null);
|
||||
new String[]{Accounts.ACCOUNT_KEY}, Accounts.IS_ACTIVATED + " = 1", null, null);
|
||||
if (cur == null) return new AccountKey[0];
|
||||
try {
|
||||
cur.moveToFirst();
|
||||
final AccountKey[] ids = new AccountKey[cur.getCount()];
|
||||
int i = 0;
|
||||
while (!cur.isAfterLast()) {
|
||||
ids[i++] = new AccountKey(cur.getLong(0), cur.getString(1));
|
||||
ids[i++] = AccountKey.valueOf(cur.getString(0));
|
||||
cur.moveToNext();
|
||||
}
|
||||
return ids;
|
||||
|
@ -429,12 +429,12 @@ public class DataStoreUtils implements Constants {
|
|||
if (context == null) return 0;
|
||||
final RawItemArray idsIn;
|
||||
if (ArrayUtils.isEmpty(accountKeys)) {
|
||||
idsIn = new RawItemArray(getActivatedAccountKeys(context));
|
||||
idsIn = new RawItemArray(AccountKey.getIds(getActivatedAccountKeys(context)));
|
||||
} else {
|
||||
idsIn = new RawItemArray(accountKeys);
|
||||
idsIn = new RawItemArray(AccountKey.getIds(accountKeys));
|
||||
}
|
||||
final Expression selection = Expression.and(
|
||||
Expression.in(new Column(Statuses.ACCOUNT_ID), idsIn),
|
||||
Expression.in(new Column(Statuses.ACCOUNT_KEY), idsIn),
|
||||
Expression.greaterThan(Statuses.STATUS_ID, sinceId),
|
||||
buildStatusFilterWhereClause(getTableNameByUri(uri), null)
|
||||
);
|
||||
|
@ -447,9 +447,9 @@ public class DataStoreUtils implements Constants {
|
|||
if (context == null) return 0;
|
||||
final RawItemArray idsIn;
|
||||
if (ArrayUtils.isEmpty(accountKeys)) {
|
||||
idsIn = new RawItemArray(getActivatedAccountKeys(context));
|
||||
idsIn = new RawItemArray(AccountKey.getIds(getActivatedAccountKeys(context)));
|
||||
} else {
|
||||
idsIn = new RawItemArray(accountKeys);
|
||||
idsIn = new RawItemArray(AccountKey.getIds(accountKeys));
|
||||
}
|
||||
Expression[] expressions;
|
||||
if (extraWhere != null) {
|
||||
|
@ -458,7 +458,7 @@ public class DataStoreUtils implements Constants {
|
|||
} else {
|
||||
expressions = new Expression[3];
|
||||
}
|
||||
expressions[0] = Expression.in(new Column(Activities.ACCOUNT_ID), idsIn);
|
||||
expressions[0] = Expression.in(new Column(Activities.ACCOUNT_KEY), idsIn);
|
||||
expressions[1] = Expression.greaterThan(Activities.TIMESTAMP, sinceTimestamp);
|
||||
expressions[2] = buildActivityFilterWhereClause(getTableNameByUri(uri), null);
|
||||
final Expression selection = Expression.and(expressions);
|
||||
|
@ -638,8 +638,8 @@ public class DataStoreUtils implements Constants {
|
|||
|
||||
public static int[] getAccountColors(final Context context, final long[] accountIds) {
|
||||
if (context == null || accountIds == null) return new int[0];
|
||||
final String[] cols = new String[]{Accounts.ACCOUNT_ID, Accounts.COLOR};
|
||||
final String where = Expression.in(new Column(Accounts.ACCOUNT_ID), new RawItemArray(accountIds)).getSQL();
|
||||
final String[] cols = new String[]{Accounts.ACCOUNT_KEY, Accounts.COLOR};
|
||||
final String where = Expression.in(new Column(Accounts.ACCOUNT_KEY), new RawItemArray(accountIds)).getSQL();
|
||||
final Cursor cur = context.getContentResolver().query(Accounts.CONTENT_URI, cols, where, null, null);
|
||||
if (cur == null) return new int[0];
|
||||
try {
|
||||
|
@ -656,7 +656,7 @@ public class DataStoreUtils implements Constants {
|
|||
|
||||
public static AccountKey getAccountKey(final Context context, final String screenName) {
|
||||
if (context == null || isEmpty(screenName)) return null;
|
||||
final String[] projection = {Accounts.ACCOUNT_ID, Accounts.ACCOUNT_HOST};
|
||||
final String[] projection = {Accounts.ACCOUNT_KEY};
|
||||
final String where = Expression.equalsArgs(Accounts.SCREEN_NAME).getSQL();
|
||||
final String[] whereArgs = {screenName};
|
||||
final Cursor cur = context.getContentResolver().query(Accounts.CONTENT_URI, projection,
|
||||
|
@ -664,7 +664,7 @@ public class DataStoreUtils implements Constants {
|
|||
if (cur == null) return null;
|
||||
try {
|
||||
if (cur.moveToFirst()) {
|
||||
return new AccountKey(cur.getLong(0), cur.getString(1));
|
||||
return AccountKey.valueOf(cur.getString(0));
|
||||
}
|
||||
return null;
|
||||
} finally {
|
||||
|
@ -675,7 +675,7 @@ public class DataStoreUtils implements Constants {
|
|||
@NonNull
|
||||
public static AccountKey[] getAccountKeys(final Context context) {
|
||||
if (context == null) return new AccountKey[0];
|
||||
final String[] projection = {Accounts.ACCOUNT_ID, Accounts.ACCOUNT_HOST};
|
||||
final String[] projection = {Accounts.ACCOUNT_KEY};
|
||||
final Cursor cur = context.getContentResolver().query(Accounts.CONTENT_URI, projection,
|
||||
null, null, null);
|
||||
if (cur == null) return new AccountKey[0];
|
||||
|
@ -684,7 +684,7 @@ public class DataStoreUtils implements Constants {
|
|||
final AccountKey[] ids = new AccountKey[cur.getCount()];
|
||||
int i = 0;
|
||||
while (!cur.isAfterLast()) {
|
||||
ids[i++] = new AccountKey(cur.getLong(0), cur.getString(1));
|
||||
ids[i++] = AccountKey.valueOf(cur.getString(0));
|
||||
cur.moveToNext();
|
||||
}
|
||||
return ids;
|
||||
|
@ -718,8 +718,7 @@ public class DataStoreUtils implements Constants {
|
|||
continue;
|
||||
}
|
||||
final String table = getTableNameByUri(uri);
|
||||
final Expression accountWhere = Expression.and(Expression.equalsArgs(Statuses.ACCOUNT_ID),
|
||||
Expression.equalsArgs(Statuses.ACCOUNT_HOST));
|
||||
final Expression accountWhere = Expression.equalsArgs(Statuses.ACCOUNT_KEY);
|
||||
final SQLSelectQuery.Builder qb = new SQLSelectQuery.Builder();
|
||||
qb.select(new Column(Statuses._ID))
|
||||
.from(new Tables(table))
|
||||
|
@ -729,14 +728,12 @@ public class DataStoreUtils implements Constants {
|
|||
final Expression where = Expression.and(Expression.lesserThan(new Column(Statuses._ID),
|
||||
SQLQueryBuilder.select(SQLFunctions.MIN(new Column(Statuses._ID))).from(qb.build()).build()),
|
||||
accountWhere);
|
||||
final String[] whereArgs = {String.valueOf(accountKey.getId()), accountKey.getHost(),
|
||||
String.valueOf(accountKey.getId()), accountKey.getHost()};
|
||||
final String[] whereArgs = {String.valueOf(accountKey), String.valueOf(accountKey)};
|
||||
resolver.delete(uri, where.getSQL(), whereArgs);
|
||||
}
|
||||
for (final Uri uri : ACTIVITIES_URIS) {
|
||||
final String table = getTableNameByUri(uri);
|
||||
final Expression accountWhere = Expression.and(Expression.equalsArgs(Accounts.ACCOUNT_ID),
|
||||
Expression.equalsArgs(Accounts.ACCOUNT_HOST));
|
||||
final Expression accountWhere = Expression.equalsArgs(Accounts.ACCOUNT_KEY);
|
||||
final SQLSelectQuery.Builder qb = new SQLSelectQuery.Builder();
|
||||
qb.select(new Column(Activities._ID))
|
||||
.from(new Tables(table))
|
||||
|
@ -746,14 +743,12 @@ public class DataStoreUtils implements Constants {
|
|||
final Expression where = Expression.and(Expression.lesserThan(new Column(Activities._ID),
|
||||
SQLQueryBuilder.select(SQLFunctions.MIN(new Column(Activities._ID)))
|
||||
.from(qb.build()).build()), accountWhere);
|
||||
final String[] whereArgs = {String.valueOf(accountKey.getId()), accountKey.getHost(),
|
||||
String.valueOf(accountKey.getId()), accountKey.getHost()};
|
||||
final String[] whereArgs = {String.valueOf(accountKey), String.valueOf(accountKey)};
|
||||
resolver.delete(uri, where.getSQL(), whereArgs);
|
||||
}
|
||||
for (final Uri uri : DIRECT_MESSAGES_URIS) {
|
||||
final String table = getTableNameByUri(uri);
|
||||
final Expression accountWhere = Expression.and(Expression.equalsArgs(DirectMessages.ACCOUNT_ID),
|
||||
Expression.equalsArgs(DirectMessages.ACCOUNT_HOST));
|
||||
final Expression accountWhere = Expression.equalsArgs(Accounts.ACCOUNT_KEY);
|
||||
final SQLSelectQuery.Builder qb = new SQLSelectQuery.Builder();
|
||||
qb.select(new Column(DirectMessages._ID))
|
||||
.from(new Tables(table))
|
||||
|
@ -763,8 +758,7 @@ public class DataStoreUtils implements Constants {
|
|||
final Expression where = Expression.and(Expression.lesserThan(new Column(DirectMessages._ID),
|
||||
SQLQueryBuilder.select(SQLFunctions.MIN(new Column(DirectMessages._ID)))
|
||||
.from(qb.build()).build()), accountWhere);
|
||||
final String[] whereArgs = {String.valueOf(accountKey.getId()), accountKey.getHost(),
|
||||
String.valueOf(accountKey.getId()), accountKey.getHost()};
|
||||
final String[] whereArgs = {String.valueOf(accountKey), String.valueOf(accountKey)};
|
||||
resolver.delete(uri, where.getSQL(), whereArgs);
|
||||
}
|
||||
}
|
||||
|
@ -892,13 +886,13 @@ public class DataStoreUtils implements Constants {
|
|||
public static ParcelableCredentials getCredentials(@NonNull final Context context, final long accountId,
|
||||
final String accountHost) {
|
||||
Cursor cur = context.getContentResolver().query(Accounts.CONTENT_URI, Accounts.COLUMNS,
|
||||
Expression.equals(Accounts.ACCOUNT_ID, accountId).getSQL(), null, null);
|
||||
Expression.equals(Accounts.ACCOUNT_KEY, accountId).getSQL(), null, null);
|
||||
if (cur == null) return null;
|
||||
try {
|
||||
ParcelableCredentialsCursorIndices i = new ParcelableCredentialsCursorIndices(cur);
|
||||
cur.moveToFirst();
|
||||
while (!cur.isAfterLast()) {
|
||||
if (TextUtils.equals(cur.getString(i.account_host), accountHost)) {
|
||||
if (TextUtils.equals(cur.getString(i.account_key), accountHost)) {
|
||||
return i.newObject(cur);
|
||||
}
|
||||
cur.moveToNext();
|
||||
|
@ -988,9 +982,9 @@ public class DataStoreUtils implements Constants {
|
|||
public static void initAccountColor(final Context context) {
|
||||
if (context == null) return;
|
||||
final Cursor cur = context.getContentResolver().query(Accounts.CONTENT_URI, new String[]{
|
||||
Accounts.ACCOUNT_ID, Accounts.COLOR}, null, null, null);
|
||||
Accounts.ACCOUNT_KEY, Accounts.COLOR}, null, null, null);
|
||||
if (cur == null) return;
|
||||
final int id_idx = cur.getColumnIndex(Accounts.ACCOUNT_ID), color_idx = cur.getColumnIndex(Accounts.COLOR);
|
||||
final int id_idx = cur.getColumnIndex(Accounts.ACCOUNT_KEY), color_idx = cur.getColumnIndex(Accounts.COLOR);
|
||||
cur.moveToFirst();
|
||||
while (!cur.isAfterLast()) {
|
||||
// sAccountColors.put(cur.getLong(id_idx), cur.getInt(color_idx));
|
||||
|
|
|
@ -62,7 +62,7 @@ public class IntentUtils implements Constants {
|
|||
final Uri.Builder builder = new Uri.Builder();
|
||||
builder.scheme(TwidereConstants.SCHEME_TWIDERE);
|
||||
builder.authority(TwidereConstants.AUTHORITY_USER);
|
||||
builder.appendQueryParameter(TwidereConstants.QUERY_PARAM_ACCOUNT_ID, String.valueOf(user.account_id));
|
||||
builder.appendQueryParameter(TwidereConstants.QUERY_PARAM_ACCOUNT_ID, String.valueOf(user.account_key));
|
||||
if (user.id > 0) {
|
||||
builder.appendQueryParameter(TwidereConstants.QUERY_PARAM_USER_ID, String.valueOf(user.id));
|
||||
}
|
||||
|
@ -130,16 +130,15 @@ public class IntentUtils implements Constants {
|
|||
public static void openMedia(@NonNull final Context context, final ParcelableDirectMessage message,
|
||||
final ParcelableMedia current, @Nullable final Bundle options,
|
||||
final boolean newDocument) {
|
||||
openMedia(context, new AccountKey(message.account_id, message.account_host), false, null,
|
||||
message, current, message.media, options, newDocument);
|
||||
openMedia(context, message.account_key, false, null, message, current, message.media,
|
||||
options, newDocument);
|
||||
}
|
||||
|
||||
public static void openMedia(@NonNull final Context context, final ParcelableStatus status,
|
||||
final ParcelableMedia current, final Bundle options,
|
||||
final boolean newDocument) {
|
||||
openMedia(context, new AccountKey(status.account_id, status.account_host),
|
||||
status.is_possibly_sensitive, status, null, current, getPrimaryMedia(status),
|
||||
options, newDocument);
|
||||
openMedia(context, status.account_key, status.is_possibly_sensitive, status, null, current,
|
||||
getPrimaryMedia(status), options, newDocument);
|
||||
}
|
||||
|
||||
public static void openMedia(@NonNull final Context context, @Nullable final AccountKey accountKey, final boolean isPossiblySensitive,
|
||||
|
@ -359,7 +358,7 @@ public class IntentUtils implements Constants {
|
|||
}
|
||||
|
||||
public static void openStatus(@NonNull final Context context, @NonNull final ParcelableStatus status, Bundle activityOptions) {
|
||||
final AccountKey accountKey = new AccountKey(status.account_id, status.account_host);
|
||||
final AccountKey accountKey = status.account_key;
|
||||
final long statusId = status.id;
|
||||
final Bundle extras = new Bundle();
|
||||
extras.putParcelable(EXTRA_STATUS, status);
|
||||
|
|
|
@ -175,10 +175,9 @@ public class MultiSelectEventHandler implements Constants, ActionMode.Callback,
|
|||
final Intent intent = item.getIntent();
|
||||
if (intent == null || !intent.hasExtra(EXTRA_ACCOUNT)) return false;
|
||||
final ParcelableAccount account = intent.getParcelableExtra(EXTRA_ACCOUNT);
|
||||
final AccountKey accountKey = new AccountKey(account.account_id, account.account_host);
|
||||
mMultiSelectManager.setAccountKey(accountKey);
|
||||
mMultiSelectManager.setAccountKey(account.account_key);
|
||||
if (mAccountActionProvider != null) {
|
||||
mAccountActionProvider.setSelectedAccountIds(accountKey);
|
||||
mAccountActionProvider.setSelectedAccountIds(account.account_key);
|
||||
}
|
||||
mode.invalidate();
|
||||
}
|
||||
|
|
|
@ -117,10 +117,10 @@ public class MultiSelectManager implements Constants {
|
|||
final Object obj = selectedItems.get(0);
|
||||
if (obj instanceof ParcelableUser) {
|
||||
final ParcelableUser user = (ParcelableUser) obj;
|
||||
return new AccountKey(user.account_id, user.account_host);
|
||||
return user.account_key;
|
||||
} else if (obj instanceof ParcelableStatus) {
|
||||
final ParcelableStatus status = (ParcelableStatus) obj;
|
||||
return new AccountKey(status.account_id, status.account_host);
|
||||
return status.account_key;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
package org.mariotaku.twidere.util;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/7.
|
||||
*/
|
||||
public class TwidereCollectionUtils {
|
||||
public static String[] toStringArray(final Collection<?> list) {
|
||||
if (list == null) return null;
|
||||
final int length = list.size();
|
||||
final String[] stringArray = new String[length];
|
||||
int idx = 0;
|
||||
for (Object o : list) {
|
||||
stringArray[idx++] = ParseUtils.parseString(o);
|
||||
}
|
||||
return stringArray;
|
||||
}
|
||||
}
|
|
@ -20,6 +20,7 @@
|
|||
package org.mariotaku.twidere.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class TwidereListUtils {
|
||||
|
@ -48,13 +49,4 @@ public class TwidereListUtils {
|
|||
return builder.toString();
|
||||
}
|
||||
|
||||
public static String[] toStringArray(final List<?> list) {
|
||||
if (list == null) return null;
|
||||
final int length = list.size();
|
||||
final String[] stringArray = new String[length];
|
||||
for (int i = 0; i < length; i++) {
|
||||
stringArray[i] = ParseUtils.parseString(list.get(i));
|
||||
}
|
||||
return stringArray;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ public class TwidereQueryBuilder {
|
|||
final Column usersUserId = new Column(new Table(CachedUsers.TABLE_NAME),
|
||||
CachedRelationships.USER_ID);
|
||||
final Column relationshipsAccountId = new Column(new Table(CachedRelationships.TABLE_NAME),
|
||||
CachedRelationships.ACCOUNT_ID);
|
||||
CachedRelationships.ACCOUNT_KEY);
|
||||
final Expression on = Expression.and(
|
||||
Expression.equals(relationshipsUserId, usersUserId),
|
||||
Expression.equals(relationshipsAccountId, accountId)
|
||||
|
@ -128,7 +128,7 @@ public class TwidereQueryBuilder {
|
|||
final Selectable select = Utils.getColumnsFromProjection(projection);
|
||||
final SQLSelectQuery.Builder qb = SQLQueryBuilder.select(select);
|
||||
qb.from(new Tables(DirectMessages.TABLE_NAME));
|
||||
final Expression accountIdWhere = Expression.equals(DirectMessages.ACCOUNT_ID, account_id);
|
||||
final Expression accountIdWhere = Expression.equals(DirectMessages.ACCOUNT_KEY, account_id);
|
||||
final Expression incomingWhere = Expression.and(Expression.notEquals(DirectMessages.IS_OUTGOING, 1),
|
||||
Expression.equals(DirectMessages.SENDER_ID, conversationId));
|
||||
final Expression outgoingWhere = Expression.and(Expression.equals(DirectMessages.IS_OUTGOING, 1),
|
||||
|
@ -149,7 +149,7 @@ public class TwidereQueryBuilder {
|
|||
final SQLSelectQuery.Builder qb = SQLQueryBuilder.select(select);
|
||||
qb.select(select);
|
||||
qb.from(new Tables(DirectMessages.TABLE_NAME));
|
||||
final Expression accountIdWhere = Expression.equals(DirectMessages.ACCOUNT_ID, account_id);
|
||||
final Expression accountIdWhere = Expression.equals(DirectMessages.ACCOUNT_KEY, account_id);
|
||||
final Expression incomingWhere = Expression.and(Expression.notEquals(DirectMessages.IS_OUTGOING, 1),
|
||||
Expression.equals(new Column(DirectMessages.SENDER_SCREEN_NAME), screen_name));
|
||||
final Expression outgoingWhere = Expression.and(Expression.equals(DirectMessages.IS_OUTGOING, 1),
|
||||
|
@ -176,7 +176,7 @@ public class TwidereQueryBuilder {
|
|||
qb.select(new Columns(new Column(ConversationEntries._ID),
|
||||
new Column(ConversationEntries.MESSAGE_TIMESTAMP),
|
||||
new Column(ConversationEntries.MESSAGE_ID),
|
||||
new Column(ConversationEntries.ACCOUNT_ID),
|
||||
new Column(ConversationEntries.ACCOUNT_KEY),
|
||||
new Column(ConversationEntries.ACCOUNT_HOST),
|
||||
new Column(ConversationEntries.IS_OUTGOING),
|
||||
new Column(ConversationEntries.NAME),
|
||||
|
@ -188,7 +188,7 @@ public class TwidereQueryBuilder {
|
|||
entryIds.select(new Columns(new Column(DirectMessages._ID),
|
||||
new Column(DirectMessages.MESSAGE_TIMESTAMP),
|
||||
new Column(DirectMessages.MESSAGE_ID),
|
||||
new Column(DirectMessages.ACCOUNT_ID),
|
||||
new Column(DirectMessages.ACCOUNT_KEY),
|
||||
new Column(DirectMessages.ACCOUNT_HOST),
|
||||
new Column("0", DirectMessages.IS_OUTGOING),
|
||||
new Column(DirectMessages.SENDER_NAME, ConversationEntries.NAME),
|
||||
|
@ -201,7 +201,7 @@ public class TwidereQueryBuilder {
|
|||
entryIds.select(new Columns(new Column(DirectMessages._ID),
|
||||
new Column(DirectMessages.MESSAGE_TIMESTAMP),
|
||||
new Column(DirectMessages.MESSAGE_ID),
|
||||
new Column(DirectMessages.ACCOUNT_ID),
|
||||
new Column(DirectMessages.ACCOUNT_KEY),
|
||||
new Column(DirectMessages.ACCOUNT_HOST),
|
||||
new Column("1", DirectMessages.IS_OUTGOING),
|
||||
new Column(DirectMessages.RECIPIENT_NAME, ConversationEntries.NAME),
|
||||
|
@ -239,7 +239,7 @@ public class TwidereQueryBuilder {
|
|||
where = groupedWhere;
|
||||
}
|
||||
qb.where(where);
|
||||
qb.groupBy(Utils.getColumnsFromProjection(ConversationEntries.CONVERSATION_ID, DirectMessages.ACCOUNT_ID));
|
||||
qb.groupBy(Utils.getColumnsFromProjection(ConversationEntries.CONVERSATION_ID, DirectMessages.ACCOUNT_KEY));
|
||||
qb.orderBy(new OrderBy(ConversationEntries.MESSAGE_TIMESTAMP, false));
|
||||
return qb.build();
|
||||
}
|
||||
|
|
|
@ -402,7 +402,7 @@ public class TwitterAPIFactory implements TwidereConstants {
|
|||
public static ConsumerKeyType getOfficialKeyType(final Context context, final long accountId) {
|
||||
if (context == null) return ConsumerKeyType.UNKNOWN;
|
||||
final String[] projection = {Accounts.CONSUMER_KEY, Accounts.CONSUMER_SECRET, Accounts.AUTH_TYPE};
|
||||
final String selection = Expression.equals(Accounts.ACCOUNT_ID, accountId).getSQL();
|
||||
final String selection = Expression.equals(Accounts.ACCOUNT_KEY, accountId).getSQL();
|
||||
final Cursor c = context.getContentResolver().query(Accounts.CONTENT_URI, projection, selection, null, null);
|
||||
if (c == null) return ConsumerKeyType.UNKNOWN;
|
||||
//noinspection TryFinallyCanBeTryWithResources
|
||||
|
|
|
@ -23,6 +23,7 @@ import android.content.Context;
|
|||
import android.net.Uri;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.util.LongSparseArray;
|
||||
import android.support.v4.util.SimpleArrayMap;
|
||||
import android.util.Log;
|
||||
|
||||
import org.mariotaku.restfu.http.mime.FileBody;
|
||||
|
@ -88,11 +89,12 @@ public class TwitterWrapper implements Constants {
|
|||
return result;
|
||||
}
|
||||
|
||||
public static int removeUnreadCounts(final Context context, final int position, final LongSparseArray<Set<Long>> counts) {
|
||||
public static int removeUnreadCounts(final Context context, final int position,
|
||||
final SimpleArrayMap<AccountKey, Set<Long>> counts) {
|
||||
if (context == null || position < 0 || counts == null) return 0;
|
||||
int result = 0;
|
||||
for (int i = 0, j = counts.size(); i < j; i++) {
|
||||
final long key = counts.keyAt(i);
|
||||
final AccountKey key = counts.keyAt(i);
|
||||
final Set<Long> value = counts.valueAt(i);
|
||||
final Uri.Builder builder = UnreadCounts.CONTENT_URI.buildUpon();
|
||||
builder.appendPath(String.valueOf(position));
|
||||
|
|
|
@ -848,15 +848,17 @@ public final class Utils implements Constants {
|
|||
return buf.toString();
|
||||
}
|
||||
|
||||
public static ParcelableDirectMessage findDirectMessageInDatabases(final Context context, final long account_id,
|
||||
final long message_id) {
|
||||
public static ParcelableDirectMessage findDirectMessageInDatabases(final Context context,
|
||||
final AccountKey accountKey,
|
||||
final long messageId) {
|
||||
if (context == null) return null;
|
||||
final ContentResolver resolver = context.getContentResolver();
|
||||
ParcelableDirectMessage message = null;
|
||||
final String where = DirectMessages.ACCOUNT_ID + " = " + account_id + " AND " + DirectMessages.MESSAGE_ID
|
||||
+ " = " + message_id;
|
||||
final String where = Expression.and(Expression.equalsArgs(DirectMessages.ACCOUNT_KEY),
|
||||
Expression.equalsArgs(DirectMessages.MESSAGE_ID)).getSQL();
|
||||
final String[] whereArgs = {accountKey.toString(), String.valueOf(messageId)};
|
||||
for (final Uri uri : DIRECT_MESSAGES_URIS) {
|
||||
final Cursor cur = resolver.query(uri, DirectMessages.COLUMNS, where, null, null);
|
||||
final Cursor cur = resolver.query(uri, DirectMessages.COLUMNS, where, whereArgs, null);
|
||||
if (cur == null) {
|
||||
continue;
|
||||
}
|
||||
|
@ -878,7 +880,7 @@ public final class Utils implements Constants {
|
|||
final Twitter twitter = TwitterAPIFactory.getTwitterInstance(context, accountKey, true);
|
||||
if (twitter == null) throw new TwitterException("Account does not exist");
|
||||
final Status status = twitter.showStatus(statusId);
|
||||
final String where = Expression.and(Expression.equals(Statuses.ACCOUNT_ID, accountKey.getId()),
|
||||
final String where = Expression.and(Expression.equals(Statuses.ACCOUNT_KEY, accountKey.getId()),
|
||||
Expression.equals(Statuses.STATUS_ID, statusId)).getSQL();
|
||||
final ContentResolver resolver = context.getContentResolver();
|
||||
resolver.delete(CachedStatuses.CONTENT_URI, where, null);
|
||||
|
@ -892,7 +894,7 @@ public final class Utils implements Constants {
|
|||
if (context == null) return null;
|
||||
final ContentResolver resolver = context.getContentResolver();
|
||||
ParcelableStatus status = null;
|
||||
final String where = Expression.and(Expression.equals(Statuses.ACCOUNT_ID, accountKey.getId()),
|
||||
final String where = Expression.and(Expression.equals(Statuses.ACCOUNT_KEY, accountKey.getId()),
|
||||
Expression.equals(Statuses.STATUS_ID, statusId)).getSQL();
|
||||
for (final Uri uri : STATUSES_URIS) {
|
||||
final Cursor cur = resolver.query(uri, Statuses.COLUMNS, where, null, null);
|
||||
|
@ -1587,8 +1589,8 @@ public final class Utils implements Constants {
|
|||
public static boolean isMyAccount(@NonNull final Context context, final long accountId,
|
||||
final String accountHost) {
|
||||
final ContentResolver resolver = context.getContentResolver();
|
||||
final String where = Expression.equalsArgs(Accounts.ACCOUNT_ID).getSQL();
|
||||
final String[] projection = new String[]{Accounts.ACCOUNT_HOST};
|
||||
final String where = Expression.equalsArgs(Accounts.ACCOUNT_KEY).getSQL();
|
||||
final String[] projection = new String[]{};
|
||||
final String[] whereArgs = {String.valueOf(accountId)};
|
||||
final Cursor cur = resolver.query(Accounts.CONTENT_URI, projection, where, whereArgs, null);
|
||||
if (cur == null) return false;
|
||||
|
@ -1615,7 +1617,7 @@ public final class Utils implements Constants {
|
|||
}
|
||||
|
||||
public static boolean isMyRetweet(final ParcelableStatus status) {
|
||||
return status != null && isMyRetweet(status.account_id, status.retweeted_by_user_id, status.my_retweet_id);
|
||||
return status != null && isMyRetweet(status.account_key.getId(), status.retweeted_by_user_id, status.my_retweet_id);
|
||||
}
|
||||
|
||||
public static boolean isMyRetweet(final long accountId, final long retweetedById, final long myRetweetId) {
|
||||
|
@ -1798,7 +1800,7 @@ public final class Utils implements Constants {
|
|||
|
||||
static boolean isMyStatus(ParcelableStatus status) {
|
||||
if (isMyRetweet(status)) return true;
|
||||
return status.account_id == status.user_id;
|
||||
return status.account_key.getId() == status.user_id;
|
||||
}
|
||||
|
||||
public static boolean shouldStopAutoRefreshOnBatteryLow(final Context context) {
|
||||
|
@ -2258,9 +2260,7 @@ public final class Utils implements Constants {
|
|||
}
|
||||
|
||||
public static Expression getAccountCompareExpression() {
|
||||
return Expression.and(Expression.equalsArgs(Statuses.ACCOUNT_ID),
|
||||
Expression.or(Expression.isNull(new Column(Statuses.ACCOUNT_HOST)),
|
||||
Expression.equalsArgs(Statuses.ACCOUNT_HOST)));
|
||||
return Expression.equalsArgs(Statuses.ACCOUNT_KEY);
|
||||
}
|
||||
|
||||
static class UtilsL {
|
||||
|
|
|
@ -86,7 +86,7 @@ public final class TwidereSQLiteOpenHelper extends SQLiteOpenHelper implements C
|
|||
db.execSQL(createTable(CachedStatuses.TABLE_NAME, CachedStatuses.COLUMNS, CachedStatuses.TYPES, true));
|
||||
db.execSQL(createTable(CachedHashtags.TABLE_NAME, CachedHashtags.COLUMNS, CachedHashtags.TYPES, true));
|
||||
db.execSQL(createTable(CachedRelationships.TABLE_NAME, CachedRelationships.COLUMNS, CachedRelationships.TYPES, true,
|
||||
createConflictReplaceConstraint(CachedRelationships.ACCOUNT_ID, CachedRelationships.USER_ID)));
|
||||
createConflictReplaceConstraint(CachedRelationships.ACCOUNT_KEY, CachedRelationships.USER_ID)));
|
||||
db.execSQL(createTable(Filters.Users.TABLE_NAME, Filters.Users.COLUMNS, Filters.Users.TYPES, true));
|
||||
db.execSQL(createTable(Filters.Keywords.TABLE_NAME, Filters.Keywords.COLUMNS, Filters.Keywords.TYPES, true));
|
||||
db.execSQL(createTable(Filters.Sources.TABLE_NAME, Filters.Sources.COLUMNS, Filters.Sources.TYPES, true));
|
||||
|
@ -115,9 +115,9 @@ public final class TwidereSQLiteOpenHelper extends SQLiteOpenHelper implements C
|
|||
|
||||
private void createIndices(SQLiteDatabase db) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return;
|
||||
db.execSQL(createIndex("statuses_index", Statuses.TABLE_NAME, new String[]{Statuses.ACCOUNT_ID}, true));
|
||||
db.execSQL(createIndex("messages_inbox_index", DirectMessages.Inbox.TABLE_NAME, new String[]{DirectMessages.ACCOUNT_ID}, true));
|
||||
db.execSQL(createIndex("messages_outbox_index", DirectMessages.Outbox.TABLE_NAME, new String[]{DirectMessages.ACCOUNT_ID}, true));
|
||||
db.execSQL(createIndex("statuses_index", Statuses.TABLE_NAME, new String[]{Statuses.ACCOUNT_KEY}, true));
|
||||
db.execSQL(createIndex("messages_inbox_index", DirectMessages.Inbox.TABLE_NAME, new String[]{DirectMessages.ACCOUNT_KEY}, true));
|
||||
db.execSQL(createIndex("messages_outbox_index", DirectMessages.Outbox.TABLE_NAME, new String[]{DirectMessages.ACCOUNT_KEY}, true));
|
||||
}
|
||||
|
||||
private void createViews(SQLiteDatabase db) {
|
||||
|
@ -171,7 +171,7 @@ public final class TwidereSQLiteOpenHelper extends SQLiteOpenHelper implements C
|
|||
private SQLQuery createDeleteDuplicateStatusTrigger(String triggerName, String tableName) {
|
||||
final Table table = new Table(tableName);
|
||||
final SQLDeleteQuery deleteOld = SQLQueryBuilder.deleteFrom(table).where(Expression.and(
|
||||
Expression.equals(new Column(Statuses.ACCOUNT_ID), new Column(Table.NEW, Statuses.ACCOUNT_ID)),
|
||||
Expression.equals(new Column(Statuses.ACCOUNT_KEY), new Column(Table.NEW, Statuses.ACCOUNT_KEY)),
|
||||
Expression.equals(new Column(Statuses.STATUS_ID), new Column(Table.NEW, Statuses.STATUS_ID))
|
||||
)).build();
|
||||
return SQLQueryBuilder.createTrigger(false, true, triggerName)
|
||||
|
@ -183,7 +183,7 @@ public final class TwidereSQLiteOpenHelper extends SQLiteOpenHelper implements C
|
|||
private SQLQuery createDeleteDuplicateMessageTrigger(String triggerName, String tableName) {
|
||||
final Table table = new Table(tableName);
|
||||
final SQLDeleteQuery deleteOld = SQLQueryBuilder.deleteFrom(table).where(Expression.and(
|
||||
Expression.equals(new Column(DirectMessages.ACCOUNT_ID), new Column(Table.NEW, DirectMessages.ACCOUNT_ID)),
|
||||
Expression.equals(new Column(DirectMessages.ACCOUNT_KEY), new Column(Table.NEW, DirectMessages.ACCOUNT_KEY)),
|
||||
Expression.equals(new Column(DirectMessages.MESSAGE_ID), new Column(Table.NEW, DirectMessages.MESSAGE_ID))
|
||||
)).build();
|
||||
return SQLQueryBuilder.createTrigger(false, true, triggerName)
|
||||
|
@ -220,7 +220,7 @@ public final class TwidereSQLiteOpenHelper extends SQLiteOpenHelper implements C
|
|||
final HashMap<String, String> draftsAlias = new HashMap<>();
|
||||
accountsAlias.put(Accounts.SCREEN_NAME, "username");
|
||||
accountsAlias.put(Accounts.NAME, "username");
|
||||
accountsAlias.put(Accounts.ACCOUNT_ID, "user_id");
|
||||
accountsAlias.put(Accounts.ACCOUNT_KEY, "user_id");
|
||||
accountsAlias.put(Accounts.COLOR, "user_color");
|
||||
accountsAlias.put(Accounts.OAUTH_TOKEN_SECRET, "token_secret");
|
||||
accountsAlias.put(Accounts.API_URL_FORMAT, "rest_base_url");
|
||||
|
@ -237,7 +237,7 @@ public final class TwidereSQLiteOpenHelper extends SQLiteOpenHelper implements C
|
|||
safeUpgrade(db, CachedStatuses.TABLE_NAME, CachedStatuses.COLUMNS, CachedStatuses.TYPES, true, null);
|
||||
safeUpgrade(db, CachedHashtags.TABLE_NAME, CachedHashtags.COLUMNS, CachedHashtags.TYPES, true, null);
|
||||
safeUpgrade(db, CachedRelationships.TABLE_NAME, CachedRelationships.COLUMNS, CachedRelationships.TYPES, true, null,
|
||||
createConflictReplaceConstraint(CachedRelationships.ACCOUNT_ID, CachedRelationships.USER_ID));
|
||||
createConflictReplaceConstraint(CachedRelationships.ACCOUNT_KEY, CachedRelationships.USER_ID));
|
||||
safeUpgrade(db, Filters.Users.TABLE_NAME, Filters.Users.COLUMNS, Filters.Users.TYPES,
|
||||
oldVersion < 49, null);
|
||||
safeUpgrade(db, Filters.Keywords.TABLE_NAME, Filters.Keywords.COLUMNS, Filters.Keywords.TYPES,
|
||||
|
|
|
@ -69,7 +69,7 @@ public class MessageEntryViewHolder extends ViewHolder implements OnClickListene
|
|||
final MediaLoaderWrapper loader = adapter.getMediaLoader();
|
||||
final UserColorNameManager manager = adapter.getUserColorNameManager();
|
||||
|
||||
final AccountKey accountKey = new AccountKey(cursor.getLong(ConversationEntries.IDX_ACCOUNT_ID),
|
||||
final AccountKey accountKey = new AccountKey(cursor.getLong(ConversationEntries.IDX_ACCOUNT_KEY),
|
||||
cursor.getString(ConversationEntries.IDX_ACCOUNT_HOST));
|
||||
final long conversationId = cursor.getLong(ConversationEntries.IDX_CONVERSATION_ID);
|
||||
final long timestamp = cursor.getLong(ConversationEntries.IDX_MESSAGE_TIMESTAMP);
|
||||
|
|
|
@ -116,7 +116,7 @@ public class UserViewHolder extends ViewHolder implements OnClickListener, OnLon
|
|||
loader.cancelDisplayTask(profileImageView);
|
||||
}
|
||||
|
||||
if (twitter.isProcessingFollowRequest(user.account_id, user.id)) {
|
||||
if (twitter.isProcessingFollowRequest(user.account_key, user.id)) {
|
||||
processingRequestProgress.setVisibility(View.VISIBLE);
|
||||
acceptRequestButton.setVisibility(View.GONE);
|
||||
denyRequestButton.setVisibility(View.GONE);
|
||||
|
|
Loading…
Reference in New Issue