From 1720af54e994779295e20382f7155e49ec245e3d Mon Sep 17 00:00:00 2001
From: CustomIcon <custom.icon@vk.com>
Date: Fri, 19 Apr 2024 19:39:11 +0000
Subject: [PATCH] settings UI

---
 .onedev-buildspec.yml                      |   2 +-
 modules/settings/__init__.py               |   2 +-
 modules/settings/functions/__init__.py     |   3 +
 modules/settings/{ => functions}/config.py |  13 +-
 modules/settings/functions/theme.py        |  16 ++
 modules/settings/settings.py               | 261 ++++++++++++++++++++-
 6 files changed, 290 insertions(+), 7 deletions(-)
 create mode 100644 modules/settings/functions/__init__.py
 rename modules/settings/{ => functions}/config.py (85%)
 create mode 100644 modules/settings/functions/theme.py

diff --git a/.onedev-buildspec.yml b/.onedev-buildspec.yml
index 37295ea..b3f26a1 100644
--- a/.onedev-buildspec.yml
+++ b/.onedev-buildspec.yml
@@ -20,7 +20,7 @@ jobs:
         .\venv\Scripts\activate.ps1
         pip install -r requirements.txt
         git config --global --add safe.directory '*'
-        flet build apk --include-packages flet_lottie --product WAMCO --product WAMCO --org com.wamco.app --verbose
+        flet build apk --include-packages flet_lottie --product BillPay --product BillPay --org com.billpay --verbose
     useTTY: false
     condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
   - !PublishArtifactStep
diff --git a/modules/settings/__init__.py b/modules/settings/__init__.py
index e651d71..0341fbb 100644
--- a/modules/settings/__init__.py
+++ b/modules/settings/__init__.py
@@ -1,4 +1,4 @@
 from .settings import Settings
-from .config import config
+from .functions import config
 
 __all__ = ["Settings", "config"]
\ No newline at end of file
diff --git a/modules/settings/functions/__init__.py b/modules/settings/functions/__init__.py
new file mode 100644
index 0000000..f7aa0de
--- /dev/null
+++ b/modules/settings/functions/__init__.py
@@ -0,0 +1,3 @@
+from .config import config
+from .theme import Theme
+__all__ = ['config', 'Theme']
\ No newline at end of file
diff --git a/modules/settings/config.py b/modules/settings/functions/config.py
similarity index 85%
rename from modules/settings/config.py
rename to modules/settings/functions/config.py
index a03f427..218c078 100644
--- a/modules/settings/config.py
+++ b/modules/settings/functions/config.py
@@ -2,8 +2,9 @@ from configparser import ConfigParser
 import os
 
 static = """
+
 [general]
-name = 
+name = CustomIcon
 phone = 
 email = 
 
@@ -30,12 +31,18 @@ property =
 nid = 
 
 [mwsc]
-
+meter_no = 
+account_no = 
+mobile_no = 
 
 [stelco]
-
+account_no = 
+bill_no = 
 
 [medianet]
+account_no = 
+nid = 
+phone = 
 """
 
 class Config(ConfigParser):
diff --git a/modules/settings/functions/theme.py b/modules/settings/functions/theme.py
new file mode 100644
index 0000000..7375cae
--- /dev/null
+++ b/modules/settings/functions/theme.py
@@ -0,0 +1,16 @@
+import flet as ft
+
+class Theme:
+    def __init__(self, page: ft.Page) -> None:
+        self.page = page
+    
+    def change(self, theme: ft.ThemeMode = None):
+        if theme:
+            self.page.theme_mode = theme
+        else:
+            self.page.theme_mode = (
+                ft.ThemeMode.DARK
+                if self.page.theme_mode == ft.ThemeMode.LIGHT
+                else ft.ThemeMode.LIGHT
+            )
+        self.page.update()
\ No newline at end of file
diff --git a/modules/settings/settings.py b/modules/settings/settings.py
index 35871c2..595049a 100644
--- a/modules/settings/settings.py
+++ b/modules/settings/settings.py
@@ -1,8 +1,265 @@
 import flet as ft
 from utils import AppView, Title
-
+from .functions import Theme
 
 def Settings(page: ft.Page):
+    settingsContainer = ft.ListView(
+        expand=True
+    )
+    settingsContainer.controls.append(ft.Text("General"))
+    generalSettings = ft.Container(
+        content=ft.Column(
+            controls=[
+                ft.Card(
+                    content=ft.Container(
+                        ink=True,
+                        content=ft.Column(
+                            [
+                                ft.ListTile(
+                                    leading=ft.Icon(ft.icons.PERSON),
+                                    title=ft.Text("Username"),
+                                    subtitle=ft.Text(
+                                        "The greeting message"
+                                    ),
+                                ),
+                            ]
+                        ),
+                        padding=10,
+                        on_click=lambda _: print("clicked username"),
+                    )
+                ),
+                ft.Card(
+                    content=ft.Container(
+                        ink=True,
+                        content=ft.Column(
+                            [
+                                ft.ListTile(
+                                    leading=ft.Icon(ft.icons.PHONE),
+                                    title=ft.Text("Phone"),
+                                    subtitle=ft.Text(
+                                        "Personal Phone number"
+                                    ),
+                                ),
+                            ]
+                        ),
+                        padding=10,
+                        on_click=lambda _: print("clicked phone"),
+                    )
+                ),
+                ft.Card(
+                    content=ft.Container(
+                        ink=True,
+                        content=ft.Column(
+                            [
+                                ft.ListTile(
+                                    leading=ft.Icon(ft.icons.EMAIL),
+                                    title=ft.Text("Email"),
+                                    subtitle=ft.Text(
+                                        "Personal Email"
+                                    ),
+                                ),
+                            ]
+                        ),
+                        padding=10,
+                        on_click=lambda _: print("clicked email"),
+                    )
+                ),
+                ft.Card(
+                    content=ft.Container(
+                        ink=True,
+                        content=ft.Column(
+                            [
+                                ft.ListTile(
+                                    leading=ft.Icon(ft.icons.CARD_TRAVEL),
+                                    title=ft.Text("NID"),
+                                    subtitle=ft.Text(
+                                        "National Idenity Number"
+                                    ),
+                                ),
+                            ]
+                        ),
+                        padding=10,
+                        on_click=lambda _: print("clicked email"),
+                    )
+                ),
+            ]
+        )
+    )
+    settingsContainer.controls.append(
+        generalSettings
+    )
+    settingsContainer.controls.append(ft.Divider())
+    settingsContainer.controls.append(ft.Text("Notifications"))
+    notificationsSettings = ft.Container(
+        content=ft.Column(
+            controls=[
+                ft.Card(
+                    content=ft.Container(
+                        ink=True,
+                        content=ft.Column(
+                            [
+                                ft.ListTile(
+                                    leading=ft.Icon(ft.icons.TELEGRAM),
+                                    title=ft.Text("Telegram"),
+                                    subtitle=ft.Text(
+                                        "Telegram Notifications for reminders and Bill pays"
+                                    ),
+                                ),
+                            ]
+                        ),
+                        padding=10,
+                        on_click=lambda _: print("clicked username"),
+                    )
+                ),
+            ]
+        )
+    )
+    settingsContainer.controls.append(
+        notificationsSettings
+    )
+    settingsContainer.controls.append(ft.Divider())
+    settingsContainer.controls.append(ft.Text("Apps"))
+    appsSettings = ft.Container(
+        content=ft.Column(
+            controls=[
+                ft.Card(
+                    content=ft.Container(
+                        ink=True,
+                        content=ft.Column(
+                            [
+                                ft.ListTile(
+                                    leading=ft.Image(
+                                        border_radius=ft.border_radius.all(10),
+                                        fit=ft.ImageFit.CONTAIN,
+                                        src="https://asset.brandfetch.io/idZJsIaold/id9-VJM_HU.png"
+                                    ),
+                                    title=ft.Text("Dhiraagu"),
+                                    subtitle=ft.Text(
+                                        "An ISP Service."
+                                    ),
+                                ),
+                            ]
+                        ),
+                        padding=10,
+                        on_click=lambda _: print("clicked dhiraagu"),
+                    )
+                ),
+                ft.Card(
+                    content=ft.Container(
+                        ink=True,
+                        content=ft.Column(
+                            [
+                                ft.ListTile(
+                                    leading=ft.Image(
+                                        border_radius=ft.border_radius.all(10),
+                                        fit=ft.ImageFit.CONTAIN,
+                                        src="https://asset.brandfetch.io/idR1xFKHLD/idu6J-WQsm.jpeg"
+                                    ),
+                                    title=ft.Text("Ooredoo"),
+                                    subtitle=ft.Text(
+                                        "An ISP Service."
+                                    ),
+                                ),
+                            ]
+                        ),
+                        padding=10,
+                        on_click=lambda _: print("clicked ooredoo"),
+                    )
+                ),
+                ft.Card(
+                    content=ft.Container(
+                        ink=True,
+                        content=ft.Column(
+                            [
+                                ft.ListTile(
+                                    leading=ft.Image(
+                                        border_radius=ft.border_radius.all(10),
+                                        fit=ft.ImageFit.CONTAIN,
+                                        src="https://www.stelco.com.mv/wp-content/uploads/2022/02/unnamed.png"
+                                    ),
+                                    title=ft.Text("STELCO"),
+                                    subtitle=ft.Text(
+                                        "Electricity Bills"
+                                    ),
+                                ),
+                            ]
+                        ),
+                        padding=10,
+                        on_click=lambda _: print("clicked stelco"),
+                    )
+                ),
+                ft.Card(
+                    content=ft.Container(
+                        ink=True,
+                        content=ft.Column(
+                            [
+                                ft.ListTile(
+                                    leading=ft.Image(
+                                        border_radius=ft.border_radius.all(10),
+                                        fit=ft.ImageFit.CONTAIN,
+                                        src="https://asset.brandfetch.io/idOZWUOUm-/idNastd9Bg.jpeg"
+                                    ),
+                                    title=ft.Text("MWSC"),
+                                    subtitle=ft.Text(
+                                        "Water Bills"
+                                    ),
+                                ),
+                            ]
+                        ),
+                        padding=10,
+                        on_click=lambda _: print("clicked mwsc"),
+                    )
+                ),
+                ft.Card(
+                    content=ft.Container(
+                        ink=True,
+                        content=ft.Column(
+                            [
+                                ft.ListTile(
+                                    leading=ft.Image(
+                                        border_radius=ft.border_radius.all(10),
+                                        fit=ft.ImageFit.CONTAIN,
+                                        src="https://asset.brandfetch.io/idLMZnv5SC/iduyX4keYN.jpeg"
+                                    ),
+                                    title=ft.Text("Medianet"),
+                                    subtitle=ft.Text(
+                                        "Online Television Service"
+                                    ),
+                                ),
+                            ]
+                        ),
+                        padding=10,
+                        on_click=lambda _: print("clicked medianet"),
+                    )
+                ),
+            ]
+        )
+    )
+    settingsContainer.controls.append(appsSettings)
+    settingsContainer.controls.append(ft.Divider())
+    settingsContainer.controls.append(ft.Text("Theme"))
+    def _on_theme_change(e):
+        Theme(page).change()
+    themeSettings = ft.Container(
+        content=ft.Column(
+            controls=[
+                ft.Card(
+                    content=ft.Container(
+                        content=ft.Container(
+                            ft.Switch(
+                                value=True,
+                                label="     Switch to dark theme",
+                                on_change=_on_theme_change
+                            ),
+                        ),
+                        padding=10,
+                        on_click=None,
+                    )
+                ),
+            ]
+        )
+    )
+    settingsContainer.controls.append(themeSettings)
     return AppView(
         "/settings",
         [
@@ -14,6 +271,6 @@ def Settings(page: ft.Page):
                 title=ft.Text(Title(str(__file__))),
                 bgcolor=ft.colors.TRANSPARENT
             ),
-            ft.Text("Settings!"),
+            settingsContainer
         ],
     )