Skip to content

Commit deb6438

Browse files
authored
Merge pull request #2568 from crazyserver/MOBILE-3572
Mobile 3572
2 parents 099ca77 + 5cf0204 commit deb6438

File tree

5 files changed

+51
-18
lines changed

5 files changed

+51
-18
lines changed

src/assets/lang/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2001,6 +2001,7 @@
20012001
"core.settings.cannotsyncwithoutwifi": "Cannot synchronise because the current settings only allow to synchronise when connected to Wi-Fi. Please connect to a Wi-Fi network.",
20022002
"core.settings.colorscheme": "Color Scheme",
20032003
"core.settings.colorscheme-auto": "Auto (based on system settings)",
2004+
"core.settings.colorscheme-auto-notice": "Auto mode may not work in some Android devices.",
20042005
"core.settings.colorscheme-dark": "Dark",
20052006
"core.settings.colorscheme-light": "Light",
20062007
"core.settings.compilationinfo": "Compilation info",

src/core/settings/lang/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"cannotsyncwithoutwifi": "Cannot synchronise because the current settings only allow to synchronise when connected to Wi-Fi. Please connect to a Wi-Fi network.",
88
"colorscheme": "Color Scheme",
99
"colorscheme-auto": "Auto (based on system settings)",
10+
"colorscheme-auto-notice": "Auto mode may not work in some Android devices.",
1011
"colorscheme-dark": "Dark",
1112
"colorscheme-light": "Light",
1213
"compilationinfo": "Compilation info",

src/core/settings/pages/general/general.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
</ion-segment-button>
2121
</ion-segment>
2222
</ion-item>
23-
<ion-item text-wrap class="core-settings-general-color-scheme" *ngIf="colorSchemes.length > 0">
23+
<ion-item text-wrap class="core-settings-general-color-scheme" *ngIf="colorSchemes.length > 0" [attr.no-lines]="selectedScheme=='auto' && isAndroid ? true : null">
2424
<ion-label>
2525
<h2>{{ 'core.settings.colorscheme' | translate }}</h2>
2626
<p *ngIf="colorSchemeDisabled" class="text-danger">{{ 'core.settings.forcedsetting' | translate }}</p>
@@ -29,6 +29,9 @@ <h2>{{ 'core.settings.colorscheme' | translate }}</h2>
2929
<ion-option *ngFor="let scheme of colorSchemes" [value]="scheme">{{ 'core.settings.colorscheme-' + scheme | translate }}</ion-option>
3030
</ion-select>
3131
</ion-item>
32+
<ion-item text-wrap *ngIf="colorSchemes.length > 0 && selectedScheme=='auto' && isAndroid">
33+
<p class="text-danger">{{ 'core.settings.colorscheme-auto-notice' | translate }}</p>
34+
</ion-item>
3235
<ion-item text-wrap *ngIf="rteSupported">
3336
<ion-label>
3437
<h2>{{ 'core.settings.enablerichtexteditor' | translate }}</h2>

src/core/settings/pages/general/general.ts

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import { Component, ViewChild } from '@angular/core';
1616
import { IonicPage, Segment } from 'ionic-angular';
1717
import { CoreConstants } from '@core/constants';
18+
import { CoreApp } from '@providers/app';
1819
import { CoreConfigProvider } from '@providers/config';
1920
import { CoreFileProvider } from '@providers/file';
2021
import { CoreEventsProvider } from '@providers/events';
@@ -46,6 +47,7 @@ export class CoreSettingsGeneralPage {
4647
colorSchemes = [];
4748
selectedScheme: string;
4849
colorSchemeDisabled: boolean;
50+
isAndroid: boolean;
4951

5052
constructor(protected configProvider: CoreConfigProvider,
5153
fileProvider: CoreFileProvider,
@@ -71,17 +73,11 @@ export class CoreSettingsGeneralPage {
7173
this.colorSchemes.push('light');
7274
this.selectedScheme = this.colorSchemes[0];
7375
} else {
74-
let defaultColorScheme = 'light';
76+
this.isAndroid = CoreApp.instance.isAndroid();
7577

76-
if (window.matchMedia('(prefers-color-scheme: dark)').matches ||
77-
window.matchMedia('(prefers-color-scheme: light)').matches) {
78-
this.colorSchemes.push('auto');
79-
defaultColorScheme = 'auto';
80-
}
81-
this.colorSchemes.push('light');
82-
this.colorSchemes.push('dark');
78+
this.colorSchemes = this.settingsHelper.getAllowedColorSchemes();
8379

84-
this.configProvider.get(CoreConstants.SETTINGS_COLOR_SCHEME, defaultColorScheme).then((scheme) => {
80+
this.configProvider.get(CoreConstants.SETTINGS_COLOR_SCHEME, 'light').then((scheme) => {
8581
this.selectedScheme = scheme;
8682
});
8783
}

src/core/settings/providers/helper.ts

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export interface CoreSiteSpaceUsage {
4444
export class CoreSettingsHelper {
4545
protected logger;
4646
protected syncPromises = {};
47+
protected colorSchemes: string[] = [];
4748

4849
constructor(loggerProvider: CoreLoggerProvider,
4950
protected appProvider: CoreAppProvider,
@@ -342,14 +343,7 @@ export class CoreSettingsHelper {
342343
if (!!CoreConfigConstants.forceColorScheme) {
343344
this.setColorScheme(CoreConfigConstants.forceColorScheme);
344345
} else {
345-
let defaultColorScheme = 'light';
346-
347-
if (window.matchMedia('(prefers-color-scheme: dark)').matches ||
348-
window.matchMedia('(prefers-color-scheme: light)').matches) {
349-
defaultColorScheme = 'auto';
350-
}
351-
352-
this.configProvider.get(CoreConstants.SETTINGS_COLOR_SCHEME, defaultColorScheme).then((scheme) => {
346+
this.configProvider.get(CoreConstants.SETTINGS_COLOR_SCHEME, 'light').then((scheme) => {
353347
this.setColorScheme(scheme);
354348
});
355349
}
@@ -388,6 +382,40 @@ export class CoreSettingsHelper {
388382
document.documentElement.style.fontSize = fontSize + '%';
389383
}
390384

385+
/**
386+
* Get system allowed color schemes.
387+
*
388+
* @return Allowed color schemes.
389+
*/
390+
getAllowedColorSchemes(): string[] {
391+
if (this.colorSchemes.length > 0) {
392+
return this.colorSchemes;
393+
}
394+
395+
if (!CoreConfigConstants.forceColorScheme) {
396+
this.colorSchemes.push('light');
397+
this.colorSchemes.push('dark');
398+
if (window.matchMedia('(prefers-color-scheme)').media !== 'not all') {
399+
this.colorSchemes.push('auto');
400+
}
401+
} else {
402+
this.colorSchemes = [CoreConfigConstants.forceColorScheme];
403+
}
404+
405+
return this.colorSchemes;
406+
}
407+
408+
/**
409+
* Toggle Dark on auto mode.
410+
*
411+
* @param dark If dark scheme should be set or removed.
412+
*/
413+
protected toggleDarkTheme(dark: boolean): void {
414+
if (document.body.classList.contains('scheme-auto')) {
415+
document.body.classList.toggle('scheme-dark', dark);
416+
}
417+
}
418+
391419
/**
392420
* Set body color scheme.
393421
*
@@ -397,6 +425,10 @@ export class CoreSettingsHelper {
397425
document.body.classList.remove('scheme-light');
398426
document.body.classList.remove('scheme-dark');
399427
document.body.classList.remove('scheme-auto');
428+
429+
const colorSchemes = this.getAllowedColorSchemes();
430+
431+
colorScheme = colorSchemes.indexOf(colorScheme) >= 0 ? colorScheme : colorSchemes[0];
400432
document.body.classList.add('scheme-' + colorScheme);
401433
}
402434
}

0 commit comments

Comments
 (0)