mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-25 12:17:22 +00:00
Add support for baseline profiles.
This commit is contained in:
@@ -23,6 +23,7 @@ import org.thoughtcrime.securesms.database.model.UpdateDescription;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.util.SignalTrace;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@@ -66,6 +67,7 @@ abstract class ConversationListDataSource implements PagedDataSource<Long, Conve
|
||||
|
||||
@Override
|
||||
public @NonNull List<Conversation> load(int start, int length, @NonNull CancellationSignal cancellationSignal) {
|
||||
SignalTrace.beginSection("ConversationListDataSource#load");
|
||||
Stopwatch stopwatch = new Stopwatch("load(" + start + ", " + length + "), " + getClass().getSimpleName() + ", " + conversationFilter);
|
||||
|
||||
List<Conversation> conversations = new ArrayList<>(length);
|
||||
@@ -97,6 +99,7 @@ abstract class ConversationListDataSource implements PagedDataSource<Long, Conve
|
||||
stopwatch.split("recipient-resolve");
|
||||
|
||||
stopwatch.stop(TAG);
|
||||
SignalTrace.endSection();
|
||||
|
||||
if (conversations.isEmpty() && start == 0 && length == 1) {
|
||||
if (conversationFilter == ConversationFilter.OFF) {
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.push;
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.google.android.gms.security.ProviderInstaller;
|
||||
|
||||
@@ -17,14 +18,32 @@ import org.whispersystems.signalservice.api.push.PNI;
|
||||
|
||||
public class AccountManagerFactory {
|
||||
|
||||
private static AccountManagerFactory instance;
|
||||
public static AccountManagerFactory getInstance() {
|
||||
if (instance == null) {
|
||||
synchronized (AccountManagerFactory.class) {
|
||||
if (instance == null) {
|
||||
instance = new AccountManagerFactory();
|
||||
}
|
||||
}
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public static void setInstance(@NonNull AccountManagerFactory accountManagerFactory) {
|
||||
synchronized (AccountManagerFactory.class) {
|
||||
instance = accountManagerFactory;
|
||||
}
|
||||
}
|
||||
private static final String TAG = Log.tag(AccountManagerFactory.class);
|
||||
|
||||
public static @NonNull SignalServiceAccountManager createAuthenticated(@NonNull Context context,
|
||||
@NonNull ACI aci,
|
||||
@NonNull PNI pni,
|
||||
@NonNull String e164,
|
||||
int deviceId,
|
||||
@NonNull String password)
|
||||
public @NonNull SignalServiceAccountManager createAuthenticated(@NonNull Context context,
|
||||
@NonNull ACI aci,
|
||||
@NonNull PNI pni,
|
||||
@NonNull String e164,
|
||||
int deviceId,
|
||||
@NonNull String password)
|
||||
{
|
||||
if (ApplicationDependencies.getSignalServiceNetworkAccess().isCensored(e164)) {
|
||||
SignalExecutors.BOUNDED.execute(() -> {
|
||||
@@ -50,10 +69,10 @@ public class AccountManagerFactory {
|
||||
/**
|
||||
* Should only be used during registration when you haven't yet been assigned an ACI.
|
||||
*/
|
||||
public static @NonNull SignalServiceAccountManager createUnauthenticated(@NonNull Context context,
|
||||
@NonNull String e164,
|
||||
int deviceId,
|
||||
@NonNull String password)
|
||||
public @NonNull SignalServiceAccountManager createUnauthenticated(@NonNull Context context,
|
||||
@NonNull String e164,
|
||||
int deviceId,
|
||||
@NonNull String password)
|
||||
{
|
||||
if (new SignalServiceNetworkAccess(context).isCensored(e164)) {
|
||||
SignalExecutors.BOUNDED.execute(() -> {
|
||||
|
||||
@@ -142,7 +142,7 @@ public final class RegistrationRepository {
|
||||
ApplicationDependencies.getProtocolStore().pni().sessions().archiveAllSessions();
|
||||
SenderKeyUtil.clearAllState();
|
||||
|
||||
SignalServiceAccountManager accountManager = AccountManagerFactory.createAuthenticated(context, aci, pni, registrationData.getE164(), SignalServiceAddress.DEFAULT_DEVICE_ID, registrationData.getPassword());
|
||||
SignalServiceAccountManager accountManager = AccountManagerFactory.getInstance().createAuthenticated(context, aci, pni, registrationData.getE164(), SignalServiceAddress.DEFAULT_DEVICE_ID, registrationData.getPassword());
|
||||
SignalServiceAccountDataStoreImpl aciProtocolStore = ApplicationDependencies.getProtocolStore().aci();
|
||||
SignalServiceAccountDataStoreImpl pniProtocolStore = ApplicationDependencies.getProtocolStore().pni();
|
||||
|
||||
@@ -219,7 +219,7 @@ public final class RegistrationRepository {
|
||||
}
|
||||
|
||||
public Single<BackupAuthCheckProcessor> getKbsAuthCredential(@NonNull RegistrationData registrationData, List<String> usernamePasswords) {
|
||||
SignalServiceAccountManager accountManager = AccountManagerFactory.createUnauthenticated(context, registrationData.getE164(), SignalServiceAddress.DEFAULT_DEVICE_ID, registrationData.getPassword());
|
||||
SignalServiceAccountManager accountManager = AccountManagerFactory.getInstance().createUnauthenticated(context, registrationData.getE164(), SignalServiceAddress.DEFAULT_DEVICE_ID, registrationData.getPassword());
|
||||
|
||||
return accountManager.checkBackupAuthCredentials(registrationData.getE164(), usernamePasswords)
|
||||
.map(BackupAuthCheckProcessor::new)
|
||||
|
||||
@@ -42,7 +42,7 @@ class VerifyAccountRepository(private val context: Application) {
|
||||
return if (sessionId.isNullOrBlank()) {
|
||||
Single.just(ServiceResponse.forApplicationError(NoSuchSessionException(), 409, null))
|
||||
} else {
|
||||
val accountManager: SignalServiceAccountManager = AccountManagerFactory.createUnauthenticated(context, e164, SignalServiceAddress.DEFAULT_DEVICE_ID, password)
|
||||
val accountManager: SignalServiceAccountManager = AccountManagerFactory.getInstance().createUnauthenticated(context, e164, SignalServiceAddress.DEFAULT_DEVICE_ID, password)
|
||||
Single.fromCallable { accountManager.getRegistrationSession(sessionId) }.subscribeOn(Schedulers.io())
|
||||
}
|
||||
}
|
||||
@@ -55,7 +55,7 @@ class VerifyAccountRepository(private val context: Application) {
|
||||
): Single<ServiceResponse<RegistrationSessionMetadataResponse>> {
|
||||
return Single.fromCallable {
|
||||
val fcmToken: String? = FcmUtil.getToken(context).orElse(null)
|
||||
val accountManager: SignalServiceAccountManager = AccountManagerFactory.createUnauthenticated(context, e164, SignalServiceAddress.DEFAULT_DEVICE_ID, password)
|
||||
val accountManager: SignalServiceAccountManager = AccountManagerFactory.getInstance().createUnauthenticated(context, e164, SignalServiceAddress.DEFAULT_DEVICE_ID, password)
|
||||
if (fcmToken == null) {
|
||||
return@fromCallable accountManager.createRegistrationSession(null, mcc, mnc)
|
||||
} else {
|
||||
@@ -97,7 +97,7 @@ class VerifyAccountRepository(private val context: Application) {
|
||||
password: String
|
||||
): Single<ServiceResponse<RegistrationSessionMetadataResponse>> {
|
||||
val fcmToken: Optional<String> = FcmUtil.getToken(context)
|
||||
val accountManager = AccountManagerFactory.createUnauthenticated(context, e164, SignalServiceAddress.DEFAULT_DEVICE_ID, password)
|
||||
val accountManager = AccountManagerFactory.getInstance().createUnauthenticated(context, e164, SignalServiceAddress.DEFAULT_DEVICE_ID, password)
|
||||
val pushChallenge = PushChallengeRequest.getPushChallengeBlocking(accountManager, sessionId, fcmToken, PUSH_REQUEST_TIMEOUT)
|
||||
return Single.fromCallable {
|
||||
return@fromCallable accountManager.submitPushChallengeToken(sessionId, pushChallenge.orElse(null))
|
||||
@@ -110,7 +110,7 @@ class VerifyAccountRepository(private val context: Application) {
|
||||
e164: String,
|
||||
password: String
|
||||
): Single<ServiceResponse<RegistrationSessionMetadataResponse>> {
|
||||
val accountManager = AccountManagerFactory.createUnauthenticated(context, e164, SignalServiceAddress.DEFAULT_DEVICE_ID, password)
|
||||
val accountManager = AccountManagerFactory.getInstance().createUnauthenticated(context, e164, SignalServiceAddress.DEFAULT_DEVICE_ID, password)
|
||||
return Single.fromCallable {
|
||||
return@fromCallable accountManager.submitCaptchaToken(sessionId, captcha)
|
||||
}.subscribeOn(Schedulers.io())
|
||||
@@ -125,7 +125,7 @@ class VerifyAccountRepository(private val context: Application) {
|
||||
Log.d(TAG, "SMS Verification requested")
|
||||
|
||||
return Single.fromCallable {
|
||||
val accountManager = AccountManagerFactory.createUnauthenticated(context, e164, SignalServiceAddress.DEFAULT_DEVICE_ID, password)
|
||||
val accountManager = AccountManagerFactory.getInstance().createUnauthenticated(context, e164, SignalServiceAddress.DEFAULT_DEVICE_ID, password)
|
||||
if (mode == Mode.PHONE_CALL) {
|
||||
return@fromCallable accountManager.requestVoiceVerificationCode(sessionId, Locale.getDefault(), mode.isSmsRetrieverSupported)
|
||||
} else {
|
||||
@@ -135,7 +135,7 @@ class VerifyAccountRepository(private val context: Application) {
|
||||
}
|
||||
|
||||
fun verifyAccount(sessionId: String, registrationData: RegistrationData): Single<ServiceResponse<RegistrationSessionMetadataResponse>> {
|
||||
val accountManager: SignalServiceAccountManager = AccountManagerFactory.createUnauthenticated(
|
||||
val accountManager: SignalServiceAccountManager = AccountManagerFactory.getInstance().createUnauthenticated(
|
||||
context,
|
||||
registrationData.e164,
|
||||
SignalServiceAddress.DEFAULT_DEVICE_ID,
|
||||
@@ -154,7 +154,7 @@ class VerifyAccountRepository(private val context: Application) {
|
||||
val universalUnidentifiedAccess: Boolean = TextSecurePreferences.isUniversalUnidentifiedAccess(context)
|
||||
val unidentifiedAccessKey: ByteArray = UnidentifiedAccess.deriveAccessKeyFrom(registrationData.profileKey)
|
||||
|
||||
val accountManager: SignalServiceAccountManager = AccountManagerFactory.createUnauthenticated(
|
||||
val accountManager: SignalServiceAccountManager = AccountManagerFactory.getInstance().createUnauthenticated(
|
||||
context,
|
||||
registrationData.e164,
|
||||
SignalServiceAddress.DEFAULT_DEVICE_ID,
|
||||
|
||||
@@ -158,7 +158,7 @@ public final class SignalProxyUtil {
|
||||
private static boolean testWebsocketConnectionUnregistered(long timeout) {
|
||||
CountDownLatch latch = new CountDownLatch(1);
|
||||
AtomicBoolean success = new AtomicBoolean(false);
|
||||
SignalServiceAccountManager accountManager = AccountManagerFactory.createUnauthenticated(ApplicationDependencies.getApplication(), "", SignalServiceAddress.DEFAULT_DEVICE_ID, "");
|
||||
SignalServiceAccountManager accountManager = AccountManagerFactory.getInstance().createUnauthenticated(ApplicationDependencies.getApplication(), "", SignalServiceAddress.DEFAULT_DEVICE_ID, "");
|
||||
|
||||
SignalExecutors.UNBOUNDED.execute(() -> {
|
||||
try {
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package org.thoughtcrime.securesms.util
|
||||
|
||||
import org.thoughtcrime.securesms.BuildConfig
|
||||
import androidx.tracing.Trace as AndroidTrace
|
||||
|
||||
object SignalTrace {
|
||||
@JvmStatic
|
||||
fun beginSection(methodName: String) {
|
||||
if (!BuildConfig.TRACING_ENABLED) {
|
||||
return
|
||||
}
|
||||
AndroidTrace.beginSection(methodName)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun endSection() {
|
||||
if (!BuildConfig.TRACING_ENABLED) {
|
||||
return
|
||||
}
|
||||
AndroidTrace.endSection()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user