aboutsummaryrefslogtreecommitdiff
path: root/src/distractionless/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/distractionless/ui')
-rw-r--r--src/distractionless/ui/apps.cljd26
-rw-r--r--src/distractionless/ui/apps/settings.cljd42
-rw-r--r--src/distractionless/ui/constants.cljd15
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))