Conversation
Generated by 🚫 Danger |
bb475b9 to
7c4bb28
Compare
|
|
|
|
WordPress/src/main/java/org/wordpress/android/ui/accounts/LoginActivity.java
Fixed
Show fixed
Hide fixed
1e18626 to
5813d53
Compare
Project manifest changes for WordPressThe following changes in the --- ./build/reports/diff_manifest/WordPress/jetpackVanillaRelease/base_manifest.txt 2026-02-06 20:12:15.941440979 +0000
+++ ./build/reports/diff_manifest/WordPress/jetpackVanillaRelease/head_manifest.txt 2026-02-06 20:12:52.821548757 +0000
@@ -401,7 +401,8 @@
<activity
android:name="org.wordpress.android.ui.accounts.LoginActivity"
android:exported="true"
- android:theme="@style/LoginTheme.TransparentSystemBars"
+ android:launchMode="singleTop"
+ android:theme="@style/LoginTheme"
android:windowSoftInputMode="adjustResize" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@@ -417,7 +418,7 @@
<activity
android:name="org.wordpress.android.ui.accounts.applicationpassword.ApplicationPasswordLoginActivity"
android:exported="true"
- android:theme="@style/LoginTheme.TransparentSystemBars"
+ android:theme="@style/LoginTheme"
android:windowSoftInputMode="adjustResize" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@@ -458,14 +459,6 @@
</intent-filter>
</activity>
<activity
- android:name="org.wordpress.android.ui.accounts.SignupEpilogueActivity"
- android:label="@string/signup_epilogue_screen_title"
- android:theme="@style/LoginTheme" />
- <activity
- android:name="org.wordpress.android.ui.accounts.PostSignupInterstitialActivity"
- android:label="@string/post_signup_interstitial_title"
- android:theme="@style/LoginTheme" />
- <activity
android:name="org.wordpress.android.ui.sitecreation.SiteCreationActivity"
android:theme="@style/WordPress.NoActionBar"
android:windowSoftInputMode="adjustResize" />
@@ -1121,11 +1114,6 @@
android:label="Installation Referrer Service"
android:permission="android.permission.BIND_JOB_SERVICE" />
<service
- android:name="org.wordpress.android.login.LoginWpcomService"
- android:exported="false"
- android:foregroundServiceType="shortService"
- android:label="Login to WPCOM Service" />
- <service
android:name="org.wordpress.android.ui.sitecreation.services.SiteCreationService"
android:exported="false"
android:foregroundServiceType="dataSync"
@@ -1541,37 +1529,6 @@
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
- <service
- android:name="androidx.credentials.playservices.CredentialProviderMetadataHolder"
- android:enabled="true"
- android:exported="false" >
- <meta-data
- android:name="androidx.credentials.CREDENTIAL_PROVIDER_KEY"
- android:value="androidx.credentials.playservices.CredentialProviderPlayServicesImpl" />
- </service>
-
- <activity
- android:name="androidx.credentials.playservices.HiddenActivity"
- android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"
- android:enabled="true"
- android:exported="false"
- android:fitsSystemWindows="true"
- android:theme="@style/Theme.Hidden" >
- </activity>
- <activity
- android:name="com.google.android.gms.auth.api.signin.internal.SignInHubActivity"
- android:excludeFromRecents="true"
- android:exported="false"
- android:theme="@android:style/Theme.Translucent.NoTitleBar" />
- <!--
- Service handling Google Sign-In user revocation. For apps that do not integrate with
- Google Sign-In, this service will never be started.
- -->
- <service
- android:name="com.google.android.gms.auth.api.signin.RevocationBoundService"
- android:exported="true"
- android:permission="com.google.android.gms.auth.api.signin.permission.REVOCATION_NOTIFICATION"
- android:visibleToInstantApps="true" />
<activity
android:name="com.google.android.gms.common.api.GoogleApiActivity"Go to https://buildkite.com/automattic/wordpress-android/builds/24871/canvas?sid=019c348f-a59d-4b45-a963-e8e07753731e, click on the |
Project manifest changes for WordPressThe following changes in the --- ./build/reports/diff_manifest/WordPress/wordpressVanillaRelease/base_manifest.txt 2026-02-06 20:12:06.198938905 +0000
+++ ./build/reports/diff_manifest/WordPress/wordpressVanillaRelease/head_manifest.txt 2026-02-06 20:12:40.469130807 +0000
@@ -207,7 +207,8 @@
<activity
android:name="org.wordpress.android.ui.accounts.LoginActivity"
android:exported="true"
- android:theme="@style/LoginTheme.TransparentSystemBars"
+ android:launchMode="singleTop"
+ android:theme="@style/LoginTheme"
android:windowSoftInputMode="adjustResize" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@@ -223,7 +224,7 @@
<activity
android:name="org.wordpress.android.ui.accounts.applicationpassword.ApplicationPasswordLoginActivity"
android:exported="true"
- android:theme="@style/LoginTheme.TransparentSystemBars"
+ android:theme="@style/LoginTheme"
android:windowSoftInputMode="adjustResize" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@@ -264,14 +265,6 @@
</intent-filter>
</activity>
<activity
- android:name="org.wordpress.android.ui.accounts.SignupEpilogueActivity"
- android:label="@string/signup_epilogue_screen_title"
- android:theme="@style/LoginTheme" />
- <activity
- android:name="org.wordpress.android.ui.accounts.PostSignupInterstitialActivity"
- android:label="@string/post_signup_interstitial_title"
- android:theme="@style/LoginTheme" />
- <activity
android:name="org.wordpress.android.ui.sitecreation.SiteCreationActivity"
android:theme="@style/WordPress.NoActionBar"
android:windowSoftInputMode="adjustResize" />
@@ -1094,11 +1087,6 @@
android:label="Installation Referrer Service"
android:permission="android.permission.BIND_JOB_SERVICE" />
<service
- android:name="org.wordpress.android.login.LoginWpcomService"
- android:exported="false"
- android:foregroundServiceType="shortService"
- android:label="Login to WPCOM Service" />
- <service
android:name="org.wordpress.android.ui.sitecreation.services.SiteCreationService"
android:exported="false"
android:foregroundServiceType="dataSync"
@@ -1514,37 +1502,6 @@
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
- <service
- android:name="androidx.credentials.playservices.CredentialProviderMetadataHolder"
- android:enabled="true"
- android:exported="false" >
- <meta-data
- android:name="androidx.credentials.CREDENTIAL_PROVIDER_KEY"
- android:value="androidx.credentials.playservices.CredentialProviderPlayServicesImpl" />
- </service>
-
- <activity
- android:name="androidx.credentials.playservices.HiddenActivity"
- android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"
- android:enabled="true"
- android:exported="false"
- android:fitsSystemWindows="true"
- android:theme="@style/Theme.Hidden" >
- </activity>
- <activity
- android:name="com.google.android.gms.auth.api.signin.internal.SignInHubActivity"
- android:excludeFromRecents="true"
- android:exported="false"
- android:theme="@android:style/Theme.Translucent.NoTitleBar" />
- <!--
- Service handling Google Sign-In user revocation. For apps that do not integrate with
- Google Sign-In, this service will never be started.
- -->
- <service
- android:name="com.google.android.gms.auth.api.signin.RevocationBoundService"
- android:exported="true"
- android:permission="com.google.android.gms.auth.api.signin.permission.REVOCATION_NOTIFICATION"
- android:visibleToInstantApps="true" />
<activity
android:name="com.google.android.gms.common.api.GoogleApiActivity"Go to https://buildkite.com/automattic/wordpress-android/builds/24871/canvas?sid=019c348f-a59d-4a1f-88db-254c825c2d1a, click on the |
Project dependencies changeslist- Removed Dependencies
androidx.credentials:credentials:1.2.0
androidx.credentials:credentials-play-services-auth:1.2.0
com.google.android.gms:play-services-auth:20.7.0
com.google.android.gms:play-services-auth-api-phone:18.0.1
com.google.android.gms:play-services-auth-base:18.0.4
com.google.android.gms:play-services-fido:20.1.0
com.google.android.libraries.identity.googleid:googleid:1.1.0tree++--- com.gravatar:gravatar:2.5.0
+| +--- org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.21 -> 2.2.10 (*)
+| +--- com.squareup.moshi:moshi:1.15.1
+| | +--- com.squareup.okio:okio:3.7.0 -> 3.16.4 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.21 -> 1.9.24 (*)
+| +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.10.2 (*)
+| +--- com.squareup.okhttp3:okhttp:4.12.0 -> 5.3.2 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.2.21 (*)
++--- com.google.android.play:app-update:2.1.0
+| +--- com.google.android.gms:play-services-basement:18.1.0 -> 18.4.0
+| | +--- androidx.collection:collection:1.0.0 -> 1.5.0 (*)
+| | +--- androidx.core:core:1.2.0 -> 1.16.0 (*)
+| | \--- androidx.fragment:fragment:1.1.0 -> 1.8.9 (*)
+| \--- com.google.android.gms:play-services-tasks:18.0.2 -> 18.2.0
+| \--- com.google.android.gms:play-services-basement:18.4.0 (*)
++--- com.google.mlkit:barcode-scanning-common:17.0.0
+| \--- com.google.mlkit:vision-common:17.0.0 -> 17.3.0
+| \--- com.google.android.gms:play-services-base:18.1.0 -> 18.5.0
+| +--- androidx.collection:collection:1.0.0 -> 1.5.0 (*)
+| +--- androidx.core:core:1.2.0 -> 1.16.0 (*)
+| +--- androidx.fragment:fragment:1.0.0 -> 1.8.9 (*)
+| +--- com.google.android.gms:play-services-basement:18.4.0 (*)
+| \--- com.google.android.gms:play-services-tasks:18.2.0 (*)
++--- com.zendesk:support:5.5.2
+| \--- com.google.dagger:dagger-android:2.48.1 -> 2.58
+| +--- com.google.dagger:dagger:2.58 (*)
+| +--- com.google.dagger:dagger-lint-aar:2.58
+| +--- androidx.annotation:annotation:1.7.1 -> 1.9.1 (*)
+| \--- javax.inject:javax.inject:1
+\--- com.google.dagger:dagger-android-support:2.58
+ +--- com.google.dagger:dagger:2.58 (*)
+ +--- com.google.dagger:dagger-android:2.58 (*)
+ +--- com.google.dagger:dagger-lint-aar:2.58
+ +--- androidx.activity:activity:1.5.1 -> 1.10.1 (*)
+ +--- androidx.annotation:annotation:1.7.1 -> 1.9.1 (*)
+ +--- androidx.appcompat:appcompat:1.3.1 -> 1.7.1 (*)
+ +--- androidx.fragment:fragment:1.5.1 -> 1.8.9 (*)
+ +--- androidx.lifecycle:lifecycle-common:2.5.1 -> 2.10.0 (*)
+ +--- androidx.lifecycle:lifecycle-viewmodel:2.5.1 -> 2.10.0 (*)
+ +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1 -> 2.10.0 (*)
+ \--- javax.inject:javax.inject:1
-+--- project :libs:login
-| +--- com.google.android.gms:play-services-auth:20.4.1 -> 20.7.0
-| | +--- androidx.fragment:fragment:1.0.0 -> 1.8.9 (*)
-| | +--- androidx.loader:loader:1.0.0 (*)
-| | +--- com.google.android.gms:play-services-auth-api-phone:18.0.1
-| | | +--- com.google.android.gms:play-services-base:18.0.1 -> 18.5.0
-| | | | +--- androidx.collection:collection:1.0.0 -> 1.5.0 (*)
-| | | | +--- androidx.core:core:1.2.0 -> 1.16.0 (*)
-| | | | +--- androidx.fragment:fragment:1.0.0 -> 1.8.9 (*)
-| | | | +--- com.google.android.gms:play-services-basement:18.4.0
-| | | | | +--- androidx.collection:collection:1.0.0 -> 1.5.0 (*)
-| | | | | +--- androidx.core:core:1.2.0 -> 1.16.0 (*)
-| | | | | \--- androidx.fragment:fragment:1.1.0 -> 1.8.9 (*)
-| | | | \--- com.google.android.gms:play-services-tasks:18.2.0
-| | | | \--- com.google.android.gms:play-services-basement:18.4.0 (*)
-| | | +--- com.google.android.gms:play-services-basement:18.0.0 -> 18.4.0 (*)
-| | | \--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.2.0 (*)
-| | +--- com.google.android.gms:play-services-auth-base:18.0.4
-| | | +--- androidx.collection:collection:1.0.0 -> 1.5.0 (*)
-| | | +--- com.google.android.gms:play-services-base:18.0.1 -> 18.5.0 (*)
-| | | +--- com.google.android.gms:play-services-basement:18.0.0 -> 18.4.0 (*)
-| | | \--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.2.0 (*)
-| | +--- com.google.android.gms:play-services-base:18.0.1 -> 18.5.0 (*)
-| | +--- com.google.android.gms:play-services-basement:18.2.0 -> 18.4.0 (*)
-| | +--- com.google.android.gms:play-services-fido:20.0.1 -> 20.1.0
-| | | +--- com.google.android.gms:play-services-base:18.0.1 -> 18.5.0 (*)
-| | | +--- com.google.android.gms:play-services-basement:18.0.0 -> 18.4.0 (*)
-| | | \--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.2.0 (*)
-| | \--- com.google.android.gms:play-services-tasks:18.0.1 -> 18.2.0 (*)
-| +--- org.jetbrains.kotlin:kotlin-stdlib:2.2.10 -> 2.2.21 (*)
-| +--- org.wordpress:utils:3.14.0 (*)
-| +--- com.gravatar:gravatar:2.5.0
-| | +--- org.jetbrains.kotlin:kotlin-parcelize-runtime:2.0.21 -> 2.2.10 (*)
-| | +--- com.squareup.moshi:moshi:1.15.1
-| | | +--- com.squareup.okio:okio:3.7.0 -> 3.16.4 (*)
-| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.21 -> 1.9.24 (*)
-| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3 -> 1.10.2 (*)
-| | +--- com.squareup.okhttp3:okhttp:4.12.0 -> 5.3.2 (*)
-| | \--- org.jetbrains.kotlin:kotlin-stdlib:2.0.21 -> 2.2.21 (*)
-| +--- androidx.appcompat:appcompat:1.7.1 (*)
-| +--- androidx.constraintlayout:constraintlayout:2.2.1 (*)
-| +--- com.google.android.material:material:1.12.0 (*)
-| +--- androidx.core:core:1.16.0 (*)
-| +--- project :libs:fluxc (*)
-| +--- com.github.bumptech.glide:glide:5.0.5 (*)
-| +--- androidx.credentials:credentials:1.2.0
-| | +--- androidx.annotation:annotation:1.5.0 -> 1.9.1 (*)
-| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.2.21 (*)
-| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1 -> 1.10.2 (*)
-| | \--- androidx.credentials:credentials-play-services-auth:1.2.0 (c)
-| +--- androidx.credentials:credentials-play-services-auth:1.2.0
-| | +--- androidx.credentials:credentials:1.2.0 (*)
-| | +--- com.google.android.gms:play-services-auth:20.7.0 (*)
-| | +--- com.google.android.gms:play-services-fido:20.1.0 (*)
-| | +--- com.google.android.libraries.identity.googleid:googleid:1.1.0
-| | | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.0 -> 2.2.21 (*)
-| | | \--- org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0 -> 1.9.24 (*)
-| | +--- org.jetbrains.kotlin:kotlin-stdlib:1.8.22 -> 2.2.21 (*)
-| | \--- androidx.credentials:credentials:1.2.0 (c)
-| +--- com.google.dagger:dagger:2.58 (*)
-| \--- com.google.dagger:dagger-android-support:2.58
-| +--- com.google.dagger:dagger:2.58 (*)
-| +--- com.google.dagger:dagger-android:2.58
-| | +--- com.google.dagger:dagger:2.58 (*)
-| | +--- com.google.dagger:dagger-lint-aar:2.58
-| | +--- androidx.annotation:annotation:1.7.1 -> 1.9.1 (*)
-| | \--- javax.inject:javax.inject:1
-| +--- com.google.dagger:dagger-lint-aar:2.58
-| +--- androidx.activity:activity:1.5.1 -> 1.10.1 (*)
-| +--- androidx.annotation:annotation:1.7.1 -> 1.9.1 (*)
-| +--- androidx.appcompat:appcompat:1.3.1 -> 1.7.1 (*)
-| +--- androidx.fragment:fragment:1.5.1 -> 1.8.9 (*)
-| +--- androidx.lifecycle:lifecycle-common:2.5.1 -> 2.10.0 (*)
-| +--- androidx.lifecycle:lifecycle-viewmodel:2.5.1 -> 2.10.0 (*)
-| +--- androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1 -> 2.10.0 (*)
-| \--- javax.inject:javax.inject:1
-+--- com.gravatar:gravatar:2.5.0 (*)
-+--- com.google.android.play:app-update:2.1.0
-| +--- com.google.android.gms:play-services-basement:18.1.0 -> 18.4.0 (*)
-| \--- com.google.android.gms:play-services-tasks:18.0.2 -> 18.2.0 (*)
-+--- com.google.android.gms:play-services-auth:20.4.1 -> 20.7.0 (*)
-+--- com.google.mlkit:barcode-scanning-common:17.0.0
-| \--- com.google.mlkit:vision-common:17.0.0 -> 17.3.0
-| \--- com.google.android.gms:play-services-base:18.1.0 -> 18.5.0 (*)
-+--- com.zendesk:support:5.5.2
-| \--- com.google.dagger:dagger-android:2.48.1 -> 2.58 (*)
-\--- com.google.dagger:dagger-android-support:2.58 (*) |
011be66 to
014a615
Compare
| // JETPACK_LOGIN_ONLY = JPAndroid | ||
| LoginMode loginMode = getLoginMode(); | ||
| if ((mLoginHelper.isLoggedIn()) && (loginMode == LoginMode.FULL || loginMode == LoginMode.JETPACK_LOGIN_ONLY)) { | ||
| LoginFlow loginFlow = getLoginFlow(); |
Check notice
Code scanning / Android Lint
Nullable/NonNull annotation missing on field Note
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## trunk #22564 +/- ##
==========================================
- Coverage 38.18% 38.17% -0.01%
==========================================
Files 2237 2225 -12
Lines 111318 111039 -279
Branches 15579 15544 -35
==========================================
- Hits 42505 42391 -114
+ Misses 65272 65105 -167
- Partials 3541 3543 +2 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
ae47f90 to
51907de
Compare
IINM, this is a server security feature for requests flagged as suspicious. |
|
Testing went well overall for me. I successfully performed the PRs testing instructions. I did not encounter layout regressions. I noted a few oddities related to when triggering the re-authentication flow via opening the editor that I'll detail below. From the editor, approving the authentication appears to not succeed. Additional requests are displayed as you continue to tap Approve. I imagine the authentication does succeed, but the structure of the editor initialization results in repeated requests from concurrent logic. This occurs for both Gutenberg Mobile and GutenbergKit; Aztec does not trigger re-authorization at all. After approving the authorization, exiting and re-opening the editor results in success. Editor repeated auth approve
editor-repeat-auth-approve.mp4Similarly, from the editor, tapping Deny results in continued requests. Navigating backwards can lead to an empty white screen. Further backwards navigation can arrive to the top-level app, where one can navigate to views that are inoperable due to lack of authorization. There is no prompt to re-authenticate, but closing and re-opening the app will correctly prompt for login. Editor repeat auth deny
editor-repeat-auth-deny.mp4Editor repeat auth deny continuededitor-repeat-auth-deny-impact.mp4Neither of these feel significant. The latter feels more like an edge case. Addressing the former would be nice, but I'm unsure how complex the logic leading to this outcome may be. |
dcalhoun
left a comment
There was a problem hiding this comment.
The quantity of changes makes it difficult to assess every line. At a high level, the changes look good. I left one suggestion regarding text size.
Also, I noted the self-hosted login form is unusable for smaller device in landscape. The keyboard covers the input and the button is collapsed and illegible. Ideally, we could improve that layout for that context.
|
|
||
| Text( | ||
| text = stringResource(R.string.enter_site_address), | ||
| style = MaterialTheme.typography.headlineSmall, |
| val userDeviceName = DeviceUtils.getInstance().getDeviceName(context) | ||
| val (appName, successUrl) = if (buildConfigWrapper.isJetpackApp) { | ||
| context.getString(R.string.application_password_app_name_jetpack, userDeviceName) to | ||
| JETPACK_SUCCESS_URL | ||
| } else { | ||
| appName = ANDROID_WORDPRESS_CLIENT | ||
| successUrl = WORDPRESS_SUCCESS_URL | ||
| context.getString(R.string.application_password_app_name_wordpress, userDeviceName) to | ||
| WORDPRESS_SUCCESS_URL | ||
| } | ||
|
|
|
Version |
Google Login no longer exists in the app, so these warnings about it not working are no longer relevant. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The headlineSmall style competes with the TopAppBar title. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Flatten the two-column layout into a single scrollable column so the text field and button don't get crushed when the keyboard opens on small devices in landscape mode. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace runBlocking with async coroutine scope to avoid blocking the main thread during token exchange (Critical #1) - Use dedicated CoroutineScope instead of Dispatchers.IO so dispose() only cancels this helper's coroutines (Critical #2) - Propagate login errors to the caller via Consumer<Exception> instead of swallowing them - Show error state on the loading screen with a retry button instead of silently failing - Cancel coroutine scope in LoginActivity.onDestroy() Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
getStringExtra() can return null even when hasExtra() is true, and valueOf() throws for old enum names that no longer exist. Fall back to PROLOGUE safely in both cases. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
After fetching sites post-OAuth login, route back through loggedInAndFinish() so FINISH_WITH_SITE flows correctly return the newly added site ID to the calling activity. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Static fields don't survive process death and can cause issues in multi-window mode. Move sPendingLoginFlow and sIsShareFlowPending to AppPrefs with dedicated getter/setter methods. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The light theme had transparent status/navigation bars but the night theme was missing these attributes, causing opaque system bars in dark mode. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The class had @singleton but the Dagger provider didn't, so a new instance was created on every injection. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
startPostLoginServices was defined but never called, so Reader tags and notification services weren't started after login. Also removes unused startOver and gotConnectedSiteInfo methods. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The hasApiRestUsername boolean check is sufficient for debugging without exposing the actual credential value. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move activity title setup into onViewCreated, removing the suppressed deprecation warning. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The service was bound but never unbound, causing a minor resource leak. Now unbinds when the helper is disposed in onDestroy. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Channel guarantees the event is buffered and consumed exactly once, even if the collector starts slightly after emission. Safer than SharedFlow(replay=0) for one-shot navigation events. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The window background from LoginTheme triggers a false positive overdraw warning since the ConstraintLayout itself has no explicit background. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Android Lint can't trace cross-flavor resource usage, so it flags these colors as unused. They're referenced by Compose code in the wordpress flavor. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
305359f to
904aead
Compare
When a user enters a WordPress.com site address in the site address field, redirect them to the WP.com OAuth flow instead of proceeding with application password authorization. This ensures WP.com account state is properly established so the Me tab shows the user's profile. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The LoginFlow e2e helper imported resources from the deleted login library and referenced views (login_username_row, login_password_row) that no longer exist. Remove the dead enterUsernameAndPassword and enterSiteAddress methods since login forms are now Compose-based and WP.com login uses OAuth via Custom Tabs. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Previously tryLoginWithDataString silently returned if the code query parameter was absent, leaving the caller on a loading screen indefinitely. Now reports the error via the onFailure callback. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
🤖 Build Failure AnalysisThis build has failures. Claude has analyzed them - check the build annotations for details. |







Description
This PR removes the legacy login library and fixes some login flow weirdness by:
Removed legacy login components:
LoginMode.JETPACK_SELFHOSTEDandWOO_LOGIN_MODEModernized login UI:
LoginSiteApplicationPasswordFragmentto Jetpack ComposeLoginPrologueRevampedFragmentwith edge-to-edge support for Android 15+LoginActivityandApplicationPasswordLoginActivityImproved user experience:
Code cleanup:
Screenshots:
Testing instructions
WP.com Login:
Self-hosted Login:
Edge-to-edge (Android 15+):
Notifications reload:
Reauthentication (self-hosted):
Reauthentication (WP.com):