1
0
mirror of https://github.com/bitwarden/mobile.git synced 2024-06-24 10:14:55 +02:00
bitwarden-mobile/src/iOS.Autofill/LoginSearchViewController.cs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

117 lines
4.0 KiB
C#
Raw Normal View History

using System;
2019-06-28 14:21:44 +02:00
using Bit.iOS.Autofill.Models;
using Foundation;
using UIKit;
using Bit.iOS.Core.Controllers;
using Bit.App.Resources;
using Bit.iOS.Core.Views;
using Bit.iOS.Autofill.Utilities;
2019-07-01 21:12:40 +02:00
using Bit.iOS.Core.Utilities;
using Bit.App.Abstractions;
using Bit.Core.Utilities;
2019-06-28 14:21:44 +02:00
namespace Bit.iOS.Autofill
{
public partial class LoginSearchViewController : ExtendedUITableViewController
{
public LoginSearchViewController(IntPtr handle)
: base(handle)
{
DismissModalAction = Cancel;
PasswordRepromptService = ServiceContainer.Resolve<IPasswordRepromptService>("passwordRepromptService");
}
2019-06-28 14:21:44 +02:00
public Context Context { get; set; }
public CredentialProviderViewController CPViewController { get; set; }
2019-07-03 01:35:01 +02:00
public bool FromList { get; set; }
public IPasswordRepromptService PasswordRepromptService { get; private set; }
2019-06-28 14:21:44 +02:00
public async override void ViewDidLoad()
{
base.ViewDidLoad();
NavItem.Title = AppResources.SearchVault;
CancelBarButton.Title = AppResources.Cancel;
SearchBar.Placeholder = AppResources.Search;
2019-07-03 01:36:11 +02:00
SearchBar.BackgroundColor = SearchBar.BarTintColor = ThemeHelpers.ListHeaderBackgroundColor;
SearchBar.UpdateThemeIfNeeded();
2019-06-28 14:21:44 +02:00
TableView.RowHeight = UITableView.AutomaticDimension;
TableView.EstimatedRowHeight = 44;
TableView.Source = new TableSource(this);
SearchBar.Delegate = new ExtensionSearchDelegate(TableView);
await ((TableSource)TableView.Source).LoadItemsAsync(false, SearchBar.Text);
}
2019-10-07 15:23:41 +02:00
public override void ViewDidAppear(bool animated)
{
base.ViewDidAppear(animated);
SearchBar?.BecomeFirstResponder();
}
2019-06-28 14:21:44 +02:00
partial void CancelBarButton_Activated(UIBarButtonItem sender)
{
Cancel();
}
private void Cancel()
2019-06-28 14:21:44 +02:00
{
if (FromList)
2019-07-03 01:35:01 +02:00
{
DismissViewController(true, null);
}
else
{
CPViewController.CompleteRequest();
}
2019-06-28 14:21:44 +02:00
}
partial void AddBarButton_Activated(UIBarButtonItem sender)
{
PerformSegue("loginAddFromSearchSegue", this);
}
public override void PrepareForSegue(UIStoryboardSegue segue, NSObject sender)
{
if (segue.DestinationViewController is UINavigationController navController)
2019-06-28 14:21:44 +02:00
{
if (navController.TopViewController is LoginAddViewController addLoginController)
2019-06-28 14:21:44 +02:00
{
addLoginController.Context = Context;
addLoginController.LoginSearchController = this;
segue.DestinationViewController.PresentationController.Delegate =
new CustomPresentationControllerDelegate(addLoginController.DismissModalAction);
2019-06-28 14:21:44 +02:00
}
}
}
public void DismissModal()
{
DismissViewController(true, async () =>
{
await ((TableSource)TableView.Source).LoadItemsAsync(false, SearchBar.Text);
TableView.ReloadData();
});
}
public class TableSource : ExtensionTableSource
{
private Context _context;
private LoginSearchViewController _controller;
public TableSource(LoginSearchViewController controller)
: base(controller.Context, controller)
{
_context = controller.Context;
_controller = controller;
}
public async override void RowSelected(UITableView tableView, NSIndexPath indexPath)
{
await AutofillHelpers.TableRowSelectedAsync(tableView, indexPath, this,
_controller.CPViewController, _controller, _controller.PasswordRepromptService,
"loginAddFromSearchSegue");
2019-06-28 14:21:44 +02:00
}
}
}
}