package com.nuscomputing.ivle; import com.actionbarsherlock.app.SherlockListFragment; import com.nuscomputing.ivle.providers.WorkbinFilesContract; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentTransaction; import android.support.v4.app.LoaderManager; import android.support.v4.widget.CursorAdapter; import android.support.v4.widget.SimpleCursorAdapter; import android.support.v4.widget.SimpleCursorAdapter.ViewBinder; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.AdapterView.OnItemClickListener; /** * Fragment to view a workbin's files. * @author yjwong */ public class ViewWorkbinFilesFragment extends SherlockListFragment implements DataLoaderListener { // {{{ properties /** TAG for logging */ public static final String TAG = "ViewWorkbinFilesFragment"; /** Data loader instance */ private DataLoader mLoader; /** LoaderManager instance */ private LoaderManager mLoaderManager; /** The list adapter */ private SimpleCursorAdapter mAdapter = null; // }}} // {{{ methods @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.view_workbin_files_fragment, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // Obtain the workbin folder ID. final Bundle args = getArguments(); // Load the workbin file data. String[] uiBindFrom = { WorkbinFilesContract.FILE_NAME, WorkbinFilesContract.DOWNLOAD_URL, WorkbinFilesContract.FILE_SIZE }; int[] uiBindTo = { R.id.view_workbin_files_fragment_list_file_name, R.id.view_workbin_files_fragment_list_download_url, R.id.view_workbin_files_fragment_list_file_size }; mAdapter = new SimpleCursorAdapter( getActivity(), R.layout.view_workbin_files_fragment_list_item, null, uiBindFrom, uiBindTo, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER ); mAdapter.setViewBinder(new ViewBinder() { @Override public boolean setViewValue(View view, Cursor cursor, int columnIndex) { if (columnIndex == cursor.getColumnIndex(WorkbinFilesContract.FILE_NAME)) { view.setTag(cursor.getString(columnIndex)); return false; } if (columnIndex == cursor.getColumnIndex(WorkbinFilesContract.DOWNLOAD_URL)) { view.setTag(cursor.getString(columnIndex)); return true; } if (columnIndex == cursor.getColumnIndex(WorkbinFilesContract.FILE_SIZE)) { view.setTag(cursor.getDouble(columnIndex)); return true; } return false; } }); mLoader = new DataLoader(getActivity(), mAdapter, this); mLoaderManager = getLoaderManager(); mLoaderManager.initLoader(DataLoader.LOADER_VIEW_WORKBIN_FILES_FRAGMENT, args, mLoader); // Get the listview. LinearLayout layout = (LinearLayout) getActivity().findViewById(R.id.view_workbin_files_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) { // Obtain download URL. View tvDownloadUrl = view.findViewById(R.id.view_workbin_files_fragment_list_download_url); String downloadUrl = (String) tvDownloadUrl.getTag(); // Obtain file name. View tvFileName = view.findViewById(R.id.view_workbin_files_fragment_list_file_name); String fileName = (String) tvFileName.getTag(); // Obtain file size. View tvFileSize = view.findViewById(R.id.view_workbin_files_fragment_list_file_size); Double fileSize = (Double) tvFileSize.getTag(); // Define download arguments. Bundle args = new Bundle(); args.putString("downloadUrl", downloadUrl); args.putString("fileName", fileName); args.putDouble("fileSize", fileSize); // Launch progress dialog to download this file. showDownloadDialog(args); } }); // Set the list adapter. setListAdapter(mAdapter); } private void showDownloadDialog(Bundle args) { // Show the dialog. FragmentTransaction transaction = getFragmentManager().beginTransaction(); DialogFragment fragment = new WorkbinFileDownloadDialogFragment(); fragment.setArguments(args); fragment.show(transaction, "DOWNLOAD_DIALOG"); } public void onLoaderFinished(Bundle result) { TextView tvNoFiles = (TextView) getActivity().findViewById(R.id.view_workbin_files_fragment_no_files); tvNoFiles.setVisibility(result.getInt("cursorCount") == 0 ? TextView.VISIBLE : TextView.GONE); } // }}} }