Skip to content

Commit 07637af

Browse files
committed
Merge branch 'issue/10519-edit-ad-ui' into issue/10519-edit-ad-image-selection
2 parents 24bc32c + 5c5df7f commit 07637af

13 files changed

+199
-21
lines changed

WooCommerce/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,10 +191,10 @@ dependencies {
191191
exclude group: "com.google.guava", module: "guava"
192192
}
193193

194-
implementation platform('com.google.firebase:firebase-bom:30.3.0')
195-
implementation 'com.google.firebase:firebase-messaging-ktx'
196-
implementation 'com.google.firebase:firebase-config-ktx'
197-
implementation 'com.google.firebase:firebase-analytics-ktx'
194+
implementation platform('com.google.firebase:firebase-bom:32.7.1')
195+
implementation 'com.google.firebase:firebase-messaging'
196+
implementation 'com.google.firebase:firebase-config'
197+
implementation 'com.google.firebase:firebase-analytics'
198198

199199
implementation 'com.google.android.gms:play-services-auth:20.2.0'
200200

WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/ExperimentTracker.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.woocommerce.android.analytics
22

3-
import com.google.firebase.analytics.ktx.ParametersBuilder
3+
import com.google.firebase.analytics.ParametersBuilder
44

55
interface ExperimentTracker {
66
companion object {

WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/FirebaseTracker.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.woocommerce.android.analytics
22

3-
import com.google.firebase.analytics.ktx.ParametersBuilder
4-
import com.google.firebase.analytics.ktx.analytics
5-
import com.google.firebase.analytics.ktx.logEvent
6-
import com.google.firebase.ktx.Firebase
3+
import com.google.firebase.Firebase
4+
import com.google.firebase.analytics.ParametersBuilder
5+
import com.google.firebase.analytics.analytics
6+
import com.google.firebase.analytics.logEvent
77
import javax.inject.Inject
88

99
class FirebaseTracker @Inject constructor() : ExperimentTracker {

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/BlazeCampaignCreationDispatcher.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,10 @@ class BlazeCampaignCreationDispatcher @Inject constructor(
144144
bundle = bundle,
145145
navOptions = navOptions {
146146
anim {
147-
enter = R.anim.activity_fade_in
148-
popExit = R.anim.activity_fade_out
147+
enter = R.anim.default_enter_anim
148+
exit = R.anim.default_exit_anim
149+
popEnter = R.anim.default_pop_enter_anim
150+
popExit = R.anim.default_pop_exit_anim
149151
}
150152
}
151153
)

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/ad/BlazeCampaignCreationEditAdScreen.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ import androidx.compose.ui.res.dimensionResource
3838
import androidx.compose.ui.res.painterResource
3939
import androidx.compose.ui.res.stringResource
4040
import androidx.compose.ui.text.input.ImeAction
41-
import androidx.compose.ui.tooling.preview.Preview
4241
import androidx.compose.ui.unit.dp
4342
import coil.compose.AsyncImage
4443
import coil.request.ImageRequest
@@ -284,7 +283,6 @@ private fun SuggestionButton(
284283
}
285284

286285
@LightDarkThemePreviews
287-
@Preview
288286
@Composable
289287
fun PreviewCampaignEditAdContent() {
290288
WooThemeWithBackground {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.woocommerce.android.ui.blaze.creation.budget
2+
3+
import android.os.Bundle
4+
import android.view.LayoutInflater
5+
import android.view.View
6+
import android.view.ViewGroup
7+
import androidx.fragment.app.viewModels
8+
import androidx.navigation.fragment.findNavController
9+
import com.woocommerce.android.ui.base.BaseFragment
10+
import com.woocommerce.android.ui.compose.composeView
11+
import com.woocommerce.android.ui.main.AppBarStatus
12+
import com.woocommerce.android.viewmodel.MultiLiveEvent
13+
import dagger.hilt.android.AndroidEntryPoint
14+
15+
@AndroidEntryPoint
16+
class BlazeCampaignBudgetFragment : BaseFragment() {
17+
override val activityAppBarStatus: AppBarStatus
18+
get() = AppBarStatus.Hidden
19+
20+
val viewModel: BlazeCampaignBudgetViewModel by viewModels()
21+
22+
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
23+
return composeView {
24+
CampaignBudgetScreen(viewModel)
25+
}
26+
}
27+
28+
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
29+
super.onViewCreated(view, savedInstanceState)
30+
setupObservers()
31+
}
32+
33+
private fun setupObservers() {
34+
viewModel.event.observe(viewLifecycleOwner) { event ->
35+
when (event) {
36+
is MultiLiveEvent.Event.Exit -> findNavController().popBackStack()
37+
}
38+
}
39+
}
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package com.woocommerce.android.ui.blaze.creation.budget
2+
3+
import androidx.compose.foundation.background
4+
import androidx.compose.foundation.layout.Column
5+
import androidx.compose.foundation.layout.padding
6+
import androidx.compose.foundation.rememberScrollState
7+
import androidx.compose.foundation.verticalScroll
8+
import androidx.compose.material.ExperimentalMaterialApi
9+
import androidx.compose.material.MaterialTheme
10+
import androidx.compose.material.ModalBottomSheetValue
11+
import androidx.compose.material.Scaffold
12+
import androidx.compose.material.Text
13+
import androidx.compose.material.icons.Icons.Filled
14+
import androidx.compose.material.icons.filled.ArrowBack
15+
import androidx.compose.material.rememberModalBottomSheetState
16+
import androidx.compose.runtime.Composable
17+
import androidx.compose.runtime.rememberCoroutineScope
18+
import androidx.compose.ui.Modifier
19+
import androidx.compose.ui.res.dimensionResource
20+
import androidx.compose.ui.res.stringResource
21+
import com.woocommerce.android.R.dimen
22+
import com.woocommerce.android.R.string
23+
import com.woocommerce.android.ui.compose.component.Toolbar
24+
import com.woocommerce.android.ui.compose.component.WCColoredButton
25+
import com.woocommerce.android.ui.compose.component.WCModalBottomSheetLayout
26+
import kotlinx.coroutines.launch
27+
28+
@Composable
29+
fun CampaignBudgetScreen(viewModel: BlazeCampaignBudgetViewModel) {
30+
CampaignBudgetScreen(
31+
onBackPressed = viewModel::onBackPressed
32+
)
33+
}
34+
35+
@OptIn(ExperimentalMaterialApi::class)
36+
@Composable
37+
private fun CampaignBudgetScreen(
38+
onBackPressed: () -> Unit
39+
) {
40+
val coroutineScope = rememberCoroutineScope()
41+
val modalSheetState = rememberModalBottomSheetState(
42+
initialValue = ModalBottomSheetValue.Hidden,
43+
confirmValueChange = { it != ModalBottomSheetValue.HalfExpanded }
44+
)
45+
Scaffold(
46+
topBar = {
47+
Toolbar(
48+
title = stringResource(id = string.blaze_campaign_budget_title),
49+
onNavigationButtonClick = onBackPressed,
50+
navigationIcon = Filled.ArrowBack
51+
)
52+
},
53+
modifier = Modifier.background(MaterialTheme.colors.surface)
54+
) { paddingValues ->
55+
WCModalBottomSheetLayout(
56+
sheetState = modalSheetState,
57+
sheetContent = {
58+
DurationSheetContent(
59+
durationInDays = 0,
60+
onApplyTapped = {
61+
coroutineScope.launch { modalSheetState.hide() }
62+
}
63+
)
64+
}
65+
) {
66+
Column(
67+
modifier = Modifier
68+
.padding(paddingValues)
69+
.background(MaterialTheme.colors.surface)
70+
.padding(dimensionResource(id = dimen.major_100))
71+
) {
72+
// Budget content
73+
}
74+
}
75+
}
76+
}
77+
78+
@Composable
79+
private fun DurationSheetContent(
80+
durationInDays: Int,
81+
onApplyTapped: () -> Unit,
82+
modifier: Modifier = Modifier
83+
) {
84+
Column(
85+
modifier = modifier.verticalScroll(rememberScrollState())
86+
) {
87+
Text(text = "Current duration: $durationInDays")
88+
WCColoredButton(onClick = onApplyTapped, text = "Apply")
89+
}
90+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.woocommerce.android.ui.blaze.creation.budget
2+
3+
import androidx.lifecycle.SavedStateHandle
4+
import com.woocommerce.android.viewmodel.MultiLiveEvent.Event.Exit
5+
import com.woocommerce.android.viewmodel.ScopedViewModel
6+
import dagger.hilt.android.lifecycle.HiltViewModel
7+
import javax.inject.Inject
8+
9+
@HiltViewModel
10+
class BlazeCampaignBudgetViewModel @Inject constructor(
11+
savedStateHandle: SavedStateHandle,
12+
) : ScopedViewModel(savedStateHandle) {
13+
14+
fun onBackPressed() {
15+
triggerEvent(Exit)
16+
}
17+
}

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/preview/BlazeCampaignCreationPreviewFragment.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import android.view.View
66
import android.view.ViewGroup
77
import androidx.fragment.app.viewModels
88
import androidx.navigation.fragment.findNavController
9+
import com.woocommerce.android.extensions.navigateSafely
910
import com.woocommerce.android.ui.base.BaseFragment
1011
import com.woocommerce.android.ui.compose.composeView
1112
import com.woocommerce.android.ui.main.AppBarStatus
@@ -34,6 +35,10 @@ class BlazeCampaignCreationPreviewFragment : BaseFragment() {
3435
viewModel.event.observe(viewLifecycleOwner) { event ->
3536
when (event) {
3637
is MultiLiveEvent.Event.Exit -> findNavController().popBackStack()
38+
is BlazeCampaignCreationPreviewViewModel.NavigateToBudgetScreen -> findNavController().navigateSafely(
39+
BlazeCampaignCreationPreviewFragmentDirections
40+
.actionBlazeCampaignCreationPreviewFragmentToBlazeCampaignBudgetFragment()
41+
)
3742
is BlazeCampaignCreationPreviewViewModel.NavigateToEditAdScreen -> findNavController().navigate(
3843
BlazeCampaignCreationPreviewFragmentDirections
3944
.actionBlazeCampaignCreationPreviewFragmentToBlazeCampaignCreationEditAdFragment()

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/preview/BlazeCampaignCreationPreviewScreen.kt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.woocommerce.android.ui.blaze.creation.preview
22

33
import androidx.compose.foundation.background
44
import androidx.compose.foundation.border
5+
import androidx.compose.foundation.clickable
56
import androidx.compose.foundation.isSystemInDarkTheme
67
import androidx.compose.foundation.layout.Arrangement
78
import androidx.compose.foundation.layout.Column
@@ -41,15 +42,15 @@ import androidx.compose.ui.unit.dp
4142
import coil.compose.AsyncImage
4243
import coil.request.ImageRequest
4344
import com.woocommerce.android.R
45+
import com.woocommerce.android.ui.blaze.creation.preview.BlazeCampaignCreationPreviewViewModel.AdDetailsUi
46+
import com.woocommerce.android.ui.blaze.creation.preview.BlazeCampaignCreationPreviewViewModel.CampaignDetailItemUi
47+
import com.woocommerce.android.ui.blaze.creation.preview.BlazeCampaignCreationPreviewViewModel.CampaignDetailsUi
48+
import com.woocommerce.android.ui.blaze.creation.preview.BlazeCampaignCreationPreviewViewModel.CampaignPreviewUiState
4449
import com.woocommerce.android.ui.compose.animations.SkeletonView
4550
import com.woocommerce.android.ui.compose.component.Toolbar
4651
import com.woocommerce.android.ui.compose.component.WCColoredButton
4752
import com.woocommerce.android.ui.compose.component.WCTextButton
4853
import com.woocommerce.android.ui.compose.preview.LightDarkThemePreviews
49-
import com.woocommerce.android.ui.blaze.creation.preview.BlazeCampaignCreationPreviewViewModel.AdDetailsUi
50-
import com.woocommerce.android.ui.blaze.creation.preview.BlazeCampaignCreationPreviewViewModel.CampaignDetailItemUi
51-
import com.woocommerce.android.ui.blaze.creation.preview.BlazeCampaignCreationPreviewViewModel.CampaignDetailsUi
52-
import com.woocommerce.android.ui.blaze.creation.preview.BlazeCampaignCreationPreviewViewModel.CampaignPreviewUiState
5354

5455
@Composable
5556
fun BlazeCampaignCreationPreviewScreen(viewModel: BlazeCampaignCreationPreviewViewModel) {
@@ -325,6 +326,7 @@ private fun CampaignPropertyItem(
325326
Row(
326327
modifier = modifier
327328
.fillMaxWidth()
329+
.clickable { item.onItemSelected() }
328330
.padding(
329331
start = 16.dp,
330332
end = 16.dp,
@@ -375,28 +377,34 @@ fun CampaignScreenPreview() {
375377
budget = CampaignDetailItemUi(
376378
displayTitle = stringResource(R.string.blaze_campaign_preview_details_budget),
377379
displayValue = "140 USD, 7 days from Jan 14",
380+
onItemSelected = {},
378381
),
379382
targetDetails = listOf(
380383
CampaignDetailItemUi(
381384
displayTitle = stringResource(R.string.blaze_campaign_preview_details_language),
382385
displayValue = "English, Spanish",
386+
onItemSelected = {},
383387
),
384388
CampaignDetailItemUi(
385389
displayTitle = stringResource(R.string.blaze_campaign_preview_details_devices),
386390
displayValue = "USA, Poland, Japan",
391+
onItemSelected = {},
387392
),
388393
CampaignDetailItemUi(
389394
displayTitle = stringResource(R.string.blaze_campaign_preview_details_location),
390395
displayValue = "Samsung, Apple, Xiaomi",
396+
onItemSelected = {},
391397
),
392398
CampaignDetailItemUi(
393399
displayTitle = stringResource(R.string.blaze_campaign_preview_details_interests),
394400
displayValue = "Fashion, Clothing, T-shirts",
401+
onItemSelected = {},
395402
),
396403
),
397404
destinationUrl = CampaignDetailItemUi(
398405
displayTitle = "Destination URL",
399406
displayValue = "https://www.myer.com.au/p/white-t-shirt-797334760-797334760",
407+
onItemSelected = {},
400408
maxLinesValue = 1,
401409
)
402410
)

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/preview/BlazeCampaignCreationPreviewViewModel.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.woocommerce.android.ui.blaze.creation.preview
22

33
import androidx.lifecycle.MutableLiveData
44
import androidx.lifecycle.SavedStateHandle
5-
import com.woocommerce.android.R
65
import com.woocommerce.android.R.string
76
import com.woocommerce.android.extensions.formatToMMMdd
87
import com.woocommerce.android.ui.blaze.BlazeRepository
@@ -62,32 +61,38 @@ class BlazeCampaignCreationPreviewViewModel @Inject constructor(
6261
budget = CampaignDetailItemUi(
6362
displayTitle = resourceProvider.getString(string.blaze_campaign_preview_details_budget),
6463
displayValue = budget.toDisplayValue(),
64+
onItemSelected = { triggerEvent(NavigateToBudgetScreen) },
6565
),
6666
targetDetails = listOf(
6767
CampaignDetailItemUi(
6868
displayTitle = resourceProvider.getString(string.blaze_campaign_preview_details_language),
6969
displayValue = languages.joinToString { it.name }
7070
.ifEmpty { resourceProvider.getString(string.blaze_campaign_preview_target_default_value) },
71+
onItemSelected = { /* TODO Add language selection */ },
7172
),
7273
CampaignDetailItemUi(
7374
displayTitle = resourceProvider.getString(string.blaze_campaign_preview_details_devices),
7475
displayValue = locations.joinToString { it.name }
7576
.ifEmpty { resourceProvider.getString(string.blaze_campaign_preview_target_default_value) },
77+
onItemSelected = { /* TODO Add devices selection */ },
7678
),
7779
CampaignDetailItemUi(
7880
displayTitle = resourceProvider.getString(string.blaze_campaign_preview_details_location),
7981
displayValue = devices.joinToString { it.name }
8082
.ifEmpty { resourceProvider.getString(string.blaze_campaign_preview_target_default_value) },
83+
onItemSelected = { /* TODO Add location selection */ },
8184
),
8285
CampaignDetailItemUi(
8386
displayTitle = resourceProvider.getString(string.blaze_campaign_preview_details_interests),
8487
displayValue = interests.joinToString { it.description }
8588
.ifEmpty { resourceProvider.getString(string.blaze_campaign_preview_target_default_value) },
89+
onItemSelected = { /* TODO Add interests selection */ },
8690
),
8791
),
8892
destinationUrl = CampaignDetailItemUi(
8993
displayTitle = resourceProvider.getString(string.blaze_campaign_preview_details_destination_url),
9094
displayValue = targetUrl,
95+
onItemSelected = { /* TODO Add destination url selection */ },
9196
maxLinesValue = 1,
9297
)
9398
)
@@ -98,7 +103,7 @@ class BlazeCampaignCreationPreviewViewModel @Inject constructor(
98103
currencyCode
99104
)
100105
val duration = resourceProvider.getString(
101-
R.string.blaze_campaign_preview_days_duration,
106+
string.blaze_campaign_preview_days_duration,
102107
durationInDays,
103108
startDate.formatToMMMdd()
104109
)
@@ -133,6 +138,9 @@ class BlazeCampaignCreationPreviewViewModel @Inject constructor(
133138
data class CampaignDetailItemUi(
134139
val displayTitle: String,
135140
val displayValue: String,
141+
val onItemSelected: () -> Unit,
136142
val maxLinesValue: Int? = null,
137143
)
144+
145+
object NavigateToBudgetScreen : MultiLiveEvent.Event()
138146
}

WooCommerce/src/main/res/navigation/nav_graph_blaze_campaign_creation.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@
5353
<action
5454
android:id="@+id/action_blazeCampaignCreationPreviewFragment_to_blazeCampaignCreationEditAdFragment"
5555
app:destination="@id/blazeCampaignCreationEditAdFragment" />
56+
<action
57+
android:id="@+id/action_blazeCampaignCreationPreviewFragment_to_blazeCampaignBudgetFragment"
58+
app:destination="@id/blazeCampaignBudgetFragment" />
5659
</fragment>
5760
<fragment
5861
android:id="@+id/blazeCampaignCreationEditAdFragment"
@@ -72,4 +75,8 @@
7275
android:defaultValue="@null"
7376
app:nullable="true" />
7477
</fragment>
78+
<fragment
79+
android:id="@+id/blazeCampaignBudgetFragment"
80+
android:name="com.woocommerce.android.ui.blaze.creation.budget.BlazeCampaignBudgetFragment"
81+
android:label="BlazeCampaignBudgetFragment" />
7582
</navigation>

0 commit comments

Comments
 (0)