Skip to content

Commit b92e8ca

Browse files
wolfibDevtools-frontend LUCI CQ
authored andcommitted
[AI Settings] Add explainer banner if toggles are disabled
Screenshot: https://i.imgur.com/x1XHHXW.png Fixed: 372182770 Change-Id: I86d8d9a8a472ec89c9f011250da691907fccff69 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/5976623 Commit-Queue: Wolfgang Beyer <[email protected]> Commit-Queue: Alex Rudenko <[email protected]> Auto-Submit: Wolfgang Beyer <[email protected]> Reviewed-by: Alex Rudenko <[email protected]>
1 parent f80096d commit b92e8ca

File tree

3 files changed

+55
-16
lines changed

3 files changed

+55
-16
lines changed

front_end/panels/settings/AISettingsTab.test.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ describeWithEnvironment('AISettingsTab', () => {
4040
details: Element[],
4141
dropdownButtons: HTMLElement[],
4242
toggleContainers: HTMLElement[],
43+
view: Settings.AISettingsTab.AISettingsTab,
4344
}> {
4445
Common.Settings.moduleSetting('console-insights-enabled').set(false);
4546
Common.Settings.moduleSetting('ai-assistance-enabled').set(true);
@@ -58,7 +59,7 @@ describeWithEnvironment('AISettingsTab', () => {
5859
const toggleContainers =
5960
Array.from(view.shadowRoot.querySelectorAll('.toggle-container')) as Switch.Switch.Switch[];
6061
assert.strictEqual(toggleContainers.length, 2);
61-
return {switches, details, dropdownButtons, toggleContainers};
62+
return {switches, details, dropdownButtons, toggleContainers, view};
6263
}
6364

6465
it('renders', async () => {
@@ -146,7 +147,8 @@ describeWithEnvironment('AISettingsTab', () => {
146147
},
147148
});
148149

149-
const {switches, toggleContainers} = await renderAISettings();
150+
const {switches, toggleContainers, view} = await renderAISettings();
151+
assert.strictEqual(view.shadowRoot?.querySelector('.disabled-explainer')?.textContent?.trim(), underAgeExplainer);
150152
assert.isTrue(switches[0].disabled);
151153
assert.strictEqual(toggleContainers[0].title, underAgeExplainer);
152154
assert.isTrue(switches[1].disabled);
@@ -161,7 +163,9 @@ describeWithEnvironment('AISettingsTab', () => {
161163
const aidaAccessStub = sinon.stub(Host.AidaClient.AidaClient, 'checkAccessPreconditions');
162164
aidaAccessStub.returns(Promise.resolve(Host.AidaClient.AidaAccessPreconditions.NO_ACCOUNT_EMAIL));
163165

164-
const {switches, toggleContainers} = await renderAISettings();
166+
const {switches, toggleContainers, view} = await renderAISettings();
167+
assert.strictEqual(
168+
view.shadowRoot?.querySelector('.disabled-explainer')?.textContent?.trim(), notLoggedInExplainer);
165169
assert.isTrue(switches[0].disabled);
166170
assert.strictEqual(toggleContainers[0].title, notLoggedInExplainer);
167171
assert.isTrue(switches[1].disabled);
@@ -171,6 +175,7 @@ describeWithEnvironment('AISettingsTab', () => {
171175
Host.AidaClient.HostConfigTracker.instance().dispatchEventToListeners(
172176
Host.AidaClient.Events.AIDA_AVAILABILITY_CHANGED);
173177
await drainMicroTasks();
178+
assert.isNull(view.shadowRoot?.querySelector('.disabled-explainer'));
174179
assert.isFalse(switches[0].disabled);
175180
assert.isFalse(switches[1].disabled);
176181
aidaAccessStub.restore();
@@ -182,25 +187,26 @@ describeWithEnvironment('AISettingsTab', () => {
182187
settingType: Common.Settings.SettingType.BOOLEAN,
183188
defaultValue: false,
184189
disabledCondition: () => {
185-
return {disabled: true, reason: 'reason 1'};
190+
return {disabled: true, reason: 'some reason'};
186191
},
187192
});
188193
Common.Settings.moduleSetting('ai-assistance-enabled').setRegistration({
189194
settingName: 'ai-assistance-enabled',
190195
settingType: Common.Settings.SettingType.BOOLEAN,
191196
defaultValue: true,
192197
disabledCondition: () => {
193-
return {disabled: true, reason: 'reason 2'};
198+
return {disabled: true, reason: 'some reason'};
194199
},
195200
});
196201
const stub = sinon.stub(Host.AidaClient.AidaClient, 'checkAccessPreconditions');
197202
stub.returns(Promise.resolve(Host.AidaClient.AidaAccessPreconditions.AVAILABLE));
198203

199-
const {switches, toggleContainers} = await renderAISettings();
204+
const {switches, toggleContainers, view} = await renderAISettings();
205+
assert.strictEqual(view.shadowRoot?.querySelector('.disabled-explainer')?.textContent?.trim(), 'some reason');
200206
assert.isTrue(switches[0].disabled);
201-
assert.strictEqual(toggleContainers[0].title, 'reason 1');
207+
assert.strictEqual(toggleContainers[0].title, 'some reason');
202208
assert.isTrue(switches[1].disabled);
203-
assert.strictEqual(toggleContainers[1].title, 'reason 2');
209+
assert.strictEqual(toggleContainers[1].title, 'some reason');
204210
stub.restore();
205211
});
206212
});

front_end/panels/settings/AISettingsTab.ts

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ export class AISettingsTab extends LegacyWrapper.LegacyWrapper.WrappableComponen
361361
// clang-format on
362362
}
363363

364-
#getDisabledReason(setting: Common.Settings.Setting<boolean>|undefined): string|undefined {
364+
#getDisabledReason(): string|undefined {
365365
switch (this.#aidaAvailability) {
366366
case Host.AidaClient.AidaAccessPreconditions.NO_ACCOUNT_EMAIL:
367367
case Host.AidaClient.AidaAccessPreconditions.SYNC_IS_PAUSED:
@@ -374,16 +374,16 @@ export class AISettingsTab extends LegacyWrapper.LegacyWrapper.WrappableComponen
374374
if (config?.aidaAvailability?.blockedByAge === true) {
375375
return i18nString(UIStrings.ageRestricted);
376376
}
377-
return setting?.disabledReason();
377+
// `consoleInsightsSetting` and `aiAssistantSetting` are both disabled for the same reason.
378+
return this.#consoleInsightsSetting?.disabledReason();
378379
}
379380

380-
#renderConsoleInsightsSetting(): LitHtml.TemplateResult {
381+
#renderConsoleInsightsSetting(disabledReason?: string): LitHtml.TemplateResult {
381382
const detailsClasses = {
382383
'whole-row': true,
383384
open: this.#isConsoleInsightsSettingExpanded,
384385
};
385386
const tabindex = this.#isConsoleInsightsSettingExpanded ? '0' : '-1';
386-
const disabledReason = this.#getDisabledReason(this.#consoleInsightsSetting);
387387

388388
// Disabled until https://crbug.com/1079231 is fixed.
389389
// clang-format off
@@ -446,13 +446,12 @@ export class AISettingsTab extends LegacyWrapper.LegacyWrapper.WrappableComponen
446446
// clang-format on
447447
}
448448

449-
#renderAiAssistanceSetting(): LitHtml.TemplateResult {
449+
#renderAiAssistanceSetting(disabledReason?: string): LitHtml.TemplateResult {
450450
const detailsClasses = {
451451
'whole-row': true,
452452
open: this.#isAiAssistanceSettingExpanded,
453453
};
454454
const tabindex = this.#isAiAssistanceSettingExpanded ? '0' : '-1';
455-
const disabledReason = this.#getDisabledReason(this.#aiAssistanceSetting);
456455

457456
// Disabled until https://crbug.com/1079231 is fixed.
458457
// clang-format off
@@ -515,7 +514,27 @@ export class AISettingsTab extends LegacyWrapper.LegacyWrapper.WrappableComponen
515514
// clang-format on
516515
}
517516

517+
#renderDisabledExplainer(disabledReason: string): LitHtml.LitTemplate {
518+
// Disabled until https://crbug.com/1079231 is fixed.
519+
// clang-format off
520+
return html`
521+
<div class="disabled-explainer">
522+
<devtools-icon .data=${{
523+
iconName: 'warning',
524+
color: 'var(--sys-color-orange)',
525+
width: 'var(--sys-size-8)',
526+
height: 'var(--sys-size-8)',
527+
} as IconButton.Icon.IconData}>
528+
</devtools-icon>
529+
${disabledReason}
530+
</div>
531+
`;
532+
// clang-format on
533+
}
534+
518535
override async render(): Promise<void> {
536+
const disabledReason = this.#getDisabledReason();
537+
519538
// Disabled until https://crbug.com/1079231 is fixed.
520539
// clang-format off
521540
LitHtml.render(html`
@@ -525,9 +544,10 @@ export class AISettingsTab extends LegacyWrapper.LegacyWrapper.WrappableComponen
525544
<div class="settings-container-wrapper" jslog=${VisualLogging.pane('chrome-ai')}>
526545
${this.#renderSharedDisclaimer()}
527546
${this.#consoleInsightsSetting || this.#aiAssistanceSetting ? html`
547+
${Boolean(disabledReason) ? this.#renderDisabledExplainer(disabledReason as string) : LitHtml.nothing}
528548
<div class="settings-container">
529-
${this.#consoleInsightsSetting ? this.#renderConsoleInsightsSetting() : LitHtml.nothing}
530-
${this.#aiAssistanceSetting ? this.#renderAiAssistanceSetting() : LitHtml.nothing}
549+
${this.#consoleInsightsSetting ? this.#renderConsoleInsightsSetting(disabledReason) : LitHtml.nothing}
550+
${this.#aiAssistanceSetting ? this.#renderAiAssistanceSetting(disabledReason) : LitHtml.nothing}
531551
</div>
532552
` : LitHtml.nothing}
533553
</div>

front_end/panels/settings/aiSettingsTab.css

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,3 +175,16 @@ header {
175175
font-size: var(--sys-typescale-headline3-size);
176176
font-weight: var(--ref-typeface-weight-regular);
177177
}
178+
179+
.disabled-explainer {
180+
display: flex;
181+
gap: var(--sys-size-6);
182+
background-color: var(--sys-color-surface-yellow);
183+
border-radius: var(--sys-shape-corner-medium-small);
184+
margin-top: var(--sys-size-11);
185+
padding: var(--sys-size-8) var(--sys-size-11);
186+
width: 100%;
187+
max-width: var(--sys-size-35);
188+
min-width: var(--sys-size-28);
189+
color: var(--sys-color-yellow);
190+
}

0 commit comments

Comments
 (0)