Skip to content

Commit

Permalink
Merge branch 'issue/10519-edit-ad-ui' into issue/10519-edit-ad-image-…
Browse files Browse the repository at this point in the history
…selection
  • Loading branch information
0nko committed Jan 23, 2024
2 parents 24bc32c + 5c5df7f commit 07637af
Show file tree
Hide file tree
Showing 13 changed files with 199 additions and 21 deletions.
8 changes: 4 additions & 4 deletions WooCommerce/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -191,10 +191,10 @@ dependencies {
exclude group: "com.google.guava", module: "guava"
}

implementation platform('com.google.firebase:firebase-bom:30.3.0')
implementation 'com.google.firebase:firebase-messaging-ktx'
implementation 'com.google.firebase:firebase-config-ktx'
implementation 'com.google.firebase:firebase-analytics-ktx'
implementation platform('com.google.firebase:firebase-bom:32.7.1')
implementation 'com.google.firebase:firebase-messaging'
implementation 'com.google.firebase:firebase-config'
implementation 'com.google.firebase:firebase-analytics'

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

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.woocommerce.android.analytics

import com.google.firebase.analytics.ktx.ParametersBuilder
import com.google.firebase.analytics.ParametersBuilder

interface ExperimentTracker {
companion object {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.woocommerce.android.analytics

import com.google.firebase.analytics.ktx.ParametersBuilder
import com.google.firebase.analytics.ktx.analytics
import com.google.firebase.analytics.ktx.logEvent
import com.google.firebase.ktx.Firebase
import com.google.firebase.Firebase
import com.google.firebase.analytics.ParametersBuilder
import com.google.firebase.analytics.analytics
import com.google.firebase.analytics.logEvent
import javax.inject.Inject

class FirebaseTracker @Inject constructor() : ExperimentTracker {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,10 @@ class BlazeCampaignCreationDispatcher @Inject constructor(
bundle = bundle,
navOptions = navOptions {
anim {
enter = R.anim.activity_fade_in
popExit = R.anim.activity_fade_out
enter = R.anim.default_enter_anim
exit = R.anim.default_exit_anim
popEnter = R.anim.default_pop_enter_anim
popExit = R.anim.default_pop_exit_anim
}
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import coil.compose.AsyncImage
import coil.request.ImageRequest
Expand Down Expand Up @@ -284,7 +283,6 @@ private fun SuggestionButton(
}

@LightDarkThemePreviews
@Preview
@Composable
fun PreviewCampaignEditAdContent() {
WooThemeWithBackground {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.woocommerce.android.ui.blaze.creation.budget

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import com.woocommerce.android.ui.base.BaseFragment
import com.woocommerce.android.ui.compose.composeView
import com.woocommerce.android.ui.main.AppBarStatus
import com.woocommerce.android.viewmodel.MultiLiveEvent
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class BlazeCampaignBudgetFragment : BaseFragment() {
override val activityAppBarStatus: AppBarStatus
get() = AppBarStatus.Hidden

val viewModel: BlazeCampaignBudgetViewModel by viewModels()

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
return composeView {
CampaignBudgetScreen(viewModel)
}
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setupObservers()
}

private fun setupObservers() {
viewModel.event.observe(viewLifecycleOwner) { event ->
when (event) {
is MultiLiveEvent.Event.Exit -> findNavController().popBackStack()
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package com.woocommerce.android.ui.blaze.creation.budget

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.MaterialTheme
import androidx.compose.material.ModalBottomSheetValue
import androidx.compose.material.Scaffold
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons.Filled
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.stringResource
import com.woocommerce.android.R.dimen
import com.woocommerce.android.R.string
import com.woocommerce.android.ui.compose.component.Toolbar
import com.woocommerce.android.ui.compose.component.WCColoredButton
import com.woocommerce.android.ui.compose.component.WCModalBottomSheetLayout
import kotlinx.coroutines.launch

@Composable
fun CampaignBudgetScreen(viewModel: BlazeCampaignBudgetViewModel) {
CampaignBudgetScreen(
onBackPressed = viewModel::onBackPressed
)
}

@OptIn(ExperimentalMaterialApi::class)
@Composable
private fun CampaignBudgetScreen(
onBackPressed: () -> Unit
) {
val coroutineScope = rememberCoroutineScope()
val modalSheetState = rememberModalBottomSheetState(
initialValue = ModalBottomSheetValue.Hidden,
confirmValueChange = { it != ModalBottomSheetValue.HalfExpanded }
)
Scaffold(
topBar = {
Toolbar(
title = stringResource(id = string.blaze_campaign_budget_title),
onNavigationButtonClick = onBackPressed,
navigationIcon = Filled.ArrowBack
)
},
modifier = Modifier.background(MaterialTheme.colors.surface)
) { paddingValues ->
WCModalBottomSheetLayout(
sheetState = modalSheetState,
sheetContent = {
DurationSheetContent(
durationInDays = 0,
onApplyTapped = {
coroutineScope.launch { modalSheetState.hide() }
}
)
}
) {
Column(
modifier = Modifier
.padding(paddingValues)
.background(MaterialTheme.colors.surface)
.padding(dimensionResource(id = dimen.major_100))
) {
// Budget content
}
}
}
}

@Composable
private fun DurationSheetContent(
durationInDays: Int,
onApplyTapped: () -> Unit,
modifier: Modifier = Modifier
) {
Column(
modifier = modifier.verticalScroll(rememberScrollState())
) {
Text(text = "Current duration: $durationInDays")
WCColoredButton(onClick = onApplyTapped, text = "Apply")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.woocommerce.android.ui.blaze.creation.budget

import androidx.lifecycle.SavedStateHandle
import com.woocommerce.android.viewmodel.MultiLiveEvent.Event.Exit
import com.woocommerce.android.viewmodel.ScopedViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject

@HiltViewModel
class BlazeCampaignBudgetViewModel @Inject constructor(
savedStateHandle: SavedStateHandle,
) : ScopedViewModel(savedStateHandle) {

fun onBackPressed() {
triggerEvent(Exit)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import com.woocommerce.android.extensions.navigateSafely
import com.woocommerce.android.ui.base.BaseFragment
import com.woocommerce.android.ui.compose.composeView
import com.woocommerce.android.ui.main.AppBarStatus
Expand Down Expand Up @@ -34,6 +35,10 @@ class BlazeCampaignCreationPreviewFragment : BaseFragment() {
viewModel.event.observe(viewLifecycleOwner) { event ->
when (event) {
is MultiLiveEvent.Event.Exit -> findNavController().popBackStack()
is BlazeCampaignCreationPreviewViewModel.NavigateToBudgetScreen -> findNavController().navigateSafely(
BlazeCampaignCreationPreviewFragmentDirections
.actionBlazeCampaignCreationPreviewFragmentToBlazeCampaignBudgetFragment()
)
is BlazeCampaignCreationPreviewViewModel.NavigateToEditAdScreen -> findNavController().navigate(
BlazeCampaignCreationPreviewFragmentDirections
.actionBlazeCampaignCreationPreviewFragmentToBlazeCampaignCreationEditAdFragment()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.woocommerce.android.ui.blaze.creation.preview

import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
Expand Down Expand Up @@ -41,15 +42,15 @@ import androidx.compose.ui.unit.dp
import coil.compose.AsyncImage
import coil.request.ImageRequest
import com.woocommerce.android.R
import com.woocommerce.android.ui.blaze.creation.preview.BlazeCampaignCreationPreviewViewModel.AdDetailsUi
import com.woocommerce.android.ui.blaze.creation.preview.BlazeCampaignCreationPreviewViewModel.CampaignDetailItemUi
import com.woocommerce.android.ui.blaze.creation.preview.BlazeCampaignCreationPreviewViewModel.CampaignDetailsUi
import com.woocommerce.android.ui.blaze.creation.preview.BlazeCampaignCreationPreviewViewModel.CampaignPreviewUiState
import com.woocommerce.android.ui.compose.animations.SkeletonView
import com.woocommerce.android.ui.compose.component.Toolbar
import com.woocommerce.android.ui.compose.component.WCColoredButton
import com.woocommerce.android.ui.compose.component.WCTextButton
import com.woocommerce.android.ui.compose.preview.LightDarkThemePreviews
import com.woocommerce.android.ui.blaze.creation.preview.BlazeCampaignCreationPreviewViewModel.AdDetailsUi
import com.woocommerce.android.ui.blaze.creation.preview.BlazeCampaignCreationPreviewViewModel.CampaignDetailItemUi
import com.woocommerce.android.ui.blaze.creation.preview.BlazeCampaignCreationPreviewViewModel.CampaignDetailsUi
import com.woocommerce.android.ui.blaze.creation.preview.BlazeCampaignCreationPreviewViewModel.CampaignPreviewUiState

@Composable
fun BlazeCampaignCreationPreviewScreen(viewModel: BlazeCampaignCreationPreviewViewModel) {
Expand Down Expand Up @@ -325,6 +326,7 @@ private fun CampaignPropertyItem(
Row(
modifier = modifier
.fillMaxWidth()
.clickable { item.onItemSelected() }
.padding(
start = 16.dp,
end = 16.dp,
Expand Down Expand Up @@ -375,28 +377,34 @@ fun CampaignScreenPreview() {
budget = CampaignDetailItemUi(
displayTitle = stringResource(R.string.blaze_campaign_preview_details_budget),
displayValue = "140 USD, 7 days from Jan 14",
onItemSelected = {},
),
targetDetails = listOf(
CampaignDetailItemUi(
displayTitle = stringResource(R.string.blaze_campaign_preview_details_language),
displayValue = "English, Spanish",
onItemSelected = {},
),
CampaignDetailItemUi(
displayTitle = stringResource(R.string.blaze_campaign_preview_details_devices),
displayValue = "USA, Poland, Japan",
onItemSelected = {},
),
CampaignDetailItemUi(
displayTitle = stringResource(R.string.blaze_campaign_preview_details_location),
displayValue = "Samsung, Apple, Xiaomi",
onItemSelected = {},
),
CampaignDetailItemUi(
displayTitle = stringResource(R.string.blaze_campaign_preview_details_interests),
displayValue = "Fashion, Clothing, T-shirts",
onItemSelected = {},
),
),
destinationUrl = CampaignDetailItemUi(
displayTitle = "Destination URL",
displayValue = "https://www.myer.com.au/p/white-t-shirt-797334760-797334760",
onItemSelected = {},
maxLinesValue = 1,
)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package com.woocommerce.android.ui.blaze.creation.preview

import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.SavedStateHandle
import com.woocommerce.android.R
import com.woocommerce.android.R.string
import com.woocommerce.android.extensions.formatToMMMdd
import com.woocommerce.android.ui.blaze.BlazeRepository
Expand Down Expand Up @@ -62,32 +61,38 @@ class BlazeCampaignCreationPreviewViewModel @Inject constructor(
budget = CampaignDetailItemUi(
displayTitle = resourceProvider.getString(string.blaze_campaign_preview_details_budget),
displayValue = budget.toDisplayValue(),
onItemSelected = { triggerEvent(NavigateToBudgetScreen) },
),
targetDetails = listOf(
CampaignDetailItemUi(
displayTitle = resourceProvider.getString(string.blaze_campaign_preview_details_language),
displayValue = languages.joinToString { it.name }
.ifEmpty { resourceProvider.getString(string.blaze_campaign_preview_target_default_value) },
onItemSelected = { /* TODO Add language selection */ },
),
CampaignDetailItemUi(
displayTitle = resourceProvider.getString(string.blaze_campaign_preview_details_devices),
displayValue = locations.joinToString { it.name }
.ifEmpty { resourceProvider.getString(string.blaze_campaign_preview_target_default_value) },
onItemSelected = { /* TODO Add devices selection */ },
),
CampaignDetailItemUi(
displayTitle = resourceProvider.getString(string.blaze_campaign_preview_details_location),
displayValue = devices.joinToString { it.name }
.ifEmpty { resourceProvider.getString(string.blaze_campaign_preview_target_default_value) },
onItemSelected = { /* TODO Add location selection */ },
),
CampaignDetailItemUi(
displayTitle = resourceProvider.getString(string.blaze_campaign_preview_details_interests),
displayValue = interests.joinToString { it.description }
.ifEmpty { resourceProvider.getString(string.blaze_campaign_preview_target_default_value) },
onItemSelected = { /* TODO Add interests selection */ },
),
),
destinationUrl = CampaignDetailItemUi(
displayTitle = resourceProvider.getString(string.blaze_campaign_preview_details_destination_url),
displayValue = targetUrl,
onItemSelected = { /* TODO Add destination url selection */ },
maxLinesValue = 1,
)
)
Expand All @@ -98,7 +103,7 @@ class BlazeCampaignCreationPreviewViewModel @Inject constructor(
currencyCode
)
val duration = resourceProvider.getString(
R.string.blaze_campaign_preview_days_duration,
string.blaze_campaign_preview_days_duration,
durationInDays,
startDate.formatToMMMdd()
)
Expand Down Expand Up @@ -133,6 +138,9 @@ class BlazeCampaignCreationPreviewViewModel @Inject constructor(
data class CampaignDetailItemUi(
val displayTitle: String,
val displayValue: String,
val onItemSelected: () -> Unit,
val maxLinesValue: Int? = null,
)

object NavigateToBudgetScreen : MultiLiveEvent.Event()
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@
<action
android:id="@+id/action_blazeCampaignCreationPreviewFragment_to_blazeCampaignCreationEditAdFragment"
app:destination="@id/blazeCampaignCreationEditAdFragment" />
<action
android:id="@+id/action_blazeCampaignCreationPreviewFragment_to_blazeCampaignBudgetFragment"
app:destination="@id/blazeCampaignBudgetFragment" />
</fragment>
<fragment
android:id="@+id/blazeCampaignCreationEditAdFragment"
Expand All @@ -72,4 +75,8 @@
android:defaultValue="@null"
app:nullable="true" />
</fragment>
<fragment
android:id="@+id/blazeCampaignBudgetFragment"
android:name="com.woocommerce.android.ui.blaze.creation.budget.BlazeCampaignBudgetFragment"
android:label="BlazeCampaignBudgetFragment" />
</navigation>
Loading

0 comments on commit 07637af

Please sign in to comment.