mirror of
https://github.com/home-assistant/iOS.git
synced 2026-04-17 08:05:44 -05:00
Add Firefox Focus/Klar as browsers for opening links (#2213)
This commit is contained in:
@@ -581,6 +581,8 @@
|
||||
<string>twitter</string>
|
||||
<string>shortcuts</string>
|
||||
<string>firefox</string>
|
||||
<string>firefox-focus</string>
|
||||
<string>firefox-klar</string>
|
||||
</array>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
|
||||
@@ -395,6 +395,8 @@ Home Assistant is free and open source home automation software with a focus on
|
||||
"settings_details.general.open_in_browser.chrome" = "Google Chrome";
|
||||
"settings_details.general.open_in_browser.default" = "System Default";
|
||||
"settings_details.general.open_in_browser.firefox" = "Mozilla Firefox";
|
||||
"settings_details.general.open_in_browser.firefoxFocus" = "Mozilla Firefox Focus";
|
||||
"settings_details.general.open_in_browser.firefoxKlar" = "Mozilla Firefox Klar";
|
||||
"settings_details.general.open_in_browser.safari" = "Apple Safari";
|
||||
"settings_details.general.open_in_browser.safari_in_app" = "Apple Safari (in app)";
|
||||
"settings_details.general.open_in_browser.title" = "Open Links In";
|
||||
|
||||
@@ -911,6 +911,8 @@ enum AppIcon: String, CaseIterable {
|
||||
enum OpenInBrowser: String, CaseIterable {
|
||||
case Chrome
|
||||
case Firefox
|
||||
case FirefoxFocus
|
||||
case FirefoxKlar
|
||||
case Safari
|
||||
case SafariInApp
|
||||
|
||||
@@ -920,6 +922,10 @@ enum OpenInBrowser: String, CaseIterable {
|
||||
return L10n.SettingsDetails.General.OpenInBrowser.chrome
|
||||
case .Firefox:
|
||||
return L10n.SettingsDetails.General.OpenInBrowser.firefox
|
||||
case .FirefoxFocus:
|
||||
return L10n.SettingsDetails.General.OpenInBrowser.firefoxFocus
|
||||
case .FirefoxKlar:
|
||||
return L10n.SettingsDetails.General.OpenInBrowser.firefoxKlar
|
||||
case .Safari:
|
||||
if #available(iOS 14, *) {
|
||||
return L10n.SettingsDetails.General.OpenInBrowser.default
|
||||
@@ -937,6 +943,10 @@ enum OpenInBrowser: String, CaseIterable {
|
||||
return OpenInChromeController.sharedInstance.isChromeInstalled()
|
||||
case .Firefox:
|
||||
return OpenInFirefoxControllerSwift().isFirefoxInstalled()
|
||||
case .FirefoxFocus:
|
||||
return OpenInFirefoxControllerSwift(type: .focus).isFirefoxInstalled()
|
||||
case .FirefoxKlar:
|
||||
return OpenInFirefoxControllerSwift(type: .klar).isFirefoxInstalled()
|
||||
default:
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -8,13 +8,33 @@ import Foundation
|
||||
import UIKit
|
||||
|
||||
open class OpenInFirefoxControllerSwift {
|
||||
let firefoxScheme = "firefox:"
|
||||
let basicURL = URL(string: "firefox://")!
|
||||
enum FirefoxType {
|
||||
case regular
|
||||
case focus
|
||||
case klar
|
||||
|
||||
var urlScheme: String {
|
||||
switch self {
|
||||
case .regular:
|
||||
return "firefox"
|
||||
case .focus:
|
||||
return "firefox-focus"
|
||||
case .klar:
|
||||
return "firefox-klar"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let type: FirefoxType
|
||||
|
||||
// This would need to be changed if used from an extension… but you
|
||||
// can't open arbitrary URLs from an extension anyway.
|
||||
let app = UIApplication.shared
|
||||
|
||||
init(type: FirefoxType = .regular) {
|
||||
self.type = type
|
||||
}
|
||||
|
||||
private func encodeByAddingPercentEscapes(_ input: String) -> String {
|
||||
NSString(string: input).addingPercentEncoding(
|
||||
withAllowedCharacters: .urlQueryAllowed
|
||||
@@ -22,14 +42,14 @@ open class OpenInFirefoxControllerSwift {
|
||||
}
|
||||
|
||||
open func isFirefoxInstalled() -> Bool {
|
||||
app.canOpenURL(basicURL)
|
||||
app.canOpenURL(URL(string: "\(type.urlScheme)://")!)
|
||||
}
|
||||
|
||||
open func openInFirefox(_ url: URL) {
|
||||
let scheme = url.scheme
|
||||
if scheme == "http" || scheme == "https" {
|
||||
let escaped = encodeByAddingPercentEscapes(url.absoluteString)
|
||||
if let firefoxURL = URL(string: "firefox://open-url?url=\(escaped)") {
|
||||
if let firefoxURL = URL(string: "\(self.type.urlScheme)://open-url?url=\(escaped)") {
|
||||
app.open(firefoxURL, options: [:], completionHandler: nil)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,10 @@ func openURLInBrowser(_ urlToOpen: URL, _ sender: UIViewController?) {
|
||||
OpenInChromeController.sharedInstance.openInChrome(urlToOpen, callbackURL: nil)
|
||||
case .Firefox where OpenInFirefoxControllerSwift().isFirefoxInstalled():
|
||||
OpenInFirefoxControllerSwift().openInFirefox(urlToOpen)
|
||||
case .FirefoxFocus where OpenInFirefoxControllerSwift(type: .focus).isFirefoxInstalled():
|
||||
OpenInFirefoxControllerSwift(type: .focus).openInFirefox(urlToOpen)
|
||||
case .FirefoxKlar where OpenInFirefoxControllerSwift(type: .klar).isFirefoxInstalled():
|
||||
OpenInFirefoxControllerSwift(type: .klar).openInFirefox(urlToOpen)
|
||||
case .SafariInApp where sender != nil:
|
||||
let sfv = SFSafariViewController(url: urlToOpen)
|
||||
sender!.present(sfv, animated: true)
|
||||
|
||||
@@ -1313,6 +1313,10 @@ public enum L10n {
|
||||
public static var `default`: String { return L10n.tr("Localizable", "settings_details.general.open_in_browser.default") }
|
||||
/// Mozilla Firefox
|
||||
public static var firefox: String { return L10n.tr("Localizable", "settings_details.general.open_in_browser.firefox") }
|
||||
/// Mozilla Firefox Focus
|
||||
public static var firefoxFocus: String { return L10n.tr("Localizable", "settings_details.general.open_in_browser.firefoxFocus") }
|
||||
/// Mozilla Firefox Klar
|
||||
public static var firefoxKlar: String { return L10n.tr("Localizable", "settings_details.general.open_in_browser.firefoxKlar") }
|
||||
/// Apple Safari
|
||||
public static var safari: String { return L10n.tr("Localizable", "settings_details.general.open_in_browser.safari") }
|
||||
/// Apple Safari (in app)
|
||||
|
||||
Reference in New Issue
Block a user