HttpClient: Inject using hilt

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2024-08-20 14:14:56 +05:30
parent e7e5e3399d
commit ed42572128
19 changed files with 84 additions and 63 deletions

View File

@@ -24,17 +24,27 @@ import android.util.Log
import com.aurora.store.data.model.ProxyInfo
import com.aurora.store.util.Preferences
import com.google.gson.Gson
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object HttpClient {
private const val TAG = "HttpClient"
fun getPreferredClient(context: Context): IProxyHttpClient {
@Provides
@Singleton
fun getPreferredClient(@ApplicationContext context: Context, gson: Gson): IProxyHttpClient {
val proxyEnabled = Preferences.getBoolean(context, Preferences.PREFERENCE_PROXY_ENABLED)
val proxyInfoString = Preferences.getString(context, Preferences.PREFERENCE_PROXY_INFO)
return if (proxyEnabled && proxyInfoString.isNotBlank() && proxyInfoString != "{}") {
val proxyInfo = Gson().fromJson(proxyInfoString, ProxyInfo::class.java)
val proxyInfo = gson.fromJson(proxyInfoString, ProxyInfo::class.java)
if (proxyInfo != null) {
OkHttpClient.setProxy(proxyInfo)

View File

@@ -29,7 +29,7 @@ import com.aurora.gplayapi.helpers.AuthValidator
import com.aurora.store.R
import com.aurora.store.data.model.AccountType
import com.aurora.store.data.model.Auth
import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.network.IProxyHttpClient
import com.aurora.store.util.Preferences
import com.aurora.store.util.Preferences.PREFERENCE_AUTH_DATA
import com.aurora.store.util.Preferences.PREFERENCE_DISPENSER_URLS
@@ -47,7 +47,8 @@ import javax.inject.Singleton
class AuthProvider @Inject constructor(
@ApplicationContext private val context: Context,
private val gson: Gson,
private val spoofProvider: SpoofProvider
private val spoofProvider: SpoofProvider,
private val httpClient: IProxyHttpClient
) {
private val TAG = AuthProvider::class.java.simpleName
@@ -104,7 +105,7 @@ class AuthProvider @Inject constructor(
return withContext(Dispatchers.IO) {
try {
AuthValidator(authData ?: return@withContext false)
.using(HttpClient.getPreferredClient(context))
.using(httpClient)
.isValid()
} catch (exception: Exception) {
false
@@ -145,10 +146,7 @@ class AuthProvider @Inject constructor(
private suspend fun buildAnonymousAuthData(): AuthData? {
return withContext(Dispatchers.IO) {
try {
val playResponse = HttpClient
.getPreferredClient(context)
.getAuth(dispenserURL!!)
val playResponse = httpClient.getAuth(dispenserURL!!)
val auth = gson.fromJson(String(playResponse.responseBytes), Auth::class.java)
return@withContext AuthHelper.build(
email = auth.email,

View File

@@ -25,7 +25,7 @@ import com.aurora.store.data.model.DownloadInfo
import com.aurora.store.data.model.DownloadStatus
import com.aurora.store.data.model.ProxyInfo
import com.aurora.store.data.model.Request
import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.network.IProxyHttpClient
import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.data.room.download.Download
import com.aurora.store.data.room.download.DownloadDao
@@ -67,6 +67,7 @@ class DownloadWorker @AssistedInject constructor(
private val gson: Gson,
private val appInstaller: AppInstaller,
private val authProvider: AuthProvider,
private val httpClient: IProxyHttpClient,
@Assisted private val appContext: Context,
@Assisted workerParams: WorkerParameters
) : CoroutineWorker(appContext, workerParams) {
@@ -113,7 +114,7 @@ class DownloadWorker @AssistedInject constructor(
// Purchase the app (free apps needs to be purchased too)
purchaseHelper = PurchaseHelper(authProvider.authData!!)
.using(HttpClient.getPreferredClient(appContext))
.using(httpClient)
notificationManager =
appContext.getSystemService(Service.NOTIFICATION_SERVICE) as NotificationManager

View File

@@ -11,7 +11,7 @@ import com.aurora.gplayapi.helpers.AppDetailsHelper
import com.aurora.store.AuroraApp
import com.aurora.store.BuildConfig
import com.aurora.store.data.model.SelfUpdate
import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.network.IProxyHttpClient
import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.data.providers.BlacklistProvider
import com.aurora.store.data.room.update.Update
@@ -30,6 +30,7 @@ class AppUtil @Inject constructor(
private val authProvider: AuthProvider,
private val updateDao: UpdateDao,
private val blacklistProvider: BlacklistProvider,
private val httpClient: IProxyHttpClient,
@ApplicationContext private val context: Context
) {
@@ -77,7 +78,7 @@ class AppUtil @Inject constructor(
): List<App> {
return withContext(Dispatchers.IO) {
val appDetailsHelper = AppDetailsHelper(tmpAuthData?: authProvider.authData!!)
.using(HttpClient.getPreferredClient(context))
.using(httpClient)
(packageInfoMap ?: PackageUtil.getPackageInfoMap(context)).keys.let { packages ->
val filtersPackages = packages.filter { !blacklistProvider.isBlacklisted(it) }
@@ -103,8 +104,7 @@ class AppUtil @Inject constructor(
}
try {
val response =
HttpClient.getPreferredClient(context).get(Constants.UPDATE_URL, mapOf())
val response = httpClient.get(Constants.UPDATE_URL, mapOf())
val selfUpdate =
gson.fromJson(String(response.responseBytes), SelfUpdate::class.java)

View File

@@ -26,7 +26,7 @@ import androidx.lifecycle.viewModelScope
import com.aurora.extensions.isApp
import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.helpers.AppDetailsHelper
import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.network.IProxyHttpClient
import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.data.providers.BlacklistProvider
import dagger.hilt.android.lifecycle.HiltViewModel
@@ -44,10 +44,11 @@ import javax.inject.Inject
class BlacklistViewModel @Inject constructor(
val blacklistProvider: BlacklistProvider,
@ApplicationContext private val context: Context,
private val httpClient: IProxyHttpClient,
authProvider: AuthProvider
) : ViewModel() {
private val appDetailsHelper = AppDetailsHelper(authProvider.authData!!)
.using(HttpClient.getPreferredClient(context))
.using(httpClient)
private val _blacklistedApps = MutableStateFlow<List<App>?>(null)
val blackListedApps = _blacklistedApps.asStateFlow()

View File

@@ -36,7 +36,7 @@ import com.aurora.store.data.event.AuthEvent
import com.aurora.store.data.model.AccountType
import com.aurora.store.data.model.Auth
import com.aurora.store.data.model.AuthState
import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.network.IProxyHttpClient
import com.aurora.store.data.providers.AccountProvider
import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.data.work.UpdateWorker
@@ -60,7 +60,8 @@ import javax.inject.Inject
class AuthViewModel @Inject constructor(
val authProvider: AuthProvider,
@ApplicationContext private val context: Context,
private val gson: Gson
private val gson: Gson,
private val httpClient: IProxyHttpClient
) : ViewModel() {
private val TAG = AuthViewModel::class.java.simpleName
@@ -104,10 +105,7 @@ class AuthViewModel @Inject constructor(
liveData.postValue(AuthState.Fetching)
viewModelScope.launch(Dispatchers.IO) {
try {
val playResponse = HttpClient
.getPreferredClient(context)
.getAuth(authProvider.dispenserURL!!)
val playResponse = httpClient.getAuth(authProvider.dispenserURL!!)
if (playResponse.isSuccessful) {
val tmpAuthData = gson.fromJson(
String(playResponse.responseBytes),

View File

@@ -27,7 +27,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.aurora.gplayapi.data.models.StreamCluster
import com.aurora.gplayapi.helpers.ExpandedBrowseHelper
import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.network.IProxyHttpClient
import com.aurora.store.data.providers.AuthProvider
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
@@ -40,13 +40,14 @@ import javax.inject.Inject
@SuppressLint("StaticFieldLeak") // false positive, see https://github.com/google/dagger/issues/3253
class ExpandedStreamBrowseViewModel @Inject constructor(
@ApplicationContext private val context: Context,
private val authProvider: AuthProvider
private val authProvider: AuthProvider,
private val httpClient: IProxyHttpClient
) : ViewModel() {
private val TAG = ExpandedStreamBrowseViewModel::class.java.simpleName
private val streamHelper: ExpandedBrowseHelper = ExpandedBrowseHelper(authProvider.authData!!)
.using(HttpClient.getPreferredClient(context))
.using(httpClient)
val liveData: MutableLiveData<StreamCluster> = MutableLiveData()
var streamCluster: StreamCluster = StreamCluster()

View File

@@ -28,7 +28,7 @@ import androidx.lifecycle.viewModelScope
import com.aurora.gplayapi.data.models.StreamCluster
import com.aurora.gplayapi.helpers.contracts.StreamContract
import com.aurora.gplayapi.helpers.web.WebStreamHelper
import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.network.IProxyHttpClient
import com.aurora.store.data.providers.AuthProvider
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
@@ -41,13 +41,14 @@ import javax.inject.Inject
@SuppressLint("StaticFieldLeak") // false positive, see https://github.com/google/dagger/issues/3253
class StreamBrowseViewModel @Inject constructor(
@ApplicationContext private val context: Context,
private val authProvider: AuthProvider
private val authProvider: AuthProvider,
private val httpClient: IProxyHttpClient
) : ViewModel() {
private val TAG = StreamBrowseViewModel::class.java.simpleName
private val streamHelper: StreamContract = WebStreamHelper()
.using(HttpClient.getPreferredClient(context))
.using(httpClient)
val liveData: MutableLiveData<StreamCluster> = MutableLiveData()

View File

@@ -30,7 +30,7 @@ import com.aurora.gplayapi.helpers.CategoryHelper
import com.aurora.gplayapi.helpers.contracts.CategoryContract
import com.aurora.store.CategoryStash
import com.aurora.store.data.model.ViewState
import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.network.IProxyHttpClient
import com.aurora.store.data.providers.AuthProvider
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
@@ -42,12 +42,13 @@ import javax.inject.Inject
@SuppressLint("StaticFieldLeak") // false positive, see https://github.com/google/dagger/issues/3253
class CategoryViewModel @Inject constructor(
@ApplicationContext private val context: Context,
private val authProvider: AuthProvider
private val authProvider: AuthProvider,
private val httpClient: IProxyHttpClient
) : ViewModel() {
private val TAG = CategoryViewModel::class.java.simpleName
private val categoryHelper: CategoryHelper = CategoryHelper(authProvider.authData!!)
.using(HttpClient.getPreferredClient(context))
.using(httpClient)
private var stash: CategoryStash = mutableMapOf(
Category.Type.APPLICATION to emptyList(),

View File

@@ -12,7 +12,7 @@ import com.aurora.gplayapi.helpers.ReviewsHelper
import com.aurora.gplayapi.helpers.web.WebDataSafetyHelper
import com.aurora.store.data.model.ExodusReport
import com.aurora.store.data.model.Report
import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.network.IProxyHttpClient
import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.data.room.favourites.Favourite
import com.aurora.store.data.room.favourites.FavouriteDao
@@ -36,7 +36,8 @@ class AppDetailsViewModel @Inject constructor(
@ApplicationContext private val context: Context,
private val downloadWorkerUtil: DownloadWorkerUtil,
private val authProvider: AuthProvider,
private val favouriteDao: FavouriteDao
private val favouriteDao: FavouriteDao,
private val httpClient: IProxyHttpClient
) : ViewModel() {
private val TAG = AppDetailsViewModel::class.java.simpleName
@@ -44,7 +45,6 @@ class AppDetailsViewModel @Inject constructor(
private val exodusBaseUrl = "https://reports.exodus-privacy.eu.org/api/search/"
private val exodusApiKey = "Token bbe6ebae4ad45a9cbacb17d69739799b8df2c7ae"
private val httpClient = HttpClient.getPreferredClient(context)
private val appDetailsHelper = AppDetailsHelper(authProvider.authData!!).using(httpClient)
private val reviewsHelper = ReviewsHelper(authProvider.authData!!).using(httpClient)

View File

@@ -31,7 +31,7 @@ import com.aurora.gplayapi.helpers.StreamHelper
import com.aurora.gplayapi.helpers.contracts.StreamContract
import com.aurora.store.AppStreamStash
import com.aurora.store.data.model.ViewState
import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.network.IProxyHttpClient
import com.aurora.store.data.providers.AuthProvider
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
@@ -43,13 +43,14 @@ import javax.inject.Inject
@HiltViewModel
class DetailsClusterViewModel @Inject constructor(
@ApplicationContext private val context: Context,
authProvider: AuthProvider
authProvider: AuthProvider,
private val httpClient: IProxyHttpClient
) : ViewModel() {
private val TAG = DetailsClusterViewModel::class.java.simpleName
private var appDetailsHelper = AppDetailsHelper(authProvider.authData!!)
.using(HttpClient.getPreferredClient(context))
.using(httpClient)
private var streamHelper = StreamHelper(authProvider.authData!!)

View File

@@ -6,7 +6,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.helpers.AppDetailsHelper
import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.network.IProxyHttpClient
import com.aurora.store.data.providers.AuthProvider
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
@@ -19,13 +19,14 @@ import javax.inject.Inject
@HiltViewModel
class DetailsMoreViewModel @Inject constructor(
@ApplicationContext private val context: Context,
private val authProvider: AuthProvider
private val authProvider: AuthProvider,
private val httpClient: IProxyHttpClient
) : ViewModel() {
private val TAG = DetailsMoreViewModel::class.java.simpleName
private val appDetailsHelper = AppDetailsHelper(authProvider.authData!!)
.using(HttpClient.getPreferredClient(context))
.using(httpClient)
private val dependantAppsStash = mutableMapOf<String, List<App>>()
private val _dependentApps = MutableSharedFlow<List<App>>()

View File

@@ -32,7 +32,7 @@ import com.aurora.gplayapi.helpers.AppDetailsHelper
import com.aurora.gplayapi.helpers.StreamHelper
import com.aurora.gplayapi.helpers.contracts.StreamContract
import com.aurora.store.data.model.ViewState
import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.network.IProxyHttpClient
import com.aurora.store.data.providers.AuthProvider
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
@@ -45,13 +45,14 @@ import javax.inject.Inject
@SuppressLint("StaticFieldLeak") // false positive, see https://github.com/google/dagger/issues/3253
class DevProfileViewModel @Inject constructor(
@ApplicationContext private val context: Context,
private val authProvider: AuthProvider
private val authProvider: AuthProvider,
private val httpClient: IProxyHttpClient
) : ViewModel() {
private val TAG = DevProfileViewModel::class.java.simpleName
private var appDetailsHelper = AppDetailsHelper(authProvider.authData!!)
.using(HttpClient.getPreferredClient(context))
.using(httpClient)
private var streamHelper = StreamHelper(authProvider.authData!!)
val liveData: MutableLiveData<ViewState> = MutableLiveData()

View File

@@ -31,7 +31,7 @@ import com.aurora.gplayapi.helpers.contracts.StreamContract
import com.aurora.gplayapi.helpers.web.WebStreamHelper
import com.aurora.store.HomeStash
import com.aurora.store.data.model.ViewState
import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.network.IProxyHttpClient
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers
@@ -42,13 +42,14 @@ import javax.inject.Inject
@HiltViewModel
@SuppressLint("StaticFieldLeak") // false positive, see https://github.com/google/dagger/issues/3253
class StreamViewModel @Inject constructor(
@ApplicationContext private val context: Context
@ApplicationContext private val context: Context,
private val httpClient: IProxyHttpClient
) : ViewModel() {
private val TAG = StreamViewModel::class.java.simpleName
private var webStreamHelper = WebStreamHelper()
.using(HttpClient.getPreferredClient(context))
.using(httpClient)
val liveData: MutableLiveData<ViewState> = MutableLiveData()

View File

@@ -27,7 +27,7 @@ import androidx.lifecycle.viewModelScope
import com.aurora.gplayapi.data.models.Review
import com.aurora.gplayapi.data.models.ReviewCluster
import com.aurora.gplayapi.helpers.ReviewsHelper
import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.network.IProxyHttpClient
import com.aurora.store.data.providers.AuthProvider
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
@@ -40,11 +40,12 @@ import javax.inject.Inject
@SuppressLint("StaticFieldLeak") // false positive, see https://github.com/google/dagger/issues/3253
class ReviewViewModel @Inject constructor(
@ApplicationContext private val context: Context,
private val authProvider: AuthProvider
private val authProvider: AuthProvider,
private val httpClient: IProxyHttpClient
) : ViewModel() {
var reviewsHelper: ReviewsHelper = ReviewsHelper(authProvider.authData!!)
.using(HttpClient.getPreferredClient(context))
.using(httpClient)
val liveData: MutableLiveData<ReviewCluster> = MutableLiveData()

View File

@@ -30,7 +30,7 @@ import com.aurora.gplayapi.data.models.SearchBundle
import com.aurora.gplayapi.helpers.SearchHelper
import com.aurora.gplayapi.helpers.contracts.SearchContract
import com.aurora.gplayapi.helpers.web.WebSearchHelper
import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.network.IProxyHttpClient
import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.data.providers.FilterProvider
import dagger.hilt.android.lifecycle.HiltViewModel
@@ -45,14 +45,15 @@ import javax.inject.Inject
class SearchResultViewModel @Inject constructor(
val filterProvider: FilterProvider,
@ApplicationContext private val context: Context,
private val authProvider: AuthProvider
private val authProvider: AuthProvider,
private val httpClient: IProxyHttpClient
) : ViewModel() {
private val TAG = SearchResultViewModel::class.java.simpleName
private val webSearchHelper: WebSearchHelper = WebSearchHelper()
private val searchHelper: SearchHelper = SearchHelper(authProvider.authData!!)
.using(HttpClient.getPreferredClient(context))
.using(httpClient)
val liveData: MutableLiveData<SearchBundle> = MutableLiveData()

View File

@@ -28,7 +28,7 @@ import com.aurora.gplayapi.SearchSuggestEntry
import com.aurora.gplayapi.helpers.SearchHelper
import com.aurora.gplayapi.helpers.contracts.SearchContract
import com.aurora.gplayapi.helpers.web.WebSearchHelper
import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.network.IProxyHttpClient
import com.aurora.store.data.providers.AuthProvider
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
@@ -40,12 +40,13 @@ import javax.inject.Inject
@SuppressLint("StaticFieldLeak") // false positive, see https://github.com/google/dagger/issues/3253
class SearchSuggestionViewModel @Inject constructor(
@ApplicationContext private val context: Context,
private val authProvider: AuthProvider
private val authProvider: AuthProvider,
private val httpClient: IProxyHttpClient
) : ViewModel() {
private val webSearchHelper: WebSearchHelper = WebSearchHelper()
private val searchHelper: SearchHelper = SearchHelper(authProvider.authData!!)
.using(HttpClient.getPreferredClient(context))
.using(httpClient)
val liveSearchSuggestions: MutableLiveData<List<SearchSuggestEntry>> = MutableLiveData()

View File

@@ -31,7 +31,7 @@ import com.aurora.gplayapi.helpers.contracts.CategoryStreamContract
import com.aurora.gplayapi.helpers.contracts.StreamContract
import com.aurora.gplayapi.helpers.web.WebCategoryStreamHelper
import com.aurora.store.data.model.ViewState
import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.network.IProxyHttpClient
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers
@@ -42,13 +42,14 @@ import javax.inject.Inject
@HiltViewModel
@SuppressLint("StaticFieldLeak") // false positive, see https://github.com/google/dagger/issues/3253
class CategoryStreamViewModel @Inject constructor(
@ApplicationContext private val context: Context
@ApplicationContext private val context: Context,
private val httpClient: IProxyHttpClient
) : ViewModel() {
private val TAG = CategoryStreamViewModel::class.java.simpleName
private var webCategoryStreamHelper = WebCategoryStreamHelper()
.using(HttpClient.getPreferredClient(context))
.using(httpClient)
val liveData: MutableLiveData<ViewState> = MutableLiveData()

View File

@@ -29,7 +29,7 @@ import com.aurora.gplayapi.helpers.contracts.TopChartsContract
import com.aurora.gplayapi.helpers.web.WebTopChartsHelper
import com.aurora.store.TopChartStash
import com.aurora.store.data.model.ViewState
import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.network.IProxyHttpClient
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers
@@ -39,11 +39,13 @@ import javax.inject.Inject
@HiltViewModel
@SuppressLint("StaticFieldLeak") // false positive, see https://github.com/google/dagger/issues/3253
class TopChartViewModel @Inject constructor(@ApplicationContext private val context: Context) :
ViewModel() {
class TopChartViewModel @Inject constructor(
@ApplicationContext private val context: Context,
private val httpClient: IProxyHttpClient
): ViewModel() {
private val webTopChartsHelper: TopChartsContract = WebTopChartsHelper()
.using(HttpClient.getPreferredClient(context))
.using(httpClient)
private var stash: TopChartStash = mutableMapOf()