protected override void OnCreate (Bundle bundle) { base.OnCreate (bundle); #region Database setup var sqliteFilename = "TodoSQLite.db3"; string documentsPath = System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal); // Documents folder var path = Path.Combine(documentsPath, sqliteFilename); // This is where we copy in the prepopulated database Console.WriteLine (path); if (!File.Exists(path)) { var s = Resources.OpenRawResource(RazorTodo.Resource.Raw.TodoSQLite); // RESOURCE NAME ### // create a write stream FileStream writeStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write); // write to the stream ReadWriteStream(s, writeStream); } var plat = new SQLite.Net.Platform.XamarinAndroid.SQLitePlatformAndroid(); var conn = new SQLite.Net.SQLiteConnection(plat, path); // Set the database connection string App.SetDatabaseConnection (conn); #endregion // Set our view from the "main" layout resource SetContentView (Resource.Layout.Main); var webView = FindViewById<WebView> (Resource.Id.webView); webView.Settings.JavaScriptEnabled = true; // Use subclassed WebViewClient to intercept hybrid native calls webView.SetWebViewClient (new RazorWebViewClient (this)); // Render the view from the type generated from RazorView.cshtml var model = App.Database.GetItems ().ToList(); var template = new TodoList () { Model = model }; var page = template.GenerateString (); // Load the rendered HTML into the view with a base URL // that points to the root of the bundled Assets folder webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null); }
public override void ViewDidLoad () { base.ViewDidLoad (); webView = new UIWebView (UIScreen.MainScreen.Bounds); View.Add (webView); // Intercept URL loading to handle native calls from browser webView.ShouldStartLoad += HandleShouldStartLoad; // Render the view from the type generated from RazorView.cshtml var model = App.Database.GetItems ().ToList (); var template = new TodoList () { Model = model }; var page = template.GenerateString (); webView.LoadHtmlString (page, NSBundle.MainBundle.BundleUrl); }
bool HandleShouldStartLoad(UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navigationType) { var scheme = "hybrid:"; // If the URL is not our own custom scheme, just let the webView load the URL as usual if (request.Url.Scheme != scheme.Replace(":", "")) { return(true); } // This handler will treat everything between the protocol and "?" // as the method name. The querystring has all of the parameters. var resources = request.Url.ResourceSpecifier.Split('?'); var method = resources [0]; var parameters = System.Web.HttpUtility.ParseQueryString(resources[1]); // breaks if ? not present (ie no params) if (method == "ListAll") { var model = new Lip3Data().MyRecs; var template = new TodoList() { Model = model }; var page = template.GenerateString(); webView.LoadHtmlString(page, NSBundle.MainBundle.BundleUrl); } else if (method == "AddTask") { var template = new TodoView() { Model = new TodoItem() }; var page = template.GenerateString(); webView.LoadHtmlString(page, NSBundle.MainBundle.BundleUrl); } else if (method == "ViewTask") { var id = parameters ["todoid"]; var model = App.Database.GetItem(Convert.ToInt32(id)); var template = new TodoView() { Model = model }; var page = template.GenerateString(); webView.LoadHtmlString(page, NSBundle.MainBundle.BundleUrl); } else if (method == "SpeakAll") { var todos = App.Database.GetItemsNotDone(); var tospeak = ""; foreach (var t in todos) { tospeak += t.Name + " "; } if (tospeak == "") { tospeak = "there are no tasks to do"; } Speech.Speak(tospeak); } else if (method == "TweetAll") { var todos = App.Database.GetItemsNotDone(); var totweet = ""; foreach (var t in todos) { totweet += t.Name + ","; } if (totweet == "") { totweet = "there are no tasks to tweet"; } else { totweet = "Still do to:" + totweet; } var tweetController = new TWTweetComposeViewController(); tweetController.SetInitialText(totweet); PresentModalViewController(tweetController, true); } else if (method == "TextAll") { if (MFMessageComposeViewController.CanSendText) { var todos = App.Database.GetItemsNotDone(); var totext = ""; foreach (var t in todos) { totext += t.Name + ","; } if (totext == "") { totext = "there are no tasks to text"; } MFMessageComposeViewController message = new MFMessageComposeViewController(); message.Finished += (sender, e) => { e.Controller.DismissViewController(true, null); }; //message.Recipients = new string[] { receiver }; message.Body = totext; PresentModalViewController(message, true); } else { new UIAlertView("Sorry", "Cannot text from this device", null, "OK", null).Show(); } } else if (method == "TodoView") { // the editing form var button = parameters ["Button"]; if (button == "Save") { var id = parameters ["id"]; var name = parameters ["name"]; var notes = parameters ["notes"]; var done = parameters ["done"]; var todo = new TodoItem { ID = Convert.ToInt32(id), Name = name, Notes = notes, Done = (done == "on") }; App.Database.SaveItem(todo); var model = new Lip3Data().MyRecs; var template = new TodoList() { Model = model }; var page = template.GenerateString(); webView.LoadHtmlString(page, NSBundle.MainBundle.BundleUrl); } else if (button == "Delete") { var id = parameters ["id"]; App.Database.DeleteItem(Convert.ToInt32(id)); var model = new Lip3Data().MyRecs; var template = new TodoList() { Model = model }; var page = template.GenerateString(); webView.LoadHtmlString(page, NSBundle.MainBundle.BundleUrl); } else if (button == "Cancel") { var model = new Lip3Data().MyRecs; var template = new TodoList() { Model = model }; var page = template.GenerateString(); webView.LoadHtmlString(page, NSBundle.MainBundle.BundleUrl); } else if (button == "Speak") { var name = parameters ["name"]; var notes = parameters ["notes"]; Speech.Speak(name + " " + notes); } } return(false); }
public override bool ShouldOverrideUrlLoading (WebView webView, string url) { var scheme = "hybrid:"; // If the URL is not our own custom scheme, just let the webView load the URL as usual if (!url.StartsWith (scheme)) return false; // This handler will treat everything between the protocol and "?" // as the method name. The querystring has all of the parameters. var resources = url.Substring(scheme.Length).Split('?'); var method = resources [0]; var parameters = System.Web.HttpUtility.ParseQueryString(resources[1]); if (method == "ListAll") { var model = App.Database.GetItems ().ToList(); var template = new TodoList () { Model = model }; var page = template.GenerateString (); webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null); } else if (method == "AddTask") { var template = new TodoView () { Model = new TodoItem() }; var page = template.GenerateString (); webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null); } else if (method == "ViewTask") { var id = parameters ["todoid"]; var model = App.Database.GetItem (Convert.ToInt32 (id)); var template = new TodoView () { Model = model }; var page = template.GenerateString (); webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null); } else if (method == "SpeakAll") { var todos = App.Database.GetItemsNotDone (); var tospeak = ""; foreach (var t in todos) tospeak += t.Name + " "; if (tospeak == "") tospeak = "there are no tasks to do"; if (speech == null) speech = new Speech (); speech.Speak (context, tospeak); } else if (method == "TextAll" || method == "TweetAll") { var todos = App.Database.GetItemsNotDone (); var totext = ""; foreach (var t in todos) totext += t.Name + ","; if (totext == "") totext = "there are no tasks to share"; try { var intent = new Intent(Intent.ActionSend); intent.PutExtra(Intent.ExtraText,totext); intent.SetType("text/plain"); context.StartActivity(Intent.CreateChooser(intent, "Undone Todos")); } catch(Exception ex) { System.Diagnostics.Debug.WriteLine (ex); } } else if (method == "TodoView") { // the editing form var button = parameters ["Button"]; if (button == "Save") { var id = parameters ["id"]; var name = parameters ["name"]; var notes = parameters ["notes"]; var done = parameters ["done"]; var todo = new TodoItem { ID = Convert.ToInt32 (id), Name = name, Notes = notes, Done = (done == "on") }; App.Database.SaveItem (todo); var model = App.Database.GetItems ().ToList (); var template = new TodoList () { Model = model }; var page = template.GenerateString (); webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null); } else if (button == "Delete") { var id = Convert.ToInt32 (parameters ["id"]); App.Database.DeleteItem (new TodoItem {ID = id}); var model = App.Database.GetItems ().ToList (); var template = new TodoList () { Model = model }; var page = template.GenerateString (); webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null); } else if (button == "Cancel") { var model = App.Database.GetItems ().ToList (); var template = new TodoList () { Model = model }; var page = template.GenerateString (); webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null); } else if (button == "Speak") { var name = parameters ["name"]; var notes = parameters ["notes"]; if (speech == null) speech = new Speech (); speech.Speak (context, name + " " + notes); } } return true; }
bool HandleShouldStartLoad(UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navigationType) { var scheme = "hybrid:"; // If the URL is not our own custom scheme, just let the webView load the URL as usual if (request.Url.Scheme != scheme.Replace(":", "")) { return(true); } // This handler will treat everything between the protocol and "?" // as the method name. The querystring has all of the parameters. var resources = request.Url.ResourceSpecifier.Split('?'); var method = resources[0]; var parameters = System.Web.HttpUtility.ParseQueryString(resources[1]); // breaks if ? not present (ie no params) if (method == "ListAll") { var model = App.Database.GetItems().ToList(); List <List <Data> > lista = model .GroupBy(u => u.Group) .Select(grp => grp.ToList()) .ToList(); var template = new TodoList() { Model = lista }; var page = template.GenerateString(); webView.LoadHtmlString(page, NSBundle.MainBundle.BundleUrl); } else if (method == "AddTask") { var template = new TodoView() { Model = new DataViewModel { Time = DateTime.Now.ToString("HH:mm"), Date = DateTime.Now.ToString("dd.MM.yyyy") } }; var page = template.GenerateString(); webView.LoadHtmlString(page, NSBundle.MainBundle.BundleUrl); } else if (method == "ViewTask") { var id = parameters["todoid"]; var data = App.Database.GetItem(Convert.ToInt32(id)); var model = new DataViewModel(); model.ID = data.ID; model.Insulin = data.Insulin; model.Result = data.Result; model.Date = data.Date.ToString("dd.MM.yyyy"); model.Time = data.Date.ToString("HH.mm"); model.Notes = data.Notes; var template = new TodoView() { Model = model }; var page = template.GenerateString(); webView.LoadHtmlString(page, NSBundle.MainBundle.BundleUrl); } else if (method == "DataView") { // the editing form var button = parameters["Button"]; if (button == "Save") { var id = parameters["id"]; var date = parameters["date"]; var result = parameters["result"]; var notes = parameters["notes"]; var time = parameters["time"]; var dateArray = date.Split('.'); var timeArray = time.Split(':'); var todo = new Data { ID = Convert.ToInt32(id), Date = new DateTime(int.Parse(dateArray[2]), int.Parse(dateArray[1]), int.Parse(dateArray[0]), int.Parse(timeArray[0]), int.Parse(timeArray[1]), 0), Result = Decimal.Parse(result), Notes = notes, Group = date }; App.Database.SaveItem(todo); var model = App.Database.GetItems().ToList(); List <List <Data> > lista = model .GroupBy(u => u.Group) .Select(grp => grp.ToList()) .ToList(); var template = new TodoList() { Model = lista }; var page = template.GenerateString(); webView.LoadHtmlString(page, NSBundle.MainBundle.BundleUrl); } else if (button == "Delete") { var id = parameters["id"]; App.Database.DeleteItem(Convert.ToInt32(id)); var model = App.Database.GetItems().ToList(); List <List <Data> > lista = model .GroupBy(u => u.Group) .Select(grp => grp.ToList()) .ToList(); var template = new TodoList() { Model = lista }; var page = template.GenerateString(); webView.LoadHtmlString(page, NSBundle.MainBundle.BundleUrl); } else if (button == "Cancel") { var model = App.Database.GetItems().ToList(); List <List <Data> > lista = model .GroupBy(u => u.Group) .Select(grp => grp.ToList()) .ToList(); var template = new TodoList() { Model = lista }; var page = template.GenerateString(); webView.LoadHtmlString(page, NSBundle.MainBundle.BundleUrl); } } return(false); }
bool HandleShouldStartLoad (UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navigationType) { var scheme = "hybrid:"; // If the URL is not our own custom scheme, just let the webView load the URL as usual if (request.Url.Scheme != scheme.Replace(":", "")) return true; // This handler will treat everything between the protocol and "?" // as the method name. The querystring has all of the parameters. var resources = request.Url.ResourceSpecifier.Split('?'); var method = resources [0]; var parameters = System.Web.HttpUtility.ParseQueryString(resources[1]); // breaks if ? not present (ie no params) if (method == "ListAll") { var model = App.Database.GetItems ().ToList(); var template = new TodoList () { Model = model }; var page = template.GenerateString (); webView.LoadHtmlString (page, NSBundle.MainBundle.BundleUrl); } else if (method == "AddTask") { var template = new TodoView () { Model = new TodoItem() }; var page = template.GenerateString (); webView.LoadHtmlString (page, NSBundle.MainBundle.BundleUrl); } else if (method == "ViewTask") { var id = parameters ["todoid"]; var model = App.Database.GetItem (Convert.ToInt32 (id)); var template = new TodoView () { Model = model }; var page = template.GenerateString (); webView.LoadHtmlString (page, NSBundle.MainBundle.BundleUrl); } else if (method == "SpeakAll") { var todos = App.Database.GetItemsNotDone (); var tospeak = ""; foreach (var t in todos) tospeak += t.Name + " "; if (tospeak == "") tospeak = "there are no tasks to do"; Speech.Speak (tospeak); } else if (method == "TweetAll") { var todos = App.Database.GetItemsNotDone (); var totweet = ""; foreach (var t in todos) totweet += t.Name + ","; if (totweet == "") totweet = "there are no tasks to tweet"; else totweet = "Still do to:" + totweet; var tweetController = new TWTweetComposeViewController (); tweetController.SetInitialText (totweet); PresentModalViewController (tweetController, true); } else if (method == "TextAll") { if (MFMessageComposeViewController.CanSendText) { var todos = App.Database.GetItemsNotDone (); var totext = ""; foreach (var t in todos) totext += t.Name + ","; if (totext == "") totext = "there are no tasks to text"; MFMessageComposeViewController message = new MFMessageComposeViewController (); message.Finished += (sender, e) => { e.Controller.DismissViewController (true, null); }; //message.Recipients = new string[] { receiver }; message.Body = totext; PresentModalViewController (message, true); } else { new UIAlertView ("Sorry", "Cannot text from this device", null, "OK", null).Show (); } } else if (method == "TodoView") { // the editing form var button = parameters ["Button"]; if (button == "Save") { var id = parameters ["id"]; var name = parameters ["name"]; var notes = parameters ["notes"]; var done = parameters ["done"]; var todo = new TodoItem { ID = Convert.ToInt32 (id), Name = name, Notes = notes, Done = (done == "on") }; App.Database.SaveItem (todo); var model = App.Database.GetItems ().ToList (); var template = new TodoList () { Model = model }; var page = template.GenerateString (); webView.LoadHtmlString (page, NSBundle.MainBundle.BundleUrl); } else if (button == "Delete") { var id = parameters ["id"]; App.Database.DeleteItem (Convert.ToInt32 (id)); var model = App.Database.GetItems ().ToList (); var template = new TodoList () { Model = model }; var page = template.GenerateString (); webView.LoadHtmlString (page, NSBundle.MainBundle.BundleUrl); } else if (button == "Cancel") { var model = App.Database.GetItems ().ToList (); var template = new TodoList () { Model = model }; var page = template.GenerateString (); webView.LoadHtmlString (page, NSBundle.MainBundle.BundleUrl); } else if (button == "Speak") { var name = parameters ["name"]; var notes = parameters ["notes"]; Speech.Speak (name + " " + notes); } } return false; }
public override bool ShouldOverrideUrlLoading(WebView webView, string url) { var scheme = "hybrid:"; // If the URL is not our own custom scheme, just let the webView load the URL as usual if (!url.StartsWith(scheme)) { return(false); } // This handler will treat everything between the protocol and "?" // as the method name. The querystring has all of the parameters. var resources = url.Substring(scheme.Length).Split('?'); var method = resources[0]; var parameters = System.Web.HttpUtility.ParseQueryString(resources[1]); if (method == "ListAll") { var model = App.Database.GetItems().ToList(); List <List <Data> > lista = model .GroupBy(u => u.Group) .Select(grp => grp.ToList()) .ToList(); var template = new TodoList() { Model = lista }; var page = template.GenerateString(); webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null); } else if (method == "AddTask") { var template = new TodoView() { Model = new DataViewModel { Time = DateTime.Now.ToString("HH:mm"), Date = DateTime.Now.ToString("dd.MM.yyyy") } }; var page = template.GenerateString(); webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null); } else if (method == "ViewTask") { var id = parameters["todoid"]; var data = App.Database.GetItem(Convert.ToInt32(id)); var model = new DataViewModel(); model.ID = data.ID; model.Insulin = data.Insulin; model.Result = data.Result; model.Date = data.Date.ToString("dd.MM.yyyy"); model.Time = data.Date.ToString("HH.mm"); model.Notes = data.Notes; var template = new TodoView() { Model = model }; var page = template.GenerateString(); webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null); } else if (method == "DataView") { // the editing form var button = parameters["Button"]; if (button == "Save") { var id = parameters["id"]; var date = parameters["date"]; var result = parameters["result"]; var notes = parameters["notes"]; var time = parameters["time"]; var dateArray = date.Split('.'); var timeArray = time.Split(':'); var todo = new Data { ID = Convert.ToInt32(id), Date = new DateTime(int.Parse(dateArray[2]), int.Parse(dateArray[1]), int.Parse(dateArray[0]), int.Parse(timeArray[0]), int.Parse(timeArray[1]), 0), Result = Decimal.Parse(result), Notes = notes, Group = date }; App.Database.SaveItem(todo); var model = App.Database.GetItems().ToList(); List <List <Data> > lista = model .GroupBy(u => u.Group) .Select(grp => grp.ToList()) .ToList(); var template = new TodoList() { Model = lista }; var page = template.GenerateString(); webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null); } else if (button == "Delete") { var id = parameters["id"]; App.Database.DeleteItem(Convert.ToInt32(id)); var model = App.Database.GetItems().ToList(); List <List <Data> > lista = model .GroupBy(u => u.Group) .Select(grp => grp.ToList()) .ToList(); var template = new TodoList() { Model = lista }; var page = template.GenerateString(); webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null); } else if (button == "Cancel") { var model = App.Database.GetItems().ToList(); List <List <Data> > lista = model .GroupBy(u => u.Group) .Select(grp => grp.ToList()) .ToList(); var template = new TodoList() { Model = lista }; var page = template.GenerateString(); webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null); } } return(true); }
public override bool ShouldOverrideUrlLoading(WebView webView, string url) { var scheme = "hybrid:"; // If the URL is not our own custom scheme, just let the webView load the URL as usual if (!url.StartsWith(scheme)) { return(false); } // This handler will treat everything between the protocol and "?" // as the method name. The querystring has all of the parameters. var resources = url.Substring(scheme.Length).Split('?'); var method = resources [0]; var parameters = System.Web.HttpUtility.ParseQueryString(resources[1]); if (method == "ListAll") { var model = App.Database.GetItems().ToList(); var template = new TodoList() { Model = model }; var page = template.GenerateString(); webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null); } else if (method == "AddTask") { var template = new TodoView() { Model = new TodoItem() }; var page = template.GenerateString(); webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null); } else if (method == "ViewTask") { var id = parameters ["todoid"]; var model = App.Database.GetItem(Convert.ToInt32(id)); var template = new TodoView() { Model = model }; var page = template.GenerateString(); webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null); } else if (method == "SpeakAll") { var todos = App.Database.GetItemsNotDone(); var tospeak = ""; foreach (var t in todos) { tospeak += t.Name + " "; } if (tospeak == "") { tospeak = "there are no tasks to do"; } if (speech == null) { speech = new Speech(); } speech.Speak(context, tospeak); } else if (method == "TextAll" || method == "TweetAll") { var todos = App.Database.GetItemsNotDone(); var totext = ""; foreach (var t in todos) { totext += t.Name + ","; } if (totext == "") { totext = "there are no tasks to share"; } try { var intent = new Intent(Intent.ActionSend); intent.PutExtra(Intent.ExtraText, totext); intent.SetType("text/plain"); context.StartActivity(Intent.CreateChooser(intent, "Undone Todos")); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); } } else if (method == "TodoView") { // the editing form var button = parameters ["Button"]; if (button == "Save") { var id = parameters ["id"]; var name = parameters ["name"]; var notes = parameters ["notes"]; var done = parameters ["done"]; var todo = new TodoItem { ID = Convert.ToInt32(id), Name = name, Notes = notes, Done = (done == "on") }; App.Database.SaveItem(todo); var model = App.Database.GetItems().ToList(); var template = new TodoList() { Model = model }; var page = template.GenerateString(); webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null); } else if (button == "Delete") { var id = parameters ["id"]; App.Database.DeleteItem(Convert.ToInt32(id)); var model = App.Database.GetItems().ToList(); var template = new TodoList() { Model = model }; var page = template.GenerateString(); webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null); } else if (button == "Cancel") { var model = App.Database.GetItems().ToList(); var template = new TodoList() { Model = model }; var page = template.GenerateString(); webView.LoadDataWithBaseURL("file:///android_asset/", page, "text/html", "UTF-8", null); } else if (button == "Speak") { var name = parameters ["name"]; var notes = parameters ["notes"]; if (speech == null) { speech = new Speech(); } speech.Speak(context, name + " " + notes); } } return(true); }