Skip to content

Commit c0a49de

Browse files
author
Yannick Weiss
committed
Preventing the Today widget to work in the background, fixes wrong text labels.
1 parent fc0dd4e commit c0a49de

File tree

2 files changed

+35
-40
lines changed

2 files changed

+35
-40
lines changed

Diff for: UsageWidget/Base.lproj/MainInterface.storyboard

+10-4
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,37 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14868" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="M4Y-Lb-cyx">
2+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="M4Y-Lb-cyx">
33
<device id="retina6_1" orientation="portrait" appearance="light"/>
44
<dependencies>
55
<deployment identifier="iOS"/>
6-
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14824"/>
6+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15509"/>
77
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
88
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
99
</dependencies>
1010
<scenes>
1111
<!--Today View Controller-->
1212
<scene sceneID="cwh-vc-ff4">
1313
<objects>
14-
<viewController id="M4Y-Lb-cyx" customClass="TodayViewController" customModule="UsageWidget" customModuleProvider="target" sceneMemberID="viewController">
14+
<viewController id="M4Y-Lb-cyx" customClass="TodayViewController" customModule="M_Usage_Widget" customModuleProvider="target" sceneMemberID="viewController">
1515
<view key="view" contentMode="scaleToFill" simulatedAppContext="notificationCenter" id="S3S-Oj-5AN">
1616
<rect key="frame" x="0.0" y="0.0" width="320" height="110"/>
1717
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
1818
<subviews>
1919
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Placeholder" lineBreakMode="clip" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontForContentSizeCategory="YES" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3XD-XA-Kd5">
20-
<rect key="frame" x="10" y="0.0" width="300" height="31.5"/>
20+
<rect key="frame" x="10" y="0.0" width="300" height="33.5"/>
2121
<fontDescription key="fontDescription" style="UICTFontTextStyleTitle1"/>
2222
<nil key="textColor"/>
2323
<nil key="highlightedColor"/>
2424
</label>
25+
<activityIndicatorView opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" hidesWhenStopped="YES" animating="YES" style="large" translatesAutoresizingMaskIntoConstraints="NO" id="sbD-Ie-Jj3">
26+
<rect key="frame" x="141.5" y="36.5" width="37" height="37"/>
27+
</activityIndicatorView>
2528
</subviews>
2629
<constraints>
30+
<constraint firstItem="sbD-Ie-Jj3" firstAttribute="centerY" secondItem="S3S-Oj-5AN" secondAttribute="centerY" id="7Rp-cg-wcR"/>
2731
<constraint firstItem="3XD-XA-Kd5" firstAttribute="top" secondItem="S3S-Oj-5AN" secondAttribute="top" id="DVt-1o-kRQ"/>
2832
<constraint firstItem="ssy-KU-ocm" firstAttribute="trailing" secondItem="3XD-XA-Kd5" secondAttribute="trailing" constant="10" id="JTP-3M-sgU"/>
2933
<constraint firstItem="3XD-XA-Kd5" firstAttribute="leading" secondItem="ssy-KU-ocm" secondAttribute="leading" constant="10" id="Rda-5q-6Hq"/>
34+
<constraint firstItem="sbD-Ie-Jj3" firstAttribute="centerX" secondItem="S3S-Oj-5AN" secondAttribute="centerX" id="yLv-PP-jwn"/>
3035
</constraints>
3136
<viewLayoutGuide key="safeArea" id="ssy-KU-ocm"/>
3237
</view>
@@ -35,6 +40,7 @@
3540
<size key="freeformSize" width="320" height="110"/>
3641
<connections>
3742
<outlet property="label" destination="3XD-XA-Kd5" id="myW-Df-6Lh"/>
43+
<outlet property="spinner" destination="sbD-Ie-Jj3" id="sDm-nv-iAn"/>
3844
</connections>
3945
</viewController>
4046
<placeholder placeholderIdentifier="IBFirstResponder" id="vXp-U4-Rya" userLabel="First Responder" sceneMemberID="firstResponder"/>

Diff for: UsageWidget/TodayViewController.swift

+25-36
Original file line numberDiff line numberDiff line change
@@ -9,68 +9,57 @@ import Alamofire
99
* Since iOS 10 extension's height is 110 pixels
1010
*/
1111

12-
let spinner = UIActivityIndicatorView(style: .whiteLarge)
1312

1413
class TodayViewController: UIViewController, NCWidgetProviding {
1514
@IBOutlet weak var label: UILabel!
15+
@IBOutlet weak var spinner: UIActivityIndicatorView!
16+
1617
var labelHeight: CGFloat = 0.0;
1718

1819
override func viewDidLoad() {
1920
super.viewDidLoad()
20-
}
21-
22-
override func viewDidAppear(_ animated: Bool) {
23-
spinner.hidesWhenStopped = true
24-
self.view.addSubview(spinner)
25-
spinner.center = self.view.center
26-
spinner.startAnimating()
27-
}
28-
29-
override func viewDidLayoutSubviews() {
30-
super.viewDidLayoutSubviews()
31-
labelHeight = self.label.frame.size.height
32-
if (labelHeight > 110) {
33-
extensionContext?.widgetLargestAvailableDisplayMode = .expanded
34-
} else {
35-
extensionContext?.widgetLargestAvailableDisplayMode = .compact
36-
}
37-
}
38-
39-
func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
40-
if (activeDisplayMode == NCWidgetDisplayMode.compact) {
41-
self.preferredContentSize = maxSize;
42-
} else {
43-
self.preferredContentSize = CGSize(width: 0, height: labelHeight + 5.0);
44-
}
45-
}
46-
47-
func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void)) {
4821
self.label.text = ""
4922
self.label.textAlignment = .left
50-
spinner.startAnimating()
51-
5223
let keychain = KeychainSwift()
5324
keychain.accessGroup = "NDJHDNKXD6.dev.yannick.MigrosUsage"
5425

5526
guard let username = keychain.get("username"), let password = keychain.get("password") else {
5627
self.label.text = NSLocalizedString("Please provide credentials.", comment: "")
57-
completionHandler(.failed)
5828
return
5929
}
6030
getUsageFromPortal(username: username, password: password) { error, data in
6131
if (error != "") {
6232
self.label.textAlignment = .center
6333
self.label!.text = error
64-
spinner.stopAnimating()
65-
completionHandler(.failed)
34+
self.spinner.stopAnimating()
6635
return
6736
}
6837
DispatchQueue.main.async {
6938
let percentage = Int(round((data.used / data.total) * 100))
7039
self.label!.text = "\(percentage)% " + usageTextGB(totalFloat: data.total, usedFloat: data.used)
71-
spinner.stopAnimating()
72-
completionHandler(.newData)
40+
self.spinner.stopAnimating()
7341
}
7442
}
7543
}
44+
45+
override func viewDidLayoutSubviews() {
46+
super.viewDidLayoutSubviews()
47+
labelHeight = self.label.frame.size.height
48+
if (labelHeight > 110) {
49+
extensionContext?.widgetLargestAvailableDisplayMode = .expanded
50+
} else {
51+
extensionContext?.widgetLargestAvailableDisplayMode = .compact
52+
}
53+
}
54+
55+
func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
56+
if (activeDisplayMode == NCWidgetDisplayMode.compact) {
57+
self.preferredContentSize = maxSize;
58+
} else {
59+
self.preferredContentSize = CGSize(width: 0, height: labelHeight + 5.0);
60+
}
61+
}
62+
63+
// Not implementing widgetPerformUpdate means our app will not be called in the background.
64+
// func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void)) {}
7665
}

0 commit comments

Comments
 (0)