mirror of
https://github.com/TwidereProject/Twidere-Android
synced 2025-02-17 04:00:48 +01:00
fixed #403
task refactoring using urlconnection for extensions added retype email verification
This commit is contained in:
parent
abe4a55459
commit
ee3e37af1c
@ -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};
|
||||
|
||||
}
|
||||
|
||||
|
@ -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'])
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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'])
|
||||
}
|
||||
|
@ -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());
|
||||
|
@ -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'
|
||||
|
@ -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"
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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());
|
||||
|
@ -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();
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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());
|
||||
|
@ -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));
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
@ -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;
|
||||
|
||||
|
@ -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)));
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
|
@ -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()]));
|
||||
}
|
||||
}
|
||||
}
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
|
@ -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>
|
||||
|
Loading…
x
Reference in New Issue
Block a user