Compare commits

..

No commits in common. "master" and "v1.2" have entirely different histories.
master ... v1.2

18 changed files with 81 additions and 234 deletions

View file

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

View file

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

View file

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

View file

@ -18,7 +18,6 @@ namespace Orarend
set(";prggy", "Programozás gyakorlat"); set(";prggy", "Programozás gyakorlat");
set("testns", "Tesi"); set("testns", "Tesi");
set("tapism", "Töri"); set("tapism", "Töri");
set("torten", "Töri");
set("matema", "Matek"); set("matema", "Matek");
set("bioege", "Biosz"); set("bioege", "Biosz");
set("foldra", "Föci"); set("foldra", "Föci");
@ -30,8 +29,5 @@ namespace Orarend
if (ÓraTípus.Típusok.ContainsKey(id)) if (ÓraTípus.Típusok.ContainsKey(id))
ÓraTípus.Típusok[id].EgyediNév = name; Ó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.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.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.Runtime" version="4.3.0" targetFramework="portable46-net451+win81" />
<package id="System.ValueTuple" version="4.4.0" targetFramework="portable46-net451+win81" /> <package id="System.ValueTuple" version="4.3.0" targetFramework="portable46-net451+win81" />
</packages> </packages>

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -55,6 +55,14 @@
android:isScrollContainer="true" /> android:isScrollContainer="true" />
</HorizontalScrollView> </HorizontalScrollView>
</ScrollView> </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 <TextView
android:id="@+id/helyTV" android:id="@+id/helyTV"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -64,14 +72,6 @@
android:textStyle="bold" android:textStyle="bold"
android:visibility="gone" android:visibility="gone"
android:textColor="#FF0000" /> 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 <TextView
android:id="@+id/kezdvegTV" android:id="@+id/kezdvegTV"
android:text="Betöltés" android:text="Betöltés"

View file

@ -1,18 +0,0 @@
<?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

@ -5,14 +5,4 @@
android:title="Sötét téma" android:title="Sötét téma"
android:summary="Sötét téma" android:summary="Sötét téma"
android:defaultValue="false" /> 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> </PreferenceScreen>

View file

@ -10,13 +10,11 @@ using Android.Runtime;
using Android.Views; using Android.Views;
using Android.Widget; using Android.Widget;
using Android.Preferences; using Android.Preferences;
using Orarend;
using System.Security;
namespace OrarendAndroidApp namespace OrarendAndroidApp
{ {
[Activity(Label = "Beállítások", Theme = "@android:style/Theme.Holo.Light")] [Activity(Label = "Beállítások", Theme = "@android:style/Theme.Holo.Light")]
public class SettingsActivity : PreferenceActivity, ISharedPreferencesOnSharedPreferenceChangeListener, Preference.IOnPreferenceClickListener public class SettingsActivity : PreferenceActivity, ISharedPreferencesOnSharedPreferenceChangeListener
{ {
protected override void OnCreate(Bundle savedInstanceState) protected override void OnCreate(Bundle savedInstanceState)
{ {
@ -28,30 +26,14 @@ namespace OrarendAndroidApp
base.OnCreate(savedInstanceState); base.OnCreate(savedInstanceState);
#pragma warning disable CS0618 // Type or member is obsolete #pragma warning disable CS0618 // Type or member is obsolete
AddPreferencesFromResource(Resource.Xml.preferences); AddPreferencesFromResource(Resource.Xml.preferences);
FindPreference("pref_commonnames").OnPreferenceClickListener = this;
#pragma warning restore CS0618 // Type or member is obsolete #pragma warning restore CS0618 // Type or member is obsolete
PreferenceManager.SetDefaultValues(this, Resource.Xml.preferences, false); PreferenceManager.SetDefaultValues(this, Resource.Xml.preferences, false);
} }
private Intent intent;
public void OnSharedPreferenceChanged(ISharedPreferences sharedPreferences, string key) public void OnSharedPreferenceChanged(ISharedPreferences sharedPreferences, string key)
{ {
switch (key) if (key == "pref_theme")
{
case "pref_theme":
Recreate(); 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() protected override void OnResume()
@ -65,22 +47,5 @@ namespace OrarendAndroidApp
base.OnPause(); base.OnPause();
PreferenceManager.GetDefaultSharedPreferences(this).UnregisterOnSharedPreferenceChangeListener(this); 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"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="System.ValueTuple" version="4.4.0" targetFramework="monoandroid60" /> <package id="System.ValueTuple" version="4.3.0" targetFramework="monoandroid60" />
</packages> </packages>

View file

@ -1,6 +0,0 @@
# 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.