feat: add AndroidEdgeToEdge preference & theme flag (#1779)

This commit is contained in:
エリス 2025-03-14 12:22:05 +09:00 committed by GitHub
parent d0b59863ac
commit bb4f86e7b9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 28 additions and 4 deletions

View File

@ -271,7 +271,7 @@ function cleanWww (projectRoot, locations) {
*/
function updateProjectAccordingTo (platformConfig, locations) {
updateProjectStrings(platformConfig, locations);
updateProjectSplashScreen(platformConfig, locations);
updateProjectTheme(platformConfig, locations);
const name = platformConfig.name();
@ -376,11 +376,31 @@ function warnForDeprecatedSplashScreen (cordovaProject) {
* be used to update project
* @param {Object} locations A map of locations for this platform
*/
function updateProjectSplashScreen (platformConfig, locations) {
function updateProjectTheme (platformConfig, locations) {
// res/values/themes.xml
const themes = xmlHelpers.parseElementtreeSync(locations.themes);
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);
if (!splashBg) {
splashBg = platformConfig.getPreference('SplashScreenBackgroundColor', this.platform);
@ -397,6 +417,7 @@ function updateProjectSplashScreen (platformConfig, locations) {
splashBgNode.text = '@color/cdv_splashscreen_background';
[
// Splash Screen
'windowSplashScreenAnimatedIcon',
'windowSplashScreenAnimationDuration',
'android:windowSplashScreenBrandingImage',

View File

@ -950,7 +950,7 @@ describe('prepare', () => {
prepare.__set__('updateWww', jasmine.createSpy('updateWww'));
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')
.and.returnValue(Promise.resolve()));
prepare.__set__('updateFileResources', jasmine.createSpy('updateFileResources').and.returnValue(Promise.resolve()));

View File

@ -17,7 +17,7 @@
specific language governing permissions and limitations
under the License.
-->
<resources>
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.App.SplashScreen" parent="Theme.SplashScreen.IconBackground">
<!-- Optional: Set the splash screen background. (Default: #FFFFFF) -->
<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. -->
<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>
</resources>