1
0
mirror of https://github.com/TwidereProject/Twidere-Android synced 2025-02-03 01:57:40 +01:00

fixed video playback

added keep screen on while playing video
This commit is contained in:
Mariotaku Lee 2015-10-07 00:45:39 +08:00
parent 8910b80338
commit 27a1660336
27 changed files with 246 additions and 246 deletions

View File

@ -47,7 +47,7 @@ android {
} }
repositories { repositories {
maven { url 'https://repo.commonsware.com.s3.amazonaws.com' } maven { url 'https://s3.amazonaws.com/repo.commonsware.com' }
} }
configurations { configurations {

View File

@ -27,6 +27,8 @@ import android.support.annotation.NonNull;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.MenuItem; import android.view.MenuItem;
import com.squareup.otto.Bus;
import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R; import org.mariotaku.twidere.R;
import org.mariotaku.twidere.activity.iface.IControlBarActivity; import org.mariotaku.twidere.activity.iface.IControlBarActivity;
@ -59,6 +61,8 @@ public class BaseAppCompatActivity extends ThemedAppCompatActivity implements Co
protected AsyncTwitterWrapper mTwitterWrapper; protected AsyncTwitterWrapper mTwitterWrapper;
@Inject @Inject
protected ReadStateManager mReadStateManager; protected ReadStateManager mReadStateManager;
@Inject
protected Bus mBus;
// Registered listeners // Registered listeners
private ArrayList<ControlBarOffsetListener> mControlBarOffsetListeners = new ArrayList<>(); private ArrayList<ControlBarOffsetListener> mControlBarOffsetListeners = new ArrayList<>();

View File

@ -19,7 +19,6 @@
package org.mariotaku.twidere.activity.support; package org.mariotaku.twidere.activity.support;
import android.app.ActivityManager;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.app.SearchManager; import android.app.SearchManager;
@ -62,7 +61,6 @@ import android.widget.FrameLayout.LayoutParams;
import android.widget.Toast; import android.widget.Toast;
import com.meizu.flyme.reflect.StatusBarProxy; import com.meizu.flyme.reflect.StatusBarProxy;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe; import com.squareup.otto.Subscribe;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
@ -113,9 +111,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import edu.tsinghua.hotmobi.HotMobiLogger;
import edu.tsinghua.hotmobi.model.SessionEvent;
import static org.mariotaku.twidere.util.CompareUtils.classEquals; import static org.mariotaku.twidere.util.CompareUtils.classEquals;
import static org.mariotaku.twidere.util.Utils.cleanDatabasesByItemLimit; import static org.mariotaku.twidere.util.Utils.cleanDatabasesByItemLimit;
import static org.mariotaku.twidere.util.Utils.getDefaultAccountId; import static org.mariotaku.twidere.util.Utils.getDefaultAccountId;
@ -435,9 +430,7 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
sendBroadcast(new Intent(BROADCAST_HOME_ACTIVITY_ONSTART)); sendBroadcast(new Intent(BROADCAST_HOME_ACTIVITY_ONSTART));
final ContentResolver resolver = getContentResolver(); final ContentResolver resolver = getContentResolver();
resolver.registerContentObserver(Accounts.CONTENT_URI, true, mAccountChangeObserver); resolver.registerContentObserver(Accounts.CONTENT_URI, true, mAccountChangeObserver);
final Bus bus = TwidereApplication.getInstance(this).getMessageBus(); mBus.register(this);
assert bus != null;
bus.register(this);
mReadStateManager.registerOnSharedPreferenceChangeListener(mReadStateChangeListener); mReadStateManager.registerOnSharedPreferenceChangeListener(mReadStateChangeListener);
updateUnreadCount(); updateUnreadCount();
@ -463,9 +456,7 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
protected void onStop() { protected void onStop() {
mMultiSelectHandler.dispatchOnStop(); mMultiSelectHandler.dispatchOnStop();
mReadStateManager.unregisterOnSharedPreferenceChangeListener(mReadStateChangeListener); mReadStateManager.unregisterOnSharedPreferenceChangeListener(mReadStateChangeListener);
final Bus bus = TwidereApplication.getInstance(this).getMessageBus(); mBus.unregister(this);
assert bus != null;
bus.unregister(this);
final ContentResolver resolver = getContentResolver(); final ContentResolver resolver = getContentResolver();
resolver.unregisterContentObserver(mAccountChangeObserver); resolver.unregisterContentObserver(mAccountChangeObserver);
mPreferences.edit().putInt(KEY_SAVED_TAB_POSITION, mViewPager.getCurrentItem()).apply(); mPreferences.edit().putInt(KEY_SAVED_TAB_POSITION, mViewPager.getCurrentItem()).apply();

View File

@ -52,7 +52,6 @@ import android.webkit.MimeTypeMap;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.MediaController; import android.widget.MediaController;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.TextView; import android.widget.TextView;
import com.davemorrissey.labs.subscaleview.ImageSource; import com.davemorrissey.labs.subscaleview.ImageSource;
@ -584,7 +583,7 @@ public final class MediaViewerActivity extends BaseAppCompatActivity implements
private TextureVideoView mVideoView; private TextureVideoView mVideoView;
private View mVideoViewOverlay; private View mVideoViewOverlay;
private SeekBar mVideoViewProgress; private ProgressBar mVideoViewProgress;
private TextView mDurationLabel, mPositionLabel; private TextView mDurationLabel, mPositionLabel;
private ImageButton mPlayPauseButton, mVolumeButton; private ImageButton mPlayPauseButton, mVolumeButton;
private ProgressWheel mProgressBar; private ProgressWheel mProgressBar;
@ -596,16 +595,17 @@ public final class MediaViewerActivity extends BaseAppCompatActivity implements
private File mVideoFile; private File mVideoFile;
private Pair<String, String> mVideoUrlAndType; private Pair<String, String> mVideoUrlAndType;
private MediaPlayer mMediaPlayer; private MediaPlayer mMediaPlayer;
private int mMediaPlayerError;
public boolean isLoopEnabled() { public boolean isLoopEnabled() {
return getArguments().getBoolean(EXTRA_LOOP, false); return getArguments().getBoolean(EXTRA_LOOP, false);
} }
public void loadVideo() { public void loadVideo(boolean forceReload) {
Pair<String, String> urlAndType = getBestVideoUrlAndType(getMedia()); Pair<String, String> urlAndType = getBestVideoUrlAndType(getMedia());
if (urlAndType == null) return; if (urlAndType == null) return;
mVideoUrlAndType = urlAndType; mVideoUrlAndType = urlAndType;
mVideoLoader.loadVideo(urlAndType.first, this); mVideoLoader.loadVideo(urlAndType.first, forceReload, this);
} }
@Override @Override
@ -630,6 +630,8 @@ public final class MediaViewerActivity extends BaseAppCompatActivity implements
mMediaPlayer = null; mMediaPlayer = null;
mVideoViewProgress.removeCallbacks(mVideoProgressRunnable); mVideoViewProgress.removeCallbacks(mVideoProgressRunnable);
mVideoViewProgress.setVisibility(View.GONE); mVideoViewProgress.setVisibility(View.GONE);
mMediaPlayerError = what;
invalidateOptionsMenu();
return true; return true;
} }
@ -637,7 +639,9 @@ public final class MediaViewerActivity extends BaseAppCompatActivity implements
public void onPrepared(MediaPlayer mp) { public void onPrepared(MediaPlayer mp) {
if (getUserVisibleHint()) { if (getUserVisibleHint()) {
mMediaPlayer = mp; mMediaPlayer = mp;
mMediaPlayerError = 0;
mp.setAudioStreamType(AudioManager.STREAM_MUSIC); mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setScreenOnWhilePlaying(true);
updateVolume(); updateVolume();
mp.setLooping(isLoopEnabled()); mp.setLooping(isLoopEnabled());
mp.start(); mp.start();
@ -645,6 +649,7 @@ public final class MediaViewerActivity extends BaseAppCompatActivity implements
mVideoViewProgress.post(mVideoProgressRunnable); mVideoViewProgress.post(mVideoProgressRunnable);
updatePlayerState(); updatePlayerState();
mVideoControl.setVisibility(View.VISIBLE); mVideoControl.setVisibility(View.VISIBLE);
invalidateOptionsMenu();
} }
} }
@ -674,7 +679,7 @@ public final class MediaViewerActivity extends BaseAppCompatActivity implements
super.onBaseViewCreated(view, savedInstanceState); super.onBaseViewCreated(view, savedInstanceState);
mVideoView = (TextureVideoView) view.findViewById(R.id.video_view); mVideoView = (TextureVideoView) view.findViewById(R.id.video_view);
mVideoViewOverlay = view.findViewById(R.id.video_view_overlay); mVideoViewOverlay = view.findViewById(R.id.video_view_overlay);
mVideoViewProgress = (SeekBar) view.findViewById(R.id.video_view_progress); mVideoViewProgress = (ProgressBar) view.findViewById(R.id.video_view_progress);
mProgressBar = (ProgressWheel) view.findViewById(R.id.load_progress); mProgressBar = (ProgressWheel) view.findViewById(R.id.load_progress);
mDurationLabel = (TextView) view.findViewById(R.id.duration_label); mDurationLabel = (TextView) view.findViewById(R.id.duration_label);
mPositionLabel = (TextView) view.findViewById(R.id.position_label); mPositionLabel = (TextView) view.findViewById(R.id.position_label);
@ -746,7 +751,7 @@ public final class MediaViewerActivity extends BaseAppCompatActivity implements
mPlayPauseButton.setOnClickListener(this); mPlayPauseButton.setOnClickListener(this);
mVolumeButton.setOnClickListener(this); mVolumeButton.setOnClickListener(this);
loadVideo(); loadVideo(false);
updateVolume(); updateVolume();
} }
@ -879,7 +884,7 @@ public final class MediaViewerActivity extends BaseAppCompatActivity implements
final File file = mVideoFile; final File file = mVideoFile;
final Pair<String, String> linkAndType = mVideoUrlAndType; final Pair<String, String> linkAndType = mVideoUrlAndType;
final boolean isLoading = linkAndType != null && mVideoLoader.isLoading(linkAndType.first); final boolean isLoading = linkAndType != null && mVideoLoader.isLoading(linkAndType.first);
final boolean hasVideo = file != null && file.exists() && linkAndType != null; final boolean hasVideo = file != null && file.exists() && linkAndType != null && mMediaPlayerError == 0;
MenuUtils.setMenuItemAvailability(menu, R.id.refresh, !hasVideo && !isLoading); MenuUtils.setMenuItemAvailability(menu, R.id.refresh, !hasVideo && !isLoading);
MenuUtils.setMenuItemAvailability(menu, R.id.share, hasVideo && !isLoading); MenuUtils.setMenuItemAvailability(menu, R.id.share, hasVideo && !isLoading);
MenuUtils.setMenuItemAvailability(menu, R.id.save, hasVideo && !isLoading); MenuUtils.setMenuItemAvailability(menu, R.id.save, hasVideo && !isLoading);
@ -913,7 +918,7 @@ public final class MediaViewerActivity extends BaseAppCompatActivity implements
return true; return true;
} }
case R.id.refresh: { case R.id.refresh: {
loadVideo(); loadVideo(true);
return true; return true;
} }
} }

View File

@ -309,6 +309,7 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
case Activity.ACTION_RETWEETED_RETWEET: case Activity.ACTION_RETWEETED_RETWEET:
case Activity.ACTION_RETWEETED_MENTION: case Activity.ACTION_RETWEETED_MENTION:
case Activity.ACTION_FAVORITED_MENTION: case Activity.ACTION_FAVORITED_MENTION:
case Activity.ACTION_LIST_CREATED:
case Activity.ACTION_LIST_MEMBER_ADDED: { case Activity.ACTION_LIST_MEMBER_ADDED: {
return ITEM_VIEW_TYPE_TITLE_SUMMARY; return ITEM_VIEW_TYPE_TITLE_SUMMARY;
} }

View File

@ -82,11 +82,7 @@ public class ParcelableActivitiesAdapter extends AbsActivitiesAdapter<List<Parce
@Override @Override
protected void bindTitleSummaryViewHolder(ActivityTitleSummaryViewHolder holder, int position) { protected void bindTitleSummaryViewHolder(ActivityTitleSummaryViewHolder holder, int position) {
if (mIsByFriends) { holder.displayActivity(getActivity(position), mIsByFriends);
holder.displayActivitiesByFriends(getActivity(position));
} else {
holder.displayActivityAboutMe(getActivity(position));
}
} }
@Override @Override

View File

@ -31,13 +31,11 @@ import android.database.sqlite.SQLiteOpenHelper;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Handler; import android.os.Handler;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.multidex.MultiDexApplication; import android.support.multidex.MultiDexApplication;
import com.nostra13.universalimageloader.cache.disc.DiskCache; import com.nostra13.universalimageloader.cache.disc.DiskCache;
import com.nostra13.universalimageloader.cache.disc.impl.ext.LruDiskCache; import com.nostra13.universalimageloader.cache.disc.impl.ext.LruDiskCache;
import com.squareup.okhttp.internal.Network; import com.squareup.okhttp.internal.Network;
import com.squareup.otto.Bus;
import org.acra.annotation.ReportsCrashes; import org.acra.annotation.ReportsCrashes;
import org.mariotaku.twidere.BuildConfig; import org.mariotaku.twidere.BuildConfig;
@ -87,7 +85,6 @@ public class TwidereApplication extends MultiDexApplication implements Constants
private SQLiteOpenHelper mSQLiteOpenHelper; private SQLiteOpenHelper mSQLiteOpenHelper;
private Network mNetwork; private Network mNetwork;
private SQLiteDatabase mDatabase; private SQLiteDatabase mDatabase;
private Bus mMessageBus;
private KeyboardShortcutsHandler mKeyboardShortcutsHandler; private KeyboardShortcutsHandler mKeyboardShortcutsHandler;
private UserColorNameManager mUserColorNameManager; private UserColorNameManager mUserColorNameManager;
@ -134,11 +131,6 @@ public class TwidereApplication extends MultiDexApplication implements Constants
return mKeyboardShortcutsHandler; return mKeyboardShortcutsHandler;
} }
@Nullable
public Bus getMessageBus() {
return mMessageBus;
}
public MultiSelectManager getMultiSelectManager() { public MultiSelectManager getMultiSelectManager() {
if (mMultiSelectManager != null) return mMultiSelectManager; if (mMultiSelectManager != null) return mMultiSelectManager;
return mMultiSelectManager = new MultiSelectManager(); return mMultiSelectManager = new MultiSelectManager();
@ -164,7 +156,6 @@ public class TwidereApplication extends MultiDexApplication implements Constants
initDebugMode(); initDebugMode();
initBugReport(); initBugReport();
mHandler = new Handler(); mHandler = new Handler();
mMessageBus = new Bus();
initializeAsyncTask(); initializeAsyncTask();
initAccountColor(this); initAccountColor(this);

View File

@ -32,12 +32,9 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.squareup.otto.Bus;
import org.mariotaku.twidere.R; import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.AbsActivitiesAdapter; import org.mariotaku.twidere.adapter.AbsActivitiesAdapter;
import org.mariotaku.twidere.adapter.AbsActivitiesAdapter.ActivityAdapterListener; import org.mariotaku.twidere.adapter.AbsActivitiesAdapter.ActivityAdapterListener;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.fragment.iface.RefreshScrollTopInterface; import org.mariotaku.twidere.fragment.iface.RefreshScrollTopInterface;
import org.mariotaku.twidere.model.ParcelableActivity; import org.mariotaku.twidere.model.ParcelableActivity;
import org.mariotaku.twidere.util.AsyncTwitterWrapper; import org.mariotaku.twidere.util.AsyncTwitterWrapper;
@ -119,16 +116,12 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentRecyclerView
@Override @Override
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
final Bus bus = TwidereApplication.getInstance(getActivity()).getMessageBus(); mBus.register(mStatusesBusCallback);
assert bus != null;
bus.register(mStatusesBusCallback);
} }
@Override @Override
public void onStop() { public void onStop() {
final Bus bus = TwidereApplication.getInstance(getActivity()).getMessageBus(); mBus.unregister(mStatusesBusCallback);
assert bus != null;
bus.unregister(mStatusesBusCallback);
super.onStop(); super.onStop();
} }

View File

@ -23,20 +23,17 @@ import android.view.View;
import com.desmond.asyncmanager.AsyncManager; import com.desmond.asyncmanager.AsyncManager;
import com.desmond.asyncmanager.TaskRunnable; import com.desmond.asyncmanager.TaskRunnable;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe; import com.squareup.otto.Subscribe;
import org.mariotaku.twidere.R; import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.AbsStatusesAdapter; import org.mariotaku.twidere.adapter.AbsStatusesAdapter;
import org.mariotaku.twidere.adapter.AbsStatusesAdapter.StatusAdapterListener; import org.mariotaku.twidere.adapter.AbsStatusesAdapter.StatusAdapterListener;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.loader.iface.IExtendedLoader; import org.mariotaku.twidere.loader.iface.IExtendedLoader;
import org.mariotaku.twidere.model.ParcelableMedia; import org.mariotaku.twidere.model.ParcelableMedia;
import org.mariotaku.twidere.model.ParcelableStatus; import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.util.AsyncTwitterWrapper; import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler; import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback; import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback;
import org.mariotaku.twidere.util.ReadStateManager;
import org.mariotaku.twidere.util.RecyclerViewNavigationHelper; import org.mariotaku.twidere.util.RecyclerViewNavigationHelper;
import org.mariotaku.twidere.util.RecyclerViewUtils; import org.mariotaku.twidere.util.RecyclerViewUtils;
import org.mariotaku.twidere.util.Utils; import org.mariotaku.twidere.util.Utils;
@ -425,16 +422,12 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentRecyclerViewFr
}; };
task.setResultHandler(recyclerView); task.setResultHandler(recyclerView);
AsyncManager.runBackgroundTask(task); AsyncManager.runBackgroundTask(task);
final Bus bus = TwidereApplication.getInstance(getActivity()).getMessageBus(); mBus.register(mStatusesBusCallback);
assert bus != null;
bus.register(mStatusesBusCallback);
} }
@Override @Override
public void onStop() { public void onStop() {
final Bus bus = TwidereApplication.getInstance(getActivity()).getMessageBus(); mBus.unregister(mStatusesBusCallback);
assert bus != null;
bus.unregister(mStatusesBusCallback);
final RecyclerView recyclerView = getRecyclerView(); final RecyclerView recyclerView = getRecyclerView();
if (mActiveHotMobiScrollTracker != null) { if (mActiveHotMobiScrollTracker != null) {
recyclerView.removeOnScrollListener(mActiveHotMobiScrollTracker); recyclerView.removeOnScrollListener(mActiveHotMobiScrollTracker);

View File

@ -36,6 +36,8 @@ import android.support.v4.view.LayoutInflaterFactory;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import com.squareup.otto.Bus;
import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.activity.iface.IThemedActivity; import org.mariotaku.twidere.activity.iface.IThemedActivity;
import org.mariotaku.twidere.activity.support.BaseAppCompatActivity; import org.mariotaku.twidere.activity.support.BaseAppCompatActivity;
@ -62,6 +64,8 @@ public class BaseSupportFragment extends Fragment implements IBaseFragment, Cons
protected MediaLoaderWrapper mMediaLoader; protected MediaLoaderWrapper mMediaLoader;
@Inject @Inject
protected VideoLoader mVideoLoader; protected VideoLoader mVideoLoader;
@Inject
protected Bus mBus;
public BaseSupportFragment() { public BaseSupportFragment() {

View File

@ -39,7 +39,6 @@ import android.view.KeyEvent;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe; import com.squareup.otto.Subscribe;
import org.mariotaku.sqliteqb.library.Columns.Column; import org.mariotaku.sqliteqb.library.Columns.Column;
@ -52,7 +51,6 @@ import org.mariotaku.twidere.adapter.MessageEntriesAdapter;
import org.mariotaku.twidere.adapter.MessageEntriesAdapter.DirectMessageEntry; import org.mariotaku.twidere.adapter.MessageEntriesAdapter.DirectMessageEntry;
import org.mariotaku.twidere.adapter.MessageEntriesAdapter.MessageEntriesAdapterListener; import org.mariotaku.twidere.adapter.MessageEntriesAdapter.MessageEntriesAdapterListener;
import org.mariotaku.twidere.adapter.decorator.DividerItemDecoration; import org.mariotaku.twidere.adapter.decorator.DividerItemDecoration;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts; import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages; import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages;
import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages.Inbox; import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages.Inbox;
@ -274,8 +272,7 @@ public class DirectMessagesFragment extends AbsContentRecyclerViewFragment<Messa
super.onStart(); super.onStart();
final ContentResolver resolver = getContentResolver(); final ContentResolver resolver = getContentResolver();
resolver.registerContentObserver(Accounts.CONTENT_URI, true, mReloadContentObserver); resolver.registerContentObserver(Accounts.CONTENT_URI, true, mReloadContentObserver);
final Bus bus = TwidereApplication.getInstance(getActivity()).getMessageBus(); mBus.register(this);
bus.register(this);
final MessageEntriesAdapter adapter = getAdapter(); final MessageEntriesAdapter adapter = getAdapter();
adapter.updateReadState(); adapter.updateReadState();
updateRefreshState(); updateRefreshState();
@ -283,8 +280,7 @@ public class DirectMessagesFragment extends AbsContentRecyclerViewFragment<Messa
@Override @Override
public void onStop() { public void onStop() {
final Bus bus = TwidereApplication.getInstance(getActivity()).getMessageBus(); mBus.unregister(this);
bus.unregister(this);
final ContentResolver resolver = getContentResolver(); final ContentResolver resolver = getContentResolver();
resolver.unregisterContentObserver(mReloadContentObserver); resolver.unregisterContentObserver(mReloadContentObserver);
super.onStop(); super.onStop();

View File

@ -68,7 +68,6 @@ import android.widget.TextView;
import com.github.johnpersano.supertoasts.SuperToast; import com.github.johnpersano.supertoasts.SuperToast;
import com.github.johnpersano.supertoasts.SuperToast.Duration; import com.github.johnpersano.supertoasts.SuperToast.Duration;
import com.github.johnpersano.supertoasts.SuperToast.OnDismissListener; import com.github.johnpersano.supertoasts.SuperToast.OnDismissListener;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe; import com.squareup.otto.Subscribe;
import org.mariotaku.sqliteqb.library.Columns.Column; import org.mariotaku.sqliteqb.library.Columns.Column;
@ -82,7 +81,6 @@ import org.mariotaku.twidere.adapter.AccountsSpinnerAdapter;
import org.mariotaku.twidere.adapter.MessageConversationAdapter; import org.mariotaku.twidere.adapter.MessageConversationAdapter;
import org.mariotaku.twidere.adapter.SimpleParcelableUsersAdapter; import org.mariotaku.twidere.adapter.SimpleParcelableUsersAdapter;
import org.mariotaku.twidere.adapter.iface.IBaseCardAdapter.MenuButtonClickListener; import org.mariotaku.twidere.adapter.iface.IBaseCardAdapter.MenuButtonClickListener;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.constant.SharedPreferenceConstants; import org.mariotaku.twidere.constant.SharedPreferenceConstants;
import org.mariotaku.twidere.loader.support.UserSearchLoader; import org.mariotaku.twidere.loader.support.UserSearchLoader;
import org.mariotaku.twidere.model.ParcelableAccount; import org.mariotaku.twidere.model.ParcelableAccount;
@ -103,7 +101,6 @@ import org.mariotaku.twidere.util.EditTextEnterHandler.EnterListener;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler; import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback; import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.TakeAllKeyboardShortcut; import org.mariotaku.twidere.util.KeyboardShortcutsHandler.TakeAllKeyboardShortcut;
import org.mariotaku.twidere.util.MediaLoaderWrapper;
import org.mariotaku.twidere.util.MenuUtils; import org.mariotaku.twidere.util.MenuUtils;
import org.mariotaku.twidere.util.ParseUtils; import org.mariotaku.twidere.util.ParseUtils;
import org.mariotaku.twidere.util.ReadStateManager; import org.mariotaku.twidere.util.ReadStateManager;
@ -353,9 +350,7 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
@Override @Override
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
final Bus bus = TwidereApplication.getInstance(getActivity()).getMessageBus(); mBus.register(this);
assert bus != null;
bus.register(this);
updateEmptyText(); updateEmptyText();
mMessagesListView.addOnScrollListener(mScrollListener); mMessagesListView.addOnScrollListener(mScrollListener);
mScrollListener.reset(); mScrollListener.reset();
@ -381,9 +376,7 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
@Override @Override
public void onStop() { public void onStop() {
mMessagesListView.removeOnScrollListener(mScrollListener); mMessagesListView.removeOnScrollListener(mScrollListener);
final Bus bus = TwidereApplication.getInstance(getActivity()).getMessageBus(); mBus.unregister(this);
assert bus != null;
bus.unregister(this);
if (mPopupMenu != null) { if (mPopupMenu != null) {
mPopupMenu.dismiss(); mPopupMenu.dismiss();
} }

View File

@ -23,11 +23,8 @@ import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import com.squareup.otto.Bus;
import org.mariotaku.twidere.adapter.ParcelableActivitiesAdapter; import org.mariotaku.twidere.adapter.ParcelableActivitiesAdapter;
import org.mariotaku.twidere.adapter.iface.IActivitiesAdapter; import org.mariotaku.twidere.adapter.iface.IActivitiesAdapter;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.model.ParcelableActivity; import org.mariotaku.twidere.model.ParcelableActivity;
import java.util.List; import java.util.List;
@ -50,14 +47,12 @@ public abstract class ParcelableActivitiesFragment extends AbsActivitiesFragment
@Override @Override
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
final Bus bus = TwidereApplication.getInstance(getActivity()).getMessageBus(); mBus.register(this);
bus.register(this);
} }
@Override @Override
public void onStop() { public void onStop() {
final Bus bus = TwidereApplication.getInstance(getActivity()).getMessageBus(); mBus.unregister(this);
bus.unregister(this);
super.onStop(); super.onStop();
} }

View File

@ -24,12 +24,10 @@ import android.os.Bundle;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe; import com.squareup.otto.Subscribe;
import org.mariotaku.twidere.adapter.ParcelableStatusesAdapter; import org.mariotaku.twidere.adapter.ParcelableStatusesAdapter;
import org.mariotaku.twidere.adapter.iface.IStatusesAdapter; import org.mariotaku.twidere.adapter.iface.IStatusesAdapter;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.model.ParcelableStatus; import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.util.message.FavoriteCreatedEvent; import org.mariotaku.twidere.util.message.FavoriteCreatedEvent;
import org.mariotaku.twidere.util.message.FavoriteDestroyedEvent; import org.mariotaku.twidere.util.message.FavoriteDestroyedEvent;
@ -82,16 +80,12 @@ public abstract class ParcelableStatusesFragment extends AbsStatusesFragment<Lis
@Override @Override
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
final Bus bus = TwidereApplication.getInstance(getActivity()).getMessageBus(); mBus.register(this);
assert bus != null;
bus.register(this);
} }
@Override @Override
public void onStop() { public void onStop() {
final Bus bus = TwidereApplication.getInstance(getActivity()).getMessageBus(); mBus.unregister(this);
assert bus != null;
bus.unregister(this);
super.onStop(); super.onStop();
} }

View File

@ -32,11 +32,9 @@ import android.view.View;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.ListView; import android.widget.ListView;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe; import com.squareup.otto.Subscribe;
import org.mariotaku.twidere.adapter.TrendsAdapter; import org.mariotaku.twidere.adapter.TrendsAdapter;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.provider.TwidereDataStore.CachedTrends; import org.mariotaku.twidere.provider.TwidereDataStore.CachedTrends;
import org.mariotaku.twidere.util.AsyncTwitterWrapper; import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.MultiSelectManager; import org.mariotaku.twidere.util.MultiSelectManager;
@ -123,16 +121,12 @@ public class TrendsSuggestionsFragment extends AbsContentListViewFragment<Trends
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
getLoaderManager().restartLoader(0, null, this); getLoaderManager().restartLoader(0, null, this);
final Bus bus = TwidereApplication.getInstance(getActivity()).getMessageBus(); mBus.register(this);
assert bus != null;
bus.register(this);
} }
@Override @Override
public void onStop() { public void onStop() {
final Bus bus = TwidereApplication.getInstance(getActivity()).getMessageBus(); mBus.unregister(this);
assert bus != null;
bus.unregister(this);
super.onStop(); super.onStop();
} }

View File

@ -82,7 +82,6 @@ import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
import com.meizu.flyme.reflect.StatusBarProxy; import com.meizu.flyme.reflect.StatusBarProxy;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe; import com.squareup.otto.Subscribe;
import org.mariotaku.sqliteqb.library.Expression; import org.mariotaku.sqliteqb.library.Expression;
@ -798,9 +797,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
@Override @Override
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
final Bus bus = TwidereApplication.getInstance(getActivity()).getMessageBus(); mBus.register(this);
assert bus != null;
bus.register(this);
} }
@Override @Override
@ -811,9 +808,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
@Override @Override
public void onStop() { public void onStop() {
final Bus bus = TwidereApplication.getInstance(getActivity()).getMessageBus(); mBus.unregister(this);
assert bus != null;
bus.unregister(this);
super.onStop(); super.onStop();
} }

View File

@ -546,7 +546,7 @@ public class UserProfileEditorFragment extends BaseSupportFragment implements On
public UpdateProfileImageTaskInternal(final Context context, final AsyncTaskManager manager, public UpdateProfileImageTaskInternal(final Context context, final AsyncTaskManager manager,
final long account_id, final Uri image_uri, final boolean delete_image) { final long account_id, final Uri image_uri, final boolean delete_image) {
super(context, manager, account_id, image_uri, delete_image); super(context, account_id, image_uri, delete_image);
} }
@Override @Override

View File

@ -157,6 +157,8 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
private ImagePreloader mImagePreloader; private ImagePreloader mImagePreloader;
@Inject @Inject
Network mNetwork; Network mNetwork;
@Inject
Bus mBus;
private Handler mHandler; private Handler mHandler;
private boolean mHomeActivityInBackground; private boolean mHomeActivityInBackground;
@ -1008,15 +1010,12 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
private void notifyUnreadCountChanged(final int position) { private void notifyUnreadCountChanged(final int position) {
final Context context = getContext(); final Context context = getContext();
final Bus bus = TwidereApplication.getInstance(context).getMessageBus(); mHandler.post(new Runnable() {
if (bus != null) { @Override
mHandler.post(new Runnable() { public void run() {
@Override mBus.post(new UnreadCountUpdatedEvent(position));
public void run() { }
bus.post(new UnreadCountUpdatedEvent(position)); });
}
});
}
notifyContentObserver(UnreadCounts.CONTENT_URI); notifyContentObserver(UnreadCounts.CONTENT_URI);
} }

View File

@ -25,23 +25,33 @@ import android.os.AsyncTask;
import com.squareup.otto.Bus; import com.squareup.otto.Bus;
import org.mariotaku.twidere.Constants; import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.util.AsyncTaskManager; import org.mariotaku.twidere.util.AsyncTaskManager;
import org.mariotaku.twidere.util.dagger.ApplicationModule;
import org.mariotaku.twidere.util.dagger.DaggerGeneralComponent;
import org.mariotaku.twidere.util.message.TaskStateChangedEvent; import org.mariotaku.twidere.util.message.TaskStateChangedEvent;
import javax.inject.Inject;
public abstract class ManagedAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> implements public abstract class ManagedAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> implements
Constants { Constants {
private final AsyncTaskManager manager; @Inject
protected AsyncTaskManager manager;
@Inject
protected Bus bus;
private final Context context; private final Context context;
private final String tag; private final String tag;
public ManagedAsyncTask(final Context context, final AsyncTaskManager manager) { public ManagedAsyncTask(final Context context) {
this(context, manager, null); this(context, null);
} }
public ManagedAsyncTask(final Context context, final AsyncTaskManager manager, final String tag) { public ManagedAsyncTask(final Context context, final String tag) {
this.manager = manager; //noinspection unchecked
DaggerGeneralComponent.builder()
.applicationModule(ApplicationModule.get(context))
.build()
.inject((ManagedAsyncTask<Object, Object, Object>) this);
this.context = context; this.context = context;
this.tag = tag; this.tag = tag;
} }
@ -63,21 +73,18 @@ public abstract class ManagedAsyncTask<Params, Progress, Result> extends AsyncTa
@Override @Override
protected void onCancelled() { protected void onCancelled() {
super.onCancelled(); super.onCancelled();
final Bus bus = TwidereApplication.getInstance(context).getMessageBus();
bus.post(new TaskStateChangedEvent()); bus.post(new TaskStateChangedEvent());
} }
@Override @Override
protected void onPostExecute(final Result result) { protected void onPostExecute(final Result result) {
super.onPostExecute(result); super.onPostExecute(result);
final Bus bus = TwidereApplication.getInstance(context).getMessageBus();
bus.post(new TaskStateChangedEvent()); bus.post(new TaskStateChangedEvent());
} }
@Override @Override
protected void onPreExecute() { protected void onPreExecute() {
super.onPreExecute(); super.onPreExecute();
final Bus bus = TwidereApplication.getInstance(context).getMessageBus();
bus.post(new TaskStateChangedEvent()); bus.post(new TaskStateChangedEvent());
} }

View File

@ -117,6 +117,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final AsyncTaskManager mAsyncTaskManager; private final AsyncTaskManager mAsyncTaskManager;
private final SharedPreferencesWrapper mPreferences; private final SharedPreferencesWrapper mPreferences;
private final ContentResolver mResolver; private final ContentResolver mResolver;
private final Bus mBus;
private int mGetHomeTimelineTaskId, mGetMentionsTaskId; private int mGetHomeTimelineTaskId, mGetMentionsTaskId;
private int mGetReceivedDirectMessagesTaskId, mGetSentDirectMessagesTaskId; private int mGetReceivedDirectMessagesTaskId, mGetSentDirectMessagesTaskId;
@ -129,12 +130,13 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private CopyOnWriteArraySet<Long> mSendingDraftIds = new CopyOnWriteArraySet<>(); private CopyOnWriteArraySet<Long> mSendingDraftIds = new CopyOnWriteArraySet<>();
public AsyncTwitterWrapper(final Context context, final AsyncTaskManager manager) { public AsyncTwitterWrapper(final Context context, final AsyncTaskManager manager, Bus bus) {
mContext = context; mContext = context;
mAsyncTaskManager = manager; mAsyncTaskManager = manager;
mPreferences = SharedPreferencesWrapper.getInstance(context, SHARED_PREFERENCES_NAME, mPreferences = SharedPreferencesWrapper.getInstance(context, SHARED_PREFERENCES_NAME,
Context.MODE_PRIVATE, SharedPreferenceConstants.class); Context.MODE_PRIVATE, SharedPreferenceConstants.class);
mResolver = context.getContentResolver(); mResolver = context.getContentResolver();
mBus = bus;
} }
public int acceptFriendshipAsync(final long accountId, final long userId) { public int acceptFriendshipAsync(final long accountId, final long userId) {
@ -507,7 +509,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
} }
public BackgroundTask updateFriendship(final long accountId, final long userId, final FriendshipUpdate update) { public BackgroundTask updateFriendship(final long accountId, final long userId, final FriendshipUpdate update) {
final Bus bus = TwidereApplication.getInstance(mContext).getMessageBus(); final Bus bus = mBus;
if (bus == null) return null; if (bus == null) return null;
return AsyncManager.runBackgroundTask(new TaskRunnable<Object, SingleResponse<Relationship>, Bus>() { return AsyncManager.runBackgroundTask(new TaskRunnable<Object, SingleResponse<Relationship>, Bus>() {
@Override @Override
@ -538,7 +540,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final Context mContext; private final Context mContext;
GetSavedSearchesTask(AsyncTwitterWrapper twitter) { GetSavedSearchesTask(AsyncTwitterWrapper twitter) {
super(twitter.getContext(), twitter.getTaskManager()); super(twitter.getContext());
this.mContext = twitter.getContext(); this.mContext = twitter.getContext();
} }
@ -571,7 +573,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
public UpdateProfileBannerImageTask(final Context context, final AsyncTaskManager manager, public UpdateProfileBannerImageTask(final Context context, final AsyncTaskManager manager,
final long account_id, final Uri image_uri, final boolean delete_image) { final long account_id, final Uri image_uri, final boolean delete_image) {
super(context, manager); super(context);
mContext = context; mContext = context;
mAccountId = account_id; mAccountId = account_id;
mImageUri = image_uri; mImageUri = image_uri;
@ -583,8 +585,8 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
super.onPostExecute(result); super.onPostExecute(result);
if (result.hasData()) { if (result.hasData()) {
Utils.showOkMessage(mContext, R.string.profile_banner_image_updated, false); Utils.showOkMessage(mContext, R.string.profile_banner_image_updated, false);
final Bus bus = TwidereApplication.getInstance(mContext).getMessageBus();
assert bus != null;
bus.post(new ProfileUpdatedEvent(result.getData())); bus.post(new ProfileUpdatedEvent(result.getData()));
} else { } else {
Utils.showErrorMessage(mContext, R.string.action_updating_profile_banner_image, result.getException(), Utils.showErrorMessage(mContext, R.string.action_updating_profile_banner_image, result.getException(),
@ -621,9 +623,9 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final boolean mDeleteImage; private final boolean mDeleteImage;
private final Context mContext; private final Context mContext;
public UpdateProfileImageTask(final Context context, final AsyncTaskManager manager, final long account_id, public UpdateProfileImageTask(final Context context, final long account_id,
final Uri image_uri, final boolean delete_image) { final Uri image_uri, final boolean delete_image) {
super(context, manager); super(context);
this.mContext = context; this.mContext = context;
this.mAccountId = account_id; this.mAccountId = account_id;
this.mImageUri = image_uri; this.mImageUri = image_uri;
@ -654,8 +656,6 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
super.onPostExecute(result); super.onPostExecute(result);
if (result.hasData()) { if (result.hasData()) {
Utils.showOkMessage(mContext, R.string.profile_image_updated, false); Utils.showOkMessage(mContext, R.string.profile_image_updated, false);
final Bus bus = TwidereApplication.getInstance(mContext).getMessageBus();
assert bus != null;
bus.post(new ProfileUpdatedEvent(result.getData())); bus.post(new ProfileUpdatedEvent(result.getData()));
} else { } else {
Utils.showErrorMessage(mContext, R.string.action_updating_profile_image, result.getException(), true); Utils.showErrorMessage(mContext, R.string.action_updating_profile_image, result.getException(), true);
@ -670,7 +670,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long mUserId; private final long mUserId;
public AcceptFriendshipTask(final long account_id, final long user_id) { public AcceptFriendshipTask(final long account_id, final long user_id) {
super(mContext, mAsyncTaskManager); super(mContext);
mAccountId = account_id; mAccountId = account_id;
mUserId = user_id; mUserId = user_id;
} }
@ -725,7 +725,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final ParcelableUser[] users; private final ParcelableUser[] users;
public AddUserListMembersTask(final long accountId, final long listId, final ParcelableUser[] users) { public AddUserListMembersTask(final long accountId, final long listId, final ParcelableUser[] users) {
super(mContext, mAsyncTaskManager); super(mContext);
this.accountId = accountId; this.accountId = accountId;
this.listId = listId; this.listId = listId;
this.users = users; this.users = users;
@ -813,7 +813,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long account_id, user_id; private final long account_id, user_id;
public CreateBlockTask(final long account_id, final long user_id) { public CreateBlockTask(final long account_id, final long user_id) {
super(mContext, mAsyncTaskManager); super(mContext);
this.account_id = account_id; this.account_id = account_id;
this.user_id = user_id; this.user_id = user_id;
} }
@ -852,8 +852,8 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
final String message = mContext.getString(R.string.blocked_user, final String message = mContext.getString(R.string.blocked_user,
manager.getDisplayName(result.getData(), nameFirst, true)); manager.getDisplayName(result.getData(), nameFirst, true));
Utils.showInfoMessage(mContext, message, false); Utils.showInfoMessage(mContext, message, false);
final Bus bus = application.getMessageBus();
assert bus != null;
bus.post(new FriendshipUserUpdatedEvent(result.getData())); bus.post(new FriendshipUserUpdatedEvent(result.getData()));
} else { } else {
Utils.showErrorMessage(mContext, R.string.action_blocking, result.getException(), true); Utils.showErrorMessage(mContext, R.string.action_blocking, result.getException(), true);
@ -868,7 +868,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long account_id, status_id; private final long account_id, status_id;
public CreateFavoriteTask(final long account_id, final long status_id) { public CreateFavoriteTask(final long account_id, final long status_id) {
super(mContext, mAsyncTaskManager); super(mContext);
this.account_id = account_id; this.account_id = account_id;
this.status_id = status_id; this.status_id = status_id;
} }
@ -905,8 +905,8 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
protected void onPreExecute() { protected void onPreExecute() {
super.onPreExecute(); super.onPreExecute();
mCreatingFavoriteIds.put(account_id, status_id); mCreatingFavoriteIds.put(account_id, status_id);
final Bus bus = TwidereApplication.getInstance(mContext).getMessageBus();
assert bus != null;
bus.post(new StatusListChangedEvent()); bus.post(new StatusListChangedEvent());
} }
@ -924,8 +924,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
// END HotMobi // END HotMobi
final Bus bus = TwidereApplication.getInstance(mContext).getMessageBus();
assert bus != null;
bus.post(new FavoriteCreatedEvent(status)); bus.post(new FavoriteCreatedEvent(status));
Utils.showOkMessage(mContext, R.string.status_favorited, false); Utils.showOkMessage(mContext, R.string.status_favorited, false);
} else { } else {
@ -942,7 +941,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long user_id; private final long user_id;
public CreateFriendshipTask(final long accountId, final long user_id) { public CreateFriendshipTask(final long accountId, final long user_id) {
super(mContext, mAsyncTaskManager); super(mContext);
this.mAccountId = accountId; this.mAccountId = accountId;
this.user_id = user_id; this.user_id = user_id;
} }
@ -985,8 +984,8 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
manager.getDisplayName(user, nameFirst, true)); manager.getDisplayName(user, nameFirst, true));
} }
Utils.showOkMessage(mContext, message, false); Utils.showOkMessage(mContext, message, false);
final Bus bus = application.getMessageBus();
assert bus != null;
bus.post(new FriendshipUserUpdatedEvent(result.getData())); bus.post(new FriendshipUserUpdatedEvent(result.getData()));
} else { } else {
Utils.showErrorMessage(mContext, R.string.action_following, result.getException(), false); Utils.showErrorMessage(mContext, R.string.action_following, result.getException(), false);
@ -1002,7 +1001,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long[] user_ids; private final long[] user_ids;
public CreateMultiBlockTask(final long account_id, final long[] user_ids) { public CreateMultiBlockTask(final long account_id, final long[] user_ids) {
super(mContext, mAsyncTaskManager); super(mContext);
this.account_id = account_id; this.account_id = account_id;
this.user_ids = user_ids; this.user_ids = user_ids;
} }
@ -1059,7 +1058,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long mAccountId, mUserId; private final long mAccountId, mUserId;
public CreateMuteTask(final long accountId, final long userId) { public CreateMuteTask(final long accountId, final long userId) {
super(mContext, mAsyncTaskManager); super(mContext);
this.mAccountId = accountId; this.mAccountId = accountId;
this.mUserId = userId; this.mUserId = userId;
} }
@ -1090,8 +1089,8 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
final String message = mContext.getString(R.string.muted_user, final String message = mContext.getString(R.string.muted_user,
manager.getDisplayName(result.getData(), nameFirst, true)); manager.getDisplayName(result.getData(), nameFirst, true));
Utils.showInfoMessage(mContext, message, false); Utils.showInfoMessage(mContext, message, false);
final Bus bus = application.getMessageBus();
assert bus != null;
bus.post(new FriendshipUserUpdatedEvent(result.getData())); bus.post(new FriendshipUserUpdatedEvent(result.getData()));
} else { } else {
Utils.showErrorMessage(mContext, R.string.action_muting, result.getException(), true); Utils.showErrorMessage(mContext, R.string.action_muting, result.getException(), true);
@ -1107,7 +1106,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final String mQuery; private final String mQuery;
CreateSavedSearchTask(final long accountId, final String query) { CreateSavedSearchTask(final long accountId, final String query) {
super(mContext, mAsyncTaskManager); super(mContext);
mAccountId = accountId; mAccountId = accountId;
mQuery = query; mQuery = query;
} }
@ -1142,7 +1141,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long listId; private final long listId;
public CreateUserListSubscriptionTask(final long accountId, final long listId) { public CreateUserListSubscriptionTask(final long accountId, final long listId) {
super(mContext, mAsyncTaskManager); super(mContext);
this.accountId = accountId; this.accountId = accountId;
this.listId = listId; this.listId = listId;
} }
@ -1186,7 +1185,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
public CreateUserListTask(final long account_id, final String list_name, final boolean is_public, public CreateUserListTask(final long account_id, final String list_name, final boolean is_public,
final String description) { final String description) {
super(mContext, mAsyncTaskManager); super(mContext);
this.account_id = account_id; this.account_id = account_id;
this.list_name = list_name; this.list_name = list_name;
this.description = description; this.description = description;
@ -1233,7 +1232,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final ParcelableUser[] users; private final ParcelableUser[] users;
public DeleteUserListMembersTask(final long accountId, final long userListId, final ParcelableUser[] users) { public DeleteUserListMembersTask(final long accountId, final long userListId, final ParcelableUser[] users) {
super(mContext, mAsyncTaskManager); super(mContext);
mAccountId = accountId; mAccountId = accountId;
mUserListId = userListId; mUserListId = userListId;
this.users = users; this.users = users;
@ -1292,7 +1291,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long mUserId; private final long mUserId;
public DenyFriendshipTask(final long account_id, final long user_id) { public DenyFriendshipTask(final long account_id, final long user_id) {
super(mContext, mAsyncTaskManager); super(mContext);
mAccountId = account_id; mAccountId = account_id;
mUserId = user_id; mUserId = user_id;
} }
@ -1345,7 +1344,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long mUserId; private final long mUserId;
public DestroyBlockTask(final long accountId, final long userId) { public DestroyBlockTask(final long accountId, final long userId) {
super(mContext, mAsyncTaskManager); super(mContext);
mAccountId = accountId; mAccountId = accountId;
mUserId = userId; mUserId = userId;
} }
@ -1373,8 +1372,8 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
final String message = mContext.getString(R.string.unblocked_user, final String message = mContext.getString(R.string.unblocked_user,
manager.getDisplayName(result.getData(), nameFirst, true)); manager.getDisplayName(result.getData(), nameFirst, true));
Utils.showInfoMessage(mContext, message, false); Utils.showInfoMessage(mContext, message, false);
final Bus bus = application.getMessageBus();
assert bus != null;
bus.post(new FriendshipUserUpdatedEvent(result.getData())); bus.post(new FriendshipUserUpdatedEvent(result.getData()));
} else { } else {
Utils.showErrorMessage(mContext, R.string.action_unblocking, result.getException(), true); Utils.showErrorMessage(mContext, R.string.action_unblocking, result.getException(), true);
@ -1390,7 +1389,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long account_id; private final long account_id;
public DestroyDirectMessageTask(final long account_id, final long message_id) { public DestroyDirectMessageTask(final long account_id, final long message_id) {
super(mContext, mAsyncTaskManager); super(mContext);
this.account_id = account_id; this.account_id = account_id;
this.message_id = message_id; this.message_id = message_id;
@ -1447,7 +1446,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long accountId; private final long accountId;
public DestroyMessageConversationTask(final long accountId, final long userId) { public DestroyMessageConversationTask(final long accountId, final long userId) {
super(mContext, mAsyncTaskManager); super(mContext);
this.accountId = accountId; this.accountId = accountId;
this.userId = userId; this.userId = userId;
@ -1506,7 +1505,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long status_id; private final long status_id;
public DestroyFavoriteTask(final long account_id, final long status_id) { public DestroyFavoriteTask(final long account_id, final long status_id) {
super(mContext, mAsyncTaskManager); super(mContext);
this.account_id = account_id; this.account_id = account_id;
this.status_id = status_id; this.status_id = status_id;
} }
@ -1542,8 +1541,8 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
protected void onPreExecute() { protected void onPreExecute() {
super.onPreExecute(); super.onPreExecute();
mDestroyingFavoriteIds.put(account_id, status_id); mDestroyingFavoriteIds.put(account_id, status_id);
final Bus bus = TwidereApplication.getInstance(mContext).getMessageBus();
assert bus != null;
bus.post(new StatusListChangedEvent()); bus.post(new StatusListChangedEvent());
} }
@ -1559,9 +1558,6 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
HotMobiLogger.getInstance(getContext()).log(account_id, event); HotMobiLogger.getInstance(getContext()).log(account_id, event);
// END HotMobi // END HotMobi
final Bus bus = TwidereApplication.getInstance(mContext).getMessageBus();
assert bus != null;
bus.post(new FavoriteDestroyedEvent(status)); bus.post(new FavoriteDestroyedEvent(status));
Utils.showInfoMessage(mContext, R.string.status_unfavorited, false); Utils.showInfoMessage(mContext, R.string.status_unfavorited, false);
} else { } else {
@ -1578,7 +1574,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long user_id; private final long user_id;
public DestroyFriendshipTask(final long accountId, final long user_id) { public DestroyFriendshipTask(final long accountId, final long user_id) {
super(mContext, mAsyncTaskManager); super(mContext);
mAccountId = accountId; mAccountId = accountId;
this.user_id = user_id; this.user_id = user_id;
} }
@ -1621,8 +1617,6 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
final String message = mContext.getString(R.string.unfollowed_user, final String message = mContext.getString(R.string.unfollowed_user,
manager.getDisplayName(result.getData(), nameFirst, true)); manager.getDisplayName(result.getData(), nameFirst, true));
Utils.showInfoMessage(mContext, message, false); Utils.showInfoMessage(mContext, message, false);
final Bus bus = application.getMessageBus();
assert bus != null;
bus.post(new FriendshipUserUpdatedEvent(result.getData())); bus.post(new FriendshipUserUpdatedEvent(result.getData()));
} else { } else {
Utils.showErrorMessage(mContext, R.string.action_unfollowing, result.getException(), true); Utils.showErrorMessage(mContext, R.string.action_unfollowing, result.getException(), true);
@ -1638,7 +1632,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long mUserId; private final long mUserId;
public DestroyMuteTask(final long accountId, final long userId) { public DestroyMuteTask(final long accountId, final long userId) {
super(mContext, mAsyncTaskManager); super(mContext);
mAccountId = accountId; mAccountId = accountId;
mUserId = userId; mUserId = userId;
} }
@ -1666,8 +1660,8 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
final String message = mContext.getString(R.string.unmuted_user, final String message = mContext.getString(R.string.unmuted_user,
manager.getDisplayName(result.getData(), nameFirst, true)); manager.getDisplayName(result.getData(), nameFirst, true));
Utils.showInfoMessage(mContext, message, false); Utils.showInfoMessage(mContext, message, false);
final Bus bus = application.getMessageBus();
assert bus != null;
bus.post(new FriendshipUserUpdatedEvent(result.getData())); bus.post(new FriendshipUserUpdatedEvent(result.getData()));
} else { } else {
Utils.showErrorMessage(mContext, R.string.action_unmuting, result.getException(), true); Utils.showErrorMessage(mContext, R.string.action_unmuting, result.getException(), true);
@ -1683,7 +1677,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final int mSearchId; private final int mSearchId;
DestroySavedSearchTask(final long accountId, final int searchId) { DestroySavedSearchTask(final long accountId, final int searchId) {
super(mContext, mAsyncTaskManager); super(mContext);
mAccountId = accountId; mAccountId = accountId;
mSearchId = searchId; mSearchId = searchId;
} }
@ -1719,7 +1713,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long status_id; private final long status_id;
public DestroyStatusTask(final long account_id, final long status_id) { public DestroyStatusTask(final long account_id, final long status_id) {
super(mContext, mAsyncTaskManager); super(mContext);
this.account_id = account_id; this.account_id = account_id;
this.status_id = status_id; this.status_id = status_id;
} }
@ -1750,8 +1744,6 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
protected void onPreExecute() { protected void onPreExecute() {
super.onPreExecute(); super.onPreExecute();
mDestroyingStatusIds.put(account_id, status_id); mDestroyingStatusIds.put(account_id, status_id);
final Bus bus = TwidereApplication.getInstance(mContext).getMessageBus();
assert bus != null;
bus.post(new StatusListChangedEvent()); bus.post(new StatusListChangedEvent());
} }
@ -1765,8 +1757,6 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
} else { } else {
Utils.showInfoMessage(mContext, R.string.status_deleted, false); Utils.showInfoMessage(mContext, R.string.status_deleted, false);
} }
final Bus bus = TwidereApplication.getInstance(mContext).getMessageBus();
assert bus != null;
bus.post(new StatusDestroyedEvent(status)); bus.post(new StatusDestroyedEvent(status));
} else { } else {
Utils.showErrorMessage(mContext, R.string.action_deleting, result.getException(), true); Utils.showErrorMessage(mContext, R.string.action_deleting, result.getException(), true);
@ -1782,7 +1772,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long mListId; private final long mListId;
public DestroyUserListSubscriptionTask(final long accountId, final long listId) { public DestroyUserListSubscriptionTask(final long accountId, final long listId) {
super(mContext, mAsyncTaskManager); super(mContext);
mAccountId = accountId; mAccountId = accountId;
mListId = listId; mListId = listId;
} }
@ -1826,7 +1816,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long mListId; private final long mListId;
public DestroyUserListTask(final long accountId, final long listId) { public DestroyUserListTask(final long accountId, final long listId) {
super(mContext, mAsyncTaskManager); super(mContext);
mAccountId = accountId; mAccountId = accountId;
mListId = listId; mListId = listId;
} }
@ -1872,7 +1862,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
public GetDirectMessagesTask(final long[] account_ids, final long[] max_ids, final long[] since_ids, public GetDirectMessagesTask(final long[] account_ids, final long[] max_ids, final long[] since_ids,
final String tag) { final String tag) {
super(mContext, mAsyncTaskManager, tag); super(mContext, tag);
this.account_ids = account_ids; this.account_ids = account_ids;
this.max_ids = max_ids; this.max_ids = max_ids;
this.since_ids = since_ids; this.since_ids = since_ids;
@ -1962,16 +1952,12 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
@Override @Override
protected void onPreExecute() { protected void onPreExecute() {
super.onPreExecute(); super.onPreExecute();
final Bus bus = TwidereApplication.getInstance(getContext()).getMessageBus();
assert bus != null;
bus.post(new GetMessagesTaskEvent(getDatabaseUri(), true, null)); bus.post(new GetMessagesTaskEvent(getDatabaseUri(), true, null));
} }
@Override @Override
protected void onPostExecute(final List<MessageListResponse> result) { protected void onPostExecute(final List<MessageListResponse> result) {
super.onPostExecute(result); super.onPostExecute(result);
final Bus bus = TwidereApplication.getInstance(getContext()).getMessageBus();
assert bus != null;
bus.post(new GetMessagesTaskEvent(getDatabaseUri(), false, getException(result))); bus.post(new GetMessagesTaskEvent(getDatabaseUri(), false, getException(result)));
} }
@ -2155,7 +2141,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long[] mAccountIds, mMaxIds, mSinceIds; private final long[] mAccountIds, mMaxIds, mSinceIds;
public GetStatusesTask(final long[] account_ids, final long[] max_ids, final long[] since_ids, final String tag) { public GetStatusesTask(final long[] account_ids, final long[] max_ids, final long[] since_ids, final String tag) {
super(mContext, mAsyncTaskManager, tag); super(mContext, tag);
mAccountIds = account_ids; mAccountIds = account_ids;
mMaxIds = max_ids; mMaxIds = max_ids;
mSinceIds = since_ids; mSinceIds = since_ids;
@ -2240,16 +2226,12 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
@Override @Override
protected void onPostExecute(List<StatusListResponse> result) { protected void onPostExecute(List<StatusListResponse> result) {
super.onPostExecute(result); super.onPostExecute(result);
final Bus bus = TwidereApplication.getInstance(mContext).getMessageBus();
assert bus != null;
bus.post(new GetStatusesTaskEvent(getDatabaseUri(), false, getException(result))); bus.post(new GetStatusesTaskEvent(getDatabaseUri(), false, getException(result)));
} }
@Override @Override
protected void onPreExecute() { protected void onPreExecute() {
super.onPreExecute(); super.onPreExecute();
final Bus bus = TwidereApplication.getInstance(mContext).getMessageBus();
assert bus != null;
bus.post(new GetStatusesTaskEvent(getDatabaseUri(), true, null)); bus.post(new GetStatusesTaskEvent(getDatabaseUri(), true, null));
} }
@ -2299,7 +2281,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long[] mAccountIds, mMaxIds, mSinceIds; private final long[] mAccountIds, mMaxIds, mSinceIds;
public GetActivitiesTask(final long[] account_ids, final long[] max_ids, final long[] since_ids, final String tag) { public GetActivitiesTask(final long[] account_ids, final long[] max_ids, final long[] since_ids, final String tag) {
super(mContext, mAsyncTaskManager, tag); super(mContext, tag);
mAccountIds = account_ids; mAccountIds = account_ids;
mMaxIds = max_ids; mMaxIds = max_ids;
mSinceIds = since_ids; mSinceIds = since_ids;
@ -2379,16 +2361,16 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
@Override @Override
protected void onPostExecute(List<ActivityListResponse> result) { protected void onPostExecute(List<ActivityListResponse> result) {
super.onPostExecute(result); super.onPostExecute(result);
final Bus bus = TwidereApplication.getInstance(mContext).getMessageBus();
assert bus != null;
bus.post(new GetStatusesTaskEvent(getDatabaseUri(), false, getException(result))); bus.post(new GetStatusesTaskEvent(getDatabaseUri(), false, getException(result)));
} }
@Override @Override
protected void onPreExecute() { protected void onPreExecute() {
super.onPreExecute(); super.onPreExecute();
final Bus bus = TwidereApplication.getInstance(mContext).getMessageBus();
assert bus != null;
bus.post(new GetStatusesTaskEvent(getDatabaseUri(), true, null)); bus.post(new GetStatusesTaskEvent(getDatabaseUri(), true, null));
} }
@ -2444,7 +2426,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long account_id; private final long account_id;
public GetTrendsTask(final long account_id) { public GetTrendsTask(final long account_id) {
super(mContext, mAsyncTaskManager, TASK_TAG_GET_TRENDS); super(mContext, TASK_TAG_GET_TRENDS);
this.account_id = account_id; this.account_id = account_id;
} }
@ -2489,7 +2471,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long[] user_ids; private final long[] user_ids;
public ReportMultiSpamTask(final long account_id, final long[] user_ids) { public ReportMultiSpamTask(final long account_id, final long[] user_ids) {
super(mContext, mAsyncTaskManager); super(mContext);
this.account_id = account_id; this.account_id = account_id;
this.user_ids = user_ids; this.user_ids = user_ids;
} }
@ -2543,7 +2525,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long user_id; private final long user_id;
public ReportSpamTask(final long accountId, final long user_id) { public ReportSpamTask(final long accountId, final long user_id) {
super(mContext, mAsyncTaskManager); super(mContext);
this.mAccountId = accountId; this.mAccountId = accountId;
this.user_id = user_id; this.user_id = user_id;
} }
@ -2571,8 +2553,8 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
mResolver.delete(uri, where, null); mResolver.delete(uri, where, null);
} }
Utils.showInfoMessage(mContext, R.string.reported_user_for_spam, false); Utils.showInfoMessage(mContext, R.string.reported_user_for_spam, false);
final Bus bus = TwidereApplication.getInstance(mContext).getMessageBus();
assert bus != null;
bus.post(new FriendshipUserUpdatedEvent(result.getData())); bus.post(new FriendshipUserUpdatedEvent(result.getData()));
} else { } else {
Utils.showErrorMessage(mContext, R.string.action_reporting_for_spam, result.getException(), true); Utils.showErrorMessage(mContext, R.string.action_reporting_for_spam, result.getException(), true);
@ -2589,7 +2571,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final long status_id; private final long status_id;
public RetweetStatusTask(final long account_id, final long status_id) { public RetweetStatusTask(final long account_id, final long status_id) {
super(mContext, mAsyncTaskManager); super(mContext);
this.account_id = account_id; this.account_id = account_id;
this.status_id = status_id; this.status_id = status_id;
} }
@ -2614,8 +2596,8 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
protected void onPreExecute() { protected void onPreExecute() {
super.onPreExecute(); super.onPreExecute();
mCreatingRetweetIds.put(account_id, status_id); mCreatingRetweetIds.put(account_id, status_id);
final Bus bus = TwidereApplication.getInstance(mContext).getMessageBus();
assert bus != null;
bus.post(new StatusListChangedEvent()); bus.post(new StatusListChangedEvent());
} }
@ -2642,8 +2624,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
// END HotMobi // END HotMobi
final Bus bus = TwidereApplication.getInstance(mContext).getMessageBus();
assert bus != null;
bus.post(new StatusRetweetedEvent(status)); bus.post(new StatusRetweetedEvent(status));
Utils.showOkMessage(mContext, R.string.status_retweeted, false); Utils.showOkMessage(mContext, R.string.status_retweeted, false);
} else { } else {
@ -2669,7 +2650,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final Uri uri; private final Uri uri;
public StoreTrendsTask(final ListResponse<Trends> result, final Uri uri) { public StoreTrendsTask(final ListResponse<Trends> result, final Uri uri) {
super(mContext, mAsyncTaskManager, TASK_TAG_STORE_TRENDS); super(mContext, TASK_TAG_STORE_TRENDS);
response = result; response = result;
this.uri = uri; this.uri = uri;
} }
@ -2721,7 +2702,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private final UserListUpdate update; private final UserListUpdate update;
public UpdateUserListDetailsTask(final long accountId, final long listId, UserListUpdate update) { public UpdateUserListDetailsTask(final long accountId, final long listId, UserListUpdate update) {
super(mContext, mAsyncTaskManager); super(mContext);
this.accountId = accountId; this.accountId = accountId;
this.listId = listId; this.listId = listId;
this.update = update; this.update = update;

View File

@ -133,9 +133,13 @@ public class TwitterAPIFactory implements TwidereConstants {
} }
client.setSslSocketFactory(sslSocketFactory); client.setSslSocketFactory(sslSocketFactory);
} else {
client.setSslSocketFactory(null);
} }
if (enableProxy) { if (enableProxy) {
client.setProxy(getProxy(prefs)); client.setProxy(getProxy(prefs));
} else {
client.setProxy(Proxy.NO_PROXY);
} }
} }

View File

@ -27,9 +27,11 @@ import com.nostra13.universalimageloader.core.download.ImageDownloader;
import com.nostra13.universalimageloader.utils.IoUtils; import com.nostra13.universalimageloader.utils.IoUtils;
import com.squareup.otto.Bus; import com.squareup.otto.Bus;
import org.mariotaku.restfu.http.RestHttpClient;
import org.mariotaku.twidere.app.TwidereApplication; import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.model.SingleResponse; import org.mariotaku.twidere.model.SingleResponse;
import org.mariotaku.twidere.task.ManagedAsyncTask; import org.mariotaku.twidere.task.ManagedAsyncTask;
import org.mariotaku.twidere.util.imageloader.TwidereImageDownloader;
import org.mariotaku.twidere.util.message.VideoLoadFinishedEvent; import org.mariotaku.twidere.util.message.VideoLoadFinishedEvent;
import java.io.File; import java.io.File;
@ -48,13 +50,13 @@ public class VideoLoader {
private final AsyncTaskManager mTaskManager; private final AsyncTaskManager mTaskManager;
private final Bus mBus; private final Bus mBus;
public VideoLoader(Context context, ImageDownloader downloader, AsyncTaskManager manager) { public VideoLoader(Context context, RestHttpClient client, AsyncTaskManager manager, Bus bus) {
final TwidereApplication app = TwidereApplication.getInstance(context); final TwidereApplication app = TwidereApplication.getInstance(context);
mContext = context; mContext = context;
mDiskCache = app.getDiskCache(); mDiskCache = app.getDiskCache();
mImageDownloader = downloader; mImageDownloader = new TwidereImageDownloader(context, client, false);
mTaskManager = manager; mTaskManager = manager;
mBus = app.getMessageBus(); mBus = bus;
} }
public File getCachedVideoFile(final String url, boolean loadIfNotFound) { public File getCachedVideoFile(final String url, boolean loadIfNotFound) {
@ -74,10 +76,14 @@ public class VideoLoader {
public int loadVideo(String uri, VideoLoadingListener listener) { public int loadVideo(String uri, VideoLoadingListener listener) {
return loadVideo(uri, false, listener);
}
public int loadVideo(String uri, boolean forceReload, VideoLoadingListener listener) {
if (mTaskManager.hasRunningTasksForTag(uri)) { if (mTaskManager.hasRunningTasksForTag(uri)) {
return 0; return 0;
} }
return mTaskManager.add(new PreLoadVideoTask(mContext, this, listener, uri), true); return mTaskManager.add(new PreLoadVideoTask(mContext, this, listener, uri, forceReload), true);
} }
private void notifyTaskFinish(String uri, boolean succeeded) { private void notifyTaskFinish(String uri, boolean succeeded) {
@ -102,12 +108,16 @@ public class VideoLoader {
private final VideoLoader mPreLoader; private final VideoLoader mPreLoader;
private final VideoLoadingListener mListener; private final VideoLoadingListener mListener;
private final String mUri; private final String mUri;
private final boolean mForceReload;
private PreLoadVideoTask(final Context context, final VideoLoader preLoader, VideoLoadingListener listener, final String uri) { private PreLoadVideoTask(final Context context, final VideoLoader preLoader,
super(context, preLoader.mTaskManager, uri); final VideoLoadingListener listener, final String uri,
boolean forceReload) {
super(context, uri);
mPreLoader = preLoader; mPreLoader = preLoader;
mListener = listener; mListener = listener;
mUri = uri; mUri = uri;
mForceReload = forceReload;
} }
@Override @Override
@ -121,7 +131,7 @@ public class VideoLoader {
protected SingleResponse<File> doInBackground(Object... params) { protected SingleResponse<File> doInBackground(Object... params) {
final DiskCache diskCache = mPreLoader.mDiskCache; final DiskCache diskCache = mPreLoader.mDiskCache;
final File cachedFile = diskCache.get(mUri); final File cachedFile = diskCache.get(mUri);
if (cachedFile != null && cachedFile.isFile() && cachedFile.length() > 0) if (!mForceReload && cachedFile != null && cachedFile.isFile() && cachedFile.length() > 0)
return SingleResponse.getInstance(cachedFile); return SingleResponse.getInstance(cachedFile);
InputStream is = null; InputStream is = null;
try { try {

View File

@ -20,6 +20,7 @@
package org.mariotaku.twidere.util.dagger; package org.mariotaku.twidere.util.dagger;
import android.content.Context; import android.content.Context;
import android.os.Looper;
import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
@ -27,6 +28,8 @@ import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.utils.L; import com.nostra13.universalimageloader.utils.L;
import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.internal.Network; import com.squareup.okhttp.internal.Network;
import com.squareup.otto.Bus;
import com.squareup.otto.ThreadEnforcer;
import org.mariotaku.restfu.http.RestHttpClient; import org.mariotaku.restfu.http.RestHttpClient;
import org.mariotaku.twidere.BuildConfig; import org.mariotaku.twidere.BuildConfig;
@ -65,18 +68,25 @@ public class ApplicationModule {
private final AsyncTaskManager asyncTaskManager; private final AsyncTaskManager asyncTaskManager;
private final Network network; private final Network network;
private final RestHttpClient restHttpClient; private final RestHttpClient restHttpClient;
private final Bus bus;
public ApplicationModule(TwidereApplication application) { public ApplicationModule(TwidereApplication application) {
if (Thread.currentThread() != Looper.getMainLooper().getThread()) {
throw new RuntimeException("Module must be created inside main thread");
}
sharedPreferences = SharedPreferencesWrapper.getInstance(application, Constants.SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); sharedPreferences = SharedPreferencesWrapper.getInstance(application, Constants.SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
activityTracker = new ActivityTracker(); activityTracker = new ActivityTracker();
bus = new Bus(ThreadEnforcer.MAIN);
asyncTaskManager = AsyncTaskManager.getInstance(); asyncTaskManager = AsyncTaskManager.getInstance();
asyncTwitterWrapper = new AsyncTwitterWrapper(application, asyncTaskManager);
readStateManager = new ReadStateManager(application); readStateManager = new ReadStateManager(application);
network = new TwidereNetwork(application); network = new TwidereNetwork(application);
asyncTwitterWrapper = new AsyncTwitterWrapper(application, asyncTaskManager, bus);
restHttpClient = TwitterAPIFactory.getDefaultHttpClient(application, network); restHttpClient = TwitterAPIFactory.getDefaultHttpClient(application, network);
imageDownloader = new TwidereImageDownloader(application, restHttpClient, true); imageDownloader = new TwidereImageDownloader(application, restHttpClient, true);
imageLoader = createImageLoader(application, imageDownloader); imageLoader = createImageLoader(application, imageDownloader);
videoLoader = new VideoLoader(application, imageDownloader, asyncTaskManager); videoLoader = new VideoLoader(application, restHttpClient, asyncTaskManager, bus);
mediaLoaderWrapper = new MediaLoaderWrapper(imageLoader, videoLoader); mediaLoaderWrapper = new MediaLoaderWrapper(imageLoader, videoLoader);
} }
@ -103,6 +113,11 @@ public class ApplicationModule {
return restHttpClient; return restHttpClient;
} }
@Provides
public Bus getBus() {
return bus;
}
@Provides @Provides
public AsyncTaskManager getAsyncTaskManager() { public AsyncTaskManager getAsyncTaskManager() {
return asyncTaskManager; return asyncTaskManager;

View File

@ -39,6 +39,7 @@ import org.mariotaku.twidere.provider.TwidereCommandProvider;
import org.mariotaku.twidere.provider.TwidereDataProvider; import org.mariotaku.twidere.provider.TwidereDataProvider;
import org.mariotaku.twidere.service.BackgroundOperationService; import org.mariotaku.twidere.service.BackgroundOperationService;
import org.mariotaku.twidere.service.RefreshService; import org.mariotaku.twidere.service.RefreshService;
import org.mariotaku.twidere.task.ManagedAsyncTask;
import org.mariotaku.twidere.util.MultiSelectEventHandler; import org.mariotaku.twidere.util.MultiSelectEventHandler;
import org.mariotaku.twidere.view.holder.StatusViewHolder; import org.mariotaku.twidere.view.holder.StatusViewHolder;
@ -88,4 +89,6 @@ public interface GeneralComponent {
void inject(BaseArrayAdapter<Object> object); void inject(BaseArrayAdapter<Object> object);
void inject(DraftsAdapter object); void inject(DraftsAdapter object);
void inject(ManagedAsyncTask<Object, Object, Object> object);
} }

View File

@ -40,6 +40,7 @@ import org.mariotaku.twidere.api.twitter.model.Activity;
import org.mariotaku.twidere.model.ParcelableActivity; import org.mariotaku.twidere.model.ParcelableActivity;
import org.mariotaku.twidere.model.ParcelableStatus; import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.model.ParcelableUser; import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.model.ParcelableUserList;
import org.mariotaku.twidere.util.MediaLoaderWrapper; import org.mariotaku.twidere.util.MediaLoaderWrapper;
import org.mariotaku.twidere.util.UserColorNameManager; import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.view.ActionIconView; import org.mariotaku.twidere.view.ActionIconView;
@ -82,15 +83,20 @@ public class ActivityTitleSummaryViewHolder extends ViewHolder implements View.O
profileImageMoreNumber = (TextView) itemView.findViewById(R.id.activity_profile_image_more_number); profileImageMoreNumber = (TextView) itemView.findViewById(R.id.activity_profile_image_more_number);
} }
public void displayActivityAboutMe(ParcelableActivity activity) { public void displayActivity(ParcelableActivity activity, boolean byFriends) {
final Context context = adapter.getContext(); final Context context = adapter.getContext();
final Resources resources = adapter.getContext().getResources(); final Resources resources = adapter.getContext().getResources();
switch (activity.action) { switch (activity.action) {
case Activity.ACTION_FOLLOW: { case Activity.ACTION_FOLLOW: {
activityTypeView.setImageResource(R.drawable.ic_activity_action_follow); activityTypeView.setImageResource(R.drawable.ic_activity_action_follow);
activityTypeView.setColorFilter(ContextCompat.getColor(context, R.color.highlight_follow), Mode.SRC_ATOP); activityTypeView.setColorFilter(ContextCompat.getColor(context, R.color.highlight_follow), Mode.SRC_ATOP);
titleView.setText(getTitleStringAboutMe(R.string.activity_about_me_follow, if (byFriends) {
R.string.activity_about_me_follow_multi, activity.sources)); titleView.setText(getTitleStringByFriends(R.string.activity_by_friends_follow,
R.string.activity_by_friends_follow_multi, activity.sources, activity.target_users));
} else {
titleView.setText(getTitleStringAboutMe(R.string.activity_about_me_follow,
R.string.activity_about_me_follow_multi, activity.sources));
}
displayUserProfileImages(activity.sources); displayUserProfileImages(activity.sources);
summaryView.setVisibility(View.GONE); summaryView.setVisibility(View.GONE);
break; break;
@ -98,8 +104,13 @@ public class ActivityTitleSummaryViewHolder extends ViewHolder implements View.O
case Activity.ACTION_FAVORITE: { case Activity.ACTION_FAVORITE: {
activityTypeView.setImageResource(R.drawable.ic_activity_action_favorite); activityTypeView.setImageResource(R.drawable.ic_activity_action_favorite);
activityTypeView.setColorFilter(ContextCompat.getColor(context, R.color.highlight_favorite), Mode.SRC_ATOP); activityTypeView.setColorFilter(ContextCompat.getColor(context, R.color.highlight_favorite), Mode.SRC_ATOP);
titleView.setText(getTitleStringAboutMe(R.string.activity_about_me_favorite, if (byFriends) {
R.string.activity_about_me_favorite_multi, activity.sources)); titleView.setText(getTitleStringByFriends(R.string.activity_by_friends_favorite,
R.string.activity_by_friends_favorite_multi, activity.sources, activity.target_statuses));
} else {
titleView.setText(getTitleStringAboutMe(R.string.activity_about_me_favorite,
R.string.activity_about_me_favorite_multi, activity.sources));
}
displayUserProfileImages(activity.sources); displayUserProfileImages(activity.sources);
summaryView.setText(activity.target_statuses[0].text_unescaped); summaryView.setText(activity.target_statuses[0].text_unescaped);
summaryView.setVisibility(View.VISIBLE); summaryView.setVisibility(View.VISIBLE);
@ -108,14 +119,22 @@ public class ActivityTitleSummaryViewHolder extends ViewHolder implements View.O
case Activity.ACTION_RETWEET: { case Activity.ACTION_RETWEET: {
activityTypeView.setImageResource(R.drawable.ic_activity_action_retweet); activityTypeView.setImageResource(R.drawable.ic_activity_action_retweet);
activityTypeView.setColorFilter(ContextCompat.getColor(context, R.color.highlight_retweet), Mode.SRC_ATOP); activityTypeView.setColorFilter(ContextCompat.getColor(context, R.color.highlight_retweet), Mode.SRC_ATOP);
titleView.setText(getTitleStringAboutMe(R.string.activity_about_me_retweet, if (byFriends) {
R.string.activity_about_me_retweet_multi, activity.sources)); titleView.setText(getTitleStringByFriends(R.string.activity_by_friends_retweet,
R.string.activity_by_friends_retweet_multi, activity.sources, activity.target_statuses));
} else
titleView.setText(getTitleStringAboutMe(R.string.activity_about_me_retweet,
R.string.activity_about_me_retweet_multi, activity.sources));
displayUserProfileImages(activity.sources); displayUserProfileImages(activity.sources);
summaryView.setText(activity.target_statuses[0].text_unescaped); summaryView.setText(activity.target_statuses[0].text_unescaped);
summaryView.setVisibility(View.VISIBLE); summaryView.setVisibility(View.VISIBLE);
break; break;
} }
case Activity.ACTION_FAVORITED_RETWEET: { case Activity.ACTION_FAVORITED_RETWEET: {
if (byFriends) {
showNotSupported();
return;
}
activityTypeView.setImageResource(R.drawable.ic_activity_action_favorite); activityTypeView.setImageResource(R.drawable.ic_activity_action_favorite);
activityTypeView.setColorFilter(ContextCompat.getColor(context, R.color.highlight_favorite), Mode.SRC_ATOP); activityTypeView.setColorFilter(ContextCompat.getColor(context, R.color.highlight_favorite), Mode.SRC_ATOP);
titleView.setText(getTitleStringAboutMe(R.string.activity_about_me_favorited_retweet, titleView.setText(getTitleStringAboutMe(R.string.activity_about_me_favorited_retweet,
@ -126,6 +145,10 @@ public class ActivityTitleSummaryViewHolder extends ViewHolder implements View.O
break; break;
} }
case Activity.ACTION_RETWEETED_RETWEET: { case Activity.ACTION_RETWEETED_RETWEET: {
if (byFriends) {
showNotSupported();
return;
}
activityTypeView.setImageResource(R.drawable.ic_activity_action_retweet); activityTypeView.setImageResource(R.drawable.ic_activity_action_retweet);
activityTypeView.setColorFilter(ContextCompat.getColor(context, R.color.highlight_retweet), Mode.SRC_ATOP); activityTypeView.setColorFilter(ContextCompat.getColor(context, R.color.highlight_retweet), Mode.SRC_ATOP);
titleView.setText(getTitleStringAboutMe(R.string.activity_about_me_retweeted_retweet, titleView.setText(getTitleStringAboutMe(R.string.activity_about_me_retweeted_retweet,
@ -136,6 +159,10 @@ public class ActivityTitleSummaryViewHolder extends ViewHolder implements View.O
break; break;
} }
case Activity.ACTION_RETWEETED_MENTION: { case Activity.ACTION_RETWEETED_MENTION: {
if (byFriends) {
showNotSupported();
return;
}
activityTypeView.setImageResource(R.drawable.ic_activity_action_retweet); activityTypeView.setImageResource(R.drawable.ic_activity_action_retweet);
activityTypeView.setColorFilter(ContextCompat.getColor(context, R.color.highlight_retweet), Mode.SRC_ATOP); activityTypeView.setColorFilter(ContextCompat.getColor(context, R.color.highlight_retweet), Mode.SRC_ATOP);
titleView.setText(getTitleStringAboutMe(R.string.activity_about_me_retweeted_mention, titleView.setText(getTitleStringAboutMe(R.string.activity_about_me_retweeted_mention,
@ -146,6 +173,10 @@ public class ActivityTitleSummaryViewHolder extends ViewHolder implements View.O
break; break;
} }
case Activity.ACTION_FAVORITED_MENTION: { case Activity.ACTION_FAVORITED_MENTION: {
if (byFriends) {
showNotSupported();
return;
}
activityTypeView.setImageResource(R.drawable.ic_activity_action_favorite); activityTypeView.setImageResource(R.drawable.ic_activity_action_favorite);
activityTypeView.setColorFilter(ContextCompat.getColor(context, R.color.highlight_favorite), Mode.SRC_ATOP); activityTypeView.setColorFilter(ContextCompat.getColor(context, R.color.highlight_favorite), Mode.SRC_ATOP);
titleView.setText(getTitleStringAboutMe(R.string.activity_about_me_favorited_mention, titleView.setText(getTitleStringAboutMe(R.string.activity_about_me_favorited_mention,
@ -155,7 +186,34 @@ public class ActivityTitleSummaryViewHolder extends ViewHolder implements View.O
summaryView.setVisibility(View.VISIBLE); summaryView.setVisibility(View.VISIBLE);
break; break;
} }
case Activity.ACTION_LIST_CREATED: {
if (!byFriends) {
showNotSupported();
return;
}
activityTypeView.setImageResource(R.drawable.ic_activity_action_list_added);
activityTypeView.setColorFilter(activityTypeView.getDefaultColor(), Mode.SRC_ATOP);
titleView.setText(getTitleStringByFriends(R.string.activity_by_friends_list_created,
R.string.activity_by_friends_list_created_multi, activity.sources,
activity.target_object_user_lists));
displayUserProfileImages(activity.sources);
boolean firstLine = true;
summaryView.setText("");
for (ParcelableUserList item : activity.target_object_user_lists) {
if (!firstLine) {
summaryView.append("\n");
}
summaryView.append(item.description);
firstLine = false;
}
summaryView.setVisibility(View.VISIBLE);
break;
}
case Activity.ACTION_LIST_MEMBER_ADDED: { case Activity.ACTION_LIST_MEMBER_ADDED: {
if (byFriends) {
showNotSupported();
return;
}
activityTypeView.setImageResource(R.drawable.ic_activity_action_list_added); activityTypeView.setImageResource(R.drawable.ic_activity_action_list_added);
activityTypeView.setColorFilter(activityTypeView.getDefaultColor(), Mode.SRC_ATOP); activityTypeView.setColorFilter(activityTypeView.getDefaultColor(), Mode.SRC_ATOP);
if (activity.sources.length == 1 && activity.target_object_user_lists != null if (activity.sources.length == 1 && activity.target_object_user_lists != null
@ -181,34 +239,8 @@ public class ActivityTitleSummaryViewHolder extends ViewHolder implements View.O
} }
} }
public void displayActivitiesByFriends(ParcelableActivity activity) { private void showNotSupported() {
final Context context = adapter.getContext();
switch (activity.action) {
case Activity.ACTION_FOLLOW: {
activityTypeView.setImageResource(R.drawable.ic_activity_action_follow);
activityTypeView.setColorFilter(ContextCompat.getColor(context, R.color.highlight_follow), Mode.SRC_ATOP);
titleView.setText(getTitleStringByFriends(R.string.activity_by_friends_follow,
R.string.activity_by_friends_follow_multi, activity.sources, activity.target_users));
displayUserProfileImages(activity.sources);
summaryView.setVisibility(View.GONE);
break;
}
case Activity.ACTION_FAVORITE: {
activityTypeView.setImageResource(R.drawable.ic_activity_action_favorite);
activityTypeView.setColorFilter(ContextCompat.getColor(context, R.color.highlight_favorite), Mode.SRC_ATOP);
titleView.setText(getTitleStringByFriends(R.string.activity_by_friends_favorite,
R.string.activity_by_friends_favorite_multi, activity.sources, activity.target_statuses));
displayUserProfileImages(activity.sources);
summaryView.setText(activity.target_statuses[0].text_unescaped);
summaryView.setVisibility(View.VISIBLE);
break;
}
default: {
activityTypeView.setImageDrawable(null);
activityTypeView.clearColorFilter();
break;
}
}
} }
public void setTextSize(float textSize) { public void setTextSize(float textSize) {

View File

@ -78,11 +78,13 @@
android:textColor="?android:textColorPrimary" android:textColor="?android:textColorPrimary"
tools:text="12:34" /> tools:text="12:34" />
<SeekBar <ProgressBar
android:id="@+id/video_view_progress" android:id="@+id/video_view_progress"
style="?android:progressBarStyleHorizontal"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" /> android:layout_weight="1"
android:indeterminate="false" />
<TextView <TextView
android:id="@+id/duration_label" android:id="@+id/duration_label"

View File

@ -290,7 +290,9 @@
<string name="activity_by_friends_follow"><xliff:g id="user">%1$s</xliff:g> is following <xliff:g id="target">%2$s</xliff:g>.</string> <string name="activity_by_friends_follow"><xliff:g id="user">%1$s</xliff:g> is following <xliff:g id="target">%2$s</xliff:g>.</string>
<string name="activity_by_friends_follow_multi"><xliff:g id="user">%1$s</xliff:g> is following <xliff:g id="target">%2$s</xliff:g> and <xliff:g id="other">%3$s</xliff:g>.</string> <string name="activity_by_friends_follow_multi"><xliff:g id="user">%1$s</xliff:g> is following <xliff:g id="target">%2$s</xliff:g> and <xliff:g id="other">%3$s</xliff:g>.</string>
<string name="activity_by_friends_retweet"><xliff:g id="user">%1$s</xliff:g> retweeted <xliff:g id="target">%2$s</xliff:g>\'s tweet.</string> <string name="activity_by_friends_retweet"><xliff:g id="user">%1$s</xliff:g> retweeted <xliff:g id="target">%2$s</xliff:g>\'s tweet.</string>
<string name="activity_by_friends_retweet_multi"><xliff:g id="user">%1$s</xliff:g> retweeted <xliff:g id="target">%2$s</xliff:g> and <xliff:g id="other">%3$s</xliff:g>\'s tweet.</string>
<string name="activity_by_friends_list_member_added"><xliff:g id="user">%1$s</xliff:g> added <xliff:g id="target">%2$s</xliff:g> to list.</string> <string name="activity_by_friends_list_member_added"><xliff:g id="user">%1$s</xliff:g> added <xliff:g id="target">%2$s</xliff:g> to list.</string>
<string name="activity_by_friends_list_member_added_multi"><xliff:g id="user">%1$s</xliff:g> added <xliff:g id="target">%2$s</xliff:g> and <xliff:g id="other">%1$s</xliff:g> to list.</string>
<string name="activity_by_friends_list_created"><xliff:g id="user">%1$s</xliff:g> created list <xliff:g id="target">%2$s</xliff:g>.</string> <string name="activity_by_friends_list_created"><xliff:g id="user">%1$s</xliff:g> created list <xliff:g id="target">%2$s</xliff:g>.</string>
<string name="activity_by_friends_list_created_multi"><xliff:g id="user">%1$s</xliff:g> created list <xliff:g id="target">%2$s</xliff:g> and <xliff:g id="other">%1$s</xliff:g>.</string> <string name="activity_by_friends_list_created_multi"><xliff:g id="user">%1$s</xliff:g> created list <xliff:g id="target">%2$s</xliff:g> and <xliff:g id="other">%1$s</xliff:g>.</string>
<string name="status_not_updated">Tweet not sent.</string> <string name="status_not_updated">Tweet not sent.</string>