Java tutorial
/* * Tweetings - Twitter client for Android * * Copyright (C) 2012-2013 RBD Solutions Limited <apps@tweetings.net> * Copyright (C) 2012 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 com.dwdesign.tweetings.activity; import static com.dwdesign.tweetings.util.Utils.getAccountId; import static com.dwdesign.tweetings.util.Utils.getDefaultAccountId; import static com.dwdesign.tweetings.util.Utils.isMyAccount; import static com.dwdesign.tweetings.util.Utils.matchLinkId; import static com.dwdesign.tweetings.util.Utils.isNullOrEmpty; import static com.dwdesign.tweetings.util.Utils.parseInt; import static com.dwdesign.tweetings.util.Utils.parseLong; import com.dwdesign.tweetings.R; import com.dwdesign.tweetings.fragment.AccountsFragment; import com.dwdesign.tweetings.fragment.ConversationFragment; import com.dwdesign.tweetings.fragment.DMConversationFragment; import com.dwdesign.tweetings.fragment.HomeTimelineFragment; import com.dwdesign.tweetings.fragment.IncomingFriendshipsFragment; import com.dwdesign.tweetings.fragment.MentionsFragment; import com.dwdesign.tweetings.fragment.NativeMapFragment; import com.dwdesign.tweetings.fragment.NativeNearbyMapFragment; import com.dwdesign.tweetings.fragment.RetweetedToMeFragment; import com.dwdesign.tweetings.fragment.SavedSearchesListFragment; import com.dwdesign.tweetings.fragment.StatusFragment; import com.dwdesign.tweetings.fragment.TrendsFragment; import com.dwdesign.tweetings.fragment.UserBlocksListFragment; import com.dwdesign.tweetings.fragment.UserFavoritesFragment; import com.dwdesign.tweetings.fragment.UserFollowersFragment; import com.dwdesign.tweetings.fragment.UserFriendsFragment; import com.dwdesign.tweetings.fragment.UserListCreatedFragment; import com.dwdesign.tweetings.fragment.UserListDetailsFragment; import com.dwdesign.tweetings.fragment.UserListMembersFragment; import com.dwdesign.tweetings.fragment.UserListMembershipsFragment; import com.dwdesign.tweetings.fragment.UserListSubscribersFragment; import com.dwdesign.tweetings.fragment.UserListSubscriptionsFragment; import com.dwdesign.tweetings.fragment.UserListTimelineFragment; import com.dwdesign.tweetings.fragment.UserListTypesFragment; import com.dwdesign.tweetings.fragment.UserMentionsFragment; import com.dwdesign.tweetings.fragment.UserProfileFragment; import com.dwdesign.tweetings.fragment.UserRetweetedStatusFragment; import com.dwdesign.tweetings.fragment.UserTimelineFragment; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentManagerTrojan; import android.support.v4.app.FragmentTransaction; import android.view.MenuItem; import android.view.Window; public class LinkHandlerActivity extends MultiSelectActivity { private Fragment mFragment; @Override public void onCreate(final Bundle savedInstanceState) { requestSupportWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); super.onCreate(savedInstanceState); setSupportProgressBarIndeterminateVisibility(false); getSupportActionBar().setDisplayHomeAsUpEnabled(true); final Intent intent = getIntent(); final Uri data = intent.getData(); if (data != null) { if (setFragment(data)) { if (mFragment != null) { if (isDualPaneMode()) { showFragment(mFragment, true); } else { final FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.replace(R.id.content, mFragment); ft.commit(); } return; } else { finish(); } } } else { finish(); } } @Override public boolean onOptionsItemSelected(final MenuItem item) { switch (item.getItemId()) { case MENU_HOME: { final FragmentManager fm = getSupportFragmentManager(); if (isDualPaneMode()) { final int count = fm.getBackStackEntryCount(); if (count == 0) { onBackPressed(); } else if (!FragmentManagerTrojan.isStateSaved(fm)) { for (int i = 0; i < count; i++) { fm.popBackStackImmediate(); } setSupportProgressBarIndeterminateVisibility(false); } } else { onBackPressed(); } break; } } return super.onOptionsItemSelected(item); } @Override public void onStart() { if (isDualPaneMode() && mFragment != null) { final FragmentManager fm = getSupportFragmentManager(); final Fragment f = fm.findFragmentById(R.id.content); if (f != null) { final FragmentTransaction ft = fm.beginTransaction(); ft.remove(f); ft.commit(); } } super.onStart(); } private boolean setFragment(final Uri uri) { final Bundle extras = getIntent().getExtras(); Fragment fragment = null; if (uri != null) { final Bundle bundle = new Bundle(); if (extras != null) { bundle.putAll(extras); } switch (matchLinkId(uri)) { case LINK_ID_STATUS: { setTitle(R.string.view_status); fragment = new StatusFragment(); final String param_status_id = uri.getQueryParameter(QUERY_PARAM_STATUS_ID); bundle.putLong(INTENT_KEY_STATUS_ID, parseLong(param_status_id)); break; } case LINK_ID_USER: { setTitle(R.string.view_user_profile); fragment = new UserProfileFragment(); final String param_screen_name = uri.getQueryParameter(QUERY_PARAM_SCREEN_NAME); final String param_user_id = uri.getQueryParameter(QUERY_PARAM_USER_ID); if (!isNullOrEmpty(param_screen_name)) { bundle.putString(INTENT_KEY_SCREEN_NAME, param_screen_name); } if (!isNullOrEmpty(param_user_id)) { bundle.putLong(INTENT_KEY_USER_ID, parseLong(param_user_id)); } break; } case LINK_ID_USER_TIMELINE: { setTitle(R.string.tweets); fragment = new UserTimelineFragment(); final String param_screen_name = uri.getQueryParameter(QUERY_PARAM_SCREEN_NAME); final String param_user_id = uri.getQueryParameter(QUERY_PARAM_USER_ID); if (!isNullOrEmpty(param_screen_name)) { bundle.putString(INTENT_KEY_SCREEN_NAME, param_screen_name); } if (!isNullOrEmpty(param_user_id)) { bundle.putLong(INTENT_KEY_USER_ID, parseLong(param_user_id)); } break; } case LINK_ID_USER_FAVORITES: { setTitle(R.string.favorites); fragment = new UserFavoritesFragment(); final String param_screen_name = uri.getQueryParameter(QUERY_PARAM_SCREEN_NAME); final String param_user_id = uri.getQueryParameter(QUERY_PARAM_USER_ID); if (!isNullOrEmpty(param_screen_name)) { bundle.putString(INTENT_KEY_SCREEN_NAME, param_screen_name); } if (!isNullOrEmpty(param_user_id)) { bundle.putLong(INTENT_KEY_USER_ID, parseLong(param_user_id)); } break; } case LINK_ID_USER_FOLLOWERS: { setTitle(R.string.followers); fragment = new UserFollowersFragment(); final String param_screen_name = uri.getQueryParameter(QUERY_PARAM_SCREEN_NAME); final String param_user_id = uri.getQueryParameter(QUERY_PARAM_USER_ID); if (!isNullOrEmpty(param_screen_name)) { bundle.putString(INTENT_KEY_SCREEN_NAME, param_screen_name); } if (!isNullOrEmpty(param_user_id)) { bundle.putLong(INTENT_KEY_USER_ID, parseLong(param_user_id)); } break; } case LINK_ID_USER_FRIENDS: { setTitle(R.string.following); fragment = new UserFriendsFragment(); final String param_screen_name = uri.getQueryParameter(QUERY_PARAM_SCREEN_NAME); final String param_user_id = uri.getQueryParameter(QUERY_PARAM_USER_ID); if (!isNullOrEmpty(param_screen_name)) { bundle.putString(INTENT_KEY_SCREEN_NAME, param_screen_name); } if (!isNullOrEmpty(param_user_id)) { bundle.putLong(INTENT_KEY_USER_ID, parseLong(param_user_id)); } break; } case LINK_ID_USER_BLOCKS: { setTitle(R.string.blocked_users); fragment = new UserBlocksListFragment(); break; } case LINK_ID_CONVERSATION: { setTitle(R.string.view_conversation); fragment = new ConversationFragment(); final String param_status_id = uri.getQueryParameter(QUERY_PARAM_STATUS_ID); bundle.putLong(INTENT_KEY_STATUS_ID, parseLong(param_status_id)); break; } case LINK_ID_DIRECT_MESSAGES_CONVERSATION: { setTitle(R.string.direct_messages); fragment = new DMConversationFragment(); final String param_conversation_id = uri.getQueryParameter(QUERY_PARAM_CONVERSATION_ID); final String param_screen_name = uri.getQueryParameter(QUERY_PARAM_SCREEN_NAME); final long conversation_id = parseLong(param_conversation_id); if (conversation_id > 0) { bundle.putLong(INTENT_KEY_CONVERSATION_ID, conversation_id); } else if (param_screen_name != null) { bundle.putString(INTENT_KEY_SCREEN_NAME, param_screen_name); } break; } case LINK_ID_LIST_DETAILS: { setTitle(R.string.user_list); fragment = new UserListDetailsFragment(); final String param_screen_name = 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 param_list_name = uri.getQueryParameter(QUERY_PARAM_LIST_NAME); if (isNullOrEmpty(param_list_id) && (isNullOrEmpty(param_list_name) || isNullOrEmpty(param_screen_name) && isNullOrEmpty(param_user_id))) { finish(); return false; } bundle.putInt(INTENT_KEY_LIST_ID, parseInt(param_list_id)); bundle.putLong(INTENT_KEY_USER_ID, parseLong(param_user_id)); bundle.putString(INTENT_KEY_SCREEN_NAME, param_screen_name); bundle.putString(INTENT_KEY_LIST_NAME, param_list_name); break; } case LINK_ID_LIST_TYPES: { setTitle(R.string.user_list); fragment = new UserListTypesFragment(); final String param_screen_name = uri.getQueryParameter(QUERY_PARAM_SCREEN_NAME); final String param_user_id = uri.getQueryParameter(QUERY_PARAM_USER_ID); if (isNullOrEmpty(param_screen_name) && isNullOrEmpty(param_user_id)) { finish(); return false; } bundle.putLong(INTENT_KEY_USER_ID, parseLong(param_user_id)); bundle.putString(INTENT_KEY_SCREEN_NAME, param_screen_name); break; } case LINK_ID_LIST_TIMELINE: { setTitle(R.string.list_timeline); fragment = new UserListTimelineFragment(); final String param_screen_name = 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 param_list_name = uri.getQueryParameter(QUERY_PARAM_LIST_NAME); if (isNullOrEmpty(param_list_id) && (isNullOrEmpty(param_list_name) || isNullOrEmpty(param_screen_name) && isNullOrEmpty(param_user_id))) { finish(); return false; } bundle.putInt(INTENT_KEY_LIST_ID, parseInt(param_list_id)); bundle.putLong(INTENT_KEY_USER_ID, parseLong(param_user_id)); bundle.putString(INTENT_KEY_SCREEN_NAME, param_screen_name); bundle.putString(INTENT_KEY_LIST_NAME, param_list_name); break; } case LINK_ID_LIST_MEMBERS: { setTitle(R.string.list_members); fragment = new UserListMembersFragment(); final String param_screen_name = 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 param_list_name = uri.getQueryParameter(QUERY_PARAM_LIST_NAME); if (isNullOrEmpty(param_list_id) && (isNullOrEmpty(param_list_name) || isNullOrEmpty(param_screen_name) && isNullOrEmpty(param_user_id))) { finish(); return false; } bundle.putInt(INTENT_KEY_LIST_ID, parseInt(param_list_id)); bundle.putLong(INTENT_KEY_USER_ID, parseLong(param_user_id)); bundle.putString(INTENT_KEY_SCREEN_NAME, param_screen_name); bundle.putString(INTENT_KEY_LIST_NAME, param_list_name); break; } case LINK_ID_LIST_SUBSCRIBERS: { setTitle(R.string.list_subscribers); fragment = new UserListSubscribersFragment(); final String param_screen_name = 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 param_list_name = uri.getQueryParameter(QUERY_PARAM_LIST_NAME); if (isNullOrEmpty(param_list_id) && (isNullOrEmpty(param_list_name) || isNullOrEmpty(param_screen_name) && isNullOrEmpty(param_user_id))) { finish(); return false; } bundle.putInt(INTENT_KEY_LIST_ID, parseInt(param_list_id)); bundle.putLong(INTENT_KEY_USER_ID, parseLong(param_user_id)); bundle.putString(INTENT_KEY_SCREEN_NAME, param_screen_name); bundle.putString(INTENT_KEY_LIST_NAME, param_list_name); break; } case LINK_ID_LIST_CREATED: { setTitle(R.string.list_created_by_user); fragment = new UserListCreatedFragment(); final String param_screen_name = uri.getQueryParameter(QUERY_PARAM_SCREEN_NAME); final String param_user_id = uri.getQueryParameter(QUERY_PARAM_USER_ID); if (isNullOrEmpty(param_screen_name) && isNullOrEmpty(param_user_id)) { finish(); return false; } bundle.putLong(INTENT_KEY_USER_ID, parseLong(param_user_id)); bundle.putString(INTENT_KEY_SCREEN_NAME, param_screen_name); break; } case LINK_ID_LIST_SUBSCRIPTIONS: { setTitle(R.string.list_user_followed); fragment = new UserListSubscriptionsFragment(); final String param_screen_name = uri.getQueryParameter(QUERY_PARAM_SCREEN_NAME); final String param_user_id = uri.getQueryParameter(QUERY_PARAM_USER_ID); if (isNullOrEmpty(param_screen_name) && isNullOrEmpty(param_user_id)) { finish(); return false; } bundle.putLong(INTENT_KEY_USER_ID, parseLong(param_user_id)); bundle.putString(INTENT_KEY_SCREEN_NAME, param_screen_name); break; } case LINK_ID_LIST_MEMBERSHIPS: { setTitle(R.string.list_following_user); fragment = new UserListMembershipsFragment(); final String param_screen_name = uri.getQueryParameter(QUERY_PARAM_SCREEN_NAME); final String param_user_id = uri.getQueryParameter(QUERY_PARAM_USER_ID); if (isNullOrEmpty(param_screen_name) && isNullOrEmpty(param_user_id)) { finish(); return false; } bundle.putLong(INTENT_KEY_USER_ID, parseLong(param_user_id)); bundle.putString(INTENT_KEY_SCREEN_NAME, param_screen_name); break; } case LINK_ID_USERS_RETWEETED_STATUS: { setTitle(R.string.users_retweeted_this); fragment = new UserRetweetedStatusFragment(); final String param_status_id = uri.getQueryParameter(QUERY_PARAM_STATUS_ID); bundle.putLong(INTENT_KEY_STATUS_ID, parseLong(param_status_id)); break; } case LINK_ID_SAVED_SEARCHES: { setTitle(R.string.saved_searches); fragment = new SavedSearchesListFragment(); break; } case LINK_ID_RETWEETED_TO_ME: { setTitle(R.string.retweets_of_me); fragment = new RetweetedToMeFragment(); break; } case LINK_ID_NEARBY: { setTitle(R.string.nearby_tweets); fragment = new NativeNearbyMapFragment(); break; } case LINK_ID_TRENDS: { setTitle(R.string.trends); fragment = new TrendsFragment(); break; } case LINK_ID_USER_MENTIONS: { setTitle(R.string.user_mentions); fragment = new UserMentionsFragment(); final String param_screen_name = uri.getQueryParameter(QUERY_PARAM_SCREEN_NAME); if (!isNullOrEmpty(param_screen_name)) { bundle.putString(INTENT_KEY_SCREEN_NAME, param_screen_name); } else { finish(); return false; } break; } case LINK_ID_MENTIONS: { setTitle(R.string.mentions); fragment = new MentionsFragment(); break; } case LINK_ID_INCOMING_FRIENDSHIPS: { setTitle(R.string.incoming_friendships); fragment = new IncomingFriendshipsFragment(); break; } case LINK_ID_BUFFERAPP: { final String param_code = uri.getQueryParameter(QUERY_PARAM_CODE); setTitle(R.string.accounts); fragment = new AccountsFragment(); bundle.putString(INTENT_KEY_BUFFERAPP_CODE, param_code); break; } default: { break; } } final String param_account_id = uri.getQueryParameter(QUERY_PARAM_ACCOUNT_ID); if (param_account_id != null) { bundle.putLong(INTENT_KEY_ACCOUNT_ID, parseLong(param_account_id)); } else { final String param_account_name = uri.getQueryParameter(QUERY_PARAM_ACCOUNT_NAME); if (param_account_name != null) { bundle.putLong(INTENT_KEY_ACCOUNT_ID, getAccountId(this, param_account_name)); } else { final long account_id = getDefaultAccountId(this); if (isMyAccount(this, account_id)) { bundle.putLong(INTENT_KEY_ACCOUNT_ID, account_id); } else { finish(); return false; } } } if (fragment != null) { fragment.setArguments(bundle); } } mFragment = fragment; return true; } }