From 88adf9e8efe45561b20be0b956fa0ac6637c82fe Mon Sep 17 00:00:00 2001 From: ale5000 <15793015+ale5000-git@users.noreply.github.com> Date: Sat, 27 Apr 2024 17:18:40 +0200 Subject: [PATCH 01/16] Update Gradle Wrapper validation action (cherry picked from commit a466945fcddb3a9e3deedd23701e3d2e52dc41d7) --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0bd69ddc39..075ce0fc91 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,7 +21,7 @@ jobs: distribution: "temurin" java-version: "17" - name: "Gradle Wrapper validation" - uses: gradle/wrapper-validation-action@v2 + uses: gradle/actions/wrapper-validation@v3 - name: "Setup Gradle" uses: gradle/actions/setup-gradle@v3 - name: "Setup matchers" From bd3ae7ca62ebc161f796b039436dda92c23bc650 Mon Sep 17 00:00:00 2001 From: ale5000 <15793015+ale5000-git@users.noreply.github.com> Date: Mon, 29 Apr 2024 10:23:06 +0200 Subject: [PATCH 02/16] Add update check for Github actions (#2342) (cherry picked from commit 1e4b53dd09993accbc3f0367975b7de660ebec39) --- .github/dependabot.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..b940a74a4c --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,7 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + open-pull-requests-limit: 1 From 402e03e7d49fc28cc7d7c543daa1cbd3be28e8f6 Mon Sep 17 00:00:00 2001 From: DaVinci9196 <150454414+davinci9196@users.noreply.github.com> Date: Mon, 29 Apr 2024 05:40:19 -0300 Subject: [PATCH 03/16] Auth: Correctly handle permission for requests with token request options (#2322) (cherry picked from commit 510b1e12fb688aab43c51feeab85729373c00c98) --- .../main/kotlin/org/microg/gms/auth/signin/extensions.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/extensions.kt b/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/extensions.kt index 89f2d7291f..783f305fab 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/extensions.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/extensions.kt @@ -62,17 +62,17 @@ fun getServerAuthTokenManager(context: Context, packageName: String, options: Go suspend fun performSignIn(context: Context, packageName: String, options: GoogleSignInOptions?, account: Account, permitted: Boolean = false): GoogleSignInAccount? { val authManager = getOAuthManager(context, packageName, options, account) - if (permitted) authManager.isPermitted = true val authResponse = withContext(Dispatchers.IO) { + if (permitted) authManager.isPermitted = true authManager.requestAuth(true) } if (authResponse.auth == null) return null - + val tag = "AuthSignIn" val scopes = options?.scopes.orEmpty().sortedBy { it.scopeUri } val includeId = scopes.any { it.scopeUri == Scopes.OPENID } || scopes.any { it.scopeUri == Scopes.GAMES_LITE } val includeEmail = scopes.any { it.scopeUri == Scopes.EMAIL } || scopes.any { it.scopeUri == Scopes.GAMES_LITE } val includeProfile = scopes.any { it.scopeUri == Scopes.PROFILE } - Log.d("AuthSignIn", "id token requested: ${options?.isIdTokenRequested == true}, serverClientId = ${options?.serverClientId}") + Log.d(tag, "id token requested: ${options?.isIdTokenRequested == true}, serverClientId = ${options?.serverClientId}, permitted = ${authManager.isPermitted}") val idTokenResponse = getIdTokenManager(context, packageName, options, account)?.let { it.isPermitted = authManager.isPermitted withContext(Dispatchers.IO) { it.requestAuth(true) } From f2340c7f4ae593066aa37aaf79f711bb76c841ca Mon Sep 17 00:00:00 2001 From: Matteo Battistutta Date: Sun, 28 Apr 2024 16:48:04 +0200 Subject: [PATCH 04/16] Add google.sent_time extra to C2DM receive intent (cherry picked from commit 9a16bb9d97e75ab71b44293fd10373b653e1e42b) --- .../src/main/java/org/microg/gms/gcm/GcmConstants.java | 1 + .../src/main/java/org/microg/gms/gcm/McsService.java | 1 + 2 files changed, 2 insertions(+) diff --git a/play-services-basement/src/main/java/org/microg/gms/gcm/GcmConstants.java b/play-services-basement/src/main/java/org/microg/gms/gcm/GcmConstants.java index dd3e09989c..ad10432bcd 100644 --- a/play-services-basement/src/main/java/org/microg/gms/gcm/GcmConstants.java +++ b/play-services-basement/src/main/java/org/microg/gms/gcm/GcmConstants.java @@ -63,6 +63,7 @@ public final class GcmConstants { public static final String EXTRA_SENDER_LEGACY = "legacy.sender"; public static final String EXTRA_SEND_TO = "google.to"; public static final String EXTRA_SEND_FROM = "google.from"; + public static final String EXTRA_SENT_TIME = "google.sent_time"; public static final String EXTRA_SIGNATURE = "sig"; public static final String EXTRA_SUBSCIPTION = "subscription"; public static final String EXTRA_SUBTYPE = "subtype"; diff --git a/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java b/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java index 8ce16fa5be..13437bb68d 100644 --- a/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java +++ b/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java @@ -548,6 +548,7 @@ private void handleAppMessage(DataMessageStanza msg) { intent.setAction(ACTION_C2DM_RECEIVE); intent.putExtra(EXTRA_FROM, msg.from); intent.putExtra(EXTRA_MESSAGE_ID, msg.id); + intent.putExtra(EXTRA_SENT_TIME, msg.sent); if (msg.persistent_id != null) intent.putExtra(EXTRA_MESSAGE_ID, msg.persistent_id); if (msg.token != null) intent.putExtra(EXTRA_COLLAPSE_KEY, msg.token); if (msg.raw_data != null) { From a0a73aec9c058c73593038130fad41d824406b27 Mon Sep 17 00:00:00 2001 From: Marvin W Date: Mon, 29 Apr 2024 10:50:08 +0200 Subject: [PATCH 05/16] Only include sent time when valid, also add TTL (cherry picked from commit 834736f4d8e6bb33adf63679048ba5ac2495e3ac) --- .../src/main/java/org/microg/gms/gcm/McsService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java b/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java index 13437bb68d..b6a5260cbe 100644 --- a/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java +++ b/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java @@ -548,7 +548,8 @@ private void handleAppMessage(DataMessageStanza msg) { intent.setAction(ACTION_C2DM_RECEIVE); intent.putExtra(EXTRA_FROM, msg.from); intent.putExtra(EXTRA_MESSAGE_ID, msg.id); - intent.putExtra(EXTRA_SENT_TIME, msg.sent); + if (msg.sent != null && msg.sent != 0) intent.putExtra(EXTRA_SENT_TIME, msg.sent); + if (msg.ttl != null && msg.ttl != 0) intent.putExtra(EXTRA_TTL, msg.ttl); if (msg.persistent_id != null) intent.putExtra(EXTRA_MESSAGE_ID, msg.persistent_id); if (msg.token != null) intent.putExtra(EXTRA_COLLAPSE_KEY, msg.token); if (msg.raw_data != null) { From a2abc91e0a8b15b63e0201ecf0ed0ee73ac8afaf Mon Sep 17 00:00:00 2001 From: Marvin W Date: Mon, 29 Apr 2024 11:03:03 +0200 Subject: [PATCH 06/16] Push: Do not allow app data to override service fields (cherry picked from commit cf65b1afedc5d782f87bb9e115d8474a9e22df77) --- .../src/main/java/org/microg/gms/gcm/McsService.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java b/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java index b6a5260cbe..ff2f0ce660 100644 --- a/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java +++ b/play-services-core/src/main/java/org/microg/gms/gcm/McsService.java @@ -69,6 +69,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Locale; import java.util.concurrent.atomic.AtomicInteger; import javax.net.ssl.SSLContext; @@ -562,6 +563,10 @@ private void handleAppMessage(DataMessageStanza msg) { intent.addFlags(Intent.FLAG_EXCLUDE_STOPPED_PACKAGES); } for (AppData appData : msg.app_data) { + if (appData.key == null) continue; + String key = appData.key.toLowerCase(Locale.US); + // Some keys are exclusively set by the client and not the app. + if (key.equals(EXTRA_FROM) || (key.startsWith("google.") && !key.startsWith("google.c."))) continue; intent.putExtra(appData.key, appData.value_); } From 90b57c4f9db362b80c006242027f48fcb08658ae Mon Sep 17 00:00:00 2001 From: Marvin W Date: Mon, 29 Apr 2024 11:03:03 +0200 Subject: [PATCH 07/16] Push: Do not allow app data to override service fields (cherry picked from commit cf65b1afedc5d782f87bb9e115d8474a9e22df77) From aafa4391f3cbf95033dfee7de69a5352e61ad29f Mon Sep 17 00:00:00 2001 From: davinci9196 Date: Sun, 7 Apr 2024 12:07:22 +0800 Subject: [PATCH 08/16] Auth: Remove unnecessary prompts (cherry picked from commit 18c73a9632ba23045f3a02b2772186170a29a2e9) --- .../src/main/kotlin/org/microg/gms/auth/signin/extensions.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/extensions.kt b/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/extensions.kt index 783f305fab..7c1623f1d3 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/extensions.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/auth/signin/extensions.kt @@ -55,7 +55,7 @@ fun getServerAuthTokenManager(context: Context, packageName: String, options: Go val serverAuthTokenManager = AuthManager(context, account.name, packageName, "oauth2:server:client_id:${options.serverClientId}:api_scope:${options.scopeUris.joinToString(" ")}") serverAuthTokenManager.includeEmail = if (options.includeEmail) "1" else "0" serverAuthTokenManager.includeProfile = if (options.includeProfile) "1" else "0" - serverAuthTokenManager.setOauth2Prompt(if (options.isForceCodeForRefreshToken) "consent" else "auto") + serverAuthTokenManager.setOauth2Prompt("auto") serverAuthTokenManager.setItCaveatTypes("2") return serverAuthTokenManager } From 582c03a3a987310e62c1adaf6decc82b81dc9ccb Mon Sep 17 00:00:00 2001 From: davinci9196 Date: Tue, 7 May 2024 10:36:16 +0800 Subject: [PATCH 09/16] Auth: update credentials feature version (cherry picked from commit cfb4b9b83bd711084b4e16e318d9224b9090f778) --- .../org/microg/gms/auth/credentials/CredentialsService.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/play-services-core/src/main/kotlin/org/microg/gms/auth/credentials/CredentialsService.kt b/play-services-core/src/main/kotlin/org/microg/gms/auth/credentials/CredentialsService.kt index 6ac52845e1..c779d08167 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/auth/credentials/CredentialsService.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/auth/credentials/CredentialsService.kt @@ -23,7 +23,7 @@ import org.microg.gms.utils.warnOnTransactionIssues private const val TAG = "CredentialService" val FEATURES = arrayOf( - Feature("auth_api_credentials_begin_sign_in", 8), + Feature("auth_api_credentials_begin_sign_in", 9), Feature("auth_api_credentials_sign_out", 2), Feature("auth_api_credentials_authorize", 1), Feature("auth_api_credentials_revoke_access", 1), From d4dbc35069df1492c1812893007256f6b2711ae8 Mon Sep 17 00:00:00 2001 From: WSTxda Date: Wed, 5 Jun 2024 10:45:28 -0300 Subject: [PATCH 10/16] Update gradle dependencies --- build.gradle | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index 52d03667d5..684eb21444 100644 --- a/build.gradle +++ b/build.gradle @@ -7,30 +7,30 @@ buildscript { ext.applicationNamespace = "com.google.android.gms" ext.basePackageName = "app.revanced" - ext.annotationVersion = '1.7.1' - ext.appcompatVersion = '1.6.1' + ext.annotationVersion = '1.8.0' + ext.appcompatVersion = '1.7.0' ext.biometricVersion = '1.1.0' - ext.coreVersion = '1.12.0' - ext.fragmentVersion = '1.6.2' - ext.lifecycleVersion = '2.7.0' + ext.coreVersion = '1.13.1' + ext.fragmentVersion = '1.7.1' + ext.lifecycleVersion = '2.8.1' ext.loaderVersion = '1.1.0' - ext.materialVersion = '1.11.0' + ext.materialVersion = '1.12.0' ext.mediarouterVersion = '1.7.0' ext.multidexVersion = '2.0.1' ext.navigationVersion = '2.7.7' ext.preferenceVersion = '1.2.1' ext.recyclerviewVersion = '1.3.2' - ext.webkitVersion = '1.10.0' + ext.webkitVersion = '1.11.0' ext.coroutineVersion = '1.7.3' - ext.kotlinVersion = '1.9.23' + ext.kotlinVersion = '2.0.0' ext.cronetVersion = '102.5005.125' ext.okhttpVersion = '4.12.0' ext.slf4jVersion = '1.7.36' ext.volleyVersion = '1.2.1' ext.wearableVersion = '0.1.1' - ext.wireVersion = '4.9.8' + ext.wireVersion = '4.9.9' ext.androidBuildGradleVersion = '8.3.0' From fb67ccf85e7ae2fe4e6963ed65954d9bbcfd47a8 Mon Sep 17 00:00:00 2001 From: WSTxda Date: Wed, 5 Jun 2024 11:07:59 -0300 Subject: [PATCH 11/16] Login: Switch to m3 proguess indicator --- .../res/layout/preference_widget_radiobutton.xml | 12 ++++++------ .../src/main/res/layout/login_assistant_loading.xml | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/play-services-core/microg-ui-tools/src/main/res/layout/preference_widget_radiobutton.xml b/play-services-core/microg-ui-tools/src/main/res/layout/preference_widget_radiobutton.xml index 0832e77658..de5c0b7ee5 100644 --- a/play-services-core/microg-ui-tools/src/main/res/layout/preference_widget_radiobutton.xml +++ b/play-services-core/microg-ui-tools/src/main/res/layout/preference_widget_radiobutton.xml @@ -16,9 +16,9 @@ --> \ No newline at end of file + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:clickable="false" + android:focusable="false" /> \ No newline at end of file diff --git a/play-services-core/src/main/res/layout/login_assistant_loading.xml b/play-services-core/src/main/res/layout/login_assistant_loading.xml index 42d276be66..e8b6247b1f 100644 --- a/play-services-core/src/main/res/layout/login_assistant_loading.xml +++ b/play-services-core/src/main/res/layout/login_assistant_loading.xml @@ -20,13 +20,12 @@ android:layout_height="fill_parent" android:orientation="vertical"> - @@ -34,6 +33,7 @@ android:id="@+id/description_text" android:layout_width="fill_parent" android:layout_height="fill_parent" + android:layout_marginTop="18dp" android:layout_marginStart="?android:listPreferredItemPaddingStart" android:layout_marginEnd="?android:listPreferredItemPaddingEnd" android:textAppearance="@style/TextAppearance.AppCompat.Subhead" /> From 735630c5e37685ae724b0f55fdb968a537e35138 Mon Sep 17 00:00:00 2001 From: WSTxda Date: Wed, 5 Jun 2024 11:48:26 -0300 Subject: [PATCH 12/16] Change default group id to ReVanced --- play-services-base/build.gradle | 3 +++ play-services-basement/src/main/AndroidManifest.xml | 2 +- play-services-cast-framework/build.gradle | 4 ++++ play-services-cast-framework/src/main/AndroidManifest.xml | 8 ++++---- play-services-cast/core/build.gradle | 4 ++++ play-services-cast/core/src/main/AndroidManifest.xml | 2 +- play-services-core/src/main/AndroidManifest.xml | 2 +- play-services-gcm/build.gradle | 4 ++++ play-services-gcm/src/main/AndroidManifest.xml | 2 +- .../com/google/android/gms/gcm/GcmListenerService.java | 2 +- .../com/google/android/gms/gcm/GcmNetworkManager.java | 4 ++-- .../main/java/com/google/android/gms/gcm/GcmReceiver.java | 8 ++++---- .../java/com/google/android/gms/gcm/GcmTaskService.java | 4 ++-- play-services-iid/build.gradle | 4 ++++ play-services-iid/src/main/AndroidManifest.xml | 2 +- .../google/android/gms/iid/InstanceIDListenerService.java | 2 +- 16 files changed, 38 insertions(+), 19 deletions(-) diff --git a/play-services-base/build.gradle b/play-services-base/build.gradle index dc7a3f4d52..057c80fd22 100644 --- a/play-services-base/build.gradle +++ b/play-services-base/build.gradle @@ -30,12 +30,15 @@ android { buildFeatures { aidl = true + buildConfig = true } defaultConfig { versionName version minSdkVersion androidMinSdk targetSdkVersion androidTargetSdk + + buildConfigField "String", "BASE_PACKAGE_NAME", "\"$basePackageName\"" } compileOptions { diff --git a/play-services-basement/src/main/AndroidManifest.xml b/play-services-basement/src/main/AndroidManifest.xml index 06561f90b1..442d0642c2 100644 --- a/play-services-basement/src/main/AndroidManifest.xml +++ b/play-services-basement/src/main/AndroidManifest.xml @@ -7,7 +7,7 @@ diff --git a/play-services-cast-framework/build.gradle b/play-services-cast-framework/build.gradle index 267c69ac90..dbc01758bf 100644 --- a/play-services-cast-framework/build.gradle +++ b/play-services-cast-framework/build.gradle @@ -21,6 +21,10 @@ android { versionName version minSdkVersion androidMinSdk targetSdkVersion androidTargetSdk + + manifestPlaceholders = [ + basePackageName: "$basePackageName" + ] } compileOptions { diff --git a/play-services-cast-framework/src/main/AndroidManifest.xml b/play-services-cast-framework/src/main/AndroidManifest.xml index 4fddd28710..3de4f33dd1 100644 --- a/play-services-cast-framework/src/main/AndroidManifest.xml +++ b/play-services-cast-framework/src/main/AndroidManifest.xml @@ -9,21 +9,21 @@ - + diff --git a/play-services-cast/core/build.gradle b/play-services-cast/core/build.gradle index 787acccc56..9a256ed892 100644 --- a/play-services-cast/core/build.gradle +++ b/play-services-cast/core/build.gradle @@ -32,6 +32,10 @@ android { versionName version minSdkVersion androidMinSdk targetSdkVersion androidTargetSdk + + manifestPlaceholders = [ + basePackageName: "$basePackageName" + ] } buildFeatures { diff --git a/play-services-cast/core/src/main/AndroidManifest.xml b/play-services-cast/core/src/main/AndroidManifest.xml index f25508e6ae..d1095e801b 100644 --- a/play-services-cast/core/src/main/AndroidManifest.xml +++ b/play-services-cast/core/src/main/AndroidManifest.xml @@ -15,7 +15,7 @@ - + diff --git a/play-services-core/src/main/AndroidManifest.xml b/play-services-core/src/main/AndroidManifest.xml index ec37cabfac..d1cb995cc5 100644 --- a/play-services-core/src/main/AndroidManifest.xml +++ b/play-services-core/src/main/AndroidManifest.xml @@ -71,7 +71,7 @@ - + diff --git a/play-services-gcm/build.gradle b/play-services-gcm/build.gradle index 60c68023f8..b888c28654 100644 --- a/play-services-gcm/build.gradle +++ b/play-services-gcm/build.gradle @@ -15,6 +15,10 @@ android { versionName version minSdkVersion androidMinSdk targetSdkVersion androidTargetSdk + + manifestPlaceholders = [ + basePackageName: "$basePackageName" + ] } compileOptions { diff --git a/play-services-gcm/src/main/AndroidManifest.xml b/play-services-gcm/src/main/AndroidManifest.xml index 31cd4d453a..cfc1bb78f3 100644 --- a/play-services-gcm/src/main/AndroidManifest.xml +++ b/play-services-gcm/src/main/AndroidManifest.xml @@ -18,7 +18,7 @@ - + diff --git a/play-services-gcm/src/main/java/com/google/android/gms/gcm/GcmListenerService.java b/play-services-gcm/src/main/java/com/google/android/gms/gcm/GcmListenerService.java index ccf99acf61..6d911479a2 100644 --- a/play-services-gcm/src/main/java/com/google/android/gms/gcm/GcmListenerService.java +++ b/play-services-gcm/src/main/java/com/google/android/gms/gcm/GcmListenerService.java @@ -53,7 +53,7 @@ * android:name=".YourGcmListenerService" * android:exported="false" > * - * + * * * */ diff --git a/play-services-gcm/src/main/java/com/google/android/gms/gcm/GcmNetworkManager.java b/play-services-gcm/src/main/java/com/google/android/gms/gcm/GcmNetworkManager.java index a7ee9a8940..fc809ce25d 100644 --- a/play-services-gcm/src/main/java/com/google/android/gms/gcm/GcmNetworkManager.java +++ b/play-services-gcm/src/main/java/com/google/android/gms/gcm/GcmNetworkManager.java @@ -67,9 +67,9 @@ *
  * 
+ *     android:permission="${basePackageName}.android.gms.permission.BIND_NETWORK_TASK_SERVICE" >
  *     
- *        
+ *        
  *     
  * 
  * 
diff --git a/play-services-gcm/src/main/java/com/google/android/gms/gcm/GcmReceiver.java b/play-services-gcm/src/main/java/com/google/android/gms/gcm/GcmReceiver.java index 1df70bccb0..ed3d5b96a1 100644 --- a/play-services-gcm/src/main/java/com/google/android/gms/gcm/GcmReceiver.java +++ b/play-services-gcm/src/main/java/com/google/android/gms/gcm/GcmReceiver.java @@ -44,12 +44,12 @@ *

*

  * 
+ *     android:permission="${basePackageName}.android.c2dm.permission.SEND" >
  *     
- *         
- *         
+ *         
+ *         
  *         
  *     
  * 
diff --git a/play-services-gcm/src/main/java/com/google/android/gms/gcm/GcmTaskService.java b/play-services-gcm/src/main/java/com/google/android/gms/gcm/GcmTaskService.java index 0d790589ca..ba7ca20d55 100644 --- a/play-services-gcm/src/main/java/com/google/android/gms/gcm/GcmTaskService.java +++ b/play-services-gcm/src/main/java/com/google/android/gms/gcm/GcmTaskService.java @@ -38,10 +38,10 @@ * {@link com.google.android.gms.gcm.GcmTaskService#SERVICE_ACTION_EXECUTE_TASK}. Here's an example: *
  *     
  *              
- *                  
+ *                  
  *              
  *     
  * 
diff --git a/play-services-iid/build.gradle b/play-services-iid/build.gradle index d6b9231620..b7e9024f76 100644 --- a/play-services-iid/build.gradle +++ b/play-services-iid/build.gradle @@ -19,6 +19,10 @@ android { versionName version minSdkVersion androidMinSdk targetSdkVersion androidTargetSdk + + manifestPlaceholders = [ + basePackageName: "$basePackageName" + ] } compileOptions { diff --git a/play-services-iid/src/main/AndroidManifest.xml b/play-services-iid/src/main/AndroidManifest.xml index 5a3b72361e..21c850f3d1 100644 --- a/play-services-iid/src/main/AndroidManifest.xml +++ b/play-services-iid/src/main/AndroidManifest.xml @@ -7,6 +7,6 @@ - + diff --git a/play-services-iid/src/main/java/com/google/android/gms/iid/InstanceIDListenerService.java b/play-services-iid/src/main/java/com/google/android/gms/iid/InstanceIDListenerService.java index c7bf61c78e..6e160f6550 100644 --- a/play-services-iid/src/main/java/com/google/android/gms/iid/InstanceIDListenerService.java +++ b/play-services-iid/src/main/java/com/google/android/gms/iid/InstanceIDListenerService.java @@ -43,7 +43,7 @@ *
  * 
  *     
- *         
+ *         
  *     
  * 
* Do not export this service. Instead, keep it private to prevent other apps From b7204d961feef26656b6bcb0d5f0c708e275865f Mon Sep 17 00:00:00 2001 From: WSTxda Date: Wed, 5 Jun 2024 12:49:00 -0300 Subject: [PATCH 13/16] Fix: Handler YouTube Music account manager link - Also fixed YouTube history, data links --- .../src/main/AndroidManifest.xml | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/play-services-core/src/main/AndroidManifest.xml b/play-services-core/src/main/AndroidManifest.xml index d1cb995cc5..20a1768250 100644 --- a/play-services-core/src/main/AndroidManifest.xml +++ b/play-services-core/src/main/AndroidManifest.xml @@ -462,32 +462,27 @@ android:taskAffinity="org.microg.gms.settings" android:theme="@style/AppTheme.Dialog"> - - - - + + + + - - - - - + android:targetActivity="org.microg.gms.ui.MainSettingsActivity" + android:taskAffinity="org.microg.gms.settings"> - - + - - + From 04811fd22f41f7dd60dbe6222da29151a922204c Mon Sep 17 00:00:00 2001 From: WSTxda Date: Wed, 5 Jun 2024 14:40:49 -0300 Subject: [PATCH 14/16] Refactor accounts manager screen - Refactor remove account dialog logic - Display icon, name in accounts list - Use lifecyclescope instead coroutinescope - Others thinks --- .../org/microg/gms/ui/AccountsFragment.kt | 122 +++++++++++------- .../src/main/res/values-pt-rBR/strings.xml | 1 - .../src/main/res/values/strings.xml | 1 - 3 files changed, 74 insertions(+), 50 deletions(-) diff --git a/play-services-core/src/main/java/org/microg/gms/ui/AccountsFragment.kt b/play-services-core/src/main/java/org/microg/gms/ui/AccountsFragment.kt index 2b89e46a57..7ee7d70b35 100644 --- a/play-services-core/src/main/java/org/microg/gms/ui/AccountsFragment.kt +++ b/play-services-core/src/main/java/org/microg/gms/ui/AccountsFragment.kt @@ -1,8 +1,10 @@ package org.microg.gms.ui +import android.accounts.Account import android.accounts.AccountManager import android.content.ActivityNotFoundException import android.content.Intent +import android.graphics.Bitmap import android.os.Bundle import android.provider.Settings import android.util.Log @@ -12,7 +14,8 @@ import android.view.MenuItem import android.view.View import android.widget.Toast import androidx.appcompat.app.AlertDialog -import androidx.core.content.ContextCompat +import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory +import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.preference.Preference import androidx.preference.PreferenceCategory @@ -20,12 +23,13 @@ import androidx.preference.PreferenceFragmentCompat import com.google.android.gms.R import com.google.android.material.color.MaterialColors import com.google.android.material.transition.platform.MaterialSharedAxis -import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.microg.gms.auth.AuthConstants import org.microg.gms.auth.login.LoginActivity +import org.microg.gms.people.DatabaseHelper +import org.microg.gms.people.PeopleManager class AccountsFragment : PreferenceFragmentCompat() { @@ -33,80 +37,75 @@ class AccountsFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { addPreferencesFromResource(R.xml.preferences_accounts) - updateAccountList() + updateSettings() } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) -} + } override fun onResume() { super.onResume() - updateAccountList() + updateSettings() } - private fun updateAccountList() { - val accountManager = AccountManager.get(requireContext()) - val accounts = accountManager.getAccountsByType(AuthConstants.DEFAULT_ACCOUNT_TYPE) - + private fun clearAccountPreferences() { val preferenceCategory = findPreference("prefcat_current_accounts") + preferenceCategory?.removeAll() + } - if (accounts.isEmpty()) { - preferenceCategory?.isVisible = false - } else { - preferenceCategory?.isVisible = true - preferenceCategory?.removeAll() + private fun updateSettings() { + val context = requireContext() - var isFirstAccount = true + val accountManager = AccountManager.get(context) + val accounts = accountManager.getAccountsByType(AuthConstants.DEFAULT_ACCOUNT_TYPE) + + clearAccountPreferences() - accounts.forEach { account -> - val newPreference = Preference(requireContext()).apply { - title = account.name - icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_google_logo) - preferenceCategory?.addPreference(this) + val preferenceCategory = findPreference("prefcat_current_accounts") - setOnPreferenceClickListener { - showConfirmationDialog(account.name) - true - } + accounts.forEach { account -> + val photo = PeopleManager.getOwnerAvatarBitmap(context, account.name, false) + val newPreference = Preference(requireContext()).apply { + title = getDisplayName(account) + summary = account.name + icon = getCircleBitmapDrawable(photo) + key = "account:${account.name}" + order = 0 + + setOnPreferenceClickListener { + showConfirmationDialog(account.name) + true } + } - if (isFirstAccount) { - isFirstAccount = false - newPreference.summary = getString(R.string.pref_accounts_default) + if (photo == null) { + lifecycleScope.launch(Dispatchers.IO) { + withContext(Dispatchers.IO) { + PeopleManager.getOwnerAvatarBitmap(context, account.name, true) + }?.let { newPreference.icon = getCircleBitmapDrawable(it) } } - - preferenceCategory?.addPreference(newPreference) } + + preferenceCategory?.addPreference(newPreference) } } private fun showConfirmationDialog(accountName: String) { - val alertDialogBuilder = AlertDialog.Builder(requireContext(), R.style.AppTheme_Dialog_Account) - alertDialogBuilder.apply { - setTitle(getString(R.string.dialog_title_remove_account)) - setMessage(getString(R.string.dialog_message_remove_account)) - setPositiveButton(getString(R.string.dialog_confirm_button)) { _, _ -> + AlertDialog.Builder(requireContext(), R.style.AppTheme_Dialog_Account) + .setTitle(getString(R.string.dialog_title_remove_account)) + .setMessage(getString(R.string.dialog_message_remove_account)) + .setPositiveButton(getString(R.string.dialog_confirm_button)) { _, _ -> removeAccount(accountName) - val toastMessage = getString(R.string.toast_remove_account_success, accountName) - showToast(toastMessage) - updateAccountList() - } - setNegativeButton(getString(R.string.dialog_cancel_button)) { dialog, _ -> + }.setNegativeButton(getString(R.string.dialog_cancel_button)) { dialog, _ -> dialog.dismiss() - } - create().show() - } - } - - private fun showToast(message: String) { - Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show() + }.create().show() } private fun removeAccount(accountName: String) { - CoroutineScope(Dispatchers.Main).launch { + lifecycleScope.launch(Dispatchers.Main) { val accountManager = AccountManager.get(requireContext()) val accounts = accountManager.getAccountsByType(AuthConstants.DEFAULT_ACCOUNT_TYPE) @@ -117,10 +116,14 @@ class AccountsFragment : PreferenceFragmentCompat() { accountManager.removeAccountExplicitly(it) } if (removedSuccessfully) { - updateAccountList() + updateSettings() + val toastMessage = + getString(R.string.toast_remove_account_success, accountName) + showToast(toastMessage) } } catch (e: Exception) { Log.e(tag, "Error removing account: $accountName", e) + showToast(getString(R.string.toast_remove_account_success)) } } } @@ -168,4 +171,27 @@ class AccountsFragment : PreferenceFragmentCompat() { else -> super.onOptionsItemSelected(item) } } + + private fun getDisplayName(account: Account): String? { + val databaseHelper = DatabaseHelper(requireContext()) + val cursor = databaseHelper.getOwner(account.name) + return try { + if (cursor.moveToNext()) { + cursor.getColumnIndex("display_name").takeIf { it >= 0 } + ?.let { cursor.getString(it) }?.takeIf { it.isNotBlank() } + } else null + } finally { + cursor.close() + databaseHelper.close() + } + } + + private fun getCircleBitmapDrawable(bitmap: Bitmap?) = + if (bitmap != null) RoundedBitmapDrawableFactory.create(resources, bitmap) + .also { it.isCircular = true } else null + + private fun showToast(message: String) { + Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show() + } + } diff --git a/play-services-core/src/main/res/values-pt-rBR/strings.xml b/play-services-core/src/main/res/values-pt-rBR/strings.xml index d5a396ffde..09db6584a5 100644 --- a/play-services-core/src/main/res/values-pt-rBR/strings.xml +++ b/play-services-core/src/main/res/values-pt-rBR/strings.xml @@ -169,7 +169,6 @@ Isso pode levar alguns minutos." Adicionar conta Gerenciador de contas Abrir o gerenciador de contas do dispositivo - Conta padrĂ£o diff --git a/play-services-core/src/main/res/values/strings.xml b/play-services-core/src/main/res/values/strings.xml index af786f0638..446df8a341 100644 --- a/play-services-core/src/main/res/values/strings.xml +++ b/play-services-core/src/main/res/values/strings.xml @@ -180,7 +180,6 @@ This can take a couple of minutes" Add account Manage accounts Open device accounts manager - Default account From 014c7ef3ef4f671621a09cd40f3c4c2eb3a92e60 Mon Sep 17 00:00:00 2001 From: WSTxda Date: Wed, 5 Jun 2024 16:42:41 -0300 Subject: [PATCH 15/16] Make update list in main thread to prevent crash --- .../org/microg/gms/ui/AccountsFragment.kt | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/play-services-core/src/main/java/org/microg/gms/ui/AccountsFragment.kt b/play-services-core/src/main/java/org/microg/gms/ui/AccountsFragment.kt index 7ee7d70b35..49b5234bb3 100644 --- a/play-services-core/src/main/java/org/microg/gms/ui/AccountsFragment.kt +++ b/play-services-core/src/main/java/org/microg/gms/ui/AccountsFragment.kt @@ -61,35 +61,35 @@ class AccountsFragment : PreferenceFragmentCompat() { val accountManager = AccountManager.get(context) val accounts = accountManager.getAccountsByType(AuthConstants.DEFAULT_ACCOUNT_TYPE) - + clearAccountPreferences() val preferenceCategory = findPreference("prefcat_current_accounts") - accounts.forEach { account -> - val photo = PeopleManager.getOwnerAvatarBitmap(context, account.name, false) - val newPreference = Preference(requireContext()).apply { - title = getDisplayName(account) - summary = account.name - icon = getCircleBitmapDrawable(photo) - key = "account:${account.name}" - order = 0 - - setOnPreferenceClickListener { - showConfirmationDialog(account.name) - true + lifecycleScope.launch(Dispatchers.Main) { + accounts.forEach { account -> + val photo = PeopleManager.getOwnerAvatarBitmap(context, account.name, false) + val newPreference = Preference(requireContext()).apply { + title = getDisplayName(account) + summary = account.name + icon = getCircleBitmapDrawable(photo) + key = "account:${account.name}" + order = 0 + + setOnPreferenceClickListener { + showConfirmationDialog(account.name) + true + } } - } - if (photo == null) { - lifecycleScope.launch(Dispatchers.IO) { + if (photo == null) { withContext(Dispatchers.IO) { PeopleManager.getOwnerAvatarBitmap(context, account.name, true) }?.let { newPreference.icon = getCircleBitmapDrawable(it) } } - } - preferenceCategory?.addPreference(newPreference) + preferenceCategory?.addPreference(newPreference) + } } } @@ -193,5 +193,4 @@ class AccountsFragment : PreferenceFragmentCompat() { private fun showToast(message: String) { Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show() } - } From 3413e8755606619b7b12df6f7ef9023966dd9916 Mon Sep 17 00:00:00 2001 From: WSTxda Date: Wed, 5 Jun 2024 17:19:14 -0300 Subject: [PATCH 16/16] Bump GMS version to 24.21.55 --- build.gradle | 6 +++--- .../microg-ui-tools/src/main/res/values/strings.xml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 684eb21444..afc034e7d8 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ buildscript { ext.wearableVersion = '0.1.1' ext.wireVersion = '4.9.9' - ext.androidBuildGradleVersion = '8.3.0' + ext.androidBuildGradleVersion = '8.3.2' ext.androidBuildVersionTools = '34.0.0' @@ -82,8 +82,8 @@ allprojects { apply plugin: 'idea' group = 'org.microg.gms' - ext.appVersionName = 5.3 - ext.appVersionCode = 240914000 + ext.appVersionName = 5.4 + ext.appVersionCode = 242155000 ext.baseVersion = ext.appVersionCode.toString()[0..1] + '.' + ext.appVersionCode.toString()[2..3] + '.' + ext.appVersionCode.toString()[4..5] version = ext.appVersionName+" GMS-"+ext.baseVersion.replaceAll("\\.", "") ext.isReleaseVersion = false diff --git a/play-services-core/microg-ui-tools/src/main/res/values/strings.xml b/play-services-core/microg-ui-tools/src/main/res/values/strings.xml index 4920d351bd..107abf1b42 100644 --- a/play-services-core/microg-ui-tools/src/main/res/values/strings.xml +++ b/play-services-core/microg-ui-tools/src/main/res/values/strings.xml @@ -44,7 +44,7 @@ - 5.3 + 5.4