package net.coding.program.project;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.SwipeRefreshLayout;
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import net.coding.program.MyApp;
import net.coding.program.R;
import net.coding.program.common.Global;
import net.coding.program.common.ui.BaseFragment;
import net.coding.program.common.umeng.UmengEvent;
import net.coding.program.common.widget.NoHorizontalScrollViewPager;
import net.coding.program.event.EventPosition;
import net.coding.program.event.EventRefresh;
import net.coding.program.maopao.MaopaoAddActivity_;
import net.coding.program.model.AccountInfo;
import net.coding.program.model.ProjectObject;
import net.coding.program.project.init.create.ProjectCreateActivity_;
import net.coding.program.search.SearchProjectActivity_;
import net.coding.program.task.add.TaskAddActivity_;
import net.coding.program.user.AddFollowActivity_;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.FragmentArg;
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;
import de.greenrobot.event.EventBus;
@EFragment(R.layout.fragment_project)
@OptionsMenu(R.menu.menu_project_item)
public class ProjectFragment extends BaseFragment implements ViewPager.OnPageChangeListener, ProjectListFragment.UpdateData, SwipeRefreshLayout.OnRefreshListener {
public static final String RECEIVER_INTENT_REFRESH_PROJECT = "net.coding.program.project.receiver.refresh";
static final int RESULT_PROJECT_SEARCH_PICK = 88;
final String host = Global.HOST_API + "/projects?pageSize=100&type=all&sort=hot";
String[] program_title;
@ViewById(R.id.pagerFragmentProgram)
NoHorizontalScrollViewPager pager;
@FragmentArg
Type type = Type.Main;
boolean requestOk = true;
private int pageIndex = 0;
boolean needRefresh = true;
ArrayList<ProjectObject> mData = new ArrayList<>();
private MyProjectPagerAdapter adapter;
private BroadcastReceiver refreshReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(RECEIVER_INTENT_REFRESH_PROJECT)) {
needRefresh = true;
}
}
};
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
EventBus.getDefault().register(this);
}
@Override
public void onDetach() {
super.onDetach();
EventBus.getDefault().unregister(this);
}
// 用于处理推送
public void onEventMainThread(EventPosition event) {
int position = event.position;
pager.setCurrentItem(position, false);
}
@AfterViews
protected void init() {
hideProgressDialog();
mData = AccountInfo.loadProjects(getActivity());
pager.setOnPageChangeListener(this);
setHasOptionsMenu(true);
if (type == Type.Main) {
program_title = getResources().getStringArray(R.array.program_title);
} else {
program_title = getResources().getStringArray(R.array.program_title_pick);
}
adapter = new MyProjectPagerAdapter(this, getChildFragmentManager());
pager.setAdapter(adapter);
pager.setOffscreenPageLimit(6);
pager.setCurrentItem(0);
int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources()
.getDisplayMetrics());
pager.setPageMargin(pageMargin);
}
@Override
public void onRefresh() {
getNetwork(host, host);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if (type == Type.Main) {
inflater.inflate(R.menu.menu_fragment_project, menu);
} else {
inflater.inflate(R.menu.menu_project_pick_search, menu);
}
MenuItem menuItem = menu.findItem(R.id.action_filter);
menuItem.setIcon(R.drawable.ic_filter_normal);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public void updateRead(int id) {
List<WeakReference<Fragment>> fragmentList = adapter.getFragments();
for (WeakReference<Fragment> item : fragmentList) {
Fragment fragment = item.get();
if (fragment instanceof ProjectListFragment) {
((ProjectListFragment) fragment).setRead(id);
}
}
}
@Override
public void updatePin(int id, boolean pin) {
List<WeakReference<Fragment>> fragmentList = adapter.getFragments();
for (WeakReference<Fragment> item : fragmentList) {
Fragment fragment = item.get();
if (fragment instanceof ProjectListFragment) {
((ProjectListFragment) fragment).setPin(id, pin);
}
}
}
@OptionsItem
void action_filter() {
if (pageIndex != program_title.length) {
pager.setCurrentItem(program_title.length, false);
} else {
pager.setCurrentItem(program_title.length - pageIndex, false);
}
}
@OptionsItem
void action_search() {
SearchProjectActivity_.intent(this).start();
getActivity().overridePendingTransition(R.anim.abc_fade_in, R.anim.abc_fade_out);
}
@OptionsItem
void action_search_pick() {
// SearchProjectActivity_.intent(this).type(type).startForResult(RESULT_PROJECT_SEARCH_PICK);
// getActivity().overridePendingTransition(R.anim.abc_fade_in, R.anim.abc_fade_out);
}
@OnActivityResult(RESULT_PROJECT_SEARCH_PICK)
final void resultPickSearch(int result, Intent intent) {
if (result == Activity.RESULT_OK) {
// ProjectObject projectObject = (ProjectObject) intent.getSerializableExtra("data");
// Intent intent1 = new Intent();
// intent1.putExtra("data", proj);
getActivity().setResult(Activity.RESULT_OK, intent);
getActivity().finish();
}
}
@OptionsItem
void action_create_friend() {
umengEvent(UmengEvent.LOCAL, "快捷添加好友");
AddFollowActivity_.intent(this).start();
}
@OptionsItem
final void action_create() {
umengEvent(UmengEvent.LOCAL, "快捷创建项目");
ProjectCreateActivity_.intent(this).start();
}
@OptionsItem
final void action_create_task() {
umengEvent(UmengEvent.LOCAL, "快捷创建任务");
TaskAddActivity_.intent(this).mUserOwner(MyApp.sUserObject).start();
}
@OptionsItem
final void action_create_maopao() {
umengEvent(UmengEvent.LOCAL, "快捷创建冒泡");
MaopaoAddActivity_.intent(this).start();
}
@OptionsItem
final void action_scan() {
Global.start2FAActivity(getActivity());
}
@OptionsItem
final void action_2fa() {
Global.start2FAActivity(getActivity());
}
@Override
public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException {
if (tag.equals(host)) {
if (code == 0) {
requestOk = true;
mData.clear();
JSONArray array = respanse.getJSONObject("data").getJSONArray("list");
int pinCount = 0;
for (int i = 0; i < array.length(); ++i) {
JSONObject item = array.getJSONObject(i);
ProjectObject oneData = new ProjectObject(item);
if (oneData.isPin()) {
mData.add(pinCount++, oneData);
} else {
mData.add(oneData);
}
}
AccountInfo.saveProjects(getActivity(), mData);
adapter.notifyDataSetChanged();
EventBus.getDefault().post(new EventRefresh(true));
} else {
requestOk = false;
showErrorMsg(code, respanse);
adapter.notifyDataSetChanged();
}
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
List<WeakReference<Fragment>> fragmentList = adapter.getFragments();
for (WeakReference<Fragment> item : fragmentList) {
Fragment fragment = item.get();
if (fragment instanceof ProjectListFragment) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
private void registerRefreshReceiver() {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(RECEIVER_INTENT_REFRESH_PROJECT);
try {
getActivity().registerReceiver(refreshReceiver, intentFilter);
} catch (Exception e) {
Global.errorLog(e);
}
}
@Override
public void onResume() {
super.onResume();
if (needRefresh) {
needRefresh = false;
onRefresh();
}
}
@Override
public void onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
registerRefreshReceiver();
}
@Override
public void onDestroy() {
try {
getActivity().unregisterReceiver(refreshReceiver);
} catch (Exception e) {
Global.errorLog(e);
}
super.onDestroy();
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
pageIndex = position;
}
@Override
public void onPageScrollStateChanged(int state) {
}
public enum Type {
Main, Pick, Filter
}
}