first commit
261
.gitignore
vendored
Normal file
@ -0,0 +1,261 @@
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
|
||||
# Visual Studio 2015 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUNIT
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# DNX
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_i.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# JustCode is a .NET coding add-in
|
||||
.JustCode
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# TODO: Comment the next line if you want to checkin your web deploy settings
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
#*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/packages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/packages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/packages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignoreable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
node_modules/
|
||||
orleans.codegen.cs
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# JetBrains Rider
|
||||
.idea/
|
||||
*.sln.iml
|
||||
|
||||
# CodeRush
|
||||
.cr/
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
27
Activities/MealsActivity.cs
Normal file
@ -0,0 +1,27 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
using Android.App;
|
||||
using Android.Content;
|
||||
using Android.OS;
|
||||
using Android.Runtime;
|
||||
using Android.Support.V7.App;
|
||||
using Android.Views;
|
||||
using Android.Widget;
|
||||
|
||||
using Eat.Models;
|
||||
|
||||
namespace Eat.Activities
|
||||
{
|
||||
[Activity(Label = "MealActivity")]
|
||||
public class MealsActivity : AppCompatActivity
|
||||
{
|
||||
protected override void OnCreate(Bundle savedInstanceState)
|
||||
{
|
||||
base.OnCreate(savedInstanceState);
|
||||
SetContentView(Resource.Layout.meal);
|
||||
}
|
||||
}
|
||||
}
|
302
Activities/ProductsActivity.cs
Normal file
@ -0,0 +1,302 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Globalization;
|
||||
|
||||
using Android.App;
|
||||
using Android.OS;
|
||||
using Android.Support.V7.App;
|
||||
using Android.Runtime;
|
||||
using Android.Widget;
|
||||
using Android.Content;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
using Eat.Controls;
|
||||
|
||||
namespace Eat.Activities
|
||||
{
|
||||
[Activity(Label = "Products", MainLauncher = true)]
|
||||
public class ProductsActivity : AppCompatActivity
|
||||
{
|
||||
readonly string path;
|
||||
|
||||
EditText addName, addTags, addFat, addCarbs, addProtein, addCost;
|
||||
Button addAdd;
|
||||
bool productBeignEdited;
|
||||
Models.Product productEdited;
|
||||
|
||||
ListView list;
|
||||
TextView name, kcal, fat, carbs, protein, cost;
|
||||
EditText tags;
|
||||
ImageButton search;
|
||||
List<Models.Product> products = new List<Models.Product>(), productsFiltered = new List<Models.Product>();
|
||||
bool orderedByName, orderedByKcal, orderedByFat, orderedByCarbs, orderedByProtein, orderedByCost;
|
||||
|
||||
public ProductsActivity()
|
||||
{
|
||||
path = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "products.json");
|
||||
|
||||
orderedByName = orderedByKcal = orderedByFat = orderedByCarbs = orderedByProtein = orderedByCost = false;
|
||||
productBeignEdited = false;
|
||||
}
|
||||
|
||||
protected override void OnCreate(Bundle savedInstanceState)
|
||||
{
|
||||
base.OnCreate(savedInstanceState);
|
||||
SetContentView(Resource.Layout.products);
|
||||
|
||||
DeserializeProducts();
|
||||
InitializeControls();
|
||||
InitializeAddControls();
|
||||
}
|
||||
|
||||
// Save products
|
||||
protected override void OnStop()
|
||||
{
|
||||
base.OnStop();
|
||||
|
||||
SerializeAndSaveProducts();
|
||||
}
|
||||
|
||||
void SerializeAndSaveProducts()
|
||||
{
|
||||
string productsSerialized = JsonConvert.SerializeObject(productsFiltered);
|
||||
|
||||
File.WriteAllText(path, productsSerialized);
|
||||
}
|
||||
|
||||
void DeserializeProducts()
|
||||
{
|
||||
try
|
||||
{
|
||||
string productsSerialized = File.ReadAllText(path);
|
||||
products = JsonConvert.DeserializeObject<List<Models.Product>>(productsSerialized);
|
||||
productsFiltered = products.ToList();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// TODO
|
||||
Console.WriteLine(e.Message);
|
||||
|
||||
products = new List<Models.Product>();
|
||||
|
||||
for (int i = 0; i < 3; ++i)
|
||||
{
|
||||
products.Add(new Models.Product("Product " + i.ToString(), 1.0f, Convert.ToSingle(i), 1.0f, 1.0f, new List<string>()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void InitializeControls()
|
||||
{
|
||||
productsFiltered = products.ToList();
|
||||
|
||||
list = FindViewById<ListView>(Resource.Id.products_list);
|
||||
list.Adapter = new ProductsListViewAdapter(this, productsFiltered);
|
||||
|
||||
list.ItemLongClick += (sender, e) =>
|
||||
{
|
||||
PopupMenu popup = new PopupMenu(this, e.View);
|
||||
popup.Menu.Add(Resource.String.product_edit);
|
||||
popup.Menu.Add(Resource.String.product_delete);
|
||||
|
||||
popup.Show();
|
||||
|
||||
popup.MenuItemClick += (_sender, _e) =>
|
||||
{
|
||||
// Edit
|
||||
if (_e.Item.TitleFormatted.ToString() == Resources.GetString(Resource.String.product_edit))
|
||||
{
|
||||
productBeignEdited = true;
|
||||
productEdited = productsFiltered[e.Position];
|
||||
|
||||
addAdd.Text = "Edit";
|
||||
|
||||
addName.Text = productEdited.Name;
|
||||
addTags.Text = String.Join(" ", productEdited.Tags);
|
||||
addFat.Text = productEdited.Fat.ToString();
|
||||
addCarbs.Text = productEdited.Carbs.ToString();
|
||||
addProtein.Text = productEdited.Protein.ToString();
|
||||
addCost.Text = productEdited.Cost.ToString();
|
||||
}
|
||||
// Remove
|
||||
else if (_e.Item.TitleFormatted.ToString() == Resources.GetString(Resource.String.product_delete))
|
||||
{
|
||||
Models.Product product = productsFiltered[e.Position];
|
||||
productsFiltered.Remove(product);
|
||||
products.Remove(product);
|
||||
|
||||
list.Adapter = new ProductsListViewAdapter(this, productsFiltered);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
tags = FindViewById<EditText>(Resource.Id.products_tags);
|
||||
|
||||
search = FindViewById<ImageButton>(Resource.Id.products_search);
|
||||
search.Click += (sender, e) =>
|
||||
{
|
||||
if (tags.Text == "")
|
||||
{
|
||||
productsFiltered = products.ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
productsFiltered = new List<Models.Product>();
|
||||
List<string> tagsSeparated = tags.Text.Split(' ').ToList();
|
||||
|
||||
foreach (var tag in tagsSeparated)
|
||||
{
|
||||
productsFiltered.AddRange(products.Where(x => x.Name.ToLower().Contains(tag.ToLower()) || x.Tags.Contains(tag.ToLower())));
|
||||
}
|
||||
}
|
||||
|
||||
list.Adapter = new ProductsListViewAdapter(this, productsFiltered);
|
||||
};
|
||||
|
||||
name = FindViewById<TextView>(Resource.Id.products_name);
|
||||
name.Click += (sender, e) =>
|
||||
{
|
||||
if (!orderedByName)
|
||||
{
|
||||
productsFiltered = productsFiltered.OrderBy(x => x.Name).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
productsFiltered = productsFiltered.OrderByDescending(x => x.Name).ToList();
|
||||
}
|
||||
orderedByName = !orderedByName;
|
||||
list.Adapter = new ProductsListViewAdapter(this, productsFiltered);
|
||||
};
|
||||
|
||||
kcal = FindViewById<TextView>(Resource.Id.products_kcal);
|
||||
kcal.Click += (sender, e) =>
|
||||
{
|
||||
if (!orderedByKcal)
|
||||
{
|
||||
productsFiltered = productsFiltered.OrderBy(x => x.Kcal).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
productsFiltered = productsFiltered.OrderByDescending(x => x.Kcal).ToList();
|
||||
}
|
||||
orderedByKcal = !orderedByKcal;
|
||||
list.Adapter = new ProductsListViewAdapter(this, productsFiltered);
|
||||
};
|
||||
|
||||
fat = FindViewById<TextView>(Resource.Id.products_fat);
|
||||
fat.Click += (sender, e) =>
|
||||
{
|
||||
if (!orderedByFat)
|
||||
{
|
||||
productsFiltered = productsFiltered.OrderBy(x => x.Fat).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
productsFiltered = productsFiltered.OrderByDescending(x => x.Fat).ToList();
|
||||
}
|
||||
orderedByFat = !orderedByFat;
|
||||
list.Adapter = new ProductsListViewAdapter(this, productsFiltered);
|
||||
};
|
||||
|
||||
carbs = FindViewById<TextView>(Resource.Id.products_carbs);
|
||||
carbs.Click += (sender, e) =>
|
||||
{
|
||||
if (!orderedByCarbs)
|
||||
{
|
||||
productsFiltered = productsFiltered.OrderBy(x => x.Carbs).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
productsFiltered = productsFiltered.OrderByDescending(x => x.Carbs).ToList();
|
||||
}
|
||||
orderedByCarbs = !orderedByCarbs;
|
||||
list.Adapter = new ProductsListViewAdapter(this, productsFiltered);
|
||||
};
|
||||
|
||||
protein = FindViewById<TextView>(Resource.Id.products_protein);
|
||||
protein.Click += (sender, e) =>
|
||||
{
|
||||
if (!orderedByProtein)
|
||||
{
|
||||
productsFiltered = productsFiltered.OrderBy(x => x.Protein).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
productsFiltered = productsFiltered.OrderByDescending(x => x.Protein).ToList();
|
||||
}
|
||||
orderedByProtein = !orderedByProtein;
|
||||
list.Adapter = new ProductsListViewAdapter(this, productsFiltered);
|
||||
};
|
||||
|
||||
cost = FindViewById<TextView>(Resource.Id.products_cost);
|
||||
cost.Click += (sender, e) =>
|
||||
{
|
||||
if (!orderedByCost)
|
||||
{
|
||||
productsFiltered = productsFiltered.OrderBy(x => x.Cost).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
productsFiltered = productsFiltered.OrderByDescending(x => x.Cost).ToList();
|
||||
}
|
||||
orderedByCost = !orderedByCost;
|
||||
list.Adapter = new ProductsListViewAdapter(this, productsFiltered);
|
||||
};
|
||||
}
|
||||
|
||||
void InitializeAddControls()
|
||||
{
|
||||
addName = FindViewById<EditText>(Resource.Id.products_add_name);
|
||||
addTags = FindViewById<EditText>(Resource.Id.products_add_tags);
|
||||
addFat = FindViewById<EditText>(Resource.Id.products_add_fat);
|
||||
addCarbs = FindViewById<EditText>(Resource.Id.products_add_carbs);
|
||||
addProtein = FindViewById<EditText>(Resource.Id.products_add_protein);
|
||||
addCost = FindViewById<EditText>(Resource.Id.products_add_cost);
|
||||
addAdd = FindViewById<Button>(Resource.Id.products_add_add);
|
||||
|
||||
addAdd.Click += (sender, e) =>
|
||||
{
|
||||
if (addName.Text != "" && addFat.Text != "" && addCarbs.Text != "" && addProtein.Text != "" && addCost.Text != "")
|
||||
{
|
||||
if (productBeignEdited)
|
||||
{
|
||||
products.Remove(productEdited);
|
||||
productsFiltered.Remove(productEdited);
|
||||
productBeignEdited = false;
|
||||
|
||||
addAdd.Text = "Add";
|
||||
}
|
||||
|
||||
Models.Product product;
|
||||
List<string> tags;
|
||||
if (addTags.Text != "")
|
||||
{
|
||||
tags = addTags.Text.Split(' ').ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
tags = new List<string>();
|
||||
}
|
||||
product = new Models.Product(addName.Text,
|
||||
Math.Round(double.Parse(addCost.Text, CultureInfo.InvariantCulture), 2),
|
||||
Math.Round(double.Parse(addFat.Text, CultureInfo.InvariantCulture), 2),
|
||||
Math.Round(double.Parse(addCarbs.Text, CultureInfo.InvariantCulture), 2),
|
||||
Math.Round(double.Parse(addProtein.Text, CultureInfo.InvariantCulture), 2),
|
||||
tags);
|
||||
|
||||
products.Add(product);
|
||||
productsFiltered.Add(product);
|
||||
|
||||
addName.Text = addTags.Text = addFat.Text = addCarbs.Text = addProtein.Text = addCost.Text = "";
|
||||
|
||||
list.Adapter = new ProductsListViewAdapter(this, productsFiltered);
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
}
|
19
Assets/AboutAssets.txt
Normal file
@ -0,0 +1,19 @@
|
||||
Any raw assets you want to be deployed with your application can be placed in
|
||||
this directory (and child directories) and given a Build Action of "AndroidAsset".
|
||||
|
||||
These files will be deployed with you package and will be accessible using Android's
|
||||
AssetManager, like this:
|
||||
|
||||
public class ReadAsset : Activity
|
||||
{
|
||||
protected override void OnCreate (Bundle bundle)
|
||||
{
|
||||
base.OnCreate (bundle);
|
||||
|
||||
InputStream input = Assets.Open ("my_asset.txt");
|
||||
}
|
||||
}
|
||||
|
||||
Additionally, some Android functions will automatically load asset files:
|
||||
|
||||
Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf");
|
67
Controls/ProductsListViewAdapter.cs
Normal file
@ -0,0 +1,67 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
using Android.App;
|
||||
using Android.Content;
|
||||
using Android.OS;
|
||||
using Android.Runtime;
|
||||
using Android.Views;
|
||||
using Android.Widget;
|
||||
|
||||
using Eat.Models;
|
||||
|
||||
namespace Eat.Controls
|
||||
{
|
||||
class ProductsListViewAdapter : BaseAdapter<Product>
|
||||
{
|
||||
public List<Product> Products
|
||||
{
|
||||
get; set;
|
||||
|
||||
}
|
||||
readonly private Context context;
|
||||
|
||||
public ProductsListViewAdapter(Context context, List<Product> items)
|
||||
{
|
||||
this.context = context;
|
||||
Products = items;
|
||||
}
|
||||
|
||||
public override int Count => Products.Count;
|
||||
|
||||
public override long GetItemId(int position)
|
||||
{
|
||||
return position;
|
||||
}
|
||||
|
||||
public override Product this[int position] => Products[position];
|
||||
|
||||
public override View GetView(int position, View convertView, ViewGroup parent)
|
||||
{
|
||||
View row = convertView;
|
||||
|
||||
if (row == null)
|
||||
{
|
||||
row = LayoutInflater.From(context).Inflate(Resource.Layout.products_row, null, false);
|
||||
}
|
||||
|
||||
void FillTextView(int resourceId, string text, Android.Graphics.Color color)
|
||||
{
|
||||
var textView = row.FindViewById<TextView>(resourceId);
|
||||
textView.Text = text;
|
||||
textView.SetTextColor(color);
|
||||
}
|
||||
|
||||
FillTextView(Resource.Id.products_row_name, Products[position].Name, new Android.Graphics.Color(10, 10, 10));
|
||||
FillTextView(Resource.Id.products_row_kcal, Products[position].Kcal.ToString(), new Android.Graphics.Color(255, 255, 0));
|
||||
FillTextView(Resource.Id.products_row_fat, Products[position].Fat.ToString(), new Android.Graphics.Color(255, 0, 255));
|
||||
FillTextView(Resource.Id.products_row_carbs, Products[position].Carbs.ToString(), new Android.Graphics.Color(0, 255, 255));
|
||||
FillTextView(Resource.Id.products_row_protein, Products[position].Protein.ToString(), new Android.Graphics.Color(100, 100, 20));
|
||||
FillTextView(Resource.Id.products_row_cost, Products[position].Cost.ToString(), new Android.Graphics.Color(150, 150, 150));
|
||||
|
||||
return row;
|
||||
}
|
||||
}
|
||||
}
|
66
Database.cs
Normal file
@ -0,0 +1,66 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
using Android.App;
|
||||
using Android.Content;
|
||||
using Android.OS;
|
||||
using Android.Runtime;
|
||||
using Android.Views;
|
||||
using Android.Widget;
|
||||
|
||||
using Eat.Models;
|
||||
|
||||
namespace Eat
|
||||
{
|
||||
class Database
|
||||
{
|
||||
public User User
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
// Do DaysPast dodac jakis limit, samemu ustawialny albo cos max do przechowywania, zeby ta lista nie przetrzymywala 10lat. Chociaż jeszcze pomyśle
|
||||
// Wtedy mógłbym za kązdym razem ladowac historie, bo nie bedzie za duza i nie trzymac nic w temp tak zrobie.
|
||||
public List<Tuple<Day, Product>> DaysPast { get; set; } = new List<Tuple<Day, Product>>();
|
||||
// Jeśli dzień z Days już minął to dodaj go do DaysPast z Product (zapotrzebowaniem), jakie jest w momencie zapisu
|
||||
// Usuń go z Days
|
||||
public List<Day> Days { get; set; } = new List<Day>();
|
||||
public List<Meal> Meals { get; set; } = new List<Meal>();
|
||||
public List<Product> Products { get; set; } = new List<Product>();
|
||||
|
||||
// Jedyna mozliwosc to zaladowanie z pliku, jesli nie ma pliku i user 1 raz sie loguje to i tak w innym miejscu musza
|
||||
// zosatac przygotowane puste listy i dane
|
||||
public Database(User user, List<Tuple<Day, Product>> daysPast, List<Day> days, List<Meal> meals, List<Product> products)
|
||||
{
|
||||
User = user;
|
||||
DaysPast = daysPast;
|
||||
Days = days;
|
||||
Meals = meals;
|
||||
Products = products;
|
||||
}
|
||||
|
||||
// Sprobuj ogarnac to zeby wykonywalo sie to tylko przy starcie apki
|
||||
public void PassDays()
|
||||
{
|
||||
foreach (var day in Days)
|
||||
{
|
||||
// Prawdopodobnie to znaczy ze dzien juz minal
|
||||
if (DateTime.Now.Subtract(day.Date) > TimeSpan.Zero)
|
||||
{
|
||||
DaysPast.Add(new Tuple<Day, Product>(day, User));
|
||||
Days.Remove(day);
|
||||
}
|
||||
// Jesli kolejny dzien jeszcze nie minal
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
134
Eat.csproj
Normal file
@ -0,0 +1,134 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>8.0.30703</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{16792D5B-245F-4FD6-9277-38B7F69BF8E6}</ProjectGuid>
|
||||
<ProjectTypeGuids>{EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<TemplateGuid>{122416d6-6b49-4ee2-a1e8-b825f31c79fe}</TemplateGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Eat</RootNamespace>
|
||||
<AssemblyName>Eat</AssemblyName>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AndroidApplication>True</AndroidApplication>
|
||||
<AndroidResgenFile>Resources\Resource.designer.cs</AndroidResgenFile>
|
||||
<AndroidResgenClass>Resource</AndroidResgenClass>
|
||||
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||
<AndroidUseLatestPlatformSdk>false</AndroidUseLatestPlatformSdk>
|
||||
<TargetFrameworkVersion>v8.1</TargetFrameworkVersion>
|
||||
<AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
|
||||
<MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
|
||||
<MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
|
||||
<AndroidHttpClientHandlerType>Xamarin.Android.Net.AndroidClientHandler</AndroidHttpClientHandlerType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>True</DebugSymbols>
|
||||
<DebugType>portable</DebugType>
|
||||
<Optimize>False</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<AndroidUseSharedRuntime>True</AndroidUseSharedRuntime>
|
||||
<AndroidLinkMode>None</AndroidLinkMode>
|
||||
<EmbedAssembliesIntoApk>False</EmbedAssembliesIntoApk>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugSymbols>True</DebugSymbols>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>True</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<AndroidManagedSymbols>true</AndroidManagedSymbols>
|
||||
<AndroidUseSharedRuntime>False</AndroidUseSharedRuntime>
|
||||
<AndroidLinkMode>SdkOnly</AndroidLinkMode>
|
||||
<EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="Mono.Android" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Activities\MealsActivity.cs" />
|
||||
<Compile Include="Activities\ProductsActivity.cs" />
|
||||
<Compile Include="Controls\ProductsListViewAdapter.cs" />
|
||||
<Compile Include="Database.cs" />
|
||||
<Compile Include="Models\Day.cs" />
|
||||
<Compile Include="Models\Meal.cs" />
|
||||
<Compile Include="Models\Product.cs" />
|
||||
<Compile Include="Models\User.cs" />
|
||||
<Compile Include="Resources\Resource.designer.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\AboutResources.txt" />
|
||||
<None Include="Properties\AndroidManifest.xml" />
|
||||
<None Include="Assets\AboutAssets.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\values\colors.xml" />
|
||||
<AndroidResource Include="Resources\values\ic_launcher_background.xml" />
|
||||
<AndroidResource Include="Resources\values\strings.xml" />
|
||||
<AndroidResource Include="Resources\values\styles.xml" />
|
||||
<AndroidResource Include="Resources\mipmap-anydpi-v26\ic_launcher.xml" />
|
||||
<AndroidResource Include="Resources\mipmap-anydpi-v26\ic_launcher_round.xml" />
|
||||
<AndroidResource Include="Resources\mipmap-hdpi\ic_launcher.png" />
|
||||
<AndroidResource Include="Resources\mipmap-hdpi\ic_launcher_foreground.png" />
|
||||
<AndroidResource Include="Resources\mipmap-hdpi\ic_launcher_round.png" />
|
||||
<AndroidResource Include="Resources\mipmap-mdpi\ic_launcher.png" />
|
||||
<AndroidResource Include="Resources\mipmap-mdpi\ic_launcher_foreground.png" />
|
||||
<AndroidResource Include="Resources\mipmap-mdpi\ic_launcher_round.png" />
|
||||
<AndroidResource Include="Resources\mipmap-xhdpi\ic_launcher.png" />
|
||||
<AndroidResource Include="Resources\mipmap-xhdpi\ic_launcher_foreground.png" />
|
||||
<AndroidResource Include="Resources\mipmap-xhdpi\ic_launcher_round.png" />
|
||||
<AndroidResource Include="Resources\mipmap-xxhdpi\ic_launcher.png" />
|
||||
<AndroidResource Include="Resources\mipmap-xxhdpi\ic_launcher_foreground.png" />
|
||||
<AndroidResource Include="Resources\mipmap-xxhdpi\ic_launcher_round.png" />
|
||||
<AndroidResource Include="Resources\mipmap-xxxhdpi\ic_launcher.png" />
|
||||
<AndroidResource Include="Resources\mipmap-xxxhdpi\ic_launcher_foreground.png" />
|
||||
<AndroidResource Include="Resources\mipmap-xxxhdpi\ic_launcher_round.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json">
|
||||
<Version>11.0.2</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Xamarin.Android.Support.Design" Version="27.0.2.1" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\layout\products.axml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:UpdateGeneratedFiles</Generator>
|
||||
</AndroidResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\layout\products_row.axml">
|
||||
<SubType>Designer</SubType>
|
||||
</AndroidResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable\lupa.png">
|
||||
<Generator>MSBuild:UpdateGeneratedFiles</Generator>
|
||||
</AndroidResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\layout\meals.axml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:UpdateGeneratedFiles</Generator>
|
||||
</AndroidResource>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
9
Eat.csproj.user
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<SelectedDevice>Samsung SM-G960F</SelectedDevice>
|
||||
<DefaultDevice>Android_Accelerated_x86_Nougat</DefaultDevice>
|
||||
<AndroidDesignerPreferredTheme>AppTheme</AndroidDesignerPreferredTheme>
|
||||
<AndroidDesignerPreferredDevice>Nexus 4</AndroidDesignerPreferredDevice>
|
||||
</PropertyGroup>
|
||||
</Project>
|
56
Models/Day.cs
Normal file
@ -0,0 +1,56 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
using Android.App;
|
||||
using Android.Content;
|
||||
using Android.OS;
|
||||
using Android.Runtime;
|
||||
using Android.Views;
|
||||
using Android.Widget;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Eat.Models
|
||||
{
|
||||
class Day : Product
|
||||
{
|
||||
[JsonProperty]
|
||||
internal List<Tuple<Meal, double>> Meals { get; private set; } = new List<Tuple<Meal, double>>();
|
||||
[JsonProperty]
|
||||
public DateTime Date { get; private set; }
|
||||
|
||||
public Day(DateTime date)
|
||||
{
|
||||
this.Date = date;
|
||||
}
|
||||
|
||||
public Day(DateTime date, List<Tuple<Meal, double>> meals)
|
||||
{
|
||||
this.Date = date;
|
||||
Meals = meals;
|
||||
}
|
||||
|
||||
public void AddMeal(Meal meal, double portion)
|
||||
{
|
||||
Meals.Add(new Tuple<Meal, double>(meal, portion));
|
||||
}
|
||||
|
||||
public override void CalculateElements()
|
||||
{
|
||||
Cost = 0.0;
|
||||
Kcal = 0;
|
||||
Fat = Carbs = Protein = 0.0;
|
||||
|
||||
foreach (var meal in Meals)
|
||||
{
|
||||
Cost += meal.Item1.Cost * meal.Item2;
|
||||
Kcal += Convert.ToInt32(meal.Item1.Kcal * meal.Item2);
|
||||
Fat += meal.Item1.Fat * meal.Item2;
|
||||
Carbs += meal.Item1.Carbs * meal.Item2;
|
||||
Protein += meal.Item1.Protein * meal.Item2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
78
Models/Meal.cs
Normal file
@ -0,0 +1,78 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
using Android.App;
|
||||
using Android.Content;
|
||||
using Android.OS;
|
||||
using Android.Runtime;
|
||||
using Android.Views;
|
||||
using Android.Widget;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Eat.Models
|
||||
{
|
||||
class Meal : Product
|
||||
{
|
||||
[JsonProperty]
|
||||
internal List<Tuple<Product, double>> Products { get; private set; } = new List<Tuple<Product, double>>();
|
||||
[JsonProperty]
|
||||
public int PrepTime
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
public Meal(string name, int prepTime)
|
||||
{
|
||||
Name = name;
|
||||
PrepTime = prepTime;
|
||||
}
|
||||
|
||||
public Meal(string name, int prepTime, List<Tuple<Product, double>> products)
|
||||
{
|
||||
Name = name;
|
||||
PrepTime = prepTime;
|
||||
Products = products;
|
||||
}
|
||||
|
||||
public void AddProduct(Product product)
|
||||
{
|
||||
Products.Add(new Tuple<Product, double>(product, 1.0f));
|
||||
}
|
||||
|
||||
public void AddProduct(Product product, double ratio)
|
||||
{
|
||||
Products.Add(new Tuple<Product, double>(product, ratio));
|
||||
}
|
||||
|
||||
public override void CalculateElements()
|
||||
{
|
||||
Cost = 0.0;
|
||||
Kcal = 0;
|
||||
Fat = Carbs = Protein = 0.0;
|
||||
|
||||
foreach (var product in Products)
|
||||
{
|
||||
Cost += product.Item1.Cost;
|
||||
Kcal += Convert.ToInt32(product.Item1.Kcal * product.Item2);
|
||||
Fat += product.Item1.Fat * product.Item2;
|
||||
Carbs += product.Item1.Carbs * product.Item2;
|
||||
Protein += product.Item1.Protein * product.Item2;
|
||||
}
|
||||
}
|
||||
|
||||
public string GetProducts()
|
||||
{
|
||||
string result = "";
|
||||
foreach (var product in Products)
|
||||
{
|
||||
result += product.Item1.Name + " ";
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
89
Models/Product.cs
Normal file
@ -0,0 +1,89 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Text;
|
||||
|
||||
using Android.App;
|
||||
using Android.Content;
|
||||
using Android.OS;
|
||||
using Android.Runtime;
|
||||
using Android.Views;
|
||||
using Android.Widget;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Eat.Models
|
||||
{
|
||||
class Product
|
||||
{
|
||||
[JsonProperty]
|
||||
public string Name
|
||||
{
|
||||
get; protected set;
|
||||
}
|
||||
|
||||
[JsonProperty]
|
||||
public double Cost
|
||||
{
|
||||
get; protected set;
|
||||
}
|
||||
|
||||
[JsonProperty]
|
||||
public int Kcal
|
||||
{
|
||||
get; protected set;
|
||||
}
|
||||
|
||||
[JsonProperty]
|
||||
public double Fat
|
||||
{
|
||||
get; protected set;
|
||||
}
|
||||
|
||||
[JsonProperty]
|
||||
public double Carbs
|
||||
{
|
||||
get; protected set;
|
||||
}
|
||||
|
||||
[JsonProperty]
|
||||
public double Protein
|
||||
{
|
||||
get; protected set;
|
||||
}
|
||||
|
||||
// Make sure they are always written in lowercase
|
||||
[JsonProperty]
|
||||
public List<string> Tags
|
||||
{
|
||||
get; protected set;
|
||||
} = new List<string>();
|
||||
|
||||
public Product()
|
||||
{
|
||||
Name = "Unknown";
|
||||
}
|
||||
|
||||
public Product(string name, double cost, double fat, double carbs, double protein, List<string> tags)
|
||||
{
|
||||
Name = name;
|
||||
Cost = cost;
|
||||
Kcal = Convert.ToInt32((fat * 9) + (carbs * 4) + (protein * 4));
|
||||
Fat = fat;
|
||||
Carbs = carbs;
|
||||
Protein = protein;
|
||||
Tags = tags;
|
||||
}
|
||||
|
||||
public string Serialize()
|
||||
{
|
||||
return JsonConvert.SerializeObject(this);
|
||||
}
|
||||
|
||||
public virtual void CalculateElements()
|
||||
{
|
||||
throw new Exception("Don't call this method from object of class Product");
|
||||
}
|
||||
}
|
||||
}
|
193
Models/User.cs
Normal file
@ -0,0 +1,193 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
using Android.App;
|
||||
using Android.Content;
|
||||
using Android.OS;
|
||||
using Android.Runtime;
|
||||
using Android.Views;
|
||||
using Android.Widget;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Eat.Models
|
||||
{
|
||||
enum Sex
|
||||
{
|
||||
Male, Female
|
||||
};
|
||||
|
||||
enum ActivityLevel
|
||||
{
|
||||
VeryLow, Low, Medium, High, VeryHigh
|
||||
};
|
||||
|
||||
enum Goal
|
||||
{
|
||||
Reduce, Stay, Gain
|
||||
}
|
||||
|
||||
class User : Product
|
||||
{
|
||||
[JsonProperty]
|
||||
public Sex Sex
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
[JsonProperty]
|
||||
public ActivityLevel ActivityLevel
|
||||
{
|
||||
get; set;
|
||||
}
|
||||
[JsonProperty]
|
||||
public Goal Goal
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
[JsonProperty]
|
||||
public double Weight
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
[JsonProperty]
|
||||
public int Height
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
[JsonProperty]
|
||||
public DateTime Birthday
|
||||
{
|
||||
get => Birthday;
|
||||
set
|
||||
{
|
||||
Birthday = value;
|
||||
Age = (DateTime.Now.Subtract(Birthday).Days / 365);
|
||||
}
|
||||
}
|
||||
[JsonProperty]
|
||||
public int Age
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
[JsonProperty]
|
||||
public double FatRatio
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
[JsonProperty]
|
||||
public double CarbsRatio
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
[JsonProperty]
|
||||
public double ProteinRatio
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
static readonly Dictionary<ActivityLevel, double> ActivityFactor = new Dictionary<ActivityLevel, double>
|
||||
{
|
||||
{ActivityLevel.VeryLow, 1.2},
|
||||
{ActivityLevel.Low, 1.375},
|
||||
{ActivityLevel.Medium, 1.55},
|
||||
{ActivityLevel.High, 1.725},
|
||||
{ActivityLevel.VeryHigh, 1.9}
|
||||
};
|
||||
|
||||
public User(Sex sex, ActivityLevel activityLevel, Goal goal, double weight, int height, DateTime birthday)
|
||||
{
|
||||
Sex = sex;
|
||||
ActivityLevel = activityLevel;
|
||||
Goal = Goal;
|
||||
Weight = weight;
|
||||
Height = height;
|
||||
Birthday = birthday;
|
||||
|
||||
if (Goal == Goal.Reduce)
|
||||
{
|
||||
FatRatio = 0.3;
|
||||
CarbsRatio = 0.4;
|
||||
ProteinRatio = 0.3;
|
||||
}
|
||||
else if (Goal == Goal.Stay)
|
||||
{
|
||||
FatRatio = 0.275;
|
||||
CarbsRatio = 0.5;
|
||||
ProteinRatio = 0.225;
|
||||
}
|
||||
else
|
||||
{
|
||||
FatRatio = 0.2;
|
||||
CarbsRatio = 0.6;
|
||||
ProteinRatio = 0.2;
|
||||
}
|
||||
}
|
||||
|
||||
public User(Sex sex, ActivityLevel activityLevel, Goal goal, double weight, int height, DateTime birthday, double fatRatio, double carbsRatio, double proteinRatio)
|
||||
{
|
||||
Sex = sex;
|
||||
ActivityLevel = ActivityLevel;
|
||||
Goal = goal;
|
||||
Weight = weight;
|
||||
Height = height;
|
||||
Birthday = birthday;
|
||||
FatRatio = fatRatio;
|
||||
CarbsRatio = carbsRatio;
|
||||
ProteinRatio = proteinRatio;
|
||||
}
|
||||
|
||||
public override void CalculateElements()
|
||||
{
|
||||
// Kcal
|
||||
//
|
||||
//
|
||||
// Basic calculation
|
||||
//
|
||||
Kcal = Convert.ToInt32((10 * Weight) + (6.25 * Height) - (4.92 * Age));
|
||||
|
||||
// Gender
|
||||
//
|
||||
if (Sex == Sex.Male)
|
||||
{
|
||||
Kcal += 5;
|
||||
}
|
||||
else
|
||||
{
|
||||
Kcal -= 161;
|
||||
}
|
||||
|
||||
// ActivityFactor
|
||||
//
|
||||
Kcal = Convert.ToInt32(Kcal * ActivityFactor[ActivityLevel]);
|
||||
|
||||
// Goal
|
||||
//
|
||||
if (Goal == Goal.Reduce)
|
||||
{
|
||||
Kcal -= 250;
|
||||
}
|
||||
else if (Goal == Goal.Gain)
|
||||
{
|
||||
Kcal += 250;
|
||||
}
|
||||
|
||||
// Elements
|
||||
//
|
||||
//
|
||||
Fat = Kcal / 9.0 * FatRatio;
|
||||
Carbs = Kcal / 4.0 * CarbsRatio;
|
||||
Protein = Kcal / 4.0 * ProteinRatio;
|
||||
}
|
||||
}
|
||||
}
|
9
Properties/AndroidManifest.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:versionCode="1"
|
||||
android:versionName="1.0"
|
||||
package="Eat.Eat">
|
||||
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="27" />
|
||||
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme">
|
||||
</application>
|
||||
</manifest>
|
30
Properties/AssemblyInfo.cs
Normal file
@ -0,0 +1,30 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using Android.App;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("Eat")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Eat")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2018")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
44
Resources/AboutResources.txt
Normal file
@ -0,0 +1,44 @@
|
||||
Images, layout descriptions, binary blobs and string dictionaries can be included
|
||||
in your application as resource files. Various Android APIs are designed to
|
||||
operate on the resource IDs instead of dealing with images, strings or binary blobs
|
||||
directly.
|
||||
|
||||
For example, a sample Android app that contains a user interface layout (main.axml),
|
||||
an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png)
|
||||
would keep its resources in the "Resources" directory of the application:
|
||||
|
||||
Resources/
|
||||
drawable/
|
||||
icon.png
|
||||
|
||||
layout/
|
||||
main.axml
|
||||
|
||||
values/
|
||||
strings.xml
|
||||
|
||||
In order to get the build system to recognize Android resources, set the build action to
|
||||
"AndroidResource". The native Android APIs do not operate directly with filenames, but
|
||||
instead operate on resource IDs. When you compile an Android application that uses resources,
|
||||
the build system will package the resources for distribution and generate a class called "R"
|
||||
(this is an Android convention) that contains the tokens for each one of the resources
|
||||
included. For example, for the above Resources layout, this is what the R class would expose:
|
||||
|
||||
public class R {
|
||||
public class drawable {
|
||||
public const int icon = 0x123;
|
||||
}
|
||||
|
||||
public class layout {
|
||||
public const int main = 0x456;
|
||||
}
|
||||
|
||||
public class strings {
|
||||
public const int first_string = 0xabc;
|
||||
public const int second_string = 0xbcd;
|
||||
}
|
||||
}
|
||||
|
||||
You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main
|
||||
to reference the layout/main.axml file, or R.strings.first_string to reference the first
|
||||
string in the dictionary file values/strings.xml.
|
6626
Resources/Resource.designer.cs
generated
Normal file
13
Resources/drawable/FadingOutTextStyle.xml
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
|
||||
android:thickness="2dp"
|
||||
|
||||
android:shape="rectangle">
|
||||
<stroke android:width="1dp"
|
||||
|
||||
android:color="#555555"/>
|
||||
|
||||
|
||||
</shape>
|
BIN
Resources/drawable/lupa.png
Normal file
After Width: | Height: | Size: 17 KiB |
173
Resources/layout/meals.axml
Normal file
@ -0,0 +1,173 @@
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:minWidth="25px"
|
||||
android:minHeight="25px"
|
||||
android:layout_height="match_parent">
|
||||
<EditText
|
||||
android:layout_width="344dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/meals_products_tags"
|
||||
android:singleLine="true"
|
||||
android:hint="..."
|
||||
android:textSize="15dp" />
|
||||
<ImageButton
|
||||
android:src="@drawable/lupa"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="40dp"
|
||||
android:scaleType="centerInside"
|
||||
android:layout_toRightOf="@id/meals_products_tags"
|
||||
android:id="@+id/meals_products_search"/>
|
||||
<TextView
|
||||
android:layout_width="144dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/meals_products_tags"
|
||||
android:id="@+id/meals_products_name"
|
||||
android:text="Name"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true"
|
||||
android:clickable="true" />
|
||||
<TextView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/meals_products_tags"
|
||||
android:layout_toRightOf="@id/meals_products_name"
|
||||
android:id="@+id/meals_products_kcal"
|
||||
android:text="Kcal"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true"
|
||||
android:clickable="true" />
|
||||
<TextView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/meals_products_tags"
|
||||
android:layout_toRightOf="@id/meals_products_kcal"
|
||||
android:id="@+id/meals_products_fat"
|
||||
android:text="Fat"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true"
|
||||
android:clickable="true" />
|
||||
<TextView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/meals_products_tags"
|
||||
android:layout_toRightOf="@id/meals_products_fat"
|
||||
android:id="@+id/meals_products_carbs"
|
||||
android:text="Carbs"
|
||||
android:textStyle="normal"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true"
|
||||
android:clickable="true" />
|
||||
<TextView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/meals_products_tags"
|
||||
android:layout_toRightOf="@id/meals_products_carbs"
|
||||
android:id="@+id/meals_products_protein"
|
||||
android:text="Protein"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true"
|
||||
android:clickable="true" />
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/meals_products_tags"
|
||||
android:layout_toRightOf="@id/meals_products_protein"
|
||||
android:id="@+id/meals_products_cost"
|
||||
android:text="Cost"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true"
|
||||
android:clickable="true" />
|
||||
<ListView
|
||||
android:minWidth="25px"
|
||||
android:minHeight="25px"
|
||||
android:layout_below="@id/meals_products_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="200dp"
|
||||
android:id="@+id/meals_products_list" />
|
||||
<android.support.v4.widget.Space
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="16dp"
|
||||
android:layout_below="@id/meals_products_list"
|
||||
android:id="@+id/meals_space" />
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/meals_space"
|
||||
android:id="@+id/meals_used_products_header"
|
||||
android:text="Used products"
|
||||
android:textSize="16dp"
|
||||
android:singleLine="true"
|
||||
android:textAlignment="center" />
|
||||
<ListView
|
||||
android:minWidth="25px"
|
||||
android:minHeight="25px"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="80dp"
|
||||
android:layout_below="@id/meals_used_products_header"
|
||||
android:id="@+id/meals_used_products_list" />
|
||||
<EditText
|
||||
android:layout_width="144dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/meals_used_products_list"
|
||||
android:id="@+id/meals_completed_name"
|
||||
android:hint="Name"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true"
|
||||
android:clickable="true" />
|
||||
<TextView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/meals_completed_name"
|
||||
android:id="@+id/meals_completed_kcal"
|
||||
android:text="Kcal"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true"
|
||||
android:clickable="true" />
|
||||
<TextView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/meals_completed_kcal"
|
||||
android:id="@+id/meals_completed_fat"
|
||||
android:text="Fat"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true"
|
||||
android:clickable="true" />
|
||||
<TextView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/meals_completed_fat"
|
||||
android:id="@+id/meals_completed_carbs"
|
||||
android:text="Carbs"
|
||||
android:textStyle="normal"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true"
|
||||
android:clickable="true" />
|
||||
<TextView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/meals_completed_carbs"
|
||||
android:id="@+id/meals_completed_protein"
|
||||
android:text="Protein"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true"
|
||||
android:clickable="true" />
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/meals_completed_protein"
|
||||
android:id="@+id/meals_completed_cost"
|
||||
android:text="Cost"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true"
|
||||
android:clickable="true" />
|
||||
<Button
|
||||
android:text="Add"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/meals_completed_cost"
|
||||
android:id="@+id/meals_completed_add" />
|
||||
|
||||
</RelativeLayout>
|
163
Resources/layout/products.axml
Normal file
@ -0,0 +1,163 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:minWidth="25px"
|
||||
android:minHeight="25px"
|
||||
android:layout_height="match_parent">
|
||||
<EditText
|
||||
android:layout_width="192dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/products_add_name"
|
||||
android:textSize="15dp"
|
||||
android:hint="Name"
|
||||
android:singleLine="true" />
|
||||
<EditText
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toRightOf="@id/products_add_name"
|
||||
android:id="@+id/products_add_tags"
|
||||
android:textSize="15dp"
|
||||
android:hint="Tags"
|
||||
android:singleLine="true" />
|
||||
<EditText
|
||||
android:layout_width="96dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/products_add_name"
|
||||
android:id="@+id/products_add_fat"
|
||||
android:textSize="15dp"
|
||||
android:hint="Fat"
|
||||
android:singleLine="true"
|
||||
android:numeric="decimal"
|
||||
android:maxLength="5" />
|
||||
<EditText
|
||||
android:layout_width="96dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/products_add_name"
|
||||
android:layout_toRightOf="@id/products_add_fat"
|
||||
android:id="@+id/products_add_carbs"
|
||||
android:textSize="15dp"
|
||||
android:hint="Carbs"
|
||||
android:singleLine="true"
|
||||
android:numeric="decimal"
|
||||
android:maxLength="5" />
|
||||
<EditText
|
||||
android:layout_width="96dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/products_add_name"
|
||||
android:layout_toRightOf="@id/products_add_carbs"
|
||||
android:id="@+id/products_add_protein"
|
||||
android:textSize="15dp"
|
||||
android:hint="Protein"
|
||||
android:singleLine="true"
|
||||
android:numeric="decimal"
|
||||
android:maxLength="5" />
|
||||
<EditText
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/products_add_name"
|
||||
android:layout_toRightOf="@id/products_add_protein"
|
||||
android:id="@+id/products_add_cost"
|
||||
android:textSize="15dp"
|
||||
android:hint="Cost"
|
||||
android:singleLine="true"
|
||||
android:numeric="decimal"
|
||||
android:maxLength="5" />
|
||||
<Button
|
||||
android:text="add"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/products_add_fat"
|
||||
android:id="@+id/products_add_add" />
|
||||
<android.support.v4.widget.Space
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="32dp"
|
||||
android:layout_below="@id/products_add_add"
|
||||
android:id="@+id/products_space" />
|
||||
<EditText
|
||||
android:layout_width="344dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/products_tags"
|
||||
android:layout_below="@id/products_space"
|
||||
android:singleLine="true"
|
||||
android:hint="..."
|
||||
android:textSize="15dp" />
|
||||
<ImageButton
|
||||
android:src="@drawable/lupa"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="40dp"
|
||||
android:scaleType="centerInside"
|
||||
android:layout_below="@id/products_space"
|
||||
android:layout_toRightOf="@id/products_tags"
|
||||
android:id="@+id/products_search"/>
|
||||
<TextView
|
||||
android:layout_width="144dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/products_tags"
|
||||
android:id="@+id/products_name"
|
||||
android:text="Name"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true"
|
||||
android:clickable="true" />
|
||||
<TextView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/products_tags"
|
||||
android:layout_toRightOf="@id/products_name"
|
||||
android:id="@+id/products_kcal"
|
||||
android:text="Kcal"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true"
|
||||
android:clickable="true" />
|
||||
<TextView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/products_tags"
|
||||
android:layout_toRightOf="@id/products_kcal"
|
||||
android:id="@+id/products_fat"
|
||||
android:text="Fat"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true"
|
||||
android:clickable="true" />
|
||||
<TextView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/products_tags"
|
||||
android:layout_toRightOf="@id/products_fat"
|
||||
android:id="@+id/products_carbs"
|
||||
android:text="Carbs"
|
||||
android:textStyle="normal"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true"
|
||||
android:clickable="true" />
|
||||
<TextView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/products_tags"
|
||||
android:layout_toRightOf="@id/products_carbs"
|
||||
android:id="@+id/products_protein"
|
||||
android:text="Protein"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true"
|
||||
android:clickable="true" />
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/products_tags"
|
||||
android:layout_toRightOf="@id/products_protein"
|
||||
android:id="@+id/products_cost"
|
||||
android:text="Cost"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true"
|
||||
android:clickable="true" />
|
||||
<ListView
|
||||
android:minWidth="25px"
|
||||
android:minHeight="25px"
|
||||
android:layout_below="@id/products_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/products_list" />
|
||||
|
||||
</RelativeLayout>
|
59
Resources/layout/products_row.axml
Normal file
@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:minWidth="25px"
|
||||
android:minHeight="25px">
|
||||
<TextView
|
||||
android:layout_width="144dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/products_row_name"
|
||||
android:hint="Name"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true" />
|
||||
<TextView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toRightOf="@id/products_row_name"
|
||||
android:id="@+id/products_row_kcal"
|
||||
android:hint="Kcal"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true" />
|
||||
<TextView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toRightOf="@id/products_row_kcal"
|
||||
android:id="@+id/products_row_fat"
|
||||
android:hint="Fat"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true" />
|
||||
<TextView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toRightOf="@id/products_row_fat"
|
||||
android:id="@+id/products_row_carbs"
|
||||
android:hint="Carbs"
|
||||
android:textStyle="normal"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true" />
|
||||
<TextView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toRightOf="@id/products_row_carbs"
|
||||
android:id="@+id/products_row_protein"
|
||||
android:hint="Protein"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true" />
|
||||
<TextView
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toRightOf="@id/products_row_protein"
|
||||
android:id="@+id/products_row_cost"
|
||||
android:hint="Cost"
|
||||
android:textSize="14dp"
|
||||
android:singleLine="true" />
|
||||
</RelativeLayout>
|
5
Resources/mipmap-anydpi-v26/ic_launcher.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
5
Resources/mipmap-anydpi-v26/ic_launcher_round.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
BIN
Resources/mipmap-hdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
Resources/mipmap-hdpi/ic_launcher_foreground.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
Resources/mipmap-hdpi/ic_launcher_round.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
Resources/mipmap-mdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
Resources/mipmap-mdpi/ic_launcher_foreground.png
Normal file
After Width: | Height: | Size: 958 B |
BIN
Resources/mipmap-mdpi/ic_launcher_round.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
Resources/mipmap-xhdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
Resources/mipmap-xhdpi/ic_launcher_foreground.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
Resources/mipmap-xhdpi/ic_launcher_round.png
Normal file
After Width: | Height: | Size: 4.7 KiB |
BIN
Resources/mipmap-xxhdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
Resources/mipmap-xxhdpi/ic_launcher_foreground.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
Resources/mipmap-xxhdpi/ic_launcher_round.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
Resources/mipmap-xxxhdpi/ic_launcher.png
Normal file
After Width: | Height: | Size: 4.9 KiB |
BIN
Resources/mipmap-xxxhdpi/ic_launcher_foreground.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
Resources/mipmap-xxxhdpi/ic_launcher_round.png
Normal file
After Width: | Height: | Size: 11 KiB |
6
Resources/values/colors.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="colorPrimary">#2c3e50</color>
|
||||
<color name="colorPrimaryDark">#1B3147</color>
|
||||
<color name="colorAccent">#3498db</color>
|
||||
</resources>
|
4
Resources/values/ic_launcher_background.xml
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#2C3E50</color>
|
||||
</resources>
|
6
Resources/values/strings.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<resources>
|
||||
<string name="app_name">Eat!</string>
|
||||
<string name="action_settings">Settings</string>
|
||||
<string name="product_edit">Edit</string>
|
||||
<string name="product_delete">Delete</string>
|
||||
</resources>
|
11
Resources/values/styles.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<resources>
|
||||
|
||||
<!-- Base application theme. -->
|
||||
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="colorPrimary">@color/colorPrimary</item>
|
||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||
<item name="colorAccent">@color/colorAccent</item>
|
||||
</style>
|
||||
|
||||
</resources>
|