diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 73b00f79..137c6de8 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -1,67 +1,67 @@
 
 
 
-	
-		CADisableMinimumFrameDurationOnPhone
-		
-		CFBundleDevelopmentRegion
-		$(DEVELOPMENT_LANGUAGE)
-		CFBundleDisplayName
-		Island
-		CFBundleExecutable
-		$(EXECUTABLE_NAME)
-		CFBundleIdentifier
-		$(PRODUCT_BUNDLE_IDENTIFIER)
-		CFBundleInfoDictionaryVersion
-		6.0
-		CFBundleName
-		island
-		CFBundlePackageType
-		APPL
-		CFBundleShortVersionString
-		$(FLUTTER_BUILD_NAME)
-		CFBundleSignature
-		????
-		CFBundleVersion
-		$(FLUTTER_BUILD_NUMBER)
-		LSRequiresIPhoneOS
-		
-		UIApplicationSupportsIndirectInputEvents
-		
-		UIBackgroundModes
-		
-			fetch
-			audio
-			remote-notification
-		
-		UILaunchStoryboardName
-		LaunchScreen
-		UIMainStoryboardFile
-		Main
-		UISupportedInterfaceOrientations
-		
-			UIInterfaceOrientationPortrait
-			UIInterfaceOrientationLandscapeLeft
-			UIInterfaceOrientationLandscapeRight
-		
-		UISupportedInterfaceOrientations~ipad
-		
-			UIInterfaceOrientationPortrait
-			UIInterfaceOrientationPortraitUpsideDown
-			UIInterfaceOrientationLandscapeLeft
-			UIInterfaceOrientationLandscapeRight
-		
-		NSCalendarsUsageDescription
-		Grant access to Calander help us to shows Solar Calander with your own events.
-		NSCameraUsageDescription
-		Grant access to Camera will allow Solian take photo or video for your post.
-		NSMicrophoneUsageDescription
-		Grant access to Microphone will allow Solian record audio for your post.
-		NSPhotoLibraryAddUsageDescription
-		Grant access to Photo Library will allow Solian download photo to album for you.
-		NSPhotoLibraryUsageDescription
-		Grant access to Photo Library will allow Solian upload photo or video for your post.
-		UIStatusBarHidden
-		
-	
+
+	CADisableMinimumFrameDurationOnPhone
+	
+	CFBundleDevelopmentRegion
+	$(DEVELOPMENT_LANGUAGE)
+	CFBundleDisplayName
+	Solian
+	CFBundleExecutable
+	$(EXECUTABLE_NAME)
+	CFBundleIdentifier
+	$(PRODUCT_BUNDLE_IDENTIFIER)
+	CFBundleInfoDictionaryVersion
+	6.0
+	CFBundleName
+	solian
+	CFBundlePackageType
+	APPL
+	CFBundleShortVersionString
+	$(FLUTTER_BUILD_NAME)
+	CFBundleSignature
+	????
+	CFBundleVersion
+	$(FLUTTER_BUILD_NUMBER)
+	LSRequiresIPhoneOS
+	
+	UIApplicationSupportsIndirectInputEvents
+	
+	UIBackgroundModes
+	
+		fetch
+		audio
+		remote-notification
+	
+	UILaunchStoryboardName
+	LaunchScreen
+	UIMainStoryboardFile
+	Main
+	UISupportedInterfaceOrientations
+	
+		UIInterfaceOrientationPortrait
+		UIInterfaceOrientationLandscapeLeft
+		UIInterfaceOrientationLandscapeRight
+	
+	UISupportedInterfaceOrientations~ipad
+	
+		UIInterfaceOrientationPortrait
+		UIInterfaceOrientationPortraitUpsideDown
+		UIInterfaceOrientationLandscapeLeft
+		UIInterfaceOrientationLandscapeRight
+	
+	NSCalendarsUsageDescription
+	Grant access to Calander help us to shows Solar Calander with your own events.
+	NSCameraUsageDescription
+	Grant access to Camera will allow Solian take photo or video for your post.
+	NSMicrophoneUsageDescription
+	Grant access to Microphone will allow Solian record audio for your post.
+	NSPhotoLibraryAddUsageDescription
+	Grant access to Photo Library will allow Solian download photo to album for you.
+	NSPhotoLibraryUsageDescription
+	Grant access to Photo Library will allow Solian upload photo or video for your post.
+	UIStatusBarHidden
+	
+
 
diff --git a/lib/pods/config.dart b/lib/pods/config.dart
index 59a39690..d2860552 100644
--- a/lib/pods/config.dart
+++ b/lib/pods/config.dart
@@ -53,10 +53,7 @@ final serverUrlProvider = Provider((ref) {
 @freezed
 abstract class AppSettings with _$AppSettings {
   const factory AppSettings({
-    required bool realmCompactView,
-    required bool mixedFeed,
     required bool autoTranslate,
-    required bool hideBottomNav,
     required bool soundEffects,
     required bool aprilFoolFeatures,
     required bool enterToSend,
@@ -69,36 +66,18 @@ class AppSettingsNotifier extends StateNotifier {
   AppSettingsNotifier(this.prefs)
     : super(
         AppSettings(
-          realmCompactView: prefs.getBool(kAppRealmCompactView) ?? false,
-          mixedFeed: prefs.getBool(kAppMixedFeed) ?? true,
           autoTranslate: prefs.getBool(kAppAutoTranslate) ?? false,
-          hideBottomNav: prefs.getBool(kAppHideBottomNav) ?? false,
           soundEffects: prefs.getBool(kAppSoundEffects) ?? true,
           aprilFoolFeatures: prefs.getBool(kAppAprilFoolFeatures) ?? true,
           enterToSend: prefs.getBool(kAppEnterToSend) ?? true,
         ),
       );
 
-  void setRealmCompactView(bool value) {
-    prefs.setBool(kAppRealmCompactView, value);
-    state = state.copyWith(realmCompactView: value);
-  }
-
-  void setMixedFeed(bool value) {
-    prefs.setBool(kAppMixedFeed, value);
-    state = state.copyWith(mixedFeed: value);
-  }
-
   void setAutoTranslate(bool value) {
     prefs.setBool(kAppAutoTranslate, value);
     state = state.copyWith(autoTranslate: value);
   }
 
-  void setHideBottomNav(bool value) {
-    prefs.setBool(kAppHideBottomNav, value);
-    state = state.copyWith(hideBottomNav: value);
-  }
-
   void setSoundEffects(bool value) {
     prefs.setBool(kAppSoundEffects, value);
     state = state.copyWith(soundEffects: value);
diff --git a/lib/pods/config.freezed.dart b/lib/pods/config.freezed.dart
index 0cd24bbd..afb08482 100644
--- a/lib/pods/config.freezed.dart
+++ b/lib/pods/config.freezed.dart
@@ -15,7 +15,7 @@ T _$identity(T value) => value;
 /// @nodoc
 mixin _$AppSettings {
 
- bool get realmCompactView; bool get mixedFeed; bool get autoTranslate; bool get hideBottomNav; bool get soundEffects; bool get aprilFoolFeatures; bool get enterToSend;
+ bool get autoTranslate; bool get soundEffects; bool get aprilFoolFeatures; bool get enterToSend;
 /// Create a copy of AppSettings
 /// with the given fields replaced by the non-null parameter values.
 @JsonKey(includeFromJson: false, includeToJson: false)
@@ -26,16 +26,16 @@ $AppSettingsCopyWith get copyWith => _$AppSettingsCopyWithImpl Object.hash(runtimeType,realmCompactView,mixedFeed,autoTranslate,hideBottomNav,soundEffects,aprilFoolFeatures,enterToSend);
+int get hashCode => Object.hash(runtimeType,autoTranslate,soundEffects,aprilFoolFeatures,enterToSend);
 
 @override
 String toString() {
-  return 'AppSettings(realmCompactView: $realmCompactView, mixedFeed: $mixedFeed, autoTranslate: $autoTranslate, hideBottomNav: $hideBottomNav, soundEffects: $soundEffects, aprilFoolFeatures: $aprilFoolFeatures, enterToSend: $enterToSend)';
+  return 'AppSettings(autoTranslate: $autoTranslate, soundEffects: $soundEffects, aprilFoolFeatures: $aprilFoolFeatures, enterToSend: $enterToSend)';
 }
 
 
@@ -46,7 +46,7 @@ abstract mixin class $AppSettingsCopyWith<$Res>  {
   factory $AppSettingsCopyWith(AppSettings value, $Res Function(AppSettings) _then) = _$AppSettingsCopyWithImpl;
 @useResult
 $Res call({
- bool realmCompactView, bool mixedFeed, bool autoTranslate, bool hideBottomNav, bool soundEffects, bool aprilFoolFeatures, bool enterToSend
+ bool autoTranslate, bool soundEffects, bool aprilFoolFeatures, bool enterToSend
 });
 
 
@@ -63,12 +63,9 @@ class _$AppSettingsCopyWithImpl<$Res>
 
 /// Create a copy of AppSettings
 /// with the given fields replaced by the non-null parameter values.
-@pragma('vm:prefer-inline') @override $Res call({Object? realmCompactView = null,Object? mixedFeed = null,Object? autoTranslate = null,Object? hideBottomNav = null,Object? soundEffects = null,Object? aprilFoolFeatures = null,Object? enterToSend = null,}) {
+@pragma('vm:prefer-inline') @override $Res call({Object? autoTranslate = null,Object? soundEffects = null,Object? aprilFoolFeatures = null,Object? enterToSend = null,}) {
   return _then(_self.copyWith(
-realmCompactView: null == realmCompactView ? _self.realmCompactView : realmCompactView // ignore: cast_nullable_to_non_nullable
-as bool,mixedFeed: null == mixedFeed ? _self.mixedFeed : mixedFeed // ignore: cast_nullable_to_non_nullable
-as bool,autoTranslate: null == autoTranslate ? _self.autoTranslate : autoTranslate // ignore: cast_nullable_to_non_nullable
-as bool,hideBottomNav: null == hideBottomNav ? _self.hideBottomNav : hideBottomNav // ignore: cast_nullable_to_non_nullable
+autoTranslate: null == autoTranslate ? _self.autoTranslate : autoTranslate // ignore: cast_nullable_to_non_nullable
 as bool,soundEffects: null == soundEffects ? _self.soundEffects : soundEffects // ignore: cast_nullable_to_non_nullable
 as bool,aprilFoolFeatures: null == aprilFoolFeatures ? _self.aprilFoolFeatures : aprilFoolFeatures // ignore: cast_nullable_to_non_nullable
 as bool,enterToSend: null == enterToSend ? _self.enterToSend : enterToSend // ignore: cast_nullable_to_non_nullable
@@ -83,13 +80,10 @@ as bool,
 
 
 class _AppSettings implements AppSettings {
-  const _AppSettings({required this.realmCompactView, required this.mixedFeed, required this.autoTranslate, required this.hideBottomNav, required this.soundEffects, required this.aprilFoolFeatures, required this.enterToSend});
+  const _AppSettings({required this.autoTranslate, required this.soundEffects, required this.aprilFoolFeatures, required this.enterToSend});
   
 
-@override final  bool realmCompactView;
-@override final  bool mixedFeed;
 @override final  bool autoTranslate;
-@override final  bool hideBottomNav;
 @override final  bool soundEffects;
 @override final  bool aprilFoolFeatures;
 @override final  bool enterToSend;
@@ -104,16 +98,16 @@ _$AppSettingsCopyWith<_AppSettings> get copyWith => __$AppSettingsCopyWithImpl<_
 
 @override
 bool operator ==(Object other) {
-  return identical(this, other) || (other.runtimeType == runtimeType&&other is _AppSettings&&(identical(other.realmCompactView, realmCompactView) || other.realmCompactView == realmCompactView)&&(identical(other.mixedFeed, mixedFeed) || other.mixedFeed == mixedFeed)&&(identical(other.autoTranslate, autoTranslate) || other.autoTranslate == autoTranslate)&&(identical(other.hideBottomNav, hideBottomNav) || other.hideBottomNav == hideBottomNav)&&(identical(other.soundEffects, soundEffects) || other.soundEffects == soundEffects)&&(identical(other.aprilFoolFeatures, aprilFoolFeatures) || other.aprilFoolFeatures == aprilFoolFeatures)&&(identical(other.enterToSend, enterToSend) || other.enterToSend == enterToSend));
+  return identical(this, other) || (other.runtimeType == runtimeType&&other is _AppSettings&&(identical(other.autoTranslate, autoTranslate) || other.autoTranslate == autoTranslate)&&(identical(other.soundEffects, soundEffects) || other.soundEffects == soundEffects)&&(identical(other.aprilFoolFeatures, aprilFoolFeatures) || other.aprilFoolFeatures == aprilFoolFeatures)&&(identical(other.enterToSend, enterToSend) || other.enterToSend == enterToSend));
 }
 
 
 @override
-int get hashCode => Object.hash(runtimeType,realmCompactView,mixedFeed,autoTranslate,hideBottomNav,soundEffects,aprilFoolFeatures,enterToSend);
+int get hashCode => Object.hash(runtimeType,autoTranslate,soundEffects,aprilFoolFeatures,enterToSend);
 
 @override
 String toString() {
-  return 'AppSettings(realmCompactView: $realmCompactView, mixedFeed: $mixedFeed, autoTranslate: $autoTranslate, hideBottomNav: $hideBottomNav, soundEffects: $soundEffects, aprilFoolFeatures: $aprilFoolFeatures, enterToSend: $enterToSend)';
+  return 'AppSettings(autoTranslate: $autoTranslate, soundEffects: $soundEffects, aprilFoolFeatures: $aprilFoolFeatures, enterToSend: $enterToSend)';
 }
 
 
@@ -124,7 +118,7 @@ abstract mixin class _$AppSettingsCopyWith<$Res> implements $AppSettingsCopyWith
   factory _$AppSettingsCopyWith(_AppSettings value, $Res Function(_AppSettings) _then) = __$AppSettingsCopyWithImpl;
 @override @useResult
 $Res call({
- bool realmCompactView, bool mixedFeed, bool autoTranslate, bool hideBottomNav, bool soundEffects, bool aprilFoolFeatures, bool enterToSend
+ bool autoTranslate, bool soundEffects, bool aprilFoolFeatures, bool enterToSend
 });
 
 
@@ -141,12 +135,9 @@ class __$AppSettingsCopyWithImpl<$Res>
 
 /// Create a copy of AppSettings
 /// with the given fields replaced by the non-null parameter values.
-@override @pragma('vm:prefer-inline') $Res call({Object? realmCompactView = null,Object? mixedFeed = null,Object? autoTranslate = null,Object? hideBottomNav = null,Object? soundEffects = null,Object? aprilFoolFeatures = null,Object? enterToSend = null,}) {
+@override @pragma('vm:prefer-inline') $Res call({Object? autoTranslate = null,Object? soundEffects = null,Object? aprilFoolFeatures = null,Object? enterToSend = null,}) {
   return _then(_AppSettings(
-realmCompactView: null == realmCompactView ? _self.realmCompactView : realmCompactView // ignore: cast_nullable_to_non_nullable
-as bool,mixedFeed: null == mixedFeed ? _self.mixedFeed : mixedFeed // ignore: cast_nullable_to_non_nullable
-as bool,autoTranslate: null == autoTranslate ? _self.autoTranslate : autoTranslate // ignore: cast_nullable_to_non_nullable
-as bool,hideBottomNav: null == hideBottomNav ? _self.hideBottomNav : hideBottomNav // ignore: cast_nullable_to_non_nullable
+autoTranslate: null == autoTranslate ? _self.autoTranslate : autoTranslate // ignore: cast_nullable_to_non_nullable
 as bool,soundEffects: null == soundEffects ? _self.soundEffects : soundEffects // ignore: cast_nullable_to_non_nullable
 as bool,aprilFoolFeatures: null == aprilFoolFeatures ? _self.aprilFoolFeatures : aprilFoolFeatures // ignore: cast_nullable_to_non_nullable
 as bool,enterToSend: null == enterToSend ? _self.enterToSend : enterToSend // ignore: cast_nullable_to_non_nullable
diff --git a/lib/screens/chat/chat.dart b/lib/screens/chat/chat.dart
index 572637df..d9b57f5f 100644
--- a/lib/screens/chat/chat.dart
+++ b/lib/screens/chat/chat.dart
@@ -241,9 +241,30 @@ class ChatListScreen extends HookConsumerWidget {
         bottom: TabBar(
           controller: tabController,
           tabs: [
-            Tab(text: 'chatTabAll'.tr()),
-            Tab(text: 'chatTabDirect'.tr()),
-            Tab(text: 'chatTabGroup'.tr()),
+            Tab(
+              child: Text(
+                'chatTabAll'.tr(),
+                style: TextStyle(
+                  color: Theme.of(context).appBarTheme.foregroundColor!,
+                ),
+              ),
+            ),
+            Tab(
+              child: Text(
+                'chatTabDirect'.tr(),
+                style: TextStyle(
+                  color: Theme.of(context).appBarTheme.foregroundColor!,
+                ),
+              ),
+            ),
+            Tab(
+              child: Text(
+                'chatTabGroup'.tr(),
+                style: TextStyle(
+                  color: Theme.of(context).appBarTheme.foregroundColor!,
+                ),
+              ),
+            ),
           ],
         ),
         actions: [
@@ -310,57 +331,78 @@ class ChatListScreen extends HookConsumerWidget {
         },
         child: const Icon(Symbols.add),
       ),
-      body: chats.when(
-        data:
-            (items) => RefreshIndicator(
-              onRefresh:
-                  () => Future.sync(() {
-                    ref.invalidate(chatroomsJoinedProvider);
-                  }),
-              child: ListView.builder(
-                padding: EdgeInsets.zero,
-                itemCount:
-                    items
-                        .where(
-                          (item) =>
-                              selectedTab.value == 0 ||
-                              (selectedTab.value == 1 && item.type == 1) ||
-                              (selectedTab.value == 2 && item.type != 1),
-                        )
-                        .length,
-                itemBuilder: (context, index) {
-                  final filteredItems =
-                      items
-                          .where(
-                            (item) =>
-                                selectedTab.value == 0 ||
-                                (selectedTab.value == 1 && item.type == 1) ||
-                                (selectedTab.value == 2 && item.type != 1),
-                          )
-                          .toList();
-                  final item = filteredItems[index];
-                  return ChatRoomListTile(
-                    room: item,
-                    isDirect: item.type == 1,
-                    onTap: () {
-                      if (context.router.topRoute.name == ChatRoomRoute.name) {
-                        context.router.replace(ChatRoomRoute(id: item.id));
-                      } else {
-                        context.router.push(ChatRoomRoute(id: item.id));
-                      }
+      body: Column(
+        children: [
+          Consumer(
+            builder: (context, ref, _) {
+              final summaryState = ref.watch(chatSummaryProvider);
+              return summaryState.maybeWhen(
+                loading: () => const LinearProgressIndicator(),
+                orElse: () => const SizedBox.shrink(),
+              );
+            },
+          ),
+          Expanded(
+            child: chats.when(
+              data:
+                  (items) => RefreshIndicator(
+                    onRefresh:
+                        () => Future.sync(() {
+                          ref.invalidate(chatroomsJoinedProvider);
+                        }),
+                    child: ListView.builder(
+                      padding: EdgeInsets.zero,
+                      itemCount:
+                          items
+                              .where(
+                                (item) =>
+                                    selectedTab.value == 0 ||
+                                    (selectedTab.value == 1 &&
+                                        item.type == 1) ||
+                                    (selectedTab.value == 2 && item.type != 1),
+                              )
+                              .length,
+                      itemBuilder: (context, index) {
+                        final filteredItems =
+                            items
+                                .where(
+                                  (item) =>
+                                      selectedTab.value == 0 ||
+                                      (selectedTab.value == 1 &&
+                                          item.type == 1) ||
+                                      (selectedTab.value == 2 &&
+                                          item.type != 1),
+                                )
+                                .toList();
+                        final item = filteredItems[index];
+                        return ChatRoomListTile(
+                          room: item,
+                          isDirect: item.type == 1,
+                          onTap: () {
+                            if (context.router.topRoute.name ==
+                                ChatRoomRoute.name) {
+                              context.router.replace(
+                                ChatRoomRoute(id: item.id),
+                              );
+                            } else {
+                              context.router.push(ChatRoomRoute(id: item.id));
+                            }
+                          },
+                        );
+                      },
+                    ),
+                  ),
+              loading: () => const Center(child: CircularProgressIndicator()),
+              error:
+                  (error, stack) => ResponseErrorWidget(
+                    error: error,
+                    onRetry: () {
+                      ref.invalidate(chatroomsJoinedProvider);
                     },
-                  );
-                },
-              ),
-            ),
-        loading: () => const Center(child: CircularProgressIndicator()),
-        error:
-            (error, stack) => ResponseErrorWidget(
-              error: error,
-              onRetry: () {
-                ref.invalidate(chatroomsJoinedProvider);
-              },
+                  ),
             ),
+          ),
+        ],
       ),
     );
   }
diff --git a/lib/screens/settings.dart b/lib/screens/settings.dart
index 50ca4824..13c67c1b 100644
--- a/lib/screens/settings.dart
+++ b/lib/screens/settings.dart
@@ -176,32 +176,6 @@ class SettingsScreen extends HookConsumerWidget {
                 },
               ),
             const Divider(),
-            ListTile(
-              minLeadingWidth: 48,
-              title: Text('settingsRealmCompactView').tr(),
-              contentPadding: const EdgeInsets.only(left: 24, right: 17),
-              leading: const Icon(Symbols.view_compact),
-              trailing: Switch(
-                value: settings.realmCompactView,
-                onChanged: (value) {
-                  ref
-                      .read(appSettingsProvider.notifier)
-                      .setRealmCompactView(value);
-                },
-              ),
-            ),
-            ListTile(
-              minLeadingWidth: 48,
-              title: Text('settingsMixedFeed').tr(),
-              contentPadding: const EdgeInsets.only(left: 24, right: 17),
-              leading: const Icon(Symbols.merge),
-              trailing: Switch(
-                value: settings.mixedFeed,
-                onChanged: (value) {
-                  ref.read(appSettingsProvider.notifier).setMixedFeed(value);
-                },
-              ),
-            ),
             ListTile(
               minLeadingWidth: 48,
               title: Text('settingsAutoTranslate').tr(),
@@ -216,20 +190,6 @@ class SettingsScreen extends HookConsumerWidget {
                 },
               ),
             ),
-            ListTile(
-              minLeadingWidth: 48,
-              title: Text('settingsHideBottomNav').tr(),
-              contentPadding: const EdgeInsets.only(left: 24, right: 17),
-              leading: const Icon(Symbols.navigation),
-              trailing: Switch(
-                value: settings.hideBottomNav,
-                onChanged: (value) {
-                  ref
-                      .read(appSettingsProvider.notifier)
-                      .setHideBottomNav(value);
-                },
-              ),
-            ),
             ListTile(
               minLeadingWidth: 48,
               title: Text('settingsSoundEffects').tr(),