package pontezit.android.tilos.com.fragment; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import com.androidquery.AQuery; import com.androidquery.callback.AjaxCallback; import com.androidquery.callback.AjaxStatus; import com.commonsware.cwac.merge.MergeAdapter; import java.util.ArrayList; import flexjson.JSONDeserializer; import pontezit.android.tilos.com.R; import pontezit.android.tilos.com.activity.MediaPlayerActivity; import pontezit.android.tilos.com.adapter.ShowListAdapter; import pontezit.android.tilos.com.modell.Show; import pontezit.android.tilos.com.utils.Finals; import pontezit.android.tilos.com.utils.LogHelper; import pontezit.android.tilos.com.utils.PreferencesHelper; public class ShowListFragment extends Fragment{ TextView errorTextView; ListView listView; ProgressBar progressBar; private int index = -1; private int top = 0; private View view; private MediaPlayerActivity activity; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setRetainInstance(true); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { LogHelper.Log("MediaPlayerFragment; onCreateView running", 1); try{ setHasOptionsMenu(true); }catch(NullPointerException e){ LogHelper.Log("setHasOptionsMenu, NullpointerExcepotion"); } activity = (MediaPlayerActivity) getActivity(); if(!activity.isTabletView()) activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); view = inflater.inflate(R.layout.fragment_show_list, container, false); listView = (ListView) view.findViewById(R.id.showList); errorTextView = (TextView) view.findViewById(R.id.showListError); progressBar = (ProgressBar) view.findViewById(R.id.showListProgressBar); getShowList(); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); LogHelper.Log("ShowListFragment, onActivityCreated run;", 1); if (index == -1 && savedInstanceState != null) { index = savedInstanceState.getInt("index", -1); top = savedInstanceState.getInt("top", 0); LogHelper.Log("ShowListFragment, onActivityCreated; savedInstanceState not null; index = " + index + ", top = " + top, 1); } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); LogHelper.Log("ShowListFragment, onSaveInstanceState run;", 1); try{ index = listView.getFirstVisiblePosition(); LogHelper.Log("ShowListFragment, onSaveInstanceState; index = " + index, 1); View v = listView.getChildAt(0); top = (v == null) ? 0 : v.getTop(); outState.putInt("index", index); outState.putInt("top", top); } catch(Throwable t){ t.printStackTrace(); } } @Override public void onPause() { LogHelper.Log("ShowListFragment, onPause", 1); index = listView.getFirstVisiblePosition(); View v = listView.getChildAt(0); top = (v == null) ? 0 : v.getTop(); super.onPause(); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); if(!activity.isTabletView()) menu.clear(); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case android.R.id.home: getActivity().onBackPressed(); return true; } return false; } public void getShowList(){ String url = Finals.API_BASE_URL + "show"; AQuery aq = new AQuery(getActivity()); long expire = 12 * 60 * 60 * 1000; //12 hours cache intervall aq.ajax(url, String.class, expire, new AjaxCallback<String>(){ @Override public void callback(String url, String showListString, AjaxStatus status){ if(showListString != null){ ArrayList<Show> showList = new JSONDeserializer<ArrayList<Show>>().use(null, ArrayList.class) .use("values", Show.class) .deserialize(showListString); ArrayList<Show> favoriteShows = new ArrayList<Show>(); ArrayList<Show> otherShows = new ArrayList<Show>(); int count = 0; PreferencesHelper preferencesHelper = new PreferencesHelper(Finals.PREFS_FAVORITES, getActivity()); for(Show show : showList){ if(preferencesHelper.sp.getBoolean(show.getId()+"", false)) favoriteShows.add(show); else otherShows.add(show); count++; } ShowListAdapter favoriteAdapter = new ShowListAdapter(getActivity(), favoriteShows); ShowListAdapter otherAdapter = new ShowListAdapter(getActivity(), otherShows); LayoutInflater inflateer = LayoutInflater.from(getActivity()); //LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService( Context.LAYOUT_INFLATER_SERVICE ); //View header = inflateer.inflate(R.layout.merge_adapter_header, true); View favoriteHeaderView = View.inflate(getActivity(), R.layout.merge_adapter_header, null); TextView favoriteTitle = (TextView) favoriteHeaderView.findViewById(R.id.headerTitle); favoriteTitle.setText(getActivity().getResources().getString(R.string.favorite_yours).toUpperCase()); View otherHeaderView = View.inflate(getActivity(), R.layout.merge_adapter_header, null); TextView otherTitle = (TextView) otherHeaderView.findViewById(R.id.headerTitle); otherTitle.setText(getActivity().getResources().getString(R.string.other_shows).toUpperCase()); MergeAdapter adapter = new MergeAdapter(); adapter.addView(favoriteHeaderView); if(favoriteShows.size() == 0){ View noShow = View.inflate(getActivity(), R.layout.row_no_show, null); adapter.addView(noShow); }else{ adapter.addAdapter(favoriteAdapter); } adapter.addView(otherHeaderView); adapter.addAdapter(otherAdapter); listView.setAdapter(adapter); progressBar.setVisibility(View.GONE); errorTextView.setVisibility(View.GONE); listView.setVisibility(View.VISIBLE); if(index != -1){ listView.setSelectionFromTop(index, top); } }else{ errorTextView.setVisibility(View.VISIBLE); } } }); } }