diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index ac82ec7f13..ea1cfba74d 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -95,10 +95,49 @@ android:windowSoftInputMode="adjustNothing" tools:ignore="LockedOrientationActivity"> - + + + + + + + + + + + + + + + + + + + + + + { FirebaseRemoteConfigHelper.updateRemoteConfigForcefully() } + NotificationConstants.ACTION_ENABLE_FESTIVE_APP_ICON -> { + setFestiveAppIconEnabledPreference(enabled = true) + } + NotificationConstants.ACTION_DISABLE_FESTIVE_APP_ICON -> { + setFestiveAppIconEnabledPreference(enabled = false) + } } NaviTrackEvent.trackEventOnClickStream( Constants.SILENT_PN_ACTION, diff --git a/android/app/src/main/res/drawable/ic_navi_republic_launcher_foreground.xml b/android/app/src/main/res/drawable/ic_navi_republic_launcher_foreground.xml new file mode 100644 index 0000000000..88c0a0e942 --- /dev/null +++ b/android/app/src/main/res/drawable/ic_navi_republic_launcher_foreground.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_festive_launcher.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_festive_launcher.xml new file mode 100644 index 0000000000..2187e5b9f3 --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_festive_launcher.xml @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_festive_launcher_round.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_festive_launcher_round.xml new file mode 100644 index 0000000000..fa4c4b6fd0 --- /dev/null +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_festive_launcher_round.xml @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/android/app/src/main/res/mipmap-hdpi/ic_festive_launcher.webp b/android/app/src/main/res/mipmap-hdpi/ic_festive_launcher.webp new file mode 100644 index 0000000000..b30dc79b9d Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_festive_launcher.webp differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_festive_launcher_round.webp b/android/app/src/main/res/mipmap-hdpi/ic_festive_launcher_round.webp new file mode 100644 index 0000000000..e7f3635b68 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_festive_launcher_round.webp differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_festive_launcher.webp b/android/app/src/main/res/mipmap-mdpi/ic_festive_launcher.webp new file mode 100644 index 0000000000..9727410d2f Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_festive_launcher.webp differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_festive_launcher_round.webp b/android/app/src/main/res/mipmap-mdpi/ic_festive_launcher_round.webp new file mode 100644 index 0000000000..354d23bfe0 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_festive_launcher_round.webp differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_festive_launcher.webp b/android/app/src/main/res/mipmap-xhdpi/ic_festive_launcher.webp new file mode 100644 index 0000000000..cc2f0c64b8 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_festive_launcher.webp differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_festive_launcher_round.webp b/android/app/src/main/res/mipmap-xhdpi/ic_festive_launcher_round.webp new file mode 100644 index 0000000000..7dab994819 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_festive_launcher_round.webp differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_festive_launcher.webp b/android/app/src/main/res/mipmap-xxhdpi/ic_festive_launcher.webp new file mode 100644 index 0000000000..eda035243a Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_festive_launcher.webp differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_festive_launcher_round.webp b/android/app/src/main/res/mipmap-xxhdpi/ic_festive_launcher_round.webp new file mode 100644 index 0000000000..ba892a7e73 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_festive_launcher_round.webp differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_festive_launcher.webp b/android/app/src/main/res/mipmap-xxxhdpi/ic_festive_launcher.webp new file mode 100644 index 0000000000..358460131c Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_festive_launcher.webp differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_festive_launcher_round.webp b/android/app/src/main/res/mipmap-xxxhdpi/ic_festive_launcher_round.webp new file mode 100644 index 0000000000..67cec3a1d2 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_festive_launcher_round.webp differ diff --git a/android/app/src/main/res/values/ic_festive_launcher_background.xml b/android/app/src/main/res/values/ic_festive_launcher_background.xml new file mode 100644 index 0000000000..a1c9486869 --- /dev/null +++ b/android/app/src/main/res/values/ic_festive_launcher_background.xml @@ -0,0 +1,12 @@ + + + + + + #3C0050 + diff --git a/android/navi-base/src/main/java/com/navi/base/sharedpref/CommonPrefConstants.kt b/android/navi-base/src/main/java/com/navi/base/sharedpref/CommonPrefConstants.kt index b5fe7cddf9..a6750de80f 100644 --- a/android/navi-base/src/main/java/com/navi/base/sharedpref/CommonPrefConstants.kt +++ b/android/navi-base/src/main/java/com/navi/base/sharedpref/CommonPrefConstants.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2021-2024 by Navi Technologies Limited + * * Copyright © 2021-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -32,4 +32,5 @@ object CommonPrefConstants { const val PREVIOUS_LOGGED_IN_EXTERNAL_CUSTOMER_ID = "PREVIOUS_LOGGED_IN_EXTERNAL_CUSTOMER_ID" const val PREVIOUS_GOOGLE_ADVERTISEMENT_ID = "PREVIOUS_GOOGLE_ADVERTISEMENT_ID" const val PREVIOUS_APPSFLYER_ID = "PREVIOUS_APPSFLYER_ID" + const val IS_FESTIVE_APP_ICON_ENABLED = "IS_FESTIVE_APP_ICON_ENABLED" } diff --git a/android/navi-common/src/main/java/com/navi/common/firebaseremoteconfig/FirebaseRemoteConfigHelper.kt b/android/navi-common/src/main/java/com/navi/common/firebaseremoteconfig/FirebaseRemoteConfigHelper.kt index f3db19443c..55c709f1c0 100644 --- a/android/navi-common/src/main/java/com/navi/common/firebaseremoteconfig/FirebaseRemoteConfigHelper.kt +++ b/android/navi-common/src/main/java/com/navi/common/firebaseremoteconfig/FirebaseRemoteConfigHelper.kt @@ -251,6 +251,8 @@ object FirebaseRemoteConfigHelper { "MONEY_MANAGER_DASHBOARD_SPEND_CATEGORIZATION_TIMEOUT" const val MM_DARK_MODE_ENABLED = "MM_DARK_MODE_ENABLED" + const val IS_FESTIVE_APP_ICON_ENABLED = "IS_FESTIVE_APP_ICON_ENABLED" + private fun getFirebaseRemoteConfig(): FirebaseRemoteConfig { val remoteConfig = Firebase.remoteConfig val configSettings = remoteConfigSettings { diff --git a/android/navi-common/src/main/java/com/navi/common/pushnotification/NotificationConstants.kt b/android/navi-common/src/main/java/com/navi/common/pushnotification/NotificationConstants.kt index 4bf2e97f59..ee601a0a29 100644 --- a/android/navi-common/src/main/java/com/navi/common/pushnotification/NotificationConstants.kt +++ b/android/navi-common/src/main/java/com/navi/common/pushnotification/NotificationConstants.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2020-2024 by Navi Technologies Limited + * * Copyright © 2020-2025 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -55,4 +55,8 @@ object NotificationConstants { const val MODULE_NAME = "module_name" const val COLUMN_NAME = "column_name" const val COMMA_SEPARATED_TABLE_KEYS = "comma_separated_table_keys" + + // Festive App Icon + const val ACTION_ENABLE_FESTIVE_APP_ICON = "ACTION_ENABLE_FESTIVE_APP_ICON" + const val ACTION_DISABLE_FESTIVE_APP_ICON = "ACTION_DISABLE_FESTIVE_APP_ICON" } diff --git a/android/navi-common/src/main/java/com/navi/common/utils/FestiveAppIconUtil.kt b/android/navi-common/src/main/java/com/navi/common/utils/FestiveAppIconUtil.kt new file mode 100644 index 0000000000..1e14f96bd7 --- /dev/null +++ b/android/navi-common/src/main/java/com/navi/common/utils/FestiveAppIconUtil.kt @@ -0,0 +1,85 @@ +/* + * + * * Copyright © 2025 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.common.utils + +import android.content.ComponentName +import android.content.Context +import android.content.pm.PackageManager +import com.navi.base.sharedpref.CommonPrefConstants +import com.navi.base.sharedpref.PreferenceManager +import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper + +fun setFestiveAppIconEnabledPreference(enabled: Boolean) { + PreferenceManager.setBooleanPreferenceApp( + key = CommonPrefConstants.IS_FESTIVE_APP_ICON_ENABLED, + value = enabled, + ) +} + +fun Context.handleLauncherIconAlias() { + if ( + FirebaseRemoteConfigHelper.getBoolean( + key = FirebaseRemoteConfigHelper.IS_FESTIVE_APP_ICON_ENABLED, + defaultValue = false, + ) || + PreferenceManager.getBooleanPreferenceApp( + key = CommonPrefConstants.IS_FESTIVE_APP_ICON_ENABLED, + defValue = false, + ) + ) { + enableIconAliasFestive() + disableIconAliasDefault() + disableIconAliasDefaultClone() + } else { + enableIconAliasDefaultClone() + disableIconAliasFestive() + disableIconAliasDefault() + } +} + +fun Context.disableIconAliasDefault() { + packageManager.setComponentEnabledSetting( + ComponentName(this, ICON_ALIAS_CLASS_NAME_PREFIX + "IconAliasDefault"), + PackageManager.COMPONENT_ENABLED_STATE_DISABLED, + PackageManager.DONT_KILL_APP, + ) +} + +fun Context.disableIconAliasDefaultClone() { + packageManager.setComponentEnabledSetting( + ComponentName(this, ICON_ALIAS_CLASS_NAME_PREFIX + "IconAliasDefaultClone"), + PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP, + ) +} + +fun Context.enableIconAliasDefaultClone() { + packageManager.setComponentEnabledSetting( + ComponentName(this, ICON_ALIAS_CLASS_NAME_PREFIX + "IconAliasDefaultClone"), + PackageManager.COMPONENT_ENABLED_STATE_ENABLED, + PackageManager.DONT_KILL_APP, + ) +} + +fun Context.disableIconAliasFestive() { + packageManager.setComponentEnabledSetting( + ComponentName(this, ICON_ALIAS_CLASS_NAME_PREFIX + "IconAliasFestive"), + PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP, + ) +} + +fun Context.enableIconAliasFestive() { + packageManager.setComponentEnabledSetting( + ComponentName(this, ICON_ALIAS_CLASS_NAME_PREFIX + "IconAliasFestive"), + PackageManager.COMPONENT_ENABLED_STATE_ENABLED, + PackageManager.DONT_KILL_APP, + ) +} + +const val ICON_ALIAS_CLASS_NAME_PREFIX = "com.naviapp.alias." diff --git a/android/navi-common/src/main/res/xml/default_remote_config.xml b/android/navi-common/src/main/res/xml/default_remote_config.xml index afd5f3feb4..5ac41a40f4 100644 --- a/android/navi-common/src/main/res/xml/default_remote_config.xml +++ b/android/navi-common/src/main/res/xml/default_remote_config.xml @@ -654,4 +654,8 @@ MM_DARK_MODE_ENABLED false + + IS_FESTIVE_APP_ICON_ENABLED + false + \ No newline at end of file