Пример #1
0
 /** * 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;
 }
Пример #2
0
 @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);
 }
Пример #3
0
  /**
   * 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;
      }
    }
  }
Пример #4
0
 @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);
 }
Пример #5
0
 @Override
 public void onDestroyActionMode(ActionMode arg0) {
   if (mAdapter != null) {
     mAdapter.clearSelectedAlarms();
   }
   mActionMode = null;
 }
Пример #6
0
 @Override
 public void onClick(DialogInterface dialog, int which) {
   if (which == -1) {
     if (mAdapter != null) {
       mAdapter.deleteSelectedAlarms();
       mActionMode.finish();
     }
   }
   dialog.dismiss();
   mInDeleteConfirmation = false;
 }
Пример #7
0
 /** * 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;
 }
Пример #8
0
 /** * 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;
     }
   }
 }
Пример #9
0
 @Override
 public void onLoaderReset(Loader<Cursor> cursorLoader) {
   mAdapter.swapCursor(null);
 }
Пример #10
0
 @Override
 public void onLoadFinished(Loader<Cursor> cursorLoader, final Cursor data) {
   mAdapter.swapCursor(data);
   gotoAlarmIfSpecified();
 }
Пример #11
0
  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);
    }
  }