Example usage for android.telephony TelephonyManager CALL_STATE_IDLE

List of usage examples for android.telephony TelephonyManager CALL_STATE_IDLE

Introduction

In this page you can find the example usage for android.telephony TelephonyManager CALL_STATE_IDLE.

Prototype

int CALL_STATE_IDLE

To view the source code for android.telephony TelephonyManager CALL_STATE_IDLE.

Click Source Link

Document

Device call state: No activity.

Usage

From source file:org.restcomm.app.qoslib.Services.LibPhoneStateListener.java

@Override
public void onCallStateChanged(int state, String incomingNumber) {
    super.onCallStateChanged(state, incomingNumber);

    try {/* ww  w .  ja va 2s  .c o  m*/
        Intent intent;

        switch (state) {
        case TelephonyManager.CALL_STATE_IDLE:
            LoggerUtil.logToFile(LoggerUtil.Level.DEBUG, TAG, "onCallStateChanged", "IDLE");

            if (mPhoneState.bOffHook == false) {
                LoggerUtil.logToFile(LoggerUtil.Level.DEBUG, TAG, "onCallStateChanged", "not off hook");
                return;
            }
            mPhoneState.disconnectTime = System.currentTimeMillis();
            mPhoneState.bOffHook = false;

            HashMap<String, Integer> handset = ReportManager.getHandsetCaps(owner);
            // If phone needs heuristics, check the signal for a dropped call
            int heurDelay = 9;
            if (handset.containsKey("capHeurDelay"))
                heurDelay = handset.get("capHeurDelay");
            if (DeviceInfoOld.getPlatform() == 3)
                heurDelay = 2;

            mPhoneState.bOffHook = false;
            TimerTask verifyConnectTask = new VerifyConnectTask();
            disconnectTimer.schedule(verifyConnectTask, 2000); // 1300
            TimerTask disconnectTimerTask1 = new DisconnectTimerTask(1);
            disconnectTimer.schedule(disconnectTimerTask1, heurDelay * 1000);
            intent = new Intent(IntentHandler.PHONE_CALL_DISCONNECT);
            owner.sendBroadcast(intent);
            if (disconnectLatch != null)
                disconnectLatch.countDown();

            break;
        case TelephonyManager.CALL_STATE_OFFHOOK:
            LoggerUtil.logToFile(LoggerUtil.Level.DEBUG, TAG, "onCallStateChanged", "OFFHOOK");
            //if (owner.bOffHook)
            //   return;

            phoneOffHook(TelephonyManager.CALL_STATE_OFFHOOK);
            //intent = new Intent(MMCIntentHandlerOld.PHONE_CALL_CONNECT);
            //owner.sendBroadcast(intent);
            if (connectLatch != null)
                connectLatch.countDown();

            //TimerTask launchConnectTask = new LaunchConnectTask();
            //disconnectTimer.schedule(launchConnectTask, 2000);
            break;

        case TelephonyManager.CALL_STATE_RINGING:
            LoggerUtil.logToFile(LoggerUtil.Level.DEBUG, TAG, "onCallStateChanged", "RINGING");
            if (mPhoneState.bOffHook)
                return;
            phoneOffHook(TelephonyManager.CALL_STATE_RINGING);
            //if (incomingNumber != null && incomingNumber.length() > 1)
            //   txtIncomingNumber = incomingNumber;

            break;
        }
    } catch (Exception e) {
        LoggerUtil.logToFile(LoggerUtil.Level.DEBUG, TAG, "onCallStateChanged", "Exception", e);
    }
}

From source file:com.google.android.marvin.mytalkback.TalkBackService.java

/**
 * Returns whether the device should drop this event. Caches notifications
 * if necessary.//from   ww  w  .j  a v a2s. com
 *
 * @param event The current event.
 * @return {@code true} if the event should be dropped.
 */
private boolean shouldDropEvent(AccessibilityEvent event) {
    // Always drop null events.
    if (event == null) {
        return true;
    }

    // Always drop events if the service is suspended.
    if (!isServiceActive()) {
        return true;
    }

    // Always drop duplicate events (only applies to API < 14).
    if (AccessibilityEventUtils.eventEquals(mLastSpokenEvent, event)) {
        LogUtils.log(this, Log.VERBOSE, "Drop duplicate event");
        return true;
    }

    // If touch exploration is enabled, drop automatically generated events
    // that are sent immediately after a window state change... unless we
    // decide to keep the event.
    if (AccessibilityManagerCompat.isTouchExplorationEnabled(mAccessibilityManager)
            && ((event.getEventType() & AUTOMATIC_AFTER_STATE_CHANGE) != 0)
            && ((event.getEventTime() - mLastWindowStateChanged) < DELAY_AUTO_AFTER_STATE)
            && !shouldKeepAutomaticEvent(event)) {
        LogUtils.log(this, Log.VERBOSE, "Drop event after window state change");
        return true;
    }

    // Real notification events always have parcelable data.
    final boolean isNotification = (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED)
            && (event.getParcelableData() != null);

    final boolean isPhoneActive = (mCallStateMonitor != null)
            && (mCallStateMonitor.getCurrentCallState() != TelephonyManager.CALL_STATE_IDLE);
    final boolean shouldSpeakCallerId = (mSpeakCallerId && (mCallStateMonitor != null)
            && (mCallStateMonitor.getCurrentCallState() == TelephonyManager.CALL_STATE_RINGING));

    if (!mPowerManager.isScreenOn() && !shouldSpeakCallerId) {
        if (!mSpeakWhenScreenOff) {
            // If the user doesn't allow speech when the screen is
            // off, drop the event immediately.
            LogUtils.log(this, Log.VERBOSE, "Drop event due to screen state and user pref");
            return true;
        } else if (!isNotification) {
            // If the user allows speech when the screen is off, drop
            // all non-notification events.
            LogUtils.log(this, Log.VERBOSE, "Drop non-notification event due to screen state");
            return true;
        }
    }

    final boolean canInterruptRadialMenu = AccessibilityEventUtils.eventMatchesAnyType(event,
            MASK_EVENT_TYPES_INTERRUPT_RADIAL_MENU);
    final boolean silencedByRadialMenu = (mRadialMenuManager.isRadialMenuShowing() && !canInterruptRadialMenu);

    // Don't speak events that cannot interrupt the radial menu, if showing
    if (silencedByRadialMenu) {
        LogUtils.log(this, Log.VERBOSE, "Drop event due to radial menu state");
        return true;
    }

    // Don't speak notification events if the user is touch exploring or a phone call is active.
    if (isNotification && (mIsUserTouchExploring || isPhoneActive)) {
        LogUtils.log(this, Log.VERBOSE, "Drop notification due to touch or phone state");
        return true;
    }

    final int touchscreenState = getResources().getConfiguration().touchscreen;
    final boolean isTouchInteractionStateChange = AccessibilityEventUtils.eventMatchesAnyType(event,
            MASK_EVENT_TYPES_TOUCH_STATE_CHANGES);

    // Drop all events related to touch interaction state on devices that don't support touch.
    final int touchscreenConfig = getResources().getConfiguration().touchscreen;
    if ((touchscreenState == Configuration.TOUCHSCREEN_NOTOUCH) && isTouchInteractionStateChange) {
        return true;
    }

    return false;
}

From source file:com.google.android.marvin.screenspeak.ScreenSpeakService.java

/**
 * Reloads service preferences./*from  www .  ja va 2 s .co m*/
 */
private void reloadPreferences() {
    final Resources res = getResources();

    mAccessibilityEventProcessor.setSpeakCallerId(SharedPreferencesUtils.getBooleanPref(mPrefs, res,
            R.string.pref_caller_id_key, R.bool.pref_caller_id_default));
    mAccessibilityEventProcessor.setSpeakWhenScreenOff(SharedPreferencesUtils.getBooleanPref(mPrefs, res,
            R.string.pref_screenoff_key, R.bool.pref_screenoff_default));

    mAutomaticResume = mPrefs.getString(res.getString(R.string.pref_resume_screenspeak_key),
            getString(R.string.resume_screen_on));

    final boolean silenceOnProximity = SharedPreferencesUtils.getBooleanPref(mPrefs, res,
            R.string.pref_proximity_key, R.bool.pref_proximity_default);
    mSpeechController.setSilenceOnProximity(silenceOnProximity);

    LogUtils.setLogLevel(SharedPreferencesUtils.getIntFromStringPref(mPrefs, res, R.string.pref_log_level_key,
            R.string.pref_log_level_default));

    if (mProcessorFollowFocus != null) {
        final boolean useSingleTap = SharedPreferencesUtils.getBooleanPref(mPrefs, res,
                R.string.pref_single_tap_key, R.bool.pref_single_tap_default);

        mProcessorFollowFocus.setSingleTapEnabled(useSingleTap);

        // Update the "X to select" long-hover hint.
        NodeHintRule.NodeHintHelper.updateActionResId(useSingleTap);
    }

    if (mShakeDetector != null) {
        final int shakeThreshold = SharedPreferencesUtils.getIntFromStringPref(mPrefs, res,
                R.string.pref_shake_to_read_threshold_key, R.string.pref_shake_to_read_threshold_default);
        final boolean useShake = (shakeThreshold > 0) && ((mCallStateMonitor == null)
                || (mCallStateMonitor.getCurrentCallState() == TelephonyManager.CALL_STATE_IDLE));

        mShakeDetector.setEnabled(useShake);
    }

    if (mSideTapManager != null) {
        mSideTapManager.onReloadPreferences();
    }

    if (mSupportsTouchScreen) {
        final boolean touchExploration = SharedPreferencesUtils.getBooleanPref(mPrefs, res,
                R.string.pref_explore_by_touch_key, R.bool.pref_explore_by_touch_default);
        requestTouchExploration(touchExploration);
    }

    if (SUPPORTS_WEB_SCRIPT_TOGGLE) {
        final boolean requestWebScripts = SharedPreferencesUtils.getBooleanPref(mPrefs, res,
                R.string.pref_web_scripts_key, R.bool.pref_web_scripts_default);
        requestWebScripts(requestWebScripts);
    }

    updateMenuManager(mSpeechController, mFeedbackController);
}

From source file:com.google.android.marvin.mytalkback.TalkBackService.java

/**
 * Reloads service preferences.// ww w.  j  ava 2 s  .co m
 */
private void reloadPreferences() {
    final Resources res = getResources();

    mSpeakWhenScreenOff = SharedPreferencesUtils.getBooleanPref(mPrefs, res, R.string.pref_screenoff_key,
            R.bool.pref_screenoff_default);
    mSpeakCallerId = SharedPreferencesUtils.getBooleanPref(mPrefs, res, R.string.pref_caller_id_key,
            R.bool.pref_caller_id_default);

    final String automaticResume = SharedPreferencesUtils.getStringPref(mPrefs, res,
            R.string.pref_resume_talkback_key, R.string.pref_resume_talkback_default);
    mAutomaticResume = AutomaticResumePreference.safeValueOf(automaticResume);

    final boolean silenceOnProximity = SharedPreferencesUtils.getBooleanPref(mPrefs, res,
            R.string.pref_proximity_key, R.bool.pref_proximity_default);
    mSpeechController.setSilenceOnProximity(silenceOnProximity);

    final int logLevel = (DEBUG ? Log.VERBOSE
            : SharedPreferencesUtils.getIntFromStringPref(mPrefs, res, R.string.pref_log_level_key,
                    R.string.pref_log_level_default));
    LogUtils.setLogLevel(logLevel);

    if (mProcessorFollowFocus != null) {
        final boolean useSingleTap = SharedPreferencesUtils.getBooleanPref(mPrefs, res,
                R.string.pref_single_tap_key, R.bool.pref_single_tap_default);

        mProcessorFollowFocus.setSingleTapEnabled(useSingleTap);

        // Update the "X to select" long-hover hint.
        NodeHintRule.NodeHintHelper.updateActionResId(useSingleTap);
    }

    if (mShakeDetector != null) {
        final int shakeThreshold = SharedPreferencesUtils.getIntFromStringPref(mPrefs, res,
                R.string.pref_shake_to_read_threshold_key, R.string.pref_shake_to_read_threshold_default);
        final boolean useShake = (shakeThreshold > 0) && ((mCallStateMonitor == null)
                || (mCallStateMonitor.getCurrentCallState() == TelephonyManager.CALL_STATE_IDLE));

        mShakeDetector.setEnabled(useShake);
    }

    if (SUPPORTS_TOUCH_PREF) {
        final boolean touchExploration = SharedPreferencesUtils.getBooleanPref(mPrefs, res,
                R.string.pref_explore_by_touch_key, R.bool.pref_explore_by_touch_default);
        requestTouchExploration(touchExploration);

        final String verticalGesturesPref = SharedPreferencesUtils.getStringPref(mPrefs, res,
                R.string.pref_two_part_vertical_gestures_key, R.string.pref_two_part_vertical_gestures_default);
        mVerticalGestureCycleGranularity = verticalGesturesPref
                .equals(getString(R.string.value_two_part_vertical_gestures_cycle));
    }
}

From source file:com.google.android.marvin.talkback.TalkBackService.java

/**
 * Reloads service preferences.//w w  w  .j  av a  2s  . com
 */
private void reloadPreferences() {
    final Resources res = getResources();

    mSpeakWhenScreenOff = SharedPreferencesUtils.getBooleanPref(mPrefs, res, R.string.pref_screenoff_key,
            R.bool.pref_screenoff_default);
    mSpeakCallerId = SharedPreferencesUtils.getBooleanPref(mPrefs, res, R.string.pref_caller_id_key,
            R.bool.pref_caller_id_default);

    final String automaticResume = SharedPreferencesUtils.getStringPref(mPrefs, res,
            R.string.pref_resume_talkback_key, R.string.pref_resume_talkback_default);
    mAutomaticResume = AutomaticResumePreference.safeValueOf(automaticResume);

    final boolean silenceOnProximity = SharedPreferencesUtils.getBooleanPref(mPrefs, res,
            R.string.pref_proximity_key, R.bool.pref_proximity_default);
    mSpeechController.setSilenceOnProximity(silenceOnProximity);

    final int logLevel = (DEBUG ? Log.VERBOSE
            : SharedPreferencesUtils.getIntFromStringPref(mPrefs, res, R.string.pref_log_level_key,
                    R.string.pref_log_level_default));
    LogUtils.setLogLevel(logLevel);

    if (mProcessorFollowFocus != null) {
        final boolean useSingleTap = SharedPreferencesUtils.getBooleanPref(mPrefs, res,
                R.string.pref_single_tap_key, R.bool.pref_single_tap_default);

        mProcessorFollowFocus.setSingleTapEnabled(useSingleTap);

        // Update the "X to select" long-hover hint.
        NodeHintRule.NodeHintHelper.updateActionResId(useSingleTap);
    }

    if (mShakeDetector != null) {
        final int shakeThreshold = SharedPreferencesUtils.getIntFromStringPref(mPrefs, res,
                R.string.pref_shake_to_read_threshold_key, R.string.pref_shake_to_read_threshold_default);
        final boolean useShake = (shakeThreshold > 0) && ((mCallStateMonitor == null)
                || (mCallStateMonitor.getCurrentCallState() == TelephonyManager.CALL_STATE_IDLE));

        mShakeDetector.setEnabled(useShake);
    }

    if (SUPPORTS_TOUCH_PREF) {
        final boolean touchExploration = SharedPreferencesUtils.getBooleanPref(mPrefs, res,
                R.string.pref_explore_by_touch_key, R.bool.pref_explore_by_touch_default);
        requestTouchExploration(touchExploration);

        final String verticalGesturesPref = SharedPreferencesUtils.getStringPref(mPrefs, res,
                R.string.pref_two_part_vertical_gestures_key, R.string.pref_two_part_vertical_gestures_default);
        mVerticalGestureCycleGranularity = verticalGesturesPref
                .equals(getString(R.string.value_two_part_vertical_gestures_cycle));
    }

    if (SUPPORTS_WEB_SCRIPT_TOGGLE) {
        final boolean requestWebScripts = SharedPreferencesUtils.getBooleanPref(mPrefs, res,
                R.string.pref_web_scripts_key, R.bool.pref_web_scripts_default);
        requestWebScripts(requestWebScripts);
    }
}

From source file:com.android.mms.transaction.MessagingNotification.java

/**
 * updateNotification is *the* main function for building the actual notification handed to
 * the NotificationManager//  w w  w .  jav a2 s .  c om
 * @param context
 * @param newThreadId the new thread id
 * @param uniqueThreadCount
 * @param notificationSet the set of notifications to display
 */
private static void updateNotification(Context context, long newThreadId, int uniqueThreadCount,
        SortedSet<NotificationInfo> notificationSet) {
    boolean isNew = newThreadId != THREAD_NONE;
    CMConversationSettings conversationSettings = CMConversationSettings.getOrNew(context, newThreadId);

    // If the user has turned off notifications in settings, don't do any notifying.
    if ((isNew && !conversationSettings.getNotificationEnabled())
            || !MessagingPreferenceActivity.getNotificationEnabled(context)) {
        if (DEBUG) {
            Log.d(TAG, "updateNotification: notifications turned off in prefs, bailing");
        }
        return;
    }

    // Figure out what we've got -- whether all sms's, mms's, or a mixture of both.
    final int messageCount = notificationSet.size();
    NotificationInfo mostRecentNotification = notificationSet.first();

    final NotificationCompat.Builder noti = new NotificationCompat.Builder(context)
            .setWhen(mostRecentNotification.mTimeMillis);

    if (isNew) {
        noti.setTicker(mostRecentNotification.mTicker);
    }

    // If we have more than one unique thread, change the title (which would
    // normally be the contact who sent the message) to a generic one that
    // makes sense for multiple senders, and change the Intent to take the
    // user to the conversation list instead of the specific thread.

    // Cases:
    //   1) single message from single thread - intent goes to ComposeMessageActivity
    //   2) multiple messages from single thread - intent goes to ComposeMessageActivity
    //   3) messages from multiple threads - intent goes to ConversationList

    final Resources res = context.getResources();
    String title = null;
    Bitmap avatar = null;
    PendingIntent pendingIntent = null;
    boolean isMultiNewMessages = MessageUtils.isMailboxMode() ? messageCount > 1 : uniqueThreadCount > 1;
    if (isMultiNewMessages) { // messages from multiple threads
        Intent mainActivityIntent = getMultiThreadsViewIntent(context);
        pendingIntent = PendingIntent.getActivity(context, 0, mainActivityIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);
        title = context.getString(R.string.message_count_notification, messageCount);
    } else { // same thread, single or multiple messages
        title = mostRecentNotification.mTitle;
        avatar = mostRecentNotification.mSender.getAvatar(context);
        noti.setSubText(mostRecentNotification.mSimName); // no-op in single SIM case
        if (avatar != null) {
            // Show the sender's avatar as the big icon. Contact bitmaps are 96x96 so we
            // have to scale 'em up to 128x128 to fill the whole notification large icon.
            final int idealIconHeight = res
                    .getDimensionPixelSize(android.R.dimen.notification_large_icon_height);
            final int idealIconWidth = res.getDimensionPixelSize(android.R.dimen.notification_large_icon_width);
            noti.setLargeIcon(BitmapUtil.getRoundedBitmap(avatar, idealIconWidth, idealIconHeight));
        }

        pendingIntent = PendingIntent.getActivity(context, 0, mostRecentNotification.mClickIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);
    }
    // Always have to set the small icon or the notification is ignored
    noti.setSmallIcon(R.drawable.stat_notify_sms);

    NotificationManagerCompat nm = NotificationManagerCompat.from(context);

    // Update the notification.
    noti.setContentTitle(title).setContentIntent(pendingIntent)
            .setColor(context.getResources().getColor(R.color.mms_theme_color))
            .setCategory(Notification.CATEGORY_MESSAGE).setPriority(Notification.PRIORITY_DEFAULT); // TODO: set based on contact coming
                                                                                                                                                                                                                                  // from a favorite.

    // Tag notification with all senders.
    for (NotificationInfo info : notificationSet) {
        Uri peopleReferenceUri = info.mSender.getPeopleReferenceUri();
        if (peopleReferenceUri != null) {
            noti.addPerson(peopleReferenceUri.toString());
        }
    }

    int defaults = 0;

    if (isNew) {
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);

        if (conversationSettings.getVibrateEnabled()) {
            String pattern = conversationSettings.getVibratePattern();

            if (!TextUtils.isEmpty(pattern)) {
                noti.setVibrate(parseVibratePattern(pattern));
            } else {
                defaults |= Notification.DEFAULT_VIBRATE;
            }
        }

        String ringtoneStr = conversationSettings.getNotificationTone();
        noti.setSound(TextUtils.isEmpty(ringtoneStr) ? null : Uri.parse(ringtoneStr));
        Log.d(TAG, "updateNotification: new message, adding sound to the notification");
    }

    defaults |= Notification.DEFAULT_LIGHTS;

    noti.setDefaults(defaults);

    // set up delete intent
    noti.setDeleteIntent(PendingIntent.getBroadcast(context, 0, sNotificationOnDeleteIntent, 0));

    // See if QuickMessage pop-up support is enabled in preferences
    boolean qmPopupEnabled = MessagingPreferenceActivity.getQuickMessageEnabled(context);

    // Set up the QuickMessage intent
    Intent qmIntent = null;
    if (mostRecentNotification.mIsSms) {
        // QuickMessage support is only for SMS
        qmIntent = new Intent();
        qmIntent.setClass(context, QuickMessagePopup.class);
        qmIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP
                | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
        qmIntent.putExtra(QuickMessagePopup.SMS_FROM_NAME_EXTRA, mostRecentNotification.mSender.getName());
        qmIntent.putExtra(QuickMessagePopup.SMS_FROM_NUMBER_EXTRA, mostRecentNotification.mSender.getNumber());
        qmIntent.putExtra(QuickMessagePopup.SMS_NOTIFICATION_OBJECT_EXTRA, mostRecentNotification);
    }

    // Start getting the notification ready
    final Notification notification;

    //Create a WearableExtender to add actions too
    WearableExtender wearableExtender = new WearableExtender();

    if (messageCount == 1 || uniqueThreadCount == 1) {
        // Add the Quick Reply action only if the pop-up won't be shown already
        if (!qmPopupEnabled && qmIntent != null) {

            // This is a QR, we should show the keyboard when the user taps to reply
            qmIntent.putExtra(QuickMessagePopup.QR_SHOW_KEYBOARD_EXTRA, true);

            // Create the pending intent and add it to the notification
            CharSequence qmText = context.getText(R.string.menu_reply);
            PendingIntent qmPendingIntent = PendingIntent.getActivity(context, 0, qmIntent,
                    PendingIntent.FLAG_UPDATE_CURRENT);
            noti.addAction(R.drawable.ic_reply, qmText, qmPendingIntent);

            //Wearable
            noti.extend(wearableExtender.addAction(
                    new NotificationCompat.Action.Builder(R.drawable.ic_reply, qmText, qmPendingIntent)
                            .build()));
        }

        // Add the 'Mark as read' action
        CharSequence markReadText = context.getText(R.string.qm_mark_read);
        Intent mrIntent = new Intent();
        mrIntent.setClass(context, QmMarkRead.class);
        mrIntent.putExtra(QmMarkRead.SMS_THREAD_ID, mostRecentNotification.mThreadId);
        PendingIntent mrPendingIntent = PendingIntent.getBroadcast(context, 0, mrIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);
        noti.addAction(R.drawable.ic_mark_read, markReadText, mrPendingIntent);

        // Add the Call action
        CharSequence callText = context.getText(R.string.menu_call);
        Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse("tel:" + mostRecentNotification.mSender.getNumber()));
        PendingIntent callPendingIntent = PendingIntent.getActivity(context, 0, callIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);
        noti.addAction(R.drawable.ic_menu_call, callText, callPendingIntent);

        //Wearable
        noti.extend(wearableExtender.addAction(
                new NotificationCompat.Action.Builder(R.drawable.ic_menu_call, callText, callPendingIntent)
                        .build()));

        //Set up remote input
        String replyLabel = context.getString(R.string.qm_wear_voice_reply);
        RemoteInput remoteInput = new RemoteInput.Builder(QuickMessageWear.EXTRA_VOICE_REPLY)
                .setLabel(replyLabel).build();
        //Set up pending intent for voice reply
        Intent voiceReplyIntent = new Intent(context, QuickMessageWear.class);
        voiceReplyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP
                | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
        voiceReplyIntent.putExtra(QuickMessageWear.SMS_CONATCT, mostRecentNotification.mSender.getName());
        voiceReplyIntent.putExtra(QuickMessageWear.SMS_SENDER, mostRecentNotification.mSender.getNumber());
        voiceReplyIntent.putExtra(QuickMessageWear.SMS_THEAD_ID, mostRecentNotification.mThreadId);
        PendingIntent voiceReplyPendingIntent = PendingIntent.getActivity(context, 0, voiceReplyIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);

        //Wearable voice reply action
        NotificationCompat.Action action = new NotificationCompat.Action.Builder(R.drawable.ic_reply,
                context.getString(R.string.qm_wear_reply_by_voice), voiceReplyPendingIntent)
                        .addRemoteInput(remoteInput).build();
        noti.extend(wearableExtender.addAction(action));
    }

    if (messageCount == 1) {
        // We've got a single message

        // This sets the text for the collapsed form:
        noti.setContentText(mostRecentNotification.formatBigMessage(context));

        if (mostRecentNotification.mAttachmentBitmap != null) {
            // The message has a picture, show that

            NotificationCompat.BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle(noti)
                    .bigPicture(mostRecentNotification.mAttachmentBitmap)
                    .setSummaryText(mostRecentNotification.formatPictureMessage(context));

            notification = noti.setStyle(bigPictureStyle).build();
        } else {
            // Show a single notification -- big style with the text of the whole message
            NotificationCompat.BigTextStyle bigTextStyle1 = new NotificationCompat.BigTextStyle(noti)
                    .bigText(mostRecentNotification.formatBigMessage(context));

            notification = noti.setStyle(bigTextStyle1).build();
        }
        if (DEBUG) {
            Log.d(TAG, "updateNotification: single message notification");
        }
    } else {
        // We've got multiple messages
        if (!isMultiNewMessages) {
            // We've got multiple messages for the same thread.
            // Starting with the oldest new message, display the full text of each message.
            // Begin a line for each subsequent message.
            SpannableStringBuilder buf = new SpannableStringBuilder();
            NotificationInfo infos[] = notificationSet.toArray(new NotificationInfo[messageCount]);
            int len = infos.length;
            for (int i = len - 1; i >= 0; i--) {
                NotificationInfo info = infos[i];

                buf.append(info.formatBigMessage(context));

                if (i != 0) {
                    buf.append('\n');
                }
            }

            noti.setContentText(context.getString(R.string.message_count_notification, messageCount));

            // Show a single notification -- big style with the text of all the messages
            NotificationCompat.BigTextStyle bigTextStyle = new NotificationCompat.BigTextStyle();
            bigTextStyle.bigText(buf)
                    // Forcibly show the last line, with the app's smallIcon in it, if we
                    // kicked the smallIcon out with an avatar bitmap
                    .setSummaryText((avatar == null) ? null : " ");
            notification = noti.setStyle(bigTextStyle).build();
            if (DEBUG) {
                Log.d(TAG, "updateNotification: multi messages for single thread");
            }
        } else {
            // Build a set of the most recent notification per threadId.
            HashSet<Long> uniqueThreads = new HashSet<Long>(messageCount);
            ArrayList<NotificationInfo> mostRecentNotifPerThread = new ArrayList<NotificationInfo>();
            Iterator<NotificationInfo> notifications = notificationSet.iterator();
            while (notifications.hasNext()) {
                NotificationInfo notificationInfo = notifications.next();
                if (!uniqueThreads.contains(notificationInfo.mThreadId)) {
                    uniqueThreads.add(notificationInfo.mThreadId);
                    mostRecentNotifPerThread.add(notificationInfo);
                }
            }
            // When collapsed, show all the senders like this:
            //     Fred Flinstone, Barry Manilow, Pete...
            noti.setContentText(formatSenders(context, mostRecentNotifPerThread));
            NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(noti);

            // We have to set the summary text to non-empty so the content text doesn't show
            // up when expanded.
            inboxStyle.setSummaryText(" ");

            // At this point we've got multiple messages in multiple threads. We only
            // want to show the most recent message per thread, which are in
            // mostRecentNotifPerThread.
            int uniqueThreadMessageCount = mostRecentNotifPerThread.size();
            int maxMessages = Math.min(MAX_MESSAGES_TO_SHOW, uniqueThreadMessageCount);

            for (int i = 0; i < maxMessages; i++) {
                NotificationInfo info = mostRecentNotifPerThread.get(i);
                inboxStyle.addLine(info.formatInboxMessage(context));
            }
            notification = inboxStyle.build();

            uniqueThreads.clear();
            mostRecentNotifPerThread.clear();

            if (DEBUG) {
                Log.d(TAG, "updateNotification: multi messages," + " showing inboxStyle notification");
            }
        }
    }

    notifyUserIfFullScreen(context, title);
    nm.notify(NOTIFICATION_ID, notification);

    // Trigger the QuickMessage pop-up activity if enabled
    // But don't show the QuickMessage if the user is in a call or the phone is ringing
    if (qmPopupEnabled && qmIntent != null) {
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        if (tm.getCallState() == TelephonyManager.CALL_STATE_IDLE && !ConversationList.mIsRunning
                && !ComposeMessageActivity.mIsRunning) {
            context.startActivity(qmIntent);
        }
    }
}

From source file:com.afwsamples.testdpc.policy.PolicyManagementFragment.java

@TargetApi(Build.VERSION_CODES.N)
private void reboot() {
    if (mTelephonyManager.getCallState() != TelephonyManager.CALL_STATE_IDLE) {
        showToast(R.string.reboot_error_msg);
        return;// ww  w.  j av  a 2 s. c  om
    }
    mDevicePolicyManager.reboot(mAdminComponentName);
}

From source file:com.android.mms.ui.ComposeMessageActivity.java

@Override
protected void onResume() {
    super.onResume();

    // OLD: get notified of presence updates to update the titlebar.
    // NEW: we are using ContactHeaderWidget which displays presence, but updating presence
    //      there is out of our control.
    //Contact.startPresenceObserver();

    addRecipientsListeners();/*  ww  w .ja  v a2s .  c  o m*/

    if (Log.isLoggable(LogTag.APP, Log.VERBOSE)) {
        log("update title, mConversation=" + mConversation.toString());
    }

    // There seems to be a bug in the framework such that setting the title
    // here gets overwritten to the original title.  Do this delayed as a
    // workaround.
    mMessageListItemHandler.postDelayed(new Runnable() {
        @Override
        public void run() {
            ContactList recipients = isRecipientsEditorVisible()
                    ? mRecipientsEditor.constructContactsFromInput(false)
                    : getRecipients();
            updateTitle(recipients);
        }
    }, 100);

    // Load the selected input type
    SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences((Context) ComposeMessageActivity.this);
    mInputMethod = Integer.parseInt(prefs.getString(MessagingPreferenceActivity.INPUT_TYPE,
            Integer.toString(InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE)));
    mTextEditor.setInputType(InputType.TYPE_CLASS_TEXT | mInputMethod | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT
            | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES | InputType.TYPE_TEXT_FLAG_MULTI_LINE);

    TelephonyManager tm = (TelephonyManager) getSystemService(Service.TELEPHONY_SERVICE);
    if (MessagingPreferenceActivity.getSmartCallEnabled((Context) ComposeMessageActivity.this)
            && tm.getCallState() == TelephonyManager.CALL_STATE_IDLE) {
        mMultiSensorManager.enable();
    }

    mIsRunning = true;
    updateThreadIdIfRunning();
    mConversation.markAsRead(true);
}