Skip to content

Commit

Permalink
chore: deprecate mediaPlaybackRequiresUserAction
Browse files Browse the repository at this point in the history
Apple has deprecated "mediaPlaybackRequiresUserAction" in iOS 4.0-12.0.
This flag should be replaced with "mediaTypesRequiringUserActionForPlayback".
Preference name has also been changed to "MediaTypesRequiringUserActionForPlayback"
  • Loading branch information
erisu committed Feb 13, 2020
1 parent 14a5728 commit b8d2c57
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,15 @@ - (WKWebViewConfiguration*) createConfigurationFromSettings:(NSDictionary*)setti
}

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;
Expand Down
2 changes: 1 addition & 1 deletion bin/templates/project/__PROJECT_NAME__/config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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" />
Expand Down
2 changes: 1 addition & 1 deletion bin/templates/scripts/cordova/defaults.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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" />
Expand Down
25 changes: 25 additions & 0 deletions bin/templates/scripts/cordova/lib/prepare.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ module.exports.prepare = function (cordovaProject, options) {
updateLaunchStoryboardImages(cordovaProject, this.locations);
updateFileResources(cordovaProject, this.locations);
})
.then(() => {
alertDeprecatedPreference(this._config);
})
.then(() => {
events.emit('verbose', 'Prepared iOS project successfully');
});
Expand Down Expand Up @@ -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);
Expand Down
22 changes: 4 additions & 18 deletions tests/CordovaLibTests/CDVWebViewEngineTest.m
Original file line number Diff line number Diff line change
Expand Up @@ -87,13 +87,10 @@ - (void) testUpdateInfo {
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
Expand All @@ -108,11 +105,7 @@ - (void) testUpdateInfo {
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);
Expand All @@ -137,13 +130,10 @@ - (void) testConfigurationFromSettings {
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
Expand All @@ -163,11 +153,7 @@ - (void) testConfigurationFromSettings {
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)
Expand Down
2 changes: 1 addition & 1 deletion tests/CordovaLibTests/CordovaLibApp/config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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" />
Expand Down

0 comments on commit b8d2c57

Please sign in to comment.