From 7ba72aee756b49090879f85c809025f78b62eb3e Mon Sep 17 00:00:00 2001 From: charlie Date: Sat, 27 Apr 2024 15:49:33 +0800 Subject: [PATCH] fix(mobile): incorrect theme color for the android status bar --- src/main/frontend/util.cljc | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/main/frontend/util.cljc b/src/main/frontend/util.cljc index d01512834..b0af5be67 100644 --- a/src/main/frontend/util.cljc +++ b/src/main/frontend/util.cljc @@ -208,7 +208,7 @@ (defn- get-computed-bg-color [] ;; window.getComputedStyle(document.body, null).getPropertyValue('background-color'); - (let [styles (js/window.getComputedStyle (js/document.querySelector "#app-container")) + (let [styles (js/window.getComputedStyle js/document.body) bg-color (gobj/get styles "background-color") ;; convert rgb(r,g,b) to #rrggbb rgb2hex (fn [rgb] @@ -219,9 +219,9 @@ %)) (string/join) (str "#")))] - (when (string/starts-with? bg-color "rgb(") + (when (string/starts-with? bg-color "rgb") (let [rgb (-> bg-color - (string/replace #"^rgb\(" "") + (string/replace #"^rgb[^\d]+" "") (string/replace #"\)$" "") (string/split #",")) rgb (take 3 rgb)] @@ -231,26 +231,27 @@ #?(:cljs (defn set-android-theme [] - (when (mobile-util/native-android?) - (when-let [bg-color (try (get-computed-bg-color) - (catch :default _ - nil))] - (.setNavigationBarColor NavigationBar (clj->js {:color bg-color})) - (.setBackgroundColor StatusBar (clj->js {:color bg-color})))))) + (let [f #(when (mobile-util/native-android?) + (when-let [bg-color (try (get-computed-bg-color) + (catch :default _ + nil))] + (.setNavigationBarColor NavigationBar (clj->js {:color bg-color})) + (.setBackgroundColor StatusBar (clj->js {:color bg-color}))))] + (js/setTimeout f 32)))) #?(:cljs (defn set-theme-light [] (p/do! - (.setStyle StatusBar (clj->js {:style (.-Light Style)})) - (set-android-theme)))) + (.setStyle StatusBar (clj->js {:style (.-Light Style)})) + (set-android-theme)))) #?(:cljs (defn set-theme-dark [] (p/do! - (.setStyle StatusBar (clj->js {:style (.-Dark Style)})) - (set-android-theme)))) + (.setStyle StatusBar (clj->js {:style (.-Dark Style)})) + (set-android-theme)))) (defn find-first [pred coll]