Add Firefox Focus/Klar as browsers for opening links (#2213)

This commit is contained in:
David Beitey
2022-10-08 03:20:09 +10:00
committed by GitHub
parent 9996aaf6d5
commit 1ec949bb4e
6 changed files with 46 additions and 4 deletions

View File

@@ -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/>

View File

@@ -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";

View File

@@ -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
}

View File

@@ -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)
}
}

View File

@@ -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)

View File

@@ -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)