mirror of
https://github.com/TwidereProject/Twidere-Android
synced 2025-02-17 04:00:48 +01:00
added drawer entries for dms and interactions when there's no tab available.
This commit is contained in:
parent
8b4277691e
commit
252b7ce2f2
@ -81,6 +81,7 @@ public interface TwidereConstants extends SharedPreferenceConstants, IntentConst
|
||||
String AUTHORITY_STATUS = "status";
|
||||
String AUTHORITY_STATUSES = "statuses";
|
||||
String AUTHORITY_DIRECT_MESSAGES_CONVERSATION = "direct_messages_conversation";
|
||||
String AUTHORITY_DIRECT_MESSAGES = "direct_messages";
|
||||
String AUTHORITY_SEARCH = "search";
|
||||
String AUTHORITY_MAP = "map";
|
||||
String AUTHORITY_SCHEDULED_STATUSES = "scheduled_statuses";
|
||||
@ -96,15 +97,13 @@ public interface TwidereConstants extends SharedPreferenceConstants, IntentConst
|
||||
String AUTHORITY_SEARCH_TWEETS = "search_tweets";
|
||||
String AUTHORITY_TRENDS = "trends";
|
||||
String AUTHORITY_USER_MENTIONS = "user_mentions";
|
||||
String AUTHORITY_ACTIVITIES_ABOUT_ME = "activities_about_me";
|
||||
String AUTHORITY_ACTIVITIES_BY_FRIENDS = "activities_by_friends";
|
||||
String AUTHORITY_INCOMING_FRIENDSHIPS = "incoming_friendships";
|
||||
String AUTHORITY_STATUS_RETWEETERS = "status_retweeters";
|
||||
String AUTHORITY_STATUS_FAVORITERS = "status_favoriters";
|
||||
String AUTHORITY_STATUS_REPLIES = "status_replies";
|
||||
String AUTHORITY_RETWEETS_OF_ME = "retweets_of_me";
|
||||
String AUTHORITY_MUTES_USERS = "mutes_users";
|
||||
String AUTHORITY_NOTIFICATIONS = "notifications";
|
||||
String AUTHORITY_INTERACTIONS = "interactions";
|
||||
String AUTHORITY_ACCOUNTS = "accounts";
|
||||
String AUTHORITY_DRAFTS = "drafts";
|
||||
String AUTHORITY_FILTERS = "filters";
|
||||
|
@ -66,6 +66,8 @@ public interface Constants extends TwidereConstants {
|
||||
int LINK_ID_STATUS_REPLIES = 26;
|
||||
int LINK_ID_STATUS_FAVORITERS = 27;
|
||||
int LINK_ID_SEARCH = 28;
|
||||
int LINK_ID_DIRECT_MESSAGES = 29;
|
||||
int LINK_ID_INTERACTIONS = 30;
|
||||
int LINK_ID_MUTES_USERS = 41;
|
||||
int LINK_ID_MAP = 51;
|
||||
int LINK_ID_SCHEDULED_STATUSES = 61;
|
||||
@ -74,11 +76,6 @@ public interface Constants extends TwidereConstants {
|
||||
int LINK_ID_FILTERS = 103;
|
||||
int LINK_ID_PROFILE_EDITOR = 104;
|
||||
|
||||
String DIR_NAME_IMAGE_CACHE = "image_cache";
|
||||
String DIR_NAME_FULL_IMAGE_CACHE = "full_image_cache";
|
||||
|
||||
String FRAGMENT_TAG_API_UPGRADE_NOTICE = "api_upgrade_notice";
|
||||
|
||||
String TWIDERE_PREVIEW_NICKNAME = "Twidere";
|
||||
String TWIDERE_PREVIEW_NAME = "Twidere Project";
|
||||
String TWIDERE_PREVIEW_SCREEN_NAME = "TwidereProject";
|
||||
|
@ -59,7 +59,7 @@ import org.mariotaku.twidere.fragment.BaseFragment;
|
||||
import org.mariotaku.twidere.fragment.BasePreferenceFragment;
|
||||
import org.mariotaku.twidere.fragment.CustomTabsFragment;
|
||||
import org.mariotaku.twidere.fragment.ProgressDialogFragment;
|
||||
import org.mariotaku.twidere.fragment.support.ActivitiesAboutMeFragment;
|
||||
import org.mariotaku.twidere.fragment.support.InteractionsTimelineFragment;
|
||||
import org.mariotaku.twidere.fragment.support.DirectMessagesFragment;
|
||||
import org.mariotaku.twidere.fragment.support.HomeTimelineFragment;
|
||||
import org.mariotaku.twidere.model.CustomTabConfiguration;
|
||||
@ -673,7 +673,7 @@ public class SettingsWizardActivity extends BaseThemedActivity implements Consta
|
||||
private boolean wasConfigured(final List<SupportTabSpec> tabs) {
|
||||
for (final SupportTabSpec spec : tabs) {
|
||||
if (classEquals(spec.cls, HomeTimelineFragment.class)
|
||||
|| classEquals(spec.cls, ActivitiesAboutMeFragment.class)
|
||||
|| classEquals(spec.cls, InteractionsTimelineFragment.class)
|
||||
|| classEquals(spec.cls, DirectMessagesFragment.class)) return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -557,6 +557,10 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
|
||||
mTabIndicator.setDisplayBadge(mPreferences.getBoolean(KEY_UNREAD_COUNT, true));
|
||||
}
|
||||
|
||||
public List<SupportTabSpec> getTabs() {
|
||||
return mPagerAdapter.getTabs();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onNewIntent(final Intent intent) {
|
||||
final int tabPosition = handleIntent(intent, false);
|
||||
|
@ -519,6 +519,14 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System
|
||||
setTitle(getString(R.string.scheduled_statuses));
|
||||
break;
|
||||
}
|
||||
case LINK_ID_DIRECT_MESSAGES: {
|
||||
setTitle(getString(R.string.direct_messages));
|
||||
break;
|
||||
}
|
||||
case LINK_ID_INTERACTIONS: {
|
||||
setTitle(getString(R.string.interactions));
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
setTitle(getString(R.string.app_name));
|
||||
break;
|
||||
|
@ -48,7 +48,6 @@ import android.support.v4.app.LoaderManager.LoaderCallbacks;
|
||||
import android.support.v4.content.CursorLoader;
|
||||
import android.support.v4.content.Loader;
|
||||
import android.support.v4.content.res.ResourcesCompat;
|
||||
import android.support.v4.util.LongSparseArray;
|
||||
import android.support.v4.view.MenuItemCompat;
|
||||
import android.support.v7.view.SupportMenuInflater;
|
||||
import android.support.v7.widget.ActionMenuView;
|
||||
@ -77,6 +76,7 @@ import com.commonsware.cwac.merge.MergeAdapter;
|
||||
import com.nostra13.universalimageloader.core.assist.FailReason;
|
||||
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.mariotaku.sqliteqb.library.Expression;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.SettingsActivity;
|
||||
@ -85,8 +85,10 @@ import org.mariotaku.twidere.activity.support.ComposeActivity;
|
||||
import org.mariotaku.twidere.activity.support.HomeActivity;
|
||||
import org.mariotaku.twidere.activity.support.QuickSearchBarActivity;
|
||||
import org.mariotaku.twidere.adapter.ArrayAdapter;
|
||||
import org.mariotaku.twidere.annotation.CustomTabType;
|
||||
import org.mariotaku.twidere.menu.support.AccountToggleProvider;
|
||||
import org.mariotaku.twidere.model.ParcelableAccount;
|
||||
import org.mariotaku.twidere.model.SupportTabSpec;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
|
||||
import org.mariotaku.twidere.util.CompareUtils;
|
||||
import org.mariotaku.twidere.util.DataStoreUtils;
|
||||
@ -151,6 +153,7 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
||||
}
|
||||
};
|
||||
private boolean mSwitchAccountAnimationPlaying;
|
||||
private boolean mUseStarsForLikes;
|
||||
|
||||
@NonNull
|
||||
public long[] getActivatedAccountIds() {
|
||||
@ -278,16 +281,18 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
||||
break;
|
||||
}
|
||||
}
|
||||
mUseStarsForLikes = mPreferences.getBoolean(KEY_I_WANT_MY_STARS_BACK);
|
||||
|
||||
mAccountsAdapter.setAccounts(accounts);
|
||||
mAccountsAdapter.setSelectedAccountId(mPreferences.getLong(KEY_DEFAULT_ACCOUNT_ID, defaultId));
|
||||
|
||||
mAccountOptionsAdapter.setSelectedAccount(mAccountsAdapter.getSelectedAccount());
|
||||
|
||||
if (mAccountActionProvider != null) {
|
||||
mAccountActionProvider.setExclusive(false);
|
||||
mAccountActionProvider.setAccounts(accounts);
|
||||
}
|
||||
|
||||
initAccountActionsAdapter(accounts);
|
||||
updateAccountActions();
|
||||
updateAccountOptionsSeparatorLabel(null);
|
||||
updateDefaultAccountState();
|
||||
}
|
||||
@ -327,6 +332,14 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
||||
Utils.openUserLists(getActivity(), account.account_id, account.account_id, account.screen_name);
|
||||
break;
|
||||
}
|
||||
case R.id.messages: {
|
||||
Utils.openDirectMessages(getActivity(), account.account_id);
|
||||
break;
|
||||
}
|
||||
case R.id.interactions: {
|
||||
Utils.openInteractions(getActivity(), account.account_id);
|
||||
break;
|
||||
}
|
||||
case R.id.edit: {
|
||||
Utils.openProfileEditor(getActivity(), account.account_id);
|
||||
break;
|
||||
@ -386,10 +399,6 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
||||
}
|
||||
}
|
||||
|
||||
public void setStatusBarHeight(int height) {
|
||||
mAccountProfileContainer.setPadding(0, height, 0, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fitSystemWindows(Rect insets) {
|
||||
mSystemWindowsInsets.set(insets);
|
||||
@ -415,7 +424,7 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
||||
mListView.setItemsCanFocus(true);
|
||||
mAdapter = new MergeAdapter();
|
||||
final LayoutInflater inflater = getLayoutInflater(savedInstanceState);
|
||||
mAccountsAdapter = new AccountSelectorAdapter(context, inflater, this);
|
||||
mAccountsAdapter = new AccountSelectorAdapter(inflater, this);
|
||||
mAccountOptionsAdapter = new AccountOptionsAdapter(context);
|
||||
mAppMenuAdapter = new AppMenuAdapter(context);
|
||||
mAccountSelectorView = inflater.inflate(R.layout.header_drawer_account_selector, mListView, false);
|
||||
@ -506,11 +515,42 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
void initAccountActionsAdapter(ParcelableAccount[] accounts) {
|
||||
void updateAccountActions() {
|
||||
final HomeActivity activity = (HomeActivity) getActivity();
|
||||
if (activity == null) return;
|
||||
final List<SupportTabSpec> tabs = activity.getTabs();
|
||||
final ParcelableAccount account = mAccountsAdapter.getSelectedAccount();
|
||||
if (account == null) return;
|
||||
boolean hasDmTab = false, hasInteractionsTab = false;
|
||||
for (SupportTabSpec tab : tabs) {
|
||||
if (tab.type == null) continue;
|
||||
switch (tab.type) {
|
||||
case CustomTabType.DIRECT_MESSAGES: {
|
||||
if (!hasDmTab) {
|
||||
hasDmTab = hasAccountInTab(tab, account.account_id, account.is_activated);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CustomTabType.NOTIFICATIONS_TIMELINE: {
|
||||
if (!hasInteractionsTab) {
|
||||
hasInteractionsTab = hasAccountInTab(tab, account.account_id, account.is_activated);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
mAccountOptionsAdapter.clear();
|
||||
mAccountOptionsAdapter.add(new OptionItem(android.R.string.search_go, R.drawable.ic_action_search,
|
||||
R.id.search));
|
||||
if (mPreferences.getBoolean(KEY_I_WANT_MY_STARS_BACK)) {
|
||||
mAccountOptionsAdapter.add(new OptionItem(R.string.search,
|
||||
R.drawable.ic_action_search, R.id.search));
|
||||
if (!hasInteractionsTab) {
|
||||
mAccountOptionsAdapter.add(new OptionItem(R.string.interactions,
|
||||
R.drawable.ic_action_notification, R.id.interactions));
|
||||
}
|
||||
if (!hasDmTab) {
|
||||
mAccountOptionsAdapter.add(new OptionItem(R.string.direct_messages,
|
||||
R.drawable.ic_action_message, R.id.messages));
|
||||
}
|
||||
if (mUseStarsForLikes) {
|
||||
mAccountOptionsAdapter.add(new OptionItem(R.string.favorites, R.drawable.ic_action_star,
|
||||
R.id.favorites));
|
||||
} else {
|
||||
@ -520,6 +560,21 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
||||
mAccountOptionsAdapter.add(new OptionItem(R.string.lists, R.drawable.ic_action_list, R.id.lists));
|
||||
}
|
||||
|
||||
private boolean hasAccountInTab(SupportTabSpec tab, long accountId, boolean isActivated) {
|
||||
if (tab.args == null) return false;
|
||||
long[] accountIds = tab.args.getLongArray(EXTRA_ACCOUNT_IDS);
|
||||
if (ArrayUtils.isEmpty(accountIds)) {
|
||||
long tabAccountId = tab.args.getLong(EXTRA_ACCOUNT_ID);
|
||||
// Single account tab, return true if is current account
|
||||
if (tabAccountId == accountId) return true;
|
||||
// Check activated account if empty
|
||||
return isActivated;
|
||||
} else if (ArrayUtils.contains(accountIds, accountId)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void closeAccountsDrawer() {
|
||||
final Activity activity = getActivity();
|
||||
if (activity instanceof HomeActivity) {
|
||||
@ -592,6 +647,7 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
||||
clickedDrawable = clickedImageView.getDrawable();
|
||||
clickedColors = clickedImageView.getBorderColors();
|
||||
final ParcelableAccount oldSelectedAccount = mAccountsAdapter.getSelectedAccount();
|
||||
if (oldSelectedAccount == null) return;
|
||||
mMediaLoader.displayDashboardProfileImage(clickedImageView,
|
||||
oldSelectedAccount.profile_image_url, profileDrawable);
|
||||
// mMediaLoader.displayDashboardProfileImage(profileImageView,
|
||||
@ -621,6 +677,7 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
||||
editor.apply();
|
||||
mAccountsAdapter.setSelectedAccountId(account.account_id);
|
||||
mAccountOptionsAdapter.setSelectedAccount(account);
|
||||
updateAccountActions();
|
||||
updateAccountOptionsSeparatorLabel(clickedDrawable);
|
||||
snapshotView.setVisibility(View.INVISIBLE);
|
||||
snapshotView.setImageDrawable(null);
|
||||
@ -634,6 +691,7 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
||||
}
|
||||
});
|
||||
set.start();
|
||||
|
||||
}
|
||||
|
||||
private void updateAccountOptionsSeparatorLabel(Drawable profileImageSnapshot) {
|
||||
@ -642,7 +700,7 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
||||
return;
|
||||
}
|
||||
mAccountProfileNameView.setText(account.name);
|
||||
mAccountProfileScreenNameView.setText("@" + account.screen_name);
|
||||
mAccountProfileScreenNameView.setText(String.format("@%s", account.screen_name));
|
||||
mMediaLoader.displayDashboardProfileImage(mAccountProfileImageView,
|
||||
account.profile_image_url, profileImageSnapshot);
|
||||
mAccountProfileImageView.setBorderColors(account.color);
|
||||
@ -722,10 +780,9 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
||||
private final LayoutInflater mInflater;
|
||||
private final MediaLoaderWrapper mImageLoader;
|
||||
private final AccountsDashboardFragment mFragment;
|
||||
private final LongSparseArray<Long> positionMap = new LongSparseArray<>();
|
||||
private ParcelableAccount[] mInternalAccounts;
|
||||
|
||||
AccountSelectorAdapter(Context context, LayoutInflater inflater, AccountsDashboardFragment fragment) {
|
||||
AccountSelectorAdapter(LayoutInflater inflater, AccountsDashboardFragment fragment) {
|
||||
mInflater = inflater;
|
||||
mImageLoader = fragment.mMediaLoader;
|
||||
mFragment = fragment;
|
||||
@ -820,6 +877,10 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
||||
mFragment.onAccountSelected(holder, getAdapterAccount(holder.getAdapterPosition()));
|
||||
}
|
||||
|
||||
public ParcelableAccount[] getAccounts() {
|
||||
return mInternalAccounts;
|
||||
}
|
||||
|
||||
private void swap(long fromId, long toId) {
|
||||
int fromIdx = -1, toIdx = -1;
|
||||
for (int i = 0, j = mInternalAccounts.length; i < j; i++) {
|
||||
|
@ -35,6 +35,8 @@ import android.support.v4.util.LongSparseArray;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
|
||||
@ -46,11 +48,13 @@ import org.mariotaku.sqliteqb.library.RawItemArray;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.iface.IControlBarActivity;
|
||||
import org.mariotaku.twidere.activity.support.HomeActivity;
|
||||
import org.mariotaku.twidere.activity.support.LinkHandlerActivity;
|
||||
import org.mariotaku.twidere.adapter.MessageEntriesAdapter;
|
||||
import org.mariotaku.twidere.adapter.MessageEntriesAdapter.DirectMessageEntry;
|
||||
import org.mariotaku.twidere.adapter.MessageEntriesAdapter.MessageEntriesAdapterListener;
|
||||
import org.mariotaku.twidere.adapter.decorator.DividerItemDecoration;
|
||||
import org.mariotaku.twidere.adapter.iface.ILoadMoreSupportAdapter.IndicatorPosition;
|
||||
import org.mariotaku.twidere.model.message.GetMessagesTaskEvent;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.Accounts;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages;
|
||||
import org.mariotaku.twidere.provider.TwidereDataStore.DirectMessages.Inbox;
|
||||
@ -65,14 +69,11 @@ import org.mariotaku.twidere.util.KeyboardShortcutsHandler.KeyboardShortcutCallb
|
||||
import org.mariotaku.twidere.util.RecyclerViewNavigationHelper;
|
||||
import org.mariotaku.twidere.util.Utils;
|
||||
import org.mariotaku.twidere.util.content.SupportFragmentReloadCursorObserver;
|
||||
import org.mariotaku.twidere.model.message.GetMessagesTaskEvent;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.mariotaku.twidere.util.Utils.openMessageConversation;
|
||||
|
||||
public class DirectMessagesFragment extends AbsContentListRecyclerViewFragment<MessageEntriesAdapter>
|
||||
implements LoaderCallbacks<Cursor>, MessageEntriesAdapterListener, KeyboardShortcutCallback {
|
||||
|
||||
@ -254,10 +255,15 @@ public class DirectMessagesFragment extends AbsContentListRecyclerViewFragment<M
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
inflater.inflate(R.menu.menu_direct_messages, menu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(final Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
setHasOptionsMenu(getActivity() instanceof LinkHandlerActivity);
|
||||
final View view = getView();
|
||||
assert view != null;
|
||||
final Context viewContext = view.getContext();
|
||||
@ -304,13 +310,22 @@ public class DirectMessagesFragment extends AbsContentListRecyclerViewFragment<M
|
||||
public boolean onOptionsItemSelected(final MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.compose: {
|
||||
openMessageConversation(getActivity(), -1, -1);
|
||||
openNewMessageConversation();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
public void openNewMessageConversation() {
|
||||
final long[] accountIds = getAccountIds();
|
||||
if (accountIds.length == 1) {
|
||||
Utils.openMessageConversation(getActivity(), accountIds[0], -1);
|
||||
} else {
|
||||
Utils.openMessageConversation(getActivity(), -1, -1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUserVisibleHint(final boolean isVisibleToUser) {
|
||||
super.setUserVisibleHint(isVisibleToUser);
|
||||
@ -323,11 +338,6 @@ public class DirectMessagesFragment extends AbsContentListRecyclerViewFragment<M
|
||||
}
|
||||
}
|
||||
|
||||
protected long getAccountId() {
|
||||
final Bundle args = getArguments();
|
||||
return args != null ? args.getLong(EXTRA_ACCOUNT_ID, -1) : -1;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
protected long[] getAccountIds() {
|
||||
final Bundle args = getArguments();
|
||||
|
@ -35,7 +35,7 @@ import org.mariotaku.twidere.util.ErrorInfoStore;
|
||||
|
||||
import edu.tsinghua.hotmobi.model.TimelineType;
|
||||
|
||||
public class ActivitiesAboutMeFragment extends CursorActivitiesFragment {
|
||||
public class InteractionsTimelineFragment extends CursorActivitiesFragment {
|
||||
|
||||
@Override
|
||||
public boolean getActivities(long[] accountIds, long[] maxIds, long[] sinceIds) {
|
@ -40,6 +40,7 @@ public class SupportTabSpec implements Comparable<SupportTabSpec>, TwidereConsta
|
||||
@Nullable
|
||||
public final String type;
|
||||
public final Class<? extends Fragment> cls;
|
||||
@Nullable
|
||||
public final Bundle args;
|
||||
public final int position;
|
||||
public final String tag;
|
||||
@ -50,7 +51,7 @@ public class SupportTabSpec implements Comparable<SupportTabSpec>, TwidereConsta
|
||||
}
|
||||
|
||||
public SupportTabSpec(final String name, final Object icon, @CustomTabType @Nullable final String type,
|
||||
final Class<? extends Fragment> cls, final Bundle args, final int position,
|
||||
final Class<? extends Fragment> cls, @Nullable final Bundle args, final int position,
|
||||
final String tag) {
|
||||
if (cls == null) throw new IllegalArgumentException("Fragment cannot be null!");
|
||||
if (name == null && icon == null)
|
||||
|
@ -202,7 +202,7 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
||||
intent.setAction(BROADCAST_NOTIFICATION_DELETED);
|
||||
final Uri.Builder linkBuilder = new Uri.Builder();
|
||||
linkBuilder.scheme(SCHEME_TWIDERE);
|
||||
linkBuilder.authority(AUTHORITY_NOTIFICATIONS);
|
||||
linkBuilder.authority(AUTHORITY_INTERACTIONS);
|
||||
linkBuilder.appendPath(type);
|
||||
linkBuilder.appendQueryParameter(QUERY_PARAM_ACCOUNT_ID, String.valueOf(accountId));
|
||||
linkBuilder.appendQueryParameter(QUERY_PARAM_READ_POSITION, String.valueOf(position));
|
||||
@ -222,7 +222,7 @@ public final class TwidereDataProvider extends ContentProvider implements Consta
|
||||
final Intent intent = new Intent(context, NotificationReceiver.class);
|
||||
final Uri.Builder linkBuilder = new Uri.Builder();
|
||||
linkBuilder.scheme(SCHEME_TWIDERE);
|
||||
linkBuilder.authority(AUTHORITY_NOTIFICATIONS);
|
||||
linkBuilder.authority(AUTHORITY_INTERACTIONS);
|
||||
linkBuilder.appendPath(notificationType);
|
||||
linkBuilder.appendQueryParameter(QUERY_PARAM_ACCOUNT_ID, String.valueOf(accountId));
|
||||
linkBuilder.appendQueryParameter(QUERY_PARAM_READ_POSITIONS, StringLongPair.toString(positions));
|
||||
|
@ -38,10 +38,9 @@ import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.annotation.CustomTabType;
|
||||
import org.mariotaku.twidere.annotation.ReadPositionTag;
|
||||
import org.mariotaku.twidere.fragment.support.ActivitiesAboutMeFragment;
|
||||
import org.mariotaku.twidere.fragment.support.ActivitiesByFriendsFragment;
|
||||
import org.mariotaku.twidere.fragment.support.DirectMessagesFragment;
|
||||
import org.mariotaku.twidere.fragment.support.HomeTimelineFragment;
|
||||
import org.mariotaku.twidere.fragment.support.InteractionsTimelineFragment;
|
||||
import org.mariotaku.twidere.fragment.support.InvalidTabFragment;
|
||||
import org.mariotaku.twidere.fragment.support.RetweetsOfMeFragment;
|
||||
import org.mariotaku.twidere.fragment.support.StatusesSearchFragment;
|
||||
@ -73,7 +72,7 @@ public class CustomTabUtils implements Constants {
|
||||
CustomTabConfiguration.ACCOUNT_OPTIONAL, CustomTabConfiguration.FIELD_TYPE_NONE, 0, false));
|
||||
|
||||
CUSTOM_TABS_CONFIGURATION_MAP.put(CustomTabType.NOTIFICATIONS_TIMELINE, new CustomTabConfiguration(
|
||||
ActivitiesAboutMeFragment.class, R.string.notifications, R.drawable.ic_action_notification,
|
||||
InteractionsTimelineFragment.class, R.string.interactions, R.drawable.ic_action_notification,
|
||||
CustomTabConfiguration.ACCOUNT_OPTIONAL, CustomTabConfiguration.FIELD_TYPE_NONE, 1, false,
|
||||
ExtraConfiguration.newBoolean(EXTRA_MY_FOLLOWING_ONLY, R.string.following_only, false),
|
||||
ExtraConfiguration.newBoolean(EXTRA_MENTIONS_ONLY, R.string.mentions_only, false)));
|
||||
|
@ -138,8 +138,10 @@ import org.mariotaku.twidere.api.twitter.model.UserMentionEntity;
|
||||
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowsInsetsCallback;
|
||||
import org.mariotaku.twidere.fragment.support.AbsStatusesFragment.DefaultOnLikedListener;
|
||||
import org.mariotaku.twidere.fragment.support.AccountsManagerFragment;
|
||||
import org.mariotaku.twidere.fragment.support.InteractionsTimelineFragment;
|
||||
import org.mariotaku.twidere.fragment.support.AddStatusFilterDialogFragment;
|
||||
import org.mariotaku.twidere.fragment.support.DestroyStatusDialogFragment;
|
||||
import org.mariotaku.twidere.fragment.support.DirectMessagesFragment;
|
||||
import org.mariotaku.twidere.fragment.support.DraftsFragment;
|
||||
import org.mariotaku.twidere.fragment.support.FiltersFragment;
|
||||
import org.mariotaku.twidere.fragment.support.IncomingFriendshipsFragment;
|
||||
@ -255,6 +257,8 @@ public final class Utils implements Constants {
|
||||
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_USER_BLOCKS, null, LINK_ID_USER_BLOCKS);
|
||||
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_DIRECT_MESSAGES_CONVERSATION, null,
|
||||
LINK_ID_DIRECT_MESSAGES_CONVERSATION);
|
||||
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_DIRECT_MESSAGES, null, LINK_ID_DIRECT_MESSAGES);
|
||||
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_INTERACTIONS, null, LINK_ID_INTERACTIONS);
|
||||
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_USER_LIST, null, LINK_ID_USER_LIST);
|
||||
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_USER_LIST_TIMELINE, null, LINK_ID_USER_LIST_TIMELINE);
|
||||
LINK_HANDLER_URI_MATCHER.addURI(AUTHORITY_USER_LIST_MEMBERS, null, LINK_ID_USER_LIST_MEMBERS);
|
||||
@ -615,6 +619,14 @@ public final class Utils implements Constants {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case LINK_ID_DIRECT_MESSAGES: {
|
||||
fragment = new DirectMessagesFragment();
|
||||
break;
|
||||
}
|
||||
case LINK_ID_INTERACTIONS: {
|
||||
fragment = new InteractionsTimelineFragment();
|
||||
break;
|
||||
}
|
||||
case LINK_ID_USER_LIST: {
|
||||
fragment = new UserListFragment();
|
||||
final String paramScreenName = uri.getQueryParameter(QUERY_PARAM_SCREEN_NAME);
|
||||
@ -2026,6 +2038,26 @@ public final class Utils implements Constants {
|
||||
activity.startActivity(intent);
|
||||
}
|
||||
|
||||
public static void openDirectMessages(final Context context, final long accountId) {
|
||||
if (context == null) return;
|
||||
final Uri.Builder builder = new Uri.Builder();
|
||||
builder.scheme(SCHEME_TWIDERE);
|
||||
builder.authority(AUTHORITY_DIRECT_MESSAGES);
|
||||
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_ID, String.valueOf(accountId));
|
||||
final Intent intent = new Intent(Intent.ACTION_VIEW, builder.build());
|
||||
context.startActivity(intent);
|
||||
}
|
||||
|
||||
public static void openInteractions(final Context context, final long accountId) {
|
||||
if (context == null) return;
|
||||
final Uri.Builder builder = new Uri.Builder();
|
||||
builder.scheme(SCHEME_TWIDERE);
|
||||
builder.authority(AUTHORITY_INTERACTIONS);
|
||||
builder.appendQueryParameter(QUERY_PARAM_ACCOUNT_ID, String.valueOf(accountId));
|
||||
final Intent intent = new Intent(Intent.ACTION_VIEW, builder.build());
|
||||
context.startActivity(intent);
|
||||
}
|
||||
|
||||
public static void openUserListSubscribers(final Activity activity, final long accountId, final long listId,
|
||||
final long userId, final String screenName, final String listName) {
|
||||
if (activity == null) return;
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 293 B |
Binary file not shown.
Before Width: | Height: | Size: 255 B |
Binary file not shown.
Before Width: | Height: | Size: 303 B |
Binary file not shown.
Before Width: | Height: | Size: 371 B |
9
twidere/src/main/res/menu/menu_direct_messages.xml
Normal file
9
twidere/src/main/res/menu/menu_direct_messages.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@id/compose"
|
||||
android:icon="@drawable/ic_action_add"
|
||||
android:title="@string/new_direct_message"
|
||||
app:showAsAction="always"/>
|
||||
</menu>
|
@ -1,78 +1,78 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item
|
||||
android:id="@id/mention"
|
||||
android:icon="@drawable/ic_action_at"
|
||||
android:title="@string/mention_this_user"
|
||||
app:showAsAction="ifRoom" />
|
||||
app:showAsAction="ifRoom"/>
|
||||
<item
|
||||
android:id="@id/send_direct_message"
|
||||
android:icon="@drawable/ic_action_new_message"
|
||||
android:icon="@drawable/ic_action_message"
|
||||
android:title="@string/send_direct_message"
|
||||
android:visible="false" />
|
||||
android:visible="false"/>
|
||||
<item
|
||||
android:id="@id/add_to_list"
|
||||
android:icon="@drawable/ic_action_add_to_list"
|
||||
android:title="@string/add_to_list" />
|
||||
android:title="@string/add_to_list"/>
|
||||
<item
|
||||
android:id="@id/set_color"
|
||||
android:icon="@drawable/ic_action_color_palette"
|
||||
android:title="@string/set_color" />
|
||||
android:title="@string/set_color"/>
|
||||
<item
|
||||
android:id="@id/set_nickname"
|
||||
android:icon="@drawable/ic_action_edit"
|
||||
android:title="@string/set_nickname" />
|
||||
android:title="@string/set_nickname"/>
|
||||
<item
|
||||
android:id="@id/add_to_filter"
|
||||
android:icon="@drawable/ic_action_speaker_muted"
|
||||
android:title="@string/add_to_filter" />
|
||||
android:title="@string/add_to_filter"/>
|
||||
<item
|
||||
android:id="@+id/incoming_friendships"
|
||||
android:icon="@drawable/ic_action_profile"
|
||||
android:title="@string/incoming_friendships" />
|
||||
android:title="@string/incoming_friendships"/>
|
||||
<item
|
||||
android:id="@+id/user_mentions"
|
||||
android:icon="@drawable/ic_action_at"
|
||||
android:title="@string/user_mentions" />
|
||||
android:title="@string/user_mentions"/>
|
||||
<item
|
||||
android:id="@+id/saved_searches"
|
||||
android:icon="@drawable/ic_action_search"
|
||||
android:title="@string/saved_searches" />
|
||||
android:title="@string/saved_searches"/>
|
||||
<item
|
||||
android:id="@+id/scheduled_statuses"
|
||||
android:icon="@drawable/ic_action_time"
|
||||
android:title="@string/scheduled_statuses" />
|
||||
android:title="@string/scheduled_statuses"/>
|
||||
<item
|
||||
android:id="@id/enable_retweets"
|
||||
android:checkable="true"
|
||||
android:icon="@drawable/ic_action_retweet"
|
||||
android:title="@string/enable_retweets" />
|
||||
android:title="@string/enable_retweets"/>
|
||||
<item
|
||||
android:id="@id/mute_user"
|
||||
android:checkable="true"
|
||||
android:icon="@drawable/ic_action_mic_muted"
|
||||
android:title="@string/twitter_mute_user" />
|
||||
android:title="@string/twitter_mute_user"/>
|
||||
<item
|
||||
android:id="@id/block"
|
||||
android:icon="@drawable/ic_action_block"
|
||||
android:title="@string/block" />
|
||||
android:title="@string/block"/>
|
||||
<item
|
||||
android:id="@id/report_spam"
|
||||
android:icon="@drawable/ic_action_warning"
|
||||
android:title="@string/report_for_spam" />
|
||||
android:title="@string/report_for_spam"/>
|
||||
<item
|
||||
android:id="@+id/muted_users"
|
||||
android:icon="@drawable/ic_action_mic_muted"
|
||||
android:title="@string/twitter_muted_users" />
|
||||
android:title="@string/twitter_muted_users"/>
|
||||
<item
|
||||
android:id="@+id/blocked_users"
|
||||
android:icon="@drawable/ic_action_block"
|
||||
android:title="@string/blocked_users" />
|
||||
android:title="@string/blocked_users"/>
|
||||
<item
|
||||
android:id="@id/open_with_account"
|
||||
android:icon="@drawable/ic_action_accounts"
|
||||
android:title="@string/open_with_account" />
|
||||
android:title="@string/open_with_account"/>
|
||||
|
||||
</menu>
|
@ -78,4 +78,6 @@
|
||||
<item name="edit_media" type="id"/>
|
||||
<item name="reset" type="id"/>
|
||||
<item name="info" type="id"/>
|
||||
<item name="messages" type="id"/>
|
||||
<item name="interactions" type="id"/>
|
||||
</resources>
|
Loading…
x
Reference in New Issue
Block a user