package com.vladstoick.Fragments; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; import android.widget.TextView; import com.actionbarsherlock.app.SherlockFragment; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import com.squareup.otto.Subscribe; import com.vladstoick.DataModel.NewsDataSource; import com.vladstoick.DataModel.NewsGroup; import com.vladstoick.DialogFragment.NoConnectionDialogFragment; import com.vladstoick.OttoBus.BusProvider; import com.vladstoick.OttoBus.DataLoadedEvent; import com.vladstoick.Utils.Adapters.NewsGroupAdapter; import com.vladstoick.Utils.Utils; import com.vladstoick.stiridinromania.R; import com.vladstoick.stiridinromania.StiriApp; import java.util.ArrayList; import butterknife.InjectView; import butterknife.Views; public class NewsGroupListFragment extends SherlockFragment implements ListView.OnItemClickListener{ private NewsGroupAdapter adapter; private ArrayList<NewsGroup> newsDataSource; private static final String STATE_ACTIVATED_POSITION = "activated_position"; @InjectView(R.id.newsgroup_listview) ListView mListView; @InjectView(R.id.warning) TextView mWarning; private Callbacks mCallbacks; MenuItem refreshItem; private int mActivatedPosition = ListView.INVALID_POSITION; public interface Callbacks { public void onItemSelected(int id); public void onAddNewGroupSelected(); } public NewsGroupListFragment() { } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); BusProvider.getInstance().register(this); setHasOptionsMenu(true); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_newsgroup_list,container,true); Views.inject(this,view); mListView.setOnItemClickListener(this); mWarning.setVisibility(View.GONE); return view; } private void setAdapter() { newsDataSource = NewsDataSource.getInstance().getAllNewsGroups(); Context context = getSherlockActivity(); StiriApp stiriApp = (StiriApp)(getSherlockActivity().getApplication()); if (newsDataSource != null) { mWarning.setVisibility(newsDataSource.size()==0 ? View.VISIBLE : View.GONE); adapter = new NewsGroupAdapter(newsDataSource, context, stiriApp, this); mListView.setAdapter(adapter); } else { mWarning.setVisibility(View.VISIBLE); } } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // Restore the previously serialized activated item position. if (savedInstanceState != null && savedInstanceState.containsKey(STATE_ACTIVATED_POSITION)) { setActivatedPosition(savedInstanceState.getInt(STATE_ACTIVATED_POSITION)); } setAdapter(); } @Override public void onAttach(Activity activity) { super.onAttach(activity); if (!(activity instanceof Callbacks)) { throw new IllegalStateException("Activity must implement fragment's callbacks."); } mCallbacks = (Callbacks) activity; } @Override public void onDetach() { super.onDetach(); mCallbacks = null; BusProvider.getInstance().unregister(this); } @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { mCallbacks.onItemSelected(newsDataSource.get(i).getId()); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); if (mActivatedPosition != ListView.INVALID_POSITION) { outState.putInt(STATE_ACTIVATED_POSITION, mActivatedPosition); } } public void setActivateOnItemClick(boolean activateOnItemClick) { mListView.setChoiceMode(activateOnItemClick ? ListView.CHOICE_MODE_SINGLE : ListView.CHOICE_MODE_NONE); } private void setActivatedPosition(int position) { if (position == ListView.INVALID_POSITION) { mListView.setItemChecked(mActivatedPosition, false); } else { mListView.setItemChecked(position, true); } mActivatedPosition = position; } @Subscribe public void onDataLoaded(DataLoadedEvent event) { try{ refreshItem.setActionView(null); } catch (Exception e){ e.printStackTrace(); } setAdapter(); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.news_group_list_fragment,menu); refreshItem = menu.findItem(R.id.action_refresh); if(!NewsDataSource.getInstance().isDataLoaded) refreshItem.setActionView(R.layout.actionbar_refresh); super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_add: { if(Utils.isOnline(getSherlockActivity())==true){ mCallbacks.onAddNewGroupSelected(); }else { NoConnectionDialogFragment ndf = new NoConnectionDialogFragment(); ndf.show(getSherlockActivity().getSupportFragmentManager(), NoConnectionDialogFragment.TAG); } break; } case R.id.action_refresh:{ if(Utils.isOnline(getSherlockActivity()) == true){ NewsDataSource.getInstance().loadData(); item.setActionView(R.layout.actionbar_refresh); } else { NoConnectionDialogFragment ndf = new NoConnectionDialogFragment(); ndf.show(getSherlockActivity().getSupportFragmentManager(), NoConnectionDialogFragment.TAG); } break; } } return super.onOptionsItemSelected(item); } }