55
66class About (Activity ):
77
8+ def _add_label (self , parent , text ):
9+ """Helper to create and add a label with text."""
10+ label = lv .label (parent )
11+ label .set_text (text )
12+ return label
13+
14+ def _add_disk_info (self , screen , path ):
15+ """Helper to add disk usage info for a given path."""
16+ import os
17+ try :
18+ stat = os .statvfs (path )
19+ total_space = stat [0 ] * stat [2 ]
20+ free_space = stat [0 ] * stat [3 ]
21+ used_space = total_space - free_space
22+ self ._add_label (screen , f"Total space { path } : { total_space } bytes" )
23+ self ._add_label (screen , f"Free space { path } : { free_space } bytes" )
24+ self ._add_label (screen , f"Used space { path } : { used_space } bytes" )
25+ except Exception as e :
26+ print (f"About app could not get info on { path } filesystem: { e } " )
27+
828 def onCreate (self ):
929 screen = lv .obj ()
1030 screen .set_style_border_width (0 , 0 )
@@ -15,20 +35,16 @@ def onCreate(self):
1535 if focusgroup :
1636 focusgroup .add_obj (screen )
1737
18- label0 = lv .label (screen )
19- label0 .set_text (f"MicroPythonOS version: { mpos .info .CURRENT_OS_VERSION } " )
20- label1 = lv .label (screen )
21- label1 .set_text (f"Hardware ID: { mpos .info .get_hardware_id ()} " )
22- label2 = lv .label (screen )
23- label2 .set_text (f"sys.version: { sys .version } " )
24- label3 = lv .label (screen )
25- label3 .set_text (f"sys.implementation: { sys .implementation } " )
38+ # Basic OS info
39+ self ._add_label (screen , f"MicroPythonOS version: { mpos .info .CURRENT_OS_VERSION } " )
40+ self ._add_label (screen , f"Hardware ID: { mpos .info .get_hardware_id ()} " )
41+ self ._add_label (screen , f"sys.version: { sys .version } " )
42+ self ._add_label (screen , f"sys.implementation: { sys .implementation } " )
2643
44+ # MPY version info
2745 sys_mpy = sys .implementation ._mpy
28- label30 = lv .label (screen )
29- label30 .set_text (f'mpy version: { sys_mpy & 0xff } ' )
30- label31 = lv .label (screen )
31- label31 .set_text (f'mpy sub-version: { sys_mpy >> 8 & 3 } ' )
46+ self ._add_label (screen , f'mpy version: { sys_mpy & 0xff } ' )
47+ self ._add_label (screen , f'mpy sub-version: { sys_mpy >> 8 & 3 } ' )
3248 arch = [None , 'x86' , 'x64' ,
3349 'armv6' , 'armv6m' , 'armv7m' , 'armv7em' , 'armv7emsp' , 'armv7emdp' ,
3450 'xtensa' , 'xtensawin' , 'rv32imc' , 'rv64imc' ][(sys_mpy >> 10 ) & 0x0F ]
@@ -38,62 +54,51 @@ def onCreate(self):
3854 if (sys_mpy >> 16 ) != 0 :
3955 flags += ' -march-flags=' + (sys_mpy >> 16 )
4056 if len (flags ) > 0 :
41- label32 = lv .label (screen )
42- label32 .set_text ('mpy flags: ' + flags )
57+ self ._add_label (screen , 'mpy flags: ' + flags )
4358
44- label4 = lv .label (screen )
45- label4 .set_text (f"sys.platform: { sys .platform } " )
46- label15 = lv .label (screen )
47- label15 .set_text (f"sys.path: { sys .path } " )
59+ # Platform info
60+ self ._add_label (screen , f"sys.platform: { sys .platform } " )
61+ self ._add_label (screen , f"sys.path: { sys .path } " )
4862
63+ # MicroPython and memory info
4964 import micropython
50- label16 = lv .label (screen )
51- label16 .set_text (f"micropython.opt_level(): { micropython .opt_level ()} " )
65+ self ._add_label (screen , f"micropython.opt_level(): { micropython .opt_level ()} " )
5266 import gc
53- label17 = lv .label (screen )
54- label17 .set_text (f"Memory: { gc .mem_free ()} free, { gc .mem_alloc ()} allocated, { gc .mem_alloc ()+ gc .mem_free ()} total" )
67+ self ._add_label (screen , f"Memory: { gc .mem_free ()} free, { gc .mem_alloc ()} allocated, { gc .mem_alloc ()+ gc .mem_free ()} total" )
5568 # These are always written to sys.stdout
56- #label16.set_text( f"micropython.mem_info(): {micropython.mem_info()}")
57- #label18 = lv.label(screen )
58- #label18.set_text(f"micropython.qstr_info() : {micropython.qstr_info()}" )
59- label19 = lv . label ( screen )
60- label19 . set_text ( f"mpos.__path__: { mpos . __path__ } " ) # this will show .frozen if the /lib folder is frozen (prod build )
69+ #self._add_label(screen, f"micropython.mem_info(): {micropython.mem_info()}")
70+ #self._add_label(screen, f"micropython.qstr_info(): {micropython.qstr_info()}" )
71+ self . _add_label ( screen , f"mpos.__path__ : { mpos . __path__ } " ) # this will show .frozen if the /lib folder is frozen (prod build )
72+
73+ # Partition info (ESP32 only )
6174 try :
6275 from esp32 import Partition
63- label5 = lv .label (screen )
64- label5 .set_text ("" ) # otherwise it will show the default "Text" if there's an exception below
6576 current = Partition (Partition .RUNNING )
66- label5 . set_text ( f"Partition.RUNNING: { current } " )
77+ self . _add_label ( screen , f"Partition.RUNNING: { current } " )
6778 next_partition = current .get_next_update ()
68- label6 = lv .label (screen )
69- label6 .set_text (f"Next update partition: { next_partition } " )
79+ self ._add_label (screen , f"Next update partition: { next_partition } " )
7080 except Exception as e :
7181 print (f"Partition info got exception: { e } " )
82+
83+ # Machine info
7284 try :
7385 print ("Trying to find out additional board info, not available on every platform..." )
7486 import machine
75- label7 = lv .label (screen )
76- label7 .set_text ("" ) # otherwise it will show the default "Text" if there's an exception below
77- label7 .set_text (f"machine.freq: { machine .freq ()} " )
78- label8 = lv .label (screen )
79- label8 .set_text (f"machine.unique_id(): { machine .unique_id ()} " )
80- label9 = lv .label (screen )
81- label9 .set_text (f"machine.wake_reason(): { machine .wake_reason ()} " )
82- label10 = lv .label (screen )
83- label10 .set_text (f"machine.reset_cause(): { machine .reset_cause ()} " )
87+ self ._add_label (screen , f"machine.freq: { machine .freq ()} " )
88+ self ._add_label (screen , f"machine.unique_id(): { machine .unique_id ()} " )
89+ self ._add_label (screen , f"machine.wake_reason(): { machine .wake_reason ()} " )
90+ self ._add_label (screen , f"machine.reset_cause(): { machine .reset_cause ()} " )
8491 except Exception as e :
8592 print (f"Additional board info got exception: { e } " )
93+
94+ # Freezefs info (production builds only)
8695 try :
8796 print ("Trying to find out freezefs info, this only works on production builds..." ) # dev builds already have the /builtin folder
8897 import freezefs_mount_builtin
89- label11 = lv .label (screen )
90- label11 .set_text (f"freezefs_mount_builtin.date_frozen: { freezefs_mount_builtin .date_frozen } " )
91- label12 = lv .label (screen )
92- label12 .set_text (f"freezefs_mount_builtin.files_folders: { freezefs_mount_builtin .files_folders } " )
93- label13 = lv .label (screen )
94- label13 .set_text (f"freezefs_mount_builtin.sum_size: { freezefs_mount_builtin .sum_size } " )
95- label14 = lv .label (screen )
96- label14 .set_text (f"freezefs_mount_builtin.version: { freezefs_mount_builtin .version } " )
98+ self ._add_label (screen , f"freezefs_mount_builtin.date_frozen: { freezefs_mount_builtin .date_frozen } " )
99+ self ._add_label (screen , f"freezefs_mount_builtin.files_folders: { freezefs_mount_builtin .files_folders } " )
100+ self ._add_label (screen , f"freezefs_mount_builtin.sum_size: { freezefs_mount_builtin .sum_size } " )
101+ self ._add_label (screen , f"freezefs_mount_builtin.version: { freezefs_mount_builtin .version } " )
97102 except Exception as e :
98103 # This will throw an EEXIST exception if there is already a "/builtin" folder present
99104 # It will throw "no module named 'freezefs_mount_builtin'" if there is no frozen filesystem
@@ -102,34 +107,10 @@ def onCreate(self):
102107 # BUT which will still have the frozen-inside /lib folder. So the user will be able to install apps into /builtin
103108 # but they will not be able to install libraries into /lib.
104109 print ("main.py: WARNING: could not import/run freezefs_mount_builtin: " , e )
105- label11 = lv .label (screen )
106- label11 .set_text (f"freezefs_mount_builtin exception (normal if internal storage partition has overriding /builtin folder): { e } " )
107- # Disk usage:
108- import os
109- try :
110- stat = os .statvfs ('/' )
111- total_space = stat [0 ] * stat [2 ]
112- free_space = stat [0 ] * stat [3 ]
113- used_space = total_space - free_space
114- label20 = lv .label (screen )
115- label20 .set_text (f"Total space in /: { total_space } bytes" )
116- label21 = lv .label (screen )
117- label21 .set_text (f"Free space in /: { free_space } bytes" )
118- label22 = lv .label (screen )
119- label22 .set_text (f"Used space in /: { used_space } bytes" )
120- except Exception as e :
121- print (f"About app could not get info on / filesystem: { e } " )
122- try :
123- stat = os .statvfs ('/sdcard' )
124- total_space = stat [0 ] * stat [2 ]
125- free_space = stat [0 ] * stat [3 ]
126- used_space = total_space - free_space
127- label23 = lv .label (screen )
128- label23 .set_text (f"Total space /sdcard: { total_space } bytes" )
129- label24 = lv .label (screen )
130- label24 .set_text (f"Free space /sdcard: { free_space } bytes" )
131- label25 = lv .label (screen )
132- label25 .set_text (f"Used space /sdcard: { used_space } bytes" )
133- except Exception as e :
134- print (f"About app could not get info on /sdcard filesystem: { e } " )
110+ self ._add_label (screen , f"freezefs_mount_builtin exception (normal if internal storage partition has overriding /builtin folder): { e } " )
111+
112+ # Disk usage info
113+ self ._add_disk_info (screen , '/' )
114+ self ._add_disk_info (screen , '/sdcard' )
115+
135116 self .setContentView (screen )
0 commit comments