├── .gitignore ├── LICENSE ├── README.md ├── nuget └── TinyAccountManager.nuspec └── src ├── TinyAccountManager.Abstraction ├── Account.cs ├── AccountManager.cs ├── IAccountManager.cs └── TinyAccountManager.Abstraction.csproj ├── TinyAccountManager.Droid ├── AccountManager.cs ├── AndroidAccountManager.cs ├── AndroidAccountManagerPreM.cs ├── Properties │ └── AssemblyInfo.cs ├── Resources │ ├── AboutResources.txt │ └── Resource.Designer.cs ├── TinyAccountManager.Droid.csproj ├── TinyAccountManager.Droid.csproj.bak └── packages.config ├── TinyAccountManager.Sample ├── Properties │ └── AssemblyInfo.cs ├── TinyAccountManager.Sample.Android │ ├── Assets │ │ └── AboutAssets.txt │ ├── MainActivity.cs │ ├── Properties │ │ ├── AndroidManifest.xml │ │ └── AssemblyInfo.cs │ ├── Resources │ │ ├── AboutResources.txt │ │ ├── Resource.Designer.cs │ │ ├── drawable-hdpi │ │ │ └── icon.png │ │ ├── drawable-xhdpi │ │ │ └── icon.png │ │ ├── drawable-xxhdpi │ │ │ └── icon.png │ │ ├── drawable │ │ │ └── icon.png │ │ ├── layout │ │ │ ├── Tabbar.axml │ │ │ └── Toolbar.axml │ │ └── values │ │ │ └── styles.xml │ ├── TinyAccountManager.Sample.Android.csproj │ ├── TinyAccountManager.Sample.Android.csproj.bak │ └── packages.config ├── TinyAccountManager.Sample.UWP │ ├── App.xaml │ ├── App.xaml.cs │ ├── Assets │ │ ├── LockScreenLogo.scale-100.png │ │ ├── LockScreenLogo.scale-125.png │ │ ├── LockScreenLogo.scale-150.png │ │ ├── LockScreenLogo.scale-200.png │ │ ├── LockScreenLogo.scale-400.png │ │ ├── SplashScreen.scale-100.png │ │ ├── SplashScreen.scale-125.png │ │ ├── SplashScreen.scale-150.png │ │ ├── SplashScreen.scale-200.png │ │ ├── SplashScreen.scale-400.png │ │ ├── Square150x150Logo.scale-200.png │ │ ├── Square44x44Logo.scale-100.png │ │ ├── Square44x44Logo.scale-125.png │ │ ├── Square44x44Logo.scale-150.png │ │ ├── Square44x44Logo.scale-200.png │ │ ├── Square44x44Logo.scale-400.png │ │ ├── Square44x44Logo.targetsize-16_altform-unplated.png │ │ ├── Square44x44Logo.targetsize-24_altform-unplated.png │ │ ├── Square44x44Logo.targetsize-256_altform-unplated.png │ │ ├── Square44x44Logo.targetsize-32_altform-unplated.png │ │ ├── Square44x44Logo.targetsize-48_altform-unplated.png │ │ ├── StoreLogo.png │ │ ├── Wide310x150Logo.scale-100.png │ │ ├── Wide310x150Logo.scale-125.png │ │ ├── Wide310x150Logo.scale-150.png │ │ ├── Wide310x150Logo.scale-200.png │ │ └── Wide310x150Logo.scale-400.png │ ├── MainPage.xaml │ ├── MainPage.xaml.cs │ ├── Package.appxmanifest │ ├── Properties │ │ ├── AssemblyInfo.cs │ │ └── Default.rd.xml │ ├── TinyAccountManager.Sample.UWP.csproj │ └── project.json ├── TinyAccountManager.Sample.cs ├── TinyAccountManager.Sample.csproj ├── TinyAccountManager.Sample.iOS │ ├── AppDelegate.cs │ ├── Entitlements.plist │ ├── Info.plist │ ├── Main.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── Resources │ │ ├── Default-568h@2x.png │ │ ├── Default-Portrait.png │ │ ├── Default-Portrait@2x.png │ │ ├── Default.png │ │ ├── Default@2x.png │ │ ├── Icon-60@2x.png │ │ ├── Icon-60@3x.png │ │ ├── Icon-76.png │ │ ├── Icon-76@2x.png │ │ ├── Icon-Small-40.png │ │ ├── Icon-Small-40@2x.png │ │ ├── Icon-Small-40@3x.png │ │ ├── Icon-Small.png │ │ ├── Icon-Small@2x.png │ │ ├── Icon-Small@3x.png │ │ └── LaunchScreen.storyboard │ ├── TinyAccountManager.Sample.iOS.csproj │ ├── iTunesArtwork │ ├── iTunesArtwork@2x │ └── packages.config ├── TinyAccountManager.Sample │ ├── App.xaml │ ├── App.xaml.cs │ ├── MainPage.xaml │ ├── MainPage.xaml.cs │ ├── TinyAccountManager.Sample.projitems │ └── TinyAccountManager.Sample.shproj └── packages.config ├── TinyAccountManager.UWP ├── AccountManager.cs ├── Properties │ ├── AssemblyInfo.cs │ └── TinyAccountManager.UWP.rd.xml ├── TinyAccountManager.UWP.csproj └── UWPAccountManager.cs ├── TinyAccountManager.iOS ├── AccountManager.cs ├── Properties │ └── AssemblyInfo.cs ├── TinyAccountManager.iOS.csproj ├── iOSAccountManager.cs └── packages.config └── TinyAccountManager.sln /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.suo 8 | *.user 9 | *.userosscache 10 | *.sln.docstates 11 | 12 | # User-specific files (MonoDevelop/Xamarin Studio) 13 | *.userprefs 14 | 15 | # Build results 16 | [Dd]ebug/ 17 | [Dd]ebugPublic/ 18 | [Rr]elease/ 19 | [Rr]eleases/ 20 | x64/ 21 | x86/ 22 | bld/ 23 | [Bb]in/ 24 | [Oo]bj/ 25 | [Ll]og/ 26 | 27 | # Visual Studio 2015 cache/options directory 28 | .vs/ 29 | # Uncomment if you have tasks that create the project's static files in wwwroot 30 | #wwwroot/ 31 | 32 | # MSTest test Results 33 | [Tt]est[Rr]esult*/ 34 | [Bb]uild[Ll]og.* 35 | 36 | # NUNIT 37 | *.VisualState.xml 38 | TestResult.xml 39 | 40 | # Build Results of an ATL Project 41 | [Dd]ebugPS/ 42 | [Rr]eleasePS/ 43 | dlldata.c 44 | 45 | # .NET Core 46 | project.lock.json 47 | project.fragment.lock.json 48 | artifacts/ 49 | **/Properties/launchSettings.json 50 | 51 | *_i.c 52 | *_p.c 53 | *_i.h 54 | *.ilk 55 | *.meta 56 | *.obj 57 | *.pch 58 | *.pdb 59 | *.pgc 60 | *.pgd 61 | *.rsp 62 | *.sbr 63 | *.tlb 64 | *.tli 65 | *.tlh 66 | *.tmp 67 | *.tmp_proj 68 | *.log 69 | *.vspscc 70 | *.vssscc 71 | .builds 72 | *.pidb 73 | *.svclog 74 | *.scc 75 | 76 | # Chutzpah Test files 77 | _Chutzpah* 78 | 79 | # Visual C++ cache files 80 | ipch/ 81 | *.aps 82 | *.ncb 83 | *.opendb 84 | *.opensdf 85 | *.sdf 86 | *.cachefile 87 | *.VC.db 88 | *.VC.VC.opendb 89 | 90 | # Visual Studio profiler 91 | *.psess 92 | *.vsp 93 | *.vspx 94 | *.sap 95 | 96 | # TFS 2012 Local Workspace 97 | $tf/ 98 | 99 | # Guidance Automation Toolkit 100 | *.gpState 101 | 102 | # ReSharper is a .NET coding add-in 103 | _ReSharper*/ 104 | *.[Rr]e[Ss]harper 105 | *.DotSettings.user 106 | 107 | # JustCode is a .NET coding add-in 108 | .JustCode 109 | 110 | # TeamCity is a build add-in 111 | _TeamCity* 112 | 113 | # DotCover is a Code Coverage Tool 114 | *.dotCover 115 | 116 | # Visual Studio code coverage results 117 | *.coverage 118 | *.coveragexml 119 | 120 | # NCrunch 121 | _NCrunch_* 122 | .*crunch*.local.xml 123 | nCrunchTemp_* 124 | 125 | # MightyMoose 126 | *.mm.* 127 | AutoTest.Net/ 128 | 129 | # Web workbench (sass) 130 | .sass-cache/ 131 | 132 | # Installshield output folder 133 | [Ee]xpress/ 134 | 135 | # DocProject is a documentation generator add-in 136 | DocProject/buildhelp/ 137 | DocProject/Help/*.HxT 138 | DocProject/Help/*.HxC 139 | DocProject/Help/*.hhc 140 | DocProject/Help/*.hhk 141 | DocProject/Help/*.hhp 142 | DocProject/Help/Html2 143 | DocProject/Help/html 144 | 145 | # Click-Once directory 146 | publish/ 147 | 148 | # Publish Web Output 149 | *.[Pp]ublish.xml 150 | *.azurePubxml 151 | # TODO: Comment the next line if you want to checkin your web deploy settings 152 | # but database connection strings (with potential passwords) will be unencrypted 153 | *.pubxml 154 | *.publishproj 155 | 156 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 157 | # checkin your Azure Web App publish settings, but sensitive information contained 158 | # in these scripts will be unencrypted 159 | PublishScripts/ 160 | 161 | # NuGet Packages 162 | *.nupkg 163 | # The packages folder can be ignored because of Package Restore 164 | **/packages/* 165 | # except build/, which is used as an MSBuild target. 166 | !**/packages/build/ 167 | # Uncomment if necessary however generally it will be regenerated when needed 168 | #!**/packages/repositories.config 169 | # NuGet v3's project.json files produces more ignorable files 170 | *.nuget.props 171 | *.nuget.targets 172 | 173 | # Microsoft Azure Build Output 174 | csx/ 175 | *.build.csdef 176 | 177 | # Microsoft Azure Emulator 178 | ecf/ 179 | rcf/ 180 | 181 | # Windows Store app package directories and files 182 | AppPackages/ 183 | BundleArtifacts/ 184 | Package.StoreAssociation.xml 185 | _pkginfo.txt 186 | 187 | # Visual Studio cache files 188 | # files ending in .cache can be ignored 189 | *.[Cc]ache 190 | # but keep track of directories ending in .cache 191 | !*.[Cc]ache/ 192 | 193 | # Others 194 | ClientBin/ 195 | ~$* 196 | *~ 197 | *.dbmdl 198 | *.dbproj.schemaview 199 | *.jfm 200 | *.pfx 201 | *.publishsettings 202 | orleans.codegen.cs 203 | 204 | # Since there are multiple workflows, uncomment next line to ignore bower_components 205 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 206 | #bower_components/ 207 | 208 | # RIA/Silverlight projects 209 | Generated_Code/ 210 | 211 | # Backup & report files from converting an old project file 212 | # to a newer Visual Studio version. Backup files are not needed, 213 | # because we have git ;-) 214 | _UpgradeReport_Files/ 215 | Backup*/ 216 | UpgradeLog*.XML 217 | UpgradeLog*.htm 218 | 219 | # SQL Server files 220 | *.mdf 221 | *.ldf 222 | *.ndf 223 | 224 | # Business Intelligence projects 225 | *.rdl.data 226 | *.bim.layout 227 | *.bim_*.settings 228 | 229 | # Microsoft Fakes 230 | FakesAssemblies/ 231 | 232 | # GhostDoc plugin setting file 233 | *.GhostDoc.xml 234 | 235 | # Node.js Tools for Visual Studio 236 | .ntvs_analysis.dat 237 | node_modules/ 238 | 239 | # Typescript v1 declaration files 240 | typings/ 241 | 242 | # Visual Studio 6 build log 243 | *.plg 244 | 245 | # Visual Studio 6 workspace options file 246 | *.opt 247 | 248 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 249 | *.vbw 250 | 251 | # Visual Studio LightSwitch build output 252 | **/*.HTMLClient/GeneratedArtifacts 253 | **/*.DesktopClient/GeneratedArtifacts 254 | **/*.DesktopClient/ModelManifest.xml 255 | **/*.Server/GeneratedArtifacts 256 | **/*.Server/ModelManifest.xml 257 | _Pvt_Extensions 258 | 259 | # Paket dependency manager 260 | .paket/paket.exe 261 | paket-files/ 262 | 263 | # FAKE - F# Make 264 | .fake/ 265 | 266 | # JetBrains Rider 267 | .idea/ 268 | *.sln.iml 269 | 270 | # CodeRush 271 | .cr/ 272 | 273 | # Python Tools for Visual Studio (PTVS) 274 | __pycache__/ 275 | *.pyc 276 | 277 | # Cake - Uncomment if you are using it 278 | # tools/** 279 | # !tools/packages.config 280 | 281 | # Telerik's JustMock configuration file 282 | *.jmconfig 283 | 284 | # BizTalk build output 285 | *.btp.cs 286 | *.btm.cs 287 | *.odx.cs 288 | *.xsd.cs 289 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Daniel Hindrikes 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Xamarin.Essentials 2 | Xamarin.Essentials will have this functionallity, please take a look at it. But we will continue to maintain TinyAccountMananger for thoose who use it. 3 | https://docs.microsoft.com/en-us/xamarin/essentials/ 4 | 5 | # TinyAccountManager 6 | Account manager for Xamarin and UWP. Store account information in your app in a secure way. 7 | 8 | ## Build status 9 | | Platform | Status | 10 | |---|---| 11 | | iOS | | 12 | | Android | | 13 | | UWP | | 14 | 15 | ## Get started 16 | This is as short guide how to get started using TinyAccountManager. 17 | 18 | ### How to install 19 | The easiest way is to install the package from NuGet: 20 | 21 | ``` 22 | Install-Package TinyAccountManager 23 | ``` 24 | 25 | You should install it on all your platform project and if you have other projects in your solution where you want to access it, you should install it there as well. 26 | 27 | ### How to use 28 | Here is a small get started guide, there are also a sample project if you take a look in the src folder. 29 | 30 | #### Initialization 31 | The first you need to do is to initialize the AccountManager per platform. 32 | 33 | ```csharp 34 | //iOS 35 | TinyAccountManager.iOS.AccountManager.Initialize(); 36 | 37 | //Android 38 | TinyAccountManager.Droid.AccountManager.Initialize(); 39 | 40 | //UWP 41 | TinyAccountManager.UWP.AccountManager.Initialize(); 42 | ``` 43 | 44 | #### Save 45 | The only filed that are required is ServiceId. 46 | 47 | ```csharp 48 | var account = new Account() 49 | { 50 | ServiceId = "TinyAccountManagerSample", 51 | Username = "dhindrik" 52 | }; 53 | 54 | account.Properties.Add("Password", "MySecretPassword"); 55 | 56 | await AccountMananger.Current.Save(account); 57 | ``` 58 | 59 | #### Get and Exists 60 | It's recommended that you use Exists before Get, if you using Get and there is no matching account it will throw an exception. 61 | ```csharp 62 | Account account = null; 63 | 64 | var exists = await AccountManager.Current.Exists("TinyAccountManagerSample") 65 | 66 | if(exists) 67 |  account = await AccountManager.Current.Get("TinyAccountManagerSample") 68 | ``` 69 | 70 | #### Remove 71 | ```csharp 72 | await AccountManager.Current.Remove("TinyAccountManagerSample") 73 | ``` 74 | 75 | #### IOC 76 | If you want to use IOC instead of the singleton pattern, you just register the implemenation for each platform with the IAccountManager interface. If you select this way you don't have to run Initialize on each platform 77 | 78 | **iOS:** iOSAccountManager 79 | 80 | **Android:** AndroidAccountManager 81 | 82 | **UWP:** UWPAccountManager 83 | -------------------------------------------------------------------------------- /nuget/TinyAccountManager.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | TinyAccountManager 5 | 1.0.0 6 | Account manager for Xamarin and UWP. 7 | Daniel Hindrikes and Johan Karlsson 8 | Daniel Hindrikes 9 | https://github.com/dhindrik/TinyAccountManager/blob/master/LICENSE 10 | https://github.com/dhindrik/TinyAccountManager 11 | 12 | false 13 | 14 | Account manager for Xamarin and UWP. Store account information in your app in a secure way. 15 | 16 | 17 | 18 | 19 | 20 | xamarin, plugin, windows, android, xamarin.forms, ios 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Abstraction/Account.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace TinyAccountManager.Abstraction 6 | { 7 | public class Account 8 | { 9 | public string ServiceId { get; set; } 10 | public string Username { get; set; } 11 | public Dictionary Properties { get; set; } = new Dictionary(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Abstraction/AccountManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace TinyAccountManager.Abstraction 4 | { 5 | public static class AccountManager 6 | { 7 | public static IAccountManager Current { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Abstraction/IAccountManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using System.Threading.Tasks; 5 | 6 | namespace TinyAccountManager.Abstraction 7 | { 8 | public interface IAccountManager 9 | { 10 | Task Save(Account account); 11 | Task Get(string serviceId); 12 | Task Exists(string serviceId); 13 | Task Remove(string serviceId); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Abstraction/TinyAccountManager.Abstraction.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard1.0 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Droid/AccountManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | using Android.App; 7 | using Android.Content; 8 | using Android.OS; 9 | using Android.Runtime; 10 | using Android.Views; 11 | using Android.Widget; 12 | 13 | namespace TinyAccountManager.Droid 14 | { 15 | public class AccountManager 16 | { 17 | public static void Initialize() 18 | { 19 | if (Build.VERSION.SdkInt >= BuildVersionCodes.M) 20 | Abstraction.AccountManager.Current = new AndroidAccountManager(); 21 | else 22 | Abstraction.AccountManager.Current = new AndroidAccountManagerPreM(Application.Context, "AccountManagerSharedPreferences"); 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /src/TinyAccountManager.Droid/AndroidAccountManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using Android.App; 7 | using Android.Content; 8 | using Android.OS; 9 | using Android.Runtime; 10 | using Android.Views; 11 | using Android.Widget; 12 | using TinyAccountManager.Abstraction; 13 | using Java.Security; 14 | using Android.Security; 15 | using Android.Security.Keystore; 16 | using Javax.Crypto; 17 | using Javax.Crypto.Spec; 18 | using Newtonsoft.Json; 19 | using System.IO; 20 | 21 | namespace TinyAccountManager.Droid 22 | { 23 | public class AndroidAccountManager : IAccountManager 24 | { 25 | public const string AesMode = "AES/GCM/NoPadding"; 26 | public const string KeyStoreType = "AndroidKeyStore"; 27 | 28 | private IKey GetKey(string alias) 29 | { 30 | 31 | 32 | var keyStore = KeyStore.GetInstance(KeyStoreType); 33 | keyStore.Load(null); 34 | 35 | if (!keyStore.ContainsAlias(alias)) 36 | { 37 | var generator = KeyGenerator.GetInstance(KeyProperties.KeyAlgorithmAes, KeyStoreType); 38 | generator.Init(new KeyGenParameterSpec.Builder(alias, KeyStorePurpose.Encrypt | KeyStorePurpose.Decrypt) 39 | .SetBlockModes(KeyProperties.BlockModeGcm) 40 | .SetEncryptionPaddings(KeyProperties.EncryptionPaddingNone) 41 | .SetRandomizedEncryptionRequired(false) 42 | .Build()); 43 | 44 | generator.GenerateKey(); 45 | } 46 | 47 | var key = keyStore.GetKey(alias, null); 48 | 49 | return key; 50 | } 51 | 52 | 53 | 54 | public async Task Exists(string serviceId) 55 | { 56 | try 57 | { 58 | 59 | var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 60 | 61 | var filePath = Path.Combine(documentsPath, serviceId); 62 | 63 | return File.Exists(filePath); 64 | } 65 | catch (Exception) 66 | { 67 | return false; 68 | } 69 | } 70 | 71 | public async Task Get(string serviceId) 72 | { 73 | 74 | var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 75 | 76 | var filePath = Path.Combine(documentsPath, serviceId); 77 | 78 | var secretAccountJson = File.ReadAllText(filePath); 79 | 80 | var secretAccount = JsonConvert.DeserializeObject(secretAccountJson); 81 | 82 | var key = GetKey(serviceId); 83 | 84 | var cipher = Cipher.GetInstance(AesMode); 85 | cipher.Init(CipherMode.DecryptMode, key, new GCMParameterSpec(128, secretAccount.IV)); 86 | 87 | var encryptedBytes = Convert.FromBase64String(secretAccount.EncryptedAccount); 88 | 89 | var decryptedBytes = cipher.DoFinal(encryptedBytes); 90 | 91 | var json = Encoding.UTF8.GetString(decryptedBytes); 92 | 93 | var account = JsonConvert.DeserializeObject(json); 94 | 95 | return account; 96 | } 97 | 98 | public async Task Remove(string serviceId) 99 | { 100 | var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 101 | 102 | var filePath = Path.Combine(documentsPath, serviceId); 103 | 104 | File.Delete(filePath); 105 | } 106 | 107 | public async Task Save(Account account) 108 | { 109 | if (string.IsNullOrWhiteSpace(account.ServiceId)) 110 | { 111 | throw new Exception("serviceId must be set."); 112 | } 113 | 114 | var key = GetKey(account.ServiceId); 115 | 116 | var cipher = Cipher.GetInstance(AesMode); 117 | cipher.Init(CipherMode.EncryptMode, key); 118 | 119 | var iv = cipher.GetIV(); 120 | 121 | var json = JsonConvert.SerializeObject(account); 122 | 123 | var bytes = Encoding.UTF8.GetBytes(json); 124 | 125 | var encodedBytes = cipher.DoFinal(bytes); 126 | 127 | var base64String = Convert.ToBase64String(encodedBytes); 128 | 129 | var secretAccount = new SecretAccount() 130 | { 131 | EncryptedAccount = base64String, 132 | IV = iv 133 | }; 134 | 135 | var secretAccountJson = JsonConvert.SerializeObject(secretAccount); 136 | 137 | var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 138 | 139 | var filePath = Path.Combine(documentsPath, account.ServiceId); 140 | System.IO.File.WriteAllText(filePath, secretAccountJson); 141 | 142 | } 143 | } 144 | 145 | internal class SecretAccount 146 | { 147 | public string EncryptedAccount { get; set; } 148 | public byte[] IV { get; set; } 149 | } 150 | } -------------------------------------------------------------------------------- /src/TinyAccountManager.Droid/AndroidAccountManagerPreM.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using Android.App; 8 | using Android.Content; 9 | using Android.OS; 10 | using Android.Runtime; 11 | using Android.Security; 12 | using Android.Security.Keystore; 13 | using Android.Views; 14 | using Android.Widget; 15 | using Java.IO; 16 | using Java.Math; 17 | using Java.Security; 18 | using Java.Util; 19 | using Javax.Crypto; 20 | using Javax.Crypto.Spec; 21 | using Javax.Security.Auth.X500; 22 | using Newtonsoft.Json; 23 | using TinyAccountManager.Abstraction; 24 | using File = System.IO.File; 25 | 26 | //using Calendar = Android.Icu.Util.Calendar; 27 | 28 | namespace TinyAccountManager.Droid 29 | { 30 | public class AndroidAccountManagerPreM : IAccountManager 31 | { 32 | private const string AndroidKeyStore = "AndroidKeyStore"; 33 | private const string RSAMode = "RSA/ECB/PKCS1Padding"; 34 | private const string AESMode = "AES/ECB/PKCS7Padding"; 35 | private const string EncryptedAESKey = "EncryptedAESKey"; 36 | 37 | private readonly Context _context; 38 | private readonly KeyStore _keyStore; 39 | private readonly string _sharedPreferenceName; 40 | 41 | public AndroidAccountManagerPreM(Context context, string sharedPreferenceName) 42 | { 43 | _context = context; 44 | _sharedPreferenceName = sharedPreferenceName; 45 | 46 | _keyStore = KeyStore.GetInstance(AndroidKeyStore); 47 | _keyStore.Load(null); 48 | } 49 | 50 | #region Public members 51 | public async Task Save(Account account) 52 | { 53 | if (string.IsNullOrWhiteSpace(account.ServiceId)) 54 | { 55 | throw new Exception("serviceId must be set."); 56 | } 57 | 58 | GenerateAndStoreKey(account.ServiceId); 59 | 60 | var c = Cipher.GetInstance(AESMode, "BC"); 61 | c.Init(CipherMode.EncryptMode, GetSecretKey(_context, account.ServiceId)); 62 | var iv = c.GetIV(); 63 | 64 | var json = JsonConvert.SerializeObject(account); 65 | 66 | var bytes = Encoding.UTF8.GetBytes(json); 67 | 68 | var encodedBytes = c.DoFinal(bytes); 69 | 70 | var base64String = Convert.ToBase64String(encodedBytes); 71 | 72 | var secretAccount = new SecretAccount() 73 | { 74 | EncryptedAccount = base64String, 75 | IV = iv 76 | }; 77 | 78 | var secretAccountJson = JsonConvert.SerializeObject(secretAccount); 79 | 80 | var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 81 | 82 | var filePath = Path.Combine(documentsPath, account.ServiceId); 83 | System.IO.File.WriteAllText(filePath, secretAccountJson); 84 | } 85 | 86 | public async Task Get(string serviceId) 87 | { 88 | var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 89 | 90 | var filePath = Path.Combine(documentsPath, serviceId); 91 | 92 | var secretAccountJson = File.ReadAllText(filePath); 93 | 94 | var secretAccount = JsonConvert.DeserializeObject(secretAccountJson); 95 | 96 | var cipher = Cipher.GetInstance(AESMode, "BC"); 97 | cipher.Init(CipherMode.DecryptMode, GetSecretKey(_context, serviceId)); 98 | 99 | var encryptedBytes = Convert.FromBase64String(secretAccount.EncryptedAccount); 100 | 101 | var decryptedBytes = cipher.DoFinal(encryptedBytes); 102 | 103 | var json = Encoding.UTF8.GetString(decryptedBytes); 104 | 105 | var account = JsonConvert.DeserializeObject(json); 106 | 107 | return account; 108 | } 109 | 110 | public async Task Exists(string serviceId) 111 | { 112 | try 113 | { 114 | var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 115 | 116 | var filePath = Path.Combine(documentsPath, serviceId); 117 | 118 | return File.Exists(filePath); 119 | } 120 | catch (Exception) 121 | { 122 | return false; 123 | } 124 | } 125 | 126 | public async Task Remove(string serviceId) 127 | { 128 | var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 129 | 130 | var filePath = Path.Combine(documentsPath, serviceId); 131 | 132 | File.Delete(filePath); 133 | } 134 | #endregion 135 | 136 | #region Private members 137 | 138 | private IKey GetSecretKey(Context context, string keyAlias) 139 | { 140 | var pref = context.GetSharedPreferences(_sharedPreferenceName, FileCreationMode.Private); 141 | var enryptedKeyB64 = pref.GetString(EncryptedAESKey, null); 142 | // need to check null, omitted here 143 | var encryptedKey = Convert.FromBase64String(enryptedKeyB64); 144 | var key = RSADecrypt(encryptedKey, keyAlias); 145 | return new SecretKeySpec(key, "AES"); 146 | } 147 | 148 | 149 | private void GenerateAndStoreKey(string keyAlias) 150 | { 151 | var pref = _context.GetSharedPreferences(_sharedPreferenceName, FileCreationMode.Private); 152 | var enryptedKeyB64 = pref.GetString(EncryptedAESKey, null); 153 | if (string.IsNullOrWhiteSpace(enryptedKeyB64)) 154 | { 155 | var key = new byte[16]; 156 | var secureRandom = new SecureRandom(); 157 | secureRandom.NextBytes(key); 158 | var encryptedKey = RSAEncrypt(key, keyAlias); 159 | enryptedKeyB64 = Convert.ToBase64String(encryptedKey); 160 | var edit = pref.Edit(); 161 | edit.PutString(EncryptedAESKey, enryptedKeyB64); 162 | edit.Commit(); 163 | } 164 | } 165 | 166 | private void GenerateRSAKeyPairs(string alias) 167 | { 168 | // Generate the RSA key pairs 169 | if (!_keyStore.ContainsAlias(alias)) 170 | { 171 | // Generate a key pair for encryption 172 | var start = Calendar.GetInstance(Locale.English); 173 | var end = Calendar.GetInstance(Locale.English); 174 | end.Add(CalendarField.Year, 30); 175 | var spec = new KeyPairGeneratorSpec.Builder(_context) 176 | .SetAlias(alias) 177 | .SetSubject(new X500Principal("CN=" + alias)) 178 | .SetSerialNumber(BigInteger.Ten) 179 | .SetStartDate(start.Time) 180 | .SetEndDate(end.Time) 181 | .Build(); 182 | var kpg = KeyPairGenerator.GetInstance(KeyProperties.KeyAlgorithmRsa, AndroidKeyStore); 183 | kpg.Initialize(spec); 184 | kpg.GenerateKeyPair(); 185 | } 186 | } 187 | 188 | private byte[] RSAEncrypt(byte[] secret, string keyAlias) 189 | { 190 | var privateKeyEntry = (KeyStore.PrivateKeyEntry)_keyStore.GetEntry(keyAlias, null); 191 | 192 | if (privateKeyEntry == null) 193 | { 194 | GenerateRSAKeyPairs(keyAlias); 195 | privateKeyEntry = (KeyStore.PrivateKeyEntry)_keyStore.GetEntry(keyAlias, null); 196 | } 197 | 198 | // Encrypt the text 199 | var cipher = Cipher.GetInstance(RSAMode, "AndroidOpenSSL"); 200 | cipher.Init(CipherMode.EncryptMode, privateKeyEntry.Certificate.PublicKey); 201 | 202 | return cipher.DoFinal(secret); 203 | } 204 | 205 | private byte[] RSADecrypt(byte[] encrypted, string keyAlias) 206 | { 207 | var privateKeyEntry = (KeyStore.PrivateKeyEntry)_keyStore.GetEntry(keyAlias, null); 208 | var cipher = Cipher.GetInstance(RSAMode, "AndroidOpenSSL"); 209 | cipher.Init(CipherMode.DecryptMode, privateKeyEntry.PrivateKey); 210 | 211 | return cipher.DoFinal(encrypted); 212 | } 213 | 214 | #endregion 215 | } 216 | } -------------------------------------------------------------------------------- /src/TinyAccountManager.Droid/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | using Android.App; 5 | 6 | // General Information about an assembly is controlled through the following 7 | // set of attributes. Change these attribute values to modify the information 8 | // associated with an assembly. 9 | [assembly: AssemblyTitle("TinyAccountManager.Droid")] 10 | [assembly: AssemblyDescription("")] 11 | [assembly: AssemblyConfiguration("")] 12 | [assembly: AssemblyCompany("")] 13 | [assembly: AssemblyProduct("TinyAccountManager.Droid")] 14 | [assembly: AssemblyCopyright("Copyright © 2017")] 15 | [assembly: AssemblyTrademark("")] 16 | [assembly: AssemblyCulture("")] 17 | [assembly: ComVisible(false)] 18 | 19 | // Version information for an assembly consists of the following four values: 20 | // 21 | // Major Version 22 | // Minor Version 23 | // Build Number 24 | // Revision 25 | // 26 | // You can specify all the values or you can default the Build and Revision Numbers 27 | // by using the '*' as shown below: 28 | // [assembly: AssemblyVersion("1.0.*")] 29 | [assembly: AssemblyVersion("1.0.0.0")] 30 | [assembly: AssemblyFileVersion("1.0.0.0")] 31 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Droid/Resources/AboutResources.txt: -------------------------------------------------------------------------------- 1 | Images, layout descriptions, binary blobs and string dictionaries can be included 2 | in your application as resource files. Various Android APIs are designed to 3 | operate on the resource IDs instead of dealing with images, strings or binary blobs 4 | directly. 5 | 6 | For example, a sample Android app that contains a user interface layout (main.axml), 7 | an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) 8 | would keep its resources in the "Resources" directory of the application: 9 | 10 | Resources/ 11 | drawable/ 12 | icon.png 13 | 14 | layout/ 15 | main.axml 16 | 17 | values/ 18 | strings.xml 19 | 20 | In order to get the build system to recognize Android resources, set the build action to 21 | "AndroidResource". The native Android APIs do not operate directly with filenames, but 22 | instead operate on resource IDs. When you compile an Android application that uses resources, 23 | the build system will package the resources for distribution and generate a class called "R" 24 | (this is an Android convention) that contains the tokens for each one of the resources 25 | included. For example, for the above Resources layout, this is what the R class would expose: 26 | 27 | public class R { 28 | public class drawable { 29 | public const int icon = 0x123; 30 | } 31 | 32 | public class layout { 33 | public const int main = 0x456; 34 | } 35 | 36 | public class strings { 37 | public const int first_string = 0xabc; 38 | public const int second_string = 0xbcd; 39 | } 40 | } 41 | 42 | You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main 43 | to reference the layout/main.axml file, or R.strings.first_string to reference the first 44 | string in the dictionary file values/strings.xml. -------------------------------------------------------------------------------- /src/TinyAccountManager.Droid/Resources/Resource.Designer.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Droid/Resources/Resource.Designer.cs -------------------------------------------------------------------------------- /src/TinyAccountManager.Droid/TinyAccountManager.Droid.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Debug 5 | AnyCPU 6 | 8.0.30703 7 | 2.0 8 | {FAF32095-2542-4068-B4EE-20786357CDB4} 9 | {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10 | Library 11 | Properties 12 | TinyAccountManager.Droid 13 | TinyAccountManager.Droid 14 | 512 15 | Resources\Resource.Designer.cs 16 | Off 17 | True 18 | v8.1 19 | 20 | 21 | true 22 | full 23 | false 24 | bin\Debug\ 25 | DEBUG;TRACE 26 | prompt 27 | 4 28 | 29 | 30 | pdbonly 31 | true 32 | bin\Release\ 33 | TRACE 34 | prompt 35 | 4 36 | 37 | 38 | 39 | 40 | 41 | 42 | ..\packages\Newtonsoft.Json.10.0.3\lib\netstandard1.3\Newtonsoft.Json.dll 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | {e8eb6ee2-30fc-4bc3-ae8c-4160172a714c} 65 | TinyAccountManager.Abstraction 66 | 67 | 68 | 69 | 76 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Droid/TinyAccountManager.Droid.csproj.bak: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Debug 5 | AnyCPU 6 | 8.0.30703 7 | 2.0 8 | {FAF32095-2542-4068-B4EE-20786357CDB4} 9 | {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10 | Library 11 | Properties 12 | TinyAccountManager.Droid 13 | TinyAccountManager.Droid 14 | 512 15 | Resources\Resource.Designer.cs 16 | Off 17 | True 18 | v8.0 19 | 20 | 21 | true 22 | full 23 | false 24 | bin\Debug\ 25 | DEBUG;TRACE 26 | prompt 27 | 4 28 | 29 | 30 | pdbonly 31 | true 32 | bin\Release\ 33 | TRACE 34 | prompt 35 | 4 36 | 37 | 38 | 39 | 40 | 41 | 42 | ..\packages\Newtonsoft.Json.10.0.3\lib\netstandard1.3\Newtonsoft.Json.dll 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | {e8eb6ee2-30fc-4bc3-ae8c-4160172a714c} 64 | TinyAccountManager.Abstraction 65 | 66 | 67 | 68 | 75 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Droid/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Resources; 2 | using System.Reflection; 3 | using System.Runtime.CompilerServices; 4 | using System.Runtime.InteropServices; 5 | 6 | // General Information about an assembly is controlled through the following 7 | // set of attributes. Change these attribute values to modify the information 8 | // associated with an assembly. 9 | [assembly: AssemblyTitle("TinyAccountManager.Sample")] 10 | [assembly: AssemblyDescription("")] 11 | [assembly: AssemblyConfiguration("")] 12 | [assembly: AssemblyCompany("")] 13 | [assembly: AssemblyProduct("TinyAccountManager.Sample")] 14 | [assembly: AssemblyCopyright("Copyright © 2014")] 15 | [assembly: AssemblyTrademark("")] 16 | [assembly: AssemblyCulture("")] 17 | [assembly: NeutralResourcesLanguage("en")] 18 | 19 | // Version information for an assembly consists of the following four values: 20 | // 21 | // Major Version 22 | // Minor Version 23 | // Build Number 24 | // Revision 25 | // 26 | // You can specify all the values or you can default the Build and Revision Numbers 27 | // by using the '*' as shown below: 28 | // [assembly: AssemblyVersion("1.0.*")] 29 | [assembly: AssemblyVersion("1.0.0.0")] 30 | [assembly: AssemblyFileVersion("1.0.0.0")] 31 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.Android/Assets/AboutAssets.txt: -------------------------------------------------------------------------------- 1 | Any raw assets you want to be deployed with your application can be placed in 2 | this directory (and child directories) and given a Build Action of "AndroidAsset". 3 | 4 | These files will be deployed with you package and will be accessible using Android's 5 | AssetManager, like this: 6 | 7 | public class ReadAsset : Activity 8 | { 9 | protected override void OnCreate (Bundle bundle) 10 | { 11 | base.OnCreate (bundle); 12 | 13 | InputStream input = Assets.Open ("my_asset.txt"); 14 | } 15 | } 16 | 17 | Additionally, some Android functions will automatically load asset files: 18 | 19 | Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); 20 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.Android/MainActivity.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | using Android.App; 4 | using Android.Content.PM; 5 | using Android.Runtime; 6 | using Android.Views; 7 | using Android.Widget; 8 | using Android.OS; 9 | 10 | namespace TinyAccountManager.Sample.Droid 11 | { 12 | [Activity (Label = "TinyAccountManager.Sample", Icon = "@drawable/icon", Theme="@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] 13 | public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity 14 | { 15 | protected override void OnCreate (Bundle bundle) 16 | { 17 | TabLayoutResource = Resource.Layout.Tabbar; 18 | ToolbarResource = Resource.Layout.Toolbar; 19 | 20 | TinyAccountManager.Droid.AccountManager.Initialize(); 21 | 22 | 23 | base.OnCreate (bundle); 24 | 25 | global::Xamarin.Forms.Forms.Init (this, bundle); 26 | LoadApplication (new TinyAccountManager.Sample.App ()); 27 | } 28 | } 29 | } 30 | 31 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.Android/Properties/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.Android/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | using Android.App; 5 | 6 | // General Information about an assembly is controlled through the following 7 | // set of attributes. Change these attribute values to modify the information 8 | // associated with an assembly. 9 | [assembly: AssemblyTitle("TinyAccountManager.Sample.Android")] 10 | [assembly: AssemblyDescription("")] 11 | [assembly: AssemblyConfiguration("")] 12 | [assembly: AssemblyCompany("")] 13 | [assembly: AssemblyProduct("TinyAccountManager.Sample.Android")] 14 | [assembly: AssemblyCopyright("Copyright © 2014")] 15 | [assembly: AssemblyTrademark("")] 16 | [assembly: AssemblyCulture("")] 17 | [assembly: ComVisible(false)] 18 | 19 | // Version information for an assembly consists of the following four values: 20 | // 21 | // Major Version 22 | // Minor Version 23 | // Build Number 24 | // Revision 25 | // 26 | // You can specify all the values or you can default the Build and Revision Numbers 27 | // by using the '*' as shown below: 28 | // [assembly: AssemblyVersion("1.0.*")] 29 | [assembly: AssemblyVersion("1.0.0.0")] 30 | [assembly: AssemblyFileVersion("1.0.0.0")] 31 | 32 | // Add some common permissions, these can be removed if not needed 33 | [assembly: UsesPermission(Android.Manifest.Permission.Internet)] 34 | [assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)] 35 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.Android/Resources/AboutResources.txt: -------------------------------------------------------------------------------- 1 | Images, layout descriptions, binary blobs and string dictionaries can be included 2 | in your application as resource files. Various Android APIs are designed to 3 | operate on the resource IDs instead of dealing with images, strings or binary blobs 4 | directly. 5 | 6 | For example, a sample Android app that contains a user interface layout (main.xml), 7 | an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) 8 | would keep its resources in the "Resources" directory of the application: 9 | 10 | Resources/ 11 | drawable-hdpi/ 12 | icon.png 13 | 14 | drawable-ldpi/ 15 | icon.png 16 | 17 | drawable-mdpi/ 18 | icon.png 19 | 20 | layout/ 21 | main.xml 22 | 23 | values/ 24 | strings.xml 25 | 26 | In order to get the build system to recognize Android resources, set the build action to 27 | "AndroidResource". The native Android APIs do not operate directly with filenames, but 28 | instead operate on resource IDs. When you compile an Android application that uses resources, 29 | the build system will package the resources for distribution and generate a class called 30 | "Resource" that contains the tokens for each one of the resources included. For example, 31 | for the above Resources layout, this is what the Resource class would expose: 32 | 33 | public class Resource { 34 | public class drawable { 35 | public const int icon = 0x123; 36 | } 37 | 38 | public class layout { 39 | public const int main = 0x456; 40 | } 41 | 42 | public class strings { 43 | public const int first_string = 0xabc; 44 | public const int second_string = 0xbcd; 45 | } 46 | } 47 | 48 | You would then use R.drawable.icon to reference the drawable/icon.png file, or Resource.layout.main 49 | to reference the layout/main.xml file, or Resource.strings.first_string to reference the first 50 | string in the dictionary file values/strings.xml. 51 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.Android/Resources/drawable-hdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.Android/Resources/drawable-hdpi/icon.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.Android/Resources/drawable-xhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.Android/Resources/drawable-xhdpi/icon.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.Android/Resources/drawable-xxhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.Android/Resources/drawable-xxhdpi/icon.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.Android/Resources/drawable/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.Android/Resources/drawable/icon.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.Android/Resources/layout/Tabbar.axml: -------------------------------------------------------------------------------- 1 | 2 | 12 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.Android/Resources/layout/Toolbar.axml: -------------------------------------------------------------------------------- 1 | 9 | 10 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.Android/Resources/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 26 | 27 | 30 | 31 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.Android/TinyAccountManager.Sample.Android.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | 8.0.30703 8 | 2.0 9 | {B55C2F88-6FD4-4376-A3EB-260C757CB789} 10 | {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 11 | Library 12 | Properties 13 | TinyAccountManager.Sample.Droid 14 | TinyAccountManager.Sample.Android 15 | 512 16 | true 17 | Resources\Resource.Designer.cs 18 | Off 19 | Properties\AndroidManifest.xml 20 | true 21 | v8.1 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | true 31 | full 32 | false 33 | bin\Debug\ 34 | DEBUG;TRACE 35 | prompt 36 | 4 37 | True 38 | None 39 | armeabi,armeabi-v7a,x86 40 | 41 | 42 | pdbonly 43 | true 44 | bin\Release\ 45 | TRACE 46 | prompt 47 | 4 48 | False 49 | SdkOnly 50 | 51 | 52 | 53 | ..\..\packages\Xamarin.Forms.2.4.0.280\lib\MonoAndroid10\FormsViewGroup.dll 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | ..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.Animated.Vector.Drawable.dll 63 | 64 | 65 | ..\..\packages\Xamarin.Android.Support.Annotations.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.Annotations.dll 66 | 67 | 68 | ..\..\packages\Xamarin.Android.Support.Compat.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.Compat.dll 69 | 70 | 71 | ..\..\packages\Xamarin.Android.Support.Core.UI.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.Core.UI.dll 72 | 73 | 74 | ..\..\packages\Xamarin.Android.Support.Core.Utils.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.Core.Utils.dll 75 | 76 | 77 | ..\..\packages\Xamarin.Android.Support.Design.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.Design.dll 78 | 79 | 80 | ..\..\packages\Xamarin.Android.Support.Fragment.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.Fragment.dll 81 | 82 | 83 | ..\..\packages\Xamarin.Android.Support.Media.Compat.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.Media.Compat.dll 84 | 85 | 86 | ..\..\packages\Xamarin.Android.Support.v4.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.v4.dll 87 | 88 | 89 | ..\..\packages\Xamarin.Android.Support.v7.AppCompat.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.v7.AppCompat.dll 90 | 91 | 92 | ..\..\packages\Xamarin.Android.Support.v7.CardView.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.v7.CardView.dll 93 | 94 | 95 | ..\..\packages\Xamarin.Android.Support.v7.MediaRouter.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.v7.MediaRouter.dll 96 | 97 | 98 | ..\..\packages\Xamarin.Android.Support.v7.RecyclerView.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.v7.RecyclerView.dll 99 | 100 | 101 | ..\..\packages\Xamarin.Android.Support.Vector.Drawable.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.Vector.Drawable.dll 102 | 103 | 104 | ..\..\packages\Xamarin.Forms.2.4.0.280\lib\MonoAndroid10\Xamarin.Forms.Core.dll 105 | 106 | 107 | ..\..\packages\Xamarin.Forms.2.4.0.280\lib\MonoAndroid10\Xamarin.Forms.Platform.dll 108 | 109 | 110 | ..\..\packages\Xamarin.Forms.2.4.0.280\lib\MonoAndroid10\Xamarin.Forms.Platform.Android.dll 111 | 112 | 113 | ..\..\packages\Xamarin.Forms.2.4.0.280\lib\MonoAndroid10\Xamarin.Forms.Xaml.dll 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | {e8eb6ee2-30fc-4bc3-ae8c-4160172a714c} 140 | TinyAccountManager.Abstraction 141 | 142 | 143 | {faf32095-2542-4068-b4ee-20786357cdb4} 144 | TinyAccountManager.Droid 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 190 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.Android/TinyAccountManager.Sample.Android.csproj.bak: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | 8.0.30703 8 | 2.0 9 | {B55C2F88-6FD4-4376-A3EB-260C757CB789} 10 | {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 11 | Library 12 | Properties 13 | TinyAccountManager.Sample.Droid 14 | TinyAccountManager.Sample.Android 15 | 512 16 | true 17 | Resources\Resource.Designer.cs 18 | Off 19 | Properties\AndroidManifest.xml 20 | true 21 | v8.0 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | true 31 | full 32 | false 33 | bin\Debug\ 34 | DEBUG;TRACE 35 | prompt 36 | 4 37 | True 38 | None 39 | armeabi,armeabi-v7a,x86 40 | 41 | 42 | pdbonly 43 | true 44 | bin\Release\ 45 | TRACE 46 | prompt 47 | 4 48 | False 49 | SdkOnly 50 | 51 | 52 | 53 | ..\..\packages\Xamarin.Forms.2.4.0.280\lib\MonoAndroid10\FormsViewGroup.dll 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | ..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.Animated.Vector.Drawable.dll 63 | 64 | 65 | ..\..\packages\Xamarin.Android.Support.Annotations.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.Annotations.dll 66 | 67 | 68 | ..\..\packages\Xamarin.Android.Support.Compat.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.Compat.dll 69 | 70 | 71 | ..\..\packages\Xamarin.Android.Support.Core.UI.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.Core.UI.dll 72 | 73 | 74 | ..\..\packages\Xamarin.Android.Support.Core.Utils.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.Core.Utils.dll 75 | 76 | 77 | ..\..\packages\Xamarin.Android.Support.Design.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.Design.dll 78 | 79 | 80 | ..\..\packages\Xamarin.Android.Support.Fragment.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.Fragment.dll 81 | 82 | 83 | ..\..\packages\Xamarin.Android.Support.Media.Compat.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.Media.Compat.dll 84 | 85 | 86 | ..\..\packages\Xamarin.Android.Support.v4.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.v4.dll 87 | 88 | 89 | ..\..\packages\Xamarin.Android.Support.v7.AppCompat.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.v7.AppCompat.dll 90 | 91 | 92 | ..\..\packages\Xamarin.Android.Support.v7.CardView.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.v7.CardView.dll 93 | 94 | 95 | ..\..\packages\Xamarin.Android.Support.v7.MediaRouter.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.v7.MediaRouter.dll 96 | 97 | 98 | ..\..\packages\Xamarin.Android.Support.v7.RecyclerView.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.v7.RecyclerView.dll 99 | 100 | 101 | ..\..\packages\Xamarin.Android.Support.Vector.Drawable.25.4.0.2\lib\MonoAndroid70\Xamarin.Android.Support.Vector.Drawable.dll 102 | 103 | 104 | ..\..\packages\Xamarin.Forms.2.4.0.280\lib\MonoAndroid10\Xamarin.Forms.Core.dll 105 | 106 | 107 | ..\..\packages\Xamarin.Forms.2.4.0.280\lib\MonoAndroid10\Xamarin.Forms.Platform.dll 108 | 109 | 110 | ..\..\packages\Xamarin.Forms.2.4.0.280\lib\MonoAndroid10\Xamarin.Forms.Platform.Android.dll 111 | 112 | 113 | ..\..\packages\Xamarin.Forms.2.4.0.280\lib\MonoAndroid10\Xamarin.Forms.Xaml.dll 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | {e8eb6ee2-30fc-4bc3-ae8c-4160172a714c} 140 | TinyAccountManager.Abstraction 141 | 142 | 143 | {faf32095-2542-4068-b4ee-20786357cdb4} 144 | TinyAccountManager.Droid 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 190 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.Android/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/App.xaml: -------------------------------------------------------------------------------- 1 |  7 | 8 | 9 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Runtime.InteropServices.WindowsRuntime; 6 | using Windows.ApplicationModel; 7 | using Windows.ApplicationModel.Activation; 8 | using Windows.Foundation; 9 | using Windows.Foundation.Collections; 10 | using Windows.UI.Xaml; 11 | using Windows.UI.Xaml.Controls; 12 | using Windows.UI.Xaml.Controls.Primitives; 13 | using Windows.UI.Xaml.Data; 14 | using Windows.UI.Xaml.Input; 15 | using Windows.UI.Xaml.Media; 16 | using Windows.UI.Xaml.Navigation; 17 | 18 | namespace TinyAccountManager.Sample.UWP 19 | { 20 | /// 21 | /// Provides application-specific behavior to supplement the default Application class. 22 | /// 23 | sealed partial class App : Application 24 | { 25 | /// 26 | /// Initializes the singleton application object. This is the first line of authored code 27 | /// executed, and as such is the logical equivalent of main() or WinMain(). 28 | /// 29 | public App() 30 | { 31 | this.InitializeComponent(); 32 | this.Suspending += OnSuspending; 33 | } 34 | 35 | /// 36 | /// Invoked when the application is launched normally by the end user. Other entry points 37 | /// will be used such as when the application is launched to open a specific file. 38 | /// 39 | /// Details about the launch request and process. 40 | protected override void OnLaunched(LaunchActivatedEventArgs e) 41 | { 42 | 43 | #if DEBUG 44 | if (System.Diagnostics.Debugger.IsAttached) 45 | { 46 | this.DebugSettings.EnableFrameRateCounter = true; 47 | } 48 | #endif 49 | 50 | Frame rootFrame = Window.Current.Content as Frame; 51 | 52 | // Do not repeat app initialization when the Window already has content, 53 | // just ensure that the window is active 54 | if (rootFrame == null) 55 | { 56 | // Create a Frame to act as the navigation context and navigate to the first page 57 | rootFrame = new Frame(); 58 | 59 | rootFrame.NavigationFailed += OnNavigationFailed; 60 | 61 | Xamarin.Forms.Forms.Init(e); 62 | 63 | if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) 64 | { 65 | //TODO: Load state from previously suspended application 66 | } 67 | 68 | // Place the frame in the current Window 69 | Window.Current.Content = rootFrame; 70 | } 71 | 72 | if (rootFrame.Content == null) 73 | { 74 | // When the navigation stack isn't restored navigate to the first page, 75 | // configuring the new page by passing required information as a navigation 76 | // parameter 77 | rootFrame.Navigate(typeof(MainPage), e.Arguments); 78 | } 79 | // Ensure the current window is active 80 | Window.Current.Activate(); 81 | } 82 | 83 | /// 84 | /// Invoked when Navigation to a certain page fails 85 | /// 86 | /// The Frame which failed navigation 87 | /// Details about the navigation failure 88 | void OnNavigationFailed(object sender, NavigationFailedEventArgs e) 89 | { 90 | throw new Exception("Failed to load Page " + e.SourcePageType.FullName); 91 | } 92 | 93 | /// 94 | /// Invoked when application execution is being suspended. Application state is saved 95 | /// without knowing whether the application will be terminated or resumed with the contents 96 | /// of memory still intact. 97 | /// 98 | /// The source of the suspend request. 99 | /// Details about the suspend request. 100 | private void OnSuspending(object sender, SuspendingEventArgs e) 101 | { 102 | var deferral = e.SuspendingOperation.GetDeferral(); 103 | //TODO: Save application state and stop any background activity 104 | deferral.Complete(); 105 | } 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/LockScreenLogo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/LockScreenLogo.scale-100.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/LockScreenLogo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/LockScreenLogo.scale-125.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/LockScreenLogo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/LockScreenLogo.scale-150.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/LockScreenLogo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/LockScreenLogo.scale-200.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/LockScreenLogo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/LockScreenLogo.scale-400.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/SplashScreen.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/SplashScreen.scale-100.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/SplashScreen.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/SplashScreen.scale-125.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/SplashScreen.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/SplashScreen.scale-150.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/SplashScreen.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/SplashScreen.scale-200.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/SplashScreen.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/SplashScreen.scale-400.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square150x150Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square150x150Logo.scale-200.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.scale-100.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.scale-125.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.scale-150.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.scale-200.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.scale-400.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.targetsize-16_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.targetsize-16_altform-unplated.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.targetsize-256_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.targetsize-256_altform-unplated.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.targetsize-32_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.targetsize-32_altform-unplated.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.targetsize-48_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Square44x44Logo.targetsize-48_altform-unplated.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/StoreLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/StoreLogo.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Wide310x150Logo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Wide310x150Logo.scale-100.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Wide310x150Logo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Wide310x150Logo.scale-125.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Wide310x150Logo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Wide310x150Logo.scale-150.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Wide310x150Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Wide310x150Logo.scale-200.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Wide310x150Logo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Assets/Wide310x150Logo.scale-400.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/MainPage.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/MainPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Runtime.InteropServices.WindowsRuntime; 6 | using Windows.Foundation; 7 | using Windows.Foundation.Collections; 8 | using Windows.UI.Xaml; 9 | using Windows.UI.Xaml.Controls; 10 | using Windows.UI.Xaml.Controls.Primitives; 11 | using Windows.UI.Xaml.Data; 12 | using Windows.UI.Xaml.Input; 13 | using Windows.UI.Xaml.Media; 14 | using Windows.UI.Xaml.Navigation; 15 | using TinyAccountManager.UWP; 16 | 17 | namespace TinyAccountManager.Sample.UWP 18 | { 19 | public sealed partial class MainPage 20 | { 21 | public MainPage() 22 | { 23 | this.InitializeComponent(); 24 | 25 | AccountManager.Initialize(); 26 | 27 | LoadApplication(new TinyAccountManager.Sample.App()); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Package.appxmanifest: -------------------------------------------------------------------------------- 1 |  2 | 3 | 8 | 9 | 13 | 14 | 15 | 16 | 17 | TinyAccountManager.Sample.UWP 18 | Daniel Hindrikes 19 | Assets\StoreLogo.png 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 34 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("TinyAccountManager.Sample.UWP")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("TinyAccountManager.Sample.UWP")] 13 | [assembly: AssemblyCopyright("Copyright © 2015")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Version information for an assembly consists of the following four values: 18 | // 19 | // Major Version 20 | // Minor Version 21 | // Build Number 22 | // Revision 23 | // 24 | // You can specify all the values or you can default the Build and Revision Numbers 25 | // by using the '*' as shown below: 26 | // [assembly: AssemblyVersion("1.0.*")] 27 | [assembly: AssemblyVersion("1.0.0.0")] 28 | [assembly: AssemblyFileVersion("1.0.0.0")] 29 | [assembly: ComVisible(false)] -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/Properties/Default.rd.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/TinyAccountManager.Sample.UWP.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | x86 7 | {725E90FA-C38A-4B9E-8E31-1A861CC29521} 8 | AppContainerExe 9 | Properties 10 | TinyAccountManager.Sample.UWP 11 | TinyAccountManager.Sample.UWP 12 | en-US 13 | UAP 14 | 10.0.16299.0 15 | 10.0.10240.0 16 | 14 17 | true 18 | 512 19 | {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 20 | TinyAccountManager.Sample.UWP_TemporaryKey.pfx 21 | 22 | 23 | true 24 | bin\ARM\Debug\ 25 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP 26 | ;2008 27 | full 28 | ARM 29 | false 30 | prompt 31 | true 32 | 33 | 34 | bin\ARM\Release\ 35 | TRACE;NETFX_CORE;WINDOWS_UWP 36 | true 37 | ;2008 38 | pdbonly 39 | ARM 40 | false 41 | prompt 42 | true 43 | true 44 | 45 | 46 | true 47 | bin\x64\Debug\ 48 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP 49 | ;2008 50 | full 51 | x64 52 | false 53 | prompt 54 | true 55 | 56 | 57 | bin\x64\Release\ 58 | TRACE;NETFX_CORE;WINDOWS_UWP 59 | true 60 | ;2008 61 | pdbonly 62 | x64 63 | false 64 | prompt 65 | true 66 | true 67 | 68 | 69 | true 70 | bin\x86\Debug\ 71 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP 72 | ;2008 73 | full 74 | x86 75 | false 76 | prompt 77 | true 78 | 79 | 80 | bin\x86\Release\ 81 | TRACE;NETFX_CORE;WINDOWS_UWP 82 | true 83 | ;2008 84 | pdbonly 85 | x86 86 | false 87 | prompt 88 | true 89 | true 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | App.xaml 98 | 99 | 100 | MainPage.xaml 101 | 102 | 103 | 104 | 105 | 106 | Designer 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | MSBuild:Compile 143 | Designer 144 | 145 | 146 | MSBuild:Compile 147 | Designer 148 | 149 | 150 | 151 | 152 | {e8eb6ee2-30fc-4bc3-ae8c-4160172a714c} 153 | TinyAccountManager.Abstraction 154 | 155 | 156 | {cb69e7da-fedc-4612-9f49-a02ebfec3894} 157 | TinyAccountManager.UWP 158 | 159 | 160 | 161 | 14.0 162 | 163 | 164 | 165 | 172 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.UWP/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.2", 4 | "Xamarin.Forms": "2.4.0.280" 5 | }, 6 | "frameworks": { 7 | "uap10.0": {} 8 | }, 9 | "runtimes": { 10 | "win10-arm": {}, 11 | "win10-arm-aot": {}, 12 | "win10-x86": {}, 13 | "win10-x86-aot": {}, 14 | "win10-x64": {}, 15 | "win10-x64-aot": {} 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | using Xamarin.Forms; 7 | 8 | namespace TinyAccountManager.Sample 9 | { 10 | public class TinyAccountManager.Sample : ContentPage 11 | { 12 | public TinyAccountManager.Sample() 13 | { 14 | var button = new Button 15 | { 16 | Text = "Click Me!", 17 | VerticalOptions = LayoutOptions.CenterAndExpand, 18 | HorizontalOptions = LayoutOptions.CenterAndExpand, 19 | }; 20 | 21 | int clicked = 0; 22 | button.Clicked += (s, e) => button.Text = "Clicked: " + clicked++; 23 | 24 | Content = button; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 10.0 6 | Debug 7 | AnyCPU 8 | {C022A13D-8338-4AE2-B2B3-9E00CD9ADAA6} 9 | Library 10 | Properties 11 | TinyAccountManager.Sample 12 | TinyAccountManager.Sample 13 | v4.5 14 | Profile111 15 | 512 16 | {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 17 | 18 | 19 | 20 | 21 | true 22 | full 23 | false 24 | bin\Debug\ 25 | DEBUG;TRACE 26 | prompt 27 | 4 28 | 29 | 30 | pdbonly 31 | true 32 | bin\Release\ 33 | TRACE 34 | prompt 35 | 4 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | ..\packages\Xamarin.Forms.2.4.0.280\lib\portable-win+net45+wp80+win81+wpa81\Xamarin.Forms.Core.dll 44 | 45 | 46 | ..\packages\Xamarin.Forms.2.4.0.280\lib\portable-win+net45+wp80+win81+wpa81\Xamarin.Forms.Platform.dll 47 | 48 | 49 | ..\packages\Xamarin.Forms.2.4.0.280\lib\portable-win+net45+wp80+win81+wpa81\Xamarin.Forms.Xaml.dll 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. 60 | 61 | 62 | 63 | 70 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/AppDelegate.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | 5 | using Foundation; 6 | using UIKit; 7 | using TinyAccountManager.iOS; 8 | 9 | namespace TinyAccountManager.Sample.iOS 10 | { 11 | // The UIApplicationDelegate for the application. This class is responsible for launching the 12 | // User Interface of the application, as well as listening (and optionally responding) to 13 | // application events from iOS. 14 | [Register("AppDelegate")] 15 | public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate 16 | { 17 | // 18 | // This method is invoked when the application has loaded and is ready to run. In this 19 | // method you should instantiate the window, load the UI into it and then make the window 20 | // visible. 21 | // 22 | // You have 17 seconds to return from this method, or iOS will terminate your application. 23 | // 24 | public override bool FinishedLaunching(UIApplication app, NSDictionary options) 25 | { 26 | AccountManager.Initialize(); 27 | 28 | global::Xamarin.Forms.Forms.Init (); 29 | LoadApplication (new TinyAccountManager.Sample.App ()); 30 | 31 | return base.FinishedLaunching (app, options); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Entitlements.plist: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Info.plist: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | UIDeviceFamily 6 | 7 | 1 8 | 2 9 | 10 | UISupportedInterfaceOrientations 11 | 12 | UIInterfaceOrientationPortrait 13 | UIInterfaceOrientationLandscapeLeft 14 | UIInterfaceOrientationLandscapeRight 15 | 16 | UISupportedInterfaceOrientations~ipad 17 | 18 | UIInterfaceOrientationPortrait 19 | UIInterfaceOrientationPortraitUpsideDown 20 | UIInterfaceOrientationLandscapeLeft 21 | UIInterfaceOrientationLandscapeRight 22 | 23 | MinimumOSVersion 24 | 8.0 25 | CFBundleDisplayName 26 | TinyAccountManager.Sample 27 | CFBundleIdentifier 28 | com.yourcompany.TinyAccountManager.Sample 29 | CFBundleVersion 30 | 1.0 31 | CFBundleIconFiles 32 | 33 | Icon-60@2x.png 34 | Icon-60@3x.png 35 | Icon-76.png 36 | Icon-76@2x.png 37 | Default.png 38 | Default@2x.png 39 | Default-568h@2x.png 40 | Default-Portrait.png 41 | Default-Portrait@2x.png 42 | Icon-Small-40.png 43 | Icon-Small-40@2x.png 44 | Icon-Small-40@3x.png 45 | Icon-Small.png 46 | Icon-Small@2x.png 47 | Icon-Small@3x.png 48 | 49 | UILaunchStoryboardName 50 | LaunchScreen.storyboard 51 | 52 | 53 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Main.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | 5 | using Foundation; 6 | using UIKit; 7 | 8 | namespace TinyAccountManager.Sample.iOS 9 | { 10 | public class Application 11 | { 12 | // This is the main entry point of the application. 13 | static void Main(string[] args) 14 | { 15 | // if you want to use a different Application Delegate class from "AppDelegate" 16 | // you can specify it here. 17 | UIApplication.Main(args, null, "AppDelegate"); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("TinyAccountManager.Sample.iOS")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("TinyAccountManager.Sample.iOS")] 13 | [assembly: AssemblyCopyright("Copyright © 2014")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("72bdc44f-c588-44f3-b6df-9aace7daafdd")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Default-568h@2x.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Default-Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Default-Portrait.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Default-Portrait@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Default-Portrait@2x.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Default.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Default@2x.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-60@2x.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-60@3x.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-76.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-76@2x.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-Small-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-Small-40.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-Small-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-Small-40@2x.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-Small-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-Small-40@3x.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-Small.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-Small@2x.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/Icon-Small@3x.png -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/Resources/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/TinyAccountManager.Sample.iOS.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | iPhoneSimulator 7 | 8.0.30703 8 | 2.0 9 | {8967E779-81D4-4597-981C-C4602967B278} 10 | {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 11 | Exe 12 | TinyAccountManager.Sample.iOS 13 | Resources 14 | TinyAccountManager.Sample.iOS 15 | 16 | 17 | 18 | 19 | true 20 | full 21 | false 22 | bin\iPhoneSimulator\Debug 23 | DEBUG 24 | prompt 25 | 4 26 | false 27 | i386, x86_64 28 | None 29 | true 30 | 31 | 32 | none 33 | true 34 | bin\iPhoneSimulator\Release 35 | prompt 36 | 4 37 | None 38 | i386, x86_64 39 | false 40 | 41 | 42 | true 43 | full 44 | false 45 | bin\iPhone\Debug 46 | DEBUG 47 | prompt 48 | 4 49 | false 50 | ARMv7, ARM64 51 | iPhone Developer 52 | true 53 | Entitlements.plist 54 | 55 | 56 | none 57 | true 58 | bin\iPhone\Release 59 | prompt 60 | 4 61 | ARMv7, ARM64 62 | false 63 | iPhone Developer 64 | Entitlements.plist 65 | 66 | 67 | none 68 | True 69 | bin\iPhone\Ad-Hoc 70 | prompt 71 | 4 72 | False 73 | ARMv7, ARM64 74 | True 75 | Automatic:AdHoc 76 | iPhone Distribution 77 | Entitlements.plist 78 | 79 | 80 | none 81 | True 82 | bin\iPhone\AppStore 83 | prompt 84 | 4 85 | False 86 | ARMv7, ARM64 87 | Automatic:AppStore 88 | iPhone Distribution 89 | Entitlements.plist 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | ..\..\packages\Xamarin.Forms.2.4.0.280\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll 125 | 126 | 127 | ..\..\packages\Xamarin.Forms.2.4.0.280\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll 128 | 129 | 130 | ..\..\packages\Xamarin.Forms.2.4.0.280\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll 131 | 132 | 133 | ..\..\packages\Xamarin.Forms.2.4.0.280\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll 134 | 135 | 136 | 137 | 138 | 139 | {e8eb6ee2-30fc-4bc3-ae8c-4160172a714c} 140 | TinyAccountManager.Abstraction 141 | 142 | 143 | {4ac73eef-3fa5-4767-8a93-5db5c7aa9432} 144 | TinyAccountManager.iOS 145 | false 146 | false 147 | 148 | 149 | 150 | 151 | 152 | 153 | This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. 154 | 155 | 156 | 157 | 158 | 159 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/iTunesArtwork: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/iTunesArtwork -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/iTunesArtwork@2x: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TinyStuff/TinyAccountManager/2f64996aefc731c627a8a98728b656d901f114d2/src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/iTunesArtwork@2x -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample.iOS/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample/App.xaml: -------------------------------------------------------------------------------- 1 |  2 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | using Xamarin.Forms; 7 | 8 | namespace TinyAccountManager.Sample 9 | { 10 | public partial class App : Application 11 | { 12 | public App () 13 | { 14 | InitializeComponent(); 15 | 16 | MainPage = new NavigationPage(new TinyAccountManager.Sample.MainPage()); 17 | } 18 | 19 | protected override void OnStart () 20 | { 21 | // Handle when your app starts 22 | } 23 | 24 | protected override void OnSleep () 25 | { 26 | // Handle when your app sleeps 27 | } 28 | 29 | protected override void OnResume () 30 | { 31 | // Handle when your app resumes 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/TinyAccountManager.Sample/TinyAccountManager.Sample/MainPage.xaml: -------------------------------------------------------------------------------- 1 |  2 | 6 | 7 | 8 |