diff --git a/app/build.gradle b/app/build.gradle
index 48dbfc4f2..01430973c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -394,11 +394,14 @@ dependencies {
implementation 'androidx.compose.ui:ui:1.7.8'
implementation 'androidx.compose.ui:ui-tooling-preview:1.7.8'
implementation 'androidx.compose.foundation:foundation:1.7.8'
- implementation 'androidx.compose.material:material:1.7.8'
+ implementation 'androidx.compose.material3:material3-android:1.3.2'
implementation 'androidx.compose.runtime:runtime-livedata:1.7.8'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.8.4'
implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.8.4'
implementation 'androidx.compose.ui:ui-tooling:1.7.8'
+ implementation "androidx.constraintlayout:constraintlayout-compose:1.1.0"
+ implementation("io.coil-kt.coil3:coil-compose:3.0.4")
+ implementation("io.coil-kt.coil3:coil-network-okhttp:3.0.4")
/** Google Drive **/
implementation('com.google.api-client:google-api-client:1.23.0') {
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index 69c876a3c..b44f58dd0 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -197,6 +197,7 @@
-keep class org.onflow.flow.models.** { *; }
-keep enum org.onflow.flow.** { *; }
+-dontwarn coil3.PlatformContext
-dontwarn java.lang.management.RuntimeMXBean
-dontwarn com.google.devtools.build.android.desugar.runtime.ThrowableExtension
-dontwarn com.google.protobuf.nano.CodedOutputByteBufferNano
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cb4f6b1de..ccd939c07 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -297,6 +297,10 @@
android:name=".page.profile.subpage.wallet.WalletListActivity"
android:screenOrientation="portrait"/>
+
+
diff --git a/app/src/main/java/com/flowfoundation/wallet/manager/LaunchManager.kt b/app/src/main/java/com/flowfoundation/wallet/manager/LaunchManager.kt
index a1d5e0965..07badb917 100644
--- a/app/src/main/java/com/flowfoundation/wallet/manager/LaunchManager.kt
+++ b/app/src/main/java/com/flowfoundation/wallet/manager/LaunchManager.kt
@@ -8,6 +8,7 @@ import com.flowfoundation.wallet.firebase.config.initFirebaseConfig
import com.flowfoundation.wallet.firebase.firebaseInitialize
import com.flowfoundation.wallet.instabug.instabugInitialize
import com.flowfoundation.wallet.manager.account.AccountManager
+import com.flowfoundation.wallet.manager.account.AccountVisibilityManager
import com.flowfoundation.wallet.manager.account.DeviceInfoManager
import com.flowfoundation.wallet.manager.app.AppLifecycleObserver
import com.flowfoundation.wallet.manager.app.PageLifecycleObserver
@@ -42,7 +43,7 @@ object LaunchManager {
safeRun { System.loadLibrary("TrustWalletCore") }
ioScope {
safeRun {
- AccountManager.init()
+ AccountManager.init()
logd("LaunchManager", "AccountManager initialized successfully")
}
}
@@ -78,6 +79,7 @@ object LaunchManager {
safeRun { NftCollectionStateManager.reload() }
safeRun { CurrencyManager.init() }
safeRun { StakingManager.init() }
+ safeRun { AccountVisibilityManager.init() }
}
private fun setNightMode() {
@@ -97,4 +99,4 @@ object LaunchManager {
private fun runCompatibleScript() {
restoreMnemonicV0()
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/flowfoundation/wallet/manager/account/AccountVisibilityManager.kt b/app/src/main/java/com/flowfoundation/wallet/manager/account/AccountVisibilityManager.kt
new file mode 100644
index 000000000..c926e376b
--- /dev/null
+++ b/app/src/main/java/com/flowfoundation/wallet/manager/account/AccountVisibilityManager.kt
@@ -0,0 +1,171 @@
+package com.flowfoundation.wallet.manager.account
+
+import android.content.Context
+import android.content.SharedPreferences
+import com.flowfoundation.wallet.firebase.auth.firebaseUid
+import com.flowfoundation.wallet.manager.app.AppLifecycleObserver
+import com.flowfoundation.wallet.utils.Env
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+
+/**
+ * Manages account visibility state
+ * Storage structure: Map>
+ * UserId - User ID, Address - Hidden wallet address
+ */
+object AccountVisibilityManager {
+
+ private const val PREF_NAME = "account_visibility"
+ private const val KEY_HIDDEN_ACCOUNTS = "hidden_accounts"
+
+ private var sharedPreferences: SharedPreferences? = null
+ private val gson = Gson()
+
+ // In-memory cache, format: Map>
+ private var hiddenAccountsCache = mutableMapOf>()
+
+ fun init() {
+ if (sharedPreferences == null) {
+ sharedPreferences = Env.getApp().getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)
+ loadHiddenAccounts()
+ }
+ }
+
+ /**
+ * Load hidden account data from SharedPreferences
+ */
+ private fun loadHiddenAccounts() {
+ val json = sharedPreferences?.getString(KEY_HIDDEN_ACCOUNTS, null)
+ if (!json.isNullOrEmpty()) {
+ try {
+ val type = object : TypeToken