package com.quinn.githubknife.ui.fragments;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.quinn.githubknife.presenter.TreePresenterImpl;
import com.quinn.githubknife.ui.activity.CodeActivity;
import com.quinn.githubknife.ui.activity.ImageActivity;
import com.quinn.githubknife.ui.activity.ReadmeActivity;
import com.quinn.githubknife.ui.adapter.TreeAdapter;
import com.quinn.githubknife.ui.widget.RecycleItemClickListener;
import com.quinn.githubknife.utils.FileUtils;
import com.quinn.githubknife.utils.L;
import com.quinn.httpknife.github.GithubImpl;
import com.quinn.httpknife.github.TreeItem;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Quinn on 7/15/15.
*/
public class TreeFragment extends BaseFragment implements RecycleItemClickListener {
public final static String TAG = TreeFragment.class.getSimpleName();
private TreeAdapter adapter;
private PathCallback callback;
public interface PathCallback {
public void onPathChoosen(String path, String sha);
public String getAbosolutePath(int position);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof PathCallback) {
callback = (PathCallback) activity;
} else {
throw new IllegalStateException("TreeActivity have not implement PathCallback");
}
}
public static TreeFragment getInstance(String owner, String repo, String branch) {
TreeFragment treeFragment = new TreeFragment();
Bundle bundle = new Bundle();
bundle.putString("user", owner);
bundle.putString("repo", repo);
bundle.putString("branch",branch);
treeFragment.setArguments(bundle);
return treeFragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dataItems = new ArrayList<TreeItem>();
presenter = new TreePresenterImpl(this.getActivity(), this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
adapter = new TreeAdapter(dataItems);
recyclerView.setAdapter(adapter);
adapter.setOnItemClickListener(this);
return view;
}
@Override
public void setItems(List items) {
super.setItems(items);
for (Object user : items) {
dataItems.add((TreeItem) user);
}
loading = false;
if (items.size() < GithubImpl.DEFAULT_PAGE_SIZE)
haveMore = false;
adapter.notifyDataSetChanged();
}
@Override
public void intoItem(int position) {
super.intoItem(position);
TreeItem item = (TreeItem) dataItems.get(position);
callback.onPathChoosen(item.getPath(), item.getSha());
branch = item.getSha();
dataItems.clear();
adapter.notifyDataSetChanged();
presenter.onTreeLoad(user, repo, branch);
}
@Override
public void onItemClick(View view, int position) {
TreeItem treeItem = ((TreeItem) dataItems.get(position));
if (treeItem.getType().equals(TreeItem.MODE_TREE)) {
intoItem(position);
} else if (treeItem.getType().equals(TreeItem.MODE_BLOB)) {
if(FileUtils.isImage(treeItem.getPath())){
String path = callback.getAbosolutePath(position) + "/" + treeItem.getPath();
Bundle bundle = new Bundle();
bundle.putString("path",path);
bundle.putString("repo",repo);
bundle.putString("user",user);
bundle.putString("branch", "master");
ImageActivity.launch(this.getActivity(),bundle);
} else if(treeItem.getPath().endsWith("README.md")){
String url = "https://github.com" + File.separator + user + File.separator + repo + File.separator + "blob/" + branch + "/README.md";
ReadmeActivity.launch(this.getActivity(),url);
} else {
Bundle bundle = new Bundle();
bundle.putString("owner", user);
bundle.putString("repo", repo);
String absPath = callback.getAbosolutePath(position);
String path;
if (absPath != null && absPath.isEmpty() == false)
path = callback.getAbosolutePath(position) + "/" + treeItem.getPath();
else
path = ((TreeItem) dataItems.get(position)).getPath();
bundle.putString("path", path);
L.i(TAG, "file path = " + path);
CodeActivity.launch(this.getActivity(), bundle);
}
}
}
public void loadCertainTree(String certainSha) {
dataItems.clear();
adapter.notifyDataSetChanged();
presenter.onTreeLoad(user, repo, certainSha);
}
}