Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
2d411b9
Remove LoginEmailPasswordFragment
jkmassel Feb 4, 2026
fe7c4e1
Remove Login Magic Link Fragments
jkmassel Feb 4, 2026
473525f
Remove username/password WP.com flow
jkmassel Feb 4, 2026
dfcecf4
Remove Google Login
jkmassel Feb 4, 2026
d909e12
Remove LoginEmailFragment
jkmassel Feb 4, 2026
f77a3af
Remove Login 2FA fragment
jkmassel Feb 4, 2026
6cbdf49
Remove SignupMagicLinkFragment
jkmassel Feb 4, 2026
225dbb2
Remove orphaned files
jkmassel Feb 4, 2026
a755160
Remove the “Find your site address” button
jkmassel Feb 4, 2026
afd8136
Remove SignupEpilogueFragment
jkmassel Feb 4, 2026
6229aa6
Remove native account signup code
jkmassel Feb 4, 2026
a55c573
Remove `PostSignupInterstitialActivity`
jkmassel Feb 4, 2026
928442d
Remove SmartLock
jkmassel Feb 4, 2026
727a87b
Remove `WOO_LOGIN_MODE`
jkmassel Feb 4, 2026
0403805
Don’t show the username/password fields for Application Password sites
jkmassel Feb 4, 2026
c98882f
In the Me tab, start WP.com login directly
jkmassel Feb 4, 2026
e3c82ac
Fix strings
jkmassel Feb 4, 2026
e795115
Fix WP.com login UI
jkmassel Feb 4, 2026
4988fde
Improve the WP.org login device name
jkmassel Feb 4, 2026
9ce4148
Add self-hosted site reauthentication
jkmassel Feb 4, 2026
6f2a9f8
Display more detailed error messages
jkmassel Feb 4, 2026
49ad0a1
Properly display timeout errors
jkmassel Feb 4, 2026
c569cd6
Fix WP.com sharing login flow
jkmassel Feb 4, 2026
7e2f5ca
Fix share flow login
jkmassel Feb 4, 2026
bb1f97f
Remove `LoginMode.JETPACK_SELFHOSTED`
jkmassel Feb 4, 2026
8c522e0
Move resources out of login module into app
jkmassel Feb 5, 2026
e367463
Flatten theme heirarchies
jkmassel Feb 5, 2026
46e61d4
Modernize login prologue
jkmassel Feb 5, 2026
5f61db6
Fix edge-to-edge for login
jkmassel Feb 5, 2026
2ce529a
Automatically load notifications when switching to that tab
jkmassel Feb 5, 2026
f99b3a4
Fix Application Password login focus
jkmassel Feb 5, 2026
f48104f
Remove login module from CI
jkmassel Feb 5, 2026
37f2cbf
Remove unused styles
jkmassel Feb 5, 2026
83661a7
Add nullable annotation
jkmassel Feb 5, 2026
ad40f5e
Remove deprecated Smart Lock Credentials API and play-services-auth
jkmassel Feb 5, 2026
ce03b26
Remove trailing comma in localization.rb array
jkmassel Feb 5, 2026
d250e83
Fix trailing backslash in run-unit-tests.sh
jkmassel Feb 5, 2026
46df25d
Remove unused imports left over from login lib removal
jkmassel Feb 5, 2026
4050925
Suppress detekt LongMethod for application password error handling
jkmassel Feb 5, 2026
c65ae52
Delete unused bg_oval_translucent_stroke_3dp drawable
jkmassel Feb 6, 2026
a255e9f
Remove references to deleted signup epilogue analytics constants
jkmassel Feb 6, 2026
a4d3ddb
Fix constructor mismatches in application password test files
jkmassel Feb 6, 2026
6bbb453
Remove unused login prologue resources
jkmassel Feb 6, 2026
f21f24c
Restore login_prologue_revamped colors used by wordpress source set
jkmassel Feb 6, 2026
cb1beec
Remove remaining unused resources from login lib removal
jkmassel Feb 6, 2026
ff47e3f
Move login prologue revamped colors to wordpress source set
jkmassel Feb 6, 2026
843a032
Use trunk version of wordpress-rs
jkmassel Feb 6, 2026
de8b5e4
Fix dark/light mode switching issues
jkmassel Feb 6, 2026
ed1ceb1
Add a release note
jkmassel Feb 6, 2026
7092ff7
Remove unused View import in LoginActivity
jkmassel Feb 6, 2026
f25048d
Remove stale Google Login warnings from build scripts
jkmassel Feb 26, 2026
a22ccd3
Use bodyLarge text style for site address label
jkmassel Feb 26, 2026
7b4a14a
Make login form scrollable for landscape support
jkmassel Feb 26, 2026
46c5a61
Fix ANR risk and error handling in WP.com OAuth login
jkmassel Feb 26, 2026
8144ecf
Handle null and unknown values in LoginFlow.fromIntent()
jkmassel Feb 26, 2026
bbf1f1d
Connect site comparison logic after OAuth login
jkmassel Feb 26, 2026
ed028bf
Persist login flow state in SharedPreferences instead of static fields
jkmassel Feb 26, 2026
a487a96
Add system bar transparency to login night theme
jkmassel Feb 26, 2026
1af77db
Add @Singleton to LoginAnalyticsTracker provider method
jkmassel Feb 26, 2026
fd749a0
Call startPostLoginServices and remove dead stub methods
jkmassel Feb 26, 2026
c755bb5
Remove leftover debug Log.e in WPMainActivity
jkmassel Feb 26, 2026
e3e3f0c
Remove plaintext username from debug logs
jkmassel Feb 26, 2026
5596c27
Replace deprecated onActivityCreated with onViewCreated
jkmassel Feb 26, 2026
6434716
Align ARG_LOGIN_FLOW constant name with its string value
jkmassel Feb 26, 2026
4e1f1fc
Unbind CustomTabsServiceConnection on dispose
jkmassel Feb 26, 2026
31e2d82
Use Channel instead of SharedFlow for discovery URL event
jkmassel Feb 26, 2026
60949a8
Suppress overdraw lint warning on login loading layout
jkmassel Feb 26, 2026
356ffb1
Add tools:keep for flavor-specific login prologue colors
jkmassel Feb 26, 2026
3ecc506
Redirect WP.com site addresses to OAuth login flow
jkmassel Feb 26, 2026
29a415f
Remove old login lib references from e2e tests
jkmassel Feb 26, 2026
29158a0
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 @@ -6,7 +6,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