implemented 'edit' long click action and validation

This commit is contained in:
Matthew D. Groves 2010-12-18 13:39:57 -06:00
parent f98d073569
commit 1e7dde035b
5 changed files with 122 additions and 61 deletions

View file

@ -63,19 +63,14 @@ namespace MonoStockPortfolio.Core.PortfolioRepositories
_db.Insert(POSITION_TABLE_NAME, null, GetPositionContentValues(position)); _db.Insert(POSITION_TABLE_NAME, null, GetPositionContentValues(position));
} }
public void DeletePortfolio(string portfolioName) public void DeletePortfolio(string portfolioName)
{ {
_db.BeginTransaction(); _db.BeginTransaction();
try try
{ {
var portfolio = GetPortfolioByName(portfolioName); var portfolio = GetPortfolioByName(portfolioName);
Log.E("DeletePortfolio", "Name: " + portfolio.Name); _db.Delete(PORTFOLIO_TABLE_NAME, "id = " + portfolio.ID, null);
Log.E("DeletePortfolio", "Name: " + portfolio.ID); _db.Delete(POSITION_TABLE_NAME, "ContainingPortfolioID = " + portfolio.ID, null);
_db.RawQuery("DELETE FROM " + PORTFOLIO_TABLE_NAME + " WHERE id = " + portfolio.ID, null);
_db.RawQuery("DELETE FROM " + POSITION_TABLE_NAME + " WHERE ContainingPortfolioID = " + portfolio.ID, null);
//_db.Delete(PORTFOLIO_TABLE_NAME, " WHERE id = " + portfolio.ID, null);
//_db.Delete(POSITION_TABLE_NAME, " WHERE ContainingPortfolioID = " + portfolio.ID, null);
_db.SetTransactionSuccessful(); _db.SetTransactionSuccessful();
} }
catch (SQLiteException ex) catch (SQLiteException ex)
@ -137,12 +132,12 @@ namespace MonoStockPortfolio.Core.PortfolioRepositories
private void UpdateExistingPortfolio(Portfolio portfolio) private void UpdateExistingPortfolio(Portfolio portfolio)
{ {
var portfolioID = portfolio.ID ?? -1; var portfolioID = portfolio.ID ?? -1;
_db.Update(PORTFOLIO_TABLE_NAME, GetPortfolioContentValues(portfolio), " WHERE id = " + portfolioID, null); Log.E("UpdateExistingPortfolio", "Portfolios updated: " + _db.Update(PORTFOLIO_TABLE_NAME, GetPortfolioContentValues(portfolio), "id = " + portfolioID, null));
} }
private void InsertNewPortfolio(Portfolio portfolio) private void InsertNewPortfolio(Portfolio portfolio)
{ {
_db.Insert(PORTFOLIO_TABLE_NAME, null, GetPortfolioContentValues(portfolio)); Log.E("InsertNewPortfolio", "Portfolios inserted: " + _db.Insert(PORTFOLIO_TABLE_NAME, null, GetPortfolioContentValues(portfolio)));
} }
private static ContentValues GetPortfolioContentValues(Portfolio portfolio) private static ContentValues GetPortfolioContentValues(Portfolio portfolio)

View file

@ -1,47 +0,0 @@
using System;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Widget;
using MonoStockPortfolio.Core.PortfolioRepositories;
using MonoStockPortfolio.Entities;
namespace MonoStockPortfolio
{
[Activity(Label = "Add Portfolio", MainLauncher = false)]
public class AddPortfolioActivity : Activity
{
public static string ClassName { get { return "monostockportfolio.AddPortfolioActivity"; } }
private IPortfolioRepository _repo;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
_repo = new AndroidSqlitePortfolioRepository(this);
SetContentView(Resource.layout.addportfolio);
WireUpEvents();
}
private void WireUpEvents()
{
var saveButton = FindViewById<Button>(Resource.id.btnSave);
saveButton.Click += saveButton_Click;
}
private void saveButton_Click(object sender, EventArgs e)
{
var portfolioName = FindViewById<EditText>(Resource.id.portfolioName);
_repo.SavePortfolio(new Portfolio {Name = portfolioName.Text.ToString()});
Toast.MakeText(this, "You saved: " + portfolioName.Text, ToastLength.Short).Show();
var intent = new Intent();
SetResult(Result.Ok, intent);
Finish();
}
}
}

View file

@ -0,0 +1,108 @@
using System;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Widget;
using MonoStockPortfolio.Core.PortfolioRepositories;
using MonoStockPortfolio.Entities;
using MonoStockPortfolio.Validation;
namespace MonoStockPortfolio
{
[Activity(Label = "Add Portfolio", MainLauncher = false)]
public class EditPortfolioActivity : Activity
{
public static string ClassName { get { return "monostockportfolio.EditPortfolioActivity"; } }
public static string Extra_PortfolioID { get { return "monoStockPortfolio.EditPortfolioActivity.PortfolioID"; } }
private Button SaveButton { get { return FindViewById<Button>(Resource.id.btnSave); } }
private EditText PortfolioName { get { return FindViewById<EditText>(Resource.id.portfolioName); } }
private IPortfolioRepository _repo;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
_repo = new AndroidSqlitePortfolioRepository(this);
SetContentView(Resource.layout.addportfolio);
WireUpEvents();
var portfolioId = Intent.GetLongExtra(Extra_PortfolioID, -1);
if(portfolioId != -1)
{
this.Title = "Edit Portfolio";
PopulateForm(portfolioId);
}
}
private void PopulateForm(long portfolioId)
{
var portfolio = _repo.GetPortfolioById(portfolioId);
PortfolioName.Text = portfolio.Name;
}
private void WireUpEvents()
{
SaveButton.Click += saveButton_Click;
}
private void saveButton_Click(object sender, EventArgs e)
{
Portfolio portfolioToSave = GetPortfolioToSave();
if (Validate(portfolioToSave))
{
_repo.SavePortfolio(portfolioToSave);
Toast.MakeText(this, "You saved: " + PortfolioName.Text, ToastLength.Short).Show();
var intent = new Intent();
SetResult(Result.Ok, intent);
Finish();
}
}
private bool Validate(Portfolio portfolioToSave)
{
var validator = new FormValidator();
validator.AddValidation(PortfolioName, () => IsDuplicateName(portfolioToSave));
var result = validator.Apply();
if(result != string.Empty)
{
Toast.MakeText(this, result, ToastLength.Long).Show();
return false;
}
return true;
}
private string IsDuplicateName(Portfolio portfolioToSave)
{
var portfolio = _repo.GetPortfolioByName(portfolioToSave.Name);
if(portfolio != null && portfolio.ID != portfolioToSave.ID)
{
return "Portfolio name is already taken";
}
return string.Empty;
}
private Portfolio GetPortfolioToSave()
{
Portfolio portfolioToSave;
var portfolioId = Intent.GetLongExtra(Extra_PortfolioID, -1);
if (portfolioId != -1)
{
portfolioToSave = new Portfolio(portfolioId);
}
else
{
portfolioToSave = new Portfolio();
}
portfolioToSave.Name = PortfolioName.Text.ToString();
return portfolioToSave;
}
}
}

View file

@ -56,7 +56,8 @@ namespace MonoStockPortfolio
void PortfolioListView_ItemLongClick(object sender, ItemEventArgs e) void PortfolioListView_ItemLongClick(object sender, ItemEventArgs e)
{ {
_longClickOptions = new[] {"Edit", "Delete"}; _longClickOptions = new[] {"Edit", "Delete"};
var selectedPortfolio = ((TextView) e.View).Text.ToS(); var selectedPortfolioName = ((TextView) e.View).Text.ToS();
var selectedPortfolio = _repo.GetPortfolioByName(selectedPortfolioName);
var dialogBuilder = new AlertDialog.Builder(this); var dialogBuilder = new AlertDialog.Builder(this);
dialogBuilder.SetTitle("Options"); dialogBuilder.SetTitle("Options");
dialogBuilder.SetItems(_longClickOptions, dialogBuilder.SetItems(_longClickOptions,
@ -64,17 +65,21 @@ namespace MonoStockPortfolio
dialogBuilder.Create().Show(); dialogBuilder.Create().Show();
} }
private void tr_LongClick_Options(object sender, DialogClickEventArgs e, string selectedPortfolio) private void tr_LongClick_Options(object sender, DialogClickEventArgs e, Portfolio selectedPortfolio)
{ {
//Toast.MakeText(this, "Option: " + _longClickOptions[e.Which], ToastLength.Long).Show(); //Toast.MakeText(this, "Option: " + _longClickOptions[e.Which], ToastLength.Long).Show();
if(_longClickOptions[e.Which] == "Edit") if(_longClickOptions[e.Which] == "Edit")
{ {
// Edit // Edit
var intent = new Intent();
intent.SetClassName(this, EditPortfolioActivity.ClassName);
intent.PutExtra(EditPortfolioActivity.Extra_PortfolioID, selectedPortfolio.ID ?? -1);
StartActivityForResult(intent, 0);
} }
else if (_longClickOptions[e.Which] == "Delete") else if (_longClickOptions[e.Which] == "Delete")
{ {
// Delete // Delete
_repo.DeletePortfolio(selectedPortfolio); _repo.DeletePortfolio(selectedPortfolio.Name);
RefreshList(); RefreshList();
} }
} }
@ -90,7 +95,7 @@ namespace MonoStockPortfolio
private void addPortfolioButton_Click(object sender, EventArgs e) private void addPortfolioButton_Click(object sender, EventArgs e)
{ {
var intent = new Intent(); var intent = new Intent();
intent.SetClassName(this, AddPortfolioActivity.ClassName); intent.SetClassName(this, EditPortfolioActivity.ClassName);
StartActivityForResult(intent, 0); StartActivityForResult(intent, 0);
} }

View file

@ -44,7 +44,7 @@
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="AddPortfolioActivity.cs" /> <Compile Include="EditPortfolioActivity.cs" />
<Compile Include="PortfolioActivity.cs" /> <Compile Include="PortfolioActivity.cs" />
<Compile Include="MainActivity.cs" /> <Compile Include="MainActivity.cs" />
<Compile Include="AddPositionActivity.cs" /> <Compile Include="AddPositionActivity.cs" />