This repository has been archived on 2022-11-03. You can view files and clone it, but cannot push or open issues or pull requests.
DevOpsOpenHack/MobileApps/MyDriving/MyDriving.iOS/Screens/Settings/SettingsDetailViewController.cs
2022-11-03 16:41:13 -04:00

134 lines
4.4 KiB
C#

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for details.
using System;
using Foundation;
using UIKit;
using MyDriving.Model;
using MyDriving.ViewModel;
namespace MyDriving.iOS
{
public partial class SettingsDetailViewController : UIViewController
{
public SettingsViewModel ViewModel;
public SettingsDetailViewController(IntPtr handle) : base(handle)
{
}
public string SettingKey { get; set; }
public Setting Setting { get; set; }
public override void ViewDidLoad()
{
base.ViewDidLoad();
NavigationItem.Title = Setting.Name;
settingsDetailTableView.Source = new SettingsDetailTableViewSource(SettingKey, Setting);
NSNotificationCenter.DefaultCenter.AddObserver(new NSString("SettingTextFieldChanged"),
HandleSettingChangedNotification);
}
void HandleSettingChangedNotification(NSNotification obj)
{
var dict = (NSDictionary) obj.Object;
var row = dict.ObjectForKey(new NSString("Row")) as NSString;
var section = dict.ObjectForKey(new NSString("Section")) as NSString;
var value = dict.ObjectForKey(new NSString("Value")) as NSString;
ViewModel.SettingsData[section.ToString()][Int32.Parse(row.ToString())].Value = value.ToString();
}
}
public class SettingsDetailTableViewSource : UITableViewSource
{
readonly string key;
readonly Setting setting;
public SettingsDetailTableViewSource(string key, Setting setting)
{
this.setting = setting;
this.key = key;
}
public override string TitleForHeader(UITableView tableView, nint section)
{
return setting.Name;
}
public override void WillDisplayHeaderView(UITableView tableView, UIView headerView, nint section)
{
var header = headerView as UITableViewHeaderFooterView;
header.TextLabel.TextColor = "5C5C5C".ToUIColor();
header.TextLabel.Font = UIFont.FromName("AvenirNext-Medium", 16);
header.TextLabel.Text = TitleForHeader(tableView, section);
}
public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
{
if (!setting.IsButton)
{
setting.Value = setting.PossibleValues[indexPath.Row];
var cells = tableView.VisibleCells;
int i = 0;
foreach (var cell in cells)
{
var value = setting.PossibleValues[i];
cell.Accessory = setting.Value != value
? UITableViewCellAccessory.None
: UITableViewCellAccessory.Checkmark;
i++;
}
NSNotificationCenter.DefaultCenter.PostNotificationName("RefreshTripUnits", null);
NSNotificationCenter.DefaultCenter.PostNotificationName("RefreshSettingsTable", null);
}
}
public override nint RowsInSection(UITableView tableview, nint section)
{
if (!setting.IsTextField)
return setting.PossibleValues.Count;
else
return 1;
}
public override nint NumberOfSections(UITableView tableView)
{
return 1;
}
public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
if (!setting.IsTextField)
{
var cell = tableView.DequeueReusableCell("SETTING__DETAIL_VALUE_CELL") as SettingDetailTableViewCell;
cell.Name = setting.PossibleValues[indexPath.Row];
cell.Accessory = UITableViewCellAccessory.None;
if (cell.Name == setting.Value)
cell.Accessory = UITableViewCellAccessory.Checkmark;
return cell;
}
else
{
var cell =
tableView.DequeueReusableCell("SETTING_DETAIL_TEXTFIELD_CELL") as
SettingDetailTextFieldTableViewCell;
cell.Row = indexPath.Row.ToString();
cell.Section = key;
cell.Value = setting.Value ?? string.Empty;
return cell;
}
}
}
}