dagger migration

This commit is contained in:
Mariotaku Lee 2015-10-09 15:58:36 +08:00
parent 0e44a7cc51
commit d9c47eaf88
63 changed files with 480 additions and 685 deletions

View File

@ -29,8 +29,8 @@ import android.os.BatteryManager;
import android.text.TextUtils;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.util.Utils;
import org.mariotaku.twidere.util.dagger.ApplicationModule;
import java.io.File;
import java.text.SimpleDateFormat;
@ -114,7 +114,7 @@ public class HotMobiLogger {
}
public static HotMobiLogger getInstance(Context context) {
return ((TwidereApplication) context.getApplicationContext()).getHotMobiLogger();
return ApplicationModule.get(context).getHotMobiLogger();
}
public static LatLng getCachedLatLng(Context context) {

View File

@ -41,7 +41,6 @@ import org.mariotaku.twidere.BuildConfig;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.activity.iface.IThemedActivity;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.util.ActivityTracker;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
import org.mariotaku.twidere.util.StrictModeUtils;
@ -64,7 +63,8 @@ public abstract class BasePreferenceActivity extends AppCompatPreferenceActivity
@ShapeStyle
private int mProfileImageStyle;
private String mCurrentThemeBackgroundOption;
private KeyboardShortcutsHandler mKeyboardShortcutsHandler;
@Inject
protected KeyboardShortcutsHandler mKeyboardShortcutsHandler;
private String mCurrentThemeFontFamily;
@Inject
protected ActivityTracker mActivityTracker;
@ -166,7 +166,6 @@ public abstract class BasePreferenceActivity extends AppCompatPreferenceActivity
setupWindow();
super.onCreate(savedInstanceState);
DaggerGeneralComponent.builder().applicationModule(ApplicationModule.get(this)).build().inject(this);
mKeyboardShortcutsHandler = TwidereApplication.getInstance(this).getKeyboardShortcutsHandler();
}
@Override

View File

@ -27,6 +27,7 @@ import android.support.annotation.NonNull;
import org.mariotaku.twidere.BuildConfig;
import org.mariotaku.twidere.activity.iface.IThemedActivity;
import org.mariotaku.twidere.util.ActivityTracker;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
import org.mariotaku.twidere.util.StrictModeUtils;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.Utils;
@ -46,6 +47,8 @@ public abstract class BaseThemedActivity extends Activity implements IThemedActi
private int mProfileImageStyle;
@Inject
protected ActivityTracker mActivityTracker;
@Inject
protected KeyboardShortcutsHandler mKeyboardShortcutHandler;
@Override
protected void onStart() {

View File

@ -30,7 +30,6 @@ import android.widget.TextView;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutSpec;
import org.mariotaku.twidere.util.ThemeUtils;
@ -43,7 +42,6 @@ public class KeyboardShortcutPreferenceCompatActivity extends BaseThemedActivity
public static final String EXTRA_CONTEXT_TAG = "context_tag";
public static final String EXTRA_KEY_ACTION = "key_action";
private KeyboardShortcutsHandler mKeyboardShortcutHandler;
private TextView mKeysLabel, mConflictLabel;
private KeyboardShortcutSpec mKeySpec;
@ -68,7 +66,6 @@ public class KeyboardShortcutPreferenceCompatActivity extends BaseThemedActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mKeyboardShortcutHandler = TwidereApplication.getInstance(this).getKeyboardShortcutsHandler();
setContentView(R.layout.activity_keyboard_shortcut_input);
setTitle(KeyboardShortcutsHandler.getActionLabel(this, getKeyAction()));

View File

@ -122,8 +122,7 @@ public class SettingsWizardActivity extends Activity implements Constants {
public void gotoLastPage() {
if (mViewPager == null || mAdapter == null) return;
final int last = mAdapter.getCount() - 2;
mViewPager.setCurrentItem(Math.max(last, 0));
gotoPage(getPageCount() - 2);
}
public void gotoNextPage() {
@ -622,11 +621,20 @@ public class SettingsWizardActivity extends Activity implements Constants {
@Override
protected void nextStep() {
getActivity().gotoLastPage();
final SettingsWizardActivity activity = getActivity();
activity.gotoPage(activity.getPageCount() - 3);
}
}
private void gotoPage(int page) {
mViewPager.setCurrentItem(MathUtils.clamp(page, 0, getPageCount() - 1));
}
private int getPageCount() {
return mAdapter.getCount();
}
static class InitialTabSettingsTask extends AbsInitialSettingsTask {
InitialTabSettingsTask(final SettingsWizardActivity activity) {

View File

@ -54,7 +54,8 @@ public class BaseAppCompatActivity extends ThemedAppCompatActivity implements Co
KeyboardShortcutCallback {
// Utility classes
private KeyboardShortcutsHandler mKeyboardShortcutsHandler;
@Inject
protected KeyboardShortcutsHandler mKeyboardShortcutsHandler;
@Inject
protected ActivityTracker mActivityTracker;
@Inject
@ -163,7 +164,6 @@ public class BaseAppCompatActivity extends ThemedAppCompatActivity implements Co
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DaggerGeneralComponent.builder().applicationModule(ApplicationModule.get(this)).build().inject(this);
mKeyboardShortcutsHandler = TwidereApplication.getInstance(this).getKeyboardShortcutsHandler();
}

View File

@ -45,6 +45,7 @@ import android.os.Bundle;
import android.os.Parcelable;
import android.provider.BaseColumns;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
@ -56,7 +57,6 @@ import android.support.v7.widget.ActionMenuView.OnMenuItemClickListener;
import android.support.v7.widget.FixedLinearLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.Adapter;
import android.support.v7.widget.RecyclerView.ItemDecoration;
import android.support.v7.widget.RecyclerView.State;
import android.support.v7.widget.RecyclerView.ViewHolder;
@ -96,8 +96,7 @@ import com.twitter.Extractor;
import org.mariotaku.dynamicgridview.DraggableArrayAdapter;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.constant.SharedPreferenceConstants;
import org.mariotaku.twidere.adapter.BaseRecyclerViewAdapter;
import org.mariotaku.twidere.fragment.support.BaseSupportDialogFragment;
import org.mariotaku.twidere.fragment.support.SupportProgressDialogFragment;
import org.mariotaku.twidere.fragment.support.ViewStatusDialogFragment;
@ -123,12 +122,11 @@ import org.mariotaku.twidere.util.MathUtils;
import org.mariotaku.twidere.util.MediaLoaderWrapper;
import org.mariotaku.twidere.util.MenuUtils;
import org.mariotaku.twidere.util.ParseUtils;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.PermissionUtils;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.TwidereArrayUtils;
import org.mariotaku.twidere.util.TwidereValidator;
import org.mariotaku.twidere.util.TwitterContentUtils;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.util.Utils;
import org.mariotaku.twidere.view.ActionIconView;
import org.mariotaku.twidere.view.BadgeView;
@ -163,7 +161,6 @@ public class ComposeActivity extends ThemedFragmentActivity implements LocationL
private final Extractor mExtractor = new Extractor();
private TwidereValidator mValidator;
private LocationManager mLocationManager;
private SharedPreferencesWrapper mPreferences;
private ContentResolver mResolver;
private AsyncTask<Object, Object, ?> mTask;
private SupportMenuInflater mMenuInflater;
@ -301,9 +298,9 @@ public class ComposeActivity extends ThemedFragmentActivity implements LocationL
@Override
protected void onStop() {
saveAccountSelection();
if (ContextCompat.checkSelfPermission(this, Manifest.permission_group.LOCATION)
== PackageManager.PERMISSION_GRANTED) {
try {
mLocationManager.removeUpdates(this);
} catch (SecurityException ignore) {
}
super.onStop();
}
@ -587,10 +584,6 @@ public class ComposeActivity extends ThemedFragmentActivity implements LocationL
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
mPreferences = SharedPreferencesWrapper.getInstance(this, SHARED_PREFERENCES_NAME,
Context.MODE_PRIVATE, SharedPreferenceConstants.class);
final TwidereApplication app = TwidereApplication.getInstance(this);
mResolver = getContentResolver();
mValidator = new TwidereValidator(this);
setContentView(R.layout.activity_compose);
@ -1065,16 +1058,15 @@ public class ComposeActivity extends ThemedFragmentActivity implements LocationL
private boolean setComposeTitle(final Intent intent) {
final String action = intent.getAction();
final UserColorNameManager manager = UserColorNameManager.getInstance(this);
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
if (INTENT_ACTION_REPLY.equals(action)) {
if (mInReplyToStatus == null) return false;
final String displayName = manager.getDisplayName(mInReplyToStatus.user_id, mInReplyToStatus.user_name,
final String displayName = mUserColorNameManager.getDisplayName(mInReplyToStatus.user_id, mInReplyToStatus.user_name,
mInReplyToStatus.user_screen_name, nameFirst, false);
setTitle(getString(R.string.reply_to, displayName));
} else if (INTENT_ACTION_QUOTE.equals(action)) {
if (mInReplyToStatus == null) return false;
final String displayName = manager.getDisplayName(mInReplyToStatus.user_id, mInReplyToStatus.user_name,
final String displayName = mUserColorNameManager.getDisplayName(mInReplyToStatus.user_id, mInReplyToStatus.user_name,
mInReplyToStatus.user_screen_name, nameFirst, false);
setTitle(getString(R.string.quote_user, displayName));
} else if (INTENT_ACTION_EDIT_DRAFT.equals(action)) {
@ -1082,7 +1074,7 @@ public class ComposeActivity extends ThemedFragmentActivity implements LocationL
setTitle(R.string.edit_draft);
} else if (INTENT_ACTION_MENTION.equals(action)) {
if (mMentionUser == null) return false;
final String displayName = manager.getDisplayName(mMentionUser.id, mMentionUser.name,
final String displayName = mUserColorNameManager.getDisplayName(mMentionUser.id, mMentionUser.name,
mMentionUser.screen_name, nameFirst, false);
setTitle(getString(R.string.mention_user, displayName));
} else if (INTENT_ACTION_REPLY_MULTIPLE.equals(action)) {
@ -1157,6 +1149,17 @@ public class ComposeActivity extends ThemedFragmentActivity implements LocationL
mFragmentResumed = false;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (PermissionUtils.getPermission(permissions, grantResults, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED ||
PermissionUtils.getPermission(permissions, grantResults, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
startLocationUpdateIfEnabled();
} else {
//TODO show permission denied message
}
}
private static class SetProgressVisibleRunnable implements Runnable {
private final ComposeActivity activity;
@ -1197,34 +1200,32 @@ public class ComposeActivity extends ThemedFragmentActivity implements LocationL
*/
private boolean startLocationUpdateIfEnabled() {
final LocationManager lm = mLocationManager;
try {
final boolean attachLocation = mPreferences.getBoolean(KEY_ATTACH_LOCATION);
if (!attachLocation) {
final boolean attachLocation = mPreferences.getBoolean(KEY_ATTACH_LOCATION);
if (!attachLocation) {
try {
lm.removeUpdates(this);
return false;
} catch (SecurityException ignore) {
}
final Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
final String provider = lm.getBestProvider(criteria, true);
if (provider != null) {
return false;
}
final Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
final String provider = lm.getBestProvider(criteria, true);
if (provider != null) {
try {
mLocationText.setText(R.string.getting_location);
lm.requestLocationUpdates(provider, 0, 0, this);
final Location location;
if (lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
} else {
location = lm.getLastKnownLocation(provider);
}
final Location location = Utils.getCachedLocation(this);
if (location != null) {
onLocationChanged(location);
}
} else {
Toast.makeText(this, R.string.cannot_get_location, Toast.LENGTH_SHORT).show();
} catch (SecurityException e) {
return false;
}
return provider != null;
} catch (SecurityException e) {
return false;
} else {
Toast.makeText(this, R.string.cannot_get_location, Toast.LENGTH_SHORT).show();
}
return provider != null;
}
private boolean takePhoto() {
@ -1236,12 +1237,23 @@ public class ComposeActivity extends ThemedFragmentActivity implements LocationL
private void toggleLocation() {
final boolean attachLocation = mPreferences.getBoolean(KEY_ATTACH_LOCATION, false);
mPreferences.edit().putBoolean(KEY_ATTACH_LOCATION, !attachLocation).apply();
startLocationUpdateIfEnabled();
requestOrUpdateLocation();
updateLocationState();
setMenu();
updateTextCount();
}
private void requestOrUpdateLocation() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
startLocationUpdateIfEnabled();
} else {
final String[] permissions = {Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION};
ActivityCompat.requestPermissions(this, permissions, REQUEST_REQUEST_PERMISSIONS);
}
}
private void updateLocationState() {
final boolean attachLocation = mPreferences.getBoolean(KEY_ATTACH_LOCATION, false);
if (attachLocation) {
@ -1348,30 +1360,26 @@ public class ComposeActivity extends ThemedFragmentActivity implements LocationL
}
private static class AccountIconsAdapter extends Adapter<AccountIconViewHolder> {
private static class AccountIconsAdapter extends BaseRecyclerViewAdapter<AccountIconViewHolder> {
private final ComposeActivity mActivity;
private final LayoutInflater mInflater;
private final MediaLoaderWrapper mImageLoader;
private final LongSparseArray<Boolean> mSelection;
private final boolean mNameFirst;
private ParcelableCredentials[] mAccounts;
public AccountIconsAdapter(ComposeActivity activity) {
super(activity);
setHasStableIds(true);
mActivity = activity;
mInflater = activity.getLayoutInflater();
mImageLoader = activity.mImageLoader;
mSelection = new LongSparseArray<>();
final SharedPreferencesWrapper preferences = SharedPreferencesWrapper.getInstance(activity,
SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE, SharedPreferenceConstants.class);
assert preferences != null;
mNameFirst = preferences.getBoolean(KEY_NAME_FIRST);
mNameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
}
public MediaLoaderWrapper getImageLoader() {
return mImageLoader;
return mMediaLoader;
}
@NonNull

View File

@ -49,17 +49,14 @@ import com.rengwuxian.materialedittext.MaterialEditText;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.AccountsSpinnerAdapter;
import org.mariotaku.twidere.adapter.ArrayAdapter;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.fragment.support.BaseSupportDialogFragment;
import org.mariotaku.twidere.model.CustomTabConfiguration;
import org.mariotaku.twidere.model.CustomTabConfiguration.ExtraConfiguration;
import org.mariotaku.twidere.model.ParcelableAccount;
import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.model.ParcelableUserList;
import org.mariotaku.twidere.util.MediaLoaderWrapper;
import org.mariotaku.twidere.util.ParseUtils;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.UserColorNameManager;
import java.text.Collator;
import java.util.Comparator;
@ -218,20 +215,19 @@ public class CustomTabEditorActivity extends BaseSupportDialogActivity implement
final ImageView icon = (ImageView) view.findViewById(android.R.id.icon);
final boolean displayProfileImage = mPreferences.getBoolean(KEY_DISPLAY_PROFILE_IMAGE, true);
final boolean displayName = mPreferences.getBoolean(KEY_NAME_FIRST, true);
final UserColorNameManager manager = UserColorNameManager.getInstance(this);
text1.setVisibility(View.VISIBLE);
text2.setVisibility(View.VISIBLE);
icon.setVisibility(displayProfileImage ? View.VISIBLE : View.GONE);
if (value instanceof ParcelableUser) {
final ParcelableUser user = (ParcelableUser) value;
text1.setText(manager.getUserNickname(user.id, user.name, false));
text1.setText(mUserColorNameManager.getUserNickname(user.id, user.name, false));
text2.setText("@" + user.screen_name);
if (displayProfileImage) {
mImageLoader.displayProfileImage(icon, user.profile_image_url);
}
} else if (value instanceof ParcelableUserList) {
final ParcelableUserList userList = (ParcelableUserList) value;
final String createdBy = manager.getDisplayName(userList, displayName, false);
final String createdBy = mUserColorNameManager.getDisplayName(userList, displayName, false);
text1.setText(userList.name);
text2.setText(getString(R.string.created_by, createdBy));
if (displayProfileImage) {

View File

@ -69,7 +69,6 @@ import org.mariotaku.twidere.activity.SettingsActivity;
import org.mariotaku.twidere.activity.SettingsWizardActivity;
import org.mariotaku.twidere.activity.UsageStatisticsActivity;
import org.mariotaku.twidere.adapter.support.SupportTabsAdapter;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.fragment.CustomTabsFragment;
import org.mariotaku.twidere.fragment.iface.RefreshScrollTopInterface;
import org.mariotaku.twidere.fragment.iface.SupportFragmentCallback;
@ -352,7 +351,6 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
return;
}
mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
final TwidereApplication app = TwidereApplication.getInstance(this);
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mMultiSelectHandler = new MultiSelectEventHandler(this);
mMultiSelectHandler.dispatchOnCreate();

View File

@ -60,7 +60,6 @@ import org.mariotaku.sqliteqb.library.RawItemArray;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.activity.support.QuickSearchBarActivity.SuggestionItem;
import org.mariotaku.twidere.adapter.AccountsSpinnerAdapter;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.model.ParcelableAccount;
import org.mariotaku.twidere.model.ParcelableCredentials;
import org.mariotaku.twidere.model.ParcelableUser;
@ -428,9 +427,8 @@ public class QuickSearchBarActivity extends ThemedFragmentActivity implements On
SuggestionsAdapter(QuickSearchBarActivity activity) {
mActivity = activity;
mImageLoader = activity.mImageLoader;
mUserColorNameManager = activity.mUserColorNameManager;
mInflater = LayoutInflater.from(activity);
final TwidereApplication application = TwidereApplication.getInstance(activity);
mUserColorNameManager = application.getUserColorNameManager();
}
public boolean canDismiss(int position) {
@ -526,11 +524,13 @@ public class QuickSearchBarActivity extends ThemedFragmentActivity implements On
private static final Pattern PATTERN_SCREEN_NAME = Pattern.compile("(?i)[@\uFF20]?([a-z0-9_]{1,20})");
private final UserColorNameManager mUserColorNameManager;
private final long mAccountId;
private final String mQuery;
public SuggestionsLoader(Context context, long accountId, String query) {
public SuggestionsLoader(QuickSearchBarActivity context, long accountId, String query) {
super(context);
mUserColorNameManager = context.mUserColorNameManager;
mAccountId = accountId;
mQuery = query;
}
@ -551,8 +551,7 @@ public class QuickSearchBarActivity extends ThemedFragmentActivity implements On
historyCursor.close();
if (!emptyQuery) {
final String queryEscaped = mQuery.replace("_", "^_");
final UserColorNameManager nicknamePrefs = UserColorNameManager.getInstance(context);
final long[] nicknameIds = Utils.getMatchedNicknameIds(mQuery, nicknamePrefs);
final long[] nicknameIds = Utils.getMatchedNicknameIds(mQuery, mUserColorNameManager);
final Expression selection = Expression.or(
Expression.likeRaw(new Column(CachedUsers.SCREEN_NAME), "?||'%'", "^"),
Expression.likeRaw(new Column(CachedUsers.NAME), "?||'%'", "^"),

View File

@ -34,15 +34,16 @@ import android.view.View;
import org.mariotaku.twidere.BuildConfig;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.activity.iface.IThemedActivity;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.util.ActivityTracker;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallback;
import org.mariotaku.twidere.util.MediaLoaderWrapper;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.StrictModeUtils;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.ThemedLayoutInflaterFactory;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.util.Utils;
import org.mariotaku.twidere.util.dagger.ApplicationModule;
import org.mariotaku.twidere.util.dagger.DaggerGeneralComponent;
@ -54,13 +55,18 @@ public abstract class ThemedFragmentActivity extends FragmentActivity implements
IThemedActivity, KeyboardShortcutCallback {
// Utility classes
private KeyboardShortcutsHandler mKeyboardShortcutsHandler;
@Inject
protected KeyboardShortcutsHandler mKeyboardShortcutsHandler;
@Inject
protected AsyncTwitterWrapper mTwitterWrapper;
@Inject
protected ActivityTracker mActivityTracker;
@Inject
protected MediaLoaderWrapper mImageLoader;
@Inject
protected UserColorNameManager mUserColorNameManager;
@Inject
protected SharedPreferencesWrapper mPreferences;
// Data fields
private int mCurrentThemeResource, mCurrentThemeColor, mCurrentThemeBackgroundAlpha;
@ -144,7 +150,6 @@ public abstract class ThemedFragmentActivity extends FragmentActivity implements
}
super.onCreate(savedInstanceState);
DaggerGeneralComponent.builder().applicationModule(ApplicationModule.get(this)).build().inject(this);
mKeyboardShortcutsHandler = TwidereApplication.getInstance(this).getKeyboardShortcutsHandler();
}
@Override

View File

@ -35,7 +35,6 @@ import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.iface.IActivitiesAdapter;
import org.mariotaku.twidere.api.twitter.model.Activity;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.fragment.support.UserFragment;
import org.mariotaku.twidere.model.ParcelableActivity;
import org.mariotaku.twidere.model.ParcelableMedia;
@ -43,7 +42,6 @@ import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.MediaLoaderWrapper;
import org.mariotaku.twidere.util.MediaLoadingHandler;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.TwidereLinkify;
import org.mariotaku.twidere.util.TwidereLinkify.OnLinkClickListener;
@ -80,27 +78,24 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
private final boolean mDisplayProfileImage;
private final TwidereLinkify mLinkify;
private final DummyStatusHolderAdapter mStatusAdapterDelegate;
private final UserColorNameManager mUserColorNameManager;
private ActivityAdapterListener mActivityAdapterListener;
protected AbsActivitiesAdapter(final Context context, boolean compact) {
super(context);
mContext = context;
final TwidereApplication app = TwidereApplication.getInstance(context);
mCardBackgroundColor = ThemeUtils.getCardBackgroundColor(context, ThemeUtils.getThemeBackgroundOption(context), ThemeUtils.getUserThemeBackgroundAlpha(context));
mCardBackgroundColor = ThemeUtils.getCardBackgroundColor(context,
ThemeUtils.getThemeBackgroundOption(context),
ThemeUtils.getUserThemeBackgroundAlpha(context));
mInflater = LayoutInflater.from(context);
mLoadingHandler = new MediaLoadingHandler(R.id.media_preview_progress);
mUserColorNameManager = app.getUserColorNameManager();
final SharedPreferencesWrapper preferences = SharedPreferencesWrapper.getInstance(context,
SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
mTextSize = preferences.getInt(KEY_TEXT_SIZE, context.getResources().getInteger(R.integer.default_text_size));
mTextSize = mPreferences.getInt(KEY_TEXT_SIZE, context.getResources().getInteger(R.integer.default_text_size));
mCompactCards = compact;
mProfileImageStyle = Utils.getProfileImageStyle(preferences.getString(KEY_PROFILE_IMAGE_STYLE, null));
mMediaPreviewStyle = Utils.getMediaPreviewStyle(preferences.getString(KEY_MEDIA_PREVIEW_STYLE, null));
mLinkHighlightingStyle = Utils.getLinkHighlightingStyleInt(preferences.getString(KEY_LINK_HIGHLIGHT_OPTION, null));
mDisplayProfileImage = preferences.getBoolean(KEY_DISPLAY_PROFILE_IMAGE, true);
mDisplayMediaPreview = preferences.getBoolean(KEY_MEDIA_PREVIEW, false);
mNameFirst = preferences.getBoolean(KEY_NAME_FIRST, true);
mProfileImageStyle = Utils.getProfileImageStyle(mPreferences.getString(KEY_PROFILE_IMAGE_STYLE, null));
mMediaPreviewStyle = Utils.getMediaPreviewStyle(mPreferences.getString(KEY_MEDIA_PREVIEW_STYLE, null));
mLinkHighlightingStyle = Utils.getLinkHighlightingStyleInt(mPreferences.getString(KEY_LINK_HIGHLIGHT_OPTION, null));
mDisplayProfileImage = mPreferences.getBoolean(KEY_DISPLAY_PROFILE_IMAGE, true);
mDisplayMediaPreview = mPreferences.getBoolean(KEY_MEDIA_PREVIEW, false);
mNameFirst = mPreferences.getBoolean(KEY_NAME_FIRST, true);
mLinkify = new TwidereLinkify(this);
mStatusAdapterDelegate = new DummyStatusHolderAdapter(context);
}

View File

@ -11,13 +11,11 @@ import android.view.ViewGroup;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.iface.IStatusesAdapter;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.model.ParcelableMedia;
import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.MediaLoaderWrapper;
import org.mariotaku.twidere.util.MediaLoadingHandler;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.StatusAdapterLinkClickHandler;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.TwidereLinkify;
@ -42,7 +40,6 @@ public abstract class AbsStatusesAdapter<D> extends LoadMoreSupportAdapter<ViewH
private final LayoutInflater mInflater;
private final MediaLoadingHandler mLoadingHandler;
private final TwidereLinkify mLinkify;
private final UserColorNameManager mUserColorNameManager;
private StatusAdapterListener mStatusAdapterListener;
@ -68,23 +65,19 @@ public abstract class AbsStatusesAdapter<D> extends LoadMoreSupportAdapter<ViewH
public AbsStatusesAdapter(Context context, boolean compact) {
super(context);
mContext = context;
final TwidereApplication app = TwidereApplication.getInstance(context);
mCardBackgroundColor = ThemeUtils.getCardBackgroundColor(context, ThemeUtils.getThemeBackgroundOption(context), ThemeUtils.getUserThemeBackgroundAlpha(context));
mInflater = LayoutInflater.from(context);
mUserColorNameManager = app.getUserColorNameManager();
mLoadingHandler = new MediaLoadingHandler(R.id.media_preview_progress);
final SharedPreferencesWrapper preferences = SharedPreferencesWrapper.getInstance(context,
SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
mTextSize = preferences.getInt(KEY_TEXT_SIZE, context.getResources().getInteger(R.integer.default_text_size));
mTextSize = mPreferences.getInt(KEY_TEXT_SIZE, context.getResources().getInteger(R.integer.default_text_size));
mCompactCards = compact;
mProfileImageStyle = Utils.getProfileImageStyle(preferences.getString(KEY_PROFILE_IMAGE_STYLE, null));
mMediaPreviewStyle = Utils.getMediaPreviewStyle(preferences.getString(KEY_MEDIA_PREVIEW_STYLE, null));
mLinkHighlightingStyle = Utils.getLinkHighlightingStyleInt(preferences.getString(KEY_LINK_HIGHLIGHT_OPTION, null));
mNameFirst = preferences.getBoolean(KEY_NAME_FIRST, true);
mDisplayProfileImage = preferences.getBoolean(KEY_DISPLAY_PROFILE_IMAGE, true);
mDisplayMediaPreview = preferences.getBoolean(KEY_MEDIA_PREVIEW, false);
mSensitiveContentEnabled = preferences.getBoolean(KEY_DISPLAY_SENSITIVE_CONTENTS, false);
mHideCardActions = preferences.getBoolean(KEY_HIDE_CARD_ACTIONS, false);
mProfileImageStyle = Utils.getProfileImageStyle(mPreferences.getString(KEY_PROFILE_IMAGE_STYLE, null));
mMediaPreviewStyle = Utils.getMediaPreviewStyle(mPreferences.getString(KEY_MEDIA_PREVIEW_STYLE, null));
mLinkHighlightingStyle = Utils.getLinkHighlightingStyleInt(mPreferences.getString(KEY_LINK_HIGHLIGHT_OPTION, null));
mNameFirst = mPreferences.getBoolean(KEY_NAME_FIRST, true);
mDisplayProfileImage = mPreferences.getBoolean(KEY_DISPLAY_PROFILE_IMAGE, true);
mDisplayMediaPreview = mPreferences.getBoolean(KEY_MEDIA_PREVIEW, false);
mSensitiveContentEnabled = mPreferences.getBoolean(KEY_DISPLAY_SENSITIVE_CONTENTS, false);
mHideCardActions = mPreferences.getBoolean(KEY_HIDE_CARD_ACTIONS, false);
mLinkify = new TwidereLinkify(new StatusAdapterLinkClickHandler<>(this));
setShowInReplyTo(true);
}

View File

@ -30,10 +30,8 @@ import android.view.ViewGroup;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.iface.IUserListsAdapter;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.MediaLoaderWrapper;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.util.Utils;
@ -54,22 +52,17 @@ public abstract class AbsUserListsAdapter<D> extends LoadMoreSupportAdapter<View
private final int mTextSize;
private final boolean mDisplayProfileImage;
private final UserColorNameManager mUserColorNameManager;
private final boolean mNameFirst;
public AbsUserListsAdapter(final Context context, final boolean compact) {
super(context);
final TwidereApplication app = TwidereApplication.getInstance(context);
mContext = context;
mCardBackgroundColor = ThemeUtils.getCardBackgroundColor(context, ThemeUtils.getThemeBackgroundOption(context), ThemeUtils.getUserThemeBackgroundAlpha(context));
mInflater = LayoutInflater.from(context);
mUserColorNameManager = app.getUserColorNameManager();
final SharedPreferencesWrapper preferences = SharedPreferencesWrapper.getInstance(context,
SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
mTextSize = preferences.getInt(KEY_TEXT_SIZE, context.getResources().getInteger(R.integer.default_text_size));
mProfileImageStyle = Utils.getProfileImageStyle(preferences.getString(KEY_PROFILE_IMAGE_STYLE, null));
mDisplayProfileImage = preferences.getBoolean(KEY_DISPLAY_PROFILE_IMAGE, true);
mNameFirst = preferences.getBoolean(KEY_NAME_FIRST, true);
mTextSize = mPreferences.getInt(KEY_TEXT_SIZE, context.getResources().getInteger(R.integer.default_text_size));
mProfileImageStyle = Utils.getProfileImageStyle(mPreferences.getString(KEY_PROFILE_IMAGE_STYLE, null));
mDisplayProfileImage = mPreferences.getBoolean(KEY_DISPLAY_PROFILE_IMAGE, true);
mNameFirst = mPreferences.getBoolean(KEY_NAME_FIRST, true);
mCompactCards = compact;
}

View File

@ -30,10 +30,8 @@ import android.view.ViewGroup;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.iface.IUsersAdapter;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.MediaLoaderWrapper;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.util.Utils;
@ -54,20 +52,14 @@ public abstract class AbsUsersAdapter<D> extends LoadMoreSupportAdapter<ViewHold
private final int mTextSize;
private final boolean mDisplayProfileImage;
private final UserColorNameManager mUserColorNameManager;
public AbsUsersAdapter(final Context context, final boolean compact) {
super(context);
final TwidereApplication app = TwidereApplication.getInstance(context);
mContext = context;
mCardBackgroundColor = ThemeUtils.getCardBackgroundColor(context, ThemeUtils.getThemeBackgroundOption(context), ThemeUtils.getUserThemeBackgroundAlpha(context));
mInflater = LayoutInflater.from(context);
mUserColorNameManager = app.getUserColorNameManager();
final SharedPreferencesWrapper preferences = SharedPreferencesWrapper.getInstance(context,
SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
mTextSize = preferences.getInt(KEY_TEXT_SIZE, context.getResources().getInteger(R.integer.default_text_size));
mProfileImageStyle = Utils.getProfileImageStyle(preferences.getString(KEY_PROFILE_IMAGE_STYLE, null));
mDisplayProfileImage = preferences.getBoolean(KEY_DISPLAY_PROFILE_IMAGE, true);
mTextSize = mPreferences.getInt(KEY_TEXT_SIZE, context.getResources().getInteger(R.integer.default_text_size));
mProfileImageStyle = Utils.getProfileImageStyle(mPreferences.getString(KEY_PROFILE_IMAGE_STYLE, null));
mDisplayProfileImage = mPreferences.getBoolean(KEY_DISPLAY_PROFILE_IMAGE, true);
mCompactCards = compact;
}

View File

@ -26,8 +26,10 @@ import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import org.mariotaku.twidere.adapter.iface.IBaseAdapter;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.util.MediaLoaderWrapper;
import org.mariotaku.twidere.util.MultiSelectManager;
import org.mariotaku.twidere.util.OnLinkClickHandler;
import org.mariotaku.twidere.util.TwidereLinkify;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.util.Utils;
import org.mariotaku.twidere.util.dagger.ApplicationModule;
import org.mariotaku.twidere.util.dagger.DaggerGeneralComponent;
@ -39,6 +41,8 @@ import javax.inject.Inject;
public class BaseArrayAdapter<T> extends ArrayAdapter<T> implements IBaseAdapter, OnSharedPreferenceChangeListener {
private final TwidereLinkify mLinkify;
@Inject
protected UserColorNameManager mUserColorNameManager;
private float mTextSize;
private int mLinkHighlightOption;
@ -48,6 +52,8 @@ public class BaseArrayAdapter<T> extends ArrayAdapter<T> implements IBaseAdapter
private final SharedPreferences mNicknamePrefs, mColorPrefs;
@Inject
protected MediaLoaderWrapper mImageLoader;
@Inject
protected MultiSelectManager mMultiSelectManager;
public BaseArrayAdapter(final Context context, final int layoutRes) {
this(context, layoutRes, null);
@ -58,7 +64,7 @@ public class BaseArrayAdapter<T> extends ArrayAdapter<T> implements IBaseAdapter
//noinspection unchecked
DaggerGeneralComponent.builder().applicationModule(ApplicationModule.get(context)).build().inject((BaseArrayAdapter<Object>) this);
final TwidereApplication app = TwidereApplication.getInstance(context);
mLinkify = new TwidereLinkify(new OnLinkClickHandler(context, app.getMultiSelectManager()));
mLinkify = new TwidereLinkify(new OnLinkClickHandler(context, mMultiSelectManager));
mNicknamePrefs = context.getSharedPreferences(USER_NICKNAME_PREFERENCES_NAME, Context.MODE_PRIVATE);
mColorPrefs = context.getSharedPreferences(USER_COLOR_PREFERENCES_NAME, Context.MODE_PRIVATE);
mNicknamePrefs.registerOnSharedPreferenceChangeListener(this);

View File

@ -24,7 +24,10 @@ import android.support.v7.widget.RecyclerView;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.MediaLoaderWrapper;
import org.mariotaku.twidere.util.MultiSelectManager;
import org.mariotaku.twidere.util.ReadStateManager;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.util.dagger.ApplicationModule;
import org.mariotaku.twidere.util.dagger.DaggerGeneralComponent;
@ -33,19 +36,25 @@ import javax.inject.Inject;
/**
* Created by mariotaku on 15/10/5.
*/
public abstract class BaseAdapter<VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> {
public abstract class BaseRecyclerViewAdapter<VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> {
@Inject
protected AsyncTwitterWrapper mTwitterWrapper;
@Inject
protected ReadStateManager mReadStateManager;
@Inject
protected MediaLoaderWrapper mMediaLoader;
@Inject
protected MultiSelectManager mMultiSelectManager;
@Inject
protected UserColorNameManager mUserColorNameManager;
@Inject
protected SharedPreferencesWrapper mPreferences;
public BaseAdapter(Context context) {
public BaseRecyclerViewAdapter(Context context) {
//noinspection unchecked
DaggerGeneralComponent.builder()
.applicationModule(ApplicationModule.get(context))
.build()
.inject((BaseAdapter<RecyclerView.ViewHolder>) this);
.inject((BaseRecyclerViewAdapter<RecyclerView.ViewHolder>) this);
}
}

View File

@ -50,6 +50,8 @@ public class DraftsAdapter extends SimpleCursorAdapter implements Constants {
@Inject
MediaLoaderWrapper mImageLoader;
@Inject
SharedPreferencesWrapper mPreferences;
private final MediaLoadingHandler mMediaLoadingHandler;
private final int mMediaPreviewStyle;
@ -60,9 +62,7 @@ public class DraftsAdapter extends SimpleCursorAdapter implements Constants {
super(context, R.layout.list_item_draft, null, new String[0], new int[0], 0);
DaggerGeneralComponent.builder().applicationModule(ApplicationModule.get(context)).build().inject(this);
mMediaLoadingHandler = new MediaLoadingHandler(R.id.media_preview_progress);
final SharedPreferencesWrapper preferences = SharedPreferencesWrapper.getInstance(context,
SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
mMediaPreviewStyle = Utils.getMediaPreviewStyle(preferences.getString(KEY_MEDIA_PREVIEW_STYLE, null));
mMediaPreviewStyle = Utils.getMediaPreviewStyle(mPreferences.getString(KEY_MEDIA_PREVIEW_STYLE, null));
}
@Override

View File

@ -20,7 +20,6 @@
package org.mariotaku.twidere.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView.Adapter;
import android.support.v7.widget.RecyclerView.ViewHolder;
import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter;
@ -28,7 +27,7 @@ import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter;
/**
* Created by mariotaku on 15/4/16.
*/
public abstract class LoadMoreSupportAdapter<VH extends ViewHolder> extends BaseAdapter<VH>
public abstract class LoadMoreSupportAdapter<VH extends ViewHolder> extends BaseRecyclerViewAdapter<VH>
implements ILoadMoreSupportAdapter {
private boolean mLoadMoreSupported;

View File

@ -31,14 +31,11 @@ import android.view.ViewGroup;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.iface.IDirectMessagesAdapter;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.model.ParcelableDirectMessage;
import org.mariotaku.twidere.model.ParcelableDirectMessage.CursorIndices;
import org.mariotaku.twidere.util.DirectMessageOnLinkClickHandler;
import org.mariotaku.twidere.util.MediaLoaderWrapper;
import org.mariotaku.twidere.util.MediaLoadingHandler;
import org.mariotaku.twidere.util.MultiSelectManager;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.TwidereLinkify;
import org.mariotaku.twidere.util.Utils;
@ -46,7 +43,7 @@ import org.mariotaku.twidere.view.ShapedImageView;
import org.mariotaku.twidere.view.holder.IncomingMessageViewHolder;
import org.mariotaku.twidere.view.holder.MessageViewHolder;
public class MessageConversationAdapter extends BaseAdapter<ViewHolder> implements Constants,
public class MessageConversationAdapter extends BaseRecyclerViewAdapter<ViewHolder> implements Constants,
IDirectMessagesAdapter, OnClickListener {
private static final int ITEM_VIEW_TYPE_MESSAGE_OUTGOING = 1;
@ -61,7 +58,6 @@ public class MessageConversationAdapter extends BaseAdapter<ViewHolder> implemen
private final Context mContext;
private final LayoutInflater mInflater;
private final MultiSelectManager mMultiSelectManager;
private final MediaLoadingHandler mMediaLoadingHandler;
private Cursor mCursor;
@ -72,14 +68,10 @@ public class MessageConversationAdapter extends BaseAdapter<ViewHolder> implemen
super(context);
mContext = context;
mInflater = LayoutInflater.from(context);
final TwidereApplication app = TwidereApplication.getInstance(context);
mLinkify = new TwidereLinkify(new DirectMessageOnLinkClickHandler(context, null));
mMultiSelectManager = app.getMultiSelectManager();
final SharedPreferencesWrapper preferences = SharedPreferencesWrapper.getInstance(context,
SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
mDisplayProfileImage = preferences.getBoolean(KEY_DISPLAY_PROFILE_IMAGE, true);
mProfileImageStyle = Utils.getProfileImageStyle(preferences.getString(KEY_PROFILE_IMAGE_STYLE, null));
mMediaPreviewStyle = Utils.getMediaPreviewStyle(preferences.getString(KEY_MEDIA_PREVIEW_STYLE, null));
mDisplayProfileImage = mPreferences.getBoolean(KEY_DISPLAY_PROFILE_IMAGE, true);
mProfileImageStyle = Utils.getProfileImageStyle(mPreferences.getString(KEY_PROFILE_IMAGE_STYLE, null));
mMediaPreviewStyle = Utils.getMediaPreviewStyle(mPreferences.getString(KEY_MEDIA_PREVIEW_STYLE, null));
mMediaLoadingHandler = new MediaLoadingHandler(R.id.media_preview_progress);
mIncomingMessageColor = ThemeUtils.getUserAccentColor(context);
mOutgoingMessageColor = ThemeUtils.getCardBackgroundColor(context, ThemeUtils.getThemeBackgroundOption(context), ThemeUtils.getUserThemeBackgroundAlpha(context));
@ -193,8 +185,7 @@ public class MessageConversationAdapter extends BaseAdapter<ViewHolder> implemen
case R.id.media_preview: {
final ParcelableDirectMessage message = getDirectMessage(position);
if (message == null || message.media == null) return;
//TODO open media animation
Bundle options = null;
final Bundle options = Utils.createMediaViewerActivityOption(view);
Utils.openMedia(mContext, message, null, options);
}
}

View File

@ -38,9 +38,7 @@ import org.mariotaku.twidere.model.StringLongPair;
import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages.ConversationEntries;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.MediaLoaderWrapper;
import org.mariotaku.twidere.util.MultiSelectManager;
import org.mariotaku.twidere.util.ReadStateManager.OnReadStateChangeListener;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.util.Utils;
import org.mariotaku.twidere.view.holder.LoadIndicatorViewHolder;
@ -54,12 +52,10 @@ public class MessageEntriesAdapter extends LoadMoreSupportAdapter<ViewHolder> im
private final Context mContext;
private final LayoutInflater mInflater;
private final MultiSelectManager mMultiSelectManager;
private final int mTextSize;
private final int mProfileImageStyle;
private final int mMediaPreviewStyle;
private final OnSharedPreferenceChangeListener mReadStateChangeListener;
private UserColorNameManager mUserColorNameManager;
private final boolean mDisplayProfileImage;
private boolean mShowAccountsColor;
@ -72,14 +68,10 @@ public class MessageEntriesAdapter extends LoadMoreSupportAdapter<ViewHolder> im
mContext = context;
mInflater = LayoutInflater.from(context);
final TwidereApplication app = TwidereApplication.getInstance(context);
mMultiSelectManager = app.getMultiSelectManager();
final SharedPreferencesWrapper preferences = SharedPreferencesWrapper.getInstance(context,
SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
mProfileImageStyle = Utils.getProfileImageStyle(preferences.getString(KEY_PROFILE_IMAGE_STYLE, null));
mMediaPreviewStyle = Utils.getMediaPreviewStyle(preferences.getString(KEY_MEDIA_PREVIEW_STYLE, null));
mDisplayProfileImage = preferences.getBoolean(KEY_DISPLAY_PROFILE_IMAGE, true);
mTextSize = preferences.getInt(KEY_TEXT_SIZE, context.getResources().getInteger(R.integer.default_text_size));
mUserColorNameManager = app.getUserColorNameManager();
mProfileImageStyle = Utils.getProfileImageStyle(mPreferences.getString(KEY_PROFILE_IMAGE_STYLE, null));
mMediaPreviewStyle = Utils.getMediaPreviewStyle(mPreferences.getString(KEY_MEDIA_PREVIEW_STYLE, null));
mDisplayProfileImage = mPreferences.getBoolean(KEY_DISPLAY_PROFILE_IMAGE, true);
mTextSize = mPreferences.getInt(KEY_TEXT_SIZE, context.getResources().getInteger(R.integer.default_text_size));
mReadStateChangeListener = new OnSharedPreferenceChangeListener() {
@Override

View File

@ -1,152 +0,0 @@
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.adapter;
import android.app.Activity;
import android.content.Context;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.iface.IBaseCardAdapter;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.model.ParcelableUserList;
import org.mariotaku.twidere.util.MultiSelectManager;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.util.Utils;
import org.mariotaku.twidere.view.holder.UserListViewListHolder;
import java.util.List;
import java.util.Locale;
import static org.mariotaku.twidere.util.Utils.configBaseCardAdapter;
import static org.mariotaku.twidere.util.Utils.getLocalizedNumber;
import static org.mariotaku.twidere.util.Utils.openUserProfile;
public class ParcelableUserListsListAdapter extends BaseArrayAdapter<ParcelableUserList> implements IBaseCardAdapter,
OnClickListener {
private final Context mContext;
private final MultiSelectManager mMultiSelectManager;
private final Locale mLocale;
private final UserColorNameManager mUserColorNameManager;
public ParcelableUserListsListAdapter(final Context context) {
this(context, Utils.isCompactCards(context));
}
public ParcelableUserListsListAdapter(final Context context, final boolean compactCards) {
super(context, getItemResource(compactCards));
mContext = context;
mLocale = context.getResources().getConfiguration().locale;
final TwidereApplication app = TwidereApplication.getInstance(context);
mMultiSelectManager = app.getMultiSelectManager();
mUserColorNameManager = app.getUserColorNameManager();
configBaseCardAdapter(context, this);
}
public void appendData(final List<ParcelableUserList> data) {
setData(data, false);
}
@Override
public long getItemId(final int position) {
return getItem(position) != null ? getItem(position).id : -1;
}
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
final View view = super.getView(position, convertView, parent);
final Object tag = view.getTag();
final UserListViewListHolder holder;
if (tag instanceof UserListViewListHolder) {
holder = (UserListViewListHolder) tag;
} else {
holder = new UserListViewListHolder(view);
holder.profile_image.setOnClickListener(this);
// holder.content.setOnOverflowIconClickListener(this);
view.setTag(holder);
}
holder.position = position;
final ParcelableUserList userList = getItem(position);
final String displayName = mUserColorNameManager.getDisplayName(userList, isDisplayNameFirst(), false);
holder.setTextSize(getTextSize());
holder.name.setText(userList.name);
holder.created_by.setText(mContext.getString(R.string.created_by, displayName));
if (holder.description != null) {
holder.description.setVisibility(TextUtils.isEmpty(userList.description) ? View.GONE : View.VISIBLE);
holder.description.setText(userList.description);
}
if (holder.members_count != null) {
holder.members_count.setText(getLocalizedNumber(mLocale, userList.members_count));
}
if (holder.subscribers_count != null) {
holder.subscribers_count.setText(getLocalizedNumber(mLocale, userList.subscribers_count));
}
holder.profile_image.setVisibility(isProfileImageDisplayed() ? View.VISIBLE : View.GONE);
if (isProfileImageDisplayed()) {
mImageLoader.displayProfileImage(holder.profile_image, userList.user_profile_image_url);
} else {
mImageLoader.cancelDisplayTask(holder.profile_image);
}
holder.profile_image.setTag(position);
return view;
}
@Override
public void onClick(final View view) {
if (mMultiSelectManager.isActive()) return;
final Object tag = view.getTag();
final int position = tag instanceof Integer ? (Integer) tag : -1;
if (position == -1) return;
switch (view.getId()) {
case R.id.profile_image: {
if (mContext instanceof Activity) {
final ParcelableUserList item = getItem(position);
openUserProfile(mContext, item.account_id, item.user_id, item.user_screen_name,
null);
}
break;
}
}
}
public void setData(final List<ParcelableUserList> data, final boolean clear_old) {
if (clear_old) {
clear();
}
if (data == null) return;
for (final ParcelableUserList user : data) {
if (clear_old || findItemPosition(user.id) < 0) {
add(user);
}
}
}
private static int getItemResource(final boolean compactCards) {
// return compactCards ? R.layout.card_item_user_list_compact : R.layout.card_item_user_list;
return R.layout.list_item_user_list;
}
}

View File

@ -25,9 +25,7 @@ import android.view.ViewGroup;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.iface.IBaseAdapter;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.model.ParcelableUserList;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.view.holder.TwoLineWithIconViewHolder;
import java.util.List;
@ -37,13 +35,10 @@ import static org.mariotaku.twidere.util.Utils.configBaseAdapter;
public class SimpleParcelableUserListsAdapter extends BaseArrayAdapter<ParcelableUserList> implements IBaseAdapter {
private final Context mContext;
private UserColorNameManager mUserColorNameManager;
public SimpleParcelableUserListsAdapter(final Context context) {
super(context, R.layout.list_item_two_line);
mContext = context;
final TwidereApplication app = TwidereApplication.getInstance(context);
mUserColorNameManager = app.getUserColorNameManager();
configBaseAdapter(context, this);
}

View File

@ -25,9 +25,7 @@ import android.view.ViewGroup;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.iface.IBaseAdapter;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.view.holder.TwoLineWithIconViewHolder;
import java.util.List;
@ -38,7 +36,6 @@ import static org.mariotaku.twidere.util.Utils.getUserTypeIconRes;
public class SimpleParcelableUsersAdapter extends BaseArrayAdapter<ParcelableUser> implements IBaseAdapter {
private final Context mContext;
private final UserColorNameManager mUserColorNameManager;
public SimpleParcelableUsersAdapter(final Context context) {
this(context, R.layout.list_item_user);
@ -47,8 +44,6 @@ public class SimpleParcelableUsersAdapter extends BaseArrayAdapter<ParcelableUse
public SimpleParcelableUsersAdapter(final Context context, final int layoutRes) {
super(context, layoutRes);
mContext = context;
final TwidereApplication app = TwidereApplication.getInstance(context);
mUserColorNameManager = app.getUserColorNameManager();
configBaseAdapter(context, this);
}

View File

@ -66,10 +66,10 @@ public class UserHashtagAutoCompleteAdapter extends SimpleCursorAdapter implemen
private final SQLiteDatabase mDatabase;
@Inject
MediaLoaderWrapper mProfileImageLoader;
@NonNull
private final SharedPreferencesWrapper mPreferences;
@NonNull
private final UserColorNameManager mUserColorNameManager;
@Inject
SharedPreferencesWrapper mPreferences;
@Inject
UserColorNameManager mUserColorNameManager;
private final EditText mEditText;
@ -88,8 +88,6 @@ public class UserHashtagAutoCompleteAdapter extends SimpleCursorAdapter implemen
DaggerGeneralComponent.builder().applicationModule(ApplicationModule.get(context)).build().inject(this);
mEditText = view;
final TwidereApplication app = TwidereApplication.getInstance(context);
mPreferences = SharedPreferencesWrapper.getInstance(context, SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
mUserColorNameManager = app.getUserColorNameManager();
mResolver = context.getContentResolver();
mDatabase = app.getSQLiteDatabase();
mDisplayProfileImage = mPreferences.getBoolean(KEY_DISPLAY_PROFILE_IMAGE, true);

View File

@ -46,9 +46,7 @@ import org.mariotaku.twidere.activity.MainHondaJOJOActivity;
import org.mariotaku.twidere.service.RefreshService;
import org.mariotaku.twidere.util.AbsLogger;
import org.mariotaku.twidere.util.DebugModeUtils;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
import org.mariotaku.twidere.util.MathUtils;
import org.mariotaku.twidere.util.MultiSelectManager;
import org.mariotaku.twidere.util.StrictModeUtils;
import org.mariotaku.twidere.util.TwidereLogger;
import org.mariotaku.twidere.util.UserColorNameManager;
@ -62,8 +60,6 @@ import org.mariotaku.twidere.util.net.TwidereNetwork;
import java.io.File;
import java.io.IOException;
import edu.tsinghua.hotmobi.HotMobiLogger;
import static org.mariotaku.twidere.util.Utils.getBestCacheDir;
import static org.mariotaku.twidere.util.Utils.getInternalCacheDir;
import static org.mariotaku.twidere.util.Utils.initAccountColor;
@ -80,15 +76,11 @@ public class TwidereApplication extends MultiDexApplication implements Constants
private Handler mHandler;
private SharedPreferences mPreferences;
private MultiSelectManager mMultiSelectManager;
private DiskCache mDiskCache, mFullDiskCache;
private SQLiteOpenHelper mSQLiteOpenHelper;
private Network mNetwork;
private SQLiteDatabase mDatabase;
private KeyboardShortcutsHandler mKeyboardShortcutsHandler;
private UserColorNameManager mUserColorNameManager;
private HotMobiLogger mHotMobiLogger;
private ApplicationModule mApplicationModule;
@NonNull
@ -106,10 +98,6 @@ public class TwidereApplication extends MultiDexApplication implements Constants
return mFullDiskCache = createDiskCache(DIR_NAME_FULL_IMAGE_CACHE);
}
public UserColorNameManager getUserColorNameManager() {
if (mUserColorNameManager != null) return mUserColorNameManager;
return mUserColorNameManager = new UserColorNameManager(this);
}
public Handler getHandler() {
return mHandler;
@ -120,21 +108,14 @@ public class TwidereApplication extends MultiDexApplication implements Constants
return mNetwork = new TwidereNetwork(this);
}
public KeyboardShortcutsHandler getKeyboardShortcutsHandler() {
if (mKeyboardShortcutsHandler != null) return mKeyboardShortcutsHandler;
mKeyboardShortcutsHandler = new KeyboardShortcutsHandler(this);
public void initKeyboardShortcuts() {
final SharedPreferences preferences = getSharedPreferences();
if (!preferences.getBoolean(KEY_KEYBOARD_SHORTCUT_INITIALIZED, false)) {
mKeyboardShortcutsHandler.reset();
getApplicationModule().getKeyboardShortcutsHandler().reset();
preferences.edit().putBoolean(KEY_KEYBOARD_SHORTCUT_INITIALIZED, true).apply();
}
return mKeyboardShortcutsHandler;
}
public MultiSelectManager getMultiSelectManager() {
if (mMultiSelectManager != null) return mMultiSelectManager;
return mMultiSelectManager = new MultiSelectManager();
}
public SQLiteDatabase getSQLiteDatabase() {
if (mDatabase != null) return mDatabase;
@ -270,14 +251,9 @@ public class TwidereApplication extends MultiDexApplication implements Constants
}
}
@NonNull
public HotMobiLogger getHotMobiLogger() {
if (mHotMobiLogger != null) return mHotMobiLogger;
return mHotMobiLogger = new HotMobiLogger(this);
}
public ApplicationModule getApplicationModule() {
if (mApplicationModule != null) return mApplicationModule;
return mApplicationModule = new ApplicationModule(this);
}
}

View File

@ -25,7 +25,6 @@ import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.support.annotation.Nullable;
@ -39,9 +38,8 @@ import android.widget.CompoundButton.OnCheckedChangeListener;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.model.ParcelableAccount;
import org.mariotaku.twidere.util.UserColorNameManager;
public abstract class BaseAccountPreferenceFragment extends PreferenceFragment implements Constants,
public abstract class BaseAccountPreferenceFragment extends BasePreferenceFragment implements Constants,
OnCheckedChangeListener, OnSharedPreferenceChangeListener {
@Override
@ -59,9 +57,8 @@ public abstract class BaseAccountPreferenceFragment extends PreferenceFragment i
final Activity activity = getActivity();
final Intent intent = activity.getIntent();
if (account != null && intent.hasExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT)) {
final UserColorNameManager manager = UserColorNameManager.getInstance(activity);
final boolean nameFirst = prefs.getBoolean(KEY_NAME_FIRST, true);
final String name = manager.getDisplayName(account.account_id, account.name,
final String name = mUserColorNameManager.getDisplayName(account.account_id, account.name,
account.screen_name, nameFirst, false);
activity.setTitle(name);
}

View File

@ -28,52 +28,61 @@ import android.content.SharedPreferences;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
import org.mariotaku.twidere.util.dagger.ApplicationModule;
import org.mariotaku.twidere.util.dagger.DaggerGeneralComponent;
import javax.inject.Inject;
public class BaseDialogFragment extends DialogFragment implements Constants {
@Inject
protected KeyboardShortcutsHandler mKeyboardShortcutsHandler;
public BaseDialogFragment() {
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
DaggerGeneralComponent.builder().applicationModule(ApplicationModule.get(activity)).build().inject(this);
}
}
public TwidereApplication getApplication() {
final Activity activity = getActivity();
if (activity != null) return (TwidereApplication) activity.getApplication();
return null;
}
public TwidereApplication getApplication() {
final Activity activity = getActivity();
if (activity != null) return (TwidereApplication) activity.getApplication();
return null;
}
public ContentResolver getContentResolver() {
final Activity activity = getActivity();
if (activity != null) return activity.getContentResolver();
return null;
}
public ContentResolver getContentResolver() {
final Activity activity = getActivity();
if (activity != null) return activity.getContentResolver();
return null;
}
public SharedPreferences getSharedPreferences(final String name, final int mode) {
final Activity activity = getActivity();
if (activity != null) return activity.getSharedPreferences(name, mode);
return null;
}
public SharedPreferences getSharedPreferences(final String name, final int mode) {
final Activity activity = getActivity();
if (activity != null) return activity.getSharedPreferences(name, mode);
return null;
}
public Object getSystemService(final String name) {
final Activity activity = getActivity();
if (activity != null) return activity.getSystemService(name);
return null;
}
public Object getSystemService(final String name) {
final Activity activity = getActivity();
if (activity != null) return activity.getSystemService(name);
return null;
}
public void registerReceiver(final BroadcastReceiver receiver, final IntentFilter filter) {
final Activity activity = getActivity();
if (activity == null) return;
activity.registerReceiver(receiver, filter);
}
public void registerReceiver(final BroadcastReceiver receiver, final IntentFilter filter) {
final Activity activity = getActivity();
if (activity == null) return;
activity.registerReceiver(receiver, filter);
}
public void setProgressBarIndeterminateVisibility(final boolean visible) {
final Activity activity = getActivity();
if (activity == null) return;
activity.setProgressBarIndeterminateVisibility(visible);
}
public void setProgressBarIndeterminateVisibility(final boolean visible) {
final Activity activity = getActivity();
if (activity == null) return;
activity.setProgressBarIndeterminateVisibility(visible);
}
public void unregisterReceiver(final BroadcastReceiver receiver) {
final Activity activity = getActivity();
if (activity == null) return;
activity.unregisterReceiver(receiver);
}
public void unregisterReceiver(final BroadcastReceiver receiver) {
final Activity activity = getActivity();
if (activity == null) return;
activity.unregisterReceiver(receiver);
}
}

View File

@ -61,7 +61,6 @@ import org.mariotaku.twidere.R;
import org.mariotaku.twidere.activity.support.UserListSelectorActivity;
import org.mariotaku.twidere.adapter.SourceAutoCompleteAdapter;
import org.mariotaku.twidere.adapter.UserHashtagAutoCompleteAdapter;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.fragment.support.AbsContentListViewFragment;
import org.mariotaku.twidere.fragment.support.BaseSupportDialogFragment;
import org.mariotaku.twidere.model.ParcelableUser;
@ -71,6 +70,10 @@ import org.mariotaku.twidere.util.ParseUtils;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.util.Utils;
import org.mariotaku.twidere.util.dagger.ApplicationModule;
import org.mariotaku.twidere.util.dagger.DaggerGeneralComponent;
import javax.inject.Inject;
import static org.mariotaku.twidere.util.Utils.getDefaultAccountId;
@ -401,19 +404,20 @@ public abstract class BaseFiltersFragment extends AbsContentListViewFragment<Sim
}
}
private static final class FilterUsersListAdapter extends SimpleCursorAdapter {
public static final class FilterUsersListAdapter extends SimpleCursorAdapter {
private final UserColorNameManager mUserColorNameManager;
@Inject
UserColorNameManager mUserColorNameManager;
private final boolean mNameFirst;
private int mUserIdIdx, mNameIdx, mScreenNameIdx;
public FilterUsersListAdapter(final Context context) {
FilterUsersListAdapter(final Context context) {
super(context, android.R.layout.simple_list_item_activated_1, null, new String[0], new int[0], 0);
DaggerGeneralComponent.builder().applicationModule(ApplicationModule.get(context)).build().inject(this);
final SharedPreferences prefs = context.getSharedPreferences(SHARED_PREFERENCES_NAME,
Context.MODE_PRIVATE);
mNameFirst = prefs.getBoolean(KEY_NAME_FIRST, true);
mUserColorNameManager = TwidereApplication.getInstance(context).getUserColorNameManager();
}
@Override

View File

@ -28,10 +28,9 @@ import android.content.IntentFilter;
import android.content.SharedPreferences;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.activity.support.BaseAppCompatActivity;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.MultiSelectManager;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.dagger.ApplicationModule;
import org.mariotaku.twidere.util.dagger.DaggerGeneralComponent;
@ -41,6 +40,8 @@ public class BaseFragment extends Fragment implements Constants {
@Inject
protected AsyncTwitterWrapper mTwitterWrapper;
@Inject
protected SharedPreferencesWrapper mPreferences;
@Override
public void onAttach(Context context) {
@ -60,11 +61,6 @@ public class BaseFragment extends Fragment implements Constants {
return null;
}
public MultiSelectManager getMultiSelectManager() {
final TwidereApplication app = getApplication();
return app != null ? app.getMultiSelectManager() : null;
}
public SharedPreferences getSharedPreferences(final String name, final int mode) {
final Activity activity = getActivity();
if (activity != null) return activity.getSharedPreferences(name, mode);
@ -83,13 +79,6 @@ public class BaseFragment extends Fragment implements Constants {
activity.registerReceiver(receiver, filter);
}
public void setProgressBarIndeterminateVisibility(final boolean visible) {
final Activity activity = getActivity();
if (activity instanceof BaseAppCompatActivity) {
activity.setProgressBarIndeterminateVisibility(visible);
}
}
public void unregisterReceiver(final BroadcastReceiver receiver) {
final Activity activity = getActivity();
if (activity == null) return;

View File

@ -60,10 +60,6 @@ public class BaseListFragment extends ListFragment implements Constants, OnScrol
return null;
}
public final MultiSelectManager getMultiSelectManager() {
return getApplication().getMultiSelectManager();
}
public final SharedPreferences getSharedPreferences(final String name, final int mode) {
final Activity activity = getActivity();
if (activity != null) return activity.getSharedPreferences(name, mode);

View File

@ -19,13 +19,31 @@
package org.mariotaku.twidere.fragment;
import android.content.Context;
import android.os.Bundle;
import android.preference.PreferenceFragment;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.util.dagger.ApplicationModule;
import org.mariotaku.twidere.util.dagger.DaggerGeneralComponent;
import javax.inject.Inject;
public class BasePreferenceFragment extends PreferenceFragment implements Constants {
@Inject
protected KeyboardShortcutsHandler mKeyboardShortcutHandler;
@Inject
protected UserColorNameManager mUserColorNameManager;
@Override
public void onAttach(Context context) {
super.onAttach(context);
DaggerGeneralComponent.builder().applicationModule(ApplicationModule.get(context)).build().inject(this);
}
@Override
public void onActivityCreated(final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);

View File

@ -95,7 +95,6 @@ public class CustomTabsFragment extends BaseFragment implements LoaderCallbacks<
private View mListContainer, mProgressContainer;
private TextView mEmptyText;
private ImageView mEmptyIcon;
private SharedPreferencesWrapper mPreferences;
@Override
@ -115,7 +114,6 @@ public class CustomTabsFragment extends BaseFragment implements LoaderCallbacks<
@Override
public void onActivityCreated(final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mPreferences = SharedPreferencesWrapper.getInstance(getActivity(), SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
setHasOptionsMenu(true);
mResolver = getContentResolver();
final View view = getView();

View File

@ -50,7 +50,6 @@ import android.widget.TextView;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.activity.KeyboardShortcutPreferenceCompatActivity;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.constant.KeyboardShortcutConstants;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutSpec;
@ -60,14 +59,11 @@ import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutSpec;
*/
public class KeyboardShortcutsFragment extends BasePreferenceFragment implements KeyboardShortcutConstants {
private KeyboardShortcutsHandler mKeyboardShortcutHandler;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
final Activity activity = getActivity();
mKeyboardShortcutHandler = TwidereApplication.getInstance(activity).getKeyboardShortcutsHandler();
final PreferenceScreen defaultScreen = getPreferenceScreen();
final PreferenceScreen preferenceScreen;
if (defaultScreen != null) {
@ -312,13 +308,12 @@ public class KeyboardShortcutsFragment extends BasePreferenceFragment implements
}
public static class ResetKeyboardShortcutConfirmDialogFragment extends DialogFragment implements OnClickListener {
public static class ResetKeyboardShortcutConfirmDialogFragment extends BaseDialogFragment implements OnClickListener {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE: {
TwidereApplication app = TwidereApplication.getInstance(getActivity());
app.getKeyboardShortcutsHandler().reset();
mKeyboardShortcutsHandler.reset();
break;
}
}

View File

@ -87,7 +87,6 @@ import org.mariotaku.twidere.activity.support.HomeActivity;
import org.mariotaku.twidere.activity.support.QuickSearchBarActivity;
import org.mariotaku.twidere.adapter.ArrayAdapter;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.constant.SharedPreferenceConstants;
import org.mariotaku.twidere.menu.support.AccountToggleProvider;
import org.mariotaku.twidere.model.ParcelableAccount;
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
@ -102,12 +101,16 @@ import org.mariotaku.twidere.util.TransitionUtils;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.util.Utils;
import org.mariotaku.twidere.util.content.SupportFragmentReloadCursorObserver;
import org.mariotaku.twidere.util.dagger.ApplicationModule;
import org.mariotaku.twidere.util.dagger.DaggerGeneralComponent;
import org.mariotaku.twidere.view.ShapedImageView;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.inject.Inject;
public class AccountsDashboardFragment extends BaseSupportFragment implements LoaderCallbacks<Cursor>,
OnSharedPreferenceChangeListener, ImageLoadingListener, OnClickListener, KeyboardShortcutCallback, AdapterView.OnItemClickListener {
@ -140,8 +143,11 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
final ContentResolver cr = getContentResolver();
if (cr == null) return;
final Cursor c = cr.query(Accounts.CONTENT_URI, Accounts.COLUMNS, null, null, Accounts.SORT_POSITION);
updateAccountProviderData(c);
c.close();
try {
updateAccountProviderData(c);
} finally {
Utils.closeSilently(c);
}
super.onChange(selfChange, uri);
}
};
@ -255,7 +261,8 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
updateAccountProviderData(data);
}
private void updateAccountProviderData(final Cursor cursor) {
private void updateAccountProviderData(@Nullable final Cursor cursor) {
if (cursor == null) return;
final Menu menu = mAccountsToggleMenu.getMenu();
mAccountActionProvider = (AccountToggleProvider) MenuItemCompat.getActionProvider(menu.findItem(R.id.select_account));
final ParcelableAccount[] accounts = ParcelableAccount.getAccounts(cursor);
@ -655,19 +662,14 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
private void updateDefaultAccountState() {
}
private static final class AccountOptionsAdapter extends OptionItemsAdapter {
public static final class AccountOptionsAdapter extends OptionItemsAdapter {
private final boolean mNameFirst;
private final UserColorNameManager mUserColorNameManager;
private ParcelableAccount mSelectedAccount;
public AccountOptionsAdapter(final Context context) {
AccountOptionsAdapter(final Context context) {
super(context);
mUserColorNameManager = UserColorNameManager.getInstance(context);
final SharedPreferencesWrapper wrapper = SharedPreferencesWrapper.getInstance(context, SHARED_PREFERENCES_NAME,
Context.MODE_PRIVATE, SharedPreferenceConstants.class);
assert wrapper != null;
mNameFirst = wrapper.getBoolean(KEY_NAME_FIRST);
mNameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
}
public void setSelectedAccount(ParcelableAccount account) {
@ -849,7 +851,7 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
}
private static class OptionItem {
public static class OptionItem {
private final int name, icon, id;
@ -887,12 +889,17 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
}
private static abstract class OptionItemsAdapter extends ArrayAdapter<OptionItem> {
public static abstract class OptionItemsAdapter extends ArrayAdapter<OptionItem> {
@Inject
UserColorNameManager mUserColorNameManager;
@Inject
SharedPreferencesWrapper mPreferences;
private final int mActionIconColor;
public OptionItemsAdapter(final Context context) {
OptionItemsAdapter(final Context context) {
super(context, R.layout.list_item_dashboard_menu);
DaggerGeneralComponent.builder().applicationModule(ApplicationModule.get(context)).build().inject(this);
mActionIconColor = ThemeUtils.getThemeForegroundColor(context);
}

View File

@ -34,14 +34,12 @@ import android.support.v7.app.AlertDialog;
import com.twitter.Extractor;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.constant.SharedPreferenceConstants;
import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.model.ParcelableUserMention;
import org.mariotaku.twidere.provider.TwidereDataStore.Filters;
import org.mariotaku.twidere.util.ContentValuesCreator;
import org.mariotaku.twidere.util.HtmlEscapeHelper;
import org.mariotaku.twidere.util.ParseUtils;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.util.content.ContentResolverUtils;
@ -120,23 +118,18 @@ public class AddStatusFilterDialogFragment extends BaseSupportDialogFragment imp
final AlertDialog.Builder builder = new AlertDialog.Builder(wrapped);
mFilterItems = getFilterItemsInfo();
final String[] entries = new String[mFilterItems.length];
final UserColorNameManager manager = UserColorNameManager.getInstance(getActivity());
final SharedPreferencesWrapper prefs = SharedPreferencesWrapper.getInstance(getActivity(),
SharedPreferencesWrapper.SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE,
SharedPreferenceConstants.class);
assert prefs != null;
final boolean nameFirst = prefs.getBoolean(KEY_NAME_FIRST);
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
for (int i = 0, j = entries.length; i < j; i++) {
final FilterItemInfo info = mFilterItems[i];
switch (info.type) {
case FilterItemInfo.FILTER_TYPE_USER:
entries[i] = getString(R.string.user_filter_name, getName(manager, info.value, nameFirst));
entries[i] = getString(R.string.user_filter_name, getName(mUserColorNameManager, info.value, nameFirst));
break;
case FilterItemInfo.FILTER_TYPE_KEYWORD:
entries[i] = getString(R.string.keyword_filter_name, getName(manager, info.value, nameFirst));
entries[i] = getString(R.string.keyword_filter_name, getName(mUserColorNameManager, info.value, nameFirst));
break;
case FilterItemInfo.FILTER_TYPE_SOURCE:
entries[i] = getString(R.string.source_filter_name, getName(manager, info.value, nameFirst));
entries[i] = getString(R.string.source_filter_name, getName(mUserColorNameManager, info.value, nameFirst));
break;
}
}
@ -151,6 +144,7 @@ public class AddStatusFilterDialogFragment extends BaseSupportDialogFragment imp
final Bundle args = getArguments();
if (args == null || !args.containsKey(EXTRA_STATUS)) return new FilterItemInfo[0];
final ParcelableStatus status = args.getParcelable(EXTRA_STATUS);
if (status == null) return new FilterItemInfo[0];
final ArrayList<FilterItemInfo> list = new ArrayList<>();
if (status.is_retweet) {
list.add(new FilterItemInfo(FilterItemInfo.FILTER_TYPE_USER, new UserItem(status.retweeted_by_user_id,

View File

@ -30,6 +30,8 @@ import android.support.v4.app.DialogFragment;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.util.dagger.ApplicationModule;
import org.mariotaku.twidere.util.dagger.DaggerGeneralComponent;
@ -37,9 +39,12 @@ import javax.inject.Inject;
public class BaseSupportDialogFragment extends DialogFragment implements Constants {
public BaseSupportDialogFragment() {
}
@Inject
protected AsyncTwitterWrapper mTwitterWrapper;
@Inject
protected UserColorNameManager mUserColorNameManager;
@Inject
protected SharedPreferencesWrapper mPreferences;
public TwidereApplication getApplication() {
final Activity activity = getActivity();
@ -65,9 +70,6 @@ public class BaseSupportDialogFragment extends DialogFragment implements Constan
return null;
}
@Inject
protected AsyncTwitterWrapper mTwitterWrapper;
@Override
public void onAttach(Context context) {
super.onAttach(context);
@ -80,12 +82,6 @@ public class BaseSupportDialogFragment extends DialogFragment implements Constan
activity.registerReceiver(receiver, filter);
}
public void setProgressBarIndeterminateVisibility(final boolean visible) {
final Activity activity = getActivity();
if (activity == null) return;
activity.setProgressBarIndeterminateVisibility(visible);
}
public void unregisterReceiver(final BroadcastReceiver receiver) {
final Activity activity = getActivity();
if (activity == null) return;

View File

@ -48,7 +48,9 @@ import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.MediaLoaderWrapper;
import org.mariotaku.twidere.util.MultiSelectManager;
import org.mariotaku.twidere.util.ReadStateManager;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.ThemedLayoutInflaterFactory;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.util.VideoLoader;
import org.mariotaku.twidere.util.dagger.ApplicationModule;
import org.mariotaku.twidere.util.dagger.DaggerGeneralComponent;
@ -57,6 +59,7 @@ import javax.inject.Inject;
public class BaseSupportFragment extends Fragment implements IBaseFragment, Constants {
// Utility classes
@Inject
protected AsyncTwitterWrapper mTwitterWrapper;
@Inject
@ -69,6 +72,12 @@ public class BaseSupportFragment extends Fragment implements IBaseFragment, Cons
protected Bus mBus;
@Inject
protected AsyncTaskManager mAsyncTaskManager;
@Inject
protected MultiSelectManager mMultiSelectManager;
@Inject
protected UserColorNameManager mUserColorNameManager;
@Inject
protected SharedPreferencesWrapper mPreferences;
public BaseSupportFragment() {
@ -100,10 +109,6 @@ public class BaseSupportFragment extends Fragment implements IBaseFragment, Cons
return null;
}
public MultiSelectManager getMultiSelectManager() {
return getApplication() != null ? getApplication().getMultiSelectManager() : null;
}
public SharedPreferences getSharedPreferences(final String name, final int mode) {
final Activity activity = getActivity();
if (activity != null) return activity.getSharedPreferences(name, mode);

View File

@ -29,12 +29,9 @@ import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.constant.SharedPreferenceConstants;
import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.UserColorNameManager;
public class CreateUserBlockDialogFragment extends BaseSupportDialogFragment implements DialogInterface.OnClickListener {
@ -62,12 +59,8 @@ public class CreateUserBlockDialogFragment extends BaseSupportDialogFragment imp
final AlertDialog.Builder builder = new AlertDialog.Builder(wrapped);
final ParcelableUser user = getUser();
if (user != null) {
final UserColorNameManager manager = UserColorNameManager.getInstance(activity);
final SharedPreferencesWrapper prefs = SharedPreferencesWrapper.getInstance(activity,
SharedPreferencesWrapper.SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE,
SharedPreferenceConstants.class);
final boolean nameFirst = prefs.getBoolean(KEY_NAME_FIRST);
final String displayName = manager.getDisplayName(user, nameFirst, false);
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
final String displayName = mUserColorNameManager.getDisplayName(user, nameFirst, false);
builder.setTitle(getString(R.string.block_user, displayName));
builder.setMessage(getString(R.string.block_user_confirm_message, displayName));
}

View File

@ -29,12 +29,9 @@ import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.constant.SharedPreferenceConstants;
import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.UserColorNameManager;
public class CreateUserMuteDialogFragment extends BaseSupportDialogFragment implements DialogInterface.OnClickListener {
@ -62,12 +59,8 @@ public class CreateUserMuteDialogFragment extends BaseSupportDialogFragment impl
final AlertDialog.Builder builder = new AlertDialog.Builder(wrapped);
final ParcelableUser user = getUser();
if (user != null) {
final UserColorNameManager manager = UserColorNameManager.getInstance(activity);
final SharedPreferencesWrapper prefs = SharedPreferencesWrapper.getInstance(activity,
SharedPreferencesWrapper.SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE,
SharedPreferenceConstants.class);
final boolean nameFirst = prefs.getBoolean(KEY_NAME_FIRST);
final String displayName = manager.getDisplayName(user, nameFirst, false);
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
final String displayName = mUserColorNameManager.getDisplayName(user, nameFirst, false);
builder.setTitle(getString(R.string.mute_user, displayName));
builder.setMessage(getString(R.string.mute_user_confirm_message, displayName));
}

View File

@ -19,7 +19,6 @@
package org.mariotaku.twidere.fragment.support;
import android.support.v7.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@ -29,15 +28,13 @@ import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.constant.SharedPreferenceConstants;
import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.model.ParcelableUserList;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.UserColorNameManager;
public class DeleteUserListMembersDialogFragment extends BaseSupportDialogFragment implements
DialogInterface.OnClickListener {
@ -70,12 +67,8 @@ public class DeleteUserListMembersDialogFragment extends BaseSupportDialogFragme
if (users == null || userList == null) throw new NullPointerException();
if (users.length == 1) {
final ParcelableUser user = users[0];
final UserColorNameManager manager = UserColorNameManager.getInstance(activity);
final SharedPreferencesWrapper prefs = SharedPreferencesWrapper.getInstance(activity,
SharedPreferencesWrapper.SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE,
SharedPreferenceConstants.class);
final boolean nameFirst = prefs.getBoolean(KEY_NAME_FIRST);
final String displayName = manager.getDisplayName(user, nameFirst, false);
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
final String displayName = mUserColorNameManager.getDisplayName(user, nameFirst, false);
builder.setTitle(getString(R.string.delete_user, displayName));
builder.setMessage(getString(R.string.delete_user_from_list_confirm, displayName, userList.name));
} else {

View File

@ -19,7 +19,6 @@
package org.mariotaku.twidere.fragment.support;
import android.support.v7.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@ -27,14 +26,12 @@ import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.constant.SharedPreferenceConstants;
import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.UserColorNameManager;
public class DestroyFriendshipDialogFragment extends BaseSupportDialogFragment implements
DialogInterface.OnClickListener {
@ -63,12 +60,8 @@ public class DestroyFriendshipDialogFragment extends BaseSupportDialogFragment i
final AlertDialog.Builder builder = new AlertDialog.Builder(wrapped);
final ParcelableUser user = getUser();
if (user != null) {
final UserColorNameManager manager = UserColorNameManager.getInstance(activity);
final SharedPreferencesWrapper prefs = SharedPreferencesWrapper.getInstance(activity,
SharedPreferencesWrapper.SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE,
SharedPreferenceConstants.class);
final boolean nameFirst = prefs.getBoolean(KEY_NAME_FIRST);
final String displayName = manager.getDisplayName(user, nameFirst, true);
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
final String displayName = mUserColorNameManager.getDisplayName(user, nameFirst, true);
builder.setTitle(getString(R.string.unfollow_user, displayName));
builder.setMessage(getString(R.string.unfollow_user_confirm_message, displayName));
}

View File

@ -69,6 +69,8 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import javax.inject.Inject;
import static org.mariotaku.twidere.util.Utils.openMessageConversation;
public class DirectMessagesFragment extends AbsContentRecyclerViewFragment<MessageEntriesAdapter>
@ -78,8 +80,6 @@ public class DirectMessagesFragment extends AbsContentRecyclerViewFragment<Messa
private final SupportFragmentReloadCursorObserver mReloadContentObserver = new SupportFragmentReloadCursorObserver(
this, 0, this);
// Utility classes
private MultiSelectManager mMultiSelectManager;
private RemoveUnreadCountsTask mRemoveUnreadCountsTask;
private RecyclerViewNavigationHelper mNavigationHelper;
@ -247,7 +247,6 @@ public class DirectMessagesFragment extends AbsContentRecyclerViewFragment<Messa
final View view = getView();
if (view == null) throw new AssertionError();
final Context viewContext = view.getContext();
mMultiSelectManager = getMultiSelectManager();
final MessageEntriesAdapter adapter = getAdapter();
final RecyclerView recyclerView = getRecyclerView();
final LinearLayoutManager layoutManager = getLayoutManager();

View File

@ -165,7 +165,6 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
private TwidereValidator mValidator;
private SharedPreferencesWrapper mPreferences;
private SharedPreferences mMessageDrafts;
private UserColorNameManager mUserColorNameManager;
private EffectViewHelper mEffectHelper;
// Views
@ -231,7 +230,6 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
final BaseAppCompatActivity activity = (BaseAppCompatActivity) getActivity();
mPreferences = SharedPreferencesWrapper.getInstance(activity, SHARED_PREFERENCES_NAME,
Context.MODE_PRIVATE, SharedPreferenceConstants.class);
mUserColorNameManager = UserColorNameManager.getInstance(activity);
mMessageDrafts = getSharedPreferences(MESSAGE_DRAFTS_PREFERENCES_NAME, Context.MODE_PRIVATE);
mValidator = new TwidereValidator(activity);
@ -804,7 +802,6 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
// if (twitter == null || !getUserVisibleHint()) return;
// final boolean refreshing = twitter.isReceivedDirectMessagesRefreshing()
// || twitter.isSentDirectMessagesRefreshing();
// setProgressBarIndeterminateVisibility(refreshing);
// setRefreshing(refreshing);
}

View File

@ -19,7 +19,6 @@
package org.mariotaku.twidere.fragment.support;
import android.support.v7.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@ -27,14 +26,12 @@ import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.constant.SharedPreferenceConstants;
import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.UserColorNameManager;
public class ReportSpamDialogFragment extends BaseSupportDialogFragment implements DialogInterface.OnClickListener {
@ -62,12 +59,8 @@ public class ReportSpamDialogFragment extends BaseSupportDialogFragment implemen
final AlertDialog.Builder builder = new AlertDialog.Builder(wrapped);
final ParcelableUser user = getUser();
if (user != null) {
final UserColorNameManager manager = UserColorNameManager.getInstance(activity);
final SharedPreferencesWrapper prefs = SharedPreferencesWrapper.getInstance(activity,
SharedPreferencesWrapper.SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE,
SharedPreferenceConstants.class);
final boolean nameFirst = prefs.getBoolean(KEY_NAME_FIRST);
final String displayName = manager.getDisplayName(user, nameFirst, false);
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
final String displayName = mUserColorNameManager.getDisplayName(user, nameFirst, false);
builder.setTitle(getString(R.string.report_user, displayName));
builder.setMessage(getString(R.string.report_user_confirm_message, displayName));
}

View File

@ -64,7 +64,6 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem
public static final String FRAGMENT_TAG = "retweet_quote";
private PopupMenu mPopupMenu;
private TwidereValidator mValidator;
private SharedPreferencesWrapper mPreferences;
@Override
public void onClick(final DialogInterface dialog, final int which) {
@ -98,7 +97,6 @@ public class RetweetQuoteDialogFragment extends BaseSupportDialogFragment implem
final AlertDialog.Builder builder = new AlertDialog.Builder(wrapped);
final Context context = builder.getContext();
mValidator = new TwidereValidator(context);
mPreferences = SharedPreferencesWrapper.getInstance(context, SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE, SharedPreferenceConstants.class);
final LayoutInflater inflater = LayoutInflater.from(context);
@SuppressLint("InflateParams") final View view = inflater.inflate(R.layout.dialog_status_quote_retweet, null);
final DummyStatusHolderAdapter adapter = new DummyStatusHolderAdapter(context);

View File

@ -73,13 +73,12 @@ import org.apache.commons.lang3.ArrayUtils;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.activity.support.ColorPickerDialogActivity;
import org.mariotaku.twidere.adapter.AbsStatusesAdapter.StatusAdapterListener;
import org.mariotaku.twidere.adapter.BaseAdapter;
import org.mariotaku.twidere.adapter.BaseRecyclerViewAdapter;
import org.mariotaku.twidere.adapter.decorator.DividerItemDecoration;
import org.mariotaku.twidere.adapter.iface.IStatusesAdapter;
import org.mariotaku.twidere.api.twitter.Twitter;
import org.mariotaku.twidere.api.twitter.TwitterException;
import org.mariotaku.twidere.api.twitter.model.Paging;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.constant.IntentConstants;
import org.mariotaku.twidere.loader.support.ParcelableStatusLoader;
import org.mariotaku.twidere.loader.support.StatusRepliesLoader;
@ -100,7 +99,6 @@ import org.mariotaku.twidere.util.MediaLoaderWrapper;
import org.mariotaku.twidere.util.MediaLoadingHandler;
import org.mariotaku.twidere.util.RecyclerViewNavigationHelper;
import org.mariotaku.twidere.util.RecyclerViewUtils;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.StatusActionModeCallback;
import org.mariotaku.twidere.util.StatusAdapterLinkClickHandler;
import org.mariotaku.twidere.util.StatusLinkClickHandler;
@ -1038,7 +1036,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
}
}
private static class StatusAdapter extends BaseAdapter<ViewHolder> implements IStatusesAdapter<List<ParcelableStatus>> {
private static class StatusAdapter extends BaseRecyclerViewAdapter<ViewHolder> implements IStatusesAdapter<List<ParcelableStatus>> {
private static final int VIEW_TYPE_LIST_STATUS = 0;
private static final int VIEW_TYPE_DETAIL_STATUS = 1;
@ -1076,7 +1074,6 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
private final boolean mDisplayProfileImage;
private final boolean mSensitiveContentEnabled;
private final boolean mHideCardActions;
private final UserColorNameManager mUserColorNameManager;
private boolean mLoadMoreSupported;
private boolean mLoadMoreIndicatorVisible;
private boolean mDetailMediaExpanded;
@ -1092,27 +1089,24 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
setHasStableIds(true);
final Context context = fragment.getActivity();
final Resources res = context.getResources();
final SharedPreferencesWrapper preferences = SharedPreferencesWrapper.getInstance(context,
SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
mItemCounts = new int[ITEM_TYPES_SUM];
// There's always a space at the end of the list
mItemCounts[ITEM_IDX_SPACE] = 1;
mFragment = fragment;
mContext = context;
mInflater = LayoutInflater.from(context);
mUserColorNameManager = TwidereApplication.getInstance(context).getUserColorNameManager();
mMediaLoadingHandler = new MediaLoadingHandler(R.id.media_preview_progress);
mCardBackgroundColor = ThemeUtils.getCardBackgroundColor(context, ThemeUtils.getThemeBackgroundOption(context), ThemeUtils.getUserThemeBackgroundAlpha(context));
mNameFirst = preferences.getBoolean(KEY_NAME_FIRST, true);
mTextSize = preferences.getInt(KEY_TEXT_SIZE, res.getInteger(R.integer.default_text_size));
mProfileImageStyle = Utils.getProfileImageStyle(preferences.getString(KEY_PROFILE_IMAGE_STYLE, null));
mMediaPreviewStyle = Utils.getMediaPreviewStyle(preferences.getString(KEY_MEDIA_PREVIEW_STYLE, null));
mLinkHighlightingStyle = Utils.getLinkHighlightingStyleInt(preferences.getString(KEY_LINK_HIGHLIGHT_OPTION, null));
mNameFirst = mPreferences.getBoolean(KEY_NAME_FIRST, true);
mTextSize = mPreferences.getInt(KEY_TEXT_SIZE, res.getInteger(R.integer.default_text_size));
mProfileImageStyle = Utils.getProfileImageStyle(mPreferences.getString(KEY_PROFILE_IMAGE_STYLE, null));
mMediaPreviewStyle = Utils.getMediaPreviewStyle(mPreferences.getString(KEY_MEDIA_PREVIEW_STYLE, null));
mLinkHighlightingStyle = Utils.getLinkHighlightingStyleInt(mPreferences.getString(KEY_LINK_HIGHLIGHT_OPTION, null));
mIsCompact = compact;
mDisplayProfileImage = preferences.getBoolean(KEY_DISPLAY_PROFILE_IMAGE, true);
mDisplayMediaPreview = preferences.getBoolean(KEY_MEDIA_PREVIEW, false);
mSensitiveContentEnabled = preferences.getBoolean(KEY_DISPLAY_SENSITIVE_CONTENTS, false);
mHideCardActions = preferences.getBoolean(KEY_HIDE_CARD_ACTIONS, false);
mDisplayProfileImage = mPreferences.getBoolean(KEY_DISPLAY_PROFILE_IMAGE, true);
mDisplayMediaPreview = mPreferences.getBoolean(KEY_MEDIA_PREVIEW, false);
mSensitiveContentEnabled = mPreferences.getBoolean(KEY_DISPLAY_SENSITIVE_CONTENTS, false);
mHideCardActions = mPreferences.getBoolean(KEY_HIDE_CARD_ACTIONS, false);
if (compact) {
mCardLayoutResource = R.layout.card_item_status_compact;
} else {

View File

@ -37,7 +37,6 @@ import com.squareup.otto.Subscribe;
import org.mariotaku.twidere.adapter.TrendsAdapter;
import org.mariotaku.twidere.provider.TwidereDataStore.CachedTrends;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.MultiSelectManager;
import org.mariotaku.twidere.util.message.TaskStateChangedEvent;
import static org.mariotaku.twidere.util.Utils.getDefaultAccountId;
@ -47,7 +46,6 @@ import static org.mariotaku.twidere.util.Utils.openTweetSearch;
public class TrendsSuggestionsFragment extends AbsContentListViewFragment<TrendsAdapter>
implements LoaderCallbacks<Cursor>, AdapterView.OnItemClickListener {
private MultiSelectManager mMultiSelectManager;
private SharedPreferences mPreferences;
@ -57,7 +55,6 @@ public class TrendsSuggestionsFragment extends AbsContentListViewFragment<Trends
public void onActivityCreated(final Bundle savedInstanceState) {
mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
super.onActivityCreated(savedInstanceState);
mMultiSelectManager = getMultiSelectManager();
mAccountId = getDefaultAccountId(getActivity());
getListView().setOnItemClickListener(this);
getLoaderManager().initLoader(0, null, this);

View File

@ -98,7 +98,6 @@ import org.mariotaku.twidere.api.twitter.TwitterException;
import org.mariotaku.twidere.api.twitter.model.FriendshipUpdate;
import org.mariotaku.twidere.api.twitter.model.Relationship;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.constant.SharedPreferenceConstants;
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowsInsetsCallback;
import org.mariotaku.twidere.fragment.iface.RefreshScrollTopInterface;
import org.mariotaku.twidere.fragment.iface.SupportFragmentCallback;
@ -122,13 +121,11 @@ import org.mariotaku.twidere.util.LinkCreator;
import org.mariotaku.twidere.util.MathUtils;
import org.mariotaku.twidere.util.MenuUtils;
import org.mariotaku.twidere.util.ParseUtils;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.TwidereColorUtils;
import org.mariotaku.twidere.util.TwidereLinkify;
import org.mariotaku.twidere.util.TwidereLinkify.OnLinkClickListener;
import org.mariotaku.twidere.util.TwitterAPIFactory;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.util.Utils;
import org.mariotaku.twidere.util.menu.TwidereMenuInfo;
import org.mariotaku.twidere.util.message.FriendshipUpdatedEvent;
@ -173,9 +170,6 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
private static final String TAB_TYPE_MEDIA = "media";
private static final String TAB_TYPE_FAVORITES = "favorites";
private UserColorNameManager mUserColorNameManager;
private SharedPreferencesWrapper mPreferences;
private ShapedImageView mProfileImageView;
private ImageView mProfileTypeView;
private ProfileBannerImageView mProfileBannerView;
@ -483,7 +477,6 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
final FragmentActivity activity = getActivity();
if (user == null || user.id <= 0 || activity == null) return;
final Resources resources = getResources();
final UserColorNameManager manager = UserColorNameManager.getInstance(activity);
final LoaderManager lm = getLoaderManager();
lm.destroyLoader(LOADER_ID_USER);
lm.destroyLoader(LOADER_ID_FRIENDSHIP);
@ -492,10 +485,10 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
mHeaderErrorContainer.setVisibility(View.GONE);
mProgressContainer.setVisibility(View.GONE);
mUser = user;
final int userColor = manager.getUserColor(user.id, true);
final int userColor = mUserColorNameManager.getUserColor(user.id, true);
mProfileImageView.setBorderColor(userColor != 0 ? userColor : Color.WHITE);
mProfileNameContainer.drawEnd(Utils.getAccountColor(activity, user.account_id));
final String nick = manager.getUserNickname(user.id, true);
final String nick = mUserColorNameManager.getUserNickname(user.id, true);
mNameView.setText(TextUtils.isEmpty(nick) ? user.name : getString(R.string.name_with_nickname, user.name, nick));
final int typeIconRes = Utils.getUserTypeIconRes(user.is_verified, user.is_protected);
if (typeIconRes != 0) {
@ -538,7 +531,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
if (relationship == null || relationship.getTargetUserId() != user.id) {
getFriendship();
}
activity.setTitle(manager.getDisplayName(user, mNameFirst, true));
activity.setTitle(mUserColorNameManager.getDisplayName(user, mNameFirst, true));
Calendar cal = Calendar.getInstance();
final int currentMonth = cal.get(Calendar.MONTH), currentDay = cal.get(Calendar.DAY_OF_MONTH);
@ -625,16 +618,15 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
@Override
public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
final ParcelableUser user = getUser();
final UserColorNameManager manager = UserColorNameManager.getInstance(getActivity());
switch (requestCode) {
case REQUEST_SET_COLOR: {
if (user == null) return;
if (resultCode == Activity.RESULT_OK) {
if (data == null) return;
final int color = data.getIntExtra(EXTRA_COLOR, Color.TRANSPARENT);
manager.setUserColor(mUser.id, color);
mUserColorNameManager.setUserColor(mUser.id, color);
} else if (resultCode == ColorPickerDialogActivity.RESULT_CLEARED) {
manager.clearUserColor(mUser.id);
mUserColorNameManager.clearUserColor(mUser.id);
}
break;
}
@ -662,9 +654,11 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mTintedStatusContent = (TintedStatusFrameLayout) activity.findViewById(R.id.main_content);
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof FragmentActivity) {
mTintedStatusContent = (TintedStatusFrameLayout) ((FragmentActivity) context).findViewById(R.id.main_content);
}
}
@Override
@ -681,8 +675,6 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
.registerOnSharedPreferenceChangeListener(this);
getSharedPreferences(USER_NICKNAME_PREFERENCES_NAME, Context.MODE_PRIVATE)
.registerOnSharedPreferenceChangeListener(this);
mUserColorNameManager = UserColorNameManager.getInstance(activity);
mPreferences = SharedPreferencesWrapper.getInstance(activity, SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE, SharedPreferenceConstants.class);
mNameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
mLocale = getResources().getConfiguration().locale;
mCardBackgroundColor = ThemeUtils.getCardBackgroundColor(activity,
@ -982,8 +974,7 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
break;
}
case R.id.clear_nickname: {
final UserColorNameManager manager = UserColorNameManager.getInstance(getActivity());
manager.clearUserNickname(user.id);
mUserColorNameManager.clearUserNickname(user.id);
break;
}
case R.id.set_nickname: {

View File

@ -64,8 +64,6 @@ import org.mariotaku.twidere.api.twitter.Twitter;
import org.mariotaku.twidere.api.twitter.TwitterException;
import org.mariotaku.twidere.api.twitter.model.UserList;
import org.mariotaku.twidere.api.twitter.model.UserListUpdate;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.constant.SharedPreferenceConstants;
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowsInsetsCallback;
import org.mariotaku.twidere.fragment.iface.SupportFragmentCallback;
import org.mariotaku.twidere.graphic.EmptyDrawable;
@ -75,13 +73,9 @@ import org.mariotaku.twidere.model.SingleResponse;
import org.mariotaku.twidere.text.validator.UserListNameValidator;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.LinkCreator;
import org.mariotaku.twidere.util.OnLinkClickHandler;
import org.mariotaku.twidere.util.ParseUtils;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.ThemeUtils;
import org.mariotaku.twidere.util.TwidereLinkify;
import org.mariotaku.twidere.util.TwitterAPIFactory;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.util.Utils;
import org.mariotaku.twidere.view.TabPagerIndicator;
@ -100,8 +94,6 @@ public class UserListFragment extends BaseSupportFragment implements OnClickList
private SupportTabsAdapter mPagerAdapter;
private boolean mUserListLoaderInitialized;
private UserColorNameManager mUserColorNameManager;
private SharedPreferencesWrapper mPreferences;
private ParcelableUserList mUserList;
private final BroadcastReceiver mStatusReceiver = new BroadcastReceiver() {
@ -132,11 +124,6 @@ public class UserListFragment extends BaseSupportFragment implements OnClickList
mUserList = userList;
if (userList != null) {
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
final String displayName = mUserColorNameManager.getDisplayName(userList, nameFirst, false);
final String description = userList.description;
final TwidereLinkify linkify = new TwidereLinkify(new OnLinkClickHandler(activity,
getMultiSelectManager()));
activity.setTitle(userList.name);
} else {
activity.setTitle(R.string.user_list);
@ -208,14 +195,8 @@ public class UserListFragment extends BaseSupportFragment implements OnClickList
public void onActivityCreated(final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
final FragmentActivity activity = getActivity();
final TwidereApplication application = TwidereApplication.getInstance(activity);
mUserColorNameManager = application.getUserColorNameManager();
mPreferences = SharedPreferencesWrapper.getInstance(activity, SHARED_PREFERENCES_NAME,
Context.MODE_PRIVATE, SharedPreferenceConstants.class);
setHasOptionsMenu(true);
Utils.setNdefPushMessageCallback(activity, new CreateNdefMessageCallback() {
@Override

View File

@ -17,7 +17,7 @@ import android.widget.ImageView;
import android.widget.TextView;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.adapter.BaseAdapter;
import org.mariotaku.twidere.adapter.BaseRecyclerViewAdapter;
import org.mariotaku.twidere.loader.support.MediaTimelineLoader;
import org.mariotaku.twidere.model.ParcelableMedia;
import org.mariotaku.twidere.model.ParcelableStatus;
@ -156,7 +156,7 @@ public class UserMediaTimelineFragment extends BaseSupportFragment
mAdapter.setData(null);
}
private static class MediaTimelineAdapter extends BaseAdapter<MediaTimelineViewHolder> {
private static class MediaTimelineAdapter extends BaseRecyclerViewAdapter<MediaTimelineViewHolder> {
private final LayoutInflater mInflater;
private final MediaLoadingHandler mLoadingHandler;

View File

@ -153,12 +153,15 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
private PermissionsManager mPermissionsManager;
@Nullable
private NotificationManager mNotificationManager;
private SharedPreferencesWrapper mPreferences;
@Inject
SharedPreferencesWrapper mPreferences;
private ImagePreloader mImagePreloader;
@Inject
Network mNetwork;
@Inject
Bus mBus;
@Inject
UserColorNameManager mUserColorNameManager;
private Handler mHandler;
private boolean mHomeActivityInBackground;
@ -559,10 +562,10 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
@Override
public boolean onCreate() {
final Context context = getContext();
assert context != null;
DaggerGeneralComponent.builder().applicationModule(ApplicationModule.get(context)).build().inject(this);
mHandler = new Handler(Looper.getMainLooper());
mDatabaseWrapper = new SQLiteDatabaseWrapper(this);
mPreferences = SharedPreferencesWrapper.getInstance(context, SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
mPreferences.registerOnSharedPreferenceChangeListener(this);
updatePreferences();
mPermissionsManager = new PermissionsManager(context);
@ -1118,20 +1121,19 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
statusesCount, statusesCount);
final String notificationContent;
userCursor.moveToFirst();
final UserColorNameManager manager = UserColorNameManager.getInstance(context);
final String displayName = manager.getUserNickname(userCursor.getLong(idxUserId),
final String displayName = mUserColorNameManager.getUserNickname(userCursor.getLong(idxUserId),
mNameFirst ? userCursor.getString(idxUserName) : userCursor.getString(idxUserScreenName));
if (usersCount == 1) {
notificationContent = context.getString(R.string.from_name, displayName);
} else if (usersCount == 2) {
userCursor.moveToPosition(1);
final String othersName = manager.getUserNickname(userCursor.getLong(idxUserId),
final String othersName = mUserColorNameManager.getUserNickname(userCursor.getLong(idxUserId),
mNameFirst ? userCursor.getString(idxUserName) : userCursor.getString(idxUserScreenName));
notificationContent = resources.getQuantityString(R.plurals.from_name_and_N_others,
usersCount - 1, othersName, usersCount - 1);
} else {
userCursor.moveToPosition(1);
final String othersName = manager.getUserNickname(userCursor.getLong(idxUserId),
final String othersName = mUserColorNameManager.getUserNickname(userCursor.getLong(idxUserId),
mNameFirst ? userCursor.getString(idxUserName) : userCursor.getString(idxUserScreenName));
notificationContent = resources.getString(R.string.from_name_and_N_others, othersName, usersCount - 1);
}

View File

@ -60,7 +60,8 @@ import static org.mariotaku.twidere.util.Utils.shouldStopAutoRefreshOnBatteryLow
public class RefreshService extends Service implements Constants {
private SharedPreferencesWrapper mPreferences;
@Inject
SharedPreferencesWrapper mPreferences;
private AlarmManager mAlarmManager;
@Inject
@ -156,7 +157,6 @@ public class RefreshService extends Service implements Constants {
DaggerGeneralComponent.builder().applicationModule(ApplicationModule.get(this)).build().inject(this);
mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
final TwidereApplication app = TwidereApplication.getInstance(this);
mPreferences = SharedPreferencesWrapper.getInstance(app, SHARED_PREFERENCES_NAME, MODE_PRIVATE);
mPendingRefreshHomeTimelineIntent = PendingIntent.getBroadcast(this, 0, new Intent(
BROADCAST_REFRESH_HOME_TIMELINE), 0);
mPendingRefreshMentionsIntent = PendingIntent.getBroadcast(this, 0, new Intent(BROADCAST_REFRESH_MENTIONS), 0);

View File

@ -61,7 +61,6 @@ import org.mariotaku.twidere.api.twitter.model.User;
import org.mariotaku.twidere.api.twitter.model.UserList;
import org.mariotaku.twidere.api.twitter.model.UserListUpdate;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.constant.SharedPreferenceConstants;
import org.mariotaku.twidere.model.ListResponse;
import org.mariotaku.twidere.model.ParcelableAccount;
import org.mariotaku.twidere.model.ParcelableLocation;
@ -87,6 +86,7 @@ import org.mariotaku.twidere.task.CacheUsersStatusesTask;
import org.mariotaku.twidere.task.ManagedAsyncTask;
import org.mariotaku.twidere.util.collection.LongSparseMap;
import org.mariotaku.twidere.util.content.ContentResolverUtils;
import org.mariotaku.twidere.util.dagger.ApplicationModule;
import org.mariotaku.twidere.util.message.FavoriteCreatedEvent;
import org.mariotaku.twidere.util.message.FavoriteDestroyedEvent;
import org.mariotaku.twidere.util.message.FriendshipUpdatedEvent;
@ -130,11 +130,10 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
private CopyOnWriteArraySet<Long> mSendingDraftIds = new CopyOnWriteArraySet<>();
public AsyncTwitterWrapper(final Context context, final AsyncTaskManager manager, Bus bus) {
public AsyncTwitterWrapper(final Context context, final AsyncTaskManager manager, final SharedPreferencesWrapper preferences, final Bus bus) {
mContext = context;
mAsyncTaskManager = manager;
mPreferences = SharedPreferencesWrapper.getInstance(context, SHARED_PREFERENCES_NAME,
Context.MODE_PRIVATE, SharedPreferenceConstants.class);
mPreferences = preferences;
mResolver = context.getContentResolver();
mBus = bus;
}
@ -701,7 +700,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
if (result.hasData()) {
final User user = result.getData();
final TwidereApplication application = TwidereApplication.getInstance(mContext);
final UserColorNameManager manager = application.getUserColorNameManager();
final UserColorNameManager manager = ApplicationModule.get(mContext).getUserColorNameManager();
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
final String message = mContext.getString(R.string.accepted_users_follow_request,
manager.getDisplayName(user, nameFirst, true));
@ -756,7 +755,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
if (users.length == 1) {
final ParcelableUser user = users[0];
final TwidereApplication application = TwidereApplication.getInstance(mContext);
final UserColorNameManager manager = application.getUserColorNameManager();
final UserColorNameManager manager = ApplicationModule.get(mContext).getUserColorNameManager();
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
final String displayName = manager.getDisplayName(user.id, user.name, user.screen_name, nameFirst, false);
message = mContext.getString(R.string.added_user_to_list, displayName, result.getData().name);
@ -846,8 +845,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
@Override
protected void onPostExecute(final SingleResponse<ParcelableUser> result) {
if (result.hasData()) {
final TwidereApplication application = TwidereApplication.getInstance(mContext);
final UserColorNameManager manager = application.getUserColorNameManager();
final UserColorNameManager manager = ApplicationModule.get(mContext).getUserColorNameManager();
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
final String message = mContext.getString(R.string.blocked_user,
manager.getDisplayName(result.getData(), nameFirst, true));
@ -973,8 +971,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
if (result.hasData()) {
final ParcelableUser user = result.getData();
final String message;
final TwidereApplication application = TwidereApplication.getInstance(mContext);
final UserColorNameManager manager = application.getUserColorNameManager();
final UserColorNameManager manager = ApplicationModule.get(mContext).getUserColorNameManager();
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
if (user.is_protected) {
message = mContext.getString(R.string.sent_follow_request_to_user,
@ -1083,8 +1080,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
@Override
protected void onPostExecute(final SingleResponse<ParcelableUser> result) {
if (result.hasData()) {
final TwidereApplication application = TwidereApplication.getInstance(mContext);
final UserColorNameManager manager = application.getUserColorNameManager();
final UserColorNameManager manager = ApplicationModule.get(mContext).getUserColorNameManager();
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
final String message = mContext.getString(R.string.muted_user,
manager.getDisplayName(result.getData(), nameFirst, true));
@ -1262,8 +1258,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
if (succeed) {
if (users.length == 1) {
final ParcelableUser user = users[0];
final TwidereApplication application = TwidereApplication.getInstance(mContext);
final UserColorNameManager manager = application.getUserColorNameManager();
final UserColorNameManager manager = ApplicationModule.get(mContext).getUserColorNameManager();
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
final String displayName = manager.getDisplayName(user.id, user.name, user.screen_name, nameFirst, false);
message = mContext.getString(R.string.deleted_user_from_list, displayName, result.getData().name);
@ -1321,8 +1316,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
protected void onPostExecute(final SingleResponse<User> result) {
if (result.hasData()) {
final User user = result.getData();
final TwidereApplication application = TwidereApplication.getInstance(mContext);
final UserColorNameManager manager = application.getUserColorNameManager();
final UserColorNameManager manager = ApplicationModule.get(mContext).getUserColorNameManager();
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
final String message = mContext.getString(R.string.denied_users_follow_request,
manager.getDisplayName(user, nameFirst, true));
@ -1366,8 +1360,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
@Override
protected void onPostExecute(final SingleResponse<ParcelableUser> result) {
if (result.hasData()) {
final TwidereApplication application = TwidereApplication.getInstance(mContext);
final UserColorNameManager manager = application.getUserColorNameManager();
final UserColorNameManager manager = ApplicationModule.get(mContext).getUserColorNameManager();
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
final String message = mContext.getString(R.string.unblocked_user,
manager.getDisplayName(result.getData(), nameFirst, true));
@ -1611,8 +1604,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
@Override
protected void onPostExecute(final SingleResponse<ParcelableUser> result) {
if (result.hasData()) {
final TwidereApplication application = TwidereApplication.getInstance(mContext);
final UserColorNameManager manager = application.getUserColorNameManager();
final UserColorNameManager manager = ApplicationModule.get(mContext).getUserColorNameManager();
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
final String message = mContext.getString(R.string.unfollowed_user,
manager.getDisplayName(result.getData(), nameFirst, true));
@ -1654,8 +1646,7 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
@Override
protected void onPostExecute(final SingleResponse<ParcelableUser> result) {
if (result.hasData()) {
final TwidereApplication application = TwidereApplication.getInstance(mContext);
final UserColorNameManager manager = application.getUserColorNameManager();
final UserColorNameManager manager = ApplicationModule.get(mContext).getUserColorNameManager();
final boolean nameFirst = mPreferences.getBoolean(KEY_NAME_FIRST);
final String message = mContext.getString(R.string.unmuted_user,
manager.getDisplayName(result.getData(), nameFirst, true));
@ -2188,12 +2179,15 @@ public class AsyncTwitterWrapper extends TwitterWrapper {
final String[] projection = {SQLFunctions.COUNT()};
final int rowsDeleted;
final Cursor countCur = mResolver.query(uri, projection, countWhere, null, null);
if (countCur.moveToFirst()) {
rowsDeleted = countCur.getInt(0);
} else {
rowsDeleted = 0;
try {
if (countCur != null && countCur.moveToFirst()) {
rowsDeleted = countCur.getInt(0);
} else {
rowsDeleted = 0;
}
} finally {
Utils.closeSilently(countCur);
}
countCur.close();
// BEGIN HotMobi
final RefreshEvent event = RefreshEvent.create(mContext, statusIds, getTimelineType());

View File

@ -34,7 +34,6 @@ import com.twitter.Extractor;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.activity.support.BaseAppCompatActivity;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.menu.AccountActionProvider;
import org.mariotaku.twidere.model.ParcelableAccount;
import org.mariotaku.twidere.model.ParcelableStatus;
@ -60,12 +59,11 @@ import static org.mariotaku.twidere.util.content.ContentResolverUtils.bulkInsert
@SuppressLint("Registered")
public class MultiSelectEventHandler implements Constants, ActionMode.Callback, MultiSelectManager.Callback {
private TwidereApplication mApplication;
@Inject
AsyncTwitterWrapper mTwitterWrapper;
private MultiSelectManager mMultiSelectManager;
@Inject
MultiSelectManager mMultiSelectManager;
private ActionMode mActionMode;
@ -84,8 +82,6 @@ public class MultiSelectEventHandler implements Constants, ActionMode.Callback,
* Call before super.onCreate
*/
public void dispatchOnCreate() {
mApplication = mActivity.getTwidereApplication();
mMultiSelectManager = mApplication.getMultiSelectManager();
}
/**

View File

@ -26,10 +26,13 @@ import android.content.Context;
import android.media.MediaScannerConnection;
import android.os.AsyncTask;
import android.os.Environment;
import android.system.ErrnoException;
import android.system.OsConstants;
import android.util.Log;
import android.webkit.MimeTypeMap;
import android.widget.Toast;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
import org.mariotaku.twidere.fragment.ProgressDialogFragment;
@ -91,6 +94,7 @@ public class SaveFileTask extends AsyncTask<Object, Object, File> implements Con
}
return saveFile;
} catch (final IOException e) {
final int errno = Utils.getErrorNo(e.getCause());
Log.w(LOGTAG, "Failed to save file", e);
return null;
} finally {

View File

@ -26,16 +26,15 @@ import android.graphics.Color;
import android.support.v4.util.LongSparseArray;
import org.mariotaku.twidere.TwidereConstants;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.api.twitter.model.User;
import org.mariotaku.twidere.model.ParcelableStatus;
import org.mariotaku.twidere.model.ParcelableUser;
import org.mariotaku.twidere.model.ParcelableUserList;
import org.mariotaku.twidere.util.dagger.ApplicationModule;
import java.util.Map;
import java.util.Set;
import org.mariotaku.twidere.api.twitter.model.User;
import static android.text.TextUtils.isEmpty;
public class UserColorNameManager implements TwidereConstants {
@ -65,8 +64,7 @@ public class UserColorNameManager implements TwidereConstants {
}
public static UserColorNameManager getInstance(Context context) {
final TwidereApplication application = TwidereApplication.getInstance(context);
return application.getUserColorNameManager();
return ApplicationModule.get(context).getUserColorNameManager();
}
public void clearUserColor(final long userId) {
@ -105,7 +103,6 @@ public class UserColorNameManager implements TwidereConstants {
return getDisplayName(user.id, user.name, user.screen_name, nameFirst, ignoreCache);
}
@Deprecated
public String getDisplayName(final User user, final boolean nameFirst, final boolean ignoreCache) {
return getDisplayName(user.getId(), user.getName(), user.getScreenName(), nameFirst, ignoreCache);
}

View File

@ -82,6 +82,7 @@ import android.support.v4.view.MenuItemCompat;
import android.support.v4.view.accessibility.AccessibilityEventCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.ShareActionProvider;
import android.system.ErrnoException;
import android.text.Editable;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
@ -741,6 +742,12 @@ public final class Utils implements Constants {
return true;
}
public static boolean closeSilently(final Cursor c) {
if (c == null) return false;
c.close();
return true;
}
public static void configBaseAdapter(final Context context, final IBaseAdapter adapter) {
if (context == null) return;
final SharedPreferences pref = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
@ -2663,7 +2670,7 @@ public final class Utils implements Constants {
context.startActivity(intent);
}
public static void openMedia(final Context context, final ParcelableDirectMessage message, final ParcelableMedia current, Bundle options) {
public static void openMedia(final Context context, final ParcelableDirectMessage message, final ParcelableMedia current, @Nullable Bundle options) {
openMedia(context, message.account_id, false, null, message, current, message.media, options);
}
@ -3914,6 +3921,11 @@ public final class Utils implements Constants {
return Boolean.parseBoolean("false");
}
public static int getErrorNo(Throwable t) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return 0;
return UtilsL.getErrorNo(t);
}
static class UtilsL {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@ -3925,6 +3937,15 @@ public final class Utils implements Constants {
window.setSharedElementEnterTransition(transition);
window.setSharedElementExitTransition(transition);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static int getErrorNo(Throwable t) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return 0;
if (t instanceof ErrnoException) {
return ((ErrnoException) t).errno;
}
return 0;
}
}
private static class ImageGridClickListener implements View.OnClickListener {
@ -3975,28 +3996,28 @@ public final class Utils implements Constants {
}
}
@Nullable
public static GeoLocation getCachedGeoLocation(Context context) {
final Location location = getCachedLocation(context);
if (location == null) return null;
return new GeoLocation(location.getLatitude(), location.getLongitude());
}
@Nullable
public static Location getCachedLocation(Context context) {
Location location = null;
final LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
if (lm == null) return null;
try {
final LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
try {
location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
} catch (Exception ignore) {
location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
} catch (SecurityException ignore) {
}
if (location != null) return location;
try {
location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
} catch (Exception ignore) {
}
if (location != null) return location;
try {
location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
} catch (SecurityException ignore) {
}
} catch (Exception ignore) {
}
return location;
}

View File

@ -21,6 +21,7 @@ package org.mariotaku.twidere.util.dagger;
import android.content.Context;
import android.os.Looper;
import android.support.annotation.NonNull;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
@ -35,13 +36,17 @@ import org.mariotaku.restfu.http.RestHttpClient;
import org.mariotaku.twidere.BuildConfig;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.app.TwidereApplication;
import org.mariotaku.twidere.constant.SharedPreferenceConstants;
import org.mariotaku.twidere.util.ActivityTracker;
import org.mariotaku.twidere.util.AsyncTaskManager;
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
import org.mariotaku.twidere.util.KeyboardShortcutsHandler;
import org.mariotaku.twidere.util.MediaLoaderWrapper;
import org.mariotaku.twidere.util.MultiSelectManager;
import org.mariotaku.twidere.util.ReadStateManager;
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
import org.mariotaku.twidere.util.TwitterAPIFactory;
import org.mariotaku.twidere.util.UserColorNameManager;
import org.mariotaku.twidere.util.VideoLoader;
import org.mariotaku.twidere.util.imageloader.TwidereImageDownloader;
import org.mariotaku.twidere.util.net.OkHttpRestClient;
@ -49,6 +54,7 @@ import org.mariotaku.twidere.util.net.TwidereNetwork;
import dagger.Module;
import dagger.Provides;
import edu.tsinghua.hotmobi.HotMobiLogger;
/**
* Created by mariotaku on 15/10/5.
@ -69,12 +75,17 @@ public class ApplicationModule {
private final Network network;
private final RestHttpClient restHttpClient;
private final Bus bus;
private final MultiSelectManager multiSelectManager;
private final UserColorNameManager userColorNameManager;
private final KeyboardShortcutsHandler keyboardShortcutsHandler;
private final HotMobiLogger hotMobiLogger;
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, SharedPreferenceConstants.class);
activityTracker = new ActivityTracker();
bus = new Bus(ThreadEnforcer.MAIN);
asyncTaskManager = AsyncTaskManager.getInstance();
@ -82,15 +93,19 @@ public class ApplicationModule {
network = new TwidereNetwork(application);
asyncTwitterWrapper = new AsyncTwitterWrapper(application, asyncTaskManager, bus);
asyncTwitterWrapper = new AsyncTwitterWrapper(application, asyncTaskManager, sharedPreferences, bus);
restHttpClient = TwitterAPIFactory.getDefaultHttpClient(application, network);
imageDownloader = new TwidereImageDownloader(application, restHttpClient, true);
imageLoader = createImageLoader(application, imageDownloader);
videoLoader = new VideoLoader(application, restHttpClient, asyncTaskManager, bus);
mediaLoaderWrapper = new MediaLoaderWrapper(imageLoader, videoLoader);
multiSelectManager = new MultiSelectManager();
userColorNameManager = new UserColorNameManager(application);
keyboardShortcutsHandler = new KeyboardShortcutsHandler(application);
hotMobiLogger = new HotMobiLogger(application);
}
public static ApplicationModule get(Context context) {
public static ApplicationModule get(@NonNull Context context) {
return TwidereApplication.getInstance(context).getApplicationModule();
}
@ -108,6 +123,26 @@ public class ApplicationModule {
return loader;
}
@Provides
public KeyboardShortcutsHandler getKeyboardShortcutsHandler() {
return keyboardShortcutsHandler;
}
@Provides
public SharedPreferencesWrapper getSharedPreferences() {
return sharedPreferences;
}
@Provides
public UserColorNameManager getUserColorNameManager() {
return userColorNameManager;
}
@Provides
public MultiSelectManager getMultiSelectManager() {
return multiSelectManager;
}
@Provides
public RestHttpClient getRestHttpClient() {
return restHttpClient;
@ -175,4 +210,8 @@ public class ApplicationModule {
public void onLowMemory() {
mediaLoaderWrapper.clearMemoryCache();
}
public HotMobiLogger getHotMobiLogger() {
return hotMobiLogger;
}
}

View File

@ -27,12 +27,16 @@ import org.mariotaku.twidere.activity.support.BaseAppCompatActivity;
import org.mariotaku.twidere.activity.support.ThemedFragmentActivity;
import org.mariotaku.twidere.adapter.AccountsAdapter;
import org.mariotaku.twidere.adapter.AccountsSpinnerAdapter;
import org.mariotaku.twidere.adapter.BaseAdapter;
import org.mariotaku.twidere.adapter.BaseArrayAdapter;
import org.mariotaku.twidere.adapter.BaseRecyclerViewAdapter;
import org.mariotaku.twidere.adapter.DraftsAdapter;
import org.mariotaku.twidere.adapter.UserHashtagAutoCompleteAdapter;
import org.mariotaku.twidere.fragment.BaseDialogFragment;
import org.mariotaku.twidere.fragment.BaseFiltersFragment;
import org.mariotaku.twidere.fragment.BaseFragment;
import org.mariotaku.twidere.fragment.BaseListFragment;
import org.mariotaku.twidere.fragment.BasePreferenceFragment;
import org.mariotaku.twidere.fragment.support.AccountsDashboardFragment;
import org.mariotaku.twidere.fragment.support.BaseSupportDialogFragment;
import org.mariotaku.twidere.fragment.support.BaseSupportFragment;
import org.mariotaku.twidere.provider.TwidereCommandProvider;
@ -78,7 +82,7 @@ public interface GeneralComponent {
void inject(BackgroundOperationService object);
void inject(BaseAdapter<RecyclerView.ViewHolder> object);
void inject(BaseRecyclerViewAdapter<RecyclerView.ViewHolder> object);
void inject(AccountsAdapter object);
@ -91,4 +95,12 @@ public interface GeneralComponent {
void inject(DraftsAdapter object);
void inject(ManagedAsyncTask<Object, Object, Object> object);
void inject(BasePreferenceFragment object);
void inject(BaseDialogFragment object);
void inject(BaseFiltersFragment.FilteredUsersFragment.FilterUsersListAdapter object);
void inject(AccountsDashboardFragment.OptionItemsAdapter object);
}

View File

@ -97,8 +97,7 @@ public class MessageViewHolder extends ViewHolder implements OnMediaClickListene
@Override
public void onMediaClick(View view, ParcelableMedia media, long accountId) {
//TODO open media animation
Bundle options = null;
final Bundle options = Utils.createMediaViewerActivityOption(view);
Utils.openMedia(adapter.getContext(), adapter.getDirectMessage(getAdapterPosition()), media, options);
}

View File

@ -453,13 +453,14 @@ public class StatusViewHolder extends ViewHolder implements Constants, OnClickLi
private final Context context;
private final SharedPreferencesWrapper preferences;
@Inject
MediaLoaderWrapper loader;
private final TwidereLinkify linkify;
private final MediaLoadingHandler handler;
@Inject
MediaLoaderWrapper loader;
@Inject
AsyncTwitterWrapper twitter;
private final TwidereLinkify linkify;
private final UserColorNameManager manager;
@Inject
UserColorNameManager manager;
private int profileImageStyle;
private int mediaPreviewStyle;
@ -478,7 +479,6 @@ public class StatusViewHolder extends ViewHolder implements Constants, OnClickLi
preferences = SharedPreferencesWrapper.getInstance(context, SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
final TwidereApplication app = TwidereApplication.getInstance(context);
handler = new MediaLoadingHandler(R.id.media_preview_progress);
manager = app.getUserColorNameManager();
linkify = new TwidereLinkify(null);
updateOptions();
}

View File

@ -38,30 +38,27 @@
<FrameLayout
android:id="@+id/video_view_overlay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/video_view"
android:layout_alignEnd="@+id/video_view"
android:layout_alignLeft="@+id/video_view"
android:layout_alignRight="@+id/video_view"
android:layout_alignStart="@+id/video_view"
android:layout_alignTop="@+id/video_view"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:animateLayoutChanges="true">
<LinearLayout
<RelativeLayout
android:id="@+id/video_control"
style="?actionBarSplitStyle"
android:layout_width="match_parent"
android:layout_height="@dimen/height_player_control_panel"
android:layout_height="?actionBarSize"
android:layout_gravity="bottom"
android:background="@drawable/bg_shadow_video_player"
android:gravity="center_vertical"
android:orientation="horizontal"
android:visibility="gone">
tools:ignore="UselessParent">
<ImageButton
android:id="@+id/play_pause_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="0"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:background="?selectableItemBackgroundBorderless"
android:clickable="true"
android:contentDescription="@string/play"
@ -71,37 +68,46 @@
<TextView
android:id="@+id/position_label"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="0"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/video_view_progress"
android:layout_alignStart="@+id/video_view_progress"
android:layout_below="@+id/video_view_progress"
android:gravity="center"
android:minWidth="@dimen/element_size_normal"
android:textColor="?android:textColorPrimary"
tools:text="12:34" />
android:textSize="@dimen/text_size_extra_small"
tools:text="--:--" />
<ProgressBar
android:id="@+id/video_view_progress"
style="?android:progressBarStyleHorizontal"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_centerVertical="true"
android:layout_toEndOf="@+id/play_pause_button"
android:layout_toLeftOf="@+id/volume_button"
android:layout_toRightOf="@+id/play_pause_button"
android:layout_toStartOf="@+id/volume_button"
android:indeterminate="false" />
<TextView
android:id="@+id/duration_label"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="0"
android:layout_height="wrap_content"
android:layout_alignEnd="@+id/video_view_progress"
android:layout_alignRight="@+id/video_view_progress"
android:layout_below="@+id/video_view_progress"
android:gravity="center"
android:minWidth="@dimen/element_size_normal"
android:textColor="?android:textColorPrimary"
tools:text="27:56" />
android:textSize="@dimen/text_size_extra_small"
tools:text="--:--" />
<ImageButton
android:id="@+id/volume_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="0"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:background="?selectableItemBackgroundBorderless"
android:clickable="true"
android:contentDescription="@string/mute"
@ -109,7 +115,7 @@
android:src="@drawable/ic_action_speaker_max" />
</LinearLayout>
</RelativeLayout>
</FrameLayout>
</RelativeLayout>