Пример #1
0
  private void handleIntent(Context context, Intent intent) {
    final String action = intent.getAction();
    LogUtils.v("AlarmStateManager received intent " + intent);
    if (CHANGE_STATE_ACTION.equals(action)) {
      Uri uri = intent.getData();
      AlarmInstance instance =
          AlarmInstance.getInstance(context.getContentResolver(), AlarmInstance.getId(uri));
      if (instance == null) {
        // Not a big deal, but it shouldn't happen
        LogUtils.e("Can not change state for unknown instance: " + uri);
        return;
      }

      int globalId = getGlobalIntentId(context);
      int intentId = intent.getIntExtra(ALARM_GLOBAL_ID_EXTRA, -1);
      int alarmState = intent.getIntExtra(ALARM_STATE_EXTRA, -1);
      if (intentId != globalId) {
        LogUtils.i(
            "IntentId: " + intentId + " GlobalId: " + globalId + " AlarmState: " + alarmState);
        // Allows dismiss/snooze requests to go through
        if (!intent.hasCategory(ALARM_DISMISS_TAG) && !intent.hasCategory(ALARM_SNOOZE_TAG)) {
          LogUtils.i("Ignoring old Intent");
          return;
        }
      }

      if (intent.getBooleanExtra(FROM_NOTIFICATION_EXTRA, false)) {
        if (intent.hasCategory(ALARM_DISMISS_TAG)) {
          Events.sendAlarmEvent(R.string.action_dismiss, R.string.label_notification);
        } else if (intent.hasCategory(ALARM_SNOOZE_TAG)) {
          Events.sendAlarmEvent(R.string.action_snooze, R.string.label_notification);
        }
      }

      if (alarmState >= 0) {
        setAlarmState(context, instance, alarmState);
      } else {
        registerInstance(context, instance, true);
      }
    } else if (SHOW_AND_DISMISS_ALARM_ACTION.equals(action)) {
      Uri uri = intent.getData();
      AlarmInstance instance =
          AlarmInstance.getInstance(context.getContentResolver(), AlarmInstance.getId(uri));

      if (instance == null) {
        LogUtils.e("Null alarminstance for SHOW_AND_DISMISS");
        // dismiss the notification
        final int id = intent.getIntExtra(AlarmNotifications.EXTRA_NOTIFICATION_ID, -1);
        if (id != -1) {
          NotificationManagerCompat.from(context).cancel(id);
        }
        return;
      }

      long alarmId = instance.mAlarmId == null ? Alarm.INVALID_ID : instance.mAlarmId;
      Intent viewAlarmIntent = Alarm.createIntent(context, DeskClock.class, alarmId);
      viewAlarmIntent.putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.ALARM_TAB_INDEX);
      viewAlarmIntent.putExtra(AlarmClockFragment.SCROLL_TO_ALARM_INTENT_EXTRA, alarmId);
      viewAlarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      context.startActivity(viewAlarmIntent);
      setDismissState(context, instance);
    }
  }