Пример #1
0
  @Override
  protected void onHandleIntent(Intent intent) {
    if (intent.getAction().equalsIgnoreCase(TrackAlarmReceiver.ACTION_SET_TODAY_ALARMS)) {
      // вызывается при загрузке устройства
      // и потом при обновлении данных в БД

      // устанавливаем нотификации по трекам, на сегодня, если время прошло
      RegulartrackingDBOpenHelper db = RegulartrackingDBOpenHelper.getInstance(this);
      Cursor c = db.getAllTodayPlannedEvents();
      if (c.moveToFirst()) {
        do {
          long eventId = c.getLong(c.getColumnIndex("_id"));
          String eventName = c.getString(c.getColumnIndex("name"));
          String eventDesc = c.getString(c.getColumnIndex("describe"));
          String eventHour = c.getString(c.getColumnIndex("notifyhour"));
          int ahour = Arrays.asList(EditEventActivity.spindata).indexOf(eventHour) + 5;
          if (ahour > 23) ahour = ahour - 24;

          Calendar cal = Calendar.getInstance();
          int currHour = cal.get(Calendar.HOUR_OF_DAY);
          if (ahour <= currHour) {
            cal.set(Calendar.HOUR_OF_DAY, ahour);
            cal.set(Calendar.MINUTE, 0);
            cal.set(Calendar.SECOND, 0);
            cal.set(Calendar.MILLISECOND, 0);

            Intent notificationIntent = new Intent(this, TrackEventActivity.class);
            notificationIntent.putExtra(EditEventActivity.ACTION_EXTRA_EVENTID, eventId);
            // notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            DateFormat iso8601Format = new SimpleDateFormat("yyyy-MM-dd");

            Intent completeIntent = new Intent(this, TrackAlarmReceiver.class);
            completeIntent.putExtra(EditEventActivity.ACTION_EXTRA_EVENTID, eventId);
            completeIntent.putExtra(
                TrackWidget.ACTION_EXTRA_PUSHDATEISO, iso8601Format.format(cal.getTime()));
            completeIntent.setAction(TrackAlarmReceiver.ACTION_SET_TODAY_COMPLETE);

            Intent cancelIntent = new Intent(this, TrackAlarmReceiver.class);
            cancelIntent.putExtra(EditEventActivity.ACTION_EXTRA_EVENTID, eventId);
            cancelIntent.putExtra(
                TrackWidget.ACTION_EXTRA_PUSHDATEISO, iso8601Format.format(cal.getTime()));
            cancelIntent.setAction(TrackAlarmReceiver.ACTION_SET_TODAY_CANCEL);

            // по клику на уведомлении откроется активити
            Notification.Builder nb =
                new Notification.Builder(this)
                    .setSmallIcon(R.drawable.ic_stat_1) // иконка уведомления
                    .setLargeIcon(
                        BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
                    .setAutoCancel(true) // уведомление закроется по клику на него
                    .setDefaults(
                        Notification
                            .DEFAULT_ALL) // звук, вибро и диодный индикатор выставляются по
                                          // умолчанию
                    .setTicker(
                        eventName) // текст, который отобразится вверху статус-бара при создании
                                   // уведомления
                    .setContentTitle(eventName) // заголовок уведомления
                    .setContentText(eventDesc) // Основной текст уведомления
                    .setContentIntent(
                        PendingIntent.getActivity(
                            this,
                            (int) eventId,
                            notificationIntent,
                            PendingIntent.FLAG_CANCEL_CURRENT))
                    .setWhen(cal.getTimeInMillis()) // отображаемое время уведомления
                    .setShowWhen(true)
                    .setOnlyAlertOnce(true)
                    .addAction(
                        android.R.drawable.ic_menu_close_clear_cancel,
                        getResources().getString(R.string.track_cancel),
                        PendingIntent.getBroadcast(
                            this, (int) eventId, cancelIntent, PendingIntent.FLAG_UPDATE_CURRENT))
                    .addAction(
                        R.drawable.ic_stat_1,
                        getResources().getString(R.string.track_due),
                        PendingIntent.getBroadcast(
                            this,
                            (int) eventId,
                            completeIntent,
                            PendingIntent.FLAG_UPDATE_CURRENT));

            Notification notification = nb.build(); // генерируем уведомление
            NotificationManager manager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            int notifyId = (int) eventId;
            manager.notify(notifyId, notification); // отображаем его пользователю.
          }

        } while (c.moveToNext());
      }
    } else if (intent.getAction().equalsIgnoreCase(TrackAlarmReceiver.ACTION_SET_TODAY_COMPLETE)) {
      DateFormat iso8601Format = new SimpleDateFormat("yyyy-MM-dd");
      String dateISO = intent.getStringExtra(TrackWidget.ACTION_EXTRA_PUSHDATEISO);
      try {
        long eventId = intent.getLongExtra(EditEventActivity.ACTION_EXTRA_EVENTID, -1);
        makeCurrExec(this, eventId, iso8601Format.parse(dateISO));
        int intId = (int) eventId;
        NotificationManager manager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        manager.cancel(intId);
      } catch (ParseException e) {
        e.printStackTrace();
      }
    } else if (intent.getAction().equalsIgnoreCase(TrackAlarmReceiver.ACTION_SET_TODAY_CANCEL)) {
      DateFormat iso8601Format = new SimpleDateFormat("yyyy-MM-dd");
      String dateISO = intent.getStringExtra(TrackWidget.ACTION_EXTRA_PUSHDATEISO);
      try {
        long eventId = intent.getLongExtra(EditEventActivity.ACTION_EXTRA_EVENTID, -1);
        makeCurrNoExec(this, eventId, iso8601Format.parse(dateISO));
        int intId = (int) eventId;
        NotificationManager manager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        manager.cancel(intId);
      } catch (ParseException e) {
        e.printStackTrace();
      }
    }

    TrackAlarmReceiver.sendActionOverAlarm(this, 3600000, true);
    TrackAlarmReceiver.completeWakefulIntent(intent);
  }
Пример #2
0
 private void makeCurrExec(Context context, long currentRowId, Date currentDay) {
   RegulartrackingDBOpenHelper helper = RegulartrackingDBOpenHelper.getInstance(context);
   helper.updateTrackEventOnDate(currentRowId, currentDay, 2);
   notifyWidgetsDataChanged(context);
 }