diff --git a/Kiwix-iOS/Info.plist b/Kiwix-iOS/Info.plist
index f30c76a4..3752cd93 100644
--- a/Kiwix-iOS/Info.plist
+++ b/Kiwix-iOS/Info.plist
@@ -49,7 +49,7 @@
CFBundleVersion
- 1.7.544
+ 1.7.643
ITSAppUsesNonExemptEncryption
LSRequiresIPhoneOS
diff --git a/Kiwix-iOS/Storyboard/Setting.storyboard b/Kiwix-iOS/Storyboard/Setting.storyboard
index 7ddf5f52..60329dda 100644
--- a/Kiwix-iOS/Storyboard/Setting.storyboard
+++ b/Kiwix-iOS/Storyboard/Setting.storyboard
@@ -59,6 +59,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -554,7 +593,7 @@
-
+
diff --git a/Kiwix-iOSWidgets/Bookmarks/Base.lproj/MainInterface.storyboard b/Kiwix-iOSWidgets/Bookmarks/Base.lproj/MainInterface.storyboard
index 7fd6a719..97c385fe 100644
--- a/Kiwix-iOSWidgets/Bookmarks/Base.lproj/MainInterface.storyboard
+++ b/Kiwix-iOSWidgets/Bookmarks/Base.lproj/MainInterface.storyboard
@@ -18,7 +18,7 @@
-
+
diff --git a/Kiwix-iOSWidgets/Bookmarks/TodayViewController.swift b/Kiwix-iOSWidgets/Bookmarks/TodayViewController.swift
index 046eb72e..3d9dbee1 100644
--- a/Kiwix-iOSWidgets/Bookmarks/TodayViewController.swift
+++ b/Kiwix-iOSWidgets/Bookmarks/TodayViewController.swift
@@ -13,13 +13,11 @@ class TodayViewController: UIViewController, NCWidgetProviding, UICollectionView
@IBOutlet weak var collectionView: UICollectionView!
- private var rowHeight: CGFloat = 110.0
private let hInset: CGFloat = 15.0
private let vInset: CGFloat = 10.0
- private var itemHeight: CGFloat = 0.0
- private var itemWidth: CGFloat = 0.0
+ private var itemSize = CGSizeZero
- private var hasUpdate = false
+ private var hasUpdate = true
private var bookmarks = [NSDictionary]()
override func viewDidLoad() {
@@ -28,15 +26,52 @@ class TodayViewController: UIViewController, NCWidgetProviding, UICollectionView
collectionView.delegate = self
updateData()
+ calculateItemSize(collectionViewWidth: collectionView.frame.width)
updateUI()
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
updateData()
+ calculateItemSize(collectionViewWidth: collectionView.frame.width)
updateUI()
}
+ override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
+ super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
+ calculateItemSize(collectionViewWidth: size.width)
+ updateUI()
+ }
+
+ // MARK: - Update & Calculation
+
+ func updateData() {
+ let defaults = NSUserDefaults(suiteName: "group.kiwix")
+ guard let bookmarks = defaults?.objectForKey("bookmarks") as? [NSDictionary] else {return}
+ hasUpdate = self.bookmarks != bookmarks
+ self.bookmarks = bookmarks
+ }
+
+ func updateUI() {
+ collectionView.reloadData()
+ collectionView.collectionViewLayout.invalidateLayout()
+ NCWidgetController.widgetController().setHasContent(bookmarks.count > 0, forWidgetWithBundleIdentifier: "self.Kiwix.Bookmarks")
+ }
+
+ func calculateItemSize(collectionViewWidth collectionViewWidth: CGFloat) {
+ let itemsPerRow = max(5, min(round(collectionViewWidth / 70), 10))
+ let itemWidth = (collectionViewWidth - (itemsPerRow + 1) * hInset) / itemsPerRow
+ let titles = bookmarks.flatMap({$0.objectForKey("title") as? String})
+ let labelHeights = titles.map({$0.heightWithConstrainedWidth(itemWidth, font: UIFont.systemFontOfSize(10.0, weight: UIFontWeightMedium))})
+ let labelMaxHeight = max(12.0, min((labelHeights.maxElement() ?? 12.0), 24.0))
+ let itemHeight = itemWidth + 2.0 + labelMaxHeight // itemHeight (1:1 ration) + label top spacing + label height
+ itemSize = CGSizeMake(itemWidth, itemHeight)
+
+ let rowCount = ceil(CGFloat(bookmarks.count) / CGFloat(itemsPerRow))
+ let collectionViewHeight = itemHeight * rowCount + hInset * rowCount
+ preferredContentSize = CGSizeMake(0, max(1, collectionViewHeight))
+ }
+
// MARK: - NCWidgetProviding
func widgetMarginInsetsForProposedMarginInsets(defaultMarginInsets: UIEdgeInsets) -> UIEdgeInsets {
@@ -45,31 +80,12 @@ class TodayViewController: UIViewController, NCWidgetProviding, UICollectionView
func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) {
updateData()
+ calculateItemSize(collectionViewWidth: collectionView.frame.width)
updateUI()
completionHandler(hasUpdate ? .NewData : .NoData)
hasUpdate = false
}
- func updateData() {
- let defaults = NSUserDefaults(suiteName: "group.kiwix")
- guard let bookmarks = defaults?.objectForKey("bookmarks") as? [NSDictionary] else {return}
- hasUpdate = self.bookmarks != bookmarks
- self.bookmarks = bookmarks
- }
-
- func updateUI() {
- itemWidth = (collectionView.frame.width - 6 * hInset) / 5
- let titles = bookmarks.flatMap({$0.objectForKey("title") as? String})
- let labelHeights = titles.map({$0.heightWithConstrainedWidth(itemWidth, font: UIFont.systemFontOfSize(10.0, weight: UIFontWeightMedium))})
- let labelMaxHeight = max(12.0, min((labelHeights.maxElement() ?? 12.0), 24.0))
- itemHeight = itemWidth + 2.0 + labelMaxHeight // itemHeight (1:1 ration) + label top spacing + label height
-
- let rowCount: CGFloat = ceil(CGFloat(bookmarks.count) / 5)
- let collectionViewHeight = rowCount * itemHeight + vInset * (rowCount + 1)
- preferredContentSize = CGSizeMake(collectionView.frame.width, collectionViewHeight)
- collectionView.reloadData()
- }
-
// MARK: - UICollectionViewDataSource
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
@@ -110,7 +126,7 @@ class TodayViewController: UIViewController, NCWidgetProviding, UICollectionView
// MARK: - UICollectionViewDelegateFlowLayout
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
- return CGSizeMake(itemWidth, itemHeight)
+ return itemSize
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat {
diff --git a/Kiwix/Operations/UpdateWidgetDataSourceOperation.swift b/Kiwix/Operations/UpdateWidgetDataSourceOperation.swift
index 8ccd0ecb..b11bb681 100644
--- a/Kiwix/Operations/UpdateWidgetDataSourceOperation.swift
+++ b/Kiwix/Operations/UpdateWidgetDataSourceOperation.swift
@@ -8,6 +8,7 @@
import CoreData
import PSOperations
+import NotificationCenter
class UpdateWidgetDataSourceOperation: Operation {
let context: NSManagedObjectContext
@@ -34,7 +35,7 @@ class UpdateWidgetDataSourceOperation: Operation {
bookmarks.append(articleData)
}
defaults?.setObject(bookmarks, forKey: "bookmarks")
-
+ NCWidgetController.widgetController().setHasContent(bookmarks.count > 0, forWidgetWithBundleIdentifier: "self.Kiwix.Bookmarks")
finish()
}
}