Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/connect in app notification #78

Merged
merged 22 commits into from
Dec 2, 2024
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
3376beb
feat: Get response from initialization and created models
DanielGreenEngineer Nov 21, 2024
bf1fda1
feat: Added sending fragment manager from DI and remove manual showin…
DanielGreenEngineer Nov 21, 2024
c4c653c
feat: Added sending fragment manager from arguments
DanielGreenEngineer Nov 21, 2024
aed2767
feat: Added todo and optimized code
DanielGreenEngineer Nov 21, 2024
2ab064c
chore: Remove unused code
DanielGreenEngineer Nov 21, 2024
9c948f4
feat: Separate initialization func
DanielGreenEngineer Nov 22, 2024
b6bfdc6
feat: Added error handlers
DanielGreenEngineer Nov 22, 2024
8e0dbd3
feat: Added handling errors in register manager
DanielGreenEngineer Nov 22, 2024
86aa8dd
feat: Added handling response if success
DanielGreenEngineer Nov 22, 2024
9fde2b1
feat: Added mapper for initing response
DanielGreenEngineer Nov 22, 2024
776f27d
feat: Added constants params
DanielGreenEngineer Nov 22, 2024
65d0463
feat: Added in app manager injection
DanielGreenEngineer Nov 22, 2024
1f14709
feat: Added use case for sending params
DanielGreenEngineer Nov 22, 2024
e87b892
feat: Added getting data from response and show alert
DanielGreenEngineer Nov 22, 2024
553ebc3
feat: Inject context for opening link in browser
DanielGreenEngineer Nov 22, 2024
583be87
feat: Added error handling when opening popup url
DanielGreenEngineer Nov 22, 2024
3b5f3dc
feat: Added error logging when opening popup url and get colors
DanielGreenEngineer Nov 22, 2024
0f7bbc8
feat: Added printed stack trace
DanielGreenEngineer Nov 22, 2024
875c9ee
chore: Uncomment debug initialization
DanielGreenEngineer Nov 22, 2024
015ade7
feat: Separate mapper & moved models to dto
DanielGreenEngineer Dec 2, 2024
6759912
feat: Separate sdk mapper to component mappers
DanielGreenEngineer Dec 2, 2024
c34b237
feat: Change usecase to manager and use error for logging
DanielGreenEngineer Dec 2, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

99 changes: 19 additions & 80 deletions personalization-sdk/src/main/kotlin/com/personalization/SDK.kt
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ open class SDK {

internal lateinit var context: Context
private lateinit var segment: String
lateinit var fragmentManager: FragmentManager

private var onMessageListener: OnMessageListener? = null
private var search: Search = Search(JSONObject())
Expand Down Expand Up @@ -114,28 +113,40 @@ open class SDK {
notificationId: String,
autoSendPushToken: Boolean = true
) {
val sdkComponent =
DaggerSdkComponent.factory().create(AppModule(applicationContext = context))
sdkComponent.inject(this)
val sdkComponent = DaggerSdkComponent.factory().create(
appModule = AppModule(applicationContext = context)
)
sdkComponent.inject(sdk = this)

initPreferencesUseCase.invoke(
context = context, preferencesKey = preferencesKey
context = context,
preferencesKey = preferencesKey
)

this.context = context
TAG = tag

segment = getPreferencesValueUseCase.getSegment()

notificationHandler.initialize(context)
notificationHandler.initialize(context = context)

initUserSettingsUseCase.invoke(
shopId = shopId, shopSecretKey = shopSecretKey, segment = segment, stream = stream
shopId = shopId,
shopSecretKey = shopSecretKey,
segment = segment,
stream = stream
)
initNetworkUseCase.invoke(
baseUrl = apiUrl
)
registerManager.initialize(context.contentResolver, autoSendPushToken)
registerManager.initialize(
contentResolver = context.contentResolver,
autoSendPushToken = autoSendPushToken
)
}

fun initializeFragmentManager(fragmentManager: FragmentManager) {
inAppNotificationManager.initFragmentManager(fragmentManager = fragmentManager)
}

fun initializeStoriesView(storiesView: StoriesView) {
Expand All @@ -158,78 +169,6 @@ open class SDK {
storiesManager.showStories(context.mainLooper, code)
}

fun initializeFragmentManager(fragmentManager: FragmentManager) {
this.fragmentManager = fragmentManager
}

fun showAlertDialog(
title: String,
message: String,
imageUrl: String,
buttonNegativeText: String,
buttonPositiveText: String,
buttonPositiveColor: Int,
buttonNegativeColor: Int,
onPositiveClick: () -> Unit,
onNegativeClick: () -> Unit
) = inAppNotificationManager.showAlertDialog(
fragmentManager = fragmentManager,
title = title,
message = message,
imageUrl = imageUrl,
buttonPositiveColor = buttonPositiveColor,
buttonNegativeColor = buttonNegativeColor,
buttonNegativeText = buttonNegativeText,
buttonPositiveText = buttonPositiveText,
onNegativeClick = onNegativeClick,
onPositiveClick = onPositiveClick,
)

fun showFullScreenDialog(
title: String,
message: String,
imageUrl: String,
buttonPositiveColor: Int,
buttonNegativeColor: Int,
buttonNegativeText: String,
buttonPositiveText: String,
onPositiveClick: () -> Unit,
onNegativeClick: () -> Unit
) = inAppNotificationManager.showFullScreenDialog(
fragmentManager = fragmentManager,
title = title,
message = message,
imageUrl = imageUrl,
buttonPositiveColor = buttonPositiveColor,
buttonNegativeColor = buttonNegativeColor,
buttonNegativeText = buttonNegativeText,
buttonPositiveText = buttonPositiveText,
onNegativeClick = onNegativeClick,
onPositiveClick = onPositiveClick,
)

fun showBottomSheetDialog(
title: String,
message: String,
imageUrl: String?,
buttonPositiveText: String,
buttonNegativeText: String?,
buttonPositiveColor: Int,
buttonNegativeColor: Int,
onPositiveClick: () -> Unit,
onNegativeClick: () -> Unit
) = inAppNotificationManager.showBottomSheetDialog(
fragmentManager = fragmentManager,
title = title,
message = message,
imageUrl = imageUrl,
buttonNegativeText = buttonNegativeText,
buttonPositiveText = buttonPositiveText,
buttonPositiveColor = buttonPositiveColor,
buttonNegativeColor = buttonNegativeColor,
onNegativeClick = onNegativeClick,
onPositiveClick = onPositiveClick,
)

/**
* Triggers a story event
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,46 +2,45 @@ package com.personalization.api.managers

import android.view.View
import androidx.fragment.app.FragmentManager
import com.personalization.api.responses.initialization.Popup

interface InAppNotificationManager {

fun initFragmentManager(fragmentManager: FragmentManager)

fun shopPopUp(popup: Popup)

fun showAlertDialog(
fragmentManager: FragmentManager,
title: String,
message: String,
imageUrl: String,
buttonPositiveText: String,
buttonNegativeText: String,
buttonPositiveColor: Int,
buttonNegativeColor: Int,
onPositiveClick: () -> Unit,
onNegativeClick: () -> Unit
onPositiveClick: () -> Unit
)

fun showFullScreenDialog(
fragmentManager: FragmentManager,
title: String,
message: String,
imageUrl: String?,
buttonPositiveColor: Int,
buttonNegativeColor: Int,
buttonPositiveText: String,
buttonNegativeText: String,
onPositiveClick: () -> Unit,
onNegativeClick: () -> Unit
onPositiveClick: () -> Unit
)

fun showBottomSheetDialog(
fragmentManager: FragmentManager,
title: String,
message: String,
imageUrl: String?,
buttonPositiveText: String,
buttonNegativeText: String?,
buttonPositiveColor: Int,
buttonNegativeColor: Int,
onPositiveClick: () -> Unit,
onNegativeClick: () -> Unit
onPositiveClick: () -> Unit
)

fun showSnackBar(
Expand All @@ -52,4 +51,5 @@ interface InAppNotificationManager {
onPositiveClick: () -> Unit,
onNegativeClick: () -> Unit
)

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.personalization.api.responses.initialization

data class CloseAction(
val buttonText: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.personalization.api.responses.initialization

data class Components(
val text: String,
val image: String,
val button: String,
val header: String,
val textEnabled: String,
val imageEnabled: String,
val headerEnabled: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.personalization.api.responses.initialization

data class Link(
val linkIos: String,
val linkWeb: String,
val buttonText: String,
val linkAndroid: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.personalization.api.responses.initialization

data class Popup(
val id: Int,
val channels: List<String>,
val position: Position,
val delay: Int,
val html: String,
val components: Components?,
val webPushSystem: Boolean,
val popupActions: PopupActions?
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.personalization.api.responses.initialization

data class PopupActions(
val link: Link?,
val close: CloseAction?
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.personalization.api.responses.initialization

enum class Position(val value: String) {
CENTERED("centered"),
BOTTOM("fixed_bottom"),
UNKNOWN("");

companion object {
fun fromString(value: String): Position? {
return entries.find { it.value == value }
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.personalization.api.responses.initialization

data class SdkInitializationResponse(
val did: String,
val seance: String,
val currency: String,
val emailCollector: Boolean,
val hasEmail: Boolean,
val recommendations: Boolean,
val lazyLoad: Boolean,
val autoCssRecommender: Boolean,
val cms: String,
val snippets: List<String>,
val popup: Popup?,
val search: Search?,
val webPushSettings: WebPushSettings?,
val recone: Boolean
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.personalization.api.responses.initialization

data class Search(
val enabled: Boolean,
val landing: String,
val type: String,
val settings: SearchSettings?
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.personalization.api.responses.initialization

data class SearchSettings(
val redirects: Map<String, String>,
val suggestionsTitle: String,
val categoriesTitle: String,
val brandsTitle: String,
val filtersTitle: String,
val itemsTitle: String,
val showAllTitle: String,
val lastQueriesTitle: String,
val lastProductsTitle: String,
val emptyTitle: String,
val bookAuthorTitle: String,
val enableFullSearch: Boolean,
val appendToBody: Boolean,
val enableLastQueries: Boolean,
val enableOldPrice: Boolean,
val popularLinksTitle: String,
val popularCategoriesTitle: String,
val popularBrandsTitle: String,
val priceFilterName: String,
val priceFilterFrom: String,
val priceFilterTo: String,
val sortByName: String,
val sortDirDesc: String,
val sortDirAsc: String,
val sortByPopular: String,
val sortByPrice: String,
val sortByDiscount: String,
val sortBySalesRate: String,
val sortByNew: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.personalization.api.responses.initialization

data class WebPushSettings(
val publicKey: String,
val safariEnabled: Boolean,
val safariId: String,
val serviceWorker: String
)
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,13 @@ interface SdkComponent {

@Component.Factory
interface Factory {
fun create(appModule: AppModule): SdkComponent
fun create(
appModule: AppModule
): SdkComponent
}

fun inject(sdk: SDK)

fun inject(service: NotificationService)

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.personalization.di

import android.content.Context
import com.personalization.RegisterManager
import com.personalization.api.managers.InAppNotificationManager
import com.personalization.api.managers.ProductsManager
Expand All @@ -12,6 +13,7 @@ import com.personalization.features.products.impl.ProductsManagerImpl
import com.personalization.features.recommendation.impl.RecommendationManagerImpl
import com.personalization.features.search.impl.SearchManagerImpl
import com.personalization.features.trackEvent.impl.TrackEventManagerImpl
import com.personalization.sdk.domain.usecases.inAppNotification.InAppNotificationUseCase
import com.personalization.sdk.domain.usecases.network.ExecuteQueueTasksUseCase
import com.personalization.sdk.domain.usecases.network.SendNetworkMethodUseCase
import com.personalization.sdk.domain.usecases.preferences.GetPreferencesValueUseCase
Expand All @@ -36,14 +38,16 @@ class SdkModule {
updateUserSettingsValueUseCase: UpdateUserSettingsValueUseCase,
getUserSettingsValueUseCase: GetUserSettingsValueUseCase,
sendNetworkMethodUseCase: SendNetworkMethodUseCase,
executeQueueTasksUseCase: ExecuteQueueTasksUseCase
executeQueueTasksUseCase: ExecuteQueueTasksUseCase,
inAppNotificationUseCase: InAppNotificationUseCase
): RegisterManager = RegisterManager(
getPreferencesValueUseCase = getPreferencesValueUseCase,
savePreferencesValueUseCase = savePreferencesValueUseCase,
updateUserSettingsValueUseCase = updateUserSettingsValueUseCase,
getUserSettingsValueUseCase = getUserSettingsValueUseCase,
sendNetworkMethodUseCase = sendNetworkMethodUseCase,
executeQueueTasksUseCase = executeQueueTasksUseCase
executeQueueTasksUseCase = executeQueueTasksUseCase,
inAppNotificationUseCase = inAppNotificationUseCase
)

@Singleton
Expand Down Expand Up @@ -94,7 +98,19 @@ class SdkModule {

@Singleton
@Provides
fun provideInAppNotificationManager(): InAppNotificationManager = InAppNotificationManagerImpl()
fun provideSendPopupToNotificationManagerUseCase(
inAppNotificationManager: InAppNotificationManager
): InAppNotificationUseCase = InAppNotificationUseCase(
inAppNotificationManager = inAppNotificationManager
)

@Singleton
@Provides
fun provideInAppNotificationManager(
context: Context
): InAppNotificationManager {
return InAppNotificationManagerImpl(context)
}

@Singleton
@Provides
Expand Down
Loading