Skip to content

Commit 9035f6d

Browse files
jkmasselclaude
andcommitted
Extract :libs:core-ui module from :WordPress
Move foundational UI components, Compose theme, ViewModel base classes, and shared utilities into the new core-ui library module. This is the first step toward modularizing the codebase to improve compilation and linting speed. Moved to core-ui: - Compose theme (AppThemeM3, AppColor, JetpackColors) - Compose components (buttons, cards, text, dialogs, etc.) - Compose utilities (ComposeUtils, MarkdownUtils, SpannedTextUtils, etc.) - UI utilities (UiHelpers, UiString, UiDimen, ListItemInteraction, etc.) - ViewModel base classes (ScopedViewModel, Event, ResourceProvider, etc.) - Coroutine dispatcher constants (APPLICATION_SCOPE, UI_THREAD, etc.) Notable changes: - AppThemeM3 now uses `LocalIsJetpackApp` CompositionLocal instead of BuildConfig.IS_JETPACK_APP, decoupling it from the app module - UiHelpers animation methods moved to UiHelpersExt.kt in :WordPress (they depend on app-specific AniUtils) - WPSwitch preview simplified to remove WPSwitchCompat dependency - ComposeUtils inlines locale/RTL helpers previously from util.extensions Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 10be172 commit 9035f6d

72 files changed

Lines changed: 620 additions & 175 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

WordPress/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,7 @@ dependencies {
366366
}
367367
}
368368
implementation project(":libs:posttypes")
369+
implementation project(":libs:core-ui")
369370
implementation("$gradle.ext.aboutAutomatticBinaryPath:${libs.versions.automattic.about.get()}")
370371

371372
implementation("$gradle.ext.gutenbergKitBinaryPath:${libs.versions.gutenberg.kit.get()}")

WordPress/src/main/java/org/wordpress/android/modules/ApplicationModule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
import kotlinx.coroutines.CoroutineScope;
5757
import rs.wordpress.api.kotlin.WpLoginClient;
5858

59-
import static org.wordpress.android.modules.ThreadModuleKt.APPLICATION_SCOPE;
59+
import static org.wordpress.android.modules.CoroutineDispatchersKt.APPLICATION_SCOPE;
6060

6161
@InstallIn(SingletonComponent.class)
6262
@Module(includes = AndroidInjectionModule.class)

WordPress/src/main/java/org/wordpress/android/modules/ThreadModule.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,6 @@ import kotlinx.coroutines.Dispatchers
1010
import org.wordpress.android.util.helpers.Debouncer
1111
import javax.inject.Named
1212

13-
const val APPLICATION_SCOPE = "APPLICATION_SCOPE"
14-
15-
const val UI_THREAD = "UI_THREAD"
16-
const val BG_THREAD = "BG_THREAD"
17-
const val IO_THREAD = "IO_THREAD"
18-
1913
@InstallIn(SingletonComponent::class)
2014
@Module
2115
class ThreadModule {

WordPress/src/main/java/org/wordpress/android/ui/media/MediaGridAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555

5656
import kotlinx.coroutines.CoroutineScope;
5757

58-
import static org.wordpress.android.modules.ThreadModuleKt.APPLICATION_SCOPE;
58+
import static org.wordpress.android.modules.CoroutineDispatchersKt.APPLICATION_SCOPE;
5959

6060
/**
6161
* An adapter for the media gallery grid.

WordPress/src/main/java/org/wordpress/android/ui/mlp/ModalLayoutPickerFragment.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import org.wordpress.android.ui.layoutpicker.LayoutPickerViewModel.DesignPreview
2626
import org.wordpress.android.ui.layoutpicker.LayoutPickerViewModel.DesignPreviewAction.Show
2727
import org.wordpress.android.ui.mlp.BlockLayoutPreviewFragment.Companion.BLOCK_LAYOUT_PREVIEW_TAG
2828
import org.wordpress.android.ui.utils.UiHelpers
29+
import org.wordpress.android.ui.utils.fadeInfadeOutViews
2930
import org.wordpress.android.util.DisplayUtils
3031
import org.wordpress.android.util.extensions.setVisible
3132
import org.wordpress.android.viewmodel.mlp.ModalLayoutPickerViewModel

WordPress/src/main/java/org/wordpress/android/ui/prefs/DetailListPreference.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
2424

2525
import org.wordpress.android.R;
26-
import org.wordpress.android.ui.utils.UiHelpers;
26+
import org.wordpress.android.ui.utils.UiHelpersExtKt;
2727
import org.wordpress.android.util.ArrayUtils;
2828

2929
import java.util.ArrayList;
@@ -141,7 +141,7 @@ protected void showDialog(Bundle state) {
141141
listView.setPadding(0, 0, 0, res.getDimensionPixelSize(R.dimen.site_settings_divider_height));
142142
}
143143

144-
UiHelpers.Companion.adjustDialogSize(mDialog);
144+
UiHelpersExtKt.adjustDialogSize(mDialog);
145145
}
146146

147147
@Override

WordPress/src/main/java/org/wordpress/android/ui/prefs/SiteSettingsFormatDialog.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import org.wordpress.android.Constants;
2525
import org.wordpress.android.R;
2626
import org.wordpress.android.ui.ActivityLauncher;
27-
import org.wordpress.android.ui.utils.UiHelpers;
27+
import org.wordpress.android.ui.utils.UiHelpersExtKt;
2828
import org.wordpress.android.util.EditTextUtils;
2929

3030
/**
@@ -178,7 +178,7 @@ private String getSelectedFormatValue() {
178178
@Override
179179
public void onResume() {
180180
super.onResume();
181-
UiHelpers.Companion.adjustDialogSize(getDialog());
181+
UiHelpersExtKt.adjustDialogSize(getDialog());
182182
}
183183

184184
@Override

WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerFragment.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import org.wordpress.android.ui.layoutpicker.LayoutPickerViewModel.DesignPreview
2020
import org.wordpress.android.ui.layoutpicker.LayoutPickerViewModel.DesignPreviewAction.Show
2121
import org.wordpress.android.ui.sitecreation.theme.DesignPreviewFragment.Companion.DESIGN_PREVIEW_TAG
2222
import org.wordpress.android.ui.utils.UiHelpers
23+
import org.wordpress.android.ui.utils.fadeInfadeOutViews
2324
import org.wordpress.android.util.DisplayUtilsWrapper
2425
import org.wordpress.android.util.ToastUtils
2526
import org.wordpress.android.util.config.SiteNameFeatureConfig

WordPress/src/main/java/org/wordpress/android/ui/sitecreation/verticals/SiteCreationIntentsFragment.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import org.wordpress.android.R
1414
import org.wordpress.android.databinding.SiteCreationIntentsFragmentBinding
1515
import org.wordpress.android.ui.sitecreation.verticals.SiteCreationIntentsViewModel.IntentsUiState
1616
import org.wordpress.android.ui.utils.UiHelpers
17+
import org.wordpress.android.ui.utils.fadeInfadeOutViews
1718
import org.wordpress.android.util.DisplayUtilsWrapper
1819
import javax.inject.Inject
1920

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package org.wordpress.android.ui.utils
2+
3+
import android.app.Dialog
4+
import android.graphics.Point
5+
import android.view.View
6+
import android.view.WindowManager.LayoutParams
7+
import androidx.core.view.isVisible
8+
import org.wordpress.android.R
9+
import org.wordpress.android.util.AniUtils
10+
import org.wordpress.android.util.AniUtils.Duration
11+
12+
/**
13+
* Sets the [firstView] visible and the [secondView] invisible
14+
* with a fade in/out animation and vice versa.
15+
* @param visible if true the [firstView] is shown and the
16+
* [secondView] is hidden else the other way round
17+
*/
18+
fun UiHelpers.fadeInfadeOutViews(
19+
firstView: View?,
20+
secondView: View?,
21+
visible: Boolean
22+
) {
23+
if (firstView == null ||
24+
secondView == null ||
25+
visible == firstView.isVisible
26+
) return
27+
if (visible) {
28+
AniUtils.fadeIn(firstView, Duration.SHORT)
29+
AniUtils.fadeOut(
30+
secondView, Duration.SHORT, View.INVISIBLE
31+
)
32+
} else {
33+
AniUtils.fadeIn(secondView, Duration.SHORT)
34+
AniUtils.fadeOut(
35+
firstView, Duration.SHORT, View.INVISIBLE
36+
)
37+
}
38+
}
39+
40+
@Suppress("DEPRECATION")
41+
fun adjustDialogSize(dialog: Dialog) {
42+
val window = requireNotNull(dialog.window)
43+
val size = Point()
44+
45+
val display = window.windowManager.defaultDisplay
46+
display.getSize(size)
47+
48+
val width = size.x
49+
50+
val maximumWidth = window.context.resources
51+
.getDimension(R.dimen.alert_dialog_max_width).toInt()
52+
@Suppress("MagicNumber")
53+
var proposedWidth = (width * 0.8).toInt()
54+
55+
if (proposedWidth > maximumWidth) {
56+
proposedWidth = maximumWidth
57+
}
58+
59+
window.setLayout(proposedWidth, LayoutParams.WRAP_CONTENT)
60+
}

0 commit comments

Comments
 (0)