new account selector in dashboard fragment
This commit is contained in:
parent
de764eb177
commit
2f679124b0
|
@ -58,7 +58,6 @@ import org.mariotaku.twidere.R;
|
|||
import org.mariotaku.twidere.activity.support.CustomTabEditorActivity;
|
||||
import org.mariotaku.twidere.model.CustomTabConfiguration;
|
||||
import org.mariotaku.twidere.model.CustomTabConfiguration.CustomTabConfigurationComparator;
|
||||
import org.mariotaku.twidere.model.Panes;
|
||||
import org.mariotaku.twidere.provider.TweetStore.Tabs;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
@ -78,7 +77,7 @@ import static org.mariotaku.twidere.util.CustomTabUtils.isTabAdded;
|
|||
import static org.mariotaku.twidere.util.CustomTabUtils.isTabTypeValid;
|
||||
import static org.mariotaku.twidere.util.Utils.getAccountIds;
|
||||
|
||||
public class CustomTabsFragment extends BaseListFragment implements LoaderCallbacks<Cursor>, Panes.Right,
|
||||
public class CustomTabsFragment extends BaseListFragment implements LoaderCallbacks<Cursor>,
|
||||
MultiChoiceModeListener, DropListener {
|
||||
|
||||
private ContentResolver mResolver;
|
||||
|
|
|
@ -41,124 +41,123 @@ import org.mariotaku.twidere.R;
|
|||
import org.mariotaku.twidere.adapter.ExtensionsAdapter;
|
||||
import org.mariotaku.twidere.loader.ExtensionsListLoader;
|
||||
import org.mariotaku.twidere.loader.ExtensionsListLoader.ExtensionInfo;
|
||||
import org.mariotaku.twidere.model.Panes;
|
||||
import org.mariotaku.twidere.util.PermissionsManager;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ExtensionsListFragment extends BaseListFragment implements Constants,
|
||||
LoaderCallbacks<List<ExtensionInfo>>, OnItemClickListener, OnItemLongClickListener, OnMenuItemClickListener,
|
||||
Panes.Right {
|
||||
LoaderCallbacks<List<ExtensionInfo>>, OnItemClickListener, OnItemLongClickListener,
|
||||
OnMenuItemClickListener {
|
||||
|
||||
private ExtensionsAdapter mAdapter;
|
||||
private PackageManager mPackageManager;
|
||||
private PermissionsManager mPermissionsManager;
|
||||
private ExtensionInfo mSelectedExtension;
|
||||
private ListView mListView;
|
||||
private PopupMenu mPopupMenu;
|
||||
private ExtensionsAdapter mAdapter;
|
||||
private PackageManager mPackageManager;
|
||||
private PermissionsManager mPermissionsManager;
|
||||
private ExtensionInfo mSelectedExtension;
|
||||
private ListView mListView;
|
||||
private PopupMenu mPopupMenu;
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(final Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
mPackageManager = getActivity().getPackageManager();
|
||||
mPermissionsManager = new PermissionsManager(getActivity());
|
||||
mAdapter = new ExtensionsAdapter(getActivity());
|
||||
setListAdapter(mAdapter);
|
||||
mListView = getListView();
|
||||
mListView.setOnItemClickListener(this);
|
||||
mListView.setOnItemLongClickListener(this);
|
||||
getLoaderManager().initLoader(0, null, this);
|
||||
setListShown(false);
|
||||
}
|
||||
@Override
|
||||
public void onActivityCreated(final Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
mPackageManager = getActivity().getPackageManager();
|
||||
mPermissionsManager = new PermissionsManager(getActivity());
|
||||
mAdapter = new ExtensionsAdapter(getActivity());
|
||||
setListAdapter(mAdapter);
|
||||
mListView = getListView();
|
||||
mListView.setOnItemClickListener(this);
|
||||
mListView.setOnItemLongClickListener(this);
|
||||
getLoaderManager().initLoader(0, null, this);
|
||||
setListShown(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Loader<List<ExtensionInfo>> onCreateLoader(final int id, final Bundle args) {
|
||||
return new ExtensionsListLoader(getActivity(), mPackageManager);
|
||||
}
|
||||
@Override
|
||||
public Loader<List<ExtensionInfo>> onCreateLoader(final int id, final Bundle args) {
|
||||
return new ExtensionsListLoader(getActivity(), mPackageManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemClick(final AdapterView<?> parent, final View view, final int position, final long id) {
|
||||
openSettings(mAdapter.getItem(position));
|
||||
}
|
||||
@Override
|
||||
public void onItemClick(final AdapterView<?> parent, final View view, final int position, final long id) {
|
||||
openSettings(mAdapter.getItem(position));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onItemLongClick(final AdapterView<?> parent, final View view, final int position, final long id) {
|
||||
mSelectedExtension = mAdapter.getItem(position);
|
||||
if (mSelectedExtension == null) return false;
|
||||
mPopupMenu = PopupMenu.getInstance(getActivity(), view);
|
||||
mPopupMenu.inflate(R.menu.action_extension);
|
||||
final Menu menu = mPopupMenu.getMenu();
|
||||
final MenuItem settings = menu.findItem(MENU_SETTINGS);
|
||||
final Intent intent = mSelectedExtension.pname != null && mSelectedExtension.settings != null ? new Intent(
|
||||
INTENT_ACTION_EXTENSION_SETTINGS) : null;
|
||||
if (intent != null) {
|
||||
intent.setClassName(mSelectedExtension.pname, mSelectedExtension.settings);
|
||||
}
|
||||
settings.setVisible(intent != null && mPackageManager.queryIntentActivities(intent, 0).size() == 1);
|
||||
mPopupMenu.setOnMenuItemClickListener(this);
|
||||
mPopupMenu.show();
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
public boolean onItemLongClick(final AdapterView<?> parent, final View view, final int position, final long id) {
|
||||
mSelectedExtension = mAdapter.getItem(position);
|
||||
if (mSelectedExtension == null) return false;
|
||||
mPopupMenu = PopupMenu.getInstance(getActivity(), view);
|
||||
mPopupMenu.inflate(R.menu.action_extension);
|
||||
final Menu menu = mPopupMenu.getMenu();
|
||||
final MenuItem settings = menu.findItem(MENU_SETTINGS);
|
||||
final Intent intent = mSelectedExtension.pname != null && mSelectedExtension.settings != null ? new Intent(
|
||||
INTENT_ACTION_EXTENSION_SETTINGS) : null;
|
||||
if (intent != null) {
|
||||
intent.setClassName(mSelectedExtension.pname, mSelectedExtension.settings);
|
||||
}
|
||||
settings.setVisible(intent != null && mPackageManager.queryIntentActivities(intent, 0).size() == 1);
|
||||
mPopupMenu.setOnMenuItemClickListener(this);
|
||||
mPopupMenu.show();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoaderReset(final Loader<List<ExtensionInfo>> loader) {
|
||||
mAdapter.setData(null);
|
||||
}
|
||||
@Override
|
||||
public void onLoaderReset(final Loader<List<ExtensionInfo>> loader) {
|
||||
mAdapter.setData(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadFinished(final Loader<List<ExtensionInfo>> loader, final List<ExtensionInfo> data) {
|
||||
mAdapter.setData(data);
|
||||
setListShown(true);
|
||||
}
|
||||
@Override
|
||||
public void onLoadFinished(final Loader<List<ExtensionInfo>> loader, final List<ExtensionInfo> data) {
|
||||
mAdapter.setData(data);
|
||||
setListShown(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMenuItemClick(final MenuItem item) {
|
||||
if (mSelectedExtension == null) return false;
|
||||
switch (item.getItemId()) {
|
||||
case MENU_SETTINGS: {
|
||||
openSettings(mSelectedExtension);
|
||||
break;
|
||||
}
|
||||
case MENU_DELETE: {
|
||||
final Uri packageUri = Uri.parse("package:" + mSelectedExtension.pname);
|
||||
final Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageUri);
|
||||
startActivity(uninstallIntent);
|
||||
break;
|
||||
}
|
||||
case MENU_REVOKE: {
|
||||
mPermissionsManager.revoke(mSelectedExtension.pname);
|
||||
mAdapter.notifyDataSetChanged();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
public boolean onMenuItemClick(final MenuItem item) {
|
||||
if (mSelectedExtension == null) return false;
|
||||
switch (item.getItemId()) {
|
||||
case MENU_SETTINGS: {
|
||||
openSettings(mSelectedExtension);
|
||||
break;
|
||||
}
|
||||
case MENU_DELETE: {
|
||||
final Uri packageUri = Uri.parse("package:" + mSelectedExtension.pname);
|
||||
final Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageUri);
|
||||
startActivity(uninstallIntent);
|
||||
break;
|
||||
}
|
||||
case MENU_REVOKE: {
|
||||
mPermissionsManager.revoke(mSelectedExtension.pname);
|
||||
mAdapter.notifyDataSetChanged();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
mAdapter.notifyDataSetChanged();
|
||||
}
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
mAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
if (mPopupMenu != null) {
|
||||
mPopupMenu.dismiss();
|
||||
}
|
||||
super.onStop();
|
||||
}
|
||||
@Override
|
||||
public void onStop() {
|
||||
if (mPopupMenu != null) {
|
||||
mPopupMenu.dismiss();
|
||||
}
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
private boolean openSettings(final ExtensionInfo info) {
|
||||
if (info == null || info.settings == null) return false;
|
||||
final Intent intent = new Intent(INTENT_ACTION_EXTENSIONS);
|
||||
intent.setClassName(info.pname, info.settings);
|
||||
try {
|
||||
startActivity(intent);
|
||||
} catch (final Exception e) {
|
||||
Log.w(LOGTAG, e);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
private boolean openSettings(final ExtensionInfo info) {
|
||||
if (info == null || info.settings == null) return false;
|
||||
final Intent intent = new Intent(INTENT_ACTION_EXTENSIONS);
|
||||
intent.setClassName(info.pname, info.settings);
|
||||
try {
|
||||
startActivity(intent);
|
||||
} catch (final Exception e) {
|
||||
Log.w(LOGTAG, e);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -31,7 +31,6 @@ import android.database.Cursor;
|
|||
import android.graphics.PorterDuff.Mode;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v4.app.LoaderManager.LoaderCallbacks;
|
||||
import android.support.v4.content.CursorLoader;
|
||||
|
@ -43,18 +42,18 @@ import android.support.v7.widget.RecyclerView.ViewHolder;
|
|||
import android.view.ContextThemeWrapper;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.CompoundButton.OnCheckedChangeListener;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ListAdapter;
|
||||
import android.widget.ListView;
|
||||
import android.widget.SimpleCursorAdapter;
|
||||
import android.widget.Switch;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.commonsware.cwac.merge.MergeAdapter;
|
||||
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.FiltersActivity;
|
||||
import org.mariotaku.twidere.activity.SettingsActivity;
|
||||
|
@ -66,11 +65,11 @@ import org.mariotaku.twidere.activity.support.UserProfileEditorActivity;
|
|||
import org.mariotaku.twidere.adapter.ArrayAdapter;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.model.Account;
|
||||
import org.mariotaku.twidere.model.Account.Indices;
|
||||
import org.mariotaku.twidere.provider.TweetStore.Accounts;
|
||||
import org.mariotaku.twidere.util.ImageLoaderWrapper;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.util.content.SupportFragmentReloadCursorObserver;
|
||||
import org.mariotaku.twidere.view.iface.IColorLabelView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
@ -81,7 +80,7 @@ import static org.mariotaku.twidere.util.Utils.openUserProfile;
|
|||
import static org.mariotaku.twidere.util.Utils.openUserTimeline;
|
||||
|
||||
public class AccountsDashboardFragment extends BaseSupportListFragment implements LoaderCallbacks<Cursor>,
|
||||
OnSharedPreferenceChangeListener, OnAccountActivateStateChangeListener {
|
||||
OnSharedPreferenceChangeListener, OnCheckedChangeListener {
|
||||
|
||||
private final SupportFragmentReloadCursorObserver mReloadContentObserver = new SupportFragmentReloadCursorObserver(
|
||||
this, 0, this);
|
||||
|
@ -90,7 +89,7 @@ public class AccountsDashboardFragment extends BaseSupportListFragment implement
|
|||
private SharedPreferences mPreferences;
|
||||
private MergeAdapter mAdapter;
|
||||
|
||||
private DrawerAccountsAdapter mAccountsAdapter;
|
||||
private AccountSelectorAdapter mAccountsAdapter;
|
||||
private AccountOptionsAdapter mAccountOptionsAdapter;
|
||||
private AppMenuAdapter mAppMenuAdapter;
|
||||
|
||||
|
@ -99,17 +98,11 @@ public class AccountsDashboardFragment extends BaseSupportListFragment implement
|
|||
private RecyclerView mAccountsSelector;
|
||||
private ImageView mAccountProfileBannerView, mAccountProfileImageView;
|
||||
private TextView mAccountProfileNameView, mAccountProfileScreenNameView;
|
||||
private Switch mAccountsToggle;
|
||||
|
||||
private Context mThemedContext;
|
||||
private ImageLoaderWrapper mImageLoader;
|
||||
|
||||
@Override
|
||||
public void onAccountActivateStateChanged(final Account account, final boolean activated) {
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put(Accounts.IS_ACTIVATED, activated);
|
||||
final String where = Accounts.ACCOUNT_ID + " = " + account.account_id;
|
||||
mResolver.update(Accounts.CONTENT_URI, values, where, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(final Bundle savedInstanceState) {
|
||||
|
@ -121,21 +114,23 @@ public class AccountsDashboardFragment extends BaseSupportListFragment implement
|
|||
final LayoutInflater inflater = LayoutInflater.from(context);
|
||||
final ListView listView = getListView();
|
||||
mAdapter = new MergeAdapter();
|
||||
mAccountsAdapter = new DrawerAccountsAdapter(context);
|
||||
mAccountsAdapter = new AccountSelectorAdapter(context, this);
|
||||
mAccountOptionsAdapter = new AccountOptionsAdapter(context);
|
||||
mAppMenuAdapter = new AppMenuAdapter(context);
|
||||
mAppMenuSectionView = newSectionView(context, R.string.more);
|
||||
mAccountSelectorView = inflater.inflate(R.layout.header_drawer_account_selector, listView, false);
|
||||
mAccountsSelector = (RecyclerView) mAccountSelectorView.findViewById(R.id.account_selector);
|
||||
mAccountsSelector.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));
|
||||
// mAccountsSelector.setAdapter(mAccountsAdapter);
|
||||
final LinearLayoutManager layoutManager = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false);
|
||||
layoutManager.setStackFromEnd(true);
|
||||
mAccountsSelector.setLayoutManager(layoutManager);
|
||||
mAccountsSelector.setAdapter(mAccountsAdapter);
|
||||
mAccountProfileImageView = (ImageView) mAccountSelectorView.findViewById(R.id.profile_image);
|
||||
mAccountProfileBannerView = (ImageView) mAccountSelectorView.findViewById(R.id.profile_banner);
|
||||
mAccountProfileNameView = (TextView) mAccountSelectorView.findViewById(R.id.name);
|
||||
mAccountProfileScreenNameView = (TextView) mAccountSelectorView.findViewById(R.id.screen_name);
|
||||
mAccountsAdapter.setOnAccountActivateStateChangeListener(this);
|
||||
mAccountsToggle = (Switch) mAccountSelectorView.findViewById(R.id.toggle);
|
||||
mAccountsToggle.setOnCheckedChangeListener(this);
|
||||
mAdapter.addView(mAccountSelectorView, false);
|
||||
mAdapter.addAdapter(mAccountsAdapter);
|
||||
mAdapter.addAdapter(mAccountOptionsAdapter);
|
||||
mAdapter.addView(mAppMenuSectionView, false);
|
||||
mAdapter.addAdapter(mAppMenuAdapter);
|
||||
|
@ -178,13 +173,7 @@ public class AccountsDashboardFragment extends BaseSupportListFragment implement
|
|||
public void onListItemClick(final ListView l, final View v, final int position, final long id) {
|
||||
final ListAdapter adapter = mAdapter.getAdapter(position);
|
||||
final Object item = mAdapter.getItem(position);
|
||||
if (adapter instanceof DrawerAccountsAdapter) {
|
||||
if (!(item instanceof Account)) return;
|
||||
final Account account = (Account) item;
|
||||
mAccountsAdapter.setSelectedAccountId(account.account_id);
|
||||
updateAccountOptionsSeparatorLabel();
|
||||
updateDefaultAccountState();
|
||||
} else if (adapter instanceof AccountOptionsAdapter) {
|
||||
if (adapter instanceof AccountOptionsAdapter) {
|
||||
final Account account = mAccountsAdapter.getSelectedAccount();
|
||||
if (account == null || !(item instanceof OptionItem)) return;
|
||||
final OptionItem option = (OptionItem) item;
|
||||
|
@ -269,6 +258,8 @@ public class AccountsDashboardFragment extends BaseSupportListFragment implement
|
|||
|
||||
@Override
|
||||
public void onLoaderReset(final Loader<Cursor> loader) {
|
||||
//TODO
|
||||
// mAccountsAdapter.changeCursor(null);
|
||||
mAccountsAdapter.changeCursor(null);
|
||||
}
|
||||
|
||||
|
@ -278,6 +269,8 @@ public class AccountsDashboardFragment extends BaseSupportListFragment implement
|
|||
data.moveToFirst();
|
||||
mAccountsAdapter.setSelectedAccountId(data.getLong(data.getColumnIndex(Accounts.ACCOUNT_ID)));
|
||||
}
|
||||
//TODO
|
||||
// mAccountsAdapter.changeCursor(data);
|
||||
mAccountsAdapter.changeCursor(data);
|
||||
updateAccountOptionsSeparatorLabel();
|
||||
updateDefaultAccountState();
|
||||
|
@ -286,14 +279,12 @@ public class AccountsDashboardFragment extends BaseSupportListFragment implement
|
|||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
mAccountsAdapter.setDefaultAccountId(mPreferences.getLong(KEY_DEFAULT_ACCOUNT_ID, -1));
|
||||
updateDefaultAccountState();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) {
|
||||
if (KEY_DEFAULT_ACCOUNT_ID.equals(key)) {
|
||||
mAccountsAdapter.setDefaultAccountId(mPreferences.getLong(KEY_DEFAULT_ACCOUNT_ID, -1));
|
||||
updateDefaultAccountState();
|
||||
}
|
||||
}
|
||||
|
@ -334,6 +325,7 @@ public class AccountsDashboardFragment extends BaseSupportListFragment implement
|
|||
}
|
||||
mAccountProfileNameView.setText(account.name);
|
||||
mAccountProfileScreenNameView.setText("@" + account.screen_name);
|
||||
mAccountsToggle.setChecked(account.is_activated);
|
||||
mImageLoader.displayProfileImage(mAccountProfileImageView, account.profile_image_url);
|
||||
final int bannerWidth = mAccountProfileBannerView.getWidth();
|
||||
final Resources res = getResources();
|
||||
|
@ -343,8 +335,6 @@ public class AccountsDashboardFragment extends BaseSupportListFragment implement
|
|||
}
|
||||
|
||||
private void updateDefaultAccountState() {
|
||||
final long defaultAccountId = mAccountsAdapter.getDefaultAccountId();
|
||||
final long selectedAccountId = mAccountsAdapter.getSelectedAccountId();
|
||||
}
|
||||
|
||||
private static TextView newSectionView(final Context context, final int titleRes) {
|
||||
|
@ -355,19 +345,27 @@ public class AccountsDashboardFragment extends BaseSupportListFragment implement
|
|||
return textView;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
final Account account = mAccountsAdapter.getSelectedAccount();
|
||||
if (account == null) return;
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put(Accounts.IS_ACTIVATED, isChecked);
|
||||
final String where = Accounts.ACCOUNT_ID + " = " + account.account_id;
|
||||
mResolver.update(Accounts.CONTENT_URI, values, where, null);
|
||||
}
|
||||
|
||||
|
||||
private static final class AccountOptionsAdapter extends OptionItemsAdapter {
|
||||
|
||||
private static final ArrayList<OptionItem> sOptions = new ArrayList<>();
|
||||
|
||||
static {
|
||||
sOptions.add(new OptionItem(R.string.view_user_profile, R.drawable.ic_action_profile, MENU_VIEW_PROFILE));
|
||||
sOptions.add(new OptionItem(R.string.profile, R.drawable.ic_action_profile, MENU_VIEW_PROFILE));
|
||||
sOptions.add(new OptionItem(android.R.string.search_go, R.drawable.ic_action_search, MENU_SEARCH));
|
||||
sOptions.add(new OptionItem(R.string.statuses, R.drawable.ic_action_quote, MENU_STATUSES));
|
||||
sOptions.add(new OptionItem(R.string.favorites, R.drawable.ic_action_star, MENU_FAVORITES));
|
||||
sOptions.add(new OptionItem(R.string.users_lists, R.drawable.ic_action_list, MENU_LISTS));
|
||||
sOptions.add(new OptionItem(R.string.lists_following_me, R.drawable.ic_action_list,
|
||||
MENU_LIST_MEMBERSHIPS));
|
||||
sOptions.add(new OptionItem(R.string.lists, R.drawable.ic_action_list, MENU_LISTS));
|
||||
}
|
||||
|
||||
public AccountOptionsAdapter(final Context context) {
|
||||
|
@ -390,64 +388,83 @@ public class AccountsDashboardFragment extends BaseSupportListFragment implement
|
|||
|
||||
}
|
||||
|
||||
private static class DrawerAccountsAdapter extends SimpleCursorAdapter implements Constants,
|
||||
OnCheckedChangeListener {
|
||||
static class AccountProfileImageViewHolder extends ViewHolder implements OnClickListener {
|
||||
|
||||
private final AccountSelectorAdapter adapter;
|
||||
private final ImageView icon;
|
||||
|
||||
public AccountProfileImageViewHolder(AccountSelectorAdapter adapter, View itemView) {
|
||||
super(itemView);
|
||||
this.adapter = adapter;
|
||||
itemView.setOnClickListener(this);
|
||||
icon = (ImageView) itemView.findViewById(android.R.id.icon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
adapter.dispatchItemSelected(getPosition());
|
||||
}
|
||||
}
|
||||
|
||||
private static class AccountSelectorAdapter extends Adapter<AccountProfileImageViewHolder> {
|
||||
|
||||
private final LayoutInflater mInflater;
|
||||
private final ImageLoaderWrapper mImageLoader;
|
||||
private final int mActivatedColor;
|
||||
private final AccountsDashboardFragment mFragment;
|
||||
private Cursor mCursor;
|
||||
private Indices mIndices;
|
||||
private long mSelectedAccountId;
|
||||
|
||||
private Account.Indices mIndices;
|
||||
private long mSelectedAccountId, mDefaultAccountId;
|
||||
|
||||
private OnAccountActivateStateChangeListener mOnAccountActivateStateChangeListener;
|
||||
|
||||
public DrawerAccountsAdapter(final Context context) {
|
||||
super(context, R.layout.list_item_drawer_account, null, new String[0], new int[0], 0);
|
||||
final TwidereApplication app = TwidereApplication.getInstance(context);
|
||||
mImageLoader = app.getImageLoaderWrapper();
|
||||
mActivatedColor = ThemeUtils.getUserAccentColor(context);
|
||||
AccountSelectorAdapter(Context context, AccountsDashboardFragment fragment) {
|
||||
mInflater = LayoutInflater.from(context);
|
||||
mImageLoader = TwidereApplication.getInstance(context).getImageLoaderWrapper();
|
||||
mFragment = fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bindView(@NonNull final View view, final Context context, @NonNull final Cursor cursor) {
|
||||
super.bindView(view, context, cursor);
|
||||
final CompoundButton toggle = (CompoundButton) view.findViewById(R.id.toggle);
|
||||
final TextView name = (TextView) view.findViewById(R.id.name);
|
||||
final TextView screenNameView = (TextView) view.findViewById(R.id.screen_name);
|
||||
final TextView defaultIndicatorView = (TextView) view.findViewById(R.id.default_indicator);
|
||||
final ImageView profileImageView = (ImageView) view.findViewById(R.id.profile_image);
|
||||
final Account account = new Account(cursor, mIndices);
|
||||
name.setText(account.name);
|
||||
screenNameView.setText(String.format("@%s", account.screen_name));
|
||||
defaultIndicatorView.setVisibility(account.account_id == mDefaultAccountId ? View.VISIBLE : View.GONE);
|
||||
mImageLoader.displayProfileImage(profileImageView, account.profile_image_url);
|
||||
toggle.setChecked(account.is_activated);
|
||||
toggle.setTag(account);
|
||||
toggle.setOnCheckedChangeListener(this);
|
||||
view.setActivated(account.account_id == mSelectedAccountId);
|
||||
final IColorLabelView colorLabelView = (IColorLabelView) view;
|
||||
colorLabelView.drawStart(account.account_id == mSelectedAccountId ? mActivatedColor : 0);
|
||||
colorLabelView.drawEnd(account.color);
|
||||
}
|
||||
|
||||
public long getDefaultAccountId() {
|
||||
return mDefaultAccountId;
|
||||
public AccountProfileImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
final View view = mInflater.inflate(R.layout.adapter_item_compose_account, parent, false);
|
||||
return new AccountProfileImageViewHolder(this, view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Account getItem(final int position) {
|
||||
final Cursor c = getCursor();
|
||||
if (c == null || c.isClosed() || !c.moveToPosition(position)) return null;
|
||||
return new Account(c, mIndices);
|
||||
public void onBindViewHolder(AccountProfileImageViewHolder holder, int position) {
|
||||
final Cursor c = mCursor;
|
||||
c.moveToPosition(position);
|
||||
if (c.getLong(mIndices.account_id) == mSelectedAccountId) {
|
||||
c.moveToNext();
|
||||
}
|
||||
mImageLoader.displayProfileImage(holder.icon, c.getString(mIndices.profile_image_url));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (mCursor == null) return 0;
|
||||
return Math.max(mCursor.getCount() - 1, 0);
|
||||
}
|
||||
|
||||
public void changeCursor(Cursor cursor) {
|
||||
mCursor = cursor;
|
||||
if (cursor != null) {
|
||||
mIndices = new Indices(cursor);
|
||||
}
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public void setSelectedAccountId(long accountId) {
|
||||
mSelectedAccountId = accountId;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public Account getSelectedAccount() {
|
||||
final Cursor c = getCursor();
|
||||
if (c == null || c.isClosed() || !c.moveToFirst() || mIndices == null) return null;
|
||||
while (!c.isAfterLast()) {
|
||||
if (mSelectedAccountId == c.getLong(mIndices.account_id))
|
||||
return new Account(c, mIndices);
|
||||
c.moveToNext();
|
||||
final Cursor c = mCursor;
|
||||
final Indices i = mIndices;
|
||||
if (c != null && i != null && c.moveToFirst()) {
|
||||
while (!c.isAfterLast()) {
|
||||
if (c.getLong(mIndices.account_id) == mSelectedAccountId)
|
||||
return new Account(c, mIndices);
|
||||
c.moveToNext();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@ -456,70 +473,18 @@ public class AccountsDashboardFragment extends BaseSupportListFragment implement
|
|||
return mSelectedAccountId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled(final int position) {
|
||||
final Cursor c = getCursor();
|
||||
if (c == null || c.isClosed() || !c.moveToPosition(position)) return false;
|
||||
return c.getLong(mIndices.account_id) != mSelectedAccountId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCheckedChanged(final CompoundButton buttonView, final boolean isChecked) {
|
||||
final Account account = (Account) buttonView.getTag();
|
||||
if (mOnAccountActivateStateChangeListener != null) {
|
||||
mOnAccountActivateStateChangeListener.onAccountActivateStateChanged(account, isChecked);
|
||||
private void dispatchItemSelected(int position) {
|
||||
final Cursor c = mCursor;
|
||||
c.moveToPosition(position);
|
||||
if (c.getLong(mIndices.account_id) != mSelectedAccountId || c.moveToNext()) {
|
||||
mFragment.onAccountSelected(new Account(c, mIndices));
|
||||
}
|
||||
}
|
||||
|
||||
public void setDefaultAccountId(final long account_id) {
|
||||
if (mDefaultAccountId == account_id) return;
|
||||
mDefaultAccountId = account_id;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public void setOnAccountActivateStateChangeListener(final OnAccountActivateStateChangeListener listener) {
|
||||
mOnAccountActivateStateChangeListener = listener;
|
||||
}
|
||||
|
||||
public void setSelectedAccountId(final long account_id) {
|
||||
if (mSelectedAccountId == account_id) return;
|
||||
mSelectedAccountId = account_id;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Cursor swapCursor(final Cursor c) {
|
||||
final Cursor old = super.swapCursor(c);
|
||||
mIndices = c != null ? new Account.Indices(c) : null;
|
||||
return old;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class AccountProfileImageViewHolder extends ViewHolder {
|
||||
|
||||
public AccountProfileImageViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
}
|
||||
}
|
||||
|
||||
private static class DrawerAccountsAdapter2 extends Adapter<AccountProfileImageViewHolder> {
|
||||
|
||||
|
||||
@Override
|
||||
public AccountProfileImageViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(AccountProfileImageViewHolder accountProfileImageViewHolder, int i) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return 0;
|
||||
}
|
||||
private void onAccountSelected(Account account) {
|
||||
mAccountsAdapter.setSelectedAccountId(account.account_id);
|
||||
updateAccountOptionsSeparatorLabel();
|
||||
}
|
||||
|
||||
private static class OptionItem {
|
||||
|
@ -583,8 +548,4 @@ public class AccountsDashboardFragment extends BaseSupportListFragment implement
|
|||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
interface OnAccountActivateStateChangeListener {
|
||||
void onAccountActivateStateChanged(Account account, boolean activated);
|
||||
}
|
||||
}
|
|
@ -42,7 +42,6 @@ import org.mariotaku.twidere.adapter.iface.IBaseCardAdapter.MenuButtonClickListe
|
|||
import org.mariotaku.twidere.adapter.iface.IStatusesListAdapter;
|
||||
import org.mariotaku.twidere.model.Account;
|
||||
import org.mariotaku.twidere.model.Account.AccountWithCredentials;
|
||||
import org.mariotaku.twidere.model.Panes;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.task.AsyncTask;
|
||||
import org.mariotaku.twidere.util.AsyncTaskManager;
|
||||
|
@ -71,8 +70,7 @@ import static org.mariotaku.twidere.util.Utils.showOkMessage;
|
|||
import static org.mariotaku.twidere.util.Utils.startStatusShareChooser;
|
||||
|
||||
abstract class BaseStatusesListFragment<Data> extends BasePullToRefreshListFragment implements LoaderCallbacks<Data>,
|
||||
OnItemLongClickListener, OnMenuItemClickListener, Panes.Left, MultiSelectManager.Callback,
|
||||
MenuButtonClickListener {
|
||||
OnItemLongClickListener, OnMenuItemClickListener, MultiSelectManager.Callback, MenuButtonClickListener {
|
||||
|
||||
private AsyncTaskManager mAsyncTaskManager;
|
||||
private SharedPreferences mPreferences;
|
||||
|
|
|
@ -19,15 +19,6 @@
|
|||
|
||||
package org.mariotaku.twidere.fragment.support;
|
||||
|
||||
import static org.mariotaku.twidere.util.Utils.cancelRetweet;
|
||||
import static org.mariotaku.twidere.util.Utils.clearListViewChoices;
|
||||
import static org.mariotaku.twidere.util.Utils.configBaseCardAdapter;
|
||||
import static org.mariotaku.twidere.util.Utils.isMyRetweet;
|
||||
import static org.mariotaku.twidere.util.Utils.openStatus;
|
||||
import static org.mariotaku.twidere.util.Utils.setMenuForStatus;
|
||||
import static org.mariotaku.twidere.util.Utils.showOkMessage;
|
||||
import static org.mariotaku.twidere.util.Utils.startStatusShareChooser;
|
||||
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
@ -51,7 +42,6 @@ import org.mariotaku.menucomponent.widget.PopupMenu;
|
|||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.adapter.iface.IBaseCardAdapter.MenuButtonClickListener;
|
||||
import org.mariotaku.twidere.adapter.iface.IStatusesListAdapter;
|
||||
import org.mariotaku.twidere.model.Panes;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
import org.mariotaku.twidere.task.AsyncTask;
|
||||
import org.mariotaku.twidere.util.AsyncTaskManager;
|
||||
|
@ -71,508 +61,518 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.mariotaku.twidere.util.Utils.cancelRetweet;
|
||||
import static org.mariotaku.twidere.util.Utils.clearListViewChoices;
|
||||
import static org.mariotaku.twidere.util.Utils.configBaseCardAdapter;
|
||||
import static org.mariotaku.twidere.util.Utils.isMyRetweet;
|
||||
import static org.mariotaku.twidere.util.Utils.openStatus;
|
||||
import static org.mariotaku.twidere.util.Utils.setMenuForStatus;
|
||||
import static org.mariotaku.twidere.util.Utils.showOkMessage;
|
||||
import static org.mariotaku.twidere.util.Utils.startStatusShareChooser;
|
||||
|
||||
abstract class BaseStatusesStaggeredGridFragment<Data> extends BasePullToRefreshStaggeredGridFragment implements
|
||||
LoaderCallbacks<Data>, OnItemLongClickListener, OnMenuItemClickListener, Panes.Left,
|
||||
MultiSelectManager.Callback, MenuButtonClickListener {
|
||||
LoaderCallbacks<Data>, OnItemLongClickListener, OnMenuItemClickListener,
|
||||
MultiSelectManager.Callback, MenuButtonClickListener {
|
||||
|
||||
private AsyncTaskManager mAsyncTaskManager;
|
||||
private SharedPreferences mPreferences;
|
||||
private AsyncTaskManager mAsyncTaskManager;
|
||||
private SharedPreferences mPreferences;
|
||||
|
||||
private StaggeredGridView mListView;
|
||||
private IStatusesListAdapter<Data> mAdapter;
|
||||
private PopupMenu mPopupMenu;
|
||||
private StaggeredGridView mListView;
|
||||
private IStatusesListAdapter<Data> mAdapter;
|
||||
private PopupMenu mPopupMenu;
|
||||
|
||||
private Data mData;
|
||||
private ParcelableStatus mSelectedStatus;
|
||||
private Data mData;
|
||||
private ParcelableStatus mSelectedStatus;
|
||||
|
||||
private boolean mLoadMoreAutomatically;
|
||||
private int mListScrollOffset;
|
||||
private boolean mLoadMoreAutomatically;
|
||||
private int mListScrollOffset;
|
||||
|
||||
private MultiSelectManager mMultiSelectManager;
|
||||
private PositionManager mPositionManager;
|
||||
private MultiSelectManager mMultiSelectManager;
|
||||
private PositionManager mPositionManager;
|
||||
|
||||
private int mFirstVisibleItem;
|
||||
private int mSelectedPosition;
|
||||
private int mFirstVisibleItem;
|
||||
private int mSelectedPosition;
|
||||
|
||||
private final Map<Long, Set<Long>> mUnreadCountsToRemove = Collections
|
||||
.synchronizedMap(new HashMap<Long, Set<Long>>());
|
||||
private final List<Integer> mReadPositions = new NoDuplicatesCopyOnWriteArrayList<Integer>();
|
||||
private final Map<Long, Set<Long>> mUnreadCountsToRemove = Collections
|
||||
.synchronizedMap(new HashMap<Long, Set<Long>>());
|
||||
private final List<Integer> mReadPositions = new NoDuplicatesCopyOnWriteArrayList<Integer>();
|
||||
|
||||
private RemoveUnreadCountsTask<Data> mRemoveUnreadCountsTask;
|
||||
private RemoveUnreadCountsTask<Data> mRemoveUnreadCountsTask;
|
||||
|
||||
public AsyncTaskManager getAsyncTaskManager() {
|
||||
return mAsyncTaskManager;
|
||||
}
|
||||
public AsyncTaskManager getAsyncTaskManager() {
|
||||
return mAsyncTaskManager;
|
||||
}
|
||||
|
||||
public final Data getData() {
|
||||
return mData;
|
||||
}
|
||||
public final Data getData() {
|
||||
return mData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IStatusesListAdapter<Data> getListAdapter() {
|
||||
return mAdapter;
|
||||
}
|
||||
@Override
|
||||
public IStatusesListAdapter<Data> getListAdapter() {
|
||||
return mAdapter;
|
||||
}
|
||||
|
||||
public ParcelableStatus getSelectedStatus() {
|
||||
return mSelectedStatus;
|
||||
}
|
||||
public ParcelableStatus getSelectedStatus() {
|
||||
return mSelectedStatus;
|
||||
}
|
||||
|
||||
public SharedPreferences getSharedPreferences() {
|
||||
return mPreferences;
|
||||
}
|
||||
public SharedPreferences getSharedPreferences() {
|
||||
return mPreferences;
|
||||
}
|
||||
|
||||
public abstract int getStatuses(long[] account_ids, long[] max_ids, long[] since_ids);
|
||||
public abstract int getStatuses(long[] account_ids, long[] max_ids, long[] since_ids);
|
||||
|
||||
public final Map<Long, Set<Long>> getUnreadCountsToRemove() {
|
||||
return mUnreadCountsToRemove;
|
||||
}
|
||||
public final Map<Long, Set<Long>> getUnreadCountsToRemove() {
|
||||
return mUnreadCountsToRemove;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(final Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
mAsyncTaskManager = getAsyncTaskManager();
|
||||
mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
|
||||
mPositionManager = new PositionManager(getActivity());
|
||||
mMultiSelectManager = getMultiSelectManager();
|
||||
mListView = getListView();
|
||||
mAdapter = newAdapterInstance();
|
||||
mAdapter.setMenuButtonClickListener(this);
|
||||
setListAdapter(null);
|
||||
setListHeaderFooters(mListView);
|
||||
setListAdapter(mAdapter);
|
||||
mListView.setSelector(android.R.color.transparent);
|
||||
mListView.setOnItemLongClickListener(this);
|
||||
setListShown(false);
|
||||
getLoaderManager().initLoader(0, getArguments(), this);
|
||||
}
|
||||
@Override
|
||||
public void onActivityCreated(final Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
mAsyncTaskManager = getAsyncTaskManager();
|
||||
mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
|
||||
mPositionManager = new PositionManager(getActivity());
|
||||
mMultiSelectManager = getMultiSelectManager();
|
||||
mListView = getListView();
|
||||
mAdapter = newAdapterInstance();
|
||||
mAdapter.setMenuButtonClickListener(this);
|
||||
setListAdapter(null);
|
||||
setListHeaderFooters(mListView);
|
||||
setListAdapter(mAdapter);
|
||||
mListView.setSelector(android.R.color.transparent);
|
||||
mListView.setOnItemLongClickListener(this);
|
||||
setListShown(false);
|
||||
getLoaderManager().initLoader(0, getArguments(), this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public abstract Loader<Data> onCreateLoader(int id, Bundle args);
|
||||
@Override
|
||||
public abstract Loader<Data> onCreateLoader(int id, Bundle args);
|
||||
|
||||
@Override
|
||||
public boolean onItemLongClick(final AdapterView<?> parent, final View view, final int position, final long id) {
|
||||
final Object tag = view.getTag();
|
||||
if (tag instanceof StatusListViewHolder) {
|
||||
final StatusListViewHolder holder = (StatusListViewHolder) tag;
|
||||
final ParcelableStatus status = mAdapter.getStatus(position - mListView.getHeaderViewsCount());
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
if (twitter != null) {
|
||||
TwitterWrapper.removeUnreadCounts(getActivity(), getTabPosition(), status.account_id, status.id);
|
||||
}
|
||||
if (holder.show_as_gap) return false;
|
||||
if (mPreferences.getBoolean(KEY_LONG_CLICK_TO_OPEN_MENU, false)) {
|
||||
openMenu(holder.content.getFakeOverflowButton(), status, position);
|
||||
} else {
|
||||
setItemSelected(status, position, !mMultiSelectManager.isSelected(status));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
public boolean onItemLongClick(final AdapterView<?> parent, final View view, final int position, final long id) {
|
||||
final Object tag = view.getTag();
|
||||
if (tag instanceof StatusListViewHolder) {
|
||||
final StatusListViewHolder holder = (StatusListViewHolder) tag;
|
||||
final ParcelableStatus status = mAdapter.getStatus(position - mListView.getHeaderViewsCount());
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
if (twitter != null) {
|
||||
TwitterWrapper.removeUnreadCounts(getActivity(), getTabPosition(), status.account_id, status.id);
|
||||
}
|
||||
if (holder.show_as_gap) return false;
|
||||
if (mPreferences.getBoolean(KEY_LONG_CLICK_TO_OPEN_MENU, false)) {
|
||||
openMenu(holder.content.getFakeOverflowButton(), status, position);
|
||||
} else {
|
||||
setItemSelected(status, position, !mMultiSelectManager.isSelected(status));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemsCleared() {
|
||||
clearListViewChoices(mListView);
|
||||
}
|
||||
@Override
|
||||
public void onItemsCleared() {
|
||||
clearListViewChoices(mListView);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemSelected(final Object item) {
|
||||
mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
|
||||
}
|
||||
@Override
|
||||
public void onItemSelected(final Object item) {
|
||||
mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onItemUnselected(final Object item) {
|
||||
}
|
||||
@Override
|
||||
public void onItemUnselected(final Object item) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onListItemClick(final StaggeredGridView l, final View v, final int position, final long id) {
|
||||
final Object tag = v.getTag();
|
||||
if (tag instanceof StatusListViewHolder) {
|
||||
final int pos = position - l.getHeaderViewsCount();
|
||||
final ParcelableStatus status = mAdapter.getStatus(pos);
|
||||
if (status == null) return;
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
if (twitter != null) {
|
||||
TwitterWrapper.removeUnreadCounts(getActivity(), getTabPosition(), status.account_id, status.id);
|
||||
}
|
||||
if (((StatusListViewHolder) tag).show_as_gap) {
|
||||
final long since_id = position + 1 < mAdapter.getStatusCount() ? mAdapter.getStatus(pos + 1).id : -1;
|
||||
getStatuses(new long[] { status.account_id }, new long[] { status.id }, new long[] { since_id });
|
||||
mListView.setItemChecked(position, false);
|
||||
} else {
|
||||
if (mMultiSelectManager.isActive()) {
|
||||
setItemSelected(status, position, !mMultiSelectManager.isSelected(status));
|
||||
return;
|
||||
}
|
||||
openStatus(getActivity(), status);
|
||||
}
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void onListItemClick(final StaggeredGridView l, final View v, final int position, final long id) {
|
||||
final Object tag = v.getTag();
|
||||
if (tag instanceof StatusListViewHolder) {
|
||||
final int pos = position - l.getHeaderViewsCount();
|
||||
final ParcelableStatus status = mAdapter.getStatus(pos);
|
||||
if (status == null) return;
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
if (twitter != null) {
|
||||
TwitterWrapper.removeUnreadCounts(getActivity(), getTabPosition(), status.account_id, status.id);
|
||||
}
|
||||
if (((StatusListViewHolder) tag).show_as_gap) {
|
||||
final long since_id = position + 1 < mAdapter.getStatusCount() ? mAdapter.getStatus(pos + 1).id : -1;
|
||||
getStatuses(new long[]{status.account_id}, new long[]{status.id}, new long[]{since_id});
|
||||
mListView.setItemChecked(position, false);
|
||||
} else {
|
||||
if (mMultiSelectManager.isActive()) {
|
||||
setItemSelected(status, position, !mMultiSelectManager.isSelected(status));
|
||||
return;
|
||||
}
|
||||
openStatus(getActivity(), status);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void onLoaderReset(final Loader<Data> loader) {
|
||||
mAdapter.setData(mData = null);
|
||||
}
|
||||
@Override
|
||||
public final void onLoaderReset(final Loader<Data> loader) {
|
||||
mAdapter.setData(mData = null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void onLoadFinished(final Loader<Data> loader, final Data data) {
|
||||
if (getActivity() == null || getView() == null) return;
|
||||
setListShown(true);
|
||||
setRefreshComplete();
|
||||
setProgressBarIndeterminateVisibility(false);
|
||||
setData(data);
|
||||
mFirstVisibleItem = -1;
|
||||
mReadPositions.clear();
|
||||
final int listVisiblePosition, savedChildIndex;
|
||||
final boolean rememberPosition = mPreferences.getBoolean(KEY_REMEMBER_POSITION, true);
|
||||
if (rememberPosition) {
|
||||
listVisiblePosition = mListView.getLastVisiblePosition();
|
||||
final int childCount = mListView.getChildCount();
|
||||
savedChildIndex = childCount - 1;
|
||||
if (childCount > 0) {
|
||||
final View lastChild = mListView.getChildAt(savedChildIndex);
|
||||
mListScrollOffset = lastChild != null ? lastChild.getTop() : 0;
|
||||
}
|
||||
} else {
|
||||
listVisiblePosition = mListView.getFirstVisiblePosition();
|
||||
savedChildIndex = 0;
|
||||
if (mListView.getChildCount() > 0) {
|
||||
final View firstChild = mListView.getChildAt(savedChildIndex);
|
||||
mListScrollOffset = firstChild != null ? firstChild.getTop() : 0;
|
||||
}
|
||||
}
|
||||
final long lastViewedId = mAdapter.getStatusId(listVisiblePosition);
|
||||
mAdapter.setData(data);
|
||||
mAdapter.setShowAccountColor(shouldShowAccountColor());
|
||||
final int currFirstVisiblePosition = mListView.getFirstVisiblePosition();
|
||||
final long currViewedId = mAdapter.getStatusId(currFirstVisiblePosition);
|
||||
final long statusId;
|
||||
if (lastViewedId <= 0) {
|
||||
if (!rememberPosition) return;
|
||||
statusId = mPositionManager.getPosition(getPositionKey());
|
||||
} else if ((listVisiblePosition > 0 || rememberPosition) && currViewedId > 0 && lastViewedId != currViewedId) {
|
||||
statusId = lastViewedId;
|
||||
} else {
|
||||
if (listVisiblePosition == 0 && mAdapter.getStatusId(0) != lastViewedId) {
|
||||
mAdapter.setMaxAnimationPosition(mListView.getLastVisiblePosition());
|
||||
}
|
||||
return;
|
||||
}
|
||||
final int position = mAdapter.findPositionByStatusId(statusId);
|
||||
if (position > -1 && position < mListView.getCount()) {
|
||||
mAdapter.setMaxAnimationPosition(mListView.getLastVisiblePosition());
|
||||
// mListView.setSelectionFromTop(position, mListScrollOffset);
|
||||
mListView.setSelection(position);
|
||||
mListScrollOffset = 0;
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public final void onLoadFinished(final Loader<Data> loader, final Data data) {
|
||||
if (getActivity() == null || getView() == null) return;
|
||||
setListShown(true);
|
||||
setRefreshComplete();
|
||||
setProgressBarIndeterminateVisibility(false);
|
||||
setData(data);
|
||||
mFirstVisibleItem = -1;
|
||||
mReadPositions.clear();
|
||||
final int listVisiblePosition, savedChildIndex;
|
||||
final boolean rememberPosition = mPreferences.getBoolean(KEY_REMEMBER_POSITION, true);
|
||||
if (rememberPosition) {
|
||||
listVisiblePosition = mListView.getLastVisiblePosition();
|
||||
final int childCount = mListView.getChildCount();
|
||||
savedChildIndex = childCount - 1;
|
||||
if (childCount > 0) {
|
||||
final View lastChild = mListView.getChildAt(savedChildIndex);
|
||||
mListScrollOffset = lastChild != null ? lastChild.getTop() : 0;
|
||||
}
|
||||
} else {
|
||||
listVisiblePosition = mListView.getFirstVisiblePosition();
|
||||
savedChildIndex = 0;
|
||||
if (mListView.getChildCount() > 0) {
|
||||
final View firstChild = mListView.getChildAt(savedChildIndex);
|
||||
mListScrollOffset = firstChild != null ? firstChild.getTop() : 0;
|
||||
}
|
||||
}
|
||||
final long lastViewedId = mAdapter.getStatusId(listVisiblePosition);
|
||||
mAdapter.setData(data);
|
||||
mAdapter.setShowAccountColor(shouldShowAccountColor());
|
||||
final int currFirstVisiblePosition = mListView.getFirstVisiblePosition();
|
||||
final long currViewedId = mAdapter.getStatusId(currFirstVisiblePosition);
|
||||
final long statusId;
|
||||
if (lastViewedId <= 0) {
|
||||
if (!rememberPosition) return;
|
||||
statusId = mPositionManager.getPosition(getPositionKey());
|
||||
} else if ((listVisiblePosition > 0 || rememberPosition) && currViewedId > 0 && lastViewedId != currViewedId) {
|
||||
statusId = lastViewedId;
|
||||
} else {
|
||||
if (listVisiblePosition == 0 && mAdapter.getStatusId(0) != lastViewedId) {
|
||||
mAdapter.setMaxAnimationPosition(mListView.getLastVisiblePosition());
|
||||
}
|
||||
return;
|
||||
}
|
||||
final int position = mAdapter.findPositionByStatusId(statusId);
|
||||
if (position > -1 && position < mListView.getCount()) {
|
||||
mAdapter.setMaxAnimationPosition(mListView.getLastVisiblePosition());
|
||||
// mListView.setSelectionFromTop(position, mListScrollOffset);
|
||||
mListView.setSelection(position);
|
||||
mListScrollOffset = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMenuButtonClick(final View button, final int position, final long id) {
|
||||
if (mMultiSelectManager.isActive()) return;
|
||||
final ParcelableStatus status = mAdapter.getStatus(position);
|
||||
if (status == null) return;
|
||||
openMenu(button, status, position);
|
||||
}
|
||||
@Override
|
||||
public void onMenuButtonClick(final View button, final int position, final long id) {
|
||||
if (mMultiSelectManager.isActive()) return;
|
||||
final ParcelableStatus status = mAdapter.getStatus(position);
|
||||
if (status == null) return;
|
||||
openMenu(button, status, position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean onMenuItemClick(final MenuItem item) {
|
||||
final ParcelableStatus status = mSelectedStatus;
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
if (status == null || twitter == null) return false;
|
||||
switch (item.getItemId()) {
|
||||
case MENU_VIEW: {
|
||||
openStatus(getActivity(), status);
|
||||
break;
|
||||
}
|
||||
case MENU_SHARE: {
|
||||
startStatusShareChooser(getActivity(), status);
|
||||
break;
|
||||
}
|
||||
case MENU_COPY: {
|
||||
if (ClipboardUtils.setText(getActivity(), status.text_plain)) {
|
||||
showOkMessage(getActivity(), R.string.text_copied, false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MENU_RETWEET: {
|
||||
if (isMyRetweet(status)) {
|
||||
cancelRetweet(twitter, status);
|
||||
} else {
|
||||
final long id_to_retweet = status.retweet_id > 0 ? status.retweet_id : status.id;
|
||||
twitter.retweetStatus(status.account_id, id_to_retweet);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MENU_QUOTE: {
|
||||
final Intent intent = new Intent(INTENT_ACTION_QUOTE);
|
||||
final Bundle bundle = new Bundle();
|
||||
bundle.putParcelable(EXTRA_STATUS, status);
|
||||
intent.putExtras(bundle);
|
||||
startActivity(intent);
|
||||
break;
|
||||
}
|
||||
case MENU_REPLY: {
|
||||
final Intent intent = new Intent(INTENT_ACTION_REPLY);
|
||||
final Bundle bundle = new Bundle();
|
||||
bundle.putParcelable(EXTRA_STATUS, status);
|
||||
intent.putExtras(bundle);
|
||||
startActivity(intent);
|
||||
break;
|
||||
}
|
||||
case MENU_FAVORITE: {
|
||||
if (status.is_favorite) {
|
||||
twitter.destroyFavoriteAsync(status.account_id, status.id);
|
||||
} else {
|
||||
twitter.createFavoriteAsync(status.account_id, status.id);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MENU_DELETE: {
|
||||
twitter.destroyStatusAsync(status.account_id, status.id);
|
||||
break;
|
||||
}
|
||||
case MENU_ADD_TO_FILTER: {
|
||||
AddStatusFilterDialogFragment.show(getFragmentManager(), status);
|
||||
break;
|
||||
}
|
||||
case MENU_MULTI_SELECT: {
|
||||
final boolean isSelected = !mMultiSelectManager.isSelected(status);
|
||||
setItemSelected(status, mSelectedPosition, isSelected);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
if (item.getIntent() != null) {
|
||||
try {
|
||||
startActivity(item.getIntent());
|
||||
} catch (final ActivityNotFoundException e) {
|
||||
Log.w(LOGTAG, e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
public final boolean onMenuItemClick(final MenuItem item) {
|
||||
final ParcelableStatus status = mSelectedStatus;
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
if (status == null || twitter == null) return false;
|
||||
switch (item.getItemId()) {
|
||||
case MENU_VIEW: {
|
||||
openStatus(getActivity(), status);
|
||||
break;
|
||||
}
|
||||
case MENU_SHARE: {
|
||||
startStatusShareChooser(getActivity(), status);
|
||||
break;
|
||||
}
|
||||
case MENU_COPY: {
|
||||
if (ClipboardUtils.setText(getActivity(), status.text_plain)) {
|
||||
showOkMessage(getActivity(), R.string.text_copied, false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MENU_RETWEET: {
|
||||
if (isMyRetweet(status)) {
|
||||
cancelRetweet(twitter, status);
|
||||
} else {
|
||||
final long id_to_retweet = status.retweet_id > 0 ? status.retweet_id : status.id;
|
||||
twitter.retweetStatus(status.account_id, id_to_retweet);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MENU_QUOTE: {
|
||||
final Intent intent = new Intent(INTENT_ACTION_QUOTE);
|
||||
final Bundle bundle = new Bundle();
|
||||
bundle.putParcelable(EXTRA_STATUS, status);
|
||||
intent.putExtras(bundle);
|
||||
startActivity(intent);
|
||||
break;
|
||||
}
|
||||
case MENU_REPLY: {
|
||||
final Intent intent = new Intent(INTENT_ACTION_REPLY);
|
||||
final Bundle bundle = new Bundle();
|
||||
bundle.putParcelable(EXTRA_STATUS, status);
|
||||
intent.putExtras(bundle);
|
||||
startActivity(intent);
|
||||
break;
|
||||
}
|
||||
case MENU_FAVORITE: {
|
||||
if (status.is_favorite) {
|
||||
twitter.destroyFavoriteAsync(status.account_id, status.id);
|
||||
} else {
|
||||
twitter.createFavoriteAsync(status.account_id, status.id);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MENU_DELETE: {
|
||||
twitter.destroyStatusAsync(status.account_id, status.id);
|
||||
break;
|
||||
}
|
||||
case MENU_ADD_TO_FILTER: {
|
||||
AddStatusFilterDialogFragment.show(getFragmentManager(), status);
|
||||
break;
|
||||
}
|
||||
case MENU_MULTI_SELECT: {
|
||||
final boolean isSelected = !mMultiSelectManager.isSelected(status);
|
||||
setItemSelected(status, mSelectedPosition, isSelected);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
if (item.getIntent() != null) {
|
||||
try {
|
||||
startActivity(item.getIntent());
|
||||
} catch (final ActivityNotFoundException e) {
|
||||
Log.w(LOGTAG, e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRefreshFromEnd() {
|
||||
if (mLoadMoreAutomatically) return;
|
||||
loadMoreStatuses();
|
||||
}
|
||||
@Override
|
||||
public void onRefreshFromEnd() {
|
||||
if (mLoadMoreAutomatically) return;
|
||||
loadMoreStatuses();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
mListView.setFastScrollEnabled(mPreferences.getBoolean(KEY_FAST_SCROLL_THUMB, false));
|
||||
configBaseCardAdapter(getActivity(), mAdapter);
|
||||
final boolean display_image_preview = mPreferences.getBoolean(KEY_DISPLAY_IMAGE_PREVIEW, false);
|
||||
final boolean display_sensitive_contents = mPreferences.getBoolean(KEY_DISPLAY_SENSITIVE_CONTENTS, false);
|
||||
final boolean indicate_my_status = mPreferences.getBoolean(KEY_INDICATE_MY_STATUS, true);
|
||||
mAdapter.setDisplayImagePreview(display_image_preview);
|
||||
mAdapter.setDisplaySensitiveContents(display_sensitive_contents);
|
||||
mAdapter.setIndicateMyStatusDisabled(isMyTimeline() || !indicate_my_status);
|
||||
mLoadMoreAutomatically = mPreferences.getBoolean(KEY_LOAD_MORE_AUTOMATICALLY, false);
|
||||
}
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
mListView.setFastScrollEnabled(mPreferences.getBoolean(KEY_FAST_SCROLL_THUMB, false));
|
||||
configBaseCardAdapter(getActivity(), mAdapter);
|
||||
final boolean display_image_preview = mPreferences.getBoolean(KEY_DISPLAY_IMAGE_PREVIEW, false);
|
||||
final boolean display_sensitive_contents = mPreferences.getBoolean(KEY_DISPLAY_SENSITIVE_CONTENTS, false);
|
||||
final boolean indicate_my_status = mPreferences.getBoolean(KEY_INDICATE_MY_STATUS, true);
|
||||
mAdapter.setDisplayImagePreview(display_image_preview);
|
||||
mAdapter.setDisplaySensitiveContents(display_sensitive_contents);
|
||||
mAdapter.setIndicateMyStatusDisabled(isMyTimeline() || !indicate_my_status);
|
||||
mLoadMoreAutomatically = mPreferences.getBoolean(KEY_LOAD_MORE_AUTOMATICALLY, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScroll(final AbsListView view, final int firstVisibleItem, final int visibleItemCount,
|
||||
final int totalItemCount) {
|
||||
super.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount);
|
||||
addReadPosition(firstVisibleItem);
|
||||
}
|
||||
@Override
|
||||
public void onScroll(final AbsListView view, final int firstVisibleItem, final int visibleItemCount,
|
||||
final int totalItemCount) {
|
||||
super.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount);
|
||||
addReadPosition(firstVisibleItem);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScrollStateChanged(final AbsListView view, final int scrollState) {
|
||||
super.onScrollStateChanged(view, scrollState);
|
||||
switch (scrollState) {
|
||||
case SCROLL_STATE_IDLE:
|
||||
for (int i = mListView.getFirstVisiblePosition(), j = mListView.getLastVisiblePosition(); i < j; i++) {
|
||||
mReadPositions.add(i);
|
||||
}
|
||||
removeUnreadCounts();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void onScrollStateChanged(final AbsListView view, final int scrollState) {
|
||||
super.onScrollStateChanged(view, scrollState);
|
||||
switch (scrollState) {
|
||||
case SCROLL_STATE_IDLE:
|
||||
for (int i = mListView.getFirstVisiblePosition(), j = mListView.getLastVisiblePosition(); i < j; i++) {
|
||||
mReadPositions.add(i);
|
||||
}
|
||||
removeUnreadCounts();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
mMultiSelectManager.registerCallback(this);
|
||||
final int choiceMode = mListView.getChoiceMode();
|
||||
if (mMultiSelectManager.isActive()) {
|
||||
if (choiceMode != ListView.CHOICE_MODE_MULTIPLE) {
|
||||
mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
|
||||
}
|
||||
} else {
|
||||
if (choiceMode != ListView.CHOICE_MODE_NONE) {
|
||||
Utils.clearListViewChoices(mListView);
|
||||
}
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
mMultiSelectManager.registerCallback(this);
|
||||
final int choiceMode = mListView.getChoiceMode();
|
||||
if (mMultiSelectManager.isActive()) {
|
||||
if (choiceMode != ListView.CHOICE_MODE_MULTIPLE) {
|
||||
mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
|
||||
}
|
||||
} else {
|
||||
if (choiceMode != ListView.CHOICE_MODE_NONE) {
|
||||
Utils.clearListViewChoices(mListView);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
savePosition();
|
||||
mMultiSelectManager.unregisterCallback(this);
|
||||
if (mPopupMenu != null) {
|
||||
mPopupMenu.dismiss();
|
||||
}
|
||||
super.onStop();
|
||||
}
|
||||
@Override
|
||||
public void onStop() {
|
||||
savePosition();
|
||||
mMultiSelectManager.unregisterCallback(this);
|
||||
if (mPopupMenu != null) {
|
||||
mPopupMenu.dismiss();
|
||||
}
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean scrollToStart() {
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
final int tab_position = getTabPosition();
|
||||
if (twitter != null && tab_position >= 0) {
|
||||
twitter.clearUnreadCountAsync(tab_position);
|
||||
}
|
||||
return super.scrollToStart();
|
||||
}
|
||||
@Override
|
||||
public boolean scrollToStart() {
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
final int tab_position = getTabPosition();
|
||||
if (twitter != null && tab_position >= 0) {
|
||||
twitter.clearUnreadCountAsync(tab_position);
|
||||
}
|
||||
return super.scrollToStart();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUserVisibleHint(final boolean isVisibleToUser) {
|
||||
super.setUserVisibleHint(isVisibleToUser);
|
||||
updateRefreshState();
|
||||
}
|
||||
@Override
|
||||
public void setUserVisibleHint(final boolean isVisibleToUser) {
|
||||
super.setUserVisibleHint(isVisibleToUser);
|
||||
updateRefreshState();
|
||||
}
|
||||
|
||||
protected final int getListScrollOffset() {
|
||||
return mListScrollOffset;
|
||||
}
|
||||
protected final int getListScrollOffset() {
|
||||
return mListScrollOffset;
|
||||
}
|
||||
|
||||
protected abstract long[] getNewestStatusIds();
|
||||
protected abstract long[] getNewestStatusIds();
|
||||
|
||||
protected abstract long[] getOldestStatusIds();
|
||||
protected abstract long[] getOldestStatusIds();
|
||||
|
||||
protected abstract String getPositionKey();
|
||||
protected abstract String getPositionKey();
|
||||
|
||||
protected boolean isMyTimeline() {
|
||||
return false;
|
||||
}
|
||||
protected boolean isMyTimeline() {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected abstract void loadMoreStatuses();
|
||||
protected abstract void loadMoreStatuses();
|
||||
|
||||
protected abstract IStatusesListAdapter<Data> newAdapterInstance();
|
||||
protected abstract IStatusesListAdapter<Data> newAdapterInstance();
|
||||
|
||||
@Override
|
||||
protected void onReachedBottom() {
|
||||
if (!mLoadMoreAutomatically) return;
|
||||
loadMoreStatuses();
|
||||
}
|
||||
@Override
|
||||
protected void onReachedBottom() {
|
||||
if (!mLoadMoreAutomatically) return;
|
||||
loadMoreStatuses();
|
||||
}
|
||||
|
||||
protected void savePosition() {
|
||||
final int first_visible_position = mListView.getFirstVisiblePosition();
|
||||
if (mListView.getChildCount() > 0) {
|
||||
final View first_child = mListView.getChildAt(0);
|
||||
mListScrollOffset = first_child != null ? first_child.getTop() : 0;
|
||||
}
|
||||
final long status_id = mAdapter.getStatusId(first_visible_position);
|
||||
mPositionManager.setPosition(getPositionKey(), status_id);
|
||||
}
|
||||
protected void savePosition() {
|
||||
final int first_visible_position = mListView.getFirstVisiblePosition();
|
||||
if (mListView.getChildCount() > 0) {
|
||||
final View first_child = mListView.getChildAt(0);
|
||||
mListScrollOffset = first_child != null ? first_child.getTop() : 0;
|
||||
}
|
||||
final long status_id = mAdapter.getStatusId(first_visible_position);
|
||||
mPositionManager.setPosition(getPositionKey(), status_id);
|
||||
}
|
||||
|
||||
protected final void setData(final Data data) {
|
||||
mData = data;
|
||||
}
|
||||
protected final void setData(final Data data) {
|
||||
mData = data;
|
||||
}
|
||||
|
||||
protected void setItemSelected(final ParcelableStatus status, final int position, final boolean selected) {
|
||||
if (selected) {
|
||||
mMultiSelectManager.selectItem(status);
|
||||
} else {
|
||||
mMultiSelectManager.unselectItem(status);
|
||||
}
|
||||
if (position >= 0) {
|
||||
mListView.setItemChecked(position, selected);
|
||||
}
|
||||
}
|
||||
protected void setItemSelected(final ParcelableStatus status, final int position, final boolean selected) {
|
||||
if (selected) {
|
||||
mMultiSelectManager.selectItem(status);
|
||||
} else {
|
||||
mMultiSelectManager.unselectItem(status);
|
||||
}
|
||||
if (position >= 0) {
|
||||
mListView.setItemChecked(position, selected);
|
||||
}
|
||||
}
|
||||
|
||||
protected void setListHeaderFooters(final StaggeredGridView list) {
|
||||
protected void setListHeaderFooters(final StaggeredGridView list) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean shouldEnablePullToRefresh() {
|
||||
return true;
|
||||
}
|
||||
protected boolean shouldEnablePullToRefresh() {
|
||||
return true;
|
||||
}
|
||||
|
||||
protected abstract boolean shouldShowAccountColor();
|
||||
protected abstract boolean shouldShowAccountColor();
|
||||
|
||||
protected abstract void updateRefreshState();
|
||||
protected abstract void updateRefreshState();
|
||||
|
||||
private void addReadPosition(final int firstVisibleItem) {
|
||||
if (mFirstVisibleItem != firstVisibleItem) {
|
||||
mReadPositions.add(firstVisibleItem);
|
||||
}
|
||||
mFirstVisibleItem = firstVisibleItem;
|
||||
}
|
||||
private void addReadPosition(final int firstVisibleItem) {
|
||||
if (mFirstVisibleItem != firstVisibleItem) {
|
||||
mReadPositions.add(firstVisibleItem);
|
||||
}
|
||||
mFirstVisibleItem = firstVisibleItem;
|
||||
}
|
||||
|
||||
private void addUnreadCountsToRemove(final long account_id, final long id) {
|
||||
if (mUnreadCountsToRemove.containsKey(account_id)) {
|
||||
final Set<Long> counts = mUnreadCountsToRemove.get(account_id);
|
||||
counts.add(id);
|
||||
} else {
|
||||
final Set<Long> counts = new HashSet<Long>();
|
||||
counts.add(id);
|
||||
mUnreadCountsToRemove.put(account_id, counts);
|
||||
}
|
||||
}
|
||||
private void addUnreadCountsToRemove(final long account_id, final long id) {
|
||||
if (mUnreadCountsToRemove.containsKey(account_id)) {
|
||||
final Set<Long> counts = mUnreadCountsToRemove.get(account_id);
|
||||
counts.add(id);
|
||||
} else {
|
||||
final Set<Long> counts = new HashSet<Long>();
|
||||
counts.add(id);
|
||||
mUnreadCountsToRemove.put(account_id, counts);
|
||||
}
|
||||
}
|
||||
|
||||
private void openMenu(final View view, final ParcelableStatus status, final int position) {
|
||||
mSelectedStatus = status;
|
||||
mSelectedPosition = position;
|
||||
if (view == null || status == null) return;
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
if (twitter != null) {
|
||||
TwitterWrapper.removeUnreadCounts(getActivity(), getTabPosition(), status.account_id, status.id);
|
||||
}
|
||||
if (mPopupMenu != null && mPopupMenu.isShowing()) {
|
||||
mPopupMenu.dismiss();
|
||||
}
|
||||
mPopupMenu = PopupMenu.getInstance(getActivity(), view);
|
||||
mPopupMenu.inflate(R.menu.action_status);
|
||||
final boolean longclickToOpenMenu = mPreferences.getBoolean(KEY_LONG_CLICK_TO_OPEN_MENU, false);
|
||||
final Menu menu = mPopupMenu.getMenu();
|
||||
setMenuForStatus(getActivity(), menu, status);
|
||||
Utils.setMenuItemAvailability(menu, MENU_MULTI_SELECT, longclickToOpenMenu);
|
||||
mPopupMenu.setOnMenuItemClickListener(this);
|
||||
mPopupMenu.show();
|
||||
}
|
||||
private void openMenu(final View view, final ParcelableStatus status, final int position) {
|
||||
mSelectedStatus = status;
|
||||
mSelectedPosition = position;
|
||||
if (view == null || status == null) return;
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
if (twitter != null) {
|
||||
TwitterWrapper.removeUnreadCounts(getActivity(), getTabPosition(), status.account_id, status.id);
|
||||
}
|
||||
if (mPopupMenu != null && mPopupMenu.isShowing()) {
|
||||
mPopupMenu.dismiss();
|
||||
}
|
||||
mPopupMenu = PopupMenu.getInstance(getActivity(), view);
|
||||
mPopupMenu.inflate(R.menu.action_status);
|
||||
final boolean longclickToOpenMenu = mPreferences.getBoolean(KEY_LONG_CLICK_TO_OPEN_MENU, false);
|
||||
final Menu menu = mPopupMenu.getMenu();
|
||||
setMenuForStatus(getActivity(), menu, status);
|
||||
Utils.setMenuItemAvailability(menu, MENU_MULTI_SELECT, longclickToOpenMenu);
|
||||
mPopupMenu.setOnMenuItemClickListener(this);
|
||||
mPopupMenu.show();
|
||||
}
|
||||
|
||||
private void removeUnreadCounts() {
|
||||
if (mRemoveUnreadCountsTask != null && mRemoveUnreadCountsTask.getStatus() == AsyncTask.Status.RUNNING) return;
|
||||
mRemoveUnreadCountsTask = new RemoveUnreadCountsTask<Data>(mReadPositions, this);
|
||||
mRemoveUnreadCountsTask.execute();
|
||||
}
|
||||
private void removeUnreadCounts() {
|
||||
if (mRemoveUnreadCountsTask != null && mRemoveUnreadCountsTask.getStatus() == AsyncTask.Status.RUNNING)
|
||||
return;
|
||||
mRemoveUnreadCountsTask = new RemoveUnreadCountsTask<Data>(mReadPositions, this);
|
||||
mRemoveUnreadCountsTask.execute();
|
||||
}
|
||||
|
||||
static class RemoveUnreadCountsTask<T> extends AsyncTask<Void, Void, Void> {
|
||||
private final List<Integer> read_positions;
|
||||
private final IStatusesListAdapter<T> adapter;
|
||||
private final BaseStatusesStaggeredGridFragment<T> fragment;
|
||||
static class RemoveUnreadCountsTask<T> extends AsyncTask<Void, Void, Void> {
|
||||
private final List<Integer> read_positions;
|
||||
private final IStatusesListAdapter<T> adapter;
|
||||
private final BaseStatusesStaggeredGridFragment<T> fragment;
|
||||
|
||||
RemoveUnreadCountsTask(final List<Integer> read_positions, final BaseStatusesStaggeredGridFragment<T> fragment) {
|
||||
this.read_positions = read_positions;
|
||||
this.fragment = fragment;
|
||||
this.adapter = fragment.getListAdapter();
|
||||
}
|
||||
RemoveUnreadCountsTask(final List<Integer> read_positions, final BaseStatusesStaggeredGridFragment<T> fragment) {
|
||||
this.read_positions = read_positions;
|
||||
this.fragment = fragment;
|
||||
this.adapter = fragment.getListAdapter();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(final Void... params) {
|
||||
for (final int pos : read_positions) {
|
||||
final long id = adapter.getStatusId(pos), account_id = adapter.getAccountId(pos);
|
||||
fragment.addUnreadCountsToRemove(account_id, id);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@Override
|
||||
protected Void doInBackground(final Void... params) {
|
||||
for (final int pos : read_positions) {
|
||||
final long id = adapter.getStatusId(pos), account_id = adapter.getAccountId(pos);
|
||||
fragment.addUnreadCountsToRemove(account_id, id);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(final Void result) {
|
||||
final AsyncTwitterWrapper twitter = fragment.getTwitterWrapper();
|
||||
if (twitter != null) {
|
||||
twitter.removeUnreadCountsAsync(fragment.getTabPosition(), fragment.getUnreadCountsToRemove());
|
||||
}
|
||||
}
|
||||
@Override
|
||||
protected void onPostExecute(final Void result) {
|
||||
final AsyncTwitterWrapper twitter = fragment.getTwitterWrapper();
|
||||
if (twitter != null) {
|
||||
twitter.removeUnreadCountsAsync(fragment.getTabPosition(), fragment.getUnreadCountsToRemove());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,7 +37,6 @@ import org.mariotaku.refreshnow.widget.RefreshMode;
|
|||
import org.mariotaku.twidere.adapter.ParcelableUserListsAdapter;
|
||||
import org.mariotaku.twidere.adapter.iface.IBaseCardAdapter.MenuButtonClickListener;
|
||||
import org.mariotaku.twidere.loader.support.BaseUserListsLoader;
|
||||
import org.mariotaku.twidere.model.Panes;
|
||||
import org.mariotaku.twidere.model.ParcelableUserList;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.MultiSelectManager;
|
||||
|
@ -49,7 +48,7 @@ import static org.mariotaku.twidere.util.Utils.configBaseCardAdapter;
|
|||
import static org.mariotaku.twidere.util.Utils.openUserListDetails;
|
||||
|
||||
abstract class BaseUserListsListFragment extends BasePullToRefreshListFragment implements
|
||||
LoaderCallbacks<List<ParcelableUserList>>, Panes.Left, OnMenuItemClickListener, MenuButtonClickListener {
|
||||
LoaderCallbacks<List<ParcelableUserList>>, OnMenuItemClickListener, MenuButtonClickListener {
|
||||
|
||||
private ParcelableUserListsAdapter mAdapter;
|
||||
|
||||
|
|
|
@ -37,7 +37,6 @@ import android.widget.ListView;
|
|||
import org.mariotaku.twidere.adapter.ParcelableUsersAdapter;
|
||||
import org.mariotaku.twidere.adapter.iface.IBaseCardAdapter.MenuButtonClickListener;
|
||||
import org.mariotaku.twidere.loader.support.DummyParcelableUsersLoader;
|
||||
import org.mariotaku.twidere.model.Panes;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.util.MultiSelectManager;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
|
@ -52,7 +51,7 @@ import static org.mariotaku.twidere.util.Utils.getActivatedAccountIds;
|
|||
import static org.mariotaku.twidere.util.Utils.openUserProfile;
|
||||
|
||||
abstract class BaseUsersListFragment extends BasePullToRefreshListFragment implements
|
||||
LoaderCallbacks<List<ParcelableUser>>, OnItemLongClickListener, Panes.Left, OnMenuItemClickListener,
|
||||
LoaderCallbacks<List<ParcelableUser>>, OnItemLongClickListener, OnMenuItemClickListener,
|
||||
MultiSelectManager.Callback, MenuButtonClickListener {
|
||||
|
||||
private SharedPreferences mPreferences;
|
||||
|
|
|
@ -65,7 +65,6 @@ import org.mariotaku.twidere.adapter.DirectMessagesConversationAdapter;
|
|||
import org.mariotaku.twidere.adapter.iface.IBaseCardAdapter.MenuButtonClickListener;
|
||||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.model.Account;
|
||||
import org.mariotaku.twidere.model.Panes;
|
||||
import org.mariotaku.twidere.model.ParcelableDirectMessage;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.provider.TweetStore;
|
||||
|
@ -95,7 +94,7 @@ import static org.mariotaku.twidere.util.Utils.getOldestMessageIdsFromDatabase;
|
|||
import static org.mariotaku.twidere.util.Utils.showOkMessage;
|
||||
|
||||
public class DirectMessagesConversationFragment extends BasePullToRefreshListFragment implements
|
||||
LoaderCallbacks<Cursor>, OnMenuItemClickListener, TextWatcher, OnClickListener, Panes.Right,
|
||||
LoaderCallbacks<Cursor>, OnMenuItemClickListener, TextWatcher, OnClickListener,
|
||||
OnItemSelectedListener, OnEditorActionListener, MenuButtonClickListener {
|
||||
|
||||
private TwidereValidator mValidator;
|
||||
|
|
|
@ -19,8 +19,6 @@
|
|||
|
||||
package org.mariotaku.twidere.fragment.support;
|
||||
|
||||
import static org.mariotaku.twidere.util.Utils.openTweetSearch;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.LoaderManager.LoaderCallbacks;
|
||||
|
@ -35,134 +33,135 @@ import android.widget.ListView;
|
|||
import android.widget.TextView;
|
||||
|
||||
import org.mariotaku.twidere.loader.support.SavedSearchesLoader;
|
||||
import org.mariotaku.twidere.model.Panes;
|
||||
|
||||
import twitter4j.ResponseList;
|
||||
import twitter4j.SavedSearch;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
|
||||
import twitter4j.ResponseList;
|
||||
import twitter4j.SavedSearch;
|
||||
|
||||
import static org.mariotaku.twidere.util.Utils.openTweetSearch;
|
||||
|
||||
public class SavedSearchesListFragment extends BasePullToRefreshListFragment implements
|
||||
LoaderCallbacks<ResponseList<SavedSearch>>, OnItemLongClickListener, Panes.Left {
|
||||
LoaderCallbacks<ResponseList<SavedSearch>>, OnItemLongClickListener {
|
||||
|
||||
private SavedSearchesAdapter mAdapter;
|
||||
private SavedSearchesAdapter mAdapter;
|
||||
|
||||
private long mAccountId;
|
||||
private ListView mListView;
|
||||
private static final Comparator<SavedSearch> POSITION_COMPARATOR = new Comparator<SavedSearch>() {
|
||||
private long mAccountId;
|
||||
private ListView mListView;
|
||||
private static final Comparator<SavedSearch> POSITION_COMPARATOR = new Comparator<SavedSearch>() {
|
||||
|
||||
@Override
|
||||
public int compare(final SavedSearch object1, final SavedSearch object2) {
|
||||
return object1.getPosition() - object2.getPosition();
|
||||
}
|
||||
@Override
|
||||
public int compare(final SavedSearch object1, final SavedSearch object2) {
|
||||
return object1.getPosition() - object2.getPosition();
|
||||
}
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(final Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
mAdapter = new SavedSearchesAdapter(getActivity());
|
||||
setListAdapter(mAdapter);
|
||||
mListView = getListView();
|
||||
mListView.setOnItemLongClickListener(this);
|
||||
final Bundle args = getArguments();
|
||||
mAccountId = args != null ? args.getLong(EXTRA_ACCOUNT_ID, -1) : -1;
|
||||
getLoaderManager().initLoader(0, null, this);
|
||||
setListShown(false);
|
||||
}
|
||||
@Override
|
||||
public void onActivityCreated(final Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
mAdapter = new SavedSearchesAdapter(getActivity());
|
||||
setListAdapter(mAdapter);
|
||||
mListView = getListView();
|
||||
mListView.setOnItemLongClickListener(this);
|
||||
final Bundle args = getArguments();
|
||||
mAccountId = args != null ? args.getLong(EXTRA_ACCOUNT_ID, -1) : -1;
|
||||
getLoaderManager().initLoader(0, null, this);
|
||||
setListShown(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Loader<ResponseList<SavedSearch>> onCreateLoader(final int id, final Bundle args) {
|
||||
return new SavedSearchesLoader(getActivity(), mAccountId);
|
||||
}
|
||||
@Override
|
||||
public Loader<ResponseList<SavedSearch>> onCreateLoader(final int id, final Bundle args) {
|
||||
return new SavedSearchesLoader(getActivity(), mAccountId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onItemLongClick(final AdapterView<?> view, final View child, final int position, final long id) {
|
||||
final SavedSearch item = mAdapter.findItem(id);
|
||||
if (item == null) return false;
|
||||
DestroySavedSearchDialogFragment.show(getFragmentManager(), mAccountId, item.getId(), item.getName());
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
public boolean onItemLongClick(final AdapterView<?> view, final View child, final int position, final long id) {
|
||||
final SavedSearch item = mAdapter.findItem(id);
|
||||
if (item == null) return false;
|
||||
DestroySavedSearchDialogFragment.show(getFragmentManager(), mAccountId, item.getId(), item.getName());
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onListItemClick(final ListView view, final View child, final int position, final long id) {
|
||||
final SavedSearch item = mAdapter.findItem(id);
|
||||
if (item == null) return;
|
||||
openTweetSearch(getActivity(), mAccountId, item.getQuery());
|
||||
}
|
||||
@Override
|
||||
public void onListItemClick(final ListView view, final View child, final int position, final long id) {
|
||||
final SavedSearch item = mAdapter.findItem(id);
|
||||
if (item == null) return;
|
||||
openTweetSearch(getActivity(), mAccountId, item.getQuery());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoaderReset(final Loader<ResponseList<SavedSearch>> loader) {
|
||||
mAdapter.setData(null);
|
||||
}
|
||||
@Override
|
||||
public void onLoaderReset(final Loader<ResponseList<SavedSearch>> loader) {
|
||||
mAdapter.setData(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadFinished(final Loader<ResponseList<SavedSearch>> loader, final ResponseList<SavedSearch> data) {
|
||||
if (data != null) {
|
||||
Collections.sort(data, POSITION_COMPARATOR);
|
||||
}
|
||||
mAdapter.setData(data);
|
||||
setListShown(true);
|
||||
setRefreshComplete();
|
||||
}
|
||||
@Override
|
||||
public void onLoadFinished(final Loader<ResponseList<SavedSearch>> loader, final ResponseList<SavedSearch> data) {
|
||||
if (data != null) {
|
||||
Collections.sort(data, POSITION_COMPARATOR);
|
||||
}
|
||||
mAdapter.setData(data);
|
||||
setListShown(true);
|
||||
setRefreshComplete();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRefreshFromEnd() {
|
||||
@Override
|
||||
public void onRefreshFromEnd() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRefreshFromStart() {
|
||||
if (isRefreshing()) return;
|
||||
getLoaderManager().restartLoader(0, null, this);
|
||||
}
|
||||
@Override
|
||||
public void onRefreshFromStart() {
|
||||
if (isRefreshing()) return;
|
||||
getLoaderManager().restartLoader(0, null, this);
|
||||
}
|
||||
|
||||
static class SavedSearchesAdapter extends BaseAdapter {
|
||||
static class SavedSearchesAdapter extends BaseAdapter {
|
||||
|
||||
private ResponseList<SavedSearch> mData;
|
||||
private final LayoutInflater mInflater;
|
||||
private ResponseList<SavedSearch> mData;
|
||||
private final LayoutInflater mInflater;
|
||||
|
||||
public SavedSearchesAdapter(final Context context) {
|
||||
mInflater = LayoutInflater.from(context);
|
||||
}
|
||||
public SavedSearchesAdapter(final Context context) {
|
||||
mInflater = LayoutInflater.from(context);
|
||||
}
|
||||
|
||||
public SavedSearch findItem(final long id) {
|
||||
for (int i = 0, count = getCount(); i < count; i++) {
|
||||
if (id != -1 && id == getItemId(i)) return getItem(i);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
public SavedSearch findItem(final long id) {
|
||||
for (int i = 0, count = getCount(); i < count; i++) {
|
||||
if (id != -1 && id == getItemId(i)) return getItem(i);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return mData != null ? mData.size() : 0;
|
||||
}
|
||||
@Override
|
||||
public int getCount() {
|
||||
return mData != null ? mData.size() : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SavedSearch getItem(final int position) {
|
||||
return mData != null ? mData.get(position) : null;
|
||||
}
|
||||
@Override
|
||||
public SavedSearch getItem(final int position) {
|
||||
return mData != null ? mData.get(position) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(final int position) {
|
||||
return mData != null ? mData.get(position).getId() : -1;
|
||||
}
|
||||
@Override
|
||||
public long getItemId(final int position) {
|
||||
return mData != null ? mData.get(position).getId() : -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(final int position, final View convertView, final ViewGroup parent) {
|
||||
final View view = convertView != null ? convertView : mInflater.inflate(
|
||||
android.R.layout.simple_list_item_1, null);
|
||||
final TextView text = (TextView) view.findViewById(android.R.id.text1);
|
||||
text.setText(getItem(position).getName());
|
||||
return view;
|
||||
}
|
||||
@Override
|
||||
public View getView(final int position, final View convertView, final ViewGroup parent) {
|
||||
final View view = convertView != null ? convertView : mInflater.inflate(
|
||||
android.R.layout.simple_list_item_1, null);
|
||||
final TextView text = (TextView) view.findViewById(android.R.id.text1);
|
||||
text.setText(getItem(position).getName());
|
||||
return view;
|
||||
}
|
||||
|
||||
public void setData(final ResponseList<SavedSearch> data) {
|
||||
mData = data;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
public void setData(final ResponseList<SavedSearch> data) {
|
||||
mData = data;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -37,14 +37,13 @@ import org.mariotaku.twidere.activity.support.LinkHandlerActivity;
|
|||
import org.mariotaku.twidere.adapter.support.SupportTabsAdapter;
|
||||
import org.mariotaku.twidere.fragment.iface.RefreshScrollTopInterface;
|
||||
import org.mariotaku.twidere.fragment.iface.SupportFragmentCallback;
|
||||
import org.mariotaku.twidere.model.Panes;
|
||||
import org.mariotaku.twidere.provider.RecentSearchProvider;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.view.ExtendedViewPager;
|
||||
import org.mariotaku.twidere.view.LinePageIndicator;
|
||||
|
||||
public class SearchFragment extends BaseSupportFragment implements Panes.Left, OnPageChangeListener,
|
||||
public class SearchFragment extends BaseSupportFragment implements OnPageChangeListener,
|
||||
RefreshScrollTopInterface, SupportFragmentCallback {
|
||||
|
||||
private ExtendedViewPager mViewPager;
|
||||
|
|
|
@ -76,7 +76,6 @@ import org.mariotaku.twidere.adapter.iface.IStatusesListAdapter;
|
|||
import org.mariotaku.twidere.app.TwidereApplication;
|
||||
import org.mariotaku.twidere.model.Account;
|
||||
import org.mariotaku.twidere.model.Account.AccountWithCredentials;
|
||||
import org.mariotaku.twidere.model.Panes;
|
||||
import org.mariotaku.twidere.model.ParcelableLocation;
|
||||
import org.mariotaku.twidere.model.ParcelableMedia;
|
||||
import org.mariotaku.twidere.model.ParcelableStatus;
|
||||
|
@ -140,7 +139,7 @@ import static org.mariotaku.twidere.util.Utils.showErrorMessage;
|
|||
import static org.mariotaku.twidere.util.Utils.showOkMessage;
|
||||
import static org.mariotaku.twidere.util.Utils.startStatusShareChooser;
|
||||
|
||||
public class StatusFragment extends ParcelableStatusesListFragment implements OnClickListener, Panes.Right,
|
||||
public class StatusFragment extends ParcelableStatusesListFragment implements OnClickListener,
|
||||
OnMediaClickListener, OnSharedPreferenceChangeListener, ActionMode.Callback {
|
||||
|
||||
private static final int LOADER_ID_STATUS = 1;
|
||||
|
|
|
@ -19,10 +19,6 @@
|
|||
|
||||
package org.mariotaku.twidere.fragment.support;
|
||||
|
||||
import static org.mariotaku.twidere.util.Utils.getDefaultAccountId;
|
||||
import static org.mariotaku.twidere.util.Utils.getTableNameByUri;
|
||||
import static org.mariotaku.twidere.util.Utils.openTweetSearch;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
@ -38,111 +34,113 @@ import android.support.v4.widget.SimpleCursorAdapter;
|
|||
import android.view.View;
|
||||
import android.widget.ListView;
|
||||
|
||||
import org.mariotaku.twidere.model.Panes;
|
||||
import org.mariotaku.twidere.provider.TweetStore.CachedTrends;
|
||||
import org.mariotaku.twidere.util.AsyncTwitterWrapper;
|
||||
import org.mariotaku.twidere.util.MultiSelectManager;
|
||||
|
||||
public class TrendsSuggectionsFragment extends BasePullToRefreshListFragment implements LoaderCallbacks<Cursor>,
|
||||
Panes.Left {
|
||||
import static org.mariotaku.twidere.util.Utils.getDefaultAccountId;
|
||||
import static org.mariotaku.twidere.util.Utils.getTableNameByUri;
|
||||
import static org.mariotaku.twidere.util.Utils.openTweetSearch;
|
||||
|
||||
private MultiSelectManager mMultiSelectManager;
|
||||
private SharedPreferences mPreferences;
|
||||
public class TrendsSuggectionsFragment extends BasePullToRefreshListFragment implements LoaderCallbacks<Cursor> {
|
||||
|
||||
private TrendsAdapter mTrendsAdapter;
|
||||
private MultiSelectManager mMultiSelectManager;
|
||||
private SharedPreferences mPreferences;
|
||||
|
||||
private long mAccountId;
|
||||
private TrendsAdapter mTrendsAdapter;
|
||||
|
||||
private final BroadcastReceiver mStatusReceiver = new BroadcastReceiver() {
|
||||
private long mAccountId;
|
||||
|
||||
@Override
|
||||
public void onReceive(final Context context, final Intent intent) {
|
||||
if (getActivity() == null || !isAdded() || isDetached()) return;
|
||||
final String action = intent.getAction();
|
||||
if (BROADCAST_TASK_STATE_CHANGED.equals(action)) {
|
||||
updateRefreshState();
|
||||
}
|
||||
}
|
||||
};
|
||||
private final BroadcastReceiver mStatusReceiver = new BroadcastReceiver() {
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(final Bundle savedInstanceState) {
|
||||
mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
mMultiSelectManager = getMultiSelectManager();
|
||||
mAccountId = getDefaultAccountId(getActivity());
|
||||
mTrendsAdapter = new TrendsAdapter(getActivity());
|
||||
setListAdapter(mTrendsAdapter);
|
||||
getLoaderManager().initLoader(0, null, this);
|
||||
}
|
||||
@Override
|
||||
public void onReceive(final Context context, final Intent intent) {
|
||||
if (getActivity() == null || !isAdded() || isDetached()) return;
|
||||
final String action = intent.getAction();
|
||||
if (BROADCAST_TASK_STATE_CHANGED.equals(action)) {
|
||||
updateRefreshState();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public Loader<Cursor> onCreateLoader(final int id, final Bundle args) {
|
||||
final Uri uri = CachedTrends.Local.CONTENT_URI;
|
||||
final String table = getTableNameByUri(uri);
|
||||
final String where = table != null ? CachedTrends.TIMESTAMP + " = " + "(SELECT " + CachedTrends.TIMESTAMP
|
||||
+ " FROM " + table + " ORDER BY " + CachedTrends.TIMESTAMP + " DESC LIMIT 1)" : null;
|
||||
return new CursorLoader(getActivity(), uri, CachedTrends.COLUMNS, where, null, null);
|
||||
}
|
||||
@Override
|
||||
public void onActivityCreated(final Bundle savedInstanceState) {
|
||||
mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
mMultiSelectManager = getMultiSelectManager();
|
||||
mAccountId = getDefaultAccountId(getActivity());
|
||||
mTrendsAdapter = new TrendsAdapter(getActivity());
|
||||
setListAdapter(mTrendsAdapter);
|
||||
getLoaderManager().initLoader(0, null, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onListItemClick(final ListView l, final View v, final int position, final long id) {
|
||||
if (mMultiSelectManager.isActive()) return;
|
||||
final Cursor cur = (Cursor) mTrendsAdapter.getItem(position - l.getHeaderViewsCount());
|
||||
if (cur == null) return;
|
||||
openTweetSearch(getActivity(), mAccountId, cur.getString(cur.getColumnIndex(CachedTrends.NAME)));
|
||||
}
|
||||
@Override
|
||||
public Loader<Cursor> onCreateLoader(final int id, final Bundle args) {
|
||||
final Uri uri = CachedTrends.Local.CONTENT_URI;
|
||||
final String table = getTableNameByUri(uri);
|
||||
final String where = table != null ? CachedTrends.TIMESTAMP + " = " + "(SELECT " + CachedTrends.TIMESTAMP
|
||||
+ " FROM " + table + " ORDER BY " + CachedTrends.TIMESTAMP + " DESC LIMIT 1)" : null;
|
||||
return new CursorLoader(getActivity(), uri, CachedTrends.COLUMNS, where, null, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoaderReset(final Loader<Cursor> loader) {
|
||||
mTrendsAdapter.swapCursor(null);
|
||||
}
|
||||
@Override
|
||||
public void onListItemClick(final ListView l, final View v, final int position, final long id) {
|
||||
if (mMultiSelectManager.isActive()) return;
|
||||
final Cursor cur = (Cursor) mTrendsAdapter.getItem(position - l.getHeaderViewsCount());
|
||||
if (cur == null) return;
|
||||
openTweetSearch(getActivity(), mAccountId, cur.getString(cur.getColumnIndex(CachedTrends.NAME)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadFinished(final Loader<Cursor> loader, final Cursor cursor) {
|
||||
mTrendsAdapter.swapCursor(cursor);
|
||||
}
|
||||
@Override
|
||||
public void onLoaderReset(final Loader<Cursor> loader) {
|
||||
mTrendsAdapter.swapCursor(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRefreshFromEnd() {
|
||||
@Override
|
||||
public void onLoadFinished(final Loader<Cursor> loader, final Cursor cursor) {
|
||||
mTrendsAdapter.swapCursor(cursor);
|
||||
}
|
||||
|
||||
}
|
||||
@Override
|
||||
public void onRefreshFromEnd() {
|
||||
|
||||
@Override
|
||||
public void onRefreshFromStart() {
|
||||
if (isRefreshing()) return;
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
if (twitter == null) return;
|
||||
twitter.getLocalTrendsAsync(mAccountId, mPreferences.getInt(KEY_LOCAL_TRENDS_WOEID, 1));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
getLoaderManager().restartLoader(0, null, this);
|
||||
final IntentFilter filter = new IntentFilter(BROADCAST_TASK_STATE_CHANGED);
|
||||
registerReceiver(mStatusReceiver, filter);
|
||||
}
|
||||
@Override
|
||||
public void onRefreshFromStart() {
|
||||
if (isRefreshing()) return;
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
if (twitter == null) return;
|
||||
twitter.getLocalTrendsAsync(mAccountId, mPreferences.getInt(KEY_LOCAL_TRENDS_WOEID, 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
unregisterReceiver(mStatusReceiver);
|
||||
super.onStop();
|
||||
}
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
getLoaderManager().restartLoader(0, null, this);
|
||||
final IntentFilter filter = new IntentFilter(BROADCAST_TASK_STATE_CHANGED);
|
||||
registerReceiver(mStatusReceiver, filter);
|
||||
}
|
||||
|
||||
protected void updateRefreshState() {
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
if (twitter == null || !getUserVisibleHint()) return;
|
||||
setRefreshing(twitter.isLocalTrendsRefreshing());
|
||||
}
|
||||
@Override
|
||||
public void onStop() {
|
||||
unregisterReceiver(mStatusReceiver);
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
static class TrendsAdapter extends SimpleCursorAdapter {
|
||||
protected void updateRefreshState() {
|
||||
final AsyncTwitterWrapper twitter = getTwitterWrapper();
|
||||
if (twitter == null || !getUserVisibleHint()) return;
|
||||
setRefreshing(twitter.isLocalTrendsRefreshing());
|
||||
}
|
||||
|
||||
public TrendsAdapter(final Context context) {
|
||||
super(context, android.R.layout.simple_list_item_1, null, new String[] { CachedTrends.NAME },
|
||||
new int[] { android.R.id.text1 }, 0);
|
||||
}
|
||||
static class TrendsAdapter extends SimpleCursorAdapter {
|
||||
|
||||
}
|
||||
public TrendsAdapter(final Context context) {
|
||||
super(context, android.R.layout.simple_list_item_1, null, new String[]{CachedTrends.NAME},
|
||||
new int[]{android.R.id.text1}, 0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -58,7 +58,6 @@ import org.mariotaku.twidere.R;
|
|||
import org.mariotaku.twidere.activity.support.UserListSelectorActivity;
|
||||
import org.mariotaku.twidere.adapter.ListActionAdapter;
|
||||
import org.mariotaku.twidere.model.ListAction;
|
||||
import org.mariotaku.twidere.model.Panes;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.model.ParcelableUserList;
|
||||
import org.mariotaku.twidere.model.SingleResponse;
|
||||
|
@ -90,8 +89,7 @@ import static org.mariotaku.twidere.util.Utils.openUserProfile;
|
|||
import static org.mariotaku.twidere.util.Utils.setMenuItemAvailability;
|
||||
|
||||
public class UserListDetailsFragment extends BaseSupportListFragment implements OnClickListener, OnItemClickListener,
|
||||
OnItemLongClickListener, OnMenuItemClickListener, LoaderCallbacks<SingleResponse<ParcelableUserList>>,
|
||||
Panes.Right {
|
||||
OnItemLongClickListener, OnMenuItemClickListener, LoaderCallbacks<SingleResponse<ParcelableUserList>> {
|
||||
|
||||
private ImageLoaderWrapper mProfileImageLoader;
|
||||
private AsyncTwitterWrapper mTwitterWrapper;
|
||||
|
|
|
@ -0,0 +1,132 @@
|
|||
/*
|
||||
* 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.fragment.support;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v4.view.ViewPager.OnPageChangeListener;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.adapter.support.SupportTabsAdapter;
|
||||
import org.mariotaku.twidere.fragment.iface.RefreshScrollTopInterface;
|
||||
import org.mariotaku.twidere.fragment.iface.SupportFragmentCallback;
|
||||
import org.mariotaku.twidere.util.ThemeUtils;
|
||||
import org.mariotaku.twidere.view.ExtendedViewPager;
|
||||
import org.mariotaku.twidere.view.LinePageIndicator;
|
||||
|
||||
public class UserListsFragment extends BaseSupportFragment implements OnPageChangeListener,
|
||||
RefreshScrollTopInterface, SupportFragmentCallback {
|
||||
|
||||
private ExtendedViewPager mViewPager;
|
||||
|
||||
private SupportTabsAdapter mAdapter;
|
||||
private LinePageIndicator mPagerIndicator;
|
||||
|
||||
private Fragment mCurrentVisibleFragment;
|
||||
|
||||
@Override
|
||||
public Fragment getCurrentVisibleFragment() {
|
||||
return mCurrentVisibleFragment;
|
||||
}
|
||||
|
||||
public void hideIndicator() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(final Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
final Bundle args = getArguments();
|
||||
final FragmentActivity activity = getActivity();
|
||||
mAdapter = new SupportTabsAdapter(activity, getChildFragmentManager(), null, 1);
|
||||
mAdapter.addTab(UserListsListFragment.class, args, getString(R.string.lists),
|
||||
R.drawable.ic_action_twitter, 0);
|
||||
mAdapter.addTab(UserListMembershipsListFragment.class, args,
|
||||
getString(R.string.lists_following_user), R.drawable.ic_action_user, 1);
|
||||
mViewPager.setAdapter(mAdapter);
|
||||
mViewPager.setOnPageChangeListener(this);
|
||||
mViewPager.setOffscreenPageLimit(2);
|
||||
mPagerIndicator.setSelectedColor(ThemeUtils.getThemeColor(activity));
|
||||
mPagerIndicator.setViewPager(mViewPager);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_search, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetachFragment(final Fragment fragment) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrolled(final int position, final float positionOffset, final int positionOffsetPixels) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrollStateChanged(final int state) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageSelected(final int position) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSetUserVisibleHint(final Fragment fragment, final boolean isVisibleToUser) {
|
||||
if (isVisibleToUser) {
|
||||
mCurrentVisibleFragment = fragment;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(final View view, final Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
mViewPager = (ExtendedViewPager) view.findViewById(R.id.search_pager);
|
||||
mPagerIndicator = (LinePageIndicator) view.findViewById(R.id.search_pager_indicator);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean scrollToStart() {
|
||||
if (!(mCurrentVisibleFragment instanceof RefreshScrollTopInterface)) return false;
|
||||
((RefreshScrollTopInterface) mCurrentVisibleFragment).scrollToStart();
|
||||
return true;
|
||||
}
|
||||
|
||||
public void showIndicator() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean triggerRefresh() {
|
||||
if (!(mCurrentVisibleFragment instanceof RefreshScrollTopInterface)) return false;
|
||||
((RefreshScrollTopInterface) mCurrentVisibleFragment).triggerRefresh();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean triggerRefresh(final int position) {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
|
@ -91,7 +91,6 @@ import org.mariotaku.twidere.activity.support.UserProfileEditorActivity;
|
|||
import org.mariotaku.twidere.adapter.ListActionAdapter;
|
||||
import org.mariotaku.twidere.loader.support.ParcelableUserLoader;
|
||||
import org.mariotaku.twidere.model.ListAction;
|
||||
import org.mariotaku.twidere.model.Panes.Right;
|
||||
import org.mariotaku.twidere.model.ParcelableUser;
|
||||
import org.mariotaku.twidere.model.ParcelableUserList;
|
||||
import org.mariotaku.twidere.model.SingleResponse;
|
||||
|
@ -149,7 +148,6 @@ import static org.mariotaku.twidere.util.Utils.openUserBlocks;
|
|||
import static org.mariotaku.twidere.util.Utils.openUserFavorites;
|
||||
import static org.mariotaku.twidere.util.Utils.openUserFollowers;
|
||||
import static org.mariotaku.twidere.util.Utils.openUserFriends;
|
||||
import static org.mariotaku.twidere.util.Utils.openUserListMemberships;
|
||||
import static org.mariotaku.twidere.util.Utils.openUserLists;
|
||||
import static org.mariotaku.twidere.util.Utils.openUserMediaTimeline;
|
||||
import static org.mariotaku.twidere.util.Utils.openUserMentions;
|
||||
|
@ -159,7 +157,7 @@ import static org.mariotaku.twidere.util.Utils.setMenuItemAvailability;
|
|||
import static org.mariotaku.twidere.util.Utils.showInfoMessage;
|
||||
|
||||
public class UserProfileFragmentOld extends BaseSupportListFragment implements OnClickListener, OnItemClickListener,
|
||||
OnItemLongClickListener, OnMenuItemClickListener, OnLinkClickListener, Right, OnSizeChangedListener,
|
||||
OnItemLongClickListener, OnMenuItemClickListener, OnLinkClickListener, OnSizeChangedListener,
|
||||
OnSharedPreferenceChangeListener, OnTouchListener, ImageLoadingListener {
|
||||
|
||||
private static final int LOADER_ID_USER = 1;
|
||||
|
@ -416,7 +414,6 @@ public class UserProfileFragmentOld extends BaseSupportListFragment implements O
|
|||
mAdapter.add(new FavoritesAction(2));
|
||||
mAdapter.add(new UserMentionsAction(3));
|
||||
mAdapter.add(new UserListsAction(4));
|
||||
mAdapter.add(new UserListMembershipsAction(5));
|
||||
if (userIsMe) {
|
||||
mAdapter.add(new SavedSearchesAction(11));
|
||||
if (user.is_protected) {
|
||||
|
@ -1204,26 +1201,6 @@ public class UserProfileFragmentOld extends BaseSupportListFragment implements O
|
|||
|
||||
}
|
||||
|
||||
private final class UserListMembershipsAction extends ListAction {
|
||||
public UserListMembershipsAction(final int order) {
|
||||
super(order);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
if (mUser == null) return getString(R.string.lists_following_user);
|
||||
final String display_name = getDisplayName(getActivity(), mUser.id, mUser.name, mUser.screen_name);
|
||||
return getString(R.string.lists_following_user_with_name, display_name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick() {
|
||||
final ParcelableUser user = mUser;
|
||||
if (user == null) return;
|
||||
openUserListMemberships(getActivity(), user.account_id, user.id, user.screen_name);
|
||||
}
|
||||
}
|
||||
|
||||
private final class UserListsAction extends ListAction {
|
||||
|
||||
public UserListsAction(final int order) {
|
||||
|
@ -1232,9 +1209,7 @@ public class UserProfileFragmentOld extends BaseSupportListFragment implements O
|
|||
|
||||
@Override
|
||||
public String getName() {
|
||||
if (mUser == null) return getString(R.string.users_lists);
|
||||
final String display_name = getDisplayName(getActivity(), mUser.id, mUser.name, mUser.screen_name);
|
||||
return getString(R.string.users_lists_with_name, display_name);
|
||||
return getString(R.string.lists);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,31 +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.model;
|
||||
|
||||
public interface Panes {
|
||||
|
||||
public interface Left {
|
||||
|
||||
}
|
||||
|
||||
public interface Right {
|
||||
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -140,7 +140,7 @@ import org.mariotaku.twidere.fragment.support.UserListMembersFragment;
|
|||
import org.mariotaku.twidere.fragment.support.UserListMembershipsListFragment;
|
||||
import org.mariotaku.twidere.fragment.support.UserListSubscribersFragment;
|
||||
import org.mariotaku.twidere.fragment.support.UserListTimelineFragment;
|
||||
import org.mariotaku.twidere.fragment.support.UserListsListFragment;
|
||||
import org.mariotaku.twidere.fragment.support.UserListsFragment;
|
||||
import org.mariotaku.twidere.fragment.support.UserMediaTimelineFragment;
|
||||
import org.mariotaku.twidere.fragment.support.UserMentionsFragment;
|
||||
import org.mariotaku.twidere.fragment.support.UserProfileFragmentOld;
|
||||
|
@ -849,29 +849,29 @@ public final class Utils implements Constants, TwitterConstants {
|
|||
break;
|
||||
}
|
||||
case LINK_ID_USER_LISTS: {
|
||||
fragment = new UserListsListFragment();
|
||||
fragment = new UserListsFragment();
|
||||
final String paramScreenName = uri.getQueryParameter(QUERY_PARAM_SCREEN_NAME);
|
||||
final String param_user_id = uri.getQueryParameter(QUERY_PARAM_USER_ID);
|
||||
final String paramUserId = uri.getQueryParameter(QUERY_PARAM_USER_ID);
|
||||
if (!args.containsKey(EXTRA_SCREEN_NAME)) {
|
||||
args.putString(EXTRA_SCREEN_NAME, paramScreenName);
|
||||
}
|
||||
if (!args.containsKey(EXTRA_USER_ID)) {
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(param_user_id));
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(paramUserId));
|
||||
}
|
||||
if (isEmpty(paramScreenName) && isEmpty(param_user_id)) return null;
|
||||
if (isEmpty(paramScreenName) && isEmpty(paramUserId)) return null;
|
||||
break;
|
||||
}
|
||||
case LINK_ID_USER_LIST_TIMELINE: {
|
||||
fragment = new UserListTimelineFragment();
|
||||
final String paramScreenName = uri.getQueryParameter(QUERY_PARAM_SCREEN_NAME);
|
||||
final String param_user_id = uri.getQueryParameter(QUERY_PARAM_USER_ID);
|
||||
final String param_list_id = uri.getQueryParameter(QUERY_PARAM_LIST_ID);
|
||||
final String paramUserId = uri.getQueryParameter(QUERY_PARAM_USER_ID);
|
||||
final String paramListId = uri.getQueryParameter(QUERY_PARAM_LIST_ID);
|
||||
final String paramListName = uri.getQueryParameter(QUERY_PARAM_LIST_NAME);
|
||||
if (isEmpty(param_list_id)
|
||||
&& (isEmpty(paramListName) || isEmpty(paramScreenName) && isEmpty(param_user_id)))
|
||||
if (isEmpty(paramListId)
|
||||
&& (isEmpty(paramListName) || isEmpty(paramScreenName) && isEmpty(paramUserId)))
|
||||
return null;
|
||||
args.putInt(EXTRA_LIST_ID, ParseUtils.parseInt(param_list_id));
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(param_user_id));
|
||||
args.putInt(EXTRA_LIST_ID, ParseUtils.parseInt(paramListId));
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(paramUserId));
|
||||
args.putString(EXTRA_SCREEN_NAME, paramScreenName);
|
||||
args.putString(EXTRA_LIST_NAME, paramListName);
|
||||
break;
|
||||
|
@ -879,14 +879,14 @@ public final class Utils implements Constants, TwitterConstants {
|
|||
case LINK_ID_USER_LIST_MEMBERS: {
|
||||
fragment = new UserListMembersFragment();
|
||||
final String paramScreenName = uri.getQueryParameter(QUERY_PARAM_SCREEN_NAME);
|
||||
final String param_user_id = uri.getQueryParameter(QUERY_PARAM_USER_ID);
|
||||
final String param_list_id = uri.getQueryParameter(QUERY_PARAM_LIST_ID);
|
||||
final String paramUserId = uri.getQueryParameter(QUERY_PARAM_USER_ID);
|
||||
final String paramListId = uri.getQueryParameter(QUERY_PARAM_LIST_ID);
|
||||
final String paramListName = uri.getQueryParameter(QUERY_PARAM_LIST_NAME);
|
||||
if (isEmpty(param_list_id)
|
||||
&& (isEmpty(paramListName) || isEmpty(paramScreenName) && isEmpty(param_user_id)))
|
||||
if (isEmpty(paramListId)
|
||||
&& (isEmpty(paramListName) || isEmpty(paramScreenName) && isEmpty(paramUserId)))
|
||||
return null;
|
||||
args.putInt(EXTRA_LIST_ID, ParseUtils.parseInt(param_list_id));
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(param_user_id));
|
||||
args.putInt(EXTRA_LIST_ID, ParseUtils.parseInt(paramListId));
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(paramUserId));
|
||||
args.putString(EXTRA_SCREEN_NAME, paramScreenName);
|
||||
args.putString(EXTRA_LIST_NAME, paramListName);
|
||||
break;
|
||||
|
@ -894,14 +894,14 @@ public final class Utils implements Constants, TwitterConstants {
|
|||
case LINK_ID_USER_LIST_SUBSCRIBERS: {
|
||||
fragment = new UserListSubscribersFragment();
|
||||
final String paramScreenName = uri.getQueryParameter(QUERY_PARAM_SCREEN_NAME);
|
||||
final String param_user_id = uri.getQueryParameter(QUERY_PARAM_USER_ID);
|
||||
final String param_list_id = uri.getQueryParameter(QUERY_PARAM_LIST_ID);
|
||||
final String paramUserId = uri.getQueryParameter(QUERY_PARAM_USER_ID);
|
||||
final String paramListId = uri.getQueryParameter(QUERY_PARAM_LIST_ID);
|
||||
final String paramListName = uri.getQueryParameter(QUERY_PARAM_LIST_NAME);
|
||||
if (isEmpty(param_list_id)
|
||||
&& (isEmpty(paramListName) || isEmpty(paramScreenName) && isEmpty(param_user_id)))
|
||||
if (isEmpty(paramListId)
|
||||
&& (isEmpty(paramListName) || isEmpty(paramScreenName) && isEmpty(paramUserId)))
|
||||
return null;
|
||||
args.putInt(EXTRA_LIST_ID, ParseUtils.parseInt(param_list_id));
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(param_user_id));
|
||||
args.putInt(EXTRA_LIST_ID, ParseUtils.parseInt(paramListId));
|
||||
args.putLong(EXTRA_USER_ID, ParseUtils.parseLong(paramUserId));
|
||||
args.putString(EXTRA_SCREEN_NAME, paramScreenName);
|
||||
args.putString(EXTRA_LIST_NAME, paramListName);
|
||||
break;
|
||||
|
@ -934,16 +934,16 @@ public final class Utils implements Constants, TwitterConstants {
|
|||
case LINK_ID_STATUS_RETWEETERS: {
|
||||
fragment = new StatusRetweetersListFragment();
|
||||
if (!args.containsKey(EXTRA_STATUS_ID)) {
|
||||
final String param_status_id = uri.getQueryParameter(QUERY_PARAM_STATUS_ID);
|
||||
args.putLong(EXTRA_STATUS_ID, ParseUtils.parseLong(param_status_id));
|
||||
final String paramStatusId = uri.getQueryParameter(QUERY_PARAM_STATUS_ID);
|
||||
args.putLong(EXTRA_STATUS_ID, ParseUtils.parseLong(paramStatusId));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case LINK_ID_STATUS_FAVORITERS: {
|
||||
fragment = new StatusFavoritersListFragment();
|
||||
if (!args.containsKey(EXTRA_STATUS_ID)) {
|
||||
final String param_status_id = uri.getQueryParameter(QUERY_PARAM_STATUS_ID);
|
||||
args.putLong(EXTRA_STATUS_ID, ParseUtils.parseLong(param_status_id));
|
||||
final String paramStatusId = uri.getQueryParameter(QUERY_PARAM_STATUS_ID);
|
||||
args.putLong(EXTRA_STATUS_ID, ParseUtils.parseLong(paramStatusId));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -970,17 +970,17 @@ public final class Utils implements Constants, TwitterConstants {
|
|||
return null;
|
||||
}
|
||||
}
|
||||
final String param_account_id = uri.getQueryParameter(QUERY_PARAM_ACCOUNT_ID);
|
||||
if (param_account_id != null) {
|
||||
args.putLong(EXTRA_ACCOUNT_ID, ParseUtils.parseLong(param_account_id));
|
||||
final String paramAccountId = uri.getQueryParameter(QUERY_PARAM_ACCOUNT_ID);
|
||||
if (paramAccountId != null) {
|
||||
args.putLong(EXTRA_ACCOUNT_ID, ParseUtils.parseLong(paramAccountId));
|
||||
} else {
|
||||
final String param_account_name = uri.getQueryParameter(QUERY_PARAM_ACCOUNT_NAME);
|
||||
if (param_account_name != null) {
|
||||
args.putLong(EXTRA_ACCOUNT_ID, getAccountId(context, param_account_name));
|
||||
final String paramAccountName = uri.getQueryParameter(QUERY_PARAM_ACCOUNT_NAME);
|
||||
if (paramAccountName != null) {
|
||||
args.putLong(EXTRA_ACCOUNT_ID, getAccountId(context, paramAccountName));
|
||||
} else {
|
||||
final long account_id = getDefaultAccountId(context);
|
||||
if (isMyAccount(context, account_id)) {
|
||||
args.putLong(EXTRA_ACCOUNT_ID, account_id);
|
||||
final long accountId = getDefaultAccountId(context);
|
||||
if (isMyAccount(context, accountId)) {
|
||||
args.putLong(EXTRA_ACCOUNT_ID, accountId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ImageView
|
||||
<org.mariotaku.twidere.view.SquareFrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@android:id/icon"
|
||||
android:layout_width="32dp"
|
||||
android:layout_height="32dp"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentTop="true"/>
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_margin="@dimen/element_spacing_msmall">
|
||||
|
||||
<org.mariotaku.twidere.view.CircularImageView
|
||||
android:id="@android:id/icon"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
</org.mariotaku.twidere.view.SquareFrameLayout>
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<org.mariotaku.twidere.view.CardItemLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="@dimen/element_spacing_small"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
android:paddingRight="@dimen/element_spacing_normal"
|
||||
android:paddingTop="@dimen/element_spacing_small">
|
||||
<org.mariotaku.twidere.view.CardItemLinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="@dimen/element_spacing_small"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
android:paddingRight="@dimen/element_spacing_normal"
|
||||
android:paddingTop="@dimen/element_spacing_small">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
@ -83,7 +84,7 @@
|
|||
android:layout_height="@dimen/icon_size_card_list_item"
|
||||
android:layout_marginLeft="@dimen/element_spacing_normal"
|
||||
android:layout_weight="0"
|
||||
android:contentDescription="@string/my_profile_image"
|
||||
android:contentDescription="@string/your_profile_image"
|
||||
android:scaleType="fitCenter"/>
|
||||
</LinearLayout>
|
||||
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<org.mariotaku.twidere.view.CardItemFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="@dimen/element_spacing_small"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
android:paddingRight="@dimen/element_spacing_normal"
|
||||
android:paddingTop="@dimen/element_spacing_small">
|
||||
<org.mariotaku.twidere.view.CardItemFrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="@dimen/element_spacing_small"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
android:paddingRight="@dimen/element_spacing_normal"
|
||||
android:paddingTop="@dimen/element_spacing_small">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
|
@ -32,7 +33,7 @@
|
|||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_marginLeft="@dimen/element_spacing_normal"
|
||||
android:contentDescription="@string/my_profile_image"
|
||||
android:contentDescription="@string/your_profile_image"
|
||||
android:scaleType="fitCenter"/>
|
||||
|
||||
<FrameLayout
|
||||
|
@ -42,7 +43,7 @@
|
|||
android:layout_alignParentTop="true"
|
||||
android:layout_alignWithParentIfMissing="true"
|
||||
android:layout_toLeftOf="@+id/time_frame"
|
||||
android:layout_toRightOf="@+id/profile_image">
|
||||
android:layout_toRightOf="@id/profile_image">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -150,7 +151,7 @@
|
|||
android:layout_alignRight="@+id/time_frame"
|
||||
android:layout_alignWithParentIfMissing="true"
|
||||
android:layout_below="@+id/reply_retweet_status"
|
||||
android:layout_toRightOf="@+id/profile_image"
|
||||
android:layout_toRightOf="@id/profile_image"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:paddingTop="@dimen/element_spacing_small">
|
||||
|
|
|
@ -66,8 +66,8 @@
|
|||
android:id="@+id/profile_type"
|
||||
android:layout_width="@dimen/icon_size_profile_type"
|
||||
android:layout_height="@dimen/icon_size_profile_type"
|
||||
android:layout_alignBottom="@+id/profile_image"
|
||||
android:layout_alignRight="@+id/profile_image"
|
||||
android:layout_alignBottom="@id/profile_image"
|
||||
android:layout_alignRight="@id/profile_image"
|
||||
android:scaleType="fitCenter"/>
|
||||
|
||||
<LinearLayout
|
||||
|
@ -76,7 +76,7 @@
|
|||
android:layout_centerVertical="true"
|
||||
android:layout_marginLeft="@dimen/element_spacing_normal"
|
||||
android:layout_toLeftOf="@+id/menu"
|
||||
android:layout_toRightOf="@+id/profile_image"
|
||||
android:layout_toRightOf="@id/profile_image"
|
||||
android:orientation="vertical">
|
||||
|
||||
|
||||
|
|
|
@ -46,10 +46,10 @@
|
|||
android:id="@+id/profile_type"
|
||||
android:layout_width="@dimen/icon_size_profile_type"
|
||||
android:layout_height="@dimen/icon_size_profile_type"
|
||||
android:layout_alignBottom="@+id/profile_image"
|
||||
android:layout_alignBottom="@id/profile_image"
|
||||
android:layout_marginRight="@dimen/element_spacing_minus_normal"
|
||||
android:layout_marginBottom="@dimen/element_spacing_minus_small"
|
||||
android:layout_alignRight="@+id/profile_image"
|
||||
android:layout_alignRight="@id/profile_image"
|
||||
android:scaleType="centerInside"/>
|
||||
|
||||
<LinearLayout
|
||||
|
@ -58,7 +58,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_alignTop="@id/profile_image"
|
||||
android:layout_marginLeft="@dimen/element_spacing_normal"
|
||||
android:layout_toRightOf="@+id/profile_image"
|
||||
android:layout_toRightOf="@id/profile_image"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<org.mariotaku.twidere.view.CardItemLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="@dimen/element_spacing_small"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
android:paddingRight="@dimen/element_spacing_normal"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
tools:context=".adapter.DirectMessagesEntryAdapter">
|
||||
<org.mariotaku.twidere.view.CardItemLinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="@dimen/element_spacing_small"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
android:paddingRight="@dimen/element_spacing_normal"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
tools:context=".adapter.DirectMessagesEntryAdapter">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
@ -1,97 +1,98 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<org.mariotaku.twidere.view.CardItemFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="@dimen/element_spacing_small"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
android:paddingRight="@dimen/element_spacing_normal"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
tools:context=".adapter.DirectMessagesEntryAdapter">
|
||||
<org.mariotaku.twidere.view.CardItemFrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="@dimen/element_spacing_small"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
android:paddingRight="@dimen/element_spacing_normal"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
tools:context=".adapter.DirectMessagesEntryAdapter">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="@dimen/element_spacing_normal">
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="@dimen/element_spacing_normal">
|
||||
|
||||
<org.mariotaku.twidere.view.ForegroundImageView
|
||||
android:id="@+id/profile_image"
|
||||
android:layout_width="@dimen/icon_size_card_list_item"
|
||||
android:layout_height="@dimen/icon_size_card_list_item"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_marginRight="@dimen/element_spacing_normal"
|
||||
android:contentDescription="@string/profile_image"
|
||||
android:scaleType="fitCenter"/>
|
||||
<org.mariotaku.twidere.view.CircularImageView
|
||||
android:id="@+id/profile_image"
|
||||
android:layout_width="@dimen/icon_size_card_list_item"
|
||||
android:layout_height="@dimen/icon_size_card_list_item"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_marginRight="@dimen/element_spacing_normal"
|
||||
android:contentDescription="@string/profile_image"
|
||||
android:scaleType="fitCenter"/>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/name_frame"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignWithParentIfMissing="true"
|
||||
android:layout_toLeftOf="@+id/time_frame"
|
||||
android:layout_toRightOf="@+id/profile_image">
|
||||
<FrameLayout
|
||||
android:id="@+id/name_frame"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignWithParentIfMissing="true"
|
||||
android:layout_toLeftOf="@id/time_frame"
|
||||
android:layout_toRightOf="@id/profile_image">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="left|center_vertical"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="left|center_vertical"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<org.mariotaku.twidere.view.HandleSpanClickTextView
|
||||
android:id="@+id/name"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textStyle="bold"/>
|
||||
<org.mariotaku.twidere.view.HandleSpanClickTextView
|
||||
android:id="@+id/name"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textStyle="bold"/>
|
||||
|
||||
<org.mariotaku.twidere.view.HandleSpanClickTextView
|
||||
android:id="@+id/screen_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="4dp"
|
||||
android:paddingRight="4dp"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="?android:attr/textColorSecondary"/>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
<org.mariotaku.twidere.view.HandleSpanClickTextView
|
||||
android:id="@+id/screen_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="4dp"
|
||||
android:paddingRight="4dp"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="?android:attr/textColorSecondary"/>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/time_frame"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignBottom="@+id/name_frame"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignTop="@+id/name_frame"
|
||||
android:layout_alignWithParentIfMissing="true"
|
||||
android:paddingLeft="@dimen/element_spacing_small">
|
||||
<FrameLayout
|
||||
android:id="@+id/time_frame"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignBottom="@id/name_frame"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignTop="@id/name_frame"
|
||||
android:layout_alignWithParentIfMissing="true"
|
||||
android:paddingLeft="@dimen/element_spacing_small">
|
||||
|
||||
<org.mariotaku.twidere.view.ShortTimeView
|
||||
android:id="@+id/time"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:drawablePadding="@dimen/element_spacing_small"
|
||||
android:singleLine="true"
|
||||
android:textColor="?android:attr/textColorSecondary"/>
|
||||
</FrameLayout>
|
||||
<org.mariotaku.twidere.view.ShortTimeView
|
||||
android:id="@+id/time"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:drawablePadding="@dimen/element_spacing_small"
|
||||
android:singleLine="true"
|
||||
android:textColor="?android:attr/textColorSecondary"/>
|
||||
</FrameLayout>
|
||||
|
||||
<org.mariotaku.twidere.view.HandleSpanClickTextView
|
||||
android:id="@+id/text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignLeft="@+id/name_frame"
|
||||
android:layout_alignRight="@+id/time_frame"
|
||||
android:layout_below="@+id/name_frame"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="?android:attr/textColorSecondary"/>
|
||||
</RelativeLayout>
|
||||
<org.mariotaku.twidere.view.HandleSpanClickTextView
|
||||
android:id="@+id/text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignLeft="@id/name_frame"
|
||||
android:layout_alignRight="@id/time_frame"
|
||||
android:layout_below="@id/name_frame"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="?android:attr/textColorSecondary"/>
|
||||
</RelativeLayout>
|
||||
|
||||
</org.mariotaku.twidere.view.CardItemFrameLayout>
|
|
@ -1,15 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<org.mariotaku.twidere.view.CardItemLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="@dimen/element_spacing_small"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
android:paddingRight="@dimen/element_spacing_normal"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
tools:context=".adapter.CursorStatusesAdapter">
|
||||
<org.mariotaku.twidere.view.CardItemLinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="@dimen/element_spacing_small"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
android:paddingRight="@dimen/element_spacing_normal"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
tools:context=".adapter.CursorStatusesAdapter">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
@ -85,7 +86,7 @@
|
|||
android:layout_height="@dimen/icon_size_card_list_item"
|
||||
android:layout_marginLeft="@dimen/element_spacing_normal"
|
||||
android:layout_weight="0"
|
||||
android:contentDescription="@string/my_profile_image"
|
||||
android:contentDescription="@string/your_profile_image"
|
||||
android:scaleType="fitCenter"/>
|
||||
</LinearLayout>
|
||||
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<org.mariotaku.twidere.view.CardItemFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="@dimen/element_spacing_small"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
android:paddingRight="@dimen/element_spacing_normal"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
tools:context=".adapter.CursorStatusesAdapter">
|
||||
<org.mariotaku.twidere.view.CardItemFrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="@dimen/element_spacing_small"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
android:paddingRight="@dimen/element_spacing_normal"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
tools:context=".adapter.CursorStatusesAdapter">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
|
@ -37,7 +38,7 @@
|
|||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_marginLeft="@dimen/element_spacing_normal"
|
||||
android:contentDescription="@string/my_profile_image"
|
||||
android:contentDescription="@string/your_profile_image"
|
||||
android:scaleType="fitCenter"/>
|
||||
|
||||
<FrameLayout
|
||||
|
@ -46,8 +47,8 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignWithParentIfMissing="true"
|
||||
android:layout_toLeftOf="@+id/time_frame"
|
||||
android:layout_toRightOf="@+id/profile_image">
|
||||
android:layout_toLeftOf="@id/time_frame"
|
||||
android:layout_toRightOf="@id/profile_image">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -82,10 +83,10 @@
|
|||
android:id="@+id/time_frame"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignBottom="@+id/name_frame"
|
||||
android:layout_alignTop="@+id/name_frame"
|
||||
android:layout_alignBottom="@id/name_frame"
|
||||
android:layout_alignTop="@id/name_frame"
|
||||
android:layout_alignWithParentIfMissing="true"
|
||||
android:layout_toLeftOf="@+id/my_profile_image"
|
||||
android:layout_toLeftOf="@id/my_profile_image"
|
||||
android:paddingLeft="@dimen/element_spacing_small">
|
||||
|
||||
<org.mariotaku.twidere.view.ShortTimeView
|
||||
|
@ -102,9 +103,9 @@
|
|||
android:id="@+id/image_preview_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignLeft="@+id/name_frame"
|
||||
android:layout_alignRight="@+id/time_frame"
|
||||
android:layout_below="@+id/name_frame"
|
||||
android:layout_alignLeft="@id/name_frame"
|
||||
android:layout_alignRight="@id/time_frame"
|
||||
android:layout_below="@id/name_frame"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
android:visibility="gone">
|
||||
|
||||
|
@ -139,9 +140,9 @@
|
|||
android:id="@+id/text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignLeft="@+id/name_frame"
|
||||
android:layout_alignRight="@+id/time_frame"
|
||||
android:layout_below="@+id/image_preview_container"
|
||||
android:layout_alignLeft="@id/name_frame"
|
||||
android:layout_alignRight="@id/time_frame"
|
||||
android:layout_below="@id/image_preview_container"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="?android:attr/textColorSecondary"/>
|
||||
|
@ -150,9 +151,9 @@
|
|||
android:id="@+id/reply_retweet_status"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignLeft="@+id/name_frame"
|
||||
android:layout_alignRight="@+id/time_frame"
|
||||
android:layout_below="@+id/text"
|
||||
android:layout_alignLeft="@id/name_frame"
|
||||
android:layout_alignRight="@id/time_frame"
|
||||
android:layout_below="@id/text"
|
||||
android:drawablePadding="4dp"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
android:singleLine="true"
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
android:paddingRight="@dimen/element_spacing_xlarge"
|
||||
android:paddingTop="@dimen/element_spacing_normal">
|
||||
|
||||
<ImageView
|
||||
<org.mariotaku.twidere.view.CircularImageView
|
||||
android:id="@+id/profile_image"
|
||||
android:layout_width="@dimen/icon_size_card_list_item"
|
||||
android:layout_height="@dimen/icon_size_card_list_item"
|
||||
|
|
|
@ -1,143 +1,144 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<org.mariotaku.twidere.view.CardItemFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="@dimen/element_spacing_small"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
android:paddingRight="@dimen/element_spacing_normal"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
tools:context=".adapter.ParcelableUsersAdapter">
|
||||
<org.mariotaku.twidere.view.CardItemFrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="@dimen/element_spacing_small"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
android:paddingRight="@dimen/element_spacing_normal"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
tools:context=".adapter.ParcelableUsersAdapter">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="@dimen/element_spacing_normal"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
android:paddingRight="@dimen/item_menu_card_padding_compact"
|
||||
android:paddingTop="@dimen/element_spacing_normal">
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="@dimen/element_spacing_normal"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
android:paddingRight="@dimen/item_menu_card_padding_compact"
|
||||
android:paddingTop="@dimen/element_spacing_normal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/profile_image"
|
||||
android:layout_width="@dimen/icon_size_card_list_item"
|
||||
android:layout_height="@dimen/icon_size_card_list_item"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_marginRight="@dimen/element_spacing_normal"
|
||||
android:contentDescription="@string/profile_image"
|
||||
android:scaleType="fitCenter"/>
|
||||
<org.mariotaku.twidere.view.CircularImageView
|
||||
android:id="@+id/profile_image"
|
||||
android:layout_width="@dimen/icon_size_card_list_item"
|
||||
android:layout_height="@dimen/icon_size_card_list_item"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_marginRight="@dimen/element_spacing_normal"
|
||||
android:contentDescription="@string/profile_image"
|
||||
android:scaleType="fitCenter"/>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/name_frame"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignWithParentIfMissing="true"
|
||||
android:layout_toRightOf="@+id/profile_image">
|
||||
<FrameLayout
|
||||
android:id="@+id/name_frame"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignWithParentIfMissing="true"
|
||||
android:layout_toRightOf="@id/profile_image">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="left|center_vertical"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="left|center_vertical"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<org.mariotaku.twidere.view.HandleSpanClickTextView
|
||||
android:id="@+id/name"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textStyle="bold"/>
|
||||
<org.mariotaku.twidere.view.HandleSpanClickTextView
|
||||
android:id="@+id/name"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="?android:attr/textColorPrimary"
|
||||
android:textStyle="bold"/>
|
||||
|
||||
<org.mariotaku.twidere.view.HandleSpanClickTextView
|
||||
android:id="@+id/screen_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="4dp"
|
||||
android:paddingRight="4dp"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="?android:attr/textColorSecondary"/>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
<org.mariotaku.twidere.view.HandleSpanClickTextView
|
||||
android:id="@+id/screen_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="4dp"
|
||||
android:paddingRight="4dp"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="?android:attr/textColorSecondary"/>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
|
||||
<org.mariotaku.twidere.view.themed.ThemedTextView
|
||||
android:id="@+id/description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignLeft="@+id/name_frame"
|
||||
android:layout_below="@+id/name_frame"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="?android:attr/textColorSecondary"/>
|
||||
<org.mariotaku.twidere.view.themed.ThemedTextView
|
||||
android:id="@+id/description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignLeft="@+id/name_frame"
|
||||
android:layout_below="@+id/name_frame"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="?android:attr/textColorSecondary"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/location"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignLeft="@+id/name_frame"
|
||||
android:layout_below="@+id/description"
|
||||
android:drawableLeft="@drawable/ic_indicator_location"
|
||||
android:drawablePadding="@dimen/element_spacing_small"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||
<TextView
|
||||
android:id="@+id/location"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignLeft="@+id/name_frame"
|
||||
android:layout_below="@+id/description"
|
||||
android:drawableLeft="@drawable/ic_indicator_location"
|
||||
android:drawablePadding="@dimen/element_spacing_small"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||
|
||||
<org.mariotaku.twidere.view.themed.ThemedTextView
|
||||
android:id="@+id/url"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignLeft="@+id/name_frame"
|
||||
android:layout_below="@+id/location"
|
||||
android:drawableLeft="@drawable/ic_indicator_web"
|
||||
android:drawablePadding="@dimen/element_spacing_small"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||
<org.mariotaku.twidere.view.themed.ThemedTextView
|
||||
android:id="@+id/url"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignLeft="@+id/name_frame"
|
||||
android:layout_below="@+id/location"
|
||||
android:drawableLeft="@drawable/ic_indicator_web"
|
||||
android:drawablePadding="@dimen/element_spacing_small"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignLeft="@+id/name_frame"
|
||||
android:layout_below="@+id/url"
|
||||
android:orientation="horizontal"
|
||||
android:paddingTop="@dimen/element_spacing_small">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignLeft="@+id/name_frame"
|
||||
android:layout_below="@+id/url"
|
||||
android:orientation="horizontal"
|
||||
android:paddingTop="@dimen/element_spacing_small">
|
||||
|
||||
<org.mariotaku.twidere.view.themed.ThemedTextView
|
||||
android:id="@+id/statuses_count"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:drawableLeft="@drawable/ic_indicator_twitter"
|
||||
android:drawablePadding="@dimen/element_spacing_small"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||
<org.mariotaku.twidere.view.themed.ThemedTextView
|
||||
android:id="@+id/statuses_count"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:drawableLeft="@drawable/ic_indicator_twitter"
|
||||
android:drawablePadding="@dimen/element_spacing_small"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||
|
||||
<org.mariotaku.twidere.view.themed.ThemedTextView
|
||||
android:id="@+id/followers_count"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:drawableLeft="@drawable/ic_indicator_followers"
|
||||
android:drawablePadding="@dimen/element_spacing_small"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||
<org.mariotaku.twidere.view.themed.ThemedTextView
|
||||
android:id="@+id/followers_count"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:drawableLeft="@drawable/ic_indicator_followers"
|
||||
android:drawablePadding="@dimen/element_spacing_small"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||
|
||||
<org.mariotaku.twidere.view.themed.ThemedTextView
|
||||
android:id="@+id/friends_count"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:drawableLeft="@drawable/ic_indicator_following"
|
||||
android:drawablePadding="@dimen/element_spacing_small"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
<org.mariotaku.twidere.view.themed.ThemedTextView
|
||||
android:id="@+id/friends_count"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:drawableLeft="@drawable/ic_indicator_following"
|
||||
android:drawablePadding="@dimen/element_spacing_small"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"/>
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
</org.mariotaku.twidere.view.CardItemFrameLayout>
|
|
@ -37,7 +37,7 @@
|
|||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignWithParentIfMissing="true"
|
||||
android:layout_toRightOf="@+id/profile_image">
|
||||
android:layout_toRightOf="@id/profile_image">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -72,8 +72,8 @@
|
|||
android:id="@+id/description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignLeft="@+id/name_frame"
|
||||
android:layout_below="@+id/name_frame"
|
||||
android:layout_alignLeft="@id/name_frame"
|
||||
android:layout_below="@id/name_frame"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="?android:attr/textColorSecondary"/>
|
||||
|
@ -81,8 +81,8 @@
|
|||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignLeft="@+id/description"
|
||||
android:layout_below="@+id/description"
|
||||
android:layout_alignLeft="@id/description"
|
||||
android:layout_below="@id/description"
|
||||
android:orientation="horizontal"
|
||||
android:paddingTop="@dimen/element_spacing_small">
|
||||
|
||||
|
|
|
@ -12,8 +12,7 @@
|
|||
android:layout_alignTop="@id/profile_container"
|
||||
android:alpha="0.33"
|
||||
android:contentDescription="@string/profile_banner"
|
||||
android:scaleType="centerCrop"
|
||||
android:src="@drawable/twidere_feature_graphic"/>
|
||||
android:scaleType="centerCrop"/>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/profile_container"
|
||||
|
@ -28,40 +27,54 @@
|
|||
android:id="@+id/profile_image"
|
||||
android:layout_width="@dimen/icon_size_profile_image_dashboard_current"
|
||||
android:layout_height="@dimen/icon_size_profile_image_dashboard_current"
|
||||
android:layout_marginBottom="@dimen/element_spacing_large"
|
||||
android:layout_marginTop="@dimen/element_spacing_large"
|
||||
android:src="@drawable/ic_launcher"/>
|
||||
android:layout_marginBottom="@dimen/element_spacing_mlarge"
|
||||
android:layout_marginTop="@dimen/element_spacing_mlarge"/>
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/account_selector"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignBottom="@+id/profile_image"
|
||||
android:layout_alignBottom="@id/profile_image"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignTop="@+id/profile_image"
|
||||
android:layout_toRightOf="@+id/profile_image"/>
|
||||
android:layout_alignTop="@id/profile_image"
|
||||
android:layout_marginBottom="@dimen/element_spacing_large"
|
||||
android:layout_toRightOf="@id/profile_image"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/profile_image"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:orientation="vertical">
|
||||
android:layout_below="@id/profile_image"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/name"
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:textAppearanceSmall"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textStyle="bold"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/screen_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:textAppearanceSmall"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<Switch
|
||||
android:id="@+id/toggle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:textAppearanceSmall"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textStyle="bold"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/screen_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:textAppearanceSmall"/>
|
||||
|
||||
android:layout_weight="0"/>
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
|
|
|
@ -58,18 +58,18 @@
|
|||
android:id="@+id/profile_type"
|
||||
android:layout_width="@dimen/icon_size_profile_type_detail"
|
||||
android:layout_height="@dimen/icon_size_profile_type_detail"
|
||||
android:layout_alignBottom="@+id/profile_image"
|
||||
android:layout_alignRight="@+id/profile_image"
|
||||
android:layout_alignBottom="@id/profile_image"
|
||||
android:layout_alignRight="@id/profile_image"
|
||||
android:scaleType="fitCenter"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignBottom="@+id/profile_image"
|
||||
android:layout_alignTop="@+id/profile_image"
|
||||
android:layout_alignBottom="@id/profile_image"
|
||||
android:layout_alignTop="@id/profile_image"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toLeftOf="@+id/follow_indicator"
|
||||
android:layout_toRightOf="@+id/profile_image"
|
||||
android:layout_toRightOf="@id/profile_image"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="vertical"
|
||||
android:paddingLeft="8dp"
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
android:padding="@dimen/element_spacing_normal"
|
||||
app:ignorePadding="true">
|
||||
|
||||
<org.mariotaku.twidere.view.ForegroundImageView
|
||||
<org.mariotaku.twidere.view.CircularImageView
|
||||
android:id="@+id/profile_image"
|
||||
android:layout_width="@dimen/icon_size_card_details"
|
||||
android:layout_height="@dimen/icon_size_card_details"
|
||||
|
@ -41,7 +41,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toRightOf="@+id/profile_image"
|
||||
android:layout_toRightOf="@id/profile_image"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="vertical"
|
||||
android:paddingLeft="@dimen/element_spacing_normal">
|
||||
|
|
|
@ -15,22 +15,22 @@
|
|||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/element_spacing_xsmall"
|
||||
android:layout_above="@+id/profile_name_container"
|
||||
android:layout_above="@id/profile_name_container"
|
||||
android:background="@drawable/shadow_top"/>
|
||||
|
||||
<!--<View-->
|
||||
<!--android:id="@+id/profile_layer_bottom"-->
|
||||
<!--android:layout_width="match_parent"-->
|
||||
<!--android:layout_height="match_parent"-->
|
||||
<!--android:layout_alignBottom="@+id/card"-->
|
||||
<!--android:layout_alignTop="@+id/profile_name_container"/>-->
|
||||
<!--android:layout_alignBottom="@id/card"-->
|
||||
<!--android:layout_alignTop="@id/profile_name_container"/>-->
|
||||
|
||||
<org.mariotaku.twidere.view.CircularImageView
|
||||
android:id="@+id/profile_image"
|
||||
style="?profileImageStyleLarge"
|
||||
android:layout_width="@dimen/icon_size_user_profile"
|
||||
android:layout_height="@dimen/icon_size_user_profile"
|
||||
android:layout_alignBottom="@+id/profile_name_container"
|
||||
android:layout_alignBottom="@id/profile_name_container"
|
||||
android:layout_marginLeft="@dimen/element_spacing_normal"
|
||||
android:contentDescription="@string/profile_image"
|
||||
android:src="@drawable/ic_profile_image_default"/>
|
||||
|
@ -40,16 +40,16 @@
|
|||
style="@style/Widget.ProfileType"
|
||||
android:layout_width="@dimen/icon_size_profile_type_user_profile"
|
||||
android:layout_height="@dimen/icon_size_profile_type_user_profile"
|
||||
android:layout_alignBottom="@+id/profile_image"
|
||||
android:layout_alignRight="@+id/profile_image"
|
||||
android:layout_alignBottom="@id/profile_image"
|
||||
android:layout_alignRight="@id/profile_image"
|
||||
android:scaleType="fitCenter"/>
|
||||
|
||||
<org.mariotaku.twidere.view.ColorLabelLinearLayout
|
||||
android:id="@+id/profile_name_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/profile_banner_space"
|
||||
android:layout_toRightOf="@+id/profile_image"
|
||||
android:layout_below="@id/profile_banner_space"
|
||||
android:layout_toRightOf="@id/profile_image"
|
||||
android:background="?android:selectableItemBackground"
|
||||
android:clipToPadding="false"
|
||||
android:orientation="vertical"
|
||||
|
@ -95,7 +95,7 @@
|
|||
android:id="@+id/card"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/profile_name_container"
|
||||
android:layout_below="@id/profile_name_container"
|
||||
android:layout_margin="@dimen/element_spacing_normal"
|
||||
app:cardBackgroundColor="?cardItemBackgroundColor"
|
||||
app:cardCornerRadius="@dimen/corner_radius_card"
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
android:layout_height="@dimen/icon_size_list_item"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toRightOf="@+id/drag_handle"
|
||||
android:contentDescription="@string/my_profile_image"
|
||||
android:contentDescription="@string/your_profile_image"
|
||||
android:scaleType="fitCenter"/>
|
||||
|
||||
<LinearLayout
|
||||
|
|
|
@ -36,36 +36,20 @@
|
|||
android:orientation="vertical"
|
||||
android:paddingLeft="@dimen/element_spacing_small">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/name_default_container"
|
||||
|
||||
<org.mariotaku.twidere.view.themed.ThemedTextView
|
||||
android:id="@+id/name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:textAppearanceMedium"
|
||||
android:textSize="@dimen/accounts_drawer_name_size"/>
|
||||
|
||||
<org.mariotaku.twidere.view.themed.ThemedTextView
|
||||
android:id="@+id/name"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:textAppearanceMedium"
|
||||
android:textSize="@dimen/accounts_drawer_name_size"/>
|
||||
|
||||
<org.mariotaku.twidere.view.themed.ThemedTextView
|
||||
android:id="@+id/default_indicator"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="4dp"
|
||||
android:singleLine="true"
|
||||
android:text="@string/default_account"
|
||||
android:textAppearance="?android:textAppearanceSmall"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:textSize="@dimen/accounts_drawer_default_indicator_size"/>
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/screen_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:visibility="gone"
|
||||
android:layout_height="wrap_content"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
|
|
|
@ -91,6 +91,6 @@
|
|||
|
||||
<dimen name="padding_profile_image_detail_page">@dimen/element_spacing_small</dimen>
|
||||
<dimen name="padding_profile_image_list_item">@dimen/element_spacing_small</dimen>
|
||||
<dimen name="icon_size_profile_image_dashboard_current">64dp</dimen>
|
||||
<dimen name="icon_size_profile_image_dashboard_current">72dp</dimen>
|
||||
|
||||
</resources>
|
|
@ -123,11 +123,11 @@
|
|||
<string name="load_item_limit">Load item limit</string>
|
||||
<string name="load_item_limit_summary">Set items limit per load.</string>
|
||||
<string name="load_more_automatically">Load more content automatically</string>
|
||||
<string name="load_more_automatically_summary">Load more content (e.g. photos, maps, statuses) automatically</string>
|
||||
<string name="load_more_automatically_summary">Load more content (e.g. photos, maps, tweets) automatically</string>
|
||||
<string name="quote">Quote</string>
|
||||
<string name="add_rule">Add rule</string>
|
||||
<string name="text_size">Text size</string>
|
||||
<string name="text_size_summary">Text size of statuses.</string>
|
||||
<string name="text_size_summary">Text size of tweets.</string>
|
||||
<string name="cannot_get_location">Can\'t get your location.</string>
|
||||
<string name="drafts">Drafts</string>
|
||||
<string name="description">Description</string>
|
||||
|
@ -194,9 +194,10 @@
|
|||
<string name="list_members">List members</string>
|
||||
<string name="list_subscribers">List subscribers</string>
|
||||
<string name="type_to_compose">Type to compose</string>
|
||||
<string name="lists">Lists</string>
|
||||
<string name="users_lists">User\'s lists</string>
|
||||
<string name="lists_following_user">Lists following this user</string>
|
||||
<string name="lists_following_me">Lists following me</string>
|
||||
<string name="lists_following_you">Lists following you</string>
|
||||
<string name="item_3_minutes">3 minutes</string>
|
||||
<string name="item_5_minutes">5 minutes</string>
|
||||
<string name="item_10_minutes">10 minutes</string>
|
||||
|
@ -387,7 +388,7 @@
|
|||
<string name="no_thanks">No, thanks</string>
|
||||
<string name="revoke_permissions">Revoke permissions</string>
|
||||
<string name="fast_scroll_thumb">Fast scroll thumb</string>
|
||||
<string name="indicate_my_status">Indicate my tweet</string>
|
||||
<string name="indicate_your_status">Indicate your tweet</string>
|
||||
<string name="default_ringtone">Default ringtone</string>
|
||||
<string name="phishing_link_warning">Phishing link warning</string>
|
||||
<string name="phishing_link_warning_summary">Warn you when are trying to open a possibly phishing link in a direct message.</string>
|
||||
|
@ -403,7 +404,7 @@
|
|||
<string name="quote_protected_status_notice">It\'s not recommended to quote protected tweets.</string>
|
||||
<string name="edit_draft">Edit draft</string>
|
||||
<string name="profile_image">Profile image</string>
|
||||
<string name="my_profile_image">My profile image</string>
|
||||
<string name="your_profile_image">Your profile image</string>
|
||||
<string name="mention_user">Mention <xliff:g id="user">%s</xliff:g></string>
|
||||
<string name="theme_color">Theme color</string>
|
||||
<string name="wrong_url_format">Wrong URL format.</string>
|
||||
|
@ -674,5 +675,6 @@
|
|||
<string name="function">Function</string>
|
||||
<string name="replies">Replies</string>
|
||||
<string name="profile_banner">Profile banner</string>
|
||||
<string name="profile">Profile</string>
|
||||
|
||||
</resources>
|
|
@ -72,7 +72,7 @@
|
|||
android:defaultValue="true"
|
||||
android:key="indicate_my_status"
|
||||
android:order="29"
|
||||
android:title="@string/indicate_my_status"/>
|
||||
android:title="@string/indicate_your_status"/>
|
||||
<org.mariotaku.twidere.preference.AutoFixCheckBoxPreference
|
||||
android:defaultValue="false"
|
||||
android:key="show_absolute_time"
|
||||
|
|
Loading…
Reference in New Issue