/** * On long click, mark/unmark the selected view and activate/deactivate action mode */ @Override public boolean onLongClick(View v) { mAdapter.toggleSelectState(v); mAdapter.notifyDataSetChanged(); updateActionMode(); return false; }
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putIntArray(KEY_EXPANDED_IDS, mAdapter.getExpandedArray()); outState.putIntArray(KEY_REPEAT_CHECKED_IDS, mAdapter.getRepeatArray()); outState.putIntArray(KEY_SELECTED_ALARMS, mAdapter.getSelectedAlarmsArray()); outState.putBundle(KEY_RINGTONE_TITLE_CACHE, mRingtoneTitleCache); outState.putParcelable(KEY_DELETED_ALARM, mDeletedAlarm); outState.putBoolean(KEY_UNDO_SHOWING, mUndoShowing); outState.putBundle(KEY_PREVIOUS_DAY_MAP, mAdapter.getPreviousDaysOfWeekMap()); outState.putParcelable(KEY_SELECTED_ALARM, mSelectedAlarm); outState.putBoolean(KEY_DELETE_CONFIRMATION, mInDeleteConfirmation); }
/** * Scroll to alarm with given alarm id. * * @param alarmId The alarm id to scroll to. */ private void scrollToAlarm(int alarmId) { for (int i = 0; i < mAdapter.getCount(); i++) { long id = mAdapter.getItemId(i); if (id == alarmId) { mAdapter.setNewAlarm(alarmId); mAlarmsList.smoothScrollToPositionFromTop(i, 0); final int firstPositionId = mAlarmsList.getFirstVisiblePosition(); final int childId = i - firstPositionId; final View view = mAlarmsList.getChildAt(childId); mAdapter.getView(i, view, mAlarmsList); break; } } }
@Override public boolean onOptionsItemSelected(MenuItem item) { hideUndoBar(true, null); switch (item.getItemId()) { case R.id.menu_item_settings: startActivity(new Intent(this, SettingsActivity.class)); return true; case R.id.menu_item_add_alarm: asyncAddAlarm(); return true; case R.id.menu_item_delete_alarm: if (mAdapter != null) { mAdapter.deleteSelectedAlarms(); } return true; case android.R.id.home: Intent intent = new Intent(this, DeskClock.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); return true; default: break; } return super.onOptionsItemSelected(item); }
@Override public void onDestroyActionMode(ActionMode arg0) { if (mAdapter != null) { mAdapter.clearSelectedAlarms(); } mActionMode = null; }
@Override public void onClick(DialogInterface dialog, int which) { if (which == -1) { if (mAdapter != null) { mAdapter.deleteSelectedAlarms(); mActionMode.finish(); } } dialog.dismiss(); mInDeleteConfirmation = false; }
/** * Handle the delete alarms confirmation dialog */ private void showConfirmationDialog() { AlertDialog.Builder b = new AlertDialog.Builder(this); Resources res = getResources(); String msg = String.format( res.getQuantityText(R.plurals.alarm_delete_confirmation, mAdapter.getSelectedItemsNum()) .toString()); b.setCancelable(true) .setMessage(msg) .setNegativeButton(res.getString(android.R.string.cancel), this) .setPositiveButton(res.getString(android.R.string.ok), this) .show(); mInDeleteConfirmation = true; }
/** * Activate/update/close action mode according to the number of selected views. */ private void updateActionMode() { int selectedNum = mAdapter.getSelectedItemsNum(); if (mActionMode == null && selectedNum > 0) { // Start the action mode mActionMode = startActionMode(this); setActionModeTitle(selectedNum); } else if (mActionMode != null) { if (selectedNum > 0) { // Update the number of selected items in the title setActionModeTitle(selectedNum); } else { // No selected items. close the action mode mActionMode.finish(); mActionMode = null; } } }
@Override public void onLoaderReset(Loader<Cursor> cursorLoader) { mAdapter.swapCursor(null); }
@Override public void onLoadFinished(Loader<Cursor> cursorLoader, final Cursor data) { mAdapter.swapCursor(data); gotoAlarmIfSpecified(); }
private void initialize(Bundle savedState) { setContentView(R.layout.alarm_clock); int[] expandedIds = null; int[] repeatCheckedIds = null; int[] selectedAlarms = null; Bundle previousDayMap = null; if (savedState != null) { expandedIds = savedState.getIntArray(KEY_EXPANDED_IDS); repeatCheckedIds = savedState.getIntArray(KEY_REPEAT_CHECKED_IDS); mRingtoneTitleCache = savedState.getBundle(KEY_RINGTONE_TITLE_CACHE); mDeletedAlarm = savedState.getParcelable(KEY_DELETED_ALARM); mUndoShowing = savedState.getBoolean(KEY_UNDO_SHOWING); selectedAlarms = savedState.getIntArray(KEY_SELECTED_ALARMS); previousDayMap = savedState.getBundle(KEY_PREVIOUS_DAY_MAP); mSelectedAlarm = savedState.getParcelable(KEY_SELECTED_ALARM); mInDeleteConfirmation = savedState.getBoolean(KEY_DELETE_CONFIRMATION, false); } mAlarmsList = (SwipeableListView) findViewById(R.id.alarms_list); mAdapter = new AlarmItemAdapter( this, expandedIds, repeatCheckedIds, selectedAlarms, previousDayMap, mAlarmsList); mAdapter.setLongClickListener(this); if (mRingtoneTitleCache == null) { mRingtoneTitleCache = new Bundle(); } mAlarmsList.setAdapter(mAdapter); mAlarmsList.setVerticalScrollBarEnabled(true); mAlarmsList.enableSwipe(true); mAlarmsList.setOnCreateContextMenuListener(this); mAlarmsList.setOnItemSwipeListener( new SwipeableListView.OnItemSwipeListener() { @Override public void onSwipe(View view) { final AlarmItemAdapter.ItemHolder itemHolder = (AlarmItemAdapter.ItemHolder) view.getTag(); mAdapter.removeSelectedId(itemHolder.alarm.id); updateActionMode(); asyncDeleteAlarm(itemHolder.alarm); } }); mAlarmsList.setOnTouchListener( new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent event) { hideUndoBar(true, event); return false; } }); mUndoBar = (ActionableToastBar) findViewById(R.id.undo_bar); if (mUndoShowing) { mUndoBar.show( new ActionableToastBar.ActionClickedListener() { @Override public void onActionClicked() { asyncAddAlarm(mDeletedAlarm, false); mDeletedAlarm = null; mUndoShowing = false; } }, 0, getResources().getString(R.string.alarm_deleted), true, R.string.alarm_undo, true); } // Show action mode if needed int selectedNum = mAdapter.getSelectedItemsNum(); if (selectedNum > 0) { mActionMode = startActionMode(this); setActionModeTitle(selectedNum); } }