1
0
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:
Mariotaku Lee 2016-02-23 14:34:39 +08:00
parent 8b4277691e
commit 252b7ce2f2
19 changed files with 182 additions and 60 deletions

View File

@ -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";

View File

@ -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";

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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++) {

View File

@ -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();

View File

@ -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) {

View File

@ -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)

View File

@ -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));

View File

@ -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)));

View File

@ -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

View 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>

View File

@ -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>

View File

@ -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>