/* This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file is based on Keepassdroid, Copyright Brian Pellin. Keepass2Android is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Keepass2Android is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Keepass2Android. If not, see . */ using System; using System.Linq; using System.Text.RegularExpressions; using Android.App; using Android.Content; using Android.Content.PM; using Android.OS; using Android.Preferences; using Android.Views; using Android.Widget; using keepass2android.view; using keepass2android; using KeePassLib; namespace keepass2android.search { /// /// Activity to show search results /// [Activity(Label = "@string/app_name", Theme = "@style/Kp2aTheme_ActionBar", LaunchMode = Android.Content.PM.LaunchMode.SingleTop, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden)] public class SearchTotpResults : GroupBaseActivity { public static void Launch(Activity act, AppTask appTask, ActivityFlags? flags = null) { Intent i = new Intent(act, typeof(SearchTotpResults)); if (flags != null) i.SetFlags((ActivityFlags)flags); appTask.ToIntent(i); if (flags != null && (((ActivityFlags)flags) | ActivityFlags.ForwardResult) == ActivityFlags.ForwardResult) act.StartActivity(i); else act.StartActivityForResult(i, 0); } public override bool MayPreviewTotp { get { return true; } } protected override void OnCreate (Bundle bundle) { base.OnCreate (bundle); if ( IsFinishing ) { return; } SetResult(KeePass.ExitNormal); // Likely the app has been killed exit the activity if (!App.Kp2a.DatabaseIsUnlocked) { Finish(); } Group = new PwGroup() { Name = GetString(Resource.String.TOTP) }; try { foreach (var db in App.Kp2a.OpenDatabases) { foreach (var entry in db.EntriesById.Values) { var totpData = new Kp2aTotp().TryGetTotpData(new PwEntryOutput(entry, db)); if (totpData?.IsTotpEntry == true) Group.AddEntry(entry, false); } } } catch (Exception e) { Kp2aLog.LogUnexpectedError(e); App.Kp2a.ShowMessage(this, Util.GetErrorMessage(e), MessageSeverity.Error); Finish(); return; } if (Group == null || (!Group.Entries.Any())) { SetContentView(Resource.Layout.group_empty); } SetGroupTitle(); FragmentManager.FindFragmentById(Resource.Id.list_fragment).ListAdapter = new PwGroupListAdapter(this, Group); } public override bool EntriesBelongToCurrentDatabaseOnly { get { return false; } } public override ElementAndDatabaseId FullGroupId { get { return null; } } public override void OnCreateContextMenu(IContextMenu menu, View v, IContextMenuContextMenuInfo menuInfo) { AdapterView.AdapterContextMenuInfo acmi = (AdapterView.AdapterContextMenuInfo) menuInfo; ClickView cv = (ClickView) acmi.TargetView; cv.OnCreateMenu(menu, menuInfo); } public override bool OnContextItemSelected(IMenuItem item) { AdapterView.AdapterContextMenuInfo acmi = (AdapterView.AdapterContextMenuInfo)item.MenuInfo; ClickView cv = (ClickView) acmi.TargetView; bool result; return cv.OnContextItemSelected(item); } public override bool OnSearchRequested() { Intent i = new Intent(this, typeof(SearchActivity)); this.AppTask.ToIntent(i); i.SetFlags(ActivityFlags.ForwardResult); StartActivity(i); return true; } public override bool IsSearchResult { get { return true; } } } }