Számos TODO elvégezve, javítások - Minden jó

- For ciklus az egy időben tartott órákhoz
- Ha nem sikerül a betöltés, null-t ad vissza
- Most már elmenti az óra csoportját is
- Az órarendlista most már rendesen frissül
- Most már nem ír teljes stack trace-t, ha hálózati hiba miatt nem tudott frissíteni
- Megszünteti az óra kijelölését órarendváltáskor/frissítéskor
- Egy TextView használata a kiválasztott órához
- Csoport megjelenítése
- A szerkesztés után megfelelően frissül a felület
- Órarend törlés működik
This commit is contained in:
Norbi Peti 2017-02-20 01:14:57 +01:00
parent 6c9f953789
commit d7bd486071
7 changed files with 218 additions and 167 deletions

View file

@ -72,25 +72,29 @@ namespace Orarend
int x = int.Parse(node.FirstChild.InnerText) - 1;
órarend.Órakezdetek[x] = TimeSpan.Parse(node.FirstChild.Attributes["title"].Value.Split('-')[0].Trim());
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];
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();
ó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;
óra.Terem = óranode.ChildNodes[3].InnerText.Trim(' ', '(', ')');
óra.Tanár = new Tanár
for (int j = 0; j < óranode.ChildNodes.Count; j += 6)
{
Azonosító = óranode.ChildNodes[4].InnerText,
Név = óranode.ChildNodes[4].Attributes["title"].Value
};
var csoport = óranode.ChildNodes[j].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();
óra.Csoportok = new string[] { csoport }; //Az állandó órarendben osztályonként csak egy csoport van egy órán
óra.Azonosító = óranode.ChildNodes[j + 2].InnerText;
óra.TeljesNév = óranode.ChildNodes[j + 2].Attributes["title"].Value;
óra.Terem = óranode.ChildNodes[j + 3].InnerText.Trim(' ', '(', ')');
óra.Tanár = new Tanár
{
Azonosító = óranode.ChildNodes[j + 4].InnerText,
Név = óranode.ChildNodes[j + 4].Attributes["title"].Value
};
break;
}
}
break;
}
@ -133,9 +137,16 @@ 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);
try
{
ms.Seek(0, SeekOrigin.Begin);
var serializer = new DataContractJsonSerializer(typeof(T));
return (T)serializer.ReadObject(ms);
}
catch
{
return default(T);
}
}
return default(T);
}
@ -174,7 +185,7 @@ namespace Orarend
}
}
private static void ÓrarendMentés(Stream s)
public static void ÓrarendMentés(Stream s)
{
mentés(s, Órarendek.ToArray());
}

View file

@ -19,6 +19,7 @@ namespace Orarend
/// <summary>
/// Az órán résztvevő csoportok
/// </summary>
[DataMember]
public string[] Csoportok { get; set; }
public string Azonosító

View file

@ -10,6 +10,7 @@ using Android.Runtime;
using Android.Views;
using Android.Widget;
using Orarend;
using Android.Graphics;
namespace OrarendAndroidApp
{
@ -39,6 +40,35 @@ namespace OrarendAndroidApp
FindViewById<EditText>(Resource.Id.csoportokEditText).Text = órarend.Csoportok.Aggregate((a, b) => a + " " + b);
}
FindViewById<Button>(Resource.Id.saveButton).Click += SaveButtonClick;
var deleteButton = FindViewById<Button>(Resource.Id.deleteButton);
if (add)
deleteButton.Visibility = ViewStates.Gone;
else
{
deleteButton.SetBackgroundColor(Color.DarkRed);
deleteButton.Click += DeleteButtonClick;
Intent.Extras.PutBoolean("deleted", false);
}
}
private void DeleteButtonClick(object sender, EventArgs e)
{
new AlertDialog.Builder(this).SetTitle("Törlés").SetMessage("Biztosan törlöd ezt az órarendet?")
.SetPositiveButton("Igen", (s, ea) =>
{ //Törlés
API.Órarendek.RemoveAt(index);
var intent = new Intent(Intent);
intent.PutExtra("deleted", true);
((AlertDialog)s).Dismiss();
((AlertDialog)s).Dispose();
API.ÓrarendMentés(OpenFileOutput("orarend", FileCreationMode.Private));
SetResult(Result.Ok, intent);
Finish();
}).SetNegativeButton("Nem", (s, ea) =>
{
((AlertDialog)s).Dismiss();
((AlertDialog)s).Dispose();
}).Show();
}
private void SaveButtonClick(object sender, EventArgs e)
@ -54,7 +84,9 @@ namespace OrarendAndroidApp
órarend.Csoportok = csoportok.Split(' ');
}
else
API.Órarendek.Add(new Órarend(név, osztály, csoportok)); //TODO: Órarend törlése
API.Órarendek.Add(new Órarend(név, osztály, csoportok));
API.ÓrarendMentés(OpenFileOutput("orarend", FileCreationMode.Private));
SetResult(Result.Ok, Intent);
Finish();
}
}

View file

@ -13,6 +13,7 @@ using System.Collections.Generic;
using System.Threading.Tasks;
using System.Threading;
using System.IO;
using System.Net;
namespace OrarendAndroidApp
{
@ -21,6 +22,8 @@ namespace OrarendAndroidApp
{
private Handler handler;
private Órarend órarend;
private const int EDIT_ADD_ACT_REQUEST = 1;
protected override void OnCreate(Bundle bundle)
{
@ -51,9 +54,17 @@ namespace OrarendAndroidApp
handler.Post(() =>
{
var list = FindViewById<Spinner>(Resource.Id.spinner);
var adapter = (ArrayAdapter)list.Adapter ?? new ArrayAdapter(this, Resource.Layout.simple_list_item_1, API.Órarendek);
ArrayAdapter adapter;
if (list.Adapter != null)
{
adapter = (ArrayAdapter)list.Adapter;
adapter.Clear();
adapter.AddAll(API.Órarendek);
}
else
adapter = new ArrayAdapter(this, Resource.Layout.simple_list_item_1, API.Órarendek);
list.Adapter = adapter;
adapter.NotifyDataSetChanged(); //TODO: Teszt
adapter.NotifyDataSetChanged();
list.ItemSelected += ÓrarendClick;
//list.SetSelection(list.SelectedItemPosition); //Szöveg frissítése - TODO: Teszt
});
@ -94,19 +105,30 @@ namespace OrarendAndroidApp
private void ÓrarendFrissítés(Órarend ór = null)
{ //TODO: Meghívni minden tervezett alkalommal; hozzáadásnál csak a hozzáadott órarendet frissítse
var bar = FindViewById<ProgressBar>(Resource.Id.progressBar1);
handler.Post(() => bar.Visibility = ViewStates.Visible);
API.Frissítés(OpenFileOutput("orarend", FileCreationMode.Private), OpenFileOutput("osztaly", FileCreationMode.Private), ór).ContinueWith(t =>
try
{
handler.Post(() =>
var bar = FindViewById<ProgressBar>(Resource.Id.progressBar1);
handler.Post(() => bar.Visibility = ViewStates.Visible);
API.Frissítés(OpenFileOutput("orarend", FileCreationMode.Private), OpenFileOutput("osztaly", FileCreationMode.Private), ór).ContinueWith(t =>
{
if (TaskHiba(t) && órarend != null && (ór == null || ór == órarend))
órarendfrissítés();
bar.Visibility = ViewStates.Gone;
órarendlistafrissítés();
Toast.MakeText(this, "Órarend és osztálylista frissítve", ToastLength.Long).Show();
handler.Post(() =>
{
if (TaskHiba(t) && órarend != null && (ór == null || ór == órarend))
órarendfrissítés();
bar.Visibility = ViewStates.Gone;
órarendlistafrissítés();
Toast.MakeText(this, "Órarend" + (ór == null ? "ek" : "") + " és osztálylista frissítve", ToastLength.Short).Show();
});
});
});
}
catch(WebException)
{
Hiba("Nem sikerült az órarend" + (ór == null ? "ek" : "") + "et frissíteni");
}
catch(System.Exception e)
{
Hiba(e.ToString());
}
}
private void órarendfrissítés()
@ -114,6 +136,7 @@ namespace OrarendAndroidApp
var table = FindViewById<TableLayout>(Resource.Id.tableLayout1);
if (table.ChildCount > 1)
table.RemoveViews(1, table.ChildCount - 1);
FindViewById<TextView>(Resource.Id.kivoraTV).Visibility = ViewStates.Gone;
TableRow tr = new TableRow(this);
addCell("", Color.Black, tr);
addCell("Hétfő", Color.Black, tr);
@ -160,16 +183,14 @@ namespace OrarendAndroidApp
selected.SetBackgroundResource(Resource.Drawable.cell_shape_light);
tv.SetBackgroundResource(Resource.Drawable.cell_shape_selected_light);
selected = tv;
FindViewById<TextView>(Resource.Id.pozTV).Text = ((TextView)((TableRow)FindViewById<TableLayout>(Resource.Id.tableLayout1).GetChildAt(1)).GetChildAt(ij[0] + 1)).Text + " " + (ij[1] + 1) + ". óra";
FindViewById<TextView>(Resource.Id.pozTV).Visibility = ViewStates.Visible;
FindViewById<TextView>(Resource.Id.nevTV).Text = óra.TeljesNév;
FindViewById<TextView>(Resource.Id.nevTV).Visibility = ViewStates.Visible;
FindViewById<TextView>(Resource.Id.teremTV).Text = óra.Terem;
FindViewById<TextView>(Resource.Id.teremTV).Visibility = ViewStates.Visible;
FindViewById<TextView>(Resource.Id.tanarTV).Text = óra.Tanár.Név;
FindViewById<TextView>(Resource.Id.tanarTV).Visibility = ViewStates.Visible;
FindViewById<TextView>(Resource.Id.idoTV).Text = órarend.Órakezdetek[ij[1]].ToString("hh\\:mm") + "-" + órarend.Órakezdetek[ij[1]].Add(new TimeSpan(0, 45, 0)).ToString("hh\\:mm");
FindViewById<TextView>(Resource.Id.idoTV).Visibility = ViewStates.Visible;
var kivora = FindViewById<TextView>(Resource.Id.kivoraTV);
kivora.Text = ((TextView)((TableRow)FindViewById<TableLayout>(Resource.Id.tableLayout1).GetChildAt(1)).GetChildAt(ij[0] + 1)).Text + " " + (ij[1] + 1) + ". óra\n"
+ óra.TeljesNév + "\n"
+ óra.Terem + "\n"
+ óra.Tanár.Név + "\n"
+ órarend.Órakezdetek[ij[1]].ToString("hh\\:mm") + "-" + órarend.Órakezdetek[ij[1]].Add(new TimeSpan(0, 45, 0)).ToString("hh\\:mm") + "\n"
+ óra.Csoportok.Aggregate((a, b) => a + ", " + b);
kivora.Visibility = ViewStates.Visible;
}
public override bool OnCreateOptionsMenu(IMenu menu)
@ -195,7 +216,7 @@ namespace OrarendAndroidApp
{
var intent = new Intent(this, typeof(EditActivity));
intent.PutExtra("add", true);
StartActivity(intent);
StartActivityForResult(intent, EDIT_ADD_ACT_REQUEST);
break;
}
case Resource.Id.menu_edit:
@ -203,7 +224,7 @@ namespace OrarendAndroidApp
var intent = new Intent(this, typeof(EditActivity));
intent.PutExtra("add", false);
intent.PutExtra("index", API.Órarendek.IndexOf(órarend));
StartActivity(intent);
StartActivityForResult(intent, EDIT_ADD_ACT_REQUEST);
break;
}
case Resource.Id.menu_preferences: //TODO
@ -251,6 +272,12 @@ namespace OrarendAndroidApp
var most = DateTime.Now - DateTime.Today;
bool talált = false;
var kovora = FindViewById<TextView>(Resource.Id.kovoraTV);
if (órarend.Órakezdetek[0] == TimeSpan.Zero)
{ //Még nincsenek beállítva a kezdetek
kezdveg.Text = "Betöltés";
kovora.Visibility = ViewStates.Invisible;
return;
}
for (int i = 0; i < órarend.Órakezdetek.Length - 1; i++)
{
var vége = órarend.Órakezdetek[i].Add(new TimeSpan(0, 45, 0));
@ -262,15 +289,7 @@ namespace OrarendAndroidApp
talált = true;
}
else
{
if (órarend.Órakezdetek[i] == TimeSpan.Zero)
{ //Még nincsenek beállítva a kezdetek
kezdveg.Text = "Betöltés";
talált = true;
break;
}
continue;
}
}
else
{
@ -281,10 +300,10 @@ namespace OrarendAndroidApp
int x = (int)DateTime.Today.DayOfWeek - 1;
if (x == -1) //Vasárnap
break;
var óra = órarend.ÓrákAHét[x][i];
if (x < 6 && óra != null)
Óra óra;
if (x < 6 && (óra = órarend.ÓrákAHét[x][i]) != null)
{
kovora.Text = "Következő óra: " + óra.EgyediNév + "\n" + óra.Terem + "\n" + óra.Tanár.Név;
kovora.Text = "Következő óra: " + óra.EgyediNév + "\n" + óra.Terem + "\n" + óra.Tanár.Név + "\n" + óra.Csoportok.Aggregate((a, b) => a + ", " + b);
kovora.Visibility = ViewStates.Visible;
}
else
@ -296,15 +315,18 @@ namespace OrarendAndroidApp
kezdveg.Text = "Nincs több óra ma";
kovora.Visibility = ViewStates.Invisible;
}
}); //TODO: Az egészet függőlegesen görgethetővé tenni
});
}
public override void FinishFromChild(Activity child)
protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
{
base.FinishFromChild(child);
if (child is EditActivity)
base.OnActivityResult(requestCode, resultCode, data);
if (resultCode == Result.Canceled)
return;
if (requestCode == EDIT_ADD_ACT_REQUEST)
{
ÓrarendFrissítés(child.Intent.Extras.GetBoolean("add") ? API.Órarendek.Last() : API.Órarendek[child.Intent.Extras.GetInt("index")]);
if (!data.Extras.GetBoolean("deleted"))
ÓrarendFrissítés(data.Extras.GetBoolean("add") ? API.Órarendek.Last() : API.Órarendek[data.Extras.GetInt("index")]);
órarendlistafrissítés();
}
}

View file

@ -84,74 +84,71 @@ namespace OrarendAndroidApp
public partial class Id
{
// aapt resource value: 0x7f060008
public const int ScrollView01 = 2131099656;
// aapt resource value: 0x7f060009
public const int ScrollView01 = 2131099657;
// aapt resource value: 0x7f06000c
public const int actionMenuView1 = 2131099660;
// aapt resource value: 0x7f06000d
public const int ScrollView02 = 2131099661;
// aapt resource value: 0x7f060013
public const int actionMenuView1 = 2131099667;
// aapt resource value: 0x7f060005
public const int csoportokEditText = 2131099653;
// aapt resource value: 0x7f060009
public const int horizontalView = 2131099657;
// aapt resource value: 0x7f060008
public const int deleteButton = 2131099656;
// aapt resource value: 0x7f06000a
public const int horizontalView = 2131099658;
// aapt resource value: 0x7f060010
public const int kezdvegTV = 2131099664;
// aapt resource value: 0x7f06000f
public const int kivoraTV = 2131099663;
// aapt resource value: 0x7f060011
public const int idoTV = 2131099665;
// aapt resource value: 0x7f060012
public const int kezdvegTV = 2131099666;
// aapt resource value: 0x7f060013
public const int kovoraTV = 2131099667;
// aapt resource value: 0x7f060017
public const int menu_add = 2131099671;
// aapt resource value: 0x7f060018
public const int menu_edit = 2131099672;
// aapt resource value: 0x7f06001a
public const int menu_fullrefresh = 2131099674;
// aapt resource value: 0x7f060019
public const int menu_preferences = 2131099673;
public const int kovoraTV = 2131099665;
// aapt resource value: 0x7f060016
public const int menu_refresh = 2131099670;
public const int menu_add = 2131099670;
// aapt resource value: 0x7f06000e
public const int nevTV = 2131099662;
// aapt resource value: 0x7f060017
public const int menu_edit = 2131099671;
// aapt resource value: 0x7f060019
public const int menu_fullrefresh = 2131099673;
// aapt resource value: 0x7f060018
public const int menu_preferences = 2131099672;
// aapt resource value: 0x7f060015
public const int menu_refresh = 2131099669;
// aapt resource value: 0x7f060001
public const int névEditText = 2131099649;
// aapt resource value: 0x7f060014
public const int osztalylistaTV = 2131099668;
// aapt resource value: 0x7f060012
public const int osztalylistaTV = 2131099666;
// aapt resource value: 0x7f060003
public const int osztálySpinner = 2131099651;
// aapt resource value: 0x7f06000d
public const int pozTV = 2131099661;
// aapt resource value: 0x7f06000b
public const int progressBar1 = 2131099659;
// aapt resource value: 0x7f06000c
public const int progressBar1 = 2131099660;
// aapt resource value: 0x7f060007
public const int saveButton = 2131099655;
// aapt resource value: 0x7f060015
public const int spinner = 2131099669;
// aapt resource value: 0x7f06000e
public const int scrollLinearLayout = 2131099662;
// aapt resource value: 0x7f06000a
public const int tableLayout1 = 2131099658;
// aapt resource value: 0x7f060014
public const int spinner = 2131099668;
// aapt resource value: 0x7f060010
public const int tanarTV = 2131099664;
// aapt resource value: 0x7f06000f
public const int teremTV = 2131099663;
// aapt resource value: 0x7f06000b
public const int tableLayout1 = 2131099659;
// aapt resource value: 0x7f060000
public const int textView1 = 2131099648;

View file

@ -56,4 +56,7 @@
<Button
android:text="Mentés"
android:id="@+id/saveButton" />
<Button
android:text="Törlés"
android:id="@+id/deleteButton" />
</TableLayout>

View file

@ -8,7 +8,7 @@
<ScrollView
android:id="@+id/ScrollView01"
android:layout_height="wrap_content"
android:scrollbars="horizontal|vertical"
android:scrollbars="horizontal"
android:layout_width="match_parent"
android:layout_marginTop="5dip"
android:scrollbarStyle="outsideInset"
@ -37,73 +37,58 @@
</TableLayout>
</HorizontalScrollView>
</ScrollView>
<ScrollView
android:id="@+id/ScrollView02"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_marginTop="5dip"
android:scrollbarStyle="outsideInset"
android:fillViewport="true">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="25px"
android:minHeight="25px"
android:id="@+id/scrollLinearLayout">
<TextView
android:id="@+id/kivoraTV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Kiválasztott óra"
android:textSize="14sp"
android:textStyle="bold"
android:visibility="gone" />
<TextView
android:id="@+id/kezdvegTV"
android:text="Betöltés"
android:textSize="32sp"
android:textStyle="bold"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="visible" />
<TextView
android:id="@+id/kovoraTV"
android:text="Következő óra"
android:textSize="16sp"
android:textStyle="bold"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="invisible" />
<TextView
android:id="@+id/osztalylistaTV"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:visibility="gone" />
</LinearLayout>
</ScrollView>
<ActionMenuView
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/actionMenuView1" />
<TextView
android:id="@+id/pozTV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hétfő 2. óra"
android:textSize="14sp"
android:textStyle="bold"
android:visibility="gone" />
<TextView
android:id="@+id/nevTV"
android:text="Név"
android:textSize="14sp"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" />
<TextView
android:id="@+id/teremTV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="222"
android:textSize="14sp"
android:textStyle="bold"
android:visibility="gone" />
<TextView
android:id="@+id/tanarTV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tanár"
android:textSize="14sp"
android:textStyle="bold"
android:visibility="gone" />
<TextView
android:id="@+id/idoTV"
android:text="8:15-9:00"
android:textSize="14sp"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" />
<TextView
android:id="@+id/kezdvegTV"
android:text="Betöltés"
android:textSize="32sp"
android:textStyle="bold"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="visible" />
<TextView
android:id="@+id/kovoraTV"
android:text="Következő óra"
android:textSize="16sp"
android:textStyle="bold"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="invisible" />
<TextView
android:id="@+id/osztalylistaTV"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:visibility="gone" />
</LinearLayout>