diff --git a/app/build.gradle b/app/build.gradle index 24d8bf9a88b0c409b25b52d5ce2644ade22b618e..86565a3b78ce720bc9043ea65b1cca408b000260 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,6 +12,19 @@ def versionMajor = 2 def versionMinor = 4 def versionPatch = 0 +def getGitHash = { -> + def stdOut = new ByteArrayOutputStream() + exec { + commandLine 'git', 'log', '--pretty=format:%h', '-n', '1' + standardOutput = stdOut + } + return stdOut.toString().trim() +} + +def getDate = { -> + return new Date().format('yyyyMMddHHmmss') +} + android { compileSdk 31 @@ -22,6 +35,8 @@ android { versionCode versionMajor * 1000000 + versionMinor * 1000 + versionPatch versionName "${versionMajor}.${versionMinor}.${versionPatch}" + buildConfigField "String", "BUILD_ID", "\"${getGitHash() + "." + getDate()}\"" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/foundation/e/apps/MainActivity.kt b/app/src/main/java/foundation/e/apps/MainActivity.kt index 2b5c869551c5245baae4c589c569ad81176d2927..00b90776ff133b380fdeb83d82b4f4b81cd804d9 100644 --- a/app/src/main/java/foundation/e/apps/MainActivity.kt +++ b/app/src/main/java/foundation/e/apps/MainActivity.kt @@ -54,11 +54,11 @@ import foundation.e.apps.utils.enums.Status import foundation.e.apps.utils.eventBus.AppEvent import foundation.e.apps.utils.eventBus.EventBus import foundation.e.apps.utils.exceptions.GPlayValidationException +import foundation.e.apps.utils.modules.CommonUtilsFunctions import foundation.e.apps.utils.modules.CommonUtilsModule import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.filter import kotlinx.coroutines.launch -import org.json.JSONObject import timber.log.Timber import java.io.File import java.util.UUID @@ -73,7 +73,7 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - + binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) @@ -129,14 +129,7 @@ class MainActivity : AppCompatActivity() { viewModel.gPlayAuthData = data as AuthData } else if (exception is GPlayValidationException) { val email = otherPayload.toString() - val descriptionJson = JSONObject().apply { - put("versionName", BuildConfig.VERSION_NAME) - put("versionCode", BuildConfig.VERSION_CODE) - put("debuggable", BuildConfig.DEBUG) - put("device", Build.DEVICE) - put("api", Build.VERSION.SDK_INT) - } - viewModel.uploadFaultyTokenToEcloud(email, descriptionJson.toString()) + viewModel.uploadFaultyTokenToEcloud(email, CommonUtilsFunctions.getAppBuildInfo()) } } } diff --git a/app/src/main/java/foundation/e/apps/MainActivityViewModel.kt b/app/src/main/java/foundation/e/apps/MainActivityViewModel.kt index f1b93d07ea1dbf263e3cfc7d5090aff1024c04e1..03ae34b07e1f16e4c986999cc24feea3d0bf09b4 100644 --- a/app/src/main/java/foundation/e/apps/MainActivityViewModel.kt +++ b/app/src/main/java/foundation/e/apps/MainActivityViewModel.kt @@ -54,6 +54,8 @@ import foundation.e.apps.utils.modules.PWAManagerModule import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import ru.beryukhov.reactivenetwork.ReactiveNetwork +import ru.beryukhov.reactivenetwork.internet.observing.InternetObservingSettings +import ru.beryukhov.reactivenetwork.internet.observing.strategy.SocketInternetObservingStrategy import java.io.ByteArrayOutputStream import javax.inject.Inject @@ -331,7 +333,14 @@ class MainActivityViewModel @Inject constructor( } val internetConnection = liveData { - emitSource(ReactiveNetwork().observeInternetConnectivity().asLiveData(Dispatchers.Default)) + emitSource( + ReactiveNetwork().observeInternetConnectivity( + InternetObservingSettings.builder() + .host("http://204.ecloud.global") + .strategy(SocketInternetObservingStrategy()) + .build() + ).asLiveData(Dispatchers.Default) + ) } fun updateStatusOfFusedApps( diff --git a/app/src/main/java/foundation/e/apps/api/gplay/utils/GPlayHttpClient.kt b/app/src/main/java/foundation/e/apps/api/gplay/utils/GPlayHttpClient.kt index 8b222cae76f478fe5fa80186959b522bc8eb5c68..6725e07b1d197d83b151cab6064545fc5227581b 100644 --- a/app/src/main/java/foundation/e/apps/api/gplay/utils/GPlayHttpClient.kt +++ b/app/src/main/java/foundation/e/apps/api/gplay/utils/GPlayHttpClient.kt @@ -21,6 +21,7 @@ package foundation.e.apps.api.gplay.utils import com.aurora.gplayapi.data.models.PlayResponse import com.aurora.gplayapi.network.IHttpClient +import foundation.e.apps.utils.modules.CommonUtilsFunctions import okhttp3.Cache import okhttp3.Headers.Companion.toHeaders import okhttp3.HttpUrl @@ -81,7 +82,11 @@ class GPlayHttpClient @Inject constructor( override fun postAuth(url: String, body: ByteArray): PlayResponse { val requestBody = body.toRequestBody("application/json".toMediaType(), 0, body.size) + val headers = mapOf( + "User-Agent" to CommonUtilsFunctions.getAppBuildInfo() + ) val request = Request.Builder() + .headers(headers.toHeaders()) .url(url) .method(POST, requestBody) .build() diff --git a/app/src/main/java/foundation/e/apps/login/LoginSourceGPlay.kt b/app/src/main/java/foundation/e/apps/login/LoginSourceGPlay.kt index 27222dace42fec78eed7ae93f4fefd76b4c1bca7..03e159d2569fe6722b2e6516a132b783daf4fa69 100644 --- a/app/src/main/java/foundation/e/apps/login/LoginSourceGPlay.kt +++ b/app/src/main/java/foundation/e/apps/login/LoginSourceGPlay.kt @@ -227,9 +227,13 @@ class LoginSourceGPlay @Inject constructor( ResultSupreme.Success(formattedAuthData) } else { val message = - "Validating AuthData failed.\n\n" + + "Validating AuthData failed.\n" + + "Network code: ${playResponse?.code}\n" + "Success: ${playResponse?.isSuccessful}" + - (validityResponse.exception?.let { "\n${it.message}" } ?: "") + playResponse?.errorString?.run { + if (isNotBlank()) "\nError message: $this" + else "" + } ResultSupreme.Error( message, diff --git a/app/src/main/java/foundation/e/apps/login/api/AnonymousLoginApi.kt b/app/src/main/java/foundation/e/apps/login/api/AnonymousLoginApi.kt index 70d795a89a247aa3cffb27f8af79544d7a60bfd9..b75a6bdfd2a5decee936f00adc27d8d72ca07aa9 100644 --- a/app/src/main/java/foundation/e/apps/login/api/AnonymousLoginApi.kt +++ b/app/src/main/java/foundation/e/apps/login/api/AnonymousLoginApi.kt @@ -55,7 +55,7 @@ class AnonymousLoginApi( "Network code: ${response.code}\n" + "Success: ${response.isSuccessful}" + response.errorString.run { - if (isNotBlank()) "\nError message: ${response.errorString}" + if (isNotBlank()) "\nError message: $this" else "" } ) diff --git a/app/src/main/java/foundation/e/apps/utils/modules/CommonUtilsFunctions.kt b/app/src/main/java/foundation/e/apps/utils/modules/CommonUtilsFunctions.kt index adf4d1552c87cb632a778055fd3361daa2c80ce3..6dcf53f9bfd07ee626e71d51959e9a3b8af2b50a 100644 --- a/app/src/main/java/foundation/e/apps/utils/modules/CommonUtilsFunctions.kt +++ b/app/src/main/java/foundation/e/apps/utils/modules/CommonUtilsFunctions.kt @@ -20,7 +20,9 @@ package foundation.e.apps.utils.modules import android.annotation.SuppressLint import android.content.ClipData import android.content.ClipboardManager -import java.lang.Exception +import android.os.Build +import foundation.e.apps.BuildConfig +import org.json.JSONObject object CommonUtilsFunctions { @@ -44,9 +46,21 @@ object CommonUtilsFunctions { try { value = Class.forName("android.os.SystemProperties") .getMethod("get", String::class.java).invoke(null, key) as String - } catch (e: java.lang.Exception) { + } catch (e: Exception) { e.printStackTrace() } return value } + + fun getAppBuildInfo(): String { + val descriptionJson = JSONObject().apply { + put("package", BuildConfig.APPLICATION_ID) + put("version", BuildConfig.VERSION_NAME) + put("device", Build.DEVICE) + put("api", Build.VERSION.SDK_INT) + put("os_version", getSystemProperty("ro.lineage.version")) + put("build_id", BuildConfig.BUILD_ID) + } + return descriptionJson.toString() + } }