package com.alorma.github.ui.activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPager;
import android.view.View;
import com.alorma.github.R;
import com.alorma.github.sdk.bean.info.RepoInfo;
import com.alorma.github.sdk.services.repo.CompareCommitsClient;
import com.alorma.github.ui.activity.base.RepositoryThemeActivity;
import com.alorma.github.ui.fragment.compare.CompareCommitsListFragment;
import com.alorma.github.ui.fragment.compare.CompareFilesListFragment;
import com.alorma.github.utils.AttributesUtils;
import java.util.ArrayList;
import java.util.List;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
public class CompareRepositoryCommitsActivity extends RepositoryThemeActivity {
private static final String REPO_INFO = "REPO_INFO";
private static final String BASE = "BASE";
private static final String HEAD = "HEAD";
private CompareCommitsListFragment commitsFragment;
private CompareFilesListFragment filesFragment;
public static Intent launcherIntent(Context context, RepoInfo repoInfo, String base, String head) {
Intent intent = new Intent(context, CompareRepositoryCommitsActivity.class);
intent.putExtra(REPO_INFO, repoInfo);
intent.putExtra(BASE, base);
intent.putExtra(HEAD, head);
return intent;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_compare_commits);
if (getToolbar() != null) {
getToolbar().setBackgroundColor(AttributesUtils.getPrimaryColor(this));
}
if (getIntent().getExtras() != null) {
RepoInfo repoInfo = getIntent().getExtras().getParcelable(REPO_INFO);
String base = getIntent().getExtras().getString(BASE);
String head = getIntent().getExtras().getString(HEAD);
setTitle(base + " ... " + head);
CompareCommitsClient compareCommitsClient = new CompareCommitsClient(repoInfo, base, head);
compareCommitsClient.observable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(compareCommit -> {
if (commitsFragment != null) {
commitsFragment.setCommits(compareCommit.commits);
}
if (filesFragment != null) {
filesFragment.setFiles(compareCommit.files);
}
}, Throwable::printStackTrace);
final TabLayout tabLayout = (TabLayout) findViewById(R.id.tabStrip);
final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
List<Fragment> listFragments = new ArrayList<>();
commitsFragment = CompareCommitsListFragment.newInstance(repoInfo);
listFragments.add(commitsFragment);
filesFragment = CompareFilesListFragment.newInstance(repoInfo);
listFragments.add(filesFragment);
NavigationPagerAdapter adapter = new NavigationPagerAdapter(getSupportFragmentManager(), listFragments);
viewPager.setAdapter(adapter);
if (ViewCompat.isLaidOut(tabLayout)) {
tabLayout.setupWithViewPager(viewPager);
} else {
tabLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight,
int oldBottom) {
tabLayout.setupWithViewPager(viewPager);
tabLayout.removeOnLayoutChangeListener(this);
}
});
}
} else {
finish();
}
}
@Override
protected int getAppDarkTheme() {
return R.style.AppTheme_Dark_Repository;
}
@Override
protected int getAppLightTheme() {
return R.style.AppTheme_Repository;
}
private class NavigationPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> listFragments;
public NavigationPagerAdapter(FragmentManager fm, List<Fragment> listFragments) {
super(fm);
this.listFragments = listFragments;
}
@Override
public Fragment getItem(int position) {
return listFragments.get(position);
}
@Override
public int getCount() {
return listFragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return getString(R.string.commits);
case 1:
return getString(R.string.commits_detail_files);
}
return "";
}
}
}