Skip to content
This repository has been archived by the owner. It is now read-only.

[IP-618] [Search] Onboarding for existing users #397

Merged
merged 7 commits into from Jul 22, 2019
Merged
Changes from 1 commit
Commits
File filter
Filter file types
Jump to
Jump to file
Failed to load files.

Always

Just for now

Next

added onboarding for search

  • Loading branch information
Pavel
Pavel committed Jul 19, 2019
commit f3886f252e0f186b235673b0b5561e51d62023dc
@@ -890,7 +890,7 @@ class BrowserViewController: UIViewController {
}
}

fileprivate func showSearchController() {
func showSearchController() {
/* Cliqz: Replace Search Controller
if searchController != nil {
return
@@ -923,7 +923,8 @@ class BrowserViewController: UIViewController {
searchLoader = SearchLoader(profile: profile, urlBar: urlBar)
searchLoader!.addListener(HistoryListener.shared)

if SettingsPrefs.shared.getCliqzSearchPref() {
// TODO:PK add telemetry
if SettingsPrefs.shared.getCliqzSearchPref() || UserPreferences.instance.showSearchOnboarding {
homePanelController?.view?.isHidden = true

cliqzSearchController = CliqzSearchViewController(profile: self.profile)
@@ -1000,7 +1001,7 @@ class BrowserViewController: UIViewController {
}
}

fileprivate func hideSearchController() {
func hideSearchController() {
/*Cliqz: Hide cliqzSearch or firefoxSearch
if let searchController = searchController {
searchController.willMove(toParentViewController: nil)
@@ -2348,7 +2349,13 @@ extension BrowserViewController: IntroViewControllerDelegate {
#endif
// End Cliqz
if force || profile.prefs.intForKey(PrefsKeys.IntroSeen) == nil {
/* Cliqz: determining the first launch. */
let isFirstLaunch = profile.prefs.intForKey(PrefsKeys.IntroSeen) == nil
if isFirstLaunch {
UserPreferences.instance.showSearchOnboarding = false
}

if force || isFirstLaunch {
#if PAID
let introViewController = LumenIntroViewController()
#else
@@ -23,4 +23,9 @@ extension BrowserViewController: SearchViewDelegate {
func dismissKeyboard() {
urlBar.hideKeyboard()
}

func closeSearchOnboarding() {
hideSearchController()
showSearchController()
}
}
@@ -52,6 +52,7 @@ extension Notification.Name {

let IsDeveloperModeOnKey = "IsDeveloperModeOnKey"
let ShowPromoCodeKey = "ShowPromoCodeKey"
let ShowSearchOnboarding = "showSearchOnboarding"
let ShowNonPrivateSearchWarningKey = "ShowNonPrivateSearchWarningKey"

/// If `true`, send a `developer` flag in the telemetry data.
@@ -86,6 +87,19 @@ extension Notification.Name {
}
}

var showSearchOnboarding: Bool {
get {
if let val = userDefaults().value(forKey: ShowSearchOnboarding) as? Bool {
return val
}

return true
}
set {
userDefaults().set(newValue, forKey: ShowSearchOnboarding)
}
}

var shouldShowNonPrivateSearchWarningMessage: Bool {
get {
if let val = userDefaults().value(forKey: ShowNonPrivateSearchWarningKey) as? Bool {
@@ -31,7 +31,7 @@ open class Engine {
let jsCodeLocation = Bundle.main.url(forResource: "jsengine.bundle", withExtension: "js")
#endif

rootView = RCTRootView( bundleURL: jsCodeLocation, moduleName: "ExtensionApp", initialProperties: ["showSearchOnboarding": true], launchOptions: nil )
rootView = RCTRootView( bundleURL: jsCodeLocation, moduleName: "ExtensionApp", initialProperties: ["showSearchOnboarding": UserPreferences.instance.showSearchOnboarding], launchOptions: nil )
bridge = rootView.bridge
//ConnectManager.sharedInstance.refresh()
}
@@ -19,9 +19,13 @@ class Onboarding: RCTEventEmitter {
func tryLumenSearch(accepted: Bool) {
debugPrint("tryLumenSearch -- \(accepted)")
if accepted {
// TODO: PK this is try now case. Change Lumen to default search engine. UI will be handled by extenstion
DispatchQueue.main.async {
NotificationCenter.default.post(name: MakeLumenDefaultSearchNotification, object: nil, userInfo: nil)
}
} else {
// TODO: PK close cliqz search and open queary with default search engine
DispatchQueue.main.async {
NotificationCenter.default.post(name: CloseSearchOnboardingNotification, object: nil, userInfo: nil)
}
}
}
}
@@ -28,6 +28,7 @@ protocol SearchViewDelegate: class {
func didSelectURL(_ url: URL, searchQuery: String?)
func autoCompeleteQuery(_ autoCompleteText: String)
func dismissKeyboard()
func closeSearchOnboarding()
}

let OpenURLIsSearchEngineKey = "OpenURLIsSearchEngineKey"
@@ -37,6 +38,8 @@ let HideKeyboardSearchNotification = NSNotification.Name(rawValue: "mobile-searc
let CallSearchNotification = NSNotification.Name(rawValue: "mobile-search:call")
let MapSearchNotification = NSNotification.Name(rawValue: "mobile-search:map")
let ShareLocationSearchNotification = NSNotification.Name(rawValue: "mobile-search:share-location")
let MakeLumenDefaultSearchNotification = NSNotification.Name(rawValue: "mobile-search:makeLumenDefaultSearchEngine")
let CloseSearchOnboardingNotification = NSNotification.Name(rawValue: "mobile-search:closeSearchOnboarding")

let SearchEngineChangedNotification = Notification.Name(rawValue: "SearchEngineChangedNotification")

@@ -120,6 +123,8 @@ class CliqzSearchViewController : UIViewController, KeyboardHelperDelegate, UIAl
NotificationCenter.default.addObserver(self, selector: #selector(openMap), name: MapSearchNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(shareLocation), name: ShareLocationSearchNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(autocomplete(_:)), name: AutoCompleteNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(closeSearchOnboarding(_:)), name: CloseSearchOnboardingNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(makeLumenDefaultSearch(_:)), name: MakeLumenDefaultSearchNotification, object: nil)

//TODO: Send notification when search engine is changed
NotificationCenter.default.addObserver(self, selector: #selector(searchEngineChanged), name: SearchEngineChangedNotification, object: nil)
@@ -286,6 +291,23 @@ extension CliqzSearchViewController {
LocationManager.sharedInstance.shareLocation()
}

@objc func closeSearchOnboarding(_ notification: Notification) {
LegacyTelemetryHelper.logOnboarding(action: "click", target: "cancel", topic: "search")
UserPreferences.instance.showSearchOnboarding = false
delegate?.closeSearchOnboarding()
}

@objc func makeLumenDefaultSearch(_ notification: Notification) {
LegacyTelemetryHelper.logOnboarding(action: "click", target: "try", topic: "search")
UserPreferences.instance.showSearchOnboarding = false
if !SettingsPrefs.shared.isLumenDefaultSearchEngine {
let lumenSearchEngine = self.profile.searchEngines.orderedEngines.filter { $0.shortName == LumenSearchEngineDisplayName }.first
if let engine = lumenSearchEngine {
self.profile.searchEngines.defaultEngine = engine
}
}
}

fileprivate func showLumenSearchLeavingWarning(url: URL) {
LegacyTelemetryHelper.logLumenSearchWarning(action: "show")
UserPreferences.instance.shouldShowNonPrivateSearchWarningMessage = false
@@ -10,9 +10,11 @@ import UIKit

class LegacyTelemetryHelper: NSObject {

class func logOnboarding(action: String, page: Int, target: String? = nil) {
var signal: [String : Any] = ["type": "onboarding", "action": action, "page": page, "version": 1]
class func logOnboarding(action: String, page: Int? = nil, target: String? = nil, topic: String? = nil) {
var signal: [String : Any] = ["type": "onboarding", "action": action, "version": 1]
if let target = target { signal["target"] = target }
if let page = page { signal["page"] = page }
if let topic = topic { signal["topic"] = topic }

sendSignal(signal)
}
ProTip! Use n and p to navigate between commits in a pull request.