From 2a25d6f10641ef1eadaa9b5e5ca1fbefe16b3b60 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sat, 18 Feb 2017 16:17:39 +0100 Subject: [PATCH] =?UTF-8?q?Bet=C3=B6lt=C3=A9s/ment=C3=A9s=20m=C5=B1k=C3=B6?= =?UTF-8?q?dik,=20jav=C3=ADt=C3=A1sok?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Orarend/API.cs | 7 +- Orarend/Helyettesítés.cs | 8 ++ Orarend/Osztály.cs | 9 ++ Orarend/Settings.cs | 3 + Orarend/Tanár.cs | 4 + Orarend/Óra.cs | 7 +- Orarend/ÓraTípus.cs | 5 ++ Orarend/Órarend.cs | 23 +++-- OrarendAndroidApp/EditActivity.cs | 25 ++++++ OrarendAndroidApp/MainActivity.cs | 87 +++++++++++++------ OrarendAndroidApp/OrarendAndroidApp.csproj | 4 + .../Resources/Resource.Designer.cs | 30 ++++--- .../Resources/layout/MainLayout.axml | 9 +- .../Resources/layout/simple_list_item_1.axml | 10 +++ .../Resources/menu/main_menu_light.axml | 6 +- 15 files changed, 186 insertions(+), 51 deletions(-) create mode 100644 OrarendAndroidApp/EditActivity.cs create mode 100644 OrarendAndroidApp/Resources/layout/simple_list_item_1.axml diff --git a/Orarend/API.cs b/Orarend/API.cs index dade9ba..4042ef2 100644 --- a/Orarend/API.cs +++ b/Orarend/API.cs @@ -74,14 +74,14 @@ namespace Orarend for (int i = 0; i < 5; i++) //Napok { //TODO: for ciklus az egy időben tartott órákhoz var óranode = node.ChildNodes[i + 1].FirstChild; - var óra = (ahét ? órarend.ÓrákAHét : órarend.ÓrákBHét)[i, x]; + var óra = (ahét ? órarend.ÓrákAHét : órarend.ÓrákBHét)[i][x]; if (óranode.ChildNodes.Count == 0) continue; var csoport = óranode.FirstChild.InnerText.TrimEnd(':'); if (csoport != "Egész osztály" && !órarend.Csoportok.Contains(csoport)) continue; if (óra == null) - (ahét ? órarend.ÓrákAHét : órarend.ÓrákBHét)[i, x] = óra = new Óra(); + (ahét ? órarend.ÓrákAHét : órarend.ÓrákBHét)[i][x] = óra = new Óra(); óra.Csoportok = new string[] { csoport }; //Az állandó órarendben osztályonként csak egy csoport van egy órán óra.Azonosító = óranode.ChildNodes[2].InnerText; óra.TeljesNév = óranode.ChildNodes[2].Attributes["title"].Value; @@ -133,6 +133,7 @@ namespace Orarend s.CopyTo(ms); if (ms.Length > 2) { + ms.Seek(0, SeekOrigin.Begin); var serializer = new DataContractJsonSerializer(typeof(T)); return (T)serializer.ReadObject(ms); } @@ -148,7 +149,7 @@ namespace Orarend public static void OsztályBetöltés(Stream s) { - Osztályok = betöltés(s); + Osztályok = betöltés(s) ?? new Osztály[0]; } public static void BeállításBetöltés(Stream s) diff --git a/Orarend/Helyettesítés.cs b/Orarend/Helyettesítés.cs index 5f9ab35..287206e 100644 --- a/Orarend/Helyettesítés.cs +++ b/Orarend/Helyettesítés.cs @@ -1,18 +1,26 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; namespace Orarend { + [DataContract] public class Helyettesítés { + [DataMember] public byte EredetiNap { get; set; } + [DataMember] public byte EredetiSorszám { get; set; } + [DataMember] public Óra EredetiÓra { get; set; } + [DataMember] public byte ÚjNap { get; set; } + [DataMember] public byte ÚjSorszám { get; set; } + [DataMember] public Óra ÚjÓra { get; set; } } } diff --git a/Orarend/Osztály.cs b/Orarend/Osztály.cs index 998a8ea..310fbaf 100644 --- a/Orarend/Osztály.cs +++ b/Orarend/Osztály.cs @@ -1,17 +1,26 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; namespace Orarend { + [DataContract] public class Osztály { + [DataMember] public string Azonosító { get; internal set; } + [DataMember] public string Név { get; internal set; } internal Osztály() { } + + public override string ToString() + { + return Név; + } } } diff --git a/Orarend/Settings.cs b/Orarend/Settings.cs index 8e08aaf..4291f07 100644 --- a/Orarend/Settings.cs +++ b/Orarend/Settings.cs @@ -1,13 +1,16 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; namespace Orarend { + [DataContract] public class Settings { + [DataMember] public bool DarkTheme { get; set; } public void UseCommonNames() { diff --git a/Orarend/Tanár.cs b/Orarend/Tanár.cs index 512ff52..61196ca 100644 --- a/Orarend/Tanár.cs +++ b/Orarend/Tanár.cs @@ -1,14 +1,18 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; namespace Orarend { + [DataContract] public struct Tanár { + [DataMember] public string Azonosító { get; set; } + [DataMember] public string Név { get; set; } } } diff --git a/Orarend/Óra.cs b/Orarend/Óra.cs index 5e70a54..4f34963 100644 --- a/Orarend/Óra.cs +++ b/Orarend/Óra.cs @@ -1,21 +1,26 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; namespace Orarend { + [DataContract] public class Óra { + [DataMember] private ÓraTípus Típus { get; set; } + [DataMember] public Tanár Tanár { get; set; } + [DataMember] public string Terem { get; set; } /// /// Az órán résztvevő csoportok /// public string[] Csoportok { get; set; } - + public string Azonosító { get diff --git a/Orarend/ÓraTípus.cs b/Orarend/ÓraTípus.cs index a51867e..54c6064 100644 --- a/Orarend/ÓraTípus.cs +++ b/Orarend/ÓraTípus.cs @@ -1,11 +1,16 @@ using System.Collections.Generic; +using System.Runtime.Serialization; namespace Orarend { + [DataContract] public class ÓraTípus { + [DataMember] public string TeljesNév { get; set; } + [DataMember] public string Azonosító { get; set; } + [DataMember] public string EgyediNév { get; set; } /// diff --git a/Orarend/Órarend.cs b/Orarend/Órarend.cs index f895069..7f6e471 100644 --- a/Orarend/Órarend.cs +++ b/Orarend/Órarend.cs @@ -1,33 +1,41 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; namespace Orarend { + [DataContract] public class Órarend { /// /// Egy 6x16 2D tömb, az első koordináta a nap indexe, a második az óráé. Az értékek lehetnek null-ok, ha nincs óra az adott időpontban /// Egy hívás állítja be az órákat /// - public Óra[,] ÓrákAHét { get; } = new Óra[6, 16]; + [DataMember] + public Óra[][] ÓrákAHét { get; private set; } = new Óra[6][] { new Óra[16], new Óra[16], new Óra[16], new Óra[16], new Óra[16], new Óra[16] }; /// /// Egy 6x16 2D tömb, az első koordináta a nap indexe, a második az óráé. Az értékek lehetnek null-ok, ha nincs óra az adott időpontban /// Egy hívás állítja be az órákat /// - public Óra[,] ÓrákBHét { get; } = new Óra[6, 16]; + [DataMember] + public Óra[][] ÓrákBHét { get; private set; } = new Óra[6][] { new Óra[16], new Óra[16], new Óra[16], new Óra[16], new Óra[16], new Óra[16] }; //Multidimensional arrays are not supported (serialization) /// /// Egy hívás állítja be /// + [DataMember] public string Név { get; set; } + [DataMember] public Osztály Osztály { get; set; } /// /// Egy 16 elemű tömb az órák kezdő időpontjaival /// - public TimeSpan[] Órakezdetek { get; } = new TimeSpan[16]; - public List Csoportok { get; } + [DataMember] + public TimeSpan[] Órakezdetek { get; private set; } = new TimeSpan[16]; + [DataMember] + public List Csoportok { get; private set; } = new List(); //A private set kell a serialization miatt /// /// Létrehoz egy új órarendet @@ -39,7 +47,12 @@ namespace Orarend { Név = név; Osztály = osztály; - Csoportok = new List(csoportok.Replace("Egész osztály", "").Trim().Split(' ')); + Csoportok.AddRange(csoportok.Replace("Egész osztály", "").Trim().Split(' ')); + } + + public override string ToString() + { + return Név; } } } diff --git a/OrarendAndroidApp/EditActivity.cs b/OrarendAndroidApp/EditActivity.cs new file mode 100644 index 0000000..4167ac2 --- /dev/null +++ b/OrarendAndroidApp/EditActivity.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using Android.App; +using Android.Content; +using Android.OS; +using Android.Runtime; +using Android.Views; +using Android.Widget; + +namespace OrarendAndroidApp +{ + [Activity(Label = "AddActivity", Theme = "@android:style/Theme.Holo.Light")] + public class EditActivity : Activity + { + protected override void OnCreate(Bundle savedInstanceState) + { + base.OnCreate(savedInstanceState); + + // Create your application here + } + } +} \ No newline at end of file diff --git a/OrarendAndroidApp/MainActivity.cs b/OrarendAndroidApp/MainActivity.cs index e9e3778..c009bb5 100644 --- a/OrarendAndroidApp/MainActivity.cs +++ b/OrarendAndroidApp/MainActivity.cs @@ -16,7 +16,7 @@ using System.IO; namespace OrarendAndroidApp { - [Activity(Label = "Órarend", MainLauncher = true, Icon = "@drawable/icon", Theme = "@android:style/Theme.Holo.Light")] + [Activity(Label = "Órarend", MainLauncher = true, Theme = "@android:style/Theme.Holo.Light")] public class MainActivity : Activity { private Handler handler; @@ -28,8 +28,7 @@ namespace OrarendAndroidApp SetContentView(Resource.Layout.MainLayout); ActionBar.SetDisplayShowTitleEnabled(false); ActionBar.CustomView = FindViewById(Resource.Id.spinner); - handler = new Handler(); - new StreamReader(OpenFileInput("osztaly")).ReadToEnd(); //TODO: TMP, fix "[{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]" + handler = new Handler(); string[] list = FileList(); if (list.Contains("beallitasok")) API.BeállításBetöltés(OpenFileInput("beallitasok")); @@ -37,13 +36,35 @@ namespace OrarendAndroidApp API.ÓrarendBetöltés(OpenFileInput("orarend")); if (list.Contains("osztaly")) API.OsztályBetöltés(OpenFileInput("osztaly")); - if (list.Contains("osztaly")) - API.OsztályBetöltés(OpenFileInput("osztaly")); - if (API.Osztályok == null || API.Osztályok.Length == 0) - ÓrarendFrissítés(); + if (list.Contains("helyettesites")) + API.HelyettesítésBetöltés(OpenFileInput("helyettesites")); var timer = new Timer(CsengőTimer, null, TimeSpan.Zero, new TimeSpan(0, 0, 1)); } + private void osztálylistafrissítés() + { + handler.Post(() => + { + var list = FindViewById(Resource.Id.spinner); + list.Adapter = new ArrayAdapter(this, Resource.Layout.simple_list_item_1, API.Órarendek); + list.ItemSelected += ÓrarendClick; + + + bool a = API.Órarendek == null; + bool ab = API.Osztályok == null; + bool b = API.Osztályok.Any(o => o == null); + var osz = API.Osztályok.First(o => o.Azonosító == "12.b|2"); + var ór = new Órarend("Teszt", osz, ""); + API.Órarendek.Add(ór); //TODO: TMP + API.Órarendek.Add(new Órarend("Teszt2", API.Osztályok.First(o => o.Azonosító == "10.b|2"), "")); //TODO: TMP + }); + } + + private void ÓrarendClick(object sender, AdapterView.ItemSelectedEventArgs e) + { + órarend = API.Órarendek[e.Position]; + } + private void addCell(string text, Color color, TableRow tr1, bool clickable = false, int[] tag = null) { TextView textview = new TextView(this); @@ -66,7 +87,7 @@ namespace OrarendAndroidApp handler.Post(() => { bar.Visibility = ViewStates.Gone; - Toast.MakeText(this, "Helyettesítések frissítve", ToastLength.Short); + Toast.MakeText(this, "Helyettesítések frissítve", ToastLength.Short).Show(); }); }); } @@ -93,13 +114,13 @@ namespace OrarendAndroidApp addCell("Péntek", Color.Black, tr); addCell("Szombat", Color.Black, tr); table.AddView(tr, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent)); - for (int j = 0; j < órarend.ÓrákAHét.GetLength(1); j++) + for (int j = 0; j < órarend.ÓrákAHét.GetLength(1); j++) //TODO: GetLength fix { tr = new TableRow(this); bool notnull = false; for (int i = 0; i < órarend.ÓrákAHét.GetLength(0); i++) { //Kihagyja az üres sorokat - if (órarend.ÓrákAHét[i, j] != null) + if (órarend.ÓrákAHét[i][j] != null) { notnull = true; break; @@ -109,13 +130,14 @@ namespace OrarendAndroidApp { addCell((j + 1).ToString(), Color.Black, tr); for (int i = 0; i < órarend.ÓrákAHét.GetLength(0); i++) - addCell(órarend.ÓrákAHét[i, j] != null ? órarend.ÓrákAHét[i, j].EgyediNév : "", Color.Black, tr, true, new int[2] { i, j }); + addCell(órarend.ÓrákAHét[i][j] != null ? órarend.ÓrákAHét[i][j].EgyediNév : "", Color.Black, tr, true, new int[2] { i, j }); table.AddView(tr, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent)); } } } bar.Visibility = ViewStates.Gone; - Toast.MakeText(this, "Órarend és osztálylista frissítve", ToastLength.Long); + Toast.MakeText(this, "Órarend és osztálylista frissítve", ToastLength.Long).Show(); + osztálylistafrissítés(); }); }); } @@ -128,7 +150,7 @@ namespace OrarendAndroidApp { var tv = (TextView)sender; var ij = (int[])tv.Tag; - Óra óra = órarend.ÓrákAHét[ij[0], ij[1]]; + Óra óra = órarend.ÓrákAHét[ij[0]][ij[1]]; if (óra == null) return; if (selected != null && selected != sender) @@ -150,6 +172,10 @@ namespace OrarendAndroidApp public override bool OnCreateOptionsMenu(IMenu menu) { MenuInflater.Inflate(Resource.Menu.main_menu_light, menu); + if (API.Osztályok == null || API.Osztályok.Length == 0) + ÓrarendFrissítés(); + else + osztálylistafrissítés(); return base.OnCreateOptionsMenu(menu); } @@ -162,14 +188,24 @@ namespace OrarendAndroidApp HelyettesítésFrissítés(); break; } - case Resource.Id.menu_add: //TODO - break; - case Resource.Id.menu_edit: //TODO - break; + case Resource.Id.menu_add: + { + var intent = new Intent(this, typeof(EditActivity)); + intent.PutExtra("mode", "add"); + StartActivity(intent); + break; + } + case Resource.Id.menu_edit: + { + var intent = new Intent(this, typeof(EditActivity)); + intent.PutExtra("mode", "edit"); //Az aktuális órarend elérhető + StartActivity(intent); + break; + } case Resource.Id.menu_preferences: //TODO break; - case Resource.Id.menu_fullrefresh: //TODO: Megjelenítés frissítése - { //TODO: Beállítások mentése + case Resource.Id.menu_fullrefresh: + { ÓrarendFrissítés(); break; } @@ -202,11 +238,13 @@ namespace OrarendAndroidApp { handler.Post(() => { - if (órarend == null) - return; var kezdveg = FindViewById(Resource.Id.kezdvegTV); - //var most = DateTime.Now - DateTime.Today; - var most = new TimeSpan(10, 0, 0) + (DateTime.Now - DateTime.Today - new TimeSpan(22, 0, 0)); + if (órarend == null) + { + kezdveg.Text = "Nincs órarend kiválasztva"; + return; + } + var most = DateTime.Now - DateTime.Today; bool talált = false; var kovora = FindViewById(Resource.Id.kovoraTV); for (int i = 0; i < órarend.Órakezdetek.Length - 1; i++) @@ -237,7 +275,7 @@ namespace OrarendAndroidApp kovora.Visibility = ViewStates.Invisible; } int x = (int)DateTime.Today.DayOfWeek - 1; - var óra = órarend.ÓrákAHét[x, i]; + var óra = órarend.ÓrákAHét[x][i]; if (x < 6 && óra != null) { kovora.Text = "Következő óra: " + óra.EgyediNév + "\n" + óra.Terem + "\n" + óra.Tanár.Név+"\n"+"ASD"; @@ -252,7 +290,6 @@ namespace OrarendAndroidApp kezdveg.Text = "Nincs több óra ma"; kovora.Visibility = ViewStates.Invisible; } - kezdveg.Visibility = ViewStates.Visible; }); //TODO: Az egészet függőlegesen görgethetővé tenni } } diff --git a/OrarendAndroidApp/OrarendAndroidApp.csproj b/OrarendAndroidApp/OrarendAndroidApp.csproj index ed283a1..b58b1b0 100644 --- a/OrarendAndroidApp/OrarendAndroidApp.csproj +++ b/OrarendAndroidApp/OrarendAndroidApp.csproj @@ -47,6 +47,7 @@ + @@ -58,6 +59,9 @@ AndroidResource + + AndroidResource + diff --git a/OrarendAndroidApp/Resources/Resource.Designer.cs b/OrarendAndroidApp/Resources/Resource.Designer.cs index ab352b2..388cb6d 100644 --- a/OrarendAndroidApp/Resources/Resource.Designer.cs +++ b/OrarendAndroidApp/Resources/Resource.Designer.cs @@ -102,32 +102,35 @@ namespace OrarendAndroidApp // aapt resource value: 0x7f06000b public const int kovoraTV = 2131099659; - // aapt resource value: 0x7f06000e - public const int menu_add = 2131099662; - // aapt resource value: 0x7f06000f - public const int menu_edit = 2131099663; - - // aapt resource value: 0x7f060011 - public const int menu_fullrefresh = 2131099665; + public const int menu_add = 2131099663; // aapt resource value: 0x7f060010 - public const int menu_preferences = 2131099664; + public const int menu_edit = 2131099664; - // aapt resource value: 0x7f06000d - public const int menu_refresh = 2131099661; + // aapt resource value: 0x7f060012 + public const int menu_fullrefresh = 2131099666; + + // aapt resource value: 0x7f060011 + public const int menu_preferences = 2131099665; + + // aapt resource value: 0x7f06000e + public const int menu_refresh = 2131099662; // aapt resource value: 0x7f060006 public const int nevTV = 2131099654; + // aapt resource value: 0x7f06000c + public const int osztalylistaTV = 2131099660; + // aapt resource value: 0x7f060005 public const int pozTV = 2131099653; // aapt resource value: 0x7f060003 public const int progressBar1 = 2131099651; - // aapt resource value: 0x7f06000c - public const int spinner = 2131099660; + // aapt resource value: 0x7f06000d + public const int spinner = 2131099661; // aapt resource value: 0x7f060002 public const int tableLayout1 = 2131099650; @@ -154,6 +157,9 @@ namespace OrarendAndroidApp // aapt resource value: 0x7f030000 public const int MainLayout = 2130903040; + // aapt resource value: 0x7f030001 + public const int simple_list_item_1 = 2130903041; + static Layout() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); diff --git a/OrarendAndroidApp/Resources/layout/MainLayout.axml b/OrarendAndroidApp/Resources/layout/MainLayout.axml index 52b65a1..e0d5bd9 100644 --- a/OrarendAndroidApp/Resources/layout/MainLayout.axml +++ b/OrarendAndroidApp/Resources/layout/MainLayout.axml @@ -85,13 +85,13 @@ android:visibility="gone" /> + android:visibility="visible" /> + \ No newline at end of file diff --git a/OrarendAndroidApp/Resources/layout/simple_list_item_1.axml b/OrarendAndroidApp/Resources/layout/simple_list_item_1.axml new file mode 100644 index 0000000..b84d2d9 --- /dev/null +++ b/OrarendAndroidApp/Resources/layout/simple_list_item_1.axml @@ -0,0 +1,10 @@ + + \ No newline at end of file diff --git a/OrarendAndroidApp/Resources/menu/main_menu_light.axml b/OrarendAndroidApp/Resources/menu/main_menu_light.axml index c44edb7..5a07241 100644 --- a/OrarendAndroidApp/Resources/menu/main_menu_light.axml +++ b/OrarendAndroidApp/Resources/menu/main_menu_light.axml @@ -2,17 +2,17 @@