mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-25 13:39:24 +00:00
1) Migrate from GSON to Jackson everywhere. 2) Add support for storing identity key conflicts on message rows. 3) Add limited support for surfacing identity key conflicts in UI.
105 lines
3.7 KiB
Java
105 lines
3.7 KiB
Java
/*
|
|
* Copyright (C) 2013 Open Whisper Systems
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
package org.thoughtcrime.securesms;
|
|
|
|
import android.app.Application;
|
|
import android.content.Context;
|
|
|
|
import org.thoughtcrime.securesms.crypto.PRNGFixes;
|
|
import org.thoughtcrime.securesms.dependencies.AxolotlStorageModule;
|
|
import org.thoughtcrime.securesms.dependencies.InjectableType;
|
|
import org.thoughtcrime.securesms.dependencies.TextSecureCommunicationModule;
|
|
import org.thoughtcrime.securesms.jobs.GcmRefreshJob;
|
|
import org.thoughtcrime.securesms.jobs.persistence.EncryptingJobSerializer;
|
|
import org.thoughtcrime.securesms.jobs.requirements.MasterSecretRequirementProvider;
|
|
import org.thoughtcrime.securesms.jobs.requirements.ServiceRequirementProvider;
|
|
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
|
import org.whispersystems.jobqueue.JobManager;
|
|
import org.whispersystems.jobqueue.dependencies.DependencyInjector;
|
|
import org.whispersystems.jobqueue.requirements.NetworkRequirementProvider;
|
|
|
|
import java.security.Security;
|
|
|
|
import dagger.ObjectGraph;
|
|
|
|
/**
|
|
* Will be called once when the TextSecure process is created.
|
|
*
|
|
* We're using this as an insertion point to patch up the Android PRNG disaster,
|
|
* to initialize the job manager, and to check for GCM registration freshness.
|
|
*
|
|
* @author Moxie Marlinspike
|
|
*/
|
|
public class ApplicationContext extends Application implements DependencyInjector {
|
|
|
|
private JobManager jobManager;
|
|
private ObjectGraph objectGraph;
|
|
|
|
public static ApplicationContext getInstance(Context context) {
|
|
return (ApplicationContext)context.getApplicationContext();
|
|
}
|
|
|
|
@Override
|
|
public void onCreate() {
|
|
initializeRandomNumberFix();
|
|
initializeDependencyInjection();
|
|
initializeJobManager();
|
|
initializeGcmCheck();
|
|
}
|
|
|
|
@Override
|
|
public void injectDependencies(Object object) {
|
|
if (object instanceof InjectableType) {
|
|
objectGraph.inject(object);
|
|
}
|
|
}
|
|
|
|
public JobManager getJobManager() {
|
|
return jobManager;
|
|
}
|
|
|
|
private void initializeRandomNumberFix() {
|
|
PRNGFixes.apply();
|
|
}
|
|
|
|
private void initializeJobManager() {
|
|
this.jobManager = JobManager.newBuilder(this)
|
|
.withName("TextSecureJobs")
|
|
.withDependencyInjector(this)
|
|
.withJobSerializer(new EncryptingJobSerializer())
|
|
.withRequirementProviders(new MasterSecretRequirementProvider(this),
|
|
new ServiceRequirementProvider(this),
|
|
new NetworkRequirementProvider(this))
|
|
.withConsumerThreads(5)
|
|
.build();
|
|
}
|
|
|
|
private void initializeDependencyInjection() {
|
|
this.objectGraph = ObjectGraph.create(new TextSecureCommunicationModule(this),
|
|
new AxolotlStorageModule(this));
|
|
}
|
|
|
|
private void initializeGcmCheck() {
|
|
if (TextSecurePreferences.isPushRegistered(this) &&
|
|
TextSecurePreferences.getGcmRegistrationId(this) == null)
|
|
{
|
|
this.jobManager.add(new GcmRefreshJob(this));
|
|
}
|
|
}
|
|
|
|
}
|