Commit ccc39d25 by Dmitriy Stepanets

- Uncommented widgets

- Changed number of widgets in WidgetPromoController
- Removed invalid analytics key
- Added some analytics for widgets
- Fixed app group UserDefaults getter
parent 015f2e30
...@@ -80,7 +80,7 @@ ...@@ -80,7 +80,7 @@
<EnvironmentVariables> <EnvironmentVariables>
<EnvironmentVariable <EnvironmentVariable
key = "_XCWidgetKind" key = "_XCWidgetKind"
value = "com.onelouder.oneweather.widget.radar" value = "com.onelouder.oneweather.widget.temperature"
isEnabled = "YES"> isEnabled = "YES">
</EnvironmentVariable> </EnvironmentVariable>
<EnvironmentVariable <EnvironmentVariable
...@@ -90,7 +90,7 @@ ...@@ -90,7 +90,7 @@
</EnvironmentVariable> </EnvironmentVariable>
<EnvironmentVariable <EnvironmentVariable
key = "_XCWidgetFamily" key = "_XCWidgetFamily"
value = "large" value = "medium"
isEnabled = "YES"> isEnabled = "YES">
</EnvironmentVariable> </EnvironmentVariable>
</EnvironmentVariables> </EnvironmentVariables>
......
...@@ -79,7 +79,7 @@ private extension PromotionSmallWidgetView { ...@@ -79,7 +79,7 @@ private extension PromotionSmallWidgetView {
func prepareTopLabel() { func prepareTopLabel() {
let select = "widget.promotion.selectList".localized() let select = "widget.promotion.selectList".localized()
let widgets = "16 \("widget.promotion.widgets".localized())" let widgets = "7 \("widget.promotion.widgets".localized())"
let attrString = NSMutableAttributedString(string: select + "\n" + widgets) let attrString = NSMutableAttributedString(string: select + "\n" + widgets)
attrString.addAttribute(.font, attrString.addAttribute(.font,
......
...@@ -199,9 +199,9 @@ private extension WidgetPromotionController { ...@@ -199,9 +199,9 @@ private extension WidgetPromotionController {
stackView.addArrangedSubview(PromotionWidgetViewWrapper(widgetType: .temperatureMedium)) stackView.addArrangedSubview(PromotionWidgetViewWrapper(widgetType: .temperatureMedium))
stackView.addArrangedSubview(PromotionWidgetViewWrapper(widgetType: .temperatureLarge)) stackView.addArrangedSubview(PromotionWidgetViewWrapper(widgetType: .temperatureLarge))
stackView.addArrangedSubview(PromotionWidgetViewWrapper(widgetType: .precipitationMedium)) stackView.addArrangedSubview(PromotionWidgetViewWrapper(widgetType: .precipitationMedium))
// stackView.addArrangedSubview(PromotionWidgetViewWrapper(widgetType: .windMedium)) stackView.addArrangedSubview(PromotionWidgetViewWrapper(widgetType: .windMedium))
// stackView.addArrangedSubview(PromotionWidgetViewWrapper(widgetType: .windLarge)) stackView.addArrangedSubview(PromotionWidgetViewWrapper(widgetType: .windLarge))
// stackView.addArrangedSubview(PromotionWidgetViewWrapper(widgetType: .radarLarge)) stackView.addArrangedSubview(PromotionWidgetViewWrapper(widgetType: .radarLarge))
scrollView.addSubview(stackView) scrollView.addSubview(stackView)
stackView.snp.makeConstraints { make in stackView.snp.makeConstraints { make in
......
...@@ -94,7 +94,6 @@ public enum AnalyticsEvent: String { ...@@ -94,7 +94,6 @@ public enum AnalyticsEvent: String {
case ANALYTICS_WIDGET_PROMO_EXPAND = "WIDGET_PROMO_EXPAND" case ANALYTICS_WIDGET_PROMO_EXPAND = "WIDGET_PROMO_EXPAND"
case ANALYTICS_WIDGET_BOTTOM_SCROLLED = "WIDGET_PROMO_BOTTOM_SCROLLED" case ANALYTICS_WIDGET_BOTTOM_SCROLLED = "WIDGET_PROMO_BOTTOM_SCROLLED"
case ANALYTICS_WIDGET_PROMO_LEARN_CTA = "WIDGET_PROMO_LEARN_CTA" case ANALYTICS_WIDGET_PROMO_LEARN_CTA = "WIDGET_PROMO_LEARN_CTA"
case ANALYTICS_WIDGET_LAUNCH_FROM = "LAUNCH_FROM_WIDGET"
///Widget actions ///Widget actions
case ANALYTICS_WIDGET_PLACED = "WIDGET_PLACED" case ANALYTICS_WIDGET_PLACED = "WIDGET_PLACED"
......
...@@ -22,6 +22,7 @@ public enum AnalyticsParameter: String { ...@@ -22,6 +22,7 @@ public enum AnalyticsParameter: String {
case ANALYTICS_KEY_THEME_CHANGE_NAME = "themeName" case ANALYTICS_KEY_THEME_CHANGE_NAME = "themeName"
case ANALYTICS_KEY_FIST_OPEN_SOURCE = "Source" case ANALYTICS_KEY_FIST_OPEN_SOURCE = "Source"
case ANALYTICS_KEY_WIDGET_NAME = "widget_name" case ANALYTICS_KEY_WIDGET_NAME = "widget_name"
case ANALYTICS_KEY_WIDGET_SMART_TEXT = "smart_text"
case ANALYTICS_KEY_SHORTS_CARD_POSITION = "position" case ANALYTICS_KEY_SHORTS_CARD_POSITION = "position"
case ANALYTICS_KEY_SHORTS_CARD_ID = "card_id" case ANALYTICS_KEY_SHORTS_CARD_ID = "card_id"
case ANALYTICS_KEY_SHORTS_TIME_SPENT = "time_spent" case ANALYTICS_KEY_SHORTS_TIME_SPENT = "time_spent"
......
...@@ -22,7 +22,7 @@ public struct UserDefaultsValue<T> { ...@@ -22,7 +22,7 @@ public struct UserDefaultsValue<T> {
public var wrappedValue: T { public var wrappedValue: T {
get { get {
return (UserDefaults.standard.object(forKey: key) as? T) ?? defaultValue return (userDefaults.object(forKey: key) as? T) ?? defaultValue
} }
set { set {
userDefaults.set(newValue, forKey: key) userDefaults.set(newValue, forKey: key)
......
...@@ -108,6 +108,7 @@ public class WidgetManager { ...@@ -108,6 +108,7 @@ public class WidgetManager {
self.widgetOptions = WidgetOptions(rawValue: storedWidgetsOptions) self.widgetOptions = WidgetOptions(rawValue: storedWidgetsOptions)
} }
private let log = Logger(componentName: "WidgetManager") private let log = Logger(componentName: "WidgetManager")
private let smartTextProvider = SmartTextProvider()
private var widgetOptions: WidgetOptions = [] private var widgetOptions: WidgetOptions = []
public func refreshAnalytics() { public func refreshAnalytics() {
...@@ -128,20 +129,26 @@ public class WidgetManager { ...@@ -128,20 +129,26 @@ public class WidgetManager {
let name = WidgetOptions.name(for: option) let name = WidgetOptions.name(for: option)
AppAnalytics.shared.log(event: .ANALYTICS_WIDGET_CARD_CLICK) AppAnalytics.shared.log(event: .ANALYTICS_WIDGET_CARD_CLICK)
AppAnalytics.shared.log(event: .ANALYTICS_LAUNCH_FROM_WIDGET) AppAnalytics.shared.log(event: .ANALYTICS_LAUNCH_FROM_WIDGET,
AppAnalytics.shared.log(event: .ANALYTICS_WIDGET_LAUNCH_FROM,
params: [.ANALYTICS_KEY_WIDGET_NAME : name]) params: [.ANALYTICS_KEY_WIDGET_NAME : name])
} }
public func logUpdate() { public func logUpdate(forLocation location: Location?) {
WidgetCenter.shared.getCurrentConfigurations {[weak self] result in WidgetCenter.shared.getCurrentConfigurations {[weak self] result in
switch result { switch result {
case .success(let widgetInfo): case .success(let widgetInfo):
for info in widgetInfo { for info in widgetInfo {
if let option = WidgetOptions.option(forKind: info.kind, family: info.family) { if let option = WidgetOptions.option(forKind: info.kind, family: info.family) {
let name = WidgetOptions.name(for: option) let name = WidgetOptions.name(for: option)
var params: [AnalyticsParameter : String] = [.ANALYTICS_KEY_WIDGET_NAME : name]
if let updatedLocation = location {
let smartText = self?.smartTextProvider.smartText(for: updatedLocation) ?? ""
params[.ANALYTICS_KEY_WIDGET_SMART_TEXT] = #"\#(smartText)"#
}
AppAnalytics.shared.log(event: .ANALYTICS_WIDGET_UPDATED, AppAnalytics.shared.log(event: .ANALYTICS_WIDGET_UPDATED,
params: [.ANALYTICS_KEY_WIDGET_NAME : name]) params: params)
} }
} }
case .failure(let error): case .failure(let error):
......
...@@ -76,7 +76,7 @@ class WeatherProvider: TimelineProvider { ...@@ -76,7 +76,7 @@ class WeatherProvider: TimelineProvider {
let nextRefresh = Calendar.current.date(byAdding: .minute, value: 30, to: Date())! let nextRefresh = Calendar.current.date(byAdding: .minute, value: 30, to: Date())!
let entry = WeatherEntry(location: fetchedLocation, date: nextRefresh, radarMapImage: mapImage) let entry = WeatherEntry(location: fetchedLocation, date: nextRefresh, radarMapImage: mapImage)
let timeline = Timeline(entries: [entry], policy: .atEnd) let timeline = Timeline(entries: [entry], policy: .atEnd)
WidgetManager.shared.logUpdate() WidgetManager.shared.logUpdate(forLocation: fetchedLocation)
completion(timeline) completion(timeline)
} }
} }
...@@ -84,7 +84,7 @@ class WeatherProvider: TimelineProvider { ...@@ -84,7 +84,7 @@ class WeatherProvider: TimelineProvider {
let nextRefresh = Calendar.current.date(byAdding: .minute, value: 30, to: Date())! let nextRefresh = Calendar.current.date(byAdding: .minute, value: 30, to: Date())!
let entry = WeatherEntry(location: location, date: nextRefresh) let entry = WeatherEntry(location: location, date: nextRefresh)
let timeline = Timeline(entries: [entry], policy: .atEnd) let timeline = Timeline(entries: [entry], policy: .atEnd)
WidgetManager.shared.logUpdate() WidgetManager.shared.logUpdate(forLocation: location)
completion(timeline) completion(timeline)
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment