Add diagnostics privacy controls
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
use ely_browser_core::BrowserSnapshot;
|
||||
use ely_design_system::colors;
|
||||
use ely_domain::HistoryRecordingPolicy;
|
||||
use ely_domain::{DiagnosticsReportingPolicy, HistoryRecordingPolicy};
|
||||
use gpui::prelude::FluentBuilder;
|
||||
use gpui::{AnyElement, Context, IntoElement, ParentElement, Styled, div, px, rgb};
|
||||
use gpui_component::{
|
||||
@@ -32,7 +32,7 @@ impl ElyShell {
|
||||
.when(snapshot.active_profile_history_entry_count > 0, |this| {
|
||||
this.child(render_history_clear_controls(confirming_clear, cx))
|
||||
})
|
||||
.child(render_history_policy_rows(snapshot.history_recording_policy, cx)),
|
||||
.child(render_privacy_settings_rows(snapshot, cx)),
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -229,18 +229,43 @@ fn render_clear_history_confirmation(cx: &mut Context<ElyShell>) -> AnyElement {
|
||||
.into_any_element()
|
||||
}
|
||||
|
||||
fn render_history_policy_rows(
|
||||
active_policy: HistoryRecordingPolicy,
|
||||
fn render_privacy_settings_rows(
|
||||
snapshot: &BrowserSnapshot,
|
||||
cx: &mut Context<ElyShell>,
|
||||
) -> AnyElement {
|
||||
div()
|
||||
.flex_1()
|
||||
.min_h_0()
|
||||
.flex()
|
||||
.flex_col()
|
||||
.overflow_y_scrollbar()
|
||||
.border_t_1()
|
||||
.border_color(rgb(colors::HAIRLINE))
|
||||
.flex()
|
||||
.flex_col()
|
||||
.child(section_label("History"))
|
||||
.child(render_history_policy_rows(snapshot.history_recording_policy, cx))
|
||||
.child(section_label("Diagnostics"))
|
||||
.child(render_diagnostics_policy_rows(snapshot.diagnostics_reporting_policy, cx))
|
||||
.into_any_element()
|
||||
}
|
||||
|
||||
fn section_label(label: &'static str) -> AnyElement {
|
||||
div()
|
||||
.pt_4()
|
||||
.pb_2()
|
||||
.text_xs()
|
||||
.font_semibold()
|
||||
.text_color(rgb(colors::MUTED))
|
||||
.child(label)
|
||||
.into_any_element()
|
||||
}
|
||||
|
||||
fn render_history_policy_rows(
|
||||
active_policy: HistoryRecordingPolicy,
|
||||
cx: &mut Context<ElyShell>,
|
||||
) -> AnyElement {
|
||||
div()
|
||||
.flex()
|
||||
.flex_col()
|
||||
.children(
|
||||
HistoryRecordingPolicy::ALL
|
||||
.iter()
|
||||
@@ -251,6 +276,85 @@ fn render_history_policy_rows(
|
||||
.into_any_element()
|
||||
}
|
||||
|
||||
fn render_diagnostics_policy_rows(
|
||||
active_policy: DiagnosticsReportingPolicy,
|
||||
cx: &mut Context<ElyShell>,
|
||||
) -> AnyElement {
|
||||
div()
|
||||
.flex()
|
||||
.flex_col()
|
||||
.children(
|
||||
DiagnosticsReportingPolicy::ALL.iter().copied().enumerate().map(|(index, policy)| {
|
||||
render_diagnostics_policy_row(index, policy, active_policy, cx)
|
||||
}),
|
||||
)
|
||||
.into_any_element()
|
||||
}
|
||||
|
||||
fn render_diagnostics_policy_row(
|
||||
index: usize,
|
||||
policy: DiagnosticsReportingPolicy,
|
||||
active_policy: DiagnosticsReportingPolicy,
|
||||
cx: &mut Context<ElyShell>,
|
||||
) -> AnyElement {
|
||||
let selected = policy == active_policy;
|
||||
|
||||
div()
|
||||
.py_3()
|
||||
.border_b_1()
|
||||
.border_color(rgb(colors::HAIRLINE))
|
||||
.flex()
|
||||
.items_center()
|
||||
.justify_between()
|
||||
.gap_4()
|
||||
.child(
|
||||
div()
|
||||
.min_w_0()
|
||||
.flex()
|
||||
.items_center()
|
||||
.gap_3()
|
||||
.child(
|
||||
div()
|
||||
.text_color(rgb(diagnostics_policy_icon_color(policy, selected)))
|
||||
.child(diagnostics_policy_icon(policy, selected)),
|
||||
)
|
||||
.child(
|
||||
div()
|
||||
.min_w_0()
|
||||
.flex()
|
||||
.flex_col()
|
||||
.gap_1()
|
||||
.child(
|
||||
div()
|
||||
.text_sm()
|
||||
.font_semibold()
|
||||
.truncate()
|
||||
.text_color(rgb(colors::INK))
|
||||
.child(policy.name()),
|
||||
)
|
||||
.child(
|
||||
div()
|
||||
.text_xs()
|
||||
.truncate()
|
||||
.text_color(rgb(colors::MUTED))
|
||||
.child(policy.detail()),
|
||||
),
|
||||
),
|
||||
)
|
||||
.child(
|
||||
Button::new(("diagnostics-reporting-policy", index))
|
||||
.ghost()
|
||||
.xsmall()
|
||||
.selected(selected)
|
||||
.label(diagnostics_policy_button_label(policy, selected))
|
||||
.tooltip(policy.name())
|
||||
.on_click(cx.listener(move |shell, _, _, cx| {
|
||||
shell.set_diagnostics_reporting_policy(policy, cx);
|
||||
})),
|
||||
)
|
||||
.into_any_element()
|
||||
}
|
||||
|
||||
fn render_history_policy_row(
|
||||
index: usize,
|
||||
policy: HistoryRecordingPolicy,
|
||||
@@ -322,6 +426,13 @@ fn privacy_icon(policy: HistoryRecordingPolicy) -> IconName {
|
||||
}
|
||||
}
|
||||
|
||||
fn diagnostics_icon(policy: DiagnosticsReportingPolicy) -> IconName {
|
||||
match policy {
|
||||
DiagnosticsReportingPolicy::Minimal => IconName::Info,
|
||||
DiagnosticsReportingPolicy::Paused => IconName::EyeOff,
|
||||
}
|
||||
}
|
||||
|
||||
fn policy_color(policy: HistoryRecordingPolicy) -> u32 {
|
||||
match policy {
|
||||
HistoryRecordingPolicy::Record => colors::SUCCESS,
|
||||
@@ -329,14 +440,29 @@ fn policy_color(policy: HistoryRecordingPolicy) -> u32 {
|
||||
}
|
||||
}
|
||||
|
||||
fn diagnostics_policy_color(policy: DiagnosticsReportingPolicy) -> u32 {
|
||||
match policy {
|
||||
DiagnosticsReportingPolicy::Minimal => colors::SUCCESS,
|
||||
DiagnosticsReportingPolicy::Paused => colors::PRIMARY,
|
||||
}
|
||||
}
|
||||
|
||||
fn history_policy_icon(policy: HistoryRecordingPolicy, selected: bool) -> IconName {
|
||||
if selected { IconName::CircleCheck } else { privacy_icon(policy) }
|
||||
}
|
||||
|
||||
fn diagnostics_policy_icon(policy: DiagnosticsReportingPolicy, selected: bool) -> IconName {
|
||||
if selected { IconName::CircleCheck } else { diagnostics_icon(policy) }
|
||||
}
|
||||
|
||||
fn history_policy_icon_color(policy: HistoryRecordingPolicy, selected: bool) -> u32 {
|
||||
if selected { policy_color(policy) } else { colors::MUTED_SOFT }
|
||||
}
|
||||
|
||||
fn diagnostics_policy_icon_color(policy: DiagnosticsReportingPolicy, selected: bool) -> u32 {
|
||||
if selected { diagnostics_policy_color(policy) } else { colors::MUTED_SOFT }
|
||||
}
|
||||
|
||||
fn history_policy_button_label(policy: HistoryRecordingPolicy, selected: bool) -> &'static str {
|
||||
match (policy, selected) {
|
||||
(HistoryRecordingPolicy::Record, true) => "Default",
|
||||
@@ -344,3 +470,14 @@ fn history_policy_button_label(policy: HistoryRecordingPolicy, selected: bool) -
|
||||
_ => "Select",
|
||||
}
|
||||
}
|
||||
|
||||
fn diagnostics_policy_button_label(
|
||||
policy: DiagnosticsReportingPolicy,
|
||||
selected: bool,
|
||||
) -> &'static str {
|
||||
match (policy, selected) {
|
||||
(DiagnosticsReportingPolicy::Minimal, true) => "Default",
|
||||
(_, true) => "Active",
|
||||
_ => "Select",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use ely_domain::{
|
||||
ArchivePolicy, DownloadPolicy, FavoriteLimit, HistoryRecordingPolicy, NewTabDestination,
|
||||
ProfileId, ProfileSyncPolicy, SearchEngine, SyncObjectKind, SyncObjectPolicy, UpdatePolicy,
|
||||
ArchivePolicy, DiagnosticsReportingPolicy, DownloadPolicy, FavoriteLimit,
|
||||
HistoryRecordingPolicy, NewTabDestination, ProfileId, ProfileSyncPolicy, SearchEngine,
|
||||
SyncObjectKind, SyncObjectPolicy, UpdatePolicy,
|
||||
};
|
||||
use gpui::Context;
|
||||
|
||||
@@ -66,6 +67,17 @@ impl ElyShell {
|
||||
}
|
||||
}
|
||||
|
||||
pub(super) fn set_diagnostics_reporting_policy(
|
||||
&mut self,
|
||||
policy: DiagnosticsReportingPolicy,
|
||||
cx: &mut Context<Self>,
|
||||
) {
|
||||
if let ShellState::Ready(core) = &mut self.state {
|
||||
core.set_diagnostics_reporting_policy(policy);
|
||||
cx.notify();
|
||||
}
|
||||
}
|
||||
|
||||
pub(super) fn reset_privacy_settings(&mut self, cx: &mut Context<Self>) {
|
||||
if let ShellState::Ready(core) = &mut self.state {
|
||||
core.reset_privacy_settings();
|
||||
|
||||
Reference in New Issue
Block a user