summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Android/AppCompat
diff options
context:
space:
mode:
authorE.Z. Hart <hartez@users.noreply.github.com>2017-06-22 16:33:03 -0600
committerRui Marinho <me@ruimarinho.net>2017-06-22 23:33:03 +0100
commit075a6b370d1dce8f211264422723276411f98b85 (patch)
treeead4eeb9d5a0edf1fb9f9926c88dfd9510073bc7 /Xamarin.Forms.Platform.Android/AppCompat
parent330b5156164e7951e01bc2493f9ca54a2587783e (diff)
downloadxamarin-forms-075a6b370d1dce8f211264422723276411f98b85.tar.gz
xamarin-forms-075a6b370d1dce8f211264422723276411f98b85.tar.bz2
xamarin-forms-075a6b370d1dce8f211264422723276411f98b85.zip
Set the Id field for Android Views created by Forms (#1004)
* Repro of modal-over-map-crash issue * Automated test for maps modal crash * Generate Ids for all Renderer Views on Android * Add Ids for PageContainer and PageRenderer * Remove TODO comment * Verify fast renderers aren't disposed before querying Id
Diffstat (limited to 'Xamarin.Forms.Platform.Android/AppCompat')
-rw-r--r--Xamarin.Forms.Platform.Android/AppCompat/CarouselPageRenderer.cs2
-rw-r--r--Xamarin.Forms.Platform.Android/AppCompat/FormsAppCompatActivity.cs17
-rw-r--r--Xamarin.Forms.Platform.Android/AppCompat/MasterDetailContainer.cs2
-rw-r--r--Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs2
-rw-r--r--Xamarin.Forms.Platform.Android/AppCompat/Platform.cs7
-rw-r--r--Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs2
6 files changed, 11 insertions, 21 deletions
diff --git a/Xamarin.Forms.Platform.Android/AppCompat/CarouselPageRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/CarouselPageRenderer.cs
index 766ee225..f50815d2 100644
--- a/Xamarin.Forms.Platform.Android/AppCompat/CarouselPageRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/AppCompat/CarouselPageRenderer.cs
@@ -94,7 +94,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
LayoutParameters = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent),
Adapter = new FormsFragmentPagerAdapter<ContentPage>(e.NewElement, activity.SupportFragmentManager) { CountOverride = e.NewElement.Children.Count }
};
- pager.Id = FormsAppCompatActivity.GetUniqueId();
+ pager.Id = Platform.GenerateViewId();
pager.AddOnPageChangeListener(this);
ViewGroup.AddView(pager);
diff --git a/Xamarin.Forms.Platform.Android/AppCompat/FormsAppCompatActivity.cs b/Xamarin.Forms.Platform.Android/AppCompat/FormsAppCompatActivity.cs
index 91efaa1d..b3b59433 100644
--- a/Xamarin.Forms.Platform.Android/AppCompat/FormsAppCompatActivity.cs
+++ b/Xamarin.Forms.Platform.Android/AppCompat/FormsAppCompatActivity.cs
@@ -461,23 +461,6 @@ namespace Xamarin.Forms.Platform.Android
public static int ToolbarResource { get; set; }
- internal static int GetUniqueId()
- {
- // getting unique Id's is an art, and I consider myself the Jackson Pollock of the field
- if ((int)Build.VERSION.SdkInt >= 17)
- return global::Android.Views.View.GenerateViewId();
-
- // Numbers higher than this range reserved for xml
- // If we roll over, it can be exceptionally problematic for the user if they are still retaining things, android's internal implementation is
- // basically identical to this except they do a lot of locking we don't have to because we know we only do this
- // from the UI thread
- if (s_id >= 0x00ffffff)
- s_id = 0x00000400;
- return s_id++;
- }
-
- static int s_id = 0x00000400;
-
#endregion
}
}
diff --git a/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailContainer.cs b/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailContainer.cs
index 50840926..faaf7462 100644
--- a/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailContainer.cs
+++ b/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailContainer.cs
@@ -19,7 +19,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
public MasterDetailContainer(MasterDetailPage parent, bool isMaster, Context context) : base(parent, isMaster, context)
{
- Id = FormsAppCompatActivity.GetUniqueId();
+ Id = Platform.GenerateViewId();
_parent = parent;
_isMaster = isMaster;
}
diff --git a/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs
index 8d17db84..eb2da7a0 100644
--- a/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs
@@ -50,7 +50,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
public NavigationPageRenderer()
{
AutoPackage = false;
- Id = FormsAppCompatActivity.GetUniqueId();
+ Id = Platform.GenerateViewId();
Device.Info.PropertyChanged += DeviceInfoPropertyChanged;
}
diff --git a/Xamarin.Forms.Platform.Android/AppCompat/Platform.cs b/Xamarin.Forms.Platform.Android/AppCompat/Platform.cs
index 03b23123..1ab45dfd 100644
--- a/Xamarin.Forms.Platform.Android/AppCompat/Platform.cs
+++ b/Xamarin.Forms.Platform.Android/AppCompat/Platform.cs
@@ -347,6 +347,8 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
Android.Platform.SetRenderer(modal, _renderer);
AddView(_renderer.View);
+
+ Id = Platform.GenerateViewId();
}
protected override void Dispose(bool disposing)
@@ -387,6 +389,11 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
}
}
+ internal static int GenerateViewId()
+ {
+ return Android.Platform.GenerateViewId();
+ }
+
#region Statics
public static implicit operator ViewGroup(Platform canvas)
diff --git a/Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs
index bb14100d..78fc19cb 100644
--- a/Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs
@@ -166,7 +166,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
LayoutParameters = new LayoutParams(LayoutParams.MatchParent, LayoutParams.MatchParent),
Adapter = new FormsFragmentPagerAdapter<Page>(e.NewElement, FragmentManager) { CountOverride = e.NewElement.Children.Count }
};
- pager.Id = FormsAppCompatActivity.GetUniqueId();
+ pager.Id = Platform.GenerateViewId();
pager.AddOnPageChangeListener(this);
AddView(pager);