Example usage for android.content Context getText

List of usage examples for android.content Context getText

Introduction

In this page you can find the example usage for android.content Context getText.

Prototype

@NonNull
public final CharSequence getText(@StringRes int resId) 

Source Link

Document

Return a localized, styled CharSequence from the application's package's default string table.

Usage

From source file:de.vanita5.twittnuker.util.Utils.java

public static void showWarnMessage(final Context context, final int resId, final boolean long_message) {
    if (context == null)
        return;/*from   w w w. j  ava 2 s  . com*/
    showWarnMessage(context, context.getText(resId), long_message);
}

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

/**
 * updateNotification is *the* main function for building the actual notification handed to
 * the NotificationManager//from   www . j  a v  a2 s .  com
 * @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:org.kontalk.ui.ComposeMessageFragment.java

private void subscribePresence() {
    // TODO this needs serious refactoring
    if (mPresenceReceiver == null) {
        mPresenceReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();

                if (MessageCenterService.ACTION_PRESENCE.equals(action)) {
                    String from = intent.getStringExtra(MessageCenterService.EXTRA_FROM);
                    String bareFrom = from != null ? XmppStringUtils.parseBareJid(from) : null;

                    // we are receiving a presence from our peer
                    if (from != null && bareFrom.equalsIgnoreCase(mUserJID)) {

                        // we handle only (un)available presence stanzas
                        String type = intent.getStringExtra(MessageCenterService.EXTRA_TYPE);

                        if (type == null) {
                            // no roster entry found, request subscription

                            // pre-approve our presence if we don't have contact's key
                            Intent i = new Intent(context, MessageCenterService.class);
                            i.setAction(MessageCenterService.ACTION_PRESENCE);
                            i.putExtra(MessageCenterService.EXTRA_TO, mUserJID);
                            i.putExtra(MessageCenterService.EXTRA_TYPE, Presence.Type.subscribed.name());
                            context.startService(i);

                            // request subscription
                            i = new Intent(context, MessageCenterService.class);
                            i.setAction(MessageCenterService.ACTION_PRESENCE);
                            i.putExtra(MessageCenterService.EXTRA_TO, mUserJID);
                            i.putExtra(MessageCenterService.EXTRA_TYPE, Presence.Type.subscribe.name());
                            context.startService(i);

                            setStatusText(context.getString(R.string.invitation_sent_label));
                        }//from   w w w . j av a  2  s. c  om

                        // (un)available presence
                        else if (Presence.Type.available.name().equals(type)
                                || Presence.Type.unavailable.name().equals(type)) {

                            CharSequence statusText = null;

                            // really not much sense in requesting the key for a non-existing contact
                            Contact contact = getContact();
                            if (contact != null) {
                                String newFingerprint = intent
                                        .getStringExtra(MessageCenterService.EXTRA_FINGERPRINT);
                                // if this is null, we are accepting the key for the first time
                                PGPPublicKeyRing trustedPublicKey = contact.getTrustedPublicKeyRing();

                                // request the key if we don't have a trusted one and of course if the user has a key
                                boolean unknownKey = (trustedPublicKey == null
                                        && contact.getFingerprint() != null);
                                boolean changedKey = false;
                                // check if fingerprint changed
                                if (trustedPublicKey != null && newFingerprint != null) {
                                    String oldFingerprint = PGP
                                            .getFingerprint(PGP.getMasterKey(trustedPublicKey));
                                    if (!newFingerprint.equalsIgnoreCase(oldFingerprint)) {
                                        // fingerprint has changed since last time
                                        changedKey = true;
                                    }
                                }

                                if (changedKey) {
                                    // warn user that public key is changed
                                    showKeyChangedWarning();
                                } else if (unknownKey) {
                                    // warn user that public key is unknown
                                    showKeyUnknownWarning();
                                }
                            }

                            if (Presence.Type.available.toString().equals(type)) {
                                mAvailableResources.add(from);

                                /*
                                 * FIXME using mode this way has several flaws.
                                 * 1. it doesn't take multiple resources into account
                                 * 2. it doesn't account for away status duration (we don't have this information at all)
                                 */
                                String mode = intent.getStringExtra(MessageCenterService.EXTRA_SHOW);
                                if (mode != null && mode.equals(Presence.Mode.away.toString())) {
                                    statusText = context.getString(R.string.seen_away_label);
                                } else {
                                    statusText = context.getString(R.string.seen_online_label);
                                }

                                // request version information
                                if (contact != null && contact.getVersion() != null) {
                                    setVersionInfo(context, contact.getVersion());
                                } else if (mVersionRequestId == null) {
                                    requestVersion(from);
                                }
                            } else if (Presence.Type.unavailable.toString().equals(type)) {
                                boolean removed = mAvailableResources.remove(from);
                                /*
                                 * All available resources have gone. Mark
                                 * the user as offline immediately and use the
                                 * timestamp provided with the stanza (if any).
                                 */
                                if (mAvailableResources.size() == 0) {
                                    // an offline user can't be typing
                                    mIsTyping = false;

                                    if (removed) {
                                        // resource was removed now, mark as just offline
                                        statusText = context.getText(R.string.seen_moment_ago_label);
                                    } else {
                                        // resource is offline, request last activity
                                        if (contact != null && contact.getLastSeen() > 0) {
                                            setLastSeenTimestamp(context, contact.getLastSeen());
                                        } else if (mLastActivityRequestId == null) {
                                            mLastActivityRequestId = StringUtils.randomString(6);
                                            MessageCenterService.requestLastActivity(context, bareFrom,
                                                    mLastActivityRequestId);
                                        }
                                    }
                                }
                            }

                            if (statusText != null) {
                                mCurrentStatus = statusText;
                                if (!mIsTyping)
                                    setStatusText(statusText);
                            }
                        }

                        // subscription accepted, probe presence
                        else if (Presence.Type.subscribed.name().equals(type)) {
                            presenceSubscribe();
                        }
                    }
                }

                else if (MessageCenterService.ACTION_LAST_ACTIVITY.equals(action)) {
                    String id = intent.getStringExtra(MessageCenterService.EXTRA_PACKET_ID);
                    if (id != null && id.equals(mLastActivityRequestId)) {
                        mLastActivityRequestId = null;
                        // ignore last activity if we had an available presence in the meantime
                        if (mAvailableResources.size() == 0) {
                            String type = intent.getStringExtra(MessageCenterService.EXTRA_TYPE);
                            if (type == null || !type.equalsIgnoreCase(IQ.Type.error.toString())) {
                                long seconds = intent.getLongExtra(MessageCenterService.EXTRA_SECONDS, -1);
                                setLastSeenSeconds(context, seconds);
                            }
                        }
                    }
                }

                else if (MessageCenterService.ACTION_VERSION.equals(action)) {
                    // compare version and show warning if needed
                    String id = intent.getStringExtra(MessageCenterService.EXTRA_PACKET_ID);
                    if (id != null && id.equals(mVersionRequestId)) {
                        mVersionRequestId = null;
                        String name = intent.getStringExtra(MessageCenterService.EXTRA_VERSION_NAME);
                        if (name != null && name.equalsIgnoreCase(context.getString(R.string.app_name))) {
                            String version = intent.getStringExtra(MessageCenterService.EXTRA_VERSION_NUMBER);
                            if (version != null) {
                                Contact contact = getContact();
                                if (contact != null)
                                    // cache the version
                                    contact.setVersion(version);
                                setVersionInfo(context, version);
                            }
                        }
                    }
                }

                else if (MessageCenterService.ACTION_CONNECTED.equals(action)) {
                    // reset compose sent flag
                    mComposer.resetCompose();
                    // reset available resources list
                    mAvailableResources.clear();
                    // reset any pending request
                    mLastActivityRequestId = null;
                    mVersionRequestId = null;
                }

                else if (MessageCenterService.ACTION_ROSTER_LOADED.equals(action)) {
                    // probe presence
                    presenceSubscribe();
                }

                else if (MessageCenterService.ACTION_MESSAGE.equals(action)) {
                    String from = intent.getStringExtra(MessageCenterService.EXTRA_FROM);
                    String chatState = intent.getStringExtra("org.kontalk.message.chatState");

                    // we are receiving a composing notification from our peer
                    if (from != null && XMPPUtils.equalsBareJID(from, mUserJID)) {
                        if (chatState != null && ChatState.composing.toString().equals(chatState)) {
                            mIsTyping = true;
                            setStatusText(context.getString(R.string.seen_typing_label));
                        } else {
                            mIsTyping = false;
                            setStatusText(mCurrentStatus != null ? mCurrentStatus : "");
                        }
                    }
                }

            }
        };

        // listen for user presence, connection and incoming messages
        IntentFilter filter = new IntentFilter();
        filter.addAction(MessageCenterService.ACTION_PRESENCE);
        filter.addAction(MessageCenterService.ACTION_CONNECTED);
        filter.addAction(MessageCenterService.ACTION_ROSTER_LOADED);
        filter.addAction(MessageCenterService.ACTION_LAST_ACTIVITY);
        filter.addAction(MessageCenterService.ACTION_MESSAGE);
        filter.addAction(MessageCenterService.ACTION_VERSION);

        mLocalBroadcastManager.registerReceiver(mPresenceReceiver, filter);

        // request connection and roster load status
        Context ctx = getActivity();
        if (ctx != null) {
            MessageCenterService.requestConnectionStatus(ctx);
            MessageCenterService.requestRosterStatus(ctx);
        }
    }
}