package net.mms_projects.copy_it.activities; import java.util.List; import net.mms_projects.copy_it.AndroidClipboardUtils; import net.mms_projects.copy_it.ClipboardUtils; import net.mms_projects.copy_it.R; import net.mms_projects.copy_it.adapters.HistoryAdapter; import net.mms_projects.copy_it.databases.HistoryItemsDbHelper; import net.mms_projects.copy_it.models.HistoryContract; import net.mms_projects.copy_it.models.HistoryItem; import net.mms_projects.copy_it.models.HistoryListFactory; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.AsyncTask; import android.os.Bundle; import android.util.SparseBooleanArray; import android.view.View; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.actionbarsherlock.app.SherlockListActivity; import com.actionbarsherlock.view.ActionMode; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import com.google.analytics.tracking.android.EasyTracker; public class HistoryActivity extends SherlockListActivity { protected ActionMode actionMode; private ActionMode.Callback actionModeCallback = new ActionMode.Callback() { // Called when the action mode is created; startActionMode() was called @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { // Inflate a menu resource providing context menu items MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(R.menu.cab_history, menu); return true; } // Called each time the action mode is shown. Always called after // onCreateActionMode, but // may be called multiple times if the mode is invalidated. @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; // Return false if nothing is done } // Called when the user selects a contextual menu item @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) { case R.id.cab_put_in_clipboard: ClipboardUtils clipboard = new AndroidClipboardUtils( HistoryActivity.this); clipboard.setText(selectedText); Toast.makeText( HistoryActivity.this, HistoryActivity.this.getResources().getString( R.string.history_content_set, selectedText), Toast.LENGTH_LONG).show(); mode.finish(); // Action picked, so close the CAB return true; default: return false; } } // Called when the user exits the action mode @Override public void onDestroyActionMode(ActionMode mode) { actionMode = null; } }; private String selectedText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if ("net.mms_projects.copy_it.history.clear".equals(this.getIntent() .getAction())) { new ListClear(this).execute(); finish(); return; } setTheme(R.style.AppTheme); setContentView(R.layout.activity_history); ListView list = (ListView) this.findViewById(android.R.id.list); list.setChoiceMode(ListView.CHOICE_MODE_SINGLE); list.setItemsCanFocus(false); new ListLoader(this).execute(); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getSupportMenuInflater(); inflater.inflate(R.menu.history, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { Intent intent = null; switch (item.getItemId()) { case R.id.action_history_clear: intent = new Intent(this, this.getClass()); intent.setAction("net.mms_projects.copy_it.history.clear"); this.startActivity(intent); return true; default: return super.onOptionsItemSelected(item); } } @Override public void onListItemClick(ListView l, View v, int position, long id) { SparseBooleanArray checked = l.getCheckedItemPositions(); boolean hasCheckedElement = false; for (int i = 0; i < checked.size() && !hasCheckedElement; i++) { hasCheckedElement = checked.valueAt(i); } if (hasCheckedElement) { TextView contentView = (TextView) v .findViewById(R.id.history_item_content); this.selectedText = contentView.getText().toString(); if (actionMode == null) { actionMode = this.startActionMode(actionModeCallback); actionMode.invalidate(); } else { actionMode.invalidate(); } } else { if (actionMode != null) { actionMode.finish(); } } } @Override protected void onResume() { super.onResume(); new ListLoader(this).execute(); } @Override protected void onStart() { super.onStart(); EasyTracker.getInstance().activityStart(this); } @Override protected void onStop() { super.onStop(); EasyTracker.getInstance().activityStop(this); } public class ListLoader extends AsyncTask<Void, Void, Cursor> { private Activity activity; private SQLiteDatabase database; public ListLoader(Activity activity) { this.activity = activity; HistoryItemsDbHelper dbHelper = new HistoryItemsDbHelper( this.activity); this.database = dbHelper.getReadableDatabase(); } @Override protected Cursor doInBackground(Void... params) { String[] projection = { HistoryContract.ItemEntry.COLUMN_NAME_CONTENT, HistoryContract.ItemEntry.COLUMN_NAME_DATE, HistoryContract.ItemEntry.COLUMN_NAME_CHANGE }; String sortOrder = HistoryContract.ItemEntry.COLUMN_NAME_DATE + " DESC"; Cursor cursor = this.database.query( HistoryContract.ItemEntry.TABLE_NAME, projection, null, null, null, null, sortOrder); return cursor; } @Override protected void onPostExecute(Cursor cursor) { ListView list = (ListView) this.activity .findViewById(android.R.id.list); List<HistoryItem> items = HistoryListFactory.buildList(cursor); ListAdapter adapter = new HistoryAdapter(this.activity, items); list.setAdapter(adapter); this.database.close(); } } public class ListClear extends AsyncTask<Void, Void, Void> { private Activity activity; public ListClear(Activity activity) { this.activity = activity; } @Override protected Void doInBackground(Void... params) { HistoryItemsDbHelper dbHelper = new HistoryItemsDbHelper( this.activity); dbHelper.clearDatabase(dbHelper.getReadableDatabase()); dbHelper.onCreate(dbHelper.getReadableDatabase()); return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); Toast.makeText(this.activity, this.activity.getString(R.string.text_history_cleared), Toast.LENGTH_LONG).show(); } } }