diff options
Diffstat (limited to 'src/distractionless/ui')
-rw-r--r-- | src/distractionless/ui/apps.cljd | 26 | ||||
-rw-r--r-- | src/distractionless/ui/apps/settings.cljd | 42 | ||||
-rw-r--r-- | src/distractionless/ui/constants.cljd | 15 |
3 files changed, 83 insertions, 0 deletions
diff --git a/src/distractionless/ui/apps.cljd b/src/distractionless/ui/apps.cljd new file mode 100644 index 0000000..7fd620c --- /dev/null +++ b/src/distractionless/ui/apps.cljd @@ -0,0 +1,26 @@ +(ns distractionless.ui.apps + (:require ["package:flutter/material.dart" :as m] + [clojure.string :as cstr] + ["package:installed_apps/installed_apps.dart" :as apps] + [distractionless.ui.constants :as duconstants] + [distractionless.ui.apps.settings :as duasettings])) + +(defn load-installed-apps! [a] + (reset! a (await (apps/InstalledApps.getInstalledApps)))) + +(defn- render-app [app config-file ctx reloader] + (m/ListTile + .title (m/Text (.-name app) + .style duconstants/text-style) + .onTap #(do (await (apps/InstalledApps.startApp (.-packageName app))) nil) + .onLongPress #(duasettings/open app config-file ctx reloader))) + +(defn apps-list [apps query config-file ctx reloader] + (m/ListView + .children (for [app (if (cstr/blank? query) + apps + (filter #(cstr/includes? + (cstr/lower-case (.-name %)) + (cstr/lower-case query)) + apps))] + (render-app app config-file ctx reloader)))) diff --git a/src/distractionless/ui/apps/settings.cljd b/src/distractionless/ui/apps/settings.cljd new file mode 100644 index 0000000..1b4de0a --- /dev/null +++ b/src/distractionless/ui/apps/settings.cljd @@ -0,0 +1,42 @@ +(ns distractionless.ui.apps.settings + (:require ["package:flutter/material.dart" :as m] + [cljd.flutter :as f] + [distractionless.ui.constants :as duconstants] + [distractionless.config :as dconfig])) + +(defn- header [app ctx] + (m/Row + .mainAxisAlignment m/MainAxisAlignment.spaceBetween + .children [(m/Text (.-name app) + .style duconstants/title-style) + (m/IconButton .icon (m/Icon m/Icons.clear_rounded) + .color duconstants/text-color + .onPressed #(m/Navigator.pop ctx) + .iconSize 30.0)])) + +(defn- favourite-setting [app config-file reloader] + (m/Row + .children [(m/Checkbox + .value (contains? (get (dconfig/read-from-file config-file) "favourites") + (.-packageName app)) + .onChanged (fn [new-val] + (if new-val + (dconfig/update-config! config-file + #(update % "favourites" conj (.-packageName app)) + reloader) + (dconfig/update-config! config-file + (fn [config] + (update config "favourites" disj (.-packageName app))) + reloader))) + .activeColor duconstants/checkbox-active-color) + (m/Text "Favorit")])) + +(defn open [app config-file ctx reloader] + (m/showDialog + .context ctx + .builder (f/build :watch [_ reloader] + (m/Dialog.fullscreen + .backgroundColor duconstants/background-color + .child (m/Column + .children (list (header app ctx) + (favourite-setting app config-file reloader))))))) diff --git a/src/distractionless/ui/constants.cljd b/src/distractionless/ui/constants.cljd new file mode 100644 index 0000000..505778f --- /dev/null +++ b/src/distractionless/ui/constants.cljd @@ -0,0 +1,15 @@ +(ns distractionless.ui.constants + (:require ["package:flutter/material.dart" :as m])) + +(def background-color (m/Color.fromARGB 255 157 166 159)) +(def search-bar-color (m/Color.fromARGB 255 138 150 141)) +(def text-color (m/Color.fromARGB 255 0 0 0)) + +(def checkbox-active-color (m/Color.fromARGB 255 86 93 86)) +(def checkbox-fill-color (m/Color.fromARGB 255 197 205 199)) + +(def text-style (m/TextStyle + .color text-color)) +(def title-style (m/TextStyle + .color text-color + .fontSize 30.0)) |