Bgerstle has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/210823

Change subject: ugly WIP: group preferred languages
......................................................................

ugly WIP: group preferred languages

- [x] group languages by "preferred" and "other"
- [ ] implement & localize proper section headers
- [ ] add new icon to bottom bar

Bug: T97780

Change-Id: I7218a1a0016563808b1dab70ca6ff97c504cd5e9
---
M Wikipedia/View Controllers/Languages/LanguagesViewController.m
1 file changed, 75 insertions(+), 40 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/ios/wikipedia 
refs/changes/23/210823/1

diff --git a/Wikipedia/View Controllers/Languages/LanguagesViewController.m 
b/Wikipedia/View Controllers/Languages/LanguagesViewController.m
index 03538da..ca0550c 100644
--- a/Wikipedia/View Controllers/Languages/LanguagesViewController.m
+++ b/Wikipedia/View Controllers/Languages/LanguagesViewController.m
@@ -12,17 +12,30 @@
 #import "UIViewController+Alert.h"
 #import "UIViewController+ModalPop.h"
 #import "UIView+ConstraintsScale.h"
+#import "NSString+Extras.h"
 
 #pragma mark - Defines
 
-#define BACKGROUND_COLOR [UIColor colorWithWhite:1.0f alpha:1.0f]
-
-#pragma mark - Private properties
+typedef NS_ENUM (NSInteger, WMFLanguagesTableSection) {
+    /// Section in the languages table containing preferred languages.
+    WMFLanguagesTableSectionPreferred = 0,
+    /// Section in the languages table containing languages other than the 
preferred ones.
+    WMFLanguagesTableSectionOther = 1,
+    /// Number of sections in the languages table
+    WMFLanguagesTableSectionCount
+};
 
 @interface LanguagesViewController ()
 
+/// Array of dictionaries which represent languages to choose from.
 @property (strong, nonatomic) NSArray* languagesData;
-@property (strong, nonatomic) NSMutableArray* filteredLanguagesData;
+
+/// Languages in `languagesData` filtered by `filterString` that are contained 
in the user's preferred languages.
+/// @note The user's preferred languages are currently dictated by `+[NSLocale 
preferredLanguages]`.
+@property (strong, nonatomic) NSArray* preferredLanguages;
+
+/// Languages in `languagesData` filtered by `filterString` that aren't in 
`preferredLanguages`
+@property (strong, nonatomic) NSArray* otherLanguages;
 
 @property (strong, nonatomic) NSString* filterString;
 @property (strong, nonatomic) UITextField* filterTextField;
@@ -53,15 +66,9 @@
     [super viewDidLoad];
 
     self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
-
-    self.languagesData         = @[];
-    self.filteredLanguagesData = @[].mutableCopy;
-
-    self.view.backgroundColor = BACKGROUND_COLOR;
-
-    self.tableView.contentInset = UIEdgeInsetsMake(15.0 * 
MENUS_SCALE_MULTIPLIER, 0, 0, 0);
-
-    self.filterString = @"";
+    self.view.backgroundColor     = [UIColor whiteColor];
+    self.tableView.contentInset   = UIEdgeInsetsMake(15.0 * 
MENUS_SCALE_MULTIPLIER, 0, 0, 0);
+    self.filterString             = @"";
 }
 
 - (void)viewWillAppear:(BOOL)animated {
@@ -140,24 +147,31 @@
 }
 
 - (void)reloadTableDataFiltered {
-    if (self.filterString.length == 0) {
-        self.filteredLanguagesData = self.languagesData.mutableCopy;
-        [self.tableView reloadData];
-        return;
+    NSArray* filteredLanguages;
+    if (!self.filterString.length) {
+        filteredLanguages = [self.languagesData copy];
+    } else {
+        filteredLanguages =
+            [self.languagesData filteredArrayUsingPredicate:
+             [NSPredicate predicateWithBlock:^BOOL (NSDictionary* lang, 
NSDictionary* bindings) {
+#warning TODO: use proper model object and refactor this into an instance 
method
+            return [lang[@"name"] 
wmf_isEqualToStringIgnoringCase:self.filterString]
+            || [lang[@"canonical_name"] 
wmf_caseInsensitiveContainsString:self.filterString]
+            || [lang[@"code"] 
wmf_isEqualToStringIgnoringCase:self.filterString];
+        }]];
     }
 
-    [self.filteredLanguagesData removeAllObjects];
+    self.preferredLanguages =
+        [filteredLanguages filteredArrayUsingPredicate:
+         [NSPredicate predicateWithBlock:^BOOL (NSDictionary* lang, 
NSDictionary* bindings) {
+        return [[NSLocale preferredLanguages] containsObject:lang[@"code"]];
+    }]];
 
-    self.filteredLanguagesData =
-        [self.languagesData filteredArrayUsingPredicate:
-         [NSPredicate predicateWithFormat:@"\
-              SELF.name contains[c] %@\
-              || \
-              SELF.canonical_name contains[c] %@\
-              || \
-              SELF.code == [c] %@\
-          ", self.filterString, self.filterString, self.filterString]
-        ].mutableCopy;
+    self.otherLanguages =
+        [filteredLanguages filteredArrayUsingPredicate:
+         [NSPredicate predicateWithBlock:^BOOL (id evaluatedObject, 
NSDictionary* bindings) {
+        return ![self.preferredLanguages containsObject:evaluatedObject];
+    }]];
 
     [self.tableView reloadData];
 }
@@ -202,36 +216,57 @@
                                                            
thenNotifyDelegate:self];
 }
 
+- (NSDictionary*)languageAtIndexPath:(NSIndexPath*)indexPath {
+    switch (indexPath.section) {
+        case WMFLanguagesTableSectionOther:
+            return self.otherLanguages[indexPath.row];
+        case WMFLanguagesTableSectionPreferred:
+            return self.preferredLanguages[indexPath.row];
+    }
+    NSAssert(NO, @"Forgot to add a case to the language-for-section switch!");
+    return @{};
+}
+
 #pragma mark - Table protocol methods
 
 - (NSInteger)numberOfSectionsInTableView:(UITableView*)tableView {
     // Return the number of sections.
-    return 1;
+    return WMFLanguagesTableSectionCount;
 }
 
 - (NSInteger)tableView:(UITableView*)tableView 
numberOfRowsInSection:(NSInteger)section {
-    // Return the number of rows in the section.
-    return self.filteredLanguagesData.count;
+    switch (section) {
+        case WMFLanguagesTableSectionOther:
+            return self.otherLanguages.count;
+        case WMFLanguagesTableSectionPreferred:
+            return self.preferredLanguages.count;
+    }
+    NSAssert(NO, @"Forgot to add a case to the items-for-section switch!");
+    return 0;
 }
 
 - (CGFloat)tableView:(UITableView*)tableView 
heightForRowAtIndexPath:(NSIndexPath*)indexPath {
     return 48.0 * MENUS_SCALE_MULTIPLIER;
 }
 
-- (CGFloat)tableView:(UITableView*)tableView 
heightForHeaderInSection:(NSInteger)section;
-{
-    return 0;
-}
-
-- (UIView*)tableView:(UITableView*)tableView 
viewForHeaderInSection:(NSInteger)section {
-    return nil;
+- (NSString*)tableView:(UITableView*)tableView 
titleForHeaderInSection:(NSInteger)section {
+    switch (section) {
+        case WMFLanguagesTableSectionPreferred:
+            #warning TODO: localize
+            return @"Preferred";
+        case WMFLanguagesTableSectionOther:
+            #warning TODO: localize
+            return @"Other languages";
+    }
+    NSAssert(NO, @"Forgot to add a case to the section title mapping switch!");
+    return @"";
 }
 
 - (UITableViewCell*)tableView:(UITableView*)tableView 
cellForRowAtIndexPath:(NSIndexPath*)indexPath {
     static NSString* cellId = @"LanguagesCell";
     LanguagesCell* cell     = [tableView 
dequeueReusableCellWithIdentifier:cellId forIndexPath:indexPath];
 
-    NSDictionary* d = self.filteredLanguagesData[indexPath.row];
+    NSDictionary* d = [self languageAtIndexPath:indexPath];
 
     cell.textLabel.text      = d[@"name"];
     cell.canonicalLabel.text = d[@"canonical_name"];
@@ -240,7 +275,7 @@
 }
 
 - (void)tableView:(UITableView*)tableView 
didSelectRowAtIndexPath:(NSIndexPath*)indexPath {
-    NSDictionary* selectedLangInfo = self.filteredLanguagesData[indexPath.row];
+    NSDictionary* selectedLangInfo = [self languageAtIndexPath:indexPath];
     [self.languageSelectionDelegate languageSelected:selectedLangInfo 
sender:self];
 }
 

-- 
To view, visit https://gerrit.wikimedia.org/r/210823
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7218a1a0016563808b1dab70ca6ff97c504cd5e9
Gerrit-PatchSet: 1
Gerrit-Project: apps/ios/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Bgerstle <bgers...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to