package com.nuscomputing.ivle; import com.nuscomputing.ivle.providers.WorkbinsContract; 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.ListFragment; import android.support.v4.app.LoaderManager; import android.support.v4.widget.CursorAdapter; import android.support.v4.widget.SimpleCursorAdapter; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; /** * Fragment to list modules. * @author yjwong */ public class ModuleWorkbinsFragment extends ListFragment implements DataLoaderListener { // {{{ properties /** TAG for logging */ public static final String TAG = "WorkbinsFragment"; /** Data loader instance */ private DataLoader mLoader; /** LoaderManager instance */ private LoaderManager mLoaderManager; /** The list adapter */ public SimpleCursorAdapter mAdapter = null; /** The module ID */ private long mModuleId = -1; /** The refresh receiver */ private BroadcastReceiver mRefreshReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.v(TAG, "Received sync completion broadcast, reloading data"); mLoaderManager.restartLoader(DataLoader.LOADER_MODULE_WORKBINS_FRAGMENT, null, mLoader); } }; // }}} // {{{ methods @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the module workbins view. return inflater.inflate(R.layout.module_workbins_fragment, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // Obtain the module ID. Bundle args = getArguments(); mModuleId = args.getLong("moduleId"); if (mModuleId == -1) { throw new IllegalStateException("No module ID was passed to ModuleWebcastsFragment"); } // Define the bindings to the listview. String[] uiBindFrom = { WorkbinsContract.TITLE }; int[] uiBindTo = { R.id.module_workbins_fragment_list_title }; // Fetch data for the list adapter. mAdapter = new SimpleCursorAdapter( getActivity(), R.layout.module_workbins_fragment_list_item, null, uiBindFrom, uiBindTo, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER ); mLoader = new DataLoader(getActivity(), mAdapter, this); mLoaderManager = getLoaderManager(); mLoaderManager.initLoader(DataLoader.LOADER_MODULE_WORKBINS_FRAGMENT, args, mLoader); // Get the listview. LinearLayout layout = (LinearLayout) getActivity().findViewById(R.id.module_workbins_fragment_linear_layout); ListView listView = (ListView) layout.findViewById(android.R.id.list); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // Start the module workbin activity. Intent intent = new Intent(); intent.setClass(getActivity(), ViewWorkbinActivity.class); intent.putExtra("workbinId", id); startActivity(intent); } }); setListAdapter(mAdapter); } @Override public void onPause() { super.onPause(); getActivity().getApplicationContext().unregisterReceiver(mRefreshReceiver); } @Override public void onResume() { super.onResume(); getActivity().getApplicationContext().registerReceiver(mRefreshReceiver, new IntentFilter(IVLESyncService.ACTION_SYNC_COMPLETE)); } public void onLoaderFinished(Bundle result) { TextView tvNoWorkbins = (TextView) getActivity().findViewById(R.id.module_workbins_fragment_no_workbins); tvNoWorkbins.setVisibility(result.getInt("cursorCount") == 0 ? TextView.VISIBLE : TextView.GONE); } // }}} }