package com.alorma.github.ui.activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.design.widget.Snackbar; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.text.TextUtils; import com.alorma.github.R; import com.alorma.github.sdk.bean.info.ReleaseInfo; import com.alorma.github.sdk.bean.info.RepoInfo; import com.alorma.github.sdk.services.repo.GetReleaseClient; import com.alorma.github.ui.activity.base.RepositoryThemeActivity; import com.alorma.github.ui.adapter.viewpager.NavigationPagerAdapter; import com.alorma.github.ui.fragment.releases.ReleaseAboutFragment; import com.alorma.github.ui.fragment.releases.ReleaseAssetsFragment; import com.alorma.github.utils.GitskariosDownloadManager; import core.repositories.releases.Asset; import core.repositories.releases.Release; import java.util.ArrayList; import java.util.List; import rx.Observer; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class ReleaseDetailActivity extends RepositoryThemeActivity implements Observer<Release>, ReleaseAssetsFragment.ReleaseAssetCallback { private static final String RELEASE_INFO = "RELEASE_INFO"; private static final String RELEASE = "RELEASE"; private static final String REPO_INFO = "REPO_INFO"; private ReleaseInfo releaseInfo; private TabLayout tabLayout; private ViewPager viewPager; public static Intent launchIntent(Context context, ReleaseInfo releaseInfo) { Intent intent = new Intent(context, ReleaseDetailActivity.class); Bundle extras = new Bundle(); extras.putParcelable(RELEASE_INFO, releaseInfo); intent.putExtras(extras); return intent; } public static Intent launchIntent(Context context, Release release, RepoInfo repoInfo) { Intent intent = new Intent(context, ReleaseDetailActivity.class); Bundle extras = new Bundle(); extras.putParcelable(RELEASE, release); extras.putParcelable(REPO_INFO, repoInfo); intent.putExtras(extras); return intent; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.release_detail_activity); if (getIntent().getExtras() != null) { tabLayout = (TabLayout) findViewById(R.id.tabStrip); viewPager = (ViewPager) findViewById(R.id.pager); if (getIntent().getExtras().containsKey(RELEASE)) { Release release = getIntent().getExtras().getParcelable(RELEASE); RepoInfo repoInfo = getIntent().getExtras().getParcelable(REPO_INFO); showRelease(release, repoInfo); } else if (getIntent().getExtras().containsKey(RELEASE_INFO)) { releaseInfo = getIntent().getExtras().getParcelable(RELEASE_INFO); GetReleaseClient releaseClient = new GetReleaseClient(releaseInfo); releaseClient.observable().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(this); } } } private void showRelease(Release release, RepoInfo repoInfo) { if (release != null) { String name = release.getName(); if (TextUtils.isEmpty(name)) { name = release.getTagName(); } setTitle(name); List<Fragment> listFragments = new ArrayList<>(); listFragments.add(ReleaseAboutFragment.newInstance(release, repoInfo)); List<Asset> assets = new ArrayList<>(); assets.addAll(release.getAssets()); Asset zipAsset = new Asset(); zipAsset.setName(getString(R.string.release_asset_zip)); zipAsset.setBrowserDownloadUrl(release.getZipballUrl()); assets.add(zipAsset); Asset tarAsset = new Asset(); tarAsset.setName(getString(R.string.release_asset_tar)); zipAsset.setBrowserDownloadUrl(release.getTarballUrl()); assets.add(tarAsset); ReleaseAssetsFragment releaseAssetsFragment = ReleaseAssetsFragment.newInstance(assets); releaseAssetsFragment.setReleaseAssetCallback(this); listFragments.add(releaseAssetsFragment); if (viewPager != null) { viewPager.setAdapter(new NavigationPagerAdapter(getSupportFragmentManager(), getResources(), listFragments)); if (tabLayout != null) { tabLayout.setupWithViewPager(viewPager); } } } } @Override public void onNext(Release release) { showRelease(release, releaseInfo.repoInfo); } @Override public void onError(Throwable error) { } @Override public void onCompleted() { } @Override public void onReleaseDownloadRequest(final Asset asset) { GitskariosDownloadManager gitskariosDownloadManager = new GitskariosDownloadManager(); gitskariosDownloadManager.download(this, asset.getBrowserDownloadUrl(), asset.getName(), text -> { Snackbar snackbar = Snackbar.make(getToolbar(), getString(text), Snackbar.LENGTH_LONG); snackbar.setAction(getString(R.string.external_storage_permission_request_action), v -> gitskariosDownloadManager.openAppSettings(ReleaseDetailActivity.this)); snackbar.show(); }); } }