package com.fastaccess.ui.modules.gists.gist; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.TabLayout; import android.support.v4.view.ViewPager; import android.text.format.Formatter; import android.view.Menu; import android.view.MenuItem; import android.view.View; import com.fastaccess.R; import com.fastaccess.data.dao.FragmentPagerAdapterModel; import com.fastaccess.data.dao.model.Gist; import com.fastaccess.helper.ActivityHelper; import com.fastaccess.helper.BundleConstant; import com.fastaccess.helper.Bundler; import com.fastaccess.helper.InputHelper; import com.fastaccess.helper.ParseDateFormat; import com.fastaccess.helper.ViewHelper; import com.fastaccess.provider.tasks.git.GithubActionService; import com.fastaccess.ui.adapter.FragmentsPagerAdapter; import com.fastaccess.ui.base.BaseActivity; import com.fastaccess.ui.modules.gists.gist.comments.GistCommentsFragment; import com.fastaccess.ui.widgets.AvatarLayout; import com.fastaccess.ui.widgets.FontTextView; import com.fastaccess.ui.widgets.ForegroundImageView; import com.fastaccess.ui.widgets.ViewPagerView; import com.fastaccess.ui.widgets.dialog.MessageDialogView; import butterknife.BindView; import butterknife.OnClick; /** * Created by Kosh on 12 Nov 2016, 12:18 PM */ public class GistActivity extends BaseActivity<GistMvp.View, GistPresenter> implements GistMvp.View { @BindView(R.id.avatarLayout) AvatarLayout avatarLayout; @BindView(R.id.headerTitle) FontTextView title; @BindView(R.id.size) FontTextView size; @BindView(R.id.date) FontTextView date; @BindView(R.id.pager) ViewPagerView pager; @BindView(R.id.tabs) TabLayout tabs; @BindView(R.id.fab) FloatingActionButton fab; @BindView(R.id.startGist) ForegroundImageView startGist; @BindView(R.id.forkGist) ForegroundImageView forkGist; @BindView(R.id.detailsIcon) View detailsIcon; private int accentColor; private int iconColor; public static Intent createIntent(@NonNull Context context, @NonNull String gistId) { Intent intent = new Intent(context, GistActivity.class); intent.putExtras(Bundler.start().put(BundleConstant.EXTRA, gistId).end()); return intent; } @OnClick(R.id.fab) void onAddComment() { if (pager != null && pager.getAdapter() != null) { GistCommentsFragment view = (GistCommentsFragment) pager.getAdapter().instantiateItem(pager, 1); if (view != null) { view.onStartNewComment(); } } } @OnClick(R.id.detailsIcon) void onTitleClick() { if (getPresenter().getGist() != null && !InputHelper.isEmpty(getPresenter().getGist().getDescription())) MessageDialogView.newInstance(getString(R.string.details), getPresenter().getGist().getDescription()) .show(getSupportFragmentManager(), MessageDialogView.TAG); } @OnClick({R.id.startGist, R.id.forkGist}) public void onGistActions(View view) { view.setEnabled(false); switch (view.getId()) { case R.id.startGist: if (getPresenter().getGist() != null) { GithubActionService.startForGist(this, getPresenter().getGist().getGistId(), getPresenter().isStarred() ? GithubActionService.UNSTAR_GIST : GithubActionService.STAR_GIST); getPresenter().onStarGist(); } break; case R.id.forkGist: if (getPresenter().getGist() != null) { GithubActionService.startForGist(this, getPresenter().getGist().getGistId(), GithubActionService.FORK_GIST); getPresenter().onForkGist(); } break; } } @Override protected int layout() { return R.layout.gists_pager_layout; } @Override protected boolean isTransparent() { return true; } @Override protected boolean canBack() { return true; } @Override protected boolean isSecured() { return false; } @NonNull @Override public GistPresenter providePresenter() { return new GistPresenter(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); accentColor = ViewHelper.getAccentColor(this); iconColor = ViewHelper.getIconColor(this); if (savedInstanceState == null) { getPresenter().onActivityCreated(getIntent()); } else { if (getPresenter().getGist() != null) { onSetupDetails(); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.gist_menu, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.share) { if (getPresenter().getGist() != null) ActivityHelper.shareUrl(this, getPresenter().getGist().getHtmlUrl()); return true; } else if (item.getItemId() == R.id.deleteGist) { MessageDialogView.newInstance( getString(R.string.delete_gist), getString(R.string.confirm_message), Bundler.start() .put(BundleConstant.YES_NO_EXTRA, true) .put(BundleConstant.EXTRA, true).end()) .show(getSupportFragmentManager(), MessageDialogView.TAG); return true; } return super.onOptionsItemSelected(item); } @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.findItem(R.id.deleteGist).setVisible(getPresenter().isOwner()); return super.onPrepareOptionsMenu(menu); } @Override public void onMessageDialogActionClicked(boolean isOk, @Nullable Bundle bundle) { super.onMessageDialogActionClicked(isOk, bundle); if (bundle != null) { boolean isDelete = bundle.getBoolean(BundleConstant.EXTRA) && isOk; if (isDelete) { getPresenter().onDeleteGist(); } } } @Override public void onSuccessDeleted() { hideProgress(); if (getPresenter().getGist() != null) { Intent intent = new Intent(); Gist gistsModel = new Gist(); gistsModel.setUrl(getPresenter().getGist().getUrl()); intent.putExtras(Bundler.start().put(BundleConstant.ITEM, gistsModel).end()); setResult(RESULT_OK, intent); } finish(); } @Override public void onErrorDeleting() { showErrorMessage(getString(R.string.error_deleting_gist)); } @Override public void onGistStarred(boolean isStarred) { startGist.setImageResource(isStarred ? R.drawable.ic_star_filled : R.drawable.ic_star); startGist.tintDrawableColor(isStarred ? accentColor : iconColor); startGist.setEnabled(true); } @Override public void onGistForked(boolean isForked) { forkGist.tintDrawableColor(isForked ? accentColor : iconColor); forkGist.setEnabled(true); } @Override public void onSetupDetails() { hideProgress(); Gist gistsModel = getPresenter().getGist(); if (gistsModel == null) { finish(); return; } String url = gistsModel.getOwner() != null ? gistsModel.getOwner().getAvatarUrl() : gistsModel.getUser() != null ? gistsModel.getUser().getAvatarUrl() : ""; String login = gistsModel.getOwner() != null ? gistsModel.getOwner().getLogin() : gistsModel.getUser() != null ? gistsModel.getUser().getLogin() : ""; avatarLayout.setUrl(url, login); title.setText(gistsModel.getDisplayTitle(false, true)); detailsIcon.setVisibility(InputHelper.isEmpty(gistsModel.getDescription()) || !ViewHelper.isEllipsed(title) ? View.GONE : View.VISIBLE); if (gistsModel.getCreatedAt().before(gistsModel.getUpdatedAt())) { date.setText(ParseDateFormat.getTimeAgo(gistsModel.getCreatedAt()) + " " + getString(R.string.edited)); } else { date.setText(ParseDateFormat.getTimeAgo(gistsModel.getCreatedAt())); } size.setText(Formatter.formatFileSize(this, gistsModel.getSize())); pager.setAdapter(new FragmentsPagerAdapter(getSupportFragmentManager(), FragmentPagerAdapterModel.buildForGist(this, gistsModel))); tabs.setupWithViewPager(pager); pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { super.onPageSelected(position); hideShowFab(); } }); supportInvalidateOptionsMenu(); onGistForked(getPresenter().isForked()); onGistStarred(getPresenter().isStarred()); hideShowFab(); } private void hideShowFab() { if (pager.getCurrentItem() == 1) { fab.show(); } else { fab.hide(); } } }