Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
fe3f2f7
Remove LoginEmailPasswordFragment
jkmassel Feb 4, 2026
43c9ed4
Remove Login Magic Link Fragments
jkmassel Feb 4, 2026
faf4130
Remove username/password WP.com flow
jkmassel Feb 4, 2026
0272e2e
Remove Google Login
jkmassel Feb 4, 2026
4f95dde
Remove LoginEmailFragment
jkmassel Feb 4, 2026
94e1d90
Remove Login 2FA fragment
jkmassel Feb 4, 2026
684e5d3
Remove SignupMagicLinkFragment
jkmassel Feb 4, 2026
95373f7
Remove orphaned files
jkmassel Feb 4, 2026
a309cf3
Remove the “Find your site address” button
jkmassel Feb 4, 2026
d7ba8c5
Remove SignupEpilogueFragment
jkmassel Feb 4, 2026
c484a91
Remove native account signup code
jkmassel Feb 4, 2026
5abf461
Remove `PostSignupInterstitialActivity`
jkmassel Feb 4, 2026
0b24d06
Remove SmartLock
jkmassel Feb 4, 2026
0fbfb1d
Remove `WOO_LOGIN_MODE`
jkmassel Feb 4, 2026
2a5e080
Don’t show the username/password fields for Application Password sites
jkmassel Feb 4, 2026
a6792f2
In the Me tab, start WP.com login directly
jkmassel Feb 4, 2026
679ffb0
Fix strings
jkmassel Feb 4, 2026
e775cd7
Fix WP.com login UI
jkmassel Feb 4, 2026
482617f
Improve the WP.org login device name
jkmassel Feb 4, 2026
2332de0
Add self-hosted site reauthentication
jkmassel Feb 4, 2026
656bffd
Display more detailed error messages
jkmassel Feb 4, 2026
0548ab8
Properly display timeout errors
jkmassel Feb 4, 2026
e56c141
Fix WP.com sharing login flow
jkmassel Feb 4, 2026
f294dcf
Fix share flow login
jkmassel Feb 4, 2026
c375955
Remove `LoginMode.JETPACK_SELFHOSTED`
jkmassel Feb 4, 2026
25b11e0
Move resources out of login module into app
jkmassel Feb 5, 2026
e761315
Flatten theme heirarchies
jkmassel Feb 5, 2026
dbbeed9
Modernize login prologue
jkmassel Feb 5, 2026
210cfe4
Fix edge-to-edge for login
jkmassel Feb 5, 2026
3d44f86
Automatically load notifications when switching to that tab
jkmassel Feb 5, 2026
ac5774f
Fix Application Password login focus
jkmassel Feb 5, 2026
7c035f7
Remove login module from CI
jkmassel Feb 5, 2026
71694fe
Remove unused styles
jkmassel Feb 5, 2026
09b9698
Add nullable annotation
jkmassel Feb 5, 2026
d483b6e
Remove deprecated Smart Lock Credentials API and play-services-auth
jkmassel Feb 5, 2026
e5a1605
Remove trailing comma in localization.rb array
jkmassel Feb 5, 2026
98a1d80
Fix trailing backslash in run-unit-tests.sh
jkmassel Feb 5, 2026
23f5750
Remove unused imports left over from login lib removal
jkmassel Feb 5, 2026
62506ce
Suppress detekt LongMethod for application password error handling
jkmassel Feb 5, 2026
eefcbf6
Delete unused bg_oval_translucent_stroke_3dp drawable
jkmassel Feb 6, 2026
5118365
Remove references to deleted signup epilogue analytics constants
jkmassel Feb 6, 2026
e48ca76
Fix constructor mismatches in application password test files
jkmassel Feb 6, 2026
61bc33c
Remove unused login prologue resources
jkmassel Feb 6, 2026
06afac0
Restore login_prologue_revamped colors used by wordpress source set
jkmassel Feb 6, 2026
6034734
Remove remaining unused resources from login lib removal
jkmassel Feb 6, 2026
37c3965
Move login prologue revamped colors to wordpress source set
jkmassel Feb 6, 2026
6a2cefc
Use trunk version of wordpress-rs
jkmassel Feb 6, 2026
189d37c
Fix dark/light mode switching issues
jkmassel Feb 6, 2026
69417f0
Add a release note
jkmassel Feb 6, 2026
923eacf
Remove unused View import in LoginActivity
jkmassel Feb 6, 2026
9193fed
Merge branch 'trunk' into remove/login-lib
nbradbury Feb 6, 2026
9e71cd1
Remove stale Google Login warnings from build scripts
jkmassel Feb 26, 2026
5470ac0
Use bodyLarge text style for site address label
jkmassel Feb 26, 2026
eff220d
Make login form scrollable for landscape support
jkmassel Feb 26, 2026
3572325
Fix ANR risk and error handling in WP.com OAuth login
jkmassel Feb 26, 2026
90231cc
Handle null and unknown values in LoginFlow.fromIntent()
jkmassel Feb 26, 2026
361552e
Connect site comparison logic after OAuth login
jkmassel Feb 26, 2026
6745eb0
Persist login flow state in SharedPreferences instead of static fields
jkmassel Feb 26, 2026
c6695c6
Add system bar transparency to login night theme
jkmassel Feb 26, 2026
ad78638
Add @Singleton to LoginAnalyticsTracker provider method
jkmassel Feb 26, 2026
983d935
Call startPostLoginServices and remove dead stub methods
jkmassel Feb 26, 2026
e2d6923
Remove leftover debug Log.e in WPMainActivity
jkmassel Feb 26, 2026
bc91e57
Remove plaintext username from debug logs
jkmassel Feb 26, 2026
257a9f5
Replace deprecated onActivityCreated with onViewCreated
jkmassel Feb 26, 2026
a9c4847
Align ARG_LOGIN_FLOW constant name with its string value
jkmassel Feb 26, 2026
55273b0
Unbind CustomTabsServiceConnection on dispose
jkmassel Feb 26, 2026
73b73bf
Use Channel instead of SharedFlow for discovery URL event
jkmassel Feb 26, 2026
10af360
Suppress overdraw lint warning on login loading layout
jkmassel Feb 26, 2026
904aead
Add tools:keep for flavor-specific login prologue colors
jkmassel Feb 26, 2026
41ac084
Redirect WP.com site addresses to OAuth login flow
jkmassel Feb 26, 2026
9ad40db
Remove old login lib references from e2e tests
jkmassel Feb 26, 2026
01b78c7
Call onFailure when OAuth callback is missing code parameter
jkmassel Feb 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 1 addition & 4 deletions .buildkite/commands/run-unit-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,10 @@ set +e
:libs:processors:test \
:libs:image-editor:testDebugUnitTest \
:libs:fluxc:testDebugUnitTest \
:libs:login:testDebugUnitTest \
koverXmlReportWordpressWasabiDebug \
:libs:processors:koverXmlReportJvm \
:libs:image-editor:koverXmlReportDebug \
:libs:fluxc:koverXmlReportDebug \
:libs:login:koverXmlReportDebug
:libs:fluxc:koverXmlReportDebug
TESTS_EXIT_STATUS=$?
set -e
echo ""
Expand Down Expand Up @@ -49,7 +47,6 @@ declare -A TEST_RESULT_DIRS=(
["processors"]="libs/processors/build/test-results/test"
["image-editor"]="libs/image-editor/build/test-results/testDebugUnitTest"
["fluxc"]="libs/fluxc/build/test-results/testDebugUnitTest"
["login"]="libs/login/build/test-results/testDebugUnitTest"
)

# Create temporary directory for collecting all test results
Expand Down
2 changes: 1 addition & 1 deletion RELEASE-NOTES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

26.6
-----

* [**] Improved the login experience – it now works edge-to-edge and should be easier to read.

26.5
-----
Expand Down
8 changes: 0 additions & 8 deletions WordPress/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,6 @@ android {
// Override these constants in jetpack product flavor to enable/ disable features
buildConfigField "boolean", "ENABLE_SITE_CREATION", "true"
buildConfigField "boolean", "ENABLE_ADD_SELF_HOSTED_SITE", "true"
buildConfigField "boolean", "ENABLE_SIGNUP", "true"
buildConfigField "boolean", "ENABLE_READER", "true"
buildConfigField "boolean", "ENABLE_CREATE_FAB", "true"
buildConfigField "boolean", "ENABLE_FOLLOWED_SITES_SETTINGS", "true"
Expand Down Expand Up @@ -221,7 +220,6 @@ android {
buildConfigField "boolean", "IS_JETPACK_APP", "true"
buildConfigField "boolean", "ENABLE_SITE_CREATION", "true"
buildConfigField "boolean", "ENABLE_ADD_SELF_HOSTED_SITE", "true"
buildConfigField "boolean", "ENABLE_SIGNUP", "true"
buildConfigField "boolean", "ENABLE_READER", "true"
buildConfigField "boolean", "ENABLE_CREATE_FAB", "true"
buildConfigField "boolean", "ENABLE_FOLLOWED_SITES_SETTINGS", "true"
Expand Down Expand Up @@ -394,7 +392,6 @@ dependencies {
strictly libs.wordpress.utils.get().version
}
}
implementation project(":libs:login")
implementation project(":libs:posttypes")
implementation("$gradle.ext.aboutAutomatticBinaryPath:${libs.versions.automattic.about.get()}")

Expand Down Expand Up @@ -436,7 +433,6 @@ dependencies {
implementation(libs.androidx.lifecycle.process)
implementation(libs.android.volley)
implementation(libs.google.play.review)
implementation(libs.google.play.services.auth)
implementation(libs.google.mlkit.barcode.scanning.common)
implementation(libs.google.mlkit.text.recognition)
implementation(libs.google.mlkit.barcode.scanning.main)
Expand Down Expand Up @@ -608,10 +604,6 @@ if (!file("google-services.json").exists()) {
}
}

// Print warning message if example Google services file is used.
if ((file('google-services.json').text) == (file('google-services.json-example').text)) {
println("WARNING: You're using the example google-services.json file. Google login will fail.")
}

tasks.register("printVersionName") {
def versionName = android.defaultConfig.versionName
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import org.junit.Test
import org.wordpress.android.e2e.flows.LoginFlow
import org.wordpress.android.support.BaseTest
import org.wordpress.android.support.ComposeEspressoLink
import org.wordpress.android.support.E2ECredentials

@HiltAndroidTest
class LoginTests : BaseTest() {
Expand All @@ -16,61 +15,11 @@ class LoginTests : BaseTest() {
logoutIfNecessary()
}

@Test
fun e2eLoginWithEmailPassword() {
LoginFlow().chooseContinueWithWpCom(super.mComposeTestRule)
.enterEmailAddress(E2ECredentials.WP_COM_USER_EMAIL)
.enterPassword(E2ECredentials.WP_COM_USER_PASSWORD)
.confirmLogin()

ComposeEspressoLink().unregister()
}

@Test
fun e2eLoginWithPasswordlessAccount() {
LoginFlow().chooseContinueWithWpCom(super.mComposeTestRule)
.enterEmailAddress(E2ECredentials.WP_COM_PASSWORDLESS_USER_EMAIL)
.openMagicLink()
.confirmLogin()

ComposeEspressoLink().unregister()
}

@Test
fun e2eLoginWithSiteAddress() {
// Self-hosted login now uses application passwords via Custom Tabs,
// so this test only verifies navigation to the site address screen
LoginFlow().chooseEnterYourSiteAddress(super.mComposeTestRule)
.enterSiteAddress(E2ECredentials.WP_COM_USER_SITE_ADDRESS)
.enterEmailAddress(E2ECredentials.WP_COM_USER_EMAIL)
.enterPassword(E2ECredentials.WP_COM_USER_PASSWORD)
.confirmLogin()

ComposeEspressoLink().unregister()
}

@Test
fun e2eLoginWithMagicLink() {
try {
LoginFlow().chooseContinueWithWpCom(super.mComposeTestRule)
.enterEmailAddress(E2ECredentials.WP_COM_USER_EMAIL)
.chooseMagicLink()
.openMagicLink()
.confirmLogin()

ComposeEspressoLink().unregister()
} finally {
logoutIfNecessary()
}
}

@Test
fun e2eLoginWithSelfHostedAccount() {
LoginFlow().chooseEnterYourSiteAddress(super.mComposeTestRule)
.enterSiteAddress(E2ECredentials.SELF_HOSTED_USER_SITE_ADDRESS)
.enterUsernameAndPassword(
E2ECredentials.SELF_HOSTED_USER_USERNAME,
E2ECredentials.SELF_HOSTED_USER_PASSWORD
)
.confirmLogin()

ComposeEspressoLink().unregister()
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,113 +1,28 @@
package org.wordpress.android.e2e.flows

import android.app.Activity
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.widget.EditText
import androidx.compose.ui.test.junit4.ComposeTestRule
import androidx.test.core.app.ActivityScenario
import androidx.test.core.app.ApplicationProvider
import androidx.test.espresso.Espresso
import androidx.test.espresso.matcher.ViewMatchers
import org.hamcrest.CoreMatchers
import org.hamcrest.Matchers
import org.wordpress.android.BuildConfig
import org.wordpress.android.R
import org.wordpress.android.e2e.pages.HelpScreen
import org.wordpress.android.e2e.pages.LandingPage.tapContinueWithWpCom
import org.wordpress.android.e2e.pages.LandingPage.tapEnterYourSiteAddress
import org.wordpress.android.support.WPSupportUtils
import org.wordpress.android.login.R as LoginR

class LoginFlow {
fun chooseContinueWithWpCom(composeTestRule: ComposeTestRule?): LoginFlow {
// Login Prologue – We want to Continue with WordPress.com, not a site address
// Note: WP.com login now uses web-based OAuth flow via Custom Tabs
tapContinueWithWpCom(composeTestRule!!)
return this
}

fun enterEmailAddress(emailAddress: String?): LoginFlow {
// Email Address Screen – Fill it in and click "Continue"
// See LoginEmailFragment
WPSupportUtils.populateTextField(R.id.input, emailAddress)
WPSupportUtils.clickOn(LoginR.id.login_continue_button)
return this
}

fun enterPassword(password: String?): LoginFlow {
// Password Screen – Fill it in and click "Continue"
// See LoginEmailPasswordFragment
WPSupportUtils.populateTextField(R.id.input, password)
WPSupportUtils.clickOn(R.id.bottom_button)
return this
}

fun chooseMagicLink(): LoginFlow {
// Password Screen – Choose "Get a login link by email"
// See LoginEmailPasswordFragment
WPSupportUtils.clickOn(LoginR.id.login_get_email_link)
return this
}

fun openMagicLink(): LoginFlow {
// Magic Link Sent Screen – Should see "Check email" button
// See LoginMagicLinkSentFragment
WPSupportUtils.waitForElementToBeDisplayed(LoginR.id.login_open_email_client)

// Follow the magic link to continue login
// Intent is invoked directly rather than through a browser as WireMock is unavailable once in the background
val appVariant = BuildConfig.FLAVOR_app
val intent =
Intent(Intent.ACTION_VIEW, Uri.parse("$appVariant://magic-login?token=valid_token"))
.setPackage(ApplicationProvider.getApplicationContext<Context>().packageName)
ActivityScenario.launch<Activity>(intent)
return this
}

fun enterUsernameAndPassword(username: String, password: String): LoginFlow {
val usernameElement = Espresso.onView(
CoreMatchers.allOf(
ViewMatchers.isDescendantOfA(ViewMatchers.withId(LoginR.id.login_username_row)),
Matchers.instanceOf(EditText::class.java)
)
)
val passwordElement = Espresso.onView(
CoreMatchers.allOf(
ViewMatchers.isDescendantOfA(ViewMatchers.withId(LoginR.id.login_password_row)),
Matchers.instanceOf(EditText::class.java)
)
)
WPSupportUtils.populateTextField(
usernameElement, """
$username

""".trimIndent()
)
WPSupportUtils.populateTextField(
passwordElement, """
$password

""".trimIndent()
)
WPSupportUtils.clickOn(R.id.bottom_button)
return this
}

fun chooseEnterYourSiteAddress(composeTestRule: ComposeTestRule?): LoginFlow {
// Login Prologue – We want to continue with a site address not a WordPress.com account
tapEnterYourSiteAddress(composeTestRule!!)
return this
}

fun enterSiteAddress(siteAddress: String?): LoginFlow {
// Site Address Screen – Fill it in and click "Continue"
// See LoginSiteApplicationPasswordFragment
WPSupportUtils.populateTextField(R.id.input, siteAddress)
WPSupportUtils.clickOn(R.id.bottom_button)
return this
}

fun tapHelp(): HelpScreen {
WPSupportUtils.clickOn(Espresso.onView(ViewMatchers.withId(R.id.help)))
return HelpScreen()
Expand Down
Loading