package net.coding.program.task;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.util.TypedValue;
import android.view.ViewGroup;
import net.coding.program.MyApp;
import net.coding.program.R;
import net.coding.program.common.Global;
import net.coding.program.common.ListModify;
import net.coding.program.common.SaveFragmentPagerAdapter;
import net.coding.program.common.ui.BaseFragment;
import net.coding.program.model.AccountInfo;
import net.coding.program.model.ProjectObject;
import net.coding.program.model.TaskObject;
import net.coding.program.project.detail.TaskListFragment;
import net.coding.program.project.detail.TaskListFragment_;
import net.coding.program.task.add.TaskAddActivity_;
import net.coding.program.third.MyPagerSlidingTabStrip;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.OnActivityResult;
import org.androidannotations.annotations.OptionsItem;
import org.androidannotations.annotations.OptionsMenu;
import org.androidannotations.annotations.ViewById;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
@EFragment(R.layout.fragment_task)
@OptionsMenu(R.menu.fragment_task)
public class TaskFragment extends BaseFragment implements TaskListParentUpdate {
final String host = Global.HOST_API + "/projects?pageSize=100&type=all";
final String urlTaskCount = Global.HOST_API + "/tasks/projects/count";
@ViewById
MyPagerSlidingTabStrip tabs;
@ViewById(R.id.pagerTaskFragment)
ViewPager pager;
ArrayList<ProjectObject> mData = new ArrayList<>();
ArrayList<ProjectObject> mAllData = new ArrayList<>();
int pageMargin;
private PageTaskFragment adapter;
@AfterViews
void init() {
// mData = AccountInfo.loadTaskProjects(getActivity());
// if (mData.isEmpty()) {
showDialogLoading();
// }
pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources()
.getDisplayMetrics());
tabs.setLayoutInflater(mInflater);
getNetwork(host, host);
adapter = new PageTaskFragment(getChildFragmentManager());
pager.setPageMargin(pageMargin);
pager.setAdapter(adapter);
if (!mData.isEmpty()) {
tabs.setViewPager(pager);
adapter.notifyDataSetChanged();
}
}
@Override
public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException {
if (tag.equals(host)) {
hideProgressDialog();
if (code == 0) {
JSONArray jsonArray = respanse.getJSONObject("data").getJSONArray("list");
for (int i = 0; i < jsonArray.length(); ++i) {
ProjectObject projectObject = new ProjectObject(jsonArray.getJSONObject(i));
mAllData.add(projectObject);
}
getNetwork(urlTaskCount, urlTaskCount);
} else {
showErrorMsg(code, respanse);
}
} else if (tag.equals(urlTaskCount)) {
if (code == 0) {
mData = new ArrayList<>();
mData.add(new ProjectObject());
JSONArray jsonArray = respanse.getJSONArray("data");
for (int i = 0; i < jsonArray.length(); ++i) {
TaskCount taskCount = new TaskCount(jsonArray.getJSONObject(i));
for (int j = 0; j < mAllData.size(); ++j) {
ProjectObject project = mAllData.get(j);
if (taskCount.project == project.getId()) {
mData.add(project);
}
}
}
AccountInfo.saveTaskProjects(getActivity(), mData);
tabs.setViewPager(pager);
adapter.notifyDataSetChanged();
} else {
showErrorMsg(code, respanse);
}
}
}
@OnActivityResult(ListModify.RESULT_EDIT_LIST)
void onResultEditList(int resultCode) {
if (resultCode == Activity.RESULT_OK) {
taskListParentUpdate();
}
}
@Override
public void taskListParentUpdate() {
List<WeakReference<Fragment>> array = adapter.getFragments();
for (WeakReference<Fragment> item : array) {
Fragment fragment = item.get();
if (fragment instanceof TaskListUpdate) {
((TaskListUpdate) fragment).taskListUpdate(true);
}
}
}
@OptionsItem
protected final void action_add() {
ProjectObject projectObject = mData.get(pager.getCurrentItem());
TaskAddActivity_.intent(this)
.mUserOwner(MyApp.sUserObject)
.mProjectObject(projectObject)
.startForResult(ListModify.RESULT_EDIT_LIST);
}
public static class TaskCount {
public int project;
public int processing;
public int done;
public TaskCount(JSONObject json) throws JSONException {
project = json.optInt("project");
processing = json.optInt("processing");
done = json.optInt("done");
}
}
private class PageTaskFragment extends SaveFragmentPagerAdapter implements MyPagerSlidingTabStrip.IconTabProvider {
public PageTaskFragment(android.support.v4.app.FragmentManager fm) {
super(fm);
}
@Override
public CharSequence getPageTitle(int position) {
return mData.get(position).name;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
TaskListFragment fragment = (TaskListFragment) super.instantiateItem(container, position);
fragment.setParent(TaskFragment.this);
Log.d("", "init p " + position);
return fragment;
}
@Override
public int getItemPosition(Object object) {
return PagerAdapter.POSITION_NONE;
}
@Override
public String getPageIconUrl(int position) {
return mData.get(position).icon;
}
@Override
public Fragment getItem(int position) {
TaskListFragment_ fragment = new TaskListFragment_();
Bundle bundle = new Bundle();
bundle.putSerializable("mMembers", new TaskObject.Members(AccountInfo.loadAccount(getActivity())));
bundle.putSerializable("mProjectObject", mData.get(position));
bundle.putBoolean("mShowAdd", false);
fragment.setArguments(bundle);
saveFragment(fragment);
return fragment;
}
}
}