Search in sources :

Example 1 with DirectoryRefreshJob

use of org.thoughtcrime.securesms.jobs.DirectoryRefreshJob in project Signal-Android by WhisperSystems.

the class RegistrationUtil method maybeMarkRegistrationComplete.

/**
 * There's several events where a registration may or may not be considered complete based on what
 * path a user has taken. This will only truly mark registration as complete if all of the
 * requirements are met.
 */
public static void maybeMarkRegistrationComplete(@NonNull Context context) {
    if (!SignalStore.registrationValues().isRegistrationComplete() && SignalStore.account().isRegistered() && !Recipient.self().getProfileName().isEmpty() && (SignalStore.kbsValues().hasPin() || SignalStore.kbsValues().hasOptedOut())) {
        Log.i(TAG, "Marking registration completed.", new Throwable());
        SignalStore.registrationValues().setRegistrationComplete();
        ApplicationDependencies.getJobManager().startChain(new StorageSyncJob()).then(new DirectoryRefreshJob(false)).enqueue();
    } else if (!SignalStore.registrationValues().isRegistrationComplete()) {
        Log.i(TAG, "Registration is not yet complete.", new Throwable());
    }
}
Also used : StorageSyncJob(org.thoughtcrime.securesms.jobs.StorageSyncJob) DirectoryRefreshJob(org.thoughtcrime.securesms.jobs.DirectoryRefreshJob)

Example 2 with DirectoryRefreshJob

use of org.thoughtcrime.securesms.jobs.DirectoryRefreshJob in project Signal-Android by WhisperSystems.

the class RecipientIdJobMigrationTest method migrate_directoryRefreshJob_nonNull.

@Test
public void migrate_directoryRefreshJob_nonNull() throws Exception {
    JobData testData = new JobData("DirectoryRefreshJob", "DirectoryRefreshJob", new Data.Builder().putString("address", "+16101234567").putBoolean("notify_of_new_users", true).build());
    mockRecipientResolve("+16101234567", 1);
    RecipientIdJobMigration subject = new RecipientIdJobMigration(mock(Application.class));
    JobData converted = subject.migrate(testData);
    assertEquals("DirectoryRefreshJob", converted.getFactoryKey());
    assertEquals("DirectoryRefreshJob", converted.getQueueKey());
    assertTrue(converted.getData().getBoolean("notify_of_new_users"));
    assertEquals("1", converted.getData().getString("recipient"));
    assertFalse(converted.getData().hasString("address"));
    new DirectoryRefreshJob.Factory().create(mock(Job.Parameters.class), converted.getData());
}
Also used : DirectoryRefreshJob(org.thoughtcrime.securesms.jobs.DirectoryRefreshJob) JobData(org.thoughtcrime.securesms.jobmanager.JobMigration.JobData) Application(android.app.Application) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Example 3 with DirectoryRefreshJob

use of org.thoughtcrime.securesms.jobs.DirectoryRefreshJob in project Signal-Android by WhisperSystems.

the class LegacyMigrationJob method performMigration.

@Override
void performMigration() throws RetryLaterException {
    Log.i(TAG, "Running background upgrade..");
    int lastSeenVersion = VersionTracker.getLastSeenVersion(context);
    MasterSecret masterSecret = KeyCachingService.getMasterSecret(context);
    if (lastSeenVersion < SQLCIPHER && masterSecret != null) {
        SignalDatabase.onApplicationLevelUpgrade(context, masterSecret, lastSeenVersion, (progress, total) -> {
            Log.i(TAG, "onApplicationLevelUpgrade: " + progress + "/" + total);
        });
    } else if (lastSeenVersion < SQLCIPHER) {
        throw new RetryLaterException();
    }
    if (lastSeenVersion < NO_V1_VERSION) {
        File v1sessions = new File(context.getFilesDir(), "sessions");
        if (v1sessions.exists() && v1sessions.isDirectory()) {
            File[] contents = v1sessions.listFiles();
            if (contents != null) {
                for (File session : contents) {
                    session.delete();
                }
            }
            v1sessions.delete();
        }
    }
    if (lastSeenVersion < SIGNED_PREKEY_VERSION) {
        CreateSignedPreKeyJob.enqueueIfNeeded();
    }
    if (lastSeenVersion < NO_DECRYPT_QUEUE_VERSION) {
        scheduleMessagesInPushDatabase(context);
    }
    if (lastSeenVersion < PUSH_DECRYPT_SERIAL_ID_VERSION) {
        scheduleMessagesInPushDatabase(context);
    }
    if (lastSeenVersion < MIGRATE_SESSION_PLAINTEXT) {
        // new TextSecureSessionStore(context, masterSecret).migrateSessions();
        // new TextSecurePreKeyStore(context, masterSecret).migrateRecords();
        scheduleMessagesInPushDatabase(context);
        ;
    }
    if (lastSeenVersion < CONTACTS_ACCOUNT_VERSION) {
        ApplicationDependencies.getJobManager().add(new DirectoryRefreshJob(false));
    }
    if (lastSeenVersion < MEDIA_DOWNLOAD_CONTROLS_VERSION) {
        schedulePendingIncomingParts(context);
    }
    if (lastSeenVersion < REDPHONE_SUPPORT_VERSION) {
        ApplicationDependencies.getJobManager().add(new RefreshAttributesJob());
        ApplicationDependencies.getJobManager().add(new DirectoryRefreshJob(false));
    }
    if (lastSeenVersion < PROFILES) {
        ApplicationDependencies.getJobManager().add(new DirectoryRefreshJob(false));
    }
    if (lastSeenVersion < SCREENSHOTS) {
        boolean screenSecurity = PreferenceManager.getDefaultSharedPreferences(context).getBoolean(TextSecurePreferences.SCREEN_SECURITY_PREF, true);
        TextSecurePreferences.setScreenSecurityEnabled(context, screenSecurity);
    }
    if (lastSeenVersion < PERSISTENT_BLOBS) {
        File externalDir = context.getExternalFilesDir(null);
        if (externalDir != null && externalDir.isDirectory() && externalDir.exists()) {
            for (File blob : externalDir.listFiles()) {
                if (blob.exists() && blob.isFile())
                    blob.delete();
            }
        }
    }
    if (lastSeenVersion < INTERNALIZE_CONTACTS) {
        if (SignalStore.account().isRegistered()) {
            TextSecurePreferences.setHasSuccessfullyRetrievedDirectory(context, true);
        }
    }
    if (lastSeenVersion < SQLCIPHER) {
        scheduleMessagesInPushDatabase(context);
    }
    if (lastSeenVersion < SQLCIPHER_COMPLETE) {
        File file = context.getDatabasePath("messages.db");
        if (file != null && file.exists())
            file.delete();
    }
    if (lastSeenVersion < REMOVE_JOURNAL) {
        File file = context.getDatabasePath("messages.db-journal");
        if (file != null && file.exists())
            file.delete();
    }
    if (lastSeenVersion < REMOVE_CACHE) {
        FileUtils.deleteDirectoryContents(context.getCacheDir());
    }
    if (lastSeenVersion < IMAGE_CACHE_CLEANUP) {
        FileUtils.deleteDirectoryContents(context.getExternalCacheDir());
        GlideApp.get(context).clearDiskCache();
    }
    if (lastSeenVersion < COLOR_MIGRATION) {
        long startTime = System.currentTimeMillis();
        // noinspection deprecation
        SignalDatabase.recipients().updateSystemContactColors();
        Log.i(TAG, "Color migration took " + (System.currentTimeMillis() - startTime) + " ms");
    }
    if (lastSeenVersion < UNIDENTIFIED_DELIVERY) {
        Log.i(TAG, "Scheduling UD attributes refresh.");
        ApplicationDependencies.getJobManager().add(new RefreshAttributesJob());
    }
    if (lastSeenVersion < SIGNALING_KEY_DEPRECATION) {
        Log.i(TAG, "Scheduling a RefreshAttributesJob to remove the signaling key remotely.");
        ApplicationDependencies.getJobManager().add(new RefreshAttributesJob());
    }
}
Also used : MasterSecret(org.thoughtcrime.securesms.crypto.MasterSecret) RefreshAttributesJob(org.thoughtcrime.securesms.jobs.RefreshAttributesJob) DirectoryRefreshJob(org.thoughtcrime.securesms.jobs.DirectoryRefreshJob) RetryLaterException(org.thoughtcrime.securesms.transport.RetryLaterException) File(java.io.File)

Example 4 with DirectoryRefreshJob

use of org.thoughtcrime.securesms.jobs.DirectoryRefreshJob in project Signal-Android by signalapp.

the class DirectoryRefreshListener method onAlarm.

@Override
protected long onAlarm(Context context, long scheduledTime) {
    if (scheduledTime != 0 && SignalStore.account().isRegistered()) {
        ApplicationDependencies.getJobManager().add(new DirectoryRefreshJob(true));
    }
    long interval = TimeUnit.SECONDS.toMillis(FeatureFlags.cdsRefreshIntervalSeconds());
    long newTime = System.currentTimeMillis() + interval;
    TextSecurePreferences.setDirectoryRefreshTime(context, newTime);
    return newTime;
}
Also used : DirectoryRefreshJob(org.thoughtcrime.securesms.jobs.DirectoryRefreshJob)

Example 5 with DirectoryRefreshJob

use of org.thoughtcrime.securesms.jobs.DirectoryRefreshJob in project Signal-Android by signalapp.

the class RecipientIdJobMigrationTest method migrate_directoryRefreshJob_null.

@Test
public void migrate_directoryRefreshJob_null() throws Exception {
    JobData testData = new JobData("DirectoryRefreshJob", "DirectoryRefreshJob", new Data.Builder().putString("address", null).putBoolean("notify_of_new_users", true).build());
    RecipientIdJobMigration subject = new RecipientIdJobMigration(mock(Application.class));
    JobData converted = subject.migrate(testData);
    assertEquals("DirectoryRefreshJob", converted.getFactoryKey());
    assertEquals("DirectoryRefreshJob", converted.getQueueKey());
    assertNull(converted.getData().getString("recipient"));
    assertTrue(converted.getData().getBoolean("notify_of_new_users"));
    assertFalse(converted.getData().hasString("address"));
    new DirectoryRefreshJob.Factory().create(mock(Job.Parameters.class), converted.getData());
}
Also used : DirectoryRefreshJob(org.thoughtcrime.securesms.jobs.DirectoryRefreshJob) JobData(org.thoughtcrime.securesms.jobmanager.JobMigration.JobData) Application(android.app.Application) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Aggregations

DirectoryRefreshJob (org.thoughtcrime.securesms.jobs.DirectoryRefreshJob)13 Application (android.app.Application)4 Test (org.junit.Test)4 PrepareForTest (org.powermock.core.classloader.annotations.PrepareForTest)4 JobData (org.thoughtcrime.securesms.jobmanager.JobMigration.JobData)4 Account (android.accounts.Account)2 AbstractThreadedSyncAdapter (android.content.AbstractThreadedSyncAdapter)2 ContentProviderClient (android.content.ContentProviderClient)2 Context (android.content.Context)2 SyncResult (android.content.SyncResult)2 Bundle (android.os.Bundle)2 Stream (com.annimon.stream.Stream)2 File (java.io.File)2 IOException (java.io.IOException)2 List (java.util.List)2 Set (java.util.Set)2 Log (org.signal.core.util.logging.Log)2 DirectoryHelper (org.thoughtcrime.securesms.contacts.sync.DirectoryHelper)2 MasterSecret (org.thoughtcrime.securesms.crypto.MasterSecret)2 SignalDatabase (org.thoughtcrime.securesms.database.SignalDatabase)2