diff --git a/app/src/main/java/foundation/e/apps/MainActivity.kt b/app/src/main/java/foundation/e/apps/MainActivity.kt index ae7d1a5e6a6805b2de69683a88871c777ed488b0..5b94937da6fd831fd324523609f4c110a596b53b 100644 --- a/app/src/main/java/foundation/e/apps/MainActivity.kt +++ b/app/src/main/java/foundation/e/apps/MainActivity.kt @@ -40,7 +40,7 @@ import com.google.android.material.snackbar.Snackbar import dagger.hilt.android.AndroidEntryPoint import foundation.e.apps.data.fusedDownload.models.FusedDownload import foundation.e.apps.data.login.AuthObject -import foundation.e.apps.data.login.LoginSourceGPlay +import foundation.e.apps.data.login.PlayStoreAuthenticator import foundation.e.apps.data.login.LoginViewModel import foundation.e.apps.data.login.exceptions.GPlayValidationException import foundation.e.apps.data.preference.PreferenceManagerModule @@ -308,7 +308,7 @@ class MainActivity : AppCompatActivity() { binding.sessionErrorLayout.visibility = View.VISIBLE binding.retrySessionButton.setOnClickListener { binding.sessionErrorLayout.visibility = View.GONE - loginViewModel.startLoginFlow(listOf(LoginSourceGPlay::class.java.simpleName)) + loginViewModel.startLoginFlow(listOf(PlayStoreAuthenticator::class.java.simpleName)) } } } diff --git a/app/src/main/java/foundation/e/apps/data/NetworkHandler.kt b/app/src/main/java/foundation/e/apps/data/NetworkHandler.kt index 78985de5fb13bfdcf071fe6dcce939a5abcb6ebe..fd736daedb59396f9709d241f77be2cfd05608d5 100644 --- a/app/src/main/java/foundation/e/apps/data/NetworkHandler.kt +++ b/app/src/main/java/foundation/e/apps/data/NetworkHandler.kt @@ -18,8 +18,8 @@ package foundation.e.apps.data -import foundation.e.apps.data.gplay.utils.GPlayHttpClient -import foundation.e.apps.data.gplay.utils.GplayHttpRequestException +import foundation.e.apps.data.playstore.utils.GPlayHttpClient +import foundation.e.apps.data.playstore.utils.GplayHttpRequestException import foundation.e.apps.data.login.exceptions.GPlayException import java.net.SocketTimeoutException diff --git a/app/src/main/java/foundation/e/apps/data/BaseStoreRepository.kt b/app/src/main/java/foundation/e/apps/data/StoreRepository.kt similarity index 96% rename from app/src/main/java/foundation/e/apps/data/BaseStoreRepository.kt rename to app/src/main/java/foundation/e/apps/data/StoreRepository.kt index 722bfb177011d934d28864f3be0c7defd86353a0..0f8e1e426c64c77e188da2034144dd184235a017 100644 --- a/app/src/main/java/foundation/e/apps/data/BaseStoreRepository.kt +++ b/app/src/main/java/foundation/e/apps/data/StoreRepository.kt @@ -18,7 +18,7 @@ package foundation.e.apps.data -interface BaseStoreRepository { +interface StoreRepository { suspend fun getHomeScreenData(): Any suspend fun getAppDetails(packageNameOrId: String): Any? } diff --git a/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkRepository.kt b/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkRepository.kt index 618e412035c64c37eb7f3bea81e04e2a4aed2955..d4ae420c96fb2105ad01b073926ef37530fee575 100644 --- a/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkRepository.kt +++ b/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkRepository.kt @@ -18,7 +18,7 @@ package foundation.e.apps.data.cleanapk.repositories -import foundation.e.apps.data.BaseStoreRepository +import foundation.e.apps.data.StoreRepository import foundation.e.apps.data.cleanapk.data.categories.Categories import foundation.e.apps.data.cleanapk.data.search.Search import retrofit2.Response @@ -26,7 +26,7 @@ import retrofit2.Response const val NUMBER_OF_ITEMS = 20 const val NUMBER_OF_PAGES = 1 -interface CleanApkRepository : BaseStoreRepository { +interface CleanApkRepository : StoreRepository { suspend fun getSearchResult(query: String, searchBy: String? = null): Response suspend fun getAppsByCategory(category: String, paginationParameter: Any? = null): Response suspend fun getCategories(): Response diff --git a/app/src/main/java/foundation/e/apps/data/fused/FusedApiImpl.kt b/app/src/main/java/foundation/e/apps/data/fused/FusedApiImpl.kt index d992aa61d13330c5a147961598a0deefc1c61dcd..6d67932faf89781ef595615faae4847b31a77131 100644 --- a/app/src/main/java/foundation/e/apps/data/fused/FusedApiImpl.kt +++ b/app/src/main/java/foundation/e/apps/data/fused/FusedApiImpl.kt @@ -59,7 +59,7 @@ import foundation.e.apps.data.fused.data.Ratings import foundation.e.apps.data.fused.utils.CategoryType import foundation.e.apps.data.fused.utils.CategoryUtils import foundation.e.apps.data.fusedDownload.models.FusedDownload -import foundation.e.apps.data.gplay.GplayStoreRepository +import foundation.e.apps.data.playstore.PlayStoreRepository import foundation.e.apps.data.handleNetworkResult import foundation.e.apps.data.login.AuthObject import foundation.e.apps.data.preference.PreferenceManagerModule @@ -86,7 +86,7 @@ class FusedApiImpl @Inject constructor( private val pkgManagerModule: PkgManagerModule, private val pwaManagerModule: PWAManagerModule, private val preferenceManagerModule: PreferenceManagerModule, - @Named("gplayRepository") private val gplayRepository: GplayStoreRepository, + @Named("gplayRepository") private val gplayRepository: PlayStoreRepository, @Named("cleanApkAppsRepository") private val cleanApkAppsRepository: CleanApkRepository, @Named("cleanApkPWARepository") private val cleanApkPWARepository: CleanApkRepository, @ApplicationContext private val context: Context diff --git a/app/src/main/java/foundation/e/apps/data/login/LoginSourceRepository.kt b/app/src/main/java/foundation/e/apps/data/login/AuthenticatorRepository.kt similarity index 82% rename from app/src/main/java/foundation/e/apps/data/login/LoginSourceRepository.kt rename to app/src/main/java/foundation/e/apps/data/login/AuthenticatorRepository.kt index fea7939b6a31e8cbf2353b172add38ed9bac312b..2e4bc761d4b32ade786abb2498b934fb02cedcd4 100644 --- a/app/src/main/java/foundation/e/apps/data/login/LoginSourceRepository.kt +++ b/app/src/main/java/foundation/e/apps/data/login/AuthenticatorRepository.kt @@ -26,9 +26,9 @@ import javax.inject.Singleton @JvmSuppressWildcards @Singleton -class LoginSourceRepository @Inject constructor( +class AuthenticatorRepository @Inject constructor( private val loginCommon: LoginCommon, - private val sources: List, + private val authenticators: List, ) { var gplayAuth: AuthData? = null @@ -38,13 +38,13 @@ class LoginSourceRepository @Inject constructor( val authObjectsLocal = ArrayList() - for (source in sources) { - if (!source.isActive()) continue - if (source::class.java.simpleName in clearAuthTypes) { - source.clearSavedAuth() + for (authenticator in authenticators) { + if (!authenticator.isStoreActive()) continue + if (authenticator::class.java.simpleName in clearAuthTypes) { + authenticator.logout() } - val authObject = source.getAuthObject() + val authObject = authenticator.login() authObjectsLocal.add(authObject) if (authObject is AuthObject.GPlayAuth) { @@ -72,7 +72,7 @@ class LoginSourceRepository @Inject constructor( } suspend fun getValidatedAuthData(): ResultSupreme { - val authDataValidator = (sources.find { it is AuthDataValidator } as AuthDataValidator) + val authDataValidator = (authenticators.find { it is AuthDataValidator } as AuthDataValidator) val validateAuthData = authDataValidator.validateAuthData() this.gplayAuth = validateAuthData.data return validateAuthData diff --git a/app/src/main/java/foundation/e/apps/data/login/LoginSourceCleanApk.kt b/app/src/main/java/foundation/e/apps/data/login/CleanApkAuthenticator.kt similarity index 77% rename from app/src/main/java/foundation/e/apps/data/login/LoginSourceCleanApk.kt rename to app/src/main/java/foundation/e/apps/data/login/CleanApkAuthenticator.kt index a5f49569b99a62e1a9bcea1b506a42ddb09a78d1..d3879f586f72ad3bc0deb82588888d421acd4ef6 100644 --- a/app/src/main/java/foundation/e/apps/data/login/LoginSourceCleanApk.kt +++ b/app/src/main/java/foundation/e/apps/data/login/CleanApkAuthenticator.kt @@ -27,29 +27,29 @@ import javax.inject.Singleton * https://gitlab.e.foundation/e/backlog/-/issues/5680 */ @Singleton -class LoginSourceCleanApk @Inject constructor( - val loginDataStore: LoginDataStore, -) : LoginSourceInterface { +class CleanApkAuthenticator @Inject constructor( + val loginData: LoginData, +) : StoreAuthenticator { private val user: User - get() = loginDataStore.getUserType() + get() = loginData.getUserType() - override fun isActive(): Boolean { + override fun isStoreActive(): Boolean { if (user == User.UNAVAILABLE) { /* * UNAVAILABLE user means first login is not completed. */ return false } - return loginDataStore.isOpenSourceSelected() || loginDataStore.isPWASelected() + return loginData.isOpenSourceSelected() || loginData.isPWASelected() } - override suspend fun getAuthObject(): AuthObject.CleanApk { + override suspend fun login(): AuthObject.CleanApk { return AuthObject.CleanApk( ResultSupreme.Success(Unit), user, ) } - override suspend fun clearSavedAuth() {} + override suspend fun logout() {} } diff --git a/app/src/main/java/foundation/e/apps/data/login/LoginCommon.kt b/app/src/main/java/foundation/e/apps/data/login/LoginCommon.kt index cc38464e217caff6daac4c85b38fa194d8e58700..b041a29db6f07b62f8ce4d3818989ee053ed3adb 100644 --- a/app/src/main/java/foundation/e/apps/data/login/LoginCommon.kt +++ b/app/src/main/java/foundation/e/apps/data/login/LoginCommon.kt @@ -30,33 +30,33 @@ import javax.inject.Singleton */ @Singleton class LoginCommon @Inject constructor( - private val loginDataStore: LoginDataStore, + private val loginData: LoginData, ) { suspend fun saveUserType(user: User) { - loginDataStore.saveUserType(user) + loginData.saveUserType(user) } fun getUserType(): User { - return loginDataStore.getUserType() + return loginData.getUserType() } suspend fun saveGoogleLogin(email: String, oauth: String) { - loginDataStore.saveGoogleLogin(email, oauth) + loginData.saveGoogleLogin(email, oauth) } suspend fun setNoGoogleMode() { - loginDataStore.setSource(Constants.PREFERENCE_SHOW_FOSS, true) - loginDataStore.setSource(Constants.PREFERENCE_SHOW_PWA, true) - loginDataStore.setSource(Constants.PREFERENCE_SHOW_GPLAY, false) - loginDataStore.saveUserType(User.NO_GOOGLE) + loginData.setSource(Constants.PREFERENCE_SHOW_FOSS, true) + loginData.setSource(Constants.PREFERENCE_SHOW_PWA, true) + loginData.setSource(Constants.PREFERENCE_SHOW_GPLAY, false) + loginData.saveUserType(User.NO_GOOGLE) } suspend fun logout() { - loginDataStore.destroyCredentials() - loginDataStore.clearUserType() + loginData.destroyCredentials() + loginData.clearUserType() // reset app source preferences on logout. - loginDataStore.setSource(Constants.PREFERENCE_SHOW_FOSS, true) - loginDataStore.setSource(Constants.PREFERENCE_SHOW_PWA, true) - loginDataStore.setSource(Constants.PREFERENCE_SHOW_GPLAY, true) + loginData.setSource(Constants.PREFERENCE_SHOW_FOSS, true) + loginData.setSource(Constants.PREFERENCE_SHOW_PWA, true) + loginData.setSource(Constants.PREFERENCE_SHOW_GPLAY, true) } } diff --git a/app/src/main/java/foundation/e/apps/data/login/LoginDataStore.kt b/app/src/main/java/foundation/e/apps/data/login/LoginData.kt similarity index 93% rename from app/src/main/java/foundation/e/apps/data/login/LoginDataStore.kt rename to app/src/main/java/foundation/e/apps/data/login/LoginData.kt index 468cbc667fc4df06e96b5c2457ff6134179df1ae..c9da999b5d1647f58b547111adcb4d44ac0a91dd 100644 --- a/app/src/main/java/foundation/e/apps/data/login/LoginDataStore.kt +++ b/app/src/main/java/foundation/e/apps/data/login/LoginData.kt @@ -36,7 +36,7 @@ import javax.inject.Inject import javax.inject.Singleton @Singleton -class LoginDataStore @Inject constructor( +class LoginData @Inject constructor( @ApplicationContext private val context: Context, private val gson: Gson @@ -67,11 +67,11 @@ class LoginDataStore @Inject constructor( * If AasToken is not stored, user has to logout and login again. */ - val authData = context.dataStore.data.map { it[AUTHDATA] ?: "" } - val emailData = context.dataStore.data.map { it[EMAIL] ?: "" } - val aasToken = context.dataStore.data.map { it[AASTOKEN] ?: "" } - val oauthToken = context.dataStore.data.map { it[OAUTHTOKEN] ?: "" } - val userType = context.dataStore.data.map { it[USERTYPE] ?: "" } + private val authData = context.dataStore.data.map { it[AUTHDATA] ?: "" } + private val emailData = context.dataStore.data.map { it[EMAIL] ?: "" } + private val aasToken = context.dataStore.data.map { it[AASTOKEN] ?: "" } + private val oauthToken = context.dataStore.data.map { it[OAUTHTOKEN] ?: "" } + private val userType = context.dataStore.data.map { it[USERTYPE] ?: "" } // Setters diff --git a/app/src/main/java/foundation/e/apps/data/login/LoginViewModel.kt b/app/src/main/java/foundation/e/apps/data/login/LoginViewModel.kt index 659ed83187d1230832e038f1e9cceca5a41bf1ed..fba4285e03eb309b27c1af55e8199682e0b560dd 100644 --- a/app/src/main/java/foundation/e/apps/data/login/LoginViewModel.kt +++ b/app/src/main/java/foundation/e/apps/data/login/LoginViewModel.kt @@ -33,7 +33,7 @@ import javax.inject.Inject */ @HiltViewModel class LoginViewModel @Inject constructor( - private val loginSourceRepository: LoginSourceRepository, + private val authenticatorRepository: AuthenticatorRepository, private val cache: Cache, ) : ViewModel() { @@ -54,7 +54,7 @@ class LoginViewModel @Inject constructor( */ fun startLoginFlow(clearList: List = listOf()) { viewModelScope.launch { - val authObjectsLocal = loginSourceRepository.getAuthObjects(clearList) + val authObjectsLocal = authenticatorRepository.getAuthObjects(clearList) authObjects.postValue(authObjectsLocal) } } @@ -66,7 +66,7 @@ class LoginViewModel @Inject constructor( */ fun initialAnonymousLogin(onUserSaved: () -> Unit) { viewModelScope.launch { - loginSourceRepository.saveUserType(User.ANONYMOUS) + authenticatorRepository.saveUserType(User.ANONYMOUS) onUserSaved() startLoginFlow() } @@ -80,8 +80,8 @@ class LoginViewModel @Inject constructor( */ fun initialGoogleLogin(email: String, oauthToken: String, onUserSaved: () -> Unit) { viewModelScope.launch { - loginSourceRepository.saveGoogleLogin(email, oauthToken) - loginSourceRepository.saveUserType(User.GOOGLE) + authenticatorRepository.saveGoogleLogin(email, oauthToken) + authenticatorRepository.saveUserType(User.GOOGLE) onUserSaved() startLoginFlow() } @@ -96,7 +96,7 @@ class LoginViewModel @Inject constructor( */ fun initialNoGoogleLogin(onUserSaved: () -> Unit) { viewModelScope.launch { - loginSourceRepository.setNoGoogleMode() + authenticatorRepository.setNoGoogleMode() onUserSaved() startLoginFlow() } @@ -131,7 +131,7 @@ class LoginViewModel @Inject constructor( fun logout() { viewModelScope.launch { cache.evictAll() - loginSourceRepository.logout() + authenticatorRepository.logout() authObjects.postValue(listOf()) } } diff --git a/app/src/main/java/foundation/e/apps/data/login/LoginSourceGPlay.kt b/app/src/main/java/foundation/e/apps/data/login/PlayStoreAuthenticator.kt similarity index 70% rename from app/src/main/java/foundation/e/apps/data/login/LoginSourceGPlay.kt rename to app/src/main/java/foundation/e/apps/data/login/PlayStoreAuthenticator.kt index d5cf5e45b584a4f5fdb3c294a2482007dc9bda92..0c89311e6044cc3347198ccbc2b096876fa3f36d 100644 --- a/app/src/main/java/foundation/e/apps/data/login/LoginSourceGPlay.kt +++ b/app/src/main/java/foundation/e/apps/data/login/PlayStoreAuthenticator.kt @@ -24,57 +24,57 @@ import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.enums.ResultStatus import foundation.e.apps.data.enums.User -import foundation.e.apps.data.login.api.GPlayApiFactory -import foundation.e.apps.data.login.api.GPlayLoginInterface -import foundation.e.apps.data.login.api.GoogleLoginApi -import foundation.e.apps.data.login.api.LoginApiRepository +import foundation.e.apps.data.login.api.PlayStoreLoginManagerFactory +import foundation.e.apps.data.login.api.PlayStoreLoginManager +import foundation.e.apps.data.login.api.GoogleLoginManager +import foundation.e.apps.data.login.api.PlayStoreLoginWrapper import timber.log.Timber import java.util.Locale import javax.inject.Inject import javax.inject.Singleton /** - * Class to get GPlay auth data. Call [getAuthObject] to get an already saved auth data + * Class to get GPlay auth data. Call [login] to get an already saved auth data * or to fetch a new one for first use. Handles auth validation internally. * * https://gitlab.e.foundation/e/backlog/-/issues/5680 */ @Singleton -class LoginSourceGPlay @Inject constructor( +class PlayStoreAuthenticator @Inject constructor( @ApplicationContext private val context: Context, private val gson: Gson, - private val loginDataStore: LoginDataStore, -) : LoginSourceInterface, AuthDataValidator { + private val loginData: LoginData, +) : StoreAuthenticator, AuthDataValidator { @Inject - lateinit var gPlayApiFactory: GPlayApiFactory + lateinit var loginManagerFactory: PlayStoreLoginManagerFactory private val user: User - get() = loginDataStore.getUserType() + get() = loginData.getUserType() - private val gPlayLoginInterface: GPlayLoginInterface - get() = gPlayApiFactory.getGPlayApi(user) + private val loginManager: PlayStoreLoginManager + get() = loginManagerFactory.createLoginManager(user) - private val loginApiRepository: LoginApiRepository - get() = LoginApiRepository(gPlayLoginInterface, user) + private val loginWrapper: PlayStoreLoginWrapper + get() = PlayStoreLoginWrapper(loginManager, user) private val locale: Locale get() = context.resources.configuration.locales[0] - override fun isActive(): Boolean { + override fun isStoreActive(): Boolean { if (user == User.UNAVAILABLE) { /* * UNAVAILABLE user means first login is not completed. */ return false } - return loginDataStore.isGplaySelected() + return loginData.isGplaySelected() } /** * Main entry point to get GPlay auth data. */ - override suspend fun getAuthObject(): AuthObject.GPlayAuth { + override suspend fun login(): AuthObject.GPlayAuth { val savedAuth = getSavedAuthData() val authData = ( @@ -102,8 +102,8 @@ class LoginSourceGPlay @Inject constructor( return AuthObject.GPlayAuth(result, user) } - override suspend fun clearSavedAuth() { - loginDataStore.clearAuthData() + override suspend fun logout() { + loginData.clearAuthData() } /** @@ -111,7 +111,7 @@ class LoginSourceGPlay @Inject constructor( * Returns null if nothing is saved. */ private fun getSavedAuthData(): AuthData? { - val authJson = loginDataStore.getAuthData() + val authJson = loginData.getAuthData() return if (authJson.isBlank()) null else try { gson.fromJson(authJson, AuthData::class.java) @@ -122,22 +122,16 @@ class LoginSourceGPlay @Inject constructor( } private suspend fun saveAuthData(authData: AuthData) { - loginDataStore.saveAuthData(authData) + loginData.saveAuthData(authData) } /** * Generate new AuthData based on the user type. */ private suspend fun generateAuthData(): ResultSupreme { - return when (loginDataStore.getUserType()) { - User.ANONYMOUS -> getAuthData() - User.GOOGLE -> { - getAuthData( - loginDataStore.getEmail(), - loginDataStore.getOAuthToken(), - loginDataStore.getAASToken() - ) - } + return when (loginData.getUserType()) { + User.ANONYMOUS -> getAuthDataAnonymously() + User.GOOGLE -> getAuthDataWithGoogleAccount() else -> ResultSupreme.Error("User type not ANONYMOUS or GOOGLE") } } @@ -151,38 +145,31 @@ class LoginSourceGPlay @Inject constructor( return gson.fromJson(localAuthDataJson, AuthData::class.java) } - /** - * Get AuthData for ANONYMOUS mode. - */ - private suspend fun getAuthData(): ResultSupreme { - return loginApiRepository.fetchAuthData("", "", locale).run { + private suspend fun getAuthDataAnonymously(): ResultSupreme { + return loginWrapper.login(locale).run { if (isSuccess()) ResultSupreme.Success(formatAuthData(this.data!!)) else this } } - /** - * Get AuthData for GOOGLE login mode. - */ - private suspend fun getAuthData( - email: String, - oauthToken: String, - aasToken: String, - ): ResultSupreme { + private suspend fun getAuthDataWithGoogleAccount(): ResultSupreme { + val email = loginData.getEmail() + val oauthToken = loginData.getOAuthToken() + val aasToken = loginData.getAASToken() /* * If aasToken is not blank, means it was stored successfully from a previous Google login. * Use it to fetch auth data. */ if (aasToken.isNotBlank()) { - return loginApiRepository.fetchAuthData(email, aasToken, locale) + return loginWrapper.login(locale) } /* * If aasToken is not yet saved / made, fetch it from email and oauthToken. */ - val aasTokenResponse = loginApiRepository.getAasToken( - gPlayLoginInterface as GoogleLoginApi, + val aasTokenResponse = loginWrapper.getAasToken( + loginManager as GoogleLoginManager, email, oauthToken ) @@ -205,8 +192,8 @@ class LoginSourceGPlay @Inject constructor( /* * Finally save the aasToken and create auth data. */ - loginDataStore.saveAasToken(aasTokenFetched) - return loginApiRepository.fetchAuthData(email, aasTokenFetched, locale).run { + loginData.saveAasToken(aasTokenFetched) + return loginWrapper.login(locale).run { if (isSuccess()) ResultSupreme.Success(formatAuthData(this.data!!)) else this } @@ -228,5 +215,5 @@ class LoginSourceGPlay @Inject constructor( } private suspend fun isAuthDataValid(savedAuth: AuthData?) = - savedAuth != null && loginApiRepository.login(savedAuth).exception == null + savedAuth != null && loginWrapper.validate(savedAuth).exception == null } diff --git a/app/src/main/java/foundation/e/apps/data/login/LoginSourceInterface.kt b/app/src/main/java/foundation/e/apps/data/login/StoreAuthenticator.kt similarity index 68% rename from app/src/main/java/foundation/e/apps/data/login/LoginSourceInterface.kt rename to app/src/main/java/foundation/e/apps/data/login/StoreAuthenticator.kt index c4cc34ce1867cbfc8fe69b5a91bd485f9a383710..bc0d18106951b98abf0728abc28e39ba51842764 100644 --- a/app/src/main/java/foundation/e/apps/data/login/LoginSourceInterface.kt +++ b/app/src/main/java/foundation/e/apps/data/login/StoreAuthenticator.kt @@ -18,13 +18,10 @@ package foundation.e.apps.data.login /** - * Interface that defines what methods a login source must define. - * Login sources (can also be called - data sources): Google Play, CleanApk. - * - * https://gitlab.e.foundation/e/backlog/-/issues/5680 + * Store (Google Play Store, Clean Apk) authenticator. */ -interface LoginSourceInterface { - suspend fun getAuthObject(): AuthObject - suspend fun clearSavedAuth() - fun isActive(): Boolean +interface StoreAuthenticator { + suspend fun login(): AuthObject + suspend fun logout() + fun isStoreActive(): Boolean } diff --git a/app/src/main/java/foundation/e/apps/data/login/api/AnonymousLoginApi.kt b/app/src/main/java/foundation/e/apps/data/login/api/AnonymousLoginManager.kt similarity index 85% rename from app/src/main/java/foundation/e/apps/data/login/api/AnonymousLoginApi.kt rename to app/src/main/java/foundation/e/apps/data/login/api/AnonymousLoginManager.kt index edd0d15a23f00ff10b1d1fe24f5f5ef664a0c287..52b600c43f575862454824bd042c01f21343f685 100644 --- a/app/src/main/java/foundation/e/apps/data/login/api/AnonymousLoginApi.kt +++ b/app/src/main/java/foundation/e/apps/data/login/api/AnonymousLoginManager.kt @@ -20,26 +20,26 @@ package foundation.e.apps.data.login.api import com.aurora.gplayapi.data.models.AuthData import com.aurora.gplayapi.data.models.PlayResponse import com.google.gson.Gson -import foundation.e.apps.data.gplay.utils.CustomAuthValidator -import foundation.e.apps.data.gplay.utils.GPlayHttpClient +import foundation.e.apps.data.playstore.utils.CustomAuthValidator +import foundation.e.apps.data.playstore.utils.GPlayHttpClient import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import java.util.Properties -class AnonymousLoginApi( +class AnonymousLoginManager( private val gPlayHttpClient: GPlayHttpClient, private val nativeDeviceProperty: Properties, private val gson: Gson, -) : GPlayLoginInterface { +) : PlayStoreLoginManager { private val tokenUrl: String = "https://eu.gtoken.ecloud.global" /** - * Fetches AuthData for Anonymous login. - * @param email Keep it blank (""). - * @param aasToken Keep it blank (""). + * Log anonymously a user + * + * @return authData: authentication data */ - override suspend fun fetchAuthData(email: String, aasToken: String): AuthData? { + override suspend fun login(): AuthData? { var authData: AuthData? = null withContext(Dispatchers.IO) { val response = @@ -68,7 +68,7 @@ class AnonymousLoginApi( * Check if an AuthData is valid. Returns a [PlayResponse]. * Check [PlayResponse.isSuccessful] to see if the validation was successful. */ - override suspend fun login(authData: AuthData): PlayResponse { + override suspend fun validate(authData: AuthData): PlayResponse { var result = PlayResponse() withContext(Dispatchers.IO) { try { diff --git a/app/src/main/java/foundation/e/apps/data/login/api/GoogleLoginApi.kt b/app/src/main/java/foundation/e/apps/data/login/api/GoogleLoginManager.kt similarity index 80% rename from app/src/main/java/foundation/e/apps/data/login/api/GoogleLoginApi.kt rename to app/src/main/java/foundation/e/apps/data/login/api/GoogleLoginManager.kt index 4331d473a9f8ebe7bc170c2119ab7b9c4a882a69..c0d5eff3c09a2d7e2b6dcb27f0311f59b0feae23 100644 --- a/app/src/main/java/foundation/e/apps/data/login/api/GoogleLoginApi.kt +++ b/app/src/main/java/foundation/e/apps/data/login/api/GoogleLoginManager.kt @@ -20,23 +20,25 @@ package foundation.e.apps.data.login.api import com.aurora.gplayapi.data.models.AuthData import com.aurora.gplayapi.data.models.PlayResponse import com.aurora.gplayapi.helpers.AuthHelper -import foundation.e.apps.data.gplay.utils.AC2DMTask -import foundation.e.apps.data.gplay.utils.CustomAuthValidator -import foundation.e.apps.data.gplay.utils.GPlayHttpClient +import foundation.e.apps.data.playstore.utils.AC2DMTask +import foundation.e.apps.data.playstore.utils.CustomAuthValidator +import foundation.e.apps.data.playstore.utils.GPlayHttpClient +import foundation.e.apps.data.login.LoginData import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import java.util.Properties -class GoogleLoginApi( +class GoogleLoginManager( private val gPlayHttpClient: GPlayHttpClient, private val nativeDeviceProperty: Properties, private val aC2DMTask: AC2DMTask, -) : GPlayLoginInterface { + private val loginData: LoginData +) : PlayStoreLoginManager { /** * Get PlayResponse for AC2DM Map. This allows us to get an error message too. * - * An aasToken is extracted from this map. This is passed to [fetchAuthData] + * An aasToken is extracted from this map. This is passed to [login] * to generate AuthData. This token is very important as it cannot be regenerated, * hence it must be saved for future use. * @@ -51,10 +53,14 @@ class GoogleLoginApi( } /** - * Convert email and AASToken to AuthData class. - * Issue: https://gitlab.e.foundation/e/backlog/-/issues/5680 + * Login + * + * @return authData: authentication data */ - override suspend fun fetchAuthData(email: String, aasToken: String): AuthData? { + override suspend fun login(): AuthData? { + val email = loginData.getEmail() + val aasToken = loginData.getAASToken() + var authData: AuthData? withContext(Dispatchers.IO) { authData = AuthHelper.build(email, aasToken, nativeDeviceProperty) @@ -66,7 +72,7 @@ class GoogleLoginApi( * Check if an AuthData is valid. Returns a [PlayResponse]. * Check [PlayResponse.isSuccessful] to see if the validation was successful. */ - override suspend fun login(authData: AuthData): PlayResponse { + override suspend fun validate(authData: AuthData): PlayResponse { var result = PlayResponse() withContext(Dispatchers.IO) { try { diff --git a/app/src/main/java/foundation/e/apps/data/login/api/GPlayLoginInterface.kt b/app/src/main/java/foundation/e/apps/data/login/api/PlayStoreLoginManager.kt similarity index 83% rename from app/src/main/java/foundation/e/apps/data/login/api/GPlayLoginInterface.kt rename to app/src/main/java/foundation/e/apps/data/login/api/PlayStoreLoginManager.kt index d1159caae382bfa0a1c9687525aa97b1d39d5ad8..12fad6b6d7ea8b93204fcabb77d82544dcbf26ad 100644 --- a/app/src/main/java/foundation/e/apps/data/login/api/GPlayLoginInterface.kt +++ b/app/src/main/java/foundation/e/apps/data/login/api/PlayStoreLoginManager.kt @@ -20,7 +20,7 @@ package foundation.e.apps.data.login.api import com.aurora.gplayapi.data.models.AuthData import com.aurora.gplayapi.data.models.PlayResponse -interface GPlayLoginInterface { - suspend fun login(authData: AuthData): PlayResponse - suspend fun fetchAuthData(email: String, aasToken: String): AuthData? +interface PlayStoreLoginManager { + suspend fun login(): AuthData? + suspend fun validate(authData: AuthData): PlayResponse } diff --git a/app/src/main/java/foundation/e/apps/data/login/api/GPlayApiFactory.kt b/app/src/main/java/foundation/e/apps/data/login/api/PlayStoreLoginManagerFactory.kt similarity index 68% rename from app/src/main/java/foundation/e/apps/data/login/api/GPlayApiFactory.kt rename to app/src/main/java/foundation/e/apps/data/login/api/PlayStoreLoginManagerFactory.kt index 4b5a71052da94b45addaea68a417c491b8776ebe..784532df940cbe9f4ec3daf96d71e0aef418730b 100644 --- a/app/src/main/java/foundation/e/apps/data/login/api/GPlayApiFactory.kt +++ b/app/src/main/java/foundation/e/apps/data/login/api/PlayStoreLoginManagerFactory.kt @@ -19,24 +19,26 @@ package foundation.e.apps.data.login.api import com.google.gson.Gson import foundation.e.apps.data.enums.User -import foundation.e.apps.data.gplay.utils.AC2DMTask -import foundation.e.apps.data.gplay.utils.GPlayHttpClient +import foundation.e.apps.data.playstore.utils.AC2DMTask +import foundation.e.apps.data.playstore.utils.GPlayHttpClient +import foundation.e.apps.data.login.LoginData import java.util.Properties import javax.inject.Inject import javax.inject.Singleton @Singleton -class GPlayApiFactory @Inject constructor( +class PlayStoreLoginManagerFactory @Inject constructor( private val gPlayHttpClient: GPlayHttpClient, private val nativeDeviceProperty: Properties, private val aC2DMTask: AC2DMTask, private val gson: Gson, + private val loginData: LoginData ) { - fun getGPlayApi(user: User): GPlayLoginInterface { + fun createLoginManager(user: User): PlayStoreLoginManager { return when (user) { - User.GOOGLE -> GoogleLoginApi(gPlayHttpClient, nativeDeviceProperty, aC2DMTask) - else -> AnonymousLoginApi(gPlayHttpClient, nativeDeviceProperty, gson) + User.GOOGLE -> GoogleLoginManager(gPlayHttpClient, nativeDeviceProperty, aC2DMTask, loginData) + else -> AnonymousLoginManager(gPlayHttpClient, nativeDeviceProperty, gson) } } } diff --git a/app/src/main/java/foundation/e/apps/data/login/api/LoginApiRepository.kt b/app/src/main/java/foundation/e/apps/data/login/api/PlayStoreLoginWrapper.kt similarity index 76% rename from app/src/main/java/foundation/e/apps/data/login/api/LoginApiRepository.kt rename to app/src/main/java/foundation/e/apps/data/login/api/PlayStoreLoginWrapper.kt index b2fbd026c9919c4b62a0e97c0736fa367b786048..ddb83635757dbae46b7e589db3af071e61c84e8a 100644 --- a/app/src/main/java/foundation/e/apps/data/login/api/LoginApiRepository.kt +++ b/app/src/main/java/foundation/e/apps/data/login/api/PlayStoreLoginWrapper.kt @@ -21,37 +21,31 @@ import com.aurora.gplayapi.data.models.AuthData import com.aurora.gplayapi.data.models.PlayResponse import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.enums.User -import foundation.e.apps.data.gplay.utils.AC2DMUtil +import foundation.e.apps.data.playstore.utils.AC2DMUtil import foundation.e.apps.data.handleNetworkResult import foundation.e.apps.data.login.exceptions.GPlayLoginException import java.util.Locale /** - * Call methods of [GoogleLoginApi] and [AnonymousLoginApi] from here. + * Call methods of [GoogleLoginManager] and [AnonymousLoginManager] from here. * * Dependency Injection via hilt is not possible, - * we need to manually check login type, create an instance of either [GoogleLoginApi] - * or [AnonymousLoginApi] and pass it to [gPlayLoginInterface]. + * we need to manually check login type, create an instance of either [GoogleLoginManager] + * or [AnonymousLoginManager] and pass it to [loginManager]. * * Issue: https://gitlab.e.foundation/e/backlog/-/issues/5680 */ -class LoginApiRepository constructor( - private val gPlayLoginInterface: GPlayLoginInterface, +class PlayStoreLoginWrapper constructor( + private val loginManager: PlayStoreLoginManager, private val user: User, ) { /** - * Gets the auth data from instance of [GPlayLoginInterface]. - * Applicable for both Google and Anonymous login. - * - * Issue: https://gitlab.e.foundation/e/backlog/-/issues/5680 - * @param email Email address for Google login. Blank for Anonymous login. - * @param aasToken For Google login - Access token obtained from [getAasToken] function, - * else blank for Anonymous login. + * Gets the auth data from instance of [PlayStoreLoginManager]. */ - suspend fun fetchAuthData(email: String, aasToken: String, locale: Locale): ResultSupreme { + suspend fun login(locale: Locale): ResultSupreme { val result = handleNetworkResult { - gPlayLoginInterface.fetchAuthData(email, aasToken) + loginManager.login() } return result.apply { this.data?.locale = locale @@ -72,10 +66,10 @@ class LoginApiRepository constructor( * * Issue: https://gitlab.e.foundation/e/backlog/-/issues/5680 */ - suspend fun login(authData: AuthData): ResultSupreme { + suspend fun validate(authData: AuthData): ResultSupreme { var response = PlayResponse() val result = handleNetworkResult { - response = gPlayLoginInterface.login(authData) + response = loginManager.validate(authData) if (response.code != 200) { throw Exception("Validation network code: ${response.code}") } @@ -92,25 +86,25 @@ class LoginApiRepository constructor( /** * Gets email and oauthToken from Google login, finds the AASToken from AC2DM response - * and returns it. This token is then used to fetch AuthData from [fetchAuthData]. + * and returns it. This token is then used to fetch AuthData from [login]. * * Do note that for a given oauthToken, it has been observed that AASToken can * only be generated once. So this token must be saved for future use. * * Issue: https://gitlab.e.foundation/e/backlog/-/issues/5680 * - * @param googleLoginApi An instance of [GoogleLoginApi] must be passed, this method - * cannot work on [gPlayLoginInterface] as it is a common interface for both Google and Anonymous + * @param googleAccountLoginManager An instance of [GoogleLoginManager] must be passed, this method + * cannot work on [loginManager] as it is a common interface for both Google and Anonymous * login, but this method is only for Google login. */ suspend fun getAasToken( - googleLoginApi: GoogleLoginApi, + googleAccountLoginManager: GoogleLoginManager, email: String, oauthToken: String ): ResultSupreme { val result = handleNetworkResult { var aasToken = "" - val response = googleLoginApi.getAC2DMResponse(email, oauthToken) + val response = googleAccountLoginManager.getAC2DMResponse(email, oauthToken) var error = response.errorString if (response.isSuccessful) { val responseMap = AC2DMUtil.parseResponse(String(response.responseBytes)) diff --git a/app/src/main/java/foundation/e/apps/data/gplay/GplayStoreRepository.kt b/app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepository.kt similarity index 92% rename from app/src/main/java/foundation/e/apps/data/gplay/GplayStoreRepository.kt rename to app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepository.kt index 5ad24dc4386efbdc4dab22e973804017b6389166..5f82c8e531dfe5f1bcc4a00dc3f66cdc49f6377c 100644 --- a/app/src/main/java/foundation/e/apps/data/gplay/GplayStoreRepository.kt +++ b/app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepository.kt @@ -16,17 +16,17 @@ * along with this program. If not, see . */ -package foundation.e.apps.data.gplay +package foundation.e.apps.data.playstore import com.aurora.gplayapi.SearchSuggestEntry import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.Category import com.aurora.gplayapi.data.models.File import com.aurora.gplayapi.data.models.SearchBundle -import foundation.e.apps.data.BaseStoreRepository +import foundation.e.apps.data.StoreRepository import foundation.e.apps.data.fused.utils.CategoryType -interface GplayStoreRepository : BaseStoreRepository { +interface PlayStoreRepository : StoreRepository { suspend fun getSearchResult(query: String, subBundle: MutableSet?): Pair, MutableSet> suspend fun getSearchSuggestions(query: String): List suspend fun getAppsByCategory(category: String, pageUrl: String? = null): Any diff --git a/app/src/main/java/foundation/e/apps/data/gplay/GplayStoreRepositoryImpl.kt b/app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepositoryImpl.kt similarity index 90% rename from app/src/main/java/foundation/e/apps/data/gplay/GplayStoreRepositoryImpl.kt rename to app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepositoryImpl.kt index 383f8e7c6e43a3914944d9e2708fbb45bfbc0bfe..96c35cf8d81b0f89f98e564940bbd1376265eb4f 100644 --- a/app/src/main/java/foundation/e/apps/data/gplay/GplayStoreRepositoryImpl.kt +++ b/app/src/main/java/foundation/e/apps/data/playstore/PlayStoreRepositoryImpl.kt @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package foundation.e.apps.data.gplay +package foundation.e.apps.data.playstore import android.content.Context import com.aurora.gplayapi.SearchSuggestEntry @@ -36,23 +36,23 @@ import com.aurora.gplayapi.helpers.TopChartsHelper import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.R import foundation.e.apps.data.fused.utils.CategoryType -import foundation.e.apps.data.gplay.utils.GPlayHttpClient -import foundation.e.apps.data.login.LoginSourceRepository +import foundation.e.apps.data.playstore.utils.GPlayHttpClient +import foundation.e.apps.data.login.AuthenticatorRepository import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import timber.log.Timber import javax.inject.Inject -class GplayStoreRepositoryImpl @Inject constructor( +class PlayStoreRepositoryImpl @Inject constructor( @ApplicationContext private val context: Context, private val gPlayHttpClient: GPlayHttpClient, - private val loginSourceRepository: LoginSourceRepository -) : GplayStoreRepository { + private val authenticatorRepository: AuthenticatorRepository +) : PlayStoreRepository { override suspend fun getHomeScreenData(): Any { val homeScreenData = mutableMapOf>() val homeElements = createTopChartElements() - val authData = loginSourceRepository.gplayAuth!! + val authData = authenticatorRepository.gplayAuth!! homeElements.forEach { val chart = it.value.keys.iterator().next() @@ -77,7 +77,7 @@ class GplayStoreRepositoryImpl @Inject constructor( query: String, subBundle: MutableSet? ): Pair, MutableSet> { - var authData = loginSourceRepository.gplayAuth!! + var authData = authenticatorRepository.gplayAuth!! val searchHelper = SearchHelper(authData).using(gPlayHttpClient) @@ -102,7 +102,7 @@ class GplayStoreRepositoryImpl @Inject constructor( } override suspend fun getSearchSuggestions(query: String): List { - val authData = loginSourceRepository.gplayAuth!! + val authData = authenticatorRepository.gplayAuth!! val searchData = mutableListOf() withContext(Dispatchers.IO) { @@ -113,7 +113,7 @@ class GplayStoreRepositoryImpl @Inject constructor( } override suspend fun getAppsByCategory(category: String, pageUrl: String?): StreamCluster { - val authData = loginSourceRepository.gplayAuth!! + val authData = authenticatorRepository.gplayAuth!! val subCategoryHelper = CategoryAppsHelper(authData).using(gPlayHttpClient) @@ -131,7 +131,7 @@ class GplayStoreRepositoryImpl @Inject constructor( return categoryList } - val authData = loginSourceRepository.gplayAuth!! + val authData = authenticatorRepository.gplayAuth!! withContext(Dispatchers.IO) { val categoryHelper = CategoryHelper(authData).using(gPlayHttpClient) @@ -142,7 +142,7 @@ class GplayStoreRepositoryImpl @Inject constructor( override suspend fun getAppDetails(packageNameOrId: String): App? { var appDetails: App? - val authData = loginSourceRepository.gplayAuth!! + val authData = authenticatorRepository.gplayAuth!! withContext(Dispatchers.IO) { val appDetailsHelper = AppDetailsHelper(authData).using(gPlayHttpClient) @@ -153,7 +153,7 @@ class GplayStoreRepositoryImpl @Inject constructor( override suspend fun getAppsDetails(packageNamesOrIds: List): List { val appDetailsList = mutableListOf() - val authData = loginSourceRepository.gplayAuth!! + val authData = authenticatorRepository.gplayAuth!! withContext(Dispatchers.IO) { val appDetailsHelper = AppDetailsHelper(authData).using(gPlayHttpClient) @@ -185,7 +185,7 @@ class GplayStoreRepositoryImpl @Inject constructor( offerType: Int ): List { val downloadData = mutableListOf() - val authData = loginSourceRepository.gplayAuth!! + val authData = authenticatorRepository.gplayAuth!! withContext(Dispatchers.IO) { val version = versionCode?.let { it as Int } ?: -1 @@ -202,7 +202,7 @@ class GplayStoreRepositoryImpl @Inject constructor( offerType: Int ): List { val downloadData = mutableListOf() - val authData = loginSourceRepository.gplayAuth!! + val authData = authenticatorRepository.gplayAuth!! withContext(Dispatchers.IO) { val purchaseHelper = PurchaseHelper(authData).using(gPlayHttpClient) diff --git a/app/src/main/java/foundation/e/apps/data/gplay/utils/AC2DMTask.kt b/app/src/main/java/foundation/e/apps/data/playstore/utils/AC2DMTask.kt similarity index 98% rename from app/src/main/java/foundation/e/apps/data/gplay/utils/AC2DMTask.kt rename to app/src/main/java/foundation/e/apps/data/playstore/utils/AC2DMTask.kt index 448c459044841a391aae8cc289786f8ac95a1224..f1e3eb3eb785c80a96759fdc4dc492a0460509b0 100644 --- a/app/src/main/java/foundation/e/apps/data/gplay/utils/AC2DMTask.kt +++ b/app/src/main/java/foundation/e/apps/data/playstore/utils/AC2DMTask.kt @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package foundation.e.apps.data.gplay.utils +package foundation.e.apps.data.playstore.utils import com.aurora.gplayapi.data.models.PlayResponse import okhttp3.RequestBody.Companion.toRequestBody diff --git a/app/src/main/java/foundation/e/apps/data/gplay/utils/AC2DMUtil.kt b/app/src/main/java/foundation/e/apps/data/playstore/utils/AC2DMUtil.kt similarity index 97% rename from app/src/main/java/foundation/e/apps/data/gplay/utils/AC2DMUtil.kt rename to app/src/main/java/foundation/e/apps/data/playstore/utils/AC2DMUtil.kt index fefe386ebe49bbf46cb8548eb521b324f12b1962..cba734aac908b121745c14d4b36614e1e117e6b1 100644 --- a/app/src/main/java/foundation/e/apps/data/gplay/utils/AC2DMUtil.kt +++ b/app/src/main/java/foundation/e/apps/data/playstore/utils/AC2DMUtil.kt @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package foundation.e.apps.data.gplay.utils +package foundation.e.apps.data.playstore.utils import java.util.StringTokenizer import java.util.regex.Pattern diff --git a/app/src/main/java/foundation/e/apps/data/gplay/utils/CustomAuthValidator.kt b/app/src/main/java/foundation/e/apps/data/playstore/utils/CustomAuthValidator.kt similarity index 97% rename from app/src/main/java/foundation/e/apps/data/gplay/utils/CustomAuthValidator.kt rename to app/src/main/java/foundation/e/apps/data/playstore/utils/CustomAuthValidator.kt index 2bfb6825299f522f03cb952185b7a64275df448b..e2654d240c7749f3306b099aa8ca3926f995201f 100644 --- a/app/src/main/java/foundation/e/apps/data/gplay/utils/CustomAuthValidator.kt +++ b/app/src/main/java/foundation/e/apps/data/playstore/utils/CustomAuthValidator.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package foundation.e.apps.data.gplay.utils +package foundation.e.apps.data.playstore.utils import com.aurora.gplayapi.GooglePlayApi import com.aurora.gplayapi.data.models.AuthData diff --git a/app/src/main/java/foundation/e/apps/data/gplay/utils/EglExtensionProvider.kt b/app/src/main/java/foundation/e/apps/data/playstore/utils/EglExtensionProvider.kt similarity index 96% rename from app/src/main/java/foundation/e/apps/data/gplay/utils/EglExtensionProvider.kt rename to app/src/main/java/foundation/e/apps/data/playstore/utils/EglExtensionProvider.kt index 3b36d3d2afc919f9029568caa1849d39284ceec3..ad877ee28a25d9412aa96cb2dd26407a86047bc4 100644 --- a/app/src/main/java/foundation/e/apps/data/gplay/utils/EglExtensionProvider.kt +++ b/app/src/main/java/foundation/e/apps/data/playstore/utils/EglExtensionProvider.kt @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package foundation.e.apps.data.gplay.utils +package foundation.e.apps.data.playstore.utils import android.opengl.GLES10 import android.text.TextUtils diff --git a/app/src/main/java/foundation/e/apps/data/gplay/utils/GPlayHttpClient.kt b/app/src/main/java/foundation/e/apps/data/playstore/utils/GPlayHttpClient.kt similarity index 96% rename from app/src/main/java/foundation/e/apps/data/gplay/utils/GPlayHttpClient.kt rename to app/src/main/java/foundation/e/apps/data/playstore/utils/GPlayHttpClient.kt index 2bfd5578aa5ff7dc8d8ef530a04dd50c0f1c7438..8b7737c68a45529955603b7e64a28414e6e6612a 100644 --- a/app/src/main/java/foundation/e/apps/data/gplay/utils/GPlayHttpClient.kt +++ b/app/src/main/java/foundation/e/apps/data/playstore/utils/GPlayHttpClient.kt @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package foundation.e.apps.data.gplay.utils +package foundation.e.apps.data.playstore.utils import androidx.annotation.VisibleForTesting import com.aurora.gplayapi.data.models.PlayResponse diff --git a/app/src/main/java/foundation/e/apps/data/gplay/utils/NativeDeviceInfoProviderModule.kt b/app/src/main/java/foundation/e/apps/data/playstore/utils/NativeDeviceInfoProviderModule.kt similarity index 96% rename from app/src/main/java/foundation/e/apps/data/gplay/utils/NativeDeviceInfoProviderModule.kt rename to app/src/main/java/foundation/e/apps/data/playstore/utils/NativeDeviceInfoProviderModule.kt index 53a70ff9359eeb5f3cc6fe5389c829051af43967..ae3d2ef6f3dcebc30c0166a8a4bf8ff82cec4fa9 100644 --- a/app/src/main/java/foundation/e/apps/data/gplay/utils/NativeDeviceInfoProviderModule.kt +++ b/app/src/main/java/foundation/e/apps/data/playstore/utils/NativeDeviceInfoProviderModule.kt @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package foundation.e.apps.data.gplay.utils +package foundation.e.apps.data.playstore.utils import android.app.ActivityManager import android.content.Context diff --git a/app/src/main/java/foundation/e/apps/data/gplay/utils/NativeGsfVersionProvider.kt b/app/src/main/java/foundation/e/apps/data/playstore/utils/NativeGsfVersionProvider.kt similarity index 96% rename from app/src/main/java/foundation/e/apps/data/gplay/utils/NativeGsfVersionProvider.kt rename to app/src/main/java/foundation/e/apps/data/playstore/utils/NativeGsfVersionProvider.kt index 40ab7b2fc83cdfb8a0526abe4a92deb3987fc3e9..175b8f511afc9703d88c275ee58327c411e5c072 100644 --- a/app/src/main/java/foundation/e/apps/data/gplay/utils/NativeGsfVersionProvider.kt +++ b/app/src/main/java/foundation/e/apps/data/playstore/utils/NativeGsfVersionProvider.kt @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package foundation.e.apps.data.gplay.utils +package foundation.e.apps.data.playstore.utils import android.content.Context import android.content.pm.PackageManager diff --git a/app/src/main/java/foundation/e/apps/di/LoginModule.kt b/app/src/main/java/foundation/e/apps/di/LoginModule.kt index f59a084b8abfbab057fc725a488be61096d43095..ac964187dbbfebeb94c51bb6e2773ebff850829c 100644 --- a/app/src/main/java/foundation/e/apps/di/LoginModule.kt +++ b/app/src/main/java/foundation/e/apps/di/LoginModule.kt @@ -21,19 +21,19 @@ import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent -import foundation.e.apps.data.login.LoginSourceCleanApk -import foundation.e.apps.data.login.LoginSourceGPlay -import foundation.e.apps.data.login.LoginSourceInterface +import foundation.e.apps.data.login.CleanApkAuthenticator +import foundation.e.apps.data.login.PlayStoreAuthenticator +import foundation.e.apps.data.login.StoreAuthenticator @InstallIn(SingletonComponent::class) @Module object LoginModule { @Provides - fun providesLoginSources( - gPlay: LoginSourceGPlay, - cleanApk: LoginSourceCleanApk, - ): List { + fun providesAuthenticators( + gPlay: PlayStoreAuthenticator, + cleanApk: CleanApkAuthenticator, + ): List { return listOf(gPlay, cleanApk) } } diff --git a/app/src/main/java/foundation/e/apps/di/NamedRepositoryModule.kt b/app/src/main/java/foundation/e/apps/di/NamedRepositoryModule.kt index 56d3d9393a770a90990c728af3b83e1258f0bc47..e3d60030b145639369d39f8b2aa1c21a594a61ea 100644 --- a/app/src/main/java/foundation/e/apps/di/NamedRepositoryModule.kt +++ b/app/src/main/java/foundation/e/apps/di/NamedRepositoryModule.kt @@ -29,10 +29,10 @@ import foundation.e.apps.data.cleanapk.CleanApkRetrofit import foundation.e.apps.data.cleanapk.repositories.CleanApkAppsRepositoryImpl import foundation.e.apps.data.cleanapk.repositories.CleanApkPWARepository import foundation.e.apps.data.cleanapk.repositories.CleanApkRepository -import foundation.e.apps.data.gplay.GplayStoreRepository -import foundation.e.apps.data.gplay.GplayStoreRepositoryImpl -import foundation.e.apps.data.gplay.utils.GPlayHttpClient -import foundation.e.apps.data.login.LoginSourceRepository +import foundation.e.apps.data.playstore.PlayStoreRepository +import foundation.e.apps.data.playstore.PlayStoreRepositoryImpl +import foundation.e.apps.data.playstore.utils.GPlayHttpClient +import foundation.e.apps.data.login.AuthenticatorRepository import javax.inject.Named import javax.inject.Singleton @@ -45,9 +45,9 @@ object NamedRepositoryModule { fun getGplayRepository( @ApplicationContext context: Context, gPlayHttpClient: GPlayHttpClient, - loginSourceRepository: LoginSourceRepository - ): GplayStoreRepository { - return GplayStoreRepositoryImpl(context, gPlayHttpClient, loginSourceRepository) + authenticatorRepository: AuthenticatorRepository + ): PlayStoreRepository { + return PlayStoreRepositoryImpl(context, gPlayHttpClient, authenticatorRepository) } @Singleton diff --git a/app/src/main/java/foundation/e/apps/install/updates/UpdatesWorker.kt b/app/src/main/java/foundation/e/apps/install/updates/UpdatesWorker.kt index 1f7804cb6bb6a43fc82d04019938cb27bbde3cd2..f15a368412f36495484cddd2f0177e1aadc245fa 100644 --- a/app/src/main/java/foundation/e/apps/install/updates/UpdatesWorker.kt +++ b/app/src/main/java/foundation/e/apps/install/updates/UpdatesWorker.kt @@ -20,7 +20,7 @@ import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.data.enums.ResultStatus import foundation.e.apps.data.enums.User import foundation.e.apps.data.fused.data.FusedApp -import foundation.e.apps.data.login.LoginSourceRepository +import foundation.e.apps.data.login.AuthenticatorRepository import foundation.e.apps.data.preference.DataStoreManager import foundation.e.apps.data.updates.UpdatesManagerRepository import foundation.e.apps.install.workmanager.AppInstallProcessor @@ -37,7 +37,7 @@ class UpdatesWorker @AssistedInject constructor( @Assisted private val params: WorkerParameters, private val updatesManagerRepository: UpdatesManagerRepository, private val dataStoreManager: DataStoreManager, - private val loginSourceRepository: LoginSourceRepository, + private val authenticatorRepository: AuthenticatorRepository, private val appInstallProcessor: AppInstallProcessor, private val blockedAppRepository: BlockedAppRepository, ) : CoroutineWorker(context, params) { @@ -106,7 +106,7 @@ class UpdatesWorker @AssistedInject constructor( val isConnectedToUnMeteredNetwork = isConnectedToUnMeteredNetwork(applicationContext) val appsNeededToUpdate = mutableListOf() val user = getUser() - val authData = loginSourceRepository.getValidatedAuthData().data + val authData = authenticatorRepository.getValidatedAuthData().data val resultStatus: ResultStatus if (user in listOf(User.ANONYMOUS, User.GOOGLE) && authData != null) { diff --git a/app/src/main/java/foundation/e/apps/ui/AppInfoFetchViewModel.kt b/app/src/main/java/foundation/e/apps/ui/AppInfoFetchViewModel.kt index 3cf70583f1b9a5fd1f37f9f6f4a8d57e548551a0..a9afde8e473851944e1561074736d670af44f283 100644 --- a/app/src/main/java/foundation/e/apps/ui/AppInfoFetchViewModel.kt +++ b/app/src/main/java/foundation/e/apps/ui/AppInfoFetchViewModel.kt @@ -10,7 +10,7 @@ import foundation.e.apps.data.blockedApps.BlockedAppRepository import foundation.e.apps.data.faultyApps.FaultyAppRepository import foundation.e.apps.data.fdroid.FdroidRepository import foundation.e.apps.data.fused.data.FusedApp -import foundation.e.apps.data.gplay.GplayStoreRepository +import foundation.e.apps.data.playstore.PlayStoreRepository import foundation.e.apps.data.preference.DataStoreModule import javax.inject.Inject import javax.inject.Named @@ -21,7 +21,7 @@ import javax.inject.Named @HiltViewModel class AppInfoFetchViewModel @Inject constructor( private val fdroidRepository: FdroidRepository, - @Named("gplayRepository") private val gplayRepository: GplayStoreRepository, + @Named("gplayRepository") private val gplayRepository: PlayStoreRepository, private val faultyAppRepository: FaultyAppRepository, private val dataStoreModule: DataStoreModule, private val blockedAppRepository: BlockedAppRepository, diff --git a/app/src/main/java/foundation/e/apps/ui/parentFragment/TimeoutFragment.kt b/app/src/main/java/foundation/e/apps/ui/parentFragment/TimeoutFragment.kt index 1557c14dd7f41d3a142a01bf678045260361602f..11ab0653fc015026876d52b067c8ee08a0d53b92 100644 --- a/app/src/main/java/foundation/e/apps/ui/parentFragment/TimeoutFragment.kt +++ b/app/src/main/java/foundation/e/apps/ui/parentFragment/TimeoutFragment.kt @@ -33,7 +33,7 @@ import androidx.lifecycle.ViewModelProvider import foundation.e.apps.R import foundation.e.apps.data.enums.User import foundation.e.apps.data.login.AuthObject -import foundation.e.apps.data.login.LoginSourceGPlay +import foundation.e.apps.data.login.PlayStoreAuthenticator import foundation.e.apps.data.login.LoginViewModel import foundation.e.apps.data.login.exceptions.CleanApkException import foundation.e.apps.data.login.exceptions.GPlayException @@ -206,7 +206,7 @@ abstract class TimeoutFragment(@LayoutRes layoutId: Int) : Fragment(layoutId) { * Clears saved GPlay AuthData and restarts login process to get */ fun clearAndRestartGPlayLogin() { - loginViewModel.startLoginFlow(listOf(LoginSourceGPlay::class.java.simpleName)) + loginViewModel.startLoginFlow(listOf(PlayStoreAuthenticator::class.java.simpleName)) } /** diff --git a/app/src/main/java/foundation/e/apps/ui/setup/signin/google/GoogleSignInFragment.kt b/app/src/main/java/foundation/e/apps/ui/setup/signin/google/GoogleSignInFragment.kt index 8dc3081b306bee1790d961c2a2ed725765f8cf13..ac4e98dd8e56b12a3c7342afb3fde24b54288d99 100644 --- a/app/src/main/java/foundation/e/apps/ui/setup/signin/google/GoogleSignInFragment.kt +++ b/app/src/main/java/foundation/e/apps/ui/setup/signin/google/GoogleSignInFragment.kt @@ -31,7 +31,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.navigation.findNavController import dagger.hilt.android.AndroidEntryPoint import foundation.e.apps.R -import foundation.e.apps.data.gplay.utils.AC2DMUtil +import foundation.e.apps.data.playstore.utils.AC2DMUtil import foundation.e.apps.data.login.LoginViewModel import foundation.e.apps.databinding.FragmentGoogleSigninBinding import foundation.e.apps.di.CommonUtilsModule.safeNavigate diff --git a/app/src/test/java/foundation/e/apps/fused/FusedApiImplTest.kt b/app/src/test/java/foundation/e/apps/fused/FusedApiImplTest.kt index bc91a6ff9f3b743b58d9fd15e64fbc879a2d90fd..9b5ee503021156daf67d77bd67a9a93b4b9a6f02 100644 --- a/app/src/test/java/foundation/e/apps/fused/FusedApiImplTest.kt +++ b/app/src/test/java/foundation/e/apps/fused/FusedApiImplTest.kt @@ -38,7 +38,7 @@ import foundation.e.apps.data.fused.FusedApiImpl import foundation.e.apps.data.fused.data.FusedApp import foundation.e.apps.data.fused.data.FusedHome import foundation.e.apps.data.fused.utils.CategoryType -import foundation.e.apps.data.gplay.GplayStoreRepository +import foundation.e.apps.data.playstore.PlayStoreRepository import foundation.e.apps.install.pkg.PWAManagerModule import foundation.e.apps.install.pkg.PkgManagerModule import foundation.e.apps.util.MainCoroutineRule @@ -93,7 +93,7 @@ class FusedApiImplTest { private lateinit var cleanApkPWARepository: CleanApkRepository @Mock - private lateinit var gPlayAPIRepository: GplayStoreRepository + private lateinit var gPlayAPIRepository: PlayStoreRepository private lateinit var preferenceManagerModule: FakePreferenceModule diff --git a/app/src/test/java/foundation/e/apps/gplay/GplyHttpClientTest.kt b/app/src/test/java/foundation/e/apps/gplay/GplyHttpClientTest.kt index 38aa99e046bb2c1519af40c912bfb1c2fb504e70..89c5e9f81a7742c022ad8e72d79383d475cb71ac 100644 --- a/app/src/test/java/foundation/e/apps/gplay/GplyHttpClientTest.kt +++ b/app/src/test/java/foundation/e/apps/gplay/GplyHttpClientTest.kt @@ -19,7 +19,7 @@ package foundation.e.apps.gplay import com.aurora.gplayapi.data.models.PlayResponse -import foundation.e.apps.data.gplay.utils.GPlayHttpClient +import foundation.e.apps.data.playstore.utils.GPlayHttpClient import foundation.e.apps.data.login.AuthObject import foundation.e.apps.util.FakeCall import foundation.e.apps.util.MainCoroutineRule diff --git a/app/src/test/java/foundation/e/apps/login/LoginViewModelTest.kt b/app/src/test/java/foundation/e/apps/login/LoginViewModelTest.kt index 662ede447617490667aa1d4fb91f69748a4b082c..9060e9740342b54dc7af2beb6d51f01728dd10d9 100644 --- a/app/src/test/java/foundation/e/apps/login/LoginViewModelTest.kt +++ b/app/src/test/java/foundation/e/apps/login/LoginViewModelTest.kt @@ -23,7 +23,7 @@ import com.aurora.gplayapi.data.models.AuthData import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.enums.User import foundation.e.apps.data.login.AuthObject -import foundation.e.apps.data.login.LoginSourceRepository +import foundation.e.apps.data.login.AuthenticatorRepository import foundation.e.apps.data.login.LoginViewModel import okhttp3.Cache import org.junit.Before @@ -35,7 +35,7 @@ import org.mockito.MockitoAnnotations class LoginViewModelTest { @Mock - private lateinit var loginSourceRepository: LoginSourceRepository + private lateinit var authenticatorRepository: AuthenticatorRepository @Mock private lateinit var cache: Cache @@ -48,7 +48,7 @@ class LoginViewModelTest { @Before fun setup() { MockitoAnnotations.openMocks(this) - loginViewModel = LoginViewModel(loginSourceRepository, cache) + loginViewModel = LoginViewModel(authenticatorRepository, cache) } @Test