77
88package com.nmc.android.marketTracking
99
10+ import android.Manifest
1011import android.app.Application
1112import android.content.Context
13+ import android.os.Build
1214import com.moengage.core.DataCenter
1315import com.moengage.core.MoECoreHelper
1416import com.moengage.core.MoEngage
1517import com.moengage.core.Properties
1618import com.moengage.core.analytics.MoEAnalyticsHelper
19+ import com.moengage.core.config.NotificationConfig
1720import com.moengage.core.enableAdIdTracking
1821import com.moengage.core.enableAndroidIdTracking
1922import com.moengage.core.model.AppStatus
23+ import com.moengage.inapp.MoEInAppHelper
24+ import com.moengage.pushbase.MoEPushHelper
2025import com.nextcloud.client.account.User
2126import com.nextcloud.common.NextcloudClient
2227import com.nextcloud.utils.extensions.getFormattedStringDate
2328import com.nmc.android.utils.FileUtils
2429import com.owncloud.android.BuildConfig
30+ import com.owncloud.android.R
2531import com.owncloud.android.datamodel.OCFile
2632import com.owncloud.android.datamodel.Template
2733import com.owncloud.android.lib.common.OwnCloudClientFactory
@@ -31,6 +37,7 @@ import com.owncloud.android.lib.common.accounts.AccountUtils
3137import com.owncloud.android.lib.common.utils.Log_OC
3238import com.owncloud.android.lib.resources.users.GetUserInfoRemoteOperation
3339import com.owncloud.android.utils.MimeTypeUtil
40+ import com.owncloud.android.utils.PermissionUtil
3441import kotlin.math.ceil
3542import kotlin.math.floor
3643
@@ -79,11 +86,23 @@ object MoEngageSdkUtils {
7986
8087 private const val DATE_FORMAT = " yyyy-MM-dd"
8188
89+ // maximum post notification permission retry count
90+ private const val PUSH_PERMISSION_REQUEST_RETRY_COUNT = 2
91+
8292 @JvmStatic
8393 fun initMoEngageSDK (application : Application ) {
8494 val moEngage = MoEngage .Builder (application, BuildConfig .MOENGAGE_APP_ID , DataCenter .DATA_CENTER_2 )
95+ .configureNotificationMetaData(
96+ NotificationConfig (
97+ R .drawable.notification_icon,
98+ R .drawable.notification_icon
99+ )
100+ )
85101 .build()
86102 MoEngage .initialiseDefaultInstance(moEngage)
103+
104+ updatePostNotificationsPermission(application)
105+
87106 enableDeviceIdentifierTracking(application)
88107
89108 // track app version at app launch
@@ -191,7 +210,7 @@ object MoEngageSdkUtils {
191210 }
192211
193212 @JvmStatic
194- fun trackUploadFileEvent (context : Context , file : OCFile , originalStoragePath : String ) {
213+ fun trackUploadFileEvent (context : Context , file : OCFile , originalStoragePath : String ) {
195214 if (file.isFolder) return
196215
197216 MoEAnalyticsHelper .trackEvent(
@@ -384,7 +403,7 @@ object MoEngageSdkUtils {
384403 }
385404 }
386405
387- private fun fetchUserInfo (context : Context , user : User ) {
406+ private fun fetchUserInfo (context : Context , user : User ) {
388407 val t = Thread (Runnable {
389408 val nextcloudClient: NextcloudClient
390409 try {
@@ -398,15 +417,50 @@ object MoEngageSdkUtils {
398417 }
399418
400419 val result = GetUserInfoRemoteOperation ().execute(nextcloudClient)
401- if (result.isSuccess && result.resultData != null ) {
402- val userInfo = result.resultData
420+ if (result.isSuccess && result.resultData != null ) {
421+ val userInfo = result.resultData
403422
404- trackUserLogin(context, userInfo)
405- } else {
406- Log_OC .d(this , result.logMessage)
407- }
423+ trackUserLogin(context, userInfo)
424+ } else {
425+ Log_OC .d(this , result.logMessage)
426+ }
408427 })
409428
410429 t.start()
411430 }
431+
432+ @JvmStatic
433+ fun updatePostNotificationsPermission (context : Context ) {
434+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .TIRAMISU ) {
435+ val isGranted = PermissionUtil .checkSelfPermission(context, Manifest .permission.POST_NOTIFICATIONS )
436+
437+ MoEPushHelper .getInstance().pushPermissionResponse(context, isGranted)
438+
439+ if (! isGranted) {
440+ MoEPushHelper .getInstance()
441+ .updatePushPermissionRequestCount(context, PUSH_PERMISSION_REQUEST_RETRY_COUNT )
442+ }
443+ } else {
444+ MoEPushHelper .getInstance().setUpNotificationChannels(context)
445+ }
446+ }
447+
448+ /* *
449+ * function should be called from onStart() of Activity
450+ * or onResume() of Fragment
451+ */
452+ @JvmStatic
453+ fun displayInAppNotification (context : Context ) {
454+ MoEInAppHelper .getInstance().showInApp(context)
455+ }
456+
457+ /* *
458+ * To show In-App in both Portrait and Landscape mode properly
459+ * when Activity is handling Config changes by itself
460+ * call this function from onConfigurationChanged()
461+ */
462+ @JvmStatic
463+ fun handleConfigChangesForInAppNotification () {
464+ MoEInAppHelper .getInstance().onConfigurationChanged()
465+ }
412466}
0 commit comments