This is an automated email from the ASF dual-hosted git repository.

erisu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cordova-ios.git


The following commit(s) were added to refs/heads/master by this push:
     new cfc8177  chore: deprecate mediaPlaybackRequiresUserAction (#784)
cfc8177 is described below

commit cfc817776366f05d825f56149fbdf1497d6ad976
Author: エリス <[email protected]>
AuthorDate: Mon Feb 17 13:56:16 2020 +0900

    chore: deprecate mediaPlaybackRequiresUserAction (#784)
    
    Apple has deprecated "mediaPlaybackRequiresUserAction" in iOS 8.0–9.0.
    This flag should be replaced with 
"mediaTypesRequiringUserActionForPlayback".
    Preference name has also been changed to 
"MediaTypesRequiringUserActionForPlayback"
---
 .../Plugins/CDVWebViewEngine/CDVWebViewEngine.m    | 10 ++++++++-
 bin/templates/project/__PROJECT_NAME__/config.xml  |  2 +-
 bin/templates/scripts/cordova/defaults.xml         |  2 +-
 bin/templates/scripts/cordova/lib/prepare.js       | 25 ++++++++++++++++++++++
 tests/CordovaLibTests/CDVWebViewEngineTest.m       | 22 ++++---------------
 tests/CordovaLibTests/CordovaLibApp/config.xml     |  2 +-
 .../fixtures/ios-config-xml/SampleApp/config.xml   |  2 +-
 7 files changed, 42 insertions(+), 23 deletions(-)

diff --git 
a/CordovaLib/Classes/Private/Plugins/CDVWebViewEngine/CDVWebViewEngine.m 
b/CordovaLib/Classes/Private/Plugins/CDVWebViewEngine/CDVWebViewEngine.m
index 2721504..f99d70f 100644
--- a/CordovaLib/Classes/Private/Plugins/CDVWebViewEngine/CDVWebViewEngine.m
+++ b/CordovaLib/Classes/Private/Plugins/CDVWebViewEngine/CDVWebViewEngine.m
@@ -74,7 +74,15 @@
     }
 
     configuration.allowsInlineMediaPlayback = [settings 
cordovaBoolSettingForKey:@"AllowInlineMediaPlayback" defaultValue:NO];
-    configuration.mediaPlaybackRequiresUserAction = [settings 
cordovaBoolSettingForKey:@"MediaPlaybackRequiresUserAction" defaultValue:YES];
+
+    // Check for usage of the older preference key, alert, and use.
+    BOOL mediaTypesRequiringUserActionForPlayback = [settings 
cordovaBoolSettingForKey:@"MediaTypesRequiringUserActionForPlayback" 
defaultValue:YES];
+    NSString *mediaPlaybackRequiresUserActionKey = [settings 
cordovaSettingForKey:@"MediaPlaybackRequiresUserAction"];
+    if(mediaPlaybackRequiresUserActionKey != nil) {
+        mediaTypesRequiringUserActionForPlayback = [settings 
cordovaBoolSettingForKey:@"MediaPlaybackRequiresUserAction" defaultValue:YES];
+    }
+    configuration.mediaTypesRequiringUserActionForPlayback = 
mediaTypesRequiringUserActionForPlayback;
+
     configuration.suppressesIncrementalRendering = [settings 
cordovaBoolSettingForKey:@"SuppressesIncrementalRendering" defaultValue:NO];
     configuration.mediaPlaybackAllowsAirPlay = [settings 
cordovaBoolSettingForKey:@"MediaPlaybackAllowsAirPlay" defaultValue:YES];
     return configuration;
diff --git a/bin/templates/project/__PROJECT_NAME__/config.xml 
b/bin/templates/project/__PROJECT_NAME__/config.xml
index 7471bb0..d41fd6d 100644
--- a/bin/templates/project/__PROJECT_NAME__/config.xml
+++ b/bin/templates/project/__PROJECT_NAME__/config.xml
@@ -53,7 +53,7 @@
     <preference name="DisallowOverscroll" value="false" />
     <preference name="EnableViewportScale" value="false" />
     <preference name="KeyboardDisplayRequiresUserAction" value="true" />
-    <preference name="MediaPlaybackRequiresUserAction" value="false" />
+    <preference name="MediaTypesRequiringUserActionForPlayback" value="false" 
/>
     <preference name="SuppressesIncrementalRendering" value="false" />
     <preference name="SuppressesLongPressGesture" value="false" />
     <preference name="Suppresses3DTouchGesture" value="false" />
diff --git a/bin/templates/scripts/cordova/defaults.xml 
b/bin/templates/scripts/cordova/defaults.xml
index a918266..b7edc26 100644
--- a/bin/templates/scripts/cordova/defaults.xml
+++ b/bin/templates/scripts/cordova/defaults.xml
@@ -27,7 +27,7 @@
     <preference name="DisallowOverscroll" value="false" />
     <preference name="EnableViewportScale" value="false" />
     <preference name="KeyboardDisplayRequiresUserAction" value="true" />
-    <preference name="MediaPlaybackRequiresUserAction" value="false" />
+    <preference name="MediaTypesRequiringUserActionForPlayback" value="false" 
/>
     <preference name="SuppressesIncrementalRendering" value="false" />
     <preference name="SuppressesLongPressGesture" value="false" />
     <preference name="Suppresses3DTouchGesture" value="false" />
diff --git a/bin/templates/scripts/cordova/lib/prepare.js 
b/bin/templates/scripts/cordova/lib/prepare.js
index 0ae4197..64bb691 100644
--- a/bin/templates/scripts/cordova/lib/prepare.js
+++ b/bin/templates/scripts/cordova/lib/prepare.js
@@ -60,6 +60,9 @@ module.exports.prepare = function (cordovaProject, options) {
             updateFileResources(cordovaProject, this.locations);
         })
         .then(() => {
+            alertDeprecatedPreference(this._config);
+        })
+        .then(() => {
             events.emit('verbose', 'Prepared iOS project successfully');
         });
 };
@@ -517,6 +520,28 @@ function updateFileResources (cordovaProject, locations) {
     project.write();
 }
 
+function alertDeprecatedPreference (configParser) {
+    const deprecatedToNewPreferences = {
+        MediaPlaybackRequiresUserAction: 
'MediaTypesRequiringUserActionForPlayback'
+    };
+
+    Object.keys(deprecatedToNewPreferences).forEach(oldKey => {
+        if (configParser.getPreference(oldKey)) {
+            const log = [`The preference name "${oldKey}" is being 
deprecated.`];
+
+            if (deprecatedToNewPreferences[oldKey]) {
+                log.push(`It is recommended to update this preference with 
"${deprecatedToNewPreferences[oldKey]}."`);
+            } else {
+                log.push(`There is no replacement for this preference.`);
+            }
+
+            log.push(`Please note that this preference will be removed in the 
near future.`);
+
+            events.emit('warn', log.join(' '));
+        }
+    });
+}
+
 function cleanFileResources (projectRoot, projectConfig, locations) {
     const platformDir = path.relative(projectRoot, locations.root);
     const files = projectConfig.getFileResources('ios', true);
diff --git a/tests/CordovaLibTests/CDVWebViewEngineTest.m 
b/tests/CordovaLibTests/CDVWebViewEngineTest.m
index a251b59..e21efc4 100644
--- a/tests/CordovaLibTests/CDVWebViewEngineTest.m
+++ b/tests/CordovaLibTests/CDVWebViewEngineTest.m
@@ -87,13 +87,10 @@
     id<CDVWebViewEngineProtocol> webViewEngineProtocol = self.plugin;
     WKWebView* wkWebView = (WKWebView*)self.plugin.engineWebView;
     
-    // iOS >=10 defaults to NO, < 10 defaults to YES.
-    BOOL mediaPlaybackRequiresUserActionDefault = 
IsAtLeastiOSVersion(@"10.0")? NO : YES;
-    
     NSDictionary* preferences = @{
                                [@"MinimumFontSize" lowercaseString] : @1.1, // 
default is 0.0
                                [@"AllowInlineMediaPlayback" lowercaseString] : 
@YES, // default is NO
-                               [@"MediaPlaybackRequiresUserAction" 
lowercaseString] : @(!mediaPlaybackRequiresUserActionDefault), // default is NO 
on iOS >= 10, YES for < 10
+                               [@"MediaTypesRequiringUserActionForPlayback" 
lowercaseString] : @YES, // default is NO
                                [@"SuppressesIncrementalRendering" 
lowercaseString] : @YES, // default is NO
                                [@"MediaPlaybackAllowsAirPlay" lowercaseString] 
: @NO, // default is YES
                                [@"DisallowOverscroll" lowercaseString] : @YES, 
// so bounces is to be NO. defaults to NO
@@ -108,11 +105,7 @@
     
XCTAssertEqualWithAccuracy(wkWebView.configuration.preferences.minimumFontSize, 
1.1, 0.0001);
     
     // the WKWebViewConfiguration properties, we **cannot** change outside of 
initialization
-    if (IsAtLeastiOSVersion(@"10.0")) {
-        
XCTAssertFalse(wkWebView.configuration.mediaPlaybackRequiresUserAction);
-    } else {
-        XCTAssertTrue(wkWebView.configuration.mediaPlaybackRequiresUserAction);
-    }
+    
XCTAssertTrue(wkWebView.configuration.mediaTypesRequiringUserActionForPlayback);
     XCTAssertFalse(wkWebView.configuration.allowsInlineMediaPlayback);
     XCTAssertFalse(wkWebView.configuration.suppressesIncrementalRendering);
     XCTAssertTrue(wkWebView.configuration.mediaPlaybackAllowsAirPlay);
@@ -137,13 +130,10 @@
     self.viewController = [[CDVViewController alloc] init];
     
     // generate the app settings
-    // iOS >=10 defaults to NO, < 10 defaults to YES.
-    BOOL mediaPlaybackRequiresUserActionDefault = 
IsAtLeastiOSVersion(@"10.0")? NO : YES;
-
     NSDictionary* settings = @{
                                   [@"MinimumFontSize" lowercaseString] : @1.1, 
// default is 0.0
                                   [@"AllowInlineMediaPlayback" 
lowercaseString] : @YES, // default is NO
-                                  [@"MediaPlaybackRequiresUserAction" 
lowercaseString] : @(!mediaPlaybackRequiresUserActionDefault), // default is NO 
on iOS >= 10, YES for < 10
+                                  [@"MediaTypesRequiringUserActionForPlayback" 
lowercaseString] : @YES, // default is NO
                                   [@"SuppressesIncrementalRendering" 
lowercaseString] : @YES, // default is NO
                                   [@"MediaPlaybackAllowsAirPlay" 
lowercaseString] : @NO, // default is YES
                                   [@"DisallowOverscroll" lowercaseString] : 
@YES, // so bounces is to be NO. defaults to NO
@@ -163,11 +153,7 @@
     
XCTAssertEqualWithAccuracy(wkWebView.configuration.preferences.minimumFontSize, 
1.1, 0.0001);
     
     // the WKWebViewConfiguration properties, we **cannot** change outside of 
initialization
-    if (IsAtLeastiOSVersion(@"10.0")) {
-        XCTAssertTrue(wkWebView.configuration.mediaPlaybackRequiresUserAction);
-    } else {
-        
XCTAssertFalse(wkWebView.configuration.mediaPlaybackRequiresUserAction);
-    }
+    
XCTAssertTrue(wkWebView.configuration.mediaTypesRequiringUserActionForPlayback);
     XCTAssertTrue(wkWebView.configuration.allowsInlineMediaPlayback);
     XCTAssertTrue(wkWebView.configuration.suppressesIncrementalRendering);
     // The test case below is in a separate test 
"testConfigurationWithMediaPlaybackAllowsAirPlay" (Apple bug)
diff --git a/tests/CordovaLibTests/CordovaLibApp/config.xml 
b/tests/CordovaLibTests/CordovaLibApp/config.xml
index 5b930fc..94b62c6 100644
--- a/tests/CordovaLibTests/CordovaLibApp/config.xml
+++ b/tests/CordovaLibTests/CordovaLibApp/config.xml
@@ -41,7 +41,7 @@
     <preference name="DisallowOverscroll" value="false" />
     <preference name="EnableViewportScale" value="false" />
     <preference name="KeyboardDisplayRequiresUserAction" value="true" />
-    <preference name="MediaPlaybackRequiresUserAction" value="false" />
+    <preference name="MediaTypesRequiringUserActionForPlayback" value="false" 
/>
     <preference name="SuppressesIncrementalRendering" value="false" />
     <preference name="SuppressesLongPressGesture" value="true" />
     <preference name="Suppresses3DTouchGesture" value="false" />
diff --git a/tests/spec/unit/fixtures/ios-config-xml/SampleApp/config.xml 
b/tests/spec/unit/fixtures/ios-config-xml/SampleApp/config.xml
index b235271..512f7fe 100755
--- a/tests/spec/unit/fixtures/ios-config-xml/SampleApp/config.xml
+++ b/tests/spec/unit/fixtures/ios-config-xml/SampleApp/config.xml
@@ -37,7 +37,7 @@
     <preference name="DisallowOverscroll" value="false" />
     <preference name="EnableViewportScale" value="false" />
     <preference name="KeyboardDisplayRequiresUserAction" value="true" />
-    <preference name="MediaPlaybackRequiresUserAction" value="false" />
+    <preference name="MediaTypesRequiringUserActionForPlayback" value="false" 
/>
     <preference name="SuppressesIncrementalRendering" value="false" />
     <preference name="SuppressesLongPressGesture" value="false" />
     <preference name="Suppresses3DTouchGesture" value="false" />


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to