Loading app/src/main/AndroidManifest.xml +3 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,9 @@ package="foundation.e.apps"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:ignore="QueryAllPackagesPermission" /> <uses-permission android:name="android.permission.INSTALL_PACKAGES" tools:ignore="ProtectedPermissions" /> Loading app/src/main/java/foundation/e/apps/api/gplay/token/TokenImpl.kt +4 −11 Original line number Diff line number Diff line package foundation.e.apps.api.gplay.token import android.util.Log import com.aurora.gplayapi.data.models.AuthData import com.google.gson.Gson import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent import foundation.e.apps.api.gplay.OkHttpClient import kotlinx.coroutines.async import foundation.e.apps.api.gplay.utils.OkHttpClient import java.util.* import javax.inject.Inject @InstallIn(SingletonComponent::class) class TokenImpl @Inject constructor( private val nativeDeviceProperty: Properties, private val gson: Gson private val gson: Gson, ) { companion object { const val BASE_URL = "https://eu.gtoken.ecloud.global" } suspend fun getAuthData() { fun getAuthData(): AuthData? { val playResponse = OkHttpClient.postAuth(BASE_URL, gson.toJson(nativeDeviceProperty).toByteArray()) val authData = async { gson.fromJson(String(playResponse.responseBytes), AuthData::class.java) } Log.d("HomeViewModel", gson.toJson(authData.await())) return gson.fromJson(String(playResponse.responseBytes), AuthData::class.java) } } No newline at end of file app/src/main/java/foundation/e/apps/api/gplay/token/TokenRepository.kt +7 −1 Original line number Diff line number Diff line package foundation.e.apps.api.gplay.token import com.aurora.gplayapi.data.models.AuthData import javax.inject.Inject class TokenRepository @Inject constructor( private val tokenImpl: TokenImpl ) No newline at end of file ) { suspend fun getAuthData(): AuthData? { return tokenImpl.getAuthData() } } No newline at end of file app/src/main/java/foundation/e/apps/api/gplay/utils/EglExtensionProvider.kt 0 → 100644 +112 −0 Original line number Diff line number Diff line package foundation.e.apps.api.gplay.utils import android.opengl.GLES10 import android.text.TextUtils import java.util.* import javax.microedition.khronos.egl.EGL10 import javax.microedition.khronos.egl.EGLConfig import javax.microedition.khronos.egl.EGLContext import javax.microedition.khronos.egl.EGLDisplay object EglExtensionProvider { @JvmStatic val eglExtensions: List<String> get() { val glExtensions: MutableSet<String> = HashSet() val egl10 = EGLContext.getEGL() as EGL10 val display = egl10.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY) egl10.eglInitialize(display, IntArray(2)) val cf = IntArray(1) if (egl10.eglGetConfigs(display, null, 0, cf)) { val configs = arrayOfNulls<EGLConfig>(cf[0]) if (egl10.eglGetConfigs(display, configs, cf[0], cf)) { val a1 = intArrayOf( EGL10.EGL_WIDTH, EGL10.EGL_PBUFFER_BIT, EGL10.EGL_HEIGHT, EGL10.EGL_PBUFFER_BIT, EGL10.EGL_NONE ) val a2 = intArrayOf(12440, EGL10.EGL_PIXMAP_BIT, EGL10.EGL_NONE) val a3 = IntArray(1) for (i in 0 until cf[0]) { egl10.eglGetConfigAttrib(display, configs[i], EGL10.EGL_CONFIG_CAVEAT, a3) if (a3[0] != EGL10.EGL_SLOW_CONFIG) { egl10.eglGetConfigAttrib( display, configs[i], EGL10.EGL_SURFACE_TYPE, a3 ) if (1 and a3[0] != 0) { egl10.eglGetConfigAttrib( display, configs[i], EGL10.EGL_RENDERABLE_TYPE, a3 ) if (1 and a3[0] != 0) { addExtensionsForConfig( egl10, display, configs[i], a1, null, glExtensions ) } if (4 and a3[0] != 0) { addExtensionsForConfig( egl10, display, configs[i], a1, a2, glExtensions ) } } } } } } egl10.eglTerminate(display) val sorted: List<String> = ArrayList(glExtensions) Collections.sort(sorted) return sorted } private fun addExtensionsForConfig( egl10: EGL10, eglDisplay: EGLDisplay, eglConfig: EGLConfig?, ai: IntArray, ai1: IntArray?, set: MutableSet<String> ) { val eglContext = egl10.eglCreateContext(eglDisplay, eglConfig, EGL10.EGL_NO_CONTEXT, ai1) if (eglContext === EGL10.EGL_NO_CONTEXT) { return } val eglSurface = egl10.eglCreatePbufferSurface(eglDisplay, eglConfig, ai) if (eglSurface === EGL10.EGL_NO_SURFACE) { egl10.eglDestroyContext(eglDisplay, eglContext) } else { egl10.eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext) val s = GLES10.glGetString(7939) if (!TextUtils.isEmpty(s)) { val `as` = s.split(" ".toRegex()).toTypedArray() val i = `as`.size set.addAll(listOf(*`as`).subList(0, i)) } egl10.eglMakeCurrent( eglDisplay, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_CONTEXT ) egl10.eglDestroySurface(eglDisplay, eglSurface) egl10.eglDestroyContext(eglDisplay, eglContext) } } } No newline at end of file app/src/main/java/foundation/e/apps/api/gplay/NativeDeviceInfoProviderModule.kt→app/src/main/java/foundation/e/apps/api/gplay/utils/NativeDeviceInfoProviderModule.kt +18 −20 Original line number Diff line number Diff line package foundation.e.apps.api.gplay package foundation.e.apps.api.gplay.utils import android.app.ActivityManager import android.content.Context Loading Loading @@ -67,7 +67,7 @@ object NativeDeviceInfoProviderModule { setProperty("Platforms", Build.SUPPORTED_ABIS.joinToString(separator = ",")) // Supported Features setProperty("Features", getFeatures().joinToString(separator = ",")) setProperty("Features", getFeatures(context).joinToString(separator = ",")) // Shared Locales setProperty("Locales", getLocales(context).joinToString(separator = ",")) // Shared Libraries Loading @@ -88,7 +88,7 @@ object NativeDeviceInfoProviderModule { ) // Google Related Props val gsfVersionProvider = NativeGsfVersionProvider(applicationContext) val gsfVersionProvider = NativeGsfVersionProvider(context) setProperty("Client", "android-google") setProperty("GSF.version", "${gsfVersionProvider.getGsfVersionCode(true)}") setProperty("Vending.version", "${gsfVersionProvider.getVendingVersionCode(true)}") Loading @@ -102,13 +102,24 @@ object NativeDeviceInfoProviderModule { setProperty("CellOperator", "310") setProperty("SimOperator", "38") } if (isHuawei()) stripHuaweiProperties(properties) return properties } private fun getFeatures(context: Context): List<String> { val featureStringList: MutableList<String> = ArrayList() try { val availableFeatures = context.packageManager.systemAvailableFeatures for (feature in availableFeatures) { if (feature.name.isNotEmpty()) { featureStringList.add(feature.name) } } } catch (e: Exception) { } return featureStringList } private fun getLocales(context: Context): List<String> { val localeList: MutableList<String> = ArrayList() localeList.addAll(listOf(*context.assets.locales)) Loading @@ -133,17 +144,4 @@ object NativeDeviceInfoProviderModule { } return libraries } private fun stripHuaweiProperties(properties: Properties): Properties { // Add i-Phoney properties properties["Build.HARDWARE"] = "unknown" properties["Build.BOOTLOADER"] = "unknown" properties["Build.BRAND"] = "PassionFruit" properties["Build.DEVICE"] = "ProPlus5GFold" properties["Build.MODEL"] = "iPhoney" properties["Build.MANUFACTURER"] = "PassionFruit" properties["Build.PRODUCT"] = "iPhoney_24" properties["Build.ID"] = "ABC.123" return properties } } No newline at end of file Loading
app/src/main/AndroidManifest.xml +3 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,9 @@ package="foundation.e.apps"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:ignore="QueryAllPackagesPermission" /> <uses-permission android:name="android.permission.INSTALL_PACKAGES" tools:ignore="ProtectedPermissions" /> Loading
app/src/main/java/foundation/e/apps/api/gplay/token/TokenImpl.kt +4 −11 Original line number Diff line number Diff line package foundation.e.apps.api.gplay.token import android.util.Log import com.aurora.gplayapi.data.models.AuthData import com.google.gson.Gson import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent import foundation.e.apps.api.gplay.OkHttpClient import kotlinx.coroutines.async import foundation.e.apps.api.gplay.utils.OkHttpClient import java.util.* import javax.inject.Inject @InstallIn(SingletonComponent::class) class TokenImpl @Inject constructor( private val nativeDeviceProperty: Properties, private val gson: Gson private val gson: Gson, ) { companion object { const val BASE_URL = "https://eu.gtoken.ecloud.global" } suspend fun getAuthData() { fun getAuthData(): AuthData? { val playResponse = OkHttpClient.postAuth(BASE_URL, gson.toJson(nativeDeviceProperty).toByteArray()) val authData = async { gson.fromJson(String(playResponse.responseBytes), AuthData::class.java) } Log.d("HomeViewModel", gson.toJson(authData.await())) return gson.fromJson(String(playResponse.responseBytes), AuthData::class.java) } } No newline at end of file
app/src/main/java/foundation/e/apps/api/gplay/token/TokenRepository.kt +7 −1 Original line number Diff line number Diff line package foundation.e.apps.api.gplay.token import com.aurora.gplayapi.data.models.AuthData import javax.inject.Inject class TokenRepository @Inject constructor( private val tokenImpl: TokenImpl ) No newline at end of file ) { suspend fun getAuthData(): AuthData? { return tokenImpl.getAuthData() } } No newline at end of file
app/src/main/java/foundation/e/apps/api/gplay/utils/EglExtensionProvider.kt 0 → 100644 +112 −0 Original line number Diff line number Diff line package foundation.e.apps.api.gplay.utils import android.opengl.GLES10 import android.text.TextUtils import java.util.* import javax.microedition.khronos.egl.EGL10 import javax.microedition.khronos.egl.EGLConfig import javax.microedition.khronos.egl.EGLContext import javax.microedition.khronos.egl.EGLDisplay object EglExtensionProvider { @JvmStatic val eglExtensions: List<String> get() { val glExtensions: MutableSet<String> = HashSet() val egl10 = EGLContext.getEGL() as EGL10 val display = egl10.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY) egl10.eglInitialize(display, IntArray(2)) val cf = IntArray(1) if (egl10.eglGetConfigs(display, null, 0, cf)) { val configs = arrayOfNulls<EGLConfig>(cf[0]) if (egl10.eglGetConfigs(display, configs, cf[0], cf)) { val a1 = intArrayOf( EGL10.EGL_WIDTH, EGL10.EGL_PBUFFER_BIT, EGL10.EGL_HEIGHT, EGL10.EGL_PBUFFER_BIT, EGL10.EGL_NONE ) val a2 = intArrayOf(12440, EGL10.EGL_PIXMAP_BIT, EGL10.EGL_NONE) val a3 = IntArray(1) for (i in 0 until cf[0]) { egl10.eglGetConfigAttrib(display, configs[i], EGL10.EGL_CONFIG_CAVEAT, a3) if (a3[0] != EGL10.EGL_SLOW_CONFIG) { egl10.eglGetConfigAttrib( display, configs[i], EGL10.EGL_SURFACE_TYPE, a3 ) if (1 and a3[0] != 0) { egl10.eglGetConfigAttrib( display, configs[i], EGL10.EGL_RENDERABLE_TYPE, a3 ) if (1 and a3[0] != 0) { addExtensionsForConfig( egl10, display, configs[i], a1, null, glExtensions ) } if (4 and a3[0] != 0) { addExtensionsForConfig( egl10, display, configs[i], a1, a2, glExtensions ) } } } } } } egl10.eglTerminate(display) val sorted: List<String> = ArrayList(glExtensions) Collections.sort(sorted) return sorted } private fun addExtensionsForConfig( egl10: EGL10, eglDisplay: EGLDisplay, eglConfig: EGLConfig?, ai: IntArray, ai1: IntArray?, set: MutableSet<String> ) { val eglContext = egl10.eglCreateContext(eglDisplay, eglConfig, EGL10.EGL_NO_CONTEXT, ai1) if (eglContext === EGL10.EGL_NO_CONTEXT) { return } val eglSurface = egl10.eglCreatePbufferSurface(eglDisplay, eglConfig, ai) if (eglSurface === EGL10.EGL_NO_SURFACE) { egl10.eglDestroyContext(eglDisplay, eglContext) } else { egl10.eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext) val s = GLES10.glGetString(7939) if (!TextUtils.isEmpty(s)) { val `as` = s.split(" ".toRegex()).toTypedArray() val i = `as`.size set.addAll(listOf(*`as`).subList(0, i)) } egl10.eglMakeCurrent( eglDisplay, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_CONTEXT ) egl10.eglDestroySurface(eglDisplay, eglSurface) egl10.eglDestroyContext(eglDisplay, eglContext) } } } No newline at end of file
app/src/main/java/foundation/e/apps/api/gplay/NativeDeviceInfoProviderModule.kt→app/src/main/java/foundation/e/apps/api/gplay/utils/NativeDeviceInfoProviderModule.kt +18 −20 Original line number Diff line number Diff line package foundation.e.apps.api.gplay package foundation.e.apps.api.gplay.utils import android.app.ActivityManager import android.content.Context Loading Loading @@ -67,7 +67,7 @@ object NativeDeviceInfoProviderModule { setProperty("Platforms", Build.SUPPORTED_ABIS.joinToString(separator = ",")) // Supported Features setProperty("Features", getFeatures().joinToString(separator = ",")) setProperty("Features", getFeatures(context).joinToString(separator = ",")) // Shared Locales setProperty("Locales", getLocales(context).joinToString(separator = ",")) // Shared Libraries Loading @@ -88,7 +88,7 @@ object NativeDeviceInfoProviderModule { ) // Google Related Props val gsfVersionProvider = NativeGsfVersionProvider(applicationContext) val gsfVersionProvider = NativeGsfVersionProvider(context) setProperty("Client", "android-google") setProperty("GSF.version", "${gsfVersionProvider.getGsfVersionCode(true)}") setProperty("Vending.version", "${gsfVersionProvider.getVendingVersionCode(true)}") Loading @@ -102,13 +102,24 @@ object NativeDeviceInfoProviderModule { setProperty("CellOperator", "310") setProperty("SimOperator", "38") } if (isHuawei()) stripHuaweiProperties(properties) return properties } private fun getFeatures(context: Context): List<String> { val featureStringList: MutableList<String> = ArrayList() try { val availableFeatures = context.packageManager.systemAvailableFeatures for (feature in availableFeatures) { if (feature.name.isNotEmpty()) { featureStringList.add(feature.name) } } } catch (e: Exception) { } return featureStringList } private fun getLocales(context: Context): List<String> { val localeList: MutableList<String> = ArrayList() localeList.addAll(listOf(*context.assets.locales)) Loading @@ -133,17 +144,4 @@ object NativeDeviceInfoProviderModule { } return libraries } private fun stripHuaweiProperties(properties: Properties): Properties { // Add i-Phoney properties properties["Build.HARDWARE"] = "unknown" properties["Build.BOOTLOADER"] = "unknown" properties["Build.BRAND"] = "PassionFruit" properties["Build.DEVICE"] = "ProPlus5GFold" properties["Build.MODEL"] = "iPhoney" properties["Build.MANUFACTURER"] = "PassionFruit" properties["Build.PRODUCT"] = "iPhoney_24" properties["Build.ID"] = "ABC.123" return properties } } No newline at end of file