package com.athena.asm.fragment;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import com.actionbarsherlock.app.SherlockFragment;
import com.athena.asm.ActivityFragmentTargets;
import com.athena.asm.OnOpenActivityFragmentListener;
import com.athena.asm.R;
import com.athena.asm.aSMApplication;
import com.athena.asm.Adapter.GuidanceListAdapter;
import com.athena.asm.data.Subject;
import com.athena.asm.listener.OnKeyDownListener;
import com.athena.asm.util.ListViewUtil;
import com.athena.asm.util.StringUtility;
import com.athena.asm.util.task.LoadGuidanceTask;
import com.athena.asm.viewmodel.BaseViewModel;
import com.athena.asm.viewmodel.HomeViewModel;
public class GuidanceListFragment extends SherlockFragment implements
BaseViewModel.OnViewModelChangObserver, OnKeyDownListener {
private HomeViewModel m_viewModel;
private LayoutInflater m_inflater;
private ExpandableListView m_listView;
private boolean m_isLoaded;
private OnOpenActivityFragmentListener m_onOpenActivityFragmentListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
m_inflater = inflater;
View layout = m_inflater.inflate(R.layout.guidance, null);
m_listView = (ExpandableListView) layout.findViewById(R.id.guidance_list);
aSMApplication application = (aSMApplication) getActivity()
.getApplication();
m_viewModel = application.getHomeViewModel();
m_viewModel.registerViewModelChangeObserver(this);
m_isLoaded = false;
return m_listView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Activity parentActivity = getSherlockActivity();
if (parentActivity instanceof OnOpenActivityFragmentListener) {
m_onOpenActivityFragmentListener = (OnOpenActivityFragmentListener) parentActivity;
}
if (m_viewModel.getCurrentTab() != null
&& m_viewModel.getCurrentTab().equals(
StringUtility.TAB_GUIDANCE)) {
reloadGuidanceList();
}
}
@Override
public void onDestroy() {
m_viewModel.unregisterViewModelChangeObserver(this);
super.onDestroy();
}
public void reloadGuidanceList() {
if (m_viewModel.getGuidanceSectionNames() == null
|| m_viewModel.getGuidanceSectionDetails() == null) {
if(m_viewModel.m_isLoadingInProgress) return;
LoadGuidanceTask loadGuidanceTask = new LoadGuidanceTask(
getActivity(), m_viewModel);
loadGuidanceTask.execute();
} else {
m_isLoaded = true;
m_listView.setAdapter(new GuidanceListAdapter(m_inflater, m_viewModel
.getGuidanceSectionNames(), m_viewModel
.getGuidanceSectionDetails()));
// expand first group -- top 10
if(m_listView.getExpandableListAdapter().getGroupCount() > 0)
m_listView.expandGroup(0);
m_listView.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
Bundle bundle = new Bundle();
bundle.putSerializable(StringUtility.SUBJECT, (Subject) v.getTag(R.id.tag_second));
if (m_onOpenActivityFragmentListener != null) {
m_onOpenActivityFragmentListener.onOpenActivityOrFragment(ActivityFragmentTargets.POST_LIST, bundle);
}
return true;
}
});
}
}
@Override
public void onViewModelChange(BaseViewModel viewModel,
String changedPropertyName, Object... params) {
if (changedPropertyName.equals(HomeViewModel.GUIDANCE_PROPERTY_NAME)) {
reloadGuidanceList();
} else if (changedPropertyName
.equals(HomeViewModel.CURRENTTAB_PROPERTY_NAME)) {
if (!m_isLoaded
&& m_viewModel.getCurrentTab() != null
&& m_viewModel.getCurrentTab().equals(
StringUtility.TAB_GUIDANCE)) {
reloadGuidanceList();
}
}
}
@Override
public boolean onKeyDown(int keyCode) {
return ListViewUtil.ScrollListViewByKey(m_listView, keyCode);
}
}