Compare commits
13 commits
Author | SHA1 | Date | |
---|---|---|---|
87c056b690 | |||
866903b790 | |||
6854be7281 | |||
538fb1b47c | |||
df6d850131 | |||
2ff64cd7c4 | |||
d3a987d526 | |||
074ed19236 | |||
403fde579d | |||
f4fc6d9278 | |||
34ede81265 | |||
e5915c8082 | |||
e46a588a9f |
18 changed files with 234 additions and 81 deletions
|
@ -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])
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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:
|
||||
//
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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ó
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
using Android.App;
|
||||
using Android.OS;
|
||||
using Android.Preferences;
|
||||
using System.Security;
|
||||
|
||||
namespace OrarendAndroidApp
|
||||
{
|
||||
|
|
|
@ -12,6 +12,7 @@ using Android.Widget;
|
|||
using Orarend;
|
||||
using Android.Graphics;
|
||||
using Android.Preferences;
|
||||
using System.Security;
|
||||
|
||||
namespace OrarendAndroidApp
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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>
|
||||
|
|
11
OrarendAndroidApp/Resources/Resource.Designer.cs
generated
11
OrarendAndroidApp/Resources/Resource.Designer.cs
generated
|
@ -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();
|
||||
|
|
|
@ -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"
|
||||
|
|
18
OrarendAndroidApp/Resources/menu/ora_menu.axml
Normal file
18
OrarendAndroidApp/Resources/menu/ora_menu.axml
Normal 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>
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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
6
README.md
Normal 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.
|
Loading…
Reference in a new issue