public void liveCardPublish(boolean nonSilent, long drawFrequency) {
   if (liveCard != null) return;
   this.drawFrequency = drawFrequency;
   liveCard = new LiveCard(context, "myid");
   Log.d(TAG, "Publishing LiveCard");
   liveCard.setDirectRenderingEnabled(true).getSurfaceHolder().addCallback(this);
   Intent intent = new Intent(context, MenuActivity.class);
   intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
   liveCard.setAction(PendingIntent.getActivity(context, 0, intent, 0));
   if (nonSilent) liveCard.publish(LiveCard.PublishMode.REVEAL);
   else liveCard.publish(LiveCard.PublishMode.SILENT);
   Log.d(TAG, "Done publishing LiveCard");
 }
Example #2
0
  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    if (mLiveCard == null) {
      mLiveCard = new LiveCard(this, LIVE_CARD_TAG);
      mLiveCard.setRenderer(new CubeRenderer());
      mLiveCard.setAction(
          PendingIntent.getActivity(this, 0, new Intent(this, MenuActivity.class), 0));
      mLiveCard.publish(PublishMode.REVEAL);
    } else {
      mLiveCard.navigate();
    }

    return START_STICKY;
  }
  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    String voiceResults = intent.getExtras().getString("VoiceResults");

    Log.d("Timer", "Started TimerService, voice results of " + voiceResults);

    int initialHours = 0;
    int initialMinutes = 0;
    int initialSeconds = 0;
    boolean startsRunning = true;
    boolean startsLoudly = true;

    String[] tokens = voiceResults.split("\\s+");
    int pointer = 0;

    // TODO find and add additional special cases

    while (pointer < tokens.length) {
      int candidate = -1;
      boolean andAHalf = false;

      try {
        candidate = Integer.parseInt(tokens[pointer]);
      } catch (NumberFormatException e) { // Special parsing
        if (tokens[pointer].equalsIgnoreCase("one")
            || // Hey Google speech-to-text dudes: why does "one" parse as a word?
            tokens[pointer].equalsIgnoreCase("an")
            || tokens[pointer].equalsIgnoreCase("a")) {
          candidate = 1;
          Log.d("Timer", "Parsed non-numeric variant of 'one'.");
        } else if (tokens[pointer].equalsIgnoreCase("1&a")) {
          candidate = 1;
          andAHalf = true;
          Log.d("Timer", "Parsed bizarre '1&a' speech token. Please complain to Google.");
        } else if (tokens[pointer].equalsIgnoreCase("paused")
            || tokens[pointer].equalsIgnoreCase("pause")) {
          startsRunning = false;
          Log.d("Timer", "Timer starts paused");
        } else if (tokens[pointer].equalsIgnoreCase("half")
            && tokens[pointer + 1].equalsIgnoreCase("an")
            && tokens[pointer + 2].equalsIgnoreCase("hour")) {
          initialMinutes = 30;
          pointer += 2;
          Log.d("Timer", "Special 'half an X' case handled");
        } else if (tokens[pointer].equalsIgnoreCase("quietly")) {
          startsLoudly = false;
          Log.d("Timer", "Starting timer in the background");
        } else {
          Log.w("Timer", "Token " + tokens[pointer] + " not parsed");
        }
      }

      pointer++;

      if (candidate > -1 && candidate <= 60) {
        if (tokens[pointer].equalsIgnoreCase("and")
            && tokens[pointer + 1].equalsIgnoreCase("a")
            && tokens[pointer + 2].equalsIgnoreCase("half")) {
          andAHalf = true;
          pointer += 3;
          Log.d("Timer", "Handled 'X and a half' units");
        }

        if (tokens[pointer].equalsIgnoreCase("hour") || tokens[pointer].equalsIgnoreCase("hours")) {
          initialHours = candidate;
          if (andAHalf) initialMinutes = 30;
          pointer++;
          Log.d("Timer", "Parsed out " + Integer.toString(candidate) + " hours");
        } else if (tokens[pointer].equalsIgnoreCase("minute")
            || tokens[pointer].equalsIgnoreCase("minutes")) {
          initialMinutes = candidate;
          if (andAHalf) initialSeconds = 30;
          pointer++;
          Log.d("Timer", "Parsed out " + Integer.toString(candidate) + " minutes");
        } else if (tokens[pointer].equalsIgnoreCase("second")
            || tokens[pointer].equalsIgnoreCase("seconds")) {
          initialSeconds = candidate;
          if (andAHalf)
            initialSeconds +=
                1; // Fakes rounding up for those smartasses who try and set a timer for
          // one-and-a-half seconds
          pointer++;
          Log.d("Timer", "Parsed out " + Integer.toString(candidate) + " secs, lol");
        }
      }
    }

    mTimerDrawer
        .getTimer()
        .setDurationMillis(
            initialHours * 60 * 60 * 1000 + initialMinutes * 60 * 1000 + initialSeconds * 1000);

    if (startsRunning) {
      mTimerDrawer.getTimer().start();
    }

    if (mLiveCard == null) {
      mLiveCard = mTimelineManager.createLiveCard(LIVE_CARD_ID);

      mLiveCard.setDirectRenderingEnabled(true).getSurfaceHolder().addCallback(mTimerDrawer);

      Intent menuIntent = new Intent(this, MenuActivity.class);
      mLiveCard.setAction(PendingIntent.getActivity(this, 0, menuIntent, 0));

      mLiveCard.publish(startsLoudly ? LiveCard.PublishMode.REVEAL : LiveCard.PublishMode.SILENT);
    } else {
      // TODO(alainv): Jump to the LiveCard when API is available.
    }

    return START_STICKY;
  }