/*
* Copyright (c) 2011, 2012 Roberto Tyley
*
* This file is part of 'Agit' - an Android Git client.
*
* Agit is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Agit is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/ .
*/
package com.madgag.agit;
import static com.madgag.agit.R.styleable.CommitView_viewPagerId;
import android.content.Context;
import android.content.res.TypedArray;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.widget.LinearLayout;
import com.viewpagerindicator.TabPageIndicator;
import java.io.IOException;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revplot.PlotCommit;
import org.eclipse.jgit.revplot.PlotLane;
import org.eclipse.jgit.revplot.PlotWalk;
import org.eclipse.jgit.revwalk.RevCommit;
public class CommitView extends LinearLayout {
private static final String TAG = "CommitView";
private final LayoutInflater layoutInflater;
private Repository repository;
private PlotWalk revWalk;
PlotCommit<PlotLane> commit;
ViewPager pager;
TabPageIndicator tabPageIndicator;
public CommitView(Context context, AttributeSet attrs) {
super(context, attrs);
layoutInflater = LayoutInflater.from(context);
layoutInflater.inflate(R.layout.commit_view, this);
pager = (ViewPager) findViewById(R.id.pager);
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.CommitView);
int viewPagerId = array.getResourceId(CommitView_viewPagerId, R.id.pager);
array.recycle();
Log.d(TAG, "viewPagerId="+viewPagerId);
pager.setId(viewPagerId);
tabPageIndicator = (TabPageIndicator) findViewById(R.id.indicator);
}
public void setRepositoryContext(Repository repository, PlotWalk revWalk) {
this.repository = repository;
this.revWalk = revWalk;
}
public void setCommit(final PlotCommit<PlotLane> c) throws IOException {
this.commit = c;
CommitViewerActivity commitViewerActivity = (CommitViewerActivity) getContext();
pager.setAdapter(new CommitPagerAdapter(commitViewerActivity.getSupportFragmentManager(), repository, c));
tabPageIndicator.setViewPager(pager);
tabPageIndicator.notifyDataSetChanged();
Log.d(TAG, "setCommit : " + commit);
}
public static class CommitPagerAdapter extends FragmentStatePagerAdapter {
private final Repository repository;
private final PlotCommit<PlotLane> commit;
public CommitPagerAdapter(FragmentManager fm, Repository repository, PlotCommit<PlotLane> c) {
super(fm);
this.repository = repository;
this.commit = c;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return CommitDetailsFragment.newInstance(repository.getDirectory(), commit.name());
case 1:
return FileListFragment.newInstance(repository.getDirectory(), commit.name());
default:
return CommitDiffFragment.newInstance(repository.getDirectory(),
parentCommit(position).name(), commit.name());
}
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Commit";
case 1:
return "Files";
default:
return "Δ " + parentCommit(position).name().substring(0, 4);
}
}
private RevCommit parentCommit(int position) {
return commit.getParents()[position - 2];
}
@Override
public int getCount() {
return 2 + commit.getParents().length;
}
}
}