1
0
mirror of https://github.com/bitwarden/mobile synced 2025-12-15 15:53:44 +00:00

Fixed flickering on iOS while loading collections for the collection crash hotfix

This commit is contained in:
Federico Maccaroni
2022-03-18 15:49:48 -03:00
parent 372c875cb2
commit 3d485f6fb5
4 changed files with 97 additions and 36 deletions

View File

@@ -178,7 +178,9 @@ namespace Bit.App.Pages
} }
// TODO: refactor this // TODO: refactor this
if (Device.RuntimePlatform == Device.Android) if (Device.RuntimePlatform == Device.Android
||
GroupedSends.Any())
{ {
var items = new List<ISendGroupingsPageListItem>(); var items = new List<ISendGroupingsPageListItem>();
foreach (var itemGroup in groupedSends) foreach (var itemGroup in groupedSends)
@@ -191,16 +193,30 @@ namespace Bit.App.Pages
} }
else else
{ {
// HACK: This waitings are to avoid crash on iOS // HACK: we need this on iOS, so that it doesn't crash when adding coming from an empty list
GroupedSends.Clear(); var first = true;
await Task.Delay(60); var items = new List<ISendGroupingsPageListItem>();
foreach (var itemGroup in groupedSends) foreach (var itemGroup in groupedSends)
{ {
GroupedSends.Add(new SendGroupingsPageHeaderListItem(itemGroup.Name, itemGroup.ItemCount)); if (!first)
await Task.Delay(60); {
items.Add(new SendGroupingsPageHeaderListItem(itemGroup.Name, itemGroup.ItemCount));
}
else
{
first = false;
}
items.AddRange(itemGroup);
}
GroupedSends.AddRange(itemGroup); if (groupedSends.Any())
{
GroupedSends.ReplaceRange(new List<ISendGroupingsPageListItem> { new SendGroupingsPageHeaderListItem(groupedSends[0].Name, groupedSends[0].ItemCount) });
GroupedSends.AddRange(items);
}
else
{
GroupedSends.Clear();
} }
} }
} }

View File

@@ -515,7 +515,9 @@ namespace Bit.App.Pages
}; };
// TODO: refactor this // TODO: refactor this
if (Device.RuntimePlatform == Device.Android) if (Device.RuntimePlatform == Device.Android
||
GroupedItems.Any())
{ {
var items = new List<ISettingsPageListItem>(); var items = new List<ISettingsPageListItem>();
foreach (var itemGroup in settingsListGroupItems) foreach (var itemGroup in settingsListGroupItems)
@@ -528,20 +530,31 @@ namespace Bit.App.Pages
} }
else else
{ {
Device.InvokeOnMainThreadAsync(async () => // HACK: we need this on iOS, so that it doesn't crash when adding coming from an empty list
var first = true;
var items = new List<ISettingsPageListItem>();
foreach (var itemGroup in settingsListGroupItems)
{ {
// HACK: This waitings are to avoid crash on iOS if (!first)
GroupedItems.Clear();
await Task.Delay(60);
foreach (var itemGroup in settingsListGroupItems)
{ {
GroupedItems.Add(new SettingsPageHeaderListItem(itemGroup.Name)); items.Add(new SettingsPageHeaderListItem(itemGroup.Name));
await Task.Delay(60);
GroupedItems.AddRange(itemGroup);
} }
}).FireAndForget(); else
{
first = false;
}
items.AddRange(itemGroup);
}
if (settingsListGroupItems.Any())
{
GroupedItems.ReplaceRange(new List<ISettingsPageListItem> { new SettingsPageHeaderListItem(settingsListGroupItems[0].Name) });
GroupedItems.AddRange(items);
}
else
{
GroupedItems.Clear();
}
} }
} }

View File

@@ -108,7 +108,9 @@ namespace Bit.App.Pages
} }
// TODO: refactor this // TODO: refactor this
if (Device.RuntimePlatform == Device.Android) if (Device.RuntimePlatform == Device.Android
||
GroupedItems.Any())
{ {
var items = new List<IGroupingsPageListItem>(); var items = new List<IGroupingsPageListItem>();
foreach (var itemGroup in groupedItems) foreach (var itemGroup in groupedItems)
@@ -121,16 +123,30 @@ namespace Bit.App.Pages
} }
else else
{ {
// HACK: This waitings are to avoid crash on iOS // HACK: we need this on iOS, so that it doesn't crash when adding coming from an empty list
GroupedItems.Clear(); var first = true;
await Task.Delay(60); var items = new List<IGroupingsPageListItem>();
foreach (var itemGroup in groupedItems) foreach (var itemGroup in groupedItems)
{ {
GroupedItems.Add(new GroupingsPageHeaderListItem(itemGroup.Name, itemGroup.ItemCount)); if (!first)
await Task.Delay(60); {
items.Add(new GroupingsPageHeaderListItem(itemGroup.Name, itemGroup.ItemCount));
}
else
{
first = false;
}
items.AddRange(itemGroup);
}
GroupedItems.AddRange(itemGroup); if (groupedItems.Any())
{
GroupedItems.ReplaceRange(new List<IGroupingsPageListItem> { new GroupingsPageHeaderListItem(groupedItems[0].Name, groupedItems[0].ItemCount) });
GroupedItems.AddRange(items);
}
else
{
GroupedItems.Clear();
} }
} }
ShowList = groupedItems.Any(); ShowList = groupedItems.Any();

View File

@@ -283,7 +283,9 @@ namespace Bit.App.Pages
} }
// TODO: refactor this // TODO: refactor this
if (Device.RuntimePlatform == Device.Android) if (Device.RuntimePlatform == Device.Android
||
GroupedItems.Any())
{ {
var items = new List<IGroupingsPageListItem>(); var items = new List<IGroupingsPageListItem>();
foreach (var itemGroup in groupedItems) foreach (var itemGroup in groupedItems)
@@ -296,16 +298,30 @@ namespace Bit.App.Pages
} }
else else
{ {
// HACK: This waitings are to avoid crash on iOS // HACK: we need this on iOS, so that it doesn't crash when adding coming from an empty list
GroupedItems.Clear(); var first = true;
await Task.Delay(60); var items = new List<IGroupingsPageListItem>();
foreach (var itemGroup in groupedItems) foreach (var itemGroup in groupedItems)
{ {
GroupedItems.Add(new GroupingsPageHeaderListItem(itemGroup.Name, itemGroup.ItemCount)); if (!first)
await Task.Delay(60); {
items.Add(new GroupingsPageHeaderListItem(itemGroup.Name, itemGroup.ItemCount));
}
else
{
first = false;
}
items.AddRange(itemGroup);
}
GroupedItems.AddRange(itemGroup); if (groupedItems.Any())
{
GroupedItems.ReplaceRange(new List<IGroupingsPageListItem> { new GroupingsPageHeaderListItem(groupedItems[0].Name, groupedItems[0].ItemCount) });
GroupedItems.AddRange(items);
}
else
{
GroupedItems.Clear();
} }
} }
} }