From 7b042467886db9729ac092c87ce47a88297577e0 Mon Sep 17 00:00:00 2001
From: Tim <contact@bytim.eu>
Date: Sat, 22 Feb 2025 11:59:59 +0100
Subject: Add google search feature

---
 src/distractionless/core.cljd    | 68 +++++++++++++++++++++++-----------------
 src/distractionless/ui/apps.cljd |  3 +-
 2 files changed, 40 insertions(+), 31 deletions(-)

(limited to 'src')

diff --git a/src/distractionless/core.cljd b/src/distractionless/core.cljd
index 146dc0a..f8c0929 100644
--- a/src/distractionless/core.cljd
+++ b/src/distractionless/core.cljd
@@ -5,6 +5,8 @@
             [distractionless.config :as dconfig]
             ["dart:io" :as io]
             [clojure.string :as cstr]
+            ["package:url_launcher/url_launcher.dart" :as url-launcher]
+            ["package:url_launcher/url_launcher_string.dart" :as url-launcher-str]
 
             [distractionless.ui.constants :as duconstants]
             [distractionless.ui.apps :as duapps]))
@@ -37,33 +39,41 @@
     .child (if (nil? apps)
              (m/Text "Lade Apps..."
                      .style (m/TextStyle
-                                 .color duconstants/text-color
-                                 .fontStyle m/FontStyle.italic))
+                             .color duconstants/text-color
+                             .fontStyle m/FontStyle.italic))
              (m/Column
-              .children [(m/SearchBar
-                          .onChanged (fn [new-val]
-                                       (reset! *query new-val)
-                                       nil)
-                          .hintText "Suche"
-                          .controller search-bar-controller
-                          .backgroundColor (#/(.resolveWith m/Color?) m/MaterialStateProperty (fn [^Set _states] duconstants/background-color))
-                          .trailing (when-not (cstr/blank? query)
-                                      [(m/IconButton .icon (m/Icon m/Icons.clear_rounded)
-                                                     .color duconstants/text-color
-                                                     .onPressed #(do (reset! *query "")
-                                                                     (.clear search-bar-controller))
-                                                     .iconSize 30.0)]))
-                         (m/CheckboxListTile
-                          .title (m/Text "Alle Apps anzeigen"
-                                         .style duconstants/text-style)
-                          .value show-all-apps?
-                          .onChanged #(reset! *show-all-apps? %)
-                          .activeColor duconstants/checkbox-active-color)
-                         (m/Expanded
-                          .child (duapps/apps-list (filter (cond
-                                                             (not (cstr/blank? query)) #(cstr/includes?
-                                                                                         (cstr/lower-case (.-name %))
-                                                                                         (cstr/lower-case query))
-                                                             show-all-apps? (fn [_] true)
-                                                             :else #(.contains favourites (.-packageName %))) apps)
-                                                   config-file ctx reloader))])))))
+              .children (filter some?
+                                [(m/SearchBar
+                                  .onChanged (fn [new-val]
+                                               (reset! *query new-val)
+                                               nil)
+                                  .hintText "Suche"
+                                  .controller search-bar-controller
+                                  .backgroundColor (#/(.resolveWith m/Color?) m/MaterialStateProperty (fn [^Set _states] duconstants/background-color))
+                                  .trailing (when-not (cstr/blank? query)
+                                              [(m/IconButton .icon (m/Icon m/Icons.clear_rounded)
+                                                             .color duconstants/text-color
+                                                             .onPressed #(do (reset! *query "")
+                                                                             (.clear search-bar-controller))
+                                                             .iconSize 30.0)]))
+                                 (m/CheckboxListTile
+                                  .title (m/Text "Alle Apps anzeigen"
+                                                 .style duconstants/text-style)
+                                  .value show-all-apps?
+                                  .onChanged #(reset! *show-all-apps? %)
+                                  .activeColor duconstants/checkbox-active-color)
+                                 (m/Expanded
+                                  .child (duapps/apps-list (filter (cond
+                                                                     (not (cstr/blank? query)) #(cstr/includes?
+                                                                                                 (cstr/lower-case (.-name %))
+                                                                                                 (cstr/lower-case query))
+                                                                     show-all-apps? (fn [_] true)
+                                                                     :else #(.contains favourites (.-packageName %))) apps)
+                                                           config-file ctx reloader))
+                                 (when (not (cstr/blank? query))
+                                   (m/ListTile
+                                    .title (m/Text (str "Nach \"" query "\" im Internet suchen")
+                                                   .style duconstants/text-style)
+                                    .onTap #(do (await (url-launcher-str/launchUrlString (str "https://google.com/search?q=" (cstr/replace query " " "+"))
+                                                                                         .mode url-launcher/LaunchMode.externalApplication))
+                                                nil)))]))))))
diff --git a/src/distractionless/ui/apps.cljd b/src/distractionless/ui/apps.cljd
index 6d9920a..b7cf61f 100644
--- a/src/distractionless/ui/apps.cljd
+++ b/src/distractionless/ui/apps.cljd
@@ -1,6 +1,5 @@
 (ns distractionless.ui.apps
-  (:require ["package:flutter/material.dart" :as m] 
-            [clojure.string :as cstr]
+  (:require ["package:flutter/material.dart" :as m]
             ["package:installed_apps/installed_apps.dart" :as apps]
             [distractionless.ui.constants :as duconstants]
             [distractionless.ui.apps.settings :as duasettings]))
-- 
cgit v1.2.3