diff --git a/app/build.gradle b/app/build.gradle
index d731e57b5b300ecde76ca34c491d6b97d51bcc45..89adbc9d56da240b2e040f25833f0cb91b32f0e1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -11,8 +11,8 @@ android {
         applicationId 'io.github.muntashirakon.AppManager'
         minSdkVersion rootProject.ext.minSdk
         targetSdkVersion rootProject.ext.targetSdk
-        versionCode 414
-        versionName "3.0.3"
+        versionCode 416
+        versionName "3.0.4"
         javaCompileOptions {
             annotationProcessorOptions {
                 arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/details/AppDetailsFragment.java b/app/src/main/java/io/github/muntashirakon/AppManager/details/AppDetailsFragment.java
index 329c02e6066e63f86c83efb62077f93410defe92..e08697ed47f074be0847d5bf61b7abd9c3997bc2 100644
--- a/app/src/main/java/io/github/muntashirakon/AppManager/details/AppDetailsFragment.java
+++ b/app/src/main/java/io/github/muntashirakon/AppManager/details/AppDetailsFragment.java
@@ -666,15 +666,11 @@ public class AppDetailsFragment extends Fragment implements AdvancedSearchView.O
         private boolean mIsRootEnabled = true;
         private boolean mIsADBEnabled = true;
         private boolean mTestOnlyApp;
-        private final int mCardColor0;
-        private final int mCardColor1;
-        private final int mDefaultIndicatorColor;
+        private final int mColorSurfaceVariant;
 
         AppDetailsRecyclerAdapter() {
             mAdapterList = new ArrayList<>();
-            mCardColor0 = ColorCodes.getListItemColor0(mActivity);
-            mCardColor1 = ColorCodes.getListItemColor1(mActivity);
-            mDefaultIndicatorColor = ColorCodes.getListItemDefaultIndicatorColor(mActivity);
+            mColorSurfaceVariant = MaterialColors.getColor(mActivity, R.attr.colorSurfaceVariant, MainRecyclerAdapter.class.getCanonicalName());
         }
 
         @UiThread
@@ -932,7 +928,7 @@ public class AppDetailsFragment extends Fragment implements AdvancedSearchView.O
         }
 
         private void handleBlock(@NonNull ViewHolder holder, @NonNull AppDetailsComponentItem item, RuleType ruleType) {
-            holder.toggleSwitch.setChecked(item.isBlocked());
+            holder.toggleSwitch.setChecked(!item.isBlocked());
             holder.toggleSwitch.setVisibility(View.VISIBLE);
             holder.toggleSwitch.setOnClickListener(buttonView -> {
                 String componentStatus = item.isBlocked()
diff --git a/app/src/main/res/raw/changelog.xml b/app/src/main/res/raw/changelog.xml
index 683091e31e8db17d900a2b746563afe168d6e76a..452876c67ba181b081a73bcf94aee3b4372f84e0 100644
--- a/app/src/main/res/raw/changelog.xml
+++ b/app/src/main/res/raw/changelog.xml
@@ -16,6 +16,36 @@
 
     ]>
 <changelog>
+    <release
+        type="stable release"
+        version="v3.0.4"
+        code="416"
+        date="9 January 2023">
+        <new>Added notice for the funding campaign</new>
+
+        <improve title="App Details page">Display invalid native libraries (e.g. zip/APK files)</improve>
+        <improve title="App Details page">Hide tips forever if close button is clicked</improve>
+        <improve title="App Details page">Replaced block/unblock button with material switch</improve>
+
+        <improve>Replaced “Instructions” with “User Manual”</improve>
+        <improve>Replaced SLF4J dependency with Android compatible classes</improve>
+        <improve>Used monospace font in SSAID fields</improve>
+
+        <fix title="App Info tab">Fixed links not working in Play App Signing dialog</fix>
+        <fix title="Installer">
+            Prevented installer from running forever in no-root mode due to the mismanagement of installer queue
+        </fix>
+
+        <fix>Fixed crashes by avoiding the deletion of channels of the ongoing notifications</fix>
+        <fix>Fixed crashing if the resource string to be parsed is ill-formatted</fix>
+        <fix>Fixed crashing if no backup is selected but [b]restore[/b] is clicked</fix>
+        <fix>Fixed retrieving usage stats in no-root mode</fix>
+        <fix>Fixed some broken features (e.g. MagiskHide, DenyList) due to I/O errors in libsu</fix>
+        <note>
+            [br /][b]Full list of changes:[/b] [a
+            href="https://github.com/MuntashirAkon/AppManager/compare/v3.0.3...v3.0.4"]v3.0.3...v3.0.4[/a]
+        </note>
+    </release>
     <release
         type="stable release"
         version="v3.0.3"
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 218e26692a0d974ffd3e3a14202016c77fb05101..a66c2a816305e3516ea698ee6ded3180c38b84e9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1240,4 +1240,5 @@
     <string name="view_changelog">Find out what\'s new in this release</string>
     <string name="funding_campaign_dialog_message">We\'re running a <b>funding campaign</b> for App Manager for a limited period. Visit <a href="https://opencollective.com/app-manager#category-ABOUT">opencollective.com/app-manager</a> to learn more about the campaign. This notice will not be displayed again, but you can find it in the Settings page during the entire campaign.</string>
     <string name="funding_campaign_text">We\'re running a <b>funding campaign</b> for App Manager for a limited period. <a href="https://opencollective.com/app-manager#category-ABOUT">learn more…</a></string>
+    <string name="user_manual">User manual</string>
 </resources>
diff --git a/fastlane/metadata/android/en-US/changelogs/403.txt b/fastlane/metadata/android/en-US/changelogs/403.txt
deleted file mode 100644
index 362dd1e8f1b54c7697fd3a50aa11f60563ed7fbe..0000000000000000000000000000000000000000
--- a/fastlane/metadata/android/en-US/changelogs/403.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-You have to restart your device and/or clear cache after updating the app.
-
-Full list of changes: https://github.com/MuntashirAkon/AppManager/compare/v3.0.0-alpha03...v3.0.0-rc01
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/416.txt b/fastlane/metadata/android/en-US/changelogs/416.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c45cbc2551358c102cce215958f6d62f628121c5
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/416.txt
@@ -0,0 +1,8 @@
+This contains a number of bug fixes and improvements.
+
+- Added notice for the funding campaign
+- Display invalid native libraries (e.g. zip/APK files)
+- Hide tips forever if close button is clicked
+- Replaced block/unblock button with material switch
+- Prevented installer from running forever in no-root mode due to the mismanagement of installer queue
+- Fixed some broken features (e.g. MagiskHide, DenyList) due to I/O errors in libsu.
\ No newline at end of file