using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using Android.Runtime;
using Android.Support.V4.App;
using Android.Support.V4.Content;
using Android.Support.V7.App;
using Android.Widget;
using GUTSchedule;
using GUTSchedule.Droid;
using GUTSchedule.Droid.Activities;
using System;
using System.Linq;
using System.Net.Http;
namespace GUT.Schedule.Droid.Activities
{
///
/// Splash screen activity. Loads init data
///
[Activity(MainLauncher = true, Theme = "@style/AppTheme.Light.SplashScreen")]
public class StartActivity : AppCompatActivity
{
TextView status;
protected override void OnCreate(Bundle savedInstanceState)
{
SetContentView(Resource.Layout.SplashScreen);
base.OnCreate(savedInstanceState);
status = FindViewById(Resource.Id.status);
PackageInfo version = PackageManager.GetPackageInfo(PackageName, PackageInfoFlags.MatchAll);
FindViewById(Resource.Id.version).Text = $"v{version.VersionName} (ci-id #{version.LongVersionCode})";
status.Text = Resources.GetText(Resource.String.permissionsCheckStatus);
if (ContextCompat.CheckSelfPermission(this, Android.Manifest.Permission.WriteCalendar) != Permission.Granted)
{
if (ActivityCompat.ShouldShowRequestPermissionRationale(this, Android.Manifest.Permission.WriteCalendar))
ShowDialog(Resources.GetText(Resource.String.calendarAccessTitle), Resources.GetText(Resource.String.calendarAccessRationale), RequestPermissions);
else
RequestPermissions();
}
else
Proceed();
}
private async void Proceed()
{
try
{
status.Text = Resources.GetText(Resource.String.calendarLoadingStatus);
Calendar.LoadCalendars();
if (Calendar.Calendars.Count == 0)
{
ShowDialog(Resources.GetText(Resource.String.createCalendarTitle), Resources.GetText(Resource.String.createCalendarMessage));
return;
}
status.Text = Resources.GetText(Resource.String.facultiesLoadingStatus);
MainActivity.Faculties = await Parser.GetFaculties();
}
catch (HttpRequestException e)
{
ShowDialog(e.Message, Resources.GetText(Resource.String.connectionFailMessage), Proceed, FinishAndRemoveTask, Resources.GetText(Resource.String.repeat), Resources.GetText(Resource.String.quit));
return;
}
catch (Exception e)
{
ShowDialog(e.GetType().ToString(), e.Message, FinishAndRemoveTask);
return;
}
StartActivity(new Intent(this, typeof(MainActivity)));
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Permission[] grantResults)
{
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults.All(i => i == Permission.Granted))
Proceed();
else
ShowDialog(Resources.GetText(Resource.String.calendarAccessTitle), Resources.GetText(Resource.String.calendarAccessRationale), RequestPermissions);
}
private void RequestPermissions() =>
ActivityCompat.RequestPermissions(this, new[]
{
Android.Manifest.Permission.ReadCalendar,
Android.Manifest.Permission.WriteCalendar,
Android.Manifest.Permission.Internet
}, 0);
private void ShowDialog(string title, string content, Action posAction = null, Action negAction = null, string posActionLabel = null, string negActionLabel = null)
{
Android.Support.V7.App.AlertDialog.Builder builder = new Android.Support.V7.App.AlertDialog.Builder(this);
builder.SetMessage(content)
.SetTitle(title).SetPositiveButton(posActionLabel ?? "OK", (s, e) => posAction?.Invoke());
if (negAction != null)
builder.SetNegativeButton(negActionLabel ?? Resources.GetText(Resource.String.close), (s, e) => negAction.Invoke());
Android.Support.V7.App.AlertDialog dialog = builder.Create();
dialog.Show();
}
public override void OnBackPressed() { } // Disables back button
}
}