Skip to content

Commit 314609f

Browse files
authored
Hide brightness panel on FW12 (grouzen#56)
1 parent 4865a5d commit 314609f

File tree

5 files changed

+73
-28
lines changed

5 files changed

+73
-28
lines changed

src/app.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,10 @@ impl App {
3131
pub fn new() -> color_eyre::Result<Self> {
3232
let ec = CrosEc::new();
3333
let fingerprint = Arc::new(Fingerprint::new(&ec)?);
34-
let framework = Framework::new(ec, fingerprint.clone());
35-
let info = FrameworkInfo::default();
36-
let tui = Tui::new(fingerprint);
34+
// Pre-fetch framework info
35+
let mut framework = Framework::new(ec, fingerprint.clone());
36+
let info = framework.get_info();
37+
let tui = Tui::new(fingerprint, &info);
3738

3839
Ok(Self {
3940
framework,
@@ -46,9 +47,6 @@ impl App {
4647
pub async fn run<B: Backend>(&mut self, terminal: &mut Terminal<B>) -> color_eyre::Result<()> {
4748
let mut event_loop = EventLoop::new();
4849

49-
// Pre-fetch framework info
50-
self.info = self.framework.get_info();
51-
5250
event_loop.run(Duration::from_millis(1000));
5351

5452
while self.running {

src/framework.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ impl Framework {
7777
.map(Result::ok)
7878
.collect();
7979
let fan_rpm = self.get_fan_rpm().ok();
80+
let platform = smbios::get_platform();
8081

8182
FrameworkInfo::new(
8283
&power,
@@ -87,6 +88,7 @@ impl Framework {
8788
&smbios,
8889
pd_ports,
8990
fan_rpm,
91+
platform,
9092
)
9193
}
9294

src/framework/info.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use framework_lib::power::UsbChargingType;
44
use framework_lib::power::UsbPdPowerInfo;
55
use framework_lib::power::UsbPowerRoles;
66
use framework_lib::smbios;
7+
use framework_lib::smbios::Platform;
78
use smbioslib::DefinedStruct;
89
use smbioslib::SMBiosData;
910

@@ -31,6 +32,7 @@ pub struct FrameworkInfo {
3132
pub smbios_vendor: Option<String>,
3233
pub pd_ports: PdPortsInfo,
3334
pub fan_rpm: Option<Vec<u16>>,
35+
pub platform: Option<Platform>,
3436
}
3537

3638
impl FrameworkInfo {
@@ -44,6 +46,7 @@ impl FrameworkInfo {
4446
smbios: &Option<SMBiosData>,
4547
pd_ports: Vec<Option<UsbPdPowerInfo>>,
4648
fan_rpm: Option<Vec<u16>>,
49+
platform: Option<Platform>,
4750
) -> Self {
4851
Self {
4952
charge_percentage: charge_percentage(power),
@@ -68,6 +71,7 @@ impl FrameworkInfo {
6871
smbios_vendor: smbios_vendor(smbios),
6972
pd_ports: pd_ports_info(pd_ports),
7073
fan_rpm,
74+
platform,
7175
}
7276
}
7377
}

src/tui.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ pub struct Tui {
3535
}
3636

3737
impl Tui {
38-
pub fn new(fingerprint: Arc<Fingerprint>) -> Self {
38+
pub fn new(fingerprint: Arc<Fingerprint>, info: &FrameworkInfo) -> Self {
3939
Self {
4040
title: TitleComponent,
41-
main: MainComponent::new(fingerprint),
41+
main: MainComponent::new(fingerprint, info),
4242
footer: FooterComponent,
4343
theme: Theme::default(),
4444
error_message: None,
@@ -135,12 +135,17 @@ mod tests {
135135

136136
use ratatui::crossterm::event::{Event, KeyCode, KeyEvent};
137137

138-
use crate::{app::AppEvent, framework::fingerprint::Fingerprint, tui::Tui};
138+
use crate::{
139+
app::AppEvent,
140+
framework::{fingerprint::Fingerprint, info::FrameworkInfo},
141+
tui::Tui,
142+
};
139143

140144
#[test]
141145
fn handle_input_internal_quit_event() {
142146
let fingerprint = Arc::new(Fingerprint::percentage());
143-
let mut tui = Tui::new(fingerprint);
147+
let info = FrameworkInfo::default();
148+
let mut tui = Tui::new(fingerprint, &info);
144149
let event = Event::Key(KeyEvent::from(KeyCode::Char('q')));
145150

146151
let app_event = tui.handle_input(event);

src/tui/component/main.rs

Lines changed: 54 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,23 @@ pub struct MainComponent {
2727
}
2828

2929
impl MainComponent {
30-
pub fn new(finterprint: Arc<Fingerprint>) -> Self {
30+
pub fn new(finterprint: Arc<Fingerprint>, info: &FrameworkInfo) -> Self {
31+
let mut adjustable_panels: Vec<Box<dyn AdjustableComponent>> = Vec::new();
3132
let charge_panel = Box::new(ChargePanelComponent::new());
32-
let brightness_panel = Box::new(BrightnessPanelComponent::new(finterprint));
33+
34+
adjustable_panels.push(charge_panel);
35+
36+
if Self::is_brightness_supported(info) {
37+
let brightness_panel = Box::new(BrightnessPanelComponent::new(finterprint));
38+
39+
adjustable_panels.push(brightness_panel);
40+
}
3341

3442
Self {
3543
privacy_panel: PrivacyPanelComponent,
3644
smbios_panel: SmbiosPanelComponent,
3745
pd_ports_panel: PdPortsPanelComponent::new(),
38-
adjustable_panels: vec![charge_panel, brightness_panel],
46+
adjustable_panels,
3947
selected_panel: None,
4048
}
4149
}
@@ -60,6 +68,30 @@ impl MainComponent {
6068
self.selected_panel = Some(0);
6169
}
6270
}
71+
72+
fn render_privacy_and_smbios_panels(
73+
&mut self,
74+
frame: &mut Frame,
75+
area: Rect,
76+
theme: &Theme,
77+
info: &FrameworkInfo,
78+
) {
79+
let [privacy_panel_area, smbios_panel_area] =
80+
Layout::horizontal([Constraint::Min(0), Constraint::Min(0)]).areas(area);
81+
82+
// Privacy panel
83+
self.privacy_panel
84+
.render(frame, privacy_panel_area, theme, info);
85+
86+
// SMBIOS panel
87+
self.smbios_panel
88+
.render(frame, smbios_panel_area, theme, info);
89+
}
90+
91+
fn is_brightness_supported(info: &FrameworkInfo) -> bool {
92+
// NOTE: modifiying FP and KB brightness is not supported on FW 12
93+
info.platform != Some(framework_lib::smbios::Platform::Framework12IntelGen13)
94+
}
6395
}
6496

6597
impl Component for MainComponent {
@@ -80,25 +112,29 @@ impl Component for MainComponent {
80112
Layout::vertical([Constraint::Max(15), Constraint::Min(0)]).areas(area);
81113
let [charge_panel_area, top_right_area] =
82114
Layout::horizontal([Constraint::Min(0), Constraint::Min(0)]).areas(top_area);
83-
let [brightness_panel_area, privacy_and_smbios_panels_area] =
84-
Layout::vertical([Constraint::Min(7), Constraint::Min(7)]).areas(top_right_area);
85-
let [privacy_panel_area, smbios_panel_area] =
86-
Layout::horizontal([Constraint::Min(0), Constraint::Min(0)])
87-
.areas(privacy_and_smbios_panels_area);
88115

89116
// Charge panel
90117
self.adjustable_panels[0].render(frame, charge_panel_area, theme, info);
91118

92-
// Brightness panel (top of right_area)
93-
self.adjustable_panels[1].render(frame, brightness_panel_area, theme, info);
94-
95-
// Privacy panel
96-
self.privacy_panel
97-
.render(frame, privacy_panel_area, theme, info);
98-
99-
// SMBIOS panel
100-
self.smbios_panel
101-
.render(frame, smbios_panel_area, theme, info);
119+
// Show brightness panel only on supported platforms
120+
if Self::is_brightness_supported(info) {
121+
let [brightness_panel_area, privacy_and_smbios_panels_area] =
122+
Layout::vertical([Constraint::Min(7), Constraint::Min(7)]).areas(top_right_area);
123+
124+
// Brightness panel (top of right_area)
125+
self.adjustable_panels[1].render(frame, brightness_panel_area, theme, info);
126+
127+
// Privacy and SMBIOS panels
128+
self.render_privacy_and_smbios_panels(
129+
frame,
130+
privacy_and_smbios_panels_area,
131+
theme,
132+
info,
133+
);
134+
} else {
135+
// Privacy and SMBIOS panels
136+
self.render_privacy_and_smbios_panels(frame, top_right_area, theme, info);
137+
}
102138

103139
// PD Ports panel (bottom of right_area)
104140
self.pd_ports_panel

0 commit comments

Comments
 (0)