1
0
mirror of https://github.com/TwidereProject/Twidere-Android synced 2025-02-17 04:00:48 +01:00
task refactoring
using urlconnection for extensions
added retype email verification
This commit is contained in:
Mariotaku Lee 2016-02-24 22:16:43 +08:00
parent abe4a55459
commit ee3e37af1c
32 changed files with 377 additions and 259 deletions

View File

@ -291,7 +291,7 @@ public interface TwidereDataStore {
DESCRIPTION_PLAIN, LOCATION, URL, PROFILE_IMAGE_URL, PROFILE_BANNER_URL, IS_PROTECTED,
IS_VERIFIED, IS_FOLLOWING, FOLLOWERS_COUNT, FRIENDS_COUNT, STATUSES_COUNT, FAVORITES_COUNT,
LISTED_COUNT, MEDIA_COUNT, DESCRIPTION_HTML, DESCRIPTION_EXPANDED, URL_EXPANDED,
BACKGROUND_COLOR, LINK_COLOR, TEXT_COLOR, LAST_SEEN};
BACKGROUND_COLOR, LINK_COLOR, TEXT_COLOR, LAST_SEEN, DESCRIPTION_UNESCAPED};
String[] BASIC_COLUMNS = {_ID, USER_ID,
NAME, SCREEN_NAME, PROFILE_IMAGE_URL};
@ -299,7 +299,7 @@ public interface TwidereDataStore {
String[] TYPES = {TYPE_PRIMARY_KEY, TYPE_INT_UNIQUE, TYPE_INT,
TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_BOOLEAN,
TYPE_BOOLEAN, TYPE_BOOLEAN, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT,
TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT};
TYPE_TEXT, TYPE_TEXT, TYPE_TEXT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_TEXT};
}

View File

@ -39,7 +39,7 @@ android {
dependencies {
apt 'com.bluelinelabs:logansquare-compiler:1.3.4'
compile 'com.github.mariotaku.RestFu:okhttp3:0.9.21'
compile 'com.github.mariotaku.RestFu:urlconnection:0.9.22'
compile project(':twidere.library.extension')
compile fileTree(dir: 'libs', include: ['*.jar'])
}

View File

@ -1,23 +1,13 @@
package org.mariotaku.twidere.extension.shortener.gist;
import android.support.annotation.Nullable;
import org.mariotaku.restfu.ExceptionFactory;
import org.mariotaku.restfu.RestAPIFactory;
import org.mariotaku.restfu.RestRequest;
import org.mariotaku.restfu.annotation.method.GET;
import org.mariotaku.restfu.http.Authorization;
import org.mariotaku.restfu.http.Endpoint;
import org.mariotaku.restfu.http.HttpRequest;
import org.mariotaku.restfu.http.HttpResponse;
import org.mariotaku.restfu.http.ValueMap;
import org.mariotaku.restfu.okhttp3.OkHttpRestClient;
import org.mariotaku.twidere.api.twitter.auth.OAuthAuthorization;
import org.mariotaku.twidere.api.twitter.auth.OAuthEndpoint;
import org.mariotaku.twidere.api.twitter.auth.OAuthToken;
import org.mariotaku.twidere.model.ParcelableCredentials;
import okhttp3.OkHttpClient;
import org.mariotaku.restfu.urlconnection.URLConnectionRestClient;
/**
* Created by mariotaku on 16/2/20.
@ -27,7 +17,7 @@ public class GithubFactory {
public static Github getInstance(final String apiKey) {
final RestAPIFactory<GithubException> factory = new RestAPIFactory<>();
factory.setEndpoint(new Endpoint("https://api.github.com/"));
factory.setHttpClient(new OkHttpRestClient(new OkHttpClient()));
factory.setHttpClient(new URLConnectionRestClient());
factory.setAuthorization(new Authorization() {
@Override
public String getHeader(Endpoint endpoint, RestRequest restRequest) {

View File

@ -38,7 +38,7 @@ android {
dependencies {
apt 'com.bluelinelabs:logansquare-compiler:1.3.4'
compile 'com.github.mariotaku.RestFu:okhttp3:0.9.21'
compile 'com.github.mariotaku.RestFu:urlconnection:0.9.22'
compile project(':twidere.library.extension')
compile fileTree(dir: 'libs', include: ['*.jar'])
}

View File

@ -10,13 +10,12 @@ import org.mariotaku.restfu.http.Endpoint;
import org.mariotaku.restfu.http.HttpRequest;
import org.mariotaku.restfu.http.HttpResponse;
import org.mariotaku.restfu.http.ValueMap;
import org.mariotaku.restfu.okhttp3.OkHttpRestClient;
import org.mariotaku.restfu.urlconnection.URLConnectionRestClient;
import org.mariotaku.twidere.api.twitter.auth.OAuthAuthorization;
import org.mariotaku.twidere.api.twitter.auth.OAuthEndpoint;
import org.mariotaku.twidere.api.twitter.auth.OAuthToken;
import org.mariotaku.twidere.model.ParcelableCredentials;
import okhttp3.OkHttpClient;
/**
* Created by mariotaku on 16/2/20.
@ -26,7 +25,7 @@ public class TwitLongerFactory {
public static TwitLonger getInstance(final String apiKey, @Nullable final ParcelableCredentials credentials) {
final RestAPIFactory<TwitLongerException> factory = new RestAPIFactory<>();
factory.setEndpoint(new Endpoint("http://api.twitlonger.com/"));
factory.setHttpClient(new OkHttpRestClient(new OkHttpClient()));
factory.setHttpClient(new URLConnectionRestClient());
factory.setConstantPool(new TwitLongerConstantPool(apiKey, credentials));
factory.setExceptionFactory(new TwitLongerExceptionFactory());
factory.setRestConverterFactory(new LoganSquareConverterFactory());

View File

@ -91,7 +91,7 @@ dependencies {
compile 'com.github.mariotaku:MessageBubbleView:1.2'
compile 'com.github.mariotaku:DragSortListView:0.6.1'
compile 'com.github.uucky:ColorPicker-Android:0.9.7@aar'
compile 'com.github.boxme:asyncmanager:1.0.0'
// compile 'com.github.boxme:asyncmanager:1.0.0'
compile 'com.sprylab.android.texturevideoview:texturevideoview:1.1.1'
compile 'com.squareup:pollexor:2.0.4'
compile 'com.squareup:tape:1.2.3'

View File

@ -376,7 +376,7 @@
<activity
android:name=".activity.SettingsWizardActivity"
android:label="@string/settings_wizard"
android:theme="@style/Theme.Twidere.Wizard"/>
android:theme="@style/Theme.Twidere.Dark"/>
<activity
android:name=".activity.support.DataExportActivity"
android:label="@string/export_settings"

View File

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

View File

@ -59,8 +59,6 @@ import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.FrameLayout.LayoutParams;
import com.desmond.asyncmanager.AsyncManager;
import com.desmond.asyncmanager.TaskRunnable;
import com.squareup.otto.Subscribe;
import org.apache.commons.lang3.ArrayUtils;
@ -88,6 +86,8 @@ import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
import org.mariotaku.twidere.provider.TwidereDataStore.Activities;
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses;
import org.mariotaku.twidere.service.StreamingService;
import org.mariotaku.twidere.task.AbstractTask;
import org.mariotaku.twidere.task.util.TaskStarter;
import org.mariotaku.twidere.util.AsyncTaskUtils;
import org.mariotaku.twidere.util.CustomTabUtils;
import org.mariotaku.twidere.util.DataStoreUtils;
@ -577,9 +577,9 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
// Delete unused items in databases.
final Context context = getApplicationContext();
AsyncManager.runBackgroundTask(new TaskRunnable() {
TaskStarter.execute(new AbstractTask() {
@Override
public Object doLongOperation(Object o) throws InterruptedException {
public Object doLongOperation(Object o) {
cleanDatabasesByItemLimit(context);
return null;
}

View File

@ -924,6 +924,9 @@ public class SignInActivity extends BaseAppCompatActivity implements OnClickList
} else if ("RetypePhoneNumber".equalsIgnoreCase(challengeType)) {
verificationHint.setText(R.string.login_challenge_retype_phone_hint);
editVerification.setVisibility(View.VISIBLE);
} else if ("RetypeEmail".equalsIgnoreCase(challengeType)) {
verificationHint.setText(R.string.login_challenge_retype_email_hint);
editVerification.setVisibility(View.VISIBLE);
} else if ("Sms".equalsIgnoreCase(challengeType)) {
verificationHint.setText(R.string.login_verification_pin_hint);
editVerification.setVisibility(View.VISIBLE);

View File

@ -23,6 +23,9 @@ import android.graphics.Rect;
import android.os.Bundle;
import android.view.View;
import java.util.LinkedList;
import java.util.Queue;
public interface IBaseFragment {
Bundle getExtraConfiguration();
@ -35,4 +38,45 @@ public interface IBaseFragment {
interface SystemWindowsInsetsCallback {
boolean getSystemWindowsInsets(Rect insets);
}
void executeAfterFragmentResumed(Action action);
interface Action {
void execute(IBaseFragment fragment);
}
class ActionHelper {
private final IBaseFragment mFragment;
private boolean mFragmentResumed;
private Queue<Action> mActionQueue = new LinkedList<>();
public ActionHelper(IBaseFragment fragment) {
mFragment = fragment;
}
public void dispatchOnPause() {
mFragmentResumed = false;
}
public void dispatchOnResumeFragments() {
mFragmentResumed = true;
executePending();
}
private void executePending() {
if (!mFragmentResumed) return;
Action action;
while ((action = mActionQueue.poll()) != null) {
action.execute(mFragment);
}
}
public void executeAfterFragmentResumed(Action action) {
mActionQueue.add(action);
executePending();
}
}
}

View File

@ -38,8 +38,6 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import com.desmond.asyncmanager.AsyncManager;
import com.desmond.asyncmanager.TaskRunnable;
import com.squareup.otto.Subscribe;
import org.mariotaku.twidere.R;
@ -54,6 +52,8 @@ import org.mariotaku.twidere.model.ParcelableMedia;
import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.model.message.StatusListChangedEvent;
import org.mariotaku.twidere.model.util.ParcelableActivityUtils;
import org.mariotaku.twidere.task.AbstractTask;
import org.mariotaku.twidere.task.util.TaskStarter;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.IntentUtils;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
@ -410,9 +410,9 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentListRecycler
final RecyclerView recyclerView = getRecyclerView();
recyclerView.addOnScrollListener(mOnScrollListener);
recyclerView.addOnScrollListener(mPauseOnScrollListener);
final TaskRunnable<Object, Boolean, RecyclerView> task = new TaskRunnable<Object, Boolean, RecyclerView>() {
final AbstractTask<Object, Boolean, RecyclerView> task = new AbstractTask<Object, Boolean, RecyclerView>() {
@Override
public Boolean doLongOperation(Object params) throws InterruptedException {
public Boolean doLongOperation(Object params) {
final Context context = getContext();
final SharedPreferences prefs = context.getSharedPreferences(SHARED_PREFERENCES_NAME,
Context.MODE_PRIVATE);
@ -422,14 +422,14 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentListRecycler
}
@Override
public void callback(RecyclerView recyclerView, Boolean result) {
public void afterExecute(RecyclerView recyclerView, Boolean result) {
if (result) {
recyclerView.addOnScrollListener(mActiveHotMobiScrollTracker = mHotMobiScrollTracker);
}
}
};
task.setResultHandler(recyclerView);
AsyncManager.runBackgroundTask(task);
TaskStarter.execute(task);
mBus.register(mStatusesBusCallback);
}
@ -568,6 +568,7 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentListRecycler
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
if (getUserVisibleHint()) return;
final AbsActivitiesAdapter<Data> adapter = getAdapter();
final MenuInflater inflater = new MenuInflater(getContext());
final ExtendedRecyclerView.ContextMenuInfo contextMenuInfo =
@ -586,6 +587,7 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentListRecycler
@Override
public boolean onContextItemSelected(MenuItem item) {
if (getUserVisibleHint()) return false;
final AbsActivitiesAdapter<Data> adapter = getAdapter();
final ExtendedRecyclerView.ContextMenuInfo contextMenuInfo =
(ExtendedRecyclerView.ContextMenuInfo) item.getMenuInfo();

View File

@ -38,8 +38,6 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import com.desmond.asyncmanager.AsyncManager;
import com.desmond.asyncmanager.TaskRunnable;
import com.squareup.otto.Subscribe;
import org.mariotaku.twidere.R;
@ -52,6 +50,8 @@ import org.mariotaku.twidere.loader.iface.IExtendedLoader;
import org.mariotaku.twidere.model.ParcelableMedia;
import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.model.message.StatusListChangedEvent;
import org.mariotaku.twidere.task.AbstractTask;
import org.mariotaku.twidere.task.util.TaskStarter;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.IntentUtils;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
@ -395,9 +395,9 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListRecyclerVi
final RecyclerView recyclerView = getRecyclerView();
recyclerView.addOnScrollListener(mOnScrollListener);
recyclerView.addOnScrollListener(mPauseOnScrollListener);
final TaskRunnable<Object, Boolean, RecyclerView> task = new TaskRunnable<Object, Boolean, RecyclerView>() {
final AbstractTask<Object, Boolean, RecyclerView> task = new AbstractTask<Object, Boolean, RecyclerView>() {
@Override
public Boolean doLongOperation(Object params) throws InterruptedException {
public Boolean doLongOperation(Object params) {
final Context context = getContext();
final SharedPreferences prefs = context.getSharedPreferences(SHARED_PREFERENCES_NAME,
Context.MODE_PRIVATE);
@ -407,14 +407,14 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListRecyclerVi
}
@Override
public void callback(RecyclerView recyclerView, Boolean result) {
public void afterExecute(RecyclerView recyclerView, Boolean result) {
if (result) {
recyclerView.addOnScrollListener(mActiveHotMobiScrollTracker = mHotMobiScrollTracker);
}
}
};
task.setResultHandler(recyclerView);
AsyncManager.runBackgroundTask(task);
TaskStarter.execute(task);
mBus.register(mStatusesBusCallback);
}
@ -514,6 +514,7 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListRecyclerVi
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
if (getUserVisibleHint()) return;
final AbsStatusesAdapter<Data> adapter = getAdapter();
final MenuInflater inflater = new MenuInflater(getContext());
final ExtendedRecyclerView.ContextMenuInfo contextMenuInfo =
@ -525,6 +526,7 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListRecyclerVi
@Override
public boolean onContextItemSelected(MenuItem item) {
if (getUserVisibleHint()) return false;
final ExtendedRecyclerView.ContextMenuInfo contextMenuInfo =
(ExtendedRecyclerView.ContextMenuInfo) item.getMenuInfo();
final ParcelableStatus status = getAdapter().getStatus(contextMenuInfo.getPosition());

View File

@ -86,6 +86,8 @@ public class BaseSupportFragment extends Fragment implements IBaseFragment, Cons
@Inject
TwidereValidator mValidator;
private final ActionHelper mActionHelper = new ActionHelper(this);
public BaseSupportFragment() {
}
@ -168,6 +170,17 @@ public class BaseSupportFragment extends Fragment implements IBaseFragment, Cons
}
@Override
public void executeAfterFragmentResumed(Action action) {
mActionHelper.executeAfterFragmentResumed(action);
}
@Override
public void onResume() {
super.onResume();
mActionHelper.dispatchOnResumeFragments();
}
@Override
public LayoutInflater getLayoutInflater(Bundle savedInstanceState) {
final FragmentActivity activity = getActivity();

View File

@ -31,8 +31,6 @@ import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
import android.support.v4.content.Loader;
import com.desmond.asyncmanager.AsyncManager;
import com.desmond.asyncmanager.TaskRunnable;
import com.squareup.otto.Subscribe;
import org.mariotaku.library.objectcursor.ObjectCursor;
@ -55,6 +53,8 @@ import org.mariotaku.twidere.model.message.StatusRetweetedEvent;
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
import org.mariotaku.twidere.provider.TwidereDataStore.Activities;
import org.mariotaku.twidere.provider.TwidereDataStore.Filters;
import org.mariotaku.twidere.task.AbstractTask;
import org.mariotaku.twidere.task.util.TaskStarter;
import org.mariotaku.twidere.util.DataStoreUtils;
import org.mariotaku.twidere.util.ErrorInfoStore;
@ -185,9 +185,9 @@ public abstract class CursorActivitiesFragment extends AbsActivitiesFragment<Lis
if ((position & IndicatorPosition.START) != 0) return;
super.onLoadMoreContents(position);
if (position == 0) return;
AsyncManager.runBackgroundTask(new TaskRunnable<Object, long[][], CursorActivitiesFragment>() {
TaskStarter.execute(new AbstractTask<Object, long[][], CursorActivitiesFragment>() {
@Override
public long[][] doLongOperation(Object o) throws InterruptedException {
public long[][] doLongOperation(Object o) {
final long[][] result = new long[3][];
result[0] = getAccountIds();
result[1] = getOldestActivityIds(result[0]);
@ -195,7 +195,7 @@ public abstract class CursorActivitiesFragment extends AbsActivitiesFragment<Lis
}
@Override
public void callback(CursorActivitiesFragment fragment, long[][] result) {
public void afterExecute(CursorActivitiesFragment fragment, long[][] result) {
fragment.getActivities(result[0], result[1], result[2]);
}
}.setResultHandler(this));
@ -204,9 +204,9 @@ public abstract class CursorActivitiesFragment extends AbsActivitiesFragment<Lis
@Override
public boolean triggerRefresh() {
super.triggerRefresh();
AsyncManager.runBackgroundTask(new TaskRunnable<Object, long[][], CursorActivitiesFragment>() {
TaskStarter.execute(new AbstractTask<Object, long[][], CursorActivitiesFragment>() {
@Override
public long[][] doLongOperation(Object o) throws InterruptedException {
public long[][] doLongOperation(Object o) {
final long[][] result = new long[3][];
result[0] = getAccountIds();
result[2] = getNewestActivityIds(result[0]);
@ -214,7 +214,7 @@ public abstract class CursorActivitiesFragment extends AbsActivitiesFragment<Lis
}
@Override
public void callback(CursorActivitiesFragment fragment, long[][] result) {
public void afterExecute(CursorActivitiesFragment fragment, long[][] result) {
fragment.getActivities(result[0], result[1], result[2]);
}
}.setResultHandler(this));

View File

@ -29,8 +29,6 @@ import android.support.annotation.NonNull;
import android.support.v4.app.FragmentActivity;
import android.support.v4.content.Loader;
import com.desmond.asyncmanager.AsyncManager;
import com.desmond.asyncmanager.TaskRunnable;
import com.squareup.otto.Subscribe;
import org.mariotaku.sqliteqb.library.Columns.Column;
@ -53,6 +51,8 @@ import org.mariotaku.twidere.model.message.StatusRetweetedEvent;
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
import org.mariotaku.twidere.provider.TwidereDataStore.Filters;
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses;
import org.mariotaku.twidere.task.AbstractTask;
import org.mariotaku.twidere.task.util.TaskStarter;
import org.mariotaku.twidere.util.DataStoreUtils;
import org.mariotaku.twidere.util.ErrorInfoStore;
@ -243,9 +243,9 @@ public abstract class CursorStatusesFragment extends AbsStatusesFragment<List<Pa
if ((position & IndicatorPosition.START) != 0) return;
super.onLoadMoreContents(position);
if (position == 0) return;
AsyncManager.runBackgroundTask(new TaskRunnable<Object, long[][], CursorStatusesFragment>() {
TaskStarter.execute(new AbstractTask<Object, long[][], CursorStatusesFragment>() {
@Override
public long[][] doLongOperation(Object o) throws InterruptedException {
public long[][] doLongOperation(Object o) {
final long[][] result = new long[3][];
result[0] = getAccountIds();
result[1] = getOldestStatusIds(result[0]);
@ -253,7 +253,7 @@ public abstract class CursorStatusesFragment extends AbsStatusesFragment<List<Pa
}
@Override
public void callback(CursorStatusesFragment fragment, long[][] result) {
public void afterExecute(CursorStatusesFragment fragment, long[][] result) {
fragment.getStatuses(result[0], result[1], result[2]);
}
}.setResultHandler(this));
@ -262,9 +262,9 @@ public abstract class CursorStatusesFragment extends AbsStatusesFragment<List<Pa
@Override
public boolean triggerRefresh() {
super.triggerRefresh();
AsyncManager.runBackgroundTask(new TaskRunnable<Object, long[][], CursorStatusesFragment>() {
TaskStarter.execute(new AbstractTask<Object, long[][], CursorStatusesFragment>() {
@Override
public long[][] doLongOperation(Object o) throws InterruptedException {
public long[][] doLongOperation(Object o) {
final long[][] result = new long[3][];
result[0] = getAccountIds();
result[2] = getNewestStatusIds(result[0]);
@ -272,7 +272,7 @@ public abstract class CursorStatusesFragment extends AbsStatusesFragment<List<Pa
}
@Override
public void callback(CursorStatusesFragment fragment, long[][] result) {
public void afterExecute(CursorStatusesFragment fragment, long[][] result) {
fragment.getStatuses(result[0], result[1], result[2]);
}
}.setResultHandler(this));

View File

@ -754,6 +754,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
if (getUserVisibleHint()) return;
final MenuInflater inflater = new MenuInflater(getContext());
final ExtendedRecyclerView.ContextMenuInfo contextMenuInfo =
(ExtendedRecyclerView.ContextMenuInfo) menuInfo;
@ -764,6 +765,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
@Override
public boolean onContextItemSelected(MenuItem item) {
if (getUserVisibleHint()) return false;
final ExtendedRecyclerView.ContextMenuInfo contextMenuInfo =
(ExtendedRecyclerView.ContextMenuInfo) item.getMenuInfo();
final ParcelableStatus status = mStatusAdapter.getStatus(contextMenuInfo.getPosition());

View File

@ -80,8 +80,6 @@ import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.desmond.asyncmanager.AsyncManager;
import com.desmond.asyncmanager.TaskRunnable;
import com.squareup.otto.Subscribe;
import org.apache.commons.lang3.ObjectUtils;
@ -121,6 +119,8 @@ import org.mariotaku.twidere.model.util.ParcelableMediaUtils;
import org.mariotaku.twidere.provider.TwidereDataStore.CachedRelationships;
import org.mariotaku.twidere.provider.TwidereDataStore.CachedUsers;
import org.mariotaku.twidere.provider.TwidereDataStore.Filters;
import org.mariotaku.twidere.task.AbstractTask;
import org.mariotaku.twidere.task.util.TaskStarter;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.ContentValuesCreator;
import org.mariotaku.twidere.util.DataStoreUtils;
@ -377,7 +377,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
final CacheUserInfoRunnable task = new CacheUserInfoRunnable(getContext().getApplicationContext());
task.setParams(Pair.create(user, relationship));
AsyncManager.runBackgroundTask(task);
TaskStarter.execute(task);
mFollowButton.setVisibility(View.VISIBLE);
}
@ -1759,7 +1759,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
}
}
private static class CacheUserInfoRunnable extends TaskRunnable<Pair<ParcelableUser, Relationship>, Object, Object> {
private static class CacheUserInfoRunnable extends AbstractTask<Pair<ParcelableUser, Relationship>, Object, Object> {
private final Context context;
public CacheUserInfoRunnable(Context context) {
@ -1767,7 +1767,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
}
@Override
public Object doLongOperation(Pair<ParcelableUser, Relationship> args) throws InterruptedException {
public Object doLongOperation(Pair<ParcelableUser, Relationship> args) {
final ContentResolver resolver = context.getContentResolver();
final ParcelableUser user = args.first;
resolver.insert(CachedUsers.CONTENT_URI, ContentValuesCreator.makeCachedUserContentValues(user));

View File

@ -56,6 +56,7 @@ import org.mariotaku.twidere.api.twitter.Twitter;
import org.mariotaku.twidere.api.twitter.TwitterException;
import org.mariotaku.twidere.api.twitter.model.ProfileUpdate;
import org.mariotaku.twidere.api.twitter.model.User;
import org.mariotaku.twidere.fragment.iface.IBaseFragment;
import org.mariotaku.twidere.loader.support.ParcelableUserLoader;
import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.model.SingleResponse;
@ -107,8 +108,6 @@ public class UserProfileEditorFragment extends BaseSupportFragment implements On
private ParcelableUser mUser;
private boolean mUserInfoLoaderInitialized;
private boolean mGetUserInfoCalled;
private boolean mFragmentsResumed;
private Runnable mResumeFragmentRunnable;
@Override
public void beforeTextChanged(final CharSequence s, final int length, final int start, final int end) {
@ -368,33 +367,19 @@ public class UserProfileEditorFragment extends BaseSupportFragment implements On
if (mTask != null && mTask.getStatus() == Status.PENDING) {
AsyncTaskUtils.executeTask(mTask);
}
if (!mFragmentsResumed && mResumeFragmentRunnable != null) {
mResumeFragmentRunnable.run();
}
mFragmentsResumed = true;
}
@Override
public void onPause() {
mFragmentsResumed = false;
super.onPause();
}
private void dismissDialogFragment(final String tag) {
mResumeFragmentRunnable = new Runnable() {
executeAfterFragmentResumed(new Action() {
@Override
public void run() {
public void execute(IBaseFragment fragment) {
final FragmentManager fm = getChildFragmentManager();
final Fragment f = fm.findFragmentByTag(tag);
if (f instanceof DialogFragment) {
((DialogFragment) f).dismiss();
}
mResumeFragmentRunnable = null;
}
};
if (mFragmentsResumed) {
mResumeFragmentRunnable.run();
}
});
}
private void setUpdateState(final boolean start) {
@ -402,19 +387,15 @@ public class UserProfileEditorFragment extends BaseSupportFragment implements On
dismissDialogFragment(UPDATE_PROFILE_DIALOG_FRAGMENT_TAG);
return;
}
mResumeFragmentRunnable = new Runnable() {
executeAfterFragmentResumed(new Action() {
@Override
public void run() {
public void execute(IBaseFragment fragment) {
final FragmentManager fm = getChildFragmentManager();
SupportProgressDialogFragment df = new SupportProgressDialogFragment();
df.show(fm, UPDATE_PROFILE_DIALOG_FRAGMENT_TAG);
df.setCancelable(false);
mResumeFragmentRunnable = null;
}
};
if (mFragmentsResumed) {
mResumeFragmentRunnable.run();
}
});
}
private static boolean stringEquals(final CharSequence str1, final CharSequence str2) {

View File

@ -44,9 +44,6 @@ import android.widget.RadioButton;
import android.widget.TableLayout;
import android.widget.TextView;
import com.desmond.asyncmanager.AsyncManager;
import com.desmond.asyncmanager.TaskRunnable;
import org.apache.commons.lang3.math.NumberUtils;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.api.twitter.TwitterCaps;
@ -57,6 +54,8 @@ import org.mariotaku.twidere.fragment.support.BaseSupportFragment;
import org.mariotaku.twidere.model.ParcelableCardEntity;
import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.model.util.ParcelableCardEntityUtils;
import org.mariotaku.twidere.task.AbstractTask;
import org.mariotaku.twidere.task.util.TaskStarter;
import org.mariotaku.twidere.util.TwitterAPIFactory;
import org.mariotaku.twidere.util.support.ViewSupport;
@ -165,16 +164,16 @@ public class CardPollFragment extends BaseSupportFragment implements
cardData.putString("cards_platform", TwitterAPIFactory.CARDS_PLATFORM_ANDROID_12);
cardData.putString("response_card_name", card.name);
cardData.putString("selected_choice", String.valueOf(i + 1));
TaskRunnable<CardDataMap, ParcelableCardEntity, CardPollFragment> task
= new TaskRunnable<CardDataMap, ParcelableCardEntity, CardPollFragment>() {
AbstractTask<CardDataMap, ParcelableCardEntity, CardPollFragment> task
= new AbstractTask<CardDataMap, ParcelableCardEntity, CardPollFragment>() {
@Override
public void callback(CardPollFragment handler, ParcelableCardEntity result) {
public void afterExecute(CardPollFragment handler, ParcelableCardEntity result) {
handler.displayAndReloadPoll(result, status);
}
@Override
public ParcelableCardEntity doLongOperation(CardDataMap cardDataMap) throws InterruptedException {
public ParcelableCardEntity doLongOperation(CardDataMap cardDataMap) {
final TwitterCaps caps = TwitterAPIFactory.getTwitterInstance(getContext(),
card.account_id, true, true, TwitterCaps.class);
if (caps == null) return null;
@ -188,7 +187,7 @@ public class CardPollFragment extends BaseSupportFragment implements
}
};
task.setParams(cardData);
AsyncManager.runBackgroundTask(task);
TaskStarter.execute(task);
}
}
}

View File

@ -274,10 +274,10 @@ public class RefreshService extends Service implements Constants {
return isNetworkAvailable(this) && (isBatteryOkay(this) || !shouldStopAutoRefreshOnBatteryLow(this));
}
private int getLocalTrends(final long[] accountIds) {
private void getLocalTrends(final long[] accountIds) {
final long account_id = getDefaultAccountId(this);
final int woeid = mPreferences.getInt(KEY_LOCAL_TRENDS_WOEID, 1);
return mTwitterWrapper.getLocalTrendsAsync(account_id, woeid);
mTwitterWrapper.getLocalTrendsAsync(account_id, woeid);
}
private long[] getRefreshableIds(final AccountPreferences[] prefs, final RefreshableAccountFilter filter) {

View File

@ -0,0 +1,57 @@
package org.mariotaku.twidere.task;
import android.support.annotation.MainThread;
import android.support.annotation.WorkerThread;
/**
* Created by mariotaku on 16/2/24.
*/
public abstract class AbstractTask<Params, Result, Callback> {
private Params mParams;
private Callback mCallback;
@WorkerThread
protected abstract Result doLongOperation(Params params);
@MainThread
protected void beforeExecute() {
}
@MainThread
protected void afterExecute(Result result) {
}
@MainThread
protected void afterExecute(Callback callback, Result result) {
}
public void setParams(Params params) {
mParams = params;
}
public AbstractTask<Params, Result, Callback> setResultHandler(Callback callback) {
mCallback = callback;
return this;
}
@MainThread
public void invokeAfterExecute(Result result) {
if (mCallback != null) {
afterExecute(mCallback, result);
} else {
afterExecute(result);
}
}
public Result invokeExecute() {
return doLongOperation(mParams);
}
public void invokeBeforeExecute() {
beforeExecute();
}
}

View File

@ -23,7 +23,6 @@ import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import com.desmond.asyncmanager.TaskRunnable;
import com.twitter.Extractor;
import org.mariotaku.twidere.Constants;
@ -40,7 +39,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class CacheUsersStatusesTask extends TaskRunnable<TwitterListResponse<Status>, Object, Object> implements Constants {
public class CacheUsersStatusesTask extends AbstractTask<TwitterListResponse<Status>, Object, Object> implements Constants {
private final Context context;

View File

@ -5,7 +5,6 @@ import android.content.Context;
import android.net.Uri;
import android.util.Log;
import com.desmond.asyncmanager.TaskRunnable;
import com.squareup.otto.Bus;
import org.mariotaku.twidere.BuildConfig;
@ -18,6 +17,7 @@ import org.mariotaku.twidere.api.twitter.model.DirectMessage;
import org.mariotaku.twidere.api.twitter.model.Paging;
import org.mariotaku.twidere.api.twitter.model.ResponseList;
import org.mariotaku.twidere.model.RefreshTaskParam;
import org.mariotaku.twidere.model.message.GetMessagesTaskEvent;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.ContentValuesCreator;
import org.mariotaku.twidere.util.ErrorInfoStore;
@ -28,7 +28,6 @@ import org.mariotaku.twidere.util.UriUtils;
import org.mariotaku.twidere.util.Utils;
import org.mariotaku.twidere.util.content.ContentResolverUtils;
import org.mariotaku.twidere.util.dagger.GeneralComponentHelper;
import org.mariotaku.twidere.model.message.GetMessagesTaskEvent;
import java.util.ArrayList;
import java.util.List;
@ -38,7 +37,7 @@ import javax.inject.Inject;
/**
* Created by mariotaku on 16/2/14.
*/
public abstract class GetDirectMessagesTask extends TaskRunnable<RefreshTaskParam,
public abstract class GetDirectMessagesTask extends AbstractTask<RefreshTaskParam,
List<TwitterWrapper.MessageListResponse>, Object> implements Constants {
protected final Context context;
@ -133,12 +132,12 @@ public abstract class GetDirectMessagesTask extends TaskRunnable<RefreshTaskPara
}
public void notifyStart() {
public void beforeExecute() {
bus.post(new GetMessagesTaskEvent(getDatabaseUri(), true, null));
}
@Override
public void callback(List<TwitterWrapper.MessageListResponse> result) {
protected void afterExecute(List<TwitterWrapper.MessageListResponse> result) {
bus.post(new GetMessagesTaskEvent(getDatabaseUri(), false, AsyncTwitterWrapper.getException(result)));
}
}

View File

@ -0,0 +1,36 @@
package org.mariotaku.twidere.task;
import android.content.Context;
import android.net.Uri;
import android.support.annotation.NonNull;
import org.mariotaku.twidere.api.twitter.Twitter;
import org.mariotaku.twidere.api.twitter.TwitterException;
import org.mariotaku.twidere.api.twitter.model.Trends;
import org.mariotaku.twidere.provider.TwidereDataStore.CachedTrends;
import java.util.List;
/**
* Created by mariotaku on 16/2/24.
*/
public class GetLocalTrendsTask extends GetTrendsTask {
private final int woeid;
public GetLocalTrendsTask(final Context context, final long accountId, final int woeid) {
super(context, accountId);
this.woeid = woeid;
}
@Override
public List<Trends> getTrends(@NonNull final Twitter twitter) throws TwitterException {
return twitter.getLocationTrends(woeid);
}
@Override
protected Uri getContentUri() {
return CachedTrends.Local.CONTENT_URI;
}
}

View File

@ -5,8 +5,6 @@ import android.content.ContentValues;
import android.content.Context;
import android.util.Log;
import com.desmond.asyncmanager.TaskRunnable;
import org.mariotaku.sqliteqb.library.Expression;
import org.mariotaku.twidere.BuildConfig;
import org.mariotaku.twidere.Constants;
@ -23,7 +21,7 @@ import org.mariotaku.twidere.util.content.ContentResolverUtils;
/**
* Created by mariotaku on 16/2/13.
*/
public class GetSavedSearchesTask extends TaskRunnable<long[], SingleResponse<Object>, Object>
public class GetSavedSearchesTask extends AbstractTask<long[], SingleResponse<Object>, Object>
implements Constants {
private final Context mContext;

View File

@ -0,0 +1,72 @@
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 org.mariotaku.twidere.api.twitter.Twitter;
import org.mariotaku.twidere.api.twitter.TwitterException;
import org.mariotaku.twidere.api.twitter.model.Trends;
import org.mariotaku.twidere.provider.TwidereDataStore;
import org.mariotaku.twidere.util.ContentValuesCreator;
import org.mariotaku.twidere.util.TwitterAPIFactory;
import org.mariotaku.twidere.util.content.ContentResolverUtils;
import java.util.ArrayList;
import java.util.List;
/**
* Created by mariotaku on 16/2/24.
*/
public abstract class GetTrendsTask extends AbstractTask<Object, Object, Object> {
private final Context mContext;
private final long mAccountId;
public GetTrendsTask(Context context, final long accountId) {
this.mContext = context;
this.mAccountId = accountId;
}
public abstract List<Trends> getTrends(@NonNull Twitter twitter) throws TwitterException;
@Override
public Object doLongOperation(final Object param) {
final Twitter twitter = TwitterAPIFactory.getTwitterInstance(mContext, mAccountId, false);
if (twitter == null) return null;
try {
final List<Trends> trends = getTrends(twitter);
storeTrends(mContext.getContentResolver(), getContentUri(), trends);
return null;
} catch (final TwitterException e) {
return null;
}
}
protected abstract Uri getContentUri();
private static void storeTrends(ContentResolver cr, Uri uri, List<Trends> trendsList) {
final ArrayList<String> hashtags = new ArrayList<>();
final ArrayList<ContentValues> hashtagValues = new ArrayList<>();
if (trendsList != null && trendsList.size() > 0) {
final ContentValues[] valuesArray = ContentValuesCreator.createTrends(trendsList);
for (final ContentValues values : valuesArray) {
final String hashtag = values.getAsString(TwidereDataStore.CachedTrends.NAME).replaceFirst("#", "");
if (hashtags.contains(hashtag)) {
continue;
}
hashtags.add(hashtag);
final ContentValues hashtagValue = new ContentValues();
hashtagValue.put(TwidereDataStore.CachedHashtags.NAME, hashtag);
hashtagValues.add(hashtagValue);
}
cr.delete(uri, null, null);
ContentResolverUtils.bulkInsert(cr, uri, valuesArray);
ContentResolverUtils.bulkDelete(cr, TwidereDataStore.CachedHashtags.CONTENT_URI, TwidereDataStore.CachedHashtags.NAME, hashtags, null, true);
ContentResolverUtils.bulkInsert(cr, TwidereDataStore.CachedHashtags.CONTENT_URI,
hashtagValues.toArray(new ContentValues[hashtagValues.size()]));
}
}
}

View File

@ -8,7 +8,6 @@ import android.support.annotation.NonNull;
import android.support.annotation.UiThread;
import android.util.Log;
import com.desmond.asyncmanager.TaskRunnable;
import com.squareup.otto.Bus;
import org.mariotaku.sqliteqb.library.Expression;
@ -25,6 +24,7 @@ import org.mariotaku.twidere.model.message.GetActivitiesTaskEvent;
import org.mariotaku.twidere.model.util.ParcelableActivityUtils;
import org.mariotaku.twidere.provider.TwidereDataStore.Activities;
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses;
import org.mariotaku.twidere.task.AbstractTask;
import org.mariotaku.twidere.util.ContentValuesCreator;
import org.mariotaku.twidere.util.DataStoreUtils;
import org.mariotaku.twidere.util.ErrorInfoStore;
@ -43,7 +43,7 @@ import javax.inject.Inject;
/**
* Created by mariotaku on 16/1/4.
*/
public abstract class GetActivitiesTask extends TaskRunnable<RefreshTaskParam, Object, Object> implements Constants {
public abstract class GetActivitiesTask extends AbstractTask<RefreshTaskParam, Object, Object> implements Constants {
protected final Context context;
@Inject
@ -155,14 +155,15 @@ public abstract class GetActivitiesTask extends TaskRunnable<RefreshTaskParam, O
final long accountId, final Paging paging) throws TwitterException;
@Override
public void callback(Object result) {
public void afterExecute(Object result) {
bus.post(new GetActivitiesTaskEvent(getContentUri(), false, null));
}
protected abstract Uri getContentUri();
@UiThread
public void notifyStart() {
@Override
public void beforeExecute() {
bus.post(new GetActivitiesTaskEvent(getContentUri(), true, null));
}
}

View File

@ -9,8 +9,6 @@ import android.support.annotation.NonNull;
import android.support.annotation.UiThread;
import android.util.Log;
import com.desmond.asyncmanager.AsyncManager;
import com.desmond.asyncmanager.TaskRunnable;
import com.squareup.otto.Bus;
import org.apache.commons.lang3.ArrayUtils;
@ -26,8 +24,11 @@ import org.mariotaku.twidere.api.twitter.model.Paging;
import org.mariotaku.twidere.api.twitter.model.ResponseList;
import org.mariotaku.twidere.api.twitter.model.Status;
import org.mariotaku.twidere.model.RefreshTaskParam;
import org.mariotaku.twidere.model.message.GetStatusesTaskEvent;
import org.mariotaku.twidere.provider.TwidereDataStore.Statuses;
import org.mariotaku.twidere.task.AbstractTask;
import org.mariotaku.twidere.task.CacheUsersStatusesTask;
import org.mariotaku.twidere.task.util.TaskStarter;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.ContentValuesCreator;
import org.mariotaku.twidere.util.DataStoreUtils;
@ -40,7 +41,6 @@ import org.mariotaku.twidere.util.UriUtils;
import org.mariotaku.twidere.util.Utils;
import org.mariotaku.twidere.util.content.ContentResolverUtils;
import org.mariotaku.twidere.util.dagger.GeneralComponentHelper;
import org.mariotaku.twidere.model.message.GetStatusesTaskEvent;
import java.util.ArrayList;
import java.util.List;
@ -54,7 +54,7 @@ import edu.tsinghua.hotmobi.model.TimelineType;
/**
* Created by mariotaku on 16/1/2.
*/
public abstract class GetStatusesTask extends TaskRunnable<RefreshTaskParam,
public abstract class GetStatusesTask extends AbstractTask<RefreshTaskParam,
List<TwitterWrapper.StatusListResponse>, Object> implements Constants {
protected final Context context;
@ -146,7 +146,7 @@ public abstract class GetStatusesTask extends TaskRunnable<RefreshTaskParam,
@Override
public void callback(List<TwitterWrapper.StatusListResponse> result) {
public void afterExecute(List<TwitterWrapper.StatusListResponse> result) {
bus.post(new GetStatusesTaskEvent(getContentUri(), false, AsyncTwitterWrapper.getException(result)));
}
@ -190,7 +190,7 @@ public abstract class GetStatusesTask extends TaskRunnable<RefreshTaskParam,
// TODO cache related data and preload
final CacheUsersStatusesTask cacheTask = new CacheUsersStatusesTask(context);
cacheTask.setParams(new TwitterWrapper.StatusListResponse(accountId, statuses));
AsyncManager.runBackgroundTask(cacheTask);
TaskStarter.execute(cacheTask);
errorInfoStore.remove(getErrorInfoKey(), accountId);
} catch (final TwitterException e) {
if (BuildConfig.DEBUG) {

View File

@ -0,0 +1,41 @@
package org.mariotaku.twidere.task.util;
import android.os.AsyncTask;
import org.mariotaku.twidere.task.AbstractTask;
/**
* Created by mariotaku on 16/2/24.
*/
public class TaskStarter {
public static <Params, Result, Callback> void execute(AbstractTask<Params, Result, Callback> task) {
final AsyncTaskTask<Params, Result, Callback> asyncTaskTask = new AsyncTaskTask<>(task);
asyncTaskTask.execute();
}
static class AsyncTaskTask<P, R, C> extends AsyncTask<Object, Object, R> {
private final AbstractTask<P, R, C> task;
public AsyncTaskTask(AbstractTask<P, R, C> task) {
this.task = task;
}
@Override
protected void onPreExecute() {
task.invokeBeforeExecute();
}
@Override
protected R doInBackground(Object[] params) {
return task.invokeExecute();
}
@Override
protected void onPostExecute(R r) {
task.invokeAfterExecute(r);
}
}
}

View File

@ -31,9 +31,6 @@ import android.support.annotation.NonNull;
import android.support.v4.util.LongSparseArray;
import android.util.Log;
import com.desmond.asyncmanager.AsyncManager;
import com.desmond.asyncmanager.BackgroundTask;
import com.desmond.asyncmanager.TaskRunnable;
import com.squareup.otto.Bus;
import org.apache.commons.collections.primitives.ArrayIntList;
@ -53,7 +50,6 @@ import org.mariotaku.twidere.api.twitter.model.Paging;
import org.mariotaku.twidere.api.twitter.model.Relationship;
import org.mariotaku.twidere.api.twitter.model.ResponseList;
import org.mariotaku.twidere.api.twitter.model.SavedSearch;
import org.mariotaku.twidere.api.twitter.model.Trends;
import org.mariotaku.twidere.api.twitter.model.User;
import org.mariotaku.twidere.api.twitter.model.UserList;
import org.mariotaku.twidere.api.twitter.model.UserListUpdate;
@ -79,9 +75,7 @@ import org.mariotaku.twidere.model.util.ParcelableStatusUtils;
import org.mariotaku.twidere.model.util.ParcelableUserUtils;
import org.mariotaku.twidere.provider.TwidereDataStore;
import org.mariotaku.twidere.provider.TwidereDataStore.Activities;
import org.mariotaku.twidere.provider.TwidereDataStore.CachedHashtags;
import org.mariotaku.twidere.provider.TwidereDataStore.CachedRelationships;
import org.mariotaku.twidere.provider.TwidereDataStore.CachedTrends;
import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages;
import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages.Inbox;
import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages.Outbox;
@ -92,9 +86,12 @@ import org.mariotaku.twidere.task.GetActivitiesAboutMeTask;
import org.mariotaku.twidere.task.GetActivitiesByFriendsTask;
import org.mariotaku.twidere.task.GetDirectMessagesTask;
import org.mariotaku.twidere.task.GetHomeTimelineTask;
import org.mariotaku.twidere.task.GetLocalTrendsTask;
import org.mariotaku.twidere.task.GetSavedSearchesTask;
import org.mariotaku.twidere.task.ManagedAsyncTask;
import org.mariotaku.twidere.task.AbstractTask;
import org.mariotaku.twidere.task.twitter.GetActivitiesTask;
import org.mariotaku.twidere.task.util.TaskStarter;
import org.mariotaku.twidere.util.collection.LongSparseMap;
import org.mariotaku.twidere.util.content.ContentResolverUtils;
@ -291,14 +288,13 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
public boolean getHomeTimelineAsync(RefreshTaskParam param) {
final GetHomeTimelineTask task = new GetHomeTimelineTask(getContext());
task.setParams(param);
task.notifyStart();
AsyncManager.runBackgroundTask(task);
TaskStarter.execute(task);
return true;
}
public int getLocalTrendsAsync(final long accountId, final int woeid) {
final GetLocalTrendsTask task = new GetLocalTrendsTask(accountId, woeid);
return mAsyncTaskManager.add(task, true);
public void getLocalTrendsAsync(final long accountId, final int woeid) {
final GetLocalTrendsTask task = new GetLocalTrendsTask(mContext, accountId, woeid);
TaskStarter.execute(task);
}
public void getReceivedDirectMessagesAsync(final long[] accountIds, final long[] maxIds, final long[] sinceIds) {
@ -308,21 +304,19 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
public void getReceivedDirectMessagesAsync(RefreshTaskParam param) {
final GetReceivedDirectMessagesTask task = new GetReceivedDirectMessagesTask(mContext);
task.setParams(param);
task.notifyStart();
AsyncManager.runBackgroundTask(task);
TaskStarter.execute(task);
}
public void getSentDirectMessagesAsync(final long[] accountIds, final long[] maxIds, final long[] sinceIds) {
final GetSentDirectMessagesTask task = new GetSentDirectMessagesTask(mContext);
task.setParams(new BaseRefreshTaskParam(accountIds, maxIds, sinceIds));
task.notifyStart();
AsyncManager.runBackgroundTask(task);
TaskStarter.execute(task);
}
public int getSavedSearchesAsync(long[] accountIds) {
final GetSavedSearchesTask task = new GetSavedSearchesTask(mContext);
task.setParams(accountIds);
AsyncManager.runBackgroundTask(task);
TaskStarter.execute(task);
return System.identityHashCode(task);
}
@ -489,12 +483,12 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
return null;
}
public BackgroundTask updateFriendship(final long accountId, final long userId, final FriendshipUpdate update) {
public void updateFriendship(final long accountId, final long userId, final FriendshipUpdate update) {
final Bus bus = mBus;
if (bus == null) return null;
return AsyncManager.runBackgroundTask(new TaskRunnable<Object, SingleResponse<Relationship>, Bus>() {
if (bus == null) return;
TaskStarter.execute(new AbstractTask<Object, SingleResponse<Relationship>, Bus>() {
@Override
public SingleResponse<Relationship> doLongOperation(Object param) throws InterruptedException {
public SingleResponse<Relationship> doLongOperation(Object param) {
final Twitter twitter = TwitterAPIFactory.getTwitterInstance(mContext, accountId, true);
try {
return SingleResponse.getInstance(twitter.updateFriendship(userId, update));
@ -504,7 +498,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
}
@Override
public void callback(Bus handler, SingleResponse<Relationship> result) {
public void afterExecute(Bus handler, SingleResponse<Relationship> result) {
if (result.hasData()) {
handler.post(new FriendshipUpdatedEvent(accountId, userId, result.getData()));
} else if (result.hasException()) {
@ -523,22 +517,20 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
public void getActivitiesAboutMeAsync(final RefreshTaskParam param) {
final GetActivitiesTask task = new GetActivitiesAboutMeTask(getContext());
task.setParams(param);
task.notifyStart();
AsyncManager.runBackgroundTask(task);
TaskStarter.execute(task);
}
public void getActivitiesByFriendsAsync(long[] accountIds, long[] maxIds, long[] sinceIds) {
final GetActivitiesTask task = new GetActivitiesByFriendsTask(getContext());
task.setParams(new BaseRefreshTaskParam(accountIds, maxIds, sinceIds));
task.notifyStart();
AsyncManager.runBackgroundTask(task);
TaskStarter.execute(task);
}
public void setActivitiesAboutMeUnreadAsync(final long[] accountIds, final long cursor) {
TaskRunnable<Object, Object, AsyncTwitterWrapper> task = new TaskRunnable<Object, Object, AsyncTwitterWrapper>() {
AbstractTask<Object, Object, AsyncTwitterWrapper> task = new AbstractTask<Object, Object, AsyncTwitterWrapper>() {
@Override
public Object doLongOperation(Object o) throws InterruptedException {
public Object doLongOperation(Object o) {
for (long accountId : accountIds) {
Twitter twitter = TwitterAPIFactory.getTwitterInstance(mContext, accountId, false);
if (TwitterAPIFactory.isOfficialTwitterInstance(mContext, twitter)) continue;
@ -553,7 +545,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
return null;
}
};
AsyncManager.runBackgroundTask(task);
TaskStarter.execute(task);
}
public ErrorInfoStore getErrorInfoStore() {
@ -646,7 +638,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
final Twitter twitter = TwitterAPIFactory.getTwitterInstance(mContext, mAccountId, true);
TwitterWrapper.updateProfileImage(mContext, twitter, mImageUri, mDeleteImage);
// Wait for 5 seconds, see
// https://dev.twitter.com/docs/api/1.1/post/account/update_profile_image
// https://dev.twitter.com/rest/reference/post/account/update_profile_image
try {
Thread.sleep(5000L);
} catch (InterruptedException e) {
@ -1887,29 +1879,6 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
}
class GetLocalTrendsTask extends GetTrendsTask {
private final int woeid;
public GetLocalTrendsTask(final long account_id, final int woeid) {
super(account_id);
this.woeid = woeid;
}
@Override
public List<Trends> getTrends(@NonNull final Twitter twitter) throws TwitterException {
return twitter.getLocationTrends(woeid);
}
@Override
protected void onPostExecute(final ListResponse<Trends> result) {
mAsyncTaskManager.add(new StoreLocalTrendsTask(result), true);
super.onPostExecute(result);
}
}
static class GetReceivedDirectMessagesTask extends GetDirectMessagesTask {
public GetReceivedDirectMessagesTask(Context context) {
@ -1934,10 +1903,10 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
}
@Override
public void notifyStart() {
public void beforeExecute() {
final Intent intent = new Intent(BROADCAST_RESCHEDULE_DIRECT_MESSAGES_REFRESHING);
context.sendBroadcast(intent);
super.notifyStart();
super.beforeExecute();
}
}
@ -1969,34 +1938,6 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
return mPreferences;
}
abstract class GetTrendsTask extends ManagedAsyncTask<Object, Object, ListResponse<Trends>> {
private final long account_id;
public GetTrendsTask(final long account_id) {
super(mContext, TASK_TAG_GET_TRENDS);
this.account_id = account_id;
}
public abstract List<Trends> getTrends(@NonNull Twitter twitter) throws TwitterException;
@Override
protected ListResponse<Trends> doInBackground(final Object... params) {
final Twitter twitter = TwitterAPIFactory.getTwitterInstance(mContext, account_id, false);
final Bundle extras = new Bundle();
extras.putLong(EXTRA_ACCOUNT_ID, account_id);
if (twitter != null) {
try {
return new ListResponse<>(getTrends(twitter), null, extras);
} catch (final TwitterException e) {
return new ListResponse<>(null, e, extras);
}
}
return new ListResponse<>(null, null, extras);
}
}
final class RemoveUnreadCountsTask extends AsyncTask<Object, Object, Integer> {
private final int position;
private final LongSparseArray<Set<Long>> counts;
@ -2177,68 +2118,6 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
}
class StoreLocalTrendsTask extends StoreTrendsTask {
public StoreLocalTrendsTask(final ListResponse<Trends> result) {
super(mContext, result, CachedTrends.Local.CONTENT_URI);
}
}
static class StoreTrendsTask extends ManagedAsyncTask<Object, Object, SingleResponse<Boolean>> {
private final ListResponse<Trends> response;
private final Uri uri;
private Context context;
public StoreTrendsTask(Context context, final ListResponse<Trends> response, final Uri uri) {
super(context, TASK_TAG_STORE_TRENDS);
this.response = response;
this.uri = uri;
this.context = context;
}
@Override
protected SingleResponse<Boolean> doInBackground(final Object... args) {
if (response == null) return SingleResponse.getInstance(false);
ContentResolver cr = context.getContentResolver();
final List<Trends> messages = response.getData();
final ArrayList<String> hashtags = new ArrayList<>();
final ArrayList<ContentValues> hashtagValues = new ArrayList<>();
if (messages != null && messages.size() > 0) {
final ContentValues[] valuesArray = ContentValuesCreator.createTrends(messages);
for (final ContentValues values : valuesArray) {
final String hashtag = values.getAsString(CachedTrends.NAME).replaceFirst("#", "");
if (hashtags.contains(hashtag)) {
continue;
}
hashtags.add(hashtag);
final ContentValues hashtagValue = new ContentValues();
hashtagValue.put(CachedHashtags.NAME, hashtag);
hashtagValues.add(hashtagValue);
}
cr.delete(uri, null, null);
ContentResolverUtils.bulkInsert(cr, uri, valuesArray);
ContentResolverUtils.bulkDelete(cr, CachedHashtags.CONTENT_URI, CachedHashtags.NAME, hashtags, null, true);
ContentResolverUtils.bulkInsert(cr, CachedHashtags.CONTENT_URI,
hashtagValues.toArray(new ContentValues[hashtagValues.size()]));
}
return SingleResponse.getInstance(true);
}
@Override
protected void onPostExecute(final SingleResponse<Boolean> response) {
// if (response != null && response.data != null &&
// response.data.getBoolean(EXTRA_SUCCEED)) {
// final Intent intent = new Intent(BROADCAST_TRENDS_UPDATED);
// intent.putExtra(EXTRA_SUCCEED, true);
// mContext.sendBroadcast(intent);
// }
super.onPostExecute(response);
}
}
static class UpdateUserListDetailsTask extends ManagedAsyncTask<Object, Object, SingleResponse<ParcelableUserList>> {
private final long accountId;

View File

@ -722,6 +722,7 @@
<string name="login_verification">Login verification</string>
<string name="login_verification_pin_hint">Check your phone for a PIN code and enter it to log in.</string>
<string name="login_challenge_retype_phone_hint">Retype the phone number associated with your Twitter account.</string>
<string name="login_challenge_retype_email_hint">Retype the email address associated with your Twitter account.</string>
<string name="login_verification_push_hint">Accept login verification request from Twitter app, once you approved the request, click OK.</string>
<string name="login_verification_failed">Login verification failed.</string>
<string name="saved_searches_already_saved_hint">Perhaps you already saved this search</string>