From fd097fbba1e0bceb6e5f274dcdd68169b24a899e Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Mon, 2 Oct 2023 14:05:30 +0530 Subject: [PATCH] Initial Web APIs implementation Introduce a toggle in Settings > Advanced to let user use Web APIs. Currently implemented for search suggestions and results only. Signed-off-by: Aayush Gupta --- app/build.gradle.kts | 2 +- .../main/java/com/aurora/extensions/Context.kt | 5 +++++ .../java/com/aurora/store/util/Preferences.kt | 1 + .../viewmodel/search/SearchResultViewModel.kt | 18 +++++++++++++++++- .../search/SearchSuggestionViewModel.kt | 13 +++++++++++-- app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/preferences_advanced.xml | 7 +++++++ 7 files changed, 44 insertions(+), 4 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 4a9c26171..496983349 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -166,7 +166,7 @@ dependencies { implementation("com.github.topjohnwu.libsu:core:5.0.5") //Love <3 - implementation("com.gitlab.AuroraOSS:gplayapi:3.1.4") + implementation("com.gitlab.AuroraOSS:gplayapi:3.2.0") //Browser implementation("androidx.browser:browser:1.6.0") diff --git a/app/src/main/java/com/aurora/extensions/Context.kt b/app/src/main/java/com/aurora/extensions/Context.kt index 4256daaa0..7035ce5fa 100644 --- a/app/src/main/java/com/aurora/extensions/Context.kt +++ b/app/src/main/java/com/aurora/extensions/Context.kt @@ -44,6 +44,7 @@ import com.aurora.store.MainActivity import com.aurora.store.R import com.aurora.store.util.Log import com.aurora.store.util.Preferences +import com.aurora.store.util.Preferences.PREFERENCE_ADVANCED_USE_WEB_API import kotlin.system.exitProcess val Context.inflater: LayoutInflater @@ -176,3 +177,7 @@ fun Context.accentColor(): Int { } return ContextCompat.getColor(this, color) } + +fun Context.shouldUseWebAPI(): Boolean { + return Preferences.getBoolean(this, PREFERENCE_ADVANCED_USE_WEB_API) +} diff --git a/app/src/main/java/com/aurora/store/util/Preferences.kt b/app/src/main/java/com/aurora/store/util/Preferences.kt index 225538228..8ef370093 100644 --- a/app/src/main/java/com/aurora/store/util/Preferences.kt +++ b/app/src/main/java/com/aurora/store/util/Preferences.kt @@ -59,6 +59,7 @@ object Preferences { const val PREFERENCE_UPDATES_CHECK = "PREFERENCE_UPDATES_CHECK" const val PREFERENCE_ADVANCED_SEARCH_IN_CTT = "PREFERENCE_ADVANCED_SEARCH_IN_CTT" + const val PREFERENCE_ADVANCED_USE_WEB_API = "PREFERENCE_ADVANCED_USE_WEB_API" const val PREFERENCE_UNIQUE_GROUP_IDS = "PREFERENCE_UNIQUE_GROUP_IDS" diff --git a/app/src/main/java/com/aurora/store/viewmodel/search/SearchResultViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/search/SearchResultViewModel.kt index cdec67f95..547f8b21d 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/search/SearchResultViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/search/SearchResultViewModel.kt @@ -20,17 +20,21 @@ package com.aurora.store.viewmodel.search import android.app.Application +import android.content.Context import android.util.Log import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope import com.aurora.extensions.flushAndAdd +import com.aurora.extensions.shouldUseWebAPI import com.aurora.gplayapi.data.models.AuthData import com.aurora.gplayapi.data.models.SearchBundle import com.aurora.gplayapi.helpers.SearchHelper +import com.aurora.gplayapi.helpers.WebSearchHelper import com.aurora.store.data.RequestState import com.aurora.store.data.network.HttpClient import com.aurora.store.data.providers.AuthProvider import com.aurora.store.viewmodel.BaseAndroidViewModel +import java.util.UUID import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.supervisorScope @@ -45,6 +49,8 @@ class SearchResultViewModel(application: Application) : BaseAndroidViewModel(app private val searchHelper: SearchHelper = SearchHelper(authData) .using(HttpClient.getPreferredClient()) + private val webSearchHelper = WebSearchHelper() + val liveData: MutableLiveData = MutableLiveData() private var searchBundle: SearchBundle = SearchBundle() @@ -69,7 +75,17 @@ class SearchResultViewModel(application: Application) : BaseAndroidViewModel(app private fun search( query: String ): SearchBundle { - return searchHelper.searchResults(query) + return if ((getApplication() as Context).shouldUseWebAPI()) { + val result = webSearchHelper.searchResults(query) + val searchBundle = SearchBundle().apply { + this.id = 100 + this.query = query + appList = result.values.flatten().toSet().toMutableList() + } + return searchBundle + } else { + searchHelper.searchResults(query) + } } @Synchronized diff --git a/app/src/main/java/com/aurora/store/viewmodel/search/SearchSuggestionViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/search/SearchSuggestionViewModel.kt index 6c1567a81..4a7d1518b 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/search/SearchSuggestionViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/search/SearchSuggestionViewModel.kt @@ -20,12 +20,15 @@ package com.aurora.store.viewmodel.search import android.app.Application +import android.content.Context import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope +import com.aurora.extensions.shouldUseWebAPI import com.aurora.gplayapi.SearchSuggestEntry import com.aurora.gplayapi.data.models.AuthData import com.aurora.gplayapi.helpers.SearchHelper +import com.aurora.gplayapi.helpers.WebSearchSuggestionHelper import com.aurora.store.data.network.HttpClient import com.aurora.store.data.providers.AuthProvider import kotlinx.coroutines.Dispatchers @@ -40,6 +43,8 @@ class SearchSuggestionViewModel(application: Application) : AndroidViewModel(app private val searchHelper: SearchHelper = SearchHelper(authData) .using(HttpClient.getPreferredClient()) + private val webSearchSuggestionHelper = WebSearchSuggestionHelper() + val liveSearchSuggestions: MutableLiveData> = MutableLiveData() fun observeStreamBundles(query: String) { @@ -51,6 +56,10 @@ class SearchSuggestionViewModel(application: Application) : AndroidViewModel(app private fun getSearchSuggestions( query: String ): List { - return searchHelper.searchSuggestions(query) + return if ((getApplication() as Context).shouldUseWebAPI()) { + webSearchSuggestionHelper.searchSuggestions(query) + } else { + searchHelper.searchSuggestions(query) + } } -} \ No newline at end of file +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b219a76ce..7d85fc3da 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -251,6 +251,8 @@ Looks for new versions of disabled apps too Search in Custom Tab Opens search results in a browser\'s custom tab + Use Web APIs + Switches to Web APIs wherever possible when making a request to Google Play (Increases anonymity, but can be unstable). "Download Failed" "App not purchased" "App not supported" diff --git a/app/src/main/res/xml/preferences_advanced.xml b/app/src/main/res/xml/preferences_advanced.xml index 1872f34a5..becceb861 100644 --- a/app/src/main/res/xml/preferences_advanced.xml +++ b/app/src/main/res/xml/preferences_advanced.xml @@ -8,4 +8,11 @@ app:summary="@string/pref_advanced_search_in_ctt_desc" app:title="@string/pref_advanced_search_in_ctt" /> + +