public static void createGmail(
     Context context, String sender, String email, String subject, String snippet) {
   VibratePattern vibratePattern =
       createVibratePatternFromPreference(context, "settingsGmailNumberBuzzes");
   Bitmap icon = Utils.getBitmap(context, "gmail.bmp");
   String description = "Gmail: " + sender;
   if (MetaWatchService.watchType == WatchType.DIGITAL) {
     Bitmap bitmap = smartLines(context, icon, "Gmail", new String[] {sender, email, subject});
     Notification.addBitmapNotification(
         context,
         bitmap,
         vibratePattern,
         Notification.getDefaultNotificationTimeout(context),
         description);
     Notification.addTextNotification(
         context,
         snippet,
         Notification.VibratePattern.NO_VIBRATE,
         Notification.getDefaultNotificationTimeout(context));
   } else {
     byte[] scroll = new byte[800];
     int len = Protocol.createOled2linesLong(context, snippet, scroll);
     Notification.addOledNotification(
         context,
         Protocol.createOled2lines(context, "Gmail from " + sender, email),
         Protocol.createOled2lines(context, subject, snippet),
         scroll,
         len,
         vibratePattern,
         description);
   }
 }
 public static void createMMS(Context context, String number) {
   String name = Utils.getContactNameFromNumber(context, number);
   VibratePattern vibratePattern =
       createVibratePatternFromPreference(context, "settingsSMSNumberBuzzes");
   Bitmap icon = Utils.getBitmap(context, "message.bmp");
   String description = "MMS: " + name;
   if (MetaWatchService.watchType == WatchType.DIGITAL) {
     Bitmap bitmap = smartLines(context, icon, "MMS from", new String[] {name});
     Notification.addBitmapNotification(
         context,
         bitmap,
         vibratePattern,
         Notification.getDefaultNotificationTimeout(context),
         description);
   } else {
     byte[] scroll = new byte[800];
     int len = Protocol.createOled2linesLong(context, name, scroll);
     Notification.addOledNotification(
         context,
         Protocol.createOled1line(context, icon, "MMS from"),
         Protocol.createOled2lines(context, name, ""),
         scroll,
         len,
         vibratePattern,
         description);
   }
 }
 public static void createSMS(Context context, String number, String text) {
   String name = Utils.getContactNameFromNumber(context, number);
   VibratePattern vibratePattern =
       createVibratePatternFromPreference(context, "settingsSMSNumberBuzzes");
   Bitmap icon = Utils.getBitmap(context, "message.bmp");
   String description = "SMS: " + name;
   if (MetaWatchService.watchType == WatchType.DIGITAL) {
     if (Preferences.stickyNotifications & !number.equals("Google Chat")) {
       Bitmap[] bitmaps = smartNotify(context, icon, name, text);
       Notification.addBitmapNotification(context, bitmaps, vibratePattern, -1, description);
     } else {
       Bitmap bitmap = smartLines(context, icon, "SMS from", new String[] {name});
       Notification.addBitmapNotification(context, bitmap, vibratePattern, 4000, description);
       Notification.addTextNotification(
           context,
           text,
           Notification.VibratePattern.NO_VIBRATE,
           Notification.getDefaultNotificationTimeout(context));
     }
   } else {
     byte[] scroll = new byte[800];
     int len = Protocol.createOled2linesLong(context, text, scroll);
     Notification.addOledNotification(
         context,
         Protocol.createOled1line(context, icon, "SMS from"),
         Protocol.createOled2lines(context, name, text),
         scroll,
         len,
         vibratePattern,
         description);
   }
 }
 public static void createNewVoicemail(Context context) {
   VibratePattern vibratePattern =
       createVibratePatternFromPreference(context, "settingsVoicemailNumberBuzzes");
   String description = "New Voicemail";
   Bitmap icon = Utils.getBitmap(context, "voicemail.bmp");
   if (MetaWatchService.watchType == WatchType.DIGITAL) {
     Bitmap bitmap =
         smartLines(context, icon, "Voicemail", new String[] {"You have", "new voicemail"});
     Notification.addBitmapNotification(
         context,
         bitmap,
         vibratePattern,
         Notification.getDefaultNotificationTimeout(context),
         description);
   } else {
     Notification.addOledNotification(
         context,
         Protocol.createOled1line(context, icon, "Voicemail"),
         Protocol.createOled2lines(context, "You have", "new voicemail"),
         null,
         0,
         vibratePattern,
         description);
   }
 }
 public static void createNMA(
     Context context, String appName, String event, String desc, int prio, String url) {
   VibratePattern vibratePattern =
       createVibratePatternFromPreference(context, "settingsNMANumberBuzzes");
   Bitmap icon = Utils.getBitmap(context, "notifymyandroid.bmp");
   if (MetaWatchService.watchType == WatchType.DIGITAL) {
     Bitmap bitmap = smartLines(context, icon, appName, new String[] {event, desc});
     Notification.addBitmapNotification(
         context,
         bitmap,
         vibratePattern,
         Notification.getDefaultNotificationTimeout(context),
         appName + ": " + event);
   } else {
     byte[] scroll = new byte[800];
     int len = Protocol.createOled2linesLong(context, desc, scroll);
     Notification.addOledNotification(
         context,
         Protocol.createOled1line(context, icon, appName),
         Protocol.createOled2lines(context, event, desc),
         scroll,
         len,
         vibratePattern,
         appName + ": " + event);
   }
 }
 public static void createBatterylow(Context context) {
   VibratePattern vibratePattern =
       createVibratePatternFromPreference(context, "settingsBatteryNumberBuzzes");
   StringBuilder builder = new StringBuilder();
   builder.append(Monitors.BatteryData.level);
   builder.append("%");
   String description = "Battery low";
   Bitmap icon = Utils.getBitmap(context, "batterylow.bmp");
   if (MetaWatchService.watchType == WatchType.DIGITAL) {
     Bitmap bitmap =
         smartLines(
             context, icon, "Battery", new String[] {"Phone battery at", builder.toString()});
     Notification.addBitmapNotification(
         context,
         bitmap,
         vibratePattern,
         Notification.getDefaultNotificationTimeout(context),
         description);
   } else {
     Notification.addOledNotification(
         context,
         Protocol.createOled1line(context, icon, "Warning!"),
         Protocol.createOled2lines(context, "Phone battery at", builder.toString()),
         null,
         0,
         vibratePattern,
         description);
   }
 }
 public static void createWinamp(Context context, String artist, String track, String album) {
   VibratePattern vibratePattern =
       createVibratePatternFromPreference(context, "settingsMusicNumberBuzzes");
   Bitmap icon = Utils.getBitmap(context, "winamp.bmp");
   String description = "Winamp: " + track;
   if (MetaWatchService.watchType == WatchType.DIGITAL) {
     Bitmap bitmap = smartLines(context, icon, "Winamp", new String[] {track, album, artist});
     Notification.addBitmapNotification(
         context,
         bitmap,
         vibratePattern,
         Notification.getDefaultNotificationTimeout(context),
         description);
   } else {
     byte[] scroll = new byte[800];
     int len = Protocol.createOled2linesLong(context, track, scroll);
     Notification.addOledNotification(
         context,
         Protocol.createOled1line(context, icon, artist),
         Protocol.createOled2lines(context, album, track),
         scroll,
         len,
         vibratePattern,
         description);
   }
 }
 public static void createOtherNotification(
     Context context, Bitmap icon, String appName, String notificationText, int buzzes) {
   VibratePattern vibratePattern;
   if (buzzes != -1) {
     vibratePattern = createVibratePatternFromBuzzes(buzzes);
   } else {
     vibratePattern =
         createVibratePatternFromPreference(context, "settingsOtherNotificationNumberBuzzes");
   }
   if (icon == null) {
     icon = Utils.getBitmap(context, "notify.bmp");
   }
   String description = appName;
   if (MetaWatchService.watchType == WatchType.DIGITAL) {
     Bitmap bitmap = smartLines(context, icon, appName, new String[] {notificationText});
     Notification.addBitmapNotification(
         context,
         bitmap,
         vibratePattern,
         Notification.getDefaultNotificationTimeout(context),
         description);
   } else {
     byte[] scroll = new byte[800];
     int len = Protocol.createOled2linesLong(context, notificationText, scroll);
     Notification.addOledNotification(
         context,
         Protocol.createOled1line(context, icon, appName),
         Protocol.createOled2lines(context, "Notification", notificationText),
         scroll,
         len,
         vibratePattern,
         description);
   }
 }
 public static void createTimezonechange(Context context) {
   VibratePattern vibratePattern =
       createVibratePatternFromPreference(context, "settingsTimezoneNumberBuzzes");
   TimeZone tz = TimeZone.getDefault();
   Bitmap icon = Utils.getBitmap(context, "timezone.bmp");
   String description = "Timezone Changed";
   if (MetaWatchService.watchType == WatchType.DIGITAL) {
     Bitmap bitmap =
         smartLines(
             context, icon, "Timezone", new String[] {"Timezone Changed", tz.getDisplayName()});
     Notification.addBitmapNotification(
         context,
         bitmap,
         vibratePattern,
         Notification.getDefaultNotificationTimeout(context),
         description);
   } else {
     Notification.addOledNotification(
         context,
         Protocol.createOled1line(context, icon, "Timezone"),
         Protocol.createOled1line(context, null, tz.getDisplayName()),
         null,
         0,
         vibratePattern,
         description);
   }
 }
 public static void createAlarm(Context context) {
   VibratePattern vibratePattern =
       createVibratePatternFromPreference(context, "settingsAlarmNumberBuzzes");
   final Calendar t = Calendar.getInstance();
   final String currentTime = DateFormat.getTimeFormat(context).format(t.getTime());
   Bitmap icon = Utils.getBitmap(context, "timer.bmp");
   String description = "Alarm";
   if (MetaWatchService.watchType == WatchType.DIGITAL) {
     Bitmap bitmap =
         smartLines(context, icon, "Alarm", new String[] {currentTime}, FontCache.FontSize.LARGE);
     Notification.addBitmapNotification(
         context,
         bitmap,
         vibratePattern,
         Notification.getDefaultNotificationTimeout(context),
         description);
   } else {
     Notification.addOledNotification(
         context,
         Protocol.createOled1line(context, icon, "Alarm"),
         Protocol.createOled1line(context, null, currentTime),
         null,
         0,
         vibratePattern,
         description);
   }
 }
 public static void createCalendar(Context context, String text) {
   VibratePattern vibratePattern =
       createVibratePatternFromPreference(context, "settingsCalendarNumberBuzzes");
   Bitmap icon = Utils.getBitmap(context, "calendar.bmp");
   String description = "Cal: " + text;
   if (MetaWatchService.watchType == WatchType.DIGITAL) {
     Bitmap bitmap = smartLines(context, icon, "Calendar", new String[] {text});
     Notification.addBitmapNotification(
         context,
         bitmap,
         vibratePattern,
         Notification.getDefaultNotificationTimeout(context),
         description);
   } else {
     byte[] scroll = new byte[800];
     int len = Protocol.createOled2linesLong(context, text, scroll);
     Notification.addOledNotification(
         context,
         Protocol.createOled1line(context, icon, "  Calendar"),
         Protocol.createOled2lines(context, "Event Reminder:", text),
         scroll,
         len,
         vibratePattern,
         description);
   }
 }
 public static void createTouchdownMail(Context context, String title, String ticker) {
   VibratePattern vibratePattern =
       createVibratePatternFromPreference(context, "settingsTDNumberBuzzes");
   Bitmap icon = Utils.getBitmap(context, "email.bmp");
   String description = "TouchDown: " + title;
   if (MetaWatchService.watchType == WatchType.DIGITAL) {
     Bitmap bitmap = smartLines(context, icon, "TouchDown", new String[] {title, ticker});
     Notification.addBitmapNotification(
         context,
         bitmap,
         vibratePattern,
         Notification.getDefaultNotificationTimeout(context),
         description);
   } else {
     byte[] scroll = new byte[800];
     int len = Protocol.createOled2linesLong(context, ticker, scroll);
     Notification.addOledNotification(
         context,
         Protocol.createOled1line(context, icon, "TouchDown"),
         Protocol.createOled2lines(context, title, ticker),
         scroll,
         len,
         vibratePattern,
         description);
   }
 }
 public static void createGmailBlank(Context context, String recipient, int count) {
   VibratePattern vibratePattern =
       createVibratePatternFromPreference(context, "settingsGmailNumberBuzzes");
   String messages = count + " new " + (count == 1 ? "message" : "messages");
   Bitmap icon = Utils.getBitmap(context, "gmail.bmp");
   String description = "Gmail: unread " + count;
   if (MetaWatchService.watchType == WatchType.DIGITAL) {
     Bitmap bitmap = smartLines(context, icon, "Gmail", new String[] {messages, recipient});
     Notification.addBitmapNotification(
         context,
         bitmap,
         vibratePattern,
         Notification.getDefaultNotificationTimeout(context),
         description);
   } else {
     byte[] scroll = new byte[800];
     int len = Protocol.createOled2linesLong(context, recipient, scroll);
     Notification.addOledNotification(
         context,
         Protocol.createOled1line(context, icon, " Gmail"),
         Protocol.createOled2lines(context, messages, recipient),
         scroll,
         len,
         vibratePattern,
         description);
   }
 }
 public static void createK9(Context context, String sender, String subject, String folder) {
   VibratePattern vibratePattern =
       createVibratePatternFromPreference(context, "settingsK9NumberBuzzes");
   Bitmap icon = Utils.getBitmap(context, "email.bmp");
   String description = "K9: " + sender;
   if (MetaWatchService.watchType == WatchType.DIGITAL) {
     Bitmap bitmap = smartLines(context, icon, "K9 mail", new String[] {sender, subject, folder});
     Notification.addBitmapNotification(
         context,
         bitmap,
         vibratePattern,
         Notification.getDefaultNotificationTimeout(context),
         description);
   } else {
     byte[] scroll = new byte[800];
     int len = Protocol.createOled2linesLong(context, subject, scroll);
     Notification.addOledNotification(
         context,
         Protocol.createOled1line(context, icon, "K9 mail"),
         Protocol.createOled2lines(context, sender, subject),
         scroll,
         len,
         vibratePattern,
         description);
   }
 }
  @Override
  public void onReceive(Context context, Intent intent) {

    String action = intent.getAction();

    // add digital watch check

    if (action.equals("org.metawatch.manager.APPLICATION_UPDATE")) {
      // boolean dither = false;
      // if (intent.hasExtra("requires_dither"))
      //	dither = true;
      if (intent.hasExtra("array")) {
        int[] array = intent.getIntArrayExtra("array");
        Application.updateAppMode(context, array);
      } else if (intent.hasExtra("buffer")) {
        byte[] buffer = intent.getByteArrayExtra("buffer");
        Application.updateAppMode(context, buffer);
      }
      return;
    }

    if (action.equals("org.metawatch.manager.WIDGET_UPDATE")) {
      Log.d(MetaWatch.TAG, "WIDGET_UPDATE received");
      WidgetManager.getFromIntent(context, intent);
      return;
    }

    if (action.equals("org.metawatch.manager.APPLICATION_START")) {
      Application.startAppMode();
      return;
    }

    if (action.equals("org.metawatch.manager.APPLICATION_STOP")) {
      Application.stopAppMode(context);
      return;
    }

    if (action.equals("org.metawatch.manager.NOTIFICATION")) {

      /* Set up vibrate pattern. */
      VibratePattern vibrate = getVibratePatternFromIntent(intent);

      if (intent.hasExtra("oled1")
          || intent.hasExtra("oled1a")
          || intent.hasExtra("oled1b")
          || intent.hasExtra("oled2")
          || intent.hasExtra("oled2a")
          || intent.hasExtra("oled2b")) {

        byte[] line1 = Protocol.createOled1line(context, null, "");
        byte[] line2 = Protocol.createOled1line(context, null, "");
        byte[] scroll = null;
        int scrollLen = 0;
        if (intent.hasExtra("oled1")) {
          line1 = Protocol.createOled1line(context, null, intent.getStringExtra("oled1"));
        } else {
          if (intent.hasExtra("oled1a") || intent.hasExtra("oled1b")) {
            String oled1a = "";
            String oled1b = "";
            if (intent.hasExtra("oled1a")) {
              oled1a = intent.getStringExtra("oled1a");
            }
            if (intent.hasExtra("oled1b")) {
              oled1b = intent.getStringExtra("oled1b");
            }
            line1 = Protocol.createOled2lines(context, oled1a, oled1b);
          }
        }
        if (intent.hasExtra("oled2")) {
          line2 = Protocol.createOled1line(context, null, intent.getStringExtra("oled2"));
        } else {
          if (intent.hasExtra("oled2a") || intent.hasExtra("oled2b")) {
            String oled2a = "";
            String oled2b = "";
            if (intent.hasExtra("oled2a")) {
              oled2a = intent.getStringExtra("oled2a");
            }
            if (intent.hasExtra("oled2b")) {
              oled2b = intent.getStringExtra("oled2b");
            }
            scroll = new byte[800];
            scrollLen = Protocol.createOled2linesLong(context, oled2b, scroll);
            line2 = Protocol.createOled2lines(context, oled2a, oled2b);
          }
        }
        Notification.addOledNotification(context, line1, line2, scroll, scrollLen, vibrate);

      } else if (intent.hasExtra("text")) {
        String text = intent.getStringExtra("text");
        Notification.addTextNotification(
            context, text, vibrate, Notification.getDefaultNotificationTimeout(context));
        if (Preferences.logging)
          Log.d(
              MetaWatch.TAG,
              "ApiIntentReceiver.onReceive(): sending text notification; text='" + text + "'");
      } else if (intent.hasExtra("array")) {
        int[] array = intent.getIntArrayExtra("array");
        Notification.addArrayNotification(context, array, vibrate);
      } else if (intent.hasExtra("buffer")) {
        byte[] buffer = intent.getByteArrayExtra("buffer");
        Notification.addBufferNotification(context, buffer, vibrate);
      }
      return;
    }

    if (action.equals("org.metawatch.manager.VIBRATE")) {
      /* Set up vibrate pattern. */
      VibratePattern vibrate = getVibratePatternFromIntent(intent);

      if (vibrate.vibrate) Protocol.vibrate(vibrate.on, vibrate.off, vibrate.cycles);

      return;
    }
  }