package tellh.com.gitclub.presentation.view.activity.repo_page; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v4.widget.DrawerLayout; 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.webkit.WebView; import android.widget.Button; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import com.sackcentury.shinebuttonlib.ShineButton; import com.umeng.socialize.ShareAction; import com.umeng.socialize.UMShareAPI; 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.DaggerRepoPageComponent; import tellh.com.gitclub.model.entity.RepositoryInfo; import tellh.com.gitclub.presentation.contract.RepoPageContract; import tellh.com.gitclub.presentation.view.activity.detail_list.ListContributorActivity; import tellh.com.gitclub.presentation.view.activity.detail_list.ListForkerActivity; import tellh.com.gitclub.presentation.view.activity.detail_list.ListStargazerActivity; import tellh.com.gitclub.presentation.view.activity.detail_list.ListWatcherActivity; import tellh.com.gitclub.presentation.view.activity.user_personal_page.PersonalHomePageActivity; import tellh.com.gitclub.presentation.widget.ButtonToggleHelper; import tellh.com.gitclub.presentation.widget.ErrorViewHelper; import tellh.com.gitclub.presentation.widget.UmengShareCallback; import tellh.com.gitclub.presentation.widget.WebViewHelper; /** * Created by tlh on 2016/9/22 :) */ public class RepoPageActivity extends BaseActivity implements RepoPageContract.View, View.OnClickListener, ErrorViewHelper.OnReLoadCallback { @Inject RepoPageContract.Presenter presenter; private String mOwner; private String mRepo; private Toolbar toolbar; private Button btnWatch; private Button btnFork; private Button btnStar; private Button btnSource; private ImageView ivOwner; private TextView tvRepo; private TextView tvDesc; private NestedScrollView mainContent; private WebViewHelper webViewHelper; private ErrorViewHelper errorView; private DrawerLayout drawerLayout; private View drawerView; private RepositoryInfo repo; private TextView tvLang; private ButtonToggleHelper btnStarToggleHelper; private ButtonToggleHelper btnWatchToggleHelper; private ShineButton btnShineStar; public static void launch(Activity srcActivity, String owner, String repo) { Intent intent = new Intent(srcActivity, RepoPageActivity.class); intent.putExtra(ExtraKey.USER_NAME, owner); intent.putExtra(ExtraKey.REPO_NAME, repo); srcActivity.startActivity(intent); } @Override public void showOnError(String s) { super.showOnError(s); errorView.showErrorView(mainContent, this); } @Override public void initData(Bundle savedInstanceState) { Intent intent = getIntent(); if (intent != null) { mOwner = intent.getStringExtra(ExtraKey.USER_NAME); mRepo = intent.getStringExtra(ExtraKey.REPO_NAME); presenter.getReadMe(mOwner, mRepo); presenter.getRepoInfo(mOwner, mRepo); presenter.checkStarred(mOwner, mRepo); presenter.checkWatch(mOwner, mRepo); } } @Override protected void onDestroy() { super.onDestroy(); webViewHelper.detach(); presenter.detachView(); presenter = null; } @Override public void initView() { if (presenter == null) { DaggerRepoPageComponent.builder() .appComponent(AndroidApplication.getInstance().getAppComponent()) .build().inject(this); presenter.attachView(this); } drawerLayout = (DrawerLayout) findViewById(R.id.drawer); drawerView = findViewById(R.id.drawer_view); toolbar = (Toolbar) findViewById(R.id.toolbar); btnWatch = (Button) findViewById(R.id.btn_watch); btnWatch.setOnClickListener(this); btnFork = (Button) findViewById(R.id.btn_fork); btnFork.setOnClickListener(this); btnStar = (Button) findViewById(R.id.btn_star); btnStar.setOnClickListener(this); btnShineStar = (ShineButton) findViewById(R.id.btn_toStar); btnShineStar.setOnClickListener(this); btnSource = (Button) findViewById(R.id.btn_source); btnSource.setOnClickListener(this); btnSource = (Button) findViewById(R.id.btn_source_code); btnSource.setOnClickListener(this); Button btnShare = (Button) findViewById(R.id.btn_share); btnShare.setOnClickListener(this); Button btnBrowser = (Button) findViewById(R.id.btn_open_in_browser); btnBrowser.setOnClickListener(this); Button btnContributors = (Button) findViewById(R.id.btn_contributors); btnContributors.setOnClickListener(this); Button btnStargazers = (Button) findViewById(R.id.btn_stargazers); btnStargazers.setOnClickListener(this); Button btnWatchers = (Button) findViewById(R.id.btn_watchers); btnWatchers.setOnClickListener(this); Button btnForkers = (Button) findViewById(R.id.btn_forkers); btnForkers.setOnClickListener(this); ivOwner = (ImageView) findViewById(R.id.iv_owner); ivOwner.setOnClickListener(this); tvRepo = (TextView) findViewById(R.id.tv_repo); tvDesc = (TextView) findViewById(R.id.tv_desc); tvLang = (TextView) findViewById(R.id.tv_language); tvDesc.setOnClickListener(this); WebView webView = (WebView) findViewById(R.id.web_view); mainContent = (NestedScrollView) findViewById(R.id.main_content); ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar); webViewHelper = new WebViewHelper(webView, progressBar); webViewHelper.setCallback(new WebViewHelper.WebViewCallback() { @Override public void onError() { errorView.showErrorView(mainContent, RepoPageActivity.this); } }); errorView = new ErrorViewHelper((ViewStub) findViewById(R.id.vs_error)); toolbar.setTitle(""); setSupportActionBar(toolbar); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); btnStarToggleHelper = ButtonToggleHelper.builder() .setBackgroundDrawable(R.drawable.selector_button_white, R.drawable.selector_button_blue) .setTextColor(R.color.gray_text, R.color.white) .setDrawableLeft(R.drawable.ic_star_18dp, R.drawable.ic_star_white_18dp) .build(); btnWatchToggleHelper = ButtonToggleHelper.builder() .setBackgroundDrawable(R.drawable.selector_button_white, R.drawable.selector_button_blue) .setTextColor(R.color.gray_text, R.color.white) .setDrawableLeft(R.drawable.ic_watch_18dp, R.drawable.ic_watch_white_18dp) .build(); } @Override public int getLayoutId() { return R.layout.activity_repo_page; } @Override public void onGetRepositoryInfo(RepositoryInfo repositoryInfo) { this.repo = repositoryInfo; tvRepo.setText(StringUtils.checkRepoNameLength(repositoryInfo.getFull_name(), repositoryInfo.getName())); ImageLoader.load(repositoryInfo.getOwner().getAvatar_url(), ivOwner); tvDesc.setText(TextUtils.isEmpty(repositoryInfo.getDescription()) ? "No Description." : repositoryInfo.getDescription()); tvLang.setText(repositoryInfo.getLanguage()); btnStar.setText(StringUtils.formatNumber2Thousand(repositoryInfo.getStars())); btnFork.setText(StringUtils.formatNumber2Thousand(repositoryInfo.getForks())); btnWatch.setText(StringUtils.formatNumber2Thousand(repositoryInfo.getSubscribers_count())); toolbar.setTitle(repositoryInfo.getFull_name()); } @Override public void onCheckStarred(Boolean result) { btnStarToggleHelper.setState(btnStar, result); btnShineStar.setChecked(result, false); } @Override public void onCheckWatch(Boolean result) { btnWatchToggleHelper.setState(btnWatch, result); } @Override public void onGetReadMe(String html_url) { webViewHelper.loadUrl(html_url); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.iv_owner: PersonalHomePageActivity.launch(this, repo.getOwner().getLogin()); break; case R.id.btn_watch: presenter.toWatch(mOwner, mRepo, btnWatchToggleHelper.toggle(btnWatch)); break; case R.id.btn_fork: presenter.toFork(mOwner, mRepo); break; case R.id.btn_star: boolean checked = btnStarToggleHelper.toggle(btnStar); presenter.toStar(mOwner, mRepo, checked); btnShineStar.setChecked(checked, true); break; case R.id.btn_toStar: presenter.toStar(mOwner, mRepo, btnShineStar.isChecked()); btnStarToggleHelper.setState(btnStar, btnShineStar.isChecked()); break; case R.id.btn_source: case R.id.btn_source_code: drawerLayout.closeDrawer(drawerView); RepoSourceActivity.launch(this, mOwner, mRepo); break; case R.id.btn_share: drawerLayout.closeDrawer(drawerView); if (repo == null) { Note.show("Fail to get Repository info, please load again."); return; } new ShareAction(RepoPageActivity.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("Repository from Github") .withText("Repository from Github: " + repo.getHtml_url()) .withTargetUrl(repo.getHtml_url()) .setCallback(new UmengShareCallback()) .open(); break; case R.id.btn_open_in_browser: drawerLayout.closeDrawer(drawerView); String url = webViewHelper.getUrl(); if (TextUtils.isEmpty(url)) break; Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse(url)); intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity"); startActivity(intent); break; case R.id.btn_contributors: drawerLayout.closeDrawer(drawerView); ListContributorActivity.launch(repo.getOwner().getLogin(), repo.getName(), this); break; case R.id.btn_stargazers: drawerLayout.closeDrawer(drawerView); ListStargazerActivity.launch(repo.getOwner().getLogin(), repo.getName(), this); break; case R.id.btn_watchers: drawerLayout.closeDrawer(drawerView); ListWatcherActivity.launch(repo.getOwner().getLogin(), repo.getName(), this); break; case R.id.btn_forkers: drawerLayout.closeDrawer(drawerView); ListForkerActivity.launch(repo.getOwner().getLogin(), repo.getName(), this); break; } } @Override public void onBackPressed() { if (!webViewHelper.goBackPage()) super.onBackPressed(); } @Override public void reload() { initData(null); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_repo_page, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.action_drawer) { drawerLayout.openDrawer(drawerView); return true; } else if (item.getItemId() == R.id.action_reload) { if (repo == null) { reload(); return true; } presenter.getReadMe(mOwner, mRepo); return true; } return super.onOptionsItemSelected(item); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); } }