(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))))