Compare commits

...

13 commits
v1.2 ... master

Author SHA1 Message Date
Norbi Peti 87c056b690
Create README.md 2018-06-22 11:52:37 +02:00
Norbi Peti 866903b790
Aaand again (AppVeyor btw) 2018-02-12 20:37:33 +01:00
Norbi Peti 6854be7281
És megint 2018-02-12 20:34:11 +01:00
Norbi Peti 538fb1b47c
And again 2018-02-12 20:20:40 +01:00
Norbi Peti df6d850131
És megint 2018-02-12 20:17:31 +01:00
Norbi Peti 2ff64cd7c4
Let's try this again 2018-02-12 20:15:12 +01:00
Norbi Peti d3a987d526
ValueTuple frissítése, üres sornál hely. 2018-02-12 19:55:06 +01:00
Norbi Peti 074ed19236 Hely. szöveg felülre, óra elmarad és egyéb jav. 2017-10-03 17:00:02 +02:00
Norbi Peti 403fde579d Kisebb előrehaladás 2017-09-29 21:24:08 +02:00
Norbi Peti f4fc6d9278 Csengetés format javítva, long press elkezdve 2017-09-28 23:09:54 +02:00
Norbi Peti 34ede81265 Internethibát nem ír ki majdnem semmiképpen
És a percet 01 perc helyett 1 percként írja ki
2017-09-26 22:07:38 +02:00
Norbi Peti e5915c8082 A/B hét javítva, 09.01-től számolja már, egyéb jav.
- Kódanalízis, biztonsági attribútumok
- Hibakezelés javítva (internethiba, stb.)
2017-09-24 21:45:05 +02:00
Norbi Peti e46a588a9f Óra eltolás, auto. fr.-t nem jelzi egy ideig, gyakori óranevek 2017-09-07 23:07:18 +02:00
18 changed files with 234 additions and 81 deletions

View file

@ -9,6 +9,7 @@ using System.Linq;
using System.Net;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Security;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
@ -30,7 +31,7 @@ namespace Orarend
public Osztály[] osztályok { get; private set; } = new Osztály[0]; //Ez az initializáció csak akkor fut le, ha nem tölti be fájlból
[DataMember(Order = 2)]
public List<Órarend> órarendek { get; private set; } = new List<Órarend>();
//[DataMember]
[DataMember(Order = 3)]
public Settings beállítások { get; private set; } = new Settings();
/// <summary>
/// <para>Visszatér az osztályok listájával.</para>
@ -89,10 +90,11 @@ namespace Orarend
break;
default:
{
int x = int.Parse(node.FirstChild.InnerText) - 1;
int x = int.Parse(node.FirstChild.InnerText) - 1, y = x - Beállítások.ÓraOffset;
maxx = x > maxx ? x : maxx;
órarend.Órakezdetek[x] = TimeSpan.Parse(node.FirstChild.Attributes["title"].Value.Split('-')[0].Trim());
var órák = (ahét ? órarend.ÓrákAHét : órarend.ÓrákBHét);
if (y >= 0 && y < órarend.Órakezdetek.Length)
órarend.Órakezdetek[y] = TimeSpan.Parse(node.FirstChild.Attributes["title"].Value.Split('-')[0].Trim());
var órák = ahét ? órarend.ÓrákAHét : órarend.ÓrákBHét;
for (int i = 0; i < 5; i++) //Napok
{
var óranode = node.ChildNodes[i + 1].FirstChild;
@ -283,14 +285,16 @@ namespace Orarend
{
get
{
int jelenlegihét = CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(DateTime.Today, CalendarWeekRule.FirstFullWeek, DayOfWeek.Monday);
int jelenlegihét = napbólhét(DateTime.Today);
if (DateTime.Today.DayOfWeek > DayOfWeek.Friday || DateTime.Today.DayOfWeek == DayOfWeek.Sunday)
jelenlegihét++;
return jelenlegihét;
}
}
public static bool AHét { get => Hét % 2 == 0; }
private static int napbólhét(DateTime nap) => CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(nap, CalendarWeekRule.FirstFullWeek, DayOfWeek.Monday);
public static bool AHét { get => Hét % 2 == napbólhét(new DateTime(DateTime.Today.Year - (DateTime.Today.Month < 8 ? 1 : 0), 9, 1)) % 2; }
public static bool Fókusz
{
@ -308,7 +312,7 @@ namespace Orarend
private static DateTime utolsófrissítésplusz1óra = DateTime.MinValue;
public static event EventHandler<FrissítésEventArgs> Frissítéskor;
public class FrissítésEventArgs { public bool Siker { get; set; } = false; }
public class FrissítésEventArgs : EventArgs { public bool Siker { get; set; } = false; }
private static void frissítésHa1ÓraEltelt()
{
if (utolsófrissítésplusz1óra > DateTime.Now)
@ -335,8 +339,8 @@ namespace Orarend
//Ha az eredeti óra elmarad, és ide lesz helyezve egy másik, az áthelyezést mutassa
public static Órarend Órarend { get; private set; }
public static void ÓrarendKiválasztás(int position) => Órarend = Órarendek[position];
public static void ÓrarendKiválasztásTörlése() => Órarend = null;
public static void ÓrarendKiválasztás(int position) { Órarend = Órarendek[position]; CsengőTimer(null); }
public static void ÓrarendKiválasztásTörlése() { Órarend = null; CsengőTimer(null); }
private static bool nincstöbbóra = false;
public static event EventHandler<TimerEventArgs> CsengőTimerEvent;
@ -346,9 +350,9 @@ namespace Orarend
if (Órarend == null)
return new TimerEventArgs(null, "Nincs órarend kiválasztva");
var most = DateTime.Now - DateTime.Today;
//var most = new TimeSpan(9, 46, 0);
//var most = new TimeSpan(12, 46, 0);
bool talált = false;
if (Órarend.Órakezdetek[0] == TimeSpan.Zero) //Még nincsenek beállítva a kezdetek
if (Órarend.Órakezdetek[Beállítások.ÓraOffset] == TimeSpan.Zero) //Még nincsenek beállítva a kezdetek
return new TimerEventArgs(null, "Betöltés");
string kezdveg = null, kovora = null;
for (int i = 0; i < Órarend.Órakezdetek.Length - 1; i++)
@ -358,7 +362,7 @@ namespace Orarend
int x = (int)DateTime.Today.DayOfWeek - 1;
Óra óra;
var (innen, ide) = HelyettesítésInnenIde(Órarend, x, i);
Func<TimeSpan, string> óraperc = ts => ts.Hours > 0 ? ts.ToString("h\\ómm\\p") : ts.ToString("mm") + " perc";
Func<TimeSpan, string> óraperc = ts => ts.Hours > 0 ? ts.ToString("h\\ómm\\p") : ts.ToString("%m") + " perc";
if (x != -1 && x < 6 && (óra = ide != null ? ide.ÚjÓra : innen != null ? innen.EredetiNap != innen.ÚjNap || innen.EredetiSorszám != innen.ÚjSorszám ? null : innen.ÚjÓra : Órarend.Órák[x][i]) != null)
{ //-1: Vasárnap
if (most > Órarend.Órakezdetek[i])

View file

@ -33,6 +33,9 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<SignAssembly>false</SignAssembly>
</PropertyGroup>
<ItemGroup>
<Compile Include="API.cs" />
<Compile Include="Events\TimerEventArgs.cs" />
@ -50,8 +53,8 @@
<Reference Include="HtmlAgilityPack, Version=1.4.9.5, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\HtmlAgilityPack.1.4.9.5\lib\portable-net45+netcore45+wp8+MonoAndroid+MonoTouch\HtmlAgilityPack.dll</HintPath>
</Reference>
<Reference Include="System.ValueTuple, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.ValueTuple.4.3.0\lib\portable-net40+sl4+win8+wp8\System.ValueTuple.dll</HintPath>
<Reference Include="System.ValueTuple, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51">
<HintPath>..\packages\System.ValueTuple.4.4.0\lib\portable-net40+sl4+win8+wp8\System.ValueTuple.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
@ -65,4 +68,4 @@
<Target Name="AfterBuild">
</Target>
-->
</Project>
</Project>

View file

@ -2,6 +2,7 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
@ -15,6 +16,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: NeutralResourcesLanguage("en")]
[assembly: SecurityTransparent]
// Version information for an assembly consists of the following four values:
//

View file

@ -18,6 +18,7 @@ namespace Orarend
set(";prggy", "Programozás gyakorlat");
set("testns", "Tesi");
set("tapism", "Töri");
set("torten", "Töri");
set("matema", "Matek");
set("bioege", "Biosz");
set("foldra", "Föci");
@ -29,5 +30,8 @@ namespace Orarend
if (ÓraTípus.Típusok.ContainsKey(id))
ÓraTípus.Típusok[id].EgyediNév = name;
}
[DataMember]
public sbyte ÓraOffset { get; set; } = 0;
}
}

View file

@ -4,5 +4,5 @@
<package id="System.Collections" version="4.3.0" targetFramework="portable46-net451+win81" />
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="portable46-net451+win81" />
<package id="System.Runtime" version="4.3.0" targetFramework="portable46-net451+win81" />
<package id="System.ValueTuple" version="4.3.0" targetFramework="portable46-net451+win81" />
</packages>
<package id="System.ValueTuple" version="4.4.0" targetFramework="portable46-net451+win81" />
</packages>

View file

@ -20,6 +20,9 @@ namespace Orarend
/// </summary>
[DataMember]
public string[] Csoportok { get; set; }
[DataMember]
public bool ManuálisanHozzáadott { get; set; }
[DataMember]
public string Azonosító

View file

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Security;
using System.Text;
using System.Threading.Tasks;

View file

@ -2,6 +2,7 @@
using Android.App;
using Android.OS;
using Android.Preferences;
using System.Security;
namespace OrarendAndroidApp
{

View file

@ -12,6 +12,7 @@ using Android.Widget;
using Orarend;
using Android.Graphics;
using Android.Preferences;
using System.Security;
namespace OrarendAndroidApp
{

View file

@ -15,6 +15,7 @@ using System.IO;
using System.Net;
using Android.Preferences;
using Orarend.Events;
using System.Security;
namespace OrarendAndroidApp
{
@ -43,6 +44,11 @@ namespace OrarendAndroidApp
}
}
protected override void OnDestroy()
{
base.OnDestroy();
}
private void AndroidEnvironment_UnhandledExceptionRaiser(object sender, RaiseThrowableEventArgs e)
{
if (!e.Handled) Hiba("Kezeletlen hiba!\n" + e.Exception);
@ -82,6 +88,7 @@ namespace OrarendAndroidApp
órarendfrissítés();
}
[SecuritySafeCritical]
private void addCell(string text, Color color, TableRow tr1, (int, int)? tag = null)
{
TextView textview = new TextView(this);
@ -92,9 +99,13 @@ namespace OrarendAndroidApp
textview.Tag = tag.HasValue ? new JavaTuple<int, int>(tag.Value) : null;
textview.Clickable = true;
textview.Click += ÓraClick;
//textview.LongClick += ÓraLongClick;
RegisterForContextMenu(textview);
textview.ContextMenuCreated += ÓraContextMenuCreated;
tr1.AddView(textview);
}
[SecuritySafeCritical]
private class JavaTuple<T1, T2> : Java.Lang.Object
{
public (T1, T2) obj;
@ -107,7 +118,10 @@ namespace OrarendAndroidApp
var bar = FindViewById<ProgressBar>(Resource.Id.progressBar1);
//var menu = FindViewById<ActionMenuView>(Resource.Id.actionMenuView1);
Action loadstart = () => bar.Visibility = ViewStates.Visible;
handler.Post(loadstart);
if (internethiba)
handler.Post(loadstart);
else
handler.PostDelayed(loadstart, 500);
API.HelyettesítésFrissítés(() => OpenFileOutput(DATA_FILENAME, FileCreationMode.Private)).ContinueWith(t =>
{
handler.RemoveCallbacks(loadstart);
@ -125,11 +139,14 @@ namespace OrarendAndroidApp
});
}
private void ÓrarendFrissítés(Órarend ór = null)
private void ÓrarendFrissítés(bool auto, Órarend ór = null)
{
var bar = FindViewById<ProgressBar>(Resource.Id.progressBar1);
Action loadstart = () => bar.Visibility = ViewStates.Visible;
handler.Post(loadstart);
if (auto)
handler.PostDelayed(loadstart, 500);
else
handler.Post(loadstart);
API.Frissítés(() => OpenFileOutput(DATA_FILENAME, FileCreationMode.Private), ór).ContinueWith(t =>
{
handler.RemoveCallbacks(loadstart);
@ -150,6 +167,7 @@ namespace OrarendAndroidApp
private string[] Napok = new string[6] { "Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat" };
[SecuritySafeCritical]
private void órarendfrissítés()
{
var table = FindViewById<TableLayout>(Resource.Id.tableLayout1);
@ -170,7 +188,7 @@ namespace OrarendAndroidApp
bool notnull = false;
for (int i = 0; i < 6; i++)
{ //Kihagyja az üres sorokat
if (API.Órarend.Órák[i][j] != null) //TODO: Helyettesítéseket is figyelje
if (API.Órarend.Órák[i][j] != null && API.HelyettesítésInnenIde(API.Órarend, i, j).Item2 != null)
{
notnull = true;
break;
@ -191,7 +209,7 @@ namespace OrarendAndroidApp
for (int i = 0; i < 6; i++)
{
var (innen, ide) = API.HelyettesítésInnenIde(API.Órarend, i, j);
addCell(ide != null ? ide.ÚjÓra.EgyediNév : innen != null ? innen.EredetiNap != innen.ÚjNap || innen.EredetiSorszám != innen.ÚjSorszám ? "Áthelyezve" : innen.ÚjÓra?.EgyediNév ?? "elmarad" : API.Órarend.Órák[i][j]?.EgyediNév ?? "", innen == null ? (DarkTheme ? Color.WhiteSmoke : Color.Black) : Color.Red, tr, (i, j));
addCell(ide != null ? ide.ÚjÓra.EgyediNév : innen != null ? innen.EredetiNap != innen.ÚjNap || innen.EredetiSorszám != innen.ÚjSorszám ? "áthelyezve" : innen.ÚjÓra?.EgyediNév ?? "elmarad" : API.Órarend.Órák[i][j]?.EgyediNév ?? "", innen == null ? (DarkTheme ? Color.WhiteSmoke : Color.Black) : Color.Red, tr, (i, j));
}
table.AddView(tr, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent));
}
@ -200,6 +218,24 @@ namespace OrarendAndroidApp
handler.Post(() => MaiNaphozGörgetés());
}
private (int i, int j, Óra óra, Helyettesítés innen, Helyettesítés ide)? TV2Óra(TextView tv)
{
var ij = (JavaTuple<int, int>)tv.Tag;
int i, j;
Helyettesítés innen, ide;
Óra óra;
if (ij != null)
{
(i, j) = ij;
(innen, ide) = API.HelyettesítésInnenIde(API.Órarend, i, j);
if ((óra = API.Órarend.Órák[i][j]) == null && ide?.ÚjÓra == null)
return null;
}
else
return null;
return (i, j, óra, innen, ide);
}
/// <summary>
/// A cellát nem frissíti, csak a szöveget tünteti el
/// </summary>
@ -214,31 +250,19 @@ namespace OrarendAndroidApp
/// <summary>
/// Kiválasztja az adott órát
/// </summary>
[SecuritySafeCritical]
private void ÓraClick(object sender, EventArgs e)
{
var tv = (TextView)sender;
if (selected != null && selected != sender)
selected.SetBackgroundResource(DarkTheme ? Resource.Drawable.cell_shape_dark : Resource.Drawable.cell_shape_light);
Óra óra;
Helyettesítés helyettesítésInnen = null;
Helyettesítés helyettesítésIde = null;
var ij = (JavaTuple<int, int>)tv.Tag;
int i, j;
if (ij != null)
{
(i, j) = ij;
(helyettesítésInnen, helyettesítésIde) = API.HelyettesítésInnenIde(API.Órarend, i, j);
if ((óra = API.Órarend.Órák[i][j]) == null && helyettesítésIde?.ÚjÓra == null)
{
deselect();
return;
}
}
else
var x = TV2Óra(tv);
if (x == null)
{
deselect();
return;
}
var (i, j, óra, helyettesítésInnen, helyettesítésIde) = x?.ToTuple();
tv.SetBackgroundResource(DarkTheme ? Resource.Drawable.cell_shape_selected_dark : Resource.Drawable.cell_shape_selected_light);
selected = tv;
var kivora = FindViewById<TextView>(Resource.Id.kivoraTV);
@ -264,7 +288,8 @@ namespace OrarendAndroidApp
+ (helyettesítésInnen.ÚjÓra.Terem != óra.Terem ? "\nTerem: " + helyettesítésInnen.ÚjÓra.Terem : "")
+ (helyettesítésInnen.ÚjÓra.Tanár.Név != óra.Tanár.Név ? "\nTanár: " + helyettesítésInnen.ÚjÓra.Tanár.Név : "")
+ (helyettesítésInnen.ÚjÓra.Csoportok[0] != óra.Csoportok[0] ? "\nCsoport: " + helyettesítésInnen.ÚjÓra.Csoportok.Aggregate((a, b) => a + ", " + b) : "")
: "Az óra elmarad")
: helyettesítésIde != null && (helyettesítésIde.EredetiNap != helyettesítésIde.ÚjNap || helyettesítésIde.EredetiSorszám != helyettesítésIde.ÚjSorszám)
? "" : "Az óra elmarad") //Ha át lett helyezve ide másik óra, akkor nem kell kiírni, hogy elmarad ez az óra
+ (helyettesítésIde == null ? ""
: helyettesítésIde.EredetiNap != helyettesítésIde.ÚjNap || helyettesítésIde.EredetiSorszám != helyettesítésIde.ÚjSorszám
? "Áthelyezve: " + Napok[(int)helyettesítésIde.EredetiNap - 1] + " " + helyettesítésIde.EredetiSorszám + ". óra --> ide"
@ -274,7 +299,40 @@ namespace OrarendAndroidApp
+ (helyettesítésIde.ÚjÓra.Csoportok[0] != óra?.Csoportok[0] ? "\nCsoport: " + helyettesítésIde.ÚjÓra.Csoportok.Aggregate((a, b) => a + ", " + b) : "") //ˇˇ De ha változott, akkor nem
: "") //Ha a pozicíó nem változott, a fentebbi rész már kiírta az adatait
;
hely.Visibility = ViewStates.Visible;
hely.Visibility = hely.Text.Length > 0 ? ViewStates.Visible : ViewStates.Gone;
}
private void ÓraContextMenuCreated(object sender, View.CreateContextMenuEventArgs e)
{
switch (sender)
{
case TextView tv:
var x = TV2Óra(tv);
Óra óra;
if (x != null)
(_, _, óra, _, _) = x?.ToTuple();
else
óra = null;
if (óra == null)
{ //TODO
ÓraContextItemData.Add(e.Menu.Add("Hozzáadás"), () => StartActivity(new Intent(this, typeof(SettingsActivity))));
}
break;
default:
Hiba("Ismeretlen küldő a menühöz!");
break;
}
}
private Dictionary<IMenuItem, Action> ÓraContextItemData = new Dictionary<IMenuItem, Action>();
private T ctor<T>() where T : new() => new T();
public override bool OnContextItemSelected(IMenuItem item)
{
bool ret = ÓraContextItemData.ContainsKey(item);
if (ret)
ÓraContextItemData[item]();
return ret;
}
public override bool OnCreateOptionsMenu(IMenu menu)
@ -290,7 +348,7 @@ namespace OrarendAndroidApp
menu.FindItem(Resource.Id.menu_preferences).SetIcon(Resource.Drawable.ic_settings_white_24dp);
}
if (API.Osztályok == null || API.Osztályok.Length == 0)
ÓrarendFrissítés();
ÓrarendFrissítés(true);
else
órarendlistafrissítés();
return base.OnCreateOptionsMenu(menu);
@ -333,7 +391,7 @@ namespace OrarendAndroidApp
}
case Resource.Id.menu_fullrefresh:
{
ÓrarendFrissítés();
ÓrarendFrissítés(false);
break;
}
}
@ -358,13 +416,16 @@ namespace OrarendAndroidApp
{
if (ex is WebException wex)
{
if (internethiba || wex.Status != WebExceptionStatus.NameResolutionFailure)
Hiba("Nem sikerült csatlakozni az E-naplóhoz.\n" + wex.Message);
else if (wex.Status == WebExceptionStatus.ConnectFailure)
if (internethiba && wex.Status == WebExceptionStatus.ConnectFailure)
Hiba("Nem sikerült csatlakozni az E-naplóhoz.\nHa van internet, próbáld újraindítani az alkalmazást.");
else if (internethiba)
Hiba("Nem sikerült csatlakozni az E-naplóhoz.\n" + wex.Message);
}
else if (ex is InvalidOperationException oex && oex.Data.Contains("OERROR") && (string)oex.Data["OERROR"] == "CLS_NOT_FOUND")
ÓrarendFrissítés();
{
ÓrarendFrissítés(true);
Toast.MakeText(this, oex.Message, ToastLength.Short).Show();
}
else
Hiba(ex.ToString());
ret = false;
@ -378,14 +439,10 @@ namespace OrarendAndroidApp
{
var kezdveg = FindViewById<TextView>(Resource.Id.kezdvegTV);
var kovora = FindViewById<TextView>(Resource.Id.kovoraTV);
if (e.KövetkezőÓra == null)
kovora.Visibility = ViewStates.Invisible;
else
kovora.Text = e.KövetkezőÓra;
if (e.HátralévőIdő == null)
kezdveg.Visibility = ViewStates.Invisible;
else
kezdveg.Text = e.HátralévőIdő;
kovora.Visibility = e.KövetkezőÓra == null ? ViewStates.Invisible : ViewStates.Visible;
kovora.Text = e.KövetkezőÓra ?? "";
kezdveg.Visibility = e.HátralévőIdő == null ? ViewStates.Invisible : ViewStates.Visible;
kezdveg.Text = e.HátralévőIdő ?? "";
});
}
@ -398,7 +455,7 @@ namespace OrarendAndroidApp
return;
int index = data.Extras.GetBoolean("add") ? API.Órarendek.Count - 1 : data.Extras.GetInt("index");
if (!data.Extras.GetBoolean("deleted"))
ÓrarendFrissítés(API.Órarendek[index]);
ÓrarendFrissítés(false, API.Órarendek[index]);
else
{
API.ÓrarendKiválasztásTörlése();
@ -407,9 +464,13 @@ namespace OrarendAndroidApp
órarendlistafrissítés();
}
else if (requestCode == SETTINGS_ACT_REQUEST)
{
if (data?.Extras?.GetBoolean("offsetchanged") ?? false)
ÓrarendFrissítés(false);
Recreate();
}
}
public override void OnWindowFocusChanged(bool hasFocus)
{
base.OnWindowFocusChanged(hasFocus);

View file

@ -55,8 +55,8 @@
<Reference Include="mscorlib" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.ValueTuple, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.ValueTuple.4.3.0\lib\netstandard1.0\System.ValueTuple.dll</HintPath>
<Reference Include="System.ValueTuple, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51">
<HintPath>..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
@ -81,6 +81,7 @@
<AndroidResource Include="Resources\layout\EditLayout.axml">
<SubType>AndroidResource</SubType>
</AndroidResource>
<AndroidResource Include="Resources\menu\ora_menu.axml" />
</ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\values\Strings.xml" />
@ -155,4 +156,4 @@
<Target Name="AfterBuild">
</Target>
-->
</Project>
</Project>

View file

@ -111,8 +111,8 @@ namespace OrarendAndroidApp
// aapt resource value: 0x7f070008
public const int deleteButton = 2131165192;
// aapt resource value: 0x7f070011
public const int helyTV = 2131165201;
// aapt resource value: 0x7f070010
public const int helyTV = 2131165200;
// aapt resource value: 0x7f07000e
public const int horizontalView = 2131165198;
@ -120,8 +120,8 @@ namespace OrarendAndroidApp
// aapt resource value: 0x7f070012
public const int kezdvegTV = 2131165202;
// aapt resource value: 0x7f070010
public const int kivoraTV = 2131165200;
// aapt resource value: 0x7f070011
public const int kivoraTV = 2131165201;
// aapt resource value: 0x7f070013
public const int kovoraTV = 2131165203;
@ -212,6 +212,9 @@ namespace OrarendAndroidApp
// aapt resource value: 0x7f060000
public const int main_menu_light = 2131099648;
// aapt resource value: 0x7f060001
public const int ora_menu = 2131099649;
static Menu()
{
global::Android.Runtime.ResourceIdManager.UpdateIdValues();

View file

@ -55,14 +55,6 @@
android:isScrollContainer="true" />
</HorizontalScrollView>
</ScrollView>
<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/helyTV"
android:layout_width="wrap_content"
@ -72,6 +64,14 @@
android:textStyle="bold"
android:visibility="gone"
android:textColor="#FF0000" />
<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"

View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8" ?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_refresh"
android:title="Frissítés" />
<item
android:id="@+id/menu_add"
android:title="Hozzáadás" />
<item
android:id="@+id/menu_edit"
android:title="Szerkesztés" />
<item
android:id="@+id/menu_preferences"
android:title="Beállítások" />
<item
android:id="@+id/menu_fullrefresh"
android:title="Órarendfrissítés" />
</menu>

View file

@ -1,8 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:key="pref_theme"
android:title="Sötét téma"
android:summary="Sötét téma"
android:defaultValue="false" />
<CheckBoxPreference
android:key="pref_theme"
android:title="Sötét téma"
android:summary="Sötét téma"
android:defaultValue="false" />
<Preference
android:key="pref_commonnames"
android:title="Gyakori óranevek"
android:summary="Gyakori óranevek használata" />
<EditTextPreference
android:key="pref_offset"
android:title="Óra eltolás"
android:summary="Pl. ha 1, akkor az első óra 8:15-kor kezdődik."
android:defaultValue="0"
android:numeric="integer" />
</PreferenceScreen>

View file

@ -10,11 +10,13 @@ using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Preferences;
using Orarend;
using System.Security;
namespace OrarendAndroidApp
{
[Activity(Label = "Beállítások", Theme = "@android:style/Theme.Holo.Light")]
public class SettingsActivity : PreferenceActivity, ISharedPreferencesOnSharedPreferenceChangeListener
public class SettingsActivity : PreferenceActivity, ISharedPreferencesOnSharedPreferenceChangeListener, Preference.IOnPreferenceClickListener
{
protected override void OnCreate(Bundle savedInstanceState)
{
@ -26,14 +28,30 @@ namespace OrarendAndroidApp
base.OnCreate(savedInstanceState);
#pragma warning disable CS0618 // Type or member is obsolete
AddPreferencesFromResource(Resource.Xml.preferences);
FindPreference("pref_commonnames").OnPreferenceClickListener = this;
#pragma warning restore CS0618 // Type or member is obsolete
PreferenceManager.SetDefaultValues(this, Resource.Xml.preferences, false);
}
private Intent intent;
public void OnSharedPreferenceChanged(ISharedPreferences sharedPreferences, string key)
{
if (key == "pref_theme")
Recreate();
switch (key)
{
case "pref_theme":
Recreate();
break;
case "pref_commonnames":
API.Beállítások.UseCommonNames();
Toast.MakeText(this, "Óranevek frissítve", ToastLength.Short).Show();
break;
case "pref_offset":
API.Beállítások.ÓraOffset = sbyte.Parse(sharedPreferences.GetString(key, "0"));
intent = new Intent(Intent);
intent.PutExtra("offsetchanged", true);
SetResult(Result.Ok, intent);
break;
}
}
protected override void OnResume()
@ -47,5 +65,22 @@ namespace OrarendAndroidApp
base.OnPause();
PreferenceManager.GetDefaultSharedPreferences(this).UnregisterOnSharedPreferenceChangeListener(this);
}
public override void OnBackPressed()
{
SetResult(Result.Ok, intent);
//base.OnBackPressed();
Finish();
}
public bool OnPreferenceClick(Preference preference)
{
if (preference.Key == "pref_commonnames")
{
API.Beállítások.UseCommonNames();
Toast.MakeText(this, "Óranevek frissítve", ToastLength.Short).Show();
}
return true;
}
}
}

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="System.ValueTuple" version="4.3.0" targetFramework="monoandroid60" />
</packages>
<package id="System.ValueTuple" version="4.4.0" targetFramework="monoandroid60" />
</packages>

6
README.md Normal file
View file

@ -0,0 +1,6 @@
# Orarend
A school schedule app written in C# using Xamarin.
This app can obtain the schedule automatically from the school's website and update it as needed. Any temporary changes are marked red.
It downloads the site HTML and uses regex to fix some issues that the parser can't handle correctly and then parses the code.