Skip to content

Commit 217d9e8

Browse files
committedApr 29, 2015
Fixes 1139956 - Pressing links and controls doesn't highlight them
1 parent 981635c commit 217d9e8

File tree

10 files changed

+124
-217
lines changed

10 files changed

+124
-217
lines changed
 

‎Client-Bridging-Header.h

+3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33

44
#import <Foundation/Foundation.h>
55
#import <CommonCrypto/CommonCrypto.h>
6+
7+
#import "FSReadingList.h"
8+
69
#import "GCDWebServer.h"
710
#import "GCDWebServerDataResponse.h"
811
#import "ThirdParty/UIImageViewAligned/UIImageViewAligned/UIImageViewAligned.h"

‎Client.xcodeproj/project.pbxproj

+12-8
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,6 @@
270270
59A68D66379CFA85C4EAF00B /* TwoLineCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59A68B1F857A8638598A63A0 /* TwoLineCell.swift */; };
271271
59A68E0B4ABBF55E14819668 /* BookmarksPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59A6839879D615FC1C0D71CE /* BookmarksPanel.swift */; };
272272
59A68FD5260B8D520F890F4A /* ReaderPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59A685F4EAD19EDEC854BCA4 /* ReaderPanel.swift */; };
273-
9B64C2A81A6451A800473AE3 /* LongPress.js in Resources */ = {isa = PBXBuildFile; fileRef = 9B64C2A71A6451A800473AE3 /* LongPress.js */; };
274273
D301AAEE1A3A55B70078DD1D /* TabTrayController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D301AAED1A3A55B70078DD1D /* TabTrayController.swift */; };
275274
D308E4E41A5306F500842685 /* SearchEngines.swift in Sources */ = {isa = PBXBuildFile; fileRef = D308E4E31A5306F500842685 /* SearchEngines.swift */; };
276275
D308E4EC1A530A8B00842685 /* SearchEngines.swift in Sources */ = {isa = PBXBuildFile; fileRef = D308E4E31A5306F500842685 /* SearchEngines.swift */; };
@@ -383,6 +382,7 @@
383382
E42475E81AB73B9B00B23D33 /* SWUtilityButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = E42475D81AB73B9B00B23D33 /* SWUtilityButtonView.m */; };
384383
E42475E91AB73B9B00B23D33 /* SWUtilityButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = E42475D81AB73B9B00B23D33 /* SWUtilityButtonView.m */; };
385384
E42475EA1AB73B9B00B23D33 /* SWUtilityButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = E42475D81AB73B9B00B23D33 /* SWUtilityButtonView.m */; };
385+
E4252A0E1AF01AE40028C684 /* Swizzling.m in Sources */ = {isa = PBXBuildFile; fileRef = E4252A0D1AF01AE40028C684 /* Swizzling.m */; };
386386
E42CCDE81A23A73D00B794D3 /* Profile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D34DC84D1A16C40C00D49B7B /* Profile.swift */; };
387387
E42CCE011A24C4E300B794D3 /* ExtensionUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = E42CCE001A24C4E300B794D3 /* ExtensionUtils.swift */; };
388388
E42CCE021A24C4E300B794D3 /* ExtensionUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = E42CCE001A24C4E300B794D3 /* ExtensionUtils.swift */; };
@@ -417,6 +417,7 @@
417417
E4B7B77D1A793CF20022C5E0 /* FiraSans-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E4B7B7561A793CF20022C5E0 /* FiraSans-Regular.ttf */; };
418418
E4B7B77E1A793CF20022C5E0 /* FiraSans-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E4B7B7571A793CF20022C5E0 /* FiraSans-SemiBold.ttf */; };
419419
E4B7B7861A793CF20022C5E0 /* FiraSans-UltraLight.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E4B7B75F1A793CF20022C5E0 /* FiraSans-UltraLight.ttf */; };
420+
E4C358551AF144BA00299F7E /* FSReadingList.m in Sources */ = {isa = PBXBuildFile; fileRef = E4C358541AF144BA00299F7E /* FSReadingList.m */; };
420421
E4CD9E911A6897FB00318571 /* ReaderMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4CD9E901A6897FB00318571 /* ReaderMode.swift */; };
421422
E4CD9E9A1A68980A00318571 /* ReaderMode.js in Resources */ = {isa = PBXBuildFile; fileRef = E4CD9E991A68980A00318571 /* ReaderMode.js */; };
422423
E4CD9F1B1A6D9B8E00318571 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E4CD9F191A6D9B7B00318571 /* libz.dylib */; };
@@ -489,7 +490,6 @@
489490
E4F21AA61A13C4A300B0FAAA /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E4F21AA51A13C4A300B0FAAA /* Images.xcassets */; };
490491
E4F480F51A954660003C0444 /* SWXMLHash.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D38B2D811A8D98380040E6B5 /* SWXMLHash.framework */; };
491492
E4F481041A95466A003C0444 /* SWXMLHash.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D38B2D811A8D98380040E6B5 /* SWXMLHash.framework */; };
492-
F835F3EB1AD6EBA900F894C8 /* LongPressBrowserHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = F835F3EA1AD6EBA900F894C8 /* LongPressBrowserHelper.swift */; };
493493
F84B21DA1A090F8100AAB793 /* ClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84B21D91A090F8100AAB793 /* ClientTests.swift */; };
494494
F84B22041A0910F600AAB793 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84B21E51A0910F600AAB793 /* AppDelegate.swift */; };
495495
F84B220B1A0910F600AAB793 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F84B21EF1A0910F600AAB793 /* Images.xcassets */; };
@@ -1213,7 +1213,6 @@
12131213
59A685F4EAD19EDEC854BCA4 /* ReaderPanel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReaderPanel.swift; sourceTree = "<group>"; };
12141214
59A68B1F857A8638598A63A0 /* TwoLineCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TwoLineCell.swift; sourceTree = "<group>"; };
12151215
59A68CCB63E2A565CB03F832 /* SearchViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchViewController.swift; sourceTree = "<group>"; };
1216-
9B64C2A71A6451A800473AE3 /* LongPress.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = LongPress.js; path = JavaScripts/LongPress.js; sourceTree = "<group>"; };
12171216
D301AAED1A3A55B70078DD1D /* TabTrayController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TabTrayController.swift; sourceTree = "<group>"; };
12181217
D308E4E31A5306F500842685 /* SearchEngines.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchEngines.swift; sourceTree = "<group>"; };
12191218
D30B0F2F1AA7D66300C01CA3 /* ThumbnailCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThumbnailCell.swift; sourceTree = "<group>"; };
@@ -1297,6 +1296,7 @@
12971296
E42475D61AB73B9B00B23D33 /* SWUtilityButtonTapGestureRecognizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SWUtilityButtonTapGestureRecognizer.m; path = Carthage/Checkouts/SWTableViewCell/SWTableViewCell/PodFiles/SWUtilityButtonTapGestureRecognizer.m; sourceTree = "<group>"; };
12981297
E42475D71AB73B9B00B23D33 /* SWUtilityButtonView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SWUtilityButtonView.h; path = Carthage/Checkouts/SWTableViewCell/SWTableViewCell/PodFiles/SWUtilityButtonView.h; sourceTree = "<group>"; };
12991298
E42475D81AB73B9B00B23D33 /* SWUtilityButtonView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SWUtilityButtonView.m; path = Carthage/Checkouts/SWTableViewCell/SWTableViewCell/PodFiles/SWUtilityButtonView.m; sourceTree = "<group>"; };
1299+
E4252A0D1AF01AE40028C684 /* Swizzling.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Swizzling.m; sourceTree = "<group>"; };
13001300
E42CCE001A24C4E300B794D3 /* ExtensionUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExtensionUtils.swift; sourceTree = "<group>"; };
13011301
E4424B1F1AC6EBE100F44C38 /* ReaderSettings.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = ReaderSettings.xcassets; sourceTree = "<group>"; };
13021302
E4424B3B1AC71FB400F44C38 /* FiraSans-Book.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "FiraSans-Book.ttf"; sourceTree = "<group>"; };
@@ -1327,6 +1327,9 @@
13271327
E4B7B7561A793CF20022C5E0 /* FiraSans-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "FiraSans-Regular.ttf"; sourceTree = "<group>"; };
13281328
E4B7B7571A793CF20022C5E0 /* FiraSans-SemiBold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "FiraSans-SemiBold.ttf"; sourceTree = "<group>"; };
13291329
E4B7B75F1A793CF20022C5E0 /* FiraSans-UltraLight.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "FiraSans-UltraLight.ttf"; sourceTree = "<group>"; };
1330+
E4C358531AF1440B00299F7E /* Swizzling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Swizzling.h; sourceTree = "<group>"; };
1331+
E4C358541AF144BA00299F7E /* FSReadingList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSReadingList.m; sourceTree = "<group>"; };
1332+
E4C358561AF1467A00299F7E /* FSReadingList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FSReadingList.h; sourceTree = "<group>"; };
13301333
E4CD9E901A6897FB00318571 /* ReaderMode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReaderMode.swift; sourceTree = "<group>"; };
13311334
E4CD9E991A68980A00318571 /* ReaderMode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ReaderMode.js; sourceTree = "<group>"; };
13321335
E4CD9F191A6D9B7B00318571 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
@@ -1376,7 +1379,6 @@
13761379
E4ECCD8C1AB091470005E717 /* Reader.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Reader.xcassets; sourceTree = "<group>"; };
13771380
E4ECCDAD1AB131770005E717 /* FiraSans-Medium.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "FiraSans-Medium.ttf"; sourceTree = "<group>"; };
13781381
E4F21AA51A13C4A300B0FAAA /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
1379-
F835F3EA1AD6EBA900F894C8 /* LongPressBrowserHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LongPressBrowserHelper.swift; sourceTree = "<group>"; };
13801382
F84B21BE1A090F8100AAB793 /* Client.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Client.app; sourceTree = BUILT_PRODUCTS_DIR; };
13811383
F84B21D31A090F8100AAB793 /* FennecAurora.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FennecAurora.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
13821384
F84B21D81A090F8100AAB793 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@@ -1927,7 +1929,6 @@
19271929
isa = PBXGroup;
19281930
children = (
19291931
0BB5B3081AC0AD150052877D /* PasswordHelper.js */,
1930-
9B64C2A71A6451A800473AE3 /* LongPress.js */,
19311932
);
19321933
name = JavaScripts;
19331934
sourceTree = "<group>";
@@ -2086,7 +2087,6 @@
20862087
E4CD9F2C1A6DC91200318571 /* BrowserLocationView.swift */,
20872088
D314E7F51A37B98700426A76 /* BrowserToolbar.swift */,
20882089
D3A994951A3686BD008AD1AC /* BrowserViewController.swift */,
2089-
F835F3EA1AD6EBA900F894C8 /* LongPressBrowserHelper.swift */,
20902090
D3FA77831A43B2CE0010CD32 /* OpenSearch.swift */,
20912091
0BB5B30A1AC0AD1F0052877D /* PasswordHelper.swift */,
20922092
D308E4E31A5306F500842685 /* SearchEngines.swift */,
@@ -2138,6 +2138,8 @@
21382138
2F3444561AB22A4B00FD9731 /* TimeConstants.swift */,
21392139
D3ACB4381AD33EBA00748D50 /* WeakList.swift */,
21402140
287DA9D51AE06D220055AC35 /* Extensions */,
2141+
E4252A0D1AF01AE40028C684 /* Swizzling.m */,
2142+
E4C358531AF1440B00299F7E /* Swizzling.h */,
21412143
);
21422144
path = Utils;
21432145
sourceTree = "<group>";
@@ -2374,6 +2376,8 @@
23742376
E4A961331AC051360069AD6F /* ReadabilityBrowserHelper.swift */,
23752377
E4A961351AC052DE0069AD6F /* ReadabilityBrowserHelper.js */,
23762378
E4A961371AC06FA50069AD6F /* ReaderViewLoading.html */,
2379+
E4C358541AF144BA00299F7E /* FSReadingList.m */,
2380+
E4C358561AF1467A00299F7E /* FSReadingList.h */,
23772381
);
23782382
path = Reader;
23792383
sourceTree = "<group>";
@@ -3268,7 +3272,6 @@
32683272
E4B7B77D1A793CF20022C5E0 /* FiraSans-Regular.ttf in Resources */,
32693273
0BB5B3091AC0AD150052877D /* PasswordHelper.js in Resources */,
32703274
E4B7B7791A793CF20022C5E0 /* FiraSans-Light.ttf in Resources */,
3271-
9B64C2A81A6451A800473AE3 /* LongPress.js in Resources */,
32723275
D38A1BF01A9FA2CA00F6A386 /* SiteTableViewControllerHeader.xib in Resources */,
32733276
E4CD9E9A1A68980A00318571 /* ReaderMode.js in Resources */,
32743277
E4424B201AC6EBE100F44C38 /* ReaderSettings.xcassets in Resources */,
@@ -3678,7 +3681,7 @@
36783681
D31A0FC71A65D6D000DC8C7E /* SearchSuggestClient.swift in Sources */,
36793682
D38B2D311A8D96D00040E6B5 /* GCDWebServerConnection.m in Sources */,
36803683
D38B2D401A8D96D00040E6B5 /* GCDWebServerFileRequest.m in Sources */,
3681-
F835F3EB1AD6EBA900F894C8 /* LongPressBrowserHelper.swift in Sources */,
3684+
E4252A0E1AF01AE40028C684 /* Swizzling.m in Sources */,
36823685
D38B2D4F1A8D96D00040E6B5 /* GCDWebServerFileResponse.m in Sources */,
36833686
E43A4E551A96B88100E25676 /* GCDWebServerDataRequest.m in Sources */,
36843687
D38A1BEE1A9FA2CA00F6A386 /* SiteTableViewController.swift in Sources */,
@@ -3706,6 +3709,7 @@
37063709
59A68B280D62462B85CF57A4 /* HistoryPanel.swift in Sources */,
37073710
59A68E0B4ABBF55E14819668 /* BookmarksPanel.swift in Sources */,
37083711
D38B2D491A8D96D00040E6B5 /* GCDWebServerDataResponse.m in Sources */,
3712+
E4C358551AF144BA00299F7E /* FSReadingList.m in Sources */,
37093713
D38B2D521A8D96D00040E6B5 /* GCDWebServerStreamedResponse.m in Sources */,
37103714
59A68FD5260B8D520F890F4A /* ReaderPanel.swift in Sources */,
37113715
E42CCE011A24C4E300B794D3 /* ExtensionUtils.swift in Sources */,

‎Client/Application/AppDelegate.swift

+7
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
5151
self.window!.rootViewController = controller
5252
self.window!.backgroundColor = UIColor(red: 0.21, green: 0.23, blue: 0.25, alpha: 1)
5353

54+
NSNotificationCenter.defaultCenter().addObserverForName(FSReadingListAddReadingListItemNotification, object: nil, queue: nil) { (notification) -> Void in
55+
if let userInfo = notification.userInfo, url = userInfo["URL"] as? NSURL, absoluteString = url.absoluteString {
56+
let title = (userInfo["Title"] as? String) ?? ""
57+
self.profile.readingList?.createRecordWithURL(absoluteString, title: title, addedBy: UIDevice.currentDevice().name)
58+
}
59+
}
60+
5461

5562
#if MOZ_CHANNEL_AURORA
5663
checkForAuroraUpdate()

‎Client/Frontend/Browser/BrowserViewController.swift

-62
Original file line numberDiff line numberDiff line change
@@ -860,10 +860,6 @@ extension BrowserViewController: TabManagerDelegate {
860860

861861
let passwords = PasswordHelper(browser: tab, profile: profile)
862862
tab.addHelper(passwords, name: PasswordHelper.name())
863-
864-
let longPressBrowserHelper = LongPressBrowserHelper(browser: tab)
865-
longPressBrowserHelper.delegate = self
866-
tab.addHelper(longPressBrowserHelper, name: LongPressBrowserHelper.name())
867863
}
868864

869865
func tabManager(tabManager: TabManager, didAddTab tab: Browser, atIndex: Int) {
@@ -1148,64 +1144,6 @@ extension BrowserViewController: ReaderModeStyleViewControllerDelegate {
11481144
}
11491145
}
11501146

1151-
extension BrowserViewController: LongPressDelegate {
1152-
func longPressBrowserHelper(longPressBrowserHelper: LongPressBrowserHelper, didLongPressElements elements: [LongPressElementType : NSURL]) {
1153-
var actionSheetController = UIAlertController(title: nil, message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet)
1154-
var dialogTitleURL: NSURL?
1155-
if let linkURL = elements[LongPressElementType.Link] {
1156-
dialogTitleURL = linkURL
1157-
let newTabTitle = NSLocalizedString("Open In New Tab", comment: "Context menu option")
1158-
var openNewTabAction = UIAlertAction(title: newTabTitle, style: UIAlertActionStyle.Default) { (action: UIAlertAction!) in
1159-
let request = NSURLRequest(URL: linkURL)
1160-
let tab = self.tabManager.addTab(request: request)
1161-
}
1162-
actionSheetController.addAction(openNewTabAction)
1163-
1164-
let copyTitle = NSLocalizedString("Copy", comment: "Context menu option")
1165-
var copyAction = UIAlertAction(title: copyTitle, style: UIAlertActionStyle.Default) { (action: UIAlertAction!) -> Void in
1166-
var pasteBoard = UIPasteboard.generalPasteboard()
1167-
pasteBoard.string = linkURL.absoluteString
1168-
}
1169-
actionSheetController.addAction(copyAction)
1170-
}
1171-
if let imageURL = elements[LongPressElementType.Image] {
1172-
if dialogTitleURL == nil {
1173-
dialogTitleURL = imageURL
1174-
}
1175-
1176-
let saveImageTitle = NSLocalizedString("Save Image", comment: "Context menu option")
1177-
var saveImageAction = UIAlertAction(title: saveImageTitle, style: UIAlertActionStyle.Default) { (action: UIAlertAction!) -> Void in
1178-
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -> Void in
1179-
var imageData = NSData(contentsOfURL: imageURL)
1180-
if imageData != nil {
1181-
UIImageWriteToSavedPhotosAlbum(UIImage(data: imageData!), nil, nil, nil)
1182-
}
1183-
})
1184-
}
1185-
actionSheetController.addAction(saveImageAction)
1186-
1187-
let copyImageTitle = NSLocalizedString("Copy Image URL", comment: "Context menu option")
1188-
var copyAction = UIAlertAction(title: copyImageTitle, style: UIAlertActionStyle.Default) { (action: UIAlertAction!) -> Void in
1189-
var pasteBoard = UIPasteboard.generalPasteboard()
1190-
pasteBoard.string = imageURL.absoluteString
1191-
}
1192-
actionSheetController.addAction(copyAction)
1193-
}
1194-
1195-
actionSheetController.title = dialogTitleURL!.absoluteString
1196-
var cancelAction = UIAlertAction(title: CancelString, style: UIAlertActionStyle.Cancel, handler: nil)
1197-
actionSheetController.addAction(cancelAction)
1198-
1199-
if let popoverPresentationController = actionSheetController.popoverPresentationController {
1200-
popoverPresentationController.sourceView = self.view
1201-
popoverPresentationController.sourceRect = CGRectInset(CGRect(origin: longPressBrowserHelper.longPressGestureRecognizer.locationInView(self.view), size: CGSizeZero), -8, -8)
1202-
popoverPresentationController.permittedArrowDirections = .Any
1203-
}
1204-
1205-
self.presentViewController(actionSheetController, animated: true, completion: nil)
1206-
}
1207-
}
1208-
12091147
extension BrowserViewController : UIViewControllerTransitioningDelegate {
12101148
func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
12111149
return TransitionManager(show: false)

‎Client/Frontend/Browser/LongPressBrowserHelper.swift

-107
This file was deleted.
+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/* This Source Code Form is subject to the terms of the Mozilla Public
2+
* License, v. 2.0. If a copy of the MPL was not distributed with this
3+
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4+
5+
#pragma once
6+
7+
extern NSString* const FSReadingListAddReadingListItemNotification;
+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/* This Source Code Form is subject to the terms of the Mozilla Public
2+
* License, v. 2.0. If a copy of the MPL was not distributed with this
3+
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4+
5+
#import <Foundation/Foundation.h>
6+
#import <SafariServices/SafariServices.h>
7+
8+
#import "Swizzling.h"
9+
10+
NSString* const FSReadingListAddReadingListItemNotification = @"FSReadingListAddReadingListItemNotification";
11+
12+
@interface FSReadingList: NSObject
13+
+ (id) sharedInstance;
14+
+ (BOOL)supportsURL:(NSURL *)URL;
15+
- (BOOL)addReadingListItemWithURL:(NSURL *)URL title:(NSString *)title previewText:(NSString *)previewText error:(NSError **)error;
16+
@end
17+
18+
@implementation FSReadingList
19+
+ (id) sharedInstance {
20+
static FSReadingList *sharedFSReadingList = nil;
21+
@synchronized (self) {
22+
if (sharedFSReadingList == nil) {
23+
sharedFSReadingList = [FSReadingList new];
24+
}
25+
}
26+
return sharedFSReadingList;
27+
}
28+
29+
+ (BOOL)supportsURL:(NSURL *)URL {
30+
return [[URL scheme] isEqualToString: @"http"] || [[URL scheme] isEqualToString: @"https"];
31+
}
32+
33+
- (BOOL)addReadingListItemWithURL:(NSURL *)URL title:(NSString *)title previewText:(NSString *)previewText error:(NSError **)error {
34+
if (error != NULL) {
35+
*error = nil;
36+
}
37+
// To keep this as simple as possible and have as little as possible coupling between this Objective-C
38+
// singleton and our Swift world, we simply send out a notification that our AppDelegate (which has access
39+
// to the browser profile and reading list service) can respond to.
40+
NSLog(@"Adding %@ to the Firefox Reading List", URL);
41+
[[NSNotificationCenter defaultCenter] postNotificationName: FSReadingListAddReadingListItemNotification
42+
object:self userInfo: @{@"URL": URL, @"Title": title}];
43+
return YES;
44+
}
45+
@end
46+
47+
// This class extension on SSReadingList implements an initialize method that will be called when the class
48+
// is instantiated. It swizzles defaultReadingList to our own implementation which returns a shared instance
49+
// of the FSReadingList. ("FirefoxServices" Reading List)
50+
51+
@implementation SSReadingList (Firefox)
52+
+ (void) initialize {
53+
if ([SSReadingList class] == self) {
54+
SwizzleClassMethods([SSReadingList class], @selector(defaultReadingList), @selector(defaultFSReadingList));
55+
}
56+
}
57+
58+
+ (id) defaultFSReadingList {
59+
return [FSReadingList sharedInstance];
60+
}
61+
@end

‎Client/JavaScripts/LongPress.js

-40
This file was deleted.

‎Utils/Swizzling.h

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/* This Source Code Form is subject to the terms of the Mozilla Public
2+
* License, v. 2.0. If a copy of the MPL was not distributed with this
3+
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4+
5+
#pragma once
6+
7+
BOOL SwizzleInstanceMethods(Class class, SEL dstSel, SEL srcSel);
8+
BOOL SwizzleClassMethods(Class class, SEL dstSel, SEL srcSel);

‎Utils/Swizzling.m

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/* This Source Code Form is subject to the terms of the Mozilla Public
2+
* License, v. 2.0. If a copy of the MPL was not distributed with this
3+
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4+
5+
#import <Foundation/Foundation.h>
6+
#import <SafariServices/SafariServices.h>
7+
#include <objc/runtime.h>
8+
9+
BOOL SwizzleInstanceMethods(Class class, SEL dstSel, SEL srcSel)
10+
{
11+
Method dstMethod = class_getInstanceMethod(class, dstSel);
12+
Method srcMethod = class_getInstanceMethod(class, srcSel);
13+
IMP srcIMP = method_getImplementation(srcMethod);
14+
if (class_addMethod(class, dstSel, srcIMP, method_getTypeEncoding(srcMethod))) {
15+
class_replaceMethod(class, dstSel, method_getImplementation(dstMethod), method_getTypeEncoding(dstMethod));
16+
} else {
17+
method_exchangeImplementations(dstMethod, srcMethod);
18+
}
19+
return (method_getImplementation(srcMethod) == method_getImplementation(class_getInstanceMethod(class, dstSel)));
20+
}
21+
22+
BOOL SwizzleClassMethods(Class class, SEL dstSel, SEL srcSel)
23+
{
24+
Class metaClass = object_getClass(class);
25+
return SwizzleInstanceMethods(metaClass, dstSel, srcSel);
26+
}

0 commit comments

Comments
 (0)
Please sign in to comment.