fixed account set color
This commit is contained in:
parent
82bcdfd877
commit
e4668f45ef
|
@ -1,56 +0,0 @@
|
|||
package org.mariotaku.twidere.task;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import org.mariotaku.microblog.library.MicroBlog;
|
||||
import org.mariotaku.microblog.library.MicroBlogException;
|
||||
import org.mariotaku.microblog.library.twitter.model.User;
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.annotation.AccountType;
|
||||
import org.mariotaku.twidere.model.AccountDetails;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.model.message.FriendshipTaskEvent;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
public class AcceptFriendshipTask extends AbsFriendshipOperationTask implements Constants {
|
||||
|
||||
public AcceptFriendshipTask(final Context context) {
|
||||
super(context, FriendshipTaskEvent.Action.ACCEPT);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected User perform(@NonNull MicroBlog twitter, @NonNull AccountDetails details, @NonNull Arguments args) throws MicroBlogException {
|
||||
switch (details.type) {
|
||||
case AccountType.FANFOU: {
|
||||
return twitter.acceptFanfouFriendship(args.getUserKey().getId());
|
||||
}
|
||||
}
|
||||
return twitter.acceptFriendship(args.getUserKey().getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void succeededWorker(@NonNull MicroBlog twitter, @NonNull AccountDetails details, @NonNull Arguments args, @NonNull ParcelableUser user) {
|
||||
Utils.setLastSeen(getContext(), user.key, System.currentTimeMillis());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void showErrorMessage(@NonNull Arguments params, @Nullable Exception exception) {
|
||||
Utils.showErrorMessage(getContext(), R.string.action_accepting_follow_request, exception, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void showSucceededMessage(@NonNull Arguments params, @NonNull ParcelableUser user) {
|
||||
final boolean nameFirst = getPreferences().getBoolean(KEY_NAME_FIRST);
|
||||
final String message = getContext().getString(R.string.accepted_users_follow_request,
|
||||
getManager().getDisplayName(user, nameFirst));
|
||||
Utils.showOkMessage(getContext(), message, false);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,74 +0,0 @@
|
|||
package org.mariotaku.twidere.task;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import org.mariotaku.microblog.library.MicroBlog;
|
||||
import org.mariotaku.microblog.library.MicroBlogException;
|
||||
import org.mariotaku.microblog.library.twitter.model.User;
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.annotation.AccountType;
|
||||
import org.mariotaku.twidere.model.AccountDetails;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.model.message.FriendshipTaskEvent;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
public class CreateFriendshipTask extends AbsFriendshipOperationTask implements Constants {
|
||||
|
||||
public CreateFriendshipTask(final Context context) {
|
||||
super(context, FriendshipTaskEvent.Action.FOLLOW);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected User perform(@NonNull MicroBlog twitter, @NonNull AccountDetails details, @NonNull Arguments args) throws MicroBlogException {
|
||||
switch (details.type) {
|
||||
case AccountType.FANFOU: {
|
||||
return twitter.createFanfouFriendship(args.getUserKey().getId());
|
||||
}
|
||||
}
|
||||
return twitter.createFriendship(args.getUserKey().getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void succeededWorker(@NonNull MicroBlog twitter, @NonNull AccountDetails details, @NonNull Arguments args, @NonNull ParcelableUser user) {
|
||||
user.is_following = true;
|
||||
Utils.setLastSeen(getContext(), user.key, System.currentTimeMillis());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void showErrorMessage(@NonNull Arguments params, @Nullable Exception exception) {
|
||||
if (USER_TYPE_FANFOU_COM.equals(params.getAccountKey().getHost())) {
|
||||
// Fanfou returns 403 for follow request
|
||||
if (exception instanceof MicroBlogException) {
|
||||
MicroBlogException te = (MicroBlogException) exception;
|
||||
if (te.getStatusCode() == 403 && !TextUtils.isEmpty(te.getErrorMessage())) {
|
||||
Utils.showErrorMessage(getContext(), te.getErrorMessage(), false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
Utils.showErrorMessage(getContext(), R.string.action_following, exception, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void showSucceededMessage(@NonNull Arguments params, @NonNull ParcelableUser user) {
|
||||
final String message;
|
||||
final boolean nameFirst = getPreferences().getBoolean(KEY_NAME_FIRST);
|
||||
if (user.is_protected) {
|
||||
message = getContext().getString(R.string.sent_follow_request_to_user,
|
||||
getManager().getDisplayName(user, nameFirst));
|
||||
} else {
|
||||
message = getContext().getString(R.string.followed_user,
|
||||
getManager().getDisplayName(user, nameFirst));
|
||||
}
|
||||
Utils.showOkMessage(getContext(), message, false);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,91 +0,0 @@
|
|||
package org.mariotaku.twidere.task;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import org.mariotaku.microblog.library.MicroBlog;
|
||||
import org.mariotaku.microblog.library.MicroBlogException;
|
||||
import org.mariotaku.microblog.library.twitter.model.User;
|
||||
import org.mariotaku.sqliteqb.library.Expression;
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.annotation.AccountType;
|
||||
import org.mariotaku.twidere.model.AccountDetails;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.model.message.FriendshipTaskEvent;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Activities;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedRelationships;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses;
|
||||
import org.mariotaku.twidere.util.DataStoreUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
public class CreateUserBlockTask extends AbsFriendshipOperationTask implements Constants {
|
||||
public CreateUserBlockTask(Context context) {
|
||||
super(context, FriendshipTaskEvent.Action.BLOCK);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected User perform(@NonNull MicroBlog twitter, @NonNull AccountDetails details,
|
||||
@NonNull Arguments args) throws MicroBlogException {
|
||||
switch (details.type) {
|
||||
case AccountType.FANFOU: {
|
||||
return twitter.createFanfouBlock(args.getUserKey().getId());
|
||||
}
|
||||
}
|
||||
return twitter.createBlock(args.getUserKey().getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void succeededWorker(@NonNull MicroBlog twitter,
|
||||
@NonNull AccountDetails details,
|
||||
@NonNull Arguments args, @NonNull ParcelableUser user) {
|
||||
final ContentResolver resolver = getContext().getContentResolver();
|
||||
Utils.setLastSeen(getContext(), args.getUserKey(), -1);
|
||||
for (final Uri uri : DataStoreUtils.STATUSES_URIS) {
|
||||
final Expression where = Expression.and(
|
||||
Expression.equalsArgs(Statuses.ACCOUNT_KEY),
|
||||
Expression.equalsArgs(Statuses.USER_KEY)
|
||||
);
|
||||
final String[] whereArgs = {args.getAccountKey().toString(), args.getUserKey().toString()};
|
||||
resolver.delete(uri, where.getSQL(), whereArgs);
|
||||
}
|
||||
for (final Uri uri : DataStoreUtils.ACTIVITIES_URIS) {
|
||||
final Expression where = Expression.and(
|
||||
Expression.equalsArgs(Activities.ACCOUNT_KEY),
|
||||
Expression.equalsArgs(Activities.STATUS_USER_KEY)
|
||||
);
|
||||
final String[] whereArgs = {args.getAccountKey().toString(), args.getUserKey().toString()};
|
||||
resolver.delete(uri, where.getSQL(), whereArgs);
|
||||
}
|
||||
// I bet you don't want to see this user in your auto complete list.
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put(CachedRelationships.ACCOUNT_KEY, args.getAccountKey().toString());
|
||||
values.put(CachedRelationships.USER_KEY, args.getUserKey().toString());
|
||||
values.put(CachedRelationships.BLOCKING, true);
|
||||
values.put(CachedRelationships.FOLLOWING, false);
|
||||
values.put(CachedRelationships.FOLLOWED_BY, false);
|
||||
resolver.insert(CachedRelationships.CONTENT_URI, values);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void showSucceededMessage(@NonNull Arguments params, @NonNull ParcelableUser user) {
|
||||
final boolean nameFirst = getPreferences().getBoolean(KEY_NAME_FIRST);
|
||||
final String message = getContext().getString(R.string.blocked_user, getManager().getDisplayName(user,
|
||||
nameFirst));
|
||||
Utils.showInfoMessage(getContext(), message, false);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void showErrorMessage(@NonNull Arguments params, @Nullable Exception exception) {
|
||||
Utils.showErrorMessage(getContext(), R.string.action_blocking, exception, true);
|
||||
}
|
||||
}
|
|
@ -1,86 +0,0 @@
|
|||
package org.mariotaku.twidere.task;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import org.mariotaku.microblog.library.MicroBlog;
|
||||
import org.mariotaku.microblog.library.MicroBlogException;
|
||||
import org.mariotaku.microblog.library.twitter.model.User;
|
||||
import org.mariotaku.sqliteqb.library.Expression;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.model.AccountDetails;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.model.message.FriendshipTaskEvent;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Activities;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedRelationships;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses;
|
||||
import org.mariotaku.twidere.util.DataStoreUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
||||
import static org.mariotaku.twidere.constant.SharedPreferenceConstants.KEY_NAME_FIRST;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
public class CreateUserMuteTask extends AbsFriendshipOperationTask {
|
||||
public CreateUserMuteTask(Context context) {
|
||||
super(context, FriendshipTaskEvent.Action.MUTE);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected User perform(@NonNull MicroBlog twitter, @NonNull AccountDetails details,
|
||||
@NonNull Arguments args) throws MicroBlogException {
|
||||
return twitter.createMute(args.getUserKey().getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void succeededWorker(@NonNull MicroBlog twitter,
|
||||
@NonNull AccountDetails details,
|
||||
@NonNull Arguments args, @NonNull ParcelableUser user) {
|
||||
final ContentResolver resolver = getContext().getContentResolver();
|
||||
Utils.setLastSeen(getContext(), args.getUserKey(), -1);
|
||||
for (final Uri uri : DataStoreUtils.STATUSES_URIS) {
|
||||
final Expression where = Expression.and(
|
||||
Expression.equalsArgs(Statuses.ACCOUNT_KEY),
|
||||
Expression.equalsArgs(Statuses.USER_KEY)
|
||||
);
|
||||
final String[] whereArgs = {args.getAccountKey().toString(), args.getUserKey().toString()};
|
||||
resolver.delete(uri, where.getSQL(), whereArgs);
|
||||
}
|
||||
if (!user.is_following) {
|
||||
for (final Uri uri : DataStoreUtils.ACTIVITIES_URIS) {
|
||||
final Expression where = Expression.and(
|
||||
Expression.equalsArgs(Activities.ACCOUNT_KEY),
|
||||
Expression.equalsArgs(Activities.STATUS_USER_KEY)
|
||||
);
|
||||
final String[] whereArgs = {args.getAccountKey().toString(), args.getUserKey().toString()};
|
||||
resolver.delete(uri, where.getSQL(), whereArgs);
|
||||
}
|
||||
}
|
||||
// I bet you don't want to see this user in your auto complete list.
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put(CachedRelationships.ACCOUNT_KEY, args.getAccountKey().toString());
|
||||
values.put(CachedRelationships.USER_KEY, args.getUserKey().toString());
|
||||
values.put(CachedRelationships.MUTING, true);
|
||||
resolver.insert(CachedRelationships.CONTENT_URI, values);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void showSucceededMessage(@NonNull Arguments params, @NonNull ParcelableUser user) {
|
||||
final boolean nameFirst = getPreferences().getBoolean(KEY_NAME_FIRST);
|
||||
final String message = getContext().getString(R.string.muted_user, getManager().getDisplayName(user,
|
||||
nameFirst));
|
||||
Utils.showInfoMessage(getContext(), message, false);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void showErrorMessage(@NonNull Arguments params, @Nullable Exception exception) {
|
||||
Utils.showErrorMessage(getContext(), R.string.action_muting, exception, true);
|
||||
}
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
package org.mariotaku.twidere.task;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import org.mariotaku.microblog.library.MicroBlog;
|
||||
import org.mariotaku.microblog.library.MicroBlogException;
|
||||
import org.mariotaku.microblog.library.twitter.model.User;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.annotation.AccountType;
|
||||
import org.mariotaku.twidere.model.AccountDetails;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.model.message.FriendshipTaskEvent;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
||||
import static org.mariotaku.twidere.constant.SharedPreferenceConstants.KEY_NAME_FIRST;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
public class DenyFriendshipTask extends AbsFriendshipOperationTask {
|
||||
|
||||
public DenyFriendshipTask(final Context context) {
|
||||
super(context, FriendshipTaskEvent.Action.DENY);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected User perform(@NonNull MicroBlog twitter, @NonNull AccountDetails details, @NonNull Arguments args) throws MicroBlogException {
|
||||
switch (details.type) {
|
||||
case AccountType.FANFOU: {
|
||||
return twitter.denyFanfouFriendship(args.getUserKey().getId());
|
||||
}
|
||||
}
|
||||
return twitter.denyFriendship(args.getUserKey().getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void succeededWorker(@NonNull MicroBlog twitter, @NonNull AccountDetails details, @NonNull Arguments args, @NonNull ParcelableUser user) {
|
||||
Utils.setLastSeen(getContext(), user.key, -1);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void showErrorMessage(@NonNull Arguments params, @Nullable Exception exception) {
|
||||
Utils.showErrorMessage(getContext(), R.string.action_denying_follow_request, exception, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void showSucceededMessage(@NonNull Arguments params, @NonNull ParcelableUser user) {
|
||||
final boolean nameFirst = getPreferences().getBoolean(KEY_NAME_FIRST);
|
||||
final String message = getContext().getString(R.string.denied_users_follow_request,
|
||||
getManager().getDisplayName(user, nameFirst));
|
||||
Utils.showOkMessage(getContext(), message, false);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,68 +0,0 @@
|
|||
package org.mariotaku.twidere.task;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import org.mariotaku.microblog.library.MicroBlog;
|
||||
import org.mariotaku.microblog.library.MicroBlogException;
|
||||
import org.mariotaku.microblog.library.twitter.model.User;
|
||||
import org.mariotaku.sqliteqb.library.Expression;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.annotation.AccountType;
|
||||
import org.mariotaku.twidere.model.AccountDetails;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.model.message.FriendshipTaskEvent;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
||||
import static org.mariotaku.twidere.constant.SharedPreferenceConstants.KEY_NAME_FIRST;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
public class DestroyFriendshipTask extends AbsFriendshipOperationTask {
|
||||
|
||||
public DestroyFriendshipTask(final Context context) {
|
||||
super(context, FriendshipTaskEvent.Action.UNFOLLOW);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected User perform(@NonNull MicroBlog twitter, @NonNull AccountDetails details, @NonNull Arguments args) throws MicroBlogException {
|
||||
switch (details.type) {
|
||||
case AccountType.FANFOU: {
|
||||
return twitter.destroyFanfouFriendship(args.getUserKey().getId());
|
||||
}
|
||||
}
|
||||
return twitter.destroyFriendship(args.getUserKey().getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void succeededWorker(@NonNull MicroBlog twitter, @NonNull AccountDetails details, @NonNull Arguments args, @NonNull ParcelableUser user) {
|
||||
user.is_following = false;
|
||||
Utils.setLastSeen(getContext(), user.key, -1);
|
||||
final Expression where = Expression.and(Expression.equalsArgs(Statuses.ACCOUNT_KEY),
|
||||
Expression.or(Expression.equalsArgs(Statuses.USER_KEY),
|
||||
Expression.equalsArgs(Statuses.RETWEETED_BY_USER_KEY)));
|
||||
final String[] whereArgs = {args.getUserKey().toString(), args.getUserKey().toString(),
|
||||
args.getUserKey().toString()};
|
||||
final ContentResolver resolver = getContext().getContentResolver();
|
||||
resolver.delete(Statuses.CONTENT_URI, where.getSQL(), whereArgs);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void showErrorMessage(@NonNull Arguments params, @Nullable Exception exception) {
|
||||
Utils.showErrorMessage(getContext(), R.string.action_unfollowing, exception, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void showSucceededMessage(@NonNull Arguments params, @NonNull ParcelableUser user) {
|
||||
final boolean nameFirst = getPreferences().getBoolean(KEY_NAME_FIRST);
|
||||
final String message = getContext().getString(R.string.unfollowed_user,
|
||||
getManager().getDisplayName(user, nameFirst));
|
||||
Utils.showInfoMessage(getContext(), message, false);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,70 +0,0 @@
|
|||
package org.mariotaku.twidere.task;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import org.mariotaku.microblog.library.MicroBlog;
|
||||
import org.mariotaku.microblog.library.MicroBlogException;
|
||||
import org.mariotaku.microblog.library.twitter.model.User;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.annotation.AccountType;
|
||||
import org.mariotaku.twidere.model.AccountDetails;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.model.message.FriendshipTaskEvent;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedRelationships;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
||||
import static org.mariotaku.twidere.constant.SharedPreferenceConstants.KEY_NAME_FIRST;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
public class DestroyUserBlockTask extends AbsFriendshipOperationTask {
|
||||
public DestroyUserBlockTask(Context context) {
|
||||
super(context, FriendshipTaskEvent.Action.UNBLOCK);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected User perform(@NonNull MicroBlog twitter, @NonNull AccountDetails details,
|
||||
@NonNull Arguments args) throws MicroBlogException {
|
||||
switch (details.type) {
|
||||
case AccountType.FANFOU: {
|
||||
return twitter.destroyFanfouBlock(args.getUserKey().getId());
|
||||
}
|
||||
}
|
||||
return twitter.destroyBlock(args.getUserKey().getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void succeededWorker(@NonNull MicroBlog twitter,
|
||||
@NonNull AccountDetails details,
|
||||
@NonNull Arguments args, @NonNull ParcelableUser user) {
|
||||
final ContentResolver resolver = getContext().getContentResolver();
|
||||
// I bet you don't want to see this user in your auto complete list.
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put(CachedRelationships.ACCOUNT_KEY, args.getAccountKey().toString());
|
||||
values.put(CachedRelationships.USER_KEY, args.getUserKey().toString());
|
||||
values.put(CachedRelationships.BLOCKING, false);
|
||||
values.put(CachedRelationships.FOLLOWING, false);
|
||||
values.put(CachedRelationships.FOLLOWED_BY, false);
|
||||
resolver.insert(CachedRelationships.CONTENT_URI, values);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void showSucceededMessage(@NonNull Arguments params, @NonNull ParcelableUser user) {
|
||||
final boolean nameFirst = getPreferences().getBoolean(KEY_NAME_FIRST);
|
||||
final String message = getContext().getString(R.string.unblocked_user, getManager().getDisplayName(user,
|
||||
nameFirst));
|
||||
Utils.showInfoMessage(getContext(), message, false);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void showErrorMessage(@NonNull Arguments params, @Nullable Exception exception) {
|
||||
Utils.showErrorMessage(getContext(), R.string.action_unblocking, exception, true);
|
||||
}
|
||||
}
|
|
@ -1,62 +0,0 @@
|
|||
package org.mariotaku.twidere.task;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import org.mariotaku.microblog.library.MicroBlog;
|
||||
import org.mariotaku.microblog.library.MicroBlogException;
|
||||
import org.mariotaku.microblog.library.twitter.model.User;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.model.AccountDetails;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.model.message.FriendshipTaskEvent;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedRelationships;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
||||
import static org.mariotaku.twidere.constant.SharedPreferenceConstants.KEY_NAME_FIRST;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
public class DestroyUserMuteTask extends AbsFriendshipOperationTask {
|
||||
public DestroyUserMuteTask(Context context) {
|
||||
super(context, FriendshipTaskEvent.Action.UNMUTE);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected User perform(@NonNull MicroBlog twitter, @NonNull AccountDetails details,
|
||||
@NonNull Arguments args) throws MicroBlogException {
|
||||
return twitter.destroyMute(args.getUserKey().getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void succeededWorker(@NonNull MicroBlog twitter,
|
||||
@NonNull AccountDetails details,
|
||||
@NonNull Arguments args, @NonNull ParcelableUser user) {
|
||||
final ContentResolver resolver = getContext().getContentResolver();
|
||||
// I bet you don't want to see this user in your auto complete list.
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put(CachedRelationships.ACCOUNT_KEY, args.getAccountKey().toString());
|
||||
values.put(CachedRelationships.USER_KEY, args.getUserKey().toString());
|
||||
values.put(CachedRelationships.MUTING, false);
|
||||
resolver.insert(CachedRelationships.CONTENT_URI, values);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void showSucceededMessage(@NonNull Arguments params, @NonNull ParcelableUser user) {
|
||||
final boolean nameFirst = getPreferences().getBoolean(KEY_NAME_FIRST);
|
||||
final String message = getContext().getString(R.string.unmuted_user, getManager().getDisplayName(user,
|
||||
nameFirst));
|
||||
Utils.showInfoMessage(getContext(), message, false);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void showErrorMessage(@NonNull Arguments params, @Nullable Exception exception) {
|
||||
Utils.showErrorMessage(getContext(), R.string.action_unmuting, exception, true);
|
||||
}
|
||||
}
|
|
@ -150,7 +150,7 @@ public abstract class GetDirectMessagesTask extends AbstractTask<RefreshTaskPara
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void afterExecute(Object callback, List<TwitterWrapper.MessageListResponse> result) {
|
||||
protected void afterExecute(Object handler, List<TwitterWrapper.MessageListResponse> result) {
|
||||
bus.post(new GetMessagesTaskEvent(getDatabaseUri(), false, AsyncTwitterWrapper.getException(result)));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@ public abstract class GetTrendsTask extends AbstractTask<Object, Object, Object>
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void afterExecute(Object callback, Object result) {
|
||||
protected void afterExecute(Object handler, Object result) {
|
||||
mBus.post(new TrendsRefreshedEvent());
|
||||
}
|
||||
|
||||
|
|
|
@ -1,94 +0,0 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.task;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.AsyncTask;
|
||||
|
||||
import com.squareup.otto.Bus;
|
||||
|
||||
import org.mariotaku.twidere.model.message.TaskStateChangedEvent;
|
||||
import org.mariotaku.twidere.util.AsyncTaskManager;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
|
||||
import org.mariotaku.twidere.util.UserColorNameManager;
|
||||
import org.mariotaku.twidere.util.dagger.GeneralComponentHelper;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public abstract class ManagedAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> {
|
||||
|
||||
@Inject
|
||||
protected AsyncTaskManager manager;
|
||||
@Inject
|
||||
protected Bus bus;
|
||||
@Inject
|
||||
protected UserColorNameManager mUserColorNameManager;
|
||||
@Inject
|
||||
protected SharedPreferencesWrapper mPreferences;
|
||||
@Inject
|
||||
protected AsyncTwitterWrapper mAsyncTwitterWrapper;
|
||||
private final Context context;
|
||||
private final String tag;
|
||||
|
||||
public ManagedAsyncTask(final Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public ManagedAsyncTask(final Context context, final String tag) {
|
||||
//noinspection unchecked
|
||||
GeneralComponentHelper.build(context).inject((ManagedAsyncTask<Object, Object, Object>) this);
|
||||
this.context = context;
|
||||
this.tag = tag;
|
||||
}
|
||||
|
||||
public Context getContext() {
|
||||
return context;
|
||||
}
|
||||
|
||||
public String getTag() {
|
||||
return tag;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void finalize() throws Throwable {
|
||||
manager.remove(hashCode());
|
||||
super.finalize();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCancelled() {
|
||||
super.onCancelled();
|
||||
bus.post(new TaskStateChangedEvent());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(final Result result) {
|
||||
super.onPostExecute(result);
|
||||
bus.post(new TaskStateChangedEvent());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
super.onPreExecute();
|
||||
bus.post(new TaskStateChangedEvent());
|
||||
}
|
||||
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
package org.mariotaku.twidere.task;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
import org.mariotaku.microblog.library.MicroBlog;
|
||||
import org.mariotaku.microblog.library.MicroBlogException;
|
||||
import org.mariotaku.microblog.library.twitter.model.User;
|
||||
import org.mariotaku.twidere.model.AccountDetails;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
public class ReportSpamAndBlockTask extends CreateUserBlockTask {
|
||||
public ReportSpamAndBlockTask(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected User perform(@NonNull MicroBlog twitter, @NonNull AccountDetails details,
|
||||
@NonNull Arguments args) throws MicroBlogException {
|
||||
return twitter.reportSpam(args.getUserKey().getId());
|
||||
}
|
||||
}
|
|
@ -1,91 +0,0 @@
|
|||
package org.mariotaku.twidere.task;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.util.Log;
|
||||
|
||||
import com.squareup.otto.Bus;
|
||||
|
||||
import org.mariotaku.abstask.library.AbstractTask;
|
||||
import org.mariotaku.microblog.library.MicroBlog;
|
||||
import org.mariotaku.microblog.library.MicroBlogException;
|
||||
import org.mariotaku.microblog.library.twitter.model.User;
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.model.SingleResponse;
|
||||
import org.mariotaku.twidere.model.UserKey;
|
||||
import org.mariotaku.twidere.model.message.ProfileUpdatedEvent;
|
||||
import org.mariotaku.twidere.model.util.ParcelableUserUtils;
|
||||
import org.mariotaku.twidere.util.MicroBlogAPIFactory;
|
||||
import org.mariotaku.twidere.util.TwitterWrapper;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.util.dagger.GeneralComponentHelper;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
public class UpdateProfileBackgroundImageTask<ResultHandler> extends AbstractTask<Object,
|
||||
SingleResponse<ParcelableUser>, ResultHandler> implements Constants {
|
||||
|
||||
@Inject
|
||||
protected Bus mBus;
|
||||
|
||||
private final UserKey mAccountKey;
|
||||
private final Uri mImageUri;
|
||||
private boolean mTile;
|
||||
private final boolean mDeleteImage;
|
||||
private final Context mContext;
|
||||
|
||||
public UpdateProfileBackgroundImageTask(final Context context, final UserKey accountKey,
|
||||
final Uri imageUri, final boolean tile,
|
||||
final boolean deleteImage) {
|
||||
//noinspection unchecked
|
||||
GeneralComponentHelper.build(context).inject((UpdateProfileBackgroundImageTask<Object>) this);
|
||||
mContext = context;
|
||||
mAccountKey = accountKey;
|
||||
mImageUri = imageUri;
|
||||
mDeleteImage = deleteImage;
|
||||
mTile = tile;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void afterExecute(ResultHandler callback, SingleResponse<ParcelableUser> result) {
|
||||
super.afterExecute(callback, result);
|
||||
if (result.hasData()) {
|
||||
Utils.showOkMessage(mContext, R.string.profile_banner_image_updated, false);
|
||||
mBus.post(new ProfileUpdatedEvent(result.getData()));
|
||||
} else {
|
||||
Utils.showErrorMessage(mContext, R.string.action_updating_profile_background_image,
|
||||
result.getException(),
|
||||
true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SingleResponse<ParcelableUser> doLongOperation(final Object params) {
|
||||
try {
|
||||
final MicroBlog twitter = MicroBlogAPIFactory.getInstance(mContext, mAccountKey
|
||||
);
|
||||
TwitterWrapper.updateProfileBackgroundImage(mContext, twitter, mImageUri, mTile,
|
||||
mDeleteImage);
|
||||
// Wait for 5 seconds, see
|
||||
// https://dev.twitter.com/docs/api/1.1/post/account/update_profile_image
|
||||
try {
|
||||
Thread.sleep(5000L);
|
||||
} catch (InterruptedException e) {
|
||||
Log.w(LOGTAG, e);
|
||||
}
|
||||
final User user = twitter.verifyCredentials();
|
||||
return SingleResponse.Companion.getInstance(ParcelableUserUtils.fromUser(user, mAccountKey));
|
||||
} catch (MicroBlogException | IOException e) {
|
||||
return SingleResponse.Companion.getInstance(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,86 +0,0 @@
|
|||
package org.mariotaku.twidere.task;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.util.Log;
|
||||
|
||||
import com.squareup.otto.Bus;
|
||||
|
||||
import org.mariotaku.abstask.library.AbstractTask;
|
||||
import org.mariotaku.microblog.library.MicroBlog;
|
||||
import org.mariotaku.microblog.library.MicroBlogException;
|
||||
import org.mariotaku.microblog.library.twitter.model.User;
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.model.SingleResponse;
|
||||
import org.mariotaku.twidere.model.UserKey;
|
||||
import org.mariotaku.twidere.model.message.ProfileUpdatedEvent;
|
||||
import org.mariotaku.twidere.model.util.ParcelableUserUtils;
|
||||
import org.mariotaku.twidere.util.MicroBlogAPIFactory;
|
||||
import org.mariotaku.twidere.util.TwitterWrapper;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.util.dagger.GeneralComponentHelper;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
public class UpdateProfileBannerImageTask<ResultHandler> extends AbstractTask<Object,
|
||||
SingleResponse<ParcelableUser>, ResultHandler> implements Constants {
|
||||
|
||||
@Inject
|
||||
protected Bus mBus;
|
||||
|
||||
private final UserKey mAccountKey;
|
||||
private final Uri mImageUri;
|
||||
private final boolean mDeleteImage;
|
||||
private final Context mContext;
|
||||
|
||||
public UpdateProfileBannerImageTask(final Context context, final UserKey accountKey,
|
||||
final Uri imageUri, final boolean deleteImage) {
|
||||
//noinspection unchecked
|
||||
GeneralComponentHelper.build(context).inject((UpdateProfileBannerImageTask<Object>) this);
|
||||
mContext = context;
|
||||
mAccountKey = accountKey;
|
||||
mImageUri = imageUri;
|
||||
mDeleteImage = deleteImage;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void afterExecute(ResultHandler callback, final SingleResponse<ParcelableUser> result) {
|
||||
super.afterExecute(callback, result);
|
||||
if (result.hasData()) {
|
||||
Utils.showOkMessage(mContext, R.string.profile_banner_image_updated, false);
|
||||
mBus.post(new ProfileUpdatedEvent(result.getData()));
|
||||
} else {
|
||||
Utils.showErrorMessage(mContext, R.string.action_updating_profile_banner_image, result.getException(),
|
||||
true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SingleResponse<ParcelableUser> doLongOperation(final Object params) {
|
||||
try {
|
||||
final MicroBlog twitter = MicroBlogAPIFactory.getInstance(mContext, mAccountKey
|
||||
);
|
||||
TwitterWrapper.updateProfileBannerImage(mContext, twitter, mImageUri, mDeleteImage);
|
||||
// Wait for 5 seconds, see
|
||||
// https://dev.twitter.com/docs/api/1.1/post/account/update_profile_image
|
||||
try {
|
||||
Thread.sleep(5000L);
|
||||
} catch (InterruptedException e) {
|
||||
Log.w(LOGTAG, e);
|
||||
}
|
||||
final User user = twitter.verifyCredentials();
|
||||
return SingleResponse.Companion.getInstance(ParcelableUserUtils.fromUser(user, mAccountKey));
|
||||
} catch (MicroBlogException | IOException e) {
|
||||
return SingleResponse.Companion.getInstance(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -76,7 +76,6 @@ import org.mariotaku.twidere.model.message.GetMessagesTaskEvent;
|
|||
import org.mariotaku.twidere.model.message.GetStatusesTaskEvent;
|
||||
import org.mariotaku.twidere.model.message.ProfileUpdatedEvent;
|
||||
import org.mariotaku.twidere.model.message.SavedSearchDestroyedEvent;
|
||||
import org.mariotaku.twidere.model.message.StatusDestroyedEvent;
|
||||
import org.mariotaku.twidere.model.message.StatusListChangedEvent;
|
||||
import org.mariotaku.twidere.model.message.StatusRetweetedEvent;
|
||||
import org.mariotaku.twidere.model.message.UserListCreatedEvent;
|
||||
|
@ -99,11 +98,13 @@ import org.mariotaku.twidere.provider.TwidereDataStore.Drafts;
|
|||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses;
|
||||
import org.mariotaku.twidere.service.BackgroundOperationService;
|
||||
import org.mariotaku.twidere.task.AcceptFriendshipTask;
|
||||
import org.mariotaku.twidere.task.AddUserListMembersTask;
|
||||
import org.mariotaku.twidere.task.CreateFriendshipTask;
|
||||
import org.mariotaku.twidere.task.CreateUserBlockTask;
|
||||
import org.mariotaku.twidere.task.CreateUserMuteTask;
|
||||
import org.mariotaku.twidere.task.DenyFriendshipTask;
|
||||
import org.mariotaku.twidere.task.DestroyFriendshipTask;
|
||||
import org.mariotaku.twidere.task.DestroyStatusTask;
|
||||
import org.mariotaku.twidere.task.DestroyUserBlockTask;
|
||||
import org.mariotaku.twidere.task.DestroyUserMuteTask;
|
||||
import org.mariotaku.twidere.task.GetActivitiesAboutMeTask;
|
||||
|
@ -140,8 +141,8 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
private IntList mCreatingFavoriteIds = new ArrayIntList();
|
||||
private IntList mDestroyingFavoriteIds = new ArrayIntList();
|
||||
private IntList mCreatingRetweetIds = new ArrayIntList();
|
||||
private IntList mDestroyingStatusIds = new ArrayIntList();
|
||||
private IntList mUpdatingRelationshipIds = new ArrayIntList();
|
||||
public IntList destroyingStatusIds = new ArrayIntList();
|
||||
private IntList updatingRelationshipIds = new ArrayIntList();
|
||||
|
||||
private final LongList sendingDraftIds = new ArrayLongList();
|
||||
|
||||
|
@ -190,7 +191,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
}
|
||||
|
||||
public int addUserListMembersAsync(final UserKey accountKey, final String listId, @NonNull final ParcelableUser... users) {
|
||||
final AddUserListMembersTask task = new AddUserListMembersTask(accountKey, listId, users);
|
||||
final AddUserListMembersTask task = new AddUserListMembersTask(context, accountKey, listId, users);
|
||||
return asyncTaskManager.add(task, true);
|
||||
}
|
||||
|
||||
|
@ -311,7 +312,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
}
|
||||
|
||||
public int destroyStatusAsync(final UserKey accountKey, final String statusId) {
|
||||
final DestroyStatusTask task = new DestroyStatusTask(accountKey, statusId);
|
||||
final DestroyStatusTask task = new DestroyStatusTask(context,accountKey, statusId);
|
||||
return asyncTaskManager.add(task, true);
|
||||
}
|
||||
|
||||
|
@ -377,10 +378,10 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
}
|
||||
|
||||
public boolean isDestroyingStatus(@Nullable final UserKey accountId, @Nullable final String statusId) {
|
||||
return mDestroyingStatusIds.contains(calculateHashCode(accountId, statusId));
|
||||
return destroyingStatusIds.contains(calculateHashCode(accountId, statusId));
|
||||
}
|
||||
|
||||
static int calculateHashCode(@Nullable final UserKey accountId, @Nullable final String statusId) {
|
||||
public static int calculateHashCode(@Nullable final UserKey accountId, @Nullable final String statusId) {
|
||||
return (accountId == null ? 0 : accountId.hashCode()) ^ (statusId == null ? 0 : statusId.hashCode());
|
||||
}
|
||||
|
||||
|
@ -579,128 +580,15 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
}
|
||||
|
||||
public void addUpdatingRelationshipId(UserKey accountKey, UserKey userId) {
|
||||
mUpdatingRelationshipIds.add(ParcelableUser.calculateHashCode(accountKey, userId));
|
||||
updatingRelationshipIds.add(ParcelableUser.calculateHashCode(accountKey, userId));
|
||||
}
|
||||
|
||||
public void removeUpdatingRelationshipId(UserKey accountKey, UserKey userId) {
|
||||
mUpdatingRelationshipIds.removeElement(ParcelableUser.calculateHashCode(accountKey, userId));
|
||||
updatingRelationshipIds.removeElement(ParcelableUser.calculateHashCode(accountKey, userId));
|
||||
}
|
||||
|
||||
public boolean isUpdatingRelationship(UserKey accountId, UserKey userId) {
|
||||
return mUpdatingRelationshipIds.contains(ParcelableUser.calculateHashCode(accountId, userId));
|
||||
}
|
||||
|
||||
public static class UpdateProfileImageTask<ResultHandler> extends AbstractTask<Object,
|
||||
SingleResponse<ParcelableUser>, ResultHandler> {
|
||||
|
||||
@Inject
|
||||
protected Bus mBus;
|
||||
|
||||
private final UserKey mAccountKey;
|
||||
private final Uri mImageUri;
|
||||
private final boolean mDeleteImage;
|
||||
private final Context mContext;
|
||||
|
||||
public UpdateProfileImageTask(final Context context, final UserKey accountKey,
|
||||
final Uri imageUri, final boolean deleteImage) {
|
||||
//noinspection unchecked
|
||||
GeneralComponentHelper.build(context).inject((UpdateProfileImageTask<Object>) this);
|
||||
this.mContext = context;
|
||||
this.mAccountKey = accountKey;
|
||||
this.mImageUri = imageUri;
|
||||
this.mDeleteImage = deleteImage;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SingleResponse<ParcelableUser> doLongOperation(final Object params) {
|
||||
try {
|
||||
final MicroBlog microBlog = MicroBlogAPIFactory.getInstance(mContext, mAccountKey);
|
||||
TwitterWrapper.updateProfileImage(mContext, microBlog, mImageUri, mDeleteImage);
|
||||
// Wait for 5 seconds, see
|
||||
// https://dev.twitter.com/rest/reference/post/account/update_profile_image
|
||||
try {
|
||||
Thread.sleep(5000L);
|
||||
} catch (InterruptedException e) {
|
||||
Log.w(LOGTAG, e);
|
||||
}
|
||||
final User user = microBlog.verifyCredentials();
|
||||
return SingleResponse.Companion.getInstance(ParcelableUserUtils.fromUser(user, mAccountKey));
|
||||
} catch (MicroBlogException | IOException e) {
|
||||
return SingleResponse.Companion.getInstance(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void afterExecute(ResultHandler handler, SingleResponse<ParcelableUser> result) {
|
||||
super.afterExecute(handler, result);
|
||||
if (result.hasData()) {
|
||||
Utils.showOkMessage(mContext, R.string.profile_image_updated, false);
|
||||
mBus.post(new ProfileUpdatedEvent(result.getData()));
|
||||
} else {
|
||||
Utils.showErrorMessage(mContext, R.string.action_updating_profile_image, result.getException(), true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class AddUserListMembersTask extends ManagedAsyncTask<Object, Object, SingleResponse<ParcelableUserList>> {
|
||||
|
||||
private final UserKey mAccountKey;
|
||||
private final String mListId;
|
||||
@NonNull
|
||||
private final ParcelableUser[] mUsers;
|
||||
|
||||
AddUserListMembersTask(@NonNull final UserKey accountKey,
|
||||
final String listId,
|
||||
@NonNull final ParcelableUser[] users) {
|
||||
super(context);
|
||||
this.mAccountKey = accountKey;
|
||||
this.mListId = listId;
|
||||
this.mUsers = users;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SingleResponse<ParcelableUserList> doInBackground(final Object... params) {
|
||||
final MicroBlog microBlog = MicroBlogAPIFactory.getInstance(context, mAccountKey);
|
||||
if (microBlog == null) return SingleResponse.Companion.getInstance();
|
||||
try {
|
||||
final UserKey[] userIds = new UserKey[mUsers.length];
|
||||
for (int i = 0, j = mUsers.length; i < j; i++) {
|
||||
userIds[i] = mUsers[i].key;
|
||||
}
|
||||
final UserList result = microBlog.addUserListMembers(mListId, UserKey.getIds(userIds));
|
||||
final ParcelableUserList list = ParcelableUserListUtils.from(result, mAccountKey);
|
||||
return SingleResponse.Companion.getInstance(list);
|
||||
} catch (final MicroBlogException e) {
|
||||
return SingleResponse.Companion.getInstance(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(final SingleResponse<ParcelableUserList> result) {
|
||||
final boolean succeed = result.hasData();
|
||||
if (succeed) {
|
||||
final String message;
|
||||
if (mUsers.length == 1) {
|
||||
final ParcelableUser user = mUsers[0];
|
||||
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
|
||||
final String displayName = mUserColorNameManager.getDisplayName(user.key, user.name,
|
||||
user.screen_name, nameFirst);
|
||||
message = context.getString(R.string.added_user_to_list, displayName, result.getData().name);
|
||||
} else {
|
||||
final Resources res = context.getResources();
|
||||
message = res.getQuantityString(R.plurals.added_N_users_to_list, mUsers.length, mUsers.length,
|
||||
result.getData().name);
|
||||
}
|
||||
Utils.showOkMessage(context, message, false);
|
||||
} else {
|
||||
Utils.showErrorMessage(context, R.string.action_adding_member, result.getException(), true);
|
||||
}
|
||||
bus.post(new UserListMembersChangedEvent(UserListMembersChangedEvent.Action.ADDED,
|
||||
result.getData(), mUsers));
|
||||
super.onPostExecute(result);
|
||||
}
|
||||
|
||||
return updatingRelationshipIds.contains(ParcelableUser.calculateHashCode(accountId, userId));
|
||||
}
|
||||
|
||||
final class ClearNotificationTask extends AsyncTask<Object, Object, Integer> {
|
||||
|
@ -766,7 +654,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
}
|
||||
}
|
||||
ParcelableStatusUtils.INSTANCE.updateExtraInformation(result, details,
|
||||
mUserColorNameManager);
|
||||
getUserColorNameManager());
|
||||
Utils.setLastSeen(getContext(), result.mentions, System.currentTimeMillis());
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put(Statuses.IS_FAVORITE, true);
|
||||
|
@ -819,7 +707,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
if (!mCreatingFavoriteIds.contains(hashCode)) {
|
||||
mCreatingFavoriteIds.add(hashCode);
|
||||
}
|
||||
bus.post(new StatusListChangedEvent());
|
||||
getBus().post(new StatusListChangedEvent());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -841,8 +729,8 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
taskEvent.setSucceeded(false);
|
||||
Utils.showErrorMessage(getContext(), R.string.action_favoriting, result.getException(), true);
|
||||
}
|
||||
bus.post(taskEvent);
|
||||
bus.post(new StatusListChangedEvent());
|
||||
getBus().post(taskEvent);
|
||||
getBus().post(new StatusListChangedEvent());
|
||||
super.onPostExecute(result);
|
||||
}
|
||||
|
||||
|
@ -981,7 +869,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
if (succeed) {
|
||||
final String message = context.getString(R.string.subscribed_to_list, result.getData().name);
|
||||
Utils.showOkMessage(context, message, false);
|
||||
bus.post(new UserListSubscriptionEvent(UserListSubscriptionEvent.Action.SUBSCRIBE,
|
||||
getBus().post(new UserListSubscriptionEvent(UserListSubscriptionEvent.Action.SUBSCRIBE,
|
||||
result.getData()));
|
||||
} else {
|
||||
Utils.showErrorMessage(context, R.string.action_subscribing_to_list, result.getException(), true);
|
||||
|
@ -1031,7 +919,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
final ParcelableUserList userList = result.getData();
|
||||
final String message = context.getString(R.string.created_list, userList.name);
|
||||
Utils.showOkMessage(context, message, false);
|
||||
bus.post(new UserListCreatedEvent(userList));
|
||||
getBus().post(new UserListCreatedEvent(userList));
|
||||
} else {
|
||||
Utils.showErrorMessage(context, R.string.action_creating_list, result.getException(), true);
|
||||
}
|
||||
|
@ -1077,8 +965,8 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
if (succeed) {
|
||||
if (users.length == 1) {
|
||||
final ParcelableUser user = users[0];
|
||||
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
|
||||
final String displayName = mUserColorNameManager.getDisplayName(user.key,
|
||||
final boolean nameFirst = getPreferences().getBoolean(KEY_NAME_FIRST);
|
||||
final String displayName = getUserColorNameManager().getDisplayName(user.key,
|
||||
user.name, user.screen_name, nameFirst);
|
||||
message = context.getString(R.string.deleted_user_from_list, displayName,
|
||||
result.getData().name);
|
||||
|
@ -1087,7 +975,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
message = res.getQuantityString(R.plurals.deleted_N_users_from_list, users.length, users.length,
|
||||
result.getData().name);
|
||||
}
|
||||
bus.post(new UserListMembersChangedEvent(UserListMembersChangedEvent.Action.REMOVED,
|
||||
getBus().post(new UserListMembersChangedEvent(UserListMembersChangedEvent.Action.REMOVED,
|
||||
result.getData(), users));
|
||||
Utils.showInfoMessage(context, message, false);
|
||||
} else {
|
||||
|
@ -1295,7 +1183,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
if (!mDestroyingFavoriteIds.contains(hashCode)) {
|
||||
mDestroyingFavoriteIds.add(hashCode);
|
||||
}
|
||||
bus.post(new StatusListChangedEvent());
|
||||
getBus().post(new StatusListChangedEvent());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1318,8 +1206,8 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
taskEvent.setSucceeded(false);
|
||||
Utils.showErrorMessage(context, R.string.action_unfavoriting, result.getException(), true);
|
||||
}
|
||||
bus.post(taskEvent);
|
||||
bus.post(new StatusListChangedEvent());
|
||||
getBus().post(taskEvent);
|
||||
getBus().post(new StatusListChangedEvent());
|
||||
super.onPostExecute(result);
|
||||
}
|
||||
|
||||
|
@ -1352,7 +1240,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
if (result.hasData()) {
|
||||
final String message = context.getString(R.string.search_name_deleted, result.getData().getQuery());
|
||||
Utils.showOkMessage(context, message, false);
|
||||
bus.post(new SavedSearchDestroyedEvent(mAccountKey, mSearchId));
|
||||
getBus().post(new SavedSearchDestroyedEvent(mAccountKey, mSearchId));
|
||||
} else {
|
||||
Utils.showErrorMessage(context, R.string.action_deleting_search, result.getException(), false);
|
||||
}
|
||||
|
@ -1361,71 +1249,6 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
|
||||
}
|
||||
|
||||
class DestroyStatusTask extends ManagedAsyncTask<Object, Object, SingleResponse<ParcelableStatus>> {
|
||||
|
||||
private final UserKey mAccountKey;
|
||||
private final String mStatusId;
|
||||
|
||||
public DestroyStatusTask(final UserKey accountKey, final String statusId) {
|
||||
super(context);
|
||||
this.mAccountKey = accountKey;
|
||||
this.mStatusId = statusId;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SingleResponse<ParcelableStatus> doInBackground(final Object... params) {
|
||||
final AccountDetails details = AccountUtils.getAccountDetails(AccountManager.get(getContext()),
|
||||
mAccountKey);
|
||||
if (details == null) return SingleResponse.Companion.getInstance();
|
||||
final MicroBlog microBlog = AccountDetailsExtensionsKt.newMicroBlogInstance(details,
|
||||
getContext(), MicroBlog.class);
|
||||
if (microBlog == null) return SingleResponse.Companion.getInstance();
|
||||
ParcelableStatus status = null;
|
||||
MicroBlogException exception = null;
|
||||
try {
|
||||
status = ParcelableStatusUtils.INSTANCE.fromStatus(microBlog.destroyStatus(mStatusId),
|
||||
mAccountKey, false);
|
||||
ParcelableStatusUtils.INSTANCE.updateExtraInformation(status, details,
|
||||
mUserColorNameManager);
|
||||
} catch (final MicroBlogException e) {
|
||||
exception = e;
|
||||
}
|
||||
if (status != null || (exception.getErrorCode() == ErrorInfo.STATUS_NOT_FOUND)) {
|
||||
DataStoreUtils.deleteStatus(resolver, mAccountKey, mStatusId, status);
|
||||
DataStoreUtils.deleteActivityStatus(resolver, mAccountKey, mStatusId, status);
|
||||
}
|
||||
return SingleResponse.Companion.getInstance(status);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
super.onPreExecute();
|
||||
final int hashCode = calculateHashCode(mAccountKey, mStatusId);
|
||||
if (!mDestroyingStatusIds.contains(hashCode)) {
|
||||
mDestroyingStatusIds.add(hashCode);
|
||||
}
|
||||
bus.post(new StatusListChangedEvent());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(final SingleResponse<ParcelableStatus> result) {
|
||||
mDestroyingStatusIds.removeElement(calculateHashCode(mAccountKey, mStatusId));
|
||||
if (result.hasData()) {
|
||||
final ParcelableStatus status = result.getData();
|
||||
if (status.retweet_id != null) {
|
||||
Utils.showInfoMessage(context, R.string.retweet_cancelled, false);
|
||||
} else {
|
||||
Utils.showInfoMessage(context, R.string.status_deleted, false);
|
||||
}
|
||||
bus.post(new StatusDestroyedEvent(status));
|
||||
} else {
|
||||
Utils.showErrorMessage(context, R.string.action_deleting, result.getException(), true);
|
||||
}
|
||||
super.onPostExecute(result);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class DestroyUserListSubscriptionTask extends ManagedAsyncTask<Object, Object, SingleResponse<ParcelableUserList>> {
|
||||
|
||||
private final UserKey mAccountKey;
|
||||
|
@ -1457,7 +1280,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
if (succeed) {
|
||||
final String message = context.getString(R.string.unsubscribed_from_list, result.getData().name);
|
||||
Utils.showOkMessage(context, message, false);
|
||||
bus.post(new UserListSubscriptionEvent(UserListSubscriptionEvent.Action.UNSUBSCRIBE,
|
||||
getBus().post(new UserListSubscriptionEvent(UserListSubscriptionEvent.Action.UNSUBSCRIBE,
|
||||
result.getData()));
|
||||
} else {
|
||||
Utils.showErrorMessage(context, R.string.action_unsubscribing_from_list, result.getException(), true);
|
||||
|
@ -1499,7 +1322,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
if (succeed) {
|
||||
final String message = context.getString(R.string.deleted_list, result.getData().name);
|
||||
Utils.showInfoMessage(context, message, false);
|
||||
bus.post(new UserListDestroyedEvent(result.getData()));
|
||||
getBus().post(new UserListDestroyedEvent(result.getData()));
|
||||
} else {
|
||||
Utils.showErrorMessage(context, R.string.action_deleting, result.getException(), true);
|
||||
}
|
||||
|
@ -1609,7 +1432,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
final ParcelableStatus result = ParcelableStatusUtils.INSTANCE.fromStatus(microBlog.retweetStatus(mStatusId),
|
||||
mAccountKey, false);
|
||||
ParcelableStatusUtils.INSTANCE.updateExtraInformation(result, details,
|
||||
mUserColorNameManager);
|
||||
getUserColorNameManager());
|
||||
Utils.setLastSeen(getContext(), result.mentions, System.currentTimeMillis());
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put(Statuses.MY_RETWEET_ID, result.id);
|
||||
|
@ -1657,7 +1480,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
if (!mCreatingRetweetIds.contains(hashCode)) {
|
||||
mCreatingRetweetIds.add(hashCode);
|
||||
}
|
||||
bus.post(new StatusListChangedEvent());
|
||||
getBus().post(new StatusListChangedEvent());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1671,7 +1494,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
HotMobiLogger.getInstance(getContext()).log(mAccountKey, event);
|
||||
// END HotMobi
|
||||
|
||||
bus.post(new StatusRetweetedEvent(status));
|
||||
getBus().post(new StatusRetweetedEvent(status));
|
||||
} else {
|
||||
Utils.showErrorMessage(getContext(), R.string.action_retweeting, result.getException(), true);
|
||||
}
|
||||
|
@ -1717,7 +1540,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
|
|||
if (result.hasData()) {
|
||||
final String message = mContext.getString(R.string.updated_list_details, result.getData().name);
|
||||
Utils.showOkMessage(mContext, message, false);
|
||||
bus.post(new UserListUpdatedEvent(result.getData()));
|
||||
getBus().post(new UserListUpdatedEvent(result.getData()));
|
||||
} else {
|
||||
Utils.showErrorMessage(mContext, R.string.action_updating_details, result.getException(), true);
|
||||
}
|
||||
|
|
|
@ -111,7 +111,7 @@ public class TwitterWrapper implements Constants {
|
|||
}
|
||||
|
||||
@NonNull
|
||||
public static User showUser(final MicroBlog twitter, final String id, final String screenName,
|
||||
public static User showUser(@NonNull final MicroBlog twitter, final String id, final String screenName,
|
||||
final String accountType) throws MicroBlogException {
|
||||
if (id != null) {
|
||||
if (AccountType.FANFOU.equals(accountType)) {
|
||||
|
@ -128,7 +128,7 @@ public class TwitterWrapper implements Constants {
|
|||
}
|
||||
|
||||
@NonNull
|
||||
public static User showUserAlternative(final MicroBlog twitter, final String id,
|
||||
public static User showUserAlternative(@NonNull final MicroBlog twitter, final String id,
|
||||
final String screenName)
|
||||
throws MicroBlogException {
|
||||
final String searchScreenName;
|
||||
|
@ -162,7 +162,7 @@ public class TwitterWrapper implements Constants {
|
|||
}
|
||||
|
||||
@NonNull
|
||||
public static User tryShowUser(final MicroBlog twitter, final String id, final String screenName,
|
||||
public static User tryShowUser(@NonNull final MicroBlog twitter, final String id, final String screenName,
|
||||
String accountType)
|
||||
throws MicroBlogException {
|
||||
try {
|
||||
|
@ -176,8 +176,10 @@ public class TwitterWrapper implements Constants {
|
|||
}
|
||||
}
|
||||
|
||||
public static void updateProfileBannerImage(final Context context, final MicroBlog twitter,
|
||||
final Uri imageUri, final boolean deleteImage)
|
||||
public static void updateProfileBannerImage(@NonNull final Context context,
|
||||
@NonNull final MicroBlog twitter,
|
||||
@NonNull final Uri imageUri,
|
||||
final boolean deleteImage)
|
||||
throws IOException, MicroBlogException {
|
||||
FileBody fileBody = null;
|
||||
try {
|
||||
|
@ -215,8 +217,8 @@ public class TwitterWrapper implements Constants {
|
|||
}
|
||||
}
|
||||
|
||||
public static User updateProfileImage(final Context context, final MicroBlog twitter,
|
||||
final Uri imageUri, final boolean deleteImage)
|
||||
public static User updateProfileImage(@NonNull final Context context, @NonNull final MicroBlog twitter,
|
||||
@NonNull final Uri imageUri, final boolean deleteImage)
|
||||
throws IOException, MicroBlogException {
|
||||
FileBody fileBody = null;
|
||||
try {
|
||||
|
|
|
@ -44,9 +44,8 @@ class ColorPickerDialogActivity : BaseActivity(), Callback {
|
|||
}
|
||||
|
||||
override fun onColorSelected(color: Int) {
|
||||
val intent = Intent()
|
||||
intent.putExtra(EXTRA_COLOR, color)
|
||||
setResult(Activity.RESULT_OK, intent)
|
||||
setResult(Activity.RESULT_OK, Intent().putExtra(EXTRA_COLOR, color)
|
||||
.putExtra(EXTRA_EXTRAS, intent.getBundleExtra(EXTRA_EXTRAS)))
|
||||
finish()
|
||||
}
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ import android.widget.CompoundButton
|
|||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.adapter.iface.IBaseAdapter
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.util.AccountUtils
|
||||
import org.mariotaku.twidere.util.MediaLoaderWrapper
|
||||
import org.mariotaku.twidere.util.dagger.GeneralComponentHelper
|
||||
|
@ -37,6 +38,15 @@ class AccountDetailsAdapter(context: Context) : ArrayAdapter<AccountDetails>(con
|
|||
@Inject
|
||||
lateinit override var mediaLoader: MediaLoaderWrapper
|
||||
|
||||
override val linkHighlightOption: Int
|
||||
get() = 0
|
||||
|
||||
override var textSize: Float = 0f
|
||||
|
||||
override var isDisplayNameFirst: Boolean = true
|
||||
|
||||
override var isShowAccountColor: Boolean = true
|
||||
|
||||
override var isProfileImageDisplayed: Boolean = false
|
||||
private var sortEnabled: Boolean = false
|
||||
private var switchEnabled: Boolean = false
|
||||
|
@ -77,30 +87,10 @@ class AccountDetailsAdapter(context: Context) : ArrayAdapter<AccountDetails>(con
|
|||
return view
|
||||
}
|
||||
|
||||
override val linkHighlightOption: Int
|
||||
get() = 0
|
||||
|
||||
override fun setLinkHighlightOption(option: String) {
|
||||
|
||||
}
|
||||
|
||||
override var textSize: Float
|
||||
get() = 0f
|
||||
set(textSize) {
|
||||
|
||||
}
|
||||
|
||||
override var isDisplayNameFirst: Boolean
|
||||
get() = false
|
||||
set(nameFirst) {
|
||||
|
||||
}
|
||||
|
||||
override var isShowAccountColor: Boolean
|
||||
get() = false
|
||||
set(show) {
|
||||
|
||||
}
|
||||
|
||||
override fun hasStableIds(): Boolean {
|
||||
return true
|
||||
|
@ -128,4 +118,12 @@ class AccountDetailsAdapter(context: Context) : ArrayAdapter<AccountDetails>(con
|
|||
insert(fromItem, to)
|
||||
}
|
||||
|
||||
fun findItem(key: UserKey): AccountDetails? {
|
||||
(0 until count).forEach { i ->
|
||||
val item = getItem(i)
|
||||
if (key == item.key) return item
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -16,6 +16,8 @@ import android.view.ContextMenu.ContextMenuInfo
|
|||
import android.widget.AdapterView
|
||||
import android.widget.AdapterView.AdapterContextMenuInfo
|
||||
import kotlinx.android.synthetic.main.layout_draggable_list_with_empty_view.*
|
||||
import org.mariotaku.ktextension.Bundle
|
||||
import org.mariotaku.ktextension.set
|
||||
import org.mariotaku.sqliteqb.library.Expression
|
||||
import org.mariotaku.twidere.Constants.*
|
||||
import org.mariotaku.twidere.R
|
||||
|
@ -23,7 +25,7 @@ import org.mariotaku.twidere.activity.ColorPickerDialogActivity
|
|||
import org.mariotaku.twidere.activity.SignInActivity
|
||||
import org.mariotaku.twidere.adapter.AccountDetailsAdapter
|
||||
import org.mariotaku.twidere.annotation.Referral
|
||||
import org.mariotaku.twidere.constant.IntentConstants
|
||||
import org.mariotaku.twidere.constant.IntentConstants.EXTRA_ACCOUNT_KEY
|
||||
import org.mariotaku.twidere.constant.SharedPreferenceConstants.KEY_NEW_DOCUMENT_API
|
||||
import org.mariotaku.twidere.extension.getAccountKey
|
||||
import org.mariotaku.twidere.extension.setActivated
|
||||
|
@ -31,6 +33,7 @@ import org.mariotaku.twidere.extension.setColor
|
|||
import org.mariotaku.twidere.extension.setPosition
|
||||
import org.mariotaku.twidere.loader.AccountDetailsLoader
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.*
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages.Inbox
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages.Outbox
|
||||
|
@ -46,7 +49,6 @@ class AccountsManagerFragment : BaseSupportFragment(), LoaderManager.LoaderCallb
|
|||
AdapterView.OnItemClickListener {
|
||||
|
||||
private lateinit var adapter: AccountDetailsAdapter
|
||||
private var selectedAccount: AccountDetails? = null
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
super.onActivityCreated(savedInstanceState)
|
||||
|
@ -85,10 +87,15 @@ class AccountsManagerFragment : BaseSupportFragment(), LoaderManager.LoaderCallb
|
|||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
when (requestCode) {
|
||||
REQUEST_SET_COLOR -> {
|
||||
if (resultCode != Activity.RESULT_OK || data == null || selectedAccount == null)
|
||||
if (resultCode != Activity.RESULT_OK || data == null)
|
||||
return
|
||||
val am = AccountManager.get(context)
|
||||
selectedAccount?.account?.setColor(am, data.getIntExtra(EXTRA_COLOR, Color.WHITE))
|
||||
val accountKey: UserKey = data.getBundleExtra(EXTRA_EXTRAS).getParcelable(EXTRA_ACCOUNT_KEY) ?: return
|
||||
val color = data.getIntExtra(EXTRA_COLOR, Color.WHITE)
|
||||
val details = adapter.findItem(accountKey) ?: return
|
||||
details.color = color
|
||||
details.account.setColor(am, color)
|
||||
adapter.notifyDataSetChanged()
|
||||
return
|
||||
}
|
||||
}
|
||||
|
@ -113,11 +120,13 @@ class AccountsManagerFragment : BaseSupportFragment(), LoaderManager.LoaderCallb
|
|||
override fun onContextItemSelected(item: MenuItem?): Boolean {
|
||||
val menuInfo = item!!.menuInfo as? AdapterContextMenuInfo ?: return false
|
||||
val details = adapter.getItem(menuInfo.position) ?: return false
|
||||
selectedAccount = details
|
||||
when (item.itemId) {
|
||||
R.id.set_color -> {
|
||||
val intent = Intent(activity, ColorPickerDialogActivity::class.java)
|
||||
intent.putExtra(EXTRA_COLOR, details.color)
|
||||
intent.putExtra(EXTRA_EXTRAS, Bundle {
|
||||
this[EXTRA_ACCOUNT_KEY] = details.key
|
||||
})
|
||||
intent.putExtra(EXTRA_ALPHA_SLIDER, false)
|
||||
startActivityForResult(intent, REQUEST_SET_COLOR)
|
||||
}
|
||||
|
@ -174,7 +183,7 @@ class AccountsManagerFragment : BaseSupportFragment(), LoaderManager.LoaderCallb
|
|||
class AccountDeletionDialogFragment : BaseDialogFragment(), DialogInterface.OnClickListener {
|
||||
|
||||
override fun onClick(dialog: DialogInterface, which: Int) {
|
||||
val account: Account = arguments.getParcelable(IntentConstants.EXTRA_ACCOUNT)
|
||||
val account: Account = arguments.getParcelable(EXTRA_ACCOUNT)
|
||||
val resolver = context.contentResolver
|
||||
val am = AccountManager.get(context)
|
||||
when (which) {
|
||||
|
|
|
@ -60,8 +60,8 @@ import org.mariotaku.twidere.model.util.ParcelableUserUtils
|
|||
import org.mariotaku.twidere.task.UpdateAccountInfoTask
|
||||
import org.mariotaku.twidere.task.UpdateProfileBackgroundImageTask
|
||||
import org.mariotaku.twidere.task.UpdateProfileBannerImageTask
|
||||
import org.mariotaku.twidere.task.UpdateProfileImageTask
|
||||
import org.mariotaku.twidere.util.*
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper.UpdateProfileImageTask
|
||||
import org.mariotaku.twidere.view.iface.IExtendedView.OnSizeChangedListener
|
||||
|
||||
class UserProfileEditorFragment : BaseSupportFragment(), OnSizeChangedListener, TextWatcher,
|
||||
|
@ -390,9 +390,9 @@ class UserProfileEditorFragment : BaseSupportFragment(), OnSizeChangedListener,
|
|||
return false
|
||||
}
|
||||
|
||||
override fun afterExecute(callback: UserProfileEditorFragment?, result: SingleResponse<ParcelableUser>) {
|
||||
if (callback == null) return
|
||||
val activity = callback.activity ?: return
|
||||
override fun afterExecute(handler: UserProfileEditorFragment?, result: SingleResponse<ParcelableUser>) {
|
||||
if (handler == null) return
|
||||
val activity = handler.activity ?: return
|
||||
if (result.hasData()) {
|
||||
val account: AccountDetails? = result.extras.getParcelable(EXTRA_ACCOUNT)
|
||||
if (account != null) {
|
||||
|
@ -401,7 +401,7 @@ class UserProfileEditorFragment : BaseSupportFragment(), OnSizeChangedListener,
|
|||
TaskStarter.execute(task)
|
||||
}
|
||||
}
|
||||
callback.executeAfterFragmentResumed { fragment ->
|
||||
handler.executeAfterFragmentResumed { fragment ->
|
||||
val f = (fragment as UserProfileEditorFragment).fragmentManager.findFragmentByTag(DIALOG_FRAGMENT_TAG)
|
||||
if (f is DialogFragment) {
|
||||
f.dismissAllowingStateLoss()
|
||||
|
@ -432,8 +432,8 @@ class UserProfileEditorFragment : BaseSupportFragment(), OnSizeChangedListener,
|
|||
return TwitterWrapper.deleteProfileBannerImage(activity, accountKey)
|
||||
}
|
||||
|
||||
override fun afterExecute(callback: UserProfileEditorFragment?, result: SingleResponse<Boolean>) {
|
||||
super.afterExecute(callback, result)
|
||||
override fun afterExecute(handler: UserProfileEditorFragment?, result: SingleResponse<Boolean>) {
|
||||
super.afterExecute(handler, result)
|
||||
if (result.data != null) {
|
||||
getUserInfo()
|
||||
Toast.makeText(activity, R.string.profile_banner_image_updated, Toast.LENGTH_SHORT).show()
|
||||
|
@ -454,8 +454,8 @@ class UserProfileEditorFragment : BaseSupportFragment(), OnSizeChangedListener,
|
|||
private inner class UpdateProfileBannerImageTaskInternal(context: Context, accountKey: UserKey,
|
||||
imageUri: Uri, deleteImage: Boolean) : UpdateProfileBannerImageTask<UserProfileEditorFragment>(context, accountKey, imageUri, deleteImage) {
|
||||
|
||||
override fun afterExecute(callback: UserProfileEditorFragment?, result: SingleResponse<ParcelableUser>?) {
|
||||
super.afterExecute(callback, result)
|
||||
override fun afterExecute(handler: UserProfileEditorFragment?, result: SingleResponse<ParcelableUser>?) {
|
||||
super.afterExecute(handler, result)
|
||||
setUpdateState(false)
|
||||
getUserInfo()
|
||||
}
|
||||
|
@ -467,12 +467,17 @@ class UserProfileEditorFragment : BaseSupportFragment(), OnSizeChangedListener,
|
|||
|
||||
}
|
||||
|
||||
private inner class UpdateProfileBackgroundImageTaskInternal(context: Context, accountKey: UserKey,
|
||||
imageUri: Uri, tile: Boolean,
|
||||
deleteImage: Boolean) : UpdateProfileBackgroundImageTask<UserProfileEditorFragment>(context, accountKey, imageUri, tile, deleteImage) {
|
||||
private inner class UpdateProfileBackgroundImageTaskInternal(
|
||||
context: Context,
|
||||
accountKey: UserKey,
|
||||
imageUri: Uri,
|
||||
tile: Boolean,
|
||||
deleteImage: Boolean
|
||||
) : UpdateProfileBackgroundImageTask<UserProfileEditorFragment>(context, accountKey, imageUri,
|
||||
tile, deleteImage) {
|
||||
|
||||
override fun afterExecute(callback: UserProfileEditorFragment?, result: SingleResponse<ParcelableUser>?) {
|
||||
super.afterExecute(callback, result)
|
||||
override fun afterExecute(handler: UserProfileEditorFragment?, result: SingleResponse<ParcelableUser>) {
|
||||
super.afterExecute(handler, result)
|
||||
setUpdateState(false)
|
||||
getUserInfo()
|
||||
}
|
||||
|
@ -484,12 +489,16 @@ class UserProfileEditorFragment : BaseSupportFragment(), OnSizeChangedListener,
|
|||
|
||||
}
|
||||
|
||||
private inner class UpdateProfileImageTaskInternal(context: Context, accountKey: UserKey,
|
||||
imageUri: Uri, deleteImage: Boolean) : UpdateProfileImageTask<UserProfileEditorFragment>(context, accountKey, imageUri, deleteImage) {
|
||||
private inner class UpdateProfileImageTaskInternal(
|
||||
context: Context,
|
||||
accountKey: UserKey,
|
||||
imageUri: Uri,
|
||||
deleteImage: Boolean
|
||||
) : UpdateProfileImageTask<UserProfileEditorFragment>(context, accountKey, imageUri, deleteImage) {
|
||||
|
||||
override fun afterExecute(callback: UserProfileEditorFragment?, result: SingleResponse<ParcelableUser>?) {
|
||||
super.afterExecute(callback, result)
|
||||
if (result != null && result.data != null) {
|
||||
override fun afterExecute(handler: UserProfileEditorFragment?, result: SingleResponse<ParcelableUser>) {
|
||||
super.afterExecute(handler, result)
|
||||
if (result.data != null) {
|
||||
displayUser(result.data)
|
||||
}
|
||||
setUpdateState(false)
|
||||
|
|
|
@ -4,6 +4,7 @@ import android.accounts.AccountManager
|
|||
import android.content.Context
|
||||
import com.squareup.otto.Bus
|
||||
import org.mariotaku.abstask.library.AbstractTask
|
||||
import org.mariotaku.kpreferences.KPreferences
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.microblog.library.twitter.model.User
|
||||
|
@ -36,6 +37,8 @@ abstract class AbsFriendshipOperationTask(
|
|||
@Inject
|
||||
lateinit var preferences: SharedPreferencesWrapper
|
||||
@Inject
|
||||
lateinit var kPreferences: KPreferences
|
||||
@Inject
|
||||
lateinit var manager: UserColorNameManager
|
||||
|
||||
init {
|
||||
|
@ -51,7 +54,7 @@ abstract class AbsFriendshipOperationTask(
|
|||
bus.post(event)
|
||||
}
|
||||
|
||||
override fun afterExecute(callback: Any?, result: SingleResponse<ParcelableUser>?) {
|
||||
override fun afterExecute(handler: Any?, result: SingleResponse<ParcelableUser>?) {
|
||||
twitter.removeUpdatingRelationshipId(params.accountKey, params.userKey)
|
||||
val event = FriendshipTaskEvent(action, params.accountKey,
|
||||
params.userKey)
|
|
@ -0,0 +1,46 @@
|
|||
package org.mariotaku.twidere.task
|
||||
|
||||
import android.content.Context
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.microblog.library.twitter.model.User
|
||||
import org.mariotaku.twidere.Constants
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.annotation.AccountType
|
||||
import org.mariotaku.twidere.constant.nameFirstKey
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.model.message.FriendshipTaskEvent
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
class AcceptFriendshipTask(context: Context) : AbsFriendshipOperationTask(context, FriendshipTaskEvent.Action.ACCEPT), Constants {
|
||||
|
||||
@Throws(MicroBlogException::class)
|
||||
override fun perform(twitter: MicroBlog, details: AccountDetails, args: AbsFriendshipOperationTask.Arguments): User {
|
||||
when (details.type) {
|
||||
AccountType.FANFOU -> {
|
||||
return twitter.acceptFanfouFriendship(args.userKey.id)
|
||||
}
|
||||
}
|
||||
return twitter.acceptFriendship(args.userKey.id)
|
||||
}
|
||||
|
||||
override fun succeededWorker(twitter: MicroBlog, details: AccountDetails, args: AbsFriendshipOperationTask.Arguments, user: ParcelableUser) {
|
||||
Utils.setLastSeen(context, user.key, System.currentTimeMillis())
|
||||
}
|
||||
|
||||
override fun showErrorMessage(params: AbsFriendshipOperationTask.Arguments, exception: Exception?) {
|
||||
Utils.showErrorMessage(context, R.string.action_accepting_follow_request, exception, false)
|
||||
}
|
||||
|
||||
override fun showSucceededMessage(params: AbsFriendshipOperationTask.Arguments, user: ParcelableUser) {
|
||||
val nameFirst = kPreferences[nameFirstKey]
|
||||
val message = context.getString(R.string.accepted_users_follow_request,
|
||||
manager.getDisplayName(user, nameFirst))
|
||||
Utils.showOkMessage(context, message, false)
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
package org.mariotaku.twidere.task
|
||||
|
||||
import android.content.Context
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.SharedPreferenceConstants.KEY_NAME_FIRST
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.model.ParcelableUserList
|
||||
import org.mariotaku.twidere.model.SingleResponse
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.message.UserListMembersChangedEvent
|
||||
import org.mariotaku.twidere.model.util.ParcelableUserListUtils
|
||||
import org.mariotaku.twidere.util.MicroBlogAPIFactory
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 2016/12/9.
|
||||
*/
|
||||
class AddUserListMembersTask(
|
||||
context: Context,
|
||||
private val accountKey: UserKey,
|
||||
private val listId: String,
|
||||
private val users: Array<ParcelableUser>
|
||||
) : ManagedAsyncTask<Any, Any, SingleResponse<ParcelableUserList>>(context) {
|
||||
|
||||
override fun doInBackground(vararg params: Any): SingleResponse<ParcelableUserList> {
|
||||
val microBlog = MicroBlogAPIFactory.getInstance(context, accountKey) ?: return SingleResponse.getInstance<ParcelableUserList>()
|
||||
try {
|
||||
val userIds = users.map(ParcelableUser::key).toTypedArray()
|
||||
val result = microBlog.addUserListMembers(listId, UserKey.getIds(userIds))
|
||||
val list = ParcelableUserListUtils.from(result, accountKey)
|
||||
return SingleResponse.getInstance(list)
|
||||
} catch (e: MicroBlogException) {
|
||||
return SingleResponse.getInstance<ParcelableUserList>(e)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun onPostExecute(result: SingleResponse<ParcelableUserList>) {
|
||||
if (result.data != null) {
|
||||
val message: String
|
||||
if (users.size == 1) {
|
||||
val user = users.first()
|
||||
val nameFirst = preferences.getBoolean(KEY_NAME_FIRST)
|
||||
val displayName = userColorNameManager.getDisplayName(user.key, user.name,
|
||||
user.screen_name, nameFirst)
|
||||
message = context.getString(R.string.added_user_to_list, displayName, result.data.name)
|
||||
} else {
|
||||
val res = context.resources
|
||||
message = res.getQuantityString(R.plurals.added_N_users_to_list, users.size, users.size,
|
||||
result.data.name)
|
||||
}
|
||||
Utils.showOkMessage(context, message, false)
|
||||
bus.post(UserListMembersChangedEvent(UserListMembersChangedEvent.Action.ADDED, result.data,
|
||||
users))
|
||||
} else {
|
||||
Utils.showErrorMessage(context, R.string.action_adding_member, result.exception, true)
|
||||
}
|
||||
super.onPostExecute(result)
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
package org.mariotaku.twidere.task
|
||||
|
||||
import android.content.Context
|
||||
import android.text.TextUtils
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.microblog.library.twitter.model.User
|
||||
import org.mariotaku.twidere.Constants
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.TwidereConstants.USER_TYPE_FANFOU_COM
|
||||
import org.mariotaku.twidere.annotation.AccountType
|
||||
import org.mariotaku.twidere.constant.nameFirstKey
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.model.message.FriendshipTaskEvent
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
class CreateFriendshipTask(context: Context) : AbsFriendshipOperationTask(context, FriendshipTaskEvent.Action.FOLLOW), Constants {
|
||||
|
||||
@Throws(MicroBlogException::class)
|
||||
override fun perform(twitter: MicroBlog, details: AccountDetails, args: AbsFriendshipOperationTask.Arguments): User {
|
||||
when (details.type) {
|
||||
AccountType.FANFOU -> {
|
||||
return twitter.createFanfouFriendship(args.userKey.id)
|
||||
}
|
||||
}
|
||||
return twitter.createFriendship(args.userKey.id)
|
||||
}
|
||||
|
||||
override fun succeededWorker(twitter: MicroBlog, details: AccountDetails, args: AbsFriendshipOperationTask.Arguments, user: ParcelableUser) {
|
||||
user.is_following = true
|
||||
Utils.setLastSeen(context, user.key, System.currentTimeMillis())
|
||||
}
|
||||
|
||||
override fun showErrorMessage(params: AbsFriendshipOperationTask.Arguments, exception: Exception?) {
|
||||
if (USER_TYPE_FANFOU_COM == params.accountKey.host) {
|
||||
// Fanfou returns 403 for follow request
|
||||
if (exception is MicroBlogException) {
|
||||
if (exception.statusCode == 403 && !TextUtils.isEmpty(exception.errorMessage)) {
|
||||
Utils.showErrorMessage(context, exception.errorMessage, false)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
Utils.showErrorMessage(context, R.string.action_following, exception, false)
|
||||
}
|
||||
|
||||
override fun showSucceededMessage(params: AbsFriendshipOperationTask.Arguments, user: ParcelableUser) {
|
||||
val nameFirst = kPreferences[nameFirstKey]
|
||||
val message: String
|
||||
if (user.is_protected) {
|
||||
message = context.getString(R.string.sent_follow_request_to_user,
|
||||
manager.getDisplayName(user, nameFirst))
|
||||
} else {
|
||||
message = context.getString(R.string.followed_user,
|
||||
manager.getDisplayName(user, nameFirst))
|
||||
}
|
||||
Utils.showOkMessage(context, message, false)
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,78 @@
|
|||
package org.mariotaku.twidere.task
|
||||
|
||||
import android.content.ContentValues
|
||||
import android.content.Context
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.microblog.library.twitter.model.User
|
||||
import org.mariotaku.sqliteqb.library.Expression
|
||||
import org.mariotaku.twidere.Constants
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.annotation.AccountType
|
||||
import org.mariotaku.twidere.constant.nameFirstKey
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.model.message.FriendshipTaskEvent
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.*
|
||||
import org.mariotaku.twidere.util.DataStoreUtils
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
open class CreateUserBlockTask(context: Context) : AbsFriendshipOperationTask(context, FriendshipTaskEvent.Action.BLOCK), Constants {
|
||||
|
||||
@Throws(MicroBlogException::class)
|
||||
override fun perform(twitter: MicroBlog, details: AccountDetails,
|
||||
args: AbsFriendshipOperationTask.Arguments): User {
|
||||
when (details.type) {
|
||||
AccountType.FANFOU -> {
|
||||
return twitter.createFanfouBlock(args.userKey.id)
|
||||
}
|
||||
}
|
||||
return twitter.createBlock(args.userKey.id)
|
||||
}
|
||||
|
||||
override fun succeededWorker(twitter: MicroBlog,
|
||||
details: AccountDetails,
|
||||
args: AbsFriendshipOperationTask.Arguments, user: ParcelableUser) {
|
||||
val resolver = context.contentResolver
|
||||
Utils.setLastSeen(context, args.userKey, -1)
|
||||
for (uri in DataStoreUtils.STATUSES_URIS) {
|
||||
val where = Expression.and(
|
||||
Expression.equalsArgs(Statuses.ACCOUNT_KEY),
|
||||
Expression.equalsArgs(Statuses.USER_KEY)
|
||||
)
|
||||
val whereArgs = arrayOf(args.accountKey.toString(), args.userKey.toString())
|
||||
resolver.delete(uri, where.sql, whereArgs)
|
||||
}
|
||||
for (uri in DataStoreUtils.ACTIVITIES_URIS) {
|
||||
val where = Expression.and(
|
||||
Expression.equalsArgs(Activities.ACCOUNT_KEY),
|
||||
Expression.equalsArgs(Activities.STATUS_USER_KEY)
|
||||
)
|
||||
val whereArgs = arrayOf(args.accountKey.toString(), args.userKey.toString())
|
||||
resolver.delete(uri, where.sql, whereArgs)
|
||||
}
|
||||
// I bet you don't want to see this user in your auto complete list.
|
||||
val values = ContentValues()
|
||||
values.put(CachedRelationships.ACCOUNT_KEY, args.accountKey.toString())
|
||||
values.put(CachedRelationships.USER_KEY, args.userKey.toString())
|
||||
values.put(CachedRelationships.BLOCKING, true)
|
||||
values.put(CachedRelationships.FOLLOWING, false)
|
||||
values.put(CachedRelationships.FOLLOWED_BY, false)
|
||||
resolver.insert(CachedRelationships.CONTENT_URI, values)
|
||||
}
|
||||
|
||||
override fun showSucceededMessage(params: AbsFriendshipOperationTask.Arguments, user: ParcelableUser) {
|
||||
val nameFirst = kPreferences[nameFirstKey]
|
||||
val message = context.getString(R.string.blocked_user, manager.getDisplayName(user,
|
||||
nameFirst))
|
||||
Utils.showInfoMessage(context, message, false)
|
||||
|
||||
}
|
||||
|
||||
override fun showErrorMessage(params: AbsFriendshipOperationTask.Arguments, exception: Exception?) {
|
||||
Utils.showErrorMessage(context, R.string.action_blocking, exception, true)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
package org.mariotaku.twidere.task
|
||||
|
||||
import android.content.ContentValues
|
||||
import android.content.Context
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.microblog.library.twitter.model.User
|
||||
import org.mariotaku.sqliteqb.library.Expression
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.nameFirstKey
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.model.message.FriendshipTaskEvent
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.*
|
||||
import org.mariotaku.twidere.util.DataStoreUtils
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
class CreateUserMuteTask(context: Context) : AbsFriendshipOperationTask(context, FriendshipTaskEvent.Action.MUTE) {
|
||||
|
||||
@Throws(MicroBlogException::class)
|
||||
override fun perform(twitter: MicroBlog, details: AccountDetails,
|
||||
args: AbsFriendshipOperationTask.Arguments): User {
|
||||
return twitter.createMute(args.userKey.id)
|
||||
}
|
||||
|
||||
override fun succeededWorker(twitter: MicroBlog,
|
||||
details: AccountDetails,
|
||||
args: AbsFriendshipOperationTask.Arguments, user: ParcelableUser) {
|
||||
val resolver = context.contentResolver
|
||||
Utils.setLastSeen(context, args.userKey, -1)
|
||||
for (uri in DataStoreUtils.STATUSES_URIS) {
|
||||
val where = Expression.and(
|
||||
Expression.equalsArgs(Statuses.ACCOUNT_KEY),
|
||||
Expression.equalsArgs(Statuses.USER_KEY)
|
||||
)
|
||||
val whereArgs = arrayOf(args.accountKey.toString(), args.userKey.toString())
|
||||
resolver.delete(uri, where.sql, whereArgs)
|
||||
}
|
||||
if (!user.is_following) {
|
||||
for (uri in DataStoreUtils.ACTIVITIES_URIS) {
|
||||
val where = Expression.and(
|
||||
Expression.equalsArgs(Activities.ACCOUNT_KEY),
|
||||
Expression.equalsArgs(Activities.STATUS_USER_KEY)
|
||||
)
|
||||
val whereArgs = arrayOf(args.accountKey.toString(), args.userKey.toString())
|
||||
resolver.delete(uri, where.sql, whereArgs)
|
||||
}
|
||||
}
|
||||
// I bet you don't want to see this user in your auto complete list.
|
||||
val values = ContentValues()
|
||||
values.put(CachedRelationships.ACCOUNT_KEY, args.accountKey.toString())
|
||||
values.put(CachedRelationships.USER_KEY, args.userKey.toString())
|
||||
values.put(CachedRelationships.MUTING, true)
|
||||
resolver.insert(CachedRelationships.CONTENT_URI, values)
|
||||
}
|
||||
|
||||
override fun showSucceededMessage(params: AbsFriendshipOperationTask.Arguments, user: ParcelableUser) {
|
||||
val nameFirst = kPreferences[nameFirstKey]
|
||||
val message = context.getString(R.string.muted_user, manager.getDisplayName(user,
|
||||
nameFirst))
|
||||
Utils.showInfoMessage(context, message, false)
|
||||
|
||||
}
|
||||
|
||||
override fun showErrorMessage(params: AbsFriendshipOperationTask.Arguments, exception: Exception?) {
|
||||
Utils.showErrorMessage(context, R.string.action_muting, exception, true)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
package org.mariotaku.twidere.task
|
||||
|
||||
import android.content.Context
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.microblog.library.twitter.model.User
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.annotation.AccountType
|
||||
import org.mariotaku.twidere.constant.nameFirstKey
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.model.message.FriendshipTaskEvent
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
class DenyFriendshipTask(context: Context) : AbsFriendshipOperationTask(context, FriendshipTaskEvent.Action.DENY) {
|
||||
|
||||
@Throws(MicroBlogException::class)
|
||||
override fun perform(twitter: MicroBlog, details: AccountDetails, args: AbsFriendshipOperationTask.Arguments): User {
|
||||
when (details.type) {
|
||||
AccountType.FANFOU -> {
|
||||
return twitter.denyFanfouFriendship(args.userKey.id)
|
||||
}
|
||||
}
|
||||
return twitter.denyFriendship(args.userKey.id)
|
||||
}
|
||||
|
||||
override fun succeededWorker(twitter: MicroBlog, details: AccountDetails, args: AbsFriendshipOperationTask.Arguments, user: ParcelableUser) {
|
||||
Utils.setLastSeen(context, user.key, -1)
|
||||
}
|
||||
|
||||
override fun showErrorMessage(params: AbsFriendshipOperationTask.Arguments, exception: Exception?) {
|
||||
Utils.showErrorMessage(context, R.string.action_denying_follow_request, exception, false)
|
||||
}
|
||||
|
||||
override fun showSucceededMessage(params: AbsFriendshipOperationTask.Arguments, user: ParcelableUser) {
|
||||
val nameFirst = kPreferences[nameFirstKey]
|
||||
val message = context.getString(R.string.denied_users_follow_request,
|
||||
manager.getDisplayName(user, nameFirst))
|
||||
Utils.showOkMessage(context, message, false)
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
package org.mariotaku.twidere.task
|
||||
|
||||
import android.content.Context
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.microblog.library.twitter.model.User
|
||||
import org.mariotaku.sqliteqb.library.Expression
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.annotation.AccountType
|
||||
import org.mariotaku.twidere.constant.nameFirstKey
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.model.message.FriendshipTaskEvent
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
class DestroyFriendshipTask(context: Context) : AbsFriendshipOperationTask(context, FriendshipTaskEvent.Action.UNFOLLOW) {
|
||||
|
||||
@Throws(MicroBlogException::class)
|
||||
override fun perform(twitter: MicroBlog, details: AccountDetails, args: AbsFriendshipOperationTask.Arguments): User {
|
||||
when (details.type) {
|
||||
AccountType.FANFOU -> {
|
||||
return twitter.destroyFanfouFriendship(args.userKey.id)
|
||||
}
|
||||
}
|
||||
return twitter.destroyFriendship(args.userKey.id)
|
||||
}
|
||||
|
||||
override fun succeededWorker(twitter: MicroBlog, details: AccountDetails, args: AbsFriendshipOperationTask.Arguments, user: ParcelableUser) {
|
||||
user.is_following = false
|
||||
Utils.setLastSeen(context, user.key, -1)
|
||||
val where = Expression.and(Expression.equalsArgs(Statuses.ACCOUNT_KEY),
|
||||
Expression.or(Expression.equalsArgs(Statuses.USER_KEY),
|
||||
Expression.equalsArgs(Statuses.RETWEETED_BY_USER_KEY)))
|
||||
val whereArgs = arrayOf(args.userKey.toString(), args.userKey.toString(), args.userKey.toString())
|
||||
val resolver = context.contentResolver
|
||||
resolver.delete(Statuses.CONTENT_URI, where.sql, whereArgs)
|
||||
}
|
||||
|
||||
override fun showErrorMessage(params: AbsFriendshipOperationTask.Arguments, exception: Exception?) {
|
||||
Utils.showErrorMessage(context, R.string.action_unfollowing, exception, false)
|
||||
}
|
||||
|
||||
override fun showSucceededMessage(params: AbsFriendshipOperationTask.Arguments, user: ParcelableUser) {
|
||||
val nameFirst = kPreferences[nameFirstKey]
|
||||
val message = context.getString(R.string.unfollowed_user,
|
||||
manager.getDisplayName(user, nameFirst))
|
||||
Utils.showInfoMessage(context, message, false)
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,79 @@
|
|||
package org.mariotaku.twidere.task
|
||||
|
||||
import android.accounts.AccountManager
|
||||
import android.content.Context
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.microblog.library.twitter.model.ErrorInfo
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.extension.model.newMicroBlogInstance
|
||||
import org.mariotaku.twidere.model.ParcelableStatus
|
||||
import org.mariotaku.twidere.model.SingleResponse
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.message.StatusDestroyedEvent
|
||||
import org.mariotaku.twidere.model.message.StatusListChangedEvent
|
||||
import org.mariotaku.twidere.model.util.AccountUtils
|
||||
import org.mariotaku.twidere.model.util.ParcelableStatusUtils
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper
|
||||
import org.mariotaku.twidere.util.DataStoreUtils
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 2016/12/9.
|
||||
*/
|
||||
class DestroyStatusTask(
|
||||
context: Context,
|
||||
private val accountKey: UserKey,
|
||||
private val statusId: String
|
||||
) : ManagedAsyncTask<Any, Any, SingleResponse<ParcelableStatus>>(context) {
|
||||
|
||||
override fun doInBackground(vararg params: Any): SingleResponse<ParcelableStatus> {
|
||||
val details = AccountUtils.getAccountDetails(AccountManager.get(context), accountKey)
|
||||
?: return SingleResponse()
|
||||
val microBlog = details.newMicroBlogInstance(context, cls = MicroBlog::class.java)
|
||||
var status: ParcelableStatus? = null
|
||||
var deleteStatus: Boolean = false
|
||||
try {
|
||||
status = ParcelableStatusUtils.fromStatus(microBlog.destroyStatus(statusId),
|
||||
accountKey, false)
|
||||
ParcelableStatusUtils.updateExtraInformation(status, details,
|
||||
userColorNameManager)
|
||||
deleteStatus = true
|
||||
return SingleResponse(status)
|
||||
} catch (e: MicroBlogException) {
|
||||
deleteStatus = e.errorCode == ErrorInfo.STATUS_NOT_FOUND
|
||||
return SingleResponse(exception = e)
|
||||
} finally {
|
||||
if (deleteStatus) {
|
||||
DataStoreUtils.deleteStatus(context.contentResolver, accountKey, statusId, status)
|
||||
DataStoreUtils.deleteActivityStatus(context.contentResolver, accountKey, statusId, status)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPreExecute() {
|
||||
super.onPreExecute()
|
||||
val hashCode = AsyncTwitterWrapper.calculateHashCode(accountKey, statusId)
|
||||
if (!asyncTwitterWrapper.destroyingStatusIds.contains(hashCode)) {
|
||||
asyncTwitterWrapper.destroyingStatusIds.add(hashCode)
|
||||
}
|
||||
bus.post(StatusListChangedEvent())
|
||||
}
|
||||
|
||||
override fun onPostExecute(result: SingleResponse<ParcelableStatus>) {
|
||||
asyncTwitterWrapper.destroyingStatusIds.removeElement(AsyncTwitterWrapper.calculateHashCode(accountKey, statusId))
|
||||
if (result.hasData()) {
|
||||
val status = result.data!!
|
||||
if (status.retweet_id != null) {
|
||||
Utils.showInfoMessage(context, R.string.retweet_cancelled, false)
|
||||
} else {
|
||||
Utils.showInfoMessage(context, R.string.status_deleted, false)
|
||||
}
|
||||
bus.post(StatusDestroyedEvent(status))
|
||||
} else {
|
||||
Utils.showErrorMessage(context, R.string.action_deleting, result.exception, true)
|
||||
}
|
||||
super.onPostExecute(result)
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
package org.mariotaku.twidere.task
|
||||
|
||||
import android.content.ContentValues
|
||||
import android.content.Context
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.microblog.library.twitter.model.User
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.annotation.AccountType
|
||||
import org.mariotaku.twidere.constant.nameFirstKey
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.model.message.FriendshipTaskEvent
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedRelationships
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
class DestroyUserBlockTask(context: Context) : AbsFriendshipOperationTask(context, FriendshipTaskEvent.Action.UNBLOCK) {
|
||||
|
||||
@Throws(MicroBlogException::class)
|
||||
override fun perform(twitter: MicroBlog, details: AccountDetails,
|
||||
args: AbsFriendshipOperationTask.Arguments): User {
|
||||
when (details.type) {
|
||||
AccountType.FANFOU -> {
|
||||
return twitter.destroyFanfouBlock(args.userKey.id)
|
||||
}
|
||||
}
|
||||
return twitter.destroyBlock(args.userKey.id)
|
||||
}
|
||||
|
||||
override fun succeededWorker(twitter: MicroBlog,
|
||||
details: AccountDetails,
|
||||
args: AbsFriendshipOperationTask.Arguments, user: ParcelableUser) {
|
||||
val resolver = context.contentResolver
|
||||
// I bet you don't want to see this user in your auto complete list.
|
||||
val values = ContentValues()
|
||||
values.put(CachedRelationships.ACCOUNT_KEY, args.accountKey.toString())
|
||||
values.put(CachedRelationships.USER_KEY, args.userKey.toString())
|
||||
values.put(CachedRelationships.BLOCKING, false)
|
||||
values.put(CachedRelationships.FOLLOWING, false)
|
||||
values.put(CachedRelationships.FOLLOWED_BY, false)
|
||||
resolver.insert(CachedRelationships.CONTENT_URI, values)
|
||||
}
|
||||
|
||||
override fun showSucceededMessage(params: AbsFriendshipOperationTask.Arguments, user: ParcelableUser) {
|
||||
val nameFirst = kPreferences[nameFirstKey]
|
||||
val message = context.getString(R.string.unblocked_user, manager.getDisplayName(user,
|
||||
nameFirst))
|
||||
Utils.showInfoMessage(context, message, false)
|
||||
|
||||
}
|
||||
|
||||
override fun showErrorMessage(params: AbsFriendshipOperationTask.Arguments, exception: Exception?) {
|
||||
Utils.showErrorMessage(context, R.string.action_unblocking, exception, true)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
package org.mariotaku.twidere.task
|
||||
|
||||
import android.content.ContentValues
|
||||
import android.content.Context
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.microblog.library.twitter.model.User
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.constant.nameFirstKey
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.model.message.FriendshipTaskEvent
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.CachedRelationships
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
class DestroyUserMuteTask(context: Context) : AbsFriendshipOperationTask(context, FriendshipTaskEvent.Action.UNMUTE) {
|
||||
|
||||
@Throws(MicroBlogException::class)
|
||||
override fun perform(twitter: MicroBlog, details: AccountDetails,
|
||||
args: AbsFriendshipOperationTask.Arguments): User {
|
||||
return twitter.destroyMute(args.userKey.id)
|
||||
}
|
||||
|
||||
override fun succeededWorker(twitter: MicroBlog,
|
||||
details: AccountDetails,
|
||||
args: AbsFriendshipOperationTask.Arguments, user: ParcelableUser) {
|
||||
val resolver = context.contentResolver
|
||||
// I bet you don't want to see this user in your auto complete list.
|
||||
val values = ContentValues()
|
||||
values.put(CachedRelationships.ACCOUNT_KEY, args.accountKey.toString())
|
||||
values.put(CachedRelationships.USER_KEY, args.userKey.toString())
|
||||
values.put(CachedRelationships.MUTING, false)
|
||||
resolver.insert(CachedRelationships.CONTENT_URI, values)
|
||||
}
|
||||
|
||||
override fun showSucceededMessage(params: AbsFriendshipOperationTask.Arguments, user: ParcelableUser) {
|
||||
val nameFirst = kPreferences[nameFirstKey]
|
||||
val message = context.getString(R.string.unmuted_user, manager.getDisplayName(user,
|
||||
nameFirst))
|
||||
Utils.showInfoMessage(context, message, false)
|
||||
|
||||
}
|
||||
|
||||
override fun showErrorMessage(params: AbsFriendshipOperationTask.Arguments, exception: Exception?) {
|
||||
Utils.showErrorMessage(context, R.string.action_unmuting, exception, true)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
/*
|
||||
* Twidere - Twitter client for Android
|
||||
*
|
||||
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.mariotaku.twidere.task
|
||||
|
||||
import android.content.Context
|
||||
import android.os.AsyncTask
|
||||
|
||||
import com.squareup.otto.Bus
|
||||
|
||||
import org.mariotaku.twidere.model.message.TaskStateChangedEvent
|
||||
import org.mariotaku.twidere.util.AsyncTaskManager
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper
|
||||
import org.mariotaku.twidere.util.SharedPreferencesWrapper
|
||||
import org.mariotaku.twidere.util.UserColorNameManager
|
||||
import org.mariotaku.twidere.util.dagger.GeneralComponentHelper
|
||||
|
||||
import javax.inject.Inject
|
||||
|
||||
abstract class ManagedAsyncTask<Params, Progress, Result> @JvmOverloads constructor(
|
||||
val context: Context,
|
||||
val tag: String? = null
|
||||
) : AsyncTask<Params, Progress, Result>() {
|
||||
|
||||
@Inject
|
||||
lateinit var manager: AsyncTaskManager
|
||||
@Inject
|
||||
lateinit var bus: Bus
|
||||
@Inject
|
||||
lateinit var userColorNameManager: UserColorNameManager
|
||||
@Inject
|
||||
lateinit var preferences: SharedPreferencesWrapper
|
||||
@Inject
|
||||
lateinit var asyncTwitterWrapper: AsyncTwitterWrapper
|
||||
|
||||
init {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
GeneralComponentHelper.build(context).inject(this as ManagedAsyncTask<Any, Any, Any>)
|
||||
}
|
||||
|
||||
override fun onCancelled() {
|
||||
super.onCancelled()
|
||||
bus.post(TaskStateChangedEvent())
|
||||
}
|
||||
|
||||
override fun onPostExecute(result: Result) {
|
||||
super.onPostExecute(result)
|
||||
bus.post(TaskStateChangedEvent())
|
||||
}
|
||||
|
||||
override fun onPreExecute() {
|
||||
super.onPreExecute()
|
||||
bus.post(TaskStateChangedEvent())
|
||||
}
|
||||
|
||||
protected fun finalize() {
|
||||
manager.remove(hashCode())
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package org.mariotaku.twidere.task
|
||||
|
||||
import android.content.Context
|
||||
|
||||
import org.mariotaku.microblog.library.MicroBlog
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.microblog.library.twitter.model.User
|
||||
import org.mariotaku.twidere.model.AccountDetails
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
class ReportSpamAndBlockTask(context: Context) : CreateUserBlockTask(context) {
|
||||
|
||||
@Throws(MicroBlogException::class)
|
||||
override fun perform(twitter: MicroBlog, details: AccountDetails,
|
||||
args: AbsFriendshipOperationTask.Arguments): User {
|
||||
return twitter.reportSpam(args.userKey.id)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,77 @@
|
|||
package org.mariotaku.twidere.task
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import android.util.Log
|
||||
import com.squareup.otto.Bus
|
||||
import org.mariotaku.abstask.library.AbstractTask
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.twidere.Constants
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.TwidereConstants.LOGTAG
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.model.SingleResponse
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.message.ProfileUpdatedEvent
|
||||
import org.mariotaku.twidere.model.util.ParcelableUserUtils
|
||||
import org.mariotaku.twidere.util.MicroBlogAPIFactory
|
||||
import org.mariotaku.twidere.util.TwitterWrapper
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
import org.mariotaku.twidere.util.dagger.GeneralComponentHelper
|
||||
import java.io.IOException
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
open class UpdateProfileBackgroundImageTask<ResultHandler>(
|
||||
private val context: Context,
|
||||
private val accountKey: UserKey,
|
||||
private val imageUri: Uri,
|
||||
private val tile: Boolean,
|
||||
private val deleteImage: Boolean
|
||||
) : AbstractTask<Any, SingleResponse<ParcelableUser>, ResultHandler>(), Constants {
|
||||
|
||||
@Inject
|
||||
lateinit var bus: Bus
|
||||
|
||||
init {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
GeneralComponentHelper.build(context).inject(this as UpdateProfileBackgroundImageTask<Any>)
|
||||
}
|
||||
|
||||
override fun afterExecute(handler: ResultHandler?, result: SingleResponse<ParcelableUser>) {
|
||||
super.afterExecute(handler, result)
|
||||
if (result.hasData()) {
|
||||
Utils.showOkMessage(context, R.string.profile_banner_image_updated, false)
|
||||
bus.post(ProfileUpdatedEvent(result.data!!))
|
||||
} else {
|
||||
Utils.showErrorMessage(context, R.string.action_updating_profile_background_image,
|
||||
result.exception, true)
|
||||
}
|
||||
}
|
||||
|
||||
override fun doLongOperation(params: Any): SingleResponse<ParcelableUser> {
|
||||
try {
|
||||
val twitter = MicroBlogAPIFactory.getInstance(context, accountKey)!!
|
||||
TwitterWrapper.updateProfileBackgroundImage(context, twitter, imageUri, tile,
|
||||
deleteImage)
|
||||
// Wait for 5 seconds, see
|
||||
// https://dev.twitter.com/docs/api/1.1/post/account/update_profile_image
|
||||
try {
|
||||
Thread.sleep(5000L)
|
||||
} catch (e: InterruptedException) {
|
||||
Log.w(LOGTAG, e)
|
||||
}
|
||||
val user = twitter.verifyCredentials()
|
||||
return SingleResponse(ParcelableUserUtils.fromUser(user, accountKey))
|
||||
} catch (e: MicroBlogException) {
|
||||
return SingleResponse(exception = e)
|
||||
} catch (e: IOException) {
|
||||
return SingleResponse(exception = e)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
package org.mariotaku.twidere.task
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import android.util.Log
|
||||
import com.squareup.otto.Bus
|
||||
import org.mariotaku.abstask.library.AbstractTask
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.twidere.Constants
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.TwidereConstants.LOGTAG
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.model.SingleResponse
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.message.ProfileUpdatedEvent
|
||||
import org.mariotaku.twidere.model.util.ParcelableUserUtils
|
||||
import org.mariotaku.twidere.util.MicroBlogAPIFactory
|
||||
import org.mariotaku.twidere.util.TwitterWrapper
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
import org.mariotaku.twidere.util.dagger.GeneralComponentHelper
|
||||
import java.io.IOException
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 16/3/11.
|
||||
*/
|
||||
open class UpdateProfileBannerImageTask<ResultHandler>(
|
||||
private val context: Context,
|
||||
private val accountKey: UserKey,
|
||||
private val imageUri: Uri,
|
||||
private val deleteImage: Boolean
|
||||
) : AbstractTask<Any, SingleResponse<ParcelableUser>, ResultHandler>(), Constants {
|
||||
|
||||
@Inject
|
||||
lateinit var mBus: Bus
|
||||
|
||||
init {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
GeneralComponentHelper.build(context).inject(this as UpdateProfileBannerImageTask<Any>)
|
||||
}
|
||||
|
||||
override fun afterExecute(handler: ResultHandler?, result: SingleResponse<ParcelableUser>?) {
|
||||
super.afterExecute(handler, result)
|
||||
if (result!!.hasData()) {
|
||||
Utils.showOkMessage(context, R.string.profile_banner_image_updated, false)
|
||||
mBus.post(ProfileUpdatedEvent(result.data!!))
|
||||
} else {
|
||||
Utils.showErrorMessage(context, R.string.action_updating_profile_banner_image, result.exception,
|
||||
true)
|
||||
}
|
||||
}
|
||||
|
||||
override fun doLongOperation(params: Any): SingleResponse<ParcelableUser> {
|
||||
try {
|
||||
val twitter = MicroBlogAPIFactory.getInstance(context, accountKey)!!
|
||||
TwitterWrapper.updateProfileBannerImage(context, twitter, imageUri, deleteImage)
|
||||
// Wait for 5 seconds, see
|
||||
// https://dev.twitter.com/docs/api/1.1/post/account/update_profile_image
|
||||
try {
|
||||
Thread.sleep(5000L)
|
||||
} catch (e: InterruptedException) {
|
||||
Log.w(LOGTAG, e)
|
||||
}
|
||||
|
||||
val user = twitter.verifyCredentials()
|
||||
return SingleResponse(ParcelableUserUtils.fromUser(user, accountKey))
|
||||
} catch (e: MicroBlogException) {
|
||||
return SingleResponse(exception = e)
|
||||
} catch (e: IOException) {
|
||||
return SingleResponse(exception = e)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
package org.mariotaku.twidere.task
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import android.util.Log
|
||||
import com.squareup.otto.Bus
|
||||
import org.mariotaku.abstask.library.AbstractTask
|
||||
import org.mariotaku.microblog.library.MicroBlogException
|
||||
import org.mariotaku.twidere.R
|
||||
import org.mariotaku.twidere.TwidereConstants
|
||||
import org.mariotaku.twidere.model.ParcelableUser
|
||||
import org.mariotaku.twidere.model.SingleResponse
|
||||
import org.mariotaku.twidere.model.UserKey
|
||||
import org.mariotaku.twidere.model.message.ProfileUpdatedEvent
|
||||
import org.mariotaku.twidere.model.util.ParcelableUserUtils
|
||||
import org.mariotaku.twidere.util.MicroBlogAPIFactory
|
||||
import org.mariotaku.twidere.util.TwitterWrapper
|
||||
import org.mariotaku.twidere.util.Utils
|
||||
import org.mariotaku.twidere.util.dagger.GeneralComponentHelper
|
||||
import java.io.IOException
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* Created by mariotaku on 2016/12/9.
|
||||
*/
|
||||
open class UpdateProfileImageTask<ResultHandler>(
|
||||
private val context: Context,
|
||||
private val accountKey: UserKey,
|
||||
private val imageUri: Uri,
|
||||
private val deleteImage: Boolean
|
||||
) : AbstractTask<Any, SingleResponse<ParcelableUser>, ResultHandler>() {
|
||||
|
||||
@Inject
|
||||
lateinit var bus: Bus
|
||||
|
||||
init {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
GeneralComponentHelper.build(context).inject(this as UpdateProfileImageTask<Any>)
|
||||
}
|
||||
|
||||
override fun doLongOperation(params: Any): SingleResponse<ParcelableUser> {
|
||||
try {
|
||||
val microBlog = MicroBlogAPIFactory.getInstance(context, accountKey)!!
|
||||
TwitterWrapper.updateProfileImage(context, microBlog, imageUri, deleteImage)
|
||||
// Wait for 5 seconds, see
|
||||
// https://dev.twitter.com/rest/reference/post/account/update_profile_image
|
||||
try {
|
||||
Thread.sleep(5000L)
|
||||
} catch (e: InterruptedException) {
|
||||
Log.w(TwidereConstants.LOGTAG, e)
|
||||
}
|
||||
|
||||
val user = microBlog.verifyCredentials()
|
||||
return SingleResponse(ParcelableUserUtils.fromUser(user, accountKey))
|
||||
} catch (e: MicroBlogException) {
|
||||
return SingleResponse(exception = e)
|
||||
} catch (e: IOException) {
|
||||
return SingleResponse(exception = e)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun afterExecute(handler: ResultHandler?, result: SingleResponse<ParcelableUser>) {
|
||||
super.afterExecute(handler, result)
|
||||
if (result.hasData()) {
|
||||
Utils.showOkMessage(context, R.string.profile_image_updated, false)
|
||||
bus.post(ProfileUpdatedEvent(result.data!!))
|
||||
} else {
|
||||
Utils.showErrorMessage(context, R.string.action_updating_profile_image, result.exception, true)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -129,7 +129,7 @@ interface GeneralComponent {
|
|||
|
||||
fun inject(task: UpdateProfileBannerImageTask<Any>)
|
||||
|
||||
fun inject(task: AsyncTwitterWrapper.UpdateProfileImageTask<Any>)
|
||||
fun inject(task: UpdateProfileImageTask<Any>)
|
||||
|
||||
fun inject(loader: APIEditorActivity.LoadDefaultsChooserDialogFragment.DefaultAPIConfigLoader)
|
||||
|
||||
|
|
Loading…
Reference in New Issue