package tellh.com.gitclub.presentation.view.activity.user_personal_page;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.AppBarLayout;
import android.support.v4.view.ViewCompat;
import android.support.v4.widget.NestedScrollView;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewStub;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.umeng.socialize.ShareAction;
import com.umeng.socialize.bean.SHARE_MEDIA;
import javax.inject.Inject;
import tellh.com.gitclub.R;
import tellh.com.gitclub.common.AndroidApplication;
import tellh.com.gitclub.common.base.BaseActivity;
import tellh.com.gitclub.common.config.ExtraKey;
import tellh.com.gitclub.common.utils.StringUtils;
import tellh.com.gitclub.common.wrapper.ImageLoader;
import tellh.com.gitclub.common.wrapper.Note;
import tellh.com.gitclub.di.component.DaggerHomePageComponent;
import tellh.com.gitclub.model.entity.UserInfo;
import tellh.com.gitclub.model.sharedprefs.AccountPrefs;
import tellh.com.gitclub.presentation.contract.PersonalPageContract;
import tellh.com.gitclub.presentation.view.activity.detail_list.ListFollowersActivity;
import tellh.com.gitclub.presentation.view.activity.detail_list.ListFollowingUserActivity;
import tellh.com.gitclub.presentation.view.activity.detail_list.ListOwnRepoActivity;
import tellh.com.gitclub.presentation.view.activity.detail_list.ListStarredRepoActivity;
import tellh.com.gitclub.presentation.view.activity.detail_list.ListWatchingActivity;
import tellh.com.gitclub.presentation.widget.ErrorViewHelper;
import tellh.com.gitclub.presentation.widget.PersonalPageTextView;
import tellh.com.gitclub.presentation.widget.RotateIconButton;
import tellh.com.gitclub.presentation.widget.UmengShareCallback;
public class PersonalHomePageActivity extends BaseActivity
implements View.OnClickListener, PersonalPageContract.View {
protected ProgressDialog progressDialog;
@Inject
PersonalPageContract.Presenter presenter;
private Toolbar toolbar;
private TextView tvBio;
private ImageView ivUser;
private PersonalPageTextView tvFollowers;
private PersonalPageTextView tvFollowing;
private PersonalPageTextView tvRepo;
private RotateIconButton btnFollow;
private String mUserName;
private UserInfo mUserInfo;
private ErrorViewHelper errorView;
private NestedScrollView mainContent;
private ContactUserInfoBottomSheetDialog bottomSheetDialog;
public static void launch(Activity srcActivity, String user) {
Intent intent = new Intent(srcActivity, PersonalHomePageActivity.class);
intent.putExtra(ExtraKey.USER_NAME, user);
srcActivity.startActivity(intent);
}
@Override
public void showOnError(String s) {
Note.show(s);
progressDialog.dismiss();
if (!errorView.isShowing()) {
errorView.showErrorView(mainContent, new ErrorViewHelper.OnReLoadCallback() {
@Override
public void reload() {
presenter.getUserInfo(mUserName);
}
});
}
}
@Override
public void showOnLoading() {
progressDialog.setMessage("Loading...");
progressDialog.show();
}
@Override
public void showOnSuccess() {
progressDialog.dismiss();
Note.show(getString(R.string.success_loading));
if (errorView.isShowing())
errorView.hideErrorView(mainContent);
}
@Override
public void initData(Bundle savedInstanceState) {
if (presenter == null) {
DaggerHomePageComponent.builder()
.appComponent(AndroidApplication.getInstance().getAppComponent())
.build().inject(this);
presenter.attachView(this);
}
Intent intent = getIntent();
if (intent != null) {
mUserName = intent.getStringExtra(ExtraKey.USER_NAME);
presenter.getUserInfo(mUserName);
UserInfo loginUser = AccountPrefs.getLoginUser(this);
if (loginUser != null && loginUser.getLogin().equals(mUserName)) {
btnFollow.setClickable(false);
btnFollow.setBackgroundResource(R.drawable.selector_pink_right_checked);
} else {
presenter.checkIfFollowing(mUserName);
}
}
}
@Override
public int getLayoutId() {
return R.layout.activity_personal_home_page;
}
@Override
public void initView() {
progressDialog = new ProgressDialog(this);
progressDialog.setCanceledOnTouchOutside(false);
errorView = new ErrorViewHelper((ViewStub) findViewById(R.id.vs_error));
mainContent = (NestedScrollView) findViewById(R.id.main_content);
toolbar = (Toolbar) findViewById(R.id.toolbar);
ivUser = (ImageView) findViewById(R.id.iv_user);
tvFollowers = (PersonalPageTextView) findViewById(R.id.tv_followers);
tvFollowing = (PersonalPageTextView) findViewById(R.id.tv_following);
tvRepo = (PersonalPageTextView) findViewById(R.id.tv_repo);
tvBio = (TextView) findViewById(R.id.tv_bio);
Button btnContact = (Button) findViewById(R.id.btn_contact);
btnFollow = (RotateIconButton) findViewById(R.id.btn_follow);
FrameLayout flStars = (FrameLayout) findViewById(R.id.fl_stars);
FrameLayout flWatching = (FrameLayout) findViewById(R.id.fl_watching);
FrameLayout flFollowing = (FrameLayout) findViewById(R.id.fl_following);
FrameLayout flFollowers = (FrameLayout) findViewById(R.id.fl_followers);
FrameLayout flRepositories = (FrameLayout) findViewById(R.id.fl_repositories);
AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.appBarLayout);
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
if (verticalOffset == 0)
ViewCompat.setAlpha(ivUser, 1);
else if (verticalOffset >= -100)
ViewCompat.setAlpha(ivUser, (float) 1 + verticalOffset / 100f);
else ViewCompat.setAlpha(ivUser, 0);
}
});
tvFollowers.setOnClickListener(this);
tvFollowing.setOnClickListener(this);
tvRepo.setOnClickListener(this);
btnContact.setOnClickListener(this);
btnFollow.setOnClickListener(this);
flRepositories.setOnClickListener(this);
flFollowers.setOnClickListener(this);
flStars.setOnClickListener(this);
flWatching.setOnClickListener(this);
flFollowing.setOnClickListener(this);
StringUtils.changeFontStyle("fonts/Georgia.ttf", tvBio);
setSupportActionBar(toolbar);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
@Override
public Context getViewContext() {
return this;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv_followers:
case R.id.fl_followers:
ListFollowersActivity.launch(mUserName, this);
break;
case R.id.tv_following:
case R.id.fl_following:
ListFollowingUserActivity.launch(mUserName, this);
break;
case R.id.tv_repo:
case R.id.fl_repositories:
ListOwnRepoActivity.launch(mUserName, this);
break;
case R.id.fl_stars:
ListStarredRepoActivity.launch(mUserName, this);
break;
case R.id.fl_watching:
ListWatchingActivity.launch(mUserName, this);
break;
case R.id.btn_contact:
if (bottomSheetDialog == null)
bottomSheetDialog = new ContactUserInfoBottomSheetDialog(this, mUserInfo);
bottomSheetDialog.show();
break;
case R.id.btn_follow:
presenter.toFollow(mUserName, btnFollow.toggle());
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
presenter.detachView();
presenter = null;
}
@Override
public void onGetUserInfo(UserInfo userInfo) {
this.mUserInfo = userInfo;
ImageLoader.load(userInfo.getAvatar_url(), ivUser);
toolbar.setTitle(userInfo.getLogin());
tvFollowers.setText(StringUtils.formatNumber2Thousand(userInfo.getFollowers()));
tvRepo.setText(StringUtils.formatNumber2Thousand(userInfo.getPublic_repos()));
tvFollowing.setText(StringUtils.formatNumber2Thousand(userInfo.getFollowing()));
if (!TextUtils.isEmpty(userInfo.getBio())) {
tvBio.setText(userInfo.getBio());
}
if (bottomSheetDialog == null)
bottomSheetDialog = new ContactUserInfoBottomSheetDialog(this, mUserInfo);
bottomSheetDialog.refreshData(userInfo);
}
@Override
public void onCheckFollowing(Boolean isFollowing) {
btnFollow.setState(isFollowing);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_personal_page, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_open_in_browser) {
if (mUserInfo == null || TextUtils.isEmpty(mUserInfo.getHtml_url()))
return super.onOptionsItemSelected(item);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(mUserInfo.getHtml_url()));
intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
startActivity(intent);
return true;
} else if (item.getItemId() == R.id.action_share) {
new ShareAction(PersonalHomePageActivity.this)
.setDisplayList(SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE, SHARE_MEDIA.WEIXIN,
SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.WEIXIN_FAVORITE, SHARE_MEDIA.EVERNOTE,
SHARE_MEDIA.POCKET, SHARE_MEDIA.FACEBOOK, SHARE_MEDIA.EMAIL, SHARE_MEDIA.YNOTE, SHARE_MEDIA.MORE)
.withTitle("Users from Github")
.withText("Users from Github: " + mUserName)
.withTargetUrl(mUserInfo.getHtml_url())
.setCallback(new UmengShareCallback())
.open();
}
return super.onOptionsItemSelected(item);
}
}