diff --git a/common/framework/ua.php b/common/framework/ua.php index d57463ea5..02c919b0e 100644 --- a/common/framework/ua.php +++ b/common/framework/ua.php @@ -228,6 +228,12 @@ class UA return $result; } } + if ($result->os === 'Android' && preg_match('#^AndroidDownloadManager/([0-9])#', $ua, $matches)) + { + $result->browser = 'Android'; + $result->version = $matches[1]; + return $result; + } if (preg_match('#Edge/([0-9]+\\.)#', $ua, $matches)) { $result->browser = 'Edge'; @@ -335,8 +341,14 @@ class UA // Get the browser name and version. $browser = self::getBrowserInfo($ua); + // Get the Android version. + if ($browser->os === 'Android') + { + $android_version = preg_match('/Android ([0-9]+)/', $ua, $matches) ? intval($matches[1]) : 0; + } + // Find the best format that this browser supports. - if ($browser->browser === 'Chrome' && $browser->version >= 11 & !$browser->is_webview) + if ($browser->browser === 'Chrome' && $browser->version >= 11 && !$browser->is_webview) { $output_format = 'rfc5987'; } @@ -362,7 +374,14 @@ class UA } elseif ($browser->browser === 'Android' || $browser->browser === 'Whale' || $browser->is_webview) { - $output_format = 'raw'; + if ($android_version >= 10) + { + $output_format = 'rfc5987'; + } + else + { + $output_format = 'raw'; + } } elseif ($browser->browser === 'Chrome' || $browser->browser === 'Safari') { diff --git a/tests/unit/framework/UATest.php b/tests/unit/framework/UATest.php index da01be134..f67ff6364 100644 --- a/tests/unit/framework/UATest.php +++ b/tests/unit/framework/UATest.php @@ -310,6 +310,8 @@ class UATest extends \Codeception\TestCase\Test $this->assertEquals('filename*=UTF-8\'\'%ED%95%9C%EA%B8%80%20filename.jpg', Rhymix\Framework\UA::encodeFilenameForDownload('한글 filename.jpg', 'Edge/12.10240')); $this->assertEquals('filename*=UTF-8\'\'%ED%95%9C%EA%B8%80%20filename.jpg', Rhymix\Framework\UA::encodeFilenameForDownload('한글 filename.jpg', 'MSIE/7.0 Trident/7.0')); $this->assertEquals('filename*=UTF-8\'\'%ED%95%9C%EA%B8%80%20filename.jpg', Rhymix\Framework\UA::encodeFilenameForDownload('한글 filename.jpg', 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko')); + $this->assertEquals('filename*=UTF-8\'\'%ED%95%9C%EA%B8%80%20filename.jpg', Rhymix\Framework\UA::encodeFilenameForDownload('한글 filename.jpg', 'Mozilla/5.0 (Linux; Android 10; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.92 Mobile Safari/537.36')); + $this->assertEquals('filename*=UTF-8\'\'%ED%95%9C%EA%B8%80%20filename.jpg', Rhymix\Framework\UA::encodeFilenameForDownload('한글 filename.jpg', 'AndroidDownloadManager/10 (Linux; U; Android 10)')); $this->assertEquals('filename="%ED%95%9C%EA%B8%80%20filename.jpg"', Rhymix\Framework\UA::encodeFilenameForDownload('한글 filename.jpg', 'MSIE 8.0')); $this->assertEquals('filename="%ED%95%9C%EA%B8%80%20filename.jpg"', Rhymix\Framework\UA::encodeFilenameForDownload('한글 filename.jpg', 'Unknown Browser')); $this->assertEquals('filename="한글 filename.jpg"', Rhymix\Framework\UA::encodeFilenameForDownload('한글 filename.jpg', 'Chrome/69.0.3497.128 Whale/1.0.0.0 Crosswalk/23.69.590.31 Mobile Safari/537.36 NAVER(inapp; search; 660; 10.7.2)'));