Skip to content

Commit 7eb6ced

Browse files
committed
Push and In-App Notification configuration.
1 parent 320e21e commit 7eb6ced

File tree

4 files changed

+86
-8
lines changed

4 files changed

+86
-8
lines changed

app/src/gplay/AndroidManifest.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@
7070
</intent-filter>
7171
</service>
7272

73+
<!-- NMC: MoEngage Activity to handle the Rich Landing page -->
74+
<activity
75+
android:name="com.moe.pushlibrary.activities.MoEActivity"
76+
android:exported="false"
77+
android:parentActivityName=".ui.activity.FileDisplayActivity" />
78+
7379
</application>
7480

7581
</manifest>

app/src/gplay/java/com/owncloud/android/services/firebase/NCFirebaseMessagingService.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
import com.google.firebase.messaging.Constants.MessageNotificationKeys;
1414
import com.google.firebase.messaging.FirebaseMessagingService;
1515
import com.google.firebase.messaging.RemoteMessage;
16+
import com.moengage.firebase.MoEFireBaseHelper;
17+
import com.moengage.pushbase.MoEPushHelper;
1618
import com.nextcloud.client.account.UserAccountManager;
1719
import com.nextcloud.client.jobs.BackgroundJobManager;
1820
import com.nextcloud.client.jobs.NotificationWork;
@@ -82,6 +84,12 @@ public void handleIntent(Intent intent) {
8284
@Override
8385
public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
8486
Log_OC.d(TAG, "onMessageReceived");
87+
// NMC: check and pass the Notification payload to MoEngage to handle it
88+
if (MoEPushHelper.getInstance().isFromMoEngagePlatform(remoteMessage.getData())) {
89+
MoEFireBaseHelper.getInstance().passPushPayload(getApplicationContext(), remoteMessage.getData());
90+
return;
91+
}
92+
8593
final Map<String, String> data = remoteMessage.getData();
8694
final String subject = data.get(NotificationWork.KEY_NOTIFICATION_SUBJECT);
8795
final String signature = data.get(NotificationWork.KEY_NOTIFICATION_SIGNATURE);

app/src/main/java/com/nmc/android/marketTracking/MoEngageSdkUtils.kt

Lines changed: 62 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,27 @@
77

88
package com.nmc.android.marketTracking
99

10+
import android.Manifest
1011
import android.app.Application
1112
import android.content.Context
13+
import android.os.Build
1214
import com.moengage.core.DataCenter
1315
import com.moengage.core.MoECoreHelper
1416
import com.moengage.core.MoEngage
1517
import com.moengage.core.Properties
1618
import com.moengage.core.analytics.MoEAnalyticsHelper
19+
import com.moengage.core.config.NotificationConfig
1720
import com.moengage.core.enableAdIdTracking
1821
import com.moengage.core.enableAndroidIdTracking
1922
import com.moengage.core.model.AppStatus
23+
import com.moengage.inapp.MoEInAppHelper
24+
import com.moengage.pushbase.MoEPushHelper
2025
import com.nextcloud.client.account.User
2126
import com.nextcloud.common.NextcloudClient
2227
import com.nextcloud.utils.extensions.getFormattedStringDate
2328
import com.nmc.android.utils.FileUtils
2429
import com.owncloud.android.BuildConfig
30+
import com.owncloud.android.R
2531
import com.owncloud.android.datamodel.OCFile
2632
import com.owncloud.android.datamodel.Template
2733
import com.owncloud.android.lib.common.OwnCloudClientFactory
@@ -31,6 +37,7 @@ import com.owncloud.android.lib.common.accounts.AccountUtils
3137
import com.owncloud.android.lib.common.utils.Log_OC
3238
import com.owncloud.android.lib.resources.users.GetUserInfoRemoteOperation
3339
import com.owncloud.android.utils.MimeTypeUtil
40+
import com.owncloud.android.utils.PermissionUtil
3441
import kotlin.math.ceil
3542
import 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
}

app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
import com.nextcloud.utils.fileNameValidator.FileNameValidator;
7474
import com.nextcloud.utils.view.FastScrollUtils;
7575
import com.owncloud.android.MainApp;
76+
import com.nmc.android.marketTracking.MoEngageSdkUtils;
7677
import com.owncloud.android.R;
7778
import com.owncloud.android.databinding.FilesBinding;
7879
import com.owncloud.android.datamodel.FileDataStorageManager;
@@ -455,6 +456,9 @@ public void onConfigurationChanged(@NonNull Configuration newConfig) {
455456
}
456457
}
457458
}
459+
460+
// NMC: Notify MoEngage about Config Changes for In-App Notifications
461+
MoEngageSdkUtils.handleConfigChangesForInAppNotification();
458462
}
459463

460464
@Override
@@ -545,6 +549,9 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis
545549
// handle notification permission on API level >= 33
546550
// dialogue was dismissed -> prompt for storage permissions
547551
PermissionUtil.requestExternalStoragePermission(this, viewThemeUtils);
552+
553+
// NMC: Notify MoEngage about the post notification permission response
554+
MoEngageSdkUtils.updatePostNotificationsPermission(this);
548555
break;
549556
case PermissionUtil.PERMISSIONS_EXTERNAL_STORAGE:
550557
// If request is cancelled, result arrays are empty.
@@ -2524,6 +2531,9 @@ public void onStart() {
25242531
}
25252532
lastDisplayedUser = optionalUser.orElse(null);
25262533

2534+
// NMC: show in-app notifications
2535+
MoEngageSdkUtils.displayInAppNotification(this);
2536+
25272537
EventBus.getDefault().post(new TokenPushEvent());
25282538
checkForNewDevVersionNecessary(getApplicationContext());
25292539
}

0 commit comments

Comments
 (0)