package com.jasonchen.microlang.activitys; import android.app.Dialog; import android.app.ProgressDialog; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentActivity; import android.support.v4.widget.SwipeRefreshLayout; import android.text.TextUtils; import android.util.TypedValue; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; import com.jasonchen.microlang.R; import com.jasonchen.microlang.beans.UserBean; import com.jasonchen.microlang.dao.FriendshipsDao; import com.jasonchen.microlang.dao.ShowUserDao; import com.jasonchen.microlang.dao.StatusesTimeLineDao; import com.jasonchen.microlang.debug.AppLogger; import com.jasonchen.microlang.exception.WeiboException; import com.jasonchen.microlang.fragments.UserFragment; import com.jasonchen.microlang.fragments.WeiboDetailFragment; import com.jasonchen.microlang.swipeback.app.SwipeBackActivity; import com.jasonchen.microlang.tasks.MyAsyncTask; import com.jasonchen.microlang.utils.GlobalContext; import com.jasonchen.microlang.utils.Utility; import com.jasonchen.microlang.utils.ViewUtility; import me.drakeet.materialdialog.MaterialDialog; /** * jasonchen * 2015/04/10 */ public class UserActivity extends SwipeBackActivity implements SwipeRefreshLayout.OnRefreshListener { private static final String ACTION_WITH_DETAIL = "action_with_detail"; private UserBean userBean; private String id; private FechUserTask fechUserTask; private FollowTask followTask; private UnFollowTask unFollowTask; public static Intent newIntent(Context context, UserBean userBean) { Intent intent = new Intent(context, UserActivity.class); intent.putExtra("user", userBean); intent.setAction(ACTION_WITH_DETAIL); return intent; } @Override public void onCreate(Bundle savedInstanceState) { mLayout = R.layout.activity_user; super.onCreate(savedInstanceState); initView(); } private void initView() { getSupportActionBar().setTitle(getString(R.string.app_name)); String action = getIntent().getAction(); if (action.equals(ACTION_WITH_DETAIL)) { handleUserInfoWithDetail(); } else { Uri data = getIntent().getData(); if (data != null) { String name = data.toString(); AppLogger.e(name); handleUserInfoWithId(name); } } } private void handleUserInfoWithId(String name) { userBean = new UserBean(); fetchUserWithId(name); } private void fetchUserWithId(String name) { if (Utility.isTaskStopped(fechUserTask)) { fechUserTask = new FechUserTask(UserActivity.this, name); fechUserTask.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR); } } private void handleUserInfoWithDetail() { userBean = getIntent().getParcelableExtra("user"); getSupportActionBar().setTitle(userBean.getScreen_name()); buildContent(); } private void buildContent() { getSupportActionBar().setTitle(userBean.getScreen_name()); new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { if (getSupportFragmentManager().findFragmentByTag(UserFragment.class.getName()) == null) { getSupportFragmentManager() .beginTransaction() .replace(R.id.container, UserFragment.newInstance(userBean), UserFragment.class.getName()) .commitAllowingStateLoss(); getSupportFragmentManager().executePendingTransactions(); findViewById(R.id.container).setBackgroundDrawable(null); } } }); } public void setUserBean(UserBean userBean) { this.userBean = userBean; } @Override protected void onResume() { super.onResume(); } @Override protected void onDestroy() { super.onDestroy(); } @Override public void onRefresh() { } @Override protected void onPause() { super.onPause(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_activity_user, menu); if (userBean != null && !GlobalContext.getInstance().getAccountBean().getUid().equals(userBean.getId())) { if (userBean.isFollowing()) { menu.findItem(R.id.menu_unfollow).setVisible(true); } else { menu.findItem(R.id.menu_follow).setVisible(true); } } return super.onCreateOptionsMenu(menu); } @Override public boolean onPrepareOptionsMenu(Menu menu) { if (userBean != null && !GlobalContext.getInstance().getAccountBean().getUid().equals(userBean.getId())) { if (userBean.isFollowing()) { menu.findItem(R.id.menu_unfollow).setVisible(true); menu.findItem(R.id.menu_follow).setVisible(false); } else { menu.findItem(R.id.menu_follow).setVisible(true); menu.findItem(R.id.menu_unfollow).setVisible(false); } } return super.onPrepareOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); if (itemId == R.id.menu_at) { Intent intent = WriteWeiboActivity.newIntent(UserActivity.this, GlobalContext.getInstance().getAccountBean(), userBean.getScreen_name()); startActivity(intent); openActivityWithAnimation(); } else if (itemId == R.id.menu_follow) { if (Utility.isTaskStopped(followTask) && Utility.isTaskStopped(unFollowTask)) { followTask = new FollowTask(UserActivity.this, userBean, GlobalContext.getInstance().getSpecialToken()); followTask.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR); } } else if (itemId == R.id.menu_unfollow) { if (Utility.isTaskStopped(followTask) && Utility.isTaskStopped(unFollowTask)) { unFollowTask = new UnFollowTask(UserActivity.this, userBean, GlobalContext.getInstance().getSpecialToken()); unFollowTask.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR); } } return false; } private class FollowTask extends MyAsyncTask<Void, Void, UserBean> { UserActivity activity; UserBean user; String token; WeiboException e; private FollowTask(UserActivity activity, UserBean user, String token) { this.activity = activity; this.user = user; this.token = token; } @Override protected UserBean doInBackground(Void... params) { FriendshipsDao dao = new FriendshipsDao(token); dao.setUid(user.getId()); UserBean followedUser = null; try { followedUser = dao.followIt(); } catch (WeiboException e) { e.printStackTrace(); this.e = e; cancel(true); } return followedUser; } @Override protected void onCancelled() { super.onCancelled(); Toast.makeText(UserActivity.this, e.getError(), Toast.LENGTH_SHORT).show(); } @Override protected void onPostExecute(UserBean userBean) { super.onPostExecute(userBean); if (userBean != null) { Toast.makeText(activity, activity.getString(R.string.follow_successfully), Toast.LENGTH_SHORT).show(); UserBean oldUser = userBean; oldUser.setFollowing(true); activity.setUserBean(oldUser); } else { Toast.makeText(activity, activity.getString(R.string.follow_failed), Toast.LENGTH_SHORT).show(); } } } private class UnFollowTask extends MyAsyncTask<Void, Void, UserBean> { UserActivity activity; UserBean user; String token; WeiboException e; private UnFollowTask(UserActivity activity, UserBean user, String token) { this.activity = activity; this.user = user; this.token = token; } @Override protected UserBean doInBackground(Void... params) { FriendshipsDao dao = new FriendshipsDao(token); dao.setUid(user.getId()); UserBean unFollowedUser = null; try { unFollowedUser = dao.unFollowIt(); } catch (WeiboException e) { e.printStackTrace(); this.e = e; cancel(true); } return unFollowedUser; } @Override protected void onCancelled() { super.onCancelled(); Toast.makeText(UserActivity.this, e.getError(), Toast.LENGTH_SHORT).show(); } @Override protected void onPostExecute(UserBean userBean) { super.onPostExecute(userBean); if (userBean != null) { Toast.makeText(activity, activity.getString(R.string.unfollow_successfully), Toast.LENGTH_SHORT).show(); UserBean oldUser = userBean; oldUser.setFollowing(false); activity.setUserBean(oldUser); } else { Toast.makeText(activity, activity.getString(R.string.unfollow_failed), Toast.LENGTH_SHORT).show(); } } } public static class ProgressFragment extends DialogFragment { MyAsyncTask asyncTask = null; public static ProgressFragment newInstance() { ProgressFragment frag = ProgressFragment.newInstance(); frag.setRetainInstance(true); Bundle args = new Bundle(); frag.setArguments(args); return frag; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { ProgressDialog dialog = new ProgressDialog(getActivity()); dialog.setMessage(getString(R.string.fech_user_info)); dialog.setIndeterminate(false); dialog.setCancelable(true); return dialog; } @Override public void onCancel(DialogInterface dialog) { if (asyncTask != null) { asyncTask.cancel(true); } super.onCancel(dialog); } void setAsyncTask(MyAsyncTask task) { asyncTask = task; } } private class FechUserTask extends MyAsyncTask<Void, Void, UserBean> { Context context; String username; UserBean bean = null; WeiboException e; ProgressFragment progressFragment; private FechUserTask(Context context, String name) { this.context = context; this.username = name; } @Override protected void onPreExecute() { super.onPreExecute(); progressFragment = new ProgressFragment(); progressFragment.setAsyncTask(this); progressFragment.show(getSupportFragmentManager(), ""); } @Override protected UserBean doInBackground(Void... params) { ShowUserDao dao = new ShowUserDao(GlobalContext.getInstance() .getSpecialToken()); int index = username.lastIndexOf("@"); final String newValue = username.substring(index + 1); dao.setScreen_name(newValue); try { bean = dao.getUserInfo(); } catch (WeiboException e) { e.printStackTrace(); this.e = e; cancel(true); return null; } return bean; } @Override protected void onCancelled() { super.onCancelled(); progressFragment.dismissAllowingStateLoss(); Toast.makeText(GlobalContext.getInstance(), e.getError(), Toast.LENGTH_SHORT).show(); } @Override protected void onPostExecute(UserBean userBean) { super.onPostExecute(userBean); if (userBean != null) { setUserBean(userBean); buildContent(); } progressFragment.dismissAllowingStateLoss(); } } }