From eaeecb81ccd57388584d19c9d9e7d048c6317405 Mon Sep 17 00:00:00 2001 From: Hitesh Kumar Date: Wed, 11 Jun 2025 18:55:44 +0530 Subject: [PATCH] NTP-66974 disable glance widget for google device (#16547) --- .../AppWidgetComponentInitializer.kt | 59 +++++++++++++++++++ .../java/com/naviapp/common/di/AppModule.kt | 3 + .../com/naviapp/glance/utils/GlanceUtils.kt | 9 +++ 3 files changed, 71 insertions(+) create mode 100644 android/app/src/main/java/com/naviapp/app/initializers/AppWidgetComponentInitializer.kt diff --git a/android/app/src/main/java/com/naviapp/app/initializers/AppWidgetComponentInitializer.kt b/android/app/src/main/java/com/naviapp/app/initializers/AppWidgetComponentInitializer.kt new file mode 100644 index 0000000000..c6776a00ca --- /dev/null +++ b/android/app/src/main/java/com/naviapp/app/initializers/AppWidgetComponentInitializer.kt @@ -0,0 +1,59 @@ +/* + * + * * Copyright © 2025 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.naviapp.app.initializers + +import android.content.ComponentName +import android.content.Context +import android.content.pm.PackageManager +import com.navi.common.utils.log +import com.navi.pay.common.ui.NaviPayGlanceWidgetReceiver +import com.naviapp.app.NaviApplication +import com.naviapp.glance.receiver.NaviPaySectionGlanceWidgetReceiver +import com.naviapp.glance.utils.isGlanceWidgetSupported +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class AppWidgetComponentInitializer @Inject constructor() : ComponentInitializer { + + override fun initialize(application: NaviApplication) { + // Configure widget components based on device compatibility + configureWidgetComponents(application) + } + + private fun configureWidgetComponents(context: Context) { + val newState = + if (isGlanceWidgetSupported()) { + PackageManager.COMPONENT_ENABLED_STATE_ENABLED + } else { + PackageManager.COMPONENT_ENABLED_STATE_DISABLED + } + + // List of widget receivers to configure + val widgetReceivers = + listOf( + NaviPaySectionGlanceWidgetReceiver::class.java, + NaviPayGlanceWidgetReceiver::class.java, + ) + + val packageManager = context.packageManager + + widgetReceivers.forEach { receiverClass -> + try { + val componentName = ComponentName(context, receiverClass) + packageManager.setComponentEnabledSetting( + componentName, + newState, + PackageManager.DONT_KILL_APP, + ) + } catch (e: Exception) { + e.log() + } + } + } +} diff --git a/android/app/src/main/java/com/naviapp/common/di/AppModule.kt b/android/app/src/main/java/com/naviapp/common/di/AppModule.kt index f8d0ffd673..c58e600e07 100644 --- a/android/app/src/main/java/com/naviapp/common/di/AppModule.kt +++ b/android/app/src/main/java/com/naviapp/common/di/AppModule.kt @@ -14,6 +14,7 @@ import com.navi.common.network.BaseUrls import com.naviapp.app.NaviApplication import com.naviapp.app.initializers.AnrErrorHandlerInitializer import com.naviapp.app.initializers.AppLifecycleManagerInitializer +import com.naviapp.app.initializers.AppWidgetComponentInitializer import com.naviapp.app.initializers.ComponentInitializer import com.naviapp.app.initializers.CrashHandlerInitializer import com.naviapp.app.initializers.LottieInitializer @@ -61,6 +62,7 @@ object AppModule { networkConfigurationInitializer: NetworkConfigurationInitializer, lottieInitializer: LottieInitializer, trustedTimeClientInitializer: TrustedTimeClientInitializer, + appWidgetComponentInitializer: AppWidgetComponentInitializer, ): List { return listOf( sdkInitializer, @@ -70,6 +72,7 @@ object AppModule { networkConfigurationInitializer, lottieInitializer, trustedTimeClientInitializer, + appWidgetComponentInitializer, ) } } diff --git a/android/app/src/main/java/com/naviapp/glance/utils/GlanceUtils.kt b/android/app/src/main/java/com/naviapp/glance/utils/GlanceUtils.kt index 6f5f08cfe8..32147b385a 100644 --- a/android/app/src/main/java/com/naviapp/glance/utils/GlanceUtils.kt +++ b/android/app/src/main/java/com/naviapp/glance/utils/GlanceUtils.kt @@ -34,3 +34,12 @@ fun triggerUpiSectionGlanceAppWidgetDisplayDialog(context: Context): Boolean { false } } + +fun isGlanceWidgetSupported(): Boolean { + val isVivoDevice = + Build.MANUFACTURER.equals("vivo", ignoreCase = true) || + Build.BRAND.equals("vivo", ignoreCase = true) + val isUnsupportedVersion = Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE + + return !(isVivoDevice && isUnsupportedVersion) +}