package com.alorma.github.ui.fragment.releases; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.alorma.github.R; import com.alorma.github.sdk.bean.dto.request.RequestMarkdownDTO; import com.alorma.github.sdk.bean.dto.response.UserType; import com.alorma.github.sdk.bean.info.RepoInfo; import com.alorma.github.sdk.services.content.GetMarkdownClient; import com.alorma.github.ui.activity.OrganizationActivity; import com.alorma.github.ui.activity.ProfileActivity; import com.alorma.github.ui.fragment.base.BaseFragment; import com.alorma.github.ui.listeners.TitleProvider; import com.alorma.github.ui.view.UserAvatarView; import com.alorma.github.utils.AttributesUtils; import com.alorma.github.utils.TimeUtils; import com.gh4a.utils.UiUtils; import com.github.mobile.util.HtmlUtils; import com.github.mobile.util.HttpImageGetter; import com.mikepenz.iconics.IconicsDrawable; import com.mikepenz.iconics.typeface.IIcon; import com.mikepenz.octicons_typeface_library.Octicons; import core.User; import core.repositories.releases.Release; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class ReleaseAboutFragment extends BaseFragment implements TitleProvider { private static final String RELEASE = "RELEASE"; private static final String REPO_INFO = "REPO_INFO"; private TextView htmlContentView; private View progressBar; public static ReleaseAboutFragment newInstance(Release release, RepoInfo repoInfo) { ReleaseAboutFragment releaseAboutFragment = new ReleaseAboutFragment(); Bundle args = new Bundle(); args.putParcelable(RELEASE, release); args.putParcelable(REPO_INFO, repoInfo); releaseAboutFragment.setArguments(args); return releaseAboutFragment; } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.release_detail_fragment, null, false); } @Override protected int getLightTheme() { return R.style.AppTheme_Repository; } @Override protected int getDarkTheme() { return R.style.AppTheme_Dark_Repository; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); View author = view.findViewById(R.id.author); UserAvatarView profileIcon = (UserAvatarView) author.findViewById(R.id.profileIcon); TextView authorName = (TextView) author.findViewById(R.id.authorName); TextView createdAtTextView = (TextView) view.findViewById(R.id.createdAt); ImageView createdIcon = (ImageView) view.findViewById(R.id.createdIcon); progressBar = view.findViewById(R.id.progressBar); htmlContentView = (TextView) view.findViewById(R.id.htmlContentView); final Release release = getArguments().getParcelable(RELEASE); if (release != null) { User owner = release.getAuthor(); profileIcon.setUser(owner); authorName.setText(owner.getLogin()); createdIcon.setImageDrawable( new IconicsDrawable(getActivity(), Octicons.Icon.oct_clock).color(AttributesUtils.getAccentColor(getActivity())).actionBar()); if (release.getCreatedAt() != null) { createdAtTextView.setText(TimeUtils.getDateToText(getActivity(), release.getCreatedAt(), R.string.created_at)); } final RepoInfo repoInfo = getArguments().getParcelable(REPO_INFO); if (repoInfo != null && release.getBody() != null && htmlContentView != null) { RequestMarkdownDTO requestMarkdownDTO = new RequestMarkdownDTO(); requestMarkdownDTO.text = release.getBody(); GetMarkdownClient markdownClient = new GetMarkdownClient(requestMarkdownDTO); markdownClient.observable() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<String>() { @Override public void onCompleted() { progressBar.setVisibility(View.GONE); } @Override public void onError(Throwable e) { progressBar.setVisibility(View.GONE); } @Override public void onNext(String s) { String htmlCode = HtmlUtils.format(s).toString(); HttpImageGetter imageGetter = new HttpImageGetter(getActivity()); imageGetter.repoInfo(repoInfo); imageGetter.bind(htmlContentView, htmlCode, repoInfo.hashCode()); htmlContentView.setMovementMethod(UiUtils.CHECKING_LINK_METHOD); } }); } else { progressBar.setVisibility(View.GONE); } author.setOnClickListener(v -> { if (release.getAuthor() != null) { if (release.getAuthor().getType().equals(UserType.User.name())) { Intent intent = ProfileActivity.createLauncherIntent(getActivity(), release.getAuthor()); startActivity(intent); } else if (release.getAuthor().getType().equals(UserType.Organization.name())) { Intent intent = OrganizationActivity.launchIntent(getActivity(), release.getAuthor().getLogin()); startActivity(intent); } } }); } } @Override public int getTitle() { return R.string.repo_release_fragment_detail_title; } @Override public IIcon getTitleIcon() { return Octicons.Icon.oct_tag; } @Override protected boolean showTitle() { return false; } }