Added OLED Black theme

Jeffrey Miller created

Change summary

src/cheogram/res/values/strings.xml                         |  1 
src/cheogram/res/values/themes.xml                          | 43 +++++++
src/main/java/eu/siacs/conversations/utils/ThemeHelper.java |  8 +
src/main/res/values-v29/theme-settings.xml                  |  2 
4 files changed, 53 insertions(+), 1 deletion(-)

Detailed changes

src/cheogram/res/values/strings.xml 🔗

@@ -23,4 +23,5 @@
     <string name="action_complete">Finish</string>
     <string name="action_close">Close</string>
     <string name="action_execute">Go</string>
+    <string name="pref_theme_oledblack">OLED Black</string>
 </resources>

src/cheogram/res/values/themes.xml 🔗

@@ -324,6 +324,25 @@
         <item name="unread_count">#1E0036</item>
     </style>
 
+    <style name="ConversationsTheme.OLEDBlack" parent="ConversationsTheme.Dark">
+        <item name="colorPrimary">@color/black</item>
+        <item name="colorPrimaryDark">@color/black</item>
+        <item name="colorAccent">@color/yeller</item>
+
+        <item name="message_bubble_received_bg">?colorPrimary</item>
+        <item name="message_bubble_sent_bg">?color_background_primary</item>
+        <item name="message_bubble_shadow_light">#00000000</item>
+        <item name="message_bubble_shadow_dark">#FF000000</item>
+        <item name="message_bubble_shadow_dark_top">#DD000000</item>
+
+        <item name="color_background_primary">@color/black</item>
+        <item name="color_background_secondary">@color/black</item>
+        <item name="color_background_tertiary">@color/black</item>
+        <item name="color_background_overlay">@color/black26</item>
+
+        <item name="unread_count">#1E0036</item>
+    </style>
+
     <style name="ConversationsTheme.Medium" parent="ConversationsTheme">
         <item name="TextSizeCaption">14sp</item>
         <item name="TextSizeBody1">16sp</item>
@@ -360,6 +379,18 @@
         <item name="IconSize">20sp</item>
     </style>
 
+    <style name="ConversationsTheme.OLEDBlack.Medium" parent="ConversationsTheme.OLEDBlack">
+        <item name="TextSizeCaption">14sp</item>
+        <item name="TextSizeBody1">16sp</item>
+        <item name="TextSizeBody2">16sp</item>
+        <item name="TextSizeSubhead">18sp</item>
+        <item name="TextSizeTitle">22sp</item>
+        <item name="TextSizeDisplay2">47sp</item>
+        <item name="TextSizeInput">18sp</item>
+        <item name="TextSeparation">6sp</item>
+        <item name="IconSize">20sp</item>
+    </style>
+
     <style name="ConversationsTheme.Dark.Large" parent="ConversationsTheme.Dark">
         <item name="TextSizeCaption">16sp</item>
         <item name="TextSizeBody1">18sp</item>
@@ -384,6 +415,18 @@
         <item name="IconSize">22sp</item>
     </style>
 
+    <style name="ConversationsTheme.OLEDBlack.Large" parent="ConversationsTheme.OLEDBlack">
+        <item name="TextSizeCaption">16sp</item>
+        <item name="TextSizeBody1">18sp</item>
+        <item name="TextSizeBody2">18sp</item>
+        <item name="TextSizeSubhead">20sp</item>
+        <item name="TextSizeTitle">24sp</item>
+        <item name="TextSizeDisplay2">48sp</item>
+        <item name="TextSizeInput">20sp</item>
+        <item name="TextSeparation">7sp</item>
+        <item name="IconSize">22sp</item>
+    </style>
+
     <style name="ConversationsTheme.Large" parent="ConversationsTheme">
         <item name="TextSizeCaption">16sp</item>
         <item name="TextSizeBody1">18sp</item>

src/main/java/eu/siacs/conversations/utils/ThemeHelper.java 🔗

@@ -58,12 +58,15 @@ public class ThemeHelper {
 		switch (fontSize) {
 			case "medium":
 				if ("obsidian".equals(setting)) return R.style.ConversationsTheme_Obsidian_Medium;
+				else if ("oledblack".equals(setting)) return R.style.ConversationsTheme_OLEDBlack_Medium;
 				return dark ? R.style.ConversationsTheme_Dark_Medium : R.style.ConversationsTheme_Medium;
 			case "large":
 				if ("obsidian".equals(setting)) return R.style.ConversationsTheme_Obsidian_Large;
+				else if ("oledblack".equals(setting)) return R.style.ConversationsTheme_OLEDBlack_Large;
 				return dark ? R.style.ConversationsTheme_Dark_Large : R.style.ConversationsTheme_Large;
 			default:
 				if ("obsidian".equals(setting)) return R.style.ConversationsTheme_Obsidian;
+				else if ("oledblack".equals(setting)) return R.style.ConversationsTheme_OLEDBlack;
 				return dark ? R.style.ConversationsTheme_Dark : R.style.ConversationsTheme;
 		}
 	}
@@ -88,7 +91,7 @@ public class ThemeHelper {
 		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && "automatic".equals(setting)) {
 			return (resources.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;
 		} else {
-			return "dark".equals(setting) || "obsidian".equals(setting);
+			return "dark".equals(setting) || "obsidian".equals(setting) || "oledblack".equals(setting);
 		}
 	}
 
@@ -100,6 +103,9 @@ public class ThemeHelper {
 			case R.style.ConversationsTheme_Obsidian:
 			case R.style.ConversationsTheme_Obsidian_Large:
 			case R.style.ConversationsTheme_Obsidian_Medium:
+			case R.style.ConversationsTheme_OLEDBlack:
+			case R.style.ConversationsTheme_OLEDBlack_Large:
+			case R.style.ConversationsTheme_OLEDBlack_Medium:
 				return true;
 			default:
 				return false;

src/main/res/values-v29/theme-settings.xml 🔗

@@ -7,12 +7,14 @@
         <item>@string/pref_theme_light</item>
         <item>@string/pref_theme_dark</item>
         <item>@string/pref_theme_obsidian</item>
+        <item>@string/pref_theme_oledblack</item>
     </string-array>
     <string-array name="themes_values" tools:ignore="InconsistentArrays">
         <item>automatic</item>
 		<item>light</item>
 		<item>dark</item>
 		<item>obsidian</item>
+        <item>oledblack</item>
 	</string-array>
 
 </resources>