mirror of
https://github.com/apache/cordova-android.git
synced 2025-03-26 07:11:16 +08:00
feat: add AndroidEdgeToEdge preference & theme flag (#1779)
This commit is contained in:
parent
d0b59863ac
commit
bb4f86e7b9
@ -271,7 +271,7 @@ function cleanWww (projectRoot, locations) {
|
|||||||
*/
|
*/
|
||||||
function updateProjectAccordingTo (platformConfig, locations) {
|
function updateProjectAccordingTo (platformConfig, locations) {
|
||||||
updateProjectStrings(platformConfig, locations);
|
updateProjectStrings(platformConfig, locations);
|
||||||
updateProjectSplashScreen(platformConfig, locations);
|
updateProjectTheme(platformConfig, locations);
|
||||||
|
|
||||||
const name = platformConfig.name();
|
const name = platformConfig.name();
|
||||||
|
|
||||||
@ -376,11 +376,31 @@ function warnForDeprecatedSplashScreen (cordovaProject) {
|
|||||||
* be used to update project
|
* be used to update project
|
||||||
* @param {Object} locations A map of locations for this platform
|
* @param {Object} locations A map of locations for this platform
|
||||||
*/
|
*/
|
||||||
function updateProjectSplashScreen (platformConfig, locations) {
|
function updateProjectTheme (platformConfig, locations) {
|
||||||
// res/values/themes.xml
|
// res/values/themes.xml
|
||||||
const themes = xmlHelpers.parseElementtreeSync(locations.themes);
|
const themes = xmlHelpers.parseElementtreeSync(locations.themes);
|
||||||
const splashScreenTheme = themes.find('style[@name="Theme.App.SplashScreen"]');
|
const splashScreenTheme = themes.find('style[@name="Theme.App.SplashScreen"]');
|
||||||
|
|
||||||
|
// Update edge-to-edge settings in app theme.
|
||||||
|
let hasE2E = false; // default case
|
||||||
|
|
||||||
|
const preferenceE2E = platformConfig.getPreference('AndroidEdgeToEdge', this.platform);
|
||||||
|
if (!preferenceE2E) {
|
||||||
|
events.emit('verbose', 'The preference name "AndroidEdgeToEdge" was not set. Defaulting to "false".');
|
||||||
|
} else {
|
||||||
|
const hasInvalidPreferenceE2E = preferenceE2E !== 'true' && preferenceE2E !== 'false';
|
||||||
|
if (hasInvalidPreferenceE2E) {
|
||||||
|
events.emit('verbose', 'Preference name "AndroidEdgeToEdge" has an invalid value. Valid values are "true" or "false". Defaulting to "false"');
|
||||||
|
}
|
||||||
|
hasE2E = hasInvalidPreferenceE2E ? false : preferenceE2E === 'true';
|
||||||
|
}
|
||||||
|
|
||||||
|
const optOutE2EKey = 'android:windowOptOutEdgeToEdgeEnforcement';
|
||||||
|
const optOutE2EItem = splashScreenTheme.find(`item[@name="${optOutE2EKey}"]`);
|
||||||
|
const optOutE2EValue = !hasE2E ? 'true' : 'false';
|
||||||
|
optOutE2EItem.text = optOutE2EValue;
|
||||||
|
events.emit('verbose', `Updating theme item "${optOutE2EKey}" with value "${optOutE2EValue}"`);
|
||||||
|
|
||||||
let splashBg = platformConfig.getPreference('AndroidWindowSplashScreenBackground', this.platform);
|
let splashBg = platformConfig.getPreference('AndroidWindowSplashScreenBackground', this.platform);
|
||||||
if (!splashBg) {
|
if (!splashBg) {
|
||||||
splashBg = platformConfig.getPreference('SplashScreenBackgroundColor', this.platform);
|
splashBg = platformConfig.getPreference('SplashScreenBackgroundColor', this.platform);
|
||||||
@ -397,6 +417,7 @@ function updateProjectSplashScreen (platformConfig, locations) {
|
|||||||
splashBgNode.text = '@color/cdv_splashscreen_background';
|
splashBgNode.text = '@color/cdv_splashscreen_background';
|
||||||
|
|
||||||
[
|
[
|
||||||
|
// Splash Screen
|
||||||
'windowSplashScreenAnimatedIcon',
|
'windowSplashScreenAnimatedIcon',
|
||||||
'windowSplashScreenAnimationDuration',
|
'windowSplashScreenAnimationDuration',
|
||||||
'android:windowSplashScreenBrandingImage',
|
'android:windowSplashScreenBrandingImage',
|
||||||
|
@ -950,7 +950,7 @@ describe('prepare', () => {
|
|||||||
|
|
||||||
prepare.__set__('updateWww', jasmine.createSpy('updateWww'));
|
prepare.__set__('updateWww', jasmine.createSpy('updateWww'));
|
||||||
prepare.__set__('updateIcons', jasmine.createSpy('updateIcons').and.returnValue(Promise.resolve()));
|
prepare.__set__('updateIcons', jasmine.createSpy('updateIcons').and.returnValue(Promise.resolve()));
|
||||||
prepare.__set__('updateProjectSplashScreen', jasmine.createSpy('updateProjectSplashScreen'));
|
prepare.__set__('updateProjectTheme', jasmine.createSpy('updateProjectTheme'));
|
||||||
prepare.__set__('warnForDeprecatedSplashScreen', jasmine.createSpy('warnForDeprecatedSplashScreen')
|
prepare.__set__('warnForDeprecatedSplashScreen', jasmine.createSpy('warnForDeprecatedSplashScreen')
|
||||||
.and.returnValue(Promise.resolve()));
|
.and.returnValue(Promise.resolve()));
|
||||||
prepare.__set__('updateFileResources', jasmine.createSpy('updateFileResources').and.returnValue(Promise.resolve()));
|
prepare.__set__('updateFileResources', jasmine.createSpy('updateFileResources').and.returnValue(Promise.resolve()));
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
specific language governing permissions and limitations
|
specific language governing permissions and limitations
|
||||||
under the License.
|
under the License.
|
||||||
-->
|
-->
|
||||||
<resources>
|
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||||
<style name="Theme.App.SplashScreen" parent="Theme.SplashScreen.IconBackground">
|
<style name="Theme.App.SplashScreen" parent="Theme.SplashScreen.IconBackground">
|
||||||
<!-- Optional: Set the splash screen background. (Default: #FFFFFF) -->
|
<!-- Optional: Set the splash screen background. (Default: #FFFFFF) -->
|
||||||
<item name="windowSplashScreenBackground">@color/cdv_splashscreen_background</item>
|
<item name="windowSplashScreenBackground">@color/cdv_splashscreen_background</item>
|
||||||
@ -30,5 +30,8 @@
|
|||||||
|
|
||||||
<!-- Required: Set the theme of the Activity that directly follows your splash screen. -->
|
<!-- Required: Set the theme of the Activity that directly follows your splash screen. -->
|
||||||
<item name="postSplashScreenTheme">@style/Theme.AppCompat.NoActionBar</item>
|
<item name="postSplashScreenTheme">@style/Theme.AppCompat.NoActionBar</item>
|
||||||
|
|
||||||
|
<!-- Disable Edge-to-Edge for SDK 35 -->
|
||||||
|
<item name="android:windowOptOutEdgeToEdgeEnforcement" tools:targetApi="35">true</item>
|
||||||
</style>
|
</style>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user