package info.jiangpeng.activity; import android.app.ActionBar; import android.app.Activity; import android.app.Fragment; import android.app.FragmentTransaction; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import info.jiangpeng.R; import info.jiangpeng.fragment.ContactsFragment; import info.jiangpeng.fragment.UserBooksFragment; import info.jiangpeng.helper.RequestParams; import info.jiangpeng.helper.UserParser; import info.jiangpeng.model.NullUser; import info.jiangpeng.model.User; import info.jiangpeng.sign.CustomOAuthConsumer; import info.jiangpeng.sign.OAuthFactory; import oauth.signpost.basic.DefaultOAuthConsumer; import oauth.signpost.exception.OAuthCommunicationException; import oauth.signpost.exception.OAuthExpectationFailedException; import oauth.signpost.exception.OAuthMessageSignerException; import oauth.signpost.exception.OAuthNotAuthorizedException; import org.json.JSONException; import java.io.IOException; public class MainActivity extends Activity { public static String accessToken; public static String accessTokenSecret; private static String requestToken; private static String requestTokenSecret; public static final String USER_INFO_URL = "http://api.douban.com/people/%40me?alt=json"; public static final String CALLBACK_URL = "vtbapp-doudou:///"; private UserBooksFragment userBooksFragment; private Fragment searchFragment; private FragmentTransaction ft; private ContactsFragment contactsFragment; private User user = new NullUser(); private RequestParams requestParams; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); ft = getFragmentManager().beginTransaction(); searchFragment = getFragmentManager().findFragmentById(R.id.search_fragment); userBooksFragment = (UserBooksFragment) getFragmentManager().findFragmentById(R.id.my_books_fragment); contactsFragment = (ContactsFragment) getFragmentManager().findFragmentById(R.id.contacts_fragment); ft.hide(searchFragment); ft.hide(userBooksFragment); ft.hide(contactsFragment); ft.commit(); } @Override public void onResume() { super.onResume(); ft = getFragmentManager().beginTransaction(); ft.hide(searchFragment); ft.hide(contactsFragment); ft.hide(userBooksFragment); ft.commit(); getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); try { updateUserInfo(); } catch (Exception e) { e.printStackTrace(); } } public void updateUserInfo() throws OAuthExpectationFailedException, OAuthMessageSignerException, OAuthCommunicationException, OAuthNotAuthorizedException, IOException, JSONException { new UpdateUserIntoTask().execute(); } public void setRequestParams(RequestParams requestParams) { userBooksFragment.setRequestParams(requestParams); } private class UpdateUserIntoTask extends AsyncTask<String, Integer, User> { @Override protected User doInBackground(String... strings) { try { user = retrieveUserInfo(); } catch (Exception e) { e.printStackTrace(); } return user; } @Override protected void onPostExecute(User user) { requestParams = new RequestParams(); requestParams.setUserId(user.getId()); requestParams.setUserName(user.getName()); requestParams.setAccessToken(accessToken); requestParams.setAccessTokenSecret(accessTokenSecret); userBooksFragment.setRequestParams(requestParams); contactsFragment.setRequestParams(requestParams); // contactsFragment.searchContacts(); } private User retrieveUserInfo() throws OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException, JSONException, IOException { DefaultOAuthConsumer consumer = OAuthFactory.createConsumer(); retrieveAccessToken(consumer); CustomOAuthConsumer consumerSignedIn = OAuthFactory.createConsumer(consumer.getToken(), consumer.getTokenSecret()); return new UserParser().parse(consumerSignedIn.executeAfterSignIn(USER_INFO_URL)); } private void retrieveAccessToken(DefaultOAuthConsumer consumer) throws OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException { consumer.setTokenWithSecret(requestToken, requestTokenSecret); OAuthFactory.createProvider().retrieveAccessToken(consumer, null); accessToken = consumer.getToken(); accessTokenSecret = consumer.getTokenSecret(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.menu, menu); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); menu.findItem(R.id.menu_more).setVisible(false); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_search: showSearchTab(); return true; // case R.id.menu_more: // bookListFragment.executeSearchByKeyWord(query); // searchBar.showProgressBar(); // return true; case R.id.menu_my_books: try { if (user.isSignedIn()) { RequestParams requestParams = new RequestParams(); requestParams.setAccessToken(accessToken); requestParams.setAccessTokenSecret(accessTokenSecret); requestParams.setUserId(user.getId()); requestParams.setUserName(user.getName()); requestParams.setUserChanged(true); userBooksFragment.setRequestParams(requestParams); showMyBooksTab(); } else { retrieveRequestToken(); } } catch (Exception e) { e.printStackTrace(); } return true; case R.id.menu_contacts: try { if (user.isSignedIn()) { showContactsTab(); contactsFragment.searchContacts(); } else { retrieveRequestToken(); } } catch (Exception e) { e.printStackTrace(); } return true; default: return true; } } private void showContactsTab() { getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); ft = getFragmentManager().beginTransaction(); ft.hide(searchFragment); ft.hide(userBooksFragment); ft.show(contactsFragment); ft.commit(); } private void showSearchTab() { getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); ft = getFragmentManager().beginTransaction(); ft.show(searchFragment); ft.hide(userBooksFragment); ft.hide(contactsFragment); ft.commit(); } public void showMyBooksTab() { ft = getFragmentManager().beginTransaction(); getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); ft.hide(searchFragment); ft.show(userBooksFragment); ft.hide(contactsFragment); ft.commit(); } private void retrieveRequestToken() throws OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException { new RetrieveRequestTokenTask().execute(); } private class RetrieveRequestTokenTask extends AsyncTask<String, Integer, String> { @Override protected String doInBackground(String... strings) { DefaultOAuthConsumer consumer = OAuthFactory.createConsumer(); try { String url = OAuthFactory.createProvider().retrieveRequestToken(consumer, CALLBACK_URL); requestToken = consumer.getToken(); requestTokenSecret = consumer.getTokenSecret(); return url; } catch (Exception e) { e.printStackTrace(); } return ""; } @Override protected void onPostExecute(String url) { Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(browserIntent); } } }