improved account type

This commit is contained in:
Mariotaku Lee 2016-03-05 01:15:38 +08:00
parent 680deb22c5
commit c9864ec732
10 changed files with 50 additions and 32 deletions

View File

@ -79,12 +79,19 @@ public class ParcelableAccount implements Parcelable {
@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")
@CursorField(value = Accounts.ACCOUNT_USER, converter = LoganSquareCursorFieldConverter.class)
public ParcelableUser account_user;
public boolean is_dummy;
public static final Creator<ParcelableAccount> CREATOR = new Creator<ParcelableAccount>() {
public ParcelableAccount createFromParcel(Parcel source) {
ParcelableAccount target = new ParcelableAccount();
@ -96,7 +103,6 @@ public class ParcelableAccount implements Parcelable {
return new ParcelableAccount[size];
}
};
public boolean is_dummy;
ParcelableAccount() {
}
@ -118,6 +124,8 @@ public class ParcelableAccount implements Parcelable {
", color=" + color +
", is_activated=" + is_activated +
", account_type='" + account_type + '\'' +
", account_host='" + account_host + '\'' +
", account_user=" + account_user +
", is_dummy=" + is_dummy +
'}';
}

View File

@ -171,9 +171,9 @@ public class ParcelableUser implements Parcelable, Comparable<ParcelableUser> {
public Extras extras;
@ParcelableThisPlease
@JsonField(name = "user_type")
@CursorField(value = CachedUsers.USER_TYPE)
public String user_type;
@JsonField(name = "user_host")
@CursorField(value = CachedUsers.USER_HOST)
public String user_host;
public static final Creator<ParcelableUser> CREATOR = new Creator<ParcelableUser>() {
public ParcelableUser createFromParcel(Parcel source) {

View File

@ -23,8 +23,6 @@ import android.content.ContentResolver;
import android.net.Uri;
import android.provider.BaseColumns;
import org.mariotaku.twidere.TwidereConstants;
@SuppressWarnings("unused")
public interface TwidereDataStore {
@ -155,19 +153,22 @@ 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};
String ACCOUNT_HOST = "account_host";
String[] COLUMNS = {_ID, NAME, SCREEN_NAME, ACCOUNT_ID, 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};
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[] TYPES = {TYPE_PRIMARY_KEY, TYPE_TEXT_NOT_NULL, TYPE_TEXT_NOT_NULL, TYPE_INT_UNIQUE,
String[] COLUMNS = {_ID, NAME, SCREEN_NAME, ACCOUNT_ID, 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};
String[] TYPES = {TYPE_PRIMARY_KEY, TYPE_TEXT_NOT_NULL, TYPE_TEXT_NOT_NULL, TYPE_INT,
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, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT};
}
@ -299,13 +300,13 @@ public interface TwidereDataStore {
String EXTRAS = "extras";
String USER_TYPE = "user_type";
String USER_HOST = "user_host";
String[] COLUMNS = {_ID, USER_ID, CREATED_AT, NAME, SCREEN_NAME, DESCRIPTION_PLAIN, LOCATION,
URL, PROFILE_IMAGE_URL, PROFILE_BANNER_URL, IS_PROTECTED, IS_VERIFIED, IS_FOLLOWING,
FOLLOWERS_COUNT, FRIENDS_COUNT, STATUSES_COUNT, FAVORITES_COUNT, LISTED_COUNT,
MEDIA_COUNT, DESCRIPTION_HTML, DESCRIPTION_EXPANDED, URL_EXPANDED, BACKGROUND_COLOR,
LINK_COLOR, TEXT_COLOR, LAST_SEEN, DESCRIPTION_UNESCAPED, EXTRAS, USER_TYPE};
LINK_COLOR, TEXT_COLOR, LAST_SEEN, DESCRIPTION_UNESCAPED, EXTRAS, USER_HOST};
String[] BASIC_COLUMNS = {_ID, USER_ID, NAME, SCREEN_NAME, PROFILE_IMAGE_URL};
@ -313,7 +314,7 @@ public interface TwidereDataStore {
TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_BOOLEAN, TYPE_BOOLEAN,
TYPE_BOOLEAN, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_TEXT,
TYPE_TEXT, TYPE_TEXT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_TEXT, TYPE_TEXT,
"TEXT NOT NULL DEFAULT '" + TwidereConstants.USER_TYPE_TWITTER_COM + "'"};
TYPE_TEXT};
}

View File

@ -33,7 +33,7 @@ import static org.mariotaku.twidere.annotation.PreferenceType.STRING;
public interface Constants extends TwidereConstants {
String DATABASES_NAME = "twidere.sqlite";
int DATABASES_VERSION = 127;
int DATABASES_VERSION = 128;
int MENU_GROUP_STATUS_EXTENSION = 10;
int MENU_GROUP_COMPOSE_EXTENSION = 11;

View File

@ -1070,8 +1070,9 @@ public class SignInActivity extends BaseAppCompatActivity implements OnClickList
if (values != null && accountType != null) {
values.put(Accounts.ACCOUNT_TYPE, accountType.first);
values.put(Accounts.ACCOUNT_EXTRAS, accountType.second);
values.put(Accounts.ACCOUNT_USER, JsonSerializer.serialize(ParcelableUserUtils.fromUser(user,
user.getId()), ParcelableUser.class));
final ParcelableUser parcelableUser = ParcelableUserUtils.fromUser(user, user.getId());
values.put(Accounts.ACCOUNT_HOST, ParcelableUserUtils.getUserHost(parcelableUser));
values.put(Accounts.ACCOUNT_USER, JsonSerializer.serialize(parcelableUser, ParcelableUser.class));
}
return values;
}

View File

@ -54,12 +54,14 @@ public class TwitterConverterFactory extends RestConverter.SimpleFactory<Twitter
}
@NonNull
private static Object parseOrThrow(Body body, JsonMapper<?> mapper)
private static Object parseOrThrow(HttpResponse response, JsonMapper<?> mapper)
throws IOException, TwitterException, RestConverter.ConvertException {
try {
final Object parsed = mapper.parse(body.stream());
final Object parsed = mapper.parse(response.getBody().stream());
if (parsed == null) {
throw new TwitterException("Empty data");
final TwitterException exception = new TwitterException("Empty data");
exception.setHttpResponse(response);
throw exception;
}
return parsed;
} catch (JsonParseException e) {
@ -106,8 +108,7 @@ public class TwitterConverterFactory extends RestConverter.SimpleFactory<Twitter
@Override
public Object convert(HttpResponse httpResponse) throws IOException, ConvertException, TwitterException {
final Body body = httpResponse.getBody();
final Object object = parseOrThrow(body, mapper);
final Object object = parseOrThrow(httpResponse, mapper);
if (object instanceof TwitterResponse) {
((TwitterResponse) object).processResponseHeader(httpResponse);
}

View File

@ -123,6 +123,7 @@ 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();
resolver.update(Accounts.CONTENT_URI, accountValues, accountWhere, null);
}

View File

@ -1,6 +1,7 @@
package org.mariotaku.twidere.model.util;
import android.database.Cursor;
import android.support.annotation.Nullable;
import org.mariotaku.twidere.TwidereConstants;
import org.mariotaku.twidere.api.twitter.model.UrlEntity;
@ -65,15 +66,20 @@ public class ParcelableUserUtils implements TwidereConstants {
extras.profile_image_url_profile_size = user.getProfileImageUrlProfileSize();
extras.groups_count = user.getGroupsCount();
obj.extras = extras;
obj.user_type = getUserType(extras.ostatus_uri);
obj.user_host = getUserHost(extras.ostatus_uri);
return obj;
}
private static String getUserType(String uri) {
public static String getUserHost(@Nullable String uri) {
if (uri == null) return USER_TYPE_TWITTER_COM;
return PreviewMediaExtractor.getAuthority(uri);
}
public static String getUserHost(ParcelableUser user) {
if (user.extras == null) return USER_TYPE_TWITTER_COM;
return getUserHost(user.extras.ostatus_uri);
}
public static ParcelableUser fromDirectMessageConversationEntry(final Cursor cursor) {
final long accountId = cursor.getLong(DirectMessages.ConversationEntries.IDX_ACCOUNT_ID);
final long id = cursor.getLong(DirectMessages.ConversationEntries.IDX_CONVERSATION_ID);

View File

@ -459,9 +459,9 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
final long rowId;
if (tableId == TABLE_ID_CACHED_USERS) {
final Expression where = Expression.and(Expression.equalsArgs(CachedUsers.USER_ID),
Expression.equalsArgs(CachedUsers.USER_TYPE));
Expression.equalsArgs(CachedUsers.USER_HOST));
final String[] whereArgs = {values.getAsString(CachedUsers.USER_ID),
values.getAsString(CachedUsers.USER_TYPE)};
values.getAsString(CachedUsers.USER_HOST)};
mDatabaseWrapper.update(table, values, where.getSQL(), whereArgs);
rowId = mDatabaseWrapper.insertWithOnConflict(table, null, values,
SQLiteDatabase.CONFLICT_IGNORE);

View File

@ -82,7 +82,7 @@ public final class TwidereSQLiteOpenHelper extends SQLiteOpenHelper implements C
db.execSQL(createTable(Activities.ByFriends.TABLE_NAME, Activities.ByFriends.COLUMNS, Activities.ByFriends.TYPES, true));
db.execSQL(createTable(Drafts.TABLE_NAME, Drafts.COLUMNS, Drafts.TYPES, true));
db.execSQL(createTable(CachedUsers.TABLE_NAME, CachedUsers.COLUMNS, CachedUsers.TYPES, true,
createConflictReplaceConstraint(CachedUsers.USER_ID, CachedUsers.USER_TYPE)));
createConflictReplaceConstraint(CachedUsers.USER_ID, CachedUsers.USER_HOST)));
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,
@ -233,7 +233,7 @@ public final class TwidereSQLiteOpenHelper extends SQLiteOpenHelper implements C
Activities.ByFriends.TYPES, true, null);
safeUpgrade(db, Drafts.TABLE_NAME, Drafts.COLUMNS, Drafts.TYPES, false, draftsAlias);
safeUpgrade(db, CachedUsers.TABLE_NAME, CachedUsers.COLUMNS, CachedUsers.TYPES, true, null,
createConflictReplaceConstraint(CachedUsers.USER_ID, CachedUsers.USER_TYPE));
createConflictReplaceConstraint(CachedUsers.USER_ID, CachedUsers.USER_HOST));
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,