MainActivity.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. using System;
  2. using Android.App;
  3. using Android.Content;
  4. using Android.Views;
  5. using Android.Widget;
  6. using Android.OS;
  7. using Android.Support.V7.Widget;
  8. using System.Collections.Generic;
  9. namespace AndroidPlayerMiniHack
  10. {
  11. [Activity (Label = "Xamarin Android Player", MainLauncher = true, Icon = "@drawable/icon")]
  12. public class MainActivity : Activity
  13. {
  14. RecyclerView recyclerView;
  15. RecyclerView.Adapter adapter;
  16. RecyclerView.LayoutManager layoutManager;
  17. protected override void OnCreate (Bundle bundle)
  18. {
  19. base.OnCreate (bundle);
  20. // Set our view from the "main" layout resource
  21. SetContentView (Resource.Layout.main);
  22. var refreshbattery = FindViewById<Button> (Resource.Id.refresh_battery);
  23. var batterystatus = FindViewById<TextView> (Resource.Id.battery_status);
  24. var batterylevel = FindViewById<TextView> (Resource.Id.battery_level);
  25. refreshbattery.Click += (sender, e) => {
  26. var filter = new IntentFilter(Intent.ActionBatteryChanged);
  27. var battery = RegisterReceiver(null, filter);
  28. int level = battery.GetIntExtra(BatteryManager.ExtraLevel, -1);
  29. int scale = battery.GetIntExtra(BatteryManager.ExtraScale, -1);
  30. batterylevel.Text = string.Format("Current Charge: {0}%", Math.Floor (level * 100D / scale));
  31. // Are we charging / charged? works on phones, not emulators must check how.
  32. int status = battery.GetIntExtra(BatteryManager.ExtraStatus, -1);
  33. var isCharging = status == (int)BatteryStatus.Charging || status == (int)BatteryStatus.Full;
  34. // How are we charging?
  35. var chargePlug = battery.GetIntExtra(BatteryManager.ExtraPlugged, -1);
  36. var usbCharge = chargePlug == (int)BatteryPlugged.Usb;
  37. var acCharge = chargePlug == (int)BatteryPlugged.Ac;
  38. var wirelessCharge = chargePlug == (int)BatteryPlugged.Wireless;
  39. isCharging = (usbCharge || acCharge || wirelessCharge);
  40. if(!isCharging){
  41. batterystatus.Text = "Status: discharging";
  42. } else if(usbCharge){
  43. batterystatus.Text = "Status: charging via usb";
  44. } else if(acCharge){
  45. batterystatus.Text = "Status: charging via ac";
  46. } else if(wirelessCharge){
  47. batterystatus.Text = "Status: charging via wireless";
  48. }
  49. };
  50. recyclerView = FindViewById<RecyclerView> (Resource.Id.recycler_view);
  51. recyclerView.HasFixedSize = true;
  52. layoutManager = new LinearLayoutManager (this);
  53. recyclerView.SetLayoutManager (layoutManager);
  54. var items = new List<RecyclerItem> (100);
  55. for(int i = 0; i < 100; i++)
  56. items.Add(new RecyclerItem{Title = "Item: " + i});
  57. adapter = new RecyclerAdapter (items);
  58. recyclerView.SetAdapter (adapter);
  59. //TODO: FindViewById for new GPS TextView
  60. //TODO: FindViewById for new GPS Button Refresh
  61. //TODO: Add Click Handler to GetPositionAsync with async keyword
  62. /*
  63. var getlocation = FindViewById<Button> (Resource.Id.REPLACE_WITH_ID);
  64. getlocation.Click += async (sender, e) => {
  65. };
  66. * /
  67. //In Click Handler
  68. //TODO: Create new geolcator and Call GetPositionAsync() from Geolocator Plugin
  69. //var locator = CrossGeolocator.Current;
  70. //locator.DesiredAccuracy = 50;
  71. //TODO: Set Label to new location
  72. /*
  73. var position = await locator.GetPositionAsync (timeout: 10000);
  74. Console.WriteLine ("Position Latitude: {0}", position.Latitude);
  75. Console.WriteLine ("Position Longitude: {0}", position.Longitude);
  76. */
  77. }
  78. public class RecyclerItem : Java.Lang.Object
  79. {
  80. static int[] Ids = new int[]{Resource.Drawable.sample1, Resource.Drawable.sample2};
  81. static int nextId;
  82. public RecyclerItem()
  83. {
  84. Image = Ids[nextId];
  85. nextId++;
  86. if (nextId >= Ids.Length)
  87. nextId = 0;
  88. }
  89. public string Title {get;set;}
  90. public int Image {get;set;}
  91. }
  92. public class ViewHolder : RecyclerView.ViewHolder
  93. {
  94. public TextView Text {get;set;}
  95. public ImageView Image {get;set;}
  96. public ViewHolder(View view) :
  97. base(view)
  98. {
  99. Text = view.FindViewById<TextView> (Resource.Id.textView);
  100. Image = view.FindViewById<ImageView> (Resource.Id.imageView);
  101. }
  102. }
  103. public class RecyclerAdapter : RecyclerView.Adapter, View.IOnClickListener
  104. {
  105. public List<RecyclerItem> Items { get; set; }
  106. /// <summary>
  107. /// Generice constructor but you would want ot base this on your data.
  108. /// </summary>
  109. /// <param name="items">Items.</param>
  110. public RecyclerAdapter(List<RecyclerItem> items)
  111. {
  112. this.Items = items;
  113. }
  114. /// <summary>
  115. /// Create a new view which is invoked by the layout manager
  116. /// </summary>
  117. /// <param name="parent">Parent.</param>
  118. /// <param name="viewType">View type.</param>
  119. public override RecyclerView.ViewHolder OnCreateViewHolder (ViewGroup parent, int viewType)
  120. {
  121. var view = LayoutInflater.From (parent.Context).Inflate (Resource.Layout.recycleritem_card, null);
  122. view.SetOnClickListener (this);
  123. return new ViewHolder (view);
  124. }
  125. /// <summary>
  126. /// Replaces the content of the view. Invoked by the layout manager
  127. /// </summary>
  128. /// <param name="holder">Holder.</param>
  129. /// <param name="position">Position.</param>
  130. public override void OnBindViewHolder (RecyclerView.ViewHolder holder, int position)
  131. {
  132. var holder2 = holder as ViewHolder;
  133. holder2.Text.Text = Items [position].Title;
  134. holder2.Image.SetImageResource (Items [position].Image);
  135. holder2.ItemView.Tag = Items [position];
  136. }
  137. public override int ItemCount {
  138. get {
  139. return Items.Count;
  140. }
  141. }
  142. public void Add(RecyclerItem item) {
  143. var position = Items.Count;
  144. Items.Insert(position, item);
  145. NotifyItemInserted(position);
  146. }
  147. public void Remove(int position) {
  148. if (position < 0)
  149. return;
  150. Items.RemoveAt(position);
  151. NotifyItemRemoved(position);
  152. }
  153. public Action<View, RecyclerItem> OnItemClick { get; set; }
  154. public void OnClick (View v)
  155. {
  156. if (OnItemClick == null)
  157. return;
  158. OnItemClick (v, (RecyclerItem)v.Tag);
  159. }
  160. }
  161. }
  162. }