// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import '../controls/settings_toggle_button.js';
import 'chrome://resources/cr_elements/cr_collapse/cr_collapse.js';
import {PrefsMixin} from '/shared/settings/prefs/prefs_mixin.js';
import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {loadTimeData} from '../i18n_setup.js';
import {Router} from '../router.js';
import {getTemplate} from './ai_page.html.js';
// These values must stay in sync with
// optimization_guide::prefs::FeatureOptInState in
// components/optimization_guide/core/optimization_guide_prefs.h.
export enum FeatureOptInState {
NOT_INITIALIZED = 0,
ENABLED = 1,
DISABLED = 2,
}
// Exporting pref names so that they can be referenced by tests.
export enum SettingsAiPageFeaturePrefName {
MAIN = 'optimization_guide.model_execution_main_toggle_setting_state',
COMPOSE = 'optimization_guide.compose_setting_state',
TAB_ORGANIZATION = 'optimization_guide.tab_organization_setting_state',
WALLPAPER_SEARCH = 'optimization_guide.wallpaper_search_setting_state',
}
export interface SettingsAiPageElement {
$: {
historySearchRow: HTMLElement,
};
}
const SettingsAiPageElementBase = PrefsMixin(PolymerElement);
export class SettingsAiPageElement extends SettingsAiPageElementBase {
static get is() {
return 'settings-ai-page';
}
static get template() {
return getTemplate();
}
static get properties() {
return {
prefs: {
type: Object,
notify: true,
},
showComposeControl_: {
type: Boolean,
value: () => loadTimeData.getBoolean('showComposeControl'),
},
showHistorySearchControl_: {
type: Boolean,
value: () => loadTimeData.getBoolean('showHistorySearchControl'),
},
showTabOrganizationControl_: {
type: Boolean,
value: () => loadTimeData.getBoolean('showTabOrganizationControl'),
},
showWallpaperSearchControl_: {
type: Boolean,
value: () => loadTimeData.getBoolean('showWallpaperSearchControl'),
},
featureOptInStateEnum_: {
type: Object,
value: FeatureOptInState,
},
numericUncheckedValues_: {
type: Array,
value: () =>
[FeatureOptInState.DISABLED, FeatureOptInState.NOT_INITIALIZED],
},
};
}
private showComposeControl_: boolean;
private showHistorySearchControl_: boolean;
private showTabOrganizationControl_: boolean;
private showWallpaperSearchControl_: boolean;
private numericUncheckedValues_: FeatureOptInState[];
private isExpanded_(): boolean {
return this.getPref(SettingsAiPageFeaturePrefName.MAIN).value ===
FeatureOptInState.ENABLED;
}
private shouldShowMainToggle_(): boolean {
return this.showComposeControl_ || this.showTabOrganizationControl_ ||
this.showWallpaperSearchControl_;
}
private getTabOrganizationHrCssClass_(): string {
return this.showComposeControl_ ? 'hr' : '';
}
private getWallpaperSearchHrCssClass_(): string {
return this.showComposeControl_ || this.showTabOrganizationControl_ ? 'hr' :
'';
}
private onHistorySearchRowClick_() {
const router = Router.getInstance();
router.navigateTo(router.getRoutes().HISTORY_SEARCH);
}
}
declare global {
interface HTMLElementTagNameMap {
'settings-ai-page': SettingsAiPageElement;
}
}
customElements.define(SettingsAiPageElement.is, SettingsAiPageElement);