/*
   * Wake up the activity, this will acquire the wakelock (turn on the screen)
   * and sound the notification if needed. This is called once all preparation
   * is done for this activity (end of onCreate()).
   */
  private void wakeApp() {
    // Time to acquire a full WakeLock (turn on screen)
    ManageWakeLock.acquireFull(getApplicationContext());
    ManageWakeLock.releasePartial();

    replying = false;
    inbox = false;

    // See if a notification has been played for this message...
    if (message.getNotify()) {
      // Store extra to signify we have already notified for this message
      bundle.putBoolean(SmsMmsMessage.EXTRAS_NOTIFY, false);

      // Reset the reminderCount to 0 just to be sure
      message.updateReminderCount(0);

      // Schedule a reminder notification
      ReminderReceiver.scheduleReminder(getApplicationContext(), message);

      // Run the notification
      ManageNotification.show(getApplicationContext(), message);
    }
  }
  private void notifyMessageReceived(SmsMmsMessage message) {

    // Class 0 SMS, let the system handle this
    if (message.getMessageType() == SmsMmsMessage.MESSAGE_TYPE_SMS
        && message.getMessageClass() == MessageClass.CLASS_0) {
      return;
    }

    if (message.isSprintVisualVoicemail()) {
      return;
    }

    // Fetch preferences
    ManagePreferences mPrefs = new ManagePreferences(context, message.getContactId());

    // Whether or not the popup should only show when keyguard is on
    boolean onlyShowOnKeyguard =
        mPrefs.getBoolean(
            R.string.pref_onlyShowOnKeyguard_key, Defaults.PREFS_ONLY_SHOW_ON_KEYGUARD);

    // check if popup is enabled for this contact
    boolean showPopup =
        mPrefs.getBoolean(
            R.string.pref_popup_enabled_key,
            Defaults.PREFS_SHOW_POPUP,
            SmsPopupDbAdapter.KEY_POPUP_ENABLED_NUM);

    // check if notifications are on for this contact
    boolean notifEnabled =
        mPrefs.getBoolean(
            R.string.pref_notif_enabled_key,
            Defaults.PREFS_NOTIF_ENABLED,
            SmsPopupDbAdapter.KEY_ENABLED_NUM);

    // get docked state of phone
    int docked_state = mPrefs.getInt(R.string.pref_docked_key, 0);

    boolean docked = docked_state == ExternalEventReceiver.EXTRA_DOCK_STATE_DESK;

    mPrefs.close();

    // Fetch call state, if the user is in a call or the phone is ringing we don't want to show the
    // popup
    TelephonyManager mTM = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    boolean callStateIdle = mTM.getCallState() == TelephonyManager.CALL_STATE_IDLE;

    // Init keyguard manager
    ManageKeyguard.initialize(context);

    /*
     * If popup is enabled for this user -AND- the user is not in a call -AND-
     * -AND- phone is not docked -AND-
     * (screen is locked -OR- (setting is OFF to only show on keyguard -AND- user is not in messaging app:
     * then show the popup activity, otherwise check if notifications are on and just use the standard
     * notification))
     */
    if (showPopup
        && callStateIdle
        && !docked
        && (ManageKeyguard.inKeyguardRestrictedInputMode()
            || (!onlyShowOnKeyguard && !SmsPopupUtils.inMessagingApp(context)))) {

      if (Log.DEBUG) Log.v("^^^^^^Showing SMS Popup");
      ManageWakeLock.acquireFull(context);
      context.startActivity(message.getPopupIntent());

    } else if (notifEnabled) {

      if (Log.DEBUG) Log.v("^^^^^^Not showing SMS Popup, using notifications");
      ManageNotification.show(context, message);
      ReminderReceiver.scheduleReminder(context, message);
    }
  }