package org.cnodejs.android.md.ui.activity; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.TabLayout; import android.support.v4.app.ActivityCompat; import android.support.v4.app.ActivityOptionsCompat; import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewPager; import android.support.v7.widget.Toolbar; import android.text.Html; import android.text.TextUtils; import android.view.MenuItem; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import com.pnikosis.materialishprogress.ProgressWheel; import org.cnodejs.android.md.R; import org.cnodejs.android.md.model.api.ApiDefine; import org.cnodejs.android.md.model.entity.Topic; import org.cnodejs.android.md.model.entity.User; import org.cnodejs.android.md.presenter.contract.IUserDetailPresenter; import org.cnodejs.android.md.presenter.implement.UserDetailPresenter; import org.cnodejs.android.md.ui.adapter.UserDetailPagerAdapter; import org.cnodejs.android.md.ui.base.StatusBarActivity; import org.cnodejs.android.md.ui.listener.NavigationFinishClickListener; import org.cnodejs.android.md.ui.util.Navigator; import org.cnodejs.android.md.ui.util.ThemeUtils; import org.cnodejs.android.md.ui.util.ToastUtils; import org.cnodejs.android.md.ui.view.IUserDetailView; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class UserDetailActivity extends StatusBarActivity implements IUserDetailView, Toolbar.OnMenuItemClickListener { private static final String EXTRA_LOGIN_NAME = "loginName"; private static final String EXTRA_AVATAR_URL = "avatarUrl"; private static final String NAME_IMG_AVATAR = "imgAvatar"; public static void startWithTransitionAnimation(@NonNull Activity activity, String loginName, @NonNull ImageView imgAvatar, String avatarUrl) { Intent intent = new Intent(activity, UserDetailActivity.class); intent.putExtra(EXTRA_LOGIN_NAME, loginName); intent.putExtra(EXTRA_AVATAR_URL, avatarUrl); ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, imgAvatar, NAME_IMG_AVATAR); ActivityCompat.startActivity(activity, intent, options.toBundle()); } public static void start(@NonNull Activity activity, String loginName) { Intent intent = new Intent(activity, UserDetailActivity.class); intent.putExtra(EXTRA_LOGIN_NAME, loginName); activity.startActivity(intent); } public static void start(@NonNull Context context, String loginName) { Intent intent = new Intent(context, UserDetailActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(EXTRA_LOGIN_NAME, loginName); context.startActivity(intent); } @BindView(R.id.toolbar) protected Toolbar toolbar; @BindView(R.id.tab_layout) protected TabLayout tabLayout; @BindView(R.id.view_pager) protected ViewPager viewPager; @BindView(R.id.img_avatar) protected ImageView imgAvatar; @BindView(R.id.tv_login_name) protected TextView tvLoginName; @BindView(R.id.tv_github_username) protected TextView tvGithubUsername; @BindView(R.id.tv_create_time) protected TextView tvCreateTime; @BindView(R.id.tv_score) protected TextView tvScore; @BindView(R.id.progress_wheel) protected ProgressWheel progressWheel; private UserDetailPagerAdapter adapter; private IUserDetailPresenter userDetailPresenter; private String loginName; private String githubUsername; @Override protected void onCreate(Bundle savedInstanceState) { ThemeUtils.configThemeBeforeOnCreate(this, R.style.AppThemeLight, R.style.AppThemeDark); super.onCreate(savedInstanceState); setContentView(R.layout.activity_user_detail); ButterKnife.bind(this); ViewCompat.setTransitionName(imgAvatar, NAME_IMG_AVATAR); toolbar.setNavigationOnClickListener(new NavigationFinishClickListener(this)); toolbar.inflateMenu(R.menu.user_detail); toolbar.setOnMenuItemClickListener(this); adapter = new UserDetailPagerAdapter(getSupportFragmentManager()); viewPager.setAdapter(adapter); viewPager.setOffscreenPageLimit(adapter.getCount()); tabLayout.setupWithViewPager(viewPager); loginName = getIntent().getStringExtra(EXTRA_LOGIN_NAME); tvLoginName.setText(loginName); String avatarUrl = getIntent().getStringExtra(EXTRA_AVATAR_URL); if (!TextUtils.isEmpty(avatarUrl)) { Glide.with(this).load(avatarUrl).placeholder(R.drawable.image_placeholder).dontAnimate().into(imgAvatar); } userDetailPresenter = new UserDetailPresenter(this, this); userDetailPresenter.getUserAsyncTask(loginName); } @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.action_open_in_browser: Navigator.openInBrowser(this, ApiDefine.USER_LINK_URL_PREFIX + loginName); return true; default: return false; } } @Override protected void onSaveInstanceState(Bundle outState) {} @OnClick(R.id.img_avatar) protected void onBtnAvatarClick() { userDetailPresenter.getUserAsyncTask(loginName); } @OnClick(R.id.tv_github_username) protected void onBtnGithubUsernameClick() { if (!TextUtils.isEmpty(githubUsername)) { Navigator.openInBrowser(this, "https://github.com/" + githubUsername); } } @Override public void onGetUserOk(@NonNull User user) { Glide.with(this).load(user.getAvatarUrl()).placeholder(R.drawable.image_placeholder).dontAnimate().into(imgAvatar); tvLoginName.setText(user.getLoginName()); if (TextUtils.isEmpty(user.getGithubUsername())) { tvGithubUsername.setVisibility(View.INVISIBLE); tvGithubUsername.setText(null); } else { tvGithubUsername.setVisibility(View.VISIBLE); tvGithubUsername.setText(Html.fromHtml("<u>" + user.getGithubUsername() + "@github.com" + "</u>")); } tvCreateTime.setText(getString(R.string.register_time_$s, user.getCreateAt().toString("yyyy-MM-dd"))); tvScore.setText(getString(R.string.score_$d, user.getScore())); adapter.update(user); githubUsername = user.getGithubUsername(); } @Override public void onGetCollectTopicListOk(@NonNull List<Topic> topicList) { adapter.update(topicList); } @Override public void onGetUserError(@NonNull String message) { ToastUtils.with(this).show(message); } @Override public void onGetUserStart() { progressWheel.spin(); } @Override public void onGetUserFinish() { progressWheel.stopSpinning(); } }