aboutsummaryrefslogtreecommitdiff
path: root/src/distractionless/ui/apps.cljd
blob: 6ca05dd3d7161d6b440ca8d1e091818eff373844 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
(ns distractionless.ui.apps
  (:require [cljd.flutter :as f]
            ["package:flutter/material.dart" :as m]
            ["package:flutter/widgets.dart" :as widgets]
            ["package:installed_apps/installed_apps.dart" :as apps]
            [distractionless.config :as dconfig]
            [distractionless.arithmetic-tasks :as darithmetic-tasks]
            [distractionless.ui.constants :as duconstants]
            [distractionless.ui.apps.settings :as duasettings]
            ["dart:async" :as async]))

(defn start-app [app config-file ctx]
  (if (.contains (get (dconfig/read-from-file config-file) "arithmetic-tasks")
                 (.-packageName app))
    (let [task (darithmetic-tasks/gen-task)]
      (m/showDialog
       .context ctx
       .builder (f/build (m/Dialog
                          .backgroundColor duconstants/background-color
                          .child (m/Column
                                  .mainAxisSize m/MainAxisSize.min
                                  .children [(m/Text (str "Was ergibt "
                                                          (first (:numbers task)) " "
                                                          (darithmetic-tasks/type->str (:type task)) " "
                                                          (second (:numbers task)) "?"))
                                             (m/TextField
                                              .keyboardType m/TextInputType.number
                                              .onSubmitted (fn [new-val]
                                                             (when (darithmetic-tasks/test-result? task
                                                                                                   (int/tryParse new-val))
                                                               (m/Navigator.pop ctx)
                                                               (await (apps/InstalledApps.startApp (.-packageName app))))
                                                             nil))])))))
    (await (apps/InstalledApps.startApp (.-packageName app)))))

(defn load-installed-apps! [a]
  (reset! a (await (apps/InstalledApps.getInstalledApps false true))))

(defn- render-app [app config-file ctx reloader]
  (m/ListTile
   .title (m/Text (.-name app)
                  .style duconstants/text-style)
   .leading (widgets/Image.memory (.-icon app)
                                  .height 30.0)
   .onTap (fn []
            (start-app app config-file ctx)
            nil)
   .onLongPress #(duasettings/open app config-file ctx reloader)))

(defn apps-list [apps config-file ctx reloader]
  (m/ListView
   .padding m/EdgeInsets.zero
   .children (for [app apps]
               (render-app app config-file ctx reloader))))