From 353afdef6f94a60f55c18b389fdeec057879ccfe Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 30 Aug 2019 18:15:50 +0200 Subject: [PATCH] started working on touch support for MLEM.Ui --- MLEM.Ui/Elements/Element.cs | 7 +- MLEM.Ui/Elements/Panel.cs | 6 +- MLEM.Ui/Elements/ScrollBar.cs | 5 +- MLEM.Ui/Elements/Tooltip.cs | 2 +- MLEM.Ui/UiControls.cs | 42 ++++++--- MLEM.Ui/UiSystem.cs | 18 +++- MLEM.sln | 6 ++ MLEM/Input/InputHandler.cs | 15 +++- Test/Activity1.cs | 25 ++++++ Test/AndroidTests.csproj | 114 +++++++++++++++++++++++++ Test/Content/Content.mgcb | 34 ++++++++ Test/Content/Fonts/TestFont.spritefont | 60 +++++++++++++ Test/Content/Textures/Test.png | Bin 0 -> 896 bytes Test/GameImpl.cs | 50 +++++++++++ Test/Properties/AndroidManifest.xml | 5 ++ Test/Properties/AssemblyInfo.cs | 41 +++++++++ Test/Resources/Drawable/Icon.png | Bin 0 -> 24313 bytes Test/Resources/Drawable/Splash.png | Bin 0 -> 33526 bytes Test/Resources/Resource.Designer.cs | 99 +++++++++++++++++++++ Test/Resources/Values/Strings.xml | 5 ++ Test/Resources/Values/Styles.xml | 7 ++ Test/packages.config | 6 ++ 22 files changed, 517 insertions(+), 30 deletions(-) create mode 100644 Test/Activity1.cs create mode 100644 Test/AndroidTests.csproj create mode 100644 Test/Content/Content.mgcb create mode 100644 Test/Content/Fonts/TestFont.spritefont create mode 100644 Test/Content/Textures/Test.png create mode 100644 Test/GameImpl.cs create mode 100644 Test/Properties/AndroidManifest.xml create mode 100644 Test/Properties/AssemblyInfo.cs create mode 100644 Test/Resources/Drawable/Icon.png create mode 100644 Test/Resources/Drawable/Splash.png create mode 100644 Test/Resources/Resource.Designer.cs create mode 100644 Test/Resources/Values/Strings.xml create mode 100644 Test/Resources/Values/Styles.xml create mode 100644 Test/packages.config diff --git a/MLEM.Ui/Elements/Element.cs b/MLEM.Ui/Elements/Element.cs index f3dd110..54d77ba 100644 --- a/MLEM.Ui/Elements/Element.cs +++ b/MLEM.Ui/Elements/Element.cs @@ -102,7 +102,6 @@ namespace MLEM.Ui.Elements { } protected UiControls Controls => this.System.Controls; protected InputHandler Input => this.Controls.Input; - public Point MousePos => this.Input.MousePosition; public RootElement Root { get; internal set; } public float Scale => this.Root.ActualScale; public Element Parent { get; private set; } @@ -443,15 +442,15 @@ namespace MLEM.Ui.Elements { } } - public virtual Element GetMousedElement() { + public virtual Element GetElementUnderPos(Point position) { if (this.IsHidden) return null; for (var i = this.SortedChildren.Count - 1; i >= 0; i--) { - var element = this.SortedChildren[i].GetMousedElement(); + var element = this.SortedChildren[i].GetElementUnderPos(position); if (element != null) return element; } - return this.CanBeMoused && this.Area.Contains(this.MousePos) ? this : null; + return this.CanBeMoused && this.Area.Contains(position) ? this : null; } protected virtual void InitStyle(UiStyle style) { diff --git a/MLEM.Ui/Elements/Panel.cs b/MLEM.Ui/Elements/Panel.cs index ec38f81..be9c330 100644 --- a/MLEM.Ui/Elements/Panel.cs +++ b/MLEM.Ui/Elements/Panel.cs @@ -117,11 +117,11 @@ namespace MLEM.Ui.Elements { base.DrawEarly(time, batch, alpha, blendState, samplerState); } - public override Element GetMousedElement() { + public override Element GetElementUnderPos(Point position) { // if overflow is handled, don't propagate mouse checks to hidden children - if (this.scrollOverflow && !this.GetRenderTargetArea().Contains(this.MousePos)) + if (this.scrollOverflow && !this.GetRenderTargetArea().Contains(position)) return null; - return base.GetMousedElement(); + return base.GetElementUnderPos(position); } private Rectangle GetRenderTargetArea() { diff --git a/MLEM.Ui/Elements/ScrollBar.cs b/MLEM.Ui/Elements/ScrollBar.cs index 6569a61..e34eea6 100644 --- a/MLEM.Ui/Elements/ScrollBar.cs +++ b/MLEM.Ui/Elements/ScrollBar.cs @@ -56,11 +56,12 @@ namespace MLEM.Ui.Elements { } if (this.isMouseHeld) { + var mouse = this.Input.MousePosition; if (this.Horizontal) { - var internalX = this.MousePos.X - this.Area.X - this.ScrollerSize.X * this.Scale / 2; + var internalX = mouse.X - this.Area.X - this.ScrollerSize.X * this.Scale / 2; this.CurrentValue = internalX / (this.Area.Width - this.ScrollerSize.X * this.Scale) * this.MaxValue; } else { - var internalY = this.MousePos.Y - this.Area.Y - this.ScrollerSize.Y * this.Scale / 2; + var internalY = mouse.Y - this.Area.Y - this.ScrollerSize.Y * this.Scale / 2; this.CurrentValue = internalY / (this.Area.Height - this.ScrollerSize.Y * this.Scale) * this.MaxValue; } } diff --git a/MLEM.Ui/Elements/Tooltip.cs b/MLEM.Ui/Elements/Tooltip.cs index d6fd273..087df92 100644 --- a/MLEM.Ui/Elements/Tooltip.cs +++ b/MLEM.Ui/Elements/Tooltip.cs @@ -25,7 +25,7 @@ namespace MLEM.Ui.Elements { base.Update(time); var viewport = this.System.Viewport.Size; - var offset = this.MousePos.ToVector2() / this.Scale + this.MouseOffset; + var offset = this.Input.MousePosition.ToVector2() / this.Scale + this.MouseOffset; if (offset.X < 0) offset.X = 0; if (offset.Y < 0) diff --git a/MLEM.Ui/UiControls.cs b/MLEM.Ui/UiControls.cs index dc073a3..cd1bcce 100644 --- a/MLEM.Ui/UiControls.cs +++ b/MLEM.Ui/UiControls.cs @@ -2,6 +2,7 @@ using System; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; +using Microsoft.Xna.Framework.Input.Touch; using MLEM.Input; using MLEM.Ui.Elements; @@ -20,14 +21,17 @@ namespace MLEM.Ui { this.system = system; this.Input = inputHandler ?? new InputHandler(); this.isInputOurs = inputHandler == null; + + // enable all required gestures + this.Input.EnableGestures(GestureType.Tap, GestureType.Hold); } public void Update() { if (this.isInputOurs) this.Input.Update(); - var mousedNow = this.GetMousedElement(); - // mouse new element + // MOUSE INPUT + var mousedNow = this.GetElementUnderPos(this.Input.MousePosition); if (mousedNow != this.MousedElement) { if (this.MousedElement != null) this.MousedElement.OnMouseExit?.Invoke(this.MousedElement); @@ -36,21 +40,19 @@ namespace MLEM.Ui { this.MousedElement = mousedNow; this.system.Propagate(e => e.OnMousedElementChanged?.Invoke(e, mousedNow)); } - + if (this.Input.IsMouseButtonPressed(MouseButton.Left)) { - // select element var selectedNow = mousedNow != null && mousedNow.CanBeSelected ? mousedNow : null; - if (this.SelectedElement != selectedNow) - this.SelectElement(selectedNow, true); - - // first action on element + this.SelectElement(selectedNow, true); if (mousedNow != null) mousedNow.OnPressed?.Invoke(mousedNow); } else if (this.Input.IsMouseButtonPressed(MouseButton.Right)) { - // secondary action on element if (mousedNow != null) mousedNow.OnSecondaryPressed?.Invoke(mousedNow); - } else if (this.Input.IsKeyPressed(Keys.Enter) || this.Input.IsKeyPressed(Keys.Space)) { + } + + // KEYBOARD INPUT + else if (this.Input.IsKeyPressed(Keys.Enter) || this.Input.IsKeyPressed(Keys.Space)) { if (this.SelectedElement != null) { if (this.Input.IsModifierKeyDown(ModifierKey.Shift)) { // secondary action on element using space or enter @@ -64,9 +66,25 @@ namespace MLEM.Ui { // tab or shift-tab to next or previous element this.SelectElement(this.GetNextElement(this.Input.IsModifierKeyDown(ModifierKey.Shift)), false); } + + // TOUCH INPUT + else if (this.Input.GetGesture(GestureType.Tap, out var tap)) { + var tapped = this.GetElementUnderPos(tap.Position.ToPoint()); + this.SelectElement(tapped, true); + if (tapped != null) + tapped.OnPressed?.Invoke(tapped); + } else if (this.Input.GetGesture(GestureType.Hold, out var hold)) { + var held = this.GetElementUnderPos(hold.Position.ToPoint()); + this.SelectElement(held, true); + if (held != null) + held.OnSecondaryPressed?.Invoke(held); + } } public void SelectElement(Element element, bool mouse) { + if (this.SelectedElement == element) + return; + if (this.SelectedElement != null) this.SelectedElement.OnDeselected?.Invoke(this.SelectedElement); if (element != null) @@ -76,9 +94,9 @@ namespace MLEM.Ui { this.system.Propagate(e => e.OnSelectedElementChanged?.Invoke(e, element)); } - public Element GetMousedElement() { + public Element GetElementUnderPos(Point position) { foreach (var root in this.system.GetRootElements()) { - var moused = root.Element.GetMousedElement(); + var moused = root.Element.GetElementUnderPos(position); if (moused != null) return moused; } diff --git a/MLEM.Ui/UiSystem.cs b/MLEM.Ui/UiSystem.cs index 1cd6ec7..c749bdf 100644 --- a/MLEM.Ui/UiSystem.cs +++ b/MLEM.Ui/UiSystem.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; using MLEM.Extensions; using MLEM.Font; using MLEM.Input; @@ -48,7 +49,7 @@ namespace MLEM.Ui { public SamplerState SamplerState = SamplerState.PointClamp; public UiControls Controls; public readonly bool SupportsTextInput; - + public UiSystem(GameWindow window, GraphicsDevice device, UiStyle style, InputHandler inputHandler = null) { this.Controls = new UiControls(this, inputHandler); this.GraphicsDevice = device; @@ -61,11 +62,12 @@ namespace MLEM.Ui { foreach (var root in this.rootElements) root.Element.ForceUpdateArea(); }; + try { - window.TextInput += (sender, args) => { + NativeTextInput.AddToTextInput(window, (key, character) => { foreach (var root in this.rootElements) - root.Element.Propagate(e => e.OnTextInput?.Invoke(e, args.Key, args.Character)); - }; + root.Element.Propagate(e => e.OnTextInput?.Invoke(e, key, character)); + }); this.SupportsTextInput = true; } catch (TypeLoadException) { this.SupportsTextInput = false; @@ -144,6 +146,14 @@ namespace MLEM.Ui { root.Element.Propagate(action); } + private static class NativeTextInput { + + internal static void AddToTextInput(GameWindow window, Action func) { + window.TextInput += (sender, args) => func(args.Key, args.Character); + } + + } + } public class RootElement { diff --git a/MLEM.sln b/MLEM.sln index 508a743..2079c78 100644 --- a/MLEM.sln +++ b/MLEM.sln @@ -10,6 +10,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Demos", "Demos\Demos.csproj EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MLEM.Ui", "MLEM.Ui\MLEM.Ui.csproj", "{6F00629A-8B87-4264-8896-19983285E32F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AndroidTests", "Test\AndroidTests.csproj", "{410C0262-131C-4D0E-910D-D01B4F7143E0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -36,5 +38,9 @@ Global {6F00629A-8B87-4264-8896-19983285E32F}.Debug|Any CPU.Build.0 = Debug|Any CPU {6F00629A-8B87-4264-8896-19983285E32F}.Release|Any CPU.ActiveCfg = Release|Any CPU {6F00629A-8B87-4264-8896-19983285E32F}.Release|Any CPU.Build.0 = Release|Any CPU + {410C0262-131C-4D0E-910D-D01B4F7143E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {410C0262-131C-4D0E-910D-D01B4F7143E0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {410C0262-131C-4D0E-910D-D01B4F7143E0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {410C0262-131C-4D0E-910D-D01B4F7143E0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/MLEM/Input/InputHandler.cs b/MLEM/Input/InputHandler.cs index 05c0bf8..23b0d0f 100644 --- a/MLEM/Input/InputHandler.cs +++ b/MLEM/Input/InputHandler.cs @@ -176,12 +176,19 @@ namespace MLEM.Input { return this.WasGamepadButtonUp(button, index) && this.IsGamepadButtonDown(button, index); } - public GestureSample GetGesture(GestureType type) { + public void EnableGestures(params GestureType[] gestures) { + foreach (var gesture in gestures) + TouchPanel.EnabledGestures |= gesture; + } + + public bool GetGesture(GestureType type, out GestureSample sample) { foreach (var gesture in this.Gestures) { - if (gesture.GestureType == type) - return gesture; + if (gesture.GestureType == type) { + sample = gesture; + return true; + } } - return default; + return false; } public bool IsDown(object control, int index = -1) { diff --git a/Test/Activity1.cs b/Test/Activity1.cs new file mode 100644 index 0000000..cf60926 --- /dev/null +++ b/Test/Activity1.cs @@ -0,0 +1,25 @@ +using Android.App; +using Android.Content.PM; +using Android.OS; +using Android.Views; + +namespace AndroidTests { + [Activity(Label = "AndroidTests" + , MainLauncher = true + , Icon = "@drawable/icon" + , Theme = "@style/Theme.Splash" + , AlwaysRetainTaskState = true + , LaunchMode = LaunchMode.SingleInstance + , ScreenOrientation = ScreenOrientation.UserLandscape + , ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize)] + public class Activity1 : Microsoft.Xna.Framework.AndroidGameActivity { + + protected override void OnCreate(Bundle bundle) { + base.OnCreate(bundle); + var g = new GameImpl(); + this.SetContentView((View) g.Services.GetService(typeof(View))); + g.Run(); + } + + } +} \ No newline at end of file diff --git a/Test/AndroidTests.csproj b/Test/AndroidTests.csproj new file mode 100644 index 0000000..8f0f434 --- /dev/null +++ b/Test/AndroidTests.csproj @@ -0,0 +1,114 @@ + + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {410C0262-131C-4D0E-910D-D01B4F7143E0} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + AndroidTests + AndroidTests + 512 + true + Resources\Resource.Designer.cs + Off + armeabi-v7a;x86 + .m4a + + v7.1 + Android + Properties\AndroidManifest.xml + True + + + true + full + false + bin\$(MonoGamePlatform)\$(Platform)\$(Configuration)\ + DEBUG;TRACE;ANDROID + prompt + 4 + True + None + + + pdbonly + true + bin\$(MonoGamePlatform)\$(Platform)\$(Configuration)\ + TRACE;ANDROID + prompt + 4 + False + SdkOnly + + + + ..\packages\Coroutine.1.0.1\lib\netstandard2.0\Coroutine.dll + True + + + + ..\packages\MonoGame.Extended.3.7.0\lib\netstandard2.0\MonoGame.Extended.dll + True + + + + ..\packages\Newtonsoft.Json.11.0.2\lib\netstandard2.0\Newtonsoft.Json.dll + True + + + + + + + $(MonoGameInstallDirectory)\MonoGame\v3.0\Assemblies\Android\MonoGame.Framework.dll + + + + + + + + + + + + + + + + + + + + + + + + {232a6513-a28c-4d7f-ba5a-89281bfc1538} + MLEM.Extended + + + {997f4739-7bec-4621-b9ca-68deb2d74412} + MLEM.Startup + + + {6f00629a-8b87-4264-8896-19983285e32f} + MLEM.Ui + + + {1d6ab762-43c4-4775-8924-707c7ec3f142} + MLEM + + + + + + + + + \ No newline at end of file diff --git a/Test/Content/Content.mgcb b/Test/Content/Content.mgcb new file mode 100644 index 0000000..e25af4b --- /dev/null +++ b/Test/Content/Content.mgcb @@ -0,0 +1,34 @@ + +#----------------------------- Global Properties ----------------------------# + +/outputDir:bin/$(Platform) +/intermediateDir:obj/$(Platform) +/platform:Android +/config: +/profile:Reach +/compress:False + +#-------------------------------- References --------------------------------# + + +#---------------------------------- Content ---------------------------------# + +#begin Textures/Test.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Textures/Test.png + +#begin Fonts/TestFont.spritefont +/importer:FontDescriptionImporter +/processor:FontDescriptionProcessor +/processorParam:PremultiplyAlpha=True +/processorParam:TextureFormat=Compressed +/build:Fonts/TestFont.spritefont + diff --git a/Test/Content/Fonts/TestFont.spritefont b/Test/Content/Fonts/TestFont.spritefont new file mode 100644 index 0000000..54ab9ac --- /dev/null +++ b/Test/Content/Fonts/TestFont.spritefont @@ -0,0 +1,60 @@ + + + + + + + Arial + + + 32 + + + 0 + + + true + + + + + + * + + + + + + ɏ + + + + diff --git a/Test/Content/Textures/Test.png b/Test/Content/Textures/Test.png new file mode 100644 index 0000000000000000000000000000000000000000..7d88c33500f8b645481467247adf547c8218eba0 GIT binary patch literal 896 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-HD>V7BsfaSW-L z^Y)f+-em`gV;|Gi-mx!mDH7L-n2Q`RiHxr*Gc8dF{I6Y1>v8&5-k+^lyrJX{Eu1lMfgE|8wX>E^Pg?ZefjT;{P8XAIPX<@p!@ZI z?i!xWH{Zko`Rf^f@zu>*mS;3`#>teVTc7KvrK<7#$T16^mYTLy&}I83j+|?Z3!4un ztc;m;`$mkP$B@%D|y=T1sIzHffj^V8FBUqeG*`tQ6j{e1lPUyX@M ziu;aOZWoDI$(JSk!MD_RuS#g>)BVbx*P%X*Ot$X{7+(q(r(h+CG{eN12aLK6-6n8fM^8KROqgORj zJJ#AQ6aAu``Rw(Ly;JY)m(SVpwfokFx2Xk=DSKU3zWm$6w0r$_O@}0r8|-yl9k(+2 zJzICwi1+SfOOW1SU&C~SN9^{2zYpcvj`D@g2&fGFkdW@aR)(W5tpi__nzDMyzMWx%{fyrSbdgwQSUPWLj^3w;{uLZGn2hcU9L& zuSut#Jv&>ov1HTrf7Y+X*`kBelUmZ5dJT<|SZbHSK-)VqyVl6$KIeI% mvbkb>x0!(HpBkXTtDf<7+3ek`Ro+{G%=2{hb6Mw<&;$Ur(3j)@ literal 0 HcmV?d00001 diff --git a/Test/GameImpl.cs b/Test/GameImpl.cs new file mode 100644 index 0000000..fa24ba2 --- /dev/null +++ b/Test/GameImpl.cs @@ -0,0 +1,50 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using MLEM.Font; +using MLEM.Startup; +using MLEM.Textures; +using MLEM.Ui; +using MLEM.Ui.Elements; +using MLEM.Ui.Style; + +namespace AndroidTests { + public class GameImpl : MlemGame { + + protected override void LoadContent() { + base.LoadContent(); + var tex = LoadContent("Textures/Test"); + var style = new UntexturedStyle(this.SpriteBatch) { + Font = new GenericSpriteFont(LoadContent("Fonts/TestFont")), + TextScale = 0.1F, + PanelTexture = new NinePatch(new TextureRegion(tex, 0, 8, 24, 24), 8), + ButtonTexture = new NinePatch(new TextureRegion(tex, 24, 8, 16, 16), 4), + TextFieldTexture = new NinePatch(new TextureRegion(tex, 24, 8, 16, 16), 4), + ScrollBarBackground = new NinePatch(new TextureRegion(tex, 12, 0, 4, 8), 1, 1, 2, 2), + ScrollBarScrollerTexture = new NinePatch(new TextureRegion(tex, 8, 0, 4, 8), 1, 1, 2, 2), + CheckboxTexture = new NinePatch(new TextureRegion(tex, 24, 8, 16, 16), 4), + CheckboxCheckmark = new TextureRegion(tex, 24, 0, 8, 8), + RadioTexture = new NinePatch(new TextureRegion(tex, 16, 0, 8, 8), 3), + RadioCheckmark = new TextureRegion(tex, 32, 0, 8, 8) + }; + this.UiSystem.Style = style; + this.UiSystem.GlobalScale = 10; + this.UiSystem.AutoScaleWithScreen = true; + + var panel = new Panel(Anchor.Center, new Vector2(100, 0), Vector2.Zero, true); + this.UiSystem.Add("Panel", panel); + panel.AddChild(new Paragraph(Anchor.AutoLeft, 1, "I am Android")); + + var image = new Image(Anchor.AutoCenter, new Vector2(50, 50), new TextureRegion(tex, 0, 0, 8, 8)) {IsHidden = true}; + panel.AddChild(image); + panel.AddChild(new Button(Anchor.AutoCenter, new Vector2(0.5F, 10), "Toggle Image") { + OnPressed = element => image.IsHidden = !image.IsHidden + }); + } + + protected override void DoDraw(GameTime gameTime) { + this.GraphicsDevice.Clear(Color.CornflowerBlue); + base.DoDraw(gameTime); + } + + } +} \ No newline at end of file diff --git a/Test/Properties/AndroidManifest.xml b/Test/Properties/AndroidManifest.xml new file mode 100644 index 0000000..e775002 --- /dev/null +++ b/Test/Properties/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Test/Properties/AssemblyInfo.cs b/Test/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..1224698 --- /dev/null +++ b/Test/Properties/AssemblyInfo.cs @@ -0,0 +1,41 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using Android.App; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("AndroidTests")] +[assembly: AssemblyProduct("AndroidTests")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("6f377592-2266-4c47-855e-6260ff75e1f4")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] + +// Add some common permissions, these can be removed if not needed +[assembly: UsesPermission(Android.Manifest.Permission.Internet)] +[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)] \ No newline at end of file diff --git a/Test/Resources/Drawable/Icon.png b/Test/Resources/Drawable/Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f4f411136ab86ead0158ea9b18647f254ba2c6 GIT binary patch literal 24313 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 V7kr1PiN8bC(QdYFmi3}F{|ELgtUdq$ literal 0 HcmV?d00001 diff --git a/Test/Resources/Drawable/Splash.png b/Test/Resources/Drawable/Splash.png new file mode 100644 index 0000000000000000000000000000000000000000..2f8610744f28972ad98c5764d2fdfb129f9c26d6 GIT binary patch literal 33526 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 literal 0 HcmV?d00001 diff --git a/Test/Resources/Resource.Designer.cs b/Test/Resources/Resource.Designer.cs new file mode 100644 index 0000000..52ce691 --- /dev/null +++ b/Test/Resources/Resource.Designer.cs @@ -0,0 +1,99 @@ +#pragma warning disable 1591 +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::Android.Runtime.ResourceDesignerAttribute("AndroidTests.Resource", IsApplication=true)] + +namespace AndroidTests +{ + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")] + public partial class Resource + { + + static Resource() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + public static void UpdateIdValues() + { + } + + public partial class Attribute + { + + static Attribute() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Attribute() + { + } + } + + public partial class Drawable + { + + // aapt resource value: 0x7f020000 + public const int Icon = 2130837504; + + // aapt resource value: 0x7f020001 + public const int Splash = 2130837505; + + static Drawable() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Drawable() + { + } + } + + public partial class String + { + + // aapt resource value: 0x7f030001 + public const int ApplicationName = 2130903041; + + // aapt resource value: 0x7f030000 + public const int Hello = 2130903040; + + static String() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private String() + { + } + } + + public partial class Style + { + + // aapt resource value: 0x7f040000 + public const int Theme_Splash = 2130968576; + + static Style() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Style() + { + } + } + } +} +#pragma warning restore 1591 diff --git a/Test/Resources/Values/Strings.xml b/Test/Resources/Values/Strings.xml new file mode 100644 index 0000000..7448bbf --- /dev/null +++ b/Test/Resources/Values/Strings.xml @@ -0,0 +1,5 @@ + + + Hello World, Click Me! + AndroidTests + diff --git a/Test/Resources/Values/Styles.xml b/Test/Resources/Values/Styles.xml new file mode 100644 index 0000000..5102134 --- /dev/null +++ b/Test/Resources/Values/Styles.xml @@ -0,0 +1,7 @@ + + + + diff --git a/Test/packages.config b/Test/packages.config new file mode 100644 index 0000000..003ddcd --- /dev/null +++ b/Test/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file