chore(network): Allow adding OKHttp interceptors through dependency injection

This commit is contained in:
Damir Mihaljinec 2024-03-20 15:37:00 +01:00 committed by MargeBot
parent 0d7b5f9d8f
commit 23c10af742
10 changed files with 150 additions and 11 deletions

View File

@ -70,14 +70,15 @@ public final class me/proton/core/network/dagger/CoreNetworkCryptoModule_Provide
public final class me/proton/core/network/dagger/CoreNetworkModule {
public fun <init> ()V
public final fun provideNothing ()Ljava/util/Set;
}
public final class me/proton/core/network/dagger/CoreNetworkModule_ProvideApiFactory$network_dagger_releaseFactory : dagger/internal/Factory {
public fun <init> (Lme/proton/core/network/dagger/CoreNetworkModule;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V
public static fun create (Lme/proton/core/network/dagger/CoreNetworkModule;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lme/proton/core/network/dagger/CoreNetworkModule_ProvideApiFactory$network_dagger_releaseFactory;
public fun <init> (Lme/proton/core/network/dagger/CoreNetworkModule;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V
public static fun create (Lme/proton/core/network/dagger/CoreNetworkModule;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lme/proton/core/network/dagger/CoreNetworkModule_ProvideApiFactory$network_dagger_releaseFactory;
public synthetic fun get ()Ljava/lang/Object;
public fun get ()Lme/proton/core/network/data/ApiManagerFactory;
public static fun provideApiFactory$network_dagger_release (Lme/proton/core/network/dagger/CoreNetworkModule;Landroid/content/Context;Lme/proton/core/network/domain/ApiClient;Lme/proton/core/network/domain/client/ClientIdProvider;Lme/proton/core/network/domain/server/ServerTimeListener;Lme/proton/core/network/domain/NetworkManager;Lme/proton/core/network/domain/NetworkPrefs;Lme/proton/core/network/data/ProtonCookieStore;Lme/proton/core/network/domain/session/SessionProvider;Lme/proton/core/network/domain/session/SessionListener;Lme/proton/core/network/domain/humanverification/HumanVerificationProvider;Lme/proton/core/network/domain/humanverification/HumanVerificationListener;Lme/proton/core/network/domain/deviceverification/DeviceVerificationProvider;Lme/proton/core/network/domain/deviceverification/DeviceVerificationListener;Lme/proton/core/network/domain/scopes/MissingScopeListener;Lme/proton/core/network/domain/client/ExtraHeaderProvider;Lme/proton/core/network/domain/client/ClientVersionValidator;Lme/proton/core/network/domain/serverconnection/DohAlternativesListener;Lokhttp3/HttpUrl;[Ljava/lang/String;[Ljava/lang/String;Ljava/util/List;Lokhttp3/OkHttpClient;)Lme/proton/core/network/data/ApiManagerFactory;
public static fun provideApiFactory$network_dagger_release (Lme/proton/core/network/dagger/CoreNetworkModule;Landroid/content/Context;Lme/proton/core/network/domain/ApiClient;Lme/proton/core/network/domain/client/ClientIdProvider;Lme/proton/core/network/domain/server/ServerTimeListener;Lme/proton/core/network/domain/NetworkManager;Lme/proton/core/network/domain/NetworkPrefs;Lme/proton/core/network/data/ProtonCookieStore;Lme/proton/core/network/domain/session/SessionProvider;Lme/proton/core/network/domain/session/SessionListener;Lme/proton/core/network/domain/humanverification/HumanVerificationProvider;Lme/proton/core/network/domain/humanverification/HumanVerificationListener;Lme/proton/core/network/domain/deviceverification/DeviceVerificationProvider;Lme/proton/core/network/domain/deviceverification/DeviceVerificationListener;Lme/proton/core/network/domain/scopes/MissingScopeListener;Lme/proton/core/network/domain/client/ExtraHeaderProvider;Lme/proton/core/network/domain/client/ClientVersionValidator;Lme/proton/core/network/domain/serverconnection/DohAlternativesListener;Lokhttp3/HttpUrl;[Ljava/lang/String;[Ljava/lang/String;Ljava/util/List;Lokhttp3/OkHttpClient;Ljava/util/Set;)Lme/proton/core/network/data/ApiManagerFactory;
}
public final class me/proton/core/network/dagger/CoreNetworkModule_ProvideCookieJar$network_dagger_releaseFactory : dagger/internal/Factory {
@ -96,3 +97,11 @@ public final class me/proton/core/network/dagger/CoreNetworkModule_ProvideNetwor
public static fun provideNetworkPrefs$network_dagger_release (Lme/proton/core/network/dagger/CoreNetworkModule;Landroid/content/Context;)Lme/proton/core/network/domain/NetworkPrefs;
}
public final class me/proton/core/network/dagger/CoreNetworkModule_ProvideNothingFactory : dagger/internal/Factory {
public fun <init> (Lme/proton/core/network/dagger/CoreNetworkModule;)V
public static fun create (Lme/proton/core/network/dagger/CoreNetworkModule;)Lme/proton/core/network/dagger/CoreNetworkModule_ProvideNothingFactory;
public synthetic fun get ()Ljava/lang/Object;
public fun get ()Ljava/util/Set;
public static fun provideNothing (Lme/proton/core/network/dagger/CoreNetworkModule;)Ljava/util/Set;
}

View File

@ -25,6 +25,7 @@ import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import dagger.multibindings.ElementsIntoSet
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
@ -52,6 +53,7 @@ import me.proton.core.network.domain.deviceverification.DeviceVerificationListen
import me.proton.core.network.domain.deviceverification.DeviceVerificationProvider
import me.proton.core.network.domain.humanverification.HumanVerificationListener
import me.proton.core.network.domain.humanverification.HumanVerificationProvider
import me.proton.core.network.domain.interceptor.InterceptorInfo
import me.proton.core.network.domain.scopes.MissingScopeListener
import me.proton.core.network.domain.server.ServerClock
import me.proton.core.network.domain.server.ServerTimeListener
@ -62,6 +64,7 @@ import me.proton.core.network.domain.session.SessionProvider
import me.proton.core.util.kotlin.CoroutineScopeProvider
import okhttp3.Cache
import okhttp3.HttpUrl
import okhttp3.Interceptor
import okhttp3.OkHttpClient
import java.io.File
import javax.inject.Singleton
@ -71,6 +74,12 @@ private const val OKHTTP_CACHE_SIZE = 10L * 1024L * 1024L // 10 MiB
@Module
@InstallIn(SingletonComponent::class)
public class CoreNetworkModule {
@Provides
@Singleton
@ElementsIntoSet
public fun provideNothing(): Set<Pair<InterceptorInfo, Interceptor>> = emptySet()
@Provides
@Singleton
@Suppress("LongParameterList")
@ -96,7 +105,8 @@ public class CoreNetworkModule {
@DohProviderUrls dohProviderUrls: Array<String>,
@CertificatePins certificatePins: Array<String>,
@AlternativeApiPins alternativeApiPins: List<String>,
@SharedOkHttpClient okHttpClient: OkHttpClient
@SharedOkHttpClient okHttpClient: OkHttpClient,
interceptors: @JvmSuppressWildcards Set<Pair<InterceptorInfo, Interceptor>>,
): ApiManagerFactory {
return ApiManagerFactory(
apiUrl,
@ -126,7 +136,8 @@ public class CoreNetworkModule {
clientVersionValidator = clientVersionValidator,
dohAlternativesListener = dohAlternativesListener,
dohProviderUrls = dohProviderUrls,
okHttpClient = okHttpClient
okHttpClient = okHttpClient,
interceptors = interceptors,
)
}

View File

@ -1,6 +1,6 @@
public final class me/proton/core/network/data/ApiManagerFactory {
public fun <init> (Lokhttp3/HttpUrl;Lme/proton/core/network/domain/ApiClient;Lme/proton/core/network/domain/client/ClientIdProvider;Lme/proton/core/network/domain/server/ServerTimeListener;Lme/proton/core/network/domain/NetworkManager;Lme/proton/core/network/domain/NetworkPrefs;Lme/proton/core/network/domain/session/SessionProvider;Lme/proton/core/network/domain/session/SessionListener;Lme/proton/core/network/domain/humanverification/HumanVerificationProvider;Lme/proton/core/network/domain/humanverification/HumanVerificationListener;Lme/proton/core/network/domain/deviceverification/DeviceVerificationProvider;Lme/proton/core/network/domain/deviceverification/DeviceVerificationListener;Lme/proton/core/network/domain/scopes/MissingScopeListener;Lme/proton/core/network/data/ProtonCookieStore;Lkotlinx/coroutines/CoroutineScope;[Ljava/lang/String;Ljava/util/List;Lkotlin/jvm/functions/Function0;Lme/proton/core/network/domain/client/ExtraHeaderProvider;Lme/proton/core/network/domain/client/ClientVersionValidator;Lme/proton/core/network/domain/serverconnection/DohAlternativesListener;[Ljava/lang/String;Lokhttp3/OkHttpClient;)V
public synthetic fun <init> (Lokhttp3/HttpUrl;Lme/proton/core/network/domain/ApiClient;Lme/proton/core/network/domain/client/ClientIdProvider;Lme/proton/core/network/domain/server/ServerTimeListener;Lme/proton/core/network/domain/NetworkManager;Lme/proton/core/network/domain/NetworkPrefs;Lme/proton/core/network/domain/session/SessionProvider;Lme/proton/core/network/domain/session/SessionListener;Lme/proton/core/network/domain/humanverification/HumanVerificationProvider;Lme/proton/core/network/domain/humanverification/HumanVerificationListener;Lme/proton/core/network/domain/deviceverification/DeviceVerificationProvider;Lme/proton/core/network/domain/deviceverification/DeviceVerificationListener;Lme/proton/core/network/domain/scopes/MissingScopeListener;Lme/proton/core/network/data/ProtonCookieStore;Lkotlinx/coroutines/CoroutineScope;[Ljava/lang/String;Ljava/util/List;Lkotlin/jvm/functions/Function0;Lme/proton/core/network/domain/client/ExtraHeaderProvider;Lme/proton/core/network/domain/client/ClientVersionValidator;Lme/proton/core/network/domain/serverconnection/DohAlternativesListener;[Ljava/lang/String;Lokhttp3/OkHttpClient;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Lokhttp3/HttpUrl;Lme/proton/core/network/domain/ApiClient;Lme/proton/core/network/domain/client/ClientIdProvider;Lme/proton/core/network/domain/server/ServerTimeListener;Lme/proton/core/network/domain/NetworkManager;Lme/proton/core/network/domain/NetworkPrefs;Lme/proton/core/network/domain/session/SessionProvider;Lme/proton/core/network/domain/session/SessionListener;Lme/proton/core/network/domain/humanverification/HumanVerificationProvider;Lme/proton/core/network/domain/humanverification/HumanVerificationListener;Lme/proton/core/network/domain/deviceverification/DeviceVerificationProvider;Lme/proton/core/network/domain/deviceverification/DeviceVerificationListener;Lme/proton/core/network/domain/scopes/MissingScopeListener;Lme/proton/core/network/data/ProtonCookieStore;Lkotlinx/coroutines/CoroutineScope;[Ljava/lang/String;Ljava/util/List;Lkotlin/jvm/functions/Function0;Lme/proton/core/network/domain/client/ExtraHeaderProvider;Lme/proton/core/network/domain/client/ClientVersionValidator;Lme/proton/core/network/domain/serverconnection/DohAlternativesListener;[Ljava/lang/String;Lokhttp3/OkHttpClient;Ljava/util/Set;)V
public synthetic fun <init> (Lokhttp3/HttpUrl;Lme/proton/core/network/domain/ApiClient;Lme/proton/core/network/domain/client/ClientIdProvider;Lme/proton/core/network/domain/server/ServerTimeListener;Lme/proton/core/network/domain/NetworkManager;Lme/proton/core/network/domain/NetworkPrefs;Lme/proton/core/network/domain/session/SessionProvider;Lme/proton/core/network/domain/session/SessionListener;Lme/proton/core/network/domain/humanverification/HumanVerificationProvider;Lme/proton/core/network/domain/humanverification/HumanVerificationListener;Lme/proton/core/network/domain/deviceverification/DeviceVerificationProvider;Lme/proton/core/network/domain/deviceverification/DeviceVerificationListener;Lme/proton/core/network/domain/scopes/MissingScopeListener;Lme/proton/core/network/data/ProtonCookieStore;Lkotlinx/coroutines/CoroutineScope;[Ljava/lang/String;Ljava/util/List;Lkotlin/jvm/functions/Function0;Lme/proton/core/network/domain/client/ExtraHeaderProvider;Lme/proton/core/network/domain/client/ClientVersionValidator;Lme/proton/core/network/domain/serverconnection/DohAlternativesListener;[Ljava/lang/String;Lokhttp3/OkHttpClient;Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun create (Lme/proton/core/network/domain/session/SessionId;Lkotlin/reflect/KClass;Ljava/util/List;[Ljava/lang/String;Ljava/util/List;)Lme/proton/core/network/domain/ApiManager;
public static synthetic fun create$default (Lme/proton/core/network/data/ApiManagerFactory;Lme/proton/core/network/domain/session/SessionId;Lkotlin/reflect/KClass;Ljava/util/List;[Ljava/lang/String;Ljava/util/List;ILjava/lang/Object;)Lme/proton/core/network/domain/ApiManager;
public final fun getBaseOkHttpClient ()Lokhttp3/OkHttpClient;

View File

@ -49,6 +49,7 @@ import me.proton.core.network.domain.handlers.ProtonForceUpdateHandler
import me.proton.core.network.domain.handlers.TokenErrorHandler
import me.proton.core.network.domain.humanverification.HumanVerificationListener
import me.proton.core.network.domain.humanverification.HumanVerificationProvider
import me.proton.core.network.domain.interceptor.InterceptorInfo
import me.proton.core.network.domain.scopes.MissingScopeListener
import me.proton.core.network.domain.server.ServerTimeListener
import me.proton.core.network.domain.serverconnection.DohAlternativesListener
@ -58,6 +59,7 @@ import me.proton.core.network.domain.session.SessionProvider
import me.proton.core.util.kotlin.ProtonCoreConfig
import okhttp3.Cache
import okhttp3.HttpUrl
import okhttp3.Interceptor
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import java.util.concurrent.TimeUnit
@ -94,7 +96,8 @@ class ApiManagerFactory(
private val clientVersionValidator: ClientVersionValidator,
private val dohAlternativesListener: DohAlternativesListener?,
private val dohProviderUrls: Array<String> = Constants.DOH_PROVIDERS_URLS,
private val okHttpClient: OkHttpClient
private val okHttpClient: OkHttpClient,
private val interceptors: Set<Pair<InterceptorInfo, Interceptor>>,
) {
@OptIn(DelicateCoroutinesApi::class)
@ -199,6 +202,7 @@ class ApiManagerFactory(
prefs,
cookieStore,
extraHeaderProvider,
interceptors,
)
val alternativePinningStrategy = { builder: OkHttpClient.Builder ->
@ -242,6 +246,7 @@ class ApiManagerFactory(
prefs,
cookieStore,
extraHeaderProvider,
interceptors,
)
}
val errorHandlers = createBaseErrorHandlers(sessionId, ::javaMonoClockMs, dohApiHandler) + clientErrorHandlers

View File

@ -27,6 +27,7 @@ import me.proton.core.network.domain.ApiBackend
import me.proton.core.network.domain.ApiClient
import me.proton.core.network.domain.ApiManager
import me.proton.core.network.domain.ApiResult
import me.proton.core.network.domain.LogTag
import me.proton.core.network.domain.NetworkManager
import me.proton.core.network.domain.NetworkPrefs
import me.proton.core.network.domain.TimeoutOverride
@ -34,6 +35,7 @@ import me.proton.core.network.domain.client.ClientIdProvider
import me.proton.core.network.domain.client.ExtraHeaderProvider
import me.proton.core.network.domain.deviceverification.DeviceVerificationProvider
import me.proton.core.network.domain.humanverification.HumanVerificationProvider
import me.proton.core.network.domain.interceptor.InterceptorInfo
import me.proton.core.network.domain.server.ServerTimeListener
import me.proton.core.network.domain.session.SessionId
import me.proton.core.network.domain.session.SessionProvider
@ -80,6 +82,7 @@ internal class ProtonApiBackend<Api : BaseRetrofitApi>(
private val networkPrefs: NetworkPrefs,
private val cookieStore: ProtonCookieStore?,
private val extraHeaderProvider: ExtraHeaderProvider? = null,
private val interceptors: Set<Pair<InterceptorInfo, Interceptor>>,
) : ApiBackend<Api> {
private val api: Api
@ -96,6 +99,24 @@ internal class ProtonApiBackend<Api : BaseRetrofitApi>(
.apply { cookieStore?.let { addInterceptor(DoHCookieInterceptor(networkPrefs, it)) } }
.initLogging(client)
.apply(securityStrategy)
.apply {
interceptors
.sortedBy { (info, _) -> info.priority }
.apply {
if (size != distinctBy { (info, _) -> info.priority.value }.size) {
CoreLogger.w(
tag = LogTag.DEFAULT,
message = "Multiple interceptors with same priority detected.",
)
}
}
.forEach { (info, interceptor) ->
when (info.type) {
InterceptorInfo.Type.APP -> addInterceptor(interceptor)
InterceptorInfo.Type.NETWORK -> addNetworkInterceptor(interceptor)
}
}
}
.build()
init {

View File

@ -168,7 +168,8 @@ internal class ApiManagerTests {
cache = { null },
clientVersionValidator = clientVersionValidator,
dohAlternativesListener = null,
okHttpClient = mockk(relaxed = true)
okHttpClient = mockk(relaxed = true),
interceptors = emptySet(),
)
coEvery { dohService.getAlternativeBaseUrls(any(), any()) } returns listOf(proxy1url)

View File

@ -183,7 +183,8 @@ internal class HumanVerificationTests {
cache = { null },
clientVersionValidator = clientVersionValidator,
dohAlternativesListener = null,
okHttpClient = OkHttpClient()
okHttpClient = OkHttpClient(),
interceptors = emptySet(),
)
every { networkManager.isConnectedToNetwork() } returns isNetworkAvailable
@ -215,6 +216,7 @@ internal class HumanVerificationTests {
pinningInit,
prefs,
cookieJar,
interceptors = emptySet(),
)
@After

View File

@ -147,7 +147,8 @@ internal class ProtonApiBackendTests {
cache = { null },
clientVersionValidator = clientVersionValidator,
dohAlternativesListener = null,
okHttpClient = OkHttpClient()
okHttpClient = OkHttpClient(),
interceptors = emptySet(),
)
every { networkManager.isConnectedToNetwork() } returns isNetworkAvailable
@ -195,6 +196,7 @@ internal class ProtonApiBackendTests {
prefs,
cookieJar,
extraHeaderProvider,
emptySet(),
)
@AfterTest

View File

@ -586,6 +586,52 @@ public final class me/proton/core/network/domain/humanverification/VerificationM
public static final field PHONE Ljava/lang/String;
}
public final class me/proton/core/network/domain/interceptor/InterceptorInfo {
public synthetic fun <init> (Lme/proton/core/network/domain/interceptor/InterceptorInfo$Type;IILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Lme/proton/core/network/domain/interceptor/InterceptorInfo$Type;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Lme/proton/core/network/domain/interceptor/InterceptorInfo$Type;
public final fun component2-NVsBYFU ()I
public final fun copy-_9aMDtU (Lme/proton/core/network/domain/interceptor/InterceptorInfo$Type;I)Lme/proton/core/network/domain/interceptor/InterceptorInfo;
public static synthetic fun copy-_9aMDtU$default (Lme/proton/core/network/domain/interceptor/InterceptorInfo;Lme/proton/core/network/domain/interceptor/InterceptorInfo$Type;IILjava/lang/Object;)Lme/proton/core/network/domain/interceptor/InterceptorInfo;
public fun equals (Ljava/lang/Object;)Z
public final fun getPriority-NVsBYFU ()I
public final fun getType ()Lme/proton/core/network/domain/interceptor/InterceptorInfo$Type;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final class me/proton/core/network/domain/interceptor/InterceptorInfo$Priority : java/lang/Comparable {
public static final field Companion Lme/proton/core/network/domain/interceptor/InterceptorInfo$Priority$Companion;
public static final synthetic fun box-impl (I)Lme/proton/core/network/domain/interceptor/InterceptorInfo$Priority;
public synthetic fun compareTo (Ljava/lang/Object;)I
public fun compareTo-Sl0Tga8 (I)I
public static fun compareTo-Sl0Tga8 (II)I
public fun equals (Ljava/lang/Object;)Z
public static fun equals-impl (ILjava/lang/Object;)Z
public static final fun equals-impl0 (II)Z
public final fun getValue ()I
public fun hashCode ()I
public static fun hashCode-impl (I)I
public fun toString ()Ljava/lang/String;
public static fun toString-impl (I)Ljava/lang/String;
public final synthetic fun unbox-impl ()I
}
public final class me/proton/core/network/domain/interceptor/InterceptorInfo$Priority$Companion {
public final fun getLEAST-NVsBYFU ()I
public final fun getMEDIUM-NVsBYFU ()I
public final fun getTOP-NVsBYFU ()I
public final fun invoke-3nIOzgg (I)I
}
public final class me/proton/core/network/domain/interceptor/InterceptorInfo$Type : java/lang/Enum {
public static final field APP Lme/proton/core/network/domain/interceptor/InterceptorInfo$Type;
public static final field NETWORK Lme/proton/core/network/domain/interceptor/InterceptorInfo$Type;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Lme/proton/core/network/domain/interceptor/InterceptorInfo$Type;
public static fun values ()[Lme/proton/core/network/domain/interceptor/InterceptorInfo$Type;
}
public abstract interface class me/proton/core/network/domain/scopes/MissingScopeListener {
public abstract fun getState ()Lkotlinx/coroutines/flow/SharedFlow;
public abstract fun onMissingScope (Lme/proton/core/domain/entity/UserId;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;

View File

@ -0,0 +1,42 @@
/*
* Copyright (c) 2024 Proton Technologies AG
* This file is part of Proton AG and ProtonCore.
*
* ProtonCore 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.
*
* ProtonCore 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 ProtonCore. If not, see <https://www.gnu.org/licenses/>.
*/
package me.proton.core.network.domain.interceptor
data class InterceptorInfo(
val type: Type = Type.APP,
val priority: Priority = Priority.MEDIUM,
) {
enum class Type {
APP, NETWORK,
}
@JvmInline
value class Priority private constructor(val value: Int) : Comparable<Priority> {
override fun compareTo(other: Priority): Int = value.compareTo(other.value)
companion object {
operator fun invoke(value: Int) = Priority(value.coerceIn(TOP.value, LEAST.value))
val TOP = Priority(0)
val MEDIUM = Priority(100_000_000)
val LEAST = Priority(Int.MAX_VALUE)
}
}
}