Search in sources :

Example 11 with InvalidNumberException

use of org.whispersystems.signalservice.api.util.InvalidNumberException in project Signal-Android by WhisperSystems.

the class VerifyIdentityActivity method onCreate.

@Override
protected void onCreate(Bundle state, @NonNull MasterSecret masterSecret) {
    try {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setTitle(R.string.AndroidManifest__verify_safety_number);
        Recipient recipient = RecipientFactory.getRecipientForId(this, getIntent().getLongExtra(RECIPIENT_ID, -1), true);
        recipient.addListener(this);
        setActionBarNotificationBarColor(recipient.getColor());
        Bundle extras = new Bundle();
        extras.putParcelable(VerifyDisplayFragment.REMOTE_IDENTITY, getIntent().getParcelableExtra(RECIPIENT_IDENTITY));
        extras.putString(VerifyDisplayFragment.REMOTE_NUMBER, Util.canonicalizeNumber(this, recipient.getNumber()));
        extras.putParcelable(VerifyDisplayFragment.LOCAL_IDENTITY, new IdentityKeyParcelable(IdentityKeyUtil.getIdentityKey(this)));
        extras.putString(VerifyDisplayFragment.LOCAL_NUMBER, TextSecurePreferences.getLocalNumber(this));
        scanFragment.setScanListener(this);
        displayFragment.setClickListener(this);
        initFragment(android.R.id.content, displayFragment, masterSecret, dynamicLanguage.getCurrentLocale(), extras);
    } catch (InvalidNumberException e) {
        Log.w(TAG, e);
        finish();
    }
}
Also used : IdentityKeyParcelable(org.thoughtcrime.securesms.crypto.IdentityKeyParcelable) Bundle(android.os.Bundle) InvalidNumberException(org.whispersystems.signalservice.api.util.InvalidNumberException) Recipient(org.thoughtcrime.securesms.recipients.Recipient)

Example 12 with InvalidNumberException

use of org.whispersystems.signalservice.api.util.InvalidNumberException in project Signal-Android by WhisperSystems.

the class MmsDatabase method setTimestampRead.

public List<Pair<Long, Long>> setTimestampRead(SyncMessageId messageId, long expireStarted) {
    MmsAddressDatabase addressDatabase = DatabaseFactory.getMmsAddressDatabase(context);
    SQLiteDatabase database = databaseHelper.getWritableDatabase();
    List<Pair<Long, Long>> expiring = new LinkedList<>();
    Cursor cursor = null;
    try {
        cursor = database.query(TABLE_NAME, new String[] { ID, THREAD_ID, MESSAGE_BOX, EXPIRES_IN }, DATE_SENT + " = ?", new String[] { String.valueOf(messageId.getTimetamp()) }, null, null, null, null);
        while (cursor.moveToNext()) {
            List<String> addresses = addressDatabase.getAddressesListForId(cursor.getLong(cursor.getColumnIndexOrThrow(ID)));
            for (String storedAddress : addresses) {
                try {
                    String ourAddress = canonicalizeNumber(context, messageId.getAddress());
                    String theirAddress = canonicalizeNumberOrGroup(context, storedAddress);
                    if (ourAddress.equals(theirAddress) || GroupUtil.isEncodedGroup(theirAddress)) {
                        long id = cursor.getLong(cursor.getColumnIndexOrThrow(ID));
                        long threadId = cursor.getLong(cursor.getColumnIndexOrThrow(THREAD_ID));
                        long expiresIn = cursor.getLong(cursor.getColumnIndexOrThrow(EXPIRES_IN));
                        ContentValues values = new ContentValues();
                        values.put(READ, 1);
                        if (expiresIn > 0) {
                            values.put(EXPIRE_STARTED, expireStarted);
                            expiring.add(new Pair<>(id, expiresIn));
                        }
                        database.update(TABLE_NAME, values, ID_WHERE, new String[] { String.valueOf(id) });
                        DatabaseFactory.getThreadDatabase(context).updateReadState(threadId);
                        DatabaseFactory.getThreadDatabase(context).setLastSeen(threadId);
                        notifyConversationListeners(threadId);
                    }
                } catch (InvalidNumberException e) {
                    Log.w("MmsDatabase", e);
                }
            }
        }
    } finally {
        if (cursor != null)
            cursor.close();
    }
    return expiring;
}
Also used : ContentValues(android.content.ContentValues) SQLiteDatabase(android.database.sqlite.SQLiteDatabase) InvalidNumberException(org.whispersystems.signalservice.api.util.InvalidNumberException) Cursor(android.database.Cursor) LinkedList(java.util.LinkedList) Pair(android.util.Pair)

Example 13 with InvalidNumberException

use of org.whispersystems.signalservice.api.util.InvalidNumberException in project Signal-Android by WhisperSystems.

the class MmsDatabase method insertMessageOutbox.

public long insertMessageOutbox(@NonNull MasterSecretUnion masterSecret, @NonNull OutgoingMediaMessage message, long threadId, boolean forceSms) throws MmsException {
    long type = Types.BASE_SENDING_TYPE;
    if (masterSecret.getMasterSecret().isPresent())
        type |= Types.ENCRYPTION_SYMMETRIC_BIT;
    else
        type |= Types.ENCRYPTION_ASYMMETRIC_BIT;
    if (message.isSecure())
        type |= (Types.SECURE_MESSAGE_BIT | Types.PUSH_MESSAGE_BIT);
    if (forceSms)
        type |= Types.MESSAGE_FORCE_SMS_BIT;
    if (message.isGroup()) {
        if (((OutgoingGroupMediaMessage) message).isGroupUpdate())
            type |= Types.GROUP_UPDATE_BIT;
        else if (((OutgoingGroupMediaMessage) message).isGroupQuit())
            type |= Types.GROUP_QUIT_BIT;
    }
    if (message.isExpirationUpdate()) {
        type |= Types.EXPIRATION_TIMER_UPDATE_BIT;
    }
    List<String> recipientNumbers = message.getRecipients().toNumberStringList(true);
    MmsAddresses addresses;
    if (!message.getRecipients().isSingleRecipient() && message.getDistributionType() == ThreadDatabase.DistributionTypes.BROADCAST) {
        addresses = MmsAddresses.forBcc(recipientNumbers);
    } else {
        addresses = MmsAddresses.forTo(recipientNumbers);
    }
    ContentValues contentValues = new ContentValues();
    contentValues.put(DATE_SENT, message.getSentTimeMillis());
    contentValues.put(MESSAGE_TYPE, PduHeaders.MESSAGE_TYPE_SEND_REQ);
    contentValues.put(MESSAGE_BOX, type);
    contentValues.put(THREAD_ID, threadId);
    contentValues.put(READ, 1);
    contentValues.put(DATE_RECEIVED, System.currentTimeMillis());
    contentValues.put(SUBSCRIPTION_ID, message.getSubscriptionId());
    contentValues.put(EXPIRES_IN, message.getExpiresIn());
    if (message.getRecipients().isSingleRecipient()) {
        try {
            contentValues.put(RECEIPT_COUNT, earlyReceiptCache.remove(message.getSentTimeMillis(), canonicalizeNumber(context, message.getRecipients().getPrimaryRecipient().getNumber())));
        } catch (InvalidNumberException e) {
            Log.w(TAG, e);
        }
    }
    contentValues.remove(ADDRESS);
    long messageId = insertMediaMessage(masterSecret, addresses, message.getBody(), message.getAttachments(), contentValues);
    DatabaseFactory.getThreadDatabase(context).setLastSeen(threadId);
    jobManager.add(new TrimThreadJob(context, threadId));
    return messageId;
}
Also used : ContentValues(android.content.ContentValues) TrimThreadJob(org.thoughtcrime.securesms.jobs.TrimThreadJob) OutgoingGroupMediaMessage(org.thoughtcrime.securesms.mms.OutgoingGroupMediaMessage) InvalidNumberException(org.whispersystems.signalservice.api.util.InvalidNumberException)

Example 14 with InvalidNumberException

use of org.whispersystems.signalservice.api.util.InvalidNumberException in project Signal-Android by WhisperSystems.

the class TextSecureDirectory method getPushEligibleContactNumbers.

public Set<String> getPushEligibleContactNumbers(String localNumber) {
    final Uri uri = Phone.CONTENT_URI;
    final Set<String> results = new HashSet<>();
    Cursor cursor = null;
    try {
        cursor = context.getContentResolver().query(uri, new String[] { Phone.NUMBER }, null, null, null);
        while (cursor != null && cursor.moveToNext()) {
            final String rawNumber = cursor.getString(0);
            if (rawNumber != null) {
                try {
                    final String e164Number = PhoneNumberFormatter.formatNumber(rawNumber, localNumber);
                    results.add(e164Number);
                } catch (InvalidNumberException e) {
                    Log.w("Directory", "Invalid number: " + rawNumber);
                }
            }
        }
        if (cursor != null)
            cursor.close();
        final SQLiteDatabase readableDb = databaseHelper.getReadableDatabase();
        if (readableDb != null) {
            cursor = readableDb.query(TABLE_NAME, new String[] { NUMBER }, null, null, null, null, null);
            while (cursor != null && cursor.moveToNext()) {
                results.add(cursor.getString(0));
            }
        }
        return results;
    } finally {
        if (cursor != null)
            cursor.close();
    }
}
Also used : SQLiteDatabase(android.database.sqlite.SQLiteDatabase) InvalidNumberException(org.whispersystems.signalservice.api.util.InvalidNumberException) Cursor(android.database.Cursor) Uri(android.net.Uri) HashSet(java.util.HashSet)

Example 15 with InvalidNumberException

use of org.whispersystems.signalservice.api.util.InvalidNumberException in project Signal-Android by WhisperSystems.

the class SmsDatabase method setTimestampRead.

public List<Pair<Long, Long>> setTimestampRead(SyncMessageId messageId, long expireStarted) {
    SQLiteDatabase database = databaseHelper.getWritableDatabase();
    List<Pair<Long, Long>> expiring = new LinkedList<>();
    Cursor cursor = null;
    try {
        cursor = database.query(TABLE_NAME, new String[] { ID, THREAD_ID, ADDRESS, TYPE, EXPIRES_IN }, DATE_SENT + " = ?", new String[] { String.valueOf(messageId.getTimetamp()) }, null, null, null, null);
        while (cursor.moveToNext()) {
            try {
                String theirAddress = canonicalizeNumber(context, messageId.getAddress());
                String ourAddress = canonicalizeNumber(context, cursor.getString(cursor.getColumnIndexOrThrow(ADDRESS)));
                if (ourAddress.equals(theirAddress)) {
                    long id = cursor.getLong(cursor.getColumnIndexOrThrow(ID));
                    long threadId = cursor.getLong(cursor.getColumnIndexOrThrow(THREAD_ID));
                    long expiresIn = cursor.getLong(cursor.getColumnIndexOrThrow(EXPIRES_IN));
                    ContentValues contentValues = new ContentValues();
                    contentValues.put(READ, 1);
                    if (expiresIn > 0) {
                        contentValues.put(EXPIRE_STARTED, expireStarted);
                        expiring.add(new Pair<>(id, expiresIn));
                    }
                    database.update(TABLE_NAME, contentValues, ID_WHERE, new String[] { cursor.getLong(cursor.getColumnIndexOrThrow(ID)) + "" });
                    DatabaseFactory.getThreadDatabase(context).updateReadState(threadId);
                    DatabaseFactory.getThreadDatabase(context).setLastSeen(threadId);
                    notifyConversationListeners(threadId);
                }
            } catch (InvalidNumberException e) {
                Log.w(TAG, e);
            }
        }
    } finally {
        if (cursor != null)
            cursor.close();
    }
    return expiring;
}
Also used : ContentValues(android.content.ContentValues) SQLiteDatabase(android.database.sqlite.SQLiteDatabase) InvalidNumberException(org.whispersystems.signalservice.api.util.InvalidNumberException) Cursor(android.database.Cursor) LinkedList(java.util.LinkedList) Pair(android.util.Pair)

Aggregations

InvalidNumberException (org.whispersystems.signalservice.api.util.InvalidNumberException)20 Cursor (android.database.Cursor)7 SQLiteDatabase (android.database.sqlite.SQLiteDatabase)6 Recipient (org.thoughtcrime.securesms.recipients.Recipient)5 SignalServiceMessageSender (org.whispersystems.signalservice.api.SignalServiceMessageSender)5 ContentValues (android.content.ContentValues)4 Uri (android.net.Uri)4 LinkedList (java.util.LinkedList)4 IOException (java.io.IOException)3 SignalServiceAddress (org.whispersystems.signalservice.api.push.SignalServiceAddress)3 Pair (android.util.Pair)2 File (java.io.File)2 FileOutputStream (java.io.FileOutputStream)2 TrimThreadJob (org.thoughtcrime.securesms.jobs.TrimThreadJob)2 InsecureFallbackApprovalException (org.thoughtcrime.securesms.transport.InsecureFallbackApprovalException)2 RetryLaterException (org.thoughtcrime.securesms.transport.RetryLaterException)2 UndeliverableMessageException (org.thoughtcrime.securesms.transport.UndeliverableMessageException)2 SignalServiceDataMessage (org.whispersystems.signalservice.api.messages.SignalServiceDataMessage)2 DeviceContact (org.whispersystems.signalservice.api.messages.multidevice.DeviceContact)2 DeviceContactsOutputStream (org.whispersystems.signalservice.api.messages.multidevice.DeviceContactsOutputStream)2