Allow parsing app listing URLs

This commit is contained in:
Rahul Kumar Patel
2021-02-19 11:01:27 +05:30
parent d0963d0eba
commit 489783e612
3 changed files with 88 additions and 19 deletions

View File

@@ -55,17 +55,20 @@
android:name=".AuroraApplication"
android:allowBackup="true"
android:banner="@drawable/ic_launcher_background"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:killAfterRestore="false"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:restoreAnyVersion="true"
android:restoreNeedsApplication="true"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
tools:targetApi="m">
<activity
android:name=".view.ui.onboarding.OnboardingActivity">
<activity android:name=".view.ui.onboarding.OnboardingActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -82,11 +85,35 @@
android:name=".MainActivity"
android:launchMode="singleTask" />
<activity android:name=".view.ui.details.AppDetailsActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="market.android.com" />
<data android:path="/store/apps/details" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="play.google.com" />
<data android:path="/store/apps/details" />
</intent-filter>
</activity>
<activity android:name=".view.ui.search.SearchSuggestionActivity" />
<activity android:name=".view.ui.search.SearchResultsActivity" />
<activity android:name=".view.ui.commons.StreamBrowseActivity" />
<activity android:name=".view.ui.sale.AppSalesActivity" />
<activity android:name=".view.ui.details.AppDetailsActivity" />
<activity android:name=".view.ui.details.ScreenshotActivity" />
<activity android:name=".view.ui.all.AppsGamesActivity" />
<activity android:name=".view.ui.commons.CategoryBrowseActivity" />

View File

@@ -34,6 +34,7 @@ import com.aurora.gplayapi.data.models.AuthData
import com.aurora.gplayapi.data.models.File
import com.aurora.gplayapi.helpers.AppDetailsHelper
import com.aurora.gplayapi.helpers.PurchaseHelper
import com.aurora.store.MainActivity
import com.aurora.store.R
import com.aurora.store.data.downloader.DownloadManager
import com.aurora.store.data.downloader.RequestBuilder
@@ -70,6 +71,7 @@ class AppDetailsActivity : BaseDetailsActivity() {
private lateinit var fetch: Fetch
private lateinit var fetchGroupListener: FetchGroupListener
private var isExternal = false
private var isNone = false
private var status = Status.NONE
private var isInstalled: Boolean = false
@@ -119,6 +121,14 @@ class AppDetailsActivity : BaseDetailsActivity() {
onNewIntent(intent)
}
override fun onBackPressed() {
if (isExternal) {
open(MainActivity::class.java, true)
}
super.onBackPressed()
}
override fun onResume() {
if (!isLAndAbove()) {
checkAndSetupInstall()
@@ -128,18 +138,29 @@ class AppDetailsActivity : BaseDetailsActivity() {
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
val itemRaw: String? = intent.getStringExtra(Constants.STRING_EXTRA)
if (itemRaw != null) {
app = gson.fromJson(itemRaw, App::class.java)
if (intent.scheme != null && (intent.scheme == "market" || intent.scheme == "http" || intent.scheme == "https")) {
val packageName = intent.data!!.getQueryParameter("id")
if (packageName.isNullOrEmpty()) {
close()
} else {
isExternal = true
app = App(packageName)
fetchCompleteApp()
}
} else {
val rawApp: String? = intent.getStringExtra(Constants.STRING_EXTRA)
if (rawApp != null) {
app = gson.fromJson(rawApp, App::class.java)
isInstalled = PackageUtil.isInstalled(this, app.packageName)
inflatePartialApp()
fetchCompleteApp()
} else {
close()
}
}
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu_details, menu)
@@ -233,6 +254,10 @@ class AppDetailsActivity : BaseDetailsActivity() {
.using(HttpClient.getPreferredClient())
.getAppByPackageName(app.packageName)
} successUi {
if (isExternal) {
app = it
inflatePartialApp()
}
inflateExtraDetails(it)
} failUi {
toast("Failed to fetch app details")
@@ -240,6 +265,7 @@ class AppDetailsActivity : BaseDetailsActivity() {
}
private fun inflatePartialApp() {
if (::app.isInitialized) {
attachWhiteListStatus()
attachHeader()
attachToolbar()
@@ -247,6 +273,7 @@ class AppDetailsActivity : BaseDetailsActivity() {
attachFetch()
attachActions()
}
}
private fun attachHeader() {
B.layoutDetailsApp.apply {

View File

@@ -55,6 +55,7 @@ import nl.komponents.kovenant.ui.successUi
import org.json.JSONObject
import java.util.*
abstract class BaseDetailsActivity : BaseActivity() {
private val exodusBaseUrl = "https://reports.exodus-privacy.eu.org/api/search/"
@@ -267,7 +268,7 @@ abstract class BaseDetailsActivity : BaseActivity() {
}
} failUi {
updateBetaActions(B, betaProgram.isSubscribed)
toast("Failed to update beta status")
toast(getString(R.string.details_beta_delay))
}
}
} else {
@@ -286,8 +287,22 @@ abstract class BaseDetailsActivity : BaseActivity() {
}
}
//Helpers
open fun getIntentPackageName(intent: Intent): String? {
if (intent.hasExtra(Constants.STRING_EXTRA)) {
return intent.getStringExtra(Constants.STRING_EXTRA)
} else if (intent.scheme != null && (intent.scheme == "market" || intent.scheme == "http" || intent.scheme == "https")
) {
return intent.data!!.getQueryParameter("id")
} else if (intent.extras != null) {
val bundle = intent.extras
return bundle!!.getString(Constants.STRING_EXTRA)
}
return null
}
private fun openScreenshotActivity(app: App, position: Int) {
val intent = Intent(
this,