From b72d44b1e805c5b142bac0543126ffae6df94119 Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Wed, 5 Sep 2018 22:54:07 +0200 Subject: [PATCH 001/267] Added OsuModDeflate class and adjusted OsuRuleset.cs --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 44 +++++++++++++++++++++ osu.Game.Rulesets.Osu/OsuRuleset.cs | 5 +++ 2 files changed, 49 insertions(+) create mode 100644 osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs new file mode 100644 index 0000000000..ec80537a52 --- /dev/null +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -0,0 +1,44 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Graphics; +using osu.Game.Graphics; +using osu.Game.Rulesets.Mods; +using osu.Game.Rulesets.Objects.Drawables; +using osu.Game.Rulesets.Osu.Objects.Drawables; +using System.Collections.Generic; + +namespace osu.Game.Rulesets.Osu.Mods +{ + public class OsuModDeflate : Mod, IApplicableToDrawableHitObjects + { + public override string Name => "Deflate"; + public override string ShortenedName => "DF"; + public override FontAwesome Icon => FontAwesome.fa_compress; + public override ModType Type => ModType.Fun; + public override string Description => "Become one with the approach circle..."; + public override double ScoreMultiplier => 1; + + public void ApplyToDrawableHitObjects(IEnumerable drawables) + { + foreach (var drawable in drawables) + drawable.ApplyCustomUpdateState += drawableOnApplyCustomUpdateState; + } + + protected void drawableOnApplyCustomUpdateState(DrawableHitObject drawable, ArmedState state) + { + if (!(drawable is DrawableHitCircle d)) + return; + + d.ApproachCircle.Hide(); + var h = d.HitObject; + + using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt)) + { + var origScale = d.Scale; + d.ScaleTo(1.1f); + d.ScaleTo(origScale, h.TimePreempt); + } + } + } +} diff --git a/osu.Game.Rulesets.Osu/OsuRuleset.cs b/osu.Game.Rulesets.Osu/OsuRuleset.cs index fa6e9a018a..461f7188c9 100644 --- a/osu.Game.Rulesets.Osu/OsuRuleset.cs +++ b/osu.Game.Rulesets.Osu/OsuRuleset.cs @@ -117,6 +117,11 @@ namespace osu.Game.Rulesets.Osu new OsuModRelax(), new OsuModAutopilot(), }; + case ModType.Fun: + return new Mod[] + { + new OsuModDeflate(), + }; default: return new Mod[] { }; } From 9a5127d506e255ab70ae00d2a4ad83bbe27d2c73 Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Sun, 30 Sep 2018 14:29:55 +0200 Subject: [PATCH 002/267] fixed object scale upon hit --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index ec80537a52..8c6f82dee4 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -29,15 +29,14 @@ namespace osu.Game.Rulesets.Osu.Mods { if (!(drawable is DrawableHitCircle d)) return; - d.ApproachCircle.Hide(); var h = d.HitObject; - using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt)) { var origScale = d.Scale; - d.ScaleTo(1.1f); - d.ScaleTo(origScale, h.TimePreempt); + d.ScaleTo(1.1f, 1) // if duration = 0 then components (i.e. flash) scale with it -> we don't want that + .Then() + .ScaleTo(origScale, h.TimePreempt); } } } From 98042eb7d4aaec3e53530b6ffbc2bff2b014ea71 Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Sun, 30 Sep 2018 14:46:36 +0200 Subject: [PATCH 003/267] add the default fadeout-while-scaling-up to clicked objects --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index 8c6f82dee4..a4f841f188 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -36,7 +36,9 @@ namespace osu.Game.Rulesets.Osu.Mods var origScale = d.Scale; d.ScaleTo(1.1f, 1) // if duration = 0 then components (i.e. flash) scale with it -> we don't want that .Then() - .ScaleTo(origScale, h.TimePreempt); + .ScaleTo(origScale, h.TimePreempt) + .Then() + .ScaleTo(d.Scale * 1.5f, 400, Easing.OutQuad); // reapply overwritten ScaleTo } } } From 8b09935c378b38f72f8c7429d1ed84a3fdf5e198 Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Sun, 30 Sep 2018 14:49:52 +0200 Subject: [PATCH 004/267] previous commit only added scaling-up (oops), this one includes fading --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index a4f841f188..db46d3992a 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -38,6 +38,7 @@ namespace osu.Game.Rulesets.Osu.Mods .Then() .ScaleTo(origScale, h.TimePreempt) .Then() + .FadeOut(800) .ScaleTo(d.Scale * 1.5f, 400, Easing.OutQuad); // reapply overwritten ScaleTo } } From 01a4c8d92b5556d1757adb7a828a8ffbe7bc5d7c Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Mon, 1 Oct 2018 12:11:19 +0200 Subject: [PATCH 005/267] Add deflate mod to OsuRuleset.cs --- osu.Game.Rulesets.Osu/OsuRuleset.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game.Rulesets.Osu/OsuRuleset.cs b/osu.Game.Rulesets.Osu/OsuRuleset.cs index 6736d10dab..30dd9c73d6 100644 --- a/osu.Game.Rulesets.Osu/OsuRuleset.cs +++ b/osu.Game.Rulesets.Osu/OsuRuleset.cs @@ -121,6 +121,7 @@ namespace osu.Game.Rulesets.Osu return new Mod[] { new OsuModTransform(), new OsuModWiggle(), + new OsuModDeflate(), }; default: return new Mod[] { }; From 0ae9c78c38ce3cd33b3b3cfce14234050ad6b05f Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Mon, 1 Oct 2018 12:29:21 +0200 Subject: [PATCH 006/267] set drawableOnApplyCustomUpdateState private to make AppVeyor happy :) --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index db46d3992a..d61d552ce2 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -25,7 +25,7 @@ namespace osu.Game.Rulesets.Osu.Mods drawable.ApplyCustomUpdateState += drawableOnApplyCustomUpdateState; } - protected void drawableOnApplyCustomUpdateState(DrawableHitObject drawable, ArmedState state) + private void drawableOnApplyCustomUpdateState(DrawableHitObject drawable, ArmedState state) { if (!(drawable is DrawableHitCircle d)) return; From 951ac30de8a6db2af540b7aef26f5fb352b41330 Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Wed, 10 Oct 2018 01:36:37 +0200 Subject: [PATCH 007/267] ArmedState now considered, SliderBody now deflates (TODO: handle slider's nested objects) --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 55 +++++++++++++++++---- 1 file changed, 45 insertions(+), 10 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index d61d552ce2..f5be85158f 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -7,6 +7,7 @@ using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects.Drawables; using System.Collections.Generic; +using OpenTK; namespace osu.Game.Rulesets.Osu.Mods { @@ -27,19 +28,53 @@ namespace osu.Game.Rulesets.Osu.Mods private void drawableOnApplyCustomUpdateState(DrawableHitObject drawable, ArmedState state) { - if (!(drawable is DrawableHitCircle d)) + if (!(drawable is DrawableOsuHitObject d)) return; - d.ApproachCircle.Hide(); + var h = d.HitObject; - using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt)) + + switch (drawable) { - var origScale = d.Scale; - d.ScaleTo(1.1f, 1) // if duration = 0 then components (i.e. flash) scale with it -> we don't want that - .Then() - .ScaleTo(origScale, h.TimePreempt) - .Then() - .FadeOut(800) - .ScaleTo(d.Scale * 1.5f, 400, Easing.OutQuad); // reapply overwritten ScaleTo + case DrawableHitCircle c: + c.ApproachCircle.Hide(); + using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt)) + { + var origScale = d.Scale; + d.ScaleTo(1.1f, 1) + .Then() + .ScaleTo(origScale, h.TimePreempt); + } + switch (state) + { + case ArmedState.Miss: + d.FadeOut(100); + break; + case ArmedState.Hit: + d.FadeOut(800) + .ScaleTo(d.Scale * 1.5f, 400, Easing.OutQuad); + break; + } + break; + case DrawableSlider s: + using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt + 1, true)) + { + float origPathWidth = s.Body.PathWidth; + var origBodySize = s.Body.Size; + var origBodyDrawPos = s.Body.DrawPosition; + + s.Body.MoveTo(origBodyDrawPos - new Vector2(origPathWidth), 1) + .Then() + .MoveTo(origBodyDrawPos, h.TimePreempt); + + s.Body.ResizeTo(origBodySize * 2, 1) + .Then() + .ResizeTo(origBodySize, h.TimePreempt); + + s.Body.TransformTo("PathWidth", origPathWidth * 2, 1) + .Then() + .TransformTo("PathWidth", origPathWidth, h.TimePreempt); + } + break; } } } From 19efa1cafb33859e7444d981790a5c90c42e3f70 Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Fri, 12 Oct 2018 20:55:42 +0200 Subject: [PATCH 008/267] Added TestCase, first RepeatPoint now deflates aswell --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 27 +- .../Objects/Drawables/DrawableRepeatPoint.cs | 2 + osu.Game.Tests/Visual/TestCaseDeflate.cs | 637 ++++++++++++++++++ 3 files changed, 655 insertions(+), 11 deletions(-) create mode 100644 osu.Game.Tests/Visual/TestCaseDeflate.cs diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index f5be85158f..a049248021 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -33,6 +33,8 @@ namespace osu.Game.Rulesets.Osu.Mods var h = d.HitObject; + float rescale = 2; + switch (drawable) { case DrawableHitCircle c: @@ -55,6 +57,7 @@ namespace osu.Game.Rulesets.Osu.Mods break; } break; + case DrawableSlider s: using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt + 1, true)) { @@ -62,19 +65,21 @@ namespace osu.Game.Rulesets.Osu.Mods var origBodySize = s.Body.Size; var origBodyDrawPos = s.Body.DrawPosition; - s.Body.MoveTo(origBodyDrawPos - new Vector2(origPathWidth), 1) - .Then() - .MoveTo(origBodyDrawPos, h.TimePreempt); - - s.Body.ResizeTo(origBodySize * 2, 1) - .Then() - .ResizeTo(origBodySize, h.TimePreempt); - - s.Body.TransformTo("PathWidth", origPathWidth * 2, 1) - .Then() - .TransformTo("PathWidth", origPathWidth, h.TimePreempt); + // Fits nicely for CS=4, too big on lower CS, too small on higher CS + s.Body.Animate( + b => b.MoveTo(origBodyDrawPos - new Vector2(origPathWidth)).MoveTo(origBodyDrawPos, h.TimePreempt), + b => b.ResizeTo(origBodySize * rescale).ResizeTo(origBodySize, h.TimePreempt), + b => b.TransformTo("PathWidth", origPathWidth * rescale).TransformTo("PathWidth", origPathWidth, h.TimePreempt) + ); } break; + case DrawableRepeatPoint rp: + if (!rp.IsFirstRepeat) + break; + var origSizeRP = rp.Size; + using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt + 1, true)) + rp.ResizeTo(origSizeRP * rescale).ResizeTo(origSizeRP, h.TimePreempt); + break; } } } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs index dfe7937e81..65b6b5b004 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs @@ -41,6 +41,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables }; } + public bool IsFirstRepeat => repeatPoint.RepeatIndex == 0; + protected override void CheckForResult(bool userTriggered, double timeOffset) { if (repeatPoint.StartTime <= Time.Current) diff --git a/osu.Game.Tests/Visual/TestCaseDeflate.cs b/osu.Game.Tests/Visual/TestCaseDeflate.cs new file mode 100644 index 0000000000..8a24e2414c --- /dev/null +++ b/osu.Game.Tests/Visual/TestCaseDeflate.cs @@ -0,0 +1,637 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System.ComponentModel; +using System.IO; +using System.Text; +using System.Linq; +using osu.Game.Beatmaps; +using osu.Game.Rulesets; +using Decoder = osu.Game.Beatmaps.Formats.Decoder; +using osu.Game.Rulesets.Osu.Mods; +using osu.Game.Screens.Play; +using osu.Game.Rulesets.Scoring; + +namespace osu.Game.Tests.Visual +{ + [Description("Player instantiated with an deflate mod.")] + public class TestCaseDeflate : TestCasePlayer + { + protected override IBeatmap CreateBeatmap(Ruleset ruleset) + { + Beatmap beatmap; + using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(test_beatmap_data))) + using (var reader = new StreamReader(stream)) + beatmap = Decoder.GetDecoder(reader).Decode(reader); + beatmap.BeatmapInfo.Ruleset = ruleset.RulesetInfo; + beatmap.BeatmapInfo.BaseDifficulty.CircleSize = 4; + return beatmap; + } + + protected override Player CreatePlayer(Ruleset ruleset) + { + Beatmap.Value.Mods.Value = Beatmap.Value.Mods.Value.Concat(new[] { ruleset.GetAutoplayMod(), ruleset.GetAllMods().First(mod => mod is OsuModDeflate) }); + return new ScoreAccessiblePlayer + { + AllowPause = false, + AllowLeadIn = false, + AllowResults = false, + }; + } + + protected override bool ContinueCondition(Player player) => base.ContinueCondition(player) && ((ScoreAccessiblePlayer)player).ScoreProcessor.TotalScore > 0; + + private class ScoreAccessiblePlayer : Player + { + public new ScoreProcessor ScoreProcessor => base.ScoreProcessor; + } + + private const string test_beatmap_data = + @"osu file format v14 + +[General] +AudioFilename: R4V3 B0Y - S3RL Feat Krystal.mp3 +AudioLeadIn: 0 +PreviewTime: 56176 +Countdown: 0 +SampleSet: Soft +StackLeniency: 0.7 +Mode: 0 +LetterboxInBreaks: 0 +WidescreenStoryboard: 1 + +[Editor] +Bookmarks: 12382,23354,34325,45297,56268,67240,78211,89182,100154,111125,122097,128605,133068,144040,155011,165982,175582 +DistanceSpacing: 1.5 +BeatDivisor: 4 +GridSize: 4 +TimelineZoom: 3.799998 + +[Metadata] +Title:R4V3 B0Y +TitleUnicode:R4V3 B0Y +Artist:S3RL feat Krystal +ArtistUnicode:S3RL feat Krystal +Creator:DeRandom Otaku +Version:FCL's H4RD +Source: +Tags:happy hardcore EMFA music rave boy Shmiklak FCL ByBy ByBy13 ByBy_Chan Marvollo M_a_r_v_o_l_l_o +BeatmapID:1056070 +BeatmapSetID:481451 + +[Difficulty] +HPDrainRate:5 +CircleSize:4 +OverallDifficulty:6 +ApproachRate:7.5 +SliderMultiplier:1.4 +SliderTickRate:1 + +[Events] +//Background and Video events +0,0,'BG.jpg',0,0 +//Break Periods +2,89376,99323 +//Storyboard Layer 0 (Background) +//Storyboard Layer 1 (Fail) +//Storyboard Layer 2 (Pass) +//Storyboard Layer 3 (Foreground) +//Storyboard Sound Samples + +[TimingPoints] +34,342.857142857143,4,1,1,100,1,0 +34,-133.333333333333,4,1,1,100,0,0 +1405,-133.333333333333,4,2,1,70,0,0 +12376,-125,4,2,2,70,0,0 +21976,-100,4,2,2,45,0,0 +23348,-100,4,2,2,85,0,0 +26091,-100,4,2,2,85,0,0 +31576,-100,4,2,2,85,0,0 +34319,-100,4,2,2,85,0,0 +37062,-100,4,2,2,85,0,0 +42462,-100,4,2,2,5,0,0 +42548,-100,4,2,2,85,0,0 +43919,-100,4,2,2,65,0,0 +45291,-100,4,2,2,50,0,0 +50691,-100,4,2,2,5,0,0 +50776,-100,4,2,2,50,0,0 +56262,-100,4,2,2,90,0,1 +65862,-125,4,2,2,90,0,0 +67234,-100,4,2,2,90,0,1 +72719,-100,4,2,2,90,0,1 +76834,-125,4,2,2,45,0,0 +78205,-125,4,2,0,50,0,0 +100148,-125,4,2,2,50,0,0 +100491,-125,4,2,0,50,0,0 +111119,-100,4,2,2,50,0,0 +116091,-100,4,2,2,10,0,0 +116262,-100,4,2,2,50,0,0 +116434,-100,4,2,2,10,0,0 +116605,-100,4,2,2,50,0,0 +121748,-133.333333333333,4,2,2,50,0,0 +122091,-100,4,2,2,50,0,0 +127576,-100,4,2,2,50,0,0 +130319,-90.9090909090909,4,2,2,50,0,0 +131005,-83.3333333333333,4,2,2,50,0,0 +131691,-76.9230769230769,4,2,2,50,0,0 +132376,-133.333333333333,4,2,2,50,0,0 +133062,-100,4,2,2,90,0,1 +135719,-100,4,2,2,5,0,1 +135805,-100,4,2,2,90,0,1 +141205,-100,4,2,2,5,0,1 +141291,-100,4,2,2,90,0,1 +142662,-100,4,2,2,70,0,0 +143691,-100,4,2,2,40,0,0 +144034,-100,4,2,2,90,0,1 +146691,-100,4,2,2,5,0,1 +146776,-100,4,2,2,90,0,1 +152176,-100,4,2,2,5,0,1 +152262,-100,4,2,2,90,0,1 +154662,-100,4,2,2,60,0,1 +155005,-100,4,2,2,75,0,0 +165976,-100,4,2,2,75,0,0 +171462,-133.333333333333,4,2,2,60,0,0 +174205,-153.846153846153,4,2,2,50,0,0 +174891,-153.846153846154,4,2,2,40,0,0 +175576,-100,4,2,2,25,0,0 +176262,-125,4,2,2,25,0,0 +176605,-125,4,2,2,15,0,0 + + +[Colours] + Combo1 : 0,255,255 +Combo2 : 17,255,17 +Combo3 : 0,128,192 +Combo4 : 124,0,249 + +[HitObjects] +138,122,34,6,0,L|133:229,3,105.000004005432,0|0|0|0,2:0|2:0|2:0|2:0,2:2:0:0: +133,226,1405,6,0,L|248:220,1,105.000004005432,2|2,1:2|0:0,0:0:0:0: +339,341,2091,2,0,L|222:338,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +133,226,2776,2,0,P|128:187|129:158,1,52.5000020027162,2|0,0:0|0:0,0:0:0:0: +188,123,3119,2,0,P|193:84|190:55,1,52.5000020027162,2|0,0:0|0:0,0:0:0:0: +262,34,3462,2,0,P|290:62|366:69,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +431,74,3976,1,0,0:0:0:0: +496,117,4148,6,0,L|503:229,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +456,286,4662,1,0,0:0:0:0: +408,349,4834,2,0,L|296:356,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +172,266,5519,2,0,P|155:216|165:148,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +206,101,6034,1,0,0:0:0:0: +239,172,6205,2,0,L|361:162,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +494,260,6891,6,0,B|443:252|443:252|386:267,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +324,308,7405,1,0,0:0:0:0: +248,287,7576,2,0,L|241:227,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: +169,202,7919,2,0,L|176:142,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: +239,104,8262,2,0,P|282:119|345:101,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +416,92,8776,1,0,0:0:0:0: +484,132,8948,2,0,L|491:195,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: +445,249,9291,2,0,L|452:312,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: +388,349,9634,6,0,P|354:328|289:335,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +216,360,10148,1,0,0:0:0:0: +143,328,10319,2,0,L|72:315,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: +102,240,10662,2,0,L|173:227,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: +224,195,11005,5,2,0:0:0:0: +160,148,11176,1,0,0:0:0:0: +233,120,11348,1,2,0:0:0:0: +172,69,11519,1,0,0:0:0:0: +247,45,11691,2,0,P|285:39|314:43,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: +355,95,12034,2,0,P|378:105|399:121,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: +482,162,12376,6,0,P|450:190|445:261,1,112,2|2,0:0|0:0,0:0:0:0: +298,342,13062,2,0,P|296:287|259:247,1,112,2|2,0:0|0:0,0:0:0:0: +132,135,13748,2,0,L|127:62,1,56,2|0,0:0|0:0,0:0:0:0: +209,57,14091,2,0,L|235:-11,1,56,2|0,0:0|0:0,0:0:0:0: +304,41,14434,2,0,P|348:52|380:44,2,56,2|0|2,0:0|0:0|0:0,0:0:0:0: +272,119,14948,1,0,0:0:0:0: +335,173,15119,6,0,L|340:298,1,112,2|2,0:0|0:0,0:0:0:0: +274,339,15634,1,0,0:0:0:0: +216,278,15805,2,0,B|165:262|165:262|86:278,1,112,2|2,0:0|0:0,0:0:0:0: +5,139,16491,2,0,B|56:123|56:123|135:139,1,112,2|2,0:0|0:0,0:0:0:0: +189,171,17005,1,0,0:0:0:0: +257,123,17176,2,0,L|379:117,1,112,2|2,0:0|0:0,0:0:0:0: +434,171,17691,1,0,0:0:0:0: +434,171,17776,1,0,0:0:0:0: +434,171,17862,6,0,P|450:218|426:288,1,112,2|2,0:0|0:0,0:0:0:0: +356,308,18376,1,0,0:0:0:0: +288,261,18548,2,0,L|207:258,1,56,2|0,0:0|0:0,0:0:0:0: +170,316,18891,2,0,L|89:319,1,56,2|0,0:0|0:0,0:0:0:0: +38,234,19234,2,0,P|110:237|160:210,1,112,2|2,0:0|0:0,0:0:0:0: +179,144,19748,1,0,0:0:0:0: +104,105,19919,2,0,L|100:31,1,56,2|0,0:0|0:0,0:0:0:0: +179,18,20262,2,0,L|210:8,3,28,2|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: +247,8,20605,6,0,P|236:48|268:122,1,112,2|2,0:0|0:0,0:0:0:0: +311,178,21119,1,0,0:0:0:0: +288,259,21291,2,0,L|286:330,1,56,2|0,0:0|0:0,0:0:0:0: +363,349,21634,2,0,L|361:293,1,56,2|0,0:0|0:0,0:0:0:0: +408,231,21976,5,0,0:0:0:0: +462,125,23005,2,0,L|469:80,3,35 +499,48,23348,6,0,L|348:53,1,140,4|0,1:2|1:0,0:0:0:0: +178,161,24034,1,0,1:0:0:0: +244,241,24205,1,0,0:0:0:0: +244,241,24291,2,0,L|365:231,1,105,0|0,0:0|0:0,0:0:0:0: +434,292,24719,2,0,P|423:335|439:379,1,70,0|0,1:0|0:0,0:0:0:0: +325,333,25062,2,0,P|329:298|319:265,1,70,0|0,1:0|0:0,0:0:0:0: +250,185,25405,1,0,1:0:0:0: +308,135,25576,1,0,0:0:0:0: +213,111,25748,2,0,L|203:64,2,35,0|0|0,1:0|0:0|0:0,0:0:0:0: +146,183,26091,6,0,L|44:180,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: +202,370,26776,1,0,1:0:0:0: +253,288,26948,1,0,0:0:0:0: +253,288,27034,2,0,B|236:237|236:237|246:176,1,105,0|0,0:0|0:0,0:0:0:0: +318,112,27462,2,0,L|466:102,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: +139,224,28491,2,0,P|110:228|77:229,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: +69,267,28834,6,0,P|131:258|212:289,1,140,0|0,1:0|1:0,0:0:0:0: +402,217,29519,1,0,1:0:0:0: +303,180,29691,1,0,0:0:0:0: +303,180,29776,2,0,P|288:123|299:60,1,105,0|0,0:0|0:0,0:0:0:0: +200,26,30205,2,0,P|155:51|54:21,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: +166,125,31062,1,0,0:0:0:0: +242,197,31234,2,0,L|246:257,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: +293,248,31576,6,0,L|139:246,1,140,0|0,1:0|1:0,0:0:0:0: +66,307,32091,1,0,0:0:0:0: +71,202,32262,2,0,L|84:35,1,140,0|0,1:0|1:0,0:0:0:0: +289,23,32948,5,0,0:0:0:0: +218,53,33119,1,0,0:0:0:0: +176,118,33291,2,0,P|174:157|190:205,2,70,0|0|0,0:0|0:0|0:0,0:0:0:0: +176,118,34148,1,8,0:0:0:0: +265,172,34319,6,0,L|418:174,1,140,4|0,1:2|1:0,0:0:0:0: +440,273,34834,1,0,0:0:0:0: +337,253,35005,2,0,P|281:253|235:345,1,140,0|0,1:0|1:0,0:0:0:0: +232,315,35519,1,0,0:0:0:0: +130,341,35691,2,0,L|36:328,1,70,0|0,1:0|0:0,0:0:0:0: +95,231,36034,2,0,L|15:179,1,70,0|0,1:0|0:0,0:0:0:0: +110,119,36376,2,0,L|59:38,1,70,0|0,1:0|0:0,0:0:0:0: +185,0,36719,1,0,1:0:0:0: +185,0,36805,2,0,L|193:69,1,70,0|0,0:0|0:0,0:0:0:0: +224,85,37062,6,0,L|307:102,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: +262,183,37576,1,0,0:0:0:0: +185,253,37748,2,0,P|117:286|52:236,1,140,0|0,1:0|1:0,0:0:0:0: +116,166,38262,1,0,0:0:0:0: +185,253,38434,2,0,P|222:247|281:246,1,70,0|0,1:0|0:0,0:0:0:0: +344,299,38776,2,0,P|380:310|433:333,1,70,0|0,1:0|0:0,0:0:0:0: +500,267,39119,1,0,1:0:0:0: +379,96,39462,2,0,L|374:53,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: +395,12,39805,6,0,L|224:2,1,140,0|0,1:0|1:0,0:0:0:0: +172,69,40319,1,0,0:0:0:0: +267,112,40491,2,0,P|250:151|275:259,1,140,0|0,1:0|1:0,0:0:0:0: +264,244,41005,1,0,0:0:0:0: +182,309,41176,2,0,P|155:264|127:236,1,70,0|0,1:0|0:0,0:0:0:0: +69,176,41519,2,0,P|96:131|124:103,1,70,0|0,1:0|0:0,0:0:0:0: +202,71,41862,1,0,1:0:0:0: +179,173,42034,1,0,0:0:0:0: +137,37,42205,1,0,1:0:0:0: +137,37,42291,2,0,L|35:33,1,70,0|0,0:0|0:0,0:0:0:0: +23,63,42548,6,0,B|6:161|6:161|23:218,1,140,0|0,1:0|1:0,0:0:0:0: +62,295,43062,1,0,0:0:0:0: +141,226,43234,1,0,1:0:0:0: +168,348,43405,1,0,0:0:0:0: +168,348,43491,2,0,L|295:355,1,105,0|0,0:0|0:0,0:0:0:0: +367,309,43919,1,0,0:0:0:0: +201,89,45291,6,0,L|279:83,1,70,2|0,0:0|0:0,0:0:0:0: +201,162,45634,2,0,L|279:156,1,70,2|0,0:0|0:0,0:0:0:0: +202,235,45976,2,0,L|280:229,1,70,2|0,0:0|0:0,0:0:0:0: +202,308,46319,2,0,L|280:302,1,70,2|0,0:0|0:0,0:0:0:0: +411,345,46662,6,0,P|368:344|311:362,1,70,2|0,0:0|0:0,0:0:0:0: +399,261,47005,2,0,P|360:241|301:234,1,70,2|0,0:0|0:0,0:0:0:0: +427,187,47348,2,0,P|400:153|349:121,1,70,2|0,0:0|0:0,0:0:0:0: +484,134,47691,2,0,P|473:91|441:41,1,70,2|0,0:0|0:0,0:0:0:0: +348,30,48034,6,0,B|308:39|308:39|264:31,1,70,2|0,0:0|0:0,0:0:0:0: +205,108,48376,2,0,B|245:117|245:117|289:109,1,70,2|0,0:0|0:0,0:0:0:0: +345,188,48719,2,0,B|305:197|305:197|261:189,1,70,2|0,0:0|0:0,0:0:0:0: +199,263,49062,2,0,B|239:272|239:272|283:264,1,70,2|0,0:0|0:0,0:0:0:0: +345,188,49405,6,0,L|354:101,1,70,2|0,0:0|0:0,0:0:0:0: +252,150,49748,2,0,L|243:63,1,70,2|0,0:0|0:0,0:0:0:0: +146,118,50091,2,0,P|123:75|90:43,1,70,2|0,0:0|0:0,0:0:0:0: +8,28,50434,2,0,L|6:177,1,140,10|2,0:0|0:0,0:0:0:0: +93,242,50948,5,0,0:0:0:0: +93,242,51119,2,0,L|190:238,1,70,2|0,0:0|0:0,0:0:0:0: +239,311,51462,2,0,L|308:313,1,70,2|0,0:0|0:0,0:0:0:0: +393,250,51805,1,2,0:0:0:0: +429,348,51976,1,0,0:0:0:0: +429,348,52319,5,0,0:0:0:0: +486,259,52491,2,0,P|487:222|486:172,1,70,2|0,0:0|0:0,0:0:0:0: +382,170,52834,2,0,P|367:136|345:91,1,70,2|0,0:0|0:0,0:0:0:0: +261,55,53176,1,2,0:0:0:0: +242,158,53348,1,0,0:0:0:0: +242,158,53519,6,0,L|70:148,1,140,8|8,0:0|0:0,0:0:0:0: +196,338,54205,2,0,L|205:214,2,105,8|8|8,0:0|0:0|0:0,0:0:0:0: +296,304,54891,5,8,0:0:0:0: +296,304,55062,1,8,0:0:0:0: +327,203,55234,1,8,0:0:0:0: +327,203,55405,1,8,0:0:0:0: +355,102,55576,2,0,L|342:44,3,35,8|8|8|8,0:0|0:0|0:0|0:0,0:0:0:0: +365,18,55919,2,0,P|305:35|246:17,1,105,0|0,0:0|0:0,0:0:0:0: +230,40,56262,5,0,1:0:0:0: +285,129,56434,1,0,0:0:0:0: +223,213,56605,2,0,L|134:207,1,70,0|0,1:0|0:0,0:0:0:0: +66,267,56948,2,0,P|55:317|63:357,1,70,0|0,1:0|0:0,0:0:0:0: +156,369,57291,1,0,1:0:0:0: +156,369,57462,1,0,0:0:0:0: +318,236,57805,5,0,0:0:0:0: +250,155,57976,2,0,L|254:68,1,70,0|0,1:0|0:0,0:0:0:0: +349,42,58319,2,0,P|397:52|447:48,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: +253,85,58834,1,0,0:0:0:0: +169,21,59005,6,0,L|22:18,1,140,0|0,1:0|1:0,0:0:0:0: +9,121,59519,1,0,0:0:0:0: +53,216,59691,1,0,1:0:0:0: +53,216,59862,2,0,L|130:212,1,70,0|0,0:0|1:0,0:0:0:0: +220,252,60205,1,0,0:0:0:0: +173,158,60376,5,0,1:0:0:0: +173,158,60462,1,0,0:0:0:0: +173,158,60548,2,0,P|169:112|176:70,1,70,0|0,0:0|1:0,0:0:0:0: +253,22,60891,1,0,0:0:0:0: +302,114,61062,2,0,L|450:111,1,140,2|2,0:0|0:0,0:0:0:0: +503,196,61576,1,8,0:0:0:0: +503,196,61748,5,0,1:0:0:0: +411,247,61919,2,0,L|406:328,1,70,0|0,0:0|1:0,0:0:0:0: +317,372,62262,1,0,0:0:0:0: +216,340,62434,2,0,L|208:247,1,70,0|0,1:0|0:0,0:0:0:0: +250,173,62776,2,0,P|263:124|255:77,1,70,0|0,1:0|0:0,0:0:0:0: +58,51,63291,5,0,0:0:0:0: +18,148,63462,2,0,P|28:185|22:232,1,70,0|0,1:0|0:0,0:0:0:0: +17,321,63805,2,0,P|51:322|85:312,1,70,0|0,1:0|0:0,0:0:0:0: +172,254,64148,1,0,1:0:0:0: +172,254,64319,1,0,0:0:0:0: +240,334,64491,6,0,B|300:320|300:320|393:333,1,140,0|0,1:0|1:0,0:0:0:0: +466,274,65005,1,0,0:0:0:0: +408,186,65176,2,0,P|401:138|406:98,1,70,0|0,1:0|0:0,0:0:0:0: +298,101,65519,2,0,P|305:53|300:13,1,70,0|0,1:0|0:0,0:0:0:0: +303,31,65862,6,0,L|177:28,1,112,2|0,0:0|0:0,0:0:0:0: +124,79,66376,1,0,0:0:0:0: +200,113,66548,2,0,L|261:111,1,56 +134,161,66891,2,0,L|126:196,3,28,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: +89,224,67234,6,0,L|203:220,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: +239,260,67576,2,0,P|292:270|365:248,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: +390,227,67919,2,0,L|400:133,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: +372,69,68262,1,0,1:0:0:0: +251,140,68491,1,0,0:0:0:0: +251,140,68605,6,0,P|194:130|131:146,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: +105,180,68948,2,0,B|97:228|97:228|115:297,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: +166,310,69291,1,0,1:0:0:0: +275,223,69519,1,0,0:0:0:0: +332,263,69634,2,0,L|436:258,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: +499,298,69976,6,0,P|507:243|449:180,1,140,0|0,1:0|1:0,0:0:0:0: +328,131,70548,1,0,0:0:0:0: +278,180,70662,2,0,P|230:192|182:178,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: +122,155,71005,2,0,L|28:151,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: +11,219,71348,6,0,P|2:248|0:281,2,46.6666666666667,0|0|0,1:0|0:0|0:0,0:0:0:0: +28,151,71691,2,0,B|44:105|44:105|26:42,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: +88,20,72034,2,0,L|243:16,1,140,2|2,0:0|0:0,0:0:0:0: +227,16,72719,6,0,P|215:75|218:109,1,70,0|0,1:0|0:0,0:0:0:0: +299,148,73062,2,0,P|311:207|308:241,1,70,0|0,1:0|0:0,0:0:0:0: +260,308,73405,1,0,1:0:0:0: +260,308,73576,1,0,0:0:0:0: +361,278,73748,2,0,L|463:273,1,70,0|0,1:0|0:0,0:0:0:0: +494,74,74262,5,0,0:0:0:0: +430,157,74434,2,0,P|394:163|338:153,1,70,0|0,1:0|0:0,0:0:0:0: +280,93,74776,2,0,P|245:90|210:96,1,70,0|0,1:0|0:0,0:0:0:0: +121,152,75119,2,0,L|111:235,1,70,0|0,1:0|0:0,0:0:0:0: +61,328,75462,6,0,P|117:309|214:344,1,140,0|0,1:0|1:0,0:0:0:0: +296,303,75976,1,0,0:0:0:0: +213,237,76148,2,0,L|208:148,1,70,0|0,1:0|0:0,0:0:0:0: +307,204,76491,2,0,L|312:115,1,70,0|0,1:0|0:0,0:0:0:0: +270,59,76834,6,0,P|241:55|195:64,1,56,0|0,0:0|0:0,0:0:0:0: +172,130,77176,2,0,P|144:138|106:166,1,56 +65,215,77519,2,0,B|61:260|61:260|76:287|76:287|71:331,1,112 +71,322,78205,6,0,P|130:294|193:287,1,112 +288,161,78891,2,0,P|229:133|166:126,1,112 +22,84,79576,6,0,L|18:20,1,56 +100,46,79919,2,0,P|136:51|173:39,1,56,0|0,0:0|0:0,0:0:0:0: +234,19,80262,2,0,B|280:36|280:36|365:20,1,112,0|0,0:0|0:0,0:0:0:0: +341,24,80948,6,0,L|332:160,1,112 +333,135,81462,1,0,0:0:0:0: +277,198,81634,2,0,P|228:183|152:187,1,112,0|0,0:0|0:0,0:0:0:0: +64,315,82319,6,0,L|61:191,1,112 +61,203,82834,1,0,0:0:0:0: +107,133,83005,2,0,P|119:105|82:13,1,112,0|0,0:0|0:0,0:0:0:0: +100,28,83691,6,0,L|180:24,1,56,2|0,0:0|0:0,0:0:0:0: +224,74,84034,1,0,0:0:0:0: +224,74,84205,1,0,0:0:0:0: +289,21,84376,2,0,P|325:17|367:28,1,56,2|0,0:0|0:0,0:0:0:0: +369,100,84719,2,0,P|403:111|436:139,1,56,2|0,0:0|0:0,0:0:0:0: +481,208,85062,6,0,L|414:204,1,56,2|0,0:0|0:0,0:0:0:0: +367,266,85405,1,0,0:0:0:0: +367,266,85576,1,0,0:0:0:0: +307,206,85748,2,0,P|298:175|299:138,1,56,2|0,0:0|0:0,0:0:0:0: +213,154,86091,2,0,P|217:122|234:88,1,56,2|0,0:0|0:0,0:0:0:0: +168,18,86434,6,0,B|87:16|87:16|123:49,1,112,2|0,0:0|0:0,0:0:0:0: +81,116,86948,1,0,0:0:0:0: +117,191,87119,2,0,P|155:198|188:192,1,56,2|0,0:0|0:0,0:0:0:0: +230,256,87462,2,0,P|257:249|285:250,1,56,2|0,0:0|0:0,0:0:0:0: +359,290,87805,5,2,0:0:0:0: +359,290,87976,1,0,0:0:0:0: +389,211,88148,1,0,0:0:0:0: +389,211,88319,1,0,0:0:0:0: +466,177,88491,2,0,B|483:139|483:139|472:54,2,112,2|2|4,0:0|0:0|0:3,0:0:0:0: +185,144,100148,6,0,P|137:124|63:139,1,112,4|2,1:2|0:0,0:0:0:0: +35,189,100662,1,2,0:0:0:0: +35,189,100834,2,0,L|27:318,1,112,2|2,0:0|0:0,0:0:0:0: +164,352,101519,1,2,0:3:0:0: +297,294,101862,2,0,L|428:300,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: +281,222,102719,1,2,0:0:0:0: +305,153,102891,5,2,0:3:0:0: +225,274,103234,2,0,P|183:292|107:272,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: +305,153,104262,1,2,0:3:0:0: +186,67,104605,2,0,B|148:52|148:52|54:66,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: +256,48,105462,1,2,0:0:0:0: +326,30,105634,5,2,0:3:0:0: +428,132,105976,2,0,L|434:266,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: +308,216,107005,1,2,0:3:0:0: +189,131,107348,2,0,P|147:120|77:142,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: +230,190,108205,1,2,0:0:0:0: +233,262,108376,6,0,L|239:322,1,56,2|0,0:3|0:0,0:0:0:0: +311,325,108719,2,0,L|316:269,1,56,2|2,0:0|0:0,0:0:0:0: +369,219,109062,2,0,L|361:107,2,112,2|2|0,0:0|0:0|0:0,0:0:0:0: +81,124,110776,2,0,L|92:77,3,28,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: +77,52,111119,6,0,L|238:47,1,140,2|2,0:0|0:0,0:0:0:0: +290,102,111634,1,0,0:0:0:0: +349,33,111805,2,0,L|435:29,1,70,2|0,0:0|0:0,0:0:0:0: +439,118,112148,2,0,L|518:150,1,70,2|0,0:0|0:0,0:0:0:0: +426,309,112662,5,0,0:0:0:0: +379,230,112834,2,0,P|338:227|295:238,1,70,2|0,0:0|0:0,0:0:0:0: +237,286,113176,1,2,0:0:0:0: +237,286,113348,1,0,0:0:0:0: +172,221,113519,2,0,L|165:128,1,70,2|0,0:0|0:0,0:0:0:0: +166,151,114034,5,0,0:0:0:0: +237,94,114205,2,0,P|278:84|334:88,1,70,2|0,0:0|0:0,0:0:0:0: +375,142,114548,2,0,P|409:143|443:152,1,70,2|0,0:0|0:0,0:0:0:0: +496,226,114891,2,0,L|502:313,1,70,2|0,0:0|0:0,0:0:0:0: +434,358,115234,5,2,0:0:0:0: +434,358,115319,1,0,0:0:0:0: +434,358,115405,2,0,L|333:347,2,70,0|2|0,0:0|0:0|0:0,0:0:0:0: +398,273,115919,2,0,L|411:117,1,140,2|2,0:0|0:0,0:0:0:0: +255,34,116605,6,0,P|211:59|119:19,1,140,2|2,0:0|0:0,0:0:0:0: +45,68,117119,1,0,0:0:0:0: +108,133,117291,2,0,L|115:214,1,70,2|0,0:0|0:0,0:0:0:0: +197,240,117634,2,0,L|190:321,1,70,2|0,0:0|0:0,0:0:0:0: +363,369,118148,5,0,0:0:0:0: +332,283,118319,2,0,P|329:226|345:193,1,70,2|0,0:0|0:0,0:0:0:0: +386,140,118662,1,2,0:0:0:0: +386,140,118834,1,0,0:0:0:0: +331,67,119005,2,0,L|239:63,1,70,2|0,0:0|0:0,0:0:0:0: +261,63,119519,5,0,0:0:0:0: +198,129,119691,2,0,P|159:137|111:126,1,70,2|0,0:0|0:0,0:0:0:0: +68,201,120034,2,0,P|60:240|71:288,1,70,2|0,0:0|0:0,0:0:0:0: +128,333,120376,2,0,L|221:325,1,70,2|0,0:0|0:0,0:0:0:0: +282,293,120719,5,2,0:0:0:0: +282,293,121062,1,2,0:0:0:0: +282,293,121405,1,2,0:0:0:0: +282,293,121748,2,0,L|383:298,1,78.7500030040742,2|0,0:0|0:0,0:0:0:0: +403,281,122091,6,0,L|395:114,1,140,0|0,1:0|0:0,0:0:0:0: +221,91,122776,2,0,L|214:230,1,140,0|0,0:0|0:0,0:0:0:0: +354,347,123462,2,0,P|389:364|474:287,1,140,0|0,0:0|0:0,0:0:0:0: +329,202,124148,2,0,P|294:185|209:262,1,140,0|0,0:0|0:0,0:0:0:0: +68,341,124834,6,0,L|59:269,1,70,0|0,0:0|0:0,0:0:0:0: +139,313,125176,2,0,L|130:241,1,70,0|0,0:0|0:0,0:0:0:0: +211,286,125519,2,0,L|202:214,1,70,0|0,0:0|0:0,0:0:0:0: +282,260,125862,2,0,L|273:188,1,70,0|0,0:0|0:0,0:0:0:0: +192,108,126205,6,0,P|162:100|107:103,1,70 +172,192,126548,2,0,P|142:181|87:179,1,70 +146,274,126891,2,0,P|117:260|63:254,1,70 +110,354,127234,2,0,P|83:338|29:327,1,70 +150,279,127576,5,0,0:0:0:0: +150,279,127748,1,0,0:0:0:0: +242,327,127919,1,0,0:0:0:0: +242,327,128091,1,0,0:0:0:0: +285,232,128262,2,0,L|379:227,1,70,0|0,0:0|0:0,0:0:0:0: +422,166,128605,2,0,L|491:169,1,70,0|0,0:0|0:0,0:0:0:0: +441,76,128948,5,0,0:0:0:0: +441,76,129119,1,0,0:0:0:0: +388,150,129291,1,0,0:0:0:0: +388,150,129462,1,0,0:0:0:0: +338,73,129634,2,0,P|286:69|238:75,1,70,0|0,0:0|0:0,0:0:0:0: +210,140,129976,2,0,P|175:141|140:137,1,70,0|0,0:0|0:0,0:0:0:0: +79,205,130319,6,0,L|68:260,3,38.5000011749268,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: +108,267,130662,2,0,L|115:319,3,38.5000011749268,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: +145,334,131005,6,0,P|169:324|197:323,3,41.9999987182618,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: +220,339,131348,2,0,P|237:335|263:321,3,41.9999987182618,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: +289,300,131691,6,0,L|294:258,14,22.7499989585877,0|0|0|0|0|0|0|0|0|0|0|0|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: +314,240,132376,6,0,B|356:235|356:235|374:221|374:221|433:213,1,105.000004005432,0|0,0:0|0:0,0:0:0:0: +444,142,132891,1,0,0:0:0:0: +444,142,132976,1,0,0:0:0:0: +444,142,133062,6,0,B|461:90|461:90|446:-12,1,140,4|0,1:2|1:0,0:0:0:0: +238,15,133748,1,0,1:0:0:0: +181,103,133919,1,0,0:0:0:0: +181,103,134005,2,0,L|310:99,1,105,0|0,0:0|0:0,0:0:0:0: +366,167,134434,6,0,P|378:224|363:254,1,70,0|0,1:0|0:0,0:0:0:0: +276,270,134776,2,0,P|262:326|236:347,1,70,0|0,1:0|0:0,0:0:0:0: +151,356,135119,1,0,1:0:0:0: +61,300,135291,1,0,0:0:0:0: +164,254,135462,1,0,1:0:0:0: +164,254,135548,2,0,L|174:156,1,70 +195,162,135805,6,0,P|243:178|290:168,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: +148,67,136319,1,0,0:0:0:0: +148,67,136491,1,0,1:0:0:0: +247,98,136662,1,0,0:0:0:0: +247,98,136748,2,0,B|286:80|286:80|372:100,1,105,0|0,0:0|0:0,0:0:0:0: +432,154,137176,6,0,L|437:294,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: +307,324,138205,2,0,P|282:331|245:328,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: +246,309,138548,6,0,P|201:298|114:358,1,140,0|0,1:0|1:0,0:0:0:0: +19,157,139234,1,0,1:0:0:0: +113,112,139405,1,0,0:0:0:0: +113,112,139491,2,0,P|153:134|236:108,1,105,0|0,0:0|0:0,0:0:0:0: +310,159,139919,6,0,P|276:209|172:226,1,140,0|0,1:0|1:0,0:0:0:0: +387,334,140605,2,0,L|381:238,1,70,0|0,1:0|0:0,0:0:0:0: +450,183,140948,1,0,1:0:0:0: +450,183,141034,2,0,L|456:87,1,70,0|0,0:0|0:0,0:0:0:0: +434,85,141291,6,0,P|399:71|337:77,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: +468,292,141976,1,0,1:0:0:0: +377,238,142148,1,0,0:0:0:0: +377,238,142234,2,0,P|327:245|261:229,1,105 +178,185,142662,5,2,0:0:0:0: +178,185,143005,1,2,0:0:0:0: +178,185,143348,1,0,0:0:0:0: +178,185,143691,2,0,L|171:266,1,70,0|0,0:0|0:0,0:0:0:0: +171,254,144034,6,0,P|224:241|320:257,1,140,4|0,1:2|1:0,0:0:0:0: +408,282,144548,1,0,0:0:0:0: +480,205,144719,1,0,1:0:0:0: +433,116,144891,1,0,0:0:0:0: +433,116,144976,2,0,L|443:2,1,105,0|0,0:0|0:0,0:0:0:0: +337,69,145405,6,0,P|303:79|242:60,1,70,0|0,1:0|0:0,0:0:0:0: +172,116,145748,2,0,L|86:103,1,70,0|0,1:0|0:0,0:0:0:0: +38,188,146091,1,0,1:0:0:0: +38,188,146262,1,0,0:0:0:0: +110,264,146434,1,0,1:0:0:0: +110,264,146519,2,0,L|196:251,1,70,0|0,0:0|0:0,0:0:0:0: +208,269,146776,6,0,P|246:279|300:266,1,70,0|0,1:0|0:0,0:0:0:0: +369,227,147119,1,0,1:0:0:0: +369,227,147462,1,0,1:0:0:0: +312,138,147634,1,0,0:0:0:0: +312,138,147719,2,0,P|302:86|316:15,1,105,0|0,0:0|0:0,0:0:0:0: +210,71,148148,6,0,B|159:84|159:84|45:57,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: +410,132,149176,2,0,P|421:151|426:191,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: +458,203,149519,6,0,P|408:195|334:253,1,140,0|0,1:0|1:0,0:0:0:0: +232,232,150034,1,0,0:0:0:0: +309,162,150205,1,0,1:0:0:0: +192,144,150376,1,0,0:0:0:0: +192,144,150462,2,0,L|188:19,1,105,0|0,0:0|0:0,0:0:0:0: +112,155,150891,6,0,P|139:204|239:212,1,140,0|0,1:0|1:0,0:0:0:0: +216,221,151405,1,0,0:0:0:0: +296,288,151576,2,0,L|398:280,1,70,0|0,1:0|0:0,0:0:0:0: +445,213,151919,1,0,1:0:0:0: +445,213,152005,2,0,L|452:111,1,70,0|0,0:0|0:0,0:0:0:0: +434,113,152262,6,0,P|428:66|434:17,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: +352,180,152776,1,0,0:0:0:0: +352,180,152948,2,0,B|287:163|287:163|183:186,1,140,0|0,1:0|1:0,0:0:0:0: +215,178,153634,6,0,P|163:175|121:181,1,70,0|0,1:0|0:0,0:0:0:0: +106,274,153976,2,0,L|200:277,1,70,0|0,1:0|0:0,0:0:0:0: +264,329,154319,1,0,1:0:0:0: +264,329,154662,1,0,0:0:0:0: +360,286,154834,2,0,L|365:255,2,17.5,0|0|0,0:0|0:0|0:0,0:0:0:0: +376,312,155005,6,0,L|542:302,1,140,4|0,1:2|1:0,0:0:0:0: +460,213,155519,1,0,0:0:0:0: +460,213,155691,2,0,L|466:132,1,70,0|0,1:0|0:0,0:0:0:0: +363,113,156034,2,0,L|357:32,1,70,0|0,1:0|0:0,0:0:0:0: +253,34,156376,6,0,P|224:40|168:26,1,70,0|0,1:0|0:0,0:0:0:0: +101,98,156719,1,0,1:0:0:0: +101,98,156891,1,0,0:0:0:0: +190,152,157062,2,0,L|195:247,1,70,0|0,1:0|0:0,0:0:0:0: +290,274,157405,2,0,P|303:225|295:182,1,70,0|0,1:0|0:0,0:0:0:0: +271,105,157748,6,0,B|354:84|354:84|425:103,1,140,0|0,1:0|1:0,0:0:0:0: +484,169,158262,1,0,0:0:0:0: +484,169,158434,2,0,P|492:218|484:257,1,70,0|0,1:0|0:0,0:0:0:0: +396,286,158776,2,0,P|388:335|396:374,1,70,0|0,1:0|0:0,0:0:0:0: +285,341,159119,5,0,1:0:0:0: +285,341,159291,1,0,0:0:0:0: +210,267,159462,2,0,L|214:175,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: +129,334,159976,1,0,0:0:0:0: +51,262,160148,2,0,P|40:217|43:169,1,70,0|0,1:0|0:0,0:0:0:0: +125,104,160491,6,0,L|298:97,1,140,0|0,1:0|1:0,0:0:0:0: +341,170,161005,1,0,0:0:0:0: +373,70,161176,2,0,L|377:-8,1,70,0|0,1:0|0:0,0:0:0:0: +468,51,161519,1,0,1:0:0:0: +468,51,161691,1,0,0:0:0:0: +424,146,161862,6,0,P|419:203|429:235,1,70,0|0,1:0|0:0,0:0:0:0: +467,309,162205,2,0,L|388:311,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: +421,214,162719,1,0,0:0:0:0: +332,271,162891,2,0,P|321:309|343:361,1,70,0|0,1:0|0:0,0:0:0:0: +225,359,163234,6,0,P|162:331|86:357,1,140,0|0,1:0|1:0,0:0:0:0: +26,270,163748,1,0,0:0:0:0: +26,270,163919,2,0,L|30:169,1,70,0|0,1:0|0:0,0:0:0:0: +112,136,164262,2,0,L|108:35,1,70,0|0,1:0|0:0,0:0:0:0: +207,103,164605,6,0,P|272:122|351:76,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: +291,296,165634,1,0,1:0:0:0: +364,221,165805,1,8,0:0:0:0: +364,221,165891,1,0,0:0:0:0: +364,221,165976,6,0,P|373:159|328:87,1,140,4|0,1:2|1:0,0:0:0:0: +175,93,166662,2,0,P|140:152|148:221,1,140,0|0,1:0|1:0,0:0:0:0: +256,356,167348,2,0,L|256:212,1,140,0|0,1:0|1:0,0:0:0:0: +152,88,168034,1,0,1:0:0:0: +360,88,168376,1,0,1:0:0:0: +284,300,168719,6,0,P|216:308|157:273,1,140,0|0,1:0|1:0,0:0:0:0: +157,111,169405,2,0,P|216:76|285:84,1,140,0|0,1:0|1:0,0:0:0:0: +420,192,170091,2,0,L|276:192,1,140,0|0,1:0|1:0,0:0:0:0: +152,296,170777,1,0,1:0:0:0: +152,88,171119,1,0,1:0:0:0: +152,88,171291,1,0,0:0:0:0: +152,88,171462,6,0,L|264:88,1,105.000004005432,6|2,0:0|0:0,0:0:0:0: +392,176,172148,2,0,L|280:176,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +160,272,172834,2,0,L|272:272,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +400,352,173519,2,0,L|288:352,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: +105,324,174205,6,0,P|85:285|89:219,1,90.9999958343508,2|2,0:0|0:0,0:0:0:0: +95,219,174719,1,0,0:0:0:0: +103,197,174891,2,0,L|99:88,1,90.9999958343508,2|2,0:0|0:0,0:0:0:0: +240,73,175576,5,0,0:0:0:0: +265,106,175919,1,0,0:0:0:0: +279,136,176262,2,0,B|314:129|351:139|351:139|329:100,1,112"; + } +} From a876beeadaa5123a0ae148eb9e16a8a29765d96a Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Fri, 12 Oct 2018 21:34:24 +0200 Subject: [PATCH 009/267] Variable adjustments --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index a049248021..2638d5bf78 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -33,7 +33,7 @@ namespace osu.Game.Rulesets.Osu.Mods var h = d.HitObject; - float rescale = 2; + const float rescale = 2; switch (drawable) { @@ -76,9 +76,9 @@ namespace osu.Game.Rulesets.Osu.Mods case DrawableRepeatPoint rp: if (!rp.IsFirstRepeat) break; - var origSizeRP = rp.Size; + var origSizeRp = rp.Size; using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt + 1, true)) - rp.ResizeTo(origSizeRP * rescale).ResizeTo(origSizeRP, h.TimePreempt); + rp.ResizeTo(origSizeRp * rescale).ResizeTo(origSizeRp, h.TimePreempt); break; } } From f087c43b49c10fd99a0d3822a97c9a4dc6ae7025 Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Fri, 12 Oct 2018 22:31:35 +0200 Subject: [PATCH 010/267] Nvm about the new TestCase :^) --- osu.Game.Tests/Visual/TestCaseDeflate.cs | 637 ----------------------- 1 file changed, 637 deletions(-) delete mode 100644 osu.Game.Tests/Visual/TestCaseDeflate.cs diff --git a/osu.Game.Tests/Visual/TestCaseDeflate.cs b/osu.Game.Tests/Visual/TestCaseDeflate.cs deleted file mode 100644 index 8a24e2414c..0000000000 --- a/osu.Game.Tests/Visual/TestCaseDeflate.cs +++ /dev/null @@ -1,637 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using System.ComponentModel; -using System.IO; -using System.Text; -using System.Linq; -using osu.Game.Beatmaps; -using osu.Game.Rulesets; -using Decoder = osu.Game.Beatmaps.Formats.Decoder; -using osu.Game.Rulesets.Osu.Mods; -using osu.Game.Screens.Play; -using osu.Game.Rulesets.Scoring; - -namespace osu.Game.Tests.Visual -{ - [Description("Player instantiated with an deflate mod.")] - public class TestCaseDeflate : TestCasePlayer - { - protected override IBeatmap CreateBeatmap(Ruleset ruleset) - { - Beatmap beatmap; - using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(test_beatmap_data))) - using (var reader = new StreamReader(stream)) - beatmap = Decoder.GetDecoder(reader).Decode(reader); - beatmap.BeatmapInfo.Ruleset = ruleset.RulesetInfo; - beatmap.BeatmapInfo.BaseDifficulty.CircleSize = 4; - return beatmap; - } - - protected override Player CreatePlayer(Ruleset ruleset) - { - Beatmap.Value.Mods.Value = Beatmap.Value.Mods.Value.Concat(new[] { ruleset.GetAutoplayMod(), ruleset.GetAllMods().First(mod => mod is OsuModDeflate) }); - return new ScoreAccessiblePlayer - { - AllowPause = false, - AllowLeadIn = false, - AllowResults = false, - }; - } - - protected override bool ContinueCondition(Player player) => base.ContinueCondition(player) && ((ScoreAccessiblePlayer)player).ScoreProcessor.TotalScore > 0; - - private class ScoreAccessiblePlayer : Player - { - public new ScoreProcessor ScoreProcessor => base.ScoreProcessor; - } - - private const string test_beatmap_data = - @"osu file format v14 - -[General] -AudioFilename: R4V3 B0Y - S3RL Feat Krystal.mp3 -AudioLeadIn: 0 -PreviewTime: 56176 -Countdown: 0 -SampleSet: Soft -StackLeniency: 0.7 -Mode: 0 -LetterboxInBreaks: 0 -WidescreenStoryboard: 1 - -[Editor] -Bookmarks: 12382,23354,34325,45297,56268,67240,78211,89182,100154,111125,122097,128605,133068,144040,155011,165982,175582 -DistanceSpacing: 1.5 -BeatDivisor: 4 -GridSize: 4 -TimelineZoom: 3.799998 - -[Metadata] -Title:R4V3 B0Y -TitleUnicode:R4V3 B0Y -Artist:S3RL feat Krystal -ArtistUnicode:S3RL feat Krystal -Creator:DeRandom Otaku -Version:FCL's H4RD -Source: -Tags:happy hardcore EMFA music rave boy Shmiklak FCL ByBy ByBy13 ByBy_Chan Marvollo M_a_r_v_o_l_l_o -BeatmapID:1056070 -BeatmapSetID:481451 - -[Difficulty] -HPDrainRate:5 -CircleSize:4 -OverallDifficulty:6 -ApproachRate:7.5 -SliderMultiplier:1.4 -SliderTickRate:1 - -[Events] -//Background and Video events -0,0,'BG.jpg',0,0 -//Break Periods -2,89376,99323 -//Storyboard Layer 0 (Background) -//Storyboard Layer 1 (Fail) -//Storyboard Layer 2 (Pass) -//Storyboard Layer 3 (Foreground) -//Storyboard Sound Samples - -[TimingPoints] -34,342.857142857143,4,1,1,100,1,0 -34,-133.333333333333,4,1,1,100,0,0 -1405,-133.333333333333,4,2,1,70,0,0 -12376,-125,4,2,2,70,0,0 -21976,-100,4,2,2,45,0,0 -23348,-100,4,2,2,85,0,0 -26091,-100,4,2,2,85,0,0 -31576,-100,4,2,2,85,0,0 -34319,-100,4,2,2,85,0,0 -37062,-100,4,2,2,85,0,0 -42462,-100,4,2,2,5,0,0 -42548,-100,4,2,2,85,0,0 -43919,-100,4,2,2,65,0,0 -45291,-100,4,2,2,50,0,0 -50691,-100,4,2,2,5,0,0 -50776,-100,4,2,2,50,0,0 -56262,-100,4,2,2,90,0,1 -65862,-125,4,2,2,90,0,0 -67234,-100,4,2,2,90,0,1 -72719,-100,4,2,2,90,0,1 -76834,-125,4,2,2,45,0,0 -78205,-125,4,2,0,50,0,0 -100148,-125,4,2,2,50,0,0 -100491,-125,4,2,0,50,0,0 -111119,-100,4,2,2,50,0,0 -116091,-100,4,2,2,10,0,0 -116262,-100,4,2,2,50,0,0 -116434,-100,4,2,2,10,0,0 -116605,-100,4,2,2,50,0,0 -121748,-133.333333333333,4,2,2,50,0,0 -122091,-100,4,2,2,50,0,0 -127576,-100,4,2,2,50,0,0 -130319,-90.9090909090909,4,2,2,50,0,0 -131005,-83.3333333333333,4,2,2,50,0,0 -131691,-76.9230769230769,4,2,2,50,0,0 -132376,-133.333333333333,4,2,2,50,0,0 -133062,-100,4,2,2,90,0,1 -135719,-100,4,2,2,5,0,1 -135805,-100,4,2,2,90,0,1 -141205,-100,4,2,2,5,0,1 -141291,-100,4,2,2,90,0,1 -142662,-100,4,2,2,70,0,0 -143691,-100,4,2,2,40,0,0 -144034,-100,4,2,2,90,0,1 -146691,-100,4,2,2,5,0,1 -146776,-100,4,2,2,90,0,1 -152176,-100,4,2,2,5,0,1 -152262,-100,4,2,2,90,0,1 -154662,-100,4,2,2,60,0,1 -155005,-100,4,2,2,75,0,0 -165976,-100,4,2,2,75,0,0 -171462,-133.333333333333,4,2,2,60,0,0 -174205,-153.846153846153,4,2,2,50,0,0 -174891,-153.846153846154,4,2,2,40,0,0 -175576,-100,4,2,2,25,0,0 -176262,-125,4,2,2,25,0,0 -176605,-125,4,2,2,15,0,0 - - -[Colours] - Combo1 : 0,255,255 -Combo2 : 17,255,17 -Combo3 : 0,128,192 -Combo4 : 124,0,249 - -[HitObjects] -138,122,34,6,0,L|133:229,3,105.000004005432,0|0|0|0,2:0|2:0|2:0|2:0,2:2:0:0: -133,226,1405,6,0,L|248:220,1,105.000004005432,2|2,1:2|0:0,0:0:0:0: -339,341,2091,2,0,L|222:338,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -133,226,2776,2,0,P|128:187|129:158,1,52.5000020027162,2|0,0:0|0:0,0:0:0:0: -188,123,3119,2,0,P|193:84|190:55,1,52.5000020027162,2|0,0:0|0:0,0:0:0:0: -262,34,3462,2,0,P|290:62|366:69,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -431,74,3976,1,0,0:0:0:0: -496,117,4148,6,0,L|503:229,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -456,286,4662,1,0,0:0:0:0: -408,349,4834,2,0,L|296:356,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -172,266,5519,2,0,P|155:216|165:148,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -206,101,6034,1,0,0:0:0:0: -239,172,6205,2,0,L|361:162,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -494,260,6891,6,0,B|443:252|443:252|386:267,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -324,308,7405,1,0,0:0:0:0: -248,287,7576,2,0,L|241:227,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: -169,202,7919,2,0,L|176:142,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: -239,104,8262,2,0,P|282:119|345:101,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -416,92,8776,1,0,0:0:0:0: -484,132,8948,2,0,L|491:195,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: -445,249,9291,2,0,L|452:312,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: -388,349,9634,6,0,P|354:328|289:335,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -216,360,10148,1,0,0:0:0:0: -143,328,10319,2,0,L|72:315,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: -102,240,10662,2,0,L|173:227,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: -224,195,11005,5,2,0:0:0:0: -160,148,11176,1,0,0:0:0:0: -233,120,11348,1,2,0:0:0:0: -172,69,11519,1,0,0:0:0:0: -247,45,11691,2,0,P|285:39|314:43,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: -355,95,12034,2,0,P|378:105|399:121,1,52.5000020027161,2|0,0:0|0:0,0:0:0:0: -482,162,12376,6,0,P|450:190|445:261,1,112,2|2,0:0|0:0,0:0:0:0: -298,342,13062,2,0,P|296:287|259:247,1,112,2|2,0:0|0:0,0:0:0:0: -132,135,13748,2,0,L|127:62,1,56,2|0,0:0|0:0,0:0:0:0: -209,57,14091,2,0,L|235:-11,1,56,2|0,0:0|0:0,0:0:0:0: -304,41,14434,2,0,P|348:52|380:44,2,56,2|0|2,0:0|0:0|0:0,0:0:0:0: -272,119,14948,1,0,0:0:0:0: -335,173,15119,6,0,L|340:298,1,112,2|2,0:0|0:0,0:0:0:0: -274,339,15634,1,0,0:0:0:0: -216,278,15805,2,0,B|165:262|165:262|86:278,1,112,2|2,0:0|0:0,0:0:0:0: -5,139,16491,2,0,B|56:123|56:123|135:139,1,112,2|2,0:0|0:0,0:0:0:0: -189,171,17005,1,0,0:0:0:0: -257,123,17176,2,0,L|379:117,1,112,2|2,0:0|0:0,0:0:0:0: -434,171,17691,1,0,0:0:0:0: -434,171,17776,1,0,0:0:0:0: -434,171,17862,6,0,P|450:218|426:288,1,112,2|2,0:0|0:0,0:0:0:0: -356,308,18376,1,0,0:0:0:0: -288,261,18548,2,0,L|207:258,1,56,2|0,0:0|0:0,0:0:0:0: -170,316,18891,2,0,L|89:319,1,56,2|0,0:0|0:0,0:0:0:0: -38,234,19234,2,0,P|110:237|160:210,1,112,2|2,0:0|0:0,0:0:0:0: -179,144,19748,1,0,0:0:0:0: -104,105,19919,2,0,L|100:31,1,56,2|0,0:0|0:0,0:0:0:0: -179,18,20262,2,0,L|210:8,3,28,2|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: -247,8,20605,6,0,P|236:48|268:122,1,112,2|2,0:0|0:0,0:0:0:0: -311,178,21119,1,0,0:0:0:0: -288,259,21291,2,0,L|286:330,1,56,2|0,0:0|0:0,0:0:0:0: -363,349,21634,2,0,L|361:293,1,56,2|0,0:0|0:0,0:0:0:0: -408,231,21976,5,0,0:0:0:0: -462,125,23005,2,0,L|469:80,3,35 -499,48,23348,6,0,L|348:53,1,140,4|0,1:2|1:0,0:0:0:0: -178,161,24034,1,0,1:0:0:0: -244,241,24205,1,0,0:0:0:0: -244,241,24291,2,0,L|365:231,1,105,0|0,0:0|0:0,0:0:0:0: -434,292,24719,2,0,P|423:335|439:379,1,70,0|0,1:0|0:0,0:0:0:0: -325,333,25062,2,0,P|329:298|319:265,1,70,0|0,1:0|0:0,0:0:0:0: -250,185,25405,1,0,1:0:0:0: -308,135,25576,1,0,0:0:0:0: -213,111,25748,2,0,L|203:64,2,35,0|0|0,1:0|0:0|0:0,0:0:0:0: -146,183,26091,6,0,L|44:180,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: -202,370,26776,1,0,1:0:0:0: -253,288,26948,1,0,0:0:0:0: -253,288,27034,2,0,B|236:237|236:237|246:176,1,105,0|0,0:0|0:0,0:0:0:0: -318,112,27462,2,0,L|466:102,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: -139,224,28491,2,0,P|110:228|77:229,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: -69,267,28834,6,0,P|131:258|212:289,1,140,0|0,1:0|1:0,0:0:0:0: -402,217,29519,1,0,1:0:0:0: -303,180,29691,1,0,0:0:0:0: -303,180,29776,2,0,P|288:123|299:60,1,105,0|0,0:0|0:0,0:0:0:0: -200,26,30205,2,0,P|155:51|54:21,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: -166,125,31062,1,0,0:0:0:0: -242,197,31234,2,0,L|246:257,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: -293,248,31576,6,0,L|139:246,1,140,0|0,1:0|1:0,0:0:0:0: -66,307,32091,1,0,0:0:0:0: -71,202,32262,2,0,L|84:35,1,140,0|0,1:0|1:0,0:0:0:0: -289,23,32948,5,0,0:0:0:0: -218,53,33119,1,0,0:0:0:0: -176,118,33291,2,0,P|174:157|190:205,2,70,0|0|0,0:0|0:0|0:0,0:0:0:0: -176,118,34148,1,8,0:0:0:0: -265,172,34319,6,0,L|418:174,1,140,4|0,1:2|1:0,0:0:0:0: -440,273,34834,1,0,0:0:0:0: -337,253,35005,2,0,P|281:253|235:345,1,140,0|0,1:0|1:0,0:0:0:0: -232,315,35519,1,0,0:0:0:0: -130,341,35691,2,0,L|36:328,1,70,0|0,1:0|0:0,0:0:0:0: -95,231,36034,2,0,L|15:179,1,70,0|0,1:0|0:0,0:0:0:0: -110,119,36376,2,0,L|59:38,1,70,0|0,1:0|0:0,0:0:0:0: -185,0,36719,1,0,1:0:0:0: -185,0,36805,2,0,L|193:69,1,70,0|0,0:0|0:0,0:0:0:0: -224,85,37062,6,0,L|307:102,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: -262,183,37576,1,0,0:0:0:0: -185,253,37748,2,0,P|117:286|52:236,1,140,0|0,1:0|1:0,0:0:0:0: -116,166,38262,1,0,0:0:0:0: -185,253,38434,2,0,P|222:247|281:246,1,70,0|0,1:0|0:0,0:0:0:0: -344,299,38776,2,0,P|380:310|433:333,1,70,0|0,1:0|0:0,0:0:0:0: -500,267,39119,1,0,1:0:0:0: -379,96,39462,2,0,L|374:53,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: -395,12,39805,6,0,L|224:2,1,140,0|0,1:0|1:0,0:0:0:0: -172,69,40319,1,0,0:0:0:0: -267,112,40491,2,0,P|250:151|275:259,1,140,0|0,1:0|1:0,0:0:0:0: -264,244,41005,1,0,0:0:0:0: -182,309,41176,2,0,P|155:264|127:236,1,70,0|0,1:0|0:0,0:0:0:0: -69,176,41519,2,0,P|96:131|124:103,1,70,0|0,1:0|0:0,0:0:0:0: -202,71,41862,1,0,1:0:0:0: -179,173,42034,1,0,0:0:0:0: -137,37,42205,1,0,1:0:0:0: -137,37,42291,2,0,L|35:33,1,70,0|0,0:0|0:0,0:0:0:0: -23,63,42548,6,0,B|6:161|6:161|23:218,1,140,0|0,1:0|1:0,0:0:0:0: -62,295,43062,1,0,0:0:0:0: -141,226,43234,1,0,1:0:0:0: -168,348,43405,1,0,0:0:0:0: -168,348,43491,2,0,L|295:355,1,105,0|0,0:0|0:0,0:0:0:0: -367,309,43919,1,0,0:0:0:0: -201,89,45291,6,0,L|279:83,1,70,2|0,0:0|0:0,0:0:0:0: -201,162,45634,2,0,L|279:156,1,70,2|0,0:0|0:0,0:0:0:0: -202,235,45976,2,0,L|280:229,1,70,2|0,0:0|0:0,0:0:0:0: -202,308,46319,2,0,L|280:302,1,70,2|0,0:0|0:0,0:0:0:0: -411,345,46662,6,0,P|368:344|311:362,1,70,2|0,0:0|0:0,0:0:0:0: -399,261,47005,2,0,P|360:241|301:234,1,70,2|0,0:0|0:0,0:0:0:0: -427,187,47348,2,0,P|400:153|349:121,1,70,2|0,0:0|0:0,0:0:0:0: -484,134,47691,2,0,P|473:91|441:41,1,70,2|0,0:0|0:0,0:0:0:0: -348,30,48034,6,0,B|308:39|308:39|264:31,1,70,2|0,0:0|0:0,0:0:0:0: -205,108,48376,2,0,B|245:117|245:117|289:109,1,70,2|0,0:0|0:0,0:0:0:0: -345,188,48719,2,0,B|305:197|305:197|261:189,1,70,2|0,0:0|0:0,0:0:0:0: -199,263,49062,2,0,B|239:272|239:272|283:264,1,70,2|0,0:0|0:0,0:0:0:0: -345,188,49405,6,0,L|354:101,1,70,2|0,0:0|0:0,0:0:0:0: -252,150,49748,2,0,L|243:63,1,70,2|0,0:0|0:0,0:0:0:0: -146,118,50091,2,0,P|123:75|90:43,1,70,2|0,0:0|0:0,0:0:0:0: -8,28,50434,2,0,L|6:177,1,140,10|2,0:0|0:0,0:0:0:0: -93,242,50948,5,0,0:0:0:0: -93,242,51119,2,0,L|190:238,1,70,2|0,0:0|0:0,0:0:0:0: -239,311,51462,2,0,L|308:313,1,70,2|0,0:0|0:0,0:0:0:0: -393,250,51805,1,2,0:0:0:0: -429,348,51976,1,0,0:0:0:0: -429,348,52319,5,0,0:0:0:0: -486,259,52491,2,0,P|487:222|486:172,1,70,2|0,0:0|0:0,0:0:0:0: -382,170,52834,2,0,P|367:136|345:91,1,70,2|0,0:0|0:0,0:0:0:0: -261,55,53176,1,2,0:0:0:0: -242,158,53348,1,0,0:0:0:0: -242,158,53519,6,0,L|70:148,1,140,8|8,0:0|0:0,0:0:0:0: -196,338,54205,2,0,L|205:214,2,105,8|8|8,0:0|0:0|0:0,0:0:0:0: -296,304,54891,5,8,0:0:0:0: -296,304,55062,1,8,0:0:0:0: -327,203,55234,1,8,0:0:0:0: -327,203,55405,1,8,0:0:0:0: -355,102,55576,2,0,L|342:44,3,35,8|8|8|8,0:0|0:0|0:0|0:0,0:0:0:0: -365,18,55919,2,0,P|305:35|246:17,1,105,0|0,0:0|0:0,0:0:0:0: -230,40,56262,5,0,1:0:0:0: -285,129,56434,1,0,0:0:0:0: -223,213,56605,2,0,L|134:207,1,70,0|0,1:0|0:0,0:0:0:0: -66,267,56948,2,0,P|55:317|63:357,1,70,0|0,1:0|0:0,0:0:0:0: -156,369,57291,1,0,1:0:0:0: -156,369,57462,1,0,0:0:0:0: -318,236,57805,5,0,0:0:0:0: -250,155,57976,2,0,L|254:68,1,70,0|0,1:0|0:0,0:0:0:0: -349,42,58319,2,0,P|397:52|447:48,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: -253,85,58834,1,0,0:0:0:0: -169,21,59005,6,0,L|22:18,1,140,0|0,1:0|1:0,0:0:0:0: -9,121,59519,1,0,0:0:0:0: -53,216,59691,1,0,1:0:0:0: -53,216,59862,2,0,L|130:212,1,70,0|0,0:0|1:0,0:0:0:0: -220,252,60205,1,0,0:0:0:0: -173,158,60376,5,0,1:0:0:0: -173,158,60462,1,0,0:0:0:0: -173,158,60548,2,0,P|169:112|176:70,1,70,0|0,0:0|1:0,0:0:0:0: -253,22,60891,1,0,0:0:0:0: -302,114,61062,2,0,L|450:111,1,140,2|2,0:0|0:0,0:0:0:0: -503,196,61576,1,8,0:0:0:0: -503,196,61748,5,0,1:0:0:0: -411,247,61919,2,0,L|406:328,1,70,0|0,0:0|1:0,0:0:0:0: -317,372,62262,1,0,0:0:0:0: -216,340,62434,2,0,L|208:247,1,70,0|0,1:0|0:0,0:0:0:0: -250,173,62776,2,0,P|263:124|255:77,1,70,0|0,1:0|0:0,0:0:0:0: -58,51,63291,5,0,0:0:0:0: -18,148,63462,2,0,P|28:185|22:232,1,70,0|0,1:0|0:0,0:0:0:0: -17,321,63805,2,0,P|51:322|85:312,1,70,0|0,1:0|0:0,0:0:0:0: -172,254,64148,1,0,1:0:0:0: -172,254,64319,1,0,0:0:0:0: -240,334,64491,6,0,B|300:320|300:320|393:333,1,140,0|0,1:0|1:0,0:0:0:0: -466,274,65005,1,0,0:0:0:0: -408,186,65176,2,0,P|401:138|406:98,1,70,0|0,1:0|0:0,0:0:0:0: -298,101,65519,2,0,P|305:53|300:13,1,70,0|0,1:0|0:0,0:0:0:0: -303,31,65862,6,0,L|177:28,1,112,2|0,0:0|0:0,0:0:0:0: -124,79,66376,1,0,0:0:0:0: -200,113,66548,2,0,L|261:111,1,56 -134,161,66891,2,0,L|126:196,3,28,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: -89,224,67234,6,0,L|203:220,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: -239,260,67576,2,0,P|292:270|365:248,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: -390,227,67919,2,0,L|400:133,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: -372,69,68262,1,0,1:0:0:0: -251,140,68491,1,0,0:0:0:0: -251,140,68605,6,0,P|194:130|131:146,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: -105,180,68948,2,0,B|97:228|97:228|115:297,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: -166,310,69291,1,0,1:0:0:0: -275,223,69519,1,0,0:0:0:0: -332,263,69634,2,0,L|436:258,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: -499,298,69976,6,0,P|507:243|449:180,1,140,0|0,1:0|1:0,0:0:0:0: -328,131,70548,1,0,0:0:0:0: -278,180,70662,2,0,P|230:192|182:178,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: -122,155,71005,2,0,L|28:151,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: -11,219,71348,6,0,P|2:248|0:281,2,46.6666666666667,0|0|0,1:0|0:0|0:0,0:0:0:0: -28,151,71691,2,0,B|44:105|44:105|26:42,1,93.3333333333333,0|0,1:0|0:0,0:0:0:0: -88,20,72034,2,0,L|243:16,1,140,2|2,0:0|0:0,0:0:0:0: -227,16,72719,6,0,P|215:75|218:109,1,70,0|0,1:0|0:0,0:0:0:0: -299,148,73062,2,0,P|311:207|308:241,1,70,0|0,1:0|0:0,0:0:0:0: -260,308,73405,1,0,1:0:0:0: -260,308,73576,1,0,0:0:0:0: -361,278,73748,2,0,L|463:273,1,70,0|0,1:0|0:0,0:0:0:0: -494,74,74262,5,0,0:0:0:0: -430,157,74434,2,0,P|394:163|338:153,1,70,0|0,1:0|0:0,0:0:0:0: -280,93,74776,2,0,P|245:90|210:96,1,70,0|0,1:0|0:0,0:0:0:0: -121,152,75119,2,0,L|111:235,1,70,0|0,1:0|0:0,0:0:0:0: -61,328,75462,6,0,P|117:309|214:344,1,140,0|0,1:0|1:0,0:0:0:0: -296,303,75976,1,0,0:0:0:0: -213,237,76148,2,0,L|208:148,1,70,0|0,1:0|0:0,0:0:0:0: -307,204,76491,2,0,L|312:115,1,70,0|0,1:0|0:0,0:0:0:0: -270,59,76834,6,0,P|241:55|195:64,1,56,0|0,0:0|0:0,0:0:0:0: -172,130,77176,2,0,P|144:138|106:166,1,56 -65,215,77519,2,0,B|61:260|61:260|76:287|76:287|71:331,1,112 -71,322,78205,6,0,P|130:294|193:287,1,112 -288,161,78891,2,0,P|229:133|166:126,1,112 -22,84,79576,6,0,L|18:20,1,56 -100,46,79919,2,0,P|136:51|173:39,1,56,0|0,0:0|0:0,0:0:0:0: -234,19,80262,2,0,B|280:36|280:36|365:20,1,112,0|0,0:0|0:0,0:0:0:0: -341,24,80948,6,0,L|332:160,1,112 -333,135,81462,1,0,0:0:0:0: -277,198,81634,2,0,P|228:183|152:187,1,112,0|0,0:0|0:0,0:0:0:0: -64,315,82319,6,0,L|61:191,1,112 -61,203,82834,1,0,0:0:0:0: -107,133,83005,2,0,P|119:105|82:13,1,112,0|0,0:0|0:0,0:0:0:0: -100,28,83691,6,0,L|180:24,1,56,2|0,0:0|0:0,0:0:0:0: -224,74,84034,1,0,0:0:0:0: -224,74,84205,1,0,0:0:0:0: -289,21,84376,2,0,P|325:17|367:28,1,56,2|0,0:0|0:0,0:0:0:0: -369,100,84719,2,0,P|403:111|436:139,1,56,2|0,0:0|0:0,0:0:0:0: -481,208,85062,6,0,L|414:204,1,56,2|0,0:0|0:0,0:0:0:0: -367,266,85405,1,0,0:0:0:0: -367,266,85576,1,0,0:0:0:0: -307,206,85748,2,0,P|298:175|299:138,1,56,2|0,0:0|0:0,0:0:0:0: -213,154,86091,2,0,P|217:122|234:88,1,56,2|0,0:0|0:0,0:0:0:0: -168,18,86434,6,0,B|87:16|87:16|123:49,1,112,2|0,0:0|0:0,0:0:0:0: -81,116,86948,1,0,0:0:0:0: -117,191,87119,2,0,P|155:198|188:192,1,56,2|0,0:0|0:0,0:0:0:0: -230,256,87462,2,0,P|257:249|285:250,1,56,2|0,0:0|0:0,0:0:0:0: -359,290,87805,5,2,0:0:0:0: -359,290,87976,1,0,0:0:0:0: -389,211,88148,1,0,0:0:0:0: -389,211,88319,1,0,0:0:0:0: -466,177,88491,2,0,B|483:139|483:139|472:54,2,112,2|2|4,0:0|0:0|0:3,0:0:0:0: -185,144,100148,6,0,P|137:124|63:139,1,112,4|2,1:2|0:0,0:0:0:0: -35,189,100662,1,2,0:0:0:0: -35,189,100834,2,0,L|27:318,1,112,2|2,0:0|0:0,0:0:0:0: -164,352,101519,1,2,0:3:0:0: -297,294,101862,2,0,L|428:300,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: -281,222,102719,1,2,0:0:0:0: -305,153,102891,5,2,0:3:0:0: -225,274,103234,2,0,P|183:292|107:272,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: -305,153,104262,1,2,0:3:0:0: -186,67,104605,2,0,B|148:52|148:52|54:66,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: -256,48,105462,1,2,0:0:0:0: -326,30,105634,5,2,0:3:0:0: -428,132,105976,2,0,L|434:266,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: -308,216,107005,1,2,0:3:0:0: -189,131,107348,2,0,P|147:120|77:142,2,112,2|2|2,0:0|0:0|0:0,0:0:0:0: -230,190,108205,1,2,0:0:0:0: -233,262,108376,6,0,L|239:322,1,56,2|0,0:3|0:0,0:0:0:0: -311,325,108719,2,0,L|316:269,1,56,2|2,0:0|0:0,0:0:0:0: -369,219,109062,2,0,L|361:107,2,112,2|2|0,0:0|0:0|0:0,0:0:0:0: -81,124,110776,2,0,L|92:77,3,28,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: -77,52,111119,6,0,L|238:47,1,140,2|2,0:0|0:0,0:0:0:0: -290,102,111634,1,0,0:0:0:0: -349,33,111805,2,0,L|435:29,1,70,2|0,0:0|0:0,0:0:0:0: -439,118,112148,2,0,L|518:150,1,70,2|0,0:0|0:0,0:0:0:0: -426,309,112662,5,0,0:0:0:0: -379,230,112834,2,0,P|338:227|295:238,1,70,2|0,0:0|0:0,0:0:0:0: -237,286,113176,1,2,0:0:0:0: -237,286,113348,1,0,0:0:0:0: -172,221,113519,2,0,L|165:128,1,70,2|0,0:0|0:0,0:0:0:0: -166,151,114034,5,0,0:0:0:0: -237,94,114205,2,0,P|278:84|334:88,1,70,2|0,0:0|0:0,0:0:0:0: -375,142,114548,2,0,P|409:143|443:152,1,70,2|0,0:0|0:0,0:0:0:0: -496,226,114891,2,0,L|502:313,1,70,2|0,0:0|0:0,0:0:0:0: -434,358,115234,5,2,0:0:0:0: -434,358,115319,1,0,0:0:0:0: -434,358,115405,2,0,L|333:347,2,70,0|2|0,0:0|0:0|0:0,0:0:0:0: -398,273,115919,2,0,L|411:117,1,140,2|2,0:0|0:0,0:0:0:0: -255,34,116605,6,0,P|211:59|119:19,1,140,2|2,0:0|0:0,0:0:0:0: -45,68,117119,1,0,0:0:0:0: -108,133,117291,2,0,L|115:214,1,70,2|0,0:0|0:0,0:0:0:0: -197,240,117634,2,0,L|190:321,1,70,2|0,0:0|0:0,0:0:0:0: -363,369,118148,5,0,0:0:0:0: -332,283,118319,2,0,P|329:226|345:193,1,70,2|0,0:0|0:0,0:0:0:0: -386,140,118662,1,2,0:0:0:0: -386,140,118834,1,0,0:0:0:0: -331,67,119005,2,0,L|239:63,1,70,2|0,0:0|0:0,0:0:0:0: -261,63,119519,5,0,0:0:0:0: -198,129,119691,2,0,P|159:137|111:126,1,70,2|0,0:0|0:0,0:0:0:0: -68,201,120034,2,0,P|60:240|71:288,1,70,2|0,0:0|0:0,0:0:0:0: -128,333,120376,2,0,L|221:325,1,70,2|0,0:0|0:0,0:0:0:0: -282,293,120719,5,2,0:0:0:0: -282,293,121062,1,2,0:0:0:0: -282,293,121405,1,2,0:0:0:0: -282,293,121748,2,0,L|383:298,1,78.7500030040742,2|0,0:0|0:0,0:0:0:0: -403,281,122091,6,0,L|395:114,1,140,0|0,1:0|0:0,0:0:0:0: -221,91,122776,2,0,L|214:230,1,140,0|0,0:0|0:0,0:0:0:0: -354,347,123462,2,0,P|389:364|474:287,1,140,0|0,0:0|0:0,0:0:0:0: -329,202,124148,2,0,P|294:185|209:262,1,140,0|0,0:0|0:0,0:0:0:0: -68,341,124834,6,0,L|59:269,1,70,0|0,0:0|0:0,0:0:0:0: -139,313,125176,2,0,L|130:241,1,70,0|0,0:0|0:0,0:0:0:0: -211,286,125519,2,0,L|202:214,1,70,0|0,0:0|0:0,0:0:0:0: -282,260,125862,2,0,L|273:188,1,70,0|0,0:0|0:0,0:0:0:0: -192,108,126205,6,0,P|162:100|107:103,1,70 -172,192,126548,2,0,P|142:181|87:179,1,70 -146,274,126891,2,0,P|117:260|63:254,1,70 -110,354,127234,2,0,P|83:338|29:327,1,70 -150,279,127576,5,0,0:0:0:0: -150,279,127748,1,0,0:0:0:0: -242,327,127919,1,0,0:0:0:0: -242,327,128091,1,0,0:0:0:0: -285,232,128262,2,0,L|379:227,1,70,0|0,0:0|0:0,0:0:0:0: -422,166,128605,2,0,L|491:169,1,70,0|0,0:0|0:0,0:0:0:0: -441,76,128948,5,0,0:0:0:0: -441,76,129119,1,0,0:0:0:0: -388,150,129291,1,0,0:0:0:0: -388,150,129462,1,0,0:0:0:0: -338,73,129634,2,0,P|286:69|238:75,1,70,0|0,0:0|0:0,0:0:0:0: -210,140,129976,2,0,P|175:141|140:137,1,70,0|0,0:0|0:0,0:0:0:0: -79,205,130319,6,0,L|68:260,3,38.5000011749268,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: -108,267,130662,2,0,L|115:319,3,38.5000011749268,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: -145,334,131005,6,0,P|169:324|197:323,3,41.9999987182618,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: -220,339,131348,2,0,P|237:335|263:321,3,41.9999987182618,0|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: -289,300,131691,6,0,L|294:258,14,22.7499989585877,0|0|0|0|0|0|0|0|0|0|0|0|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: -314,240,132376,6,0,B|356:235|356:235|374:221|374:221|433:213,1,105.000004005432,0|0,0:0|0:0,0:0:0:0: -444,142,132891,1,0,0:0:0:0: -444,142,132976,1,0,0:0:0:0: -444,142,133062,6,0,B|461:90|461:90|446:-12,1,140,4|0,1:2|1:0,0:0:0:0: -238,15,133748,1,0,1:0:0:0: -181,103,133919,1,0,0:0:0:0: -181,103,134005,2,0,L|310:99,1,105,0|0,0:0|0:0,0:0:0:0: -366,167,134434,6,0,P|378:224|363:254,1,70,0|0,1:0|0:0,0:0:0:0: -276,270,134776,2,0,P|262:326|236:347,1,70,0|0,1:0|0:0,0:0:0:0: -151,356,135119,1,0,1:0:0:0: -61,300,135291,1,0,0:0:0:0: -164,254,135462,1,0,1:0:0:0: -164,254,135548,2,0,L|174:156,1,70 -195,162,135805,6,0,P|243:178|290:168,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: -148,67,136319,1,0,0:0:0:0: -148,67,136491,1,0,1:0:0:0: -247,98,136662,1,0,0:0:0:0: -247,98,136748,2,0,B|286:80|286:80|372:100,1,105,0|0,0:0|0:0,0:0:0:0: -432,154,137176,6,0,L|437:294,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: -307,324,138205,2,0,P|282:331|245:328,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: -246,309,138548,6,0,P|201:298|114:358,1,140,0|0,1:0|1:0,0:0:0:0: -19,157,139234,1,0,1:0:0:0: -113,112,139405,1,0,0:0:0:0: -113,112,139491,2,0,P|153:134|236:108,1,105,0|0,0:0|0:0,0:0:0:0: -310,159,139919,6,0,P|276:209|172:226,1,140,0|0,1:0|1:0,0:0:0:0: -387,334,140605,2,0,L|381:238,1,70,0|0,1:0|0:0,0:0:0:0: -450,183,140948,1,0,1:0:0:0: -450,183,141034,2,0,L|456:87,1,70,0|0,0:0|0:0,0:0:0:0: -434,85,141291,6,0,P|399:71|337:77,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: -468,292,141976,1,0,1:0:0:0: -377,238,142148,1,0,0:0:0:0: -377,238,142234,2,0,P|327:245|261:229,1,105 -178,185,142662,5,2,0:0:0:0: -178,185,143005,1,2,0:0:0:0: -178,185,143348,1,0,0:0:0:0: -178,185,143691,2,0,L|171:266,1,70,0|0,0:0|0:0,0:0:0:0: -171,254,144034,6,0,P|224:241|320:257,1,140,4|0,1:2|1:0,0:0:0:0: -408,282,144548,1,0,0:0:0:0: -480,205,144719,1,0,1:0:0:0: -433,116,144891,1,0,0:0:0:0: -433,116,144976,2,0,L|443:2,1,105,0|0,0:0|0:0,0:0:0:0: -337,69,145405,6,0,P|303:79|242:60,1,70,0|0,1:0|0:0,0:0:0:0: -172,116,145748,2,0,L|86:103,1,70,0|0,1:0|0:0,0:0:0:0: -38,188,146091,1,0,1:0:0:0: -38,188,146262,1,0,0:0:0:0: -110,264,146434,1,0,1:0:0:0: -110,264,146519,2,0,L|196:251,1,70,0|0,0:0|0:0,0:0:0:0: -208,269,146776,6,0,P|246:279|300:266,1,70,0|0,1:0|0:0,0:0:0:0: -369,227,147119,1,0,1:0:0:0: -369,227,147462,1,0,1:0:0:0: -312,138,147634,1,0,0:0:0:0: -312,138,147719,2,0,P|302:86|316:15,1,105,0|0,0:0|0:0,0:0:0:0: -210,71,148148,6,0,B|159:84|159:84|45:57,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: -410,132,149176,2,0,P|421:151|426:191,3,35,0|0|0|0,1:0|0:0|0:0|0:0,0:0:0:0: -458,203,149519,6,0,P|408:195|334:253,1,140,0|0,1:0|1:0,0:0:0:0: -232,232,150034,1,0,0:0:0:0: -309,162,150205,1,0,1:0:0:0: -192,144,150376,1,0,0:0:0:0: -192,144,150462,2,0,L|188:19,1,105,0|0,0:0|0:0,0:0:0:0: -112,155,150891,6,0,P|139:204|239:212,1,140,0|0,1:0|1:0,0:0:0:0: -216,221,151405,1,0,0:0:0:0: -296,288,151576,2,0,L|398:280,1,70,0|0,1:0|0:0,0:0:0:0: -445,213,151919,1,0,1:0:0:0: -445,213,152005,2,0,L|452:111,1,70,0|0,0:0|0:0,0:0:0:0: -434,113,152262,6,0,P|428:66|434:17,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: -352,180,152776,1,0,0:0:0:0: -352,180,152948,2,0,B|287:163|287:163|183:186,1,140,0|0,1:0|1:0,0:0:0:0: -215,178,153634,6,0,P|163:175|121:181,1,70,0|0,1:0|0:0,0:0:0:0: -106,274,153976,2,0,L|200:277,1,70,0|0,1:0|0:0,0:0:0:0: -264,329,154319,1,0,1:0:0:0: -264,329,154662,1,0,0:0:0:0: -360,286,154834,2,0,L|365:255,2,17.5,0|0|0,0:0|0:0|0:0,0:0:0:0: -376,312,155005,6,0,L|542:302,1,140,4|0,1:2|1:0,0:0:0:0: -460,213,155519,1,0,0:0:0:0: -460,213,155691,2,0,L|466:132,1,70,0|0,1:0|0:0,0:0:0:0: -363,113,156034,2,0,L|357:32,1,70,0|0,1:0|0:0,0:0:0:0: -253,34,156376,6,0,P|224:40|168:26,1,70,0|0,1:0|0:0,0:0:0:0: -101,98,156719,1,0,1:0:0:0: -101,98,156891,1,0,0:0:0:0: -190,152,157062,2,0,L|195:247,1,70,0|0,1:0|0:0,0:0:0:0: -290,274,157405,2,0,P|303:225|295:182,1,70,0|0,1:0|0:0,0:0:0:0: -271,105,157748,6,0,B|354:84|354:84|425:103,1,140,0|0,1:0|1:0,0:0:0:0: -484,169,158262,1,0,0:0:0:0: -484,169,158434,2,0,P|492:218|484:257,1,70,0|0,1:0|0:0,0:0:0:0: -396,286,158776,2,0,P|388:335|396:374,1,70,0|0,1:0|0:0,0:0:0:0: -285,341,159119,5,0,1:0:0:0: -285,341,159291,1,0,0:0:0:0: -210,267,159462,2,0,L|214:175,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: -129,334,159976,1,0,0:0:0:0: -51,262,160148,2,0,P|40:217|43:169,1,70,0|0,1:0|0:0,0:0:0:0: -125,104,160491,6,0,L|298:97,1,140,0|0,1:0|1:0,0:0:0:0: -341,170,161005,1,0,0:0:0:0: -373,70,161176,2,0,L|377:-8,1,70,0|0,1:0|0:0,0:0:0:0: -468,51,161519,1,0,1:0:0:0: -468,51,161691,1,0,0:0:0:0: -424,146,161862,6,0,P|419:203|429:235,1,70,0|0,1:0|0:0,0:0:0:0: -467,309,162205,2,0,L|388:311,2,70,0|0|0,1:0|0:0|1:0,0:0:0:0: -421,214,162719,1,0,0:0:0:0: -332,271,162891,2,0,P|321:309|343:361,1,70,0|0,1:0|0:0,0:0:0:0: -225,359,163234,6,0,P|162:331|86:357,1,140,0|0,1:0|1:0,0:0:0:0: -26,270,163748,1,0,0:0:0:0: -26,270,163919,2,0,L|30:169,1,70,0|0,1:0|0:0,0:0:0:0: -112,136,164262,2,0,L|108:35,1,70,0|0,1:0|0:0,0:0:0:0: -207,103,164605,6,0,P|272:122|351:76,2,140,0|0|0,1:0|1:0|1:0,0:0:0:0: -291,296,165634,1,0,1:0:0:0: -364,221,165805,1,8,0:0:0:0: -364,221,165891,1,0,0:0:0:0: -364,221,165976,6,0,P|373:159|328:87,1,140,4|0,1:2|1:0,0:0:0:0: -175,93,166662,2,0,P|140:152|148:221,1,140,0|0,1:0|1:0,0:0:0:0: -256,356,167348,2,0,L|256:212,1,140,0|0,1:0|1:0,0:0:0:0: -152,88,168034,1,0,1:0:0:0: -360,88,168376,1,0,1:0:0:0: -284,300,168719,6,0,P|216:308|157:273,1,140,0|0,1:0|1:0,0:0:0:0: -157,111,169405,2,0,P|216:76|285:84,1,140,0|0,1:0|1:0,0:0:0:0: -420,192,170091,2,0,L|276:192,1,140,0|0,1:0|1:0,0:0:0:0: -152,296,170777,1,0,1:0:0:0: -152,88,171119,1,0,1:0:0:0: -152,88,171291,1,0,0:0:0:0: -152,88,171462,6,0,L|264:88,1,105.000004005432,6|2,0:0|0:0,0:0:0:0: -392,176,172148,2,0,L|280:176,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -160,272,172834,2,0,L|272:272,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -400,352,173519,2,0,L|288:352,1,105.000004005432,2|2,0:0|0:0,0:0:0:0: -105,324,174205,6,0,P|85:285|89:219,1,90.9999958343508,2|2,0:0|0:0,0:0:0:0: -95,219,174719,1,0,0:0:0:0: -103,197,174891,2,0,L|99:88,1,90.9999958343508,2|2,0:0|0:0,0:0:0:0: -240,73,175576,5,0,0:0:0:0: -265,106,175919,1,0,0:0:0:0: -279,136,176262,2,0,B|314:129|351:139|351:139|329:100,1,112"; - } -} From d16f6576ca70b62ea6d4ac30ea78d36a5d4d8359 Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Thu, 13 Dec 2018 00:10:15 -0600 Subject: [PATCH 011/267] Add Android project --- osu.Android/Assets/AboutAssets.txt | 19 + osu.Android/GameView.cs | 26 + osu.Android/MainActivity.cs | 26 + osu.Android/Properties/AndroidManifest.xml | 9 + osu.Android/Properties/AssemblyInfo.cs | 33 + osu.Android/Resources/AboutResources.txt | 44 + osu.Android/Resources/Resource.designer.cs | 6488 +++++++++++++++++ .../Resources/layout/activity_main.axml | 13 + .../mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../Resources/mipmap-hdpi/ic_launcher.png | Bin 0 -> 8828 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 1441 bytes .../mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 8828 bytes .../Resources/mipmap-mdpi/ic_launcher.png | Bin 0 -> 5045 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 958 bytes .../mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 5045 bytes .../Resources/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 12931 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 2056 bytes .../mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 12931 bytes .../Resources/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 21256 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 3403 bytes .../mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 21256 bytes .../Resources/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 30047 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 4889 bytes .../mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 30047 bytes osu.Android/Resources/values/Strings.xml | 4 + osu.Android/Resources/values/colors.xml | 6 + .../values/ic_launcher_background.xml | 4 + osu.Android/Resources/values/styles.xml | 11 + osu.Android/bass.dll | Bin 0 -> 210944 bytes osu.Android/lib/arm64-v8a/libbass.so | Bin 0 -> 308904 bytes osu.Android/lib/arm64-v8a/libbass_fx.so | Bin 0 -> 154408 bytes osu.Android/lib/armeabi-v7a/libbass.so | Bin 0 -> 222620 bytes osu.Android/lib/armeabi-v7a/libbass_fx.so | Bin 0 -> 92176 bytes osu.Android/osu.Android.csproj | 175 + 35 files changed, 6868 insertions(+) create mode 100644 osu.Android/Assets/AboutAssets.txt create mode 100644 osu.Android/GameView.cs create mode 100644 osu.Android/MainActivity.cs create mode 100644 osu.Android/Properties/AndroidManifest.xml create mode 100644 osu.Android/Properties/AssemblyInfo.cs create mode 100644 osu.Android/Resources/AboutResources.txt create mode 100644 osu.Android/Resources/Resource.designer.cs create mode 100644 osu.Android/Resources/layout/activity_main.axml create mode 100644 osu.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 osu.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 osu.Android/Resources/mipmap-hdpi/ic_launcher.png create mode 100644 osu.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 osu.Android/Resources/mipmap-hdpi/ic_launcher_round.png create mode 100644 osu.Android/Resources/mipmap-mdpi/ic_launcher.png create mode 100644 osu.Android/Resources/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 osu.Android/Resources/mipmap-mdpi/ic_launcher_round.png create mode 100644 osu.Android/Resources/mipmap-xhdpi/ic_launcher.png create mode 100644 osu.Android/Resources/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 osu.Android/Resources/mipmap-xhdpi/ic_launcher_round.png create mode 100644 osu.Android/Resources/mipmap-xxhdpi/ic_launcher.png create mode 100644 osu.Android/Resources/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 osu.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 osu.Android/Resources/mipmap-xxxhdpi/ic_launcher.png create mode 100644 osu.Android/Resources/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 osu.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 osu.Android/Resources/values/Strings.xml create mode 100644 osu.Android/Resources/values/colors.xml create mode 100644 osu.Android/Resources/values/ic_launcher_background.xml create mode 100644 osu.Android/Resources/values/styles.xml create mode 100644 osu.Android/bass.dll create mode 100644 osu.Android/lib/arm64-v8a/libbass.so create mode 100644 osu.Android/lib/arm64-v8a/libbass_fx.so create mode 100644 osu.Android/lib/armeabi-v7a/libbass.so create mode 100644 osu.Android/lib/armeabi-v7a/libbass_fx.so create mode 100644 osu.Android/osu.Android.csproj diff --git a/osu.Android/Assets/AboutAssets.txt b/osu.Android/Assets/AboutAssets.txt new file mode 100644 index 0000000000..b0633374bd --- /dev/null +++ b/osu.Android/Assets/AboutAssets.txt @@ -0,0 +1,19 @@ +Any raw assets you want to be deployed with your application can be placed in +this directory (and child directories) and given a Build Action of "AndroidAsset". + +These files will be deployed with you package and will be accessible using Android's +AssetManager, like this: + +public class ReadAsset : Activity +{ + protected override void OnCreate (Bundle bundle) + { + base.OnCreate (bundle); + + InputStream input = Assets.Open ("my_asset.txt"); + } +} + +Additionally, some Android functions will automatically load asset files: + +Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); \ No newline at end of file diff --git a/osu.Android/GameView.cs b/osu.Android/GameView.cs new file mode 100644 index 0000000000..649ee0134b --- /dev/null +++ b/osu.Android/GameView.cs @@ -0,0 +1,26 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using Android.Content; +using Android.Util; +using osu.Framework; +using osu.Framework.Android; +using osu.Game; + +namespace osu.Android +{ + public class GameView : AndroidGameView + { + public GameView(Context context, IAttributeSet attrs) : + base(context, attrs) + { + CreateGame(); + } + + public GameView(Context context) : base(context) + { + CreateGame(); + } + public override Framework.Game CreateGame() => new OsuGame(); + } +} diff --git a/osu.Android/MainActivity.cs b/osu.Android/MainActivity.cs new file mode 100644 index 0000000000..3a8a5026bc --- /dev/null +++ b/osu.Android/MainActivity.cs @@ -0,0 +1,26 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using Android.App; +using Android.OS; +using Android.Runtime; +using Android.Widget; +using Android.Content.PM; + +namespace osu.Android +{ + [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true, ScreenOrientation = ScreenOrientation.Landscape, SupportsPictureInPicture = false)] + public class MainActivity : Activity + { + protected override void OnCreate(Bundle savedInstanceState) + { + base.OnCreate(savedInstanceState); + // Set our view from the "main" layout resource + SetContentView(Resource.Layout.activity_main); + } + public override void OnBackPressed() + { + + } + } +} diff --git a/osu.Android/Properties/AndroidManifest.xml b/osu.Android/Properties/AndroidManifest.xml new file mode 100644 index 0000000000..12d1f326b9 --- /dev/null +++ b/osu.Android/Properties/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/osu.Android/Properties/AssemblyInfo.cs b/osu.Android/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..d222a06ee0 --- /dev/null +++ b/osu.Android/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +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("osu.Android")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("osu.Android")] +[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: ComVisible(false)] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/osu.Android/Resources/AboutResources.txt b/osu.Android/Resources/AboutResources.txt new file mode 100644 index 0000000000..c2bca974c4 --- /dev/null +++ b/osu.Android/Resources/AboutResources.txt @@ -0,0 +1,44 @@ +Images, layout descriptions, binary blobs and string dictionaries can be included +in your application as resource files. Various Android APIs are designed to +operate on the resource IDs instead of dealing with images, strings or binary blobs +directly. + +For example, a sample Android app that contains a user interface layout (main.axml), +an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) +would keep its resources in the "Resources" directory of the application: + +Resources/ + drawable/ + icon.png + + layout/ + main.axml + + values/ + strings.xml + +In order to get the build system to recognize Android resources, set the build action to +"AndroidResource". The native Android APIs do not operate directly with filenames, but +instead operate on resource IDs. When you compile an Android application that uses resources, +the build system will package the resources for distribution and generate a class called "R" +(this is an Android convention) that contains the tokens for each one of the resources +included. For example, for the above Resources layout, this is what the R class would expose: + +public class R { + public class drawable { + public const int icon = 0x123; + } + + public class layout { + public const int main = 0x456; + } + + public class strings { + public const int first_string = 0xabc; + public const int second_string = 0xbcd; + } +} + +You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main +to reference the layout/main.axml file, or R.strings.first_string to reference the first +string in the dictionary file values/strings.xml. \ No newline at end of file diff --git a/osu.Android/Resources/Resource.designer.cs b/osu.Android/Resources/Resource.designer.cs new file mode 100644 index 0000000000..ed8407c130 --- /dev/null +++ b/osu.Android/Resources/Resource.designer.cs @@ -0,0 +1,6488 @@ +#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("osu.Android.Resource", IsApplication=true)] + +namespace osu.Android +{ + + + [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 Animation + { + + // aapt resource value: 0x7f050000 + public const int abc_fade_in = 2131034112; + + // aapt resource value: 0x7f050001 + public const int abc_fade_out = 2131034113; + + // aapt resource value: 0x7f050002 + public const int abc_grow_fade_in_from_bottom = 2131034114; + + // aapt resource value: 0x7f050003 + public const int abc_popup_enter = 2131034115; + + // aapt resource value: 0x7f050004 + public const int abc_popup_exit = 2131034116; + + // aapt resource value: 0x7f050005 + public const int abc_shrink_fade_out_from_bottom = 2131034117; + + // aapt resource value: 0x7f050006 + public const int abc_slide_in_bottom = 2131034118; + + // aapt resource value: 0x7f050007 + public const int abc_slide_in_top = 2131034119; + + // aapt resource value: 0x7f050008 + public const int abc_slide_out_bottom = 2131034120; + + // aapt resource value: 0x7f050009 + public const int abc_slide_out_top = 2131034121; + + // aapt resource value: 0x7f05000a + public const int design_bottom_sheet_slide_in = 2131034122; + + // aapt resource value: 0x7f05000b + public const int design_bottom_sheet_slide_out = 2131034123; + + // aapt resource value: 0x7f05000c + public const int design_snackbar_in = 2131034124; + + // aapt resource value: 0x7f05000d + public const int design_snackbar_out = 2131034125; + + // aapt resource value: 0x7f05000e + public const int tooltip_enter = 2131034126; + + // aapt resource value: 0x7f05000f + public const int tooltip_exit = 2131034127; + + static Animation() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Animation() + { + } + } + + public partial class Animator + { + + // aapt resource value: 0x7f060000 + public const int design_appbar_state_list_animator = 2131099648; + + static Animator() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Animator() + { + } + } + + public partial class Attribute + { + + // aapt resource value: 0x7f010052 + public const int actionBarDivider = 2130772050; + + // aapt resource value: 0x7f010053 + public const int actionBarItemBackground = 2130772051; + + // aapt resource value: 0x7f01004c + public const int actionBarPopupTheme = 2130772044; + + // aapt resource value: 0x7f010051 + public const int actionBarSize = 2130772049; + + // aapt resource value: 0x7f01004e + public const int actionBarSplitStyle = 2130772046; + + // aapt resource value: 0x7f01004d + public const int actionBarStyle = 2130772045; + + // aapt resource value: 0x7f010048 + public const int actionBarTabBarStyle = 2130772040; + + // aapt resource value: 0x7f010047 + public const int actionBarTabStyle = 2130772039; + + // aapt resource value: 0x7f010049 + public const int actionBarTabTextStyle = 2130772041; + + // aapt resource value: 0x7f01004f + public const int actionBarTheme = 2130772047; + + // aapt resource value: 0x7f010050 + public const int actionBarWidgetTheme = 2130772048; + + // aapt resource value: 0x7f01006d + public const int actionButtonStyle = 2130772077; + + // aapt resource value: 0x7f010069 + public const int actionDropDownStyle = 2130772073; + + // aapt resource value: 0x7f0100c4 + public const int actionLayout = 2130772164; + + // aapt resource value: 0x7f010054 + public const int actionMenuTextAppearance = 2130772052; + + // aapt resource value: 0x7f010055 + public const int actionMenuTextColor = 2130772053; + + // aapt resource value: 0x7f010058 + public const int actionModeBackground = 2130772056; + + // aapt resource value: 0x7f010057 + public const int actionModeCloseButtonStyle = 2130772055; + + // aapt resource value: 0x7f01005a + public const int actionModeCloseDrawable = 2130772058; + + // aapt resource value: 0x7f01005c + public const int actionModeCopyDrawable = 2130772060; + + // aapt resource value: 0x7f01005b + public const int actionModeCutDrawable = 2130772059; + + // aapt resource value: 0x7f010060 + public const int actionModeFindDrawable = 2130772064; + + // aapt resource value: 0x7f01005d + public const int actionModePasteDrawable = 2130772061; + + // aapt resource value: 0x7f010062 + public const int actionModePopupWindowStyle = 2130772066; + + // aapt resource value: 0x7f01005e + public const int actionModeSelectAllDrawable = 2130772062; + + // aapt resource value: 0x7f01005f + public const int actionModeShareDrawable = 2130772063; + + // aapt resource value: 0x7f010059 + public const int actionModeSplitBackground = 2130772057; + + // aapt resource value: 0x7f010056 + public const int actionModeStyle = 2130772054; + + // aapt resource value: 0x7f010061 + public const int actionModeWebSearchDrawable = 2130772065; + + // aapt resource value: 0x7f01004a + public const int actionOverflowButtonStyle = 2130772042; + + // aapt resource value: 0x7f01004b + public const int actionOverflowMenuStyle = 2130772043; + + // aapt resource value: 0x7f0100c6 + public const int actionProviderClass = 2130772166; + + // aapt resource value: 0x7f0100c5 + public const int actionViewClass = 2130772165; + + // aapt resource value: 0x7f010075 + public const int activityChooserViewStyle = 2130772085; + + // aapt resource value: 0x7f01009a + public const int alertDialogButtonGroupStyle = 2130772122; + + // aapt resource value: 0x7f01009b + public const int alertDialogCenterButtons = 2130772123; + + // aapt resource value: 0x7f010099 + public const int alertDialogStyle = 2130772121; + + // aapt resource value: 0x7f01009c + public const int alertDialogTheme = 2130772124; + + // aapt resource value: 0x7f0100b2 + public const int allowStacking = 2130772146; + + // aapt resource value: 0x7f0100b3 + public const int alpha = 2130772147; + + // aapt resource value: 0x7f0100c1 + public const int alphabeticModifiers = 2130772161; + + // aapt resource value: 0x7f0100ba + public const int arrowHeadLength = 2130772154; + + // aapt resource value: 0x7f0100bb + public const int arrowShaftLength = 2130772155; + + // aapt resource value: 0x7f0100a1 + public const int autoCompleteTextViewStyle = 2130772129; + + // aapt resource value: 0x7f01003b + public const int autoSizeMaxTextSize = 2130772027; + + // aapt resource value: 0x7f01003a + public const int autoSizeMinTextSize = 2130772026; + + // aapt resource value: 0x7f010039 + public const int autoSizePresetSizes = 2130772025; + + // aapt resource value: 0x7f010038 + public const int autoSizeStepGranularity = 2130772024; + + // aapt resource value: 0x7f010037 + public const int autoSizeTextType = 2130772023; + + // aapt resource value: 0x7f010015 + public const int background = 2130771989; + + // aapt resource value: 0x7f010017 + public const int backgroundSplit = 2130771991; + + // aapt resource value: 0x7f010016 + public const int backgroundStacked = 2130771990; + + // aapt resource value: 0x7f0100fd + public const int backgroundTint = 2130772221; + + // aapt resource value: 0x7f0100fe + public const int backgroundTintMode = 2130772222; + + // aapt resource value: 0x7f0100bc + public const int barLength = 2130772156; + + // aapt resource value: 0x7f010128 + public const int behavior_autoHide = 2130772264; + + // aapt resource value: 0x7f010105 + public const int behavior_hideable = 2130772229; + + // aapt resource value: 0x7f010131 + public const int behavior_overlapTop = 2130772273; + + // aapt resource value: 0x7f010104 + public const int behavior_peekHeight = 2130772228; + + // aapt resource value: 0x7f010106 + public const int behavior_skipCollapsed = 2130772230; + + // aapt resource value: 0x7f010126 + public const int borderWidth = 2130772262; + + // aapt resource value: 0x7f010072 + public const int borderlessButtonStyle = 2130772082; + + // aapt resource value: 0x7f010120 + public const int bottomSheetDialogTheme = 2130772256; + + // aapt resource value: 0x7f010121 + public const int bottomSheetStyle = 2130772257; + + // aapt resource value: 0x7f01006f + public const int buttonBarButtonStyle = 2130772079; + + // aapt resource value: 0x7f01009f + public const int buttonBarNegativeButtonStyle = 2130772127; + + // aapt resource value: 0x7f0100a0 + public const int buttonBarNeutralButtonStyle = 2130772128; + + // aapt resource value: 0x7f01009e + public const int buttonBarPositiveButtonStyle = 2130772126; + + // aapt resource value: 0x7f01006e + public const int buttonBarStyle = 2130772078; + + // aapt resource value: 0x7f0100f2 + public const int buttonGravity = 2130772210; + + // aapt resource value: 0x7f01002a + public const int buttonPanelSideLayout = 2130772010; + + // aapt resource value: 0x7f0100a2 + public const int buttonStyle = 2130772130; + + // aapt resource value: 0x7f0100a3 + public const int buttonStyleSmall = 2130772131; + + // aapt resource value: 0x7f0100b4 + public const int buttonTint = 2130772148; + + // aapt resource value: 0x7f0100b5 + public const int buttonTintMode = 2130772149; + + // aapt resource value: 0x7f0100a4 + public const int checkboxStyle = 2130772132; + + // aapt resource value: 0x7f0100a5 + public const int checkedTextViewStyle = 2130772133; + + // aapt resource value: 0x7f0100d5 + public const int closeIcon = 2130772181; + + // aapt resource value: 0x7f010027 + public const int closeItemLayout = 2130772007; + + // aapt resource value: 0x7f0100f4 + public const int collapseContentDescription = 2130772212; + + // aapt resource value: 0x7f0100f3 + public const int collapseIcon = 2130772211; + + // aapt resource value: 0x7f010113 + public const int collapsedTitleGravity = 2130772243; + + // aapt resource value: 0x7f01010d + public const int collapsedTitleTextAppearance = 2130772237; + + // aapt resource value: 0x7f0100b6 + public const int color = 2130772150; + + // aapt resource value: 0x7f010091 + public const int colorAccent = 2130772113; + + // aapt resource value: 0x7f010098 + public const int colorBackgroundFloating = 2130772120; + + // aapt resource value: 0x7f010095 + public const int colorButtonNormal = 2130772117; + + // aapt resource value: 0x7f010093 + public const int colorControlActivated = 2130772115; + + // aapt resource value: 0x7f010094 + public const int colorControlHighlight = 2130772116; + + // aapt resource value: 0x7f010092 + public const int colorControlNormal = 2130772114; + + // aapt resource value: 0x7f0100b1 + public const int colorError = 2130772145; + + // aapt resource value: 0x7f01008f + public const int colorPrimary = 2130772111; + + // aapt resource value: 0x7f010090 + public const int colorPrimaryDark = 2130772112; + + // aapt resource value: 0x7f010096 + public const int colorSwitchThumbNormal = 2130772118; + + // aapt resource value: 0x7f0100da + public const int commitIcon = 2130772186; + + // aapt resource value: 0x7f0100c7 + public const int contentDescription = 2130772167; + + // aapt resource value: 0x7f010020 + public const int contentInsetEnd = 2130772000; + + // aapt resource value: 0x7f010024 + public const int contentInsetEndWithActions = 2130772004; + + // aapt resource value: 0x7f010021 + public const int contentInsetLeft = 2130772001; + + // aapt resource value: 0x7f010022 + public const int contentInsetRight = 2130772002; + + // aapt resource value: 0x7f01001f + public const int contentInsetStart = 2130771999; + + // aapt resource value: 0x7f010023 + public const int contentInsetStartWithNavigation = 2130772003; + + // aapt resource value: 0x7f01010e + public const int contentScrim = 2130772238; + + // aapt resource value: 0x7f010097 + public const int controlBackground = 2130772119; + + // aapt resource value: 0x7f010147 + public const int counterEnabled = 2130772295; + + // aapt resource value: 0x7f010148 + public const int counterMaxLength = 2130772296; + + // aapt resource value: 0x7f01014a + public const int counterOverflowTextAppearance = 2130772298; + + // aapt resource value: 0x7f010149 + public const int counterTextAppearance = 2130772297; + + // aapt resource value: 0x7f010018 + public const int customNavigationLayout = 2130771992; + + // aapt resource value: 0x7f0100d4 + public const int defaultQueryHint = 2130772180; + + // aapt resource value: 0x7f010067 + public const int dialogPreferredPadding = 2130772071; + + // aapt resource value: 0x7f010066 + public const int dialogTheme = 2130772070; + + // aapt resource value: 0x7f01000e + public const int displayOptions = 2130771982; + + // aapt resource value: 0x7f010014 + public const int divider = 2130771988; + + // aapt resource value: 0x7f010074 + public const int dividerHorizontal = 2130772084; + + // aapt resource value: 0x7f0100c0 + public const int dividerPadding = 2130772160; + + // aapt resource value: 0x7f010073 + public const int dividerVertical = 2130772083; + + // aapt resource value: 0x7f0100b8 + public const int drawableSize = 2130772152; + + // aapt resource value: 0x7f010009 + public const int drawerArrowStyle = 2130771977; + + // aapt resource value: 0x7f010086 + public const int dropDownListViewStyle = 2130772102; + + // aapt resource value: 0x7f01006a + public const int dropdownListPreferredItemHeight = 2130772074; + + // aapt resource value: 0x7f01007b + public const int editTextBackground = 2130772091; + + // aapt resource value: 0x7f01007a + public const int editTextColor = 2130772090; + + // aapt resource value: 0x7f0100a6 + public const int editTextStyle = 2130772134; + + // aapt resource value: 0x7f010025 + public const int elevation = 2130772005; + + // aapt resource value: 0x7f010145 + public const int errorEnabled = 2130772293; + + // aapt resource value: 0x7f010146 + public const int errorTextAppearance = 2130772294; + + // aapt resource value: 0x7f010029 + public const int expandActivityOverflowButtonDrawable = 2130772009; + + // aapt resource value: 0x7f0100ff + public const int expanded = 2130772223; + + // aapt resource value: 0x7f010114 + public const int expandedTitleGravity = 2130772244; + + // aapt resource value: 0x7f010107 + public const int expandedTitleMargin = 2130772231; + + // aapt resource value: 0x7f01010b + public const int expandedTitleMarginBottom = 2130772235; + + // aapt resource value: 0x7f01010a + public const int expandedTitleMarginEnd = 2130772234; + + // aapt resource value: 0x7f010108 + public const int expandedTitleMarginStart = 2130772232; + + // aapt resource value: 0x7f010109 + public const int expandedTitleMarginTop = 2130772233; + + // aapt resource value: 0x7f01010c + public const int expandedTitleTextAppearance = 2130772236; + + // aapt resource value: 0x7f010124 + public const int fabSize = 2130772260; + + // aapt resource value: 0x7f010004 + public const int fastScrollEnabled = 2130771972; + + // aapt resource value: 0x7f010007 + public const int fastScrollHorizontalThumbDrawable = 2130771975; + + // aapt resource value: 0x7f010008 + public const int fastScrollHorizontalTrackDrawable = 2130771976; + + // aapt resource value: 0x7f010005 + public const int fastScrollVerticalThumbDrawable = 2130771973; + + // aapt resource value: 0x7f010006 + public const int fastScrollVerticalTrackDrawable = 2130771974; + + // aapt resource value: 0x7f010158 + public const int font = 2130772312; + + // aapt resource value: 0x7f01003c + public const int fontFamily = 2130772028; + + // aapt resource value: 0x7f010151 + public const int fontProviderAuthority = 2130772305; + + // aapt resource value: 0x7f010154 + public const int fontProviderCerts = 2130772308; + + // aapt resource value: 0x7f010155 + public const int fontProviderFetchStrategy = 2130772309; + + // aapt resource value: 0x7f010156 + public const int fontProviderFetchTimeout = 2130772310; + + // aapt resource value: 0x7f010152 + public const int fontProviderPackage = 2130772306; + + // aapt resource value: 0x7f010153 + public const int fontProviderQuery = 2130772307; + + // aapt resource value: 0x7f010157 + public const int fontStyle = 2130772311; + + // aapt resource value: 0x7f010159 + public const int fontWeight = 2130772313; + + // aapt resource value: 0x7f010129 + public const int foregroundInsidePadding = 2130772265; + + // aapt resource value: 0x7f0100b9 + public const int gapBetweenBars = 2130772153; + + // aapt resource value: 0x7f0100d6 + public const int goIcon = 2130772182; + + // aapt resource value: 0x7f01012f + public const int headerLayout = 2130772271; + + // aapt resource value: 0x7f01000a + public const int height = 2130771978; + + // aapt resource value: 0x7f01001e + public const int hideOnContentScroll = 2130771998; + + // aapt resource value: 0x7f01014b + public const int hintAnimationEnabled = 2130772299; + + // aapt resource value: 0x7f010144 + public const int hintEnabled = 2130772292; + + // aapt resource value: 0x7f010143 + public const int hintTextAppearance = 2130772291; + + // aapt resource value: 0x7f01006c + public const int homeAsUpIndicator = 2130772076; + + // aapt resource value: 0x7f010019 + public const int homeLayout = 2130771993; + + // aapt resource value: 0x7f010012 + public const int icon = 2130771986; + + // aapt resource value: 0x7f0100c9 + public const int iconTint = 2130772169; + + // aapt resource value: 0x7f0100ca + public const int iconTintMode = 2130772170; + + // aapt resource value: 0x7f0100d2 + public const int iconifiedByDefault = 2130772178; + + // aapt resource value: 0x7f01007c + public const int imageButtonStyle = 2130772092; + + // aapt resource value: 0x7f01001b + public const int indeterminateProgressStyle = 2130771995; + + // aapt resource value: 0x7f010028 + public const int initialActivityCount = 2130772008; + + // aapt resource value: 0x7f010130 + public const int insetForeground = 2130772272; + + // aapt resource value: 0x7f01000b + public const int isLightTheme = 2130771979; + + // aapt resource value: 0x7f01012d + public const int itemBackground = 2130772269; + + // aapt resource value: 0x7f01012b + public const int itemIconTint = 2130772267; + + // aapt resource value: 0x7f01001d + public const int itemPadding = 2130771997; + + // aapt resource value: 0x7f01012e + public const int itemTextAppearance = 2130772270; + + // aapt resource value: 0x7f01012c + public const int itemTextColor = 2130772268; + + // aapt resource value: 0x7f010118 + public const int keylines = 2130772248; + + // aapt resource value: 0x7f0100d1 + public const int layout = 2130772177; + + // aapt resource value: 0x7f010000 + public const int layoutManager = 2130771968; + + // aapt resource value: 0x7f01011b + public const int layout_anchor = 2130772251; + + // aapt resource value: 0x7f01011d + public const int layout_anchorGravity = 2130772253; + + // aapt resource value: 0x7f01011a + public const int layout_behavior = 2130772250; + + // aapt resource value: 0x7f010116 + public const int layout_collapseMode = 2130772246; + + // aapt resource value: 0x7f010117 + public const int layout_collapseParallaxMultiplier = 2130772247; + + // aapt resource value: 0x7f01011f + public const int layout_dodgeInsetEdges = 2130772255; + + // aapt resource value: 0x7f01011e + public const int layout_insetEdge = 2130772254; + + // aapt resource value: 0x7f01011c + public const int layout_keyline = 2130772252; + + // aapt resource value: 0x7f010102 + public const int layout_scrollFlags = 2130772226; + + // aapt resource value: 0x7f010103 + public const int layout_scrollInterpolator = 2130772227; + + // aapt resource value: 0x7f01008e + public const int listChoiceBackgroundIndicator = 2130772110; + + // aapt resource value: 0x7f010068 + public const int listDividerAlertDialog = 2130772072; + + // aapt resource value: 0x7f01002e + public const int listItemLayout = 2130772014; + + // aapt resource value: 0x7f01002b + public const int listLayout = 2130772011; + + // aapt resource value: 0x7f0100ae + public const int listMenuViewStyle = 2130772142; + + // aapt resource value: 0x7f010087 + public const int listPopupWindowStyle = 2130772103; + + // aapt resource value: 0x7f010081 + public const int listPreferredItemHeight = 2130772097; + + // aapt resource value: 0x7f010083 + public const int listPreferredItemHeightLarge = 2130772099; + + // aapt resource value: 0x7f010082 + public const int listPreferredItemHeightSmall = 2130772098; + + // aapt resource value: 0x7f010084 + public const int listPreferredItemPaddingLeft = 2130772100; + + // aapt resource value: 0x7f010085 + public const int listPreferredItemPaddingRight = 2130772101; + + // aapt resource value: 0x7f010013 + public const int logo = 2130771987; + + // aapt resource value: 0x7f0100f7 + public const int logoDescription = 2130772215; + + // aapt resource value: 0x7f010132 + public const int maxActionInlineWidth = 2130772274; + + // aapt resource value: 0x7f0100f1 + public const int maxButtonHeight = 2130772209; + + // aapt resource value: 0x7f0100be + public const int measureWithLargestChild = 2130772158; + + // aapt resource value: 0x7f01012a + public const int menu = 2130772266; + + // aapt resource value: 0x7f01002c + public const int multiChoiceItemLayout = 2130772012; + + // aapt resource value: 0x7f0100f6 + public const int navigationContentDescription = 2130772214; + + // aapt resource value: 0x7f0100f5 + public const int navigationIcon = 2130772213; + + // aapt resource value: 0x7f01000d + public const int navigationMode = 2130771981; + + // aapt resource value: 0x7f0100c2 + public const int numericModifiers = 2130772162; + + // aapt resource value: 0x7f0100cd + public const int overlapAnchor = 2130772173; + + // aapt resource value: 0x7f0100cf + public const int paddingBottomNoButtons = 2130772175; + + // aapt resource value: 0x7f0100fb + public const int paddingEnd = 2130772219; + + // aapt resource value: 0x7f0100fa + public const int paddingStart = 2130772218; + + // aapt resource value: 0x7f0100d0 + public const int paddingTopNoTitle = 2130772176; + + // aapt resource value: 0x7f01008b + public const int panelBackground = 2130772107; + + // aapt resource value: 0x7f01008d + public const int panelMenuListTheme = 2130772109; + + // aapt resource value: 0x7f01008c + public const int panelMenuListWidth = 2130772108; + + // aapt resource value: 0x7f01014e + public const int passwordToggleContentDescription = 2130772302; + + // aapt resource value: 0x7f01014d + public const int passwordToggleDrawable = 2130772301; + + // aapt resource value: 0x7f01014c + public const int passwordToggleEnabled = 2130772300; + + // aapt resource value: 0x7f01014f + public const int passwordToggleTint = 2130772303; + + // aapt resource value: 0x7f010150 + public const int passwordToggleTintMode = 2130772304; + + // aapt resource value: 0x7f010078 + public const int popupMenuStyle = 2130772088; + + // aapt resource value: 0x7f010026 + public const int popupTheme = 2130772006; + + // aapt resource value: 0x7f010079 + public const int popupWindowStyle = 2130772089; + + // aapt resource value: 0x7f0100cb + public const int preserveIconSpacing = 2130772171; + + // aapt resource value: 0x7f010125 + public const int pressedTranslationZ = 2130772261; + + // aapt resource value: 0x7f01001c + public const int progressBarPadding = 2130771996; + + // aapt resource value: 0x7f01001a + public const int progressBarStyle = 2130771994; + + // aapt resource value: 0x7f0100dc + public const int queryBackground = 2130772188; + + // aapt resource value: 0x7f0100d3 + public const int queryHint = 2130772179; + + // aapt resource value: 0x7f0100a7 + public const int radioButtonStyle = 2130772135; + + // aapt resource value: 0x7f0100a8 + public const int ratingBarStyle = 2130772136; + + // aapt resource value: 0x7f0100a9 + public const int ratingBarStyleIndicator = 2130772137; + + // aapt resource value: 0x7f0100aa + public const int ratingBarStyleSmall = 2130772138; + + // aapt resource value: 0x7f010002 + public const int reverseLayout = 2130771970; + + // aapt resource value: 0x7f010123 + public const int rippleColor = 2130772259; + + // aapt resource value: 0x7f010112 + public const int scrimAnimationDuration = 2130772242; + + // aapt resource value: 0x7f010111 + public const int scrimVisibleHeightTrigger = 2130772241; + + // aapt resource value: 0x7f0100d8 + public const int searchHintIcon = 2130772184; + + // aapt resource value: 0x7f0100d7 + public const int searchIcon = 2130772183; + + // aapt resource value: 0x7f010080 + public const int searchViewStyle = 2130772096; + + // aapt resource value: 0x7f0100ab + public const int seekBarStyle = 2130772139; + + // aapt resource value: 0x7f010070 + public const int selectableItemBackground = 2130772080; + + // aapt resource value: 0x7f010071 + public const int selectableItemBackgroundBorderless = 2130772081; + + // aapt resource value: 0x7f0100c3 + public const int showAsAction = 2130772163; + + // aapt resource value: 0x7f0100bf + public const int showDividers = 2130772159; + + // aapt resource value: 0x7f0100e8 + public const int showText = 2130772200; + + // aapt resource value: 0x7f01002f + public const int showTitle = 2130772015; + + // aapt resource value: 0x7f01002d + public const int singleChoiceItemLayout = 2130772013; + + // aapt resource value: 0x7f010001 + public const int spanCount = 2130771969; + + // aapt resource value: 0x7f0100b7 + public const int spinBars = 2130772151; + + // aapt resource value: 0x7f01006b + public const int spinnerDropDownItemStyle = 2130772075; + + // aapt resource value: 0x7f0100ac + public const int spinnerStyle = 2130772140; + + // aapt resource value: 0x7f0100e7 + public const int splitTrack = 2130772199; + + // aapt resource value: 0x7f010030 + public const int srcCompat = 2130772016; + + // aapt resource value: 0x7f010003 + public const int stackFromEnd = 2130771971; + + // aapt resource value: 0x7f0100ce + public const int state_above_anchor = 2130772174; + + // aapt resource value: 0x7f010100 + public const int state_collapsed = 2130772224; + + // aapt resource value: 0x7f010101 + public const int state_collapsible = 2130772225; + + // aapt resource value: 0x7f010119 + public const int statusBarBackground = 2130772249; + + // aapt resource value: 0x7f01010f + public const int statusBarScrim = 2130772239; + + // aapt resource value: 0x7f0100cc + public const int subMenuArrow = 2130772172; + + // aapt resource value: 0x7f0100dd + public const int submitBackground = 2130772189; + + // aapt resource value: 0x7f01000f + public const int subtitle = 2130771983; + + // aapt resource value: 0x7f0100ea + public const int subtitleTextAppearance = 2130772202; + + // aapt resource value: 0x7f0100f9 + public const int subtitleTextColor = 2130772217; + + // aapt resource value: 0x7f010011 + public const int subtitleTextStyle = 2130771985; + + // aapt resource value: 0x7f0100db + public const int suggestionRowLayout = 2130772187; + + // aapt resource value: 0x7f0100e5 + public const int switchMinWidth = 2130772197; + + // aapt resource value: 0x7f0100e6 + public const int switchPadding = 2130772198; + + // aapt resource value: 0x7f0100ad + public const int switchStyle = 2130772141; + + // aapt resource value: 0x7f0100e4 + public const int switchTextAppearance = 2130772196; + + // aapt resource value: 0x7f010136 + public const int tabBackground = 2130772278; + + // aapt resource value: 0x7f010135 + public const int tabContentStart = 2130772277; + + // aapt resource value: 0x7f010138 + public const int tabGravity = 2130772280; + + // aapt resource value: 0x7f010133 + public const int tabIndicatorColor = 2130772275; + + // aapt resource value: 0x7f010134 + public const int tabIndicatorHeight = 2130772276; + + // aapt resource value: 0x7f01013a + public const int tabMaxWidth = 2130772282; + + // aapt resource value: 0x7f010139 + public const int tabMinWidth = 2130772281; + + // aapt resource value: 0x7f010137 + public const int tabMode = 2130772279; + + // aapt resource value: 0x7f010142 + public const int tabPadding = 2130772290; + + // aapt resource value: 0x7f010141 + public const int tabPaddingBottom = 2130772289; + + // aapt resource value: 0x7f010140 + public const int tabPaddingEnd = 2130772288; + + // aapt resource value: 0x7f01013e + public const int tabPaddingStart = 2130772286; + + // aapt resource value: 0x7f01013f + public const int tabPaddingTop = 2130772287; + + // aapt resource value: 0x7f01013d + public const int tabSelectedTextColor = 2130772285; + + // aapt resource value: 0x7f01013b + public const int tabTextAppearance = 2130772283; + + // aapt resource value: 0x7f01013c + public const int tabTextColor = 2130772284; + + // aapt resource value: 0x7f010036 + public const int textAllCaps = 2130772022; + + // aapt resource value: 0x7f010063 + public const int textAppearanceLargePopupMenu = 2130772067; + + // aapt resource value: 0x7f010088 + public const int textAppearanceListItem = 2130772104; + + // aapt resource value: 0x7f010089 + public const int textAppearanceListItemSecondary = 2130772105; + + // aapt resource value: 0x7f01008a + public const int textAppearanceListItemSmall = 2130772106; + + // aapt resource value: 0x7f010065 + public const int textAppearancePopupMenuHeader = 2130772069; + + // aapt resource value: 0x7f01007e + public const int textAppearanceSearchResultSubtitle = 2130772094; + + // aapt resource value: 0x7f01007d + public const int textAppearanceSearchResultTitle = 2130772093; + + // aapt resource value: 0x7f010064 + public const int textAppearanceSmallPopupMenu = 2130772068; + + // aapt resource value: 0x7f01009d + public const int textColorAlertDialogListItem = 2130772125; + + // aapt resource value: 0x7f010122 + public const int textColorError = 2130772258; + + // aapt resource value: 0x7f01007f + public const int textColorSearchUrl = 2130772095; + + // aapt resource value: 0x7f0100fc + public const int theme = 2130772220; + + // aapt resource value: 0x7f0100bd + public const int thickness = 2130772157; + + // aapt resource value: 0x7f0100e3 + public const int thumbTextPadding = 2130772195; + + // aapt resource value: 0x7f0100de + public const int thumbTint = 2130772190; + + // aapt resource value: 0x7f0100df + public const int thumbTintMode = 2130772191; + + // aapt resource value: 0x7f010033 + public const int tickMark = 2130772019; + + // aapt resource value: 0x7f010034 + public const int tickMarkTint = 2130772020; + + // aapt resource value: 0x7f010035 + public const int tickMarkTintMode = 2130772021; + + // aapt resource value: 0x7f010031 + public const int tint = 2130772017; + + // aapt resource value: 0x7f010032 + public const int tintMode = 2130772018; + + // aapt resource value: 0x7f01000c + public const int title = 2130771980; + + // aapt resource value: 0x7f010115 + public const int titleEnabled = 2130772245; + + // aapt resource value: 0x7f0100eb + public const int titleMargin = 2130772203; + + // aapt resource value: 0x7f0100ef + public const int titleMarginBottom = 2130772207; + + // aapt resource value: 0x7f0100ed + public const int titleMarginEnd = 2130772205; + + // aapt resource value: 0x7f0100ec + public const int titleMarginStart = 2130772204; + + // aapt resource value: 0x7f0100ee + public const int titleMarginTop = 2130772206; + + // aapt resource value: 0x7f0100f0 + public const int titleMargins = 2130772208; + + // aapt resource value: 0x7f0100e9 + public const int titleTextAppearance = 2130772201; + + // aapt resource value: 0x7f0100f8 + public const int titleTextColor = 2130772216; + + // aapt resource value: 0x7f010010 + public const int titleTextStyle = 2130771984; + + // aapt resource value: 0x7f010110 + public const int toolbarId = 2130772240; + + // aapt resource value: 0x7f010077 + public const int toolbarNavigationButtonStyle = 2130772087; + + // aapt resource value: 0x7f010076 + public const int toolbarStyle = 2130772086; + + // aapt resource value: 0x7f0100b0 + public const int tooltipForegroundColor = 2130772144; + + // aapt resource value: 0x7f0100af + public const int tooltipFrameBackground = 2130772143; + + // aapt resource value: 0x7f0100c8 + public const int tooltipText = 2130772168; + + // aapt resource value: 0x7f0100e0 + public const int track = 2130772192; + + // aapt resource value: 0x7f0100e1 + public const int trackTint = 2130772193; + + // aapt resource value: 0x7f0100e2 + public const int trackTintMode = 2130772194; + + // aapt resource value: 0x7f010127 + public const int useCompatPadding = 2130772263; + + // aapt resource value: 0x7f0100d9 + public const int voiceIcon = 2130772185; + + // aapt resource value: 0x7f01003d + public const int windowActionBar = 2130772029; + + // aapt resource value: 0x7f01003f + public const int windowActionBarOverlay = 2130772031; + + // aapt resource value: 0x7f010040 + public const int windowActionModeOverlay = 2130772032; + + // aapt resource value: 0x7f010044 + public const int windowFixedHeightMajor = 2130772036; + + // aapt resource value: 0x7f010042 + public const int windowFixedHeightMinor = 2130772034; + + // aapt resource value: 0x7f010041 + public const int windowFixedWidthMajor = 2130772033; + + // aapt resource value: 0x7f010043 + public const int windowFixedWidthMinor = 2130772035; + + // aapt resource value: 0x7f010045 + public const int windowMinWidthMajor = 2130772037; + + // aapt resource value: 0x7f010046 + public const int windowMinWidthMinor = 2130772038; + + // aapt resource value: 0x7f01003e + public const int windowNoTitle = 2130772030; + + static Attribute() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Attribute() + { + } + } + + public partial class Boolean + { + + // aapt resource value: 0x7f0b0000 + public const int abc_action_bar_embed_tabs = 2131427328; + + // aapt resource value: 0x7f0b0001 + public const int abc_allow_stacked_button_bar = 2131427329; + + // aapt resource value: 0x7f0b0002 + public const int abc_config_actionMenuItemAllCaps = 2131427330; + + // aapt resource value: 0x7f0b0003 + public const int abc_config_closeDialogWhenTouchOutside = 2131427331; + + // aapt resource value: 0x7f0b0004 + public const int abc_config_showMenuShortcutsWhenKeyboardPresent = 2131427332; + + static Boolean() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Boolean() + { + } + } + + public partial class Color + { + + // aapt resource value: 0x7f0c004b + public const int abc_background_cache_hint_selector_material_dark = 2131492939; + + // aapt resource value: 0x7f0c004c + public const int abc_background_cache_hint_selector_material_light = 2131492940; + + // aapt resource value: 0x7f0c004d + public const int abc_btn_colored_borderless_text_material = 2131492941; + + // aapt resource value: 0x7f0c004e + public const int abc_btn_colored_text_material = 2131492942; + + // aapt resource value: 0x7f0c004f + public const int abc_color_highlight_material = 2131492943; + + // aapt resource value: 0x7f0c0050 + public const int abc_hint_foreground_material_dark = 2131492944; + + // aapt resource value: 0x7f0c0051 + public const int abc_hint_foreground_material_light = 2131492945; + + // aapt resource value: 0x7f0c0000 + public const int abc_input_method_navigation_guard = 2131492864; + + // aapt resource value: 0x7f0c0052 + public const int abc_primary_text_disable_only_material_dark = 2131492946; + + // aapt resource value: 0x7f0c0053 + public const int abc_primary_text_disable_only_material_light = 2131492947; + + // aapt resource value: 0x7f0c0054 + public const int abc_primary_text_material_dark = 2131492948; + + // aapt resource value: 0x7f0c0055 + public const int abc_primary_text_material_light = 2131492949; + + // aapt resource value: 0x7f0c0056 + public const int abc_search_url_text = 2131492950; + + // aapt resource value: 0x7f0c0001 + public const int abc_search_url_text_normal = 2131492865; + + // aapt resource value: 0x7f0c0002 + public const int abc_search_url_text_pressed = 2131492866; + + // aapt resource value: 0x7f0c0003 + public const int abc_search_url_text_selected = 2131492867; + + // aapt resource value: 0x7f0c0057 + public const int abc_secondary_text_material_dark = 2131492951; + + // aapt resource value: 0x7f0c0058 + public const int abc_secondary_text_material_light = 2131492952; + + // aapt resource value: 0x7f0c0059 + public const int abc_tint_btn_checkable = 2131492953; + + // aapt resource value: 0x7f0c005a + public const int abc_tint_default = 2131492954; + + // aapt resource value: 0x7f0c005b + public const int abc_tint_edittext = 2131492955; + + // aapt resource value: 0x7f0c005c + public const int abc_tint_seek_thumb = 2131492956; + + // aapt resource value: 0x7f0c005d + public const int abc_tint_spinner = 2131492957; + + // aapt resource value: 0x7f0c005e + public const int abc_tint_switch_track = 2131492958; + + // aapt resource value: 0x7f0c0004 + public const int accent_material_dark = 2131492868; + + // aapt resource value: 0x7f0c0005 + public const int accent_material_light = 2131492869; + + // aapt resource value: 0x7f0c0006 + public const int background_floating_material_dark = 2131492870; + + // aapt resource value: 0x7f0c0007 + public const int background_floating_material_light = 2131492871; + + // aapt resource value: 0x7f0c0008 + public const int background_material_dark = 2131492872; + + // aapt resource value: 0x7f0c0009 + public const int background_material_light = 2131492873; + + // aapt resource value: 0x7f0c000a + public const int bright_foreground_disabled_material_dark = 2131492874; + + // aapt resource value: 0x7f0c000b + public const int bright_foreground_disabled_material_light = 2131492875; + + // aapt resource value: 0x7f0c000c + public const int bright_foreground_inverse_material_dark = 2131492876; + + // aapt resource value: 0x7f0c000d + public const int bright_foreground_inverse_material_light = 2131492877; + + // aapt resource value: 0x7f0c000e + public const int bright_foreground_material_dark = 2131492878; + + // aapt resource value: 0x7f0c000f + public const int bright_foreground_material_light = 2131492879; + + // aapt resource value: 0x7f0c0010 + public const int button_material_dark = 2131492880; + + // aapt resource value: 0x7f0c0011 + public const int button_material_light = 2131492881; + + // aapt resource value: 0x7f0c0049 + public const int colorAccent = 2131492937; + + // aapt resource value: 0x7f0c0047 + public const int colorPrimary = 2131492935; + + // aapt resource value: 0x7f0c0048 + public const int colorPrimaryDark = 2131492936; + + // aapt resource value: 0x7f0c003c + public const int design_bottom_navigation_shadow_color = 2131492924; + + // aapt resource value: 0x7f0c005f + public const int design_error = 2131492959; + + // aapt resource value: 0x7f0c003d + public const int design_fab_shadow_end_color = 2131492925; + + // aapt resource value: 0x7f0c003e + public const int design_fab_shadow_mid_color = 2131492926; + + // aapt resource value: 0x7f0c003f + public const int design_fab_shadow_start_color = 2131492927; + + // aapt resource value: 0x7f0c0040 + public const int design_fab_stroke_end_inner_color = 2131492928; + + // aapt resource value: 0x7f0c0041 + public const int design_fab_stroke_end_outer_color = 2131492929; + + // aapt resource value: 0x7f0c0042 + public const int design_fab_stroke_top_inner_color = 2131492930; + + // aapt resource value: 0x7f0c0043 + public const int design_fab_stroke_top_outer_color = 2131492931; + + // aapt resource value: 0x7f0c0044 + public const int design_snackbar_background_color = 2131492932; + + // aapt resource value: 0x7f0c0060 + public const int design_tint_password_toggle = 2131492960; + + // aapt resource value: 0x7f0c0012 + public const int dim_foreground_disabled_material_dark = 2131492882; + + // aapt resource value: 0x7f0c0013 + public const int dim_foreground_disabled_material_light = 2131492883; + + // aapt resource value: 0x7f0c0014 + public const int dim_foreground_material_dark = 2131492884; + + // aapt resource value: 0x7f0c0015 + public const int dim_foreground_material_light = 2131492885; + + // aapt resource value: 0x7f0c0016 + public const int error_color_material = 2131492886; + + // aapt resource value: 0x7f0c0017 + public const int foreground_material_dark = 2131492887; + + // aapt resource value: 0x7f0c0018 + public const int foreground_material_light = 2131492888; + + // aapt resource value: 0x7f0c0019 + public const int highlighted_text_material_dark = 2131492889; + + // aapt resource value: 0x7f0c001a + public const int highlighted_text_material_light = 2131492890; + + // aapt resource value: 0x7f0c004a + public const int ic_launcher_background = 2131492938; + + // aapt resource value: 0x7f0c001b + public const int material_blue_grey_800 = 2131492891; + + // aapt resource value: 0x7f0c001c + public const int material_blue_grey_900 = 2131492892; + + // aapt resource value: 0x7f0c001d + public const int material_blue_grey_950 = 2131492893; + + // aapt resource value: 0x7f0c001e + public const int material_deep_teal_200 = 2131492894; + + // aapt resource value: 0x7f0c001f + public const int material_deep_teal_500 = 2131492895; + + // aapt resource value: 0x7f0c0020 + public const int material_grey_100 = 2131492896; + + // aapt resource value: 0x7f0c0021 + public const int material_grey_300 = 2131492897; + + // aapt resource value: 0x7f0c0022 + public const int material_grey_50 = 2131492898; + + // aapt resource value: 0x7f0c0023 + public const int material_grey_600 = 2131492899; + + // aapt resource value: 0x7f0c0024 + public const int material_grey_800 = 2131492900; + + // aapt resource value: 0x7f0c0025 + public const int material_grey_850 = 2131492901; + + // aapt resource value: 0x7f0c0026 + public const int material_grey_900 = 2131492902; + + // aapt resource value: 0x7f0c0045 + public const int notification_action_color_filter = 2131492933; + + // aapt resource value: 0x7f0c0046 + public const int notification_icon_bg_color = 2131492934; + + // aapt resource value: 0x7f0c003b + public const int notification_material_background_media_default_color = 2131492923; + + // aapt resource value: 0x7f0c0027 + public const int primary_dark_material_dark = 2131492903; + + // aapt resource value: 0x7f0c0028 + public const int primary_dark_material_light = 2131492904; + + // aapt resource value: 0x7f0c0029 + public const int primary_material_dark = 2131492905; + + // aapt resource value: 0x7f0c002a + public const int primary_material_light = 2131492906; + + // aapt resource value: 0x7f0c002b + public const int primary_text_default_material_dark = 2131492907; + + // aapt resource value: 0x7f0c002c + public const int primary_text_default_material_light = 2131492908; + + // aapt resource value: 0x7f0c002d + public const int primary_text_disabled_material_dark = 2131492909; + + // aapt resource value: 0x7f0c002e + public const int primary_text_disabled_material_light = 2131492910; + + // aapt resource value: 0x7f0c002f + public const int ripple_material_dark = 2131492911; + + // aapt resource value: 0x7f0c0030 + public const int ripple_material_light = 2131492912; + + // aapt resource value: 0x7f0c0031 + public const int secondary_text_default_material_dark = 2131492913; + + // aapt resource value: 0x7f0c0032 + public const int secondary_text_default_material_light = 2131492914; + + // aapt resource value: 0x7f0c0033 + public const int secondary_text_disabled_material_dark = 2131492915; + + // aapt resource value: 0x7f0c0034 + public const int secondary_text_disabled_material_light = 2131492916; + + // aapt resource value: 0x7f0c0035 + public const int switch_thumb_disabled_material_dark = 2131492917; + + // aapt resource value: 0x7f0c0036 + public const int switch_thumb_disabled_material_light = 2131492918; + + // aapt resource value: 0x7f0c0061 + public const int switch_thumb_material_dark = 2131492961; + + // aapt resource value: 0x7f0c0062 + public const int switch_thumb_material_light = 2131492962; + + // aapt resource value: 0x7f0c0037 + public const int switch_thumb_normal_material_dark = 2131492919; + + // aapt resource value: 0x7f0c0038 + public const int switch_thumb_normal_material_light = 2131492920; + + // aapt resource value: 0x7f0c0039 + public const int tooltip_background_dark = 2131492921; + + // aapt resource value: 0x7f0c003a + public const int tooltip_background_light = 2131492922; + + static Color() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Color() + { + } + } + + public partial class Dimension + { + + // aapt resource value: 0x7f070012 + public const int abc_action_bar_content_inset_material = 2131165202; + + // aapt resource value: 0x7f070013 + public const int abc_action_bar_content_inset_with_nav = 2131165203; + + // aapt resource value: 0x7f070007 + public const int abc_action_bar_default_height_material = 2131165191; + + // aapt resource value: 0x7f070014 + public const int abc_action_bar_default_padding_end_material = 2131165204; + + // aapt resource value: 0x7f070015 + public const int abc_action_bar_default_padding_start_material = 2131165205; + + // aapt resource value: 0x7f070017 + public const int abc_action_bar_elevation_material = 2131165207; + + // aapt resource value: 0x7f070018 + public const int abc_action_bar_icon_vertical_padding_material = 2131165208; + + // aapt resource value: 0x7f070019 + public const int abc_action_bar_overflow_padding_end_material = 2131165209; + + // aapt resource value: 0x7f07001a + public const int abc_action_bar_overflow_padding_start_material = 2131165210; + + // aapt resource value: 0x7f070008 + public const int abc_action_bar_progress_bar_size = 2131165192; + + // aapt resource value: 0x7f07001b + public const int abc_action_bar_stacked_max_height = 2131165211; + + // aapt resource value: 0x7f07001c + public const int abc_action_bar_stacked_tab_max_width = 2131165212; + + // aapt resource value: 0x7f07001d + public const int abc_action_bar_subtitle_bottom_margin_material = 2131165213; + + // aapt resource value: 0x7f07001e + public const int abc_action_bar_subtitle_top_margin_material = 2131165214; + + // aapt resource value: 0x7f07001f + public const int abc_action_button_min_height_material = 2131165215; + + // aapt resource value: 0x7f070020 + public const int abc_action_button_min_width_material = 2131165216; + + // aapt resource value: 0x7f070021 + public const int abc_action_button_min_width_overflow_material = 2131165217; + + // aapt resource value: 0x7f070006 + public const int abc_alert_dialog_button_bar_height = 2131165190; + + // aapt resource value: 0x7f070022 + public const int abc_button_inset_horizontal_material = 2131165218; + + // aapt resource value: 0x7f070023 + public const int abc_button_inset_vertical_material = 2131165219; + + // aapt resource value: 0x7f070024 + public const int abc_button_padding_horizontal_material = 2131165220; + + // aapt resource value: 0x7f070025 + public const int abc_button_padding_vertical_material = 2131165221; + + // aapt resource value: 0x7f070026 + public const int abc_cascading_menus_min_smallest_width = 2131165222; + + // aapt resource value: 0x7f07000b + public const int abc_config_prefDialogWidth = 2131165195; + + // aapt resource value: 0x7f070027 + public const int abc_control_corner_material = 2131165223; + + // aapt resource value: 0x7f070028 + public const int abc_control_inset_material = 2131165224; + + // aapt resource value: 0x7f070029 + public const int abc_control_padding_material = 2131165225; + + // aapt resource value: 0x7f07000c + public const int abc_dialog_fixed_height_major = 2131165196; + + // aapt resource value: 0x7f07000d + public const int abc_dialog_fixed_height_minor = 2131165197; + + // aapt resource value: 0x7f07000e + public const int abc_dialog_fixed_width_major = 2131165198; + + // aapt resource value: 0x7f07000f + public const int abc_dialog_fixed_width_minor = 2131165199; + + // aapt resource value: 0x7f07002a + public const int abc_dialog_list_padding_bottom_no_buttons = 2131165226; + + // aapt resource value: 0x7f07002b + public const int abc_dialog_list_padding_top_no_title = 2131165227; + + // aapt resource value: 0x7f070010 + public const int abc_dialog_min_width_major = 2131165200; + + // aapt resource value: 0x7f070011 + public const int abc_dialog_min_width_minor = 2131165201; + + // aapt resource value: 0x7f07002c + public const int abc_dialog_padding_material = 2131165228; + + // aapt resource value: 0x7f07002d + public const int abc_dialog_padding_top_material = 2131165229; + + // aapt resource value: 0x7f07002e + public const int abc_dialog_title_divider_material = 2131165230; + + // aapt resource value: 0x7f07002f + public const int abc_disabled_alpha_material_dark = 2131165231; + + // aapt resource value: 0x7f070030 + public const int abc_disabled_alpha_material_light = 2131165232; + + // aapt resource value: 0x7f070031 + public const int abc_dropdownitem_icon_width = 2131165233; + + // aapt resource value: 0x7f070032 + public const int abc_dropdownitem_text_padding_left = 2131165234; + + // aapt resource value: 0x7f070033 + public const int abc_dropdownitem_text_padding_right = 2131165235; + + // aapt resource value: 0x7f070034 + public const int abc_edit_text_inset_bottom_material = 2131165236; + + // aapt resource value: 0x7f070035 + public const int abc_edit_text_inset_horizontal_material = 2131165237; + + // aapt resource value: 0x7f070036 + public const int abc_edit_text_inset_top_material = 2131165238; + + // aapt resource value: 0x7f070037 + public const int abc_floating_window_z = 2131165239; + + // aapt resource value: 0x7f070038 + public const int abc_list_item_padding_horizontal_material = 2131165240; + + // aapt resource value: 0x7f070039 + public const int abc_panel_menu_list_width = 2131165241; + + // aapt resource value: 0x7f07003a + public const int abc_progress_bar_height_material = 2131165242; + + // aapt resource value: 0x7f07003b + public const int abc_search_view_preferred_height = 2131165243; + + // aapt resource value: 0x7f07003c + public const int abc_search_view_preferred_width = 2131165244; + + // aapt resource value: 0x7f07003d + public const int abc_seekbar_track_background_height_material = 2131165245; + + // aapt resource value: 0x7f07003e + public const int abc_seekbar_track_progress_height_material = 2131165246; + + // aapt resource value: 0x7f07003f + public const int abc_select_dialog_padding_start_material = 2131165247; + + // aapt resource value: 0x7f070016 + public const int abc_switch_padding = 2131165206; + + // aapt resource value: 0x7f070040 + public const int abc_text_size_body_1_material = 2131165248; + + // aapt resource value: 0x7f070041 + public const int abc_text_size_body_2_material = 2131165249; + + // aapt resource value: 0x7f070042 + public const int abc_text_size_button_material = 2131165250; + + // aapt resource value: 0x7f070043 + public const int abc_text_size_caption_material = 2131165251; + + // aapt resource value: 0x7f070044 + public const int abc_text_size_display_1_material = 2131165252; + + // aapt resource value: 0x7f070045 + public const int abc_text_size_display_2_material = 2131165253; + + // aapt resource value: 0x7f070046 + public const int abc_text_size_display_3_material = 2131165254; + + // aapt resource value: 0x7f070047 + public const int abc_text_size_display_4_material = 2131165255; + + // aapt resource value: 0x7f070048 + public const int abc_text_size_headline_material = 2131165256; + + // aapt resource value: 0x7f070049 + public const int abc_text_size_large_material = 2131165257; + + // aapt resource value: 0x7f07004a + public const int abc_text_size_medium_material = 2131165258; + + // aapt resource value: 0x7f07004b + public const int abc_text_size_menu_header_material = 2131165259; + + // aapt resource value: 0x7f07004c + public const int abc_text_size_menu_material = 2131165260; + + // aapt resource value: 0x7f07004d + public const int abc_text_size_small_material = 2131165261; + + // aapt resource value: 0x7f07004e + public const int abc_text_size_subhead_material = 2131165262; + + // aapt resource value: 0x7f070009 + public const int abc_text_size_subtitle_material_toolbar = 2131165193; + + // aapt resource value: 0x7f07004f + public const int abc_text_size_title_material = 2131165263; + + // aapt resource value: 0x7f07000a + public const int abc_text_size_title_material_toolbar = 2131165194; + + // aapt resource value: 0x7f07008b + public const int compat_button_inset_horizontal_material = 2131165323; + + // aapt resource value: 0x7f07008c + public const int compat_button_inset_vertical_material = 2131165324; + + // aapt resource value: 0x7f07008d + public const int compat_button_padding_horizontal_material = 2131165325; + + // aapt resource value: 0x7f07008e + public const int compat_button_padding_vertical_material = 2131165326; + + // aapt resource value: 0x7f07008f + public const int compat_control_corner_material = 2131165327; + + // aapt resource value: 0x7f070069 + public const int design_appbar_elevation = 2131165289; + + // aapt resource value: 0x7f07006a + public const int design_bottom_navigation_active_item_max_width = 2131165290; + + // aapt resource value: 0x7f07006b + public const int design_bottom_navigation_active_text_size = 2131165291; + + // aapt resource value: 0x7f07006c + public const int design_bottom_navigation_elevation = 2131165292; + + // aapt resource value: 0x7f07006d + public const int design_bottom_navigation_height = 2131165293; + + // aapt resource value: 0x7f07006e + public const int design_bottom_navigation_item_max_width = 2131165294; + + // aapt resource value: 0x7f07006f + public const int design_bottom_navigation_item_min_width = 2131165295; + + // aapt resource value: 0x7f070070 + public const int design_bottom_navigation_margin = 2131165296; + + // aapt resource value: 0x7f070071 + public const int design_bottom_navigation_shadow_height = 2131165297; + + // aapt resource value: 0x7f070072 + public const int design_bottom_navigation_text_size = 2131165298; + + // aapt resource value: 0x7f070073 + public const int design_bottom_sheet_modal_elevation = 2131165299; + + // aapt resource value: 0x7f070074 + public const int design_bottom_sheet_peek_height_min = 2131165300; + + // aapt resource value: 0x7f070075 + public const int design_fab_border_width = 2131165301; + + // aapt resource value: 0x7f070076 + public const int design_fab_elevation = 2131165302; + + // aapt resource value: 0x7f070077 + public const int design_fab_image_size = 2131165303; + + // aapt resource value: 0x7f070078 + public const int design_fab_size_mini = 2131165304; + + // aapt resource value: 0x7f070079 + public const int design_fab_size_normal = 2131165305; + + // aapt resource value: 0x7f07007a + public const int design_fab_translation_z_pressed = 2131165306; + + // aapt resource value: 0x7f07007b + public const int design_navigation_elevation = 2131165307; + + // aapt resource value: 0x7f07007c + public const int design_navigation_icon_padding = 2131165308; + + // aapt resource value: 0x7f07007d + public const int design_navigation_icon_size = 2131165309; + + // aapt resource value: 0x7f070061 + public const int design_navigation_max_width = 2131165281; + + // aapt resource value: 0x7f07007e + public const int design_navigation_padding_bottom = 2131165310; + + // aapt resource value: 0x7f07007f + public const int design_navigation_separator_vertical_padding = 2131165311; + + // aapt resource value: 0x7f070062 + public const int design_snackbar_action_inline_max_width = 2131165282; + + // aapt resource value: 0x7f070063 + public const int design_snackbar_background_corner_radius = 2131165283; + + // aapt resource value: 0x7f070080 + public const int design_snackbar_elevation = 2131165312; + + // aapt resource value: 0x7f070064 + public const int design_snackbar_extra_spacing_horizontal = 2131165284; + + // aapt resource value: 0x7f070065 + public const int design_snackbar_max_width = 2131165285; + + // aapt resource value: 0x7f070066 + public const int design_snackbar_min_width = 2131165286; + + // aapt resource value: 0x7f070081 + public const int design_snackbar_padding_horizontal = 2131165313; + + // aapt resource value: 0x7f070082 + public const int design_snackbar_padding_vertical = 2131165314; + + // aapt resource value: 0x7f070067 + public const int design_snackbar_padding_vertical_2lines = 2131165287; + + // aapt resource value: 0x7f070083 + public const int design_snackbar_text_size = 2131165315; + + // aapt resource value: 0x7f070084 + public const int design_tab_max_width = 2131165316; + + // aapt resource value: 0x7f070068 + public const int design_tab_scrollable_min_width = 2131165288; + + // aapt resource value: 0x7f070085 + public const int design_tab_text_size = 2131165317; + + // aapt resource value: 0x7f070086 + public const int design_tab_text_size_2line = 2131165318; + + // aapt resource value: 0x7f070050 + public const int disabled_alpha_material_dark = 2131165264; + + // aapt resource value: 0x7f070051 + public const int disabled_alpha_material_light = 2131165265; + + // aapt resource value: 0x7f070000 + public const int fastscroll_default_thickness = 2131165184; + + // aapt resource value: 0x7f070001 + public const int fastscroll_margin = 2131165185; + + // aapt resource value: 0x7f070002 + public const int fastscroll_minimum_range = 2131165186; + + // aapt resource value: 0x7f070052 + public const int highlight_alpha_material_colored = 2131165266; + + // aapt resource value: 0x7f070053 + public const int highlight_alpha_material_dark = 2131165267; + + // aapt resource value: 0x7f070054 + public const int highlight_alpha_material_light = 2131165268; + + // aapt resource value: 0x7f070055 + public const int hint_alpha_material_dark = 2131165269; + + // aapt resource value: 0x7f070056 + public const int hint_alpha_material_light = 2131165270; + + // aapt resource value: 0x7f070057 + public const int hint_pressed_alpha_material_dark = 2131165271; + + // aapt resource value: 0x7f070058 + public const int hint_pressed_alpha_material_light = 2131165272; + + // aapt resource value: 0x7f070003 + public const int item_touch_helper_max_drag_scroll_per_frame = 2131165187; + + // aapt resource value: 0x7f070004 + public const int item_touch_helper_swipe_escape_max_velocity = 2131165188; + + // aapt resource value: 0x7f070005 + public const int item_touch_helper_swipe_escape_velocity = 2131165189; + + // aapt resource value: 0x7f070090 + public const int notification_action_icon_size = 2131165328; + + // aapt resource value: 0x7f070091 + public const int notification_action_text_size = 2131165329; + + // aapt resource value: 0x7f070092 + public const int notification_big_circle_margin = 2131165330; + + // aapt resource value: 0x7f070088 + public const int notification_content_margin_start = 2131165320; + + // aapt resource value: 0x7f070093 + public const int notification_large_icon_height = 2131165331; + + // aapt resource value: 0x7f070094 + public const int notification_large_icon_width = 2131165332; + + // aapt resource value: 0x7f070089 + public const int notification_main_column_padding_top = 2131165321; + + // aapt resource value: 0x7f07008a + public const int notification_media_narrow_margin = 2131165322; + + // aapt resource value: 0x7f070095 + public const int notification_right_icon_size = 2131165333; + + // aapt resource value: 0x7f070087 + public const int notification_right_side_padding_top = 2131165319; + + // aapt resource value: 0x7f070096 + public const int notification_small_icon_background_padding = 2131165334; + + // aapt resource value: 0x7f070097 + public const int notification_small_icon_size_as_large = 2131165335; + + // aapt resource value: 0x7f070098 + public const int notification_subtext_size = 2131165336; + + // aapt resource value: 0x7f070099 + public const int notification_top_pad = 2131165337; + + // aapt resource value: 0x7f07009a + public const int notification_top_pad_large_text = 2131165338; + + // aapt resource value: 0x7f070059 + public const int tooltip_corner_radius = 2131165273; + + // aapt resource value: 0x7f07005a + public const int tooltip_horizontal_padding = 2131165274; + + // aapt resource value: 0x7f07005b + public const int tooltip_margin = 2131165275; + + // aapt resource value: 0x7f07005c + public const int tooltip_precise_anchor_extra_offset = 2131165276; + + // aapt resource value: 0x7f07005d + public const int tooltip_precise_anchor_threshold = 2131165277; + + // aapt resource value: 0x7f07005e + public const int tooltip_vertical_padding = 2131165278; + + // aapt resource value: 0x7f07005f + public const int tooltip_y_offset_non_touch = 2131165279; + + // aapt resource value: 0x7f070060 + public const int tooltip_y_offset_touch = 2131165280; + + static Dimension() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Dimension() + { + } + } + + public partial class Drawable + { + + // aapt resource value: 0x7f020000 + public const int abc_ab_share_pack_mtrl_alpha = 2130837504; + + // aapt resource value: 0x7f020001 + public const int abc_action_bar_item_background_material = 2130837505; + + // aapt resource value: 0x7f020002 + public const int abc_btn_borderless_material = 2130837506; + + // aapt resource value: 0x7f020003 + public const int abc_btn_check_material = 2130837507; + + // aapt resource value: 0x7f020004 + public const int abc_btn_check_to_on_mtrl_000 = 2130837508; + + // aapt resource value: 0x7f020005 + public const int abc_btn_check_to_on_mtrl_015 = 2130837509; + + // aapt resource value: 0x7f020006 + public const int abc_btn_colored_material = 2130837510; + + // aapt resource value: 0x7f020007 + public const int abc_btn_default_mtrl_shape = 2130837511; + + // aapt resource value: 0x7f020008 + public const int abc_btn_radio_material = 2130837512; + + // aapt resource value: 0x7f020009 + public const int abc_btn_radio_to_on_mtrl_000 = 2130837513; + + // aapt resource value: 0x7f02000a + public const int abc_btn_radio_to_on_mtrl_015 = 2130837514; + + // aapt resource value: 0x7f02000b + public const int abc_btn_switch_to_on_mtrl_00001 = 2130837515; + + // aapt resource value: 0x7f02000c + public const int abc_btn_switch_to_on_mtrl_00012 = 2130837516; + + // aapt resource value: 0x7f02000d + public const int abc_cab_background_internal_bg = 2130837517; + + // aapt resource value: 0x7f02000e + public const int abc_cab_background_top_material = 2130837518; + + // aapt resource value: 0x7f02000f + public const int abc_cab_background_top_mtrl_alpha = 2130837519; + + // aapt resource value: 0x7f020010 + public const int abc_control_background_material = 2130837520; + + // aapt resource value: 0x7f020011 + public const int abc_dialog_material_background = 2130837521; + + // aapt resource value: 0x7f020012 + public const int abc_edit_text_material = 2130837522; + + // aapt resource value: 0x7f020013 + public const int abc_ic_ab_back_material = 2130837523; + + // aapt resource value: 0x7f020014 + public const int abc_ic_arrow_drop_right_black_24dp = 2130837524; + + // aapt resource value: 0x7f020015 + public const int abc_ic_clear_material = 2130837525; + + // aapt resource value: 0x7f020016 + public const int abc_ic_commit_search_api_mtrl_alpha = 2130837526; + + // aapt resource value: 0x7f020017 + public const int abc_ic_go_search_api_material = 2130837527; + + // aapt resource value: 0x7f020018 + public const int abc_ic_menu_copy_mtrl_am_alpha = 2130837528; + + // aapt resource value: 0x7f020019 + public const int abc_ic_menu_cut_mtrl_alpha = 2130837529; + + // aapt resource value: 0x7f02001a + public const int abc_ic_menu_overflow_material = 2130837530; + + // aapt resource value: 0x7f02001b + public const int abc_ic_menu_paste_mtrl_am_alpha = 2130837531; + + // aapt resource value: 0x7f02001c + public const int abc_ic_menu_selectall_mtrl_alpha = 2130837532; + + // aapt resource value: 0x7f02001d + public const int abc_ic_menu_share_mtrl_alpha = 2130837533; + + // aapt resource value: 0x7f02001e + public const int abc_ic_search_api_material = 2130837534; + + // aapt resource value: 0x7f02001f + public const int abc_ic_star_black_16dp = 2130837535; + + // aapt resource value: 0x7f020020 + public const int abc_ic_star_black_36dp = 2130837536; + + // aapt resource value: 0x7f020021 + public const int abc_ic_star_black_48dp = 2130837537; + + // aapt resource value: 0x7f020022 + public const int abc_ic_star_half_black_16dp = 2130837538; + + // aapt resource value: 0x7f020023 + public const int abc_ic_star_half_black_36dp = 2130837539; + + // aapt resource value: 0x7f020024 + public const int abc_ic_star_half_black_48dp = 2130837540; + + // aapt resource value: 0x7f020025 + public const int abc_ic_voice_search_api_material = 2130837541; + + // aapt resource value: 0x7f020026 + public const int abc_item_background_holo_dark = 2130837542; + + // aapt resource value: 0x7f020027 + public const int abc_item_background_holo_light = 2130837543; + + // aapt resource value: 0x7f020028 + public const int abc_list_divider_mtrl_alpha = 2130837544; + + // aapt resource value: 0x7f020029 + public const int abc_list_focused_holo = 2130837545; + + // aapt resource value: 0x7f02002a + public const int abc_list_longpressed_holo = 2130837546; + + // aapt resource value: 0x7f02002b + public const int abc_list_pressed_holo_dark = 2130837547; + + // aapt resource value: 0x7f02002c + public const int abc_list_pressed_holo_light = 2130837548; + + // aapt resource value: 0x7f02002d + public const int abc_list_selector_background_transition_holo_dark = 2130837549; + + // aapt resource value: 0x7f02002e + public const int abc_list_selector_background_transition_holo_light = 2130837550; + + // aapt resource value: 0x7f02002f + public const int abc_list_selector_disabled_holo_dark = 2130837551; + + // aapt resource value: 0x7f020030 + public const int abc_list_selector_disabled_holo_light = 2130837552; + + // aapt resource value: 0x7f020031 + public const int abc_list_selector_holo_dark = 2130837553; + + // aapt resource value: 0x7f020032 + public const int abc_list_selector_holo_light = 2130837554; + + // aapt resource value: 0x7f020033 + public const int abc_menu_hardkey_panel_mtrl_mult = 2130837555; + + // aapt resource value: 0x7f020034 + public const int abc_popup_background_mtrl_mult = 2130837556; + + // aapt resource value: 0x7f020035 + public const int abc_ratingbar_indicator_material = 2130837557; + + // aapt resource value: 0x7f020036 + public const int abc_ratingbar_material = 2130837558; + + // aapt resource value: 0x7f020037 + public const int abc_ratingbar_small_material = 2130837559; + + // aapt resource value: 0x7f020038 + public const int abc_scrubber_control_off_mtrl_alpha = 2130837560; + + // aapt resource value: 0x7f020039 + public const int abc_scrubber_control_to_pressed_mtrl_000 = 2130837561; + + // aapt resource value: 0x7f02003a + public const int abc_scrubber_control_to_pressed_mtrl_005 = 2130837562; + + // aapt resource value: 0x7f02003b + public const int abc_scrubber_primary_mtrl_alpha = 2130837563; + + // aapt resource value: 0x7f02003c + public const int abc_scrubber_track_mtrl_alpha = 2130837564; + + // aapt resource value: 0x7f02003d + public const int abc_seekbar_thumb_material = 2130837565; + + // aapt resource value: 0x7f02003e + public const int abc_seekbar_tick_mark_material = 2130837566; + + // aapt resource value: 0x7f02003f + public const int abc_seekbar_track_material = 2130837567; + + // aapt resource value: 0x7f020040 + public const int abc_spinner_mtrl_am_alpha = 2130837568; + + // aapt resource value: 0x7f020041 + public const int abc_spinner_textfield_background_material = 2130837569; + + // aapt resource value: 0x7f020042 + public const int abc_switch_thumb_material = 2130837570; + + // aapt resource value: 0x7f020043 + public const int abc_switch_track_mtrl_alpha = 2130837571; + + // aapt resource value: 0x7f020044 + public const int abc_tab_indicator_material = 2130837572; + + // aapt resource value: 0x7f020045 + public const int abc_tab_indicator_mtrl_alpha = 2130837573; + + // aapt resource value: 0x7f020046 + public const int abc_text_cursor_material = 2130837574; + + // aapt resource value: 0x7f020047 + public const int abc_text_select_handle_left_mtrl_dark = 2130837575; + + // aapt resource value: 0x7f020048 + public const int abc_text_select_handle_left_mtrl_light = 2130837576; + + // aapt resource value: 0x7f020049 + public const int abc_text_select_handle_middle_mtrl_dark = 2130837577; + + // aapt resource value: 0x7f02004a + public const int abc_text_select_handle_middle_mtrl_light = 2130837578; + + // aapt resource value: 0x7f02004b + public const int abc_text_select_handle_right_mtrl_dark = 2130837579; + + // aapt resource value: 0x7f02004c + public const int abc_text_select_handle_right_mtrl_light = 2130837580; + + // aapt resource value: 0x7f02004d + public const int abc_textfield_activated_mtrl_alpha = 2130837581; + + // aapt resource value: 0x7f02004e + public const int abc_textfield_default_mtrl_alpha = 2130837582; + + // aapt resource value: 0x7f02004f + public const int abc_textfield_search_activated_mtrl_alpha = 2130837583; + + // aapt resource value: 0x7f020050 + public const int abc_textfield_search_default_mtrl_alpha = 2130837584; + + // aapt resource value: 0x7f020051 + public const int abc_textfield_search_material = 2130837585; + + // aapt resource value: 0x7f020052 + public const int abc_vector_test = 2130837586; + + // aapt resource value: 0x7f020053 + public const int avd_hide_password = 2130837587; + + // aapt resource value: 0x7f02006a + public const int avd_hide_password_1 = 2130837610; + + // aapt resource value: 0x7f02006b + public const int avd_hide_password_2 = 2130837611; + + // aapt resource value: 0x7f02006c + public const int avd_hide_password_3 = 2130837612; + + // aapt resource value: 0x7f020054 + public const int avd_show_password = 2130837588; + + // aapt resource value: 0x7f02006d + public const int avd_show_password_1 = 2130837613; + + // aapt resource value: 0x7f02006e + public const int avd_show_password_2 = 2130837614; + + // aapt resource value: 0x7f02006f + public const int avd_show_password_3 = 2130837615; + + // aapt resource value: 0x7f020055 + public const int design_bottom_navigation_item_background = 2130837589; + + // aapt resource value: 0x7f020056 + public const int design_fab_background = 2130837590; + + // aapt resource value: 0x7f020057 + public const int design_ic_visibility = 2130837591; + + // aapt resource value: 0x7f020058 + public const int design_ic_visibility_off = 2130837592; + + // aapt resource value: 0x7f020059 + public const int design_password_eye = 2130837593; + + // aapt resource value: 0x7f02005a + public const int design_snackbar_background = 2130837594; + + // aapt resource value: 0x7f02005b + public const int navigation_empty_icon = 2130837595; + + // aapt resource value: 0x7f02005c + public const int notification_action_background = 2130837596; + + // aapt resource value: 0x7f02005d + public const int notification_bg = 2130837597; + + // aapt resource value: 0x7f02005e + public const int notification_bg_low = 2130837598; + + // aapt resource value: 0x7f02005f + public const int notification_bg_low_normal = 2130837599; + + // aapt resource value: 0x7f020060 + public const int notification_bg_low_pressed = 2130837600; + + // aapt resource value: 0x7f020061 + public const int notification_bg_normal = 2130837601; + + // aapt resource value: 0x7f020062 + public const int notification_bg_normal_pressed = 2130837602; + + // aapt resource value: 0x7f020063 + public const int notification_icon_background = 2130837603; + + // aapt resource value: 0x7f020068 + public const int notification_template_icon_bg = 2130837608; + + // aapt resource value: 0x7f020069 + public const int notification_template_icon_low_bg = 2130837609; + + // aapt resource value: 0x7f020064 + public const int notification_tile_bg = 2130837604; + + // aapt resource value: 0x7f020065 + public const int notify_panel_notification_icon_bg = 2130837605; + + // aapt resource value: 0x7f020066 + public const int tooltip_frame_dark = 2130837606; + + // aapt resource value: 0x7f020067 + public const int tooltip_frame_light = 2130837607; + + static Drawable() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Drawable() + { + } + } + + public partial class Id + { + + // aapt resource value: 0x7f080032 + public const int ALT = 2131230770; + + // aapt resource value: 0x7f080033 + public const int CTRL = 2131230771; + + // aapt resource value: 0x7f080034 + public const int FUNCTION = 2131230772; + + // aapt resource value: 0x7f080035 + public const int META = 2131230773; + + // aapt resource value: 0x7f080036 + public const int SHIFT = 2131230774; + + // aapt resource value: 0x7f080037 + public const int SYM = 2131230775; + + // aapt resource value: 0x7f08009d + public const int action0 = 2131230877; + + // aapt resource value: 0x7f08007c + public const int action_bar = 2131230844; + + // aapt resource value: 0x7f080001 + public const int action_bar_activity_content = 2131230721; + + // aapt resource value: 0x7f08007b + public const int action_bar_container = 2131230843; + + // aapt resource value: 0x7f080077 + public const int action_bar_root = 2131230839; + + // aapt resource value: 0x7f080002 + public const int action_bar_spinner = 2131230722; + + // aapt resource value: 0x7f08005b + public const int action_bar_subtitle = 2131230811; + + // aapt resource value: 0x7f08005a + public const int action_bar_title = 2131230810; + + // aapt resource value: 0x7f08009a + public const int action_container = 2131230874; + + // aapt resource value: 0x7f08007d + public const int action_context_bar = 2131230845; + + // aapt resource value: 0x7f0800a1 + public const int action_divider = 2131230881; + + // aapt resource value: 0x7f08009b + public const int action_image = 2131230875; + + // aapt resource value: 0x7f080003 + public const int action_menu_divider = 2131230723; + + // aapt resource value: 0x7f080004 + public const int action_menu_presenter = 2131230724; + + // aapt resource value: 0x7f080079 + public const int action_mode_bar = 2131230841; + + // aapt resource value: 0x7f080078 + public const int action_mode_bar_stub = 2131230840; + + // aapt resource value: 0x7f08005c + public const int action_mode_close_button = 2131230812; + + // aapt resource value: 0x7f08009c + public const int action_text = 2131230876; + + // aapt resource value: 0x7f0800aa + public const int actions = 2131230890; + + // aapt resource value: 0x7f08005d + public const int activity_chooser_view_content = 2131230813; + + // aapt resource value: 0x7f080027 + public const int add = 2131230759; + + // aapt resource value: 0x7f080070 + public const int alertTitle = 2131230832; + + // aapt resource value: 0x7f080052 + public const int all = 2131230802; + + // aapt resource value: 0x7f080038 + public const int always = 2131230776; + + // aapt resource value: 0x7f080056 + public const int async = 2131230806; + + // aapt resource value: 0x7f080044 + public const int auto = 2131230788; + + // aapt resource value: 0x7f08002f + public const int beginning = 2131230767; + + // aapt resource value: 0x7f080057 + public const int blocking = 2131230807; + + // aapt resource value: 0x7f08003d + public const int bottom = 2131230781; + + // aapt resource value: 0x7f080063 + public const int buttonPanel = 2131230819; + + // aapt resource value: 0x7f08009e + public const int cancel_action = 2131230878; + + // aapt resource value: 0x7f080045 + public const int center = 2131230789; + + // aapt resource value: 0x7f080046 + public const int center_horizontal = 2131230790; + + // aapt resource value: 0x7f080047 + public const int center_vertical = 2131230791; + + // aapt resource value: 0x7f080073 + public const int checkbox = 2131230835; + + // aapt resource value: 0x7f0800a6 + public const int chronometer = 2131230886; + + // aapt resource value: 0x7f08004e + public const int clip_horizontal = 2131230798; + + // aapt resource value: 0x7f08004f + public const int clip_vertical = 2131230799; + + // aapt resource value: 0x7f080039 + public const int collapseActionView = 2131230777; + + // aapt resource value: 0x7f08008e + public const int container = 2131230862; + + // aapt resource value: 0x7f080066 + public const int contentPanel = 2131230822; + + // aapt resource value: 0x7f08008f + public const int coordinator = 2131230863; + + // aapt resource value: 0x7f08006d + public const int custom = 2131230829; + + // aapt resource value: 0x7f08006c + public const int customPanel = 2131230828; + + // aapt resource value: 0x7f08007a + public const int decor_content_parent = 2131230842; + + // aapt resource value: 0x7f080060 + public const int default_activity_button = 2131230816; + + // aapt resource value: 0x7f080091 + public const int design_bottom_sheet = 2131230865; + + // aapt resource value: 0x7f080098 + public const int design_menu_item_action_area = 2131230872; + + // aapt resource value: 0x7f080097 + public const int design_menu_item_action_area_stub = 2131230871; + + // aapt resource value: 0x7f080096 + public const int design_menu_item_text = 2131230870; + + // aapt resource value: 0x7f080095 + public const int design_navigation_view = 2131230869; + + // aapt resource value: 0x7f080020 + public const int disableHome = 2131230752; + + // aapt resource value: 0x7f08007e + public const int edit_query = 2131230846; + + // aapt resource value: 0x7f080030 + public const int end = 2131230768; + + // aapt resource value: 0x7f0800ac + public const int end_padder = 2131230892; + + // aapt resource value: 0x7f08003f + public const int enterAlways = 2131230783; + + // aapt resource value: 0x7f080040 + public const int enterAlwaysCollapsed = 2131230784; + + // aapt resource value: 0x7f080041 + public const int exitUntilCollapsed = 2131230785; + + // aapt resource value: 0x7f08005e + public const int expand_activities_button = 2131230814; + + // aapt resource value: 0x7f080072 + public const int expanded_menu = 2131230834; + + // aapt resource value: 0x7f080050 + public const int fill = 2131230800; + + // aapt resource value: 0x7f080051 + public const int fill_horizontal = 2131230801; + + // aapt resource value: 0x7f080048 + public const int fill_vertical = 2131230792; + + // aapt resource value: 0x7f080054 + public const int @fixed = 2131230804; + + // aapt resource value: 0x7f080058 + public const int forever = 2131230808; + + // aapt resource value: 0x7f08008b + public const int gameView1 = 2131230859; + + // aapt resource value: 0x7f08000a + public const int ghost_view = 2131230730; + + // aapt resource value: 0x7f080005 + public const int home = 2131230725; + + // aapt resource value: 0x7f080021 + public const int homeAsUp = 2131230753; + + // aapt resource value: 0x7f080062 + public const int icon = 2131230818; + + // aapt resource value: 0x7f0800ab + public const int icon_group = 2131230891; + + // aapt resource value: 0x7f08003a + public const int ifRoom = 2131230778; + + // aapt resource value: 0x7f08005f + public const int image = 2131230815; + + // aapt resource value: 0x7f0800a7 + public const int info = 2131230887; + + // aapt resource value: 0x7f080059 + public const int italic = 2131230809; + + // aapt resource value: 0x7f080000 + public const int item_touch_helper_previous_elevation = 2131230720; + + // aapt resource value: 0x7f08008d + public const int largeLabel = 2131230861; + + // aapt resource value: 0x7f080049 + public const int left = 2131230793; + + // aapt resource value: 0x7f080017 + public const int line1 = 2131230743; + + // aapt resource value: 0x7f080018 + public const int line3 = 2131230744; + + // aapt resource value: 0x7f08001d + public const int listMode = 2131230749; + + // aapt resource value: 0x7f080061 + public const int list_item = 2131230817; + + // aapt resource value: 0x7f0800af + public const int masked = 2131230895; + + // aapt resource value: 0x7f0800a0 + public const int media_actions = 2131230880; + + // aapt resource value: 0x7f0800ad + public const int message = 2131230893; + + // aapt resource value: 0x7f080031 + public const int middle = 2131230769; + + // aapt resource value: 0x7f080053 + public const int mini = 2131230803; + + // aapt resource value: 0x7f080028 + public const int multiply = 2131230760; + + // aapt resource value: 0x7f080094 + public const int navigation_header_container = 2131230868; + + // aapt resource value: 0x7f08003b + public const int never = 2131230779; + + // aapt resource value: 0x7f080022 + public const int none = 2131230754; + + // aapt resource value: 0x7f08001e + public const int normal = 2131230750; + + // aapt resource value: 0x7f0800a9 + public const int notification_background = 2131230889; + + // aapt resource value: 0x7f0800a3 + public const int notification_main_column = 2131230883; + + // aapt resource value: 0x7f0800a2 + public const int notification_main_column_container = 2131230882; + + // aapt resource value: 0x7f08004c + public const int parallax = 2131230796; + + // aapt resource value: 0x7f080065 + public const int parentPanel = 2131230821; + + // aapt resource value: 0x7f08000b + public const int parent_matrix = 2131230731; + + // aapt resource value: 0x7f08004d + public const int pin = 2131230797; + + // aapt resource value: 0x7f080006 + public const int progress_circular = 2131230726; + + // aapt resource value: 0x7f080007 + public const int progress_horizontal = 2131230727; + + // aapt resource value: 0x7f080075 + public const int radio = 2131230837; + + // aapt resource value: 0x7f08004a + public const int right = 2131230794; + + // aapt resource value: 0x7f0800a8 + public const int right_icon = 2131230888; + + // aapt resource value: 0x7f0800a4 + public const int right_side = 2131230884; + + // aapt resource value: 0x7f08000c + public const int save_image_matrix = 2131230732; + + // aapt resource value: 0x7f08000d + public const int save_non_transition_alpha = 2131230733; + + // aapt resource value: 0x7f08000e + public const int save_scale_type = 2131230734; + + // aapt resource value: 0x7f080029 + public const int screen = 2131230761; + + // aapt resource value: 0x7f080042 + public const int scroll = 2131230786; + + // aapt resource value: 0x7f08006b + public const int scrollIndicatorDown = 2131230827; + + // aapt resource value: 0x7f080067 + public const int scrollIndicatorUp = 2131230823; + + // aapt resource value: 0x7f080068 + public const int scrollView = 2131230824; + + // aapt resource value: 0x7f080055 + public const int scrollable = 2131230805; + + // aapt resource value: 0x7f080080 + public const int search_badge = 2131230848; + + // aapt resource value: 0x7f08007f + public const int search_bar = 2131230847; + + // aapt resource value: 0x7f080081 + public const int search_button = 2131230849; + + // aapt resource value: 0x7f080086 + public const int search_close_btn = 2131230854; + + // aapt resource value: 0x7f080082 + public const int search_edit_frame = 2131230850; + + // aapt resource value: 0x7f080088 + public const int search_go_btn = 2131230856; + + // aapt resource value: 0x7f080083 + public const int search_mag_icon = 2131230851; + + // aapt resource value: 0x7f080084 + public const int search_plate = 2131230852; + + // aapt resource value: 0x7f080085 + public const int search_src_text = 2131230853; + + // aapt resource value: 0x7f080089 + public const int search_voice_btn = 2131230857; + + // aapt resource value: 0x7f08008a + public const int select_dialog_listview = 2131230858; + + // aapt resource value: 0x7f080074 + public const int shortcut = 2131230836; + + // aapt resource value: 0x7f080023 + public const int showCustom = 2131230755; + + // aapt resource value: 0x7f080024 + public const int showHome = 2131230756; + + // aapt resource value: 0x7f080025 + public const int showTitle = 2131230757; + + // aapt resource value: 0x7f08008c + public const int smallLabel = 2131230860; + + // aapt resource value: 0x7f080093 + public const int snackbar_action = 2131230867; + + // aapt resource value: 0x7f080092 + public const int snackbar_text = 2131230866; + + // aapt resource value: 0x7f080043 + public const int snap = 2131230787; + + // aapt resource value: 0x7f080064 + public const int spacer = 2131230820; + + // aapt resource value: 0x7f080008 + public const int split_action_bar = 2131230728; + + // aapt resource value: 0x7f08002a + public const int src_atop = 2131230762; + + // aapt resource value: 0x7f08002b + public const int src_in = 2131230763; + + // aapt resource value: 0x7f08002c + public const int src_over = 2131230764; + + // aapt resource value: 0x7f08004b + public const int start = 2131230795; + + // aapt resource value: 0x7f08009f + public const int status_bar_latest_event_content = 2131230879; + + // aapt resource value: 0x7f080076 + public const int submenuarrow = 2131230838; + + // aapt resource value: 0x7f080087 + public const int submit_area = 2131230855; + + // aapt resource value: 0x7f08001f + public const int tabMode = 2131230751; + + // aapt resource value: 0x7f080019 + public const int tag_transition_group = 2131230745; + + // aapt resource value: 0x7f08001a + public const int text = 2131230746; + + // aapt resource value: 0x7f08001b + public const int text2 = 2131230747; + + // aapt resource value: 0x7f08006a + public const int textSpacerNoButtons = 2131230826; + + // aapt resource value: 0x7f080069 + public const int textSpacerNoTitle = 2131230825; + + // aapt resource value: 0x7f080099 + public const int text_input_password_toggle = 2131230873; + + // aapt resource value: 0x7f080014 + public const int textinput_counter = 2131230740; + + // aapt resource value: 0x7f080015 + public const int textinput_error = 2131230741; + + // aapt resource value: 0x7f0800a5 + public const int time = 2131230885; + + // aapt resource value: 0x7f08001c + public const int title = 2131230748; + + // aapt resource value: 0x7f080071 + public const int titleDividerNoCustom = 2131230833; + + // aapt resource value: 0x7f08006f + public const int title_template = 2131230831; + + // aapt resource value: 0x7f08003e + public const int top = 2131230782; + + // aapt resource value: 0x7f08006e + public const int topPanel = 2131230830; + + // aapt resource value: 0x7f080090 + public const int touch_outside = 2131230864; + + // aapt resource value: 0x7f08000f + public const int transition_current_scene = 2131230735; + + // aapt resource value: 0x7f080010 + public const int transition_layout_save = 2131230736; + + // aapt resource value: 0x7f080011 + public const int transition_position = 2131230737; + + // aapt resource value: 0x7f080012 + public const int transition_scene_layoutid_cache = 2131230738; + + // aapt resource value: 0x7f080013 + public const int transition_transform = 2131230739; + + // aapt resource value: 0x7f08002d + public const int uniform = 2131230765; + + // aapt resource value: 0x7f080009 + public const int up = 2131230729; + + // aapt resource value: 0x7f080026 + public const int useLogo = 2131230758; + + // aapt resource value: 0x7f080016 + public const int view_offset_helper = 2131230742; + + // aapt resource value: 0x7f0800ae + public const int visible = 2131230894; + + // aapt resource value: 0x7f08003c + public const int withText = 2131230780; + + // aapt resource value: 0x7f08002e + public const int wrap_content = 2131230766; + + static Id() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Id() + { + } + } + + public partial class Integer + { + + // aapt resource value: 0x7f0d0000 + public const int abc_config_activityDefaultDur = 2131558400; + + // aapt resource value: 0x7f0d0001 + public const int abc_config_activityShortDur = 2131558401; + + // aapt resource value: 0x7f0d0005 + public const int app_bar_elevation_anim_duration = 2131558405; + + // aapt resource value: 0x7f0d0006 + public const int bottom_sheet_slide_duration = 2131558406; + + // aapt resource value: 0x7f0d0002 + public const int cancel_button_image_alpha = 2131558402; + + // aapt resource value: 0x7f0d0003 + public const int config_tooltipAnimTime = 2131558403; + + // aapt resource value: 0x7f0d0004 + public const int design_snackbar_text_max_lines = 2131558404; + + // aapt resource value: 0x7f0d0007 + public const int hide_password_duration = 2131558407; + + // aapt resource value: 0x7f0d0008 + public const int show_password_duration = 2131558408; + + // aapt resource value: 0x7f0d0009 + public const int status_bar_notification_info_maxnum = 2131558409; + + static Integer() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Integer() + { + } + } + + public partial class Layout + { + + // aapt resource value: 0x7f040000 + public const int abc_action_bar_title_item = 2130968576; + + // aapt resource value: 0x7f040001 + public const int abc_action_bar_up_container = 2130968577; + + // aapt resource value: 0x7f040002 + public const int abc_action_menu_item_layout = 2130968578; + + // aapt resource value: 0x7f040003 + public const int abc_action_menu_layout = 2130968579; + + // aapt resource value: 0x7f040004 + public const int abc_action_mode_bar = 2130968580; + + // aapt resource value: 0x7f040005 + public const int abc_action_mode_close_item_material = 2130968581; + + // aapt resource value: 0x7f040006 + public const int abc_activity_chooser_view = 2130968582; + + // aapt resource value: 0x7f040007 + public const int abc_activity_chooser_view_list_item = 2130968583; + + // aapt resource value: 0x7f040008 + public const int abc_alert_dialog_button_bar_material = 2130968584; + + // aapt resource value: 0x7f040009 + public const int abc_alert_dialog_material = 2130968585; + + // aapt resource value: 0x7f04000a + public const int abc_alert_dialog_title_material = 2130968586; + + // aapt resource value: 0x7f04000b + public const int abc_dialog_title_material = 2130968587; + + // aapt resource value: 0x7f04000c + public const int abc_expanded_menu_layout = 2130968588; + + // aapt resource value: 0x7f04000d + public const int abc_list_menu_item_checkbox = 2130968589; + + // aapt resource value: 0x7f04000e + public const int abc_list_menu_item_icon = 2130968590; + + // aapt resource value: 0x7f04000f + public const int abc_list_menu_item_layout = 2130968591; + + // aapt resource value: 0x7f040010 + public const int abc_list_menu_item_radio = 2130968592; + + // aapt resource value: 0x7f040011 + public const int abc_popup_menu_header_item_layout = 2130968593; + + // aapt resource value: 0x7f040012 + public const int abc_popup_menu_item_layout = 2130968594; + + // aapt resource value: 0x7f040013 + public const int abc_screen_content_include = 2130968595; + + // aapt resource value: 0x7f040014 + public const int abc_screen_simple = 2130968596; + + // aapt resource value: 0x7f040015 + public const int abc_screen_simple_overlay_action_mode = 2130968597; + + // aapt resource value: 0x7f040016 + public const int abc_screen_toolbar = 2130968598; + + // aapt resource value: 0x7f040017 + public const int abc_search_dropdown_item_icons_2line = 2130968599; + + // aapt resource value: 0x7f040018 + public const int abc_search_view = 2130968600; + + // aapt resource value: 0x7f040019 + public const int abc_select_dialog_material = 2130968601; + + // aapt resource value: 0x7f04001a + public const int activity_main = 2130968602; + + // aapt resource value: 0x7f04001b + public const int design_bottom_navigation_item = 2130968603; + + // aapt resource value: 0x7f04001c + public const int design_bottom_sheet_dialog = 2130968604; + + // aapt resource value: 0x7f04001d + public const int design_layout_snackbar = 2130968605; + + // aapt resource value: 0x7f04001e + public const int design_layout_snackbar_include = 2130968606; + + // aapt resource value: 0x7f04001f + public const int design_layout_tab_icon = 2130968607; + + // aapt resource value: 0x7f040020 + public const int design_layout_tab_text = 2130968608; + + // aapt resource value: 0x7f040021 + public const int design_menu_item_action_area = 2130968609; + + // aapt resource value: 0x7f040022 + public const int design_navigation_item = 2130968610; + + // aapt resource value: 0x7f040023 + public const int design_navigation_item_header = 2130968611; + + // aapt resource value: 0x7f040024 + public const int design_navigation_item_separator = 2130968612; + + // aapt resource value: 0x7f040025 + public const int design_navigation_item_subheader = 2130968613; + + // aapt resource value: 0x7f040026 + public const int design_navigation_menu = 2130968614; + + // aapt resource value: 0x7f040027 + public const int design_navigation_menu_item = 2130968615; + + // aapt resource value: 0x7f040028 + public const int design_text_input_password_icon = 2130968616; + + // aapt resource value: 0x7f040029 + public const int notification_action = 2130968617; + + // aapt resource value: 0x7f04002a + public const int notification_action_tombstone = 2130968618; + + // aapt resource value: 0x7f04002b + public const int notification_media_action = 2130968619; + + // aapt resource value: 0x7f04002c + public const int notification_media_cancel_action = 2130968620; + + // aapt resource value: 0x7f04002d + public const int notification_template_big_media = 2130968621; + + // aapt resource value: 0x7f04002e + public const int notification_template_big_media_custom = 2130968622; + + // aapt resource value: 0x7f04002f + public const int notification_template_big_media_narrow = 2130968623; + + // aapt resource value: 0x7f040030 + public const int notification_template_big_media_narrow_custom = 2130968624; + + // aapt resource value: 0x7f040031 + public const int notification_template_custom_big = 2130968625; + + // aapt resource value: 0x7f040032 + public const int notification_template_icon_group = 2130968626; + + // aapt resource value: 0x7f040033 + public const int notification_template_lines_media = 2130968627; + + // aapt resource value: 0x7f040034 + public const int notification_template_media = 2130968628; + + // aapt resource value: 0x7f040035 + public const int notification_template_media_custom = 2130968629; + + // aapt resource value: 0x7f040036 + public const int notification_template_part_chronometer = 2130968630; + + // aapt resource value: 0x7f040037 + public const int notification_template_part_time = 2130968631; + + // aapt resource value: 0x7f040038 + public const int select_dialog_item_material = 2130968632; + + // aapt resource value: 0x7f040039 + public const int select_dialog_multichoice_material = 2130968633; + + // aapt resource value: 0x7f04003a + public const int select_dialog_singlechoice_material = 2130968634; + + // aapt resource value: 0x7f04003b + public const int support_simple_spinner_dropdown_item = 2130968635; + + // aapt resource value: 0x7f04003c + public const int tooltip = 2130968636; + + static Layout() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Layout() + { + } + } + + public partial class Mipmap + { + + // aapt resource value: 0x7f030000 + public const int ic_launcher = 2130903040; + + // aapt resource value: 0x7f030001 + public const int ic_launcher_foreground = 2130903041; + + // aapt resource value: 0x7f030002 + public const int ic_launcher_round = 2130903042; + + static Mipmap() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Mipmap() + { + } + } + + public partial class String + { + + // aapt resource value: 0x7f090000 + public const int abc_action_bar_home_description = 2131296256; + + // aapt resource value: 0x7f090001 + public const int abc_action_bar_up_description = 2131296257; + + // aapt resource value: 0x7f090002 + public const int abc_action_menu_overflow_description = 2131296258; + + // aapt resource value: 0x7f090003 + public const int abc_action_mode_done = 2131296259; + + // aapt resource value: 0x7f090004 + public const int abc_activity_chooser_view_see_all = 2131296260; + + // aapt resource value: 0x7f090005 + public const int abc_activitychooserview_choose_application = 2131296261; + + // aapt resource value: 0x7f090006 + public const int abc_capital_off = 2131296262; + + // aapt resource value: 0x7f090007 + public const int abc_capital_on = 2131296263; + + // aapt resource value: 0x7f090012 + public const int abc_font_family_body_1_material = 2131296274; + + // aapt resource value: 0x7f090013 + public const int abc_font_family_body_2_material = 2131296275; + + // aapt resource value: 0x7f090014 + public const int abc_font_family_button_material = 2131296276; + + // aapt resource value: 0x7f090015 + public const int abc_font_family_caption_material = 2131296277; + + // aapt resource value: 0x7f090016 + public const int abc_font_family_display_1_material = 2131296278; + + // aapt resource value: 0x7f090017 + public const int abc_font_family_display_2_material = 2131296279; + + // aapt resource value: 0x7f090018 + public const int abc_font_family_display_3_material = 2131296280; + + // aapt resource value: 0x7f090019 + public const int abc_font_family_display_4_material = 2131296281; + + // aapt resource value: 0x7f09001a + public const int abc_font_family_headline_material = 2131296282; + + // aapt resource value: 0x7f09001b + public const int abc_font_family_menu_material = 2131296283; + + // aapt resource value: 0x7f09001c + public const int abc_font_family_subhead_material = 2131296284; + + // aapt resource value: 0x7f09001d + public const int abc_font_family_title_material = 2131296285; + + // aapt resource value: 0x7f090008 + public const int abc_search_hint = 2131296264; + + // aapt resource value: 0x7f090009 + public const int abc_searchview_description_clear = 2131296265; + + // aapt resource value: 0x7f09000a + public const int abc_searchview_description_query = 2131296266; + + // aapt resource value: 0x7f09000b + public const int abc_searchview_description_search = 2131296267; + + // aapt resource value: 0x7f09000c + public const int abc_searchview_description_submit = 2131296268; + + // aapt resource value: 0x7f09000d + public const int abc_searchview_description_voice = 2131296269; + + // aapt resource value: 0x7f09000e + public const int abc_shareactionprovider_share_with = 2131296270; + + // aapt resource value: 0x7f09000f + public const int abc_shareactionprovider_share_with_application = 2131296271; + + // aapt resource value: 0x7f090010 + public const int abc_toolbar_collapse_description = 2131296272; + + // aapt resource value: 0x7f090028 + public const int action_settings = 2131296296; + + // aapt resource value: 0x7f090027 + public const int app_name = 2131296295; + + // aapt resource value: 0x7f09001e + public const int appbar_scrolling_view_behavior = 2131296286; + + // aapt resource value: 0x7f09001f + public const int bottom_sheet_behavior = 2131296287; + + // aapt resource value: 0x7f090020 + public const int character_counter_pattern = 2131296288; + + // aapt resource value: 0x7f090021 + public const int password_toggle_content_description = 2131296289; + + // aapt resource value: 0x7f090022 + public const int path_password_eye = 2131296290; + + // aapt resource value: 0x7f090023 + public const int path_password_eye_mask_strike_through = 2131296291; + + // aapt resource value: 0x7f090024 + public const int path_password_eye_mask_visible = 2131296292; + + // aapt resource value: 0x7f090025 + public const int path_password_strike_through = 2131296293; + + // aapt resource value: 0x7f090011 + public const int search_menu_title = 2131296273; + + // aapt resource value: 0x7f090026 + public const int status_bar_notification_info_overflow = 2131296294; + + static String() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private String() + { + } + } + + public partial class Style + { + + // aapt resource value: 0x7f0a0095 + public const int AlertDialog_AppCompat = 2131361941; + + // aapt resource value: 0x7f0a0096 + public const int AlertDialog_AppCompat_Light = 2131361942; + + // aapt resource value: 0x7f0a0097 + public const int Animation_AppCompat_Dialog = 2131361943; + + // aapt resource value: 0x7f0a0098 + public const int Animation_AppCompat_DropDownUp = 2131361944; + + // aapt resource value: 0x7f0a0099 + public const int Animation_AppCompat_Tooltip = 2131361945; + + // aapt resource value: 0x7f0a015f + public const int Animation_Design_BottomSheetDialog = 2131362143; + + // aapt resource value: 0x7f0a0180 + public const int AppTheme = 2131362176; + + // aapt resource value: 0x7f0a009a + public const int Base_AlertDialog_AppCompat = 2131361946; + + // aapt resource value: 0x7f0a009b + public const int Base_AlertDialog_AppCompat_Light = 2131361947; + + // aapt resource value: 0x7f0a009c + public const int Base_Animation_AppCompat_Dialog = 2131361948; + + // aapt resource value: 0x7f0a009d + public const int Base_Animation_AppCompat_DropDownUp = 2131361949; + + // aapt resource value: 0x7f0a009e + public const int Base_Animation_AppCompat_Tooltip = 2131361950; + + // aapt resource value: 0x7f0a009f + public const int Base_DialogWindowTitle_AppCompat = 2131361951; + + // aapt resource value: 0x7f0a00a0 + public const int Base_DialogWindowTitleBackground_AppCompat = 2131361952; + + // aapt resource value: 0x7f0a0039 + public const int Base_TextAppearance_AppCompat = 2131361849; + + // aapt resource value: 0x7f0a003a + public const int Base_TextAppearance_AppCompat_Body1 = 2131361850; + + // aapt resource value: 0x7f0a003b + public const int Base_TextAppearance_AppCompat_Body2 = 2131361851; + + // aapt resource value: 0x7f0a0027 + public const int Base_TextAppearance_AppCompat_Button = 2131361831; + + // aapt resource value: 0x7f0a003c + public const int Base_TextAppearance_AppCompat_Caption = 2131361852; + + // aapt resource value: 0x7f0a003d + public const int Base_TextAppearance_AppCompat_Display1 = 2131361853; + + // aapt resource value: 0x7f0a003e + public const int Base_TextAppearance_AppCompat_Display2 = 2131361854; + + // aapt resource value: 0x7f0a003f + public const int Base_TextAppearance_AppCompat_Display3 = 2131361855; + + // aapt resource value: 0x7f0a0040 + public const int Base_TextAppearance_AppCompat_Display4 = 2131361856; + + // aapt resource value: 0x7f0a0041 + public const int Base_TextAppearance_AppCompat_Headline = 2131361857; + + // aapt resource value: 0x7f0a000b + public const int Base_TextAppearance_AppCompat_Inverse = 2131361803; + + // aapt resource value: 0x7f0a0042 + public const int Base_TextAppearance_AppCompat_Large = 2131361858; + + // aapt resource value: 0x7f0a000c + public const int Base_TextAppearance_AppCompat_Large_Inverse = 2131361804; + + // aapt resource value: 0x7f0a0043 + public const int Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = 2131361859; + + // aapt resource value: 0x7f0a0044 + public const int Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = 2131361860; + + // aapt resource value: 0x7f0a0045 + public const int Base_TextAppearance_AppCompat_Medium = 2131361861; + + // aapt resource value: 0x7f0a000d + public const int Base_TextAppearance_AppCompat_Medium_Inverse = 2131361805; + + // aapt resource value: 0x7f0a0046 + public const int Base_TextAppearance_AppCompat_Menu = 2131361862; + + // aapt resource value: 0x7f0a00a1 + public const int Base_TextAppearance_AppCompat_SearchResult = 2131361953; + + // aapt resource value: 0x7f0a0047 + public const int Base_TextAppearance_AppCompat_SearchResult_Subtitle = 2131361863; + + // aapt resource value: 0x7f0a0048 + public const int Base_TextAppearance_AppCompat_SearchResult_Title = 2131361864; + + // aapt resource value: 0x7f0a0049 + public const int Base_TextAppearance_AppCompat_Small = 2131361865; + + // aapt resource value: 0x7f0a000e + public const int Base_TextAppearance_AppCompat_Small_Inverse = 2131361806; + + // aapt resource value: 0x7f0a004a + public const int Base_TextAppearance_AppCompat_Subhead = 2131361866; + + // aapt resource value: 0x7f0a000f + public const int Base_TextAppearance_AppCompat_Subhead_Inverse = 2131361807; + + // aapt resource value: 0x7f0a004b + public const int Base_TextAppearance_AppCompat_Title = 2131361867; + + // aapt resource value: 0x7f0a0010 + public const int Base_TextAppearance_AppCompat_Title_Inverse = 2131361808; + + // aapt resource value: 0x7f0a00a2 + public const int Base_TextAppearance_AppCompat_Tooltip = 2131361954; + + // aapt resource value: 0x7f0a0086 + public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Menu = 2131361926; + + // aapt resource value: 0x7f0a004c + public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle = 2131361868; + + // aapt resource value: 0x7f0a004d + public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = 2131361869; + + // aapt resource value: 0x7f0a004e + public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Title = 2131361870; + + // aapt resource value: 0x7f0a004f + public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = 2131361871; + + // aapt resource value: 0x7f0a0050 + public const int Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle = 2131361872; + + // aapt resource value: 0x7f0a0051 + public const int Base_TextAppearance_AppCompat_Widget_ActionMode_Title = 2131361873; + + // aapt resource value: 0x7f0a0052 + public const int Base_TextAppearance_AppCompat_Widget_Button = 2131361874; + + // aapt resource value: 0x7f0a008d + public const int Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored = 2131361933; + + // aapt resource value: 0x7f0a008e + public const int Base_TextAppearance_AppCompat_Widget_Button_Colored = 2131361934; + + // aapt resource value: 0x7f0a0087 + public const int Base_TextAppearance_AppCompat_Widget_Button_Inverse = 2131361927; + + // aapt resource value: 0x7f0a00a3 + public const int Base_TextAppearance_AppCompat_Widget_DropDownItem = 2131361955; + + // aapt resource value: 0x7f0a0053 + public const int Base_TextAppearance_AppCompat_Widget_PopupMenu_Header = 2131361875; + + // aapt resource value: 0x7f0a0054 + public const int Base_TextAppearance_AppCompat_Widget_PopupMenu_Large = 2131361876; + + // aapt resource value: 0x7f0a0055 + public const int Base_TextAppearance_AppCompat_Widget_PopupMenu_Small = 2131361877; + + // aapt resource value: 0x7f0a0056 + public const int Base_TextAppearance_AppCompat_Widget_Switch = 2131361878; + + // aapt resource value: 0x7f0a0057 + public const int Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem = 2131361879; + + // aapt resource value: 0x7f0a00a4 + public const int Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item = 2131361956; + + // aapt resource value: 0x7f0a0058 + public const int Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle = 2131361880; + + // aapt resource value: 0x7f0a0059 + public const int Base_TextAppearance_Widget_AppCompat_Toolbar_Title = 2131361881; + + // aapt resource value: 0x7f0a005a + public const int Base_Theme_AppCompat = 2131361882; + + // aapt resource value: 0x7f0a00a5 + public const int Base_Theme_AppCompat_CompactMenu = 2131361957; + + // aapt resource value: 0x7f0a0011 + public const int Base_Theme_AppCompat_Dialog = 2131361809; + + // aapt resource value: 0x7f0a0012 + public const int Base_Theme_AppCompat_Dialog_Alert = 2131361810; + + // aapt resource value: 0x7f0a00a6 + public const int Base_Theme_AppCompat_Dialog_FixedSize = 2131361958; + + // aapt resource value: 0x7f0a0013 + public const int Base_Theme_AppCompat_Dialog_MinWidth = 2131361811; + + // aapt resource value: 0x7f0a0001 + public const int Base_Theme_AppCompat_DialogWhenLarge = 2131361793; + + // aapt resource value: 0x7f0a005b + public const int Base_Theme_AppCompat_Light = 2131361883; + + // aapt resource value: 0x7f0a00a7 + public const int Base_Theme_AppCompat_Light_DarkActionBar = 2131361959; + + // aapt resource value: 0x7f0a0014 + public const int Base_Theme_AppCompat_Light_Dialog = 2131361812; + + // aapt resource value: 0x7f0a0015 + public const int Base_Theme_AppCompat_Light_Dialog_Alert = 2131361813; + + // aapt resource value: 0x7f0a00a8 + public const int Base_Theme_AppCompat_Light_Dialog_FixedSize = 2131361960; + + // aapt resource value: 0x7f0a0016 + public const int Base_Theme_AppCompat_Light_Dialog_MinWidth = 2131361814; + + // aapt resource value: 0x7f0a0002 + public const int Base_Theme_AppCompat_Light_DialogWhenLarge = 2131361794; + + // aapt resource value: 0x7f0a00a9 + public const int Base_ThemeOverlay_AppCompat = 2131361961; + + // aapt resource value: 0x7f0a00aa + public const int Base_ThemeOverlay_AppCompat_ActionBar = 2131361962; + + // aapt resource value: 0x7f0a00ab + public const int Base_ThemeOverlay_AppCompat_Dark = 2131361963; + + // aapt resource value: 0x7f0a00ac + public const int Base_ThemeOverlay_AppCompat_Dark_ActionBar = 2131361964; + + // aapt resource value: 0x7f0a0017 + public const int Base_ThemeOverlay_AppCompat_Dialog = 2131361815; + + // aapt resource value: 0x7f0a0018 + public const int Base_ThemeOverlay_AppCompat_Dialog_Alert = 2131361816; + + // aapt resource value: 0x7f0a00ad + public const int Base_ThemeOverlay_AppCompat_Light = 2131361965; + + // aapt resource value: 0x7f0a0019 + public const int Base_V11_Theme_AppCompat_Dialog = 2131361817; + + // aapt resource value: 0x7f0a001a + public const int Base_V11_Theme_AppCompat_Light_Dialog = 2131361818; + + // aapt resource value: 0x7f0a001b + public const int Base_V11_ThemeOverlay_AppCompat_Dialog = 2131361819; + + // aapt resource value: 0x7f0a0023 + public const int Base_V12_Widget_AppCompat_AutoCompleteTextView = 2131361827; + + // aapt resource value: 0x7f0a0024 + public const int Base_V12_Widget_AppCompat_EditText = 2131361828; + + // aapt resource value: 0x7f0a0160 + public const int Base_V14_Widget_Design_AppBarLayout = 2131362144; + + // aapt resource value: 0x7f0a005c + public const int Base_V21_Theme_AppCompat = 2131361884; + + // aapt resource value: 0x7f0a005d + public const int Base_V21_Theme_AppCompat_Dialog = 2131361885; + + // aapt resource value: 0x7f0a005e + public const int Base_V21_Theme_AppCompat_Light = 2131361886; + + // aapt resource value: 0x7f0a005f + public const int Base_V21_Theme_AppCompat_Light_Dialog = 2131361887; + + // aapt resource value: 0x7f0a0060 + public const int Base_V21_ThemeOverlay_AppCompat_Dialog = 2131361888; + + // aapt resource value: 0x7f0a015c + public const int Base_V21_Widget_Design_AppBarLayout = 2131362140; + + // aapt resource value: 0x7f0a0084 + public const int Base_V22_Theme_AppCompat = 2131361924; + + // aapt resource value: 0x7f0a0085 + public const int Base_V22_Theme_AppCompat_Light = 2131361925; + + // aapt resource value: 0x7f0a0088 + public const int Base_V23_Theme_AppCompat = 2131361928; + + // aapt resource value: 0x7f0a0089 + public const int Base_V23_Theme_AppCompat_Light = 2131361929; + + // aapt resource value: 0x7f0a0091 + public const int Base_V26_Theme_AppCompat = 2131361937; + + // aapt resource value: 0x7f0a0092 + public const int Base_V26_Theme_AppCompat_Light = 2131361938; + + // aapt resource value: 0x7f0a0093 + public const int Base_V26_Widget_AppCompat_Toolbar = 2131361939; + + // aapt resource value: 0x7f0a015e + public const int Base_V26_Widget_Design_AppBarLayout = 2131362142; + + // aapt resource value: 0x7f0a00ae + public const int Base_V7_Theme_AppCompat = 2131361966; + + // aapt resource value: 0x7f0a00af + public const int Base_V7_Theme_AppCompat_Dialog = 2131361967; + + // aapt resource value: 0x7f0a00b0 + public const int Base_V7_Theme_AppCompat_Light = 2131361968; + + // aapt resource value: 0x7f0a00b1 + public const int Base_V7_Theme_AppCompat_Light_Dialog = 2131361969; + + // aapt resource value: 0x7f0a00b2 + public const int Base_V7_ThemeOverlay_AppCompat_Dialog = 2131361970; + + // aapt resource value: 0x7f0a00b3 + public const int Base_V7_Widget_AppCompat_AutoCompleteTextView = 2131361971; + + // aapt resource value: 0x7f0a00b4 + public const int Base_V7_Widget_AppCompat_EditText = 2131361972; + + // aapt resource value: 0x7f0a00b5 + public const int Base_V7_Widget_AppCompat_Toolbar = 2131361973; + + // aapt resource value: 0x7f0a00b6 + public const int Base_Widget_AppCompat_ActionBar = 2131361974; + + // aapt resource value: 0x7f0a00b7 + public const int Base_Widget_AppCompat_ActionBar_Solid = 2131361975; + + // aapt resource value: 0x7f0a00b8 + public const int Base_Widget_AppCompat_ActionBar_TabBar = 2131361976; + + // aapt resource value: 0x7f0a0061 + public const int Base_Widget_AppCompat_ActionBar_TabText = 2131361889; + + // aapt resource value: 0x7f0a0062 + public const int Base_Widget_AppCompat_ActionBar_TabView = 2131361890; + + // aapt resource value: 0x7f0a0063 + public const int Base_Widget_AppCompat_ActionButton = 2131361891; + + // aapt resource value: 0x7f0a0064 + public const int Base_Widget_AppCompat_ActionButton_CloseMode = 2131361892; + + // aapt resource value: 0x7f0a0065 + public const int Base_Widget_AppCompat_ActionButton_Overflow = 2131361893; + + // aapt resource value: 0x7f0a00b9 + public const int Base_Widget_AppCompat_ActionMode = 2131361977; + + // aapt resource value: 0x7f0a00ba + public const int Base_Widget_AppCompat_ActivityChooserView = 2131361978; + + // aapt resource value: 0x7f0a0025 + public const int Base_Widget_AppCompat_AutoCompleteTextView = 2131361829; + + // aapt resource value: 0x7f0a0066 + public const int Base_Widget_AppCompat_Button = 2131361894; + + // aapt resource value: 0x7f0a0067 + public const int Base_Widget_AppCompat_Button_Borderless = 2131361895; + + // aapt resource value: 0x7f0a0068 + public const int Base_Widget_AppCompat_Button_Borderless_Colored = 2131361896; + + // aapt resource value: 0x7f0a00bb + public const int Base_Widget_AppCompat_Button_ButtonBar_AlertDialog = 2131361979; + + // aapt resource value: 0x7f0a008a + public const int Base_Widget_AppCompat_Button_Colored = 2131361930; + + // aapt resource value: 0x7f0a0069 + public const int Base_Widget_AppCompat_Button_Small = 2131361897; + + // aapt resource value: 0x7f0a006a + public const int Base_Widget_AppCompat_ButtonBar = 2131361898; + + // aapt resource value: 0x7f0a00bc + public const int Base_Widget_AppCompat_ButtonBar_AlertDialog = 2131361980; + + // aapt resource value: 0x7f0a006b + public const int Base_Widget_AppCompat_CompoundButton_CheckBox = 2131361899; + + // aapt resource value: 0x7f0a006c + public const int Base_Widget_AppCompat_CompoundButton_RadioButton = 2131361900; + + // aapt resource value: 0x7f0a00bd + public const int Base_Widget_AppCompat_CompoundButton_Switch = 2131361981; + + // aapt resource value: 0x7f0a0000 + public const int Base_Widget_AppCompat_DrawerArrowToggle = 2131361792; + + // aapt resource value: 0x7f0a00be + public const int Base_Widget_AppCompat_DrawerArrowToggle_Common = 2131361982; + + // aapt resource value: 0x7f0a006d + public const int Base_Widget_AppCompat_DropDownItem_Spinner = 2131361901; + + // aapt resource value: 0x7f0a0026 + public const int Base_Widget_AppCompat_EditText = 2131361830; + + // aapt resource value: 0x7f0a006e + public const int Base_Widget_AppCompat_ImageButton = 2131361902; + + // aapt resource value: 0x7f0a00bf + public const int Base_Widget_AppCompat_Light_ActionBar = 2131361983; + + // aapt resource value: 0x7f0a00c0 + public const int Base_Widget_AppCompat_Light_ActionBar_Solid = 2131361984; + + // aapt resource value: 0x7f0a00c1 + public const int Base_Widget_AppCompat_Light_ActionBar_TabBar = 2131361985; + + // aapt resource value: 0x7f0a006f + public const int Base_Widget_AppCompat_Light_ActionBar_TabText = 2131361903; + + // aapt resource value: 0x7f0a0070 + public const int Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse = 2131361904; + + // aapt resource value: 0x7f0a0071 + public const int Base_Widget_AppCompat_Light_ActionBar_TabView = 2131361905; + + // aapt resource value: 0x7f0a0072 + public const int Base_Widget_AppCompat_Light_PopupMenu = 2131361906; + + // aapt resource value: 0x7f0a0073 + public const int Base_Widget_AppCompat_Light_PopupMenu_Overflow = 2131361907; + + // aapt resource value: 0x7f0a00c2 + public const int Base_Widget_AppCompat_ListMenuView = 2131361986; + + // aapt resource value: 0x7f0a0074 + public const int Base_Widget_AppCompat_ListPopupWindow = 2131361908; + + // aapt resource value: 0x7f0a0075 + public const int Base_Widget_AppCompat_ListView = 2131361909; + + // aapt resource value: 0x7f0a0076 + public const int Base_Widget_AppCompat_ListView_DropDown = 2131361910; + + // aapt resource value: 0x7f0a0077 + public const int Base_Widget_AppCompat_ListView_Menu = 2131361911; + + // aapt resource value: 0x7f0a0078 + public const int Base_Widget_AppCompat_PopupMenu = 2131361912; + + // aapt resource value: 0x7f0a0079 + public const int Base_Widget_AppCompat_PopupMenu_Overflow = 2131361913; + + // aapt resource value: 0x7f0a00c3 + public const int Base_Widget_AppCompat_PopupWindow = 2131361987; + + // aapt resource value: 0x7f0a001c + public const int Base_Widget_AppCompat_ProgressBar = 2131361820; + + // aapt resource value: 0x7f0a001d + public const int Base_Widget_AppCompat_ProgressBar_Horizontal = 2131361821; + + // aapt resource value: 0x7f0a007a + public const int Base_Widget_AppCompat_RatingBar = 2131361914; + + // aapt resource value: 0x7f0a008b + public const int Base_Widget_AppCompat_RatingBar_Indicator = 2131361931; + + // aapt resource value: 0x7f0a008c + public const int Base_Widget_AppCompat_RatingBar_Small = 2131361932; + + // aapt resource value: 0x7f0a00c4 + public const int Base_Widget_AppCompat_SearchView = 2131361988; + + // aapt resource value: 0x7f0a00c5 + public const int Base_Widget_AppCompat_SearchView_ActionBar = 2131361989; + + // aapt resource value: 0x7f0a007b + public const int Base_Widget_AppCompat_SeekBar = 2131361915; + + // aapt resource value: 0x7f0a00c6 + public const int Base_Widget_AppCompat_SeekBar_Discrete = 2131361990; + + // aapt resource value: 0x7f0a007c + public const int Base_Widget_AppCompat_Spinner = 2131361916; + + // aapt resource value: 0x7f0a0003 + public const int Base_Widget_AppCompat_Spinner_Underlined = 2131361795; + + // aapt resource value: 0x7f0a007d + public const int Base_Widget_AppCompat_TextView_SpinnerItem = 2131361917; + + // aapt resource value: 0x7f0a0094 + public const int Base_Widget_AppCompat_Toolbar = 2131361940; + + // aapt resource value: 0x7f0a007e + public const int Base_Widget_AppCompat_Toolbar_Button_Navigation = 2131361918; + + // aapt resource value: 0x7f0a015d + public const int Base_Widget_Design_AppBarLayout = 2131362141; + + // aapt resource value: 0x7f0a0161 + public const int Base_Widget_Design_TabLayout = 2131362145; + + // aapt resource value: 0x7f0a001e + public const int Platform_AppCompat = 2131361822; + + // aapt resource value: 0x7f0a001f + public const int Platform_AppCompat_Light = 2131361823; + + // aapt resource value: 0x7f0a007f + public const int Platform_ThemeOverlay_AppCompat = 2131361919; + + // aapt resource value: 0x7f0a0080 + public const int Platform_ThemeOverlay_AppCompat_Dark = 2131361920; + + // aapt resource value: 0x7f0a0081 + public const int Platform_ThemeOverlay_AppCompat_Light = 2131361921; + + // aapt resource value: 0x7f0a0020 + public const int Platform_V11_AppCompat = 2131361824; + + // aapt resource value: 0x7f0a0021 + public const int Platform_V11_AppCompat_Light = 2131361825; + + // aapt resource value: 0x7f0a0028 + public const int Platform_V14_AppCompat = 2131361832; + + // aapt resource value: 0x7f0a0029 + public const int Platform_V14_AppCompat_Light = 2131361833; + + // aapt resource value: 0x7f0a0082 + public const int Platform_V21_AppCompat = 2131361922; + + // aapt resource value: 0x7f0a0083 + public const int Platform_V21_AppCompat_Light = 2131361923; + + // aapt resource value: 0x7f0a008f + public const int Platform_V25_AppCompat = 2131361935; + + // aapt resource value: 0x7f0a0090 + public const int Platform_V25_AppCompat_Light = 2131361936; + + // aapt resource value: 0x7f0a0022 + public const int Platform_Widget_AppCompat_Spinner = 2131361826; + + // aapt resource value: 0x7f0a002b + public const int RtlOverlay_DialogWindowTitle_AppCompat = 2131361835; + + // aapt resource value: 0x7f0a002c + public const int RtlOverlay_Widget_AppCompat_ActionBar_TitleItem = 2131361836; + + // aapt resource value: 0x7f0a002d + public const int RtlOverlay_Widget_AppCompat_DialogTitle_Icon = 2131361837; + + // aapt resource value: 0x7f0a002e + public const int RtlOverlay_Widget_AppCompat_PopupMenuItem = 2131361838; + + // aapt resource value: 0x7f0a002f + public const int RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup = 2131361839; + + // aapt resource value: 0x7f0a0030 + public const int RtlOverlay_Widget_AppCompat_PopupMenuItem_Text = 2131361840; + + // aapt resource value: 0x7f0a0031 + public const int RtlOverlay_Widget_AppCompat_Search_DropDown = 2131361841; + + // aapt resource value: 0x7f0a0032 + public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 = 2131361842; + + // aapt resource value: 0x7f0a0033 + public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 = 2131361843; + + // aapt resource value: 0x7f0a0034 + public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Query = 2131361844; + + // aapt resource value: 0x7f0a0035 + public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Text = 2131361845; + + // aapt resource value: 0x7f0a0036 + public const int RtlOverlay_Widget_AppCompat_SearchView_MagIcon = 2131361846; + + // aapt resource value: 0x7f0a0037 + public const int RtlUnderlay_Widget_AppCompat_ActionButton = 2131361847; + + // aapt resource value: 0x7f0a0038 + public const int RtlUnderlay_Widget_AppCompat_ActionButton_Overflow = 2131361848; + + // aapt resource value: 0x7f0a00c7 + public const int TextAppearance_AppCompat = 2131361991; + + // aapt resource value: 0x7f0a00c8 + public const int TextAppearance_AppCompat_Body1 = 2131361992; + + // aapt resource value: 0x7f0a00c9 + public const int TextAppearance_AppCompat_Body2 = 2131361993; + + // aapt resource value: 0x7f0a00ca + public const int TextAppearance_AppCompat_Button = 2131361994; + + // aapt resource value: 0x7f0a00cb + public const int TextAppearance_AppCompat_Caption = 2131361995; + + // aapt resource value: 0x7f0a00cc + public const int TextAppearance_AppCompat_Display1 = 2131361996; + + // aapt resource value: 0x7f0a00cd + public const int TextAppearance_AppCompat_Display2 = 2131361997; + + // aapt resource value: 0x7f0a00ce + public const int TextAppearance_AppCompat_Display3 = 2131361998; + + // aapt resource value: 0x7f0a00cf + public const int TextAppearance_AppCompat_Display4 = 2131361999; + + // aapt resource value: 0x7f0a00d0 + public const int TextAppearance_AppCompat_Headline = 2131362000; + + // aapt resource value: 0x7f0a00d1 + public const int TextAppearance_AppCompat_Inverse = 2131362001; + + // aapt resource value: 0x7f0a00d2 + public const int TextAppearance_AppCompat_Large = 2131362002; + + // aapt resource value: 0x7f0a00d3 + public const int TextAppearance_AppCompat_Large_Inverse = 2131362003; + + // aapt resource value: 0x7f0a00d4 + public const int TextAppearance_AppCompat_Light_SearchResult_Subtitle = 2131362004; + + // aapt resource value: 0x7f0a00d5 + public const int TextAppearance_AppCompat_Light_SearchResult_Title = 2131362005; + + // aapt resource value: 0x7f0a00d6 + public const int TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = 2131362006; + + // aapt resource value: 0x7f0a00d7 + public const int TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = 2131362007; + + // aapt resource value: 0x7f0a00d8 + public const int TextAppearance_AppCompat_Medium = 2131362008; + + // aapt resource value: 0x7f0a00d9 + public const int TextAppearance_AppCompat_Medium_Inverse = 2131362009; + + // aapt resource value: 0x7f0a00da + public const int TextAppearance_AppCompat_Menu = 2131362010; + + // aapt resource value: 0x7f0a00db + public const int TextAppearance_AppCompat_SearchResult_Subtitle = 2131362011; + + // aapt resource value: 0x7f0a00dc + public const int TextAppearance_AppCompat_SearchResult_Title = 2131362012; + + // aapt resource value: 0x7f0a00dd + public const int TextAppearance_AppCompat_Small = 2131362013; + + // aapt resource value: 0x7f0a00de + public const int TextAppearance_AppCompat_Small_Inverse = 2131362014; + + // aapt resource value: 0x7f0a00df + public const int TextAppearance_AppCompat_Subhead = 2131362015; + + // aapt resource value: 0x7f0a00e0 + public const int TextAppearance_AppCompat_Subhead_Inverse = 2131362016; + + // aapt resource value: 0x7f0a00e1 + public const int TextAppearance_AppCompat_Title = 2131362017; + + // aapt resource value: 0x7f0a00e2 + public const int TextAppearance_AppCompat_Title_Inverse = 2131362018; + + // aapt resource value: 0x7f0a002a + public const int TextAppearance_AppCompat_Tooltip = 2131361834; + + // aapt resource value: 0x7f0a00e3 + public const int TextAppearance_AppCompat_Widget_ActionBar_Menu = 2131362019; + + // aapt resource value: 0x7f0a00e4 + public const int TextAppearance_AppCompat_Widget_ActionBar_Subtitle = 2131362020; + + // aapt resource value: 0x7f0a00e5 + public const int TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = 2131362021; + + // aapt resource value: 0x7f0a00e6 + public const int TextAppearance_AppCompat_Widget_ActionBar_Title = 2131362022; + + // aapt resource value: 0x7f0a00e7 + public const int TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = 2131362023; + + // aapt resource value: 0x7f0a00e8 + public const int TextAppearance_AppCompat_Widget_ActionMode_Subtitle = 2131362024; + + // aapt resource value: 0x7f0a00e9 + public const int TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse = 2131362025; + + // aapt resource value: 0x7f0a00ea + public const int TextAppearance_AppCompat_Widget_ActionMode_Title = 2131362026; + + // aapt resource value: 0x7f0a00eb + public const int TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse = 2131362027; + + // aapt resource value: 0x7f0a00ec + public const int TextAppearance_AppCompat_Widget_Button = 2131362028; + + // aapt resource value: 0x7f0a00ed + public const int TextAppearance_AppCompat_Widget_Button_Borderless_Colored = 2131362029; + + // aapt resource value: 0x7f0a00ee + public const int TextAppearance_AppCompat_Widget_Button_Colored = 2131362030; + + // aapt resource value: 0x7f0a00ef + public const int TextAppearance_AppCompat_Widget_Button_Inverse = 2131362031; + + // aapt resource value: 0x7f0a00f0 + public const int TextAppearance_AppCompat_Widget_DropDownItem = 2131362032; + + // aapt resource value: 0x7f0a00f1 + public const int TextAppearance_AppCompat_Widget_PopupMenu_Header = 2131362033; + + // aapt resource value: 0x7f0a00f2 + public const int TextAppearance_AppCompat_Widget_PopupMenu_Large = 2131362034; + + // aapt resource value: 0x7f0a00f3 + public const int TextAppearance_AppCompat_Widget_PopupMenu_Small = 2131362035; + + // aapt resource value: 0x7f0a00f4 + public const int TextAppearance_AppCompat_Widget_Switch = 2131362036; + + // aapt resource value: 0x7f0a00f5 + public const int TextAppearance_AppCompat_Widget_TextView_SpinnerItem = 2131362037; + + // aapt resource value: 0x7f0a0179 + public const int TextAppearance_Compat_Notification = 2131362169; + + // aapt resource value: 0x7f0a017a + public const int TextAppearance_Compat_Notification_Info = 2131362170; + + // aapt resource value: 0x7f0a0156 + public const int TextAppearance_Compat_Notification_Info_Media = 2131362134; + + // aapt resource value: 0x7f0a017f + public const int TextAppearance_Compat_Notification_Line2 = 2131362175; + + // aapt resource value: 0x7f0a015a + public const int TextAppearance_Compat_Notification_Line2_Media = 2131362138; + + // aapt resource value: 0x7f0a0157 + public const int TextAppearance_Compat_Notification_Media = 2131362135; + + // aapt resource value: 0x7f0a017b + public const int TextAppearance_Compat_Notification_Time = 2131362171; + + // aapt resource value: 0x7f0a0158 + public const int TextAppearance_Compat_Notification_Time_Media = 2131362136; + + // aapt resource value: 0x7f0a017c + public const int TextAppearance_Compat_Notification_Title = 2131362172; + + // aapt resource value: 0x7f0a0159 + public const int TextAppearance_Compat_Notification_Title_Media = 2131362137; + + // aapt resource value: 0x7f0a0162 + public const int TextAppearance_Design_CollapsingToolbar_Expanded = 2131362146; + + // aapt resource value: 0x7f0a0163 + public const int TextAppearance_Design_Counter = 2131362147; + + // aapt resource value: 0x7f0a0164 + public const int TextAppearance_Design_Counter_Overflow = 2131362148; + + // aapt resource value: 0x7f0a0165 + public const int TextAppearance_Design_Error = 2131362149; + + // aapt resource value: 0x7f0a0166 + public const int TextAppearance_Design_Hint = 2131362150; + + // aapt resource value: 0x7f0a0167 + public const int TextAppearance_Design_Snackbar_Message = 2131362151; + + // aapt resource value: 0x7f0a0168 + public const int TextAppearance_Design_Tab = 2131362152; + + // aapt resource value: 0x7f0a00f6 + public const int TextAppearance_Widget_AppCompat_ExpandedMenu_Item = 2131362038; + + // aapt resource value: 0x7f0a00f7 + public const int TextAppearance_Widget_AppCompat_Toolbar_Subtitle = 2131362039; + + // aapt resource value: 0x7f0a00f8 + public const int TextAppearance_Widget_AppCompat_Toolbar_Title = 2131362040; + + // aapt resource value: 0x7f0a00f9 + public const int Theme_AppCompat = 2131362041; + + // aapt resource value: 0x7f0a00fa + public const int Theme_AppCompat_CompactMenu = 2131362042; + + // aapt resource value: 0x7f0a0004 + public const int Theme_AppCompat_DayNight = 2131361796; + + // aapt resource value: 0x7f0a0005 + public const int Theme_AppCompat_DayNight_DarkActionBar = 2131361797; + + // aapt resource value: 0x7f0a0006 + public const int Theme_AppCompat_DayNight_Dialog = 2131361798; + + // aapt resource value: 0x7f0a0007 + public const int Theme_AppCompat_DayNight_Dialog_Alert = 2131361799; + + // aapt resource value: 0x7f0a0008 + public const int Theme_AppCompat_DayNight_Dialog_MinWidth = 2131361800; + + // aapt resource value: 0x7f0a0009 + public const int Theme_AppCompat_DayNight_DialogWhenLarge = 2131361801; + + // aapt resource value: 0x7f0a000a + public const int Theme_AppCompat_DayNight_NoActionBar = 2131361802; + + // aapt resource value: 0x7f0a00fb + public const int Theme_AppCompat_Dialog = 2131362043; + + // aapt resource value: 0x7f0a00fc + public const int Theme_AppCompat_Dialog_Alert = 2131362044; + + // aapt resource value: 0x7f0a00fd + public const int Theme_AppCompat_Dialog_MinWidth = 2131362045; + + // aapt resource value: 0x7f0a00fe + public const int Theme_AppCompat_DialogWhenLarge = 2131362046; + + // aapt resource value: 0x7f0a00ff + public const int Theme_AppCompat_Light = 2131362047; + + // aapt resource value: 0x7f0a0100 + public const int Theme_AppCompat_Light_DarkActionBar = 2131362048; + + // aapt resource value: 0x7f0a0101 + public const int Theme_AppCompat_Light_Dialog = 2131362049; + + // aapt resource value: 0x7f0a0102 + public const int Theme_AppCompat_Light_Dialog_Alert = 2131362050; + + // aapt resource value: 0x7f0a0103 + public const int Theme_AppCompat_Light_Dialog_MinWidth = 2131362051; + + // aapt resource value: 0x7f0a0104 + public const int Theme_AppCompat_Light_DialogWhenLarge = 2131362052; + + // aapt resource value: 0x7f0a0105 + public const int Theme_AppCompat_Light_NoActionBar = 2131362053; + + // aapt resource value: 0x7f0a0106 + public const int Theme_AppCompat_NoActionBar = 2131362054; + + // aapt resource value: 0x7f0a0169 + public const int Theme_Design = 2131362153; + + // aapt resource value: 0x7f0a016a + public const int Theme_Design_BottomSheetDialog = 2131362154; + + // aapt resource value: 0x7f0a016b + public const int Theme_Design_Light = 2131362155; + + // aapt resource value: 0x7f0a016c + public const int Theme_Design_Light_BottomSheetDialog = 2131362156; + + // aapt resource value: 0x7f0a016d + public const int Theme_Design_Light_NoActionBar = 2131362157; + + // aapt resource value: 0x7f0a016e + public const int Theme_Design_NoActionBar = 2131362158; + + // aapt resource value: 0x7f0a0107 + public const int ThemeOverlay_AppCompat = 2131362055; + + // aapt resource value: 0x7f0a0108 + public const int ThemeOverlay_AppCompat_ActionBar = 2131362056; + + // aapt resource value: 0x7f0a0109 + public const int ThemeOverlay_AppCompat_Dark = 2131362057; + + // aapt resource value: 0x7f0a010a + public const int ThemeOverlay_AppCompat_Dark_ActionBar = 2131362058; + + // aapt resource value: 0x7f0a010b + public const int ThemeOverlay_AppCompat_Dialog = 2131362059; + + // aapt resource value: 0x7f0a010c + public const int ThemeOverlay_AppCompat_Dialog_Alert = 2131362060; + + // aapt resource value: 0x7f0a010d + public const int ThemeOverlay_AppCompat_Light = 2131362061; + + // aapt resource value: 0x7f0a010e + public const int Widget_AppCompat_ActionBar = 2131362062; + + // aapt resource value: 0x7f0a010f + public const int Widget_AppCompat_ActionBar_Solid = 2131362063; + + // aapt resource value: 0x7f0a0110 + public const int Widget_AppCompat_ActionBar_TabBar = 2131362064; + + // aapt resource value: 0x7f0a0111 + public const int Widget_AppCompat_ActionBar_TabText = 2131362065; + + // aapt resource value: 0x7f0a0112 + public const int Widget_AppCompat_ActionBar_TabView = 2131362066; + + // aapt resource value: 0x7f0a0113 + public const int Widget_AppCompat_ActionButton = 2131362067; + + // aapt resource value: 0x7f0a0114 + public const int Widget_AppCompat_ActionButton_CloseMode = 2131362068; + + // aapt resource value: 0x7f0a0115 + public const int Widget_AppCompat_ActionButton_Overflow = 2131362069; + + // aapt resource value: 0x7f0a0116 + public const int Widget_AppCompat_ActionMode = 2131362070; + + // aapt resource value: 0x7f0a0117 + public const int Widget_AppCompat_ActivityChooserView = 2131362071; + + // aapt resource value: 0x7f0a0118 + public const int Widget_AppCompat_AutoCompleteTextView = 2131362072; + + // aapt resource value: 0x7f0a0119 + public const int Widget_AppCompat_Button = 2131362073; + + // aapt resource value: 0x7f0a011a + public const int Widget_AppCompat_Button_Borderless = 2131362074; + + // aapt resource value: 0x7f0a011b + public const int Widget_AppCompat_Button_Borderless_Colored = 2131362075; + + // aapt resource value: 0x7f0a011c + public const int Widget_AppCompat_Button_ButtonBar_AlertDialog = 2131362076; + + // aapt resource value: 0x7f0a011d + public const int Widget_AppCompat_Button_Colored = 2131362077; + + // aapt resource value: 0x7f0a011e + public const int Widget_AppCompat_Button_Small = 2131362078; + + // aapt resource value: 0x7f0a011f + public const int Widget_AppCompat_ButtonBar = 2131362079; + + // aapt resource value: 0x7f0a0120 + public const int Widget_AppCompat_ButtonBar_AlertDialog = 2131362080; + + // aapt resource value: 0x7f0a0121 + public const int Widget_AppCompat_CompoundButton_CheckBox = 2131362081; + + // aapt resource value: 0x7f0a0122 + public const int Widget_AppCompat_CompoundButton_RadioButton = 2131362082; + + // aapt resource value: 0x7f0a0123 + public const int Widget_AppCompat_CompoundButton_Switch = 2131362083; + + // aapt resource value: 0x7f0a0124 + public const int Widget_AppCompat_DrawerArrowToggle = 2131362084; + + // aapt resource value: 0x7f0a0125 + public const int Widget_AppCompat_DropDownItem_Spinner = 2131362085; + + // aapt resource value: 0x7f0a0126 + public const int Widget_AppCompat_EditText = 2131362086; + + // aapt resource value: 0x7f0a0127 + public const int Widget_AppCompat_ImageButton = 2131362087; + + // aapt resource value: 0x7f0a0128 + public const int Widget_AppCompat_Light_ActionBar = 2131362088; + + // aapt resource value: 0x7f0a0129 + public const int Widget_AppCompat_Light_ActionBar_Solid = 2131362089; + + // aapt resource value: 0x7f0a012a + public const int Widget_AppCompat_Light_ActionBar_Solid_Inverse = 2131362090; + + // aapt resource value: 0x7f0a012b + public const int Widget_AppCompat_Light_ActionBar_TabBar = 2131362091; + + // aapt resource value: 0x7f0a012c + public const int Widget_AppCompat_Light_ActionBar_TabBar_Inverse = 2131362092; + + // aapt resource value: 0x7f0a012d + public const int Widget_AppCompat_Light_ActionBar_TabText = 2131362093; + + // aapt resource value: 0x7f0a012e + public const int Widget_AppCompat_Light_ActionBar_TabText_Inverse = 2131362094; + + // aapt resource value: 0x7f0a012f + public const int Widget_AppCompat_Light_ActionBar_TabView = 2131362095; + + // aapt resource value: 0x7f0a0130 + public const int Widget_AppCompat_Light_ActionBar_TabView_Inverse = 2131362096; + + // aapt resource value: 0x7f0a0131 + public const int Widget_AppCompat_Light_ActionButton = 2131362097; + + // aapt resource value: 0x7f0a0132 + public const int Widget_AppCompat_Light_ActionButton_CloseMode = 2131362098; + + // aapt resource value: 0x7f0a0133 + public const int Widget_AppCompat_Light_ActionButton_Overflow = 2131362099; + + // aapt resource value: 0x7f0a0134 + public const int Widget_AppCompat_Light_ActionMode_Inverse = 2131362100; + + // aapt resource value: 0x7f0a0135 + public const int Widget_AppCompat_Light_ActivityChooserView = 2131362101; + + // aapt resource value: 0x7f0a0136 + public const int Widget_AppCompat_Light_AutoCompleteTextView = 2131362102; + + // aapt resource value: 0x7f0a0137 + public const int Widget_AppCompat_Light_DropDownItem_Spinner = 2131362103; + + // aapt resource value: 0x7f0a0138 + public const int Widget_AppCompat_Light_ListPopupWindow = 2131362104; + + // aapt resource value: 0x7f0a0139 + public const int Widget_AppCompat_Light_ListView_DropDown = 2131362105; + + // aapt resource value: 0x7f0a013a + public const int Widget_AppCompat_Light_PopupMenu = 2131362106; + + // aapt resource value: 0x7f0a013b + public const int Widget_AppCompat_Light_PopupMenu_Overflow = 2131362107; + + // aapt resource value: 0x7f0a013c + public const int Widget_AppCompat_Light_SearchView = 2131362108; + + // aapt resource value: 0x7f0a013d + public const int Widget_AppCompat_Light_Spinner_DropDown_ActionBar = 2131362109; + + // aapt resource value: 0x7f0a013e + public const int Widget_AppCompat_ListMenuView = 2131362110; + + // aapt resource value: 0x7f0a013f + public const int Widget_AppCompat_ListPopupWindow = 2131362111; + + // aapt resource value: 0x7f0a0140 + public const int Widget_AppCompat_ListView = 2131362112; + + // aapt resource value: 0x7f0a0141 + public const int Widget_AppCompat_ListView_DropDown = 2131362113; + + // aapt resource value: 0x7f0a0142 + public const int Widget_AppCompat_ListView_Menu = 2131362114; + + // aapt resource value: 0x7f0a0143 + public const int Widget_AppCompat_PopupMenu = 2131362115; + + // aapt resource value: 0x7f0a0144 + public const int Widget_AppCompat_PopupMenu_Overflow = 2131362116; + + // aapt resource value: 0x7f0a0145 + public const int Widget_AppCompat_PopupWindow = 2131362117; + + // aapt resource value: 0x7f0a0146 + public const int Widget_AppCompat_ProgressBar = 2131362118; + + // aapt resource value: 0x7f0a0147 + public const int Widget_AppCompat_ProgressBar_Horizontal = 2131362119; + + // aapt resource value: 0x7f0a0148 + public const int Widget_AppCompat_RatingBar = 2131362120; + + // aapt resource value: 0x7f0a0149 + public const int Widget_AppCompat_RatingBar_Indicator = 2131362121; + + // aapt resource value: 0x7f0a014a + public const int Widget_AppCompat_RatingBar_Small = 2131362122; + + // aapt resource value: 0x7f0a014b + public const int Widget_AppCompat_SearchView = 2131362123; + + // aapt resource value: 0x7f0a014c + public const int Widget_AppCompat_SearchView_ActionBar = 2131362124; + + // aapt resource value: 0x7f0a014d + public const int Widget_AppCompat_SeekBar = 2131362125; + + // aapt resource value: 0x7f0a014e + public const int Widget_AppCompat_SeekBar_Discrete = 2131362126; + + // aapt resource value: 0x7f0a014f + public const int Widget_AppCompat_Spinner = 2131362127; + + // aapt resource value: 0x7f0a0150 + public const int Widget_AppCompat_Spinner_DropDown = 2131362128; + + // aapt resource value: 0x7f0a0151 + public const int Widget_AppCompat_Spinner_DropDown_ActionBar = 2131362129; + + // aapt resource value: 0x7f0a0152 + public const int Widget_AppCompat_Spinner_Underlined = 2131362130; + + // aapt resource value: 0x7f0a0153 + public const int Widget_AppCompat_TextView_SpinnerItem = 2131362131; + + // aapt resource value: 0x7f0a0154 + public const int Widget_AppCompat_Toolbar = 2131362132; + + // aapt resource value: 0x7f0a0155 + public const int Widget_AppCompat_Toolbar_Button_Navigation = 2131362133; + + // aapt resource value: 0x7f0a017d + public const int Widget_Compat_NotificationActionContainer = 2131362173; + + // aapt resource value: 0x7f0a017e + public const int Widget_Compat_NotificationActionText = 2131362174; + + // aapt resource value: 0x7f0a016f + public const int Widget_Design_AppBarLayout = 2131362159; + + // aapt resource value: 0x7f0a0170 + public const int Widget_Design_BottomNavigationView = 2131362160; + + // aapt resource value: 0x7f0a0171 + public const int Widget_Design_BottomSheet_Modal = 2131362161; + + // aapt resource value: 0x7f0a0172 + public const int Widget_Design_CollapsingToolbar = 2131362162; + + // aapt resource value: 0x7f0a0173 + public const int Widget_Design_CoordinatorLayout = 2131362163; + + // aapt resource value: 0x7f0a0174 + public const int Widget_Design_FloatingActionButton = 2131362164; + + // aapt resource value: 0x7f0a0175 + public const int Widget_Design_NavigationView = 2131362165; + + // aapt resource value: 0x7f0a0176 + public const int Widget_Design_ScrimInsetsFrameLayout = 2131362166; + + // aapt resource value: 0x7f0a0177 + public const int Widget_Design_Snackbar = 2131362167; + + // aapt resource value: 0x7f0a015b + public const int Widget_Design_TabLayout = 2131362139; + + // aapt resource value: 0x7f0a0178 + public const int Widget_Design_TextInputLayout = 2131362168; + + static Style() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Style() + { + } + } + + public partial class Styleable + { + + public static int[] ActionBar = new int[] { + 2130771978, + 2130771980, + 2130771981, + 2130771982, + 2130771983, + 2130771984, + 2130771985, + 2130771986, + 2130771987, + 2130771988, + 2130771989, + 2130771990, + 2130771991, + 2130771992, + 2130771993, + 2130771994, + 2130771995, + 2130771996, + 2130771997, + 2130771998, + 2130771999, + 2130772000, + 2130772001, + 2130772002, + 2130772003, + 2130772004, + 2130772005, + 2130772006, + 2130772076}; + + // aapt resource value: 10 + public const int ActionBar_background = 10; + + // aapt resource value: 12 + public const int ActionBar_backgroundSplit = 12; + + // aapt resource value: 11 + public const int ActionBar_backgroundStacked = 11; + + // aapt resource value: 21 + public const int ActionBar_contentInsetEnd = 21; + + // aapt resource value: 25 + public const int ActionBar_contentInsetEndWithActions = 25; + + // aapt resource value: 22 + public const int ActionBar_contentInsetLeft = 22; + + // aapt resource value: 23 + public const int ActionBar_contentInsetRight = 23; + + // aapt resource value: 20 + public const int ActionBar_contentInsetStart = 20; + + // aapt resource value: 24 + public const int ActionBar_contentInsetStartWithNavigation = 24; + + // aapt resource value: 13 + public const int ActionBar_customNavigationLayout = 13; + + // aapt resource value: 3 + public const int ActionBar_displayOptions = 3; + + // aapt resource value: 9 + public const int ActionBar_divider = 9; + + // aapt resource value: 26 + public const int ActionBar_elevation = 26; + + // aapt resource value: 0 + public const int ActionBar_height = 0; + + // aapt resource value: 19 + public const int ActionBar_hideOnContentScroll = 19; + + // aapt resource value: 28 + public const int ActionBar_homeAsUpIndicator = 28; + + // aapt resource value: 14 + public const int ActionBar_homeLayout = 14; + + // aapt resource value: 7 + public const int ActionBar_icon = 7; + + // aapt resource value: 16 + public const int ActionBar_indeterminateProgressStyle = 16; + + // aapt resource value: 18 + public const int ActionBar_itemPadding = 18; + + // aapt resource value: 8 + public const int ActionBar_logo = 8; + + // aapt resource value: 2 + public const int ActionBar_navigationMode = 2; + + // aapt resource value: 27 + public const int ActionBar_popupTheme = 27; + + // aapt resource value: 17 + public const int ActionBar_progressBarPadding = 17; + + // aapt resource value: 15 + public const int ActionBar_progressBarStyle = 15; + + // aapt resource value: 4 + public const int ActionBar_subtitle = 4; + + // aapt resource value: 6 + public const int ActionBar_subtitleTextStyle = 6; + + // aapt resource value: 1 + public const int ActionBar_title = 1; + + // aapt resource value: 5 + public const int ActionBar_titleTextStyle = 5; + + public static int[] ActionBarLayout = new int[] { + 16842931}; + + // aapt resource value: 0 + public const int ActionBarLayout_android_layout_gravity = 0; + + public static int[] ActionMenuItemView = new int[] { + 16843071}; + + // aapt resource value: 0 + public const int ActionMenuItemView_android_minWidth = 0; + + public static int[] ActionMenuView; + + public static int[] ActionMode = new int[] { + 2130771978, + 2130771984, + 2130771985, + 2130771989, + 2130771991, + 2130772007}; + + // aapt resource value: 3 + public const int ActionMode_background = 3; + + // aapt resource value: 4 + public const int ActionMode_backgroundSplit = 4; + + // aapt resource value: 5 + public const int ActionMode_closeItemLayout = 5; + + // aapt resource value: 0 + public const int ActionMode_height = 0; + + // aapt resource value: 2 + public const int ActionMode_subtitleTextStyle = 2; + + // aapt resource value: 1 + public const int ActionMode_titleTextStyle = 1; + + public static int[] ActivityChooserView = new int[] { + 2130772008, + 2130772009}; + + // aapt resource value: 1 + public const int ActivityChooserView_expandActivityOverflowButtonDrawable = 1; + + // aapt resource value: 0 + public const int ActivityChooserView_initialActivityCount = 0; + + public static int[] AlertDialog = new int[] { + 16842994, + 2130772010, + 2130772011, + 2130772012, + 2130772013, + 2130772014, + 2130772015}; + + // aapt resource value: 0 + public const int AlertDialog_android_layout = 0; + + // aapt resource value: 1 + public const int AlertDialog_buttonPanelSideLayout = 1; + + // aapt resource value: 5 + public const int AlertDialog_listItemLayout = 5; + + // aapt resource value: 2 + public const int AlertDialog_listLayout = 2; + + // aapt resource value: 3 + public const int AlertDialog_multiChoiceItemLayout = 3; + + // aapt resource value: 6 + public const int AlertDialog_showTitle = 6; + + // aapt resource value: 4 + public const int AlertDialog_singleChoiceItemLayout = 4; + + public static int[] AppBarLayout = new int[] { + 16842964, + 16843919, + 16844096, + 2130772005, + 2130772223}; + + // aapt resource value: 0 + public const int AppBarLayout_android_background = 0; + + // aapt resource value: 2 + public const int AppBarLayout_android_keyboardNavigationCluster = 2; + + // aapt resource value: 1 + public const int AppBarLayout_android_touchscreenBlocksFocus = 1; + + // aapt resource value: 3 + public const int AppBarLayout_elevation = 3; + + // aapt resource value: 4 + public const int AppBarLayout_expanded = 4; + + public static int[] AppBarLayoutStates = new int[] { + 2130772224, + 2130772225}; + + // aapt resource value: 0 + public const int AppBarLayoutStates_state_collapsed = 0; + + // aapt resource value: 1 + public const int AppBarLayoutStates_state_collapsible = 1; + + public static int[] AppBarLayout_Layout = new int[] { + 2130772226, + 2130772227}; + + // aapt resource value: 0 + public const int AppBarLayout_Layout_layout_scrollFlags = 0; + + // aapt resource value: 1 + public const int AppBarLayout_Layout_layout_scrollInterpolator = 1; + + public static int[] AppCompatImageView = new int[] { + 16843033, + 2130772016, + 2130772017, + 2130772018}; + + // aapt resource value: 0 + public const int AppCompatImageView_android_src = 0; + + // aapt resource value: 1 + public const int AppCompatImageView_srcCompat = 1; + + // aapt resource value: 2 + public const int AppCompatImageView_tint = 2; + + // aapt resource value: 3 + public const int AppCompatImageView_tintMode = 3; + + public static int[] AppCompatSeekBar = new int[] { + 16843074, + 2130772019, + 2130772020, + 2130772021}; + + // aapt resource value: 0 + public const int AppCompatSeekBar_android_thumb = 0; + + // aapt resource value: 1 + public const int AppCompatSeekBar_tickMark = 1; + + // aapt resource value: 2 + public const int AppCompatSeekBar_tickMarkTint = 2; + + // aapt resource value: 3 + public const int AppCompatSeekBar_tickMarkTintMode = 3; + + public static int[] AppCompatTextHelper = new int[] { + 16842804, + 16843117, + 16843118, + 16843119, + 16843120, + 16843666, + 16843667}; + + // aapt resource value: 2 + public const int AppCompatTextHelper_android_drawableBottom = 2; + + // aapt resource value: 6 + public const int AppCompatTextHelper_android_drawableEnd = 6; + + // aapt resource value: 3 + public const int AppCompatTextHelper_android_drawableLeft = 3; + + // aapt resource value: 4 + public const int AppCompatTextHelper_android_drawableRight = 4; + + // aapt resource value: 5 + public const int AppCompatTextHelper_android_drawableStart = 5; + + // aapt resource value: 1 + public const int AppCompatTextHelper_android_drawableTop = 1; + + // aapt resource value: 0 + public const int AppCompatTextHelper_android_textAppearance = 0; + + public static int[] AppCompatTextView = new int[] { + 16842804, + 2130772022, + 2130772023, + 2130772024, + 2130772025, + 2130772026, + 2130772027, + 2130772028}; + + // aapt resource value: 0 + public const int AppCompatTextView_android_textAppearance = 0; + + // aapt resource value: 6 + public const int AppCompatTextView_autoSizeMaxTextSize = 6; + + // aapt resource value: 5 + public const int AppCompatTextView_autoSizeMinTextSize = 5; + + // aapt resource value: 4 + public const int AppCompatTextView_autoSizePresetSizes = 4; + + // aapt resource value: 3 + public const int AppCompatTextView_autoSizeStepGranularity = 3; + + // aapt resource value: 2 + public const int AppCompatTextView_autoSizeTextType = 2; + + // aapt resource value: 7 + public const int AppCompatTextView_fontFamily = 7; + + // aapt resource value: 1 + public const int AppCompatTextView_textAllCaps = 1; + + public static int[] AppCompatTheme = new int[] { + 16842839, + 16842926, + 2130772029, + 2130772030, + 2130772031, + 2130772032, + 2130772033, + 2130772034, + 2130772035, + 2130772036, + 2130772037, + 2130772038, + 2130772039, + 2130772040, + 2130772041, + 2130772042, + 2130772043, + 2130772044, + 2130772045, + 2130772046, + 2130772047, + 2130772048, + 2130772049, + 2130772050, + 2130772051, + 2130772052, + 2130772053, + 2130772054, + 2130772055, + 2130772056, + 2130772057, + 2130772058, + 2130772059, + 2130772060, + 2130772061, + 2130772062, + 2130772063, + 2130772064, + 2130772065, + 2130772066, + 2130772067, + 2130772068, + 2130772069, + 2130772070, + 2130772071, + 2130772072, + 2130772073, + 2130772074, + 2130772075, + 2130772076, + 2130772077, + 2130772078, + 2130772079, + 2130772080, + 2130772081, + 2130772082, + 2130772083, + 2130772084, + 2130772085, + 2130772086, + 2130772087, + 2130772088, + 2130772089, + 2130772090, + 2130772091, + 2130772092, + 2130772093, + 2130772094, + 2130772095, + 2130772096, + 2130772097, + 2130772098, + 2130772099, + 2130772100, + 2130772101, + 2130772102, + 2130772103, + 2130772104, + 2130772105, + 2130772106, + 2130772107, + 2130772108, + 2130772109, + 2130772110, + 2130772111, + 2130772112, + 2130772113, + 2130772114, + 2130772115, + 2130772116, + 2130772117, + 2130772118, + 2130772119, + 2130772120, + 2130772121, + 2130772122, + 2130772123, + 2130772124, + 2130772125, + 2130772126, + 2130772127, + 2130772128, + 2130772129, + 2130772130, + 2130772131, + 2130772132, + 2130772133, + 2130772134, + 2130772135, + 2130772136, + 2130772137, + 2130772138, + 2130772139, + 2130772140, + 2130772141, + 2130772142, + 2130772143, + 2130772144, + 2130772145}; + + // aapt resource value: 23 + public const int AppCompatTheme_actionBarDivider = 23; + + // aapt resource value: 24 + public const int AppCompatTheme_actionBarItemBackground = 24; + + // aapt resource value: 17 + public const int AppCompatTheme_actionBarPopupTheme = 17; + + // aapt resource value: 22 + public const int AppCompatTheme_actionBarSize = 22; + + // aapt resource value: 19 + public const int AppCompatTheme_actionBarSplitStyle = 19; + + // aapt resource value: 18 + public const int AppCompatTheme_actionBarStyle = 18; + + // aapt resource value: 13 + public const int AppCompatTheme_actionBarTabBarStyle = 13; + + // aapt resource value: 12 + public const int AppCompatTheme_actionBarTabStyle = 12; + + // aapt resource value: 14 + public const int AppCompatTheme_actionBarTabTextStyle = 14; + + // aapt resource value: 20 + public const int AppCompatTheme_actionBarTheme = 20; + + // aapt resource value: 21 + public const int AppCompatTheme_actionBarWidgetTheme = 21; + + // aapt resource value: 50 + public const int AppCompatTheme_actionButtonStyle = 50; + + // aapt resource value: 46 + public const int AppCompatTheme_actionDropDownStyle = 46; + + // aapt resource value: 25 + public const int AppCompatTheme_actionMenuTextAppearance = 25; + + // aapt resource value: 26 + public const int AppCompatTheme_actionMenuTextColor = 26; + + // aapt resource value: 29 + public const int AppCompatTheme_actionModeBackground = 29; + + // aapt resource value: 28 + public const int AppCompatTheme_actionModeCloseButtonStyle = 28; + + // aapt resource value: 31 + public const int AppCompatTheme_actionModeCloseDrawable = 31; + + // aapt resource value: 33 + public const int AppCompatTheme_actionModeCopyDrawable = 33; + + // aapt resource value: 32 + public const int AppCompatTheme_actionModeCutDrawable = 32; + + // aapt resource value: 37 + public const int AppCompatTheme_actionModeFindDrawable = 37; + + // aapt resource value: 34 + public const int AppCompatTheme_actionModePasteDrawable = 34; + + // aapt resource value: 39 + public const int AppCompatTheme_actionModePopupWindowStyle = 39; + + // aapt resource value: 35 + public const int AppCompatTheme_actionModeSelectAllDrawable = 35; + + // aapt resource value: 36 + public const int AppCompatTheme_actionModeShareDrawable = 36; + + // aapt resource value: 30 + public const int AppCompatTheme_actionModeSplitBackground = 30; + + // aapt resource value: 27 + public const int AppCompatTheme_actionModeStyle = 27; + + // aapt resource value: 38 + public const int AppCompatTheme_actionModeWebSearchDrawable = 38; + + // aapt resource value: 15 + public const int AppCompatTheme_actionOverflowButtonStyle = 15; + + // aapt resource value: 16 + public const int AppCompatTheme_actionOverflowMenuStyle = 16; + + // aapt resource value: 58 + public const int AppCompatTheme_activityChooserViewStyle = 58; + + // aapt resource value: 95 + public const int AppCompatTheme_alertDialogButtonGroupStyle = 95; + + // aapt resource value: 96 + public const int AppCompatTheme_alertDialogCenterButtons = 96; + + // aapt resource value: 94 + public const int AppCompatTheme_alertDialogStyle = 94; + + // aapt resource value: 97 + public const int AppCompatTheme_alertDialogTheme = 97; + + // aapt resource value: 1 + public const int AppCompatTheme_android_windowAnimationStyle = 1; + + // aapt resource value: 0 + public const int AppCompatTheme_android_windowIsFloating = 0; + + // aapt resource value: 102 + public const int AppCompatTheme_autoCompleteTextViewStyle = 102; + + // aapt resource value: 55 + public const int AppCompatTheme_borderlessButtonStyle = 55; + + // aapt resource value: 52 + public const int AppCompatTheme_buttonBarButtonStyle = 52; + + // aapt resource value: 100 + public const int AppCompatTheme_buttonBarNegativeButtonStyle = 100; + + // aapt resource value: 101 + public const int AppCompatTheme_buttonBarNeutralButtonStyle = 101; + + // aapt resource value: 99 + public const int AppCompatTheme_buttonBarPositiveButtonStyle = 99; + + // aapt resource value: 51 + public const int AppCompatTheme_buttonBarStyle = 51; + + // aapt resource value: 103 + public const int AppCompatTheme_buttonStyle = 103; + + // aapt resource value: 104 + public const int AppCompatTheme_buttonStyleSmall = 104; + + // aapt resource value: 105 + public const int AppCompatTheme_checkboxStyle = 105; + + // aapt resource value: 106 + public const int AppCompatTheme_checkedTextViewStyle = 106; + + // aapt resource value: 86 + public const int AppCompatTheme_colorAccent = 86; + + // aapt resource value: 93 + public const int AppCompatTheme_colorBackgroundFloating = 93; + + // aapt resource value: 90 + public const int AppCompatTheme_colorButtonNormal = 90; + + // aapt resource value: 88 + public const int AppCompatTheme_colorControlActivated = 88; + + // aapt resource value: 89 + public const int AppCompatTheme_colorControlHighlight = 89; + + // aapt resource value: 87 + public const int AppCompatTheme_colorControlNormal = 87; + + // aapt resource value: 118 + public const int AppCompatTheme_colorError = 118; + + // aapt resource value: 84 + public const int AppCompatTheme_colorPrimary = 84; + + // aapt resource value: 85 + public const int AppCompatTheme_colorPrimaryDark = 85; + + // aapt resource value: 91 + public const int AppCompatTheme_colorSwitchThumbNormal = 91; + + // aapt resource value: 92 + public const int AppCompatTheme_controlBackground = 92; + + // aapt resource value: 44 + public const int AppCompatTheme_dialogPreferredPadding = 44; + + // aapt resource value: 43 + public const int AppCompatTheme_dialogTheme = 43; + + // aapt resource value: 57 + public const int AppCompatTheme_dividerHorizontal = 57; + + // aapt resource value: 56 + public const int AppCompatTheme_dividerVertical = 56; + + // aapt resource value: 75 + public const int AppCompatTheme_dropDownListViewStyle = 75; + + // aapt resource value: 47 + public const int AppCompatTheme_dropdownListPreferredItemHeight = 47; + + // aapt resource value: 64 + public const int AppCompatTheme_editTextBackground = 64; + + // aapt resource value: 63 + public const int AppCompatTheme_editTextColor = 63; + + // aapt resource value: 107 + public const int AppCompatTheme_editTextStyle = 107; + + // aapt resource value: 49 + public const int AppCompatTheme_homeAsUpIndicator = 49; + + // aapt resource value: 65 + public const int AppCompatTheme_imageButtonStyle = 65; + + // aapt resource value: 83 + public const int AppCompatTheme_listChoiceBackgroundIndicator = 83; + + // aapt resource value: 45 + public const int AppCompatTheme_listDividerAlertDialog = 45; + + // aapt resource value: 115 + public const int AppCompatTheme_listMenuViewStyle = 115; + + // aapt resource value: 76 + public const int AppCompatTheme_listPopupWindowStyle = 76; + + // aapt resource value: 70 + public const int AppCompatTheme_listPreferredItemHeight = 70; + + // aapt resource value: 72 + public const int AppCompatTheme_listPreferredItemHeightLarge = 72; + + // aapt resource value: 71 + public const int AppCompatTheme_listPreferredItemHeightSmall = 71; + + // aapt resource value: 73 + public const int AppCompatTheme_listPreferredItemPaddingLeft = 73; + + // aapt resource value: 74 + public const int AppCompatTheme_listPreferredItemPaddingRight = 74; + + // aapt resource value: 80 + public const int AppCompatTheme_panelBackground = 80; + + // aapt resource value: 82 + public const int AppCompatTheme_panelMenuListTheme = 82; + + // aapt resource value: 81 + public const int AppCompatTheme_panelMenuListWidth = 81; + + // aapt resource value: 61 + public const int AppCompatTheme_popupMenuStyle = 61; + + // aapt resource value: 62 + public const int AppCompatTheme_popupWindowStyle = 62; + + // aapt resource value: 108 + public const int AppCompatTheme_radioButtonStyle = 108; + + // aapt resource value: 109 + public const int AppCompatTheme_ratingBarStyle = 109; + + // aapt resource value: 110 + public const int AppCompatTheme_ratingBarStyleIndicator = 110; + + // aapt resource value: 111 + public const int AppCompatTheme_ratingBarStyleSmall = 111; + + // aapt resource value: 69 + public const int AppCompatTheme_searchViewStyle = 69; + + // aapt resource value: 112 + public const int AppCompatTheme_seekBarStyle = 112; + + // aapt resource value: 53 + public const int AppCompatTheme_selectableItemBackground = 53; + + // aapt resource value: 54 + public const int AppCompatTheme_selectableItemBackgroundBorderless = 54; + + // aapt resource value: 48 + public const int AppCompatTheme_spinnerDropDownItemStyle = 48; + + // aapt resource value: 113 + public const int AppCompatTheme_spinnerStyle = 113; + + // aapt resource value: 114 + public const int AppCompatTheme_switchStyle = 114; + + // aapt resource value: 40 + public const int AppCompatTheme_textAppearanceLargePopupMenu = 40; + + // aapt resource value: 77 + public const int AppCompatTheme_textAppearanceListItem = 77; + + // aapt resource value: 78 + public const int AppCompatTheme_textAppearanceListItemSecondary = 78; + + // aapt resource value: 79 + public const int AppCompatTheme_textAppearanceListItemSmall = 79; + + // aapt resource value: 42 + public const int AppCompatTheme_textAppearancePopupMenuHeader = 42; + + // aapt resource value: 67 + public const int AppCompatTheme_textAppearanceSearchResultSubtitle = 67; + + // aapt resource value: 66 + public const int AppCompatTheme_textAppearanceSearchResultTitle = 66; + + // aapt resource value: 41 + public const int AppCompatTheme_textAppearanceSmallPopupMenu = 41; + + // aapt resource value: 98 + public const int AppCompatTheme_textColorAlertDialogListItem = 98; + + // aapt resource value: 68 + public const int AppCompatTheme_textColorSearchUrl = 68; + + // aapt resource value: 60 + public const int AppCompatTheme_toolbarNavigationButtonStyle = 60; + + // aapt resource value: 59 + public const int AppCompatTheme_toolbarStyle = 59; + + // aapt resource value: 117 + public const int AppCompatTheme_tooltipForegroundColor = 117; + + // aapt resource value: 116 + public const int AppCompatTheme_tooltipFrameBackground = 116; + + // aapt resource value: 2 + public const int AppCompatTheme_windowActionBar = 2; + + // aapt resource value: 4 + public const int AppCompatTheme_windowActionBarOverlay = 4; + + // aapt resource value: 5 + public const int AppCompatTheme_windowActionModeOverlay = 5; + + // aapt resource value: 9 + public const int AppCompatTheme_windowFixedHeightMajor = 9; + + // aapt resource value: 7 + public const int AppCompatTheme_windowFixedHeightMinor = 7; + + // aapt resource value: 6 + public const int AppCompatTheme_windowFixedWidthMajor = 6; + + // aapt resource value: 8 + public const int AppCompatTheme_windowFixedWidthMinor = 8; + + // aapt resource value: 10 + public const int AppCompatTheme_windowMinWidthMajor = 10; + + // aapt resource value: 11 + public const int AppCompatTheme_windowMinWidthMinor = 11; + + // aapt resource value: 3 + public const int AppCompatTheme_windowNoTitle = 3; + + public static int[] BottomNavigationView = new int[] { + 2130772005, + 2130772266, + 2130772267, + 2130772268, + 2130772269}; + + // aapt resource value: 0 + public const int BottomNavigationView_elevation = 0; + + // aapt resource value: 4 + public const int BottomNavigationView_itemBackground = 4; + + // aapt resource value: 2 + public const int BottomNavigationView_itemIconTint = 2; + + // aapt resource value: 3 + public const int BottomNavigationView_itemTextColor = 3; + + // aapt resource value: 1 + public const int BottomNavigationView_menu = 1; + + public static int[] BottomSheetBehavior_Layout = new int[] { + 2130772228, + 2130772229, + 2130772230}; + + // aapt resource value: 1 + public const int BottomSheetBehavior_Layout_behavior_hideable = 1; + + // aapt resource value: 0 + public const int BottomSheetBehavior_Layout_behavior_peekHeight = 0; + + // aapt resource value: 2 + public const int BottomSheetBehavior_Layout_behavior_skipCollapsed = 2; + + public static int[] ButtonBarLayout = new int[] { + 2130772146}; + + // aapt resource value: 0 + public const int ButtonBarLayout_allowStacking = 0; + + public static int[] CollapsingToolbarLayout = new int[] { + 2130771980, + 2130772231, + 2130772232, + 2130772233, + 2130772234, + 2130772235, + 2130772236, + 2130772237, + 2130772238, + 2130772239, + 2130772240, + 2130772241, + 2130772242, + 2130772243, + 2130772244, + 2130772245}; + + // aapt resource value: 13 + public const int CollapsingToolbarLayout_collapsedTitleGravity = 13; + + // aapt resource value: 7 + public const int CollapsingToolbarLayout_collapsedTitleTextAppearance = 7; + + // aapt resource value: 8 + public const int CollapsingToolbarLayout_contentScrim = 8; + + // aapt resource value: 14 + public const int CollapsingToolbarLayout_expandedTitleGravity = 14; + + // aapt resource value: 1 + public const int CollapsingToolbarLayout_expandedTitleMargin = 1; + + // aapt resource value: 5 + public const int CollapsingToolbarLayout_expandedTitleMarginBottom = 5; + + // aapt resource value: 4 + public const int CollapsingToolbarLayout_expandedTitleMarginEnd = 4; + + // aapt resource value: 2 + public const int CollapsingToolbarLayout_expandedTitleMarginStart = 2; + + // aapt resource value: 3 + public const int CollapsingToolbarLayout_expandedTitleMarginTop = 3; + + // aapt resource value: 6 + public const int CollapsingToolbarLayout_expandedTitleTextAppearance = 6; + + // aapt resource value: 12 + public const int CollapsingToolbarLayout_scrimAnimationDuration = 12; + + // aapt resource value: 11 + public const int CollapsingToolbarLayout_scrimVisibleHeightTrigger = 11; + + // aapt resource value: 9 + public const int CollapsingToolbarLayout_statusBarScrim = 9; + + // aapt resource value: 0 + public const int CollapsingToolbarLayout_title = 0; + + // aapt resource value: 15 + public const int CollapsingToolbarLayout_titleEnabled = 15; + + // aapt resource value: 10 + public const int CollapsingToolbarLayout_toolbarId = 10; + + public static int[] CollapsingToolbarLayout_Layout = new int[] { + 2130772246, + 2130772247}; + + // aapt resource value: 0 + public const int CollapsingToolbarLayout_Layout_layout_collapseMode = 0; + + // aapt resource value: 1 + public const int CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier = 1; + + public static int[] ColorStateListItem = new int[] { + 16843173, + 16843551, + 2130772147}; + + // aapt resource value: 2 + public const int ColorStateListItem_alpha = 2; + + // aapt resource value: 1 + public const int ColorStateListItem_android_alpha = 1; + + // aapt resource value: 0 + public const int ColorStateListItem_android_color = 0; + + public static int[] CompoundButton = new int[] { + 16843015, + 2130772148, + 2130772149}; + + // aapt resource value: 0 + public const int CompoundButton_android_button = 0; + + // aapt resource value: 1 + public const int CompoundButton_buttonTint = 1; + + // aapt resource value: 2 + public const int CompoundButton_buttonTintMode = 2; + + public static int[] CoordinatorLayout = new int[] { + 2130772248, + 2130772249}; + + // aapt resource value: 0 + public const int CoordinatorLayout_keylines = 0; + + // aapt resource value: 1 + public const int CoordinatorLayout_statusBarBackground = 1; + + public static int[] CoordinatorLayout_Layout = new int[] { + 16842931, + 2130772250, + 2130772251, + 2130772252, + 2130772253, + 2130772254, + 2130772255}; + + // aapt resource value: 0 + public const int CoordinatorLayout_Layout_android_layout_gravity = 0; + + // aapt resource value: 2 + public const int CoordinatorLayout_Layout_layout_anchor = 2; + + // aapt resource value: 4 + public const int CoordinatorLayout_Layout_layout_anchorGravity = 4; + + // aapt resource value: 1 + public const int CoordinatorLayout_Layout_layout_behavior = 1; + + // aapt resource value: 6 + public const int CoordinatorLayout_Layout_layout_dodgeInsetEdges = 6; + + // aapt resource value: 5 + public const int CoordinatorLayout_Layout_layout_insetEdge = 5; + + // aapt resource value: 3 + public const int CoordinatorLayout_Layout_layout_keyline = 3; + + public static int[] DesignTheme = new int[] { + 2130772256, + 2130772257, + 2130772258}; + + // aapt resource value: 0 + public const int DesignTheme_bottomSheetDialogTheme = 0; + + // aapt resource value: 1 + public const int DesignTheme_bottomSheetStyle = 1; + + // aapt resource value: 2 + public const int DesignTheme_textColorError = 2; + + public static int[] DrawerArrowToggle = new int[] { + 2130772150, + 2130772151, + 2130772152, + 2130772153, + 2130772154, + 2130772155, + 2130772156, + 2130772157}; + + // aapt resource value: 4 + public const int DrawerArrowToggle_arrowHeadLength = 4; + + // aapt resource value: 5 + public const int DrawerArrowToggle_arrowShaftLength = 5; + + // aapt resource value: 6 + public const int DrawerArrowToggle_barLength = 6; + + // aapt resource value: 0 + public const int DrawerArrowToggle_color = 0; + + // aapt resource value: 2 + public const int DrawerArrowToggle_drawableSize = 2; + + // aapt resource value: 3 + public const int DrawerArrowToggle_gapBetweenBars = 3; + + // aapt resource value: 1 + public const int DrawerArrowToggle_spinBars = 1; + + // aapt resource value: 7 + public const int DrawerArrowToggle_thickness = 7; + + public static int[] FloatingActionButton = new int[] { + 2130772005, + 2130772221, + 2130772222, + 2130772259, + 2130772260, + 2130772261, + 2130772262, + 2130772263}; + + // aapt resource value: 1 + public const int FloatingActionButton_backgroundTint = 1; + + // aapt resource value: 2 + public const int FloatingActionButton_backgroundTintMode = 2; + + // aapt resource value: 6 + public const int FloatingActionButton_borderWidth = 6; + + // aapt resource value: 0 + public const int FloatingActionButton_elevation = 0; + + // aapt resource value: 4 + public const int FloatingActionButton_fabSize = 4; + + // aapt resource value: 5 + public const int FloatingActionButton_pressedTranslationZ = 5; + + // aapt resource value: 3 + public const int FloatingActionButton_rippleColor = 3; + + // aapt resource value: 7 + public const int FloatingActionButton_useCompatPadding = 7; + + public static int[] FloatingActionButton_Behavior_Layout = new int[] { + 2130772264}; + + // aapt resource value: 0 + public const int FloatingActionButton_Behavior_Layout_behavior_autoHide = 0; + + public static int[] FontFamily = new int[] { + 2130772305, + 2130772306, + 2130772307, + 2130772308, + 2130772309, + 2130772310}; + + // aapt resource value: 0 + public const int FontFamily_fontProviderAuthority = 0; + + // aapt resource value: 3 + public const int FontFamily_fontProviderCerts = 3; + + // aapt resource value: 4 + public const int FontFamily_fontProviderFetchStrategy = 4; + + // aapt resource value: 5 + public const int FontFamily_fontProviderFetchTimeout = 5; + + // aapt resource value: 1 + public const int FontFamily_fontProviderPackage = 1; + + // aapt resource value: 2 + public const int FontFamily_fontProviderQuery = 2; + + public static int[] FontFamilyFont = new int[] { + 16844082, + 16844083, + 16844095, + 2130772311, + 2130772312, + 2130772313}; + + // aapt resource value: 0 + public const int FontFamilyFont_android_font = 0; + + // aapt resource value: 2 + public const int FontFamilyFont_android_fontStyle = 2; + + // aapt resource value: 1 + public const int FontFamilyFont_android_fontWeight = 1; + + // aapt resource value: 4 + public const int FontFamilyFont_font = 4; + + // aapt resource value: 3 + public const int FontFamilyFont_fontStyle = 3; + + // aapt resource value: 5 + public const int FontFamilyFont_fontWeight = 5; + + public static int[] ForegroundLinearLayout = new int[] { + 16843017, + 16843264, + 2130772265}; + + // aapt resource value: 0 + public const int ForegroundLinearLayout_android_foreground = 0; + + // aapt resource value: 1 + public const int ForegroundLinearLayout_android_foregroundGravity = 1; + + // aapt resource value: 2 + public const int ForegroundLinearLayout_foregroundInsidePadding = 2; + + public static int[] LinearLayoutCompat = new int[] { + 16842927, + 16842948, + 16843046, + 16843047, + 16843048, + 2130771988, + 2130772158, + 2130772159, + 2130772160}; + + // aapt resource value: 2 + public const int LinearLayoutCompat_android_baselineAligned = 2; + + // aapt resource value: 3 + public const int LinearLayoutCompat_android_baselineAlignedChildIndex = 3; + + // aapt resource value: 0 + public const int LinearLayoutCompat_android_gravity = 0; + + // aapt resource value: 1 + public const int LinearLayoutCompat_android_orientation = 1; + + // aapt resource value: 4 + public const int LinearLayoutCompat_android_weightSum = 4; + + // aapt resource value: 5 + public const int LinearLayoutCompat_divider = 5; + + // aapt resource value: 8 + public const int LinearLayoutCompat_dividerPadding = 8; + + // aapt resource value: 6 + public const int LinearLayoutCompat_measureWithLargestChild = 6; + + // aapt resource value: 7 + public const int LinearLayoutCompat_showDividers = 7; + + public static int[] LinearLayoutCompat_Layout = new int[] { + 16842931, + 16842996, + 16842997, + 16843137}; + + // aapt resource value: 0 + public const int LinearLayoutCompat_Layout_android_layout_gravity = 0; + + // aapt resource value: 2 + public const int LinearLayoutCompat_Layout_android_layout_height = 2; + + // aapt resource value: 3 + public const int LinearLayoutCompat_Layout_android_layout_weight = 3; + + // aapt resource value: 1 + public const int LinearLayoutCompat_Layout_android_layout_width = 1; + + public static int[] ListPopupWindow = new int[] { + 16843436, + 16843437}; + + // aapt resource value: 0 + public const int ListPopupWindow_android_dropDownHorizontalOffset = 0; + + // aapt resource value: 1 + public const int ListPopupWindow_android_dropDownVerticalOffset = 1; + + public static int[] MenuGroup = new int[] { + 16842766, + 16842960, + 16843156, + 16843230, + 16843231, + 16843232}; + + // aapt resource value: 5 + public const int MenuGroup_android_checkableBehavior = 5; + + // aapt resource value: 0 + public const int MenuGroup_android_enabled = 0; + + // aapt resource value: 1 + public const int MenuGroup_android_id = 1; + + // aapt resource value: 3 + public const int MenuGroup_android_menuCategory = 3; + + // aapt resource value: 4 + public const int MenuGroup_android_orderInCategory = 4; + + // aapt resource value: 2 + public const int MenuGroup_android_visible = 2; + + public static int[] MenuItem = new int[] { + 16842754, + 16842766, + 16842960, + 16843014, + 16843156, + 16843230, + 16843231, + 16843233, + 16843234, + 16843235, + 16843236, + 16843237, + 16843375, + 2130772161, + 2130772162, + 2130772163, + 2130772164, + 2130772165, + 2130772166, + 2130772167, + 2130772168, + 2130772169, + 2130772170}; + + // aapt resource value: 16 + public const int MenuItem_actionLayout = 16; + + // aapt resource value: 18 + public const int MenuItem_actionProviderClass = 18; + + // aapt resource value: 17 + public const int MenuItem_actionViewClass = 17; + + // aapt resource value: 13 + public const int MenuItem_alphabeticModifiers = 13; + + // aapt resource value: 9 + public const int MenuItem_android_alphabeticShortcut = 9; + + // aapt resource value: 11 + public const int MenuItem_android_checkable = 11; + + // aapt resource value: 3 + public const int MenuItem_android_checked = 3; + + // aapt resource value: 1 + public const int MenuItem_android_enabled = 1; + + // aapt resource value: 0 + public const int MenuItem_android_icon = 0; + + // aapt resource value: 2 + public const int MenuItem_android_id = 2; + + // aapt resource value: 5 + public const int MenuItem_android_menuCategory = 5; + + // aapt resource value: 10 + public const int MenuItem_android_numericShortcut = 10; + + // aapt resource value: 12 + public const int MenuItem_android_onClick = 12; + + // aapt resource value: 6 + public const int MenuItem_android_orderInCategory = 6; + + // aapt resource value: 7 + public const int MenuItem_android_title = 7; + + // aapt resource value: 8 + public const int MenuItem_android_titleCondensed = 8; + + // aapt resource value: 4 + public const int MenuItem_android_visible = 4; + + // aapt resource value: 19 + public const int MenuItem_contentDescription = 19; + + // aapt resource value: 21 + public const int MenuItem_iconTint = 21; + + // aapt resource value: 22 + public const int MenuItem_iconTintMode = 22; + + // aapt resource value: 14 + public const int MenuItem_numericModifiers = 14; + + // aapt resource value: 15 + public const int MenuItem_showAsAction = 15; + + // aapt resource value: 20 + public const int MenuItem_tooltipText = 20; + + public static int[] MenuView = new int[] { + 16842926, + 16843052, + 16843053, + 16843054, + 16843055, + 16843056, + 16843057, + 2130772171, + 2130772172}; + + // aapt resource value: 4 + public const int MenuView_android_headerBackground = 4; + + // aapt resource value: 2 + public const int MenuView_android_horizontalDivider = 2; + + // aapt resource value: 5 + public const int MenuView_android_itemBackground = 5; + + // aapt resource value: 6 + public const int MenuView_android_itemIconDisabledAlpha = 6; + + // aapt resource value: 1 + public const int MenuView_android_itemTextAppearance = 1; + + // aapt resource value: 3 + public const int MenuView_android_verticalDivider = 3; + + // aapt resource value: 0 + public const int MenuView_android_windowAnimationStyle = 0; + + // aapt resource value: 7 + public const int MenuView_preserveIconSpacing = 7; + + // aapt resource value: 8 + public const int MenuView_subMenuArrow = 8; + + public static int[] NavigationView = new int[] { + 16842964, + 16842973, + 16843039, + 2130772005, + 2130772266, + 2130772267, + 2130772268, + 2130772269, + 2130772270, + 2130772271}; + + // aapt resource value: 0 + public const int NavigationView_android_background = 0; + + // aapt resource value: 1 + public const int NavigationView_android_fitsSystemWindows = 1; + + // aapt resource value: 2 + public const int NavigationView_android_maxWidth = 2; + + // aapt resource value: 3 + public const int NavigationView_elevation = 3; + + // aapt resource value: 9 + public const int NavigationView_headerLayout = 9; + + // aapt resource value: 7 + public const int NavigationView_itemBackground = 7; + + // aapt resource value: 5 + public const int NavigationView_itemIconTint = 5; + + // aapt resource value: 8 + public const int NavigationView_itemTextAppearance = 8; + + // aapt resource value: 6 + public const int NavigationView_itemTextColor = 6; + + // aapt resource value: 4 + public const int NavigationView_menu = 4; + + public static int[] PopupWindow = new int[] { + 16843126, + 16843465, + 2130772173}; + + // aapt resource value: 1 + public const int PopupWindow_android_popupAnimationStyle = 1; + + // aapt resource value: 0 + public const int PopupWindow_android_popupBackground = 0; + + // aapt resource value: 2 + public const int PopupWindow_overlapAnchor = 2; + + public static int[] PopupWindowBackgroundState = new int[] { + 2130772174}; + + // aapt resource value: 0 + public const int PopupWindowBackgroundState_state_above_anchor = 0; + + public static int[] RecycleListView = new int[] { + 2130772175, + 2130772176}; + + // aapt resource value: 0 + public const int RecycleListView_paddingBottomNoButtons = 0; + + // aapt resource value: 1 + public const int RecycleListView_paddingTopNoTitle = 1; + + public static int[] RecyclerView = new int[] { + 16842948, + 16842993, + 2130771968, + 2130771969, + 2130771970, + 2130771971, + 2130771972, + 2130771973, + 2130771974, + 2130771975, + 2130771976}; + + // aapt resource value: 1 + public const int RecyclerView_android_descendantFocusability = 1; + + // aapt resource value: 0 + public const int RecyclerView_android_orientation = 0; + + // aapt resource value: 6 + public const int RecyclerView_fastScrollEnabled = 6; + + // aapt resource value: 9 + public const int RecyclerView_fastScrollHorizontalThumbDrawable = 9; + + // aapt resource value: 10 + public const int RecyclerView_fastScrollHorizontalTrackDrawable = 10; + + // aapt resource value: 7 + public const int RecyclerView_fastScrollVerticalThumbDrawable = 7; + + // aapt resource value: 8 + public const int RecyclerView_fastScrollVerticalTrackDrawable = 8; + + // aapt resource value: 2 + public const int RecyclerView_layoutManager = 2; + + // aapt resource value: 4 + public const int RecyclerView_reverseLayout = 4; + + // aapt resource value: 3 + public const int RecyclerView_spanCount = 3; + + // aapt resource value: 5 + public const int RecyclerView_stackFromEnd = 5; + + public static int[] ScrimInsetsFrameLayout = new int[] { + 2130772272}; + + // aapt resource value: 0 + public const int ScrimInsetsFrameLayout_insetForeground = 0; + + public static int[] ScrollingViewBehavior_Layout = new int[] { + 2130772273}; + + // aapt resource value: 0 + public const int ScrollingViewBehavior_Layout_behavior_overlapTop = 0; + + public static int[] SearchView = new int[] { + 16842970, + 16843039, + 16843296, + 16843364, + 2130772177, + 2130772178, + 2130772179, + 2130772180, + 2130772181, + 2130772182, + 2130772183, + 2130772184, + 2130772185, + 2130772186, + 2130772187, + 2130772188, + 2130772189}; + + // aapt resource value: 0 + public const int SearchView_android_focusable = 0; + + // aapt resource value: 3 + public const int SearchView_android_imeOptions = 3; + + // aapt resource value: 2 + public const int SearchView_android_inputType = 2; + + // aapt resource value: 1 + public const int SearchView_android_maxWidth = 1; + + // aapt resource value: 8 + public const int SearchView_closeIcon = 8; + + // aapt resource value: 13 + public const int SearchView_commitIcon = 13; + + // aapt resource value: 7 + public const int SearchView_defaultQueryHint = 7; + + // aapt resource value: 9 + public const int SearchView_goIcon = 9; + + // aapt resource value: 5 + public const int SearchView_iconifiedByDefault = 5; + + // aapt resource value: 4 + public const int SearchView_layout = 4; + + // aapt resource value: 15 + public const int SearchView_queryBackground = 15; + + // aapt resource value: 6 + public const int SearchView_queryHint = 6; + + // aapt resource value: 11 + public const int SearchView_searchHintIcon = 11; + + // aapt resource value: 10 + public const int SearchView_searchIcon = 10; + + // aapt resource value: 16 + public const int SearchView_submitBackground = 16; + + // aapt resource value: 14 + public const int SearchView_suggestionRowLayout = 14; + + // aapt resource value: 12 + public const int SearchView_voiceIcon = 12; + + public static int[] SnackbarLayout = new int[] { + 16843039, + 2130772005, + 2130772274}; + + // aapt resource value: 0 + public const int SnackbarLayout_android_maxWidth = 0; + + // aapt resource value: 1 + public const int SnackbarLayout_elevation = 1; + + // aapt resource value: 2 + public const int SnackbarLayout_maxActionInlineWidth = 2; + + public static int[] Spinner = new int[] { + 16842930, + 16843126, + 16843131, + 16843362, + 2130772006}; + + // aapt resource value: 3 + public const int Spinner_android_dropDownWidth = 3; + + // aapt resource value: 0 + public const int Spinner_android_entries = 0; + + // aapt resource value: 1 + public const int Spinner_android_popupBackground = 1; + + // aapt resource value: 2 + public const int Spinner_android_prompt = 2; + + // aapt resource value: 4 + public const int Spinner_popupTheme = 4; + + public static int[] SwitchCompat = new int[] { + 16843044, + 16843045, + 16843074, + 2130772190, + 2130772191, + 2130772192, + 2130772193, + 2130772194, + 2130772195, + 2130772196, + 2130772197, + 2130772198, + 2130772199, + 2130772200}; + + // aapt resource value: 1 + public const int SwitchCompat_android_textOff = 1; + + // aapt resource value: 0 + public const int SwitchCompat_android_textOn = 0; + + // aapt resource value: 2 + public const int SwitchCompat_android_thumb = 2; + + // aapt resource value: 13 + public const int SwitchCompat_showText = 13; + + // aapt resource value: 12 + public const int SwitchCompat_splitTrack = 12; + + // aapt resource value: 10 + public const int SwitchCompat_switchMinWidth = 10; + + // aapt resource value: 11 + public const int SwitchCompat_switchPadding = 11; + + // aapt resource value: 9 + public const int SwitchCompat_switchTextAppearance = 9; + + // aapt resource value: 8 + public const int SwitchCompat_thumbTextPadding = 8; + + // aapt resource value: 3 + public const int SwitchCompat_thumbTint = 3; + + // aapt resource value: 4 + public const int SwitchCompat_thumbTintMode = 4; + + // aapt resource value: 5 + public const int SwitchCompat_track = 5; + + // aapt resource value: 6 + public const int SwitchCompat_trackTint = 6; + + // aapt resource value: 7 + public const int SwitchCompat_trackTintMode = 7; + + public static int[] TabItem = new int[] { + 16842754, + 16842994, + 16843087}; + + // aapt resource value: 0 + public const int TabItem_android_icon = 0; + + // aapt resource value: 1 + public const int TabItem_android_layout = 1; + + // aapt resource value: 2 + public const int TabItem_android_text = 2; + + public static int[] TabLayout = new int[] { + 2130772275, + 2130772276, + 2130772277, + 2130772278, + 2130772279, + 2130772280, + 2130772281, + 2130772282, + 2130772283, + 2130772284, + 2130772285, + 2130772286, + 2130772287, + 2130772288, + 2130772289, + 2130772290}; + + // aapt resource value: 3 + public const int TabLayout_tabBackground = 3; + + // aapt resource value: 2 + public const int TabLayout_tabContentStart = 2; + + // aapt resource value: 5 + public const int TabLayout_tabGravity = 5; + + // aapt resource value: 0 + public const int TabLayout_tabIndicatorColor = 0; + + // aapt resource value: 1 + public const int TabLayout_tabIndicatorHeight = 1; + + // aapt resource value: 7 + public const int TabLayout_tabMaxWidth = 7; + + // aapt resource value: 6 + public const int TabLayout_tabMinWidth = 6; + + // aapt resource value: 4 + public const int TabLayout_tabMode = 4; + + // aapt resource value: 15 + public const int TabLayout_tabPadding = 15; + + // aapt resource value: 14 + public const int TabLayout_tabPaddingBottom = 14; + + // aapt resource value: 13 + public const int TabLayout_tabPaddingEnd = 13; + + // aapt resource value: 11 + public const int TabLayout_tabPaddingStart = 11; + + // aapt resource value: 12 + public const int TabLayout_tabPaddingTop = 12; + + // aapt resource value: 10 + public const int TabLayout_tabSelectedTextColor = 10; + + // aapt resource value: 8 + public const int TabLayout_tabTextAppearance = 8; + + // aapt resource value: 9 + public const int TabLayout_tabTextColor = 9; + + public static int[] TextAppearance = new int[] { + 16842901, + 16842902, + 16842903, + 16842904, + 16842906, + 16842907, + 16843105, + 16843106, + 16843107, + 16843108, + 16843692, + 2130772022, + 2130772028}; + + // aapt resource value: 10 + public const int TextAppearance_android_fontFamily = 10; + + // aapt resource value: 6 + public const int TextAppearance_android_shadowColor = 6; + + // aapt resource value: 7 + public const int TextAppearance_android_shadowDx = 7; + + // aapt resource value: 8 + public const int TextAppearance_android_shadowDy = 8; + + // aapt resource value: 9 + public const int TextAppearance_android_shadowRadius = 9; + + // aapt resource value: 3 + public const int TextAppearance_android_textColor = 3; + + // aapt resource value: 4 + public const int TextAppearance_android_textColorHint = 4; + + // aapt resource value: 5 + public const int TextAppearance_android_textColorLink = 5; + + // aapt resource value: 0 + public const int TextAppearance_android_textSize = 0; + + // aapt resource value: 2 + public const int TextAppearance_android_textStyle = 2; + + // aapt resource value: 1 + public const int TextAppearance_android_typeface = 1; + + // aapt resource value: 12 + public const int TextAppearance_fontFamily = 12; + + // aapt resource value: 11 + public const int TextAppearance_textAllCaps = 11; + + public static int[] TextInputLayout = new int[] { + 16842906, + 16843088, + 2130772291, + 2130772292, + 2130772293, + 2130772294, + 2130772295, + 2130772296, + 2130772297, + 2130772298, + 2130772299, + 2130772300, + 2130772301, + 2130772302, + 2130772303, + 2130772304}; + + // aapt resource value: 1 + public const int TextInputLayout_android_hint = 1; + + // aapt resource value: 0 + public const int TextInputLayout_android_textColorHint = 0; + + // aapt resource value: 6 + public const int TextInputLayout_counterEnabled = 6; + + // aapt resource value: 7 + public const int TextInputLayout_counterMaxLength = 7; + + // aapt resource value: 9 + public const int TextInputLayout_counterOverflowTextAppearance = 9; + + // aapt resource value: 8 + public const int TextInputLayout_counterTextAppearance = 8; + + // aapt resource value: 4 + public const int TextInputLayout_errorEnabled = 4; + + // aapt resource value: 5 + public const int TextInputLayout_errorTextAppearance = 5; + + // aapt resource value: 10 + public const int TextInputLayout_hintAnimationEnabled = 10; + + // aapt resource value: 3 + public const int TextInputLayout_hintEnabled = 3; + + // aapt resource value: 2 + public const int TextInputLayout_hintTextAppearance = 2; + + // aapt resource value: 13 + public const int TextInputLayout_passwordToggleContentDescription = 13; + + // aapt resource value: 12 + public const int TextInputLayout_passwordToggleDrawable = 12; + + // aapt resource value: 11 + public const int TextInputLayout_passwordToggleEnabled = 11; + + // aapt resource value: 14 + public const int TextInputLayout_passwordToggleTint = 14; + + // aapt resource value: 15 + public const int TextInputLayout_passwordToggleTintMode = 15; + + public static int[] Toolbar = new int[] { + 16842927, + 16843072, + 2130771980, + 2130771983, + 2130771987, + 2130771999, + 2130772000, + 2130772001, + 2130772002, + 2130772003, + 2130772004, + 2130772006, + 2130772201, + 2130772202, + 2130772203, + 2130772204, + 2130772205, + 2130772206, + 2130772207, + 2130772208, + 2130772209, + 2130772210, + 2130772211, + 2130772212, + 2130772213, + 2130772214, + 2130772215, + 2130772216, + 2130772217}; + + // aapt resource value: 0 + public const int Toolbar_android_gravity = 0; + + // aapt resource value: 1 + public const int Toolbar_android_minHeight = 1; + + // aapt resource value: 21 + public const int Toolbar_buttonGravity = 21; + + // aapt resource value: 23 + public const int Toolbar_collapseContentDescription = 23; + + // aapt resource value: 22 + public const int Toolbar_collapseIcon = 22; + + // aapt resource value: 6 + public const int Toolbar_contentInsetEnd = 6; + + // aapt resource value: 10 + public const int Toolbar_contentInsetEndWithActions = 10; + + // aapt resource value: 7 + public const int Toolbar_contentInsetLeft = 7; + + // aapt resource value: 8 + public const int Toolbar_contentInsetRight = 8; + + // aapt resource value: 5 + public const int Toolbar_contentInsetStart = 5; + + // aapt resource value: 9 + public const int Toolbar_contentInsetStartWithNavigation = 9; + + // aapt resource value: 4 + public const int Toolbar_logo = 4; + + // aapt resource value: 26 + public const int Toolbar_logoDescription = 26; + + // aapt resource value: 20 + public const int Toolbar_maxButtonHeight = 20; + + // aapt resource value: 25 + public const int Toolbar_navigationContentDescription = 25; + + // aapt resource value: 24 + public const int Toolbar_navigationIcon = 24; + + // aapt resource value: 11 + public const int Toolbar_popupTheme = 11; + + // aapt resource value: 3 + public const int Toolbar_subtitle = 3; + + // aapt resource value: 13 + public const int Toolbar_subtitleTextAppearance = 13; + + // aapt resource value: 28 + public const int Toolbar_subtitleTextColor = 28; + + // aapt resource value: 2 + public const int Toolbar_title = 2; + + // aapt resource value: 14 + public const int Toolbar_titleMargin = 14; + + // aapt resource value: 18 + public const int Toolbar_titleMarginBottom = 18; + + // aapt resource value: 16 + public const int Toolbar_titleMarginEnd = 16; + + // aapt resource value: 15 + public const int Toolbar_titleMarginStart = 15; + + // aapt resource value: 17 + public const int Toolbar_titleMarginTop = 17; + + // aapt resource value: 19 + public const int Toolbar_titleMargins = 19; + + // aapt resource value: 12 + public const int Toolbar_titleTextAppearance = 12; + + // aapt resource value: 27 + public const int Toolbar_titleTextColor = 27; + + public static int[] View = new int[] { + 16842752, + 16842970, + 2130772218, + 2130772219, + 2130772220}; + + // aapt resource value: 1 + public const int View_android_focusable = 1; + + // aapt resource value: 0 + public const int View_android_theme = 0; + + // aapt resource value: 3 + public const int View_paddingEnd = 3; + + // aapt resource value: 2 + public const int View_paddingStart = 2; + + // aapt resource value: 4 + public const int View_theme = 4; + + public static int[] ViewBackgroundHelper = new int[] { + 16842964, + 2130772221, + 2130772222}; + + // aapt resource value: 0 + public const int ViewBackgroundHelper_android_background = 0; + + // aapt resource value: 1 + public const int ViewBackgroundHelper_backgroundTint = 1; + + // aapt resource value: 2 + public const int ViewBackgroundHelper_backgroundTintMode = 2; + + public static int[] ViewStubCompat = new int[] { + 16842960, + 16842994, + 16842995}; + + // aapt resource value: 0 + public const int ViewStubCompat_android_id = 0; + + // aapt resource value: 2 + public const int ViewStubCompat_android_inflatedId = 2; + + // aapt resource value: 1 + public const int ViewStubCompat_android_layout = 1; + + static Styleable() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Styleable() + { + } + } + } +} +#pragma warning restore 1591 diff --git a/osu.Android/Resources/layout/activity_main.axml b/osu.Android/Resources/layout/activity_main.axml new file mode 100644 index 0000000000..fc0060857f --- /dev/null +++ b/osu.Android/Resources/layout/activity_main.axml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/osu.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml b/osu.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000000..036d09bc5f --- /dev/null +++ b/osu.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/osu.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml b/osu.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000000..036d09bc5f --- /dev/null +++ b/osu.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/osu.Android/Resources/mipmap-hdpi/ic_launcher.png b/osu.Android/Resources/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2af076dabd0afe60561f41903cc42931db8d33cd GIT binary patch literal 8828 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 N&GnQ!lI8SQ#{X#Iv!eh2 literal 0 HcmV?d00001 diff --git a/osu.Android/Resources/mipmap-hdpi/ic_launcher_round.png b/osu.Android/Resources/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..2af076dabd0afe60561f41903cc42931db8d33cd GIT binary patch literal 8828 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 LNkvXXu0mjfp$&R0 literal 0 HcmV?d00001 diff --git a/osu.Android/Resources/mipmap-mdpi/ic_launcher_foreground.png b/osu.Android/Resources/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..a12b157f00e3022cfe81a1e767525c33f4ed2cf1 GIT binary patch literal 958 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz1|<8_!p|}=Ft>WTIEGZ*dOIh!!#7am`0)iN z!-Y*JzdqP8rN&2Y&y2(+EtA?m9-5+}#BXAw@$*D;zxcf=lRhYP2`ZYNoGdU|=;=Y1 z!-o@UOzpBVHoTpyopyF#@i)8YcdVaV?2ljDUj6>w?`yyA*Pf5cUSE9b6wq26;8J@~ z){!@7GpTmNE>2kO_POn1zf8`~}P?%{85(;s&nc+C&;t$4D5$+f9? z-8>e~Z&%(_OwrVd==PGc4mhTFjVafjdCqsM|EvEe$2)U;a9s0IGofbtHcpKz;cJR= z`DNzVI-iMtrg<$r*EFejE8l0oMM3e)a|=o;x>Mhk@*n)xx%2Rrt=4TnivwP5zpS-& z@5h3w<{9>vH!6KP74q!po!oh)$BI~jUu}4P|5ofvi@(2i9NyELbZ$qD}PI&+JJ3+^f2=YEuP zjpepXu;`->)%n@lB|b@Iv$k0qhJJp%S?O9t?)zjLwwY?z@=v^12)=lt^ZcwNoye^x z_uu*-x}ntY`mc3S`yMaaHuurqE~e`{G_IsMZdhw*{kDDS9h3WSQa;8d3vwO)d?WE+ z%*LAIs=2#$t=BZmPTP}xMpj0I9ti9_c{r`p zu+;ELV)~|tmk}}-GjAWQO5U<}Lr?bB5UX>pYf5~UOnY%ZTQR${nq6YQOHc15>q%#$ zl8$8k_1fsCw;<~OiJ-OiE?f7RJWt%N`#e!y=2`BhIqju|a?kW5QupmV#wx6HrSs?J z&nJroVy6i|*Og1U`{c;a^^dPvTfNJjdCg1nUS<*OC dK7&Kx57tYsZ49$p7vBM?@pScbS?83{1OVHE%8UR2 literal 0 HcmV?d00001 diff --git a/osu.Android/Resources/mipmap-mdpi/ic_launcher_round.png b/osu.Android/Resources/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..c51990875e404a36964d727d376637c6e6c81305 GIT binary patch literal 5045 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 LNkvXXu0mjfp$&R0 literal 0 HcmV?d00001 diff --git a/osu.Android/Resources/mipmap-xhdpi/ic_launcher.png b/osu.Android/Resources/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4e8d9b598cd21e01bbbca29aa077d99a4dabefe3 GIT binary patch literal 12931 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 b;}yxl--Ss53i@>Q4YQuNcebmsMJN0NT!aL! literal 0 HcmV?d00001 diff --git a/osu.Android/Resources/mipmap-xhdpi/ic_launcher_round.png b/osu.Android/Resources/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..4e8d9b598cd21e01bbbca29aa077d99a4dabefe3 GIT binary patch literal 12931 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 literal 0 HcmV?d00001 diff --git a/osu.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png b/osu.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..2d3354eaf2778d4ae52cf3e1368f131be63ccb62 GIT binary patch literal 21256 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 z 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 z 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 F@PB1o0BisN literal 0 HcmV?d00001 diff --git a/osu.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png b/osu.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b832e7f7a81d3d69ad5c0b3ea88dfd739e36c0 GIT binary patch literal 30047 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 z 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 + osu.Android + Settings + diff --git a/osu.Android/Resources/values/colors.xml b/osu.Android/Resources/values/colors.xml new file mode 100644 index 0000000000..17bb9a9dd1 --- /dev/null +++ b/osu.Android/Resources/values/colors.xml @@ -0,0 +1,6 @@ + + + #2c3e50 + #1B3147 + #3498db + diff --git a/osu.Android/Resources/values/ic_launcher_background.xml b/osu.Android/Resources/values/ic_launcher_background.xml new file mode 100644 index 0000000000..6ec24e6413 --- /dev/null +++ b/osu.Android/Resources/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #2C3E50 + \ No newline at end of file diff --git a/osu.Android/Resources/values/styles.xml b/osu.Android/Resources/values/styles.xml new file mode 100644 index 0000000000..5885930df6 --- /dev/null +++ b/osu.Android/Resources/values/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/osu.Android/bass.dll b/osu.Android/bass.dll new file mode 100644 index 0000000000000000000000000000000000000000..3cd403c3acbd9e89ad071c5069392ea208baaa38 GIT binary patch literal 210944 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 S(A~_h>u%w{`TPGJ1^#c6n$Mj8 literal 0 HcmV?d00001 diff --git a/osu.Android/lib/arm64-v8a/libbass.so b/osu.Android/lib/arm64-v8a/libbass.so new file mode 100644 index 0000000000000000000000000000000000000000..d5c24b3e4b2918a33153cf6a0561366996be16f9 GIT binary patch literal 308904 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

^m>m@_QI`Gyr3D`HGSXQzB#7TNkp#fsh! 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%0A0ic&Bx^ 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 T?MJo0F6IAiepbA(NM`E) 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 z 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 EAM_!vo&W#< literal 0 HcmV?d00001 diff --git a/osu.Android/lib/armeabi-v7a/libbass_fx.so b/osu.Android/lib/armeabi-v7a/libbass_fx.so new file mode 100644 index 0000000000000000000000000000000000000000..006e2feb30bb005eec727f829cc3965fb136f16c GIT binary patch literal 92176 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 V>7s+MhuN$Sd><=0>Ypgz{{j9{WcmOA literal 0 HcmV?d00001 diff --git a/osu.Android/osu.Android.csproj b/osu.Android/osu.Android.csproj new file mode 100644 index 0000000000..494ff6044b --- /dev/null +++ b/osu.Android/osu.Android.csproj @@ -0,0 +1,175 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {D1D5F9A8-B40B-40E6-B02F-482D03346D3D} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {122416d6-6b49-4ee2-a1e8-b825f31c79fe} + Library + Properties + osu.Android + osu.Android + 512 + True + Resources\Resource.designer.cs + Resource + Off + false + v8.1 + Properties\AndroidManifest.xml + Resources + Assets + Xamarin.Android.Net.AndroidClientHandler + + + True + portable + False + bin\Debug\ + DEBUG;TRACE + prompt + 4 + True + None + False + false + false + false + CJK;Mideast;Rare;West;Other + + + + True + pdbonly + True + bin\Release\ + TRACE + prompt + 4 + true + False + SdkOnly + True + + + + + + + + + + + + + + + + osu.licenseheader + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + + + + Designer + + + + + + + + + + + + + + + + + + + + + + + + + + 0.22.0 + + + 1.1.0 + + + 1.0.0-beta0006 + + + 1.0.0-beta0005 + + + + + + {0fd409e8-a359-42bd-bc52-6a4745a122e5} + osu.Framework.Android + + + {0a8ba083-9d08-45ad-8653-796db1653388} + osu.Framework + + + {d9a367c9-4c1a-489f-9b05-a0cea2b53b58} + osu.Game.Resources + + + {58f6c80c-1253-4a0e-a465-b8c85ebeadf3} + osu.Game.Rulesets.Catch + + + {48f4582b-7687-4621-9cbe-5c24197cb536} + osu.Game.Rulesets.Mania + + + {c92a607b-1fdd-4954-9f92-03ff547d9080} + osu.Game.Rulesets.Osu + + + {f167e17a-7de6-4af5-b920-a5112296c695} + osu.Game.Rulesets.Taiko + + + {2a66dd92-adb1-4994-89e2-c94e04acda0d} + osu.Game + + + + + + + + \ No newline at end of file From 5d7043156be563cd434e94913f383e2269fa17b2 Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Fri, 14 Dec 2018 09:07:17 -0600 Subject: [PATCH 012/267] Attempt to get the icon right. --- osu.Android/Properties/AndroidManifest.xml | 3 +-- osu.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml | 2 +- osu.Android/Resources/values/Strings.xml | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/osu.Android/Properties/AndroidManifest.xml b/osu.Android/Properties/AndroidManifest.xml index 12d1f326b9..4ae7d35c2e 100644 --- a/osu.Android/Properties/AndroidManifest.xml +++ b/osu.Android/Properties/AndroidManifest.xml @@ -4,6 +4,5 @@ - - + \ No newline at end of file diff --git a/osu.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml b/osu.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml index 036d09bc5f..9412204815 100644 --- a/osu.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml +++ b/osu.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/osu.Android/Resources/values/Strings.xml b/osu.Android/Resources/values/Strings.xml index fa7ba67465..21f749f876 100644 --- a/osu.Android/Resources/values/Strings.xml +++ b/osu.Android/Resources/values/Strings.xml @@ -1,4 +1,4 @@ - osu.Android + osu!lazer Settings From 214908aaa024c816032de5df11ed8ff35cbd6407 Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Fri, 14 Dec 2018 09:27:02 -0600 Subject: [PATCH 013/267] Add opsu migration, fix font not rendering --- osu.Android/GameView.cs | 3 +-- osu.Android/MainActivity.cs | 2 ++ osu.Android/OsuGameAndroid.cs | 44 ++++++++++++++++++++++++++++++++++ osu.Android/osu.Android.csproj | 5 ++-- 4 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 osu.Android/OsuGameAndroid.cs diff --git a/osu.Android/GameView.cs b/osu.Android/GameView.cs index 649ee0134b..dfae65a2e9 100644 --- a/osu.Android/GameView.cs +++ b/osu.Android/GameView.cs @@ -3,7 +3,6 @@ using Android.Content; using Android.Util; -using osu.Framework; using osu.Framework.Android; using osu.Game; @@ -21,6 +20,6 @@ namespace osu.Android { CreateGame(); } - public override Framework.Game CreateGame() => new OsuGame(); + public override Framework.Game CreateGame() => new OsuGameAndroid(); } } diff --git a/osu.Android/MainActivity.cs b/osu.Android/MainActivity.cs index 3a8a5026bc..ff1fd9eba1 100644 --- a/osu.Android/MainActivity.cs +++ b/osu.Android/MainActivity.cs @@ -5,6 +5,7 @@ using Android.App; using Android.OS; using Android.Runtime; using Android.Widget; +using Android.Views; using Android.Content.PM; namespace osu.Android @@ -17,6 +18,7 @@ namespace osu.Android base.OnCreate(savedInstanceState); // Set our view from the "main" layout resource SetContentView(Resource.Layout.activity_main); + Window.AddFlags(WindowManagerFlags.KeepScreenOn); } public override void OnBackPressed() { diff --git a/osu.Android/OsuGameAndroid.cs b/osu.Android/OsuGameAndroid.cs new file mode 100644 index 0000000000..e2f016887d --- /dev/null +++ b/osu.Android/OsuGameAndroid.cs @@ -0,0 +1,44 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Android; +using osu.Framework.Platform; +using osu.Game; +using System; +using System.IO; + +namespace osu.Android +{ + internal class OsuGameAndroid : OsuGame + { + public OsuGameAndroid() : base() + { + + } + public override Storage GetStorageForStableInstall() + { + return new OpsuStorage(); + } + + // For better migration from opsu! to osu!lazer (WIP) + private class OpsuStorage : AndroidStorage + { + bool checkExists(string p) => Directory.Exists(Path.Combine(p, "Songs")); + + protected override string LocateBasePath() + { + BasePath = base.LocateBasePath(); + string opsuInstallPath = Path.Combine(BasePath, "opsu"); + Console.WriteLine(opsuInstallPath); + if (checkExists(opsuInstallPath)) + return opsuInstallPath; + return null; + } + + public OpsuStorage() : base(string.Empty, null) + { + BasePath = LocateBasePath(); + } + } + } +} diff --git a/osu.Android/osu.Android.csproj b/osu.Android/osu.Android.csproj index 494ff6044b..42e472bc83 100644 --- a/osu.Android/osu.Android.csproj +++ b/osu.Android/osu.Android.csproj @@ -63,6 +63,7 @@ + @@ -120,10 +121,10 @@ 1.1.0 - 1.0.0-beta0006 + 1.0.0-dev000094 - 1.0.0-beta0005 + 1.0.0-dev002278 From 660be6a2a454d950bba18c524ba83b7ca9bef8f8 Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Thu, 20 Dec 2018 09:11:20 -0600 Subject: [PATCH 014/267] Remove ability to import from opsu! This has been struck down by @ppy --- osu.Android/GameView.cs | 2 +- osu.Android/OsuGameAndroid.cs | 44 ---------------------- osu.Android/Properties/AndroidManifest.xml | 1 + osu.Android/osu.Android.csproj | 2 +- 4 files changed, 3 insertions(+), 46 deletions(-) delete mode 100644 osu.Android/OsuGameAndroid.cs diff --git a/osu.Android/GameView.cs b/osu.Android/GameView.cs index dfae65a2e9..fc9cdeda53 100644 --- a/osu.Android/GameView.cs +++ b/osu.Android/GameView.cs @@ -20,6 +20,6 @@ namespace osu.Android { CreateGame(); } - public override Framework.Game CreateGame() => new OsuGameAndroid(); + public override Framework.Game CreateGame() => new OsuGame(); } } diff --git a/osu.Android/OsuGameAndroid.cs b/osu.Android/OsuGameAndroid.cs deleted file mode 100644 index e2f016887d..0000000000 --- a/osu.Android/OsuGameAndroid.cs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using osu.Framework.Android; -using osu.Framework.Platform; -using osu.Game; -using System; -using System.IO; - -namespace osu.Android -{ - internal class OsuGameAndroid : OsuGame - { - public OsuGameAndroid() : base() - { - - } - public override Storage GetStorageForStableInstall() - { - return new OpsuStorage(); - } - - // For better migration from opsu! to osu!lazer (WIP) - private class OpsuStorage : AndroidStorage - { - bool checkExists(string p) => Directory.Exists(Path.Combine(p, "Songs")); - - protected override string LocateBasePath() - { - BasePath = base.LocateBasePath(); - string opsuInstallPath = Path.Combine(BasePath, "opsu"); - Console.WriteLine(opsuInstallPath); - if (checkExists(opsuInstallPath)) - return opsuInstallPath; - return null; - } - - public OpsuStorage() : base(string.Empty, null) - { - BasePath = LocateBasePath(); - } - } - } -} diff --git a/osu.Android/Properties/AndroidManifest.xml b/osu.Android/Properties/AndroidManifest.xml index 4ae7d35c2e..76cb58969f 100644 --- a/osu.Android/Properties/AndroidManifest.xml +++ b/osu.Android/Properties/AndroidManifest.xml @@ -4,5 +4,6 @@ + \ No newline at end of file diff --git a/osu.Android/osu.Android.csproj b/osu.Android/osu.Android.csproj index 42e472bc83..8a481b5239 100644 --- a/osu.Android/osu.Android.csproj +++ b/osu.Android/osu.Android.csproj @@ -40,6 +40,7 @@ false CJK;Mideast;Rare;West;Other + false True @@ -63,7 +64,6 @@ - From ddce608f97977d5dd6b5dd7ebf8eaff4ac9cda6e Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Sat, 5 Jan 2019 22:15:09 -0600 Subject: [PATCH 015/267] Setup osu.Android solution and its ruleset tests --- osu.Android.sln | 124 ++++++++++++++++++ osu.Android/GameView.cs | 25 ---- osu.Android/OsuGameActivity.cs | 17 +++ osu.Android/osu.Android.csproj | 23 +--- .../Assets/AboutAssets.txt | 19 +++ .../MainActivity.cs | 14 +- .../Properties/AndroidManifest.xml | 9 ++ .../Properties/AssemblyInfo.cs | 30 +++++ .../Resources/AboutResources.txt | 0 .../Resources/Resource.designer.cs | 112 ++++++++++++++++ .../Resources/layout/activity_main.axml | 6 - .../mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../Resources/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1634 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 1441 bytes .../mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 3552 bytes .../Resources/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1362 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 958 bytes .../mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2413 bytes .../Resources/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2307 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 2056 bytes .../mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 4858 bytes .../Resources/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 3871 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 3403 bytes .../mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 8001 bytes .../Resources/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 5016 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 4889 bytes .../mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 10893 bytes .../Resources/values/Strings.xml | 4 + .../Resources/values/colors.xml | 6 + .../values/ic_launcher_background.xml | 4 + .../Resources/values/styles.xml | 0 ...u.Game.Rulesets.Catch.Tests.Android.csproj | 108 +++++++++++++++ .../Assets/AboutAssets.txt | 19 +++ .../MainActivity.cs | 19 +++ .../Properties/AndroidManifest.xml | 9 ++ .../Properties/AssemblyInfo.cs | 30 +++++ .../Resources/AboutResources.txt | 44 +++++++ .../Resources/Resource.designer.cs | 112 ++++++++++++++++ .../Resources/layout/activity_main.axml | 7 + .../mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../Resources/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1634 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 1441 bytes .../mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 3552 bytes .../Resources/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1362 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 958 bytes .../mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2413 bytes .../Resources/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2307 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 2056 bytes .../mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 4858 bytes .../Resources/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 3871 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 3403 bytes .../mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 8001 bytes .../Resources/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 5016 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 4889 bytes .../mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 10893 bytes .../Resources/values/Strings.xml | 4 + .../Resources/values/colors.xml | 6 + .../values/ic_launcher_background.xml | 4 + .../Resources/values/styles.xml | 11 ++ ...u.Game.Rulesets.Mania.Tests.Android.csproj | 105 +++++++++++++++ .../Assets/AboutAssets.txt | 19 +++ .../MainActivity.cs | 19 +++ .../Properties/AndroidManifest.xml | 9 ++ .../Properties/AssemblyInfo.cs | 30 +++++ .../Resources/AboutResources.txt | 44 +++++++ .../Resources/Resource.designer.cs | 112 ++++++++++++++++ .../Resources/layout/activity_main.axml | 7 + .../mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../Resources/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1634 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 1441 bytes .../mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 3552 bytes .../Resources/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1362 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 958 bytes .../mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2413 bytes .../Resources/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2307 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 2056 bytes .../mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 4858 bytes .../Resources/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 3871 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 3403 bytes .../mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 8001 bytes .../Resources/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 5016 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 4889 bytes .../mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 10893 bytes .../Resources/values/Strings.xml | 2 +- .../Resources/values/colors.xml | 6 + .../values/ic_launcher_background.xml | 4 + .../Resources/values/styles.xml | 11 ++ ...osu.Game.Rulesets.Osu.Tests.Android.csproj | 105 +++++++++++++++ .../Assets/AboutAssets.txt | 19 +++ .../MainActivity.cs | 19 +++ .../Properties/AndroidManifest.xml | 9 ++ .../Properties/AssemblyInfo.cs | 30 +++++ .../Resources/AboutResources.txt | 44 +++++++ .../Resources/Resource.designer.cs | 112 ++++++++++++++++ .../Resources/layout/activity_main.axml | 7 + .../mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../Resources/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1634 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 1441 bytes .../mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 3552 bytes .../Resources/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1362 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 958 bytes .../mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2413 bytes .../Resources/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2307 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 2056 bytes .../mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 4858 bytes .../Resources/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 3871 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 3403 bytes .../mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 8001 bytes .../Resources/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 5016 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 4889 bytes .../mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 10893 bytes .../Resources/values/Strings.xml | 4 + .../Resources/values/colors.xml | 6 + .../values/ic_launcher_background.xml | 4 + .../Resources/values/styles.xml | 11 ++ ...u.Game.Rulesets.Taiko.Tests.Android.csproj | 105 +++++++++++++++ 120 files changed, 1591 insertions(+), 58 deletions(-) create mode 100644 osu.Android.sln delete mode 100644 osu.Android/GameView.cs create mode 100644 osu.Android/OsuGameActivity.cs create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Assets/AboutAssets.txt rename {osu.Android => osu.Game.Rulesets.Catch.Tests.Android}/MainActivity.cs (61%) create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Properties/AndroidManifest.xml create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Properties/AssemblyInfo.cs rename {osu.Android => osu.Game.Rulesets.Catch.Tests.Android}/Resources/AboutResources.txt (100%) create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/Resource.designer.cs rename {osu.Android => osu.Game.Rulesets.Catch.Tests.Android}/Resources/layout/activity_main.axml (59%) create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-mdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xhdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/values/Strings.xml create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/values/colors.xml create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/values/ic_launcher_background.xml rename {osu.Android => osu.Game.Rulesets.Catch.Tests.Android}/Resources/values/styles.xml (100%) create mode 100644 osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Assets/AboutAssets.txt create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/MainActivity.cs create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Properties/AndroidManifest.xml create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Properties/AssemblyInfo.cs create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/AboutResources.txt create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/Resource.designer.cs create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/layout/activity_main.axml create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-mdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xhdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/values/Strings.xml create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/values/colors.xml create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/values/ic_launcher_background.xml create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/values/styles.xml create mode 100644 osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Assets/AboutAssets.txt create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/MainActivity.cs create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Properties/AndroidManifest.xml create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Properties/AssemblyInfo.cs create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/AboutResources.txt create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/Resource.designer.cs create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/layout/activity_main.axml create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-mdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xhdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png rename {osu.Android => osu.Game.Rulesets.Osu.Tests.Android}/Resources/values/Strings.xml (51%) create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/values/colors.xml create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/values/ic_launcher_background.xml create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/values/styles.xml create mode 100644 osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Assets/AboutAssets.txt create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/MainActivity.cs create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Properties/AndroidManifest.xml create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Properties/AssemblyInfo.cs create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/AboutResources.txt create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/Resource.designer.cs create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/layout/activity_main.axml create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-mdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xhdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher.png create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/Strings.xml create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/colors.xml create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/ic_launcher_background.xml create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/styles.xml create mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj diff --git a/osu.Android.sln b/osu.Android.sln new file mode 100644 index 0000000000..11c0f3cb27 --- /dev/null +++ b/osu.Android.sln @@ -0,0 +1,124 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27004.2006 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "osu.Game", "osu.Game\osu.Game.csproj", "{2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "osu.Game.Resources", "osu-resources\osu.Game.Resources\osu.Game.Resources.csproj", "{D9A367C9-4C1A-489F-9B05-A0CEA2B53B58}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "osu.Game.Rulesets.Osu", "osu.Game.Rulesets.Osu\osu.Game.Rulesets.Osu.csproj", "{C92A607B-1FDD-4954-9F92-03FF547D9080}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "osu.Game.Rulesets.Catch", "osu.Game.Rulesets.Catch\osu.Game.Rulesets.Catch.csproj", "{58F6C80C-1253-4A0E-A465-B8C85EBEADF3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "osu.Game.Rulesets.Taiko", "osu.Game.Rulesets.Taiko\osu.Game.Rulesets.Taiko.csproj", "{F167E17A-7DE6-4AF5-B920-A5112296C695}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "osu.Game.Rulesets.Mania", "osu.Game.Rulesets.Mania\osu.Game.Rulesets.Mania.csproj", "{48F4582B-7687-4621-9CBE-5C24197CB536}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Android", "osu.Android\osu.Android.csproj", "{D1D5F9A8-B40B-40E6-B02F-482D03346D3D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Game.Rulesets.Catch.Tests.Android", "osu.Game.Rulesets.Catch.Tests.Android\osu.Game.Rulesets.Catch.Tests.Android.csproj", "{C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Game.Rulesets.Mania.Tests.Android", "osu.Game.Rulesets.Mania.Tests.Android\osu.Game.Rulesets.Mania.Tests.Android.csproj", "{531F1092-DB27-445D-AA33-2A77C7187C99}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Game.Rulesets.Osu.Tests.Android", "osu.Game.Rulesets.Osu.Tests.Android\osu.Game.Rulesets.Osu.Tests.Android.csproj", "{90CAB706-39CB-4B93-9629-3218A6FF8E9B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Game.Rulesets.Taiko.Tests.Android", "osu.Game.Rulesets.Taiko.Tests.Android\osu.Game.Rulesets.Taiko.Tests.Android.csproj", "{3701A0A1-8476-42C6-B5C4-D24129B4A484}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}.Release|Any CPU.Build.0 = Release|Any CPU + {D9A367C9-4C1A-489F-9B05-A0CEA2B53B58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D9A367C9-4C1A-489F-9B05-A0CEA2B53B58}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D9A367C9-4C1A-489F-9B05-A0CEA2B53B58}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D9A367C9-4C1A-489F-9B05-A0CEA2B53B58}.Release|Any CPU.Build.0 = Release|Any CPU + {C92A607B-1FDD-4954-9F92-03FF547D9080}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C92A607B-1FDD-4954-9F92-03FF547D9080}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C92A607B-1FDD-4954-9F92-03FF547D9080}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C92A607B-1FDD-4954-9F92-03FF547D9080}.Release|Any CPU.Build.0 = Release|Any CPU + {58F6C80C-1253-4A0E-A465-B8C85EBEADF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {58F6C80C-1253-4A0E-A465-B8C85EBEADF3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {58F6C80C-1253-4A0E-A465-B8C85EBEADF3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {58F6C80C-1253-4A0E-A465-B8C85EBEADF3}.Release|Any CPU.Build.0 = Release|Any CPU + {F167E17A-7DE6-4AF5-B920-A5112296C695}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F167E17A-7DE6-4AF5-B920-A5112296C695}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F167E17A-7DE6-4AF5-B920-A5112296C695}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F167E17A-7DE6-4AF5-B920-A5112296C695}.Release|Any CPU.Build.0 = Release|Any CPU + {48F4582B-7687-4621-9CBE-5C24197CB536}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {48F4582B-7687-4621-9CBE-5C24197CB536}.Debug|Any CPU.Build.0 = Debug|Any CPU + {48F4582B-7687-4621-9CBE-5C24197CB536}.Release|Any CPU.ActiveCfg = Release|Any CPU + {48F4582B-7687-4621-9CBE-5C24197CB536}.Release|Any CPU.Build.0 = Release|Any CPU + {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Release|Any CPU.Build.0 = Release|Any CPU + {D1D5F9A8-B40B-40E6-B02F-482D03346D3D}.Release|Any CPU.Deploy.0 = Release|Any CPU + {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Release|Any CPU.Build.0 = Release|Any CPU + {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D}.Release|Any CPU.Deploy.0 = Release|Any CPU + {531F1092-DB27-445D-AA33-2A77C7187C99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {531F1092-DB27-445D-AA33-2A77C7187C99}.Debug|Any CPU.Build.0 = Debug|Any CPU + {531F1092-DB27-445D-AA33-2A77C7187C99}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {531F1092-DB27-445D-AA33-2A77C7187C99}.Release|Any CPU.ActiveCfg = Release|Any CPU + {531F1092-DB27-445D-AA33-2A77C7187C99}.Release|Any CPU.Build.0 = Release|Any CPU + {531F1092-DB27-445D-AA33-2A77C7187C99}.Release|Any CPU.Deploy.0 = Release|Any CPU + {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Release|Any CPU.Build.0 = Release|Any CPU + {90CAB706-39CB-4B93-9629-3218A6FF8E9B}.Release|Any CPU.Deploy.0 = Release|Any CPU + {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Release|Any CPU.Build.0 = Release|Any CPU + {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Release|Any CPU.Deploy.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {671B0BEC-2403-45B0-9357-2C97CC517668} + EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + Policies = $0 + $0.TextStylePolicy = $1 + $1.EolMarker = Windows + $1.inheritsSet = VisualStudio + $1.inheritsScope = text/plain + $1.scope = text/x-csharp + $0.CSharpFormattingPolicy = $2 + $2.IndentSwitchSection = True + $2.NewLinesForBracesInProperties = True + $2.NewLinesForBracesInAccessors = True + $2.NewLinesForBracesInAnonymousMethods = True + $2.NewLinesForBracesInControlBlocks = True + $2.NewLinesForBracesInAnonymousTypes = True + $2.NewLinesForBracesInObjectCollectionArrayInitializers = True + $2.NewLinesForBracesInLambdaExpressionBody = True + $2.NewLineForElse = True + $2.NewLineForCatch = True + $2.NewLineForFinally = True + $2.NewLineForMembersInObjectInit = True + $2.NewLineForMembersInAnonymousTypes = True + $2.NewLineForClausesInQuery = True + $2.SpacingAfterMethodDeclarationName = False + $2.SpaceAfterMethodCallName = False + $2.SpaceBeforeOpenSquareBracket = False + $2.inheritsSet = Mono + $2.inheritsScope = text/x-csharp + $2.scope = text/x-csharp + EndGlobalSection +EndGlobal diff --git a/osu.Android/GameView.cs b/osu.Android/GameView.cs deleted file mode 100644 index fc9cdeda53..0000000000 --- a/osu.Android/GameView.cs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using Android.Content; -using Android.Util; -using osu.Framework.Android; -using osu.Game; - -namespace osu.Android -{ - public class GameView : AndroidGameView - { - public GameView(Context context, IAttributeSet attrs) : - base(context, attrs) - { - CreateGame(); - } - - public GameView(Context context) : base(context) - { - CreateGame(); - } - public override Framework.Game CreateGame() => new OsuGame(); - } -} diff --git a/osu.Android/OsuGameActivity.cs b/osu.Android/OsuGameActivity.cs new file mode 100644 index 0000000000..08f2707044 --- /dev/null +++ b/osu.Android/OsuGameActivity.cs @@ -0,0 +1,17 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using Android.App; +using Android.Content.PM; +using osu.Framework.Android; +using osu.Game; + +namespace osu.Android +{ + [Activity(Theme = "@android:style/Theme.NoTitleBar", MainLauncher = true, ScreenOrientation = ScreenOrientation.SensorLandscape, SupportsPictureInPicture = false, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize)] + public class OsuGameActivity : AndroidGameActivity + { + protected override Framework.Game CreateGame() + => new OsuGame(); + } +} diff --git a/osu.Android/osu.Android.csproj b/osu.Android/osu.Android.csproj index 8a481b5239..daff6da961 100644 --- a/osu.Android/osu.Android.csproj +++ b/osu.Android/osu.Android.csproj @@ -62,8 +62,7 @@ - - + @@ -83,18 +82,12 @@ PreserveNewest - - - Designer - - - @@ -114,6 +107,12 @@ + + 0.0.7879 + + + 0.0.7879 + 0.22.0 @@ -129,14 +128,6 @@ - - {0fd409e8-a359-42bd-bc52-6a4745a122e5} - osu.Framework.Android - - - {0a8ba083-9d08-45ad-8653-796db1653388} - osu.Framework - {d9a367c9-4c1a-489f-9b05-a0cea2b53b58} osu.Game.Resources diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Assets/AboutAssets.txt b/osu.Game.Rulesets.Catch.Tests.Android/Assets/AboutAssets.txt new file mode 100644 index 0000000000..b0633374bd --- /dev/null +++ b/osu.Game.Rulesets.Catch.Tests.Android/Assets/AboutAssets.txt @@ -0,0 +1,19 @@ +Any raw assets you want to be deployed with your application can be placed in +this directory (and child directories) and given a Build Action of "AndroidAsset". + +These files will be deployed with you package and will be accessible using Android's +AssetManager, like this: + +public class ReadAsset : Activity +{ + protected override void OnCreate (Bundle bundle) + { + base.OnCreate (bundle); + + InputStream input = Assets.Open ("my_asset.txt"); + } +} + +Additionally, some Android functions will automatically load asset files: + +Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); \ No newline at end of file diff --git a/osu.Android/MainActivity.cs b/osu.Game.Rulesets.Catch.Tests.Android/MainActivity.cs similarity index 61% rename from osu.Android/MainActivity.cs rename to osu.Game.Rulesets.Catch.Tests.Android/MainActivity.cs index ff1fd9eba1..34f10dd16b 100644 --- a/osu.Android/MainActivity.cs +++ b/osu.Game.Rulesets.Catch.Tests.Android/MainActivity.cs @@ -3,26 +3,20 @@ using Android.App; using Android.OS; +using Android.Support.V7.App; using Android.Runtime; using Android.Widget; -using Android.Views; -using Android.Content.PM; -namespace osu.Android +namespace osu.Game.Rulesets.Catch.Tests.Android { - [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true, ScreenOrientation = ScreenOrientation.Landscape, SupportsPictureInPicture = false)] - public class MainActivity : Activity + [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)] + public class MainActivity : AppCompatActivity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // Set our view from the "main" layout resource SetContentView(Resource.Layout.activity_main); - Window.AddFlags(WindowManagerFlags.KeepScreenOn); - } - public override void OnBackPressed() - { - } } } diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Rulesets.Catch.Tests.Android/Properties/AndroidManifest.xml new file mode 100644 index 0000000000..6c8c0935b2 --- /dev/null +++ b/osu.Game.Rulesets.Catch.Tests.Android/Properties/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Properties/AssemblyInfo.cs b/osu.Game.Rulesets.Catch.Tests.Android/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..1b1fd64fb5 --- /dev/null +++ b/osu.Game.Rulesets.Catch.Tests.Android/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using Android.App; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("osu.Game.Rulesets.Catch.Tests.Android")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("osu.Game.Rulesets.Catch.Tests.Android")] +[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: ComVisible(false)] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/osu.Android/Resources/AboutResources.txt b/osu.Game.Rulesets.Catch.Tests.Android/Resources/AboutResources.txt similarity index 100% rename from osu.Android/Resources/AboutResources.txt rename to osu.Game.Rulesets.Catch.Tests.Android/Resources/AboutResources.txt diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/Resource.designer.cs b/osu.Game.Rulesets.Catch.Tests.Android/Resources/Resource.designer.cs new file mode 100644 index 0000000000..a19fe391a8 --- /dev/null +++ b/osu.Game.Rulesets.Catch.Tests.Android/Resources/Resource.designer.cs @@ -0,0 +1,112 @@ +#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("osu.Game.Rulesets.Catch.Tests.Android.Resource", IsApplication=true)] + +namespace osu.Game.Rulesets.Catch.Tests.Android +{ + + + [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 Id + { + + // aapt resource value: 0x7f050000 + public const int myButton = 2131034112; + + static Id() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Id() + { + } + } + + public partial class Layout + { + + // aapt resource value: 0x7f030000 + public const int Main = 2130903040; + + static Layout() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Layout() + { + } + } + + public partial class Mipmap + { + + // aapt resource value: 0x7f020000 + public const int Icon = 2130837504; + + static Mipmap() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Mipmap() + { + } + } + + public partial class String + { + + // aapt resource value: 0x7f040001 + public const int app_name = 2130968577; + + // aapt resource value: 0x7f040000 + public const int hello = 2130968576; + + static String() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private String() + { + } + } + } +} +#pragma warning restore 1591 diff --git a/osu.Android/Resources/layout/activity_main.axml b/osu.Game.Rulesets.Catch.Tests.Android/Resources/layout/activity_main.axml similarity index 59% rename from osu.Android/Resources/layout/activity_main.axml rename to osu.Game.Rulesets.Catch.Tests.Android/Resources/layout/activity_main.axml index fc0060857f..ff7a60eb50 100644 --- a/osu.Android/Resources/layout/activity_main.axml +++ b/osu.Game.Rulesets.Catch.Tests.Android/Resources/layout/activity_main.axml @@ -4,10 +4,4 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> - \ No newline at end of file diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000000..036d09bc5f --- /dev/null +++ b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000000..036d09bc5f --- /dev/null +++ b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2531cb31efc3a0a3de6113ab9c7845dc1d9654e4 GIT binary patch literal 1634 zcmV-o2A%ndP)B+Z3$1(8#|f~9B42Y^N-3=o2YCq0YUY$Zu=pM;#hG{lHi%n~Vh z1d1vN#EDO19X?u$`cV z!a}AKG@Bb*#1cdYg8af_;jP69b`k%G1n?0=F^8bI^o>wg-vEliK^U}y^!D|^p|ax; zC|pK=f+FHp!RUAhtlpGGUxJb|wm^5! z<1r%$<$TR02wajxKZ4MiR#aAxDLE(##UNyD|ABr4WoGRF*?@e^2|~Hq(gurSSJH*;Q~5lw{J5A_(PCXBWhzZE${qgzv0{dk-F( z1<}>r181tLiEla&f1j&?p2xjbfp2cTt-c1Ox~?9EhK9`cJ9Vatf)loIoQ@#h&}cIGD>Z#QLE}&(bMo@7Ff|7f#Nm^$PJpVcbj+v~K7wfVwF}=) zRQsc+`=A-+C)vrRvaIC-5u>|;3h z*G4-u#RI<_vuSN~vZ6{|I~q5FFk3%de#+*>UFG>&bq6~ zUEMZ~FIOmFO=kA^5rkp-Msw?^63xvdXVZ-rv@{6{iVO}M!}^Je%2BPbi+(L<5<%~h z2v^D+f<|j%7~cJjOzg*!GPQ{%uE{i%YgcZhuZh{yNlQ}RhaU1jd=K+AopVKP+D}&} zZ3y$llqZiln=Z_A$!qzkGbX0D{?l(v5@1|`QyCvCnQ`eKI>|zj_zo%y#fKf85VhQ} zP)y&j4P*nR3q{-o35iV6nx7QDqq<;WDVIt}|N%`!dgv*y3va8eLNj zU9x(?ieweHfQ*yXk8|=ssZ~qJEz^QoKJ|iGa>ge_Vm_8l}S+UvJ{8g4jr+o#aTSFsz1W;PDP zW765JXGU#3JL>SlIl3NRV2{7B2dLO1cIP)a4ZRYL|MBD36O1#oSgAf}APz5@;x=_U-<=y)Py7*}O5(uu7BL_eLe6Ek7pH|G zMq)FrF1EFq&yruS5b=F=w)fVVoPd(oeRyTFym_Uwyn~L=OL(O?cf^2L5R(SmjORx6 z%nmZf^W=3pkvT*>@osUNi>DULH1hL;y`JGQX$onRCr_U0=H~Viodq!<7Q{3rPk~{G gu#IhOV;e2n|1(WJB~7~kivR!s07*qoM6N<$g7lUVaR2}S literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..7a859c25556af7a2e46e22a2220eaded55628e9f GIT binary patch literal 1441 zcma)+`#%#30L6FjMQg%tuA0%p#0??L`*E=rD#U2F4L5n@F+O9Sp;(QwEQy7+?sX?r zCWN(!Hg`+j5k8*H@|yQEtnAi*(D{7M`Tlf1=eKjq)BUsp2nqrK01B=yNUv`!`EH=x zx8$xJQUd^Fuec%|(TT&0V}4orr_==mmCnEuzD+ff8Pg>pJRqsWsD{#?eGPaCu0(sEH_2RG@<6-Nt<8 ztPMUmmAz9Ga$23Y9~p9dqJSgJJ#Jk_r@o13^%d-Xf46i+Lrmz3 zy9(DUDVXj;Zny7nO+yn&W2flEX=C!8&D0zI`G# z8;XmlonoghgRFUY*$+7pPLa}Uy)onw>TT9t(FTV6#BV8&lXWDPRvQW_n~xZ|yLcZjX>m$Eaf1)dwXS`&E^ zkNjO;%;fWywchc=+w4utQ0Vbn%B>b~yy4I#D{?1!P`$P>Wdo+ljCo(tYia04JTc=$$u+IbzDVPFYpm8+AQj+ zGKH zfS{{hN%W)kF+(26oZpkURD5Q_G_z97F6{Jval+TOj-;5y)*Rdo3a$^^k~q5gpTzmp1q@+2X9O z;_VUF>;s~C1~gpFrFoh?{aQ|LlBIYz!z^P~lndX5-ES)p#+9GW*|-WBTzQ*&gKOE` zM##bUaWl`6rZBXw0!~_oUhf+H$tNc@lLZCj0bZT^KSo@C|P?7YR8dP0se1jj z9aA0|7MONf(ZYaLZs$s}r*05fx25-iN6mZe_*Rq%uyz(+^-k;t`!R`?uf~rn#1ZC7 zuv3}UrmMzcBbo4jym@fS5%I+G`GJIC1s$)MQs3Vhld?a2U;w}$@V%dC@%qpO7+3#$ N&GnQ!lI8SQ#{X#Iv!eh2 literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..b8d35b3a1cfe5308bb099a5a1429555c41417e36 GIT binary patch literal 3552 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 literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..8f56909cddfa86f1387074bf43003f36d6e67be1 GIT binary patch literal 2413 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 b;}yxl--Ss53i@>Q4YQuNcebmsMJN0NT!aL! literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..9737d79c0492b2c8a811621660eba33e79fab959 GIT binary patch literal 4858 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 literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..9133e31b43252d00767a6a3806df9ba68de2d265 GIT binary patch literal 3871 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 literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..c3ae5f5ccdecc01a9b17a2a0c2b1bb20602f0151 GIT binary patch literal 8001 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 z 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 F@PB1o0BisN literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..ef89bd5215ffcc38c68b119a7495a77a7084543b GIT binary patch literal 10893 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 literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/Strings.xml b/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/Strings.xml new file mode 100644 index 0000000000..f800d6eb45 --- /dev/null +++ b/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/Strings.xml @@ -0,0 +1,4 @@ + + osu.Game.Rulesets.Catch.Tests.Android + Settings + diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/colors.xml b/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/colors.xml new file mode 100644 index 0000000000..17bb9a9dd1 --- /dev/null +++ b/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/colors.xml @@ -0,0 +1,6 @@ + + + #2c3e50 + #1B3147 + #3498db + diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/ic_launcher_background.xml b/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/ic_launcher_background.xml new file mode 100644 index 0000000000..6ec24e6413 --- /dev/null +++ b/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #2C3E50 + \ No newline at end of file diff --git a/osu.Android/Resources/values/styles.xml b/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/styles.xml similarity index 100% rename from osu.Android/Resources/values/styles.xml rename to osu.Game.Rulesets.Catch.Tests.Android/Resources/values/styles.xml diff --git a/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj b/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj new file mode 100644 index 0000000000..d1e62c46a1 --- /dev/null +++ b/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj @@ -0,0 +1,108 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {122416d6-6b49-4ee2-a1e8-b825f31c79fe} + Library + Properties + osu.Game.Rulesets.Catch.Tests.Android + osu.Game.Rulesets.Catch.Tests.Android + 512 + True + Resources\Resource.designer.cs + Resource + Off + false + v8.1 + Properties\AndroidManifest.xml + Resources + Assets + Xamarin.Android.Net.AndroidClientHandler + + + True + portable + False + bin\Debug\ + DEBUG;TRACE + prompt + 4 + True + None + False + + + True + pdbonly + True + bin\Release\ + TRACE + prompt + 4 + true + False + SdkOnly + True + + + + + + + + + + + + + + + osu.licenseheader + + + + + + + + Designer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Assets/AboutAssets.txt b/osu.Game.Rulesets.Mania.Tests.Android/Assets/AboutAssets.txt new file mode 100644 index 0000000000..b0633374bd --- /dev/null +++ b/osu.Game.Rulesets.Mania.Tests.Android/Assets/AboutAssets.txt @@ -0,0 +1,19 @@ +Any raw assets you want to be deployed with your application can be placed in +this directory (and child directories) and given a Build Action of "AndroidAsset". + +These files will be deployed with you package and will be accessible using Android's +AssetManager, like this: + +public class ReadAsset : Activity +{ + protected override void OnCreate (Bundle bundle) + { + base.OnCreate (bundle); + + InputStream input = Assets.Open ("my_asset.txt"); + } +} + +Additionally, some Android functions will automatically load asset files: + +Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania.Tests.Android/MainActivity.cs b/osu.Game.Rulesets.Mania.Tests.Android/MainActivity.cs new file mode 100644 index 0000000000..09fc7ce770 --- /dev/null +++ b/osu.Game.Rulesets.Mania.Tests.Android/MainActivity.cs @@ -0,0 +1,19 @@ +using Android.App; +using Android.OS; +using Android.Support.V7.App; +using Android.Runtime; +using Android.Widget; + +namespace osu.Game.Rulesets.Mania.Tests.Android +{ + [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)] + public class MainActivity : AppCompatActivity + { + protected override void OnCreate(Bundle savedInstanceState) + { + base.OnCreate(savedInstanceState); + // Set our view from the "main" layout resource + SetContentView(Resource.Layout.activity_main); + } + } +} \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Rulesets.Mania.Tests.Android/Properties/AndroidManifest.xml new file mode 100644 index 0000000000..6ffcfe16f7 --- /dev/null +++ b/osu.Game.Rulesets.Mania.Tests.Android/Properties/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Properties/AssemblyInfo.cs b/osu.Game.Rulesets.Mania.Tests.Android/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..468676e282 --- /dev/null +++ b/osu.Game.Rulesets.Mania.Tests.Android/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using Android.App; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("osu.Game.Rulesets.Mania.Tests.Android")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("osu.Game.Rulesets.Mania.Tests.Android")] +[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: ComVisible(false)] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/AboutResources.txt b/osu.Game.Rulesets.Mania.Tests.Android/Resources/AboutResources.txt new file mode 100644 index 0000000000..c2bca974c4 --- /dev/null +++ b/osu.Game.Rulesets.Mania.Tests.Android/Resources/AboutResources.txt @@ -0,0 +1,44 @@ +Images, layout descriptions, binary blobs and string dictionaries can be included +in your application as resource files. Various Android APIs are designed to +operate on the resource IDs instead of dealing with images, strings or binary blobs +directly. + +For example, a sample Android app that contains a user interface layout (main.axml), +an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) +would keep its resources in the "Resources" directory of the application: + +Resources/ + drawable/ + icon.png + + layout/ + main.axml + + values/ + strings.xml + +In order to get the build system to recognize Android resources, set the build action to +"AndroidResource". The native Android APIs do not operate directly with filenames, but +instead operate on resource IDs. When you compile an Android application that uses resources, +the build system will package the resources for distribution and generate a class called "R" +(this is an Android convention) that contains the tokens for each one of the resources +included. For example, for the above Resources layout, this is what the R class would expose: + +public class R { + public class drawable { + public const int icon = 0x123; + } + + public class layout { + public const int main = 0x456; + } + + public class strings { + public const int first_string = 0xabc; + public const int second_string = 0xbcd; + } +} + +You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main +to reference the layout/main.axml file, or R.strings.first_string to reference the first +string in the dictionary file values/strings.xml. \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/Resource.designer.cs b/osu.Game.Rulesets.Mania.Tests.Android/Resources/Resource.designer.cs new file mode 100644 index 0000000000..c27ae8a832 --- /dev/null +++ b/osu.Game.Rulesets.Mania.Tests.Android/Resources/Resource.designer.cs @@ -0,0 +1,112 @@ +#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("osu.Game.Rulesets.Mania.Tests.Android.Resource", IsApplication=true)] + +namespace osu.Game.Rulesets.Mania.Tests.Android +{ + + + [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 Id + { + + // aapt resource value: 0x7f050000 + public const int myButton = 2131034112; + + static Id() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Id() + { + } + } + + public partial class Layout + { + + // aapt resource value: 0x7f030000 + public const int Main = 2130903040; + + static Layout() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Layout() + { + } + } + + public partial class Mipmap + { + + // aapt resource value: 0x7f020000 + public const int Icon = 2130837504; + + static Mipmap() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Mipmap() + { + } + } + + public partial class String + { + + // aapt resource value: 0x7f040001 + public const int app_name = 2130968577; + + // aapt resource value: 0x7f040000 + public const int hello = 2130968576; + + static String() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private String() + { + } + } + } +} +#pragma warning restore 1591 diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/layout/activity_main.axml b/osu.Game.Rulesets.Mania.Tests.Android/Resources/layout/activity_main.axml new file mode 100644 index 0000000000..ff7a60eb50 --- /dev/null +++ b/osu.Game.Rulesets.Mania.Tests.Android/Resources/layout/activity_main.axml @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000000..036d09bc5f --- /dev/null +++ b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000000..036d09bc5f --- /dev/null +++ b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2531cb31efc3a0a3de6113ab9c7845dc1d9654e4 GIT binary patch literal 1634 zcmV-o2A%ndP)B+Z3$1(8#|f~9B42Y^N-3=o2YCq0YUY$Zu=pM;#hG{lHi%n~Vh z1d1vN#EDO19X?u$`cV z!a}AKG@Bb*#1cdYg8af_;jP69b`k%G1n?0=F^8bI^o>wg-vEliK^U}y^!D|^p|ax; zC|pK=f+FHp!RUAhtlpGGUxJb|wm^5! z<1r%$<$TR02wajxKZ4MiR#aAxDLE(##UNyD|ABr4WoGRF*?@e^2|~Hq(gurSSJH*;Q~5lw{J5A_(PCXBWhzZE${qgzv0{dk-F( z1<}>r181tLiEla&f1j&?p2xjbfp2cTt-c1Ox~?9EhK9`cJ9Vatf)loIoQ@#h&}cIGD>Z#QLE}&(bMo@7Ff|7f#Nm^$PJpVcbj+v~K7wfVwF}=) zRQsc+`=A-+C)vrRvaIC-5u>|;3h z*G4-u#RI<_vuSN~vZ6{|I~q5FFk3%de#+*>UFG>&bq6~ zUEMZ~FIOmFO=kA^5rkp-Msw?^63xvdXVZ-rv@{6{iVO}M!}^Je%2BPbi+(L<5<%~h z2v^D+f<|j%7~cJjOzg*!GPQ{%uE{i%YgcZhuZh{yNlQ}RhaU1jd=K+AopVKP+D}&} zZ3y$llqZiln=Z_A$!qzkGbX0D{?l(v5@1|`QyCvCnQ`eKI>|zj_zo%y#fKf85VhQ} zP)y&j4P*nR3q{-o35iV6nx7QDqq<;WDVIt}|N%`!dgv*y3va8eLNj zU9x(?ieweHfQ*yXk8|=ssZ~qJEz^QoKJ|iGa>ge_Vm_8l}S+UvJ{8g4jr+o#aTSFsz1W;PDP zW765JXGU#3JL>SlIl3NRV2{7B2dLO1cIP)a4ZRYL|MBD36O1#oSgAf}APz5@;x=_U-<=y)Py7*}O5(uu7BL_eLe6Ek7pH|G zMq)FrF1EFq&yruS5b=F=w)fVVoPd(oeRyTFym_Uwyn~L=OL(O?cf^2L5R(SmjORx6 z%nmZf^W=3pkvT*>@osUNi>DULH1hL;y`JGQX$onRCr_U0=H~Viodq!<7Q{3rPk~{G gu#IhOV;e2n|1(WJB~7~kivR!s07*qoM6N<$g7lUVaR2}S literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..7a859c25556af7a2e46e22a2220eaded55628e9f GIT binary patch literal 1441 zcma)+`#%#30L6FjMQg%tuA0%p#0??L`*E=rD#U2F4L5n@F+O9Sp;(QwEQy7+?sX?r zCWN(!Hg`+j5k8*H@|yQEtnAi*(D{7M`Tlf1=eKjq)BUsp2nqrK01B=yNUv`!`EH=x zx8$xJQUd^Fuec%|(TT&0V}4orr_==mmCnEuzD+ff8Pg>pJRqsWsD{#?eGPaCu0(sEH_2RG@<6-Nt<8 ztPMUmmAz9Ga$23Y9~p9dqJSgJJ#Jk_r@o13^%d-Xf46i+Lrmz3 zy9(DUDVXj;Zny7nO+yn&W2flEX=C!8&D0zI`G# z8;XmlonoghgRFUY*$+7pPLa}Uy)onw>TT9t(FTV6#BV8&lXWDPRvQW_n~xZ|yLcZjX>m$Eaf1)dwXS`&E^ zkNjO;%;fWywchc=+w4utQ0Vbn%B>b~yy4I#D{?1!P`$P>Wdo+ljCo(tYia04JTc=$$u+IbzDVPFYpm8+AQj+ zGKH zfS{{hN%W)kF+(26oZpkURD5Q_G_z97F6{Jval+TOj-;5y)*Rdo3a$^^k~q5gpTzmp1q@+2X9O z;_VUF>;s~C1~gpFrFoh?{aQ|LlBIYz!z^P~lndX5-ES)p#+9GW*|-WBTzQ*&gKOE` zM##bUaWl`6rZBXw0!~_oUhf+H$tNc@lLZCj0bZT^KSo@C|P?7YR8dP0se1jj z9aA0|7MONf(ZYaLZs$s}r*05fx25-iN6mZe_*Rq%uyz(+^-k;t`!R`?uf~rn#1ZC7 zuv3}UrmMzcBbo4jym@fS5%I+G`GJIC1s$)MQs3Vhld?a2U;w}$@V%dC@%qpO7+3#$ N&GnQ!lI8SQ#{X#Iv!eh2 literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..b8d35b3a1cfe5308bb099a5a1429555c41417e36 GIT binary patch literal 3552 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 literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..8f56909cddfa86f1387074bf43003f36d6e67be1 GIT binary patch literal 2413 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 b;}yxl--Ss53i@>Q4YQuNcebmsMJN0NT!aL! literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..9737d79c0492b2c8a811621660eba33e79fab959 GIT binary patch literal 4858 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 literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..9133e31b43252d00767a6a3806df9ba68de2d265 GIT binary patch literal 3871 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 literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..c3ae5f5ccdecc01a9b17a2a0c2b1bb20602f0151 GIT binary patch literal 8001 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 z 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 F@PB1o0BisN literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..ef89bd5215ffcc38c68b119a7495a77a7084543b GIT binary patch literal 10893 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 literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/Strings.xml b/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/Strings.xml new file mode 100644 index 0000000000..6ab86b7262 --- /dev/null +++ b/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/Strings.xml @@ -0,0 +1,4 @@ + + osu.Game.Rulesets.Mania.Tests.Android + Settings + diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/colors.xml b/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/colors.xml new file mode 100644 index 0000000000..17bb9a9dd1 --- /dev/null +++ b/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/colors.xml @@ -0,0 +1,6 @@ + + + #2c3e50 + #1B3147 + #3498db + diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/ic_launcher_background.xml b/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/ic_launcher_background.xml new file mode 100644 index 0000000000..6ec24e6413 --- /dev/null +++ b/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #2C3E50 + \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/styles.xml b/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/styles.xml new file mode 100644 index 0000000000..5885930df6 --- /dev/null +++ b/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj b/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj new file mode 100644 index 0000000000..5fbee695b4 --- /dev/null +++ b/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj @@ -0,0 +1,105 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {531F1092-DB27-445D-AA33-2A77C7187C99} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {122416d6-6b49-4ee2-a1e8-b825f31c79fe} + Library + Properties + osu.Game.Rulesets.Mania.Tests.Android + osu.Game.Rulesets.Mania.Tests.Android + 512 + True + Resources\Resource.designer.cs + Resource + Off + false + v8.1 + Properties\AndroidManifest.xml + Resources + Assets + Xamarin.Android.Net.AndroidClientHandler + + + True + portable + False + bin\Debug\ + DEBUG;TRACE + prompt + 4 + True + None + False + + + True + pdbonly + True + bin\Release\ + TRACE + prompt + 4 + true + False + SdkOnly + True + + + + + + + + + + + + + + + + + + + + Designer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Assets/AboutAssets.txt b/osu.Game.Rulesets.Osu.Tests.Android/Assets/AboutAssets.txt new file mode 100644 index 0000000000..b0633374bd --- /dev/null +++ b/osu.Game.Rulesets.Osu.Tests.Android/Assets/AboutAssets.txt @@ -0,0 +1,19 @@ +Any raw assets you want to be deployed with your application can be placed in +this directory (and child directories) and given a Build Action of "AndroidAsset". + +These files will be deployed with you package and will be accessible using Android's +AssetManager, like this: + +public class ReadAsset : Activity +{ + protected override void OnCreate (Bundle bundle) + { + base.OnCreate (bundle); + + InputStream input = Assets.Open ("my_asset.txt"); + } +} + +Additionally, some Android functions will automatically load asset files: + +Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu.Tests.Android/MainActivity.cs b/osu.Game.Rulesets.Osu.Tests.Android/MainActivity.cs new file mode 100644 index 0000000000..77a75f0d67 --- /dev/null +++ b/osu.Game.Rulesets.Osu.Tests.Android/MainActivity.cs @@ -0,0 +1,19 @@ +using Android.App; +using Android.OS; +using Android.Support.V7.App; +using Android.Runtime; +using Android.Widget; + +namespace osu.Game.Rulesets.Osu.Tests.Android +{ + [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)] + public class MainActivity : AppCompatActivity + { + protected override void OnCreate(Bundle savedInstanceState) + { + base.OnCreate(savedInstanceState); + // Set our view from the "main" layout resource + SetContentView(Resource.Layout.activity_main); + } + } +} \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Rulesets.Osu.Tests.Android/Properties/AndroidManifest.xml new file mode 100644 index 0000000000..05da9d02f7 --- /dev/null +++ b/osu.Game.Rulesets.Osu.Tests.Android/Properties/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Properties/AssemblyInfo.cs b/osu.Game.Rulesets.Osu.Tests.Android/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..0e43fb25cf --- /dev/null +++ b/osu.Game.Rulesets.Osu.Tests.Android/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using Android.App; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("osu.Game.Rulesets.Osu.Tests.Android")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("osu.Game.Rulesets.Osu.Tests.Android")] +[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: ComVisible(false)] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/AboutResources.txt b/osu.Game.Rulesets.Osu.Tests.Android/Resources/AboutResources.txt new file mode 100644 index 0000000000..c2bca974c4 --- /dev/null +++ b/osu.Game.Rulesets.Osu.Tests.Android/Resources/AboutResources.txt @@ -0,0 +1,44 @@ +Images, layout descriptions, binary blobs and string dictionaries can be included +in your application as resource files. Various Android APIs are designed to +operate on the resource IDs instead of dealing with images, strings or binary blobs +directly. + +For example, a sample Android app that contains a user interface layout (main.axml), +an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) +would keep its resources in the "Resources" directory of the application: + +Resources/ + drawable/ + icon.png + + layout/ + main.axml + + values/ + strings.xml + +In order to get the build system to recognize Android resources, set the build action to +"AndroidResource". The native Android APIs do not operate directly with filenames, but +instead operate on resource IDs. When you compile an Android application that uses resources, +the build system will package the resources for distribution and generate a class called "R" +(this is an Android convention) that contains the tokens for each one of the resources +included. For example, for the above Resources layout, this is what the R class would expose: + +public class R { + public class drawable { + public const int icon = 0x123; + } + + public class layout { + public const int main = 0x456; + } + + public class strings { + public const int first_string = 0xabc; + public const int second_string = 0xbcd; + } +} + +You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main +to reference the layout/main.axml file, or R.strings.first_string to reference the first +string in the dictionary file values/strings.xml. \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/Resource.designer.cs b/osu.Game.Rulesets.Osu.Tests.Android/Resources/Resource.designer.cs new file mode 100644 index 0000000000..f229c3f960 --- /dev/null +++ b/osu.Game.Rulesets.Osu.Tests.Android/Resources/Resource.designer.cs @@ -0,0 +1,112 @@ +#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("osu.Game.Rulesets.Osu.Tests.Android.Resource", IsApplication=true)] + +namespace osu.Game.Rulesets.Osu.Tests.Android +{ + + + [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 Id + { + + // aapt resource value: 0x7f050000 + public const int myButton = 2131034112; + + static Id() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Id() + { + } + } + + public partial class Layout + { + + // aapt resource value: 0x7f030000 + public const int Main = 2130903040; + + static Layout() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Layout() + { + } + } + + public partial class Mipmap + { + + // aapt resource value: 0x7f020000 + public const int Icon = 2130837504; + + static Mipmap() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Mipmap() + { + } + } + + public partial class String + { + + // aapt resource value: 0x7f040001 + public const int app_name = 2130968577; + + // aapt resource value: 0x7f040000 + public const int hello = 2130968576; + + static String() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private String() + { + } + } + } +} +#pragma warning restore 1591 diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/layout/activity_main.axml b/osu.Game.Rulesets.Osu.Tests.Android/Resources/layout/activity_main.axml new file mode 100644 index 0000000000..ff7a60eb50 --- /dev/null +++ b/osu.Game.Rulesets.Osu.Tests.Android/Resources/layout/activity_main.axml @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000000..036d09bc5f --- /dev/null +++ b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000000..036d09bc5f --- /dev/null +++ b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2531cb31efc3a0a3de6113ab9c7845dc1d9654e4 GIT binary patch literal 1634 zcmV-o2A%ndP)B+Z3$1(8#|f~9B42Y^N-3=o2YCq0YUY$Zu=pM;#hG{lHi%n~Vh z1d1vN#EDO19X?u$`cV z!a}AKG@Bb*#1cdYg8af_;jP69b`k%G1n?0=F^8bI^o>wg-vEliK^U}y^!D|^p|ax; zC|pK=f+FHp!RUAhtlpGGUxJb|wm^5! z<1r%$<$TR02wajxKZ4MiR#aAxDLE(##UNyD|ABr4WoGRF*?@e^2|~Hq(gurSSJH*;Q~5lw{J5A_(PCXBWhzZE${qgzv0{dk-F( z1<}>r181tLiEla&f1j&?p2xjbfp2cTt-c1Ox~?9EhK9`cJ9Vatf)loIoQ@#h&}cIGD>Z#QLE}&(bMo@7Ff|7f#Nm^$PJpVcbj+v~K7wfVwF}=) zRQsc+`=A-+C)vrRvaIC-5u>|;3h z*G4-u#RI<_vuSN~vZ6{|I~q5FFk3%de#+*>UFG>&bq6~ zUEMZ~FIOmFO=kA^5rkp-Msw?^63xvdXVZ-rv@{6{iVO}M!}^Je%2BPbi+(L<5<%~h z2v^D+f<|j%7~cJjOzg*!GPQ{%uE{i%YgcZhuZh{yNlQ}RhaU1jd=K+AopVKP+D}&} zZ3y$llqZiln=Z_A$!qzkGbX0D{?l(v5@1|`QyCvCnQ`eKI>|zj_zo%y#fKf85VhQ} zP)y&j4P*nR3q{-o35iV6nx7QDqq<;WDVIt}|N%`!dgv*y3va8eLNj zU9x(?ieweHfQ*yXk8|=ssZ~qJEz^QoKJ|iGa>ge_Vm_8l}S+UvJ{8g4jr+o#aTSFsz1W;PDP zW765JXGU#3JL>SlIl3NRV2{7B2dLO1cIP)a4ZRYL|MBD36O1#oSgAf}APz5@;x=_U-<=y)Py7*}O5(uu7BL_eLe6Ek7pH|G zMq)FrF1EFq&yruS5b=F=w)fVVoPd(oeRyTFym_Uwyn~L=OL(O?cf^2L5R(SmjORx6 z%nmZf^W=3pkvT*>@osUNi>DULH1hL;y`JGQX$onRCr_U0=H~Viodq!<7Q{3rPk~{G gu#IhOV;e2n|1(WJB~7~kivR!s07*qoM6N<$g7lUVaR2}S literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..7a859c25556af7a2e46e22a2220eaded55628e9f GIT binary patch literal 1441 zcma)+`#%#30L6FjMQg%tuA0%p#0??L`*E=rD#U2F4L5n@F+O9Sp;(QwEQy7+?sX?r zCWN(!Hg`+j5k8*H@|yQEtnAi*(D{7M`Tlf1=eKjq)BUsp2nqrK01B=yNUv`!`EH=x zx8$xJQUd^Fuec%|(TT&0V}4orr_==mmCnEuzD+ff8Pg>pJRqsWsD{#?eGPaCu0(sEH_2RG@<6-Nt<8 ztPMUmmAz9Ga$23Y9~p9dqJSgJJ#Jk_r@o13^%d-Xf46i+Lrmz3 zy9(DUDVXj;Zny7nO+yn&W2flEX=C!8&D0zI`G# z8;XmlonoghgRFUY*$+7pPLa}Uy)onw>TT9t(FTV6#BV8&lXWDPRvQW_n~xZ|yLcZjX>m$Eaf1)dwXS`&E^ zkNjO;%;fWywchc=+w4utQ0Vbn%B>b~yy4I#D{?1!P`$P>Wdo+ljCo(tYia04JTc=$$u+IbzDVPFYpm8+AQj+ zGKH zfS{{hN%W)kF+(26oZpkURD5Q_G_z97F6{Jval+TOj-;5y)*Rdo3a$^^k~q5gpTzmp1q@+2X9O z;_VUF>;s~C1~gpFrFoh?{aQ|LlBIYz!z^P~lndX5-ES)p#+9GW*|-WBTzQ*&gKOE` zM##bUaWl`6rZBXw0!~_oUhf+H$tNc@lLZCj0bZT^KSo@C|P?7YR8dP0se1jj z9aA0|7MONf(ZYaLZs$s}r*05fx25-iN6mZe_*Rq%uyz(+^-k;t`!R`?uf~rn#1ZC7 zuv3}UrmMzcBbo4jym@fS5%I+G`GJIC1s$)MQs3Vhld?a2U;w}$@V%dC@%qpO7+3#$ N&GnQ!lI8SQ#{X#Iv!eh2 literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..b8d35b3a1cfe5308bb099a5a1429555c41417e36 GIT binary patch literal 3552 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 literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..8f56909cddfa86f1387074bf43003f36d6e67be1 GIT binary patch literal 2413 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 b;}yxl--Ss53i@>Q4YQuNcebmsMJN0NT!aL! literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..9737d79c0492b2c8a811621660eba33e79fab959 GIT binary patch literal 4858 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 literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..9133e31b43252d00767a6a3806df9ba68de2d265 GIT binary patch literal 3871 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 literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..c3ae5f5ccdecc01a9b17a2a0c2b1bb20602f0151 GIT binary patch literal 8001 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 z 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 F@PB1o0BisN literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..ef89bd5215ffcc38c68b119a7495a77a7084543b GIT binary patch literal 10893 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 literal 0 HcmV?d00001 diff --git a/osu.Android/Resources/values/Strings.xml b/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/Strings.xml similarity index 51% rename from osu.Android/Resources/values/Strings.xml rename to osu.Game.Rulesets.Osu.Tests.Android/Resources/values/Strings.xml index 21f749f876..8c47838dfb 100644 --- a/osu.Android/Resources/values/Strings.xml +++ b/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/Strings.xml @@ -1,4 +1,4 @@ - osu!lazer + osu.Game.Rulesets.Osu.Tests.Android Settings diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/colors.xml b/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/colors.xml new file mode 100644 index 0000000000..17bb9a9dd1 --- /dev/null +++ b/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/colors.xml @@ -0,0 +1,6 @@ + + + #2c3e50 + #1B3147 + #3498db + diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/ic_launcher_background.xml b/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/ic_launcher_background.xml new file mode 100644 index 0000000000..6ec24e6413 --- /dev/null +++ b/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #2C3E50 + \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/styles.xml b/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/styles.xml new file mode 100644 index 0000000000..5885930df6 --- /dev/null +++ b/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj b/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj new file mode 100644 index 0000000000..7eeee4fd80 --- /dev/null +++ b/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj @@ -0,0 +1,105 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {90CAB706-39CB-4B93-9629-3218A6FF8E9B} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {122416d6-6b49-4ee2-a1e8-b825f31c79fe} + Library + Properties + osu.Game.Rulesets.Osu.Tests.Android + osu.Game.Rulesets.Osu.Tests.Android + 512 + True + Resources\Resource.designer.cs + Resource + Off + false + v8.1 + Properties\AndroidManifest.xml + Resources + Assets + Xamarin.Android.Net.AndroidClientHandler + + + True + portable + False + bin\Debug\ + DEBUG;TRACE + prompt + 4 + True + None + False + + + True + pdbonly + True + bin\Release\ + TRACE + prompt + 4 + true + False + SdkOnly + True + + + + + + + + + + + + + + + + + + + + Designer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Assets/AboutAssets.txt b/osu.Game.Rulesets.Taiko.Tests.Android/Assets/AboutAssets.txt new file mode 100644 index 0000000000..b0633374bd --- /dev/null +++ b/osu.Game.Rulesets.Taiko.Tests.Android/Assets/AboutAssets.txt @@ -0,0 +1,19 @@ +Any raw assets you want to be deployed with your application can be placed in +this directory (and child directories) and given a Build Action of "AndroidAsset". + +These files will be deployed with you package and will be accessible using Android's +AssetManager, like this: + +public class ReadAsset : Activity +{ + protected override void OnCreate (Bundle bundle) + { + base.OnCreate (bundle); + + InputStream input = Assets.Open ("my_asset.txt"); + } +} + +Additionally, some Android functions will automatically load asset files: + +Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/MainActivity.cs b/osu.Game.Rulesets.Taiko.Tests.Android/MainActivity.cs new file mode 100644 index 0000000000..8ceca4d436 --- /dev/null +++ b/osu.Game.Rulesets.Taiko.Tests.Android/MainActivity.cs @@ -0,0 +1,19 @@ +using Android.App; +using Android.OS; +using Android.Support.V7.App; +using Android.Runtime; +using Android.Widget; + +namespace osu.Game.Rulesets.Taiko.Tests.Android +{ + [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)] + public class MainActivity : AppCompatActivity + { + protected override void OnCreate(Bundle savedInstanceState) + { + base.OnCreate(savedInstanceState); + // Set our view from the "main" layout resource + SetContentView(Resource.Layout.activity_main); + } + } +} \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AndroidManifest.xml new file mode 100644 index 0000000000..9b5e759012 --- /dev/null +++ b/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AssemblyInfo.cs b/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..28f5d292ab --- /dev/null +++ b/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using Android.App; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("osu.Game.Rulesets.Taiko.Tests.Android")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("osu.Game.Rulesets.Taiko.Tests.Android")] +[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: ComVisible(false)] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/AboutResources.txt b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/AboutResources.txt new file mode 100644 index 0000000000..c2bca974c4 --- /dev/null +++ b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/AboutResources.txt @@ -0,0 +1,44 @@ +Images, layout descriptions, binary blobs and string dictionaries can be included +in your application as resource files. Various Android APIs are designed to +operate on the resource IDs instead of dealing with images, strings or binary blobs +directly. + +For example, a sample Android app that contains a user interface layout (main.axml), +an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) +would keep its resources in the "Resources" directory of the application: + +Resources/ + drawable/ + icon.png + + layout/ + main.axml + + values/ + strings.xml + +In order to get the build system to recognize Android resources, set the build action to +"AndroidResource". The native Android APIs do not operate directly with filenames, but +instead operate on resource IDs. When you compile an Android application that uses resources, +the build system will package the resources for distribution and generate a class called "R" +(this is an Android convention) that contains the tokens for each one of the resources +included. For example, for the above Resources layout, this is what the R class would expose: + +public class R { + public class drawable { + public const int icon = 0x123; + } + + public class layout { + public const int main = 0x456; + } + + public class strings { + public const int first_string = 0xabc; + public const int second_string = 0xbcd; + } +} + +You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main +to reference the layout/main.axml file, or R.strings.first_string to reference the first +string in the dictionary file values/strings.xml. \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/Resource.designer.cs b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/Resource.designer.cs new file mode 100644 index 0000000000..d3709d3cdb --- /dev/null +++ b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/Resource.designer.cs @@ -0,0 +1,112 @@ +#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("osu.Game.Rulesets.Taiko.Tests.Android.Resource", IsApplication=true)] + +namespace osu.Game.Rulesets.Taiko.Tests.Android +{ + + + [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 Id + { + + // aapt resource value: 0x7f050000 + public const int myButton = 2131034112; + + static Id() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Id() + { + } + } + + public partial class Layout + { + + // aapt resource value: 0x7f030000 + public const int Main = 2130903040; + + static Layout() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Layout() + { + } + } + + public partial class Mipmap + { + + // aapt resource value: 0x7f020000 + public const int Icon = 2130837504; + + static Mipmap() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Mipmap() + { + } + } + + public partial class String + { + + // aapt resource value: 0x7f040001 + public const int app_name = 2130968577; + + // aapt resource value: 0x7f040000 + public const int hello = 2130968576; + + static String() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private String() + { + } + } + } +} +#pragma warning restore 1591 diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/layout/activity_main.axml b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/layout/activity_main.axml new file mode 100644 index 0000000000..ff7a60eb50 --- /dev/null +++ b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/layout/activity_main.axml @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000000..036d09bc5f --- /dev/null +++ b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000000..036d09bc5f --- /dev/null +++ b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2531cb31efc3a0a3de6113ab9c7845dc1d9654e4 GIT binary patch literal 1634 zcmV-o2A%ndP)B+Z3$1(8#|f~9B42Y^N-3=o2YCq0YUY$Zu=pM;#hG{lHi%n~Vh z1d1vN#EDO19X?u$`cV z!a}AKG@Bb*#1cdYg8af_;jP69b`k%G1n?0=F^8bI^o>wg-vEliK^U}y^!D|^p|ax; zC|pK=f+FHp!RUAhtlpGGUxJb|wm^5! z<1r%$<$TR02wajxKZ4MiR#aAxDLE(##UNyD|ABr4WoGRF*?@e^2|~Hq(gurSSJH*;Q~5lw{J5A_(PCXBWhzZE${qgzv0{dk-F( z1<}>r181tLiEla&f1j&?p2xjbfp2cTt-c1Ox~?9EhK9`cJ9Vatf)loIoQ@#h&}cIGD>Z#QLE}&(bMo@7Ff|7f#Nm^$PJpVcbj+v~K7wfVwF}=) zRQsc+`=A-+C)vrRvaIC-5u>|;3h z*G4-u#RI<_vuSN~vZ6{|I~q5FFk3%de#+*>UFG>&bq6~ zUEMZ~FIOmFO=kA^5rkp-Msw?^63xvdXVZ-rv@{6{iVO}M!}^Je%2BPbi+(L<5<%~h z2v^D+f<|j%7~cJjOzg*!GPQ{%uE{i%YgcZhuZh{yNlQ}RhaU1jd=K+AopVKP+D}&} zZ3y$llqZiln=Z_A$!qzkGbX0D{?l(v5@1|`QyCvCnQ`eKI>|zj_zo%y#fKf85VhQ} zP)y&j4P*nR3q{-o35iV6nx7QDqq<;WDVIt}|N%`!dgv*y3va8eLNj zU9x(?ieweHfQ*yXk8|=ssZ~qJEz^QoKJ|iGa>ge_Vm_8l}S+UvJ{8g4jr+o#aTSFsz1W;PDP zW765JXGU#3JL>SlIl3NRV2{7B2dLO1cIP)a4ZRYL|MBD36O1#oSgAf}APz5@;x=_U-<=y)Py7*}O5(uu7BL_eLe6Ek7pH|G zMq)FrF1EFq&yruS5b=F=w)fVVoPd(oeRyTFym_Uwyn~L=OL(O?cf^2L5R(SmjORx6 z%nmZf^W=3pkvT*>@osUNi>DULH1hL;y`JGQX$onRCr_U0=H~Viodq!<7Q{3rPk~{G gu#IhOV;e2n|1(WJB~7~kivR!s07*qoM6N<$g7lUVaR2}S literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..7a859c25556af7a2e46e22a2220eaded55628e9f GIT binary patch literal 1441 zcma)+`#%#30L6FjMQg%tuA0%p#0??L`*E=rD#U2F4L5n@F+O9Sp;(QwEQy7+?sX?r zCWN(!Hg`+j5k8*H@|yQEtnAi*(D{7M`Tlf1=eKjq)BUsp2nqrK01B=yNUv`!`EH=x zx8$xJQUd^Fuec%|(TT&0V}4orr_==mmCnEuzD+ff8Pg>pJRqsWsD{#?eGPaCu0(sEH_2RG@<6-Nt<8 ztPMUmmAz9Ga$23Y9~p9dqJSgJJ#Jk_r@o13^%d-Xf46i+Lrmz3 zy9(DUDVXj;Zny7nO+yn&W2flEX=C!8&D0zI`G# z8;XmlonoghgRFUY*$+7pPLa}Uy)onw>TT9t(FTV6#BV8&lXWDPRvQW_n~xZ|yLcZjX>m$Eaf1)dwXS`&E^ zkNjO;%;fWywchc=+w4utQ0Vbn%B>b~yy4I#D{?1!P`$P>Wdo+ljCo(tYia04JTc=$$u+IbzDVPFYpm8+AQj+ zGKH zfS{{hN%W)kF+(26oZpkURD5Q_G_z97F6{Jval+TOj-;5y)*Rdo3a$^^k~q5gpTzmp1q@+2X9O z;_VUF>;s~C1~gpFrFoh?{aQ|LlBIYz!z^P~lndX5-ES)p#+9GW*|-WBTzQ*&gKOE` zM##bUaWl`6rZBXw0!~_oUhf+H$tNc@lLZCj0bZT^KSo@C|P?7YR8dP0se1jj z9aA0|7MONf(ZYaLZs$s}r*05fx25-iN6mZe_*Rq%uyz(+^-k;t`!R`?uf~rn#1ZC7 zuv3}UrmMzcBbo4jym@fS5%I+G`GJIC1s$)MQs3Vhld?a2U;w}$@V%dC@%qpO7+3#$ N&GnQ!lI8SQ#{X#Iv!eh2 literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..b8d35b3a1cfe5308bb099a5a1429555c41417e36 GIT binary patch literal 3552 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 literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..8f56909cddfa86f1387074bf43003f36d6e67be1 GIT binary patch literal 2413 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 b;}yxl--Ss53i@>Q4YQuNcebmsMJN0NT!aL! literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..9737d79c0492b2c8a811621660eba33e79fab959 GIT binary patch literal 4858 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 literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..9133e31b43252d00767a6a3806df9ba68de2d265 GIT binary patch literal 3871 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 literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..c3ae5f5ccdecc01a9b17a2a0c2b1bb20602f0151 GIT binary patch literal 8001 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 z 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 F@PB1o0BisN literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..ef89bd5215ffcc38c68b119a7495a77a7084543b GIT binary patch literal 10893 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 literal 0 HcmV?d00001 diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/Strings.xml b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/Strings.xml new file mode 100644 index 0000000000..12965f132d --- /dev/null +++ b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/Strings.xml @@ -0,0 +1,4 @@ + + osu.Game.Rulesets.Taiko.Tests.Android + Settings + diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/colors.xml b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/colors.xml new file mode 100644 index 0000000000..17bb9a9dd1 --- /dev/null +++ b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/colors.xml @@ -0,0 +1,6 @@ + + + #2c3e50 + #1B3147 + #3498db + diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/ic_launcher_background.xml b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/ic_launcher_background.xml new file mode 100644 index 0000000000..6ec24e6413 --- /dev/null +++ b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #2C3E50 + \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/styles.xml b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/styles.xml new file mode 100644 index 0000000000..5885930df6 --- /dev/null +++ b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj b/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj new file mode 100644 index 0000000000..62c2cefe06 --- /dev/null +++ b/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj @@ -0,0 +1,105 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {3701A0A1-8476-42C6-B5C4-D24129B4A484} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {122416d6-6b49-4ee2-a1e8-b825f31c79fe} + Library + Properties + osu.Game.Rulesets.Taiko.Tests.Android + osu.Game.Rulesets.Taiko.Tests.Android + 512 + True + Resources\Resource.designer.cs + Resource + Off + false + v8.1 + Properties\AndroidManifest.xml + Resources + Assets + Xamarin.Android.Net.AndroidClientHandler + + + True + portable + False + bin\Debug\ + DEBUG;TRACE + prompt + 4 + True + None + False + + + True + pdbonly + True + bin\Release\ + TRACE + prompt + 4 + true + False + SdkOnly + True + + + + + + + + + + + + + + + + + + + + Designer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From e5dd95198a283282936bb76aa463869c84cd22a2 Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Sat, 5 Jan 2019 23:17:55 -0600 Subject: [PATCH 016/267] Cleanup project files with common props --- osu.Android.props | 60 ++++++++++ osu.Android/Assets/AboutAssets.txt | 19 --- osu.Android/osu.Android.csproj | 67 +---------- .../Assets/AboutAssets.txt | 19 --- .../MainActivity.cs | 19 ++- .../Resources/AboutResources.txt | 44 ------- .../Resources/Resource.designer.cs | 112 ------------------ .../Resources/layout/activity_main.axml | 7 -- .../mipmap-anydpi-v26/ic_launcher.xml | 5 - .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 - .../Resources/mipmap-hdpi/ic_launcher.png | Bin 1634 -> 0 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 1441 -> 0 bytes .../mipmap-hdpi/ic_launcher_round.png | Bin 3552 -> 0 bytes .../Resources/mipmap-mdpi/ic_launcher.png | Bin 1362 -> 0 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 958 -> 0 bytes .../mipmap-mdpi/ic_launcher_round.png | Bin 2413 -> 0 bytes .../Resources/mipmap-xhdpi/ic_launcher.png | Bin 2307 -> 0 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 2056 -> 0 bytes .../mipmap-xhdpi/ic_launcher_round.png | Bin 4858 -> 0 bytes .../Resources/mipmap-xxhdpi/ic_launcher.png | Bin 3871 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 3403 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_round.png | Bin 8001 -> 0 bytes .../Resources/mipmap-xxxhdpi/ic_launcher.png | Bin 5016 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 4889 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_round.png | Bin 10893 -> 0 bytes .../Resources/values/Strings.xml | 4 - .../Resources/values/colors.xml | 6 - .../values/ic_launcher_background.xml | 4 - .../Resources/values/styles.xml | 11 -- ...u.Game.Rulesets.Catch.Tests.Android.csproj | 82 +++---------- .../Assets/AboutAssets.txt | 19 --- .../MainActivity.cs | 26 ++-- .../Resources/AboutResources.txt | 44 ------- .../Resources/Resource.designer.cs | 112 ------------------ .../Resources/layout/activity_main.axml | 7 -- .../mipmap-anydpi-v26/ic_launcher.xml | 5 - .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 - .../Resources/mipmap-hdpi/ic_launcher.png | Bin 1634 -> 0 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 1441 -> 0 bytes .../mipmap-hdpi/ic_launcher_round.png | Bin 3552 -> 0 bytes .../Resources/mipmap-mdpi/ic_launcher.png | Bin 1362 -> 0 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 958 -> 0 bytes .../mipmap-mdpi/ic_launcher_round.png | Bin 2413 -> 0 bytes .../Resources/mipmap-xhdpi/ic_launcher.png | Bin 2307 -> 0 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 2056 -> 0 bytes .../mipmap-xhdpi/ic_launcher_round.png | Bin 4858 -> 0 bytes .../Resources/mipmap-xxhdpi/ic_launcher.png | Bin 3871 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 3403 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_round.png | Bin 8001 -> 0 bytes .../Resources/mipmap-xxxhdpi/ic_launcher.png | Bin 5016 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 4889 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_round.png | Bin 10893 -> 0 bytes .../Resources/values/Strings.xml | 4 - .../Resources/values/colors.xml | 6 - .../values/ic_launcher_background.xml | 4 - .../Resources/values/styles.xml | 11 -- ...u.Game.Rulesets.Mania.Tests.Android.csproj | 85 +++---------- .../Assets/AboutAssets.txt | 19 --- .../MainActivity.cs | 26 ++-- .../Resources/AboutResources.txt | 44 ------- .../Resources/Resource.designer.cs | 112 ------------------ .../Resources/layout/activity_main.axml | 7 -- .../mipmap-anydpi-v26/ic_launcher.xml | 5 - .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 - .../Resources/mipmap-hdpi/ic_launcher.png | Bin 1634 -> 0 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 1441 -> 0 bytes .../mipmap-hdpi/ic_launcher_round.png | Bin 3552 -> 0 bytes .../Resources/mipmap-mdpi/ic_launcher.png | Bin 1362 -> 0 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 958 -> 0 bytes .../mipmap-mdpi/ic_launcher_round.png | Bin 2413 -> 0 bytes .../Resources/mipmap-xhdpi/ic_launcher.png | Bin 2307 -> 0 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 2056 -> 0 bytes .../mipmap-xhdpi/ic_launcher_round.png | Bin 4858 -> 0 bytes .../Resources/mipmap-xxhdpi/ic_launcher.png | Bin 3871 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 3403 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_round.png | Bin 8001 -> 0 bytes .../Resources/mipmap-xxxhdpi/ic_launcher.png | Bin 5016 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 4889 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_round.png | Bin 10893 -> 0 bytes .../Resources/values/Strings.xml | 4 - .../Resources/values/colors.xml | 6 - .../values/ic_launcher_background.xml | 4 - .../Resources/values/styles.xml | 11 -- ...osu.Game.Rulesets.Osu.Tests.Android.csproj | 85 +++---------- .../Assets/AboutAssets.txt | 19 --- .../MainActivity.cs | 26 ++-- .../Resources/AboutResources.txt | 44 ------- .../Resources/Resource.designer.cs | 112 ------------------ .../Resources/layout/activity_main.axml | 7 -- .../mipmap-anydpi-v26/ic_launcher.xml | 5 - .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 - .../Resources/mipmap-hdpi/ic_launcher.png | Bin 1634 -> 0 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 1441 -> 0 bytes .../mipmap-hdpi/ic_launcher_round.png | Bin 3552 -> 0 bytes .../Resources/mipmap-mdpi/ic_launcher.png | Bin 1362 -> 0 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 958 -> 0 bytes .../mipmap-mdpi/ic_launcher_round.png | Bin 2413 -> 0 bytes .../Resources/mipmap-xhdpi/ic_launcher.png | Bin 2307 -> 0 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 2056 -> 0 bytes .../mipmap-xhdpi/ic_launcher_round.png | Bin 4858 -> 0 bytes .../Resources/mipmap-xxhdpi/ic_launcher.png | Bin 3871 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 3403 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_round.png | Bin 8001 -> 0 bytes .../Resources/mipmap-xxxhdpi/ic_launcher.png | Bin 5016 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 4889 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_round.png | Bin 10893 -> 0 bytes .../Resources/values/Strings.xml | 4 - .../Resources/values/colors.xml | 6 - .../values/ic_launcher_background.xml | 4 - .../Resources/values/styles.xml | 11 -- ...u.Game.Rulesets.Taiko.Tests.Android.csproj | 86 ++++---------- 111 files changed, 179 insertions(+), 1270 deletions(-) create mode 100644 osu.Android.props delete mode 100644 osu.Android/Assets/AboutAssets.txt delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Assets/AboutAssets.txt delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/AboutResources.txt delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/Resource.designer.cs delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/layout/activity_main.axml delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-mdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-mdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xhdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/values/Strings.xml delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/values/colors.xml delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/values/ic_launcher_background.xml delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Resources/values/styles.xml delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Assets/AboutAssets.txt delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/AboutResources.txt delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/Resource.designer.cs delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/layout/activity_main.axml delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-mdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-mdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xhdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/values/Strings.xml delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/values/colors.xml delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/values/ic_launcher_background.xml delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Resources/values/styles.xml delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Assets/AboutAssets.txt delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/AboutResources.txt delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/Resource.designer.cs delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/layout/activity_main.axml delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-mdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-mdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xhdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/values/Strings.xml delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/values/colors.xml delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/values/ic_launcher_background.xml delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Resources/values/styles.xml delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Assets/AboutAssets.txt delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/AboutResources.txt delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/Resource.designer.cs delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/layout/activity_main.axml delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-mdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-mdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xhdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_foreground.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/Strings.xml delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/colors.xml delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/ic_launcher_background.xml delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/styles.xml diff --git a/osu.Android.props b/osu.Android.props new file mode 100644 index 0000000000..4c89408203 --- /dev/null +++ b/osu.Android.props @@ -0,0 +1,60 @@ + + + True + portable + False + bin\Debug\ + DEBUG;TRACE + prompt + 4 + True + None + False + false + false + false + CJK;Mideast;Rare;West;Other + + false + + + True + pdbonly + True + bin\Release\ + TRACE + prompt + 4 + true + False + SdkOnly + True + CJK;Mideast;Rare;West;Other + + + + + + + + + + 0.0.7879 + + + 0.0.7879 + + + 0.22.0 + + + 1.1.0 + + + 1.0.0-dev000094 + + + 1.0.0-dev002278 + + + \ No newline at end of file diff --git a/osu.Android/Assets/AboutAssets.txt b/osu.Android/Assets/AboutAssets.txt deleted file mode 100644 index b0633374bd..0000000000 --- a/osu.Android/Assets/AboutAssets.txt +++ /dev/null @@ -1,19 +0,0 @@ -Any raw assets you want to be deployed with your application can be placed in -this directory (and child directories) and given a Build Action of "AndroidAsset". - -These files will be deployed with you package and will be accessible using Android's -AssetManager, like this: - -public class ReadAsset : Activity -{ - protected override void OnCreate (Bundle bundle) - { - base.OnCreate (bundle); - - InputStream input = Assets.Open ("my_asset.txt"); - } -} - -Additionally, some Android functions will automatically load asset files: - -Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); \ No newline at end of file diff --git a/osu.Android/osu.Android.csproj b/osu.Android/osu.Android.csproj index daff6da961..646ed71d44 100644 --- a/osu.Android/osu.Android.csproj +++ b/osu.Android/osu.Android.csproj @@ -24,43 +24,7 @@ Assets Xamarin.Android.Net.AndroidClientHandler - - True - portable - False - bin\Debug\ - DEBUG;TRACE - prompt - 4 - True - None - False - false - false - false - CJK;Mideast;Rare;West;Other - - false - - - True - pdbonly - True - bin\Release\ - TRACE - prompt - 4 - true - False - SdkOnly - True - - - - - - - + @@ -83,7 +47,6 @@ PreserveNewest - @@ -106,27 +69,6 @@ - - - 0.0.7879 - - - 0.0.7879 - - - 0.22.0 - - - 1.1.0 - - - 1.0.0-dev000094 - - - 1.0.0-dev002278 - - - {d9a367c9-4c1a-489f-9b05-a0cea2b53b58} @@ -157,11 +99,4 @@ - \ No newline at end of file diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Assets/AboutAssets.txt b/osu.Game.Rulesets.Catch.Tests.Android/Assets/AboutAssets.txt deleted file mode 100644 index b0633374bd..0000000000 --- a/osu.Game.Rulesets.Catch.Tests.Android/Assets/AboutAssets.txt +++ /dev/null @@ -1,19 +0,0 @@ -Any raw assets you want to be deployed with your application can be placed in -this directory (and child directories) and given a Build Action of "AndroidAsset". - -These files will be deployed with you package and will be accessible using Android's -AssetManager, like this: - -public class ReadAsset : Activity -{ - protected override void OnCreate (Bundle bundle) - { - base.OnCreate (bundle); - - InputStream input = Assets.Open ("my_asset.txt"); - } -} - -Additionally, some Android functions will automatically load asset files: - -Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); \ No newline at end of file diff --git a/osu.Game.Rulesets.Catch.Tests.Android/MainActivity.cs b/osu.Game.Rulesets.Catch.Tests.Android/MainActivity.cs index 34f10dd16b..4b13b86ca2 100644 --- a/osu.Game.Rulesets.Catch.Tests.Android/MainActivity.cs +++ b/osu.Game.Rulesets.Catch.Tests.Android/MainActivity.cs @@ -2,21 +2,16 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using Android.App; -using Android.OS; -using Android.Support.V7.App; -using Android.Runtime; -using Android.Widget; +using Android.Content.PM; +using osu.Framework.Android; +using osu.Game.Tests; namespace osu.Game.Rulesets.Catch.Tests.Android { - [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)] - public class MainActivity : AppCompatActivity + [Activity(Theme = "@android:style/Theme.NoTitleBar", MainLauncher = true, ScreenOrientation = ScreenOrientation.SensorLandscape, SupportsPictureInPicture = false, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize)] + public class MainActivity : AndroidGameActivity { - protected override void OnCreate(Bundle savedInstanceState) - { - base.OnCreate(savedInstanceState); - // Set our view from the "main" layout resource - SetContentView(Resource.Layout.activity_main); - } + protected override Framework.Game CreateGame() + => new OsuTestBrowser(); } } diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/AboutResources.txt b/osu.Game.Rulesets.Catch.Tests.Android/Resources/AboutResources.txt deleted file mode 100644 index c2bca974c4..0000000000 --- a/osu.Game.Rulesets.Catch.Tests.Android/Resources/AboutResources.txt +++ /dev/null @@ -1,44 +0,0 @@ -Images, layout descriptions, binary blobs and string dictionaries can be included -in your application as resource files. Various Android APIs are designed to -operate on the resource IDs instead of dealing with images, strings or binary blobs -directly. - -For example, a sample Android app that contains a user interface layout (main.axml), -an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) -would keep its resources in the "Resources" directory of the application: - -Resources/ - drawable/ - icon.png - - layout/ - main.axml - - values/ - strings.xml - -In order to get the build system to recognize Android resources, set the build action to -"AndroidResource". The native Android APIs do not operate directly with filenames, but -instead operate on resource IDs. When you compile an Android application that uses resources, -the build system will package the resources for distribution and generate a class called "R" -(this is an Android convention) that contains the tokens for each one of the resources -included. For example, for the above Resources layout, this is what the R class would expose: - -public class R { - public class drawable { - public const int icon = 0x123; - } - - public class layout { - public const int main = 0x456; - } - - public class strings { - public const int first_string = 0xabc; - public const int second_string = 0xbcd; - } -} - -You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main -to reference the layout/main.axml file, or R.strings.first_string to reference the first -string in the dictionary file values/strings.xml. \ No newline at end of file diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/Resource.designer.cs b/osu.Game.Rulesets.Catch.Tests.Android/Resources/Resource.designer.cs deleted file mode 100644 index a19fe391a8..0000000000 --- a/osu.Game.Rulesets.Catch.Tests.Android/Resources/Resource.designer.cs +++ /dev/null @@ -1,112 +0,0 @@ -#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("osu.Game.Rulesets.Catch.Tests.Android.Resource", IsApplication=true)] - -namespace osu.Game.Rulesets.Catch.Tests.Android -{ - - - [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 Id - { - - // aapt resource value: 0x7f050000 - public const int myButton = 2131034112; - - static Id() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Id() - { - } - } - - public partial class Layout - { - - // aapt resource value: 0x7f030000 - public const int Main = 2130903040; - - static Layout() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Layout() - { - } - } - - public partial class Mipmap - { - - // aapt resource value: 0x7f020000 - public const int Icon = 2130837504; - - static Mipmap() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Mipmap() - { - } - } - - public partial class String - { - - // aapt resource value: 0x7f040001 - public const int app_name = 2130968577; - - // aapt resource value: 0x7f040000 - public const int hello = 2130968576; - - static String() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private String() - { - } - } - } -} -#pragma warning restore 1591 diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/layout/activity_main.axml b/osu.Game.Rulesets.Catch.Tests.Android/Resources/layout/activity_main.axml deleted file mode 100644 index ff7a60eb50..0000000000 --- a/osu.Game.Rulesets.Catch.Tests.Android/Resources/layout/activity_main.axml +++ /dev/null @@ -1,7 +0,0 @@ - - - \ No newline at end of file diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index 036d09bc5f..0000000000 --- a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index 036d09bc5f..0000000000 --- a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 2531cb31efc3a0a3de6113ab9c7845dc1d9654e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1634 zcmV-o2A%ndP)B+Z3$1(8#|f~9B42Y^N-3=o2YCq0YUY$Zu=pM;#hG{lHi%n~Vh z1d1vN#EDO19X?u$`cV z!a}AKG@Bb*#1cdYg8af_;jP69b`k%G1n?0=F^8bI^o>wg-vEliK^U}y^!D|^p|ax; zC|pK=f+FHp!RUAhtlpGGUxJb|wm^5! z<1r%$<$TR02wajxKZ4MiR#aAxDLE(##UNyD|ABr4WoGRF*?@e^2|~Hq(gurSSJH*;Q~5lw{J5A_(PCXBWhzZE${qgzv0{dk-F( z1<}>r181tLiEla&f1j&?p2xjbfp2cTt-c1Ox~?9EhK9`cJ9Vatf)loIoQ@#h&}cIGD>Z#QLE}&(bMo@7Ff|7f#Nm^$PJpVcbj+v~K7wfVwF}=) zRQsc+`=A-+C)vrRvaIC-5u>|;3h z*G4-u#RI<_vuSN~vZ6{|I~q5FFk3%de#+*>UFG>&bq6~ zUEMZ~FIOmFO=kA^5rkp-Msw?^63xvdXVZ-rv@{6{iVO}M!}^Je%2BPbi+(L<5<%~h z2v^D+f<|j%7~cJjOzg*!GPQ{%uE{i%YgcZhuZh{yNlQ}RhaU1jd=K+AopVKP+D}&} zZ3y$llqZiln=Z_A$!qzkGbX0D{?l(v5@1|`QyCvCnQ`eKI>|zj_zo%y#fKf85VhQ} zP)y&j4P*nR3q{-o35iV6nx7QDqq<;WDVIt}|N%`!dgv*y3va8eLNj zU9x(?ieweHfQ*yXk8|=ssZ~qJEz^QoKJ|iGa>ge_Vm_8l}S+UvJ{8g4jr+o#aTSFsz1W;PDP zW765JXGU#3JL>SlIl3NRV2{7B2dLO1cIP)a4ZRYL|MBD36O1#oSgAf}APz5@;x=_U-<=y)Py7*}O5(uu7BL_eLe6Ek7pH|G zMq)FrF1EFq&yruS5b=F=w)fVVoPd(oeRyTFym_Uwyn~L=OL(O?cf^2L5R(SmjORx6 z%nmZf^W=3pkvT*>@osUNi>DULH1hL;y`JGQX$onRCr_U0=H~Viodq!<7Q{3rPk~{G gu#IhOV;e2n|1(WJB~7~kivR!s07*qoM6N<$g7lUVaR2}S diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png deleted file mode 100644 index 7a859c25556af7a2e46e22a2220eaded55628e9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1441 zcma)+`#%#30L6FjMQg%tuA0%p#0??L`*E=rD#U2F4L5n@F+O9Sp;(QwEQy7+?sX?r zCWN(!Hg`+j5k8*H@|yQEtnAi*(D{7M`Tlf1=eKjq)BUsp2nqrK01B=yNUv`!`EH=x zx8$xJQUd^Fuec%|(TT&0V}4orr_==mmCnEuzD+ff8Pg>pJRqsWsD{#?eGPaCu0(sEH_2RG@<6-Nt<8 ztPMUmmAz9Ga$23Y9~p9dqJSgJJ#Jk_r@o13^%d-Xf46i+Lrmz3 zy9(DUDVXj;Zny7nO+yn&W2flEX=C!8&D0zI`G# z8;XmlonoghgRFUY*$+7pPLa}Uy)onw>TT9t(FTV6#BV8&lXWDPRvQW_n~xZ|yLcZjX>m$Eaf1)dwXS`&E^ zkNjO;%;fWywchc=+w4utQ0Vbn%B>b~yy4I#D{?1!P`$P>Wdo+ljCo(tYia04JTc=$$u+IbzDVPFYpm8+AQj+ zGKH zfS{{hN%W)kF+(26oZpkURD5Q_G_z97F6{Jval+TOj-;5y)*Rdo3a$^^k~q5gpTzmp1q@+2X9O z;_VUF>;s~C1~gpFrFoh?{aQ|LlBIYz!z^P~lndX5-ES)p#+9GW*|-WBTzQ*&gKOE` zM##bUaWl`6rZBXw0!~_oUhf+H$tNc@lLZCj0bZT^KSo@C|P?7YR8dP0se1jj z9aA0|7MONf(ZYaLZs$s}r*05fx25-iN6mZe_*Rq%uyz(+^-k;t`!R`?uf~rn#1ZC7 zuv3}UrmMzcBbo4jym@fS5%I+G`GJIC1s$)MQs3Vhld?a2U;w}$@V%dC@%qpO7+3#$ N&GnQ!lI8SQ#{X#Iv!eh2 diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index b8d35b3a1cfe5308bb099a5a1429555c41417e36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3552 zcmV<64IlD}P)o8zx62qSGZVDjFcw zmxU;G#z^HzQ!GXJ-*69pbEeNn;$q%9`<^_ve6S+hkfX>pEmUTks+2m@VN4e=-BfB# zcQM@~beFnE|8|&qR$IOR+Cm@fKKV*xuU`Zdvl=LK4a4vxD=}@uREG)CWaLRqJ5ybP zu6!%iC+?fAzSb|q<0OVH@(J1H8ThTgk0;W=21TJYwd22S48?0q?Ql<_H9oW?Q#<^| zeirUq0oDLxz*ubc^EioOzd5Deq{k}q4=YI_6Qm}Lx&A|+|0D}zEJqe60pgP7hwE|CF z@#G3rLLN!=hY3#Mncm#=bNubjDVN#!%R!#+yMuUTdtd@=nOZsg2kv6qi*x zzDFd9=@0{x|A>LZ;?=}}RP0ia7?F(2EK$;G^~ix^1(KmvlA1T%Me0V!5Mp(azrt*g z`GKR#Hle}^)6nEOi&5p=B`&3>XD&k7hNpOg6rWXgIVwRD#GYff08(lhSI*BM130r6 ztwLvix`bL=@1gtm@4J-l-fc!-e{&2~Oqs{qaK~p9f7wxs>V|45HOAS_daGw5xEuU;CIJ+92}tg z4<4ZP8$L$Eb4K%sldwI?Dr*+0^Cav!^8yGXz0q0enY&~)R;yOG00dN1dkvL6IfJJZ zVXu}^_&HPQzwpQx>^t=9m8u@|rU zGZkWRl_Ic3Qgwcn12rQ-p|)rUPVR0xZ|g z#6I?<=DMiep91ftqa7MkB{^?D-ZoQ_q4o#Zz5>gjTpeUp0 z3G@w~C|7{qc>5!&4by(n%Jp`iuf291jemANFJmoJ=kLN8bXoMLmT3fvj9{#fSNW<} zPWfc?!`YwgG7Mhr!;M=hJH@mEk5k`p+aWlYYie<%{DirkwsaCDMRv!-QbfD`F`U&* zo>5d65*-)D#>B#V$@hY}ZNj;cW4C_i&aXIcn%mJeYW9gE&#PbekM-NS=wn4l1Pv@ zMzD%cy$ABGjazr~@-TOPy^E&IU2N`Sc+MEK;iFAm2A0h&E$DX(ms?2dx_7F01)(i1 zt(1M_?Cw+ZHd@;uW{XK*Y{?Ju0ch5um8c1;jWfXy;v{GISLTsgmo00A* z8#H~vA1NDj?m{&xWtC4M{&ANL0wWz5DipHQ4JPOCWyT?wRHhZzZ zeZJFjg#>%C8}$u6=EclzKE2=~#v<4nARyoPtdc`q14SwhI__K?1o_n~Yb@iSRqNli zs3kSrZnRJbh=V@m8MSxBLHE(SRrcc`CQy{7<{rUV_*?AJCSmpCIGg>1Pb59_r4>#^ z(nn96vdGRMk_L&gj-oWj!lL9s60`o2)KQE1 zB&*KmVz3NtmJIw>|N6;iRC%JSJZi=ZuUXilH+U`xaL>hXvZ^UVLRHpEz@n>UwO_O{ zvxM&!UB21;HmhtN?84Q$8@99YqbIS1J!uhfSMyjD;F8UQWTYp=gUt@U%M2UX5p%4Kzf zcJbV2CClLAM^#U{Xz6L zJdsKRtEu5+&Ybs{fi3b28WN?!`q@NF5kI%@$vey#&m~jmHwA`7A1U07i4e+zpQNm|hsmsx_shxjsk(;ai>lwhlEheA0qLHoISKxd?ut+1!iOjA0S8%WxDr|ybBIOiWdU3lm z`-eQ?oQ5>5uzjd7ej1)jB$<=TK2p#pFi;o>wmV#sI7_BxK%(~=dnzy;Aqovnm`E`X z<`57N71R@7aPSTY2!M`7!(!s5%GHI9gb|Mfi808OJ5S4R8Y+~7+uvURZz0;p z$0s#rxNa}R6fBi{*o(kCWK;@xicx9yVII?fSHiQ~j)?aO3JQYL#1XJ5KSG|e0(*zs zOa;K*K(T=V9)Oo{S<-6w00i(zcy;?%WAK3C1Mvl$9;N=lVFfV>njP|tB6AU(uC?@> z>XDSeeB2Vo7A9ow#Js=(UMbBR<;r{YlREwU{QN+-qoC#%8Y!79O45D}o{p&oU}|T; z>W*ZQ?|P6=Q;;J~SYlu-7;}g~TnRh?FN7zL`Pd01O}@Uq@HG|@9IGE37W1SqA>&g? zTHZBSPGLzE$?Ht!kDJ76DBvsz?sa_Jgn8b?lwYVN8t5Cwz+*wV0=BG(XdZfBYHVG7 zgM)+piP`~Bia~<{b0Q>(OJWkWdn9S2YM^=t1#;S6S%7Af;8{qR!SG`HQiJ>24Sho2 zL}ElRCX5X{JPMx?>I+FAk*G-6f(-`qF+V?Th(J13AWvQ!t;+aJJVO7iBze?19H-RE z(+le5=|zn+71YB$_zj+cXCrYNXbXK1X@NeYU<{IQJ~|&+Vuu8n20(yGz=FMhv2fZG zydQSKNf0W)qyvJ7=KBu`Edqjn!#(_43OobPk~Yv*0DY05b$~lvw>!Y<4{sZy*+GK_ z4fXQ!4TV}T0S=6OG@&SRFASc6XQ2&|l>WaZP#hR`YNGwS5C*yUv?lc$Zn7uu(=Jd zBQr(wEwogv4g_{iFq~uA3k~Z|L@DvE#_JQ>CKxj(Q|L@;_pg7{hnT!9|ZQb+#ochnl1kg9D@G4hNk|1@c1c) z{PkOR|2qXG{Wo$7`M-9{ZVdTtdk+0Kb_u1e2S8@7a?0x`-IJ*AtKYskrENiB%2SAk%zG8F7zQf=Uw)BkpfBE_?MDjX& z@xO&fB(T^G|G)3ZNu2smpTF|o#wUh09?%1ZEU4JTml;2Q`T9S*q6Mrzuc{3gQ-A*d z{Q2vDYEeB{thm1G|F`eoaq0)fT1(#ya4b^Y1D+8X|DV5nO|V2c3(TM(uHGc5|Nf&V|J{K3i0U2yrD0-<#2-I@{x5Ip1M7*&D*x{joegF;bWbC? z(kra(q`n6-N}I4|UUdBS-G~1{3Hjh;&W{YUBz~nhg z|9eJe{4Z(f##+{cVkED+{l6Db&737`v6TNa;pIQg8*`u<_1?qB7^TPOFJHjLD9$4G z$4`iwAE;_BU%Le^B3KtGndh}^?w7N zp&3LI9GX_%Z^hMgm2i3hX^M$M&D3?3wyocP$TZWyV~|^v4II`1-Ns4G92qkYkC3*q zq5Vcp3$J%tR^A_hzW)HC>4{->YFc`|Q_{EF#LX=TNWTIEGZ*dOIh!!#7am`0)iN z!-Y*JzdqP8rN&2Y&y2(+EtA?m9-5+}#BXAw@$*D;zxcf=lRhYP2`ZYNoGdU|=;=Y1 z!-o@UOzpBVHoTpyopyF#@i)8YcdVaV?2ljDUj6>w?`yyA*Pf5cUSE9b6wq26;8J@~ z){!@7GpTmNE>2kO_POn1zf8`~}P?%{85(;s&nc+C&;t$4D5$+f9? z-8>e~Z&%(_OwrVd==PGc4mhTFjVafjdCqsM|EvEe$2)U;a9s0IGofbtHcpKz;cJR= z`DNzVI-iMtrg<$r*EFejE8l0oMM3e)a|=o;x>Mhk@*n)xx%2Rrt=4TnivwP5zpS-& z@5h3w<{9>vH!6KP74q!po!oh)$BI~jUu}4P|5ofvi@(2i9NyELbZ$qD}PI&+JJ3+^f2=YEuP zjpepXu;`->)%n@lB|b@Iv$k0qhJJp%S?O9t?)zjLwwY?z@=v^12)=lt^ZcwNoye^x z_uu*-x}ntY`mc3S`yMaaHuurqE~e`{G_IsMZdhw*{kDDS9h3WSQa;8d3vwO)d?WE+ z%*LAIs=2#$t=BZmPTP}xMpj0I9ti9_c{r`p zu+;ELV)~|tmk}}-GjAWQO5U<}Lr?bB5UX>pYf5~UOnY%ZTQR${nq6YQOHc15>q%#$ zl8$8k_1fsCw;<~OiJ-OiE?f7RJWt%N`#e!y=2`BhIqju|a?kW5QupmV#wx6HrSs?J z&nJroVy6i|*Og1U`{c;a^^dPvTfNJjdCg1nUS<*OC dK7&Kx57tYsZ49$p7vBM?@pScbS?83{1OVHE%8UR2 diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index 8f56909cddfa86f1387074bf43003f36d6e67be1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2413 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 b;}yxl--Ss53i@>Q4YQuNcebmsMJN0NT!aL! diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 9737d79c0492b2c8a811621660eba33e79fab959..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4858 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 diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 9133e31b43252d00767a6a3806df9ba68de2d265..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3871 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 diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index c3ae5f5ccdecc01a9b17a2a0c2b1bb20602f0151..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8001 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 z 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 F@PB1o0BisN diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Catch.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index ef89bd5215ffcc38c68b119a7495a77a7084543b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10893 zcmV;8Dst6{P)w$Qz$dy^()8jVZ}Y(Uli2W4>8-vtIRd-I?ma0 zrn$Q18Vu_BSYE}l63f>nXUi}6=bt90`vCsgiscBFqgW7;qvUt3MHVwZH#cYvq!rL36}g@I|nG7basS}adv`4Y=k0$>y*IYOTK zC3%NyP1WuebIo`?yrcJfcPKGa26lC`(jN8)j$o z+ZasSjsrFTW}5&^&fz`^f`5ksDZ+C^iqb|DuB&(42H%0FPWU^)cRSJdXIDQkW(lVc z?_{i2x7aXPuE(HRh2`M!055<&&_M5*V(?0FJcWSovd{-~y`j|0cSD&Rh9Tymq z7&Nmmr+>E#&>s=6?z913xS)Tx#F?s_FTnEov8z4MgV3Wl{-jBQhpE%p;IZPW-P5gg6XF>)3O(bNzaU7&1K-)a z&MV+VR=)lT`V%OF_pY!G#!wt^W5zP2JYO^^;YO$XG(2&iGT`?{5k!${JeJr_I8{8x z%s!xS)rWi9NVfZ)&o``3} zUY-8r%9PiI+R1D549rDWbHuIyQ6A3WIt35>7Djidp+#F@P8cN$5akh874S>rfq#I} z9Xe@|$=ULt5IgYl%(1Jtlm`;H@Bn|oR(;BM13uvBu4I(RpOmM%`8+(hdqluzt3JKC zMleTvj86CYj1u)4{MQb^1A7}=^+R(vFjTp3$9up)rUX3zKW7`2#5tQ^^vc~~01FLi z_Y!ecu9vjdniQr4K7b#(B8XBM4tsL*8L&duUFvYH)>VzxF(r@?+%nsnt$5IWVtl{P zq*L&e$mnowFxnc+SkSB+H>c6jJOU5a?*#mcm1xnjUC0@q$2POIp&&q^Sy{NX0MyM;7_VxFFU;2|>F8xI&OMx89iKz}uO z!#TUViGja=DuKRy)OhdY#{LC&Fh)L%M4@A;YJ4A*q^l4dVQac69}$OX!(u5{3i_jOgbyU zm^GRrM`|BUplffZ5sts`^NjW|@lt{|&hA3`iZL%?j12U`OkeQz6Yx9S{}i=cCt_zKeG5+SBKO?=64)xf3mYXC=SuQ9^~FQyO~s zTN65)SJTM*-Dg~cK3?->zXQIve6VT_YB+ToHSST);X=BK(O+b9wxqBSZNe2U2E zpl0=-JYzOCc6Tx0d&%xSdwE(&7Zn<{IoE7gg^E2OY*Pa;_4yBt)W_L$2Ks3A7Yy*n zk!A0H#E%gz@d2Phx{{I4cEkrLrb2?(2fzHp4(dZs-yZPu&z^fH+Ou~b1A8~Sz^pm* zXzDw}Qz2Dx^;uN!0`0l|<*qc&+58=i)CYn?V@{byO_Z1qkd=?#r!K6n^>~G>5i}XT z;r#0FbiYI+^#OV7os|sOKFV{iEI~zh=cFk%kY7^wCdS$zYGMO~`w!qMo5s^>_+I?i zo0#F-1KGBH2fA?f4OAJ#`ijv=ZE>Cnn4=&R;J#8v5u{=JxDy zn#9MSq2l2u(X$KKn~=7w?$eYMU97mPh)fY*o`(%E+Fes=T>T4cTF^D~?m=yB%<%20 z95`?gU3vZOR2al0Z5rwZkjhdslV=_r7b)xN&v7+FG523XW2R^0q#5YD^&1$Fdnw<1 z|0Ak9=^Sc2La+k$_#GWW<`3l$6+@ z?*hc{Pp#*ttbQVT;kBhK=;hax>BGERw4l0$8jp~!d=yff9gr3C8{<7D*7 zXKNW?10>5=tU^xL8Pr6Fb!GLfIh<`&5IsUX*BZ##UH8)H`MK?Z$M}_sfi*z8z`=v) z`r99*C`YIPsf(%~^Q21$*bWf5zq+(O2W#I(+7zJLbtd|K`wj-w01LR5M^fPyZ9WYB zgz`)3HfQO}v;p@B5e2}j|Jd`|&wz5!Vf;dw<73af!~hy3Tj0^BUqlv}gJWWssM=C> zIbbt@#xU>t1c~4ruGeWZekWaU1z!FCU;qtTZ=v02?4;=w8N)TpF*c(;7!5#rgs}SS z%j>OJ^LEi>{MyEx#I0NSdU|SLR!MzICT31 zkICebIfQP$XTGH1RMGJ9yrTH~9X?*O7FEgKYqa^Wv8oAaifcbgN=k|o@alK^qb(g# zN)!Eoi3jinBI5hm+HX*4y|liWwJlT8hE2Z&T>(D*e4XUlU4EhX>RbP3iyl0PZo2E= zs8GfTu|R|JF%8Pn6%Y424I(!iWUOqwl&tWrX zk6Rx=dxIE#28sp|Z>eeF*WdOaYHe%lli8xg8*~)BL3!q?>j10%Q~+T+iRA3=muaCt zu=)c>4D^qDFGN3W{5hcS^Te~S@H9(a8q|o? zMYV5tc!T^vgF5JsU1f5(H_@N~Q092Xg|pEgJN^uK0@$4oJt5iO4J$GjrNLPJPd@iD zejKFOC=WmRe85(JL4Mx+8$T!Vc9wP_ZOMo&*?P0tZ!}1tKf3ZUCv^nBEA8fAx1y8JxlD2}?xi=D1^k_!efdqv6k1(E^^93#{-@W(V9WM%nt>`hB)pg*H0o*xiz zMz{WM4Ct0AGbJejO#Z?}ucAW%NXP@Fhh#sgIr&p(&Ix)^(3&s5Mm5c6$zceK?11W( z7_&n?*zHAX1mXXK)WtRpE&Tu1`xgWRTqkZCyGpXZ8@yA2Fgm~g@qeiPba&exV8ge&UEnX*-YVHh zzwQ1<{i>+YuJCU+-YuDmU32rjevkZ0l}*2F;pa-O z(Khxka`S&{-2}Ao`Ngu9IllkVYRS7mP4g5!O6nH_lMi}*g^EW=>(5g@>J;>40HWhk z1w2lV|Mz9d%IaqtbcBxwm@01o>=F!z_tgIn6e!AA**ITr`g883f9DT%lRFLgcAkSb zOWFl4|HrLiL(;Vh2DY-Mj)joGB1RFg&2g z3IJ92oZa=loC;7e`c$;?lh3HgfZVkCSAKPuv}=u+fZzM`-uLKyd5PrXOyPu=AOH6= z6=U@lAFMkq_=d2(2@K&+Mw_CRTu|x7o3hy-k$wfhR5ud1LVCLU$lEn~KTWhzZ3 zR9l8u;+yV~D*y(o|CZl=rz#H~3U441D|Huu7A-whwkMx|mA{9SXL+LIJEvxoIpY z%dcCv^(YE0^}McKS=`)UXa3J_(e z7=4Lcjjtx0eF^$y%T_8C01Q(o29e_FfLtN~L2GN9PpkhO4?Zq=tY%y_mj@e_ZPqc3 z3)UIL#17yyLls;(WQIodNC7k&&0xr?Ggda-CI|fiqc0eFHNBA)tJd)4m{PtE00076 zQt!R`i*=Gg1G)aIC_nN3sYS0zuCMTiD-=>9@=Uge0mB5#;XdX7f$s#bLlV90S zbWd2#!T6VS@+ICS{YE=zsy)d14Vxqf$6y6~ zW7+#%dTZc!FTD1)*h2j`ZaqarJ)NBo4*%t)}Cw|kx z*(ysuzR|{DDFCGTLJkQnfgIob^@}BM?^9=9-KD?&x8Jv;)2Cl0nI`r$z99Eu8}~1G zI-o}`c@)46oufCWX60J|%f1-Gf&xTk>#b&!!@V_F3NUWU%#iKw23e{noqdU9>hj3K zV0Ji;y|MOhPt^VGnic*7Pkh3Fhr2;3g)U=!>d92=CwjyK?0D(Eacm7iWR)A)d zUs|^-U8%1DEcZwOlm+&3e8auLP=LxYr=ib-T9-z*u#cm3-LlIwqnRC-A> z4xujLP>8pHU;EAXK~R7Z`_okBI-eDQ{BexJWUJ(y?gPP400{X*XMs@fm-+FUFZtql zsXa~CeY>7-ry@0=1_q>Dm0teNrwYOja4OUF(Wu|MzB!22nFxAKgf*WKp4Tpa`g3p<;={?7@rj&M^{#2 za=3ReH>fmO`24G=C`fM5SKeIC+@L2?fRYhA)3S8KeO3U00%d873OR@SR~8797zmpx zJrMT%;w8r@J1hXwqsc4~cA`L-#yWgkYOc!eGX)Y90BR~Zhid~%g`hJPV$tHaSSmz! zsSw4rzr<(cT76c4urNLlHY6bsT_J|B~ULz86}Xcb^O=EghoaRF(|aT{4`y zsQQPY$;k#!O#r{BOH}|*F$|VeqrGVrONaJfI`qYVy|LTk6(}6J;EL;5I&^RA0qjjk zRp|HpXoInq}J0HYzrSk=f1V!9FVT*+DxGj1ySDMWUGU=+jv_3;$MG$Li89SUMn z36>+IDnPiWnNTWp*G09e7Uv|n8e>6j{hcIb zm^OKC@e;|#+-cLU=#kGJnrSsonjyK=@>L2OV*#B5MJ}igZeuKM>Bys*>cR^F!(<2W zO##x<(!g>~$kr59%Xv01m8}uC{UQ0>u->*tT z$ztx40$^*I4;;j&WajCN4%bh?HiT(zjthrhNG)84OwV98#|5g@pPS9qUZ1c1rq|DWZRvZGjcqs+ zxZk%&uWCdJbLA%(ySW6zl7nDk1>pMv;h$-`iqQ|V12Q1!br9Wp-va6n$hhO7$NTjG z8G73ol*^Sr2iPSTj_ip7L?kBiA0CGJ)a8OFNUk%&=s6;3l4Q51l%SW?Ba+}=C3Vtl zfwKO4MAA{-15{RzvUNrC0J{Xk5xy#bI2MqS!&SJ1$}l+($quDM^8D?+0vGDFx7;5R zhvaRP?T|cT09!}2rYgBJ0lP^_NpZf!06HlEv7VC>v-1i#d()3{8p3iPlM21}D;p+B z=HVMQ{^Iv{@b#F~26JvsXP&QCCshP2XIv`JJvOx}z zf?zks7Z<3PD>Q5{IcO|HTRL){+;)Hfu*?5(TToqnFTb%&GWBRW{X$9kK0OtPiL^|) zSeh+RKM^fn61>VW$VZxa^}L{S|4#hBd=$#oTmJ=^CDGh0%5z zeo&j-c7QOkOW$1?l!=AvCD-JOB)e;&@og|V&`B*QX+HDfpj3`Q`Z~;sT$pI*|D_`i zrz^M_fLWpdK6`*Vd4h-$k(!XIv~c!DD(nCuy&%w0Pf##87g*{$fsx!@>vMk=-=95e zj^vg0p~wHrdu9S1AAvcMQvvvv=)nIIGphizJ@o*2rA6}`Dj7?TzGBQGS`+|y@QVS? z7X9I;ji~MoqiTZHp}pb%-gZDV z*-~;emg>KH9xAUpR9rrJ=`}a=l)#@8yJzn{zI(%hr(Wn*mc74<|64h`(Ls>zMDO|b zdms9pqQUn*@3L!Uoqxgo3G^pRQ+O+2lwdWwH~in*4iMr2nJL+t8e^4fD=joga6bZA zL%m;Ss0lbBq!#Z7oc>s<|42;BY6Og8n>CsE{|EL~0YsUhd|D}-xR<9dtAAPCfr|#2 zbioxN+f^d$+BAp28kDql|M&oEC7K+paE$90De88Rdda;$Sr6&Hcl z(GV091PsSbxpkZom4qy{wG`+X(&*Qp7@g~62pqPZz zB7?2rTbgJP-*?A#Cf)^hFpvgVzFWTmjg%N42}b`PRiR@;bX;6HU^6U?r$15tqCeg= zC^jZ0CKG6oy13>ZvI|h703hHM*}wk)18RT-BHe$#`Ci%QS!jQvEyKpIuJ{SSB*A8^ zKk3ggGzeSRz_D^tmAcVf<=CAx(IEbufrd%c_s9ulS@!-%vbsGxr9OCk|GSgYb58hN{NHwCw`Wf$X_gmW1p96128}f9AzEWJz`IdiCeq zpC1{f&`t*|V)~Qeui)1SgJMu=gC!e_HotV_JH!?^Op`4DnTf$J2I#{P1y6@e>u}l+wYcTp zN2r)nVfD|q4oB&Ey2}BB7>n6n#&19rz&k}6GDLGg1M^GkR?@f&G)|h%pTfvM+}rMM zKT1vu4_4a~rK$Wgj6Ea4U}~U@-|mdzc&vHwaCMH>GTl(waFmub>Gni5k_H?qhi%Z> z0v=km7uK}Upa4gC?r*IR2Q-u>j}UYw z`|#5*7?^t~AAI~7-=vrx?$3LEJ|wGuF2UfCKpMZ@M25o>2>;TgtGP4q)^w;NL`{bR zfY;)p**E$K~n(17#8mW>ZAE~<$m7$D+9Iyk z)?sW}Jvsk8^{qgKXfuds&%Kl737w$Ca@L%A)KDM3 z*H4kNH91EE&8~C=W655gA6XROn79B`z!Jt(KB@N=a(<{-{kzH(1=myt zeqk*{>lB>r9?)d`#g5SA6#^q~?Kj^uuMnT=42OQN4%%71lBkb$ILgc~nhzKvSjr&S zik8Fe>9avhwkvq?0#%{&J>nXriVDGY|1ql`Lm#YKgBnhqMh*3WfLE@u6jGfFJs65o z(q#BbF^HjsN}520;*&G$usyKJV-L8g$`~DU%K3a_shzv_^gH0gp@U1`S&8h8r_+_` zX|`>SOH6Gb)JNkv?2gCOVA`lpR|c_|3T5Iipo48JLsd8pTlD*Z+tC&!hQsG({%syw zwqg~3x?$h%>9Y&HxoicRe&t+LI&vaK(cUKL@Ni(5LVp>dJ~~mUqdSxyL$X*|J< zutH@))!U#1Mmt@eAto|;d`j!U=v{%aVd)~^6-A@h#}_IDL5oDOJrEriSD`GhuLk!h zZALMZU zDLv~XV)Tkj97B@#OR)!p7VC=0$e|`Mc#?ASCa8*>TbL5`8)@_8_*DFsn4y>i7>JA< z0*0@GU?Wb%`v-*efh*iAJ`hg=8%jY5QZiMi=2@^3R4_W!_i4{)2y|^t$jF;40>4sZ z^osrc;bDE`5*x)rkPNnM#8V73;rwPo zd%VFvus?ynJ0-~QQUXhMzU7}9Yt4QkV8-kMnkkRR*adH%s?dHQL&efC((u8#!UJ>8dgIs|~n}{MwQP2Z2%i}tWFhA(VCZJ&Tb{&oQ9(IS}!Et;pC- zB6ByGfxqWUAodU?5H6YH*rU-uG`G=uLCycGq zZ2K)!Wx5Y`V9}~?5>cKsGFM_x4+DQM-K2tD5GSHUd15aStV9VZnXYVY@gkL_dM{sm zk0;IJo@0vOBgbzaH~6;>k7Zt=V{cY|(Mt)*na!eAA5t20WG)2C6DQ*P%+nJ9yI?5s zC8rY)1FSq8nG{%&ijy+)&Q=&omurfuTY3Ay&UOS}fG_lNg|Smxs#|jmCGRF>E}4r&GB=Fx2Z0g^u2S)Cp!K-k_zB__AuU%oOTm?Yq$#dxgB`)>r3kbg z<3tDWT|DqL#no*&#*$UTa(Xk(NoNUl=xZXnnOd~0@*Z2-H1 z6%--YSoWT}(0RaPBQ%nB93AwiKPiJZ&B4Gw3X20oabb)w@ZTrEw|dbX0~uq1>x)-? z=HirbHvrz5OuP>YvNan8BaKWVP@{8l^d&FnS*o^!*9h{91ox>B%I~X+&;k0+iVvPM zh^OQgR{fEsEq(=4opZ^GF909tj**P1f{bx88FRMk%cun2?oz>1luEW{C5c3G-inZr zoZXU@Z+S>*vVE&5uH{c3B12)m@RJFMVBU zuG#|rZN3`K<3?@weTRxdbiK-Z0#^WfC^vv9OaqqTXOZ*x6_pR8}WB_iB@|H`M1FFg%v+r1pHVs zrjg9U6FRiWTM>jEL9h{Y_)iK%ASfb00A+BcD~;D?8?3J?Otv4?Mb-O&CqvQ~fQm#$ zJ1K0u+U-A3r73{gXe)UOaeFpJtDgT0K-F(Vq#*v6~Y=7HMAxn zT{#6-)y#a$!dye?yGpL|J9UwByQa8$KY$Sw1E>c86etuZ2yk%D?jl~NV|Rm&Ro=z_ zEqn$(3n%Nq&I9-4fo`qY56@DXE5Czh!#lvc;CDI;-VM@1#DFK?p_qW)C|d0Wnv+h( zBA$#51AZS@1i@Gq+^6DQA;(J@3<6EUKoZ*wMWU6pBq}P_0kkPOGjB$kg1bILQ*eK- zuIM=o(51Ot`6>lx`wCX)yn?EYDvR?MwWazuOslqOifXolz`x;l@PDcT`^G%{x0rgZ zh0o%9yoK-eEZh^{doDZ!=nMwCQv~*6(R*3Qy9)Hi;05{|uhm{~X9~tG1AaeHgn`G| z6_N=5%@FMjYGN4jhkOu)un?sv5&=)F6oOa@NXw$4q8vlw;zq?LrZmMT4I3Yyls+LT zHEkjY{2P7;{|A2qe@l|hN<_T9xC^k0-@!rvZzAuSPu^Wv=`+Z8OFGVKKac^x|9OqX zyTafulp&Q+ge=07#R@@o2%bxuJ5n%WN@8N-OFY1gDfUv39!LyN#o(TBZy_bY^GyEP z!U``2d@gzCbn+d%K|k1QwP#)(wkx#n3Swm#LMTE4;mLwRWD+W&Aii=np%_{MMm+(h zk*vsO4+n40TrKPZ>?GYl5FX$rat{N!r;a>BL!OyO-XVv)lK}W+^3HMOJ9vYht@iAa ztPGJNn?X+kfo?U)X25*JvN-3fU7^6iy#!!)x#EEv0u0;6%SkdQ( zh(I1qp3xQ9y8=7|J-dRY6yAyJN diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/Strings.xml b/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/Strings.xml deleted file mode 100644 index f800d6eb45..0000000000 --- a/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/Strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - osu.Game.Rulesets.Catch.Tests.Android - Settings - diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/colors.xml b/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/colors.xml deleted file mode 100644 index 17bb9a9dd1..0000000000 --- a/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/colors.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - #2c3e50 - #1B3147 - #3498db - diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/ic_launcher_background.xml b/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/ic_launcher_background.xml deleted file mode 100644 index 6ec24e6413..0000000000 --- a/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/ic_launcher_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #2C3E50 - \ No newline at end of file diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/styles.xml b/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/styles.xml deleted file mode 100644 index 5885930df6..0000000000 --- a/osu.Game.Rulesets.Catch.Tests.Android/Resources/values/styles.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - diff --git a/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj b/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj index d1e62c46a1..82c171cb46 100644 --- a/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj +++ b/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj @@ -24,85 +24,35 @@ Assets Xamarin.Android.Net.AndroidClientHandler - - True - portable - False - bin\Debug\ - DEBUG;TRACE - prompt - 4 - True - None - False - - - True - pdbonly - True - bin\Release\ - TRACE - prompt - 4 - true - False - SdkOnly - True - - - - - - - + - osu.licenseheader - - - - Designer - - - - - - - - - - - - - - - - - - - - - - + + %(RecursiveDir)%(Filename)%(Extension) + - + + {d9a367c9-4c1a-489f-9b05-a0cea2b53b58} + osu.Game.Resources + + + {58f6c80c-1253-4a0e-a465-b8c85ebeadf3} + osu.Game.Rulesets.Catch + + + {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D} + osu.Game + - \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Assets/AboutAssets.txt b/osu.Game.Rulesets.Mania.Tests.Android/Assets/AboutAssets.txt deleted file mode 100644 index b0633374bd..0000000000 --- a/osu.Game.Rulesets.Mania.Tests.Android/Assets/AboutAssets.txt +++ /dev/null @@ -1,19 +0,0 @@ -Any raw assets you want to be deployed with your application can be placed in -this directory (and child directories) and given a Build Action of "AndroidAsset". - -These files will be deployed with you package and will be accessible using Android's -AssetManager, like this: - -public class ReadAsset : Activity -{ - protected override void OnCreate (Bundle bundle) - { - base.OnCreate (bundle); - - InputStream input = Assets.Open ("my_asset.txt"); - } -} - -Additionally, some Android functions will automatically load asset files: - -Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania.Tests.Android/MainActivity.cs b/osu.Game.Rulesets.Mania.Tests.Android/MainActivity.cs index 09fc7ce770..3c0de47654 100644 --- a/osu.Game.Rulesets.Mania.Tests.Android/MainActivity.cs +++ b/osu.Game.Rulesets.Mania.Tests.Android/MainActivity.cs @@ -1,19 +1,17 @@ -using Android.App; -using Android.OS; -using Android.Support.V7.App; -using Android.Runtime; -using Android.Widget; +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using Android.App; +using Android.Content.PM; +using osu.Framework.Android; +using osu.Game.Tests; namespace osu.Game.Rulesets.Mania.Tests.Android { - [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)] - public class MainActivity : AppCompatActivity + [Activity(Theme = "@android:style/Theme.NoTitleBar", MainLauncher = true, ScreenOrientation = ScreenOrientation.SensorLandscape, SupportsPictureInPicture = false, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize)] + public class MainActivity : AndroidGameActivity { - protected override void OnCreate(Bundle savedInstanceState) - { - base.OnCreate(savedInstanceState); - // Set our view from the "main" layout resource - SetContentView(Resource.Layout.activity_main); - } + protected override Framework.Game CreateGame() + => new OsuTestBrowser(); } -} \ No newline at end of file +} diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/AboutResources.txt b/osu.Game.Rulesets.Mania.Tests.Android/Resources/AboutResources.txt deleted file mode 100644 index c2bca974c4..0000000000 --- a/osu.Game.Rulesets.Mania.Tests.Android/Resources/AboutResources.txt +++ /dev/null @@ -1,44 +0,0 @@ -Images, layout descriptions, binary blobs and string dictionaries can be included -in your application as resource files. Various Android APIs are designed to -operate on the resource IDs instead of dealing with images, strings or binary blobs -directly. - -For example, a sample Android app that contains a user interface layout (main.axml), -an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) -would keep its resources in the "Resources" directory of the application: - -Resources/ - drawable/ - icon.png - - layout/ - main.axml - - values/ - strings.xml - -In order to get the build system to recognize Android resources, set the build action to -"AndroidResource". The native Android APIs do not operate directly with filenames, but -instead operate on resource IDs. When you compile an Android application that uses resources, -the build system will package the resources for distribution and generate a class called "R" -(this is an Android convention) that contains the tokens for each one of the resources -included. For example, for the above Resources layout, this is what the R class would expose: - -public class R { - public class drawable { - public const int icon = 0x123; - } - - public class layout { - public const int main = 0x456; - } - - public class strings { - public const int first_string = 0xabc; - public const int second_string = 0xbcd; - } -} - -You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main -to reference the layout/main.axml file, or R.strings.first_string to reference the first -string in the dictionary file values/strings.xml. \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/Resource.designer.cs b/osu.Game.Rulesets.Mania.Tests.Android/Resources/Resource.designer.cs deleted file mode 100644 index c27ae8a832..0000000000 --- a/osu.Game.Rulesets.Mania.Tests.Android/Resources/Resource.designer.cs +++ /dev/null @@ -1,112 +0,0 @@ -#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("osu.Game.Rulesets.Mania.Tests.Android.Resource", IsApplication=true)] - -namespace osu.Game.Rulesets.Mania.Tests.Android -{ - - - [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 Id - { - - // aapt resource value: 0x7f050000 - public const int myButton = 2131034112; - - static Id() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Id() - { - } - } - - public partial class Layout - { - - // aapt resource value: 0x7f030000 - public const int Main = 2130903040; - - static Layout() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Layout() - { - } - } - - public partial class Mipmap - { - - // aapt resource value: 0x7f020000 - public const int Icon = 2130837504; - - static Mipmap() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Mipmap() - { - } - } - - public partial class String - { - - // aapt resource value: 0x7f040001 - public const int app_name = 2130968577; - - // aapt resource value: 0x7f040000 - public const int hello = 2130968576; - - static String() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private String() - { - } - } - } -} -#pragma warning restore 1591 diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/layout/activity_main.axml b/osu.Game.Rulesets.Mania.Tests.Android/Resources/layout/activity_main.axml deleted file mode 100644 index ff7a60eb50..0000000000 --- a/osu.Game.Rulesets.Mania.Tests.Android/Resources/layout/activity_main.axml +++ /dev/null @@ -1,7 +0,0 @@ - - - \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index 036d09bc5f..0000000000 --- a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index 036d09bc5f..0000000000 --- a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 2531cb31efc3a0a3de6113ab9c7845dc1d9654e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1634 zcmV-o2A%ndP)B+Z3$1(8#|f~9B42Y^N-3=o2YCq0YUY$Zu=pM;#hG{lHi%n~Vh z1d1vN#EDO19X?u$`cV z!a}AKG@Bb*#1cdYg8af_;jP69b`k%G1n?0=F^8bI^o>wg-vEliK^U}y^!D|^p|ax; zC|pK=f+FHp!RUAhtlpGGUxJb|wm^5! z<1r%$<$TR02wajxKZ4MiR#aAxDLE(##UNyD|ABr4WoGRF*?@e^2|~Hq(gurSSJH*;Q~5lw{J5A_(PCXBWhzZE${qgzv0{dk-F( z1<}>r181tLiEla&f1j&?p2xjbfp2cTt-c1Ox~?9EhK9`cJ9Vatf)loIoQ@#h&}cIGD>Z#QLE}&(bMo@7Ff|7f#Nm^$PJpVcbj+v~K7wfVwF}=) zRQsc+`=A-+C)vrRvaIC-5u>|;3h z*G4-u#RI<_vuSN~vZ6{|I~q5FFk3%de#+*>UFG>&bq6~ zUEMZ~FIOmFO=kA^5rkp-Msw?^63xvdXVZ-rv@{6{iVO}M!}^Je%2BPbi+(L<5<%~h z2v^D+f<|j%7~cJjOzg*!GPQ{%uE{i%YgcZhuZh{yNlQ}RhaU1jd=K+AopVKP+D}&} zZ3y$llqZiln=Z_A$!qzkGbX0D{?l(v5@1|`QyCvCnQ`eKI>|zj_zo%y#fKf85VhQ} zP)y&j4P*nR3q{-o35iV6nx7QDqq<;WDVIt}|N%`!dgv*y3va8eLNj zU9x(?ieweHfQ*yXk8|=ssZ~qJEz^QoKJ|iGa>ge_Vm_8l}S+UvJ{8g4jr+o#aTSFsz1W;PDP zW765JXGU#3JL>SlIl3NRV2{7B2dLO1cIP)a4ZRYL|MBD36O1#oSgAf}APz5@;x=_U-<=y)Py7*}O5(uu7BL_eLe6Ek7pH|G zMq)FrF1EFq&yruS5b=F=w)fVVoPd(oeRyTFym_Uwyn~L=OL(O?cf^2L5R(SmjORx6 z%nmZf^W=3pkvT*>@osUNi>DULH1hL;y`JGQX$onRCr_U0=H~Viodq!<7Q{3rPk~{G gu#IhOV;e2n|1(WJB~7~kivR!s07*qoM6N<$g7lUVaR2}S diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png deleted file mode 100644 index 7a859c25556af7a2e46e22a2220eaded55628e9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1441 zcma)+`#%#30L6FjMQg%tuA0%p#0??L`*E=rD#U2F4L5n@F+O9Sp;(QwEQy7+?sX?r zCWN(!Hg`+j5k8*H@|yQEtnAi*(D{7M`Tlf1=eKjq)BUsp2nqrK01B=yNUv`!`EH=x zx8$xJQUd^Fuec%|(TT&0V}4orr_==mmCnEuzD+ff8Pg>pJRqsWsD{#?eGPaCu0(sEH_2RG@<6-Nt<8 ztPMUmmAz9Ga$23Y9~p9dqJSgJJ#Jk_r@o13^%d-Xf46i+Lrmz3 zy9(DUDVXj;Zny7nO+yn&W2flEX=C!8&D0zI`G# z8;XmlonoghgRFUY*$+7pPLa}Uy)onw>TT9t(FTV6#BV8&lXWDPRvQW_n~xZ|yLcZjX>m$Eaf1)dwXS`&E^ zkNjO;%;fWywchc=+w4utQ0Vbn%B>b~yy4I#D{?1!P`$P>Wdo+ljCo(tYia04JTc=$$u+IbzDVPFYpm8+AQj+ zGKH zfS{{hN%W)kF+(26oZpkURD5Q_G_z97F6{Jval+TOj-;5y)*Rdo3a$^^k~q5gpTzmp1q@+2X9O z;_VUF>;s~C1~gpFrFoh?{aQ|LlBIYz!z^P~lndX5-ES)p#+9GW*|-WBTzQ*&gKOE` zM##bUaWl`6rZBXw0!~_oUhf+H$tNc@lLZCj0bZT^KSo@C|P?7YR8dP0se1jj z9aA0|7MONf(ZYaLZs$s}r*05fx25-iN6mZe_*Rq%uyz(+^-k;t`!R`?uf~rn#1ZC7 zuv3}UrmMzcBbo4jym@fS5%I+G`GJIC1s$)MQs3Vhld?a2U;w}$@V%dC@%qpO7+3#$ N&GnQ!lI8SQ#{X#Iv!eh2 diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index b8d35b3a1cfe5308bb099a5a1429555c41417e36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3552 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 diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index 8f56909cddfa86f1387074bf43003f36d6e67be1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2413 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 b;}yxl--Ss53i@>Q4YQuNcebmsMJN0NT!aL! diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 9737d79c0492b2c8a811621660eba33e79fab959..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4858 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 diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 9133e31b43252d00767a6a3806df9ba68de2d265..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3871 zcmZ{n_dgVX|Hs|AGwx({M)uw%qjECNKBIFkWs_{OPG-hgIT;-yd++QJvW2om=tM|& z%H9e2)c5=2=ka+x9`E=2^#{BjugCKpi$>{Of^a}6C@3!JA~i98FX7+NQ2pIx?Ufb^ z3VM>RrkZg8anp*{)c6w{ua@Q=_bH*Cuxq%LI*7AGBwto)H-4!zzcekaq&2morKG}n zDqW!T*L~Hk*w&fLWkN_%TRacHzZw}4ksU%uD{7=< z4l@F>pf_Cn{g0o4;i*1H;#1e1-8Sexy}Xv7sq#ll}DbR&61Jz5)YqB}ZOJOXIqaqfl-_k@P*k!*Y-1 zd(EHAJP_%kR{C}E1hMnU!7Nn5&Xc@ zOW#dX-a7S(bXQ1)GD`E2+dA)roFGLZ$YG!>vm17Q#~qSAB*6DaQd9MaCo|S}wqb6S9B=T`wCw7@qZA zHbS^wMo*b2CVh9inNqd!C^;{$*8EGWf1W{RE8+5O2vQgbd8Q|#Z&D)~7#LW|`W&2L z_SyasQE5fzr8$fM0Zn_(DI~(K;s=4IGw}=5`M4LXXw%?Zd&A4B^1?jOnMXtv(4tuj zATG@Fl~sFhQWT1;`B1D2SSa~}-c~CzLg>+!-;3#7J?rnfA!~pBo zKQ;tVz*}4Grw3mfA+SZK^Sp%H{@X6r2psg~wG{kKWi$fIuTaUYJFc+AxB^Hw2(({r z_$0>HdR@Wy8L4?wi;8`FQFPbpt2#h8fmG`&B8tlM5!2hu3~W9;Mqv1GU+Z^bFm_b1!BHQjAzk$7fP& z^+rYz zVHe?I`XfV!78$8wvEthV$qSmS@AMbm$$^&CjwO*XiO*z1y?$BvZ^Zy5u4Q%*GwkuJ zdFhfDJOt}_7~rgd?V5#_fpC@U$k32TWQE{Z8>ywyPzxH=>)UDGWYnmX(Fb+@_3Ou~ zQDTc)-$8tyLf$*#c|I%opcN|Iwpi0aok4zEm|`s&mJ65u`O9-E$2vwO(g>l&pPd{? zI9B0e|2d$nht>or~UhZeZIs-;+8ZZsPv$1!{ zYkPAaeuiW<{zM*KV2e#>&FcN2K4-DYi+?kum$EY&dVq(b3UTbt^ZQoV{Tc2LA1UkH zBDgQD|M3jlVG2yoaJX%Fc+A2)TcRrG(d02quX~s4`tA9wYJVi4r|&{VIdWAu+b+UA z#D3m-q-AvGK>23Q=g)azqn6sg=~2SRnnXB}qwnBEf5Uu;3xhb1FkS2>9B6<#$v z+I*^>7jCs&{@h8Xi&E&$>jvHrN8I$!dUD8y^dULVQL)&{Q)}2As z6ZABSIMYqKkCm6M88j7N7xMEnC=gP0B;)u<9N5J_^%K> z*Az(p>9S5q8>$rgQhLa55;4pZ@2)^uB#99mJgk77uj5uN@6N-r{5Kqr_FZfZn6e>E zMKrwhrfKE?wa}r(M@=2{P1P+!6EZHVN8En4Y$L|dv>Hq!)_bP6R<9P9Z+s)zWA1ZLM5a4U@vGOf?w{MXFOt75#wAKL`?v{8Z z2$CP5w&Nu%jIM|Y`!>T(^5aPpEoX`FS-)HwHbD2~koRV8oR{Pw_kcl$MO)6=mgjSH zJOy6jb(-j$fYY8!!fUd0a{B6GJg=I-%O55W&rE6;7-8tgVgNNM$J3gSXW1RDNrc`< z#EedInYups6;GLd*K%^%^(uFYd}~YO@Pn8*O${mw51{s)%zn$Xe8Tw$jrbimPq!j@ z*0hIk!_i#DC*e{3zI}+oXk5SK3{#2$i0fjXjyAD@XI7?hYbeL?%@JI|d{iPK+D;kU zAGrkYsTV4sy%%Fpsx5N3qUfu8zQb<=cHoraH_Wcb!Be`WTwXmH$d*nUW=?wA`7A*o z<$A_%p{1zExsocwhl5+^BZ7UC(?%+H-|=fBd84jpK2*0vZeZ@aHO+a=(5;8Fo1F*_ z7RSB%61GElZ1qOkvK)2fds zr|EHY#3AP!54Lr49m8x=u<$D_mjj);=htK~crq~|t5E*iV`o5kN?WK~+ZqF}?4J$H zv}QvA=s4<%i2K&VtXgZaO8Ms1*eS~zW+p=i7$u=S>f_zrw*1VNnSd%QD5Ld9GloR@ z!RGDZ;LYg)_qUoX6EbZ+bRpGHNO_Amy#j~eears);u62C)Pop$=F&pnhKuVt<9*Lb z?nVO)Ox`p6+Av1SIzi?lPB(g!XG2>cRqRKpF!pYXQbOkpo6~W zr&=N0>J^NPXAK2RFFNLfEK14=LkgiktE^_fHiodhKBaCS?pvH=RXEy7)7Ti}-?jEIQaxkB@s8-7H- zP;(ydFBF&_M6q_x@*Z^2#u{9pR5^)lPzX{gM$vuoWl3qjG#5OA%3@B`+&<>FRM^PC zWW9q9)v=x=jPRaaR^-m!qmI4WkhVcz@g9E%FIcZE>S&@yl_Km=!FC07xZifd9I{B-wJj#*1$wX$TWLs} zW>O+MrpYyMN_z+l7V6hGU1{?UzdbnDyiF1yiScCsbS&~iYSa2Dxvf%yF1Ht2_{bD)hkvE@C;YuC|PRtV+*rJ3zu@>WdieCbY z?L^FvNcnD!@PR3HUfFE^DlHs`fbA*K=ESgH0kVN(Z1z9DXjS&W6nWMJh5SO~{z05N z<{!_&82``b;~4+n|06yAf6#}v1q4#xD5R7rz%^dWXP=7mZKrFXMV3LOsc-r0Lk^B* z*yW56L{@?c^6?B*`jZ<~_QxMRW>kP5*-MV8m7gjrZoRXShrUmLUhI4a(VdYLK&55r zU17e^C&gz4hl7mom-*BpFI2V{+7D6eAZ|2Ia^Vg3{euGU;>50HzV8hj<1S`qAmbwK zgfaxem$ENrvVy=#$6Q$PJ?>joXo~5|7K;K?OOeXFuh!s`y~S?fuBg-`eZ<(kO5=j5+?q5CtBYHR53EePl$zzHN=tqL zAT0t%Q#&;$Lw9BKz-ifw&RNE#LZ zm*Y}tqURdR>_s30cr0Kmm)t7#DrItL=Pr-fY-&x>r8OIyN>b?!<#VU$BR9WtYus|C zlb3z7)3d0E&l3aF=W^2M+}x|R0NK52~QqMAdhKneJ)#) zT7732cAbz3<9Y0*qG%PU`g=RHJ)IFk*+PLD`Ld=IP?Njd>VtWBR4-Ck3Hv18U0)!W|c+cna{BX_>&pGEgpL3q?d1PmE6?8)S1P>1n$m*K8 zJrB=+%>Ow8{6`kgrK{~n_TQ|`%^YJ!R>os1-7RDQVJEyvrcBr0ehYLHwGuyhJjGN~ zQXoUXRri!muH=&aB?U>1OjA+1iSjX(KbG?{YAz~fDVtjrlxYNBasKe~oczl_x-QJz zn1EG=Of|76+r|3xXyZ;!Z#<{CvwOP))l;nhw({7K_y2yigJ{x8djHV!Bv%QD>fEfn zfz7)UQ4*qUMrsKoLSX)X$^#u-A&fe$U;?hE?p+_>xKL~AEW=Jiw}Ig1U5_U2-(%P{ zVuCJ~0vp6K{QrLUB2JkBR01uDv@prICoZtsfk#L4hb)YP$ub z2f9S)(JaQXb)^RXnn$j9bIlTy>rIX8d>-`yHuPE_>g`J>+u2H@?_8)`5+VCZ zJ))x}d%#qT1tl9I{o=s%XS2qeFG8n-U=;5i1zPYMWY#Ugl?PL<R0Zs;GS;0v_6v|OQ7krpYk?2}6+_J=VtUfeH}yzAF?`>jymCe2|@ zE_!x#kL0VTIc#d=NsJts=|t#hKG7`BXUl1oZJd_+s<~+jSG10sdI~p`>Jt@dIcTpk z(+P)ir{VKA-gi;l0w;XuaaL!nE0S~vh;JiqLTbE!c-KbPyJn}btB~-;)~zTHI%j4>7N~5ed{XR z@TZds;|W5p9zFJm>%npX+g!M9-SBG5(G~tQGju$$?s0-M z8i{z)9_@-4y_s8w1hG#2@)W_Gy`H>H z1(d8CvggX8%}7F>|ssPHeOOsARfk+ZD^pYf)6t1o(2N$(!|C3zU zKVISCDIohzMA{jmuTCd^jW{UlZ$_&zLFp%t%IE;0FwLK?#ax}NpTM<$q)21(kCO9! zGpf@W(epS!5)H+%??hxpeW;?j?=^Kx@14o;v>D$b zP3}=kUhhy?LR;HsWjGv4-gwx;eMyAYB>R4dzEaq-um1|WJnV8v=BH2uq{=Ra}$`B~FqCs(3MAh~Os%v8)w@H|$ zg_VdKV5wp)xMzX1n-Aq)qtzsSvg8&rYXn#G^LI*Y0sB7>ahs^vmy6?mVu=E+y!JAN z5Rs7_hhWn4Qq_83d83=(=BI7B;w7}P(UN8DBje-KB^6X-(dB&4#=Gk3w33Z^13Vz^+onWncA9w z(g&H0obtZ)6)!pW`V<`$gqKxoEgjz&DqaANl+$flu$NrTO{3h64C%W0B;?ouck96dmECiAOSgLnquRi9Ym#7^c6o~jg+`g&QG`y*p>^QNEFvFbx#g?K>dd!xLd zU!VLLVCqKEaYcdFkz(29DqDUND9U`_MP5;~M8NDZJ{He zk;dXH>Gi=$mAUP>>#=XK+FLL<+9m%$bTL7G$*)s0vPk|*NW^D;OB0FWJfG;aDGZh45jcb_Cddp0TATTx{GhEf+8 z3l`4EwxKT|wDEFu&Myr;v?plbH}IOkcsT!?;7kqVc;2d18*~;A#|N$}@zDiw&S#j=gj`+r|E;^PI_ZH=jFp;u-UdtX}q` zj-?WO|B5n$u>6n*B%x9^s1-Kn{cc?G1k-7&_ zwLF-TR~=5;R@=Z2NwwPKCSgF7O1wGY-E8<5&pZ7LU!^fnH;;349_Fiq9MLPqL(a(1 zsJU#*xX>qFWvC{9H`&spGA2)U=!YvASswAtl)`#Cl6djQ)aS#)TQu(&_ZlpyGBU-6 zwwZrgbwTZOwC5=DeSszp9I!ofeq!n(g&FKS(1Nw?A9sU4Xo@8?jg}jHWSc;ah7@UF z!a6IuaM)$~{`s-R$Bkjl%MTJAEUX{;0kXY4gfi>o{;XVoaP-18)r%V-8@eao=x#;V z&_;=bQT9U+Y2#e!85O7%wlOF^fRGsaHY|A~NbO_jj3r2x#>t<5>fN6oxdPwT)wY@k zjG*q7<$OBOx{2Jc{J{y5j(4mUq)3g63bh^BLnu=PtaH8mc*y65raYYl^^Np@Ai-Zc zkTIC6gZl)25##?-#KR`pzbe_6H{51vh|TX@ZD9!ks)+YKQ!R0du6^#S+~RdCJoWy7aJfJRHzVpyJev>2KCjz-n}~JO-6wq?+T3 zD((}AdNA$siA#~3{9V3}&=P7T~8-+~>bR`# zRZ&K76n;#4L<`&WSZl%QoU8^V&8PZb#MOy#SEuqXEy72o-RWQLim{Eou}@A*-=?qF zjh$uG)&yVg!V35577^rL==DB-34u*!*^Oy22FV_Ip<+%Rr=v3Zcn?7BGD!C$9;oz* zt$J0B^1P_&>J^z1UJ8#GKNY diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index c3ae5f5ccdecc01a9b17a2a0c2b1bb20602f0151..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8001 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 z 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 F@PB1o0BisN diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Mania.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index ef89bd5215ffcc38c68b119a7495a77a7084543b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10893 zcmV;8Dst6{P)w$Qz$dy^()8jVZ}Y(Uli2W4>8-vtIRd-I?ma0 zrn$Q18Vu_BSYE}l63f>nXUi}6=bt90`vCsgiscBFqgW7;qvUt3MHVwZH#cYvq!rL36}g@I|nG7basS}adv`4Y=k0$>y*IYOTK zC3%NyP1WuebIo`?yrcJfcPKGa26lC`(jN8)j$o z+ZasSjsrFTW}5&^&fz`^f`5ksDZ+C^iqb|DuB&(42H%0FPWU^)cRSJdXIDQkW(lVc z?_{i2x7aXPuE(HRh2`M!055<&&_M5*V(?0FJcWSovd{-~y`j|0cSD&Rh9Tymq z7&Nmmr+>E#&>s=6?z913xS)Tx#F?s_FTnEov8z4MgV3Wl{-jBQhpE%p;IZPW-P5gg6XF>)3O(bNzaU7&1K-)a z&MV+VR=)lT`V%OF_pY!G#!wt^W5zP2JYO^^;YO$XG(2&iGT`?{5k!${JeJr_I8{8x z%s!xS)rWi9NVfZ)&o``3} zUY-8r%9PiI+R1D549rDWbHuIyQ6A3WIt35>7Djidp+#F@P8cN$5akh874S>rfq#I} z9Xe@|$=ULt5IgYl%(1Jtlm`;H@Bn|oR(;BM13uvBu4I(RpOmM%`8+(hdqluzt3JKC zMleTvj86CYj1u)4{MQb^1A7}=^+R(vFjTp3$9up)rUX3zKW7`2#5tQ^^vc~~01FLi z_Y!ecu9vjdniQr4K7b#(B8XBM4tsL*8L&duUFvYH)>VzxF(r@?+%nsnt$5IWVtl{P zq*L&e$mnowFxnc+SkSB+H>c6jJOU5a?*#mcm1xnjUC0@q$2POIp&&q^Sy{NX0MyM;7_VxFFU;2|>F8xI&OMx89iKz}uO z!#TUViGja=DuKRy)OhdY#{LC&Fh)L%M4@A;YJ4A*q^l4dVQac69}$OX!(u5{3i_jOgbyU zm^GRrM`|BUplffZ5sts`^NjW|@lt{|&hA3`iZL%?j12U`OkeQz6Yx9S{}i=cCt_zKeG5+SBKO?=64)xf3mYXC=SuQ9^~FQyO~s zTN65)SJTM*-Dg~cK3?->zXQIve6VT_YB+ToHSST);X=BK(O+b9wxqBSZNe2U2E zpl0=-JYzOCc6Tx0d&%xSdwE(&7Zn<{IoE7gg^E2OY*Pa;_4yBt)W_L$2Ks3A7Yy*n zk!A0H#E%gz@d2Phx{{I4cEkrLrb2?(2fzHp4(dZs-yZPu&z^fH+Ou~b1A8~Sz^pm* zXzDw}Qz2Dx^;uN!0`0l|<*qc&+58=i)CYn?V@{byO_Z1qkd=?#r!K6n^>~G>5i}XT z;r#0FbiYI+^#OV7os|sOKFV{iEI~zh=cFk%kY7^wCdS$zYGMO~`w!qMo5s^>_+I?i zo0#F-1KGBH2fA?f4OAJ#`ijv=ZE>Cnn4=&R;J#8v5u{=JxDy zn#9MSq2l2u(X$KKn~=7w?$eYMU97mPh)fY*o`(%E+Fes=T>T4cTF^D~?m=yB%<%20 z95`?gU3vZOR2al0Z5rwZkjhdslV=_r7b)xN&v7+FG523XW2R^0q#5YD^&1$Fdnw<1 z|0Ak9=^Sc2La+k$_#GWW<`3l$6+@ z?*hc{Pp#*ttbQVT;kBhK=;hax>BGERw4l0$8jp~!d=yff9gr3C8{<7D*7 zXKNW?10>5=tU^xL8Pr6Fb!GLfIh<`&5IsUX*BZ##UH8)H`MK?Z$M}_sfi*z8z`=v) z`r99*C`YIPsf(%~^Q21$*bWf5zq+(O2W#I(+7zJLbtd|K`wj-w01LR5M^fPyZ9WYB zgz`)3HfQO}v;p@B5e2}j|Jd`|&wz5!Vf;dw<73af!~hy3Tj0^BUqlv}gJWWssM=C> zIbbt@#xU>t1c~4ruGeWZekWaU1z!FCU;qtTZ=v02?4;=w8N)TpF*c(;7!5#rgs}SS z%j>OJ^LEi>{MyEx#I0NSdU|SLR!MzICT31 zkICebIfQP$XTGH1RMGJ9yrTH~9X?*O7FEgKYqa^Wv8oAaifcbgN=k|o@alK^qb(g# zN)!Eoi3jinBI5hm+HX*4y|liWwJlT8hE2Z&T>(D*e4XUlU4EhX>RbP3iyl0PZo2E= zs8GfTu|R|JF%8Pn6%Y424I(!iWUOqwl&tWrX zk6Rx=dxIE#28sp|Z>eeF*WdOaYHe%lli8xg8*~)BL3!q?>j10%Q~+T+iRA3=muaCt zu=)c>4D^qDFGN3W{5hcS^Te~S@H9(a8q|o? zMYV5tc!T^vgF5JsU1f5(H_@N~Q092Xg|pEgJN^uK0@$4oJt5iO4J$GjrNLPJPd@iD zejKFOC=WmRe85(JL4Mx+8$T!Vc9wP_ZOMo&*?P0tZ!}1tKf3ZUCv^nBEA8fAx1y8JxlD2}?xi=D1^k_!efdqv6k1(E^^93#{-@W(V9WM%nt>`hB)pg*H0o*xiz zMz{WM4Ct0AGbJejO#Z?}ucAW%NXP@Fhh#sgIr&p(&Ix)^(3&s5Mm5c6$zceK?11W( z7_&n?*zHAX1mXXK)WtRpE&Tu1`xgWRTqkZCyGpXZ8@yA2Fgm~g@qeiPba&exV8ge&UEnX*-YVHh zzwQ1<{i>+YuJCU+-YuDmU32rjevkZ0l}*2F;pa-O z(Khxka`S&{-2}Ao`Ngu9IllkVYRS7mP4g5!O6nH_lMi}*g^EW=>(5g@>J;>40HWhk z1w2lV|Mz9d%IaqtbcBxwm@01o>=F!z_tgIn6e!AA**ITr`g883f9DT%lRFLgcAkSb zOWFl4|HrLiL(;Vh2DY-Mj)joGB1RFg&2g z3IJ92oZa=loC;7e`c$;?lh3HgfZVkCSAKPuv}=u+fZzM`-uLKyd5PrXOyPu=AOH6= z6=U@lAFMkq_=d2(2@K&+Mw_CRTu|x7o3hy-k$wfhR5ud1LVCLU$lEn~KTWhzZ3 zR9l8u;+yV~D*y(o|CZl=rz#H~3U441D|Huu7A-whwkMx|mA{9SXL+LIJEvxoIpY z%dcCv^(YE0^}McKS=`)UXa3J_(e z7=4Lcjjtx0eF^$y%T_8C01Q(o29e_FfLtN~L2GN9PpkhO4?Zq=tY%y_mj@e_ZPqc3 z3)UIL#17yyLls;(WQIodNC7k&&0xr?Ggda-CI|fiqc0eFHNBA)tJd)4m{PtE00076 zQt!R`i*=Gg1G)aIC_nN3sYS0zuCMTiD-=>9@=Uge0mB5#;XdX7f$s#bLlV90S zbWd2#!T6VS@+ICS{YE=zsy)d14Vxqf$6y6~ zW7+#%dTZc!FTD1)*h2j`ZaqarJ)NBo4*%t)}Cw|kx z*(ysuzR|{DDFCGTLJkQnfgIob^@}BM?^9=9-KD?&x8Jv;)2Cl0nI`r$z99Eu8}~1G zI-o}`c@)46oufCWX60J|%f1-Gf&xTk>#b&!!@V_F3NUWU%#iKw23e{noqdU9>hj3K zV0Ji;y|MOhPt^VGnic*7Pkh3Fhr2;3g)U=!>d92=CwjyK?0D(Eacm7iWR)A)d zUs|^-U8%1DEcZwOlm+&3e8auLP=LxYr=ib-T9-z*u#cm3-LlIwqnRC-A> z4xujLP>8pHU;EAXK~R7Z`_okBI-eDQ{BexJWUJ(y?gPP400{X*XMs@fm-+FUFZtql zsXa~CeY>7-ry@0=1_q>Dm0teNrwYOja4OUF(Wu|MzB!22nFxAKgf*WKp4Tpa`g3p<;={?7@rj&M^{#2 za=3ReH>fmO`24G=C`fM5SKeIC+@L2?fRYhA)3S8KeO3U00%d873OR@SR~8797zmpx zJrMT%;w8r@J1hXwqsc4~cA`L-#yWgkYOc!eGX)Y90BR~Zhid~%g`hJPV$tHaSSmz! zsSw4rzr<(cT76c4urNLlHY6bsT_J|B~ULz86}Xcb^O=EghoaRF(|aT{4`y zsQQPY$;k#!O#r{BOH}|*F$|VeqrGVrONaJfI`qYVy|LTk6(}6J;EL;5I&^RA0qjjk zRp|HpXoInq}J0HYzrSk=f1V!9FVT*+DxGj1ySDMWUGU=+jv_3;$MG$Li89SUMn z36>+IDnPiWnNTWp*G09e7Uv|n8e>6j{hcIb zm^OKC@e;|#+-cLU=#kGJnrSsonjyK=@>L2OV*#B5MJ}igZeuKM>Bys*>cR^F!(<2W zO##x<(!g>~$kr59%Xv01m8}uC{UQ0>u->*tT z$ztx40$^*I4;;j&WajCN4%bh?HiT(zjthrhNG)84OwV98#|5g@pPS9qUZ1c1rq|DWZRvZGjcqs+ zxZk%&uWCdJbLA%(ySW6zl7nDk1>pMv;h$-`iqQ|V12Q1!br9Wp-va6n$hhO7$NTjG z8G73ol*^Sr2iPSTj_ip7L?kBiA0CGJ)a8OFNUk%&=s6;3l4Q51l%SW?Ba+}=C3Vtl zfwKO4MAA{-15{RzvUNrC0J{Xk5xy#bI2MqS!&SJ1$}l+($quDM^8D?+0vGDFx7;5R zhvaRP?T|cT09!}2rYgBJ0lP^_NpZf!06HlEv7VC>v-1i#d()3{8p3iPlM21}D;p+B z=HVMQ{^Iv{@b#F~26JvsXP&QCCshP2XIv`JJvOx}z zf?zks7Z<3PD>Q5{IcO|HTRL){+;)Hfu*?5(TToqnFTb%&GWBRW{X$9kK0OtPiL^|) zSeh+RKM^fn61>VW$VZxa^}L{S|4#hBd=$#oTmJ=^CDGh0%5z zeo&j-c7QOkOW$1?l!=AvCD-JOB)e;&@og|V&`B*QX+HDfpj3`Q`Z~;sT$pI*|D_`i zrz^M_fLWpdK6`*Vd4h-$k(!XIv~c!DD(nCuy&%w0Pf##87g*{$fsx!@>vMk=-=95e zj^vg0p~wHrdu9S1AAvcMQvvvv=)nIIGphizJ@o*2rA6}`Dj7?TzGBQGS`+|y@QVS? z7X9I;ji~MoqiTZHp}pb%-gZDV z*-~;emg>KH9xAUpR9rrJ=`}a=l)#@8yJzn{zI(%hr(Wn*mc74<|64h`(Ls>zMDO|b zdms9pqQUn*@3L!Uoqxgo3G^pRQ+O+2lwdWwH~in*4iMr2nJL+t8e^4fD=joga6bZA zL%m;Ss0lbBq!#Z7oc>s<|42;BY6Og8n>CsE{|EL~0YsUhd|D}-xR<9dtAAPCfr|#2 zbioxN+f^d$+BAp28kDql|M&oEC7K+paE$90De88Rdda;$Sr6&Hcl z(GV091PsSbxpkZom4qy{wG`+X(&*Qp7@g~62pqPZz zB7?2rTbgJP-*?A#Cf)^hFpvgVzFWTmjg%N42}b`PRiR@;bX;6HU^6U?r$15tqCeg= zC^jZ0CKG6oy13>ZvI|h703hHM*}wk)18RT-BHe$#`Ci%QS!jQvEyKpIuJ{SSB*A8^ zKk3ggGzeSRz_D^tmAcVf<=CAx(IEbufrd%c_s9ulS@!-%vbsGxr9OCk|GSgYb58hN{NHwCw`Wf$X_gmW1p96128}f9AzEWJz`IdiCeq zpC1{f&`t*|V)~Qeui)1SgJMu=gC!e_HotV_JH!?^Op`4DnTf$J2I#{P1y6@e>u}l+wYcTp zN2r)nVfD|q4oB&Ey2}BB7>n6n#&19rz&k}6GDLGg1M^GkR?@f&G)|h%pTfvM+}rMM zKT1vu4_4a~rK$Wgj6Ea4U}~U@-|mdzc&vHwaCMH>GTl(waFmub>Gni5k_H?qhi%Z> z0v=km7uK}Upa4gC?r*IR2Q-u>j}UYw z`|#5*7?^t~AAI~7-=vrx?$3LEJ|wGuF2UfCKpMZ@M25o>2>;TgtGP4q)^w;NL`{bR zfY;)p**E$K~n(17#8mW>ZAE~<$m7$D+9Iyk z)?sW}Jvsk8^{qgKXfuds&%Kl737w$Ca@L%A)KDM3 z*H4kNH91EE&8~C=W655gA6XROn79B`z!Jt(KB@N=a(<{-{kzH(1=myt zeqk*{>lB>r9?)d`#g5SA6#^q~?Kj^uuMnT=42OQN4%%71lBkb$ILgc~nhzKvSjr&S zik8Fe>9avhwkvq?0#%{&J>nXriVDGY|1ql`Lm#YKgBnhqMh*3WfLE@u6jGfFJs65o z(q#BbF^HjsN}520;*&G$usyKJV-L8g$`~DU%K3a_shzv_^gH0gp@U1`S&8h8r_+_` zX|`>SOH6Gb)JNkv?2gCOVA`lpR|c_|3T5Iipo48JLsd8pTlD*Z+tC&!hQsG({%syw zwqg~3x?$h%>9Y&HxoicRe&t+LI&vaK(cUKL@Ni(5LVp>dJ~~mUqdSxyL$X*|J< zutH@))!U#1Mmt@eAto|;d`j!U=v{%aVd)~^6-A@h#}_IDL5oDOJrEriSD`GhuLk!h zZALMZU zDLv~XV)Tkj97B@#OR)!p7VC=0$e|`Mc#?ASCa8*>TbL5`8)@_8_*DFsn4y>i7>JA< z0*0@GU?Wb%`v-*efh*iAJ`hg=8%jY5QZiMi=2@^3R4_W!_i4{)2y|^t$jF;40>4sZ z^osrc;bDE`5*x)rkPNnM#8V73;rwPo zd%VFvus?ynJ0-~QQUXhMzU7}9Yt4QkV8-kMnkkRR*adH%s?dHQL&efC((u8#!UJ>8dgIs|~n}{MwQP2Z2%i}tWFhA(VCZJ&Tb{&oQ9(IS}!Et;pC- zB6ByGfxqWUAodU?5H6YH*rU-uG`G=uLCycGq zZ2K)!Wx5Y`V9}~?5>cKsGFM_x4+DQM-K2tD5GSHUd15aStV9VZnXYVY@gkL_dM{sm zk0;IJo@0vOBgbzaH~6;>k7Zt=V{cY|(Mt)*na!eAA5t20WG)2C6DQ*P%+nJ9yI?5s zC8rY)1FSq8nG{%&ijy+)&Q=&omurfuTY3Ay&UOS}fG_lNg|Smxs#|jmCGRF>E}4r&GB=Fx2Z0g^u2S)Cp!K-k_zB__AuU%oOTm?Yq$#dxgB`)>r3kbg z<3tDWT|DqL#no*&#*$UTa(Xk(NoNUl=xZXnnOd~0@*Z2-H1 z6%--YSoWT}(0RaPBQ%nB93AwiKPiJZ&B4Gw3X20oabb)w@ZTrEw|dbX0~uq1>x)-? z=HirbHvrz5OuP>YvNan8BaKWVP@{8l^d&FnS*o^!*9h{91ox>B%I~X+&;k0+iVvPM zh^OQgR{fEsEq(=4opZ^GF909tj**P1f{bx88FRMk%cun2?oz>1luEW{C5c3G-inZr zoZXU@Z+S>*vVE&5uH{c3B12)m@RJFMVBU zuG#|rZN3`K<3?@weTRxdbiK-Z0#^WfC^vv9OaqqTXOZ*x6_pR8}WB_iB@|H`M1FFg%v+r1pHVs zrjg9U6FRiWTM>jEL9h{Y_)iK%ASfb00A+BcD~;D?8?3J?Otv4?Mb-O&CqvQ~fQm#$ zJ1K0u+U-A3r73{gXe)UOaeFpJtDgT0K-F(Vq#*v6~Y=7HMAxn zT{#6-)y#a$!dye?yGpL|J9UwByQa8$KY$Sw1E>c86etuZ2yk%D?jl~NV|Rm&Ro=z_ zEqn$(3n%Nq&I9-4fo`qY56@DXE5Czh!#lvc;CDI;-VM@1#DFK?p_qW)C|d0Wnv+h( zBA$#51AZS@1i@Gq+^6DQA;(J@3<6EUKoZ*wMWU6pBq}P_0kkPOGjB$kg1bILQ*eK- zuIM=o(51Ot`6>lx`wCX)yn?EYDvR?MwWazuOslqOifXolz`x;l@PDcT`^G%{x0rgZ zh0o%9yoK-eEZh^{doDZ!=nMwCQv~*6(R*3Qy9)Hi;05{|uhm{~X9~tG1AaeHgn`G| z6_N=5%@FMjYGN4jhkOu)un?sv5&=)F6oOa@NXw$4q8vlw;zq?LrZmMT4I3Yyls+LT zHEkjY{2P7;{|A2qe@l|hN<_T9xC^k0-@!rvZzAuSPu^Wv=`+Z8OFGVKKac^x|9OqX zyTafulp&Q+ge=07#R@@o2%bxuJ5n%WN@8N-OFY1gDfUv39!LyN#o(TBZy_bY^GyEP z!U``2d@gzCbn+d%K|k1QwP#)(wkx#n3Swm#LMTE4;mLwRWD+W&Aii=np%_{MMm+(h zk*vsO4+n40TrKPZ>?GYl5FX$rat{N!r;a>BL!OyO-XVv)lK}W+^3HMOJ9vYht@iAa ztPGJNn?X+kfo?U)X25*JvN-3fU7^6iy#!!)x#EEv0u0;6%SkdQ( zh(I1qp3xQ9y8=7|J-dRY6yAyJN diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/Strings.xml b/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/Strings.xml deleted file mode 100644 index 6ab86b7262..0000000000 --- a/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/Strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - osu.Game.Rulesets.Mania.Tests.Android - Settings - diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/colors.xml b/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/colors.xml deleted file mode 100644 index 17bb9a9dd1..0000000000 --- a/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/colors.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - #2c3e50 - #1B3147 - #3498db - diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/ic_launcher_background.xml b/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/ic_launcher_background.xml deleted file mode 100644 index 6ec24e6413..0000000000 --- a/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/ic_launcher_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #2C3E50 - \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/styles.xml b/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/styles.xml deleted file mode 100644 index 5885930df6..0000000000 --- a/osu.Game.Rulesets.Mania.Tests.Android/Resources/values/styles.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - diff --git a/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj b/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj index 5fbee695b4..a761f2569a 100644 --- a/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj +++ b/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj @@ -24,82 +24,35 @@ Assets Xamarin.Android.Net.AndroidClientHandler - - True - portable - False - bin\Debug\ - DEBUG;TRACE - prompt - 4 - True - None - False - - - True - pdbonly - True - bin\Release\ - TRACE - prompt - 4 - true - False - SdkOnly - True - - - - - - - + - - + + osu.licenseheader + - - - Designer - - - - - - - - - - - - - - - - - - - - - - + + %(RecursiveDir)%(Filename)%(Extension) + - + + {d9a367c9-4c1a-489f-9b05-a0cea2b53b58} + osu.Game.Resources + + + {48f4582b-7687-4621-9cbe-5c24197cb536} + osu.Game.Rulesets.Mania + + + {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D} + osu.Game + - \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Assets/AboutAssets.txt b/osu.Game.Rulesets.Osu.Tests.Android/Assets/AboutAssets.txt deleted file mode 100644 index b0633374bd..0000000000 --- a/osu.Game.Rulesets.Osu.Tests.Android/Assets/AboutAssets.txt +++ /dev/null @@ -1,19 +0,0 @@ -Any raw assets you want to be deployed with your application can be placed in -this directory (and child directories) and given a Build Action of "AndroidAsset". - -These files will be deployed with you package and will be accessible using Android's -AssetManager, like this: - -public class ReadAsset : Activity -{ - protected override void OnCreate (Bundle bundle) - { - base.OnCreate (bundle); - - InputStream input = Assets.Open ("my_asset.txt"); - } -} - -Additionally, some Android functions will automatically load asset files: - -Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu.Tests.Android/MainActivity.cs b/osu.Game.Rulesets.Osu.Tests.Android/MainActivity.cs index 77a75f0d67..622eadef70 100644 --- a/osu.Game.Rulesets.Osu.Tests.Android/MainActivity.cs +++ b/osu.Game.Rulesets.Osu.Tests.Android/MainActivity.cs @@ -1,19 +1,17 @@ -using Android.App; -using Android.OS; -using Android.Support.V7.App; -using Android.Runtime; -using Android.Widget; +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using Android.App; +using Android.Content.PM; +using osu.Framework.Android; +using osu.Game.Tests; namespace osu.Game.Rulesets.Osu.Tests.Android { - [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)] - public class MainActivity : AppCompatActivity + [Activity(Theme = "@android:style/Theme.NoTitleBar", MainLauncher = true, ScreenOrientation = ScreenOrientation.SensorLandscape, SupportsPictureInPicture = false, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize)] + public class MainActivity : AndroidGameActivity { - protected override void OnCreate(Bundle savedInstanceState) - { - base.OnCreate(savedInstanceState); - // Set our view from the "main" layout resource - SetContentView(Resource.Layout.activity_main); - } + protected override Framework.Game CreateGame() + => new OsuTestBrowser(); } -} \ No newline at end of file +} diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/AboutResources.txt b/osu.Game.Rulesets.Osu.Tests.Android/Resources/AboutResources.txt deleted file mode 100644 index c2bca974c4..0000000000 --- a/osu.Game.Rulesets.Osu.Tests.Android/Resources/AboutResources.txt +++ /dev/null @@ -1,44 +0,0 @@ -Images, layout descriptions, binary blobs and string dictionaries can be included -in your application as resource files. Various Android APIs are designed to -operate on the resource IDs instead of dealing with images, strings or binary blobs -directly. - -For example, a sample Android app that contains a user interface layout (main.axml), -an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) -would keep its resources in the "Resources" directory of the application: - -Resources/ - drawable/ - icon.png - - layout/ - main.axml - - values/ - strings.xml - -In order to get the build system to recognize Android resources, set the build action to -"AndroidResource". The native Android APIs do not operate directly with filenames, but -instead operate on resource IDs. When you compile an Android application that uses resources, -the build system will package the resources for distribution and generate a class called "R" -(this is an Android convention) that contains the tokens for each one of the resources -included. For example, for the above Resources layout, this is what the R class would expose: - -public class R { - public class drawable { - public const int icon = 0x123; - } - - public class layout { - public const int main = 0x456; - } - - public class strings { - public const int first_string = 0xabc; - public const int second_string = 0xbcd; - } -} - -You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main -to reference the layout/main.axml file, or R.strings.first_string to reference the first -string in the dictionary file values/strings.xml. \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/Resource.designer.cs b/osu.Game.Rulesets.Osu.Tests.Android/Resources/Resource.designer.cs deleted file mode 100644 index f229c3f960..0000000000 --- a/osu.Game.Rulesets.Osu.Tests.Android/Resources/Resource.designer.cs +++ /dev/null @@ -1,112 +0,0 @@ -#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("osu.Game.Rulesets.Osu.Tests.Android.Resource", IsApplication=true)] - -namespace osu.Game.Rulesets.Osu.Tests.Android -{ - - - [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 Id - { - - // aapt resource value: 0x7f050000 - public const int myButton = 2131034112; - - static Id() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Id() - { - } - } - - public partial class Layout - { - - // aapt resource value: 0x7f030000 - public const int Main = 2130903040; - - static Layout() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Layout() - { - } - } - - public partial class Mipmap - { - - // aapt resource value: 0x7f020000 - public const int Icon = 2130837504; - - static Mipmap() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Mipmap() - { - } - } - - public partial class String - { - - // aapt resource value: 0x7f040001 - public const int app_name = 2130968577; - - // aapt resource value: 0x7f040000 - public const int hello = 2130968576; - - static String() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private String() - { - } - } - } -} -#pragma warning restore 1591 diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/layout/activity_main.axml b/osu.Game.Rulesets.Osu.Tests.Android/Resources/layout/activity_main.axml deleted file mode 100644 index ff7a60eb50..0000000000 --- a/osu.Game.Rulesets.Osu.Tests.Android/Resources/layout/activity_main.axml +++ /dev/null @@ -1,7 +0,0 @@ - - - \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index 036d09bc5f..0000000000 --- a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index 036d09bc5f..0000000000 --- a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 2531cb31efc3a0a3de6113ab9c7845dc1d9654e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1634 zcmV-o2A%ndP)B+Z3$1(8#|f~9B42Y^N-3=o2YCq0YUY$Zu=pM;#hG{lHi%n~Vh z1d1vN#EDO19X?u$`cV z!a}AKG@Bb*#1cdYg8af_;jP69b`k%G1n?0=F^8bI^o>wg-vEliK^U}y^!D|^p|ax; zC|pK=f+FHp!RUAhtlpGGUxJb|wm^5! z<1r%$<$TR02wajxKZ4MiR#aAxDLE(##UNyD|ABr4WoGRF*?@e^2|~Hq(gurSSJH*;Q~5lw{J5A_(PCXBWhzZE${qgzv0{dk-F( z1<}>r181tLiEla&f1j&?p2xjbfp2cTt-c1Ox~?9EhK9`cJ9Vatf)loIoQ@#h&}cIGD>Z#QLE}&(bMo@7Ff|7f#Nm^$PJpVcbj+v~K7wfVwF}=) zRQsc+`=A-+C)vrRvaIC-5u>|;3h z*G4-u#RI<_vuSN~vZ6{|I~q5FFk3%de#+*>UFG>&bq6~ zUEMZ~FIOmFO=kA^5rkp-Msw?^63xvdXVZ-rv@{6{iVO}M!}^Je%2BPbi+(L<5<%~h z2v^D+f<|j%7~cJjOzg*!GPQ{%uE{i%YgcZhuZh{yNlQ}RhaU1jd=K+AopVKP+D}&} zZ3y$llqZiln=Z_A$!qzkGbX0D{?l(v5@1|`QyCvCnQ`eKI>|zj_zo%y#fKf85VhQ} zP)y&j4P*nR3q{-o35iV6nx7QDqq<;WDVIt}|N%`!dgv*y3va8eLNj zU9x(?ieweHfQ*yXk8|=ssZ~qJEz^QoKJ|iGa>ge_Vm_8l}S+UvJ{8g4jr+o#aTSFsz1W;PDP zW765JXGU#3JL>SlIl3NRV2{7B2dLO1cIP)a4ZRYL|MBD36O1#oSgAf}APz5@;x=_U-<=y)Py7*}O5(uu7BL_eLe6Ek7pH|G zMq)FrF1EFq&yruS5b=F=w)fVVoPd(oeRyTFym_Uwyn~L=OL(O?cf^2L5R(SmjORx6 z%nmZf^W=3pkvT*>@osUNi>DULH1hL;y`JGQX$onRCr_U0=H~Viodq!<7Q{3rPk~{G gu#IhOV;e2n|1(WJB~7~kivR!s07*qoM6N<$g7lUVaR2}S diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png deleted file mode 100644 index 7a859c25556af7a2e46e22a2220eaded55628e9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1441 zcma)+`#%#30L6FjMQg%tuA0%p#0??L`*E=rD#U2F4L5n@F+O9Sp;(QwEQy7+?sX?r zCWN(!Hg`+j5k8*H@|yQEtnAi*(D{7M`Tlf1=eKjq)BUsp2nqrK01B=yNUv`!`EH=x zx8$xJQUd^Fuec%|(TT&0V}4orr_==mmCnEuzD+ff8Pg>pJRqsWsD{#?eGPaCu0(sEH_2RG@<6-Nt<8 ztPMUmmAz9Ga$23Y9~p9dqJSgJJ#Jk_r@o13^%d-Xf46i+Lrmz3 zy9(DUDVXj;Zny7nO+yn&W2flEX=C!8&D0zI`G# z8;XmlonoghgRFUY*$+7pPLa}Uy)onw>TT9t(FTV6#BV8&lXWDPRvQW_n~xZ|yLcZjX>m$Eaf1)dwXS`&E^ zkNjO;%;fWywchc=+w4utQ0Vbn%B>b~yy4I#D{?1!P`$P>Wdo+ljCo(tYia04JTc=$$u+IbzDVPFYpm8+AQj+ zGKH zfS{{hN%W)kF+(26oZpkURD5Q_G_z97F6{Jval+TOj-;5y)*Rdo3a$^^k~q5gpTzmp1q@+2X9O z;_VUF>;s~C1~gpFrFoh?{aQ|LlBIYz!z^P~lndX5-ES)p#+9GW*|-WBTzQ*&gKOE` zM##bUaWl`6rZBXw0!~_oUhf+H$tNc@lLZCj0bZT^KSo@C|P?7YR8dP0se1jj z9aA0|7MONf(ZYaLZs$s}r*05fx25-iN6mZe_*Rq%uyz(+^-k;t`!R`?uf~rn#1ZC7 zuv3}UrmMzcBbo4jym@fS5%I+G`GJIC1s$)MQs3Vhld?a2U;w}$@V%dC@%qpO7+3#$ N&GnQ!lI8SQ#{X#Iv!eh2 diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index b8d35b3a1cfe5308bb099a5a1429555c41417e36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3552 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 diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index 8f56909cddfa86f1387074bf43003f36d6e67be1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2413 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 b;}yxl--Ss53i@>Q4YQuNcebmsMJN0NT!aL! diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 9737d79c0492b2c8a811621660eba33e79fab959..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4858 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 diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 9133e31b43252d00767a6a3806df9ba68de2d265..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3871 zcmZ{n_dgVX|Hs|AGwx({M)uw%qjECNKBIFkWs_{OPG-hgIT;-yd++QJvW2om=tM|& z%H9e2)c5=2=ka+x9`E=2^#{BjugCKpi$>{Of^a}6C@3!JA~i98FX7+NQ2pIx?Ufb^ z3VM>RrkZg8anp*{)c6w{ua@Q=_bH*Cuxq%LI*7AGBwto)H-4!zzcekaq&2morKG}n zDqW!T*L~Hk*w&fLWkN_%TRacHzZw}4ksU%uD{7=< z4l@F>pf_Cn{g0o4;i*1H;#1e1-8Sexy}Xv7sq#ll}DbR&61Jz5)YqB}ZOJOXIqaqfl-_k@P*k!*Y-1 zd(EHAJP_%kR{C}E1hMnU!7Nn5&Xc@ zOW#dX-a7S(bXQ1)GD`E2+dA)roFGLZ$YG!>vm17Q#~qSAB*6DaQd9MaCo|S}wqb6S9B=T`wCw7@qZA zHbS^wMo*b2CVh9inNqd!C^;{$*8EGWf1W{RE8+5O2vQgbd8Q|#Z&D)~7#LW|`W&2L z_SyasQE5fzr8$fM0Zn_(DI~(K;s=4IGw}=5`M4LXXw%?Zd&A4B^1?jOnMXtv(4tuj zATG@Fl~sFhQWT1;`B1D2SSa~}-c~CzLg>+!-;3#7J?rnfA!~pBo zKQ;tVz*}4Grw3mfA+SZK^Sp%H{@X6r2psg~wG{kKWi$fIuTaUYJFc+AxB^Hw2(({r z_$0>HdR@Wy8L4?wi;8`FQFPbpt2#h8fmG`&B8tlM5!2hu3~W9;Mqv1GU+Z^bFm_b1!BHQjAzk$7fP& z^+rYz zVHe?I`XfV!78$8wvEthV$qSmS@AMbm$$^&CjwO*XiO*z1y?$BvZ^Zy5u4Q%*GwkuJ zdFhfDJOt}_7~rgd?V5#_fpC@U$k32TWQE{Z8>ywyPzxH=>)UDGWYnmX(Fb+@_3Ou~ zQDTc)-$8tyLf$*#c|I%opcN|Iwpi0aok4zEm|`s&mJ65u`O9-E$2vwO(g>l&pPd{? zI9B0e|2d$nht>or~UhZeZIs-;+8ZZsPv$1!{ zYkPAaeuiW<{zM*KV2e#>&FcN2K4-DYi+?kum$EY&dVq(b3UTbt^ZQoV{Tc2LA1UkH zBDgQD|M3jlVG2yoaJX%Fc+A2)TcRrG(d02quX~s4`tA9wYJVi4r|&{VIdWAu+b+UA z#D3m-q-AvGK>23Q=g)azqn6sg=~2SRnnXB}qwnBEf5Uu;3xhb1FkS2>9B6<#$v z+I*^>7jCs&{@h8Xi&E&$>jvHrN8I$!dUD8y^dULVQL)&{Q)}2As z6ZABSIMYqKkCm6M88j7N7xMEnC=gP0B;)u<9N5J_^%K> z*Az(p>9S5q8>$rgQhLa55;4pZ@2)^uB#99mJgk77uj5uN@6N-r{5Kqr_FZfZn6e>E zMKrwhrfKE?wa}r(M@=2{P1P+!6EZHVN8En4Y$L|dv>Hq!)_bP6R<9P9Z+s)zWA1ZLM5a4U@vGOf?w{MXFOt75#wAKL`?v{8Z z2$CP5w&Nu%jIM|Y`!>T(^5aPpEoX`FS-)HwHbD2~koRV8oR{Pw_kcl$MO)6=mgjSH zJOy6jb(-j$fYY8!!fUd0a{B6GJg=I-%O55W&rE6;7-8tgVgNNM$J3gSXW1RDNrc`< z#EedInYups6;GLd*K%^%^(uFYd}~YO@Pn8*O${mw51{s)%zn$Xe8Tw$jrbimPq!j@ z*0hIk!_i#DC*e{3zI}+oXk5SK3{#2$i0fjXjyAD@XI7?hYbeL?%@JI|d{iPK+D;kU zAGrkYsTV4sy%%Fpsx5N3qUfu8zQb<=cHoraH_Wcb!Be`WTwXmH$d*nUW=?wA`7A*o z<$A_%p{1zExsocwhl5+^BZ7UC(?%+H-|=fBd84jpK2*0vZeZ@aHO+a=(5;8Fo1F*_ z7RSB%61GElZ1qOkvK)2fds zr|EHY#3AP!54Lr49m8x=u<$D_mjj);=htK~crq~|t5E*iV`o5kN?WK~+ZqF}?4J$H zv}QvA=s4<%i2K&VtXgZaO8Ms1*eS~zW+p=i7$u=S>f_zrw*1VNnSd%QD5Ld9GloR@ z!RGDZ;LYg)_qUoX6EbZ+bRpGHNO_Amy#j~eears);u62C)Pop$=F&pnhKuVt<9*Lb z?nVO)Ox`p6+Av1SIzi?lPB(g!XG2>cRqRKpF!pYXQbOkpo6~W zr&=N0>J^NPXAK2RFFNLfEK14=LkgiktE^_fHiodhKBaCS?pvH=RXEy7)7Ti}-?jEIQaxkB@s8-7H- zP;(ydFBF&_M6q_x@*Z^2#u{9pR5^)lPzX{gM$vuoWl3qjG#5OA%3@B`+&<>FRM^PC zWW9q9)v=x=jPRaaR^-m!qmI4WkhVcz@g9E%FIcZE>S&@yl_Km=!FC07xZifd9I{B-wJj#*1$wX$TWLs} zW>O+MrpYyMN_z+l7V6hGU1{?UzdbnDyiF1yiScCsbS&~iYSa2Dxvf%yF1Ht2_{bD)hkvE@C;YuC|PRtV+*rJ3zu@>WdieCbY z?L^FvNcnD!@PR3HUfFE^DlHs`fbA*K=ESgH0kVN(Z1z9DXjS&W6nWMJh5SO~{z05N z<{!_&82``b;~4+n|06yAf6#}v1q4#xD5R7rz%^dWXP=7mZKrFXMV3LOsc-r0Lk^B* z*yW56L{@?c^6?B*`jZ<~_QxMRW>kP5*-MV8m7gjrZoRXShrUmLUhI4a(VdYLK&55r zU17e^C&gz4hl7mom-*BpFI2V{+7D6eAZ|2Ia^Vg3{euGU;>50HzV8hj<1S`qAmbwK zgfaxem$ENrvVy=#$6Q$PJ?>joXo~5|7K;K?OOeXFuh!s`y~S?fuBg-`eZ<(kO5=j5+?q5CtBYHR53EePl$zzHN=tqL zAT0t%Q#&;$Lw9BKz-ifw&RNE#LZ zm*Y}tqURdR>_s30cr0Kmm)t7#DrItL=Pr-fY-&x>r8OIyN>b?!<#VU$BR9WtYus|C zlb3z7)3d0E&l3aF=W^2M+}x|R0NK52~QqMAdhKneJ)#) zT7732cAbz3<9Y0*qG%PU`g=RHJ)IFk*+PLD`Ld=IP?Njd>VtWBR4-Ck3Hv18U0)!W|c+cna{BX_>&pGEgpL3q?d1PmE6?8)S1P>1n$m*K8 zJrB=+%>Ow8{6`kgrK{~n_TQ|`%^YJ!R>os1-7RDQVJEyvrcBr0ehYLHwGuyhJjGN~ zQXoUXRri!muH=&aB?U>1OjA+1iSjX(KbG?{YAz~fDVtjrlxYNBasKe~oczl_x-QJz zn1EG=Of|76+r|3xXyZ;!Z#<{CvwOP))l;nhw({7K_y2yigJ{x8djHV!Bv%QD>fEfn zfz7)UQ4*qUMrsKoLSX)X$^#u-A&fe$U;?hE?p+_>xKL~AEW=Jiw}Ig1U5_U2-(%P{ zVuCJ~0vp6K{QrLUB2JkBR01uDv@prICoZtsfk#L4hb)YP$ub z2f9S)(JaQXb)^RXnn$j9bIlTy>rIX8d>-`yHuPE_>g`J>+u2H@?_8)`5+VCZ zJ))x}d%#qT1tl9I{o=s%XS2qeFG8n-U=;5i1zPYMWY#Ugl?PL<R0Zs;GS;0v_6v|OQ7krpYk?2}6+_J=VtUfeH}yzAF?`>jymCe2|@ zE_!x#kL0VTIc#d=NsJts=|t#hKG7`BXUl1oZJd_+s<~+jSG10sdI~p`>Jt@dIcTpk z(+P)ir{VKA-gi;l0w;XuaaL!nE0S~vh;JiqLTbE!c-KbPyJn}btB~-;)~zTHI%j4>7N~5ed{XR z@TZds;|W5p9zFJm>%npX+g!M9-SBG5(G~tQGju$$?s0-M z8i{z)9_@-4y_s8w1hG#2@)W_Gy`H>H z1(d8CvggX8%}7F>|ssPHeOOsARfk+ZD^pYf)6t1o(2N$(!|C3zU zKVISCDIohzMA{jmuTCd^jW{UlZ$_&zLFp%t%IE;0FwLK?#ax}NpTM<$q)21(kCO9! zGpf@W(epS!5)H+%??hxpeW;?j?=^Kx@14o;v>D$b zP3}=kUhhy?LR;HsWjGv4-gwx;eMyAYB>R4dzEaq-um1|WJnV8v=BH2uq{=Ra}$`B~FqCs(3MAh~Os%v8)w@H|$ zg_VdKV5wp)xMzX1n-Aq)qtzsSvg8&rYXn#G^LI*Y0sB7>ahs^vmy6?mVu=E+y!JAN z5Rs7_hhWn4Qq_83d83=(=BI7B;w7}P(UN8DBje-KB^6X-(dB&4#=Gk3w33Z^13Vz^+onWncA9w z(g&H0obtZ)6)!pW`V<`$gqKxoEgjz&DqaANl+$flu$NrTO{3h64C%W0B;?ouck96dmECiAOSgLnquRi9Ym#7^c6o~jg+`g&QG`y*p>^QNEFvFbx#g?K>dd!xLd zU!VLLVCqKEaYcdFkz(29DqDUND9U`_MP5;~M8NDZJ{He zk;dXH>Gi=$mAUP>>#=XK+FLL<+9m%$bTL7G$*)s0vPk|*NW^D;OB0FWJfG;aDGZh45jcb_Cddp0TATTx{GhEf+8 z3l`4EwxKT|wDEFu&Myr;v?plbH}IOkcsT!?;7kqVc;2d18*~;A#|N$}@zDiw&S#j=gj`+r|E;^PI_ZH=jFp;u-UdtX}q` zj-?WO|B5n$u>6n*B%x9^s1-Kn{cc?G1k-7&_ zwLF-TR~=5;R@=Z2NwwPKCSgF7O1wGY-E8<5&pZ7LU!^fnH;;349_Fiq9MLPqL(a(1 zsJU#*xX>qFWvC{9H`&spGA2)U=!YvASswAtl)`#Cl6djQ)aS#)TQu(&_ZlpyGBU-6 zwwZrgbwTZOwC5=DeSszp9I!ofeq!n(g&FKS(1Nw?A9sU4Xo@8?jg}jHWSc;ah7@UF z!a6IuaM)$~{`s-R$Bkjl%MTJAEUX{;0kXY4gfi>o{;XVoaP-18)r%V-8@eao=x#;V z&_;=bQT9U+Y2#e!85O7%wlOF^fRGsaHY|A~NbO_jj3r2x#>t<5>fN6oxdPwT)wY@k zjG*q7<$OBOx{2Jc{J{y5j(4mUq)3g63bh^BLnu=PtaH8mc*y65raYYl^^Np@Ai-Zc zkTIC6gZl)25##?-#KR`pzbe_6H{51vh|TX@ZD9!ks)+YKQ!R0du6^#S+~RdCJoWy7aJfJRHzVpyJev>2KCjz-n}~JO-6wq?+T3 zD((}AdNA$siA#~3{9V3}&=P7T~8-+~>bR`# zRZ&K76n;#4L<`&WSZl%QoU8^V&8PZb#MOy#SEuqXEy72o-RWQLim{Eou}@A*-=?qF zjh$uG)&yVg!V35577^rL==DB-34u*!*^Oy22FV_Ip<+%Rr=v3Zcn?7BGD!C$9;oz* zt$J0B^1P_&>J^z1UJ8#GKNY diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index c3ae5f5ccdecc01a9b17a2a0c2b1bb20602f0151..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8001 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 z 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 F@PB1o0BisN diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Osu.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index ef89bd5215ffcc38c68b119a7495a77a7084543b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10893 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 diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/Strings.xml b/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/Strings.xml deleted file mode 100644 index 8c47838dfb..0000000000 --- a/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/Strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - osu.Game.Rulesets.Osu.Tests.Android - Settings - diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/colors.xml b/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/colors.xml deleted file mode 100644 index 17bb9a9dd1..0000000000 --- a/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/colors.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - #2c3e50 - #1B3147 - #3498db - diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/ic_launcher_background.xml b/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/ic_launcher_background.xml deleted file mode 100644 index 6ec24e6413..0000000000 --- a/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/ic_launcher_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #2C3E50 - \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/styles.xml b/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/styles.xml deleted file mode 100644 index 5885930df6..0000000000 --- a/osu.Game.Rulesets.Osu.Tests.Android/Resources/values/styles.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - diff --git a/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj b/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj index 7eeee4fd80..9b2ab38309 100644 --- a/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj +++ b/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj @@ -24,82 +24,35 @@ Assets Xamarin.Android.Net.AndroidClientHandler - - True - portable - False - bin\Debug\ - DEBUG;TRACE - prompt - 4 - True - None - False - - - True - pdbonly - True - bin\Release\ - TRACE - prompt - 4 - true - False - SdkOnly - True - - - - - - - + - - + + osu.licenseheader + - - - Designer - - - - - - - - - - - - - - - - - - - - - - + + %(RecursiveDir)%(Filename)%(Extension) + - + + {d9a367c9-4c1a-489f-9b05-a0cea2b53b58} + osu.Game.Resources + + + {c92a607b-1fdd-4954-9f92-03ff547d9080} + osu.Game.Rulesets.Osu + + + {2a66dd92-adb1-4994-89e2-c94e04acda0d} + osu.Game + - \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Assets/AboutAssets.txt b/osu.Game.Rulesets.Taiko.Tests.Android/Assets/AboutAssets.txt deleted file mode 100644 index b0633374bd..0000000000 --- a/osu.Game.Rulesets.Taiko.Tests.Android/Assets/AboutAssets.txt +++ /dev/null @@ -1,19 +0,0 @@ -Any raw assets you want to be deployed with your application can be placed in -this directory (and child directories) and given a Build Action of "AndroidAsset". - -These files will be deployed with you package and will be accessible using Android's -AssetManager, like this: - -public class ReadAsset : Activity -{ - protected override void OnCreate (Bundle bundle) - { - base.OnCreate (bundle); - - InputStream input = Assets.Open ("my_asset.txt"); - } -} - -Additionally, some Android functions will automatically load asset files: - -Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/MainActivity.cs b/osu.Game.Rulesets.Taiko.Tests.Android/MainActivity.cs index 8ceca4d436..0c64cbfc5d 100644 --- a/osu.Game.Rulesets.Taiko.Tests.Android/MainActivity.cs +++ b/osu.Game.Rulesets.Taiko.Tests.Android/MainActivity.cs @@ -1,19 +1,17 @@ -using Android.App; -using Android.OS; -using Android.Support.V7.App; -using Android.Runtime; -using Android.Widget; +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using Android.App; +using Android.Content.PM; +using osu.Framework.Android; +using osu.Game.Tests; namespace osu.Game.Rulesets.Taiko.Tests.Android { - [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)] - public class MainActivity : AppCompatActivity + [Activity(Theme = "@android:style/Theme.NoTitleBar", MainLauncher = true, ScreenOrientation = ScreenOrientation.SensorLandscape, SupportsPictureInPicture = false, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize)] + public class MainActivity : AndroidGameActivity { - protected override void OnCreate(Bundle savedInstanceState) - { - base.OnCreate(savedInstanceState); - // Set our view from the "main" layout resource - SetContentView(Resource.Layout.activity_main); - } + protected override Framework.Game CreateGame() + => new OsuTestBrowser(); } -} \ No newline at end of file +} diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/AboutResources.txt b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/AboutResources.txt deleted file mode 100644 index c2bca974c4..0000000000 --- a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/AboutResources.txt +++ /dev/null @@ -1,44 +0,0 @@ -Images, layout descriptions, binary blobs and string dictionaries can be included -in your application as resource files. Various Android APIs are designed to -operate on the resource IDs instead of dealing with images, strings or binary blobs -directly. - -For example, a sample Android app that contains a user interface layout (main.axml), -an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) -would keep its resources in the "Resources" directory of the application: - -Resources/ - drawable/ - icon.png - - layout/ - main.axml - - values/ - strings.xml - -In order to get the build system to recognize Android resources, set the build action to -"AndroidResource". The native Android APIs do not operate directly with filenames, but -instead operate on resource IDs. When you compile an Android application that uses resources, -the build system will package the resources for distribution and generate a class called "R" -(this is an Android convention) that contains the tokens for each one of the resources -included. For example, for the above Resources layout, this is what the R class would expose: - -public class R { - public class drawable { - public const int icon = 0x123; - } - - public class layout { - public const int main = 0x456; - } - - public class strings { - public const int first_string = 0xabc; - public const int second_string = 0xbcd; - } -} - -You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main -to reference the layout/main.axml file, or R.strings.first_string to reference the first -string in the dictionary file values/strings.xml. \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/Resource.designer.cs b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/Resource.designer.cs deleted file mode 100644 index d3709d3cdb..0000000000 --- a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/Resource.designer.cs +++ /dev/null @@ -1,112 +0,0 @@ -#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("osu.Game.Rulesets.Taiko.Tests.Android.Resource", IsApplication=true)] - -namespace osu.Game.Rulesets.Taiko.Tests.Android -{ - - - [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 Id - { - - // aapt resource value: 0x7f050000 - public const int myButton = 2131034112; - - static Id() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Id() - { - } - } - - public partial class Layout - { - - // aapt resource value: 0x7f030000 - public const int Main = 2130903040; - - static Layout() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Layout() - { - } - } - - public partial class Mipmap - { - - // aapt resource value: 0x7f020000 - public const int Icon = 2130837504; - - static Mipmap() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Mipmap() - { - } - } - - public partial class String - { - - // aapt resource value: 0x7f040001 - public const int app_name = 2130968577; - - // aapt resource value: 0x7f040000 - public const int hello = 2130968576; - - static String() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private String() - { - } - } - } -} -#pragma warning restore 1591 diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/layout/activity_main.axml b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/layout/activity_main.axml deleted file mode 100644 index ff7a60eb50..0000000000 --- a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/layout/activity_main.axml +++ /dev/null @@ -1,7 +0,0 @@ - - - \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index 036d09bc5f..0000000000 --- a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index 036d09bc5f..0000000000 --- a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 2531cb31efc3a0a3de6113ab9c7845dc1d9654e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1634 zcmV-o2A%ndP)B+Z3$1(8#|f~9B42Y^N-3=o2YCq0YUY$Zu=pM;#hG{lHi%n~Vh z1d1vN#EDO19X?u$`cV z!a}AKG@Bb*#1cdYg8af_;jP69b`k%G1n?0=F^8bI^o>wg-vEliK^U}y^!D|^p|ax; zC|pK=f+FHp!RUAhtlpGGUxJb|wm^5! z<1r%$<$TR02wajxKZ4MiR#aAxDLE(##UNyD|ABr4WoGRF*?@e^2|~Hq(gurSSJH*;Q~5lw{J5A_(PCXBWhzZE${qgzv0{dk-F( z1<}>r181tLiEla&f1j&?p2xjbfp2cTt-c1Ox~?9EhK9`cJ9Vatf)loIoQ@#h&}cIGD>Z#QLE}&(bMo@7Ff|7f#Nm^$PJpVcbj+v~K7wfVwF}=) zRQsc+`=A-+C)vrRvaIC-5u>|;3h z*G4-u#RI<_vuSN~vZ6{|I~q5FFk3%de#+*>UFG>&bq6~ zUEMZ~FIOmFO=kA^5rkp-Msw?^63xvdXVZ-rv@{6{iVO}M!}^Je%2BPbi+(L<5<%~h z2v^D+f<|j%7~cJjOzg*!GPQ{%uE{i%YgcZhuZh{yNlQ}RhaU1jd=K+AopVKP+D}&} zZ3y$llqZiln=Z_A$!qzkGbX0D{?l(v5@1|`QyCvCnQ`eKI>|zj_zo%y#fKf85VhQ} zP)y&j4P*nR3q{-o35iV6nx7QDqq<;WDVIt}|N%`!dgv*y3va8eLNj zU9x(?ieweHfQ*yXk8|=ssZ~qJEz^QoKJ|iGa>ge_Vm_8l}S+UvJ{8g4jr+o#aTSFsz1W;PDP zW765JXGU#3JL>SlIl3NRV2{7B2dLO1cIP)a4ZRYL|MBD36O1#oSgAf}APz5@;x=_U-<=y)Py7*}O5(uu7BL_eLe6Ek7pH|G zMq)FrF1EFq&yruS5b=F=w)fVVoPd(oeRyTFym_Uwyn~L=OL(O?cf^2L5R(SmjORx6 z%nmZf^W=3pkvT*>@osUNi>DULH1hL;y`JGQX$onRCr_U0=H~Viodq!<7Q{3rPk~{G gu#IhOV;e2n|1(WJB~7~kivR!s07*qoM6N<$g7lUVaR2}S diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png deleted file mode 100644 index 7a859c25556af7a2e46e22a2220eaded55628e9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1441 zcma)+`#%#30L6FjMQg%tuA0%p#0??L`*E=rD#U2F4L5n@F+O9Sp;(QwEQy7+?sX?r zCWN(!Hg`+j5k8*H@|yQEtnAi*(D{7M`Tlf1=eKjq)BUsp2nqrK01B=yNUv`!`EH=x zx8$xJQUd^Fuec%|(TT&0V}4orr_==mmCnEuzD+ff8Pg>pJRqsWsD{#?eGPaCu0(sEH_2RG@<6-Nt<8 ztPMUmmAz9Ga$23Y9~p9dqJSgJJ#Jk_r@o13^%d-Xf46i+Lrmz3 zy9(DUDVXj;Zny7nO+yn&W2flEX=C!8&D0zI`G# z8;XmlonoghgRFUY*$+7pPLa}Uy)onw>TT9t(FTV6#BV8&lXWDPRvQW_n~xZ|yLcZjX>m$Eaf1)dwXS`&E^ zkNjO;%;fWywchc=+w4utQ0Vbn%B>b~yy4I#D{?1!P`$P>Wdo+ljCo(tYia04JTc=$$u+IbzDVPFYpm8+AQj+ zGKH zfS{{hN%W)kF+(26oZpkURD5Q_G_z97F6{Jval+TOj-;5y)*Rdo3a$^^k~q5gpTzmp1q@+2X9O z;_VUF>;s~C1~gpFrFoh?{aQ|LlBIYz!z^P~lndX5-ES)p#+9GW*|-WBTzQ*&gKOE` zM##bUaWl`6rZBXw0!~_oUhf+H$tNc@lLZCj0bZT^KSo@C|P?7YR8dP0se1jj z9aA0|7MONf(ZYaLZs$s}r*05fx25-iN6mZe_*Rq%uyz(+^-k;t`!R`?uf~rn#1ZC7 zuv3}UrmMzcBbo4jym@fS5%I+G`GJIC1s$)MQs3Vhld?a2U;w}$@V%dC@%qpO7+3#$ N&GnQ!lI8SQ#{X#Iv!eh2 diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index b8d35b3a1cfe5308bb099a5a1429555c41417e36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3552 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 diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index 8f56909cddfa86f1387074bf43003f36d6e67be1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2413 zcmV-z36l1SP)p}(2Rxc)0-Wh zPz3vmm7#NyIfb0yJsg?*5GSVI%x06tn*`vD#o;mJ+k3dbY*-$U8jEw|8d7Ty7(7{M z2?5^gTb%6;7qo)(`V?{C^O6B8As$GQZ?i94&}#idAQHmOY47p2nQdDKpoFg)F!}5* z1dkTN_>DAhf8lb3TSsTH?G|z&93`TBmS?vhc=4oil6(iElplhz7?Z70geiDp3pJhq zUo2Q&3H+3rdGN}cjqt{n9bwD5joZLJ^Jz#fa7Ze_3Gs@la;X?w&^oWTII@IL=i2%NcOHd%)xIge|?jz0h*z98}LAfTHV)^}_4nSH_wME~+6KI3|u?B>WKA)ZI3my4tGjqYu;Kt340fR@u zd7fRhPPRI6SnQz5ow86SlsJuyM%zd-phc+7a^N!`o(_LGbR;6+1v&B6DKM5eW%mg* zs?Jn#TCL8$FTe|eMmn>tR~sMN|QlRckj&CbTc9?V!#otMm6llrQ#e z`+~)O_T)$4%-Qn+$#}c76FP3)hVJfeMUdUyZrTs~<2doV)^EOr${7n3b3vC|zTcM% z1iP?7=&~!5IEKi|dLX5s3SN8bod8hRZ`_2XFRq7KPp^PAuWyEKw_6f?m&*ljzq6C} z!~W+k{3pN=+jf0G*OBH`cXJcUk}j{Jjtd|8#I?^{2;W}#Uec-?8h-<+ zg;kJVJQWW7^_Zjrpa1{6SH~HGfl5VAjGFaQVtr#rS@2&tBq%YU&B9tQVArR;`TUY4qKjjlZT| zlbgpy@@USodYO%l1#NEmQG(f5N*Sgwnz*J_P64#W(c}LJT1C+Pvlp$TV{C*X2r-V{ zm_BDYZLc6n>hB#X`QpS$>M5z6S!=R>9T%7UfL8%cYVm_i9{Yoo0$A3tY`Wd<5U7C% z4jev4cU81>!=~*tBzF9kc!neCz|LAEn;S~<&AAJ7jsR|yS9vWVIaljd zU_x4clAHpiQ|sWXQ>|eUw8kCpQ;XyHWvd(L-ht0+-`*A$@w?o9l@dlN1>*FXj86f^ z9LJd1OHv9LOP%oHC;LNQ6!W0`k-2ni)nm`V#Y>lA-g7U}|FIp}Yp8Q!-XUr9SAbB8 zwpg_>(W}7yBq5ZN7(*Zw>d@2E1Dm(+p<}Yjro%^{9;EFUg2v>EBA7>tiQEuvPWg7Fec)l|QhVjM)zHsitL!xgV7nr=OIr zH`{M0kvR+DF`ped9>XaNYr55OP^hA^OU@$uU#NrnMN+HHL9t$yU4@oE}F0tq-?6>#N2T7=0 z>%Vysa<}5u4T^L+DYN7-)}4Mw0U-~@r&<xzUJepI zHi*?{WB3g5J63YXvk@bH9IG=~PX{|vI-gt$=fArcQShC_i_@Q4u6U%>5}G^YqFC%_{WgD6$Q3E;8rKcsY)1@M}f>X9#=^#*iALQmN8o zwHeQ=Gl~wAI(;31@H;s80Qw8HKH#p3V{k0afpg)UA=UXvc!OVL1d$jb6CW7!U`4FX zxGFK-vL|U$ag#QCa;rASdXZ4yb`*TZwxmg=P1pzf;utbk%g-@_pYyK#W&#(!j|YN@ zr&Fm$8ly-3q~QM1W6MzR8Qbt3-zSD2qq++}_6YO{f?ycuP(F4A@8Itre#FbYe47gU f;7KY{KPUJv@z%Xey2sv&00000NkvXXu0mjfaG77zUSIfaoZb;&wz(gJIJV1RP*k1Px^d*-VVwqO{!7ld0vtp>=YBj^&nilC)BD ztE56JwKUW~0k;-+RFq}dp}+e-W^~>R$~@;W&dj_2IschCoVoAvzVF`u|L_0b_pX%{ z6)IGyP@zJF3Kc5mBnw)^$H%v%8s8GJFdFO+JEdZDTx2p?EA@AYB&D^dY(zH?X>2dg zpy5tJROa3Z28cyt81c?9etOFk&xr%&3*Cbh*+g#>Eg@R0`V^9??-?=3MobVJO{{ny z`J@v!_h3Z<=@1%JPW6EjJc8u~t^rZ*yv_tQn_~aS4&orid8VU4d9`~`bS>$)jw&j_ zg26-quF~NbT>1ryc$*0i2#`iEZUA3VLuSH%bi}i@0TY6aG#dK)M6BY8fQInO#bsz4 zaghA9%Iwrpz#pj$Hhujfb44PtttN&BjsCvA5l)1FyLfRosiK|&-MBVjqktFuhZgk^ z4|Fql7N{CqJA2C9$%V@(0s0Z(>i?p$dmkSk#EuUFTJ-Yp_n-uDngM0q`gr*wc6<=f z(n;*=MG4?G1G>6+`XP3d07?KQfD%9npahr&0UkvAg~UR?(B@O`kP(!C#xx@SRrq+@ zPB?KY7qb66*KB(Hk2CQ8M_V9hcrqnGtx-vn;8ac?)YsP=MeFM7;Kw7!Avijj63{<1 z4i01^r%G~9`BVaIzdamCre5&B9^=!dK@Qp|m76IFL z9blpnQy`$GrWTg1*&rMO5>sYEX{pjAz*lSGogxU9zhe0Wpu_w1_fsYXzFN2K+zVc^ z7|SML%A92+2Cp+o0!qu2kT79}4jaw7 z&h+Yna8M#SwsE=dIg!^#X6-p)7_l&Gu=VGW4DW6_u6n_M#71?J*O2 zIyYah_Giu(K;W>KEr$T_kXYEU=R3VeZ*@%#B)>VEb&X)f7{-L?)Bcy=vY~%i9IO5O zmFdiN_5B~-Pv4?52+Wp%LyptC8cFBX7XGe-*ffG zEl&MkBflS(^oIEpFfei?93~F%Nm9md&0EP7X*7X6dgAdR>{t5^v5GD@iq~!YoU;?J ztE-2M-3K`pa7>Z_w8d3b)lU=_=97p?+mWWsSODdZ$eyC3ju|sWr_gine(@9aUqsqz z&nB}XAaukyI9G7Vpu)*Y5;MF%Ho)2I8!^)S z2*9bIwrM*Pj~fEO)$2E5NaAa(YsZb7t~07H{rxY5$Bt+HZe+?#gKG`t6_qf1$!hZ> z0AqK)vYlHpc7wO?K$(pgc9&)`JJJbaXw{`1aXh9Eu4mnK7i7cm*T z4*bAdir{Y1eVr76jD)3ys&&QboIJ)svny>&p|XiZ7nf`)I&!liAZ|P{5yd6E=4tkm z#hGSokE4D0nvKlpe|_dcR{w*dMl)e7pZ(t~ybaQ*(dI$GjQOiLEqe4(WqCOh0crLl z35#b;k@k9FUTPZewFc}T)991{jeZ7%C&1Pn-%tXKVS@I4|C5dh!sH&Bph>e9Ynh-V zI3Z*cWDF-95;K;mVlhrQHy;ADoba1McEZgahT`|FJNB@`(8V9D*9t=uATvv#VW?&f z#?Xb>m1{R3GBHKR#1)s6vVM2@?<)`K+5C$Jr6N|W z-N@QLh^dGJnT@9+)^FXZlZwdLbRp~@7Sd`cIArM?wNG+)- z&uLpqnUXltsjRk&SEg{@mV$*K?VSzN-d(}$m=NT)6n!^l;kp4wARimE&J|o_T_<12 z8?zqd=}mrX;#-!#Irrz|f0!fzm|67-j8lFp%R1=GI_T?a=nI=D0rZt+lmJQq zC4dq@37`Z}0(g6QH?IWr6bE=y0=Uiq4}abWz{3c{f$}0sfSxnJZ^%7IXAgz@iewH3#qR$Z~3UKiWJKwHd$F7JS8ODa4BO{SW@Q^Zl7fI+xWEKE(Pz^oA zr;$T^qM1W{+y)JU9v*(5B4#S=toR_n*51K!K%aq;S4c+;33zl9PB}NJT;Pgk2aoi^ zff)_Xl8|f9cIbo-*iI}KKV!v%Sc^m=JQ1j?sEc!AZ=bMht^rXG4=L z9D5}pRt^phc8Hx7PtwZH&dvc(w6gEmDZIO@?{=5|A(#624lX7Rr@ZgLNF{y>N!9mE zK1&db?ydte>^nRkff(7^+TuZOyq+nEOtxv?zI_+$fT(A?c6Nh0IChJ5=+twhs7v=m zAu8TGVnDEvA|{B93ZpiBj()XZMAX*C#->x-wr!or_ufQZiMk0~5rf`{31Wj7sjzAm zK~~Wz+Yleqk#yLZFz$$~3sfBu1H_^M69yY=D5gYIWkI(1=9ka?aOiWv-c4uA5I+<{+0zn4x(jQ8a1p=e(qBJLB%hsXH)S2U-- z$F}q6D=~O0u27)FqfXozTA5#OU9lRv%{a~NQB#mT@ox)ldngG2yiS$|Ra&0YfGtzl zA9r)+*rH^9;}NjR--}-}TpAyAfA%i(ApU+(o+Uz~yHOXE5`Wz`2Ty#!jBjW4GK2AH zv!`%m^X^6~@QAH62>0TqF4`gq6J-OAOoWoRvu@T|?%B-doUg?}8RX(BHU3Jy*)>y)p#^|TNj7(L*m`r+_j_bZOY_TQPX2<(L zVSqJ+!$GQS+say~vpx(X{f&ek`vYz9+Bs|K=Tf2p@q9Ol!HRN@te?oVp;GqWQi#M8 ziV-}|fwY_H7ON_Y4JNDw^wF>{U3w&#bCZz~k{xI$zO2pZQB}kudb2w&7Z$YDwfQQU z)G)KuW3JLoOFC3fCJTz#St#!ww-O=EfnAnzBfvAx4_l60dctsTZS0L7ypl@)qDG*N z$31ZPOj4O0ED=UHh|iwwxK4~V4=M9u!I4XCrr?onD=miWuZoJZy|5N6v#$A%sqGyX zVO(L~H14_+V1u#`y-}3sJ{8?#30SrkOLuSUh@KnJT;u=}oD<-DA`@PD%-1t`RX{$n z&n6=j;t*-^;HS>wuk{(LpVsoz`U{ z?0{6*wM?IuytUQ|BbcuM@VNGOZj@oskiz&{7qxmUy0H zLx=GckGge26h|5>h@YK}s#`w=Y_9?&a8E+ULPKx>MvMKdz0g#tTAy!82{Y||BuahG zSfvYzbGwhr%NjTuywe3Tc;@40sE*!gy&MV^$S4uG5KUfV$n85%d#w$T7gHXmiEQdW z<1S{Gl~=~AF5my=A}M}aW^4W&QF^WS7>VN9f1`5G10q&iLy~qU2e+)VX`D!7SgW$Kbkc#aKO(FkoPhbuMK~Hv#@#s zrS1(4^*@V`5FT$rMubk&Vmav#W6RJ57FSd0bMQVRkIVZ#L%7r;rdm>K@*`HA!s&9Z zAds9TjZg9ayROuy(?!Dw%nh3ws^*U_w!5yk){-VaCCVelOUc>PPwkg#nHMJWz2EwY zyCv_n|5TO%;AfbU1X1prN6E;hva?=_qKf=E&GD_R+&{~Q;$?mrN*Mq%Ro_j#z%<#WPM zN|+Nsqg5txCizz8SEZ33GV))l`|HTg@}z5|euP9t~ucaYj8T851FEZw5dAMB5+*SBoetlhAH(hSX2 z^pITBGU!vze>icx@aE4AW2muzu=6$l>I7RjH1+xi);mz+5wW?JPC17-JDXQRmUj&g z*UIG6{9ApHwO43CzTy<-Yq%boAJY?__DUu%m(W^KQsVV5)Nm9(fSvXrX!Nl;@AZGt b;}yxl--Ss53i@>Q4YQuNcebmsMJN0NT!aL! diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 9737d79c0492b2c8a811621660eba33e79fab959..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4858 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 diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 9133e31b43252d00767a6a3806df9ba68de2d265..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3871 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 diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index c3ae5f5ccdecc01a9b17a2a0c2b1bb20602f0151..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8001 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 z 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 F@PB1o0BisN diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index ef89bd5215ffcc38c68b119a7495a77a7084543b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10893 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 diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/Strings.xml b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/Strings.xml deleted file mode 100644 index 12965f132d..0000000000 --- a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/Strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - osu.Game.Rulesets.Taiko.Tests.Android - Settings - diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/colors.xml b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/colors.xml deleted file mode 100644 index 17bb9a9dd1..0000000000 --- a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/colors.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - #2c3e50 - #1B3147 - #3498db - diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/ic_launcher_background.xml b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/ic_launcher_background.xml deleted file mode 100644 index 6ec24e6413..0000000000 --- a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/ic_launcher_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #2C3E50 - \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/styles.xml b/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/styles.xml deleted file mode 100644 index 5885930df6..0000000000 --- a/osu.Game.Rulesets.Taiko.Tests.Android/Resources/values/styles.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj b/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj index 62c2cefe06..0174be9451 100644 --- a/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj +++ b/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj @@ -24,82 +24,38 @@ Assets Xamarin.Android.Net.AndroidClientHandler - - True - portable - False - bin\Debug\ - DEBUG;TRACE - prompt - 4 - True - None - False - - - True - pdbonly - True - bin\Release\ - TRACE - prompt - 4 - true - False - SdkOnly - True - - - - - - - + - - + + osu.licenseheader + - - - Designer - - - - - - - - - - - - - - - - - - - - - - + + %(RecursiveDir)%(Filename)%(Extension) + + + + {d9a367c9-4c1a-489f-9b05-a0cea2b53b58} + osu.Game.Resources + + + {f167e17a-7de6-4af5-b920-a5112296c695} + osu.Game.Rulesets.Taiko + + + {2a66dd92-adb1-4994-89e2-c94e04acda0d} + osu.Game + + - \ No newline at end of file From 5fdf4ee67b3c4e3c8c97625cdbf858c3e92faeec Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Sat, 5 Jan 2019 23:18:12 -0600 Subject: [PATCH 017/267] Add Android's VisualTests project --- osu.Android.sln | 8 ++ osu.Game.Tests.Android/MainActivity.cs | 16 ++++ .../Properties/AndroidManifest.xml | 9 ++ .../Properties/AssemblyInfo.cs | 30 ++++++ .../osu.Game.Tests.Android.csproj | 91 +++++++++++++++++++ 5 files changed, 154 insertions(+) create mode 100644 osu.Game.Tests.Android/MainActivity.cs create mode 100644 osu.Game.Tests.Android/Properties/AndroidManifest.xml create mode 100644 osu.Game.Tests.Android/Properties/AssemblyInfo.cs create mode 100644 osu.Game.Tests.Android/osu.Game.Tests.Android.csproj diff --git a/osu.Android.sln b/osu.Android.sln index 11c0f3cb27..d9c6ffc939 100644 --- a/osu.Android.sln +++ b/osu.Android.sln @@ -25,6 +25,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Game.Rulesets.Osu.Tests EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Game.Rulesets.Taiko.Tests.Android", "osu.Game.Rulesets.Taiko.Tests.Android\osu.Game.Rulesets.Taiko.Tests.Android.csproj", "{3701A0A1-8476-42C6-B5C4-D24129B4A484}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Game.Tests.Android", "osu.Game.Tests.Android\osu.Game.Tests.Android.csproj", "{5CC222DC-5716-4499-B897-DCBDDA4A5CF9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -85,6 +87,12 @@ Global {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Release|Any CPU.ActiveCfg = Release|Any CPU {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Release|Any CPU.Build.0 = Release|Any CPU {3701A0A1-8476-42C6-B5C4-D24129B4A484}.Release|Any CPU.Deploy.0 = Release|Any CPU + {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Release|Any CPU.Build.0 = Release|Any CPU + {5CC222DC-5716-4499-B897-DCBDDA4A5CF9}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/osu.Game.Tests.Android/MainActivity.cs b/osu.Game.Tests.Android/MainActivity.cs new file mode 100644 index 0000000000..58375c699e --- /dev/null +++ b/osu.Game.Tests.Android/MainActivity.cs @@ -0,0 +1,16 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using Android.App; +using Android.Content.PM; +using osu.Framework.Android; + +namespace osu.Game.Tests.Android +{ + [Activity(Theme = "@android:style/Theme.NoTitleBar", MainLauncher = true, ScreenOrientation = ScreenOrientation.SensorLandscape, SupportsPictureInPicture = false, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize)] + public class MainActivity : AndroidGameActivity + { + protected override Framework.Game CreateGame() + => new OsuTestBrowser(); + } +} diff --git a/osu.Game.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Tests.Android/Properties/AndroidManifest.xml new file mode 100644 index 0000000000..d4d822c7b0 --- /dev/null +++ b/osu.Game.Tests.Android/Properties/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/osu.Game.Tests.Android/Properties/AssemblyInfo.cs b/osu.Game.Tests.Android/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..dfa3e0197b --- /dev/null +++ b/osu.Game.Tests.Android/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using Android.App; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("osu.Game.Tests.Android")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("osu.Game.Tests.Android")] +[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: ComVisible(false)] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj b/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj new file mode 100644 index 0000000000..4f5b0e68d4 --- /dev/null +++ b/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj @@ -0,0 +1,91 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {5CC222DC-5716-4499-B897-DCBDDA4A5CF9} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {122416d6-6b49-4ee2-a1e8-b825f31c79fe} + Library + Properties + osu.Game.Tests.Android + osu.Game.Tests.Android + 512 + True + Resources\Resource.designer.cs + Resource + Off + false + v8.1 + Properties\AndroidManifest.xml + Resources + Assets + Xamarin.Android.Net.AndroidClientHandler + + + + + + + + + osu.licenseheader + + + + + + %(RecursiveDir)%(Filename)%(Extension) + + + %(RecursiveDir)%(Filename)%(Extension) + + + %(RecursiveDir)%(Filename)%(Extension) + + + %(RecursiveDir)%(Filename)%(Extension) + + + %(RecursiveDir)%(Filename)%(Extension) + + + %(RecursiveDir)%(Filename)%(Extension) + + + %(RecursiveDir)%(Filename)%(Extension) + + + %(RecursiveDir)%(Filename)%(Extension) + + + + + {d9a367c9-4c1a-489f-9b05-a0cea2b53b58} + osu.Game.Resources + + + {58f6c80c-1253-4a0e-a465-b8c85ebeadf3} + osu.Game.Rulesets.Catch + + + {48f4582b-7687-4621-9cbe-5c24197cb536} + osu.Game.Rulesets.Mania + + + {c92a607b-1fdd-4954-9f92-03ff547d9080} + osu.Game.Rulesets.Osu + + + {f167e17a-7de6-4af5-b920-a5112296c695} + osu.Game.Rulesets.Taiko + + + {2a66dd92-adb1-4994-89e2-c94e04acda0d} + osu.Game + + + + \ No newline at end of file From 8159905ca038994432454cb55233a416cc5236bd Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Sat, 5 Jan 2019 23:48:57 -0600 Subject: [PATCH 018/267] Code File Sanity --- .gitignore | 1 + osu.Android/Properties/AssemblyInfo.cs | 33 ------------------- osu.Android/osu.Android.csproj | 1 - .../Properties/AssemblyInfo.cs | 30 ----------------- ...u.Game.Rulesets.Catch.Tests.Android.csproj | 1 - .../Properties/AssemblyInfo.cs | 30 ----------------- ...u.Game.Rulesets.Mania.Tests.Android.csproj | 1 - .../Properties/AssemblyInfo.cs | 30 ----------------- ...osu.Game.Rulesets.Osu.Tests.Android.csproj | 1 - .../Properties/AssemblyInfo.cs | 30 ----------------- ...u.Game.Rulesets.Taiko.Tests.Android.csproj | 1 - .../Properties/AndroidManifest.xml | 12 +++---- .../Properties/AssemblyInfo.cs | 30 ----------------- .../osu.Game.Tests.Android.csproj | 8 +++-- osu.Game/Properties/AssemblyInfo.cs | 1 + 15 files changed, 12 insertions(+), 198 deletions(-) delete mode 100644 osu.Android/Properties/AssemblyInfo.cs delete mode 100644 osu.Game.Rulesets.Catch.Tests.Android/Properties/AssemblyInfo.cs delete mode 100644 osu.Game.Rulesets.Mania.Tests.Android/Properties/AssemblyInfo.cs delete mode 100644 osu.Game.Rulesets.Osu.Tests.Android/Properties/AssemblyInfo.cs delete mode 100644 osu.Game.Rulesets.Taiko.Tests.Android/Properties/AssemblyInfo.cs delete mode 100644 osu.Game.Tests.Android/Properties/AssemblyInfo.cs diff --git a/.gitignore b/.gitignore index f95a04e517..21dbf45618 100644 --- a/.gitignore +++ b/.gitignore @@ -196,6 +196,7 @@ ClientBin/ *.publishsettings node_modules/ orleans.codegen.cs +Resource.designer.cs # Since there are multiple workflows, uncomment next line to ignore bower_components # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) diff --git a/osu.Android/Properties/AssemblyInfo.cs b/osu.Android/Properties/AssemblyInfo.cs deleted file mode 100644 index d222a06ee0..0000000000 --- a/osu.Android/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -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("osu.Android")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("osu.Android")] -[assembly: AssemblyCopyright("Copyright © 2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: ComVisible(false)] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/osu.Android/osu.Android.csproj b/osu.Android/osu.Android.csproj index 646ed71d44..4a1dccd758 100644 --- a/osu.Android/osu.Android.csproj +++ b/osu.Android/osu.Android.csproj @@ -28,7 +28,6 @@ - diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Properties/AssemblyInfo.cs b/osu.Game.Rulesets.Catch.Tests.Android/Properties/AssemblyInfo.cs deleted file mode 100644 index 1b1fd64fb5..0000000000 --- a/osu.Game.Rulesets.Catch.Tests.Android/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -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("osu.Game.Rulesets.Catch.Tests.Android")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("osu.Game.Rulesets.Catch.Tests.Android")] -[assembly: AssemblyCopyright("Copyright © 2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: ComVisible(false)] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj b/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj index 82c171cb46..e4140374cc 100644 --- a/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj +++ b/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj @@ -27,7 +27,6 @@ - diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Properties/AssemblyInfo.cs b/osu.Game.Rulesets.Mania.Tests.Android/Properties/AssemblyInfo.cs deleted file mode 100644 index 468676e282..0000000000 --- a/osu.Game.Rulesets.Mania.Tests.Android/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -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("osu.Game.Rulesets.Mania.Tests.Android")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("osu.Game.Rulesets.Mania.Tests.Android")] -[assembly: AssemblyCopyright("Copyright © 2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: ComVisible(false)] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj b/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj index a761f2569a..8b2cc5f55b 100644 --- a/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj +++ b/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj @@ -27,7 +27,6 @@ - diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Properties/AssemblyInfo.cs b/osu.Game.Rulesets.Osu.Tests.Android/Properties/AssemblyInfo.cs deleted file mode 100644 index 0e43fb25cf..0000000000 --- a/osu.Game.Rulesets.Osu.Tests.Android/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -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("osu.Game.Rulesets.Osu.Tests.Android")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("osu.Game.Rulesets.Osu.Tests.Android")] -[assembly: AssemblyCopyright("Copyright © 2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: ComVisible(false)] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj b/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj index 9b2ab38309..a8d6b631cc 100644 --- a/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj +++ b/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj @@ -27,7 +27,6 @@ - diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AssemblyInfo.cs b/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AssemblyInfo.cs deleted file mode 100644 index 28f5d292ab..0000000000 --- a/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -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("osu.Game.Rulesets.Taiko.Tests.Android")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("osu.Game.Rulesets.Taiko.Tests.Android")] -[assembly: AssemblyCopyright("Copyright © 2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: ComVisible(false)] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj b/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj index 0174be9451..2dc5cc37c1 100644 --- a/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj +++ b/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj @@ -27,7 +27,6 @@ - diff --git a/osu.Game.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Tests.Android/Properties/AndroidManifest.xml index d4d822c7b0..fda3bdafab 100644 --- a/osu.Game.Tests.Android/Properties/AndroidManifest.xml +++ b/osu.Game.Tests.Android/Properties/AndroidManifest.xml @@ -1,9 +1,5 @@  - - - - - + + + + \ No newline at end of file diff --git a/osu.Game.Tests.Android/Properties/AssemblyInfo.cs b/osu.Game.Tests.Android/Properties/AssemblyInfo.cs deleted file mode 100644 index dfa3e0197b..0000000000 --- a/osu.Game.Tests.Android/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -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("osu.Game.Tests.Android")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("osu.Game.Tests.Android")] -[assembly: AssemblyCopyright("Copyright © 2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: ComVisible(false)] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj b/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj index 4f5b0e68d4..8a8a2b6733 100644 --- a/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj +++ b/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj @@ -10,7 +10,7 @@ {122416d6-6b49-4ee2-a1e8-b825f31c79fe} Library Properties - osu.Game.Tests.Android + osu.Game.Tests osu.Game.Tests.Android 512 True @@ -27,7 +27,6 @@ - @@ -87,5 +86,10 @@ osu.Game + + + 2.0.0 + + \ No newline at end of file diff --git a/osu.Game/Properties/AssemblyInfo.cs b/osu.Game/Properties/AssemblyInfo.cs index df9045b802..3a283b29d5 100644 --- a/osu.Game/Properties/AssemblyInfo.cs +++ b/osu.Game/Properties/AssemblyInfo.cs @@ -9,3 +9,4 @@ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("osu.Game.Tests")] [assembly: InternalsVisibleTo("osu.Game.Tests.Dynamic")] +[assembly: InternalsVisibleTo("osu.Game.Tests.Android")] From 47268898bec498d8e165e26c84fd59315a2ac44d Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Sun, 6 Jan 2019 00:04:25 -0600 Subject: [PATCH 019/267] Expose internals for Android test projects --- osu.Game.Rulesets.Catch/Properties/AssemblyInfo.cs | 1 + osu.Game.Rulesets.Mania/Properties/AssemblyInfo.cs | 1 + osu.Game.Rulesets.Osu/Properties/AssemblyInfo.cs | 1 + osu.Game.Rulesets.Taiko/Properties/AssemblyInfo.cs | 1 + 4 files changed, 4 insertions(+) diff --git a/osu.Game.Rulesets.Catch/Properties/AssemblyInfo.cs b/osu.Game.Rulesets.Catch/Properties/AssemblyInfo.cs index 045d0824c6..7dfb32cade 100644 --- a/osu.Game.Rulesets.Catch/Properties/AssemblyInfo.cs +++ b/osu.Game.Rulesets.Catch/Properties/AssemblyInfo.cs @@ -9,3 +9,4 @@ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("osu.Game.Rulesets.Catch.Tests")] [assembly: InternalsVisibleTo("osu.Game.Rulesets.Catch.Tests.Dynamic")] +[assembly: InternalsVisibleTo("osu.Game.Rulesets.Catch.Tests.Android")] diff --git a/osu.Game.Rulesets.Mania/Properties/AssemblyInfo.cs b/osu.Game.Rulesets.Mania/Properties/AssemblyInfo.cs index 76ccfe324b..743cec5ee1 100644 --- a/osu.Game.Rulesets.Mania/Properties/AssemblyInfo.cs +++ b/osu.Game.Rulesets.Mania/Properties/AssemblyInfo.cs @@ -9,3 +9,4 @@ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("osu.Game.Rulesets.Mania.Tests")] [assembly: InternalsVisibleTo("osu.Game.Rulesets.Mania.Tests.Dynamic")] +[assembly: InternalsVisibleTo("osu.Game.Rulesets.Mania.Tests.Android")] diff --git a/osu.Game.Rulesets.Osu/Properties/AssemblyInfo.cs b/osu.Game.Rulesets.Osu/Properties/AssemblyInfo.cs index b61c53be6a..5a41b60a03 100644 --- a/osu.Game.Rulesets.Osu/Properties/AssemblyInfo.cs +++ b/osu.Game.Rulesets.Osu/Properties/AssemblyInfo.cs @@ -9,3 +9,4 @@ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("osu.Game.Rulesets.Osu.Tests")] [assembly: InternalsVisibleTo("osu.Game.Rulesets.Osu.Tests.Dynamic")] +[assembly: InternalsVisibleTo("osu.Game.Rulesets.Osu.Tests.Android")] diff --git a/osu.Game.Rulesets.Taiko/Properties/AssemblyInfo.cs b/osu.Game.Rulesets.Taiko/Properties/AssemblyInfo.cs index 26f70bc927..ae7a113f7e 100644 --- a/osu.Game.Rulesets.Taiko/Properties/AssemblyInfo.cs +++ b/osu.Game.Rulesets.Taiko/Properties/AssemblyInfo.cs @@ -9,3 +9,4 @@ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("osu.Game.Rulesets.Taiko.Tests")] [assembly: InternalsVisibleTo("osu.Game.Rulesets.Taiko.Tests.Dynamic")] +[assembly: InternalsVisibleTo("osu.Game.Rulesets.Taiko.Tests.Android")] From bf78c93346ff6c54c6e96311b824735f953a8a0a Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Sun, 6 Jan 2019 00:06:00 -0600 Subject: [PATCH 020/267] Cleanup Android manifest files --- .../Properties/AndroidManifest.xml | 3 +-- .../Properties/AndroidManifest.xml | 3 +-- .../Properties/AndroidManifest.xml | 3 +-- .../Properties/AndroidManifest.xml | 3 +-- osu.Game.Tests.Android/Properties/AndroidManifest.xml | 2 +- 5 files changed, 5 insertions(+), 9 deletions(-) diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Rulesets.Catch.Tests.Android/Properties/AndroidManifest.xml index 6c8c0935b2..e22c571991 100644 --- a/osu.Game.Rulesets.Catch.Tests.Android/Properties/AndroidManifest.xml +++ b/osu.Game.Rulesets.Catch.Tests.Android/Properties/AndroidManifest.xml @@ -4,6 +4,5 @@ android:versionName="1.0" package="osu.Game.Rulesets.Catch.Tests.Android.osu.Game.Rulesets.Catch.Tests.Android"> - - + diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Rulesets.Mania.Tests.Android/Properties/AndroidManifest.xml index 6ffcfe16f7..a36d279391 100644 --- a/osu.Game.Rulesets.Mania.Tests.Android/Properties/AndroidManifest.xml +++ b/osu.Game.Rulesets.Mania.Tests.Android/Properties/AndroidManifest.xml @@ -4,6 +4,5 @@ android:versionName="1.0" package="osu.Game.Rulesets.Mania.Tests.Android.osu.Game.Rulesets.Mania.Tests.Android"> - - + diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Rulesets.Osu.Tests.Android/Properties/AndroidManifest.xml index 05da9d02f7..a10763a5ed 100644 --- a/osu.Game.Rulesets.Osu.Tests.Android/Properties/AndroidManifest.xml +++ b/osu.Game.Rulesets.Osu.Tests.Android/Properties/AndroidManifest.xml @@ -4,6 +4,5 @@ android:versionName="1.0" package="osu.Game.Rulesets.Osu.Tests.Android.osu.Game.Rulesets.Osu.Tests.Android"> - - + diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AndroidManifest.xml index 9b5e759012..d9df277133 100644 --- a/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AndroidManifest.xml +++ b/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AndroidManifest.xml @@ -4,6 +4,5 @@ android:versionName="1.0" package="osu.Game.Rulesets.Taiko.Tests.Android.osu.Game.Rulesets.Taiko.Tests.Android"> - - + diff --git a/osu.Game.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Tests.Android/Properties/AndroidManifest.xml index fda3bdafab..20060728da 100644 --- a/osu.Game.Tests.Android/Properties/AndroidManifest.xml +++ b/osu.Game.Tests.Android/Properties/AndroidManifest.xml @@ -1,5 +1,5 @@  - + \ No newline at end of file From c2a52b56e7e0b04cdcffb3e3543a46ee8b40577e Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Sun, 6 Jan 2019 12:01:50 -0600 Subject: [PATCH 021/267] Set app name and reset default namespace --- .../Properties/AndroidManifest.xml | 11 ++++------- .../osu.Game.Rulesets.Catch.Tests.Android.csproj | 2 +- .../Properties/AndroidManifest.xml | 11 ++++------- .../osu.Game.Rulesets.Mania.Tests.Android.csproj | 2 +- .../Properties/AndroidManifest.xml | 11 ++++------- .../osu.Game.Rulesets.Osu.Tests.Android.csproj | 2 +- .../Properties/AndroidManifest.xml | 11 ++++------- .../osu.Game.Rulesets.Taiko.Tests.Android.csproj | 2 +- osu.Game.Tests.Android/Properties/AndroidManifest.xml | 2 +- 9 files changed, 21 insertions(+), 33 deletions(-) diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Rulesets.Catch.Tests.Android/Properties/AndroidManifest.xml index e22c571991..b04b0718f5 100644 --- a/osu.Game.Rulesets.Catch.Tests.Android/Properties/AndroidManifest.xml +++ b/osu.Game.Rulesets.Catch.Tests.Android/Properties/AndroidManifest.xml @@ -1,8 +1,5 @@  - - - - + + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj b/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj index e4140374cc..591f4cbc31 100644 --- a/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj +++ b/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj @@ -10,7 +10,7 @@ {122416d6-6b49-4ee2-a1e8-b825f31c79fe} Library Properties - osu.Game.Rulesets.Catch.Tests.Android + osu.Game.Rulesets.Catch.Tests osu.Game.Rulesets.Catch.Tests.Android 512 True diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Rulesets.Mania.Tests.Android/Properties/AndroidManifest.xml index a36d279391..c315581606 100644 --- a/osu.Game.Rulesets.Mania.Tests.Android/Properties/AndroidManifest.xml +++ b/osu.Game.Rulesets.Mania.Tests.Android/Properties/AndroidManifest.xml @@ -1,8 +1,5 @@  - - - - + + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj b/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj index 8b2cc5f55b..5faf9f747d 100644 --- a/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj +++ b/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj @@ -10,7 +10,7 @@ {122416d6-6b49-4ee2-a1e8-b825f31c79fe} Library Properties - osu.Game.Rulesets.Mania.Tests.Android + osu.Game.Rulesets.Mania.Tests osu.Game.Rulesets.Mania.Tests.Android 512 True diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Rulesets.Osu.Tests.Android/Properties/AndroidManifest.xml index a10763a5ed..dac9c19477 100644 --- a/osu.Game.Rulesets.Osu.Tests.Android/Properties/AndroidManifest.xml +++ b/osu.Game.Rulesets.Osu.Tests.Android/Properties/AndroidManifest.xml @@ -1,8 +1,5 @@  - - - - + + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj b/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj index a8d6b631cc..f99aa61f01 100644 --- a/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj +++ b/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj @@ -10,7 +10,7 @@ {122416d6-6b49-4ee2-a1e8-b825f31c79fe} Library Properties - osu.Game.Rulesets.Osu.Tests.Android + osu.Game.Rulesets.Osu.Tests osu.Game.Rulesets.Osu.Tests.Android 512 True diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AndroidManifest.xml index d9df277133..f731042a4c 100644 --- a/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AndroidManifest.xml +++ b/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AndroidManifest.xml @@ -1,8 +1,5 @@  - - - - + + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj b/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj index 2dc5cc37c1..defeab5a64 100644 --- a/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj +++ b/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj @@ -10,7 +10,7 @@ {122416d6-6b49-4ee2-a1e8-b825f31c79fe} Library Properties - osu.Game.Rulesets.Taiko.Tests.Android + osu.Game.Rulesets.Taiko.Tests osu.Game.Rulesets.Taiko.Tests.Android 512 True diff --git a/osu.Game.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Tests.Android/Properties/AndroidManifest.xml index 20060728da..146f96c2a3 100644 --- a/osu.Game.Tests.Android/Properties/AndroidManifest.xml +++ b/osu.Game.Tests.Android/Properties/AndroidManifest.xml @@ -1,5 +1,5 @@  - + \ No newline at end of file From 48686bdb301ba2876324393ecfa18ac6383539cd Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Sun, 6 Jan 2019 18:18:11 -0600 Subject: [PATCH 022/267] Fix osu.Android Android manifest --- osu.Android/Properties/AndroidManifest.xml | 2 +- osu.Android/Resources/Resource.designer.cs | 6424 +------------------- 2 files changed, 15 insertions(+), 6411 deletions(-) diff --git a/osu.Android/Properties/AndroidManifest.xml b/osu.Android/Properties/AndroidManifest.xml index 76cb58969f..bb5f9b751e 100644 --- a/osu.Android/Properties/AndroidManifest.xml +++ b/osu.Android/Properties/AndroidManifest.xml @@ -5,5 +5,5 @@ - + \ No newline at end of file diff --git a/osu.Android/Resources/Resource.designer.cs b/osu.Android/Resources/Resource.designer.cs index ed8407c130..c02df072f1 100644 --- a/osu.Android/Resources/Resource.designer.cs +++ b/osu.Android/Resources/Resource.designer.cs @@ -28,1124 +28,9 @@ namespace osu.Android { } - public partial class Animation - { - - // aapt resource value: 0x7f050000 - public const int abc_fade_in = 2131034112; - - // aapt resource value: 0x7f050001 - public const int abc_fade_out = 2131034113; - - // aapt resource value: 0x7f050002 - public const int abc_grow_fade_in_from_bottom = 2131034114; - - // aapt resource value: 0x7f050003 - public const int abc_popup_enter = 2131034115; - - // aapt resource value: 0x7f050004 - public const int abc_popup_exit = 2131034116; - - // aapt resource value: 0x7f050005 - public const int abc_shrink_fade_out_from_bottom = 2131034117; - - // aapt resource value: 0x7f050006 - public const int abc_slide_in_bottom = 2131034118; - - // aapt resource value: 0x7f050007 - public const int abc_slide_in_top = 2131034119; - - // aapt resource value: 0x7f050008 - public const int abc_slide_out_bottom = 2131034120; - - // aapt resource value: 0x7f050009 - public const int abc_slide_out_top = 2131034121; - - // aapt resource value: 0x7f05000a - public const int design_bottom_sheet_slide_in = 2131034122; - - // aapt resource value: 0x7f05000b - public const int design_bottom_sheet_slide_out = 2131034123; - - // aapt resource value: 0x7f05000c - public const int design_snackbar_in = 2131034124; - - // aapt resource value: 0x7f05000d - public const int design_snackbar_out = 2131034125; - - // aapt resource value: 0x7f05000e - public const int tooltip_enter = 2131034126; - - // aapt resource value: 0x7f05000f - public const int tooltip_exit = 2131034127; - - static Animation() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Animation() - { - } - } - - public partial class Animator - { - - // aapt resource value: 0x7f060000 - public const int design_appbar_state_list_animator = 2131099648; - - static Animator() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Animator() - { - } - } - public partial class Attribute { - // aapt resource value: 0x7f010052 - public const int actionBarDivider = 2130772050; - - // aapt resource value: 0x7f010053 - public const int actionBarItemBackground = 2130772051; - - // aapt resource value: 0x7f01004c - public const int actionBarPopupTheme = 2130772044; - - // aapt resource value: 0x7f010051 - public const int actionBarSize = 2130772049; - - // aapt resource value: 0x7f01004e - public const int actionBarSplitStyle = 2130772046; - - // aapt resource value: 0x7f01004d - public const int actionBarStyle = 2130772045; - - // aapt resource value: 0x7f010048 - public const int actionBarTabBarStyle = 2130772040; - - // aapt resource value: 0x7f010047 - public const int actionBarTabStyle = 2130772039; - - // aapt resource value: 0x7f010049 - public const int actionBarTabTextStyle = 2130772041; - - // aapt resource value: 0x7f01004f - public const int actionBarTheme = 2130772047; - - // aapt resource value: 0x7f010050 - public const int actionBarWidgetTheme = 2130772048; - - // aapt resource value: 0x7f01006d - public const int actionButtonStyle = 2130772077; - - // aapt resource value: 0x7f010069 - public const int actionDropDownStyle = 2130772073; - - // aapt resource value: 0x7f0100c4 - public const int actionLayout = 2130772164; - - // aapt resource value: 0x7f010054 - public const int actionMenuTextAppearance = 2130772052; - - // aapt resource value: 0x7f010055 - public const int actionMenuTextColor = 2130772053; - - // aapt resource value: 0x7f010058 - public const int actionModeBackground = 2130772056; - - // aapt resource value: 0x7f010057 - public const int actionModeCloseButtonStyle = 2130772055; - - // aapt resource value: 0x7f01005a - public const int actionModeCloseDrawable = 2130772058; - - // aapt resource value: 0x7f01005c - public const int actionModeCopyDrawable = 2130772060; - - // aapt resource value: 0x7f01005b - public const int actionModeCutDrawable = 2130772059; - - // aapt resource value: 0x7f010060 - public const int actionModeFindDrawable = 2130772064; - - // aapt resource value: 0x7f01005d - public const int actionModePasteDrawable = 2130772061; - - // aapt resource value: 0x7f010062 - public const int actionModePopupWindowStyle = 2130772066; - - // aapt resource value: 0x7f01005e - public const int actionModeSelectAllDrawable = 2130772062; - - // aapt resource value: 0x7f01005f - public const int actionModeShareDrawable = 2130772063; - - // aapt resource value: 0x7f010059 - public const int actionModeSplitBackground = 2130772057; - - // aapt resource value: 0x7f010056 - public const int actionModeStyle = 2130772054; - - // aapt resource value: 0x7f010061 - public const int actionModeWebSearchDrawable = 2130772065; - - // aapt resource value: 0x7f01004a - public const int actionOverflowButtonStyle = 2130772042; - - // aapt resource value: 0x7f01004b - public const int actionOverflowMenuStyle = 2130772043; - - // aapt resource value: 0x7f0100c6 - public const int actionProviderClass = 2130772166; - - // aapt resource value: 0x7f0100c5 - public const int actionViewClass = 2130772165; - - // aapt resource value: 0x7f010075 - public const int activityChooserViewStyle = 2130772085; - - // aapt resource value: 0x7f01009a - public const int alertDialogButtonGroupStyle = 2130772122; - - // aapt resource value: 0x7f01009b - public const int alertDialogCenterButtons = 2130772123; - - // aapt resource value: 0x7f010099 - public const int alertDialogStyle = 2130772121; - - // aapt resource value: 0x7f01009c - public const int alertDialogTheme = 2130772124; - - // aapt resource value: 0x7f0100b2 - public const int allowStacking = 2130772146; - - // aapt resource value: 0x7f0100b3 - public const int alpha = 2130772147; - - // aapt resource value: 0x7f0100c1 - public const int alphabeticModifiers = 2130772161; - - // aapt resource value: 0x7f0100ba - public const int arrowHeadLength = 2130772154; - - // aapt resource value: 0x7f0100bb - public const int arrowShaftLength = 2130772155; - - // aapt resource value: 0x7f0100a1 - public const int autoCompleteTextViewStyle = 2130772129; - - // aapt resource value: 0x7f01003b - public const int autoSizeMaxTextSize = 2130772027; - - // aapt resource value: 0x7f01003a - public const int autoSizeMinTextSize = 2130772026; - - // aapt resource value: 0x7f010039 - public const int autoSizePresetSizes = 2130772025; - - // aapt resource value: 0x7f010038 - public const int autoSizeStepGranularity = 2130772024; - - // aapt resource value: 0x7f010037 - public const int autoSizeTextType = 2130772023; - - // aapt resource value: 0x7f010015 - public const int background = 2130771989; - - // aapt resource value: 0x7f010017 - public const int backgroundSplit = 2130771991; - - // aapt resource value: 0x7f010016 - public const int backgroundStacked = 2130771990; - - // aapt resource value: 0x7f0100fd - public const int backgroundTint = 2130772221; - - // aapt resource value: 0x7f0100fe - public const int backgroundTintMode = 2130772222; - - // aapt resource value: 0x7f0100bc - public const int barLength = 2130772156; - - // aapt resource value: 0x7f010128 - public const int behavior_autoHide = 2130772264; - - // aapt resource value: 0x7f010105 - public const int behavior_hideable = 2130772229; - - // aapt resource value: 0x7f010131 - public const int behavior_overlapTop = 2130772273; - - // aapt resource value: 0x7f010104 - public const int behavior_peekHeight = 2130772228; - - // aapt resource value: 0x7f010106 - public const int behavior_skipCollapsed = 2130772230; - - // aapt resource value: 0x7f010126 - public const int borderWidth = 2130772262; - - // aapt resource value: 0x7f010072 - public const int borderlessButtonStyle = 2130772082; - - // aapt resource value: 0x7f010120 - public const int bottomSheetDialogTheme = 2130772256; - - // aapt resource value: 0x7f010121 - public const int bottomSheetStyle = 2130772257; - - // aapt resource value: 0x7f01006f - public const int buttonBarButtonStyle = 2130772079; - - // aapt resource value: 0x7f01009f - public const int buttonBarNegativeButtonStyle = 2130772127; - - // aapt resource value: 0x7f0100a0 - public const int buttonBarNeutralButtonStyle = 2130772128; - - // aapt resource value: 0x7f01009e - public const int buttonBarPositiveButtonStyle = 2130772126; - - // aapt resource value: 0x7f01006e - public const int buttonBarStyle = 2130772078; - - // aapt resource value: 0x7f0100f2 - public const int buttonGravity = 2130772210; - - // aapt resource value: 0x7f01002a - public const int buttonPanelSideLayout = 2130772010; - - // aapt resource value: 0x7f0100a2 - public const int buttonStyle = 2130772130; - - // aapt resource value: 0x7f0100a3 - public const int buttonStyleSmall = 2130772131; - - // aapt resource value: 0x7f0100b4 - public const int buttonTint = 2130772148; - - // aapt resource value: 0x7f0100b5 - public const int buttonTintMode = 2130772149; - - // aapt resource value: 0x7f0100a4 - public const int checkboxStyle = 2130772132; - - // aapt resource value: 0x7f0100a5 - public const int checkedTextViewStyle = 2130772133; - - // aapt resource value: 0x7f0100d5 - public const int closeIcon = 2130772181; - - // aapt resource value: 0x7f010027 - public const int closeItemLayout = 2130772007; - - // aapt resource value: 0x7f0100f4 - public const int collapseContentDescription = 2130772212; - - // aapt resource value: 0x7f0100f3 - public const int collapseIcon = 2130772211; - - // aapt resource value: 0x7f010113 - public const int collapsedTitleGravity = 2130772243; - - // aapt resource value: 0x7f01010d - public const int collapsedTitleTextAppearance = 2130772237; - - // aapt resource value: 0x7f0100b6 - public const int color = 2130772150; - - // aapt resource value: 0x7f010091 - public const int colorAccent = 2130772113; - - // aapt resource value: 0x7f010098 - public const int colorBackgroundFloating = 2130772120; - - // aapt resource value: 0x7f010095 - public const int colorButtonNormal = 2130772117; - - // aapt resource value: 0x7f010093 - public const int colorControlActivated = 2130772115; - - // aapt resource value: 0x7f010094 - public const int colorControlHighlight = 2130772116; - - // aapt resource value: 0x7f010092 - public const int colorControlNormal = 2130772114; - - // aapt resource value: 0x7f0100b1 - public const int colorError = 2130772145; - - // aapt resource value: 0x7f01008f - public const int colorPrimary = 2130772111; - - // aapt resource value: 0x7f010090 - public const int colorPrimaryDark = 2130772112; - - // aapt resource value: 0x7f010096 - public const int colorSwitchThumbNormal = 2130772118; - - // aapt resource value: 0x7f0100da - public const int commitIcon = 2130772186; - - // aapt resource value: 0x7f0100c7 - public const int contentDescription = 2130772167; - - // aapt resource value: 0x7f010020 - public const int contentInsetEnd = 2130772000; - - // aapt resource value: 0x7f010024 - public const int contentInsetEndWithActions = 2130772004; - - // aapt resource value: 0x7f010021 - public const int contentInsetLeft = 2130772001; - - // aapt resource value: 0x7f010022 - public const int contentInsetRight = 2130772002; - - // aapt resource value: 0x7f01001f - public const int contentInsetStart = 2130771999; - - // aapt resource value: 0x7f010023 - public const int contentInsetStartWithNavigation = 2130772003; - - // aapt resource value: 0x7f01010e - public const int contentScrim = 2130772238; - - // aapt resource value: 0x7f010097 - public const int controlBackground = 2130772119; - - // aapt resource value: 0x7f010147 - public const int counterEnabled = 2130772295; - - // aapt resource value: 0x7f010148 - public const int counterMaxLength = 2130772296; - - // aapt resource value: 0x7f01014a - public const int counterOverflowTextAppearance = 2130772298; - - // aapt resource value: 0x7f010149 - public const int counterTextAppearance = 2130772297; - - // aapt resource value: 0x7f010018 - public const int customNavigationLayout = 2130771992; - - // aapt resource value: 0x7f0100d4 - public const int defaultQueryHint = 2130772180; - - // aapt resource value: 0x7f010067 - public const int dialogPreferredPadding = 2130772071; - - // aapt resource value: 0x7f010066 - public const int dialogTheme = 2130772070; - - // aapt resource value: 0x7f01000e - public const int displayOptions = 2130771982; - - // aapt resource value: 0x7f010014 - public const int divider = 2130771988; - - // aapt resource value: 0x7f010074 - public const int dividerHorizontal = 2130772084; - - // aapt resource value: 0x7f0100c0 - public const int dividerPadding = 2130772160; - - // aapt resource value: 0x7f010073 - public const int dividerVertical = 2130772083; - - // aapt resource value: 0x7f0100b8 - public const int drawableSize = 2130772152; - - // aapt resource value: 0x7f010009 - public const int drawerArrowStyle = 2130771977; - - // aapt resource value: 0x7f010086 - public const int dropDownListViewStyle = 2130772102; - - // aapt resource value: 0x7f01006a - public const int dropdownListPreferredItemHeight = 2130772074; - - // aapt resource value: 0x7f01007b - public const int editTextBackground = 2130772091; - - // aapt resource value: 0x7f01007a - public const int editTextColor = 2130772090; - - // aapt resource value: 0x7f0100a6 - public const int editTextStyle = 2130772134; - - // aapt resource value: 0x7f010025 - public const int elevation = 2130772005; - - // aapt resource value: 0x7f010145 - public const int errorEnabled = 2130772293; - - // aapt resource value: 0x7f010146 - public const int errorTextAppearance = 2130772294; - - // aapt resource value: 0x7f010029 - public const int expandActivityOverflowButtonDrawable = 2130772009; - - // aapt resource value: 0x7f0100ff - public const int expanded = 2130772223; - - // aapt resource value: 0x7f010114 - public const int expandedTitleGravity = 2130772244; - - // aapt resource value: 0x7f010107 - public const int expandedTitleMargin = 2130772231; - - // aapt resource value: 0x7f01010b - public const int expandedTitleMarginBottom = 2130772235; - - // aapt resource value: 0x7f01010a - public const int expandedTitleMarginEnd = 2130772234; - - // aapt resource value: 0x7f010108 - public const int expandedTitleMarginStart = 2130772232; - - // aapt resource value: 0x7f010109 - public const int expandedTitleMarginTop = 2130772233; - - // aapt resource value: 0x7f01010c - public const int expandedTitleTextAppearance = 2130772236; - - // aapt resource value: 0x7f010124 - public const int fabSize = 2130772260; - - // aapt resource value: 0x7f010004 - public const int fastScrollEnabled = 2130771972; - - // aapt resource value: 0x7f010007 - public const int fastScrollHorizontalThumbDrawable = 2130771975; - - // aapt resource value: 0x7f010008 - public const int fastScrollHorizontalTrackDrawable = 2130771976; - - // aapt resource value: 0x7f010005 - public const int fastScrollVerticalThumbDrawable = 2130771973; - - // aapt resource value: 0x7f010006 - public const int fastScrollVerticalTrackDrawable = 2130771974; - - // aapt resource value: 0x7f010158 - public const int font = 2130772312; - - // aapt resource value: 0x7f01003c - public const int fontFamily = 2130772028; - - // aapt resource value: 0x7f010151 - public const int fontProviderAuthority = 2130772305; - - // aapt resource value: 0x7f010154 - public const int fontProviderCerts = 2130772308; - - // aapt resource value: 0x7f010155 - public const int fontProviderFetchStrategy = 2130772309; - - // aapt resource value: 0x7f010156 - public const int fontProviderFetchTimeout = 2130772310; - - // aapt resource value: 0x7f010152 - public const int fontProviderPackage = 2130772306; - - // aapt resource value: 0x7f010153 - public const int fontProviderQuery = 2130772307; - - // aapt resource value: 0x7f010157 - public const int fontStyle = 2130772311; - - // aapt resource value: 0x7f010159 - public const int fontWeight = 2130772313; - - // aapt resource value: 0x7f010129 - public const int foregroundInsidePadding = 2130772265; - - // aapt resource value: 0x7f0100b9 - public const int gapBetweenBars = 2130772153; - - // aapt resource value: 0x7f0100d6 - public const int goIcon = 2130772182; - - // aapt resource value: 0x7f01012f - public const int headerLayout = 2130772271; - - // aapt resource value: 0x7f01000a - public const int height = 2130771978; - - // aapt resource value: 0x7f01001e - public const int hideOnContentScroll = 2130771998; - - // aapt resource value: 0x7f01014b - public const int hintAnimationEnabled = 2130772299; - - // aapt resource value: 0x7f010144 - public const int hintEnabled = 2130772292; - - // aapt resource value: 0x7f010143 - public const int hintTextAppearance = 2130772291; - - // aapt resource value: 0x7f01006c - public const int homeAsUpIndicator = 2130772076; - - // aapt resource value: 0x7f010019 - public const int homeLayout = 2130771993; - - // aapt resource value: 0x7f010012 - public const int icon = 2130771986; - - // aapt resource value: 0x7f0100c9 - public const int iconTint = 2130772169; - - // aapt resource value: 0x7f0100ca - public const int iconTintMode = 2130772170; - - // aapt resource value: 0x7f0100d2 - public const int iconifiedByDefault = 2130772178; - - // aapt resource value: 0x7f01007c - public const int imageButtonStyle = 2130772092; - - // aapt resource value: 0x7f01001b - public const int indeterminateProgressStyle = 2130771995; - - // aapt resource value: 0x7f010028 - public const int initialActivityCount = 2130772008; - - // aapt resource value: 0x7f010130 - public const int insetForeground = 2130772272; - - // aapt resource value: 0x7f01000b - public const int isLightTheme = 2130771979; - - // aapt resource value: 0x7f01012d - public const int itemBackground = 2130772269; - - // aapt resource value: 0x7f01012b - public const int itemIconTint = 2130772267; - - // aapt resource value: 0x7f01001d - public const int itemPadding = 2130771997; - - // aapt resource value: 0x7f01012e - public const int itemTextAppearance = 2130772270; - - // aapt resource value: 0x7f01012c - public const int itemTextColor = 2130772268; - - // aapt resource value: 0x7f010118 - public const int keylines = 2130772248; - - // aapt resource value: 0x7f0100d1 - public const int layout = 2130772177; - - // aapt resource value: 0x7f010000 - public const int layoutManager = 2130771968; - - // aapt resource value: 0x7f01011b - public const int layout_anchor = 2130772251; - - // aapt resource value: 0x7f01011d - public const int layout_anchorGravity = 2130772253; - - // aapt resource value: 0x7f01011a - public const int layout_behavior = 2130772250; - - // aapt resource value: 0x7f010116 - public const int layout_collapseMode = 2130772246; - - // aapt resource value: 0x7f010117 - public const int layout_collapseParallaxMultiplier = 2130772247; - - // aapt resource value: 0x7f01011f - public const int layout_dodgeInsetEdges = 2130772255; - - // aapt resource value: 0x7f01011e - public const int layout_insetEdge = 2130772254; - - // aapt resource value: 0x7f01011c - public const int layout_keyline = 2130772252; - - // aapt resource value: 0x7f010102 - public const int layout_scrollFlags = 2130772226; - - // aapt resource value: 0x7f010103 - public const int layout_scrollInterpolator = 2130772227; - - // aapt resource value: 0x7f01008e - public const int listChoiceBackgroundIndicator = 2130772110; - - // aapt resource value: 0x7f010068 - public const int listDividerAlertDialog = 2130772072; - - // aapt resource value: 0x7f01002e - public const int listItemLayout = 2130772014; - - // aapt resource value: 0x7f01002b - public const int listLayout = 2130772011; - - // aapt resource value: 0x7f0100ae - public const int listMenuViewStyle = 2130772142; - - // aapt resource value: 0x7f010087 - public const int listPopupWindowStyle = 2130772103; - - // aapt resource value: 0x7f010081 - public const int listPreferredItemHeight = 2130772097; - - // aapt resource value: 0x7f010083 - public const int listPreferredItemHeightLarge = 2130772099; - - // aapt resource value: 0x7f010082 - public const int listPreferredItemHeightSmall = 2130772098; - - // aapt resource value: 0x7f010084 - public const int listPreferredItemPaddingLeft = 2130772100; - - // aapt resource value: 0x7f010085 - public const int listPreferredItemPaddingRight = 2130772101; - - // aapt resource value: 0x7f010013 - public const int logo = 2130771987; - - // aapt resource value: 0x7f0100f7 - public const int logoDescription = 2130772215; - - // aapt resource value: 0x7f010132 - public const int maxActionInlineWidth = 2130772274; - - // aapt resource value: 0x7f0100f1 - public const int maxButtonHeight = 2130772209; - - // aapt resource value: 0x7f0100be - public const int measureWithLargestChild = 2130772158; - - // aapt resource value: 0x7f01012a - public const int menu = 2130772266; - - // aapt resource value: 0x7f01002c - public const int multiChoiceItemLayout = 2130772012; - - // aapt resource value: 0x7f0100f6 - public const int navigationContentDescription = 2130772214; - - // aapt resource value: 0x7f0100f5 - public const int navigationIcon = 2130772213; - - // aapt resource value: 0x7f01000d - public const int navigationMode = 2130771981; - - // aapt resource value: 0x7f0100c2 - public const int numericModifiers = 2130772162; - - // aapt resource value: 0x7f0100cd - public const int overlapAnchor = 2130772173; - - // aapt resource value: 0x7f0100cf - public const int paddingBottomNoButtons = 2130772175; - - // aapt resource value: 0x7f0100fb - public const int paddingEnd = 2130772219; - - // aapt resource value: 0x7f0100fa - public const int paddingStart = 2130772218; - - // aapt resource value: 0x7f0100d0 - public const int paddingTopNoTitle = 2130772176; - - // aapt resource value: 0x7f01008b - public const int panelBackground = 2130772107; - - // aapt resource value: 0x7f01008d - public const int panelMenuListTheme = 2130772109; - - // aapt resource value: 0x7f01008c - public const int panelMenuListWidth = 2130772108; - - // aapt resource value: 0x7f01014e - public const int passwordToggleContentDescription = 2130772302; - - // aapt resource value: 0x7f01014d - public const int passwordToggleDrawable = 2130772301; - - // aapt resource value: 0x7f01014c - public const int passwordToggleEnabled = 2130772300; - - // aapt resource value: 0x7f01014f - public const int passwordToggleTint = 2130772303; - - // aapt resource value: 0x7f010150 - public const int passwordToggleTintMode = 2130772304; - - // aapt resource value: 0x7f010078 - public const int popupMenuStyle = 2130772088; - - // aapt resource value: 0x7f010026 - public const int popupTheme = 2130772006; - - // aapt resource value: 0x7f010079 - public const int popupWindowStyle = 2130772089; - - // aapt resource value: 0x7f0100cb - public const int preserveIconSpacing = 2130772171; - - // aapt resource value: 0x7f010125 - public const int pressedTranslationZ = 2130772261; - - // aapt resource value: 0x7f01001c - public const int progressBarPadding = 2130771996; - - // aapt resource value: 0x7f01001a - public const int progressBarStyle = 2130771994; - - // aapt resource value: 0x7f0100dc - public const int queryBackground = 2130772188; - - // aapt resource value: 0x7f0100d3 - public const int queryHint = 2130772179; - - // aapt resource value: 0x7f0100a7 - public const int radioButtonStyle = 2130772135; - - // aapt resource value: 0x7f0100a8 - public const int ratingBarStyle = 2130772136; - - // aapt resource value: 0x7f0100a9 - public const int ratingBarStyleIndicator = 2130772137; - - // aapt resource value: 0x7f0100aa - public const int ratingBarStyleSmall = 2130772138; - - // aapt resource value: 0x7f010002 - public const int reverseLayout = 2130771970; - - // aapt resource value: 0x7f010123 - public const int rippleColor = 2130772259; - - // aapt resource value: 0x7f010112 - public const int scrimAnimationDuration = 2130772242; - - // aapt resource value: 0x7f010111 - public const int scrimVisibleHeightTrigger = 2130772241; - - // aapt resource value: 0x7f0100d8 - public const int searchHintIcon = 2130772184; - - // aapt resource value: 0x7f0100d7 - public const int searchIcon = 2130772183; - - // aapt resource value: 0x7f010080 - public const int searchViewStyle = 2130772096; - - // aapt resource value: 0x7f0100ab - public const int seekBarStyle = 2130772139; - - // aapt resource value: 0x7f010070 - public const int selectableItemBackground = 2130772080; - - // aapt resource value: 0x7f010071 - public const int selectableItemBackgroundBorderless = 2130772081; - - // aapt resource value: 0x7f0100c3 - public const int showAsAction = 2130772163; - - // aapt resource value: 0x7f0100bf - public const int showDividers = 2130772159; - - // aapt resource value: 0x7f0100e8 - public const int showText = 2130772200; - - // aapt resource value: 0x7f01002f - public const int showTitle = 2130772015; - - // aapt resource value: 0x7f01002d - public const int singleChoiceItemLayout = 2130772013; - - // aapt resource value: 0x7f010001 - public const int spanCount = 2130771969; - - // aapt resource value: 0x7f0100b7 - public const int spinBars = 2130772151; - - // aapt resource value: 0x7f01006b - public const int spinnerDropDownItemStyle = 2130772075; - - // aapt resource value: 0x7f0100ac - public const int spinnerStyle = 2130772140; - - // aapt resource value: 0x7f0100e7 - public const int splitTrack = 2130772199; - - // aapt resource value: 0x7f010030 - public const int srcCompat = 2130772016; - - // aapt resource value: 0x7f010003 - public const int stackFromEnd = 2130771971; - - // aapt resource value: 0x7f0100ce - public const int state_above_anchor = 2130772174; - - // aapt resource value: 0x7f010100 - public const int state_collapsed = 2130772224; - - // aapt resource value: 0x7f010101 - public const int state_collapsible = 2130772225; - - // aapt resource value: 0x7f010119 - public const int statusBarBackground = 2130772249; - - // aapt resource value: 0x7f01010f - public const int statusBarScrim = 2130772239; - - // aapt resource value: 0x7f0100cc - public const int subMenuArrow = 2130772172; - - // aapt resource value: 0x7f0100dd - public const int submitBackground = 2130772189; - - // aapt resource value: 0x7f01000f - public const int subtitle = 2130771983; - - // aapt resource value: 0x7f0100ea - public const int subtitleTextAppearance = 2130772202; - - // aapt resource value: 0x7f0100f9 - public const int subtitleTextColor = 2130772217; - - // aapt resource value: 0x7f010011 - public const int subtitleTextStyle = 2130771985; - - // aapt resource value: 0x7f0100db - public const int suggestionRowLayout = 2130772187; - - // aapt resource value: 0x7f0100e5 - public const int switchMinWidth = 2130772197; - - // aapt resource value: 0x7f0100e6 - public const int switchPadding = 2130772198; - - // aapt resource value: 0x7f0100ad - public const int switchStyle = 2130772141; - - // aapt resource value: 0x7f0100e4 - public const int switchTextAppearance = 2130772196; - - // aapt resource value: 0x7f010136 - public const int tabBackground = 2130772278; - - // aapt resource value: 0x7f010135 - public const int tabContentStart = 2130772277; - - // aapt resource value: 0x7f010138 - public const int tabGravity = 2130772280; - - // aapt resource value: 0x7f010133 - public const int tabIndicatorColor = 2130772275; - - // aapt resource value: 0x7f010134 - public const int tabIndicatorHeight = 2130772276; - - // aapt resource value: 0x7f01013a - public const int tabMaxWidth = 2130772282; - - // aapt resource value: 0x7f010139 - public const int tabMinWidth = 2130772281; - - // aapt resource value: 0x7f010137 - public const int tabMode = 2130772279; - - // aapt resource value: 0x7f010142 - public const int tabPadding = 2130772290; - - // aapt resource value: 0x7f010141 - public const int tabPaddingBottom = 2130772289; - - // aapt resource value: 0x7f010140 - public const int tabPaddingEnd = 2130772288; - - // aapt resource value: 0x7f01013e - public const int tabPaddingStart = 2130772286; - - // aapt resource value: 0x7f01013f - public const int tabPaddingTop = 2130772287; - - // aapt resource value: 0x7f01013d - public const int tabSelectedTextColor = 2130772285; - - // aapt resource value: 0x7f01013b - public const int tabTextAppearance = 2130772283; - - // aapt resource value: 0x7f01013c - public const int tabTextColor = 2130772284; - - // aapt resource value: 0x7f010036 - public const int textAllCaps = 2130772022; - - // aapt resource value: 0x7f010063 - public const int textAppearanceLargePopupMenu = 2130772067; - - // aapt resource value: 0x7f010088 - public const int textAppearanceListItem = 2130772104; - - // aapt resource value: 0x7f010089 - public const int textAppearanceListItemSecondary = 2130772105; - - // aapt resource value: 0x7f01008a - public const int textAppearanceListItemSmall = 2130772106; - - // aapt resource value: 0x7f010065 - public const int textAppearancePopupMenuHeader = 2130772069; - - // aapt resource value: 0x7f01007e - public const int textAppearanceSearchResultSubtitle = 2130772094; - - // aapt resource value: 0x7f01007d - public const int textAppearanceSearchResultTitle = 2130772093; - - // aapt resource value: 0x7f010064 - public const int textAppearanceSmallPopupMenu = 2130772068; - - // aapt resource value: 0x7f01009d - public const int textColorAlertDialogListItem = 2130772125; - - // aapt resource value: 0x7f010122 - public const int textColorError = 2130772258; - - // aapt resource value: 0x7f01007f - public const int textColorSearchUrl = 2130772095; - - // aapt resource value: 0x7f0100fc - public const int theme = 2130772220; - - // aapt resource value: 0x7f0100bd - public const int thickness = 2130772157; - - // aapt resource value: 0x7f0100e3 - public const int thumbTextPadding = 2130772195; - - // aapt resource value: 0x7f0100de - public const int thumbTint = 2130772190; - - // aapt resource value: 0x7f0100df - public const int thumbTintMode = 2130772191; - - // aapt resource value: 0x7f010033 - public const int tickMark = 2130772019; - - // aapt resource value: 0x7f010034 - public const int tickMarkTint = 2130772020; - - // aapt resource value: 0x7f010035 - public const int tickMarkTintMode = 2130772021; - - // aapt resource value: 0x7f010031 - public const int tint = 2130772017; - - // aapt resource value: 0x7f010032 - public const int tintMode = 2130772018; - - // aapt resource value: 0x7f01000c - public const int title = 2130771980; - - // aapt resource value: 0x7f010115 - public const int titleEnabled = 2130772245; - - // aapt resource value: 0x7f0100eb - public const int titleMargin = 2130772203; - - // aapt resource value: 0x7f0100ef - public const int titleMarginBottom = 2130772207; - - // aapt resource value: 0x7f0100ed - public const int titleMarginEnd = 2130772205; - - // aapt resource value: 0x7f0100ec - public const int titleMarginStart = 2130772204; - - // aapt resource value: 0x7f0100ee - public const int titleMarginTop = 2130772206; - - // aapt resource value: 0x7f0100f0 - public const int titleMargins = 2130772208; - - // aapt resource value: 0x7f0100e9 - public const int titleTextAppearance = 2130772201; - - // aapt resource value: 0x7f0100f8 - public const int titleTextColor = 2130772216; - - // aapt resource value: 0x7f010010 - public const int titleTextStyle = 2130771984; - - // aapt resource value: 0x7f010110 - public const int toolbarId = 2130772240; - - // aapt resource value: 0x7f010077 - public const int toolbarNavigationButtonStyle = 2130772087; - - // aapt resource value: 0x7f010076 - public const int toolbarStyle = 2130772086; - - // aapt resource value: 0x7f0100b0 - public const int tooltipForegroundColor = 2130772144; - - // aapt resource value: 0x7f0100af - public const int tooltipFrameBackground = 2130772143; - - // aapt resource value: 0x7f0100c8 - public const int tooltipText = 2130772168; - - // aapt resource value: 0x7f0100e0 - public const int track = 2130772192; - - // aapt resource value: 0x7f0100e1 - public const int trackTint = 2130772193; - - // aapt resource value: 0x7f0100e2 - public const int trackTintMode = 2130772194; - - // aapt resource value: 0x7f010127 - public const int useCompatPadding = 2130772263; - - // aapt resource value: 0x7f0100d9 - public const int voiceIcon = 2130772185; - - // aapt resource value: 0x7f01003d - public const int windowActionBar = 2130772029; - - // aapt resource value: 0x7f01003f - public const int windowActionBarOverlay = 2130772031; - - // aapt resource value: 0x7f010040 - public const int windowActionModeOverlay = 2130772032; - - // aapt resource value: 0x7f010044 - public const int windowFixedHeightMajor = 2130772036; - - // aapt resource value: 0x7f010042 - public const int windowFixedHeightMinor = 2130772034; - - // aapt resource value: 0x7f010041 - public const int windowFixedWidthMajor = 2130772033; - - // aapt resource value: 0x7f010043 - public const int windowFixedWidthMinor = 2130772035; - - // aapt resource value: 0x7f010045 - public const int windowMinWidthMajor = 2130772037; - - // aapt resource value: 0x7f010046 - public const int windowMinWidthMinor = 2130772038; - - // aapt resource value: 0x7f01003e - public const int windowNoTitle = 2130772030; - static Attribute() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); @@ -1156,333 +41,20 @@ namespace osu.Android } } - public partial class Boolean - { - - // aapt resource value: 0x7f0b0000 - public const int abc_action_bar_embed_tabs = 2131427328; - - // aapt resource value: 0x7f0b0001 - public const int abc_allow_stacked_button_bar = 2131427329; - - // aapt resource value: 0x7f0b0002 - public const int abc_config_actionMenuItemAllCaps = 2131427330; - - // aapt resource value: 0x7f0b0003 - public const int abc_config_closeDialogWhenTouchOutside = 2131427331; - - // aapt resource value: 0x7f0b0004 - public const int abc_config_showMenuShortcutsWhenKeyboardPresent = 2131427332; - - static Boolean() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Boolean() - { - } - } - public partial class Color { - // aapt resource value: 0x7f0c004b - public const int abc_background_cache_hint_selector_material_dark = 2131492939; + // aapt resource value: 0x7f030002 + public const int colorAccent = 2130903042; - // aapt resource value: 0x7f0c004c - public const int abc_background_cache_hint_selector_material_light = 2131492940; + // aapt resource value: 0x7f030000 + public const int colorPrimary = 2130903040; - // aapt resource value: 0x7f0c004d - public const int abc_btn_colored_borderless_text_material = 2131492941; + // aapt resource value: 0x7f030001 + public const int colorPrimaryDark = 2130903041; - // aapt resource value: 0x7f0c004e - public const int abc_btn_colored_text_material = 2131492942; - - // aapt resource value: 0x7f0c004f - public const int abc_color_highlight_material = 2131492943; - - // aapt resource value: 0x7f0c0050 - public const int abc_hint_foreground_material_dark = 2131492944; - - // aapt resource value: 0x7f0c0051 - public const int abc_hint_foreground_material_light = 2131492945; - - // aapt resource value: 0x7f0c0000 - public const int abc_input_method_navigation_guard = 2131492864; - - // aapt resource value: 0x7f0c0052 - public const int abc_primary_text_disable_only_material_dark = 2131492946; - - // aapt resource value: 0x7f0c0053 - public const int abc_primary_text_disable_only_material_light = 2131492947; - - // aapt resource value: 0x7f0c0054 - public const int abc_primary_text_material_dark = 2131492948; - - // aapt resource value: 0x7f0c0055 - public const int abc_primary_text_material_light = 2131492949; - - // aapt resource value: 0x7f0c0056 - public const int abc_search_url_text = 2131492950; - - // aapt resource value: 0x7f0c0001 - public const int abc_search_url_text_normal = 2131492865; - - // aapt resource value: 0x7f0c0002 - public const int abc_search_url_text_pressed = 2131492866; - - // aapt resource value: 0x7f0c0003 - public const int abc_search_url_text_selected = 2131492867; - - // aapt resource value: 0x7f0c0057 - public const int abc_secondary_text_material_dark = 2131492951; - - // aapt resource value: 0x7f0c0058 - public const int abc_secondary_text_material_light = 2131492952; - - // aapt resource value: 0x7f0c0059 - public const int abc_tint_btn_checkable = 2131492953; - - // aapt resource value: 0x7f0c005a - public const int abc_tint_default = 2131492954; - - // aapt resource value: 0x7f0c005b - public const int abc_tint_edittext = 2131492955; - - // aapt resource value: 0x7f0c005c - public const int abc_tint_seek_thumb = 2131492956; - - // aapt resource value: 0x7f0c005d - public const int abc_tint_spinner = 2131492957; - - // aapt resource value: 0x7f0c005e - public const int abc_tint_switch_track = 2131492958; - - // aapt resource value: 0x7f0c0004 - public const int accent_material_dark = 2131492868; - - // aapt resource value: 0x7f0c0005 - public const int accent_material_light = 2131492869; - - // aapt resource value: 0x7f0c0006 - public const int background_floating_material_dark = 2131492870; - - // aapt resource value: 0x7f0c0007 - public const int background_floating_material_light = 2131492871; - - // aapt resource value: 0x7f0c0008 - public const int background_material_dark = 2131492872; - - // aapt resource value: 0x7f0c0009 - public const int background_material_light = 2131492873; - - // aapt resource value: 0x7f0c000a - public const int bright_foreground_disabled_material_dark = 2131492874; - - // aapt resource value: 0x7f0c000b - public const int bright_foreground_disabled_material_light = 2131492875; - - // aapt resource value: 0x7f0c000c - public const int bright_foreground_inverse_material_dark = 2131492876; - - // aapt resource value: 0x7f0c000d - public const int bright_foreground_inverse_material_light = 2131492877; - - // aapt resource value: 0x7f0c000e - public const int bright_foreground_material_dark = 2131492878; - - // aapt resource value: 0x7f0c000f - public const int bright_foreground_material_light = 2131492879; - - // aapt resource value: 0x7f0c0010 - public const int button_material_dark = 2131492880; - - // aapt resource value: 0x7f0c0011 - public const int button_material_light = 2131492881; - - // aapt resource value: 0x7f0c0049 - public const int colorAccent = 2131492937; - - // aapt resource value: 0x7f0c0047 - public const int colorPrimary = 2131492935; - - // aapt resource value: 0x7f0c0048 - public const int colorPrimaryDark = 2131492936; - - // aapt resource value: 0x7f0c003c - public const int design_bottom_navigation_shadow_color = 2131492924; - - // aapt resource value: 0x7f0c005f - public const int design_error = 2131492959; - - // aapt resource value: 0x7f0c003d - public const int design_fab_shadow_end_color = 2131492925; - - // aapt resource value: 0x7f0c003e - public const int design_fab_shadow_mid_color = 2131492926; - - // aapt resource value: 0x7f0c003f - public const int design_fab_shadow_start_color = 2131492927; - - // aapt resource value: 0x7f0c0040 - public const int design_fab_stroke_end_inner_color = 2131492928; - - // aapt resource value: 0x7f0c0041 - public const int design_fab_stroke_end_outer_color = 2131492929; - - // aapt resource value: 0x7f0c0042 - public const int design_fab_stroke_top_inner_color = 2131492930; - - // aapt resource value: 0x7f0c0043 - public const int design_fab_stroke_top_outer_color = 2131492931; - - // aapt resource value: 0x7f0c0044 - public const int design_snackbar_background_color = 2131492932; - - // aapt resource value: 0x7f0c0060 - public const int design_tint_password_toggle = 2131492960; - - // aapt resource value: 0x7f0c0012 - public const int dim_foreground_disabled_material_dark = 2131492882; - - // aapt resource value: 0x7f0c0013 - public const int dim_foreground_disabled_material_light = 2131492883; - - // aapt resource value: 0x7f0c0014 - public const int dim_foreground_material_dark = 2131492884; - - // aapt resource value: 0x7f0c0015 - public const int dim_foreground_material_light = 2131492885; - - // aapt resource value: 0x7f0c0016 - public const int error_color_material = 2131492886; - - // aapt resource value: 0x7f0c0017 - public const int foreground_material_dark = 2131492887; - - // aapt resource value: 0x7f0c0018 - public const int foreground_material_light = 2131492888; - - // aapt resource value: 0x7f0c0019 - public const int highlighted_text_material_dark = 2131492889; - - // aapt resource value: 0x7f0c001a - public const int highlighted_text_material_light = 2131492890; - - // aapt resource value: 0x7f0c004a - public const int ic_launcher_background = 2131492938; - - // aapt resource value: 0x7f0c001b - public const int material_blue_grey_800 = 2131492891; - - // aapt resource value: 0x7f0c001c - public const int material_blue_grey_900 = 2131492892; - - // aapt resource value: 0x7f0c001d - public const int material_blue_grey_950 = 2131492893; - - // aapt resource value: 0x7f0c001e - public const int material_deep_teal_200 = 2131492894; - - // aapt resource value: 0x7f0c001f - public const int material_deep_teal_500 = 2131492895; - - // aapt resource value: 0x7f0c0020 - public const int material_grey_100 = 2131492896; - - // aapt resource value: 0x7f0c0021 - public const int material_grey_300 = 2131492897; - - // aapt resource value: 0x7f0c0022 - public const int material_grey_50 = 2131492898; - - // aapt resource value: 0x7f0c0023 - public const int material_grey_600 = 2131492899; - - // aapt resource value: 0x7f0c0024 - public const int material_grey_800 = 2131492900; - - // aapt resource value: 0x7f0c0025 - public const int material_grey_850 = 2131492901; - - // aapt resource value: 0x7f0c0026 - public const int material_grey_900 = 2131492902; - - // aapt resource value: 0x7f0c0045 - public const int notification_action_color_filter = 2131492933; - - // aapt resource value: 0x7f0c0046 - public const int notification_icon_bg_color = 2131492934; - - // aapt resource value: 0x7f0c003b - public const int notification_material_background_media_default_color = 2131492923; - - // aapt resource value: 0x7f0c0027 - public const int primary_dark_material_dark = 2131492903; - - // aapt resource value: 0x7f0c0028 - public const int primary_dark_material_light = 2131492904; - - // aapt resource value: 0x7f0c0029 - public const int primary_material_dark = 2131492905; - - // aapt resource value: 0x7f0c002a - public const int primary_material_light = 2131492906; - - // aapt resource value: 0x7f0c002b - public const int primary_text_default_material_dark = 2131492907; - - // aapt resource value: 0x7f0c002c - public const int primary_text_default_material_light = 2131492908; - - // aapt resource value: 0x7f0c002d - public const int primary_text_disabled_material_dark = 2131492909; - - // aapt resource value: 0x7f0c002e - public const int primary_text_disabled_material_light = 2131492910; - - // aapt resource value: 0x7f0c002f - public const int ripple_material_dark = 2131492911; - - // aapt resource value: 0x7f0c0030 - public const int ripple_material_light = 2131492912; - - // aapt resource value: 0x7f0c0031 - public const int secondary_text_default_material_dark = 2131492913; - - // aapt resource value: 0x7f0c0032 - public const int secondary_text_default_material_light = 2131492914; - - // aapt resource value: 0x7f0c0033 - public const int secondary_text_disabled_material_dark = 2131492915; - - // aapt resource value: 0x7f0c0034 - public const int secondary_text_disabled_material_light = 2131492916; - - // aapt resource value: 0x7f0c0035 - public const int switch_thumb_disabled_material_dark = 2131492917; - - // aapt resource value: 0x7f0c0036 - public const int switch_thumb_disabled_material_light = 2131492918; - - // aapt resource value: 0x7f0c0061 - public const int switch_thumb_material_dark = 2131492961; - - // aapt resource value: 0x7f0c0062 - public const int switch_thumb_material_light = 2131492962; - - // aapt resource value: 0x7f0c0037 - public const int switch_thumb_normal_material_dark = 2131492919; - - // aapt resource value: 0x7f0c0038 - public const int switch_thumb_normal_material_light = 2131492920; - - // aapt resource value: 0x7f0c0039 - public const int tooltip_background_dark = 2131492921; - - // aapt resource value: 0x7f0c003a - public const int tooltip_background_light = 2131492922; + // aapt resource value: 0x7f030003 + public const int ic_launcher_background = 2130903043; static Color() { @@ -1494,1624 +66,17 @@ namespace osu.Android } } - public partial class Dimension - { - - // aapt resource value: 0x7f070012 - public const int abc_action_bar_content_inset_material = 2131165202; - - // aapt resource value: 0x7f070013 - public const int abc_action_bar_content_inset_with_nav = 2131165203; - - // aapt resource value: 0x7f070007 - public const int abc_action_bar_default_height_material = 2131165191; - - // aapt resource value: 0x7f070014 - public const int abc_action_bar_default_padding_end_material = 2131165204; - - // aapt resource value: 0x7f070015 - public const int abc_action_bar_default_padding_start_material = 2131165205; - - // aapt resource value: 0x7f070017 - public const int abc_action_bar_elevation_material = 2131165207; - - // aapt resource value: 0x7f070018 - public const int abc_action_bar_icon_vertical_padding_material = 2131165208; - - // aapt resource value: 0x7f070019 - public const int abc_action_bar_overflow_padding_end_material = 2131165209; - - // aapt resource value: 0x7f07001a - public const int abc_action_bar_overflow_padding_start_material = 2131165210; - - // aapt resource value: 0x7f070008 - public const int abc_action_bar_progress_bar_size = 2131165192; - - // aapt resource value: 0x7f07001b - public const int abc_action_bar_stacked_max_height = 2131165211; - - // aapt resource value: 0x7f07001c - public const int abc_action_bar_stacked_tab_max_width = 2131165212; - - // aapt resource value: 0x7f07001d - public const int abc_action_bar_subtitle_bottom_margin_material = 2131165213; - - // aapt resource value: 0x7f07001e - public const int abc_action_bar_subtitle_top_margin_material = 2131165214; - - // aapt resource value: 0x7f07001f - public const int abc_action_button_min_height_material = 2131165215; - - // aapt resource value: 0x7f070020 - public const int abc_action_button_min_width_material = 2131165216; - - // aapt resource value: 0x7f070021 - public const int abc_action_button_min_width_overflow_material = 2131165217; - - // aapt resource value: 0x7f070006 - public const int abc_alert_dialog_button_bar_height = 2131165190; - - // aapt resource value: 0x7f070022 - public const int abc_button_inset_horizontal_material = 2131165218; - - // aapt resource value: 0x7f070023 - public const int abc_button_inset_vertical_material = 2131165219; - - // aapt resource value: 0x7f070024 - public const int abc_button_padding_horizontal_material = 2131165220; - - // aapt resource value: 0x7f070025 - public const int abc_button_padding_vertical_material = 2131165221; - - // aapt resource value: 0x7f070026 - public const int abc_cascading_menus_min_smallest_width = 2131165222; - - // aapt resource value: 0x7f07000b - public const int abc_config_prefDialogWidth = 2131165195; - - // aapt resource value: 0x7f070027 - public const int abc_control_corner_material = 2131165223; - - // aapt resource value: 0x7f070028 - public const int abc_control_inset_material = 2131165224; - - // aapt resource value: 0x7f070029 - public const int abc_control_padding_material = 2131165225; - - // aapt resource value: 0x7f07000c - public const int abc_dialog_fixed_height_major = 2131165196; - - // aapt resource value: 0x7f07000d - public const int abc_dialog_fixed_height_minor = 2131165197; - - // aapt resource value: 0x7f07000e - public const int abc_dialog_fixed_width_major = 2131165198; - - // aapt resource value: 0x7f07000f - public const int abc_dialog_fixed_width_minor = 2131165199; - - // aapt resource value: 0x7f07002a - public const int abc_dialog_list_padding_bottom_no_buttons = 2131165226; - - // aapt resource value: 0x7f07002b - public const int abc_dialog_list_padding_top_no_title = 2131165227; - - // aapt resource value: 0x7f070010 - public const int abc_dialog_min_width_major = 2131165200; - - // aapt resource value: 0x7f070011 - public const int abc_dialog_min_width_minor = 2131165201; - - // aapt resource value: 0x7f07002c - public const int abc_dialog_padding_material = 2131165228; - - // aapt resource value: 0x7f07002d - public const int abc_dialog_padding_top_material = 2131165229; - - // aapt resource value: 0x7f07002e - public const int abc_dialog_title_divider_material = 2131165230; - - // aapt resource value: 0x7f07002f - public const int abc_disabled_alpha_material_dark = 2131165231; - - // aapt resource value: 0x7f070030 - public const int abc_disabled_alpha_material_light = 2131165232; - - // aapt resource value: 0x7f070031 - public const int abc_dropdownitem_icon_width = 2131165233; - - // aapt resource value: 0x7f070032 - public const int abc_dropdownitem_text_padding_left = 2131165234; - - // aapt resource value: 0x7f070033 - public const int abc_dropdownitem_text_padding_right = 2131165235; - - // aapt resource value: 0x7f070034 - public const int abc_edit_text_inset_bottom_material = 2131165236; - - // aapt resource value: 0x7f070035 - public const int abc_edit_text_inset_horizontal_material = 2131165237; - - // aapt resource value: 0x7f070036 - public const int abc_edit_text_inset_top_material = 2131165238; - - // aapt resource value: 0x7f070037 - public const int abc_floating_window_z = 2131165239; - - // aapt resource value: 0x7f070038 - public const int abc_list_item_padding_horizontal_material = 2131165240; - - // aapt resource value: 0x7f070039 - public const int abc_panel_menu_list_width = 2131165241; - - // aapt resource value: 0x7f07003a - public const int abc_progress_bar_height_material = 2131165242; - - // aapt resource value: 0x7f07003b - public const int abc_search_view_preferred_height = 2131165243; - - // aapt resource value: 0x7f07003c - public const int abc_search_view_preferred_width = 2131165244; - - // aapt resource value: 0x7f07003d - public const int abc_seekbar_track_background_height_material = 2131165245; - - // aapt resource value: 0x7f07003e - public const int abc_seekbar_track_progress_height_material = 2131165246; - - // aapt resource value: 0x7f07003f - public const int abc_select_dialog_padding_start_material = 2131165247; - - // aapt resource value: 0x7f070016 - public const int abc_switch_padding = 2131165206; - - // aapt resource value: 0x7f070040 - public const int abc_text_size_body_1_material = 2131165248; - - // aapt resource value: 0x7f070041 - public const int abc_text_size_body_2_material = 2131165249; - - // aapt resource value: 0x7f070042 - public const int abc_text_size_button_material = 2131165250; - - // aapt resource value: 0x7f070043 - public const int abc_text_size_caption_material = 2131165251; - - // aapt resource value: 0x7f070044 - public const int abc_text_size_display_1_material = 2131165252; - - // aapt resource value: 0x7f070045 - public const int abc_text_size_display_2_material = 2131165253; - - // aapt resource value: 0x7f070046 - public const int abc_text_size_display_3_material = 2131165254; - - // aapt resource value: 0x7f070047 - public const int abc_text_size_display_4_material = 2131165255; - - // aapt resource value: 0x7f070048 - public const int abc_text_size_headline_material = 2131165256; - - // aapt resource value: 0x7f070049 - public const int abc_text_size_large_material = 2131165257; - - // aapt resource value: 0x7f07004a - public const int abc_text_size_medium_material = 2131165258; - - // aapt resource value: 0x7f07004b - public const int abc_text_size_menu_header_material = 2131165259; - - // aapt resource value: 0x7f07004c - public const int abc_text_size_menu_material = 2131165260; - - // aapt resource value: 0x7f07004d - public const int abc_text_size_small_material = 2131165261; - - // aapt resource value: 0x7f07004e - public const int abc_text_size_subhead_material = 2131165262; - - // aapt resource value: 0x7f070009 - public const int abc_text_size_subtitle_material_toolbar = 2131165193; - - // aapt resource value: 0x7f07004f - public const int abc_text_size_title_material = 2131165263; - - // aapt resource value: 0x7f07000a - public const int abc_text_size_title_material_toolbar = 2131165194; - - // aapt resource value: 0x7f07008b - public const int compat_button_inset_horizontal_material = 2131165323; - - // aapt resource value: 0x7f07008c - public const int compat_button_inset_vertical_material = 2131165324; - - // aapt resource value: 0x7f07008d - public const int compat_button_padding_horizontal_material = 2131165325; - - // aapt resource value: 0x7f07008e - public const int compat_button_padding_vertical_material = 2131165326; - - // aapt resource value: 0x7f07008f - public const int compat_control_corner_material = 2131165327; - - // aapt resource value: 0x7f070069 - public const int design_appbar_elevation = 2131165289; - - // aapt resource value: 0x7f07006a - public const int design_bottom_navigation_active_item_max_width = 2131165290; - - // aapt resource value: 0x7f07006b - public const int design_bottom_navigation_active_text_size = 2131165291; - - // aapt resource value: 0x7f07006c - public const int design_bottom_navigation_elevation = 2131165292; - - // aapt resource value: 0x7f07006d - public const int design_bottom_navigation_height = 2131165293; - - // aapt resource value: 0x7f07006e - public const int design_bottom_navigation_item_max_width = 2131165294; - - // aapt resource value: 0x7f07006f - public const int design_bottom_navigation_item_min_width = 2131165295; - - // aapt resource value: 0x7f070070 - public const int design_bottom_navigation_margin = 2131165296; - - // aapt resource value: 0x7f070071 - public const int design_bottom_navigation_shadow_height = 2131165297; - - // aapt resource value: 0x7f070072 - public const int design_bottom_navigation_text_size = 2131165298; - - // aapt resource value: 0x7f070073 - public const int design_bottom_sheet_modal_elevation = 2131165299; - - // aapt resource value: 0x7f070074 - public const int design_bottom_sheet_peek_height_min = 2131165300; - - // aapt resource value: 0x7f070075 - public const int design_fab_border_width = 2131165301; - - // aapt resource value: 0x7f070076 - public const int design_fab_elevation = 2131165302; - - // aapt resource value: 0x7f070077 - public const int design_fab_image_size = 2131165303; - - // aapt resource value: 0x7f070078 - public const int design_fab_size_mini = 2131165304; - - // aapt resource value: 0x7f070079 - public const int design_fab_size_normal = 2131165305; - - // aapt resource value: 0x7f07007a - public const int design_fab_translation_z_pressed = 2131165306; - - // aapt resource value: 0x7f07007b - public const int design_navigation_elevation = 2131165307; - - // aapt resource value: 0x7f07007c - public const int design_navigation_icon_padding = 2131165308; - - // aapt resource value: 0x7f07007d - public const int design_navigation_icon_size = 2131165309; - - // aapt resource value: 0x7f070061 - public const int design_navigation_max_width = 2131165281; - - // aapt resource value: 0x7f07007e - public const int design_navigation_padding_bottom = 2131165310; - - // aapt resource value: 0x7f07007f - public const int design_navigation_separator_vertical_padding = 2131165311; - - // aapt resource value: 0x7f070062 - public const int design_snackbar_action_inline_max_width = 2131165282; - - // aapt resource value: 0x7f070063 - public const int design_snackbar_background_corner_radius = 2131165283; - - // aapt resource value: 0x7f070080 - public const int design_snackbar_elevation = 2131165312; - - // aapt resource value: 0x7f070064 - public const int design_snackbar_extra_spacing_horizontal = 2131165284; - - // aapt resource value: 0x7f070065 - public const int design_snackbar_max_width = 2131165285; - - // aapt resource value: 0x7f070066 - public const int design_snackbar_min_width = 2131165286; - - // aapt resource value: 0x7f070081 - public const int design_snackbar_padding_horizontal = 2131165313; - - // aapt resource value: 0x7f070082 - public const int design_snackbar_padding_vertical = 2131165314; - - // aapt resource value: 0x7f070067 - public const int design_snackbar_padding_vertical_2lines = 2131165287; - - // aapt resource value: 0x7f070083 - public const int design_snackbar_text_size = 2131165315; - - // aapt resource value: 0x7f070084 - public const int design_tab_max_width = 2131165316; - - // aapt resource value: 0x7f070068 - public const int design_tab_scrollable_min_width = 2131165288; - - // aapt resource value: 0x7f070085 - public const int design_tab_text_size = 2131165317; - - // aapt resource value: 0x7f070086 - public const int design_tab_text_size_2line = 2131165318; - - // aapt resource value: 0x7f070050 - public const int disabled_alpha_material_dark = 2131165264; - - // aapt resource value: 0x7f070051 - public const int disabled_alpha_material_light = 2131165265; - - // aapt resource value: 0x7f070000 - public const int fastscroll_default_thickness = 2131165184; - - // aapt resource value: 0x7f070001 - public const int fastscroll_margin = 2131165185; - - // aapt resource value: 0x7f070002 - public const int fastscroll_minimum_range = 2131165186; - - // aapt resource value: 0x7f070052 - public const int highlight_alpha_material_colored = 2131165266; - - // aapt resource value: 0x7f070053 - public const int highlight_alpha_material_dark = 2131165267; - - // aapt resource value: 0x7f070054 - public const int highlight_alpha_material_light = 2131165268; - - // aapt resource value: 0x7f070055 - public const int hint_alpha_material_dark = 2131165269; - - // aapt resource value: 0x7f070056 - public const int hint_alpha_material_light = 2131165270; - - // aapt resource value: 0x7f070057 - public const int hint_pressed_alpha_material_dark = 2131165271; - - // aapt resource value: 0x7f070058 - public const int hint_pressed_alpha_material_light = 2131165272; - - // aapt resource value: 0x7f070003 - public const int item_touch_helper_max_drag_scroll_per_frame = 2131165187; - - // aapt resource value: 0x7f070004 - public const int item_touch_helper_swipe_escape_max_velocity = 2131165188; - - // aapt resource value: 0x7f070005 - public const int item_touch_helper_swipe_escape_velocity = 2131165189; - - // aapt resource value: 0x7f070090 - public const int notification_action_icon_size = 2131165328; - - // aapt resource value: 0x7f070091 - public const int notification_action_text_size = 2131165329; - - // aapt resource value: 0x7f070092 - public const int notification_big_circle_margin = 2131165330; - - // aapt resource value: 0x7f070088 - public const int notification_content_margin_start = 2131165320; - - // aapt resource value: 0x7f070093 - public const int notification_large_icon_height = 2131165331; - - // aapt resource value: 0x7f070094 - public const int notification_large_icon_width = 2131165332; - - // aapt resource value: 0x7f070089 - public const int notification_main_column_padding_top = 2131165321; - - // aapt resource value: 0x7f07008a - public const int notification_media_narrow_margin = 2131165322; - - // aapt resource value: 0x7f070095 - public const int notification_right_icon_size = 2131165333; - - // aapt resource value: 0x7f070087 - public const int notification_right_side_padding_top = 2131165319; - - // aapt resource value: 0x7f070096 - public const int notification_small_icon_background_padding = 2131165334; - - // aapt resource value: 0x7f070097 - public const int notification_small_icon_size_as_large = 2131165335; - - // aapt resource value: 0x7f070098 - public const int notification_subtext_size = 2131165336; - - // aapt resource value: 0x7f070099 - public const int notification_top_pad = 2131165337; - - // aapt resource value: 0x7f07009a - public const int notification_top_pad_large_text = 2131165338; - - // aapt resource value: 0x7f070059 - public const int tooltip_corner_radius = 2131165273; - - // aapt resource value: 0x7f07005a - public const int tooltip_horizontal_padding = 2131165274; - - // aapt resource value: 0x7f07005b - public const int tooltip_margin = 2131165275; - - // aapt resource value: 0x7f07005c - public const int tooltip_precise_anchor_extra_offset = 2131165276; - - // aapt resource value: 0x7f07005d - public const int tooltip_precise_anchor_threshold = 2131165277; - - // aapt resource value: 0x7f07005e - public const int tooltip_vertical_padding = 2131165278; - - // aapt resource value: 0x7f07005f - public const int tooltip_y_offset_non_touch = 2131165279; - - // aapt resource value: 0x7f070060 - public const int tooltip_y_offset_touch = 2131165280; - - static Dimension() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Dimension() - { - } - } - - public partial class Drawable - { - - // aapt resource value: 0x7f020000 - public const int abc_ab_share_pack_mtrl_alpha = 2130837504; - - // aapt resource value: 0x7f020001 - public const int abc_action_bar_item_background_material = 2130837505; - - // aapt resource value: 0x7f020002 - public const int abc_btn_borderless_material = 2130837506; - - // aapt resource value: 0x7f020003 - public const int abc_btn_check_material = 2130837507; - - // aapt resource value: 0x7f020004 - public const int abc_btn_check_to_on_mtrl_000 = 2130837508; - - // aapt resource value: 0x7f020005 - public const int abc_btn_check_to_on_mtrl_015 = 2130837509; - - // aapt resource value: 0x7f020006 - public const int abc_btn_colored_material = 2130837510; - - // aapt resource value: 0x7f020007 - public const int abc_btn_default_mtrl_shape = 2130837511; - - // aapt resource value: 0x7f020008 - public const int abc_btn_radio_material = 2130837512; - - // aapt resource value: 0x7f020009 - public const int abc_btn_radio_to_on_mtrl_000 = 2130837513; - - // aapt resource value: 0x7f02000a - public const int abc_btn_radio_to_on_mtrl_015 = 2130837514; - - // aapt resource value: 0x7f02000b - public const int abc_btn_switch_to_on_mtrl_00001 = 2130837515; - - // aapt resource value: 0x7f02000c - public const int abc_btn_switch_to_on_mtrl_00012 = 2130837516; - - // aapt resource value: 0x7f02000d - public const int abc_cab_background_internal_bg = 2130837517; - - // aapt resource value: 0x7f02000e - public const int abc_cab_background_top_material = 2130837518; - - // aapt resource value: 0x7f02000f - public const int abc_cab_background_top_mtrl_alpha = 2130837519; - - // aapt resource value: 0x7f020010 - public const int abc_control_background_material = 2130837520; - - // aapt resource value: 0x7f020011 - public const int abc_dialog_material_background = 2130837521; - - // aapt resource value: 0x7f020012 - public const int abc_edit_text_material = 2130837522; - - // aapt resource value: 0x7f020013 - public const int abc_ic_ab_back_material = 2130837523; - - // aapt resource value: 0x7f020014 - public const int abc_ic_arrow_drop_right_black_24dp = 2130837524; - - // aapt resource value: 0x7f020015 - public const int abc_ic_clear_material = 2130837525; - - // aapt resource value: 0x7f020016 - public const int abc_ic_commit_search_api_mtrl_alpha = 2130837526; - - // aapt resource value: 0x7f020017 - public const int abc_ic_go_search_api_material = 2130837527; - - // aapt resource value: 0x7f020018 - public const int abc_ic_menu_copy_mtrl_am_alpha = 2130837528; - - // aapt resource value: 0x7f020019 - public const int abc_ic_menu_cut_mtrl_alpha = 2130837529; - - // aapt resource value: 0x7f02001a - public const int abc_ic_menu_overflow_material = 2130837530; - - // aapt resource value: 0x7f02001b - public const int abc_ic_menu_paste_mtrl_am_alpha = 2130837531; - - // aapt resource value: 0x7f02001c - public const int abc_ic_menu_selectall_mtrl_alpha = 2130837532; - - // aapt resource value: 0x7f02001d - public const int abc_ic_menu_share_mtrl_alpha = 2130837533; - - // aapt resource value: 0x7f02001e - public const int abc_ic_search_api_material = 2130837534; - - // aapt resource value: 0x7f02001f - public const int abc_ic_star_black_16dp = 2130837535; - - // aapt resource value: 0x7f020020 - public const int abc_ic_star_black_36dp = 2130837536; - - // aapt resource value: 0x7f020021 - public const int abc_ic_star_black_48dp = 2130837537; - - // aapt resource value: 0x7f020022 - public const int abc_ic_star_half_black_16dp = 2130837538; - - // aapt resource value: 0x7f020023 - public const int abc_ic_star_half_black_36dp = 2130837539; - - // aapt resource value: 0x7f020024 - public const int abc_ic_star_half_black_48dp = 2130837540; - - // aapt resource value: 0x7f020025 - public const int abc_ic_voice_search_api_material = 2130837541; - - // aapt resource value: 0x7f020026 - public const int abc_item_background_holo_dark = 2130837542; - - // aapt resource value: 0x7f020027 - public const int abc_item_background_holo_light = 2130837543; - - // aapt resource value: 0x7f020028 - public const int abc_list_divider_mtrl_alpha = 2130837544; - - // aapt resource value: 0x7f020029 - public const int abc_list_focused_holo = 2130837545; - - // aapt resource value: 0x7f02002a - public const int abc_list_longpressed_holo = 2130837546; - - // aapt resource value: 0x7f02002b - public const int abc_list_pressed_holo_dark = 2130837547; - - // aapt resource value: 0x7f02002c - public const int abc_list_pressed_holo_light = 2130837548; - - // aapt resource value: 0x7f02002d - public const int abc_list_selector_background_transition_holo_dark = 2130837549; - - // aapt resource value: 0x7f02002e - public const int abc_list_selector_background_transition_holo_light = 2130837550; - - // aapt resource value: 0x7f02002f - public const int abc_list_selector_disabled_holo_dark = 2130837551; - - // aapt resource value: 0x7f020030 - public const int abc_list_selector_disabled_holo_light = 2130837552; - - // aapt resource value: 0x7f020031 - public const int abc_list_selector_holo_dark = 2130837553; - - // aapt resource value: 0x7f020032 - public const int abc_list_selector_holo_light = 2130837554; - - // aapt resource value: 0x7f020033 - public const int abc_menu_hardkey_panel_mtrl_mult = 2130837555; - - // aapt resource value: 0x7f020034 - public const int abc_popup_background_mtrl_mult = 2130837556; - - // aapt resource value: 0x7f020035 - public const int abc_ratingbar_indicator_material = 2130837557; - - // aapt resource value: 0x7f020036 - public const int abc_ratingbar_material = 2130837558; - - // aapt resource value: 0x7f020037 - public const int abc_ratingbar_small_material = 2130837559; - - // aapt resource value: 0x7f020038 - public const int abc_scrubber_control_off_mtrl_alpha = 2130837560; - - // aapt resource value: 0x7f020039 - public const int abc_scrubber_control_to_pressed_mtrl_000 = 2130837561; - - // aapt resource value: 0x7f02003a - public const int abc_scrubber_control_to_pressed_mtrl_005 = 2130837562; - - // aapt resource value: 0x7f02003b - public const int abc_scrubber_primary_mtrl_alpha = 2130837563; - - // aapt resource value: 0x7f02003c - public const int abc_scrubber_track_mtrl_alpha = 2130837564; - - // aapt resource value: 0x7f02003d - public const int abc_seekbar_thumb_material = 2130837565; - - // aapt resource value: 0x7f02003e - public const int abc_seekbar_tick_mark_material = 2130837566; - - // aapt resource value: 0x7f02003f - public const int abc_seekbar_track_material = 2130837567; - - // aapt resource value: 0x7f020040 - public const int abc_spinner_mtrl_am_alpha = 2130837568; - - // aapt resource value: 0x7f020041 - public const int abc_spinner_textfield_background_material = 2130837569; - - // aapt resource value: 0x7f020042 - public const int abc_switch_thumb_material = 2130837570; - - // aapt resource value: 0x7f020043 - public const int abc_switch_track_mtrl_alpha = 2130837571; - - // aapt resource value: 0x7f020044 - public const int abc_tab_indicator_material = 2130837572; - - // aapt resource value: 0x7f020045 - public const int abc_tab_indicator_mtrl_alpha = 2130837573; - - // aapt resource value: 0x7f020046 - public const int abc_text_cursor_material = 2130837574; - - // aapt resource value: 0x7f020047 - public const int abc_text_select_handle_left_mtrl_dark = 2130837575; - - // aapt resource value: 0x7f020048 - public const int abc_text_select_handle_left_mtrl_light = 2130837576; - - // aapt resource value: 0x7f020049 - public const int abc_text_select_handle_middle_mtrl_dark = 2130837577; - - // aapt resource value: 0x7f02004a - public const int abc_text_select_handle_middle_mtrl_light = 2130837578; - - // aapt resource value: 0x7f02004b - public const int abc_text_select_handle_right_mtrl_dark = 2130837579; - - // aapt resource value: 0x7f02004c - public const int abc_text_select_handle_right_mtrl_light = 2130837580; - - // aapt resource value: 0x7f02004d - public const int abc_textfield_activated_mtrl_alpha = 2130837581; - - // aapt resource value: 0x7f02004e - public const int abc_textfield_default_mtrl_alpha = 2130837582; - - // aapt resource value: 0x7f02004f - public const int abc_textfield_search_activated_mtrl_alpha = 2130837583; - - // aapt resource value: 0x7f020050 - public const int abc_textfield_search_default_mtrl_alpha = 2130837584; - - // aapt resource value: 0x7f020051 - public const int abc_textfield_search_material = 2130837585; - - // aapt resource value: 0x7f020052 - public const int abc_vector_test = 2130837586; - - // aapt resource value: 0x7f020053 - public const int avd_hide_password = 2130837587; - - // aapt resource value: 0x7f02006a - public const int avd_hide_password_1 = 2130837610; - - // aapt resource value: 0x7f02006b - public const int avd_hide_password_2 = 2130837611; - - // aapt resource value: 0x7f02006c - public const int avd_hide_password_3 = 2130837612; - - // aapt resource value: 0x7f020054 - public const int avd_show_password = 2130837588; - - // aapt resource value: 0x7f02006d - public const int avd_show_password_1 = 2130837613; - - // aapt resource value: 0x7f02006e - public const int avd_show_password_2 = 2130837614; - - // aapt resource value: 0x7f02006f - public const int avd_show_password_3 = 2130837615; - - // aapt resource value: 0x7f020055 - public const int design_bottom_navigation_item_background = 2130837589; - - // aapt resource value: 0x7f020056 - public const int design_fab_background = 2130837590; - - // aapt resource value: 0x7f020057 - public const int design_ic_visibility = 2130837591; - - // aapt resource value: 0x7f020058 - public const int design_ic_visibility_off = 2130837592; - - // aapt resource value: 0x7f020059 - public const int design_password_eye = 2130837593; - - // aapt resource value: 0x7f02005a - public const int design_snackbar_background = 2130837594; - - // aapt resource value: 0x7f02005b - public const int navigation_empty_icon = 2130837595; - - // aapt resource value: 0x7f02005c - public const int notification_action_background = 2130837596; - - // aapt resource value: 0x7f02005d - public const int notification_bg = 2130837597; - - // aapt resource value: 0x7f02005e - public const int notification_bg_low = 2130837598; - - // aapt resource value: 0x7f02005f - public const int notification_bg_low_normal = 2130837599; - - // aapt resource value: 0x7f020060 - public const int notification_bg_low_pressed = 2130837600; - - // aapt resource value: 0x7f020061 - public const int notification_bg_normal = 2130837601; - - // aapt resource value: 0x7f020062 - public const int notification_bg_normal_pressed = 2130837602; - - // aapt resource value: 0x7f020063 - public const int notification_icon_background = 2130837603; - - // aapt resource value: 0x7f020068 - public const int notification_template_icon_bg = 2130837608; - - // aapt resource value: 0x7f020069 - public const int notification_template_icon_low_bg = 2130837609; - - // aapt resource value: 0x7f020064 - public const int notification_tile_bg = 2130837604; - - // aapt resource value: 0x7f020065 - public const int notify_panel_notification_icon_bg = 2130837605; - - // aapt resource value: 0x7f020066 - public const int tooltip_frame_dark = 2130837606; - - // aapt resource value: 0x7f020067 - public const int tooltip_frame_light = 2130837607; - - static Drawable() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Drawable() - { - } - } - - public partial class Id - { - - // aapt resource value: 0x7f080032 - public const int ALT = 2131230770; - - // aapt resource value: 0x7f080033 - public const int CTRL = 2131230771; - - // aapt resource value: 0x7f080034 - public const int FUNCTION = 2131230772; - - // aapt resource value: 0x7f080035 - public const int META = 2131230773; - - // aapt resource value: 0x7f080036 - public const int SHIFT = 2131230774; - - // aapt resource value: 0x7f080037 - public const int SYM = 2131230775; - - // aapt resource value: 0x7f08009d - public const int action0 = 2131230877; - - // aapt resource value: 0x7f08007c - public const int action_bar = 2131230844; - - // aapt resource value: 0x7f080001 - public const int action_bar_activity_content = 2131230721; - - // aapt resource value: 0x7f08007b - public const int action_bar_container = 2131230843; - - // aapt resource value: 0x7f080077 - public const int action_bar_root = 2131230839; - - // aapt resource value: 0x7f080002 - public const int action_bar_spinner = 2131230722; - - // aapt resource value: 0x7f08005b - public const int action_bar_subtitle = 2131230811; - - // aapt resource value: 0x7f08005a - public const int action_bar_title = 2131230810; - - // aapt resource value: 0x7f08009a - public const int action_container = 2131230874; - - // aapt resource value: 0x7f08007d - public const int action_context_bar = 2131230845; - - // aapt resource value: 0x7f0800a1 - public const int action_divider = 2131230881; - - // aapt resource value: 0x7f08009b - public const int action_image = 2131230875; - - // aapt resource value: 0x7f080003 - public const int action_menu_divider = 2131230723; - - // aapt resource value: 0x7f080004 - public const int action_menu_presenter = 2131230724; - - // aapt resource value: 0x7f080079 - public const int action_mode_bar = 2131230841; - - // aapt resource value: 0x7f080078 - public const int action_mode_bar_stub = 2131230840; - - // aapt resource value: 0x7f08005c - public const int action_mode_close_button = 2131230812; - - // aapt resource value: 0x7f08009c - public const int action_text = 2131230876; - - // aapt resource value: 0x7f0800aa - public const int actions = 2131230890; - - // aapt resource value: 0x7f08005d - public const int activity_chooser_view_content = 2131230813; - - // aapt resource value: 0x7f080027 - public const int add = 2131230759; - - // aapt resource value: 0x7f080070 - public const int alertTitle = 2131230832; - - // aapt resource value: 0x7f080052 - public const int all = 2131230802; - - // aapt resource value: 0x7f080038 - public const int always = 2131230776; - - // aapt resource value: 0x7f080056 - public const int async = 2131230806; - - // aapt resource value: 0x7f080044 - public const int auto = 2131230788; - - // aapt resource value: 0x7f08002f - public const int beginning = 2131230767; - - // aapt resource value: 0x7f080057 - public const int blocking = 2131230807; - - // aapt resource value: 0x7f08003d - public const int bottom = 2131230781; - - // aapt resource value: 0x7f080063 - public const int buttonPanel = 2131230819; - - // aapt resource value: 0x7f08009e - public const int cancel_action = 2131230878; - - // aapt resource value: 0x7f080045 - public const int center = 2131230789; - - // aapt resource value: 0x7f080046 - public const int center_horizontal = 2131230790; - - // aapt resource value: 0x7f080047 - public const int center_vertical = 2131230791; - - // aapt resource value: 0x7f080073 - public const int checkbox = 2131230835; - - // aapt resource value: 0x7f0800a6 - public const int chronometer = 2131230886; - - // aapt resource value: 0x7f08004e - public const int clip_horizontal = 2131230798; - - // aapt resource value: 0x7f08004f - public const int clip_vertical = 2131230799; - - // aapt resource value: 0x7f080039 - public const int collapseActionView = 2131230777; - - // aapt resource value: 0x7f08008e - public const int container = 2131230862; - - // aapt resource value: 0x7f080066 - public const int contentPanel = 2131230822; - - // aapt resource value: 0x7f08008f - public const int coordinator = 2131230863; - - // aapt resource value: 0x7f08006d - public const int custom = 2131230829; - - // aapt resource value: 0x7f08006c - public const int customPanel = 2131230828; - - // aapt resource value: 0x7f08007a - public const int decor_content_parent = 2131230842; - - // aapt resource value: 0x7f080060 - public const int default_activity_button = 2131230816; - - // aapt resource value: 0x7f080091 - public const int design_bottom_sheet = 2131230865; - - // aapt resource value: 0x7f080098 - public const int design_menu_item_action_area = 2131230872; - - // aapt resource value: 0x7f080097 - public const int design_menu_item_action_area_stub = 2131230871; - - // aapt resource value: 0x7f080096 - public const int design_menu_item_text = 2131230870; - - // aapt resource value: 0x7f080095 - public const int design_navigation_view = 2131230869; - - // aapt resource value: 0x7f080020 - public const int disableHome = 2131230752; - - // aapt resource value: 0x7f08007e - public const int edit_query = 2131230846; - - // aapt resource value: 0x7f080030 - public const int end = 2131230768; - - // aapt resource value: 0x7f0800ac - public const int end_padder = 2131230892; - - // aapt resource value: 0x7f08003f - public const int enterAlways = 2131230783; - - // aapt resource value: 0x7f080040 - public const int enterAlwaysCollapsed = 2131230784; - - // aapt resource value: 0x7f080041 - public const int exitUntilCollapsed = 2131230785; - - // aapt resource value: 0x7f08005e - public const int expand_activities_button = 2131230814; - - // aapt resource value: 0x7f080072 - public const int expanded_menu = 2131230834; - - // aapt resource value: 0x7f080050 - public const int fill = 2131230800; - - // aapt resource value: 0x7f080051 - public const int fill_horizontal = 2131230801; - - // aapt resource value: 0x7f080048 - public const int fill_vertical = 2131230792; - - // aapt resource value: 0x7f080054 - public const int @fixed = 2131230804; - - // aapt resource value: 0x7f080058 - public const int forever = 2131230808; - - // aapt resource value: 0x7f08008b - public const int gameView1 = 2131230859; - - // aapt resource value: 0x7f08000a - public const int ghost_view = 2131230730; - - // aapt resource value: 0x7f080005 - public const int home = 2131230725; - - // aapt resource value: 0x7f080021 - public const int homeAsUp = 2131230753; - - // aapt resource value: 0x7f080062 - public const int icon = 2131230818; - - // aapt resource value: 0x7f0800ab - public const int icon_group = 2131230891; - - // aapt resource value: 0x7f08003a - public const int ifRoom = 2131230778; - - // aapt resource value: 0x7f08005f - public const int image = 2131230815; - - // aapt resource value: 0x7f0800a7 - public const int info = 2131230887; - - // aapt resource value: 0x7f080059 - public const int italic = 2131230809; - - // aapt resource value: 0x7f080000 - public const int item_touch_helper_previous_elevation = 2131230720; - - // aapt resource value: 0x7f08008d - public const int largeLabel = 2131230861; - - // aapt resource value: 0x7f080049 - public const int left = 2131230793; - - // aapt resource value: 0x7f080017 - public const int line1 = 2131230743; - - // aapt resource value: 0x7f080018 - public const int line3 = 2131230744; - - // aapt resource value: 0x7f08001d - public const int listMode = 2131230749; - - // aapt resource value: 0x7f080061 - public const int list_item = 2131230817; - - // aapt resource value: 0x7f0800af - public const int masked = 2131230895; - - // aapt resource value: 0x7f0800a0 - public const int media_actions = 2131230880; - - // aapt resource value: 0x7f0800ad - public const int message = 2131230893; - - // aapt resource value: 0x7f080031 - public const int middle = 2131230769; - - // aapt resource value: 0x7f080053 - public const int mini = 2131230803; - - // aapt resource value: 0x7f080028 - public const int multiply = 2131230760; - - // aapt resource value: 0x7f080094 - public const int navigation_header_container = 2131230868; - - // aapt resource value: 0x7f08003b - public const int never = 2131230779; - - // aapt resource value: 0x7f080022 - public const int none = 2131230754; - - // aapt resource value: 0x7f08001e - public const int normal = 2131230750; - - // aapt resource value: 0x7f0800a9 - public const int notification_background = 2131230889; - - // aapt resource value: 0x7f0800a3 - public const int notification_main_column = 2131230883; - - // aapt resource value: 0x7f0800a2 - public const int notification_main_column_container = 2131230882; - - // aapt resource value: 0x7f08004c - public const int parallax = 2131230796; - - // aapt resource value: 0x7f080065 - public const int parentPanel = 2131230821; - - // aapt resource value: 0x7f08000b - public const int parent_matrix = 2131230731; - - // aapt resource value: 0x7f08004d - public const int pin = 2131230797; - - // aapt resource value: 0x7f080006 - public const int progress_circular = 2131230726; - - // aapt resource value: 0x7f080007 - public const int progress_horizontal = 2131230727; - - // aapt resource value: 0x7f080075 - public const int radio = 2131230837; - - // aapt resource value: 0x7f08004a - public const int right = 2131230794; - - // aapt resource value: 0x7f0800a8 - public const int right_icon = 2131230888; - - // aapt resource value: 0x7f0800a4 - public const int right_side = 2131230884; - - // aapt resource value: 0x7f08000c - public const int save_image_matrix = 2131230732; - - // aapt resource value: 0x7f08000d - public const int save_non_transition_alpha = 2131230733; - - // aapt resource value: 0x7f08000e - public const int save_scale_type = 2131230734; - - // aapt resource value: 0x7f080029 - public const int screen = 2131230761; - - // aapt resource value: 0x7f080042 - public const int scroll = 2131230786; - - // aapt resource value: 0x7f08006b - public const int scrollIndicatorDown = 2131230827; - - // aapt resource value: 0x7f080067 - public const int scrollIndicatorUp = 2131230823; - - // aapt resource value: 0x7f080068 - public const int scrollView = 2131230824; - - // aapt resource value: 0x7f080055 - public const int scrollable = 2131230805; - - // aapt resource value: 0x7f080080 - public const int search_badge = 2131230848; - - // aapt resource value: 0x7f08007f - public const int search_bar = 2131230847; - - // aapt resource value: 0x7f080081 - public const int search_button = 2131230849; - - // aapt resource value: 0x7f080086 - public const int search_close_btn = 2131230854; - - // aapt resource value: 0x7f080082 - public const int search_edit_frame = 2131230850; - - // aapt resource value: 0x7f080088 - public const int search_go_btn = 2131230856; - - // aapt resource value: 0x7f080083 - public const int search_mag_icon = 2131230851; - - // aapt resource value: 0x7f080084 - public const int search_plate = 2131230852; - - // aapt resource value: 0x7f080085 - public const int search_src_text = 2131230853; - - // aapt resource value: 0x7f080089 - public const int search_voice_btn = 2131230857; - - // aapt resource value: 0x7f08008a - public const int select_dialog_listview = 2131230858; - - // aapt resource value: 0x7f080074 - public const int shortcut = 2131230836; - - // aapt resource value: 0x7f080023 - public const int showCustom = 2131230755; - - // aapt resource value: 0x7f080024 - public const int showHome = 2131230756; - - // aapt resource value: 0x7f080025 - public const int showTitle = 2131230757; - - // aapt resource value: 0x7f08008c - public const int smallLabel = 2131230860; - - // aapt resource value: 0x7f080093 - public const int snackbar_action = 2131230867; - - // aapt resource value: 0x7f080092 - public const int snackbar_text = 2131230866; - - // aapt resource value: 0x7f080043 - public const int snap = 2131230787; - - // aapt resource value: 0x7f080064 - public const int spacer = 2131230820; - - // aapt resource value: 0x7f080008 - public const int split_action_bar = 2131230728; - - // aapt resource value: 0x7f08002a - public const int src_atop = 2131230762; - - // aapt resource value: 0x7f08002b - public const int src_in = 2131230763; - - // aapt resource value: 0x7f08002c - public const int src_over = 2131230764; - - // aapt resource value: 0x7f08004b - public const int start = 2131230795; - - // aapt resource value: 0x7f08009f - public const int status_bar_latest_event_content = 2131230879; - - // aapt resource value: 0x7f080076 - public const int submenuarrow = 2131230838; - - // aapt resource value: 0x7f080087 - public const int submit_area = 2131230855; - - // aapt resource value: 0x7f08001f - public const int tabMode = 2131230751; - - // aapt resource value: 0x7f080019 - public const int tag_transition_group = 2131230745; - - // aapt resource value: 0x7f08001a - public const int text = 2131230746; - - // aapt resource value: 0x7f08001b - public const int text2 = 2131230747; - - // aapt resource value: 0x7f08006a - public const int textSpacerNoButtons = 2131230826; - - // aapt resource value: 0x7f080069 - public const int textSpacerNoTitle = 2131230825; - - // aapt resource value: 0x7f080099 - public const int text_input_password_toggle = 2131230873; - - // aapt resource value: 0x7f080014 - public const int textinput_counter = 2131230740; - - // aapt resource value: 0x7f080015 - public const int textinput_error = 2131230741; - - // aapt resource value: 0x7f0800a5 - public const int time = 2131230885; - - // aapt resource value: 0x7f08001c - public const int title = 2131230748; - - // aapt resource value: 0x7f080071 - public const int titleDividerNoCustom = 2131230833; - - // aapt resource value: 0x7f08006f - public const int title_template = 2131230831; - - // aapt resource value: 0x7f08003e - public const int top = 2131230782; - - // aapt resource value: 0x7f08006e - public const int topPanel = 2131230830; - - // aapt resource value: 0x7f080090 - public const int touch_outside = 2131230864; - - // aapt resource value: 0x7f08000f - public const int transition_current_scene = 2131230735; - - // aapt resource value: 0x7f080010 - public const int transition_layout_save = 2131230736; - - // aapt resource value: 0x7f080011 - public const int transition_position = 2131230737; - - // aapt resource value: 0x7f080012 - public const int transition_scene_layoutid_cache = 2131230738; - - // aapt resource value: 0x7f080013 - public const int transition_transform = 2131230739; - - // aapt resource value: 0x7f08002d - public const int uniform = 2131230765; - - // aapt resource value: 0x7f080009 - public const int up = 2131230729; - - // aapt resource value: 0x7f080026 - public const int useLogo = 2131230758; - - // aapt resource value: 0x7f080016 - public const int view_offset_helper = 2131230742; - - // aapt resource value: 0x7f0800ae - public const int visible = 2131230894; - - // aapt resource value: 0x7f08003c - public const int withText = 2131230780; - - // aapt resource value: 0x7f08002e - public const int wrap_content = 2131230766; - - static Id() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Id() - { - } - } - - public partial class Integer - { - - // aapt resource value: 0x7f0d0000 - public const int abc_config_activityDefaultDur = 2131558400; - - // aapt resource value: 0x7f0d0001 - public const int abc_config_activityShortDur = 2131558401; - - // aapt resource value: 0x7f0d0005 - public const int app_bar_elevation_anim_duration = 2131558405; - - // aapt resource value: 0x7f0d0006 - public const int bottom_sheet_slide_duration = 2131558406; - - // aapt resource value: 0x7f0d0002 - public const int cancel_button_image_alpha = 2131558402; - - // aapt resource value: 0x7f0d0003 - public const int config_tooltipAnimTime = 2131558403; - - // aapt resource value: 0x7f0d0004 - public const int design_snackbar_text_max_lines = 2131558404; - - // aapt resource value: 0x7f0d0007 - public const int hide_password_duration = 2131558407; - - // aapt resource value: 0x7f0d0008 - public const int show_password_duration = 2131558408; - - // aapt resource value: 0x7f0d0009 - public const int status_bar_notification_info_maxnum = 2131558409; - - static Integer() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Integer() - { - } - } - - public partial class Layout - { - - // aapt resource value: 0x7f040000 - public const int abc_action_bar_title_item = 2130968576; - - // aapt resource value: 0x7f040001 - public const int abc_action_bar_up_container = 2130968577; - - // aapt resource value: 0x7f040002 - public const int abc_action_menu_item_layout = 2130968578; - - // aapt resource value: 0x7f040003 - public const int abc_action_menu_layout = 2130968579; - - // aapt resource value: 0x7f040004 - public const int abc_action_mode_bar = 2130968580; - - // aapt resource value: 0x7f040005 - public const int abc_action_mode_close_item_material = 2130968581; - - // aapt resource value: 0x7f040006 - public const int abc_activity_chooser_view = 2130968582; - - // aapt resource value: 0x7f040007 - public const int abc_activity_chooser_view_list_item = 2130968583; - - // aapt resource value: 0x7f040008 - public const int abc_alert_dialog_button_bar_material = 2130968584; - - // aapt resource value: 0x7f040009 - public const int abc_alert_dialog_material = 2130968585; - - // aapt resource value: 0x7f04000a - public const int abc_alert_dialog_title_material = 2130968586; - - // aapt resource value: 0x7f04000b - public const int abc_dialog_title_material = 2130968587; - - // aapt resource value: 0x7f04000c - public const int abc_expanded_menu_layout = 2130968588; - - // aapt resource value: 0x7f04000d - public const int abc_list_menu_item_checkbox = 2130968589; - - // aapt resource value: 0x7f04000e - public const int abc_list_menu_item_icon = 2130968590; - - // aapt resource value: 0x7f04000f - public const int abc_list_menu_item_layout = 2130968591; - - // aapt resource value: 0x7f040010 - public const int abc_list_menu_item_radio = 2130968592; - - // aapt resource value: 0x7f040011 - public const int abc_popup_menu_header_item_layout = 2130968593; - - // aapt resource value: 0x7f040012 - public const int abc_popup_menu_item_layout = 2130968594; - - // aapt resource value: 0x7f040013 - public const int abc_screen_content_include = 2130968595; - - // aapt resource value: 0x7f040014 - public const int abc_screen_simple = 2130968596; - - // aapt resource value: 0x7f040015 - public const int abc_screen_simple_overlay_action_mode = 2130968597; - - // aapt resource value: 0x7f040016 - public const int abc_screen_toolbar = 2130968598; - - // aapt resource value: 0x7f040017 - public const int abc_search_dropdown_item_icons_2line = 2130968599; - - // aapt resource value: 0x7f040018 - public const int abc_search_view = 2130968600; - - // aapt resource value: 0x7f040019 - public const int abc_select_dialog_material = 2130968601; - - // aapt resource value: 0x7f04001a - public const int activity_main = 2130968602; - - // aapt resource value: 0x7f04001b - public const int design_bottom_navigation_item = 2130968603; - - // aapt resource value: 0x7f04001c - public const int design_bottom_sheet_dialog = 2130968604; - - // aapt resource value: 0x7f04001d - public const int design_layout_snackbar = 2130968605; - - // aapt resource value: 0x7f04001e - public const int design_layout_snackbar_include = 2130968606; - - // aapt resource value: 0x7f04001f - public const int design_layout_tab_icon = 2130968607; - - // aapt resource value: 0x7f040020 - public const int design_layout_tab_text = 2130968608; - - // aapt resource value: 0x7f040021 - public const int design_menu_item_action_area = 2130968609; - - // aapt resource value: 0x7f040022 - public const int design_navigation_item = 2130968610; - - // aapt resource value: 0x7f040023 - public const int design_navigation_item_header = 2130968611; - - // aapt resource value: 0x7f040024 - public const int design_navigation_item_separator = 2130968612; - - // aapt resource value: 0x7f040025 - public const int design_navigation_item_subheader = 2130968613; - - // aapt resource value: 0x7f040026 - public const int design_navigation_menu = 2130968614; - - // aapt resource value: 0x7f040027 - public const int design_navigation_menu_item = 2130968615; - - // aapt resource value: 0x7f040028 - public const int design_text_input_password_icon = 2130968616; - - // aapt resource value: 0x7f040029 - public const int notification_action = 2130968617; - - // aapt resource value: 0x7f04002a - public const int notification_action_tombstone = 2130968618; - - // aapt resource value: 0x7f04002b - public const int notification_media_action = 2130968619; - - // aapt resource value: 0x7f04002c - public const int notification_media_cancel_action = 2130968620; - - // aapt resource value: 0x7f04002d - public const int notification_template_big_media = 2130968621; - - // aapt resource value: 0x7f04002e - public const int notification_template_big_media_custom = 2130968622; - - // aapt resource value: 0x7f04002f - public const int notification_template_big_media_narrow = 2130968623; - - // aapt resource value: 0x7f040030 - public const int notification_template_big_media_narrow_custom = 2130968624; - - // aapt resource value: 0x7f040031 - public const int notification_template_custom_big = 2130968625; - - // aapt resource value: 0x7f040032 - public const int notification_template_icon_group = 2130968626; - - // aapt resource value: 0x7f040033 - public const int notification_template_lines_media = 2130968627; - - // aapt resource value: 0x7f040034 - public const int notification_template_media = 2130968628; - - // aapt resource value: 0x7f040035 - public const int notification_template_media_custom = 2130968629; - - // aapt resource value: 0x7f040036 - public const int notification_template_part_chronometer = 2130968630; - - // aapt resource value: 0x7f040037 - public const int notification_template_part_time = 2130968631; - - // aapt resource value: 0x7f040038 - public const int select_dialog_item_material = 2130968632; - - // aapt resource value: 0x7f040039 - public const int select_dialog_multichoice_material = 2130968633; - - // aapt resource value: 0x7f04003a - public const int select_dialog_singlechoice_material = 2130968634; - - // aapt resource value: 0x7f04003b - public const int support_simple_spinner_dropdown_item = 2130968635; - - // aapt resource value: 0x7f04003c - public const int tooltip = 2130968636; - - static Layout() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Layout() - { - } - } - public partial class Mipmap { - // aapt resource value: 0x7f030000 - public const int ic_launcher = 2130903040; + // aapt resource value: 0x7f020000 + public const int ic_launcher = 2130837504; - // aapt resource value: 0x7f030001 - public const int ic_launcher_foreground = 2130903041; + // aapt resource value: 0x7f020001 + public const int ic_launcher_foreground = 2130837505; - // aapt resource value: 0x7f030002 - public const int ic_launcher_round = 2130903042; + // aapt resource value: 0x7f020002 + public const int ic_launcher_round = 2130837506; static Mipmap() { @@ -3122,3367 +87,6 @@ namespace osu.Android { } } - - public partial class String - { - - // aapt resource value: 0x7f090000 - public const int abc_action_bar_home_description = 2131296256; - - // aapt resource value: 0x7f090001 - public const int abc_action_bar_up_description = 2131296257; - - // aapt resource value: 0x7f090002 - public const int abc_action_menu_overflow_description = 2131296258; - - // aapt resource value: 0x7f090003 - public const int abc_action_mode_done = 2131296259; - - // aapt resource value: 0x7f090004 - public const int abc_activity_chooser_view_see_all = 2131296260; - - // aapt resource value: 0x7f090005 - public const int abc_activitychooserview_choose_application = 2131296261; - - // aapt resource value: 0x7f090006 - public const int abc_capital_off = 2131296262; - - // aapt resource value: 0x7f090007 - public const int abc_capital_on = 2131296263; - - // aapt resource value: 0x7f090012 - public const int abc_font_family_body_1_material = 2131296274; - - // aapt resource value: 0x7f090013 - public const int abc_font_family_body_2_material = 2131296275; - - // aapt resource value: 0x7f090014 - public const int abc_font_family_button_material = 2131296276; - - // aapt resource value: 0x7f090015 - public const int abc_font_family_caption_material = 2131296277; - - // aapt resource value: 0x7f090016 - public const int abc_font_family_display_1_material = 2131296278; - - // aapt resource value: 0x7f090017 - public const int abc_font_family_display_2_material = 2131296279; - - // aapt resource value: 0x7f090018 - public const int abc_font_family_display_3_material = 2131296280; - - // aapt resource value: 0x7f090019 - public const int abc_font_family_display_4_material = 2131296281; - - // aapt resource value: 0x7f09001a - public const int abc_font_family_headline_material = 2131296282; - - // aapt resource value: 0x7f09001b - public const int abc_font_family_menu_material = 2131296283; - - // aapt resource value: 0x7f09001c - public const int abc_font_family_subhead_material = 2131296284; - - // aapt resource value: 0x7f09001d - public const int abc_font_family_title_material = 2131296285; - - // aapt resource value: 0x7f090008 - public const int abc_search_hint = 2131296264; - - // aapt resource value: 0x7f090009 - public const int abc_searchview_description_clear = 2131296265; - - // aapt resource value: 0x7f09000a - public const int abc_searchview_description_query = 2131296266; - - // aapt resource value: 0x7f09000b - public const int abc_searchview_description_search = 2131296267; - - // aapt resource value: 0x7f09000c - public const int abc_searchview_description_submit = 2131296268; - - // aapt resource value: 0x7f09000d - public const int abc_searchview_description_voice = 2131296269; - - // aapt resource value: 0x7f09000e - public const int abc_shareactionprovider_share_with = 2131296270; - - // aapt resource value: 0x7f09000f - public const int abc_shareactionprovider_share_with_application = 2131296271; - - // aapt resource value: 0x7f090010 - public const int abc_toolbar_collapse_description = 2131296272; - - // aapt resource value: 0x7f090028 - public const int action_settings = 2131296296; - - // aapt resource value: 0x7f090027 - public const int app_name = 2131296295; - - // aapt resource value: 0x7f09001e - public const int appbar_scrolling_view_behavior = 2131296286; - - // aapt resource value: 0x7f09001f - public const int bottom_sheet_behavior = 2131296287; - - // aapt resource value: 0x7f090020 - public const int character_counter_pattern = 2131296288; - - // aapt resource value: 0x7f090021 - public const int password_toggle_content_description = 2131296289; - - // aapt resource value: 0x7f090022 - public const int path_password_eye = 2131296290; - - // aapt resource value: 0x7f090023 - public const int path_password_eye_mask_strike_through = 2131296291; - - // aapt resource value: 0x7f090024 - public const int path_password_eye_mask_visible = 2131296292; - - // aapt resource value: 0x7f090025 - public const int path_password_strike_through = 2131296293; - - // aapt resource value: 0x7f090011 - public const int search_menu_title = 2131296273; - - // aapt resource value: 0x7f090026 - public const int status_bar_notification_info_overflow = 2131296294; - - static String() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private String() - { - } - } - - public partial class Style - { - - // aapt resource value: 0x7f0a0095 - public const int AlertDialog_AppCompat = 2131361941; - - // aapt resource value: 0x7f0a0096 - public const int AlertDialog_AppCompat_Light = 2131361942; - - // aapt resource value: 0x7f0a0097 - public const int Animation_AppCompat_Dialog = 2131361943; - - // aapt resource value: 0x7f0a0098 - public const int Animation_AppCompat_DropDownUp = 2131361944; - - // aapt resource value: 0x7f0a0099 - public const int Animation_AppCompat_Tooltip = 2131361945; - - // aapt resource value: 0x7f0a015f - public const int Animation_Design_BottomSheetDialog = 2131362143; - - // aapt resource value: 0x7f0a0180 - public const int AppTheme = 2131362176; - - // aapt resource value: 0x7f0a009a - public const int Base_AlertDialog_AppCompat = 2131361946; - - // aapt resource value: 0x7f0a009b - public const int Base_AlertDialog_AppCompat_Light = 2131361947; - - // aapt resource value: 0x7f0a009c - public const int Base_Animation_AppCompat_Dialog = 2131361948; - - // aapt resource value: 0x7f0a009d - public const int Base_Animation_AppCompat_DropDownUp = 2131361949; - - // aapt resource value: 0x7f0a009e - public const int Base_Animation_AppCompat_Tooltip = 2131361950; - - // aapt resource value: 0x7f0a009f - public const int Base_DialogWindowTitle_AppCompat = 2131361951; - - // aapt resource value: 0x7f0a00a0 - public const int Base_DialogWindowTitleBackground_AppCompat = 2131361952; - - // aapt resource value: 0x7f0a0039 - public const int Base_TextAppearance_AppCompat = 2131361849; - - // aapt resource value: 0x7f0a003a - public const int Base_TextAppearance_AppCompat_Body1 = 2131361850; - - // aapt resource value: 0x7f0a003b - public const int Base_TextAppearance_AppCompat_Body2 = 2131361851; - - // aapt resource value: 0x7f0a0027 - public const int Base_TextAppearance_AppCompat_Button = 2131361831; - - // aapt resource value: 0x7f0a003c - public const int Base_TextAppearance_AppCompat_Caption = 2131361852; - - // aapt resource value: 0x7f0a003d - public const int Base_TextAppearance_AppCompat_Display1 = 2131361853; - - // aapt resource value: 0x7f0a003e - public const int Base_TextAppearance_AppCompat_Display2 = 2131361854; - - // aapt resource value: 0x7f0a003f - public const int Base_TextAppearance_AppCompat_Display3 = 2131361855; - - // aapt resource value: 0x7f0a0040 - public const int Base_TextAppearance_AppCompat_Display4 = 2131361856; - - // aapt resource value: 0x7f0a0041 - public const int Base_TextAppearance_AppCompat_Headline = 2131361857; - - // aapt resource value: 0x7f0a000b - public const int Base_TextAppearance_AppCompat_Inverse = 2131361803; - - // aapt resource value: 0x7f0a0042 - public const int Base_TextAppearance_AppCompat_Large = 2131361858; - - // aapt resource value: 0x7f0a000c - public const int Base_TextAppearance_AppCompat_Large_Inverse = 2131361804; - - // aapt resource value: 0x7f0a0043 - public const int Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = 2131361859; - - // aapt resource value: 0x7f0a0044 - public const int Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = 2131361860; - - // aapt resource value: 0x7f0a0045 - public const int Base_TextAppearance_AppCompat_Medium = 2131361861; - - // aapt resource value: 0x7f0a000d - public const int Base_TextAppearance_AppCompat_Medium_Inverse = 2131361805; - - // aapt resource value: 0x7f0a0046 - public const int Base_TextAppearance_AppCompat_Menu = 2131361862; - - // aapt resource value: 0x7f0a00a1 - public const int Base_TextAppearance_AppCompat_SearchResult = 2131361953; - - // aapt resource value: 0x7f0a0047 - public const int Base_TextAppearance_AppCompat_SearchResult_Subtitle = 2131361863; - - // aapt resource value: 0x7f0a0048 - public const int Base_TextAppearance_AppCompat_SearchResult_Title = 2131361864; - - // aapt resource value: 0x7f0a0049 - public const int Base_TextAppearance_AppCompat_Small = 2131361865; - - // aapt resource value: 0x7f0a000e - public const int Base_TextAppearance_AppCompat_Small_Inverse = 2131361806; - - // aapt resource value: 0x7f0a004a - public const int Base_TextAppearance_AppCompat_Subhead = 2131361866; - - // aapt resource value: 0x7f0a000f - public const int Base_TextAppearance_AppCompat_Subhead_Inverse = 2131361807; - - // aapt resource value: 0x7f0a004b - public const int Base_TextAppearance_AppCompat_Title = 2131361867; - - // aapt resource value: 0x7f0a0010 - public const int Base_TextAppearance_AppCompat_Title_Inverse = 2131361808; - - // aapt resource value: 0x7f0a00a2 - public const int Base_TextAppearance_AppCompat_Tooltip = 2131361954; - - // aapt resource value: 0x7f0a0086 - public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Menu = 2131361926; - - // aapt resource value: 0x7f0a004c - public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle = 2131361868; - - // aapt resource value: 0x7f0a004d - public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = 2131361869; - - // aapt resource value: 0x7f0a004e - public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Title = 2131361870; - - // aapt resource value: 0x7f0a004f - public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = 2131361871; - - // aapt resource value: 0x7f0a0050 - public const int Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle = 2131361872; - - // aapt resource value: 0x7f0a0051 - public const int Base_TextAppearance_AppCompat_Widget_ActionMode_Title = 2131361873; - - // aapt resource value: 0x7f0a0052 - public const int Base_TextAppearance_AppCompat_Widget_Button = 2131361874; - - // aapt resource value: 0x7f0a008d - public const int Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored = 2131361933; - - // aapt resource value: 0x7f0a008e - public const int Base_TextAppearance_AppCompat_Widget_Button_Colored = 2131361934; - - // aapt resource value: 0x7f0a0087 - public const int Base_TextAppearance_AppCompat_Widget_Button_Inverse = 2131361927; - - // aapt resource value: 0x7f0a00a3 - public const int Base_TextAppearance_AppCompat_Widget_DropDownItem = 2131361955; - - // aapt resource value: 0x7f0a0053 - public const int Base_TextAppearance_AppCompat_Widget_PopupMenu_Header = 2131361875; - - // aapt resource value: 0x7f0a0054 - public const int Base_TextAppearance_AppCompat_Widget_PopupMenu_Large = 2131361876; - - // aapt resource value: 0x7f0a0055 - public const int Base_TextAppearance_AppCompat_Widget_PopupMenu_Small = 2131361877; - - // aapt resource value: 0x7f0a0056 - public const int Base_TextAppearance_AppCompat_Widget_Switch = 2131361878; - - // aapt resource value: 0x7f0a0057 - public const int Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem = 2131361879; - - // aapt resource value: 0x7f0a00a4 - public const int Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item = 2131361956; - - // aapt resource value: 0x7f0a0058 - public const int Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle = 2131361880; - - // aapt resource value: 0x7f0a0059 - public const int Base_TextAppearance_Widget_AppCompat_Toolbar_Title = 2131361881; - - // aapt resource value: 0x7f0a005a - public const int Base_Theme_AppCompat = 2131361882; - - // aapt resource value: 0x7f0a00a5 - public const int Base_Theme_AppCompat_CompactMenu = 2131361957; - - // aapt resource value: 0x7f0a0011 - public const int Base_Theme_AppCompat_Dialog = 2131361809; - - // aapt resource value: 0x7f0a0012 - public const int Base_Theme_AppCompat_Dialog_Alert = 2131361810; - - // aapt resource value: 0x7f0a00a6 - public const int Base_Theme_AppCompat_Dialog_FixedSize = 2131361958; - - // aapt resource value: 0x7f0a0013 - public const int Base_Theme_AppCompat_Dialog_MinWidth = 2131361811; - - // aapt resource value: 0x7f0a0001 - public const int Base_Theme_AppCompat_DialogWhenLarge = 2131361793; - - // aapt resource value: 0x7f0a005b - public const int Base_Theme_AppCompat_Light = 2131361883; - - // aapt resource value: 0x7f0a00a7 - public const int Base_Theme_AppCompat_Light_DarkActionBar = 2131361959; - - // aapt resource value: 0x7f0a0014 - public const int Base_Theme_AppCompat_Light_Dialog = 2131361812; - - // aapt resource value: 0x7f0a0015 - public const int Base_Theme_AppCompat_Light_Dialog_Alert = 2131361813; - - // aapt resource value: 0x7f0a00a8 - public const int Base_Theme_AppCompat_Light_Dialog_FixedSize = 2131361960; - - // aapt resource value: 0x7f0a0016 - public const int Base_Theme_AppCompat_Light_Dialog_MinWidth = 2131361814; - - // aapt resource value: 0x7f0a0002 - public const int Base_Theme_AppCompat_Light_DialogWhenLarge = 2131361794; - - // aapt resource value: 0x7f0a00a9 - public const int Base_ThemeOverlay_AppCompat = 2131361961; - - // aapt resource value: 0x7f0a00aa - public const int Base_ThemeOverlay_AppCompat_ActionBar = 2131361962; - - // aapt resource value: 0x7f0a00ab - public const int Base_ThemeOverlay_AppCompat_Dark = 2131361963; - - // aapt resource value: 0x7f0a00ac - public const int Base_ThemeOverlay_AppCompat_Dark_ActionBar = 2131361964; - - // aapt resource value: 0x7f0a0017 - public const int Base_ThemeOverlay_AppCompat_Dialog = 2131361815; - - // aapt resource value: 0x7f0a0018 - public const int Base_ThemeOverlay_AppCompat_Dialog_Alert = 2131361816; - - // aapt resource value: 0x7f0a00ad - public const int Base_ThemeOverlay_AppCompat_Light = 2131361965; - - // aapt resource value: 0x7f0a0019 - public const int Base_V11_Theme_AppCompat_Dialog = 2131361817; - - // aapt resource value: 0x7f0a001a - public const int Base_V11_Theme_AppCompat_Light_Dialog = 2131361818; - - // aapt resource value: 0x7f0a001b - public const int Base_V11_ThemeOverlay_AppCompat_Dialog = 2131361819; - - // aapt resource value: 0x7f0a0023 - public const int Base_V12_Widget_AppCompat_AutoCompleteTextView = 2131361827; - - // aapt resource value: 0x7f0a0024 - public const int Base_V12_Widget_AppCompat_EditText = 2131361828; - - // aapt resource value: 0x7f0a0160 - public const int Base_V14_Widget_Design_AppBarLayout = 2131362144; - - // aapt resource value: 0x7f0a005c - public const int Base_V21_Theme_AppCompat = 2131361884; - - // aapt resource value: 0x7f0a005d - public const int Base_V21_Theme_AppCompat_Dialog = 2131361885; - - // aapt resource value: 0x7f0a005e - public const int Base_V21_Theme_AppCompat_Light = 2131361886; - - // aapt resource value: 0x7f0a005f - public const int Base_V21_Theme_AppCompat_Light_Dialog = 2131361887; - - // aapt resource value: 0x7f0a0060 - public const int Base_V21_ThemeOverlay_AppCompat_Dialog = 2131361888; - - // aapt resource value: 0x7f0a015c - public const int Base_V21_Widget_Design_AppBarLayout = 2131362140; - - // aapt resource value: 0x7f0a0084 - public const int Base_V22_Theme_AppCompat = 2131361924; - - // aapt resource value: 0x7f0a0085 - public const int Base_V22_Theme_AppCompat_Light = 2131361925; - - // aapt resource value: 0x7f0a0088 - public const int Base_V23_Theme_AppCompat = 2131361928; - - // aapt resource value: 0x7f0a0089 - public const int Base_V23_Theme_AppCompat_Light = 2131361929; - - // aapt resource value: 0x7f0a0091 - public const int Base_V26_Theme_AppCompat = 2131361937; - - // aapt resource value: 0x7f0a0092 - public const int Base_V26_Theme_AppCompat_Light = 2131361938; - - // aapt resource value: 0x7f0a0093 - public const int Base_V26_Widget_AppCompat_Toolbar = 2131361939; - - // aapt resource value: 0x7f0a015e - public const int Base_V26_Widget_Design_AppBarLayout = 2131362142; - - // aapt resource value: 0x7f0a00ae - public const int Base_V7_Theme_AppCompat = 2131361966; - - // aapt resource value: 0x7f0a00af - public const int Base_V7_Theme_AppCompat_Dialog = 2131361967; - - // aapt resource value: 0x7f0a00b0 - public const int Base_V7_Theme_AppCompat_Light = 2131361968; - - // aapt resource value: 0x7f0a00b1 - public const int Base_V7_Theme_AppCompat_Light_Dialog = 2131361969; - - // aapt resource value: 0x7f0a00b2 - public const int Base_V7_ThemeOverlay_AppCompat_Dialog = 2131361970; - - // aapt resource value: 0x7f0a00b3 - public const int Base_V7_Widget_AppCompat_AutoCompleteTextView = 2131361971; - - // aapt resource value: 0x7f0a00b4 - public const int Base_V7_Widget_AppCompat_EditText = 2131361972; - - // aapt resource value: 0x7f0a00b5 - public const int Base_V7_Widget_AppCompat_Toolbar = 2131361973; - - // aapt resource value: 0x7f0a00b6 - public const int Base_Widget_AppCompat_ActionBar = 2131361974; - - // aapt resource value: 0x7f0a00b7 - public const int Base_Widget_AppCompat_ActionBar_Solid = 2131361975; - - // aapt resource value: 0x7f0a00b8 - public const int Base_Widget_AppCompat_ActionBar_TabBar = 2131361976; - - // aapt resource value: 0x7f0a0061 - public const int Base_Widget_AppCompat_ActionBar_TabText = 2131361889; - - // aapt resource value: 0x7f0a0062 - public const int Base_Widget_AppCompat_ActionBar_TabView = 2131361890; - - // aapt resource value: 0x7f0a0063 - public const int Base_Widget_AppCompat_ActionButton = 2131361891; - - // aapt resource value: 0x7f0a0064 - public const int Base_Widget_AppCompat_ActionButton_CloseMode = 2131361892; - - // aapt resource value: 0x7f0a0065 - public const int Base_Widget_AppCompat_ActionButton_Overflow = 2131361893; - - // aapt resource value: 0x7f0a00b9 - public const int Base_Widget_AppCompat_ActionMode = 2131361977; - - // aapt resource value: 0x7f0a00ba - public const int Base_Widget_AppCompat_ActivityChooserView = 2131361978; - - // aapt resource value: 0x7f0a0025 - public const int Base_Widget_AppCompat_AutoCompleteTextView = 2131361829; - - // aapt resource value: 0x7f0a0066 - public const int Base_Widget_AppCompat_Button = 2131361894; - - // aapt resource value: 0x7f0a0067 - public const int Base_Widget_AppCompat_Button_Borderless = 2131361895; - - // aapt resource value: 0x7f0a0068 - public const int Base_Widget_AppCompat_Button_Borderless_Colored = 2131361896; - - // aapt resource value: 0x7f0a00bb - public const int Base_Widget_AppCompat_Button_ButtonBar_AlertDialog = 2131361979; - - // aapt resource value: 0x7f0a008a - public const int Base_Widget_AppCompat_Button_Colored = 2131361930; - - // aapt resource value: 0x7f0a0069 - public const int Base_Widget_AppCompat_Button_Small = 2131361897; - - // aapt resource value: 0x7f0a006a - public const int Base_Widget_AppCompat_ButtonBar = 2131361898; - - // aapt resource value: 0x7f0a00bc - public const int Base_Widget_AppCompat_ButtonBar_AlertDialog = 2131361980; - - // aapt resource value: 0x7f0a006b - public const int Base_Widget_AppCompat_CompoundButton_CheckBox = 2131361899; - - // aapt resource value: 0x7f0a006c - public const int Base_Widget_AppCompat_CompoundButton_RadioButton = 2131361900; - - // aapt resource value: 0x7f0a00bd - public const int Base_Widget_AppCompat_CompoundButton_Switch = 2131361981; - - // aapt resource value: 0x7f0a0000 - public const int Base_Widget_AppCompat_DrawerArrowToggle = 2131361792; - - // aapt resource value: 0x7f0a00be - public const int Base_Widget_AppCompat_DrawerArrowToggle_Common = 2131361982; - - // aapt resource value: 0x7f0a006d - public const int Base_Widget_AppCompat_DropDownItem_Spinner = 2131361901; - - // aapt resource value: 0x7f0a0026 - public const int Base_Widget_AppCompat_EditText = 2131361830; - - // aapt resource value: 0x7f0a006e - public const int Base_Widget_AppCompat_ImageButton = 2131361902; - - // aapt resource value: 0x7f0a00bf - public const int Base_Widget_AppCompat_Light_ActionBar = 2131361983; - - // aapt resource value: 0x7f0a00c0 - public const int Base_Widget_AppCompat_Light_ActionBar_Solid = 2131361984; - - // aapt resource value: 0x7f0a00c1 - public const int Base_Widget_AppCompat_Light_ActionBar_TabBar = 2131361985; - - // aapt resource value: 0x7f0a006f - public const int Base_Widget_AppCompat_Light_ActionBar_TabText = 2131361903; - - // aapt resource value: 0x7f0a0070 - public const int Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse = 2131361904; - - // aapt resource value: 0x7f0a0071 - public const int Base_Widget_AppCompat_Light_ActionBar_TabView = 2131361905; - - // aapt resource value: 0x7f0a0072 - public const int Base_Widget_AppCompat_Light_PopupMenu = 2131361906; - - // aapt resource value: 0x7f0a0073 - public const int Base_Widget_AppCompat_Light_PopupMenu_Overflow = 2131361907; - - // aapt resource value: 0x7f0a00c2 - public const int Base_Widget_AppCompat_ListMenuView = 2131361986; - - // aapt resource value: 0x7f0a0074 - public const int Base_Widget_AppCompat_ListPopupWindow = 2131361908; - - // aapt resource value: 0x7f0a0075 - public const int Base_Widget_AppCompat_ListView = 2131361909; - - // aapt resource value: 0x7f0a0076 - public const int Base_Widget_AppCompat_ListView_DropDown = 2131361910; - - // aapt resource value: 0x7f0a0077 - public const int Base_Widget_AppCompat_ListView_Menu = 2131361911; - - // aapt resource value: 0x7f0a0078 - public const int Base_Widget_AppCompat_PopupMenu = 2131361912; - - // aapt resource value: 0x7f0a0079 - public const int Base_Widget_AppCompat_PopupMenu_Overflow = 2131361913; - - // aapt resource value: 0x7f0a00c3 - public const int Base_Widget_AppCompat_PopupWindow = 2131361987; - - // aapt resource value: 0x7f0a001c - public const int Base_Widget_AppCompat_ProgressBar = 2131361820; - - // aapt resource value: 0x7f0a001d - public const int Base_Widget_AppCompat_ProgressBar_Horizontal = 2131361821; - - // aapt resource value: 0x7f0a007a - public const int Base_Widget_AppCompat_RatingBar = 2131361914; - - // aapt resource value: 0x7f0a008b - public const int Base_Widget_AppCompat_RatingBar_Indicator = 2131361931; - - // aapt resource value: 0x7f0a008c - public const int Base_Widget_AppCompat_RatingBar_Small = 2131361932; - - // aapt resource value: 0x7f0a00c4 - public const int Base_Widget_AppCompat_SearchView = 2131361988; - - // aapt resource value: 0x7f0a00c5 - public const int Base_Widget_AppCompat_SearchView_ActionBar = 2131361989; - - // aapt resource value: 0x7f0a007b - public const int Base_Widget_AppCompat_SeekBar = 2131361915; - - // aapt resource value: 0x7f0a00c6 - public const int Base_Widget_AppCompat_SeekBar_Discrete = 2131361990; - - // aapt resource value: 0x7f0a007c - public const int Base_Widget_AppCompat_Spinner = 2131361916; - - // aapt resource value: 0x7f0a0003 - public const int Base_Widget_AppCompat_Spinner_Underlined = 2131361795; - - // aapt resource value: 0x7f0a007d - public const int Base_Widget_AppCompat_TextView_SpinnerItem = 2131361917; - - // aapt resource value: 0x7f0a0094 - public const int Base_Widget_AppCompat_Toolbar = 2131361940; - - // aapt resource value: 0x7f0a007e - public const int Base_Widget_AppCompat_Toolbar_Button_Navigation = 2131361918; - - // aapt resource value: 0x7f0a015d - public const int Base_Widget_Design_AppBarLayout = 2131362141; - - // aapt resource value: 0x7f0a0161 - public const int Base_Widget_Design_TabLayout = 2131362145; - - // aapt resource value: 0x7f0a001e - public const int Platform_AppCompat = 2131361822; - - // aapt resource value: 0x7f0a001f - public const int Platform_AppCompat_Light = 2131361823; - - // aapt resource value: 0x7f0a007f - public const int Platform_ThemeOverlay_AppCompat = 2131361919; - - // aapt resource value: 0x7f0a0080 - public const int Platform_ThemeOverlay_AppCompat_Dark = 2131361920; - - // aapt resource value: 0x7f0a0081 - public const int Platform_ThemeOverlay_AppCompat_Light = 2131361921; - - // aapt resource value: 0x7f0a0020 - public const int Platform_V11_AppCompat = 2131361824; - - // aapt resource value: 0x7f0a0021 - public const int Platform_V11_AppCompat_Light = 2131361825; - - // aapt resource value: 0x7f0a0028 - public const int Platform_V14_AppCompat = 2131361832; - - // aapt resource value: 0x7f0a0029 - public const int Platform_V14_AppCompat_Light = 2131361833; - - // aapt resource value: 0x7f0a0082 - public const int Platform_V21_AppCompat = 2131361922; - - // aapt resource value: 0x7f0a0083 - public const int Platform_V21_AppCompat_Light = 2131361923; - - // aapt resource value: 0x7f0a008f - public const int Platform_V25_AppCompat = 2131361935; - - // aapt resource value: 0x7f0a0090 - public const int Platform_V25_AppCompat_Light = 2131361936; - - // aapt resource value: 0x7f0a0022 - public const int Platform_Widget_AppCompat_Spinner = 2131361826; - - // aapt resource value: 0x7f0a002b - public const int RtlOverlay_DialogWindowTitle_AppCompat = 2131361835; - - // aapt resource value: 0x7f0a002c - public const int RtlOverlay_Widget_AppCompat_ActionBar_TitleItem = 2131361836; - - // aapt resource value: 0x7f0a002d - public const int RtlOverlay_Widget_AppCompat_DialogTitle_Icon = 2131361837; - - // aapt resource value: 0x7f0a002e - public const int RtlOverlay_Widget_AppCompat_PopupMenuItem = 2131361838; - - // aapt resource value: 0x7f0a002f - public const int RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup = 2131361839; - - // aapt resource value: 0x7f0a0030 - public const int RtlOverlay_Widget_AppCompat_PopupMenuItem_Text = 2131361840; - - // aapt resource value: 0x7f0a0031 - public const int RtlOverlay_Widget_AppCompat_Search_DropDown = 2131361841; - - // aapt resource value: 0x7f0a0032 - public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 = 2131361842; - - // aapt resource value: 0x7f0a0033 - public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 = 2131361843; - - // aapt resource value: 0x7f0a0034 - public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Query = 2131361844; - - // aapt resource value: 0x7f0a0035 - public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Text = 2131361845; - - // aapt resource value: 0x7f0a0036 - public const int RtlOverlay_Widget_AppCompat_SearchView_MagIcon = 2131361846; - - // aapt resource value: 0x7f0a0037 - public const int RtlUnderlay_Widget_AppCompat_ActionButton = 2131361847; - - // aapt resource value: 0x7f0a0038 - public const int RtlUnderlay_Widget_AppCompat_ActionButton_Overflow = 2131361848; - - // aapt resource value: 0x7f0a00c7 - public const int TextAppearance_AppCompat = 2131361991; - - // aapt resource value: 0x7f0a00c8 - public const int TextAppearance_AppCompat_Body1 = 2131361992; - - // aapt resource value: 0x7f0a00c9 - public const int TextAppearance_AppCompat_Body2 = 2131361993; - - // aapt resource value: 0x7f0a00ca - public const int TextAppearance_AppCompat_Button = 2131361994; - - // aapt resource value: 0x7f0a00cb - public const int TextAppearance_AppCompat_Caption = 2131361995; - - // aapt resource value: 0x7f0a00cc - public const int TextAppearance_AppCompat_Display1 = 2131361996; - - // aapt resource value: 0x7f0a00cd - public const int TextAppearance_AppCompat_Display2 = 2131361997; - - // aapt resource value: 0x7f0a00ce - public const int TextAppearance_AppCompat_Display3 = 2131361998; - - // aapt resource value: 0x7f0a00cf - public const int TextAppearance_AppCompat_Display4 = 2131361999; - - // aapt resource value: 0x7f0a00d0 - public const int TextAppearance_AppCompat_Headline = 2131362000; - - // aapt resource value: 0x7f0a00d1 - public const int TextAppearance_AppCompat_Inverse = 2131362001; - - // aapt resource value: 0x7f0a00d2 - public const int TextAppearance_AppCompat_Large = 2131362002; - - // aapt resource value: 0x7f0a00d3 - public const int TextAppearance_AppCompat_Large_Inverse = 2131362003; - - // aapt resource value: 0x7f0a00d4 - public const int TextAppearance_AppCompat_Light_SearchResult_Subtitle = 2131362004; - - // aapt resource value: 0x7f0a00d5 - public const int TextAppearance_AppCompat_Light_SearchResult_Title = 2131362005; - - // aapt resource value: 0x7f0a00d6 - public const int TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = 2131362006; - - // aapt resource value: 0x7f0a00d7 - public const int TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = 2131362007; - - // aapt resource value: 0x7f0a00d8 - public const int TextAppearance_AppCompat_Medium = 2131362008; - - // aapt resource value: 0x7f0a00d9 - public const int TextAppearance_AppCompat_Medium_Inverse = 2131362009; - - // aapt resource value: 0x7f0a00da - public const int TextAppearance_AppCompat_Menu = 2131362010; - - // aapt resource value: 0x7f0a00db - public const int TextAppearance_AppCompat_SearchResult_Subtitle = 2131362011; - - // aapt resource value: 0x7f0a00dc - public const int TextAppearance_AppCompat_SearchResult_Title = 2131362012; - - // aapt resource value: 0x7f0a00dd - public const int TextAppearance_AppCompat_Small = 2131362013; - - // aapt resource value: 0x7f0a00de - public const int TextAppearance_AppCompat_Small_Inverse = 2131362014; - - // aapt resource value: 0x7f0a00df - public const int TextAppearance_AppCompat_Subhead = 2131362015; - - // aapt resource value: 0x7f0a00e0 - public const int TextAppearance_AppCompat_Subhead_Inverse = 2131362016; - - // aapt resource value: 0x7f0a00e1 - public const int TextAppearance_AppCompat_Title = 2131362017; - - // aapt resource value: 0x7f0a00e2 - public const int TextAppearance_AppCompat_Title_Inverse = 2131362018; - - // aapt resource value: 0x7f0a002a - public const int TextAppearance_AppCompat_Tooltip = 2131361834; - - // aapt resource value: 0x7f0a00e3 - public const int TextAppearance_AppCompat_Widget_ActionBar_Menu = 2131362019; - - // aapt resource value: 0x7f0a00e4 - public const int TextAppearance_AppCompat_Widget_ActionBar_Subtitle = 2131362020; - - // aapt resource value: 0x7f0a00e5 - public const int TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = 2131362021; - - // aapt resource value: 0x7f0a00e6 - public const int TextAppearance_AppCompat_Widget_ActionBar_Title = 2131362022; - - // aapt resource value: 0x7f0a00e7 - public const int TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = 2131362023; - - // aapt resource value: 0x7f0a00e8 - public const int TextAppearance_AppCompat_Widget_ActionMode_Subtitle = 2131362024; - - // aapt resource value: 0x7f0a00e9 - public const int TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse = 2131362025; - - // aapt resource value: 0x7f0a00ea - public const int TextAppearance_AppCompat_Widget_ActionMode_Title = 2131362026; - - // aapt resource value: 0x7f0a00eb - public const int TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse = 2131362027; - - // aapt resource value: 0x7f0a00ec - public const int TextAppearance_AppCompat_Widget_Button = 2131362028; - - // aapt resource value: 0x7f0a00ed - public const int TextAppearance_AppCompat_Widget_Button_Borderless_Colored = 2131362029; - - // aapt resource value: 0x7f0a00ee - public const int TextAppearance_AppCompat_Widget_Button_Colored = 2131362030; - - // aapt resource value: 0x7f0a00ef - public const int TextAppearance_AppCompat_Widget_Button_Inverse = 2131362031; - - // aapt resource value: 0x7f0a00f0 - public const int TextAppearance_AppCompat_Widget_DropDownItem = 2131362032; - - // aapt resource value: 0x7f0a00f1 - public const int TextAppearance_AppCompat_Widget_PopupMenu_Header = 2131362033; - - // aapt resource value: 0x7f0a00f2 - public const int TextAppearance_AppCompat_Widget_PopupMenu_Large = 2131362034; - - // aapt resource value: 0x7f0a00f3 - public const int TextAppearance_AppCompat_Widget_PopupMenu_Small = 2131362035; - - // aapt resource value: 0x7f0a00f4 - public const int TextAppearance_AppCompat_Widget_Switch = 2131362036; - - // aapt resource value: 0x7f0a00f5 - public const int TextAppearance_AppCompat_Widget_TextView_SpinnerItem = 2131362037; - - // aapt resource value: 0x7f0a0179 - public const int TextAppearance_Compat_Notification = 2131362169; - - // aapt resource value: 0x7f0a017a - public const int TextAppearance_Compat_Notification_Info = 2131362170; - - // aapt resource value: 0x7f0a0156 - public const int TextAppearance_Compat_Notification_Info_Media = 2131362134; - - // aapt resource value: 0x7f0a017f - public const int TextAppearance_Compat_Notification_Line2 = 2131362175; - - // aapt resource value: 0x7f0a015a - public const int TextAppearance_Compat_Notification_Line2_Media = 2131362138; - - // aapt resource value: 0x7f0a0157 - public const int TextAppearance_Compat_Notification_Media = 2131362135; - - // aapt resource value: 0x7f0a017b - public const int TextAppearance_Compat_Notification_Time = 2131362171; - - // aapt resource value: 0x7f0a0158 - public const int TextAppearance_Compat_Notification_Time_Media = 2131362136; - - // aapt resource value: 0x7f0a017c - public const int TextAppearance_Compat_Notification_Title = 2131362172; - - // aapt resource value: 0x7f0a0159 - public const int TextAppearance_Compat_Notification_Title_Media = 2131362137; - - // aapt resource value: 0x7f0a0162 - public const int TextAppearance_Design_CollapsingToolbar_Expanded = 2131362146; - - // aapt resource value: 0x7f0a0163 - public const int TextAppearance_Design_Counter = 2131362147; - - // aapt resource value: 0x7f0a0164 - public const int TextAppearance_Design_Counter_Overflow = 2131362148; - - // aapt resource value: 0x7f0a0165 - public const int TextAppearance_Design_Error = 2131362149; - - // aapt resource value: 0x7f0a0166 - public const int TextAppearance_Design_Hint = 2131362150; - - // aapt resource value: 0x7f0a0167 - public const int TextAppearance_Design_Snackbar_Message = 2131362151; - - // aapt resource value: 0x7f0a0168 - public const int TextAppearance_Design_Tab = 2131362152; - - // aapt resource value: 0x7f0a00f6 - public const int TextAppearance_Widget_AppCompat_ExpandedMenu_Item = 2131362038; - - // aapt resource value: 0x7f0a00f7 - public const int TextAppearance_Widget_AppCompat_Toolbar_Subtitle = 2131362039; - - // aapt resource value: 0x7f0a00f8 - public const int TextAppearance_Widget_AppCompat_Toolbar_Title = 2131362040; - - // aapt resource value: 0x7f0a00f9 - public const int Theme_AppCompat = 2131362041; - - // aapt resource value: 0x7f0a00fa - public const int Theme_AppCompat_CompactMenu = 2131362042; - - // aapt resource value: 0x7f0a0004 - public const int Theme_AppCompat_DayNight = 2131361796; - - // aapt resource value: 0x7f0a0005 - public const int Theme_AppCompat_DayNight_DarkActionBar = 2131361797; - - // aapt resource value: 0x7f0a0006 - public const int Theme_AppCompat_DayNight_Dialog = 2131361798; - - // aapt resource value: 0x7f0a0007 - public const int Theme_AppCompat_DayNight_Dialog_Alert = 2131361799; - - // aapt resource value: 0x7f0a0008 - public const int Theme_AppCompat_DayNight_Dialog_MinWidth = 2131361800; - - // aapt resource value: 0x7f0a0009 - public const int Theme_AppCompat_DayNight_DialogWhenLarge = 2131361801; - - // aapt resource value: 0x7f0a000a - public const int Theme_AppCompat_DayNight_NoActionBar = 2131361802; - - // aapt resource value: 0x7f0a00fb - public const int Theme_AppCompat_Dialog = 2131362043; - - // aapt resource value: 0x7f0a00fc - public const int Theme_AppCompat_Dialog_Alert = 2131362044; - - // aapt resource value: 0x7f0a00fd - public const int Theme_AppCompat_Dialog_MinWidth = 2131362045; - - // aapt resource value: 0x7f0a00fe - public const int Theme_AppCompat_DialogWhenLarge = 2131362046; - - // aapt resource value: 0x7f0a00ff - public const int Theme_AppCompat_Light = 2131362047; - - // aapt resource value: 0x7f0a0100 - public const int Theme_AppCompat_Light_DarkActionBar = 2131362048; - - // aapt resource value: 0x7f0a0101 - public const int Theme_AppCompat_Light_Dialog = 2131362049; - - // aapt resource value: 0x7f0a0102 - public const int Theme_AppCompat_Light_Dialog_Alert = 2131362050; - - // aapt resource value: 0x7f0a0103 - public const int Theme_AppCompat_Light_Dialog_MinWidth = 2131362051; - - // aapt resource value: 0x7f0a0104 - public const int Theme_AppCompat_Light_DialogWhenLarge = 2131362052; - - // aapt resource value: 0x7f0a0105 - public const int Theme_AppCompat_Light_NoActionBar = 2131362053; - - // aapt resource value: 0x7f0a0106 - public const int Theme_AppCompat_NoActionBar = 2131362054; - - // aapt resource value: 0x7f0a0169 - public const int Theme_Design = 2131362153; - - // aapt resource value: 0x7f0a016a - public const int Theme_Design_BottomSheetDialog = 2131362154; - - // aapt resource value: 0x7f0a016b - public const int Theme_Design_Light = 2131362155; - - // aapt resource value: 0x7f0a016c - public const int Theme_Design_Light_BottomSheetDialog = 2131362156; - - // aapt resource value: 0x7f0a016d - public const int Theme_Design_Light_NoActionBar = 2131362157; - - // aapt resource value: 0x7f0a016e - public const int Theme_Design_NoActionBar = 2131362158; - - // aapt resource value: 0x7f0a0107 - public const int ThemeOverlay_AppCompat = 2131362055; - - // aapt resource value: 0x7f0a0108 - public const int ThemeOverlay_AppCompat_ActionBar = 2131362056; - - // aapt resource value: 0x7f0a0109 - public const int ThemeOverlay_AppCompat_Dark = 2131362057; - - // aapt resource value: 0x7f0a010a - public const int ThemeOverlay_AppCompat_Dark_ActionBar = 2131362058; - - // aapt resource value: 0x7f0a010b - public const int ThemeOverlay_AppCompat_Dialog = 2131362059; - - // aapt resource value: 0x7f0a010c - public const int ThemeOverlay_AppCompat_Dialog_Alert = 2131362060; - - // aapt resource value: 0x7f0a010d - public const int ThemeOverlay_AppCompat_Light = 2131362061; - - // aapt resource value: 0x7f0a010e - public const int Widget_AppCompat_ActionBar = 2131362062; - - // aapt resource value: 0x7f0a010f - public const int Widget_AppCompat_ActionBar_Solid = 2131362063; - - // aapt resource value: 0x7f0a0110 - public const int Widget_AppCompat_ActionBar_TabBar = 2131362064; - - // aapt resource value: 0x7f0a0111 - public const int Widget_AppCompat_ActionBar_TabText = 2131362065; - - // aapt resource value: 0x7f0a0112 - public const int Widget_AppCompat_ActionBar_TabView = 2131362066; - - // aapt resource value: 0x7f0a0113 - public const int Widget_AppCompat_ActionButton = 2131362067; - - // aapt resource value: 0x7f0a0114 - public const int Widget_AppCompat_ActionButton_CloseMode = 2131362068; - - // aapt resource value: 0x7f0a0115 - public const int Widget_AppCompat_ActionButton_Overflow = 2131362069; - - // aapt resource value: 0x7f0a0116 - public const int Widget_AppCompat_ActionMode = 2131362070; - - // aapt resource value: 0x7f0a0117 - public const int Widget_AppCompat_ActivityChooserView = 2131362071; - - // aapt resource value: 0x7f0a0118 - public const int Widget_AppCompat_AutoCompleteTextView = 2131362072; - - // aapt resource value: 0x7f0a0119 - public const int Widget_AppCompat_Button = 2131362073; - - // aapt resource value: 0x7f0a011a - public const int Widget_AppCompat_Button_Borderless = 2131362074; - - // aapt resource value: 0x7f0a011b - public const int Widget_AppCompat_Button_Borderless_Colored = 2131362075; - - // aapt resource value: 0x7f0a011c - public const int Widget_AppCompat_Button_ButtonBar_AlertDialog = 2131362076; - - // aapt resource value: 0x7f0a011d - public const int Widget_AppCompat_Button_Colored = 2131362077; - - // aapt resource value: 0x7f0a011e - public const int Widget_AppCompat_Button_Small = 2131362078; - - // aapt resource value: 0x7f0a011f - public const int Widget_AppCompat_ButtonBar = 2131362079; - - // aapt resource value: 0x7f0a0120 - public const int Widget_AppCompat_ButtonBar_AlertDialog = 2131362080; - - // aapt resource value: 0x7f0a0121 - public const int Widget_AppCompat_CompoundButton_CheckBox = 2131362081; - - // aapt resource value: 0x7f0a0122 - public const int Widget_AppCompat_CompoundButton_RadioButton = 2131362082; - - // aapt resource value: 0x7f0a0123 - public const int Widget_AppCompat_CompoundButton_Switch = 2131362083; - - // aapt resource value: 0x7f0a0124 - public const int Widget_AppCompat_DrawerArrowToggle = 2131362084; - - // aapt resource value: 0x7f0a0125 - public const int Widget_AppCompat_DropDownItem_Spinner = 2131362085; - - // aapt resource value: 0x7f0a0126 - public const int Widget_AppCompat_EditText = 2131362086; - - // aapt resource value: 0x7f0a0127 - public const int Widget_AppCompat_ImageButton = 2131362087; - - // aapt resource value: 0x7f0a0128 - public const int Widget_AppCompat_Light_ActionBar = 2131362088; - - // aapt resource value: 0x7f0a0129 - public const int Widget_AppCompat_Light_ActionBar_Solid = 2131362089; - - // aapt resource value: 0x7f0a012a - public const int Widget_AppCompat_Light_ActionBar_Solid_Inverse = 2131362090; - - // aapt resource value: 0x7f0a012b - public const int Widget_AppCompat_Light_ActionBar_TabBar = 2131362091; - - // aapt resource value: 0x7f0a012c - public const int Widget_AppCompat_Light_ActionBar_TabBar_Inverse = 2131362092; - - // aapt resource value: 0x7f0a012d - public const int Widget_AppCompat_Light_ActionBar_TabText = 2131362093; - - // aapt resource value: 0x7f0a012e - public const int Widget_AppCompat_Light_ActionBar_TabText_Inverse = 2131362094; - - // aapt resource value: 0x7f0a012f - public const int Widget_AppCompat_Light_ActionBar_TabView = 2131362095; - - // aapt resource value: 0x7f0a0130 - public const int Widget_AppCompat_Light_ActionBar_TabView_Inverse = 2131362096; - - // aapt resource value: 0x7f0a0131 - public const int Widget_AppCompat_Light_ActionButton = 2131362097; - - // aapt resource value: 0x7f0a0132 - public const int Widget_AppCompat_Light_ActionButton_CloseMode = 2131362098; - - // aapt resource value: 0x7f0a0133 - public const int Widget_AppCompat_Light_ActionButton_Overflow = 2131362099; - - // aapt resource value: 0x7f0a0134 - public const int Widget_AppCompat_Light_ActionMode_Inverse = 2131362100; - - // aapt resource value: 0x7f0a0135 - public const int Widget_AppCompat_Light_ActivityChooserView = 2131362101; - - // aapt resource value: 0x7f0a0136 - public const int Widget_AppCompat_Light_AutoCompleteTextView = 2131362102; - - // aapt resource value: 0x7f0a0137 - public const int Widget_AppCompat_Light_DropDownItem_Spinner = 2131362103; - - // aapt resource value: 0x7f0a0138 - public const int Widget_AppCompat_Light_ListPopupWindow = 2131362104; - - // aapt resource value: 0x7f0a0139 - public const int Widget_AppCompat_Light_ListView_DropDown = 2131362105; - - // aapt resource value: 0x7f0a013a - public const int Widget_AppCompat_Light_PopupMenu = 2131362106; - - // aapt resource value: 0x7f0a013b - public const int Widget_AppCompat_Light_PopupMenu_Overflow = 2131362107; - - // aapt resource value: 0x7f0a013c - public const int Widget_AppCompat_Light_SearchView = 2131362108; - - // aapt resource value: 0x7f0a013d - public const int Widget_AppCompat_Light_Spinner_DropDown_ActionBar = 2131362109; - - // aapt resource value: 0x7f0a013e - public const int Widget_AppCompat_ListMenuView = 2131362110; - - // aapt resource value: 0x7f0a013f - public const int Widget_AppCompat_ListPopupWindow = 2131362111; - - // aapt resource value: 0x7f0a0140 - public const int Widget_AppCompat_ListView = 2131362112; - - // aapt resource value: 0x7f0a0141 - public const int Widget_AppCompat_ListView_DropDown = 2131362113; - - // aapt resource value: 0x7f0a0142 - public const int Widget_AppCompat_ListView_Menu = 2131362114; - - // aapt resource value: 0x7f0a0143 - public const int Widget_AppCompat_PopupMenu = 2131362115; - - // aapt resource value: 0x7f0a0144 - public const int Widget_AppCompat_PopupMenu_Overflow = 2131362116; - - // aapt resource value: 0x7f0a0145 - public const int Widget_AppCompat_PopupWindow = 2131362117; - - // aapt resource value: 0x7f0a0146 - public const int Widget_AppCompat_ProgressBar = 2131362118; - - // aapt resource value: 0x7f0a0147 - public const int Widget_AppCompat_ProgressBar_Horizontal = 2131362119; - - // aapt resource value: 0x7f0a0148 - public const int Widget_AppCompat_RatingBar = 2131362120; - - // aapt resource value: 0x7f0a0149 - public const int Widget_AppCompat_RatingBar_Indicator = 2131362121; - - // aapt resource value: 0x7f0a014a - public const int Widget_AppCompat_RatingBar_Small = 2131362122; - - // aapt resource value: 0x7f0a014b - public const int Widget_AppCompat_SearchView = 2131362123; - - // aapt resource value: 0x7f0a014c - public const int Widget_AppCompat_SearchView_ActionBar = 2131362124; - - // aapt resource value: 0x7f0a014d - public const int Widget_AppCompat_SeekBar = 2131362125; - - // aapt resource value: 0x7f0a014e - public const int Widget_AppCompat_SeekBar_Discrete = 2131362126; - - // aapt resource value: 0x7f0a014f - public const int Widget_AppCompat_Spinner = 2131362127; - - // aapt resource value: 0x7f0a0150 - public const int Widget_AppCompat_Spinner_DropDown = 2131362128; - - // aapt resource value: 0x7f0a0151 - public const int Widget_AppCompat_Spinner_DropDown_ActionBar = 2131362129; - - // aapt resource value: 0x7f0a0152 - public const int Widget_AppCompat_Spinner_Underlined = 2131362130; - - // aapt resource value: 0x7f0a0153 - public const int Widget_AppCompat_TextView_SpinnerItem = 2131362131; - - // aapt resource value: 0x7f0a0154 - public const int Widget_AppCompat_Toolbar = 2131362132; - - // aapt resource value: 0x7f0a0155 - public const int Widget_AppCompat_Toolbar_Button_Navigation = 2131362133; - - // aapt resource value: 0x7f0a017d - public const int Widget_Compat_NotificationActionContainer = 2131362173; - - // aapt resource value: 0x7f0a017e - public const int Widget_Compat_NotificationActionText = 2131362174; - - // aapt resource value: 0x7f0a016f - public const int Widget_Design_AppBarLayout = 2131362159; - - // aapt resource value: 0x7f0a0170 - public const int Widget_Design_BottomNavigationView = 2131362160; - - // aapt resource value: 0x7f0a0171 - public const int Widget_Design_BottomSheet_Modal = 2131362161; - - // aapt resource value: 0x7f0a0172 - public const int Widget_Design_CollapsingToolbar = 2131362162; - - // aapt resource value: 0x7f0a0173 - public const int Widget_Design_CoordinatorLayout = 2131362163; - - // aapt resource value: 0x7f0a0174 - public const int Widget_Design_FloatingActionButton = 2131362164; - - // aapt resource value: 0x7f0a0175 - public const int Widget_Design_NavigationView = 2131362165; - - // aapt resource value: 0x7f0a0176 - public const int Widget_Design_ScrimInsetsFrameLayout = 2131362166; - - // aapt resource value: 0x7f0a0177 - public const int Widget_Design_Snackbar = 2131362167; - - // aapt resource value: 0x7f0a015b - public const int Widget_Design_TabLayout = 2131362139; - - // aapt resource value: 0x7f0a0178 - public const int Widget_Design_TextInputLayout = 2131362168; - - static Style() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Style() - { - } - } - - public partial class Styleable - { - - public static int[] ActionBar = new int[] { - 2130771978, - 2130771980, - 2130771981, - 2130771982, - 2130771983, - 2130771984, - 2130771985, - 2130771986, - 2130771987, - 2130771988, - 2130771989, - 2130771990, - 2130771991, - 2130771992, - 2130771993, - 2130771994, - 2130771995, - 2130771996, - 2130771997, - 2130771998, - 2130771999, - 2130772000, - 2130772001, - 2130772002, - 2130772003, - 2130772004, - 2130772005, - 2130772006, - 2130772076}; - - // aapt resource value: 10 - public const int ActionBar_background = 10; - - // aapt resource value: 12 - public const int ActionBar_backgroundSplit = 12; - - // aapt resource value: 11 - public const int ActionBar_backgroundStacked = 11; - - // aapt resource value: 21 - public const int ActionBar_contentInsetEnd = 21; - - // aapt resource value: 25 - public const int ActionBar_contentInsetEndWithActions = 25; - - // aapt resource value: 22 - public const int ActionBar_contentInsetLeft = 22; - - // aapt resource value: 23 - public const int ActionBar_contentInsetRight = 23; - - // aapt resource value: 20 - public const int ActionBar_contentInsetStart = 20; - - // aapt resource value: 24 - public const int ActionBar_contentInsetStartWithNavigation = 24; - - // aapt resource value: 13 - public const int ActionBar_customNavigationLayout = 13; - - // aapt resource value: 3 - public const int ActionBar_displayOptions = 3; - - // aapt resource value: 9 - public const int ActionBar_divider = 9; - - // aapt resource value: 26 - public const int ActionBar_elevation = 26; - - // aapt resource value: 0 - public const int ActionBar_height = 0; - - // aapt resource value: 19 - public const int ActionBar_hideOnContentScroll = 19; - - // aapt resource value: 28 - public const int ActionBar_homeAsUpIndicator = 28; - - // aapt resource value: 14 - public const int ActionBar_homeLayout = 14; - - // aapt resource value: 7 - public const int ActionBar_icon = 7; - - // aapt resource value: 16 - public const int ActionBar_indeterminateProgressStyle = 16; - - // aapt resource value: 18 - public const int ActionBar_itemPadding = 18; - - // aapt resource value: 8 - public const int ActionBar_logo = 8; - - // aapt resource value: 2 - public const int ActionBar_navigationMode = 2; - - // aapt resource value: 27 - public const int ActionBar_popupTheme = 27; - - // aapt resource value: 17 - public const int ActionBar_progressBarPadding = 17; - - // aapt resource value: 15 - public const int ActionBar_progressBarStyle = 15; - - // aapt resource value: 4 - public const int ActionBar_subtitle = 4; - - // aapt resource value: 6 - public const int ActionBar_subtitleTextStyle = 6; - - // aapt resource value: 1 - public const int ActionBar_title = 1; - - // aapt resource value: 5 - public const int ActionBar_titleTextStyle = 5; - - public static int[] ActionBarLayout = new int[] { - 16842931}; - - // aapt resource value: 0 - public const int ActionBarLayout_android_layout_gravity = 0; - - public static int[] ActionMenuItemView = new int[] { - 16843071}; - - // aapt resource value: 0 - public const int ActionMenuItemView_android_minWidth = 0; - - public static int[] ActionMenuView; - - public static int[] ActionMode = new int[] { - 2130771978, - 2130771984, - 2130771985, - 2130771989, - 2130771991, - 2130772007}; - - // aapt resource value: 3 - public const int ActionMode_background = 3; - - // aapt resource value: 4 - public const int ActionMode_backgroundSplit = 4; - - // aapt resource value: 5 - public const int ActionMode_closeItemLayout = 5; - - // aapt resource value: 0 - public const int ActionMode_height = 0; - - // aapt resource value: 2 - public const int ActionMode_subtitleTextStyle = 2; - - // aapt resource value: 1 - public const int ActionMode_titleTextStyle = 1; - - public static int[] ActivityChooserView = new int[] { - 2130772008, - 2130772009}; - - // aapt resource value: 1 - public const int ActivityChooserView_expandActivityOverflowButtonDrawable = 1; - - // aapt resource value: 0 - public const int ActivityChooserView_initialActivityCount = 0; - - public static int[] AlertDialog = new int[] { - 16842994, - 2130772010, - 2130772011, - 2130772012, - 2130772013, - 2130772014, - 2130772015}; - - // aapt resource value: 0 - public const int AlertDialog_android_layout = 0; - - // aapt resource value: 1 - public const int AlertDialog_buttonPanelSideLayout = 1; - - // aapt resource value: 5 - public const int AlertDialog_listItemLayout = 5; - - // aapt resource value: 2 - public const int AlertDialog_listLayout = 2; - - // aapt resource value: 3 - public const int AlertDialog_multiChoiceItemLayout = 3; - - // aapt resource value: 6 - public const int AlertDialog_showTitle = 6; - - // aapt resource value: 4 - public const int AlertDialog_singleChoiceItemLayout = 4; - - public static int[] AppBarLayout = new int[] { - 16842964, - 16843919, - 16844096, - 2130772005, - 2130772223}; - - // aapt resource value: 0 - public const int AppBarLayout_android_background = 0; - - // aapt resource value: 2 - public const int AppBarLayout_android_keyboardNavigationCluster = 2; - - // aapt resource value: 1 - public const int AppBarLayout_android_touchscreenBlocksFocus = 1; - - // aapt resource value: 3 - public const int AppBarLayout_elevation = 3; - - // aapt resource value: 4 - public const int AppBarLayout_expanded = 4; - - public static int[] AppBarLayoutStates = new int[] { - 2130772224, - 2130772225}; - - // aapt resource value: 0 - public const int AppBarLayoutStates_state_collapsed = 0; - - // aapt resource value: 1 - public const int AppBarLayoutStates_state_collapsible = 1; - - public static int[] AppBarLayout_Layout = new int[] { - 2130772226, - 2130772227}; - - // aapt resource value: 0 - public const int AppBarLayout_Layout_layout_scrollFlags = 0; - - // aapt resource value: 1 - public const int AppBarLayout_Layout_layout_scrollInterpolator = 1; - - public static int[] AppCompatImageView = new int[] { - 16843033, - 2130772016, - 2130772017, - 2130772018}; - - // aapt resource value: 0 - public const int AppCompatImageView_android_src = 0; - - // aapt resource value: 1 - public const int AppCompatImageView_srcCompat = 1; - - // aapt resource value: 2 - public const int AppCompatImageView_tint = 2; - - // aapt resource value: 3 - public const int AppCompatImageView_tintMode = 3; - - public static int[] AppCompatSeekBar = new int[] { - 16843074, - 2130772019, - 2130772020, - 2130772021}; - - // aapt resource value: 0 - public const int AppCompatSeekBar_android_thumb = 0; - - // aapt resource value: 1 - public const int AppCompatSeekBar_tickMark = 1; - - // aapt resource value: 2 - public const int AppCompatSeekBar_tickMarkTint = 2; - - // aapt resource value: 3 - public const int AppCompatSeekBar_tickMarkTintMode = 3; - - public static int[] AppCompatTextHelper = new int[] { - 16842804, - 16843117, - 16843118, - 16843119, - 16843120, - 16843666, - 16843667}; - - // aapt resource value: 2 - public const int AppCompatTextHelper_android_drawableBottom = 2; - - // aapt resource value: 6 - public const int AppCompatTextHelper_android_drawableEnd = 6; - - // aapt resource value: 3 - public const int AppCompatTextHelper_android_drawableLeft = 3; - - // aapt resource value: 4 - public const int AppCompatTextHelper_android_drawableRight = 4; - - // aapt resource value: 5 - public const int AppCompatTextHelper_android_drawableStart = 5; - - // aapt resource value: 1 - public const int AppCompatTextHelper_android_drawableTop = 1; - - // aapt resource value: 0 - public const int AppCompatTextHelper_android_textAppearance = 0; - - public static int[] AppCompatTextView = new int[] { - 16842804, - 2130772022, - 2130772023, - 2130772024, - 2130772025, - 2130772026, - 2130772027, - 2130772028}; - - // aapt resource value: 0 - public const int AppCompatTextView_android_textAppearance = 0; - - // aapt resource value: 6 - public const int AppCompatTextView_autoSizeMaxTextSize = 6; - - // aapt resource value: 5 - public const int AppCompatTextView_autoSizeMinTextSize = 5; - - // aapt resource value: 4 - public const int AppCompatTextView_autoSizePresetSizes = 4; - - // aapt resource value: 3 - public const int AppCompatTextView_autoSizeStepGranularity = 3; - - // aapt resource value: 2 - public const int AppCompatTextView_autoSizeTextType = 2; - - // aapt resource value: 7 - public const int AppCompatTextView_fontFamily = 7; - - // aapt resource value: 1 - public const int AppCompatTextView_textAllCaps = 1; - - public static int[] AppCompatTheme = new int[] { - 16842839, - 16842926, - 2130772029, - 2130772030, - 2130772031, - 2130772032, - 2130772033, - 2130772034, - 2130772035, - 2130772036, - 2130772037, - 2130772038, - 2130772039, - 2130772040, - 2130772041, - 2130772042, - 2130772043, - 2130772044, - 2130772045, - 2130772046, - 2130772047, - 2130772048, - 2130772049, - 2130772050, - 2130772051, - 2130772052, - 2130772053, - 2130772054, - 2130772055, - 2130772056, - 2130772057, - 2130772058, - 2130772059, - 2130772060, - 2130772061, - 2130772062, - 2130772063, - 2130772064, - 2130772065, - 2130772066, - 2130772067, - 2130772068, - 2130772069, - 2130772070, - 2130772071, - 2130772072, - 2130772073, - 2130772074, - 2130772075, - 2130772076, - 2130772077, - 2130772078, - 2130772079, - 2130772080, - 2130772081, - 2130772082, - 2130772083, - 2130772084, - 2130772085, - 2130772086, - 2130772087, - 2130772088, - 2130772089, - 2130772090, - 2130772091, - 2130772092, - 2130772093, - 2130772094, - 2130772095, - 2130772096, - 2130772097, - 2130772098, - 2130772099, - 2130772100, - 2130772101, - 2130772102, - 2130772103, - 2130772104, - 2130772105, - 2130772106, - 2130772107, - 2130772108, - 2130772109, - 2130772110, - 2130772111, - 2130772112, - 2130772113, - 2130772114, - 2130772115, - 2130772116, - 2130772117, - 2130772118, - 2130772119, - 2130772120, - 2130772121, - 2130772122, - 2130772123, - 2130772124, - 2130772125, - 2130772126, - 2130772127, - 2130772128, - 2130772129, - 2130772130, - 2130772131, - 2130772132, - 2130772133, - 2130772134, - 2130772135, - 2130772136, - 2130772137, - 2130772138, - 2130772139, - 2130772140, - 2130772141, - 2130772142, - 2130772143, - 2130772144, - 2130772145}; - - // aapt resource value: 23 - public const int AppCompatTheme_actionBarDivider = 23; - - // aapt resource value: 24 - public const int AppCompatTheme_actionBarItemBackground = 24; - - // aapt resource value: 17 - public const int AppCompatTheme_actionBarPopupTheme = 17; - - // aapt resource value: 22 - public const int AppCompatTheme_actionBarSize = 22; - - // aapt resource value: 19 - public const int AppCompatTheme_actionBarSplitStyle = 19; - - // aapt resource value: 18 - public const int AppCompatTheme_actionBarStyle = 18; - - // aapt resource value: 13 - public const int AppCompatTheme_actionBarTabBarStyle = 13; - - // aapt resource value: 12 - public const int AppCompatTheme_actionBarTabStyle = 12; - - // aapt resource value: 14 - public const int AppCompatTheme_actionBarTabTextStyle = 14; - - // aapt resource value: 20 - public const int AppCompatTheme_actionBarTheme = 20; - - // aapt resource value: 21 - public const int AppCompatTheme_actionBarWidgetTheme = 21; - - // aapt resource value: 50 - public const int AppCompatTheme_actionButtonStyle = 50; - - // aapt resource value: 46 - public const int AppCompatTheme_actionDropDownStyle = 46; - - // aapt resource value: 25 - public const int AppCompatTheme_actionMenuTextAppearance = 25; - - // aapt resource value: 26 - public const int AppCompatTheme_actionMenuTextColor = 26; - - // aapt resource value: 29 - public const int AppCompatTheme_actionModeBackground = 29; - - // aapt resource value: 28 - public const int AppCompatTheme_actionModeCloseButtonStyle = 28; - - // aapt resource value: 31 - public const int AppCompatTheme_actionModeCloseDrawable = 31; - - // aapt resource value: 33 - public const int AppCompatTheme_actionModeCopyDrawable = 33; - - // aapt resource value: 32 - public const int AppCompatTheme_actionModeCutDrawable = 32; - - // aapt resource value: 37 - public const int AppCompatTheme_actionModeFindDrawable = 37; - - // aapt resource value: 34 - public const int AppCompatTheme_actionModePasteDrawable = 34; - - // aapt resource value: 39 - public const int AppCompatTheme_actionModePopupWindowStyle = 39; - - // aapt resource value: 35 - public const int AppCompatTheme_actionModeSelectAllDrawable = 35; - - // aapt resource value: 36 - public const int AppCompatTheme_actionModeShareDrawable = 36; - - // aapt resource value: 30 - public const int AppCompatTheme_actionModeSplitBackground = 30; - - // aapt resource value: 27 - public const int AppCompatTheme_actionModeStyle = 27; - - // aapt resource value: 38 - public const int AppCompatTheme_actionModeWebSearchDrawable = 38; - - // aapt resource value: 15 - public const int AppCompatTheme_actionOverflowButtonStyle = 15; - - // aapt resource value: 16 - public const int AppCompatTheme_actionOverflowMenuStyle = 16; - - // aapt resource value: 58 - public const int AppCompatTheme_activityChooserViewStyle = 58; - - // aapt resource value: 95 - public const int AppCompatTheme_alertDialogButtonGroupStyle = 95; - - // aapt resource value: 96 - public const int AppCompatTheme_alertDialogCenterButtons = 96; - - // aapt resource value: 94 - public const int AppCompatTheme_alertDialogStyle = 94; - - // aapt resource value: 97 - public const int AppCompatTheme_alertDialogTheme = 97; - - // aapt resource value: 1 - public const int AppCompatTheme_android_windowAnimationStyle = 1; - - // aapt resource value: 0 - public const int AppCompatTheme_android_windowIsFloating = 0; - - // aapt resource value: 102 - public const int AppCompatTheme_autoCompleteTextViewStyle = 102; - - // aapt resource value: 55 - public const int AppCompatTheme_borderlessButtonStyle = 55; - - // aapt resource value: 52 - public const int AppCompatTheme_buttonBarButtonStyle = 52; - - // aapt resource value: 100 - public const int AppCompatTheme_buttonBarNegativeButtonStyle = 100; - - // aapt resource value: 101 - public const int AppCompatTheme_buttonBarNeutralButtonStyle = 101; - - // aapt resource value: 99 - public const int AppCompatTheme_buttonBarPositiveButtonStyle = 99; - - // aapt resource value: 51 - public const int AppCompatTheme_buttonBarStyle = 51; - - // aapt resource value: 103 - public const int AppCompatTheme_buttonStyle = 103; - - // aapt resource value: 104 - public const int AppCompatTheme_buttonStyleSmall = 104; - - // aapt resource value: 105 - public const int AppCompatTheme_checkboxStyle = 105; - - // aapt resource value: 106 - public const int AppCompatTheme_checkedTextViewStyle = 106; - - // aapt resource value: 86 - public const int AppCompatTheme_colorAccent = 86; - - // aapt resource value: 93 - public const int AppCompatTheme_colorBackgroundFloating = 93; - - // aapt resource value: 90 - public const int AppCompatTheme_colorButtonNormal = 90; - - // aapt resource value: 88 - public const int AppCompatTheme_colorControlActivated = 88; - - // aapt resource value: 89 - public const int AppCompatTheme_colorControlHighlight = 89; - - // aapt resource value: 87 - public const int AppCompatTheme_colorControlNormal = 87; - - // aapt resource value: 118 - public const int AppCompatTheme_colorError = 118; - - // aapt resource value: 84 - public const int AppCompatTheme_colorPrimary = 84; - - // aapt resource value: 85 - public const int AppCompatTheme_colorPrimaryDark = 85; - - // aapt resource value: 91 - public const int AppCompatTheme_colorSwitchThumbNormal = 91; - - // aapt resource value: 92 - public const int AppCompatTheme_controlBackground = 92; - - // aapt resource value: 44 - public const int AppCompatTheme_dialogPreferredPadding = 44; - - // aapt resource value: 43 - public const int AppCompatTheme_dialogTheme = 43; - - // aapt resource value: 57 - public const int AppCompatTheme_dividerHorizontal = 57; - - // aapt resource value: 56 - public const int AppCompatTheme_dividerVertical = 56; - - // aapt resource value: 75 - public const int AppCompatTheme_dropDownListViewStyle = 75; - - // aapt resource value: 47 - public const int AppCompatTheme_dropdownListPreferredItemHeight = 47; - - // aapt resource value: 64 - public const int AppCompatTheme_editTextBackground = 64; - - // aapt resource value: 63 - public const int AppCompatTheme_editTextColor = 63; - - // aapt resource value: 107 - public const int AppCompatTheme_editTextStyle = 107; - - // aapt resource value: 49 - public const int AppCompatTheme_homeAsUpIndicator = 49; - - // aapt resource value: 65 - public const int AppCompatTheme_imageButtonStyle = 65; - - // aapt resource value: 83 - public const int AppCompatTheme_listChoiceBackgroundIndicator = 83; - - // aapt resource value: 45 - public const int AppCompatTheme_listDividerAlertDialog = 45; - - // aapt resource value: 115 - public const int AppCompatTheme_listMenuViewStyle = 115; - - // aapt resource value: 76 - public const int AppCompatTheme_listPopupWindowStyle = 76; - - // aapt resource value: 70 - public const int AppCompatTheme_listPreferredItemHeight = 70; - - // aapt resource value: 72 - public const int AppCompatTheme_listPreferredItemHeightLarge = 72; - - // aapt resource value: 71 - public const int AppCompatTheme_listPreferredItemHeightSmall = 71; - - // aapt resource value: 73 - public const int AppCompatTheme_listPreferredItemPaddingLeft = 73; - - // aapt resource value: 74 - public const int AppCompatTheme_listPreferredItemPaddingRight = 74; - - // aapt resource value: 80 - public const int AppCompatTheme_panelBackground = 80; - - // aapt resource value: 82 - public const int AppCompatTheme_panelMenuListTheme = 82; - - // aapt resource value: 81 - public const int AppCompatTheme_panelMenuListWidth = 81; - - // aapt resource value: 61 - public const int AppCompatTheme_popupMenuStyle = 61; - - // aapt resource value: 62 - public const int AppCompatTheme_popupWindowStyle = 62; - - // aapt resource value: 108 - public const int AppCompatTheme_radioButtonStyle = 108; - - // aapt resource value: 109 - public const int AppCompatTheme_ratingBarStyle = 109; - - // aapt resource value: 110 - public const int AppCompatTheme_ratingBarStyleIndicator = 110; - - // aapt resource value: 111 - public const int AppCompatTheme_ratingBarStyleSmall = 111; - - // aapt resource value: 69 - public const int AppCompatTheme_searchViewStyle = 69; - - // aapt resource value: 112 - public const int AppCompatTheme_seekBarStyle = 112; - - // aapt resource value: 53 - public const int AppCompatTheme_selectableItemBackground = 53; - - // aapt resource value: 54 - public const int AppCompatTheme_selectableItemBackgroundBorderless = 54; - - // aapt resource value: 48 - public const int AppCompatTheme_spinnerDropDownItemStyle = 48; - - // aapt resource value: 113 - public const int AppCompatTheme_spinnerStyle = 113; - - // aapt resource value: 114 - public const int AppCompatTheme_switchStyle = 114; - - // aapt resource value: 40 - public const int AppCompatTheme_textAppearanceLargePopupMenu = 40; - - // aapt resource value: 77 - public const int AppCompatTheme_textAppearanceListItem = 77; - - // aapt resource value: 78 - public const int AppCompatTheme_textAppearanceListItemSecondary = 78; - - // aapt resource value: 79 - public const int AppCompatTheme_textAppearanceListItemSmall = 79; - - // aapt resource value: 42 - public const int AppCompatTheme_textAppearancePopupMenuHeader = 42; - - // aapt resource value: 67 - public const int AppCompatTheme_textAppearanceSearchResultSubtitle = 67; - - // aapt resource value: 66 - public const int AppCompatTheme_textAppearanceSearchResultTitle = 66; - - // aapt resource value: 41 - public const int AppCompatTheme_textAppearanceSmallPopupMenu = 41; - - // aapt resource value: 98 - public const int AppCompatTheme_textColorAlertDialogListItem = 98; - - // aapt resource value: 68 - public const int AppCompatTheme_textColorSearchUrl = 68; - - // aapt resource value: 60 - public const int AppCompatTheme_toolbarNavigationButtonStyle = 60; - - // aapt resource value: 59 - public const int AppCompatTheme_toolbarStyle = 59; - - // aapt resource value: 117 - public const int AppCompatTheme_tooltipForegroundColor = 117; - - // aapt resource value: 116 - public const int AppCompatTheme_tooltipFrameBackground = 116; - - // aapt resource value: 2 - public const int AppCompatTheme_windowActionBar = 2; - - // aapt resource value: 4 - public const int AppCompatTheme_windowActionBarOverlay = 4; - - // aapt resource value: 5 - public const int AppCompatTheme_windowActionModeOverlay = 5; - - // aapt resource value: 9 - public const int AppCompatTheme_windowFixedHeightMajor = 9; - - // aapt resource value: 7 - public const int AppCompatTheme_windowFixedHeightMinor = 7; - - // aapt resource value: 6 - public const int AppCompatTheme_windowFixedWidthMajor = 6; - - // aapt resource value: 8 - public const int AppCompatTheme_windowFixedWidthMinor = 8; - - // aapt resource value: 10 - public const int AppCompatTheme_windowMinWidthMajor = 10; - - // aapt resource value: 11 - public const int AppCompatTheme_windowMinWidthMinor = 11; - - // aapt resource value: 3 - public const int AppCompatTheme_windowNoTitle = 3; - - public static int[] BottomNavigationView = new int[] { - 2130772005, - 2130772266, - 2130772267, - 2130772268, - 2130772269}; - - // aapt resource value: 0 - public const int BottomNavigationView_elevation = 0; - - // aapt resource value: 4 - public const int BottomNavigationView_itemBackground = 4; - - // aapt resource value: 2 - public const int BottomNavigationView_itemIconTint = 2; - - // aapt resource value: 3 - public const int BottomNavigationView_itemTextColor = 3; - - // aapt resource value: 1 - public const int BottomNavigationView_menu = 1; - - public static int[] BottomSheetBehavior_Layout = new int[] { - 2130772228, - 2130772229, - 2130772230}; - - // aapt resource value: 1 - public const int BottomSheetBehavior_Layout_behavior_hideable = 1; - - // aapt resource value: 0 - public const int BottomSheetBehavior_Layout_behavior_peekHeight = 0; - - // aapt resource value: 2 - public const int BottomSheetBehavior_Layout_behavior_skipCollapsed = 2; - - public static int[] ButtonBarLayout = new int[] { - 2130772146}; - - // aapt resource value: 0 - public const int ButtonBarLayout_allowStacking = 0; - - public static int[] CollapsingToolbarLayout = new int[] { - 2130771980, - 2130772231, - 2130772232, - 2130772233, - 2130772234, - 2130772235, - 2130772236, - 2130772237, - 2130772238, - 2130772239, - 2130772240, - 2130772241, - 2130772242, - 2130772243, - 2130772244, - 2130772245}; - - // aapt resource value: 13 - public const int CollapsingToolbarLayout_collapsedTitleGravity = 13; - - // aapt resource value: 7 - public const int CollapsingToolbarLayout_collapsedTitleTextAppearance = 7; - - // aapt resource value: 8 - public const int CollapsingToolbarLayout_contentScrim = 8; - - // aapt resource value: 14 - public const int CollapsingToolbarLayout_expandedTitleGravity = 14; - - // aapt resource value: 1 - public const int CollapsingToolbarLayout_expandedTitleMargin = 1; - - // aapt resource value: 5 - public const int CollapsingToolbarLayout_expandedTitleMarginBottom = 5; - - // aapt resource value: 4 - public const int CollapsingToolbarLayout_expandedTitleMarginEnd = 4; - - // aapt resource value: 2 - public const int CollapsingToolbarLayout_expandedTitleMarginStart = 2; - - // aapt resource value: 3 - public const int CollapsingToolbarLayout_expandedTitleMarginTop = 3; - - // aapt resource value: 6 - public const int CollapsingToolbarLayout_expandedTitleTextAppearance = 6; - - // aapt resource value: 12 - public const int CollapsingToolbarLayout_scrimAnimationDuration = 12; - - // aapt resource value: 11 - public const int CollapsingToolbarLayout_scrimVisibleHeightTrigger = 11; - - // aapt resource value: 9 - public const int CollapsingToolbarLayout_statusBarScrim = 9; - - // aapt resource value: 0 - public const int CollapsingToolbarLayout_title = 0; - - // aapt resource value: 15 - public const int CollapsingToolbarLayout_titleEnabled = 15; - - // aapt resource value: 10 - public const int CollapsingToolbarLayout_toolbarId = 10; - - public static int[] CollapsingToolbarLayout_Layout = new int[] { - 2130772246, - 2130772247}; - - // aapt resource value: 0 - public const int CollapsingToolbarLayout_Layout_layout_collapseMode = 0; - - // aapt resource value: 1 - public const int CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier = 1; - - public static int[] ColorStateListItem = new int[] { - 16843173, - 16843551, - 2130772147}; - - // aapt resource value: 2 - public const int ColorStateListItem_alpha = 2; - - // aapt resource value: 1 - public const int ColorStateListItem_android_alpha = 1; - - // aapt resource value: 0 - public const int ColorStateListItem_android_color = 0; - - public static int[] CompoundButton = new int[] { - 16843015, - 2130772148, - 2130772149}; - - // aapt resource value: 0 - public const int CompoundButton_android_button = 0; - - // aapt resource value: 1 - public const int CompoundButton_buttonTint = 1; - - // aapt resource value: 2 - public const int CompoundButton_buttonTintMode = 2; - - public static int[] CoordinatorLayout = new int[] { - 2130772248, - 2130772249}; - - // aapt resource value: 0 - public const int CoordinatorLayout_keylines = 0; - - // aapt resource value: 1 - public const int CoordinatorLayout_statusBarBackground = 1; - - public static int[] CoordinatorLayout_Layout = new int[] { - 16842931, - 2130772250, - 2130772251, - 2130772252, - 2130772253, - 2130772254, - 2130772255}; - - // aapt resource value: 0 - public const int CoordinatorLayout_Layout_android_layout_gravity = 0; - - // aapt resource value: 2 - public const int CoordinatorLayout_Layout_layout_anchor = 2; - - // aapt resource value: 4 - public const int CoordinatorLayout_Layout_layout_anchorGravity = 4; - - // aapt resource value: 1 - public const int CoordinatorLayout_Layout_layout_behavior = 1; - - // aapt resource value: 6 - public const int CoordinatorLayout_Layout_layout_dodgeInsetEdges = 6; - - // aapt resource value: 5 - public const int CoordinatorLayout_Layout_layout_insetEdge = 5; - - // aapt resource value: 3 - public const int CoordinatorLayout_Layout_layout_keyline = 3; - - public static int[] DesignTheme = new int[] { - 2130772256, - 2130772257, - 2130772258}; - - // aapt resource value: 0 - public const int DesignTheme_bottomSheetDialogTheme = 0; - - // aapt resource value: 1 - public const int DesignTheme_bottomSheetStyle = 1; - - // aapt resource value: 2 - public const int DesignTheme_textColorError = 2; - - public static int[] DrawerArrowToggle = new int[] { - 2130772150, - 2130772151, - 2130772152, - 2130772153, - 2130772154, - 2130772155, - 2130772156, - 2130772157}; - - // aapt resource value: 4 - public const int DrawerArrowToggle_arrowHeadLength = 4; - - // aapt resource value: 5 - public const int DrawerArrowToggle_arrowShaftLength = 5; - - // aapt resource value: 6 - public const int DrawerArrowToggle_barLength = 6; - - // aapt resource value: 0 - public const int DrawerArrowToggle_color = 0; - - // aapt resource value: 2 - public const int DrawerArrowToggle_drawableSize = 2; - - // aapt resource value: 3 - public const int DrawerArrowToggle_gapBetweenBars = 3; - - // aapt resource value: 1 - public const int DrawerArrowToggle_spinBars = 1; - - // aapt resource value: 7 - public const int DrawerArrowToggle_thickness = 7; - - public static int[] FloatingActionButton = new int[] { - 2130772005, - 2130772221, - 2130772222, - 2130772259, - 2130772260, - 2130772261, - 2130772262, - 2130772263}; - - // aapt resource value: 1 - public const int FloatingActionButton_backgroundTint = 1; - - // aapt resource value: 2 - public const int FloatingActionButton_backgroundTintMode = 2; - - // aapt resource value: 6 - public const int FloatingActionButton_borderWidth = 6; - - // aapt resource value: 0 - public const int FloatingActionButton_elevation = 0; - - // aapt resource value: 4 - public const int FloatingActionButton_fabSize = 4; - - // aapt resource value: 5 - public const int FloatingActionButton_pressedTranslationZ = 5; - - // aapt resource value: 3 - public const int FloatingActionButton_rippleColor = 3; - - // aapt resource value: 7 - public const int FloatingActionButton_useCompatPadding = 7; - - public static int[] FloatingActionButton_Behavior_Layout = new int[] { - 2130772264}; - - // aapt resource value: 0 - public const int FloatingActionButton_Behavior_Layout_behavior_autoHide = 0; - - public static int[] FontFamily = new int[] { - 2130772305, - 2130772306, - 2130772307, - 2130772308, - 2130772309, - 2130772310}; - - // aapt resource value: 0 - public const int FontFamily_fontProviderAuthority = 0; - - // aapt resource value: 3 - public const int FontFamily_fontProviderCerts = 3; - - // aapt resource value: 4 - public const int FontFamily_fontProviderFetchStrategy = 4; - - // aapt resource value: 5 - public const int FontFamily_fontProviderFetchTimeout = 5; - - // aapt resource value: 1 - public const int FontFamily_fontProviderPackage = 1; - - // aapt resource value: 2 - public const int FontFamily_fontProviderQuery = 2; - - public static int[] FontFamilyFont = new int[] { - 16844082, - 16844083, - 16844095, - 2130772311, - 2130772312, - 2130772313}; - - // aapt resource value: 0 - public const int FontFamilyFont_android_font = 0; - - // aapt resource value: 2 - public const int FontFamilyFont_android_fontStyle = 2; - - // aapt resource value: 1 - public const int FontFamilyFont_android_fontWeight = 1; - - // aapt resource value: 4 - public const int FontFamilyFont_font = 4; - - // aapt resource value: 3 - public const int FontFamilyFont_fontStyle = 3; - - // aapt resource value: 5 - public const int FontFamilyFont_fontWeight = 5; - - public static int[] ForegroundLinearLayout = new int[] { - 16843017, - 16843264, - 2130772265}; - - // aapt resource value: 0 - public const int ForegroundLinearLayout_android_foreground = 0; - - // aapt resource value: 1 - public const int ForegroundLinearLayout_android_foregroundGravity = 1; - - // aapt resource value: 2 - public const int ForegroundLinearLayout_foregroundInsidePadding = 2; - - public static int[] LinearLayoutCompat = new int[] { - 16842927, - 16842948, - 16843046, - 16843047, - 16843048, - 2130771988, - 2130772158, - 2130772159, - 2130772160}; - - // aapt resource value: 2 - public const int LinearLayoutCompat_android_baselineAligned = 2; - - // aapt resource value: 3 - public const int LinearLayoutCompat_android_baselineAlignedChildIndex = 3; - - // aapt resource value: 0 - public const int LinearLayoutCompat_android_gravity = 0; - - // aapt resource value: 1 - public const int LinearLayoutCompat_android_orientation = 1; - - // aapt resource value: 4 - public const int LinearLayoutCompat_android_weightSum = 4; - - // aapt resource value: 5 - public const int LinearLayoutCompat_divider = 5; - - // aapt resource value: 8 - public const int LinearLayoutCompat_dividerPadding = 8; - - // aapt resource value: 6 - public const int LinearLayoutCompat_measureWithLargestChild = 6; - - // aapt resource value: 7 - public const int LinearLayoutCompat_showDividers = 7; - - public static int[] LinearLayoutCompat_Layout = new int[] { - 16842931, - 16842996, - 16842997, - 16843137}; - - // aapt resource value: 0 - public const int LinearLayoutCompat_Layout_android_layout_gravity = 0; - - // aapt resource value: 2 - public const int LinearLayoutCompat_Layout_android_layout_height = 2; - - // aapt resource value: 3 - public const int LinearLayoutCompat_Layout_android_layout_weight = 3; - - // aapt resource value: 1 - public const int LinearLayoutCompat_Layout_android_layout_width = 1; - - public static int[] ListPopupWindow = new int[] { - 16843436, - 16843437}; - - // aapt resource value: 0 - public const int ListPopupWindow_android_dropDownHorizontalOffset = 0; - - // aapt resource value: 1 - public const int ListPopupWindow_android_dropDownVerticalOffset = 1; - - public static int[] MenuGroup = new int[] { - 16842766, - 16842960, - 16843156, - 16843230, - 16843231, - 16843232}; - - // aapt resource value: 5 - public const int MenuGroup_android_checkableBehavior = 5; - - // aapt resource value: 0 - public const int MenuGroup_android_enabled = 0; - - // aapt resource value: 1 - public const int MenuGroup_android_id = 1; - - // aapt resource value: 3 - public const int MenuGroup_android_menuCategory = 3; - - // aapt resource value: 4 - public const int MenuGroup_android_orderInCategory = 4; - - // aapt resource value: 2 - public const int MenuGroup_android_visible = 2; - - public static int[] MenuItem = new int[] { - 16842754, - 16842766, - 16842960, - 16843014, - 16843156, - 16843230, - 16843231, - 16843233, - 16843234, - 16843235, - 16843236, - 16843237, - 16843375, - 2130772161, - 2130772162, - 2130772163, - 2130772164, - 2130772165, - 2130772166, - 2130772167, - 2130772168, - 2130772169, - 2130772170}; - - // aapt resource value: 16 - public const int MenuItem_actionLayout = 16; - - // aapt resource value: 18 - public const int MenuItem_actionProviderClass = 18; - - // aapt resource value: 17 - public const int MenuItem_actionViewClass = 17; - - // aapt resource value: 13 - public const int MenuItem_alphabeticModifiers = 13; - - // aapt resource value: 9 - public const int MenuItem_android_alphabeticShortcut = 9; - - // aapt resource value: 11 - public const int MenuItem_android_checkable = 11; - - // aapt resource value: 3 - public const int MenuItem_android_checked = 3; - - // aapt resource value: 1 - public const int MenuItem_android_enabled = 1; - - // aapt resource value: 0 - public const int MenuItem_android_icon = 0; - - // aapt resource value: 2 - public const int MenuItem_android_id = 2; - - // aapt resource value: 5 - public const int MenuItem_android_menuCategory = 5; - - // aapt resource value: 10 - public const int MenuItem_android_numericShortcut = 10; - - // aapt resource value: 12 - public const int MenuItem_android_onClick = 12; - - // aapt resource value: 6 - public const int MenuItem_android_orderInCategory = 6; - - // aapt resource value: 7 - public const int MenuItem_android_title = 7; - - // aapt resource value: 8 - public const int MenuItem_android_titleCondensed = 8; - - // aapt resource value: 4 - public const int MenuItem_android_visible = 4; - - // aapt resource value: 19 - public const int MenuItem_contentDescription = 19; - - // aapt resource value: 21 - public const int MenuItem_iconTint = 21; - - // aapt resource value: 22 - public const int MenuItem_iconTintMode = 22; - - // aapt resource value: 14 - public const int MenuItem_numericModifiers = 14; - - // aapt resource value: 15 - public const int MenuItem_showAsAction = 15; - - // aapt resource value: 20 - public const int MenuItem_tooltipText = 20; - - public static int[] MenuView = new int[] { - 16842926, - 16843052, - 16843053, - 16843054, - 16843055, - 16843056, - 16843057, - 2130772171, - 2130772172}; - - // aapt resource value: 4 - public const int MenuView_android_headerBackground = 4; - - // aapt resource value: 2 - public const int MenuView_android_horizontalDivider = 2; - - // aapt resource value: 5 - public const int MenuView_android_itemBackground = 5; - - // aapt resource value: 6 - public const int MenuView_android_itemIconDisabledAlpha = 6; - - // aapt resource value: 1 - public const int MenuView_android_itemTextAppearance = 1; - - // aapt resource value: 3 - public const int MenuView_android_verticalDivider = 3; - - // aapt resource value: 0 - public const int MenuView_android_windowAnimationStyle = 0; - - // aapt resource value: 7 - public const int MenuView_preserveIconSpacing = 7; - - // aapt resource value: 8 - public const int MenuView_subMenuArrow = 8; - - public static int[] NavigationView = new int[] { - 16842964, - 16842973, - 16843039, - 2130772005, - 2130772266, - 2130772267, - 2130772268, - 2130772269, - 2130772270, - 2130772271}; - - // aapt resource value: 0 - public const int NavigationView_android_background = 0; - - // aapt resource value: 1 - public const int NavigationView_android_fitsSystemWindows = 1; - - // aapt resource value: 2 - public const int NavigationView_android_maxWidth = 2; - - // aapt resource value: 3 - public const int NavigationView_elevation = 3; - - // aapt resource value: 9 - public const int NavigationView_headerLayout = 9; - - // aapt resource value: 7 - public const int NavigationView_itemBackground = 7; - - // aapt resource value: 5 - public const int NavigationView_itemIconTint = 5; - - // aapt resource value: 8 - public const int NavigationView_itemTextAppearance = 8; - - // aapt resource value: 6 - public const int NavigationView_itemTextColor = 6; - - // aapt resource value: 4 - public const int NavigationView_menu = 4; - - public static int[] PopupWindow = new int[] { - 16843126, - 16843465, - 2130772173}; - - // aapt resource value: 1 - public const int PopupWindow_android_popupAnimationStyle = 1; - - // aapt resource value: 0 - public const int PopupWindow_android_popupBackground = 0; - - // aapt resource value: 2 - public const int PopupWindow_overlapAnchor = 2; - - public static int[] PopupWindowBackgroundState = new int[] { - 2130772174}; - - // aapt resource value: 0 - public const int PopupWindowBackgroundState_state_above_anchor = 0; - - public static int[] RecycleListView = new int[] { - 2130772175, - 2130772176}; - - // aapt resource value: 0 - public const int RecycleListView_paddingBottomNoButtons = 0; - - // aapt resource value: 1 - public const int RecycleListView_paddingTopNoTitle = 1; - - public static int[] RecyclerView = new int[] { - 16842948, - 16842993, - 2130771968, - 2130771969, - 2130771970, - 2130771971, - 2130771972, - 2130771973, - 2130771974, - 2130771975, - 2130771976}; - - // aapt resource value: 1 - public const int RecyclerView_android_descendantFocusability = 1; - - // aapt resource value: 0 - public const int RecyclerView_android_orientation = 0; - - // aapt resource value: 6 - public const int RecyclerView_fastScrollEnabled = 6; - - // aapt resource value: 9 - public const int RecyclerView_fastScrollHorizontalThumbDrawable = 9; - - // aapt resource value: 10 - public const int RecyclerView_fastScrollHorizontalTrackDrawable = 10; - - // aapt resource value: 7 - public const int RecyclerView_fastScrollVerticalThumbDrawable = 7; - - // aapt resource value: 8 - public const int RecyclerView_fastScrollVerticalTrackDrawable = 8; - - // aapt resource value: 2 - public const int RecyclerView_layoutManager = 2; - - // aapt resource value: 4 - public const int RecyclerView_reverseLayout = 4; - - // aapt resource value: 3 - public const int RecyclerView_spanCount = 3; - - // aapt resource value: 5 - public const int RecyclerView_stackFromEnd = 5; - - public static int[] ScrimInsetsFrameLayout = new int[] { - 2130772272}; - - // aapt resource value: 0 - public const int ScrimInsetsFrameLayout_insetForeground = 0; - - public static int[] ScrollingViewBehavior_Layout = new int[] { - 2130772273}; - - // aapt resource value: 0 - public const int ScrollingViewBehavior_Layout_behavior_overlapTop = 0; - - public static int[] SearchView = new int[] { - 16842970, - 16843039, - 16843296, - 16843364, - 2130772177, - 2130772178, - 2130772179, - 2130772180, - 2130772181, - 2130772182, - 2130772183, - 2130772184, - 2130772185, - 2130772186, - 2130772187, - 2130772188, - 2130772189}; - - // aapt resource value: 0 - public const int SearchView_android_focusable = 0; - - // aapt resource value: 3 - public const int SearchView_android_imeOptions = 3; - - // aapt resource value: 2 - public const int SearchView_android_inputType = 2; - - // aapt resource value: 1 - public const int SearchView_android_maxWidth = 1; - - // aapt resource value: 8 - public const int SearchView_closeIcon = 8; - - // aapt resource value: 13 - public const int SearchView_commitIcon = 13; - - // aapt resource value: 7 - public const int SearchView_defaultQueryHint = 7; - - // aapt resource value: 9 - public const int SearchView_goIcon = 9; - - // aapt resource value: 5 - public const int SearchView_iconifiedByDefault = 5; - - // aapt resource value: 4 - public const int SearchView_layout = 4; - - // aapt resource value: 15 - public const int SearchView_queryBackground = 15; - - // aapt resource value: 6 - public const int SearchView_queryHint = 6; - - // aapt resource value: 11 - public const int SearchView_searchHintIcon = 11; - - // aapt resource value: 10 - public const int SearchView_searchIcon = 10; - - // aapt resource value: 16 - public const int SearchView_submitBackground = 16; - - // aapt resource value: 14 - public const int SearchView_suggestionRowLayout = 14; - - // aapt resource value: 12 - public const int SearchView_voiceIcon = 12; - - public static int[] SnackbarLayout = new int[] { - 16843039, - 2130772005, - 2130772274}; - - // aapt resource value: 0 - public const int SnackbarLayout_android_maxWidth = 0; - - // aapt resource value: 1 - public const int SnackbarLayout_elevation = 1; - - // aapt resource value: 2 - public const int SnackbarLayout_maxActionInlineWidth = 2; - - public static int[] Spinner = new int[] { - 16842930, - 16843126, - 16843131, - 16843362, - 2130772006}; - - // aapt resource value: 3 - public const int Spinner_android_dropDownWidth = 3; - - // aapt resource value: 0 - public const int Spinner_android_entries = 0; - - // aapt resource value: 1 - public const int Spinner_android_popupBackground = 1; - - // aapt resource value: 2 - public const int Spinner_android_prompt = 2; - - // aapt resource value: 4 - public const int Spinner_popupTheme = 4; - - public static int[] SwitchCompat = new int[] { - 16843044, - 16843045, - 16843074, - 2130772190, - 2130772191, - 2130772192, - 2130772193, - 2130772194, - 2130772195, - 2130772196, - 2130772197, - 2130772198, - 2130772199, - 2130772200}; - - // aapt resource value: 1 - public const int SwitchCompat_android_textOff = 1; - - // aapt resource value: 0 - public const int SwitchCompat_android_textOn = 0; - - // aapt resource value: 2 - public const int SwitchCompat_android_thumb = 2; - - // aapt resource value: 13 - public const int SwitchCompat_showText = 13; - - // aapt resource value: 12 - public const int SwitchCompat_splitTrack = 12; - - // aapt resource value: 10 - public const int SwitchCompat_switchMinWidth = 10; - - // aapt resource value: 11 - public const int SwitchCompat_switchPadding = 11; - - // aapt resource value: 9 - public const int SwitchCompat_switchTextAppearance = 9; - - // aapt resource value: 8 - public const int SwitchCompat_thumbTextPadding = 8; - - // aapt resource value: 3 - public const int SwitchCompat_thumbTint = 3; - - // aapt resource value: 4 - public const int SwitchCompat_thumbTintMode = 4; - - // aapt resource value: 5 - public const int SwitchCompat_track = 5; - - // aapt resource value: 6 - public const int SwitchCompat_trackTint = 6; - - // aapt resource value: 7 - public const int SwitchCompat_trackTintMode = 7; - - public static int[] TabItem = new int[] { - 16842754, - 16842994, - 16843087}; - - // aapt resource value: 0 - public const int TabItem_android_icon = 0; - - // aapt resource value: 1 - public const int TabItem_android_layout = 1; - - // aapt resource value: 2 - public const int TabItem_android_text = 2; - - public static int[] TabLayout = new int[] { - 2130772275, - 2130772276, - 2130772277, - 2130772278, - 2130772279, - 2130772280, - 2130772281, - 2130772282, - 2130772283, - 2130772284, - 2130772285, - 2130772286, - 2130772287, - 2130772288, - 2130772289, - 2130772290}; - - // aapt resource value: 3 - public const int TabLayout_tabBackground = 3; - - // aapt resource value: 2 - public const int TabLayout_tabContentStart = 2; - - // aapt resource value: 5 - public const int TabLayout_tabGravity = 5; - - // aapt resource value: 0 - public const int TabLayout_tabIndicatorColor = 0; - - // aapt resource value: 1 - public const int TabLayout_tabIndicatorHeight = 1; - - // aapt resource value: 7 - public const int TabLayout_tabMaxWidth = 7; - - // aapt resource value: 6 - public const int TabLayout_tabMinWidth = 6; - - // aapt resource value: 4 - public const int TabLayout_tabMode = 4; - - // aapt resource value: 15 - public const int TabLayout_tabPadding = 15; - - // aapt resource value: 14 - public const int TabLayout_tabPaddingBottom = 14; - - // aapt resource value: 13 - public const int TabLayout_tabPaddingEnd = 13; - - // aapt resource value: 11 - public const int TabLayout_tabPaddingStart = 11; - - // aapt resource value: 12 - public const int TabLayout_tabPaddingTop = 12; - - // aapt resource value: 10 - public const int TabLayout_tabSelectedTextColor = 10; - - // aapt resource value: 8 - public const int TabLayout_tabTextAppearance = 8; - - // aapt resource value: 9 - public const int TabLayout_tabTextColor = 9; - - public static int[] TextAppearance = new int[] { - 16842901, - 16842902, - 16842903, - 16842904, - 16842906, - 16842907, - 16843105, - 16843106, - 16843107, - 16843108, - 16843692, - 2130772022, - 2130772028}; - - // aapt resource value: 10 - public const int TextAppearance_android_fontFamily = 10; - - // aapt resource value: 6 - public const int TextAppearance_android_shadowColor = 6; - - // aapt resource value: 7 - public const int TextAppearance_android_shadowDx = 7; - - // aapt resource value: 8 - public const int TextAppearance_android_shadowDy = 8; - - // aapt resource value: 9 - public const int TextAppearance_android_shadowRadius = 9; - - // aapt resource value: 3 - public const int TextAppearance_android_textColor = 3; - - // aapt resource value: 4 - public const int TextAppearance_android_textColorHint = 4; - - // aapt resource value: 5 - public const int TextAppearance_android_textColorLink = 5; - - // aapt resource value: 0 - public const int TextAppearance_android_textSize = 0; - - // aapt resource value: 2 - public const int TextAppearance_android_textStyle = 2; - - // aapt resource value: 1 - public const int TextAppearance_android_typeface = 1; - - // aapt resource value: 12 - public const int TextAppearance_fontFamily = 12; - - // aapt resource value: 11 - public const int TextAppearance_textAllCaps = 11; - - public static int[] TextInputLayout = new int[] { - 16842906, - 16843088, - 2130772291, - 2130772292, - 2130772293, - 2130772294, - 2130772295, - 2130772296, - 2130772297, - 2130772298, - 2130772299, - 2130772300, - 2130772301, - 2130772302, - 2130772303, - 2130772304}; - - // aapt resource value: 1 - public const int TextInputLayout_android_hint = 1; - - // aapt resource value: 0 - public const int TextInputLayout_android_textColorHint = 0; - - // aapt resource value: 6 - public const int TextInputLayout_counterEnabled = 6; - - // aapt resource value: 7 - public const int TextInputLayout_counterMaxLength = 7; - - // aapt resource value: 9 - public const int TextInputLayout_counterOverflowTextAppearance = 9; - - // aapt resource value: 8 - public const int TextInputLayout_counterTextAppearance = 8; - - // aapt resource value: 4 - public const int TextInputLayout_errorEnabled = 4; - - // aapt resource value: 5 - public const int TextInputLayout_errorTextAppearance = 5; - - // aapt resource value: 10 - public const int TextInputLayout_hintAnimationEnabled = 10; - - // aapt resource value: 3 - public const int TextInputLayout_hintEnabled = 3; - - // aapt resource value: 2 - public const int TextInputLayout_hintTextAppearance = 2; - - // aapt resource value: 13 - public const int TextInputLayout_passwordToggleContentDescription = 13; - - // aapt resource value: 12 - public const int TextInputLayout_passwordToggleDrawable = 12; - - // aapt resource value: 11 - public const int TextInputLayout_passwordToggleEnabled = 11; - - // aapt resource value: 14 - public const int TextInputLayout_passwordToggleTint = 14; - - // aapt resource value: 15 - public const int TextInputLayout_passwordToggleTintMode = 15; - - public static int[] Toolbar = new int[] { - 16842927, - 16843072, - 2130771980, - 2130771983, - 2130771987, - 2130771999, - 2130772000, - 2130772001, - 2130772002, - 2130772003, - 2130772004, - 2130772006, - 2130772201, - 2130772202, - 2130772203, - 2130772204, - 2130772205, - 2130772206, - 2130772207, - 2130772208, - 2130772209, - 2130772210, - 2130772211, - 2130772212, - 2130772213, - 2130772214, - 2130772215, - 2130772216, - 2130772217}; - - // aapt resource value: 0 - public const int Toolbar_android_gravity = 0; - - // aapt resource value: 1 - public const int Toolbar_android_minHeight = 1; - - // aapt resource value: 21 - public const int Toolbar_buttonGravity = 21; - - // aapt resource value: 23 - public const int Toolbar_collapseContentDescription = 23; - - // aapt resource value: 22 - public const int Toolbar_collapseIcon = 22; - - // aapt resource value: 6 - public const int Toolbar_contentInsetEnd = 6; - - // aapt resource value: 10 - public const int Toolbar_contentInsetEndWithActions = 10; - - // aapt resource value: 7 - public const int Toolbar_contentInsetLeft = 7; - - // aapt resource value: 8 - public const int Toolbar_contentInsetRight = 8; - - // aapt resource value: 5 - public const int Toolbar_contentInsetStart = 5; - - // aapt resource value: 9 - public const int Toolbar_contentInsetStartWithNavigation = 9; - - // aapt resource value: 4 - public const int Toolbar_logo = 4; - - // aapt resource value: 26 - public const int Toolbar_logoDescription = 26; - - // aapt resource value: 20 - public const int Toolbar_maxButtonHeight = 20; - - // aapt resource value: 25 - public const int Toolbar_navigationContentDescription = 25; - - // aapt resource value: 24 - public const int Toolbar_navigationIcon = 24; - - // aapt resource value: 11 - public const int Toolbar_popupTheme = 11; - - // aapt resource value: 3 - public const int Toolbar_subtitle = 3; - - // aapt resource value: 13 - public const int Toolbar_subtitleTextAppearance = 13; - - // aapt resource value: 28 - public const int Toolbar_subtitleTextColor = 28; - - // aapt resource value: 2 - public const int Toolbar_title = 2; - - // aapt resource value: 14 - public const int Toolbar_titleMargin = 14; - - // aapt resource value: 18 - public const int Toolbar_titleMarginBottom = 18; - - // aapt resource value: 16 - public const int Toolbar_titleMarginEnd = 16; - - // aapt resource value: 15 - public const int Toolbar_titleMarginStart = 15; - - // aapt resource value: 17 - public const int Toolbar_titleMarginTop = 17; - - // aapt resource value: 19 - public const int Toolbar_titleMargins = 19; - - // aapt resource value: 12 - public const int Toolbar_titleTextAppearance = 12; - - // aapt resource value: 27 - public const int Toolbar_titleTextColor = 27; - - public static int[] View = new int[] { - 16842752, - 16842970, - 2130772218, - 2130772219, - 2130772220}; - - // aapt resource value: 1 - public const int View_android_focusable = 1; - - // aapt resource value: 0 - public const int View_android_theme = 0; - - // aapt resource value: 3 - public const int View_paddingEnd = 3; - - // aapt resource value: 2 - public const int View_paddingStart = 2; - - // aapt resource value: 4 - public const int View_theme = 4; - - public static int[] ViewBackgroundHelper = new int[] { - 16842964, - 2130772221, - 2130772222}; - - // aapt resource value: 0 - public const int ViewBackgroundHelper_android_background = 0; - - // aapt resource value: 1 - public const int ViewBackgroundHelper_backgroundTint = 1; - - // aapt resource value: 2 - public const int ViewBackgroundHelper_backgroundTintMode = 2; - - public static int[] ViewStubCompat = new int[] { - 16842960, - 16842994, - 16842995}; - - // aapt resource value: 0 - public const int ViewStubCompat_android_id = 0; - - // aapt resource value: 2 - public const int ViewStubCompat_android_inflatedId = 2; - - // aapt resource value: 1 - public const int ViewStubCompat_android_layout = 1; - - static Styleable() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Styleable() - { - } - } } } #pragma warning restore 1591 From fc6f484244d97c44bcc5003ce37a2e94e32c1635 Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Sun, 6 Jan 2019 21:53:54 -0600 Subject: [PATCH 023/267] Use dev build of framework, make some fixes --- osu.Game.Tests/Visual/TestCaseChatLink.cs | 2 +- .../Visual/TestCaseLoungeRoomsContainer.cs | 4 ++-- .../Visual/TestCaseMatchSettingsOverlay.cs | 2 +- osu.Game/Online/Chat/ChannelManager.cs | 8 ++++---- osu.Game/Online/Multiplayer/PlaylistItem.cs | 4 ++-- osu.Game/Online/Multiplayer/Room.cs | 2 +- .../Settings/Sections/Graphics/LayoutSettings.cs | 14 +++++++------- osu.Game/Screens/Multi/IRoomManager.cs | 2 +- .../Multi/Lounge/Components/RoomsContainer.cs | 2 +- osu.Game/Screens/Multi/RoomBindings.cs | 2 +- osu.Game/Screens/Multi/RoomManager.cs | 4 ++-- osu.Game/osu.Game.csproj | 2 +- 12 files changed, 24 insertions(+), 24 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseChatLink.cs b/osu.Game.Tests/Visual/TestCaseChatLink.cs index 61c2f47e7d..8aa3283af7 100644 --- a/osu.Game.Tests/Visual/TestCaseChatLink.cs +++ b/osu.Game.Tests/Visual/TestCaseChatLink.cs @@ -55,7 +55,7 @@ namespace osu.Game.Tests.Visual linkColour = colours.Blue; var chatManager = new ChannelManager(); - BindableCollection availableChannels = (BindableCollection)chatManager.AvailableChannels; + BindableList availableChannels = (BindableList)chatManager.AvailableChannels; availableChannels.Add(new Channel { Name = "#english"}); availableChannels.Add(new Channel { Name = "#japanese" }); Dependencies.Cache(chatManager); diff --git a/osu.Game.Tests/Visual/TestCaseLoungeRoomsContainer.cs b/osu.Game.Tests/Visual/TestCaseLoungeRoomsContainer.cs index 3e9f2fb3a4..6b5bc875f1 100644 --- a/osu.Game.Tests/Visual/TestCaseLoungeRoomsContainer.cs +++ b/osu.Game.Tests/Visual/TestCaseLoungeRoomsContainer.cs @@ -73,8 +73,8 @@ namespace osu.Game.Tests.Visual { public event Action RoomsUpdated; - public readonly BindableCollection Rooms = new BindableCollection(); - IBindableCollection IRoomManager.Rooms => Rooms; + public readonly BindableList Rooms = new BindableList(); + IBindableList IRoomManager.Rooms => Rooms; public void CreateRoom(Room room, Action onSuccess = null, Action onError = null) => Rooms.Add(room); diff --git a/osu.Game.Tests/Visual/TestCaseMatchSettingsOverlay.cs b/osu.Game.Tests/Visual/TestCaseMatchSettingsOverlay.cs index 7fb9d4dded..6f084def48 100644 --- a/osu.Game.Tests/Visual/TestCaseMatchSettingsOverlay.cs +++ b/osu.Game.Tests/Visual/TestCaseMatchSettingsOverlay.cs @@ -138,7 +138,7 @@ namespace osu.Game.Tests.Visual public event Action RoomsUpdated; - public IBindableCollection Rooms { get; } = null; + public IBindableList Rooms { get; } = null; public void CreateRoom(Room room, Action onSuccess = null, Action onError = null) { diff --git a/osu.Game/Online/Chat/ChannelManager.cs b/osu.Game/Online/Chat/ChannelManager.cs index 4241b47cd3..d5deda960c 100644 --- a/osu.Game/Online/Chat/ChannelManager.cs +++ b/osu.Game/Online/Chat/ChannelManager.cs @@ -29,8 +29,8 @@ namespace osu.Game.Online.Chat @"#lobby" }; - private readonly BindableCollection availableChannels = new BindableCollection(); - private readonly BindableCollection joinedChannels = new BindableCollection(); + private readonly BindableList availableChannels = new BindableList(); + private readonly BindableList joinedChannels = new BindableList(); ///

/// The currently opened channel @@ -40,12 +40,12 @@ namespace osu.Game.Online.Chat /// /// The Channels the player has joined /// - public IBindableCollection JoinedChannels => joinedChannels; + public IBindableList JoinedChannels => joinedChannels; /// /// The channels available for the player to join /// - public IBindableCollection AvailableChannels => availableChannels; + public IBindableList AvailableChannels => availableChannels; private IAPIProvider api; diff --git a/osu.Game/Online/Multiplayer/PlaylistItem.cs b/osu.Game/Online/Multiplayer/PlaylistItem.cs index 4155121bdf..63b5b95b9c 100644 --- a/osu.Game/Online/Multiplayer/PlaylistItem.cs +++ b/osu.Game/Online/Multiplayer/PlaylistItem.cs @@ -37,10 +37,10 @@ namespace osu.Game.Online.Multiplayer public RulesetInfo Ruleset { get; set; } [JsonIgnore] - public readonly BindableCollection AllowedMods = new BindableCollection(); + public readonly BindableList AllowedMods = new BindableList(); [JsonIgnore] - public readonly BindableCollection RequiredMods = new BindableCollection(); + public readonly BindableList RequiredMods = new BindableList(); [JsonProperty("beatmap")] private APIBeatmap apiBeatmap { get; set; } diff --git a/osu.Game/Online/Multiplayer/Room.cs b/osu.Game/Online/Multiplayer/Room.cs index 448f5ced91..5273c7acfb 100644 --- a/osu.Game/Online/Multiplayer/Room.cs +++ b/osu.Game/Online/Multiplayer/Room.cs @@ -24,7 +24,7 @@ namespace osu.Game.Online.Multiplayer public Bindable Host { get; private set; } = new Bindable(); [JsonProperty("playlist")] - public BindableCollection Playlist { get; set; } = new BindableCollection(); + public BindableList Playlist { get; set; } = new BindableList(); [JsonProperty("channel_id")] public Bindable ChannelId { get; private set; } = new Bindable(); diff --git a/osu.Game/Overlays/Settings/Sections/Graphics/LayoutSettings.cs b/osu.Game/Overlays/Settings/Sections/Graphics/LayoutSettings.cs index 685244e06b..c1fefb7290 100644 --- a/osu.Game/Overlays/Settings/Sections/Graphics/LayoutSettings.cs +++ b/osu.Game/Overlays/Settings/Sections/Graphics/LayoutSettings.cs @@ -18,7 +18,7 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics private FillFlowContainer letterboxSettings; - private Bindable letterboxing; + //private Bindable letterboxing; private Bindable sizeFullscreen; private OsuGameBase game; @@ -32,7 +32,7 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics { this.game = game; - letterboxing = config.GetBindable(FrameworkSetting.Letterboxing); + //letterboxing = config.GetBindable(FrameworkSetting.Letterboxing); sizeFullscreen = config.GetBindable(FrameworkSetting.SizeFullscreen); Container resolutionSettingsContainer; @@ -52,7 +52,7 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics new SettingsCheckbox { LabelText = "Letterboxing", - Bindable = letterboxing, + //Bindable = letterboxing, }, letterboxSettings = new FillFlowContainer { @@ -68,13 +68,13 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics new SettingsSlider { LabelText = "Horizontal position", - Bindable = config.GetBindable(FrameworkSetting.LetterboxPositionX), + //Bindable = config.GetBindable(FrameworkSetting.LetterboxPositionX), KeyboardStep = 0.01f }, new SettingsSlider { LabelText = "Vertical position", - Bindable = config.GetBindable(FrameworkSetting.LetterboxPositionY), + //Bindable = config.GetBindable(FrameworkSetting.LetterboxPositionY), KeyboardStep = 0.01f }, } @@ -105,14 +105,14 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics }, true); } - letterboxing.BindValueChanged(isVisible => + /*letterboxing.BindValueChanged(isVisible => { letterboxSettings.ClearTransforms(); letterboxSettings.AutoSizeAxes = isVisible ? Axes.Y : Axes.None; if (!isVisible) letterboxSettings.ResizeHeightTo(0, transition_duration, Easing.OutQuint); - }, true); + }, true);*/ } private IReadOnlyList getResolutions() diff --git a/osu.Game/Screens/Multi/IRoomManager.cs b/osu.Game/Screens/Multi/IRoomManager.cs index f0dbcb0e71..6af8a35208 100644 --- a/osu.Game/Screens/Multi/IRoomManager.cs +++ b/osu.Game/Screens/Multi/IRoomManager.cs @@ -18,7 +18,7 @@ namespace osu.Game.Screens.Multi /// /// All the active s. /// - IBindableCollection Rooms { get; } + IBindableList Rooms { get; } /// protected virtual string ImportFromStablePath => null; + /// + /// Does stable import look for directories rather than files + /// + protected abstract bool StableDirectoryBased { get; } + /// /// This is a temporary method and will likely be replaced by a full-fledged (and more correctly placed) migration process in the future. /// @@ -566,7 +571,11 @@ namespace osu.Game.Database return Task.CompletedTask; } - return Task.Run(async () => await Import(stable.GetDirectories(ImportFromStablePath).Select(f => stable.GetFullPath(f)).ToArray())); + return Task.Run(async () => + { + var paths = StableDirectoryBased ? stable.GetDirectories(ImportFromStablePath) : stable.GetFiles(ImportFromStablePath); + await Import(paths.Select(f => stable.GetFullPath(f)).ToArray()); + }); } #endregion diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index f38eecef81..75f17fdbe3 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -360,6 +360,7 @@ namespace osu.Game BeatmapManager.PresentImport = items => PresentBeatmap(items.First()); ScoreManager.PostNotification = n => notifications?.Post(n); + ScoreManager.GetStableStorage = GetStorageForStableInstall; ScoreManager.PresentImport = items => PresentScore(items.First()); Container logoContainer; diff --git a/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs b/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs index 398a091486..832673703b 100644 --- a/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs +++ b/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs @@ -7,6 +7,7 @@ using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Game.Beatmaps; using osu.Game.Graphics.UserInterface; +using osu.Game.Scoring; using osu.Game.Skinning; namespace osu.Game.Overlays.Settings.Sections.Maintenance @@ -16,14 +17,16 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance protected override string Header => "General"; private TriangleButton importBeatmapsButton; + private TriangleButton importScoresButton; private TriangleButton importSkinsButton; - private TriangleButton deleteSkinsButton; private TriangleButton deleteBeatmapsButton; + private TriangleButton deleteScoresButton; + private TriangleButton deleteSkinsButton; private TriangleButton restoreButton; private TriangleButton undeleteButton; [BackgroundDependencyLoader] - private void load(BeatmapManager beatmaps, SkinManager skins, DialogOverlay dialogOverlay) + private void load(BeatmapManager beatmaps, ScoreManager scores, SkinManager skins, DialogOverlay dialogOverlay) { if (beatmaps.SupportsImportFromStable) { @@ -51,6 +54,32 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance } }); + if (scores.SupportsImportFromStable) + { + Add(importScoresButton = new SettingsButton + { + Text = "Import scores from stable", + Action = () => + { + importScoresButton.Enabled.Value = false; + scores.ImportFromStableAsync().ContinueWith(t => Schedule(() => importScoresButton.Enabled.Value = true)); + } + }); + } + + Add(deleteScoresButton = new DangerousSettingsButton + { + Text = "Delete ALL scores", + Action = () => + { + dialogOverlay?.Push(new DeleteAllBeatmapsDialog(() => + { + deleteScoresButton.Enabled.Value = false; + Task.Run(() => scores.Delete(scores.GetAllUsableScores())).ContinueWith(t => Schedule(() => deleteScoresButton.Enabled.Value = true)); + })); + } + }); + if (skins.SupportsImportFromStable) { Add(importSkinsButton = new SettingsButton diff --git a/osu.Game/Scoring/ScoreManager.cs b/osu.Game/Scoring/ScoreManager.cs index 6b737dc734..a0a7e956f2 100644 --- a/osu.Game/Scoring/ScoreManager.cs +++ b/osu.Game/Scoring/ScoreManager.cs @@ -22,7 +22,9 @@ namespace osu.Game.Scoring protected override string[] HashableFileTypes => new[] { ".osr" }; - protected override string ImportFromStablePath => "Replays"; + protected override string ImportFromStablePath => @"Data\r"; + + protected override bool StableDirectoryBased => false; private readonly RulesetStore rulesets; private readonly Func beatmaps; @@ -36,10 +38,12 @@ namespace osu.Game.Scoring protected override ScoreInfo CreateModel(ArchiveReader archive) { - if (archive == null) + string filename = archive?.Filenames.FirstOrDefault(f => f.EndsWith(".osr")); + + if (filename == null) return null; - using (var stream = archive.GetStream(archive.Filenames.First(f => f.EndsWith(".osr")))) + using (var stream = archive.GetStream(filename)) { try { diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs index 73cc47ea47..dafaf0c9dc 100644 --- a/osu.Game/Skinning/SkinManager.cs +++ b/osu.Game/Skinning/SkinManager.cs @@ -32,6 +32,8 @@ namespace osu.Game.Skinning protected override string ImportFromStablePath => "Skins"; + protected override bool StableDirectoryBased => true; + public SkinManager(Storage storage, DatabaseContextFactory contextFactory, IIpcHost importHost, AudioManager audio) : base(storage, contextFactory, new SkinStore(contextFactory, storage), importHost) { From ef2e93d5c7ffafe790c7a63a3e2f6e9fc932560f Mon Sep 17 00:00:00 2001 From: HoLLy Date: Wed, 19 Jun 2019 19:29:47 +0200 Subject: [PATCH 039/267] Improve handling of null models when importing --- osu.Game/Database/ArchiveModelManager.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index 2a329cd5b4..41e141129d 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -160,7 +160,8 @@ namespace osu.Game.Database lock (imported) { - imported.Add(model); + if (model != null) + imported.Add(model); current++; notification.Text = $"Imported {current} of {paths.Length} {HumanisedModelName}s"; @@ -243,7 +244,7 @@ namespace osu.Game.Database /// /// Creates a new . diff --git a/osu.Game/Screens/Multi/Lounge/Components/RoomsContainer.cs b/osu.Game/Screens/Multi/Lounge/Components/RoomsContainer.cs index 5133e96a52..4ad8154090 100644 --- a/osu.Game/Screens/Multi/Lounge/Components/RoomsContainer.cs +++ b/osu.Game/Screens/Multi/Lounge/Components/RoomsContainer.cs @@ -22,7 +22,7 @@ namespace osu.Game.Screens.Multi.Lounge.Components private readonly Bindable selectedRoom = new Bindable(); public IBindable SelectedRoom => selectedRoom; - private readonly IBindableCollection rooms = new BindableCollection(); + private readonly IBindableList rooms = new BindableList(); private readonly FillFlowContainer roomFlow; public IReadOnlyList Rooms => roomFlow; diff --git a/osu.Game/Screens/Multi/RoomBindings.cs b/osu.Game/Screens/Multi/RoomBindings.cs index dc2547268d..cdbb6dbea6 100644 --- a/osu.Game/Screens/Multi/RoomBindings.cs +++ b/osu.Game/Screens/Multi/RoomBindings.cs @@ -86,7 +86,7 @@ namespace osu.Game.Screens.Multi public readonly Bindable Host = new Bindable(); public readonly Bindable Status = new Bindable(); public readonly Bindable Type = new Bindable(); - public readonly BindableCollection Playlist = new BindableCollection(); + public readonly BindableList Playlist = new BindableList(); public readonly Bindable> Participants = new Bindable>(); public readonly Bindable ParticipantCount = new Bindable(); public readonly Bindable MaxParticipants = new Bindable(); diff --git a/osu.Game/Screens/Multi/RoomManager.cs b/osu.Game/Screens/Multi/RoomManager.cs index fab19c3fd7..1f95401905 100644 --- a/osu.Game/Screens/Multi/RoomManager.cs +++ b/osu.Game/Screens/Multi/RoomManager.cs @@ -21,8 +21,8 @@ namespace osu.Game.Screens.Multi { public event Action RoomsUpdated; - private readonly BindableCollection rooms = new BindableCollection(); - public IBindableCollection Rooms => rooms; + private readonly BindableList rooms = new BindableList(); + public IBindableList Rooms => rooms; private Room currentRoom; diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 103c7c20d6..4069ac01d0 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -18,7 +18,7 @@ - + From 8c94ea3c35337a145855b8e3db3d885bed31b215 Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Tue, 8 Jan 2019 18:14:34 -0600 Subject: [PATCH 024/267] Update NuGet packages --- osu.Android.props | 8 ++++---- osu.Game/osu.Game.csproj | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/osu.Android.props b/osu.Android.props index 4c89408203..a662855fc1 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -39,10 +39,10 @@ - 0.0.7879 + 0.0.7939 - 0.0.7879 + 0.0.7939 0.22.0 @@ -51,10 +51,10 @@ 1.1.0 - 1.0.0-dev000094 + 1.0.0-dev000096 - 1.0.0-dev002278 + 1.0.0-dev002315 \ No newline at end of file diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 4069ac01d0..ce6e035b1c 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -18,7 +18,7 @@ - + From 6624a91697ccb26f9e5b9053d8f3aca631f30765 Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Tue, 8 Jan 2019 21:36:22 -0600 Subject: [PATCH 025/267] Remove Resource.designer.cs --- osu.Android/Resources/Resource.designer.cs | 92 ---------------------- 1 file changed, 92 deletions(-) delete mode 100644 osu.Android/Resources/Resource.designer.cs diff --git a/osu.Android/Resources/Resource.designer.cs b/osu.Android/Resources/Resource.designer.cs deleted file mode 100644 index c02df072f1..0000000000 --- a/osu.Android/Resources/Resource.designer.cs +++ /dev/null @@ -1,92 +0,0 @@ -#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("osu.Android.Resource", IsApplication=true)] - -namespace osu.Android -{ - - - [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 Color - { - - // aapt resource value: 0x7f030002 - public const int colorAccent = 2130903042; - - // aapt resource value: 0x7f030000 - public const int colorPrimary = 2130903040; - - // aapt resource value: 0x7f030001 - public const int colorPrimaryDark = 2130903041; - - // aapt resource value: 0x7f030003 - public const int ic_launcher_background = 2130903043; - - static Color() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Color() - { - } - } - - public partial class Mipmap - { - - // aapt resource value: 0x7f020000 - public const int ic_launcher = 2130837504; - - // aapt resource value: 0x7f020001 - public const int ic_launcher_foreground = 2130837505; - - // aapt resource value: 0x7f020002 - public const int ic_launcher_round = 2130837506; - - static Mipmap() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Mipmap() - { - } - } - } -} -#pragma warning restore 1591 From b18eebfd70757c3fbab997f0d487de00e7ec4489 Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Wed, 9 Jan 2019 19:31:42 -0600 Subject: [PATCH 026/267] Get icon working for osu.Android --- osu.Android/Properties/AndroidManifest.xml | 2 +- osu.Android/Resources/drawable/lazer.png | Bin 0 -> 39498 bytes .../mipmap-anydpi-v26/ic_launcher.xml | 5 ---- .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 ---- .../Resources/mipmap-hdpi/ic_launcher.png | Bin 8828 -> 0 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 1441 -> 0 bytes .../mipmap-hdpi/ic_launcher_round.png | Bin 8828 -> 0 bytes .../Resources/mipmap-mdpi/ic_launcher.png | Bin 5045 -> 0 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 958 -> 0 bytes .../mipmap-mdpi/ic_launcher_round.png | Bin 5045 -> 0 bytes .../Resources/mipmap-xhdpi/ic_launcher.png | Bin 12931 -> 0 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 2056 -> 0 bytes .../mipmap-xhdpi/ic_launcher_round.png | Bin 12931 -> 0 bytes .../Resources/mipmap-xxhdpi/ic_launcher.png | Bin 21256 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 3403 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_round.png | Bin 21256 -> 0 bytes .../Resources/mipmap-xxxhdpi/ic_launcher.png | Bin 30047 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 4889 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_round.png | Bin 30047 -> 0 bytes osu.Android/Resources/values/colors.xml | 6 ----- .../values/ic_launcher_background.xml | 4 --- osu.Android/osu.Android.csproj | 23 +----------------- 22 files changed, 2 insertions(+), 43 deletions(-) create mode 100644 osu.Android/Resources/drawable/lazer.png delete mode 100644 osu.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 osu.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml delete mode 100644 osu.Android/Resources/mipmap-hdpi/ic_launcher.png delete mode 100644 osu.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png delete mode 100644 osu.Android/Resources/mipmap-hdpi/ic_launcher_round.png delete mode 100644 osu.Android/Resources/mipmap-mdpi/ic_launcher.png delete mode 100644 osu.Android/Resources/mipmap-mdpi/ic_launcher_foreground.png delete mode 100644 osu.Android/Resources/mipmap-mdpi/ic_launcher_round.png delete mode 100644 osu.Android/Resources/mipmap-xhdpi/ic_launcher.png delete mode 100644 osu.Android/Resources/mipmap-xhdpi/ic_launcher_foreground.png delete mode 100644 osu.Android/Resources/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 osu.Android/Resources/mipmap-xxhdpi/ic_launcher.png delete mode 100644 osu.Android/Resources/mipmap-xxhdpi/ic_launcher_foreground.png delete mode 100644 osu.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 osu.Android/Resources/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 osu.Android/Resources/mipmap-xxxhdpi/ic_launcher_foreground.png delete mode 100644 osu.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png delete mode 100644 osu.Android/Resources/values/colors.xml delete mode 100644 osu.Android/Resources/values/ic_launcher_background.xml diff --git a/osu.Android/Properties/AndroidManifest.xml b/osu.Android/Properties/AndroidManifest.xml index bb5f9b751e..9b337eec6c 100644 --- a/osu.Android/Properties/AndroidManifest.xml +++ b/osu.Android/Properties/AndroidManifest.xml @@ -5,5 +5,5 @@ - + \ No newline at end of file diff --git a/osu.Android/Resources/drawable/lazer.png b/osu.Android/Resources/drawable/lazer.png new file mode 100644 index 0000000000000000000000000000000000000000..075a8e7184ad508cedd8fe9ae549d8cea696b51a GIT binary patch literal 39498 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 X{r?ZpP_kcw2Ot$CjR&O)ra}J$c_$^Y literal 0 HcmV?d00001 diff --git a/osu.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml b/osu.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index 9412204815..0000000000 --- a/osu.Android/Resources/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/osu.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml b/osu.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index 036d09bc5f..0000000000 --- a/osu.Android/Resources/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/osu.Android/Resources/mipmap-hdpi/ic_launcher.png b/osu.Android/Resources/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 2af076dabd0afe60561f41903cc42931db8d33cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8828 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 N&GnQ!lI8SQ#{X#Iv!eh2 diff --git a/osu.Android/Resources/mipmap-hdpi/ic_launcher_round.png b/osu.Android/Resources/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index 2af076dabd0afe60561f41903cc42931db8d33cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8828 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 LNkvXXu0mjfp$&R0 diff --git a/osu.Android/Resources/mipmap-mdpi/ic_launcher_foreground.png b/osu.Android/Resources/mipmap-mdpi/ic_launcher_foreground.png deleted file mode 100644 index a12b157f00e3022cfe81a1e767525c33f4ed2cf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 958 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz1|<8_!p|}=Ft>WTIEGZ*dOIh!!#7am`0)iN z!-Y*JzdqP8rN&2Y&y2(+EtA?m9-5+}#BXAw@$*D;zxcf=lRhYP2`ZYNoGdU|=;=Y1 z!-o@UOzpBVHoTpyopyF#@i)8YcdVaV?2ljDUj6>w?`yyA*Pf5cUSE9b6wq26;8J@~ z){!@7GpTmNE>2kO_POn1zf8`~}P?%{85(;s&nc+C&;t$4D5$+f9? z-8>e~Z&%(_OwrVd==PGc4mhTFjVafjdCqsM|EvEe$2)U;a9s0IGofbtHcpKz;cJR= z`DNzVI-iMtrg<$r*EFejE8l0oMM3e)a|=o;x>Mhk@*n)xx%2Rrt=4TnivwP5zpS-& z@5h3w<{9>vH!6KP74q!po!oh)$BI~jUu}4P|5ofvi@(2i9NyELbZ$qD}PI&+JJ3+^f2=YEuP zjpepXu;`->)%n@lB|b@Iv$k0qhJJp%S?O9t?)zjLwwY?z@=v^12)=lt^ZcwNoye^x z_uu*-x}ntY`mc3S`yMaaHuurqE~e`{G_IsMZdhw*{kDDS9h3WSQa;8d3vwO)d?WE+ z%*LAIs=2#$t=BZmPTP}xMpj0I9ti9_c{r`p zu+;ELV)~|tmk}}-GjAWQO5U<}Lr?bB5UX>pYf5~UOnY%ZTQR${nq6YQOHc15>q%#$ zl8$8k_1fsCw;<~OiJ-OiE?f7RJWt%N`#e!y=2`BhIqju|a?kW5QupmV#wx6HrSs?J z&nJroVy6i|*Og1U`{c;a^^dPvTfNJjdCg1nUS<*OC dK7&Kx57tYsZ49$p7vBM?@pScbS?83{1OVHE%8UR2 diff --git a/osu.Android/Resources/mipmap-mdpi/ic_launcher_round.png b/osu.Android/Resources/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index c51990875e404a36964d727d376637c6e6c81305..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5045 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 LNkvXXu0mjfp$&R0 diff --git a/osu.Android/Resources/mipmap-xhdpi/ic_launcher.png b/osu.Android/Resources/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 4e8d9b598cd21e01bbbca29aa077d99a4dabefe3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12931 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 b;}yxl--Ss53i@>Q4YQuNcebmsMJN0NT!aL! diff --git a/osu.Android/Resources/mipmap-xhdpi/ic_launcher_round.png b/osu.Android/Resources/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 4e8d9b598cd21e01bbbca29aa077d99a4dabefe3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12931 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 diff --git a/osu.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png b/osu.Android/Resources/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index 2d3354eaf2778d4ae52cf3e1368f131be63ccb62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21256 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 z 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 z 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 F@PB1o0BisN diff --git a/osu.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png b/osu.Android/Resources/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index d8b832e7f7a81d3d69ad5c0b3ea88dfd739e36c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30047 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 z 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 - - #2c3e50 - #1B3147 - #3498db - diff --git a/osu.Android/Resources/values/ic_launcher_background.xml b/osu.Android/Resources/values/ic_launcher_background.xml deleted file mode 100644 index 6ec24e6413..0000000000 --- a/osu.Android/Resources/values/ic_launcher_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #2C3E50 - \ No newline at end of file diff --git a/osu.Android/osu.Android.csproj b/osu.Android/osu.Android.csproj index 4a1dccd758..bfde981207 100644 --- a/osu.Android/osu.Android.csproj +++ b/osu.Android/osu.Android.csproj @@ -27,7 +27,6 @@ - @@ -47,27 +46,6 @@ - - - - - - - - - - - - - - - - - - - - - {d9a367c9-4c1a-489f-9b05-a0cea2b53b58} @@ -96,6 +74,7 @@ + \ No newline at end of file From c62848df5ae98a42add6352833ed5d085b2af2cd Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Wed, 30 Jan 2019 18:07:32 -0600 Subject: [PATCH 027/267] Update license header --- osu.Android/OsuGameActivity.cs | 16 +++++++++++++--- .../MainActivity.cs | 4 ++-- .../MainActivity.cs | 4 ++-- .../MainActivity.cs | 4 ++-- .../MainActivity.cs | 4 ++-- osu.Game.Tests.Android/MainActivity.cs | 6 +++--- 6 files changed, 24 insertions(+), 14 deletions(-) diff --git a/osu.Android/OsuGameActivity.cs b/osu.Android/OsuGameActivity.cs index 08f2707044..130144d417 100644 --- a/osu.Android/OsuGameActivity.cs +++ b/osu.Android/OsuGameActivity.cs @@ -1,17 +1,27 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. using Android.App; using Android.Content.PM; +using Android.OS; +using Android.Views; using osu.Framework.Android; using osu.Game; namespace osu.Android { - [Activity(Theme = "@android:style/Theme.NoTitleBar", MainLauncher = true, ScreenOrientation = ScreenOrientation.SensorLandscape, SupportsPictureInPicture = false, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize)] + [Activity(Theme = "@android:style/Theme.NoTitleBar", MainLauncher = true, ScreenOrientation = ScreenOrientation.SensorLandscape, SupportsPictureInPicture = false, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize, HardwareAccelerated = true)] public class OsuGameActivity : AndroidGameActivity { protected override Framework.Game CreateGame() => new OsuGame(); + + protected override void OnCreate(Bundle savedInstanceState) + { + base.OnCreate(savedInstanceState); + + Window.AddFlags(WindowManagerFlags.Fullscreen); + Window.AddFlags(WindowManagerFlags.KeepScreenOn); + } } } diff --git a/osu.Game.Rulesets.Catch.Tests.Android/MainActivity.cs b/osu.Game.Rulesets.Catch.Tests.Android/MainActivity.cs index 4b13b86ca2..8430a88f15 100644 --- a/osu.Game.Rulesets.Catch.Tests.Android/MainActivity.cs +++ b/osu.Game.Rulesets.Catch.Tests.Android/MainActivity.cs @@ -1,5 +1,5 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. using Android.App; using Android.Content.PM; diff --git a/osu.Game.Rulesets.Mania.Tests.Android/MainActivity.cs b/osu.Game.Rulesets.Mania.Tests.Android/MainActivity.cs index 3c0de47654..0f1d6756bc 100644 --- a/osu.Game.Rulesets.Mania.Tests.Android/MainActivity.cs +++ b/osu.Game.Rulesets.Mania.Tests.Android/MainActivity.cs @@ -1,5 +1,5 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. using Android.App; using Android.Content.PM; diff --git a/osu.Game.Rulesets.Osu.Tests.Android/MainActivity.cs b/osu.Game.Rulesets.Osu.Tests.Android/MainActivity.cs index 622eadef70..d6f2ec546d 100644 --- a/osu.Game.Rulesets.Osu.Tests.Android/MainActivity.cs +++ b/osu.Game.Rulesets.Osu.Tests.Android/MainActivity.cs @@ -1,5 +1,5 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. using Android.App; using Android.Content.PM; diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/MainActivity.cs b/osu.Game.Rulesets.Taiko.Tests.Android/MainActivity.cs index 0c64cbfc5d..cc92ad7080 100644 --- a/osu.Game.Rulesets.Taiko.Tests.Android/MainActivity.cs +++ b/osu.Game.Rulesets.Taiko.Tests.Android/MainActivity.cs @@ -1,5 +1,5 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. using Android.App; using Android.Content.PM; diff --git a/osu.Game.Tests.Android/MainActivity.cs b/osu.Game.Tests.Android/MainActivity.cs index 58375c699e..6f68c372ef 100644 --- a/osu.Game.Tests.Android/MainActivity.cs +++ b/osu.Game.Tests.Android/MainActivity.cs @@ -1,5 +1,5 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. using Android.App; using Android.Content.PM; @@ -7,7 +7,7 @@ using osu.Framework.Android; namespace osu.Game.Tests.Android { - [Activity(Theme = "@android:style/Theme.NoTitleBar", MainLauncher = true, ScreenOrientation = ScreenOrientation.SensorLandscape, SupportsPictureInPicture = false, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize)] + [Activity(Theme = "@android:style/Theme.NoTitleBar", MainLauncher = true, ScreenOrientation = ScreenOrientation.SensorLandscape, SupportsPictureInPicture = false, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize, HardwareAccelerated = true)] public class MainActivity : AndroidGameActivity { protected override Framework.Game CreateGame() From 999b947153206c10b5f1295a08d70391758256b1 Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Tue, 5 Mar 2019 17:55:18 -0600 Subject: [PATCH 028/267] Update Android csproj files --- osu.Android.props | 85 +- osu.Android.sln | 10 +- osu.Android.sln.DotSettings | 815 ++++++++++++++++++ osu.Android/Properties/AndroidManifest.xml | 4 +- osu.Android/monogc.txt | 1 + osu.Android/osu.Android.csproj | 40 +- ...u.Game.Rulesets.Catch.Tests.Android.csproj | 21 +- ...u.Game.Rulesets.Mania.Tests.Android.csproj | 21 +- ...osu.Game.Rulesets.Osu.Tests.Android.csproj | 21 +- ...u.Game.Rulesets.Taiko.Tests.Android.csproj | 24 +- .../osu.Game.Tests.Android.csproj | 21 +- osu.Game/osu.Game.csproj | 2 +- 12 files changed, 880 insertions(+), 185 deletions(-) create mode 100644 osu.Android.sln.DotSettings create mode 100644 osu.Android/monogc.txt diff --git a/osu.Android.props b/osu.Android.props index a662855fc1..bf18d9f022 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -1,60 +1,69 @@ + + bin\$(Configuration) + 4 + 2.0 + false + false + default + Library + 512 + Off + True + Xamarin.Android.Net.AndroidClientHandler + v8.1 + false + True portable False - bin\Debug\ DEBUG;TRACE prompt - 4 - True - None - False - false false - false - CJK;Mideast;Rare;West;Other - - false + false + SdkOnly + true + false + cjk,mideast,other,rare,west + true + armeabi-v7a;x86;arm64-v8a + true - True - pdbonly + false + None True - bin\Release\ - TRACE prompt - 4 - true - False + true + false SdkOnly - True - CJK;Mideast;Rare;West;Other + False + true + cjk,mideast,other,rare,west + true + armeabi-v7a;x86;arm64-v8a + true + + + osu.licenseheader + + + Always + + + + + - - - 0.0.7939 - - - 0.0.7939 - - - 0.22.0 - - - 1.1.0 - - - 1.0.0-dev000096 - - - 1.0.0-dev002315 - + + + \ No newline at end of file diff --git a/osu.Android.sln b/osu.Android.sln index d9c6ffc939..ebf2c55cb4 100644 --- a/osu.Android.sln +++ b/osu.Android.sln @@ -1,12 +1,10 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27004.2006 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28516.95 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "osu.Game", "osu.Game\osu.Game.csproj", "{2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "osu.Game.Resources", "osu-resources\osu.Game.Resources\osu.Game.Resources.csproj", "{D9A367C9-4C1A-489F-9B05-A0CEA2B53B58}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "osu.Game.Rulesets.Osu", "osu.Game.Rulesets.Osu\osu.Game.Rulesets.Osu.csproj", "{C92A607B-1FDD-4954-9F92-03FF547D9080}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "osu.Game.Rulesets.Catch", "osu.Game.Rulesets.Catch\osu.Game.Rulesets.Catch.csproj", "{58F6C80C-1253-4A0E-A465-B8C85EBEADF3}" @@ -37,10 +35,6 @@ Global {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}.Debug|Any CPU.Build.0 = Debug|Any CPU {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}.Release|Any CPU.ActiveCfg = Release|Any CPU {2A66DD92-ADB1-4994-89E2-C94E04ACDA0D}.Release|Any CPU.Build.0 = Release|Any CPU - {D9A367C9-4C1A-489F-9B05-A0CEA2B53B58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D9A367C9-4C1A-489F-9B05-A0CEA2B53B58}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D9A367C9-4C1A-489F-9B05-A0CEA2B53B58}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D9A367C9-4C1A-489F-9B05-A0CEA2B53B58}.Release|Any CPU.Build.0 = Release|Any CPU {C92A607B-1FDD-4954-9F92-03FF547D9080}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C92A607B-1FDD-4954-9F92-03FF547D9080}.Debug|Any CPU.Build.0 = Debug|Any CPU {C92A607B-1FDD-4954-9F92-03FF547D9080}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/osu.Android.sln.DotSettings b/osu.Android.sln.DotSettings new file mode 100644 index 0000000000..3f5bd9d34d --- /dev/null +++ b/osu.Android.sln.DotSettings @@ -0,0 +1,815 @@ + + True + True + True + True + ExplicitlyExcluded + ExplicitlyExcluded + SOLUTION + HINT + WARNING + + True + WARNING + WARNING + HINT + HINT + HINT + HINT + WARNING + WARNING + WARNING + HINT + WARNING + HINT + SUGGESTION + HINT + HINT + HINT + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + HINT + WARNING + WARNING + HINT + WARNING + WARNING + DO_NOT_SHOW + HINT + WARNING + DO_NOT_SHOW + WARNING + HINT + HINT + HINT + ERROR + HINT + HINT + HINT + WARNING + WARNING + HINT + DO_NOT_SHOW + HINT + HINT + HINT + HINT + WARNING + WARNING + WARNING + WARNING + WARNING + HINT + HINT + HINT + HINT + HINT + WARNING + WARNING + WARNING + WARNING + WARNING + HINT + DO_NOT_SHOW + DO_NOT_SHOW + DO_NOT_SHOW + WARNING + + WARNING + WARNING + WARNING + ERROR + WARNING + WARNING + HINT + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + HINT + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + HINT + DO_NOT_SHOW + DO_NOT_SHOW + DO_NOT_SHOW + WARNING + WARNING + HINT + WARNING + HINT + HINT + HINT + HINT + HINT + HINT + HINT + + HINT + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + HINT + WARNING + WARNING + HINT + HINT + WARNING + <?xml version="1.0" encoding="utf-16"?><Profile name="Code Cleanup (peppy)"><CSArrangeThisQualifier>True</CSArrangeThisQualifier><CSUseVar><BehavourStyle>CAN_CHANGE_TO_EXPLICIT</BehavourStyle><LocalVariableStyle>ALWAYS_EXPLICIT</LocalVariableStyle><ForeachVariableStyle>ALWAYS_EXPLICIT</ForeachVariableStyle></CSUseVar><CSOptimizeUsings><OptimizeUsings>True</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSShortenReferences>True</CSShortenReferences><CSReformatCode>True</CSReformatCode><CSUpdateFileHeader>True</CSUpdateFileHeader><CSCodeStyleAttributes ArrangeTypeAccessModifier="False" ArrangeTypeMemberAccessModifier="False" SortModifiers="True" RemoveRedundantParentheses="True" AddMissingParentheses="False" ArrangeBraces="False" ArrangeAttributes="False" ArrangeArgumentsStyle="False" /><XAMLCollapseEmptyTags>False</XAMLCollapseEmptyTags><CSFixBuiltinTypeReferences>True</CSFixBuiltinTypeReferences><CSArrangeQualifiers>True</CSArrangeQualifiers></Profile> + Code Cleanup (peppy) + True + True + True + True + True + True + True + True + NEXT_LINE + NEXT_LINE + True + NEVER + NEVER + False + NEVER + False + True + False + False + True + True + False + CHOP_IF_LONG + True + 200 + CHOP_IF_LONG + False + False + AABB + API + BPM + GC + GL + GLSL + HID + HUD + ID + IP + IPC + LTRB + MD5 + NS + OS + RGB + RNG + SHA + SRGB + TK + SS + PP + GMT + QAT + BNG + UI + HINT + <?xml version="1.0" encoding="utf-16"?> +<Patterns xmlns="urn:schemas-jetbrains-com:member-reordering-patterns"> + <TypePattern DisplayName="COM interfaces or structs"> + <TypePattern.Match> + <Or> + <And> + <Kind Is="Interface" /> + <Or> + <HasAttribute Name="System.Runtime.InteropServices.InterfaceTypeAttribute" /> + <HasAttribute Name="System.Runtime.InteropServices.ComImport" /> + </Or> + </And> + <Kind Is="Struct" /> + </Or> + </TypePattern.Match> + </TypePattern> + <TypePattern DisplayName="NUnit Test Fixtures" RemoveRegions="All"> + <TypePattern.Match> + <And> + <Kind Is="Class" /> + <HasAttribute Name="NUnit.Framework.TestFixtureAttribute" Inherited="True" /> + </And> + </TypePattern.Match> + <Entry DisplayName="Setup/Teardown Methods"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Or> + <HasAttribute Name="NUnit.Framework.SetUpAttribute" Inherited="True" /> + <HasAttribute Name="NUnit.Framework.TearDownAttribute" Inherited="True" /> + <HasAttribute Name="NUnit.Framework.FixtureSetUpAttribute" Inherited="True" /> + <HasAttribute Name="NUnit.Framework.FixtureTearDownAttribute" Inherited="True" /> + </Or> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="All other members" /> + <Entry Priority="100" DisplayName="Test Methods"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="NUnit.Framework.TestAttribute" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Name /> + </Entry.SortBy> + </Entry> + </TypePattern> + <TypePattern DisplayName="Default Pattern"> + <Group DisplayName="Fields/Properties"> + <Group DisplayName="Public Fields"> + <Entry DisplayName="Constant Fields"> + <Entry.Match> + <And> + <Access Is="Public" /> + <Or> + <Kind Is="Constant" /> + <Readonly /> + <And> + <Static /> + <Readonly /> + </And> + </Or> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="Static Fields"> + <Entry.Match> + <And> + <Access Is="Public" /> + <Static /> + <Not> + <Readonly /> + </Not> + <Kind Is="Field" /> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="Normal Fields"> + <Entry.Match> + <And> + <Access Is="Public" /> + <Not> + <Or> + <Static /> + <Readonly /> + </Or> + </Not> + <Kind Is="Field" /> + </And> + </Entry.Match> + </Entry> + </Group> + <Entry DisplayName="Public Properties"> + <Entry.Match> + <And> + <Access Is="Public" /> + <Kind Is="Property" /> + </And> + </Entry.Match> + </Entry> + <Group DisplayName="Internal Fields"> + <Entry DisplayName="Constant Fields"> + <Entry.Match> + <And> + <Access Is="Internal" /> + <Or> + <Kind Is="Constant" /> + <Readonly /> + <And> + <Static /> + <Readonly /> + </And> + </Or> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="Static Fields"> + <Entry.Match> + <And> + <Access Is="Internal" /> + <Static /> + <Not> + <Readonly /> + </Not> + <Kind Is="Field" /> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="Normal Fields"> + <Entry.Match> + <And> + <Access Is="Internal" /> + <Not> + <Or> + <Static /> + <Readonly /> + </Or> + </Not> + <Kind Is="Field" /> + </And> + </Entry.Match> + </Entry> + </Group> + <Entry DisplayName="Internal Properties"> + <Entry.Match> + <And> + <Access Is="Internal" /> + <Kind Is="Property" /> + </And> + </Entry.Match> + </Entry> + <Group DisplayName="Protected Fields"> + <Entry DisplayName="Constant Fields"> + <Entry.Match> + <And> + <Access Is="Protected" /> + <Or> + <Kind Is="Constant" /> + <Readonly /> + <And> + <Static /> + <Readonly /> + </And> + </Or> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="Static Fields"> + <Entry.Match> + <And> + <Access Is="Protected" /> + <Static /> + <Not> + <Readonly /> + </Not> + <Kind Is="Field" /> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="Normal Fields"> + <Entry.Match> + <And> + <Access Is="Protected" /> + <Not> + <Or> + <Static /> + <Readonly /> + </Or> + </Not> + <Kind Is="Field" /> + </And> + </Entry.Match> + </Entry> + </Group> + <Entry DisplayName="Protected Properties"> + <Entry.Match> + <And> + <Access Is="Protected" /> + <Kind Is="Property" /> + </And> + </Entry.Match> + </Entry> + <Group DisplayName="Private Fields"> + <Entry DisplayName="Constant Fields"> + <Entry.Match> + <And> + <Access Is="Private" /> + <Or> + <Kind Is="Constant" /> + <Readonly /> + <And> + <Static /> + <Readonly /> + </And> + </Or> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="Static Fields"> + <Entry.Match> + <And> + <Access Is="Private" /> + <Static /> + <Not> + <Readonly /> + </Not> + <Kind Is="Field" /> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="Normal Fields"> + <Entry.Match> + <And> + <Access Is="Private" /> + <Not> + <Or> + <Static /> + <Readonly /> + </Or> + </Not> + <Kind Is="Field" /> + </And> + </Entry.Match> + </Entry> + </Group> + <Entry DisplayName="Private Properties"> + <Entry.Match> + <And> + <Access Is="Private" /> + <Kind Is="Property" /> + </And> + </Entry.Match> + </Entry> + </Group> + <Group DisplayName="Constructor/Destructor"> + <Entry DisplayName="Ctor"> + <Entry.Match> + <Kind Is="Constructor" /> + </Entry.Match> + </Entry> + <Region Name="Disposal"> + <Entry DisplayName="Dtor"> + <Entry.Match> + <Kind Is="Destructor" /> + </Entry.Match> + </Entry> + <Entry DisplayName="Dispose()"> + <Entry.Match> + <And> + <Access Is="Public" /> + <Kind Is="Method" /> + <Name Is="Dispose" /> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="Dispose(true)"> + <Entry.Match> + <And> + <Access Is="Protected" /> + <Or> + <Virtual /> + <Override /> + </Or> + <Kind Is="Method" /> + <Name Is="Dispose" /> + </And> + </Entry.Match> + </Entry> + </Region> + </Group> + <Group DisplayName="Methods"> + <Group DisplayName="Public"> + <Entry DisplayName="Static Methods"> + <Entry.Match> + <And> + <Access Is="Public" /> + <Static /> + <Kind Is="Method" /> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="Methods"> + <Entry.Match> + <And> + <Access Is="Public" /> + <Not> + <Static /> + </Not> + <Kind Is="Method" /> + </And> + </Entry.Match> + </Entry> + </Group> + <Group DisplayName="Internal"> + <Entry DisplayName="Static Methods"> + <Entry.Match> + <And> + <Access Is="Internal" /> + <Static /> + <Kind Is="Method" /> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="Methods"> + <Entry.Match> + <And> + <Access Is="Internal" /> + <Not> + <Static /> + </Not> + <Kind Is="Method" /> + </And> + </Entry.Match> + </Entry> + </Group> + <Group DisplayName="Protected"> + <Entry DisplayName="Static Methods"> + <Entry.Match> + <And> + <Access Is="Protected" /> + <Static /> + <Kind Is="Method" /> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="Methods"> + <Entry.Match> + <And> + <Access Is="Protected" /> + <Not> + <Static /> + </Not> + <Kind Is="Method" /> + </And> + </Entry.Match> + </Entry> + </Group> + <Group DisplayName="Private"> + <Entry DisplayName="Static Methods"> + <Entry.Match> + <And> + <Access Is="Private" /> + <Static /> + <Kind Is="Method" /> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="Methods"> + <Entry.Match> + <And> + <Access Is="Private" /> + <Not> + <Static /> + </Not> + <Kind Is="Method" /> + </And> + </Entry.Match> + </Entry> + </Group> + </Group> + </TypePattern> +</Patterns> + Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. +See the LICENCE file in the repository root for full licence text. + + <Policy Inspect="True" Prefix="" Suffix="" Style="AA_BB" /> + <Policy Inspect="False" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb"><ExtraRule Prefix="_" Suffix="" Style="aaBb" /></Policy> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AA_BB" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy><Descriptor Staticness="Static, Instance" AccessRightKinds="Private" Description="private methods"><ElementKinds><Kind Name="ASYNC_METHOD" /><Kind Name="METHOD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> + <Policy><Descriptor Staticness="Static, Instance" AccessRightKinds="Protected, ProtectedInternal, Internal, Public" Description="internal/protected/public methods"><ElementKinds><Kind Name="ASYNC_METHOD" /><Kind Name="METHOD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> + <Policy><Descriptor Staticness="Static, Instance" AccessRightKinds="Private" Description="private properties"><ElementKinds><Kind Name="PROPERTY" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> + <Policy><Descriptor Staticness="Static, Instance" AccessRightKinds="Protected, ProtectedInternal, Internal, Public" Description="internal/protected/public properties"><ElementKinds><Kind Name="PROPERTY" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="I" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="T" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + True + True + True + True + True + True + True + True + True + True + True + True + o!f – Object Initializer: Anchor&Origin + True + constant("Centre") + 0 + True + True + 2.0 + InCSharpFile + ofao + True + Anchor = Anchor.$anchor$, +Origin = Anchor.$anchor$, + True + True + o!f – InternalChildren = [] + True + True + 2.0 + InCSharpFile + ofic + True + InternalChildren = new Drawable[] +{ + $END$ +}; + True + True + o!f – new GridContainer { .. } + True + True + 2.0 + InCSharpFile + ofgc + True + new GridContainer +{ + RelativeSizeAxes = Axes.Both, + Content = new[] + { + new Drawable[] { $END$ }, + new Drawable[] { } + } +}; + True + True + o!f – new FillFlowContainer { .. } + True + True + 2.0 + InCSharpFile + offf + True + new FillFlowContainer +{ + RelativeSizeAxes = Axes.Both, + Direction = FillDirection.Vertical, + Children = new Drawable[] + { + $END$ + } +}, + True + True + o!f – new Container { .. } + True + True + 2.0 + InCSharpFile + ofcont + True + new Container +{ + RelativeSizeAxes = Axes.Both, + Children = new Drawable[] + { + $END$ + } +}, + True + True + o!f – BackgroundDependencyLoader load() + True + True + 2.0 + InCSharpFile + ofbdl + True + [BackgroundDependencyLoader] +private void load() +{ + $END$ +} + True + True + o!f – new Box { .. } + True + True + 2.0 + InCSharpFile + ofbox + True + new Box +{ + Colour = Color4.Black, + RelativeSizeAxes = Axes.Both, +}, + True + True + o!f – Children = [] + True + True + 2.0 + InCSharpFile + ofc + True + Children = new Drawable[] +{ + $END$ +}; + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True diff --git a/osu.Android/Properties/AndroidManifest.xml b/osu.Android/Properties/AndroidManifest.xml index 9b337eec6c..c053ced9e2 100644 --- a/osu.Android/Properties/AndroidManifest.xml +++ b/osu.Android/Properties/AndroidManifest.xml @@ -1,9 +1,9 @@  - + - + \ No newline at end of file diff --git a/osu.Android/monogc.txt b/osu.Android/monogc.txt new file mode 100644 index 0000000000..d15a2bd2ae --- /dev/null +++ b/osu.Android/monogc.txt @@ -0,0 +1 @@ +MONO_GC_PARAMS=nursery-size=8m \ No newline at end of file diff --git a/osu.Android/osu.Android.csproj b/osu.Android/osu.Android.csproj index bfde981207..45ff8ba31a 100644 --- a/osu.Android/osu.Android.csproj +++ b/osu.Android/osu.Android.csproj @@ -1,5 +1,6 @@  + Debug AnyCPU @@ -8,49 +9,20 @@ {D1D5F9A8-B40B-40E6-B02F-482D03346D3D} {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} {122416d6-6b49-4ee2-a1e8-b825f31c79fe} - Library - Properties osu.Android osu.Android - 512 - True - Resources\Resource.designer.cs - Resource - Off - false - v8.1 Properties\AndroidManifest.xml - Resources - Assets - Xamarin.Android.Net.AndroidClientHandler - + + true + - - osu.licenseheader - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - {d9a367c9-4c1a-489f-9b05-a0cea2b53b58} - osu.Game.Resources - {58f6c80c-1253-4a0e-a465-b8c85ebeadf3} osu.Game.Rulesets.Catch @@ -73,8 +45,10 @@ - + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj b/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj index 591f4cbc31..ed746921be 100644 --- a/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj +++ b/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj @@ -1,5 +1,6 @@  + Debug AnyCPU @@ -8,30 +9,14 @@ {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D} {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} {122416d6-6b49-4ee2-a1e8-b825f31c79fe} - Library - Properties osu.Game.Rulesets.Catch.Tests osu.Game.Rulesets.Catch.Tests.Android - 512 - True - Resources\Resource.designer.cs - Resource - Off - false - v8.1 Properties\AndroidManifest.xml - Resources - Assets - Xamarin.Android.Net.AndroidClientHandler - - - osu.licenseheader - @@ -40,10 +25,6 @@ - - {d9a367c9-4c1a-489f-9b05-a0cea2b53b58} - osu.Game.Resources - {58f6c80c-1253-4a0e-a465-b8c85ebeadf3} osu.Game.Rulesets.Catch diff --git a/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj b/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj index 5faf9f747d..b366958342 100644 --- a/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj +++ b/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj @@ -1,5 +1,6 @@  + Debug AnyCPU @@ -8,30 +9,14 @@ {531F1092-DB27-445D-AA33-2A77C7187C99} {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} {122416d6-6b49-4ee2-a1e8-b825f31c79fe} - Library - Properties osu.Game.Rulesets.Mania.Tests osu.Game.Rulesets.Mania.Tests.Android - 512 - True - Resources\Resource.designer.cs - Resource - Off - false - v8.1 Properties\AndroidManifest.xml - Resources - Assets - Xamarin.Android.Net.AndroidClientHandler - - - osu.licenseheader - @@ -40,10 +25,6 @@ - - {d9a367c9-4c1a-489f-9b05-a0cea2b53b58} - osu.Game.Resources - {48f4582b-7687-4621-9cbe-5c24197cb536} osu.Game.Rulesets.Mania diff --git a/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj b/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj index f99aa61f01..a40f7ca588 100644 --- a/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj +++ b/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj @@ -1,5 +1,6 @@  + Debug AnyCPU @@ -8,30 +9,14 @@ {90CAB706-39CB-4B93-9629-3218A6FF8E9B} {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} {122416d6-6b49-4ee2-a1e8-b825f31c79fe} - Library - Properties osu.Game.Rulesets.Osu.Tests osu.Game.Rulesets.Osu.Tests.Android - 512 - True - Resources\Resource.designer.cs - Resource - Off - false - v8.1 Properties\AndroidManifest.xml - Resources - Assets - Xamarin.Android.Net.AndroidClientHandler - - - osu.licenseheader - @@ -40,10 +25,6 @@ - - {d9a367c9-4c1a-489f-9b05-a0cea2b53b58} - osu.Game.Resources - {c92a607b-1fdd-4954-9f92-03ff547d9080} osu.Game.Rulesets.Osu diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj b/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj index defeab5a64..bc7b00ffc8 100644 --- a/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj +++ b/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj @@ -1,5 +1,6 @@  + Debug AnyCPU @@ -8,30 +9,14 @@ {3701A0A1-8476-42C6-B5C4-D24129B4A484} {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} {122416d6-6b49-4ee2-a1e8-b825f31c79fe} - Library - Properties osu.Game.Rulesets.Taiko.Tests osu.Game.Rulesets.Taiko.Tests.Android - 512 - True - Resources\Resource.designer.cs - Resource - Off - false - v8.1 Properties\AndroidManifest.xml - Resources - Assets - Xamarin.Android.Net.AndroidClientHandler - - - osu.licenseheader - @@ -40,13 +25,6 @@ - - - - - {d9a367c9-4c1a-489f-9b05-a0cea2b53b58} - osu.Game.Resources - {f167e17a-7de6-4af5-b920-a5112296c695} osu.Game.Rulesets.Taiko diff --git a/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj b/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj index 8a8a2b6733..4e83234e7d 100644 --- a/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj +++ b/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj @@ -1,5 +1,6 @@  + Debug AnyCPU @@ -8,30 +9,14 @@ {5CC222DC-5716-4499-B897-DCBDDA4A5CF9} {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} {122416d6-6b49-4ee2-a1e8-b825f31c79fe} - Library - Properties osu.Game.Tests osu.Game.Tests.Android - 512 - True - Resources\Resource.designer.cs - Resource - Off - false - v8.1 Properties\AndroidManifest.xml - Resources - Assets - Xamarin.Android.Net.AndroidClientHandler - - - osu.licenseheader - @@ -61,10 +46,6 @@ - - {d9a367c9-4c1a-489f-9b05-a0cea2b53b58} - osu.Game.Resources - {58f6c80c-1253-4a0e-a465-b8c85ebeadf3} osu.Game.Rulesets.Catch diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index e87b43ac93..8f9a7cd14b 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -16,7 +16,7 @@ - + From c93adb220eb5a02afe3c5811af4cbb826b5f83a4 Mon Sep 17 00:00:00 2001 From: Albert Tang Date: Thu, 7 Mar 2019 10:14:19 -0600 Subject: [PATCH 029/267] Use official NuGet osu-framework build for Android --- osu.Android.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Android.props b/osu.Android.props index bf18d9f022..da3abeb446 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -64,6 +64,6 @@ - + - \ No newline at end of file + From c0471019ffa0605752d601eb519ad68189307bc8 Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Sun, 17 Mar 2019 09:39:07 -0500 Subject: [PATCH 030/267] Very minor changes --- osu.Android/OsuGameActivity.cs | 4 +--- osu.Android/OsuGameAndroid.cs | 14 ++++++++++++++ osu.Android/osu.Android.csproj | 4 +--- 3 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 osu.Android/OsuGameAndroid.cs diff --git a/osu.Android/OsuGameActivity.cs b/osu.Android/OsuGameActivity.cs index 130144d417..4623402b1a 100644 --- a/osu.Android/OsuGameActivity.cs +++ b/osu.Android/OsuGameActivity.cs @@ -6,15 +6,13 @@ using Android.Content.PM; using Android.OS; using Android.Views; using osu.Framework.Android; -using osu.Game; namespace osu.Android { [Activity(Theme = "@android:style/Theme.NoTitleBar", MainLauncher = true, ScreenOrientation = ScreenOrientation.SensorLandscape, SupportsPictureInPicture = false, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize, HardwareAccelerated = true)] public class OsuGameActivity : AndroidGameActivity { - protected override Framework.Game CreateGame() - => new OsuGame(); + protected override Framework.Game CreateGame() => new OsuGameAndroid(); protected override void OnCreate(Bundle savedInstanceState) { diff --git a/osu.Android/OsuGameAndroid.cs b/osu.Android/OsuGameAndroid.cs new file mode 100644 index 0000000000..d9bdd9c0c2 --- /dev/null +++ b/osu.Android/OsuGameAndroid.cs @@ -0,0 +1,14 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using Android.App; +using osu.Game; + +namespace osu.Android +{ + public class OsuGameAndroid : OsuGame + { + public override Version AssemblyVersion => new Version(Application.Context.ApplicationContext.PackageManager.GetPackageInfo(Application.Context.ApplicationContext.PackageName, 0).VersionName); + } +} diff --git a/osu.Android/osu.Android.csproj b/osu.Android/osu.Android.csproj index 45ff8ba31a..6a859742ee 100644 --- a/osu.Android/osu.Android.csproj +++ b/osu.Android/osu.Android.csproj @@ -13,11 +13,9 @@ osu.Android Properties\AndroidManifest.xml - - true - + From c6c98257f2022a0d62b46114b6aa281633729652 Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Sun, 17 Mar 2019 09:45:01 -0500 Subject: [PATCH 031/267] Add internet permission, update Android framework --- osu.Android.props | 2 +- osu.Android/Properties/AndroidManifest.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/osu.Android.props b/osu.Android.props index da3abeb446..e320c45ea9 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -64,6 +64,6 @@ - + diff --git a/osu.Android/Properties/AndroidManifest.xml b/osu.Android/Properties/AndroidManifest.xml index c053ced9e2..549ba9f46a 100644 --- a/osu.Android/Properties/AndroidManifest.xml +++ b/osu.Android/Properties/AndroidManifest.xml @@ -5,5 +5,6 @@ + \ No newline at end of file From edfc0368ac3fdb155847b8e8a1c713a7f6d3cba5 Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Wed, 20 Mar 2019 11:34:12 -0500 Subject: [PATCH 032/267] Update Android framework --- osu.Android.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Android.props b/osu.Android.props index e320c45ea9..028b4bda83 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -64,6 +64,6 @@ - + From 5bf513eba83e16d1e16231cd776bb9bc5727550a Mon Sep 17 00:00:00 2001 From: David Zhao Date: Fri, 17 May 2019 11:24:34 +0900 Subject: [PATCH 033/267] Don't track immediately when entering mode --- .../UserInterface/TestCaseButtonSystem.cs | 21 ++++++++++++++++++- osu.Game/Screens/Menu/ButtonSystem.cs | 2 +- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/osu.Game.Tests/Visual/UserInterface/TestCaseButtonSystem.cs b/osu.Game.Tests/Visual/UserInterface/TestCaseButtonSystem.cs index 04aa8bce7e..814558547a 100644 --- a/osu.Game.Tests/Visual/UserInterface/TestCaseButtonSystem.cs +++ b/osu.Game.Tests/Visual/UserInterface/TestCaseButtonSystem.cs @@ -9,6 +9,7 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Colour; using osu.Framework.Graphics.Shapes; using osu.Game.Screens.Menu; +using osuTK; using osuTK.Graphics; namespace osu.Game.Tests.Visual.UserInterface @@ -42,7 +43,25 @@ namespace osu.Game.Tests.Visual.UserInterface buttons.SetOsuLogo(logo); foreach (var s in Enum.GetValues(typeof(ButtonSystemState)).OfType().Skip(1)) - AddStep($"State to {s}", () => buttons.State = s); + AddStep($"State to {s}", () => + { + buttons.State = s; + + if (buttons.State == ButtonSystemState.EnteringMode) + { + buttons.FadeOut(400, Easing.InSine); + buttons.MoveTo(new Vector2(-800, 0), 400, Easing.InSine); + logo.FadeOut(300, Easing.InSine) + .ScaleTo(0.2f, 300, Easing.InSine); + } + else + { + buttons.FadeIn(400, Easing.OutQuint); + buttons.MoveTo(new Vector2(0), 400, Easing.OutQuint); + logo.FadeColour(Color4.White, 100, Easing.OutQuint); + logo.FadeIn(100, Easing.OutQuint); + } + }); } } } diff --git a/osu.Game/Screens/Menu/ButtonSystem.cs b/osu.Game/Screens/Menu/ButtonSystem.cs index a098d42c83..9784e8cfcb 100644 --- a/osu.Game/Screens/Menu/ButtonSystem.cs +++ b/osu.Game/Screens/Menu/ButtonSystem.cs @@ -332,7 +332,7 @@ namespace osu.Game.Screens.Menu break; case ButtonSystemState.EnteringMode: - logoTrackingContainer.StartTracking(logo, 0, Easing.In); + logoTrackingContainer.StartTracking(logo, 400, Easing.InSine); break; } } From b7aed0a0147e8881a05cac4404ea3a22d8addcf0 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Fri, 17 May 2019 12:21:34 +0900 Subject: [PATCH 034/267] Interpolate to tracking position on from Initial button state --- osu.Game/Screens/Menu/ButtonSystem.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/osu.Game/Screens/Menu/ButtonSystem.cs b/osu.Game/Screens/Menu/ButtonSystem.cs index 9784e8cfcb..900e5ae514 100644 --- a/osu.Game/Screens/Menu/ButtonSystem.cs +++ b/osu.Game/Screens/Menu/ButtonSystem.cs @@ -332,7 +332,8 @@ namespace osu.Game.Screens.Menu break; case ButtonSystemState.EnteringMode: - logoTrackingContainer.StartTracking(logo, 400, Easing.InSine); + // When coming from the Initial (untracked) state, interpolate to the tracking position over a brief duration instead of tracking immediately. + logoTrackingContainer.StartTracking(logo, lastState == ButtonSystemState.Initial ? 400 : 0, Easing.InSine); break; } } From d4f3c60dd4d5b3c6fe8a899c6af07b8964fc1228 Mon Sep 17 00:00:00 2001 From: tangalbert919 Date: Tue, 28 May 2019 11:22:52 -0500 Subject: [PATCH 035/267] Update resources and framework for Android --- osu.Android.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Android.props b/osu.Android.props index 028b4bda83..6a4a29fcf8 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -63,7 +63,7 @@ - - + + From 0ebd29c8510534a973a98b3e14c86ccccfb0e0cd Mon Sep 17 00:00:00 2001 From: Albert Tang Date: Sun, 9 Jun 2019 21:15:05 -0500 Subject: [PATCH 036/267] Add @miterosan's suggestions --- osu.Android/Properties/AndroidManifest.xml | 14 +++++++------- .../MainActivity.cs | 3 +-- .../MainActivity.cs | 3 +-- .../MainActivity.cs | 3 +-- .../MainActivity.cs | 3 +-- osu.Game.Tests.Android/MainActivity.cs | 3 +-- 6 files changed, 12 insertions(+), 17 deletions(-) diff --git a/osu.Android/Properties/AndroidManifest.xml b/osu.Android/Properties/AndroidManifest.xml index 549ba9f46a..6f77560e01 100644 --- a/osu.Android/Properties/AndroidManifest.xml +++ b/osu.Android/Properties/AndroidManifest.xml @@ -1,10 +1,10 @@  - - - - - - - + + + + + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Catch.Tests.Android/MainActivity.cs b/osu.Game.Rulesets.Catch.Tests.Android/MainActivity.cs index 8430a88f15..d918305f3d 100644 --- a/osu.Game.Rulesets.Catch.Tests.Android/MainActivity.cs +++ b/osu.Game.Rulesets.Catch.Tests.Android/MainActivity.cs @@ -11,7 +11,6 @@ namespace osu.Game.Rulesets.Catch.Tests.Android [Activity(Theme = "@android:style/Theme.NoTitleBar", MainLauncher = true, ScreenOrientation = ScreenOrientation.SensorLandscape, SupportsPictureInPicture = false, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize)] public class MainActivity : AndroidGameActivity { - protected override Framework.Game CreateGame() - => new OsuTestBrowser(); + protected override Framework.Game CreateGame() => new OsuTestBrowser(); } } diff --git a/osu.Game.Rulesets.Mania.Tests.Android/MainActivity.cs b/osu.Game.Rulesets.Mania.Tests.Android/MainActivity.cs index 0f1d6756bc..0a3f05ae54 100644 --- a/osu.Game.Rulesets.Mania.Tests.Android/MainActivity.cs +++ b/osu.Game.Rulesets.Mania.Tests.Android/MainActivity.cs @@ -11,7 +11,6 @@ namespace osu.Game.Rulesets.Mania.Tests.Android [Activity(Theme = "@android:style/Theme.NoTitleBar", MainLauncher = true, ScreenOrientation = ScreenOrientation.SensorLandscape, SupportsPictureInPicture = false, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize)] public class MainActivity : AndroidGameActivity { - protected override Framework.Game CreateGame() - => new OsuTestBrowser(); + protected override Framework.Game CreateGame() => new OsuTestBrowser(); } } diff --git a/osu.Game.Rulesets.Osu.Tests.Android/MainActivity.cs b/osu.Game.Rulesets.Osu.Tests.Android/MainActivity.cs index d6f2ec546d..e6c508d99e 100644 --- a/osu.Game.Rulesets.Osu.Tests.Android/MainActivity.cs +++ b/osu.Game.Rulesets.Osu.Tests.Android/MainActivity.cs @@ -11,7 +11,6 @@ namespace osu.Game.Rulesets.Osu.Tests.Android [Activity(Theme = "@android:style/Theme.NoTitleBar", MainLauncher = true, ScreenOrientation = ScreenOrientation.SensorLandscape, SupportsPictureInPicture = false, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize)] public class MainActivity : AndroidGameActivity { - protected override Framework.Game CreateGame() - => new OsuTestBrowser(); + protected override Framework.Game CreateGame() => new OsuTestBrowser(); } } diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/MainActivity.cs b/osu.Game.Rulesets.Taiko.Tests.Android/MainActivity.cs index cc92ad7080..1128a0d37f 100644 --- a/osu.Game.Rulesets.Taiko.Tests.Android/MainActivity.cs +++ b/osu.Game.Rulesets.Taiko.Tests.Android/MainActivity.cs @@ -11,7 +11,6 @@ namespace osu.Game.Rulesets.Taiko.Tests.Android [Activity(Theme = "@android:style/Theme.NoTitleBar", MainLauncher = true, ScreenOrientation = ScreenOrientation.SensorLandscape, SupportsPictureInPicture = false, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize)] public class MainActivity : AndroidGameActivity { - protected override Framework.Game CreateGame() - => new OsuTestBrowser(); + protected override Framework.Game CreateGame() => new OsuTestBrowser(); } } diff --git a/osu.Game.Tests.Android/MainActivity.cs b/osu.Game.Tests.Android/MainActivity.cs index 6f68c372ef..0695c8e37b 100644 --- a/osu.Game.Tests.Android/MainActivity.cs +++ b/osu.Game.Tests.Android/MainActivity.cs @@ -10,7 +10,6 @@ namespace osu.Game.Tests.Android [Activity(Theme = "@android:style/Theme.NoTitleBar", MainLauncher = true, ScreenOrientation = ScreenOrientation.SensorLandscape, SupportsPictureInPicture = false, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize, HardwareAccelerated = true)] public class MainActivity : AndroidGameActivity { - protected override Framework.Game CreateGame() - => new OsuTestBrowser(); + protected override Framework.Game CreateGame() => new OsuTestBrowser(); } } From 35ad9d524098ca6b137ba129ec19e3f4ac2cc570 Mon Sep 17 00:00:00 2001 From: Dan Silk Date: Tue, 18 Jun 2019 19:50:00 +0930 Subject: [PATCH 037/267] Update Android Framework reference to 2019.615.0 # Conflicts: # osu.Android.props --- osu.Android.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Android.props b/osu.Android.props index 6a4a29fcf8..74fe16ebf6 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -63,7 +63,7 @@ - - + + From 15c75b444232be13b2d9e6fa4b04cb0462b23608 Mon Sep 17 00:00:00 2001 From: HoLLy Date: Wed, 19 Jun 2019 18:33:51 +0200 Subject: [PATCH 038/267] Add basic score import from stable --- osu.Game/Beatmaps/BeatmapManager.cs | 2 ++ osu.Game/Database/ArchiveModelManager.cs | 13 ++++++-- osu.Game/OsuGame.cs | 1 + .../Sections/Maintenance/GeneralSettings.cs | 33 +++++++++++++++++-- osu.Game/Scoring/ScoreManager.cs | 10 ++++-- osu.Game/Skinning/SkinManager.cs | 2 ++ 6 files changed, 54 insertions(+), 7 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 3734c8d05c..b6fa0ec95a 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -62,6 +62,8 @@ namespace osu.Game.Beatmaps protected override string ImportFromStablePath => "Songs"; + protected override bool StableDirectoryBased => true; + private readonly RulesetStore rulesets; private readonly BeatmapStore beatmaps; diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index 1c8e722589..2a329cd5b4 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -1,4 +1,4 @@ -// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System; @@ -546,6 +546,11 @@ namespace osu.Game.Database /// /// The archive to be imported. /// An optional cancellation token. - public Task Import(ArchiveReader archive, CancellationToken cancellationToken = default) + public async Task Import(ArchiveReader archive, CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); @@ -267,7 +268,7 @@ namespace osu.Game.Database return null; } - return Import(model, archive, cancellationToken); + return await Import(model, archive, cancellationToken); } /// From 0cb66d522a7dcab06d88e41459d6eeba911712b2 Mon Sep 17 00:00:00 2001 From: HoLLy Date: Wed, 19 Jun 2019 20:36:00 +0200 Subject: [PATCH 040/267] Check if path can be imported before trying --- osu.Game/Database/ArchiveModelManager.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index 41e141129d..1bb243a8f3 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -150,7 +150,7 @@ namespace osu.Game.Database var imported = new List(); - await Task.WhenAll(paths.Select(async path => + await Task.WhenAll(paths.Where(canImportPath).Select(async path => { notification.CancellationToken.ThrowIfCancellationRequested(); @@ -160,8 +160,7 @@ namespace osu.Game.Database lock (imported) { - if (model != null) - imported.Add(model); + imported.Add(model); current++; notification.Text = $"Imported {current} of {paths.Length} {HumanisedModelName}s"; @@ -201,6 +200,8 @@ namespace osu.Game.Database notification.State = ProgressNotificationState.Completed; } + + bool canImportPath(string path) => StableDirectoryBased || HandledExtensions.Any(ext => Path.GetExtension(path)?.ToLowerInvariant() == ext); } /// From 8d62ce8967abcc68786d136793ef67876c597769 Mon Sep 17 00:00:00 2001 From: HoLLy Date: Wed, 19 Jun 2019 20:38:43 +0200 Subject: [PATCH 041/267] Remove now unneeded check against file extension --- osu.Game/Scoring/ScoreManager.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/osu.Game/Scoring/ScoreManager.cs b/osu.Game/Scoring/ScoreManager.cs index a0a7e956f2..77b7ed33dd 100644 --- a/osu.Game/Scoring/ScoreManager.cs +++ b/osu.Game/Scoring/ScoreManager.cs @@ -38,12 +38,10 @@ namespace osu.Game.Scoring protected override ScoreInfo CreateModel(ArchiveReader archive) { - string filename = archive?.Filenames.FirstOrDefault(f => f.EndsWith(".osr")); - - if (filename == null) + if (archive == null) return null; - using (var stream = archive.GetStream(filename)) + using (var stream = archive.GetStream(archive.Filenames.FirstOrDefault(f => f.EndsWith(".osr")))) { try { From c1c19243cd28af8ec11664af84dcfdb69bea4799 Mon Sep 17 00:00:00 2001 From: HoLLy Date: Wed, 19 Jun 2019 20:40:30 +0200 Subject: [PATCH 042/267] Change FirstOrDefault back to First --- osu.Game/Scoring/ScoreManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Scoring/ScoreManager.cs b/osu.Game/Scoring/ScoreManager.cs index 77b7ed33dd..a8124968d8 100644 --- a/osu.Game/Scoring/ScoreManager.cs +++ b/osu.Game/Scoring/ScoreManager.cs @@ -41,7 +41,7 @@ namespace osu.Game.Scoring if (archive == null) return null; - using (var stream = archive.GetStream(archive.Filenames.FirstOrDefault(f => f.EndsWith(".osr")))) + using (var stream = archive.GetStream(archive.Filenames.First(f => f.EndsWith(".osr")))) { try { From 99f1a94797819a3e24ec217c9feea2890eed6a35 Mon Sep 17 00:00:00 2001 From: HoLLy Date: Wed, 19 Jun 2019 20:50:50 +0200 Subject: [PATCH 043/267] Fix notification progress bar --- osu.Game/Database/ArchiveModelManager.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index 1bb243a8f3..b82e9c3d0b 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -146,11 +146,12 @@ namespace osu.Game.Database notification.Progress = 0; notification.Text = "Import is initialising..."; + string[] filteredPaths = paths.Where(canImportPath).ToArray(); int current = 0; var imported = new List(); - await Task.WhenAll(paths.Where(canImportPath).Select(async path => + await Task.WhenAll(filteredPaths.Select(async path => { notification.CancellationToken.ThrowIfCancellationRequested(); @@ -163,8 +164,8 @@ namespace osu.Game.Database imported.Add(model); current++; - notification.Text = $"Imported {current} of {paths.Length} {HumanisedModelName}s"; - notification.Progress = (float)current / paths.Length; + notification.Text = $"Imported {current} of {filteredPaths.Length} {HumanisedModelName}s"; + notification.Progress = (float)current / filteredPaths.Length; } } catch (TaskCanceledException) From f1f03dd5411ef12a1923519e6435a50d290fb521 Mon Sep 17 00:00:00 2001 From: HoLLy Date: Fri, 21 Jun 2019 17:01:11 +0200 Subject: [PATCH 044/267] Remove async from Import method --- osu.Game/Database/ArchiveModelManager.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index b82e9c3d0b..e22aa92546 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -246,7 +246,7 @@ namespace osu.Game.Database /// /// The archive to be imported. /// An optional cancellation token. - public async Task Import(ArchiveReader archive, CancellationToken cancellationToken = default) + public Task Import(ArchiveReader archive, CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); @@ -256,7 +256,7 @@ namespace osu.Game.Database { model = CreateModel(archive); - if (model == null) return null; + if (model == null) return Task.FromResult(null); model.Hash = computeHash(archive); } @@ -270,7 +270,7 @@ namespace osu.Game.Database return null; } - return await Import(model, archive, cancellationToken); + return Import(model, archive, cancellationToken); } /// From 802da225d48c387907cccb3666cccb010135d5dd Mon Sep 17 00:00:00 2001 From: HoLLy Date: Fri, 21 Jun 2019 17:32:47 +0200 Subject: [PATCH 045/267] Move responsibility for selecting paths to model managers --- osu.Game/Beatmaps/BeatmapManager.cs | 4 ++-- osu.Game/Database/ArchiveModelManager.cs | 21 +++++++-------------- osu.Game/Scoring/ScoreManager.cs | 7 +++++-- osu.Game/Skinning/SkinManager.cs | 4 ++-- 4 files changed, 16 insertions(+), 20 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index b6fa0ec95a..e357f741d3 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -62,8 +62,6 @@ namespace osu.Game.Beatmaps protected override string ImportFromStablePath => "Songs"; - protected override bool StableDirectoryBased => true; - private readonly RulesetStore rulesets; private readonly BeatmapStore beatmaps; @@ -96,6 +94,8 @@ namespace osu.Game.Beatmaps updateQueue = new BeatmapUpdateQueue(api); } + protected override IEnumerable GetStableImportPaths() => GetStableStorage().GetDirectories(ImportFromStablePath); + protected override Task Populate(BeatmapSetInfo beatmapSet, ArchiveReader archive, CancellationToken cancellationToken = default) { if (archive != null) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index e22aa92546..75bc656862 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -146,12 +146,11 @@ namespace osu.Game.Database notification.Progress = 0; notification.Text = "Import is initialising..."; - string[] filteredPaths = paths.Where(canImportPath).ToArray(); int current = 0; var imported = new List(); - await Task.WhenAll(filteredPaths.Select(async path => + await Task.WhenAll(paths.Select(async path => { notification.CancellationToken.ThrowIfCancellationRequested(); @@ -164,8 +163,8 @@ namespace osu.Game.Database imported.Add(model); current++; - notification.Text = $"Imported {current} of {filteredPaths.Length} {HumanisedModelName}s"; - notification.Progress = (float)current / filteredPaths.Length; + notification.Text = $"Imported {current} of {paths.Length} {HumanisedModelName}s"; + notification.Progress = (float)current / paths.Length; } } catch (TaskCanceledException) @@ -201,8 +200,6 @@ namespace osu.Game.Database notification.State = ProgressNotificationState.Completed; } - - bool canImportPath(string path) => StableDirectoryBased || HandledExtensions.Any(ext => Path.GetExtension(path)?.ToLowerInvariant() == ext); } /// @@ -537,7 +534,7 @@ namespace osu.Game.Database /// /// Set a storage with access to an osu-stable install for import purposes. /// - public Func GetStableStorage { private get; set; } + public Func GetStableStorage { protected get; set; } /// /// Denotes whether an osu-stable installation is present to perform automated imports from. @@ -550,9 +547,9 @@ namespace osu.Game.Database protected virtual string ImportFromStablePath => null; /// - /// Does stable import look for directories rather than files + /// Selects paths to import from. /// - protected abstract bool StableDirectoryBased { get; } + protected abstract IEnumerable GetStableImportPaths(); /// /// This is a temporary method and will likely be replaced by a full-fledged (and more correctly placed) migration process in the future. @@ -574,11 +571,7 @@ namespace osu.Game.Database return Task.CompletedTask; } - return Task.Run(async () => - { - var paths = StableDirectoryBased ? stable.GetDirectories(ImportFromStablePath) : stable.GetFiles(ImportFromStablePath); - await Import(paths.Select(f => stable.GetFullPath(f)).ToArray()); - }); + return Task.Run(async () => await Import(GetStableImportPaths().Select(f => stable.GetFullPath(f)).ToArray())); } #endregion diff --git a/osu.Game/Scoring/ScoreManager.cs b/osu.Game/Scoring/ScoreManager.cs index a8124968d8..bb1b15e9bd 100644 --- a/osu.Game/Scoring/ScoreManager.cs +++ b/osu.Game/Scoring/ScoreManager.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Linq.Expressions; using Microsoft.EntityFrameworkCore; @@ -24,8 +25,6 @@ namespace osu.Game.Scoring protected override string ImportFromStablePath => @"Data\r"; - protected override bool StableDirectoryBased => false; - private readonly RulesetStore rulesets; private readonly Func beatmaps; @@ -55,6 +54,10 @@ namespace osu.Game.Scoring } } + protected override IEnumerable GetStableImportPaths() + => GetStableStorage().GetFiles(ImportFromStablePath) + .Where(p => HandledExtensions.Any(ext => Path.GetExtension(p)?.Equals(ext, StringComparison.InvariantCultureIgnoreCase) ?? false)); + public Score GetScore(ScoreInfo score) => new LegacyDatabasedScore(score, rulesets, beatmaps(), Files.Store); public List GetAllUsableScores() => ModelStore.ConsumableItems.Where(s => !s.DeletePending).ToList(); diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs index dafaf0c9dc..899bab8b94 100644 --- a/osu.Game/Skinning/SkinManager.cs +++ b/osu.Game/Skinning/SkinManager.cs @@ -32,8 +32,6 @@ namespace osu.Game.Skinning protected override string ImportFromStablePath => "Skins"; - protected override bool StableDirectoryBased => true; - public SkinManager(Storage storage, DatabaseContextFactory contextFactory, IIpcHost importHost, AudioManager audio) : base(storage, contextFactory, new SkinStore(contextFactory, storage), importHost) { @@ -56,6 +54,8 @@ namespace osu.Game.Skinning }; } + protected override IEnumerable GetStableImportPaths() => GetStableStorage().GetDirectories(ImportFromStablePath); + /// /// Returns a list of all usable s. Includes the special default skin plus all skins from . /// From d99f4d1a8764a6faa8cda345318d67a22fd35626 Mon Sep 17 00:00:00 2001 From: HoLLy Date: Fri, 21 Jun 2019 17:42:54 +0200 Subject: [PATCH 046/267] Change import button to mention replays instead of scores --- .../Overlays/Settings/Sections/Maintenance/GeneralSettings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs b/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs index 832673703b..e3f5acc8ac 100644 --- a/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs +++ b/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs @@ -58,7 +58,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance { Add(importScoresButton = new SettingsButton { - Text = "Import scores from stable", + Text = "Import replays from stable", Action = () => { importScoresButton.Enabled.Value = false; From 6d864cb47e2e5efb0b283d078526b833362d252e Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 24 Jun 2019 12:42:21 +0900 Subject: [PATCH 047/267] Load beatmap content asynchronously in the background --- osu.Game/Beatmaps/WorkingBeatmap.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs index 328763fc9f..3ef7b4feca 100644 --- a/osu.Game/Beatmaps/WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/WorkingBeatmap.cs @@ -11,6 +11,7 @@ using osu.Framework.IO.File; using System.IO; using System.Linq; using System.Threading; +using System.Threading.Tasks; using osu.Framework.Audio; using osu.Game.IO.Serialization; using osu.Game.Rulesets; @@ -38,7 +39,7 @@ namespace osu.Game.Beatmaps BeatmapSetInfo = beatmapInfo.BeatmapSet; Metadata = beatmapInfo.Metadata ?? BeatmapSetInfo?.Metadata ?? new BeatmapMetadata(); - beatmap = new RecyclableLazy(() => + beatmapLoadTask = Task.Factory.StartNew(() => { var b = GetBeatmap() ?? new Beatmap(); @@ -49,7 +50,7 @@ namespace osu.Game.Beatmaps b.BeatmapInfo = BeatmapInfo; return b; - }); + }, beatmapCancellation.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default); track = new RecyclableLazy(() => GetTrack() ?? GetVirtualTrack()); background = new RecyclableLazy(GetBackground, BackgroundStillValid); @@ -153,10 +154,11 @@ namespace osu.Game.Beatmaps public override string ToString() => BeatmapInfo.ToString(); - public bool BeatmapLoaded => beatmap.IsResultAvailable; - public IBeatmap Beatmap => beatmap.Value; + public bool BeatmapLoaded => beatmapLoadTask.IsCompleted; + public IBeatmap Beatmap => beatmapLoadTask.Result; + private readonly CancellationTokenSource beatmapCancellation = new CancellationTokenSource(); protected abstract IBeatmap GetBeatmap(); - private readonly RecyclableLazy beatmap; + private readonly Task beatmapLoadTask; public bool BackgroundLoaded => background.IsResultAvailable; public Texture Background => background.Value; @@ -201,6 +203,8 @@ namespace osu.Game.Beatmaps waveform.Recycle(); storyboard.Recycle(); skin.Recycle(); + + beatmapCancellation.Cancel(); } /// From 18303623371ab1544d6e26d8458813fa05afff3e Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 24 Jun 2019 17:10:50 +0900 Subject: [PATCH 048/267] Move task out of ctor to avoid initialisation ordering issues --- osu.Game/Beatmaps/WorkingBeatmap.cs | 34 +++++++++++++++-------------- osu.Game/OsuGame.cs | 2 ++ 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs index 3ef7b4feca..a1864526d1 100644 --- a/osu.Game/Beatmaps/WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/WorkingBeatmap.cs @@ -39,19 +39,6 @@ namespace osu.Game.Beatmaps BeatmapSetInfo = beatmapInfo.BeatmapSet; Metadata = beatmapInfo.Metadata ?? BeatmapSetInfo?.Metadata ?? new BeatmapMetadata(); - beatmapLoadTask = Task.Factory.StartNew(() => - { - var b = GetBeatmap() ?? new Beatmap(); - - // The original beatmap version needs to be preserved as the database doesn't contain it - BeatmapInfo.BeatmapVersion = b.BeatmapInfo.BeatmapVersion; - - // Use the database-backed info for more up-to-date values (beatmap id, ranked status, etc) - b.BeatmapInfo = BeatmapInfo; - - return b; - }, beatmapCancellation.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default); - track = new RecyclableLazy(() => GetTrack() ?? GetVirtualTrack()); background = new RecyclableLazy(GetBackground, BackgroundStillValid); waveform = new RecyclableLazy(GetWaveform); @@ -154,11 +141,26 @@ namespace osu.Game.Beatmaps public override string ToString() => BeatmapInfo.ToString(); - public bool BeatmapLoaded => beatmapLoadTask.IsCompleted; - public IBeatmap Beatmap => beatmapLoadTask.Result; + public bool BeatmapLoaded => beatmapLoadTask?.IsCompleted ?? false; + + public Task LoadBeatmapAsync() => (beatmapLoadTask ?? (beatmapLoadTask = Task.Factory.StartNew(() => + { + var b = GetBeatmap() ?? new Beatmap(); + + // The original beatmap version needs to be preserved as the database doesn't contain it + BeatmapInfo.BeatmapVersion = b.BeatmapInfo.BeatmapVersion; + + // Use the database-backed info for more up-to-date values (beatmap id, ranked status, etc) + b.BeatmapInfo = BeatmapInfo; + + return b; + }, beatmapCancellation.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default))); + + public IBeatmap Beatmap => LoadBeatmapAsync().Result; + private readonly CancellationTokenSource beatmapCancellation = new CancellationTokenSource(); protected abstract IBeatmap GetBeatmap(); - private readonly Task beatmapLoadTask; + private Task beatmapLoadTask; public bool BackgroundLoaded => background.IsResultAvailable; public Texture Background => background.Value; diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 35684849a3..b018c2b64a 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -293,6 +293,8 @@ namespace osu.Game var nextBeatmap = beatmap.NewValue; if (nextBeatmap?.Track != null) nextBeatmap.Track.Completed += currentTrackCompleted; + + nextBeatmap?.LoadBeatmapAsync(); } private void currentTrackCompleted() From 4cb2c4b494ab229fe81c8032ee530ea69bd4abf0 Mon Sep 17 00:00:00 2001 From: Albert Tang Date: Tue, 25 Jun 2019 17:54:14 -0500 Subject: [PATCH 049/267] Support both landscape and portrait mode Co-Authored-By: miterosan <33435289+miterosan@users.noreply.github.com> --- osu.Android/OsuGameActivity.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Android/OsuGameActivity.cs b/osu.Android/OsuGameActivity.cs index 4623402b1a..762a9c418d 100644 --- a/osu.Android/OsuGameActivity.cs +++ b/osu.Android/OsuGameActivity.cs @@ -9,7 +9,7 @@ using osu.Framework.Android; namespace osu.Android { - [Activity(Theme = "@android:style/Theme.NoTitleBar", MainLauncher = true, ScreenOrientation = ScreenOrientation.SensorLandscape, SupportsPictureInPicture = false, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize, HardwareAccelerated = true)] + [Activity(Theme = "@android:style/Theme.NoTitleBar", MainLauncher = true, ScreenOrientation = ScreenOrientation.FullSensor, SupportsPictureInPicture = false, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize, HardwareAccelerated = true)] public class OsuGameActivity : AndroidGameActivity { protected override Framework.Game CreateGame() => new OsuGameAndroid(); From 8b0aaccfe618dd9fd92e43718458e7315594ee40 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 27 Jun 2019 13:56:36 +0900 Subject: [PATCH 050/267] Add finaliser to WorkingBeatmap --- osu.Game.Tests/WaveformTestBeatmap.cs | 2 +- osu.Game/Beatmaps/WorkingBeatmap.cs | 36 +++++++++++++++++++-------- osu.Game/Tests/Visual/OsuTestScene.cs | 2 +- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/osu.Game.Tests/WaveformTestBeatmap.cs b/osu.Game.Tests/WaveformTestBeatmap.cs index fdb91b7c5b..c5a2f5be51 100644 --- a/osu.Game.Tests/WaveformTestBeatmap.cs +++ b/osu.Game.Tests/WaveformTestBeatmap.cs @@ -30,7 +30,7 @@ namespace osu.Game.Tests trackStore = audioManager.GetTrackStore(reader); } - public override void Dispose() + protected override void Dispose(bool isDisposing) { base.Dispose(); stream?.Dispose(); diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs index a1864526d1..61390fe51b 100644 --- a/osu.Game/Beatmaps/WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/WorkingBeatmap.cs @@ -46,6 +46,11 @@ namespace osu.Game.Beatmaps skin = new RecyclableLazy(GetSkin); } + ~WorkingBeatmap() + { + Dispose(false); + } + protected virtual Track GetVirtualTrack() { const double excess_length = 1000; @@ -199,22 +204,33 @@ namespace osu.Game.Beatmaps other.track = track; } - public virtual void Dispose() - { - background.Recycle(); - waveform.Recycle(); - storyboard.Recycle(); - skin.Recycle(); - - beatmapCancellation.Cancel(); - } - /// /// Eagerly dispose of the audio track associated with this (if any). /// Accessing track again will load a fresh instance. /// public virtual void RecycleTrack() => track.Recycle(); + #region Disposal + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool isDisposing) + { + // recycling logic is not here for the time being, as components which use + // retrieved objects from WorkingBeatmap may not hold a reference to the WorkingBeatmap itself. + // this should be fine as each retrieved comopnent do have their own finalizers. + + // cancelling the beatmap load is safe for now since the retrieval is a synchronous + // operation. if we add an async retrieval method this may need to be reconsidered. + beatmapCancellation.Cancel(); + } + + #endregion + public class RecyclableLazy { private Lazy lazy; diff --git a/osu.Game/Tests/Visual/OsuTestScene.cs b/osu.Game/Tests/Visual/OsuTestScene.cs index c8798448ae..9f4532513f 100644 --- a/osu.Game/Tests/Visual/OsuTestScene.cs +++ b/osu.Game/Tests/Visual/OsuTestScene.cs @@ -137,7 +137,7 @@ namespace osu.Game.Tests.Visual track = audio?.Tracks.GetVirtual(length); } - public override void Dispose() + protected override void Dispose(bool isDisposing) { base.Dispose(); store?.Dispose(); From 1072431fbbc17373f367eb06c8b6de0156f16cb7 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 27 Jun 2019 14:08:58 +0900 Subject: [PATCH 051/267] Fix test StackOverflows --- osu.Game.Tests/WaveformTestBeatmap.cs | 2 +- osu.Game/Tests/Visual/OsuTestScene.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Tests/WaveformTestBeatmap.cs b/osu.Game.Tests/WaveformTestBeatmap.cs index c5a2f5be51..3e0df8d45e 100644 --- a/osu.Game.Tests/WaveformTestBeatmap.cs +++ b/osu.Game.Tests/WaveformTestBeatmap.cs @@ -32,7 +32,7 @@ namespace osu.Game.Tests protected override void Dispose(bool isDisposing) { - base.Dispose(); + base.Dispose(isDisposing); stream?.Dispose(); reader?.Dispose(); trackStore?.Dispose(); diff --git a/osu.Game/Tests/Visual/OsuTestScene.cs b/osu.Game/Tests/Visual/OsuTestScene.cs index 9f4532513f..9b3c15aa91 100644 --- a/osu.Game/Tests/Visual/OsuTestScene.cs +++ b/osu.Game/Tests/Visual/OsuTestScene.cs @@ -139,7 +139,7 @@ namespace osu.Game.Tests.Visual protected override void Dispose(bool isDisposing) { - base.Dispose(); + base.Dispose(isDisposing); store?.Dispose(); } From ef384b86676510f045b70da9068e222136ed9eb2 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 26 Jun 2019 14:08:19 +0900 Subject: [PATCH 052/267] Add simple (weak) WorkingBeatmap cache --- osu.Game/Beatmaps/BeatmapManager.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index d5b19485de..6c7929d193 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -13,6 +13,7 @@ using osu.Framework.Audio; using osu.Framework.Audio.Track; using osu.Framework.Extensions; using osu.Framework.Graphics.Textures; +using osu.Framework.Lists; using osu.Framework.Logging; using osu.Framework.Platform; using osu.Framework.Threading; @@ -157,6 +158,8 @@ namespace osu.Game.Beatmaps /// The beatmap difficulty to restore. public void Restore(BeatmapInfo beatmap) => beatmaps.Restore(beatmap); + private readonly WeakList workingCache = new WeakList(); + /// /// Retrieve a instance for the provided /// @@ -171,12 +174,18 @@ namespace osu.Game.Beatmaps if (beatmapInfo?.BeatmapSet == null || beatmapInfo == DefaultBeatmap?.BeatmapInfo) return DefaultBeatmap; + var cached = workingCache.FirstOrDefault(w => w.BeatmapInfo?.ID == beatmapInfo.ID); + + if (cached != null) + return cached; + if (beatmapInfo.Metadata == null) beatmapInfo.Metadata = beatmapInfo.BeatmapSet.Metadata; WorkingBeatmap working = new BeatmapManagerWorkingBeatmap(Files.Store, new LargeTextureStore(host?.CreateTextureLoaderStore(Files.Store)), beatmapInfo, audioManager); previous?.TransferTo(working); + workingCache.Add(working); return working; } From 12350d18b522f073074b28e25f0daa45f1ac3d15 Mon Sep 17 00:00:00 2001 From: HoLLy Date: Thu, 27 Jun 2019 14:41:11 +0200 Subject: [PATCH 053/267] Don't remove imported archives by default --- osu.Game/Beatmaps/BeatmapManager.cs | 2 ++ osu.Game/Database/ArchiveModelManager.cs | 7 ++++++- osu.Game/Skinning/SkinManager.cs | 2 ++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index da47ce7aab..cbaecdc8a7 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -83,6 +83,8 @@ namespace osu.Game.Beatmaps protected override IEnumerable GetStableImportPaths() => GetStableStorage().GetDirectories(ImportFromStablePath); + protected override bool ShouldRemoveArchive(string path) => Path.GetExtension(path)?.ToLowerInvariant() == ".osz"; + protected override Task Populate(BeatmapSetInfo beatmapSet, ArchiveReader archive, CancellationToken cancellationToken = default) { if (archive != null) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index b1756c1790..939333c6f4 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -176,7 +176,7 @@ namespace osu.Game.Database // TODO: Add a check to prevent files from storage to be deleted. try { - if (import != null && File.Exists(path)) + if (import != null && File.Exists(path) && ShouldRemoveArchive(path)) File.Delete(path); } catch (Exception e) @@ -503,6 +503,11 @@ namespace osu.Game.Database /// protected abstract IEnumerable GetStableImportPaths(); + /// + /// Should this archive be removed after importing? + /// + protected virtual bool ShouldRemoveArchive(string path) => false; + /// /// This is a temporary method and will likely be replaced by a full-fledged (and more correctly placed) migration process in the future. /// diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs index 899bab8b94..cf1e9368bc 100644 --- a/osu.Game/Skinning/SkinManager.cs +++ b/osu.Game/Skinning/SkinManager.cs @@ -56,6 +56,8 @@ namespace osu.Game.Skinning protected override IEnumerable GetStableImportPaths() => GetStableStorage().GetDirectories(ImportFromStablePath); + protected override bool ShouldRemoveArchive(string path) => true; + /// /// Returns a list of all usable s. Includes the special default skin plus all skins from . /// From ab0bb8b678c0d0a34845a40bf7b19cb53009eeeb Mon Sep 17 00:00:00 2001 From: naoey Date: Wed, 12 Jun 2019 01:31:57 +0530 Subject: [PATCH 054/267] Implement replay downloading with ArchiveDownloadModelManager --- .../API/Requests/DownloadReplayRequest.cs | 13 +++++ .../Requests/Responses/APILegacyScoreInfo.cs | 5 +- osu.Game/OsuGameBase.cs | 2 +- osu.Game/Scoring/ScoreInfo.cs | 4 +- osu.Game/Scoring/ScoreManager.cs | 10 ++-- osu.Game/Screens/Play/ReplayDownloadButton.cs | 53 +++++++++++++++++++ osu.Game/Screens/Play/SoloResults.cs | 22 ++++++++ 7 files changed, 103 insertions(+), 6 deletions(-) create mode 100644 osu.Game/Online/API/Requests/DownloadReplayRequest.cs create mode 100644 osu.Game/Screens/Play/ReplayDownloadButton.cs diff --git a/osu.Game/Online/API/Requests/DownloadReplayRequest.cs b/osu.Game/Online/API/Requests/DownloadReplayRequest.cs new file mode 100644 index 0000000000..11747f4f5f --- /dev/null +++ b/osu.Game/Online/API/Requests/DownloadReplayRequest.cs @@ -0,0 +1,13 @@ +using osu.Game.Scoring; +namespace osu.Game.Online.API.Requests +{ + public class DownloadReplayRequest : ArchiveDownloadModelRequest + { + public DownloadReplayRequest(ScoreInfo score) + : base(score) + { + } + + protected override string Target => $@"scores/{Info.Ruleset.ShortName}/{Info.OnlineScoreID}/download"; + } +} diff --git a/osu.Game/Online/API/Requests/Responses/APILegacyScoreInfo.cs b/osu.Game/Online/API/Requests/Responses/APILegacyScoreInfo.cs index 3060300077..5a18cf63f9 100644 --- a/osu.Game/Online/API/Requests/Responses/APILegacyScoreInfo.cs +++ b/osu.Game/Online/API/Requests/Responses/APILegacyScoreInfo.cs @@ -32,12 +32,15 @@ namespace osu.Game.Online.API.Requests.Responses set => User = value; } - [JsonProperty(@"score_id")] + [JsonProperty(@"id")] private long onlineScoreID { set => OnlineScoreID = value; } + [JsonProperty(@"replay")] + public bool Replay { get; set; } + [JsonProperty(@"created_at")] private DateTimeOffset date { diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs index 3bdf37d769..f589ba8a5a 100644 --- a/osu.Game/OsuGameBase.cs +++ b/osu.Game/OsuGameBase.cs @@ -170,7 +170,7 @@ namespace osu.Game dependencies.Cache(FileStore = new FileStore(contextFactory, Host.Storage)); // ordering is important here to ensure foreign keys rules are not broken in ModelStore.Cleanup() - dependencies.Cache(ScoreManager = new ScoreManager(RulesetStore, () => BeatmapManager, Host.Storage, contextFactory, Host)); + dependencies.Cache(ScoreManager = new ScoreManager(RulesetStore, () => BeatmapManager, Host.Storage, API, contextFactory, Host)); dependencies.Cache(BeatmapManager = new BeatmapManager(Host.Storage, contextFactory, RulesetStore, API, Audio, Host, defaultBeatmap)); // this should likely be moved to ArchiveModelManager when another case appers where it is necessary diff --git a/osu.Game/Scoring/ScoreInfo.cs b/osu.Game/Scoring/ScoreInfo.cs index 8bdc30ac94..266725a739 100644 --- a/osu.Game/Scoring/ScoreInfo.cs +++ b/osu.Game/Scoring/ScoreInfo.cs @@ -16,7 +16,7 @@ using osu.Game.Rulesets.Scoring; namespace osu.Game.Scoring { - public class ScoreInfo : IHasFiles, IHasPrimaryKey, ISoftDelete + public class ScoreInfo : IHasFiles, IHasPrimaryKey, ISoftDelete, IEquatable { public int ID { get; set; } @@ -182,5 +182,7 @@ namespace osu.Game.Scoring } public override string ToString() => $"{User} playing {Beatmap}"; + + public bool Equals(ScoreInfo other) => other?.OnlineScoreID == OnlineScoreID; } } diff --git a/osu.Game/Scoring/ScoreManager.cs b/osu.Game/Scoring/ScoreManager.cs index 6b737dc734..6d2ade5ecd 100644 --- a/osu.Game/Scoring/ScoreManager.cs +++ b/osu.Game/Scoring/ScoreManager.cs @@ -11,12 +11,14 @@ using osu.Framework.Platform; using osu.Game.Beatmaps; using osu.Game.Database; using osu.Game.IO.Archives; +using osu.Game.Online.API; +using osu.Game.Online.API.Requests; using osu.Game.Rulesets; using osu.Game.Scoring.Legacy; namespace osu.Game.Scoring { - public class ScoreManager : ArchiveModelManager + public class ScoreManager : ArchiveDownloadModelManager { public override string[] HandledExtensions => new[] { ".osr" }; @@ -27,8 +29,8 @@ namespace osu.Game.Scoring private readonly RulesetStore rulesets; private readonly Func beatmaps; - public ScoreManager(RulesetStore rulesets, Func beatmaps, Storage storage, IDatabaseContextFactory contextFactory, IIpcHost importHost = null) - : base(storage, contextFactory, new ScoreStore(contextFactory, storage), importHost) + public ScoreManager(RulesetStore rulesets, Func beatmaps, Storage storage, IAPIProvider api, IDatabaseContextFactory contextFactory, IIpcHost importHost = null) + : base(storage, contextFactory, api, new ScoreStore(contextFactory, storage), importHost) { this.rulesets = rulesets; this.beatmaps = beatmaps; @@ -60,5 +62,7 @@ namespace osu.Game.Scoring public IEnumerable QueryScores(Expression> query) => ModelStore.ConsumableItems.AsNoTracking().Where(query); public ScoreInfo Query(Expression> query) => ModelStore.ConsumableItems.AsNoTracking().FirstOrDefault(query); + + protected override ArchiveDownloadModelRequest CreateDownloadRequest(ScoreInfo score, object[] options) => new DownloadReplayRequest(score); } } diff --git a/osu.Game/Screens/Play/ReplayDownloadButton.cs b/osu.Game/Screens/Play/ReplayDownloadButton.cs new file mode 100644 index 0000000000..14a6f942eb --- /dev/null +++ b/osu.Game/Screens/Play/ReplayDownloadButton.cs @@ -0,0 +1,53 @@ +using osu.Framework.Allocation; +using osu.Framework.Graphics.Sprites; +using osu.Game.Graphics; +using osu.Game.Graphics.UserInterface; +using osu.Game.Online; +using osu.Game.Scoring; + +namespace osu.Game.Screens.Play +{ + public class ReplayDownloadButton : DownloadTrackingComposite + { + [Resolved] + private OsuGame game { get; set; } + + [Resolved] + private ScoreManager scores { get; set; } + + public ReplayDownloadButton(ScoreInfo score) + : base(score) + { + } + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + AddInternal(new TwoLayerButton + { + BackgroundColour = colours.Yellow, + Icon = FontAwesome.Solid.PlayCircle, + Text = @"Replay", + HoverColour = colours.YellowDark, + Action = onReplay, + }); + } + + private void onReplay() + { + if (scores.IsAvailableLocally(ModelInfo.Value)) + { + game.PresentScore(ModelInfo.Value); + return; + } + + scores.Download(ModelInfo.Value); + + scores.ItemAdded += (score, _) => + { + if (score.Equals(ModelInfo.Value)) + game.PresentScore(ModelInfo.Value); + }; + } + } +} diff --git a/osu.Game/Screens/Play/SoloResults.cs b/osu.Game/Screens/Play/SoloResults.cs index 2b9aec257c..5c747d2d31 100644 --- a/osu.Game/Screens/Play/SoloResults.cs +++ b/osu.Game/Screens/Play/SoloResults.cs @@ -2,6 +2,8 @@ // See the LICENCE file in the repository root for full licence text. using System.Collections.Generic; +using osu.Framework.Allocation; +using osu.Game.Online.API.Requests.Responses; using osu.Game.Scoring; using osu.Game.Screens.Ranking; using osu.Game.Screens.Ranking.Types; @@ -10,11 +12,31 @@ namespace osu.Game.Screens.Play { public class SoloResults : Results { + [Resolved] + ScoreManager scores { get; set; } + public SoloResults(ScoreInfo score) : base(score) { } + [BackgroundDependencyLoader] + private void load() + { + if (scores.IsAvailableLocally(Score) || hasOnlineReplay) + { + AddInternal(new ReplayDownloadButton(Score) + { + Anchor = Framework.Graphics.Anchor.BottomRight, + Origin = Framework.Graphics.Anchor.BottomRight, + Height = 80, + Width = 100, + }); + } + } + + private bool hasOnlineReplay => Score is APILegacyScoreInfo apiScore && apiScore.OnlineScoreID != null && apiScore.Replay; + protected override IEnumerable CreateResultPages() => new IResultPageInfo[] { new ScoreOverviewPageInfo(Score, Beatmap.Value), From 53d6d74537c67512d7afc57746306fcdf6716243 Mon Sep 17 00:00:00 2001 From: naoey Date: Wed, 26 Jun 2019 21:10:21 +0530 Subject: [PATCH 055/267] Update to match upstream changes --- .../Online/API/Requests/DownloadReplayRequest.cs | 6 ++++-- osu.Game/Scoring/ScoreManager.cs | 4 ++-- osu.Game/Screens/Play/ReplayDownloadButton.cs | 14 ++++++++------ 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/osu.Game/Online/API/Requests/DownloadReplayRequest.cs b/osu.Game/Online/API/Requests/DownloadReplayRequest.cs index 11747f4f5f..0eacb4ed7b 100644 --- a/osu.Game/Online/API/Requests/DownloadReplayRequest.cs +++ b/osu.Game/Online/API/Requests/DownloadReplayRequest.cs @@ -1,13 +1,15 @@ using osu.Game.Scoring; namespace osu.Game.Online.API.Requests { - public class DownloadReplayRequest : ArchiveDownloadModelRequest + public class DownloadReplayRequest : ArchiveDownloadRequest { public DownloadReplayRequest(ScoreInfo score) : base(score) { } - protected override string Target => $@"scores/{Info.Ruleset.ShortName}/{Info.OnlineScoreID}/download"; + protected override string FileExtension => ".osr"; + + protected override string Target => $@"scores/{Model.Ruleset.ShortName}/{Model.OnlineScoreID}/download"; } } diff --git a/osu.Game/Scoring/ScoreManager.cs b/osu.Game/Scoring/ScoreManager.cs index 6d2ade5ecd..33be8c41ef 100644 --- a/osu.Game/Scoring/ScoreManager.cs +++ b/osu.Game/Scoring/ScoreManager.cs @@ -18,7 +18,7 @@ using osu.Game.Scoring.Legacy; namespace osu.Game.Scoring { - public class ScoreManager : ArchiveDownloadModelManager + public class ScoreManager : DownloadableArchiveModelManager { public override string[] HandledExtensions => new[] { ".osr" }; @@ -63,6 +63,6 @@ namespace osu.Game.Scoring public ScoreInfo Query(Expression> query) => ModelStore.ConsumableItems.AsNoTracking().FirstOrDefault(query); - protected override ArchiveDownloadModelRequest CreateDownloadRequest(ScoreInfo score, object[] options) => new DownloadReplayRequest(score); + protected override ArchiveDownloadRequest CreateDownloadRequest(ScoreInfo score, bool minimiseDownload) => new DownloadReplayRequest(score); } } diff --git a/osu.Game/Screens/Play/ReplayDownloadButton.cs b/osu.Game/Screens/Play/ReplayDownloadButton.cs index 14a6f942eb..51061e0660 100644 --- a/osu.Game/Screens/Play/ReplayDownloadButton.cs +++ b/osu.Game/Screens/Play/ReplayDownloadButton.cs @@ -35,18 +35,20 @@ namespace osu.Game.Screens.Play private void onReplay() { - if (scores.IsAvailableLocally(ModelInfo.Value)) + if (scores.IsAvailableLocally(Model.Value)) { - game.PresentScore(ModelInfo.Value); + game.PresentScore(Model.Value); return; } - scores.Download(ModelInfo.Value); + scores.Download(Model.Value); - scores.ItemAdded += (score, _) => + scores.ItemAdded += score => { - if (score.Equals(ModelInfo.Value)) - game.PresentScore(ModelInfo.Value); + if (score.Equals(Model.Value)) + // use the newly added score instead of ModelInfo.Score because that won't have the Files property populated + game.PresentScore(score); + //ReplayLoaded?.Invoke(scores.GetScore(score)); }; } } From 01508e68134c45a6380d6a892694957afbc11b73 Mon Sep 17 00:00:00 2001 From: Unknown Date: Fri, 28 Jun 2019 10:34:04 +0200 Subject: [PATCH 056/267] implement HD for CtB --- .../TestSceneDrawableHitObjects.cs | 160 ++++++++++++++++++ .../TestSceneDrawableHitObjectsHidden.cs | 20 +++ .../Mods/CatchModHidden.cs | 35 ++++ .../Objects/CatchHitObject.cs | 4 + .../Drawable/DrawableCatchHitObject.cs | 4 +- 5 files changed, 220 insertions(+), 3 deletions(-) create mode 100644 osu.Game.Rulesets.Catch.Tests/TestSceneDrawableHitObjects.cs create mode 100644 osu.Game.Rulesets.Catch.Tests/TestSceneDrawableHitObjectsHidden.cs diff --git a/osu.Game.Rulesets.Catch.Tests/TestSceneDrawableHitObjects.cs b/osu.Game.Rulesets.Catch.Tests/TestSceneDrawableHitObjects.cs new file mode 100644 index 0000000000..7a9b61c60c --- /dev/null +++ b/osu.Game.Rulesets.Catch.Tests/TestSceneDrawableHitObjects.cs @@ -0,0 +1,160 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Collections.Generic; +using System.Linq; +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Game.Beatmaps; +using osu.Game.Beatmaps.ControlPoints; +using osu.Game.Rulesets.Catch.Objects; +using osu.Game.Rulesets.Catch.Objects.Drawable; +using osu.Game.Rulesets.Catch.UI; +using osu.Game.Rulesets.Mods; +using osu.Game.Rulesets.Objects; +using osu.Game.Rulesets.Objects.Types; +using osu.Game.Tests.Visual; +using osuTK; + +namespace osu.Game.Rulesets.Catch.Tests +{ + public class TestSceneDrawableHitObjects : OsuTestScene + { + public override IReadOnlyList RequiredTypes => new[] + { + typeof(CatcherArea.Catcher), + typeof(DrawableCatchRuleset), + typeof(DrawableFruit), + typeof(DrawableJuiceStream), + typeof(DrawableBanana) + }; + + private DrawableCatchRuleset drawableRuleset; + private double playfieldTime => drawableRuleset.Playfield.Time.Current; + + [BackgroundDependencyLoader] + private void load() + { + var controlPointInfo = new ControlPointInfo(); + controlPointInfo.TimingPoints.Add(new TimingControlPoint()); + + WorkingBeatmap beatmap = CreateWorkingBeatmap(new Beatmap + { + HitObjects = new List { new Fruit() }, + BeatmapInfo = new BeatmapInfo + { + BaseDifficulty = new BeatmapDifficulty(), + Metadata = new BeatmapMetadata + { + Artist = @"Unknown", + Title = @"You're breathtaking", + AuthorString = @"Everyone", + }, + Ruleset = new CatchRuleset().RulesetInfo + }, + ControlPointInfo = controlPointInfo + }); + + Add(new Container + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + RelativeSizeAxes = Axes.Both, + Children = new[] + { + drawableRuleset = new DrawableCatchRuleset(new CatchRuleset(), beatmap, Array.Empty()) + } + }); + + AddStep("miss fruits", () => spawnFruits()); + AddStep("hit fruits", () => spawnFruits(true)); + AddStep("miss juicestream", () => spawnJuiceStream()); + AddStep("hit juicestream", () => spawnJuiceStream(true)); + AddStep("miss bananas", () => spawnBananas()); + AddStep("hit bananas", () => spawnBananas(true)); + } + + private void spawnFruits(bool hit = false) + { + for (int i = 1; i <= 4; i++) + { + var fruit = new Fruit + { + X = getXCoords(hit), + LastInCombo = i % 4 == 0, + StartTime = playfieldTime + 800 + (200 * i) + }; + + fruit.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty()); + + addToPlayfield(new DrawableFruit(fruit)); + } + } + + private void spawnJuiceStream(bool hit = false) + { + var xCoords = getXCoords(hit); + + var juice = new JuiceStream + { + X = xCoords, + StartTime = playfieldTime + 1000, + Path = new SliderPath(PathType.Linear, new[] + { + Vector2.Zero, + new Vector2(0, 200) + }) + }; + + juice.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty()); + + if (juice.NestedHitObjects.Last() is CatchHitObject tail) + tail.LastInCombo = true; // usually the (Catch)BeatmapProcessor would do this for us when necessary + + addToPlayfield(new DrawableJuiceStream(juice, drawableRuleset.CreateDrawableRepresentation)); + } + + private void spawnBananas(bool hit = false) + { + for (int i = 1; i <= 4; i++) + { + var banana = new Banana + { + X = getXCoords(hit), + LastInCombo = i % 4 == 0, + StartTime = playfieldTime + 800 + (200 * i) + }; + + banana.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty()); + + addToPlayfield(new DrawableBanana(banana)); + } + } + + private float getXCoords(bool hit) + { + const float x_offset = 0.2f; + float xCoords = drawableRuleset.Playfield.Width / 2; + + if (drawableRuleset.Playfield is CatchPlayfield catchPlayfield) + catchPlayfield.CatcherArea.MovableCatcher.X = xCoords - x_offset; + + if (hit) + xCoords -= x_offset; + else + xCoords += x_offset; + + return xCoords; + } + + private void addToPlayfield(DrawableCatchHitObject drawable) + { + foreach (var mod in Mods.Value.OfType()) + mod.ApplyToDrawableHitObjects(new[] { drawable }); + + drawableRuleset.Playfield.Add(drawable); + } + } +} diff --git a/osu.Game.Rulesets.Catch.Tests/TestSceneDrawableHitObjectsHidden.cs b/osu.Game.Rulesets.Catch.Tests/TestSceneDrawableHitObjectsHidden.cs new file mode 100644 index 0000000000..f6d26addaa --- /dev/null +++ b/osu.Game.Rulesets.Catch.Tests/TestSceneDrawableHitObjectsHidden.cs @@ -0,0 +1,20 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Collections.Generic; +using System.Linq; +using osu.Game.Rulesets.Catch.Mods; + +namespace osu.Game.Rulesets.Catch.Tests +{ + public class TestSceneDrawableHitObjectsHidden : TestSceneDrawableHitObjects + { + public override IReadOnlyList RequiredTypes => base.RequiredTypes.Concat(new[] { typeof(CatchModHidden) }).ToList(); + + public TestSceneDrawableHitObjectsHidden() + { + Mods.Value = new[] { new CatchModHidden() }; + } + } +} diff --git a/osu.Game.Rulesets.Catch/Mods/CatchModHidden.cs b/osu.Game.Rulesets.Catch/Mods/CatchModHidden.cs index 9990b01427..606a935229 100644 --- a/osu.Game.Rulesets.Catch/Mods/CatchModHidden.cs +++ b/osu.Game.Rulesets.Catch/Mods/CatchModHidden.cs @@ -1,7 +1,11 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. +using System.Linq; +using osu.Framework.Graphics; +using osu.Game.Rulesets.Catch.Objects.Drawable; using osu.Game.Rulesets.Mods; +using osu.Game.Rulesets.Objects.Drawables; namespace osu.Game.Rulesets.Catch.Mods { @@ -9,5 +13,36 @@ namespace osu.Game.Rulesets.Catch.Mods { public override string Description => @"Play with fading fruits."; public override double ScoreMultiplier => 1.06; + + private const double fade_out_offset_multiplier = 0.6; + private const double fade_out_duration_multiplier = 0.44; + + protected override void ApplyHiddenState(DrawableHitObject drawable, ArmedState state) + { + if (!(drawable is DrawableCatchHitObject catchDrawable)) + return; + + if (catchDrawable.NestedHitObjects.Any()) + { + foreach (var nestedDrawable in catchDrawable.NestedHitObjects) + { + if (nestedDrawable is DrawableCatchHitObject nestedCatchDrawable) + fadeOutHitObject(nestedCatchDrawable); + } + } + else + fadeOutHitObject(catchDrawable); + } + + private void fadeOutHitObject(DrawableCatchHitObject drawable) + { + var hitObject = drawable.HitObject; + + var offset = hitObject.TimePreempt * fade_out_offset_multiplier; + var duration = offset - hitObject.TimePreempt * fade_out_duration_multiplier; + + using (drawable.BeginAbsoluteSequence(hitObject.StartTime - offset, true)) + drawable.FadeOut(duration); + } } } diff --git a/osu.Game.Rulesets.Catch/Objects/CatchHitObject.cs b/osu.Game.Rulesets.Catch/Objects/CatchHitObject.cs index 2153b8dc85..be76edc01b 100644 --- a/osu.Game.Rulesets.Catch/Objects/CatchHitObject.cs +++ b/osu.Game.Rulesets.Catch/Objects/CatchHitObject.cs @@ -14,6 +14,8 @@ namespace osu.Game.Rulesets.Catch.Objects public float X { get; set; } + public double TimePreempt = 1000; + public int IndexInBeatmap { get; set; } public virtual FruitVisualRepresentation VisualRepresentation => (FruitVisualRepresentation)(ComboIndex % 4); @@ -54,6 +56,8 @@ namespace osu.Game.Rulesets.Catch.Objects { base.ApplyDefaultsToSelf(controlPointInfo, difficulty); + TimePreempt = (float)BeatmapDifficulty.DifficultyRange(difficulty.ApproachRate, 1800, 1200, 450); + Scale = 1.0f - 0.7f * (difficulty.CircleSize - 5) / 5; } diff --git a/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableCatchHitObject.cs b/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableCatchHitObject.cs index 2f8ccec48b..5785d9a9ca 100644 --- a/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableCatchHitObject.cs +++ b/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableCatchHitObject.cs @@ -68,11 +68,9 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawable AccentColour = skin.GetValue(s => s.ComboColours.Count > 0 ? s.ComboColours[combo.ComboIndex % s.ComboColours.Count] : (Color4?)null) ?? Color4.White; } - private const float preempt = 1000; - protected override void UpdateState(ArmedState state) { - using (BeginAbsoluteSequence(HitObject.StartTime - preempt)) + using (BeginAbsoluteSequence(HitObject.StartTime - HitObject.TimePreempt)) this.FadeIn(200); var endTime = (HitObject as IHasEndTime)?.EndTime ?? HitObject.StartTime; From d37cefbad826004c257cac67daad6db3ba93a95f Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Sat, 29 Jun 2019 04:23:59 +0300 Subject: [PATCH 057/267] Implement IApplicableToHUD --- osu.Game/Rulesets/Mods/IApplicableToHUD.cs | 18 ++++++++++++++++++ osu.Game/Screens/Play/Player.cs | 3 +++ 2 files changed, 21 insertions(+) create mode 100644 osu.Game/Rulesets/Mods/IApplicableToHUD.cs diff --git a/osu.Game/Rulesets/Mods/IApplicableToHUD.cs b/osu.Game/Rulesets/Mods/IApplicableToHUD.cs new file mode 100644 index 0000000000..4fb535a0b3 --- /dev/null +++ b/osu.Game/Rulesets/Mods/IApplicableToHUD.cs @@ -0,0 +1,18 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Game.Screens.Play; + +namespace osu.Game.Rulesets.Mods +{ + /// + /// An interface for mods that apply changes to the . + /// + public interface IApplicableToHUD : IApplicableMod + { + /// + /// Provide a . Called once on initialisation of a play instance. + /// + void ApplyToHUD(HUDOverlay overlay); + } +} diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 957498dc44..1ae234ab2e 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -494,6 +494,9 @@ namespace osu.Game.Screens.Play GameplayClockContainer.Restart(); GameplayClockContainer.FadeInFromZero(750, Easing.OutQuint); + + foreach (var mod in Mods.Value.OfType()) + mod.ApplyToHUD(HUDOverlay); } public override void OnSuspending(IScreen next) From 41597efdf71b7c65827de5fe7ec4bae5a110f809 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Sat, 29 Jun 2019 04:25:52 +0300 Subject: [PATCH 058/267] Hide health bar in no fail --- osu.Game/Rulesets/Mods/ModNoFail.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/Mods/ModNoFail.cs b/osu.Game/Rulesets/Mods/ModNoFail.cs index 1ee1f92d8c..171ebb78bc 100644 --- a/osu.Game/Rulesets/Mods/ModNoFail.cs +++ b/osu.Game/Rulesets/Mods/ModNoFail.cs @@ -4,10 +4,11 @@ using System; using osu.Framework.Graphics.Sprites; using osu.Game.Graphics; +using osu.Game.Screens.Play; namespace osu.Game.Rulesets.Mods { - public abstract class ModNoFail : Mod, IApplicableFailOverride + public abstract class ModNoFail : Mod, IApplicableFailOverride, IApplicableToHUD { public override string Name => "No Fail"; public override string Acronym => "NF"; @@ -22,5 +23,7 @@ namespace osu.Game.Rulesets.Mods /// We never fail, 'yo. /// public bool AllowFail => false; + + public void ApplyToHUD(HUDOverlay overlay) => overlay.HealthDisplay.Hide(); } } From 9c9334a8ba31dcddf812682c22bc38cbbb1adb97 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Sat, 29 Jun 2019 04:26:24 +0300 Subject: [PATCH 059/267] Hide health bar in relax mod --- osu.Game.Rulesets.Osu/Mods/OsuModRelax.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModRelax.cs b/osu.Game.Rulesets.Osu/Mods/OsuModRelax.cs index bc5d02258f..a6a81fa989 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModRelax.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModRelax.cs @@ -9,11 +9,12 @@ using osu.Game.Rulesets.Objects.Types; using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Objects.Drawables; using osu.Game.Rulesets.UI; +using osu.Game.Screens.Play; using static osu.Game.Input.Handlers.ReplayInputHandler; namespace osu.Game.Rulesets.Osu.Mods { - public class OsuModRelax : ModRelax, IApplicableFailOverride, IUpdatableByPlayfield, IApplicableToDrawableRuleset + public class OsuModRelax : ModRelax, IApplicableFailOverride, IUpdatableByPlayfield, IApplicableToDrawableRuleset, IApplicableToHUD { public override string Description => @"You don't need to click. Give your clicking/tapping fingers a break from the heat of things."; public override Type[] IncompatibleMods => base.IncompatibleMods.Append(typeof(OsuModAutopilot)).ToArray(); @@ -85,5 +86,7 @@ namespace osu.Game.Rulesets.Osu.Mods osuInputManager = (OsuInputManager)drawableRuleset.KeyBindingInputManager; osuInputManager.AllowUserPresses = false; } + + public void ApplyToHUD(HUDOverlay overlay) => overlay.HealthDisplay.Hide(); } } From bc52f765567a4954d116c140368a09f25b7cd149 Mon Sep 17 00:00:00 2001 From: naoey Date: Sat, 29 Jun 2019 10:55:30 +0530 Subject: [PATCH 060/267] Move replay button to score card --- .../Gameplay/TestSceneReplayDownloadButton.cs | 49 ++++++ osu.Game/Online/DownloadTrackingComposite.cs | 9 + osu.Game/Scoring/ScoreManager.cs | 2 + osu.Game/Screens/Play/ReplayDownloadButton.cs | 154 ++++++++++++++---- osu.Game/Screens/Play/SoloResults.cs | 17 -- .../Screens/Ranking/Pages/ScoreResultsPage.cs | 15 +- 6 files changed, 195 insertions(+), 51 deletions(-) create mode 100644 osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs new file mode 100644 index 0000000000..205d869efe --- /dev/null +++ b/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs @@ -0,0 +1,49 @@ +using NUnit.Framework; +using osu.Framework.Graphics; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Rulesets.Osu; +using osu.Game.Scoring; +using osu.Game.Screens.Play; +using osu.Game.Users; +using osuTK; +using System; +using System.Collections.Generic; + +namespace osu.Game.Tests.Visual.Gameplay +{ + [TestFixture] + public class TestSceneReplayDownloadButton : OsuTestScene + { + public override IReadOnlyList RequiredTypes => new[] + { + typeof(ReplayDownloadButton) + }; + + private ReplayDownloadButton downloadButton; + + public TestSceneReplayDownloadButton() + { + Add(new ReplayDownloadButton(getScoreInfo()) + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + }); + } + + private ScoreInfo getScoreInfo() + { + return new APILegacyScoreInfo + { + ID = 1, + OnlineScoreID = 2553163309, + Ruleset = new OsuRuleset().RulesetInfo, + Replay = true, + User = new User + { + Id = 39828, + Username = @"WubWoofWolf", + } + }; + } + } +} diff --git a/osu.Game/Online/DownloadTrackingComposite.cs b/osu.Game/Online/DownloadTrackingComposite.cs index 5eb2bb74bb..f0375335da 100644 --- a/osu.Game/Online/DownloadTrackingComposite.cs +++ b/osu.Game/Online/DownloadTrackingComposite.cs @@ -54,6 +54,12 @@ namespace osu.Game.Online attachDownload(download); }; + manager.DownloadFailed += download => + { + if (download.Model.Equals(Model.Value)) + attachDownload(null); + }; + manager.ItemAdded += itemAdded; manager.ItemRemoved += itemRemoved; } @@ -109,6 +115,9 @@ namespace osu.Game.Online if (!s.Equals(Model.Value)) return; + // when model states are being updated from manager, update the model being held by us also so that it will + // be up do date when being consumed for reading files etc. + Model.Value = s; State.Value = state; }); diff --git a/osu.Game/Scoring/ScoreManager.cs b/osu.Game/Scoring/ScoreManager.cs index 33be8c41ef..2d82987da0 100644 --- a/osu.Game/Scoring/ScoreManager.cs +++ b/osu.Game/Scoring/ScoreManager.cs @@ -64,5 +64,7 @@ namespace osu.Game.Scoring public ScoreInfo Query(Expression> query) => ModelStore.ConsumableItems.AsNoTracking().FirstOrDefault(query); protected override ArchiveDownloadRequest CreateDownloadRequest(ScoreInfo score, bool minimiseDownload) => new DownloadReplayRequest(score); + + protected override bool CheckLocalAvailability(ScoreInfo model, IQueryable items) => items.Any(s => s.OnlineScoreID == model.OnlineScoreID); } } diff --git a/osu.Game/Screens/Play/ReplayDownloadButton.cs b/osu.Game/Screens/Play/ReplayDownloadButton.cs index 51061e0660..f56246e615 100644 --- a/osu.Game/Screens/Play/ReplayDownloadButton.cs +++ b/osu.Game/Screens/Play/ReplayDownloadButton.cs @@ -1,55 +1,147 @@ using osu.Framework.Allocation; -using osu.Framework.Graphics.Sprites; +using osu.Framework.Graphics.Cursor; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Graphics; using osu.Game.Graphics; -using osu.Game.Graphics.UserInterface; +using osu.Game.Graphics.Containers; using osu.Game.Online; using osu.Game.Scoring; +using osuTK; +using osu.Framework.Graphics.Sprites; +using osu.Game.Online.API.Requests.Responses; +using osu.Framework.Graphics.Effects; +using osuTK.Graphics; +using osu.Framework.Extensions.Color4Extensions; namespace osu.Game.Screens.Play { - public class ReplayDownloadButton : DownloadTrackingComposite + public class ReplayDownloadButton : DownloadTrackingComposite, IHasTooltip { - [Resolved] + private const int size = 40; + + [Resolved(canBeNull: true)] private OsuGame game { get; set; } [Resolved] private ScoreManager scores { get; set; } + [Resolved] + private OsuColour colours { get; set; } + + private OsuClickableContainer button; + private SpriteIcon downloadIcon; + private SpriteIcon playIcon; + private ShakeContainer shakeContainer; + + public string TooltipText + { + get + { + if (scores.IsAvailableLocally(Model.Value)) + return @"Watch replay"; + + if (Model.Value is APILegacyScoreInfo apiScore && apiScore.Replay) + return @"Download replay"; + + return @"Replay unavailable"; + } + } + public ReplayDownloadButton(ScoreInfo score) : base(score) { + Size = new Vector2(size); + CornerRadius = size / 2; + Masking = true; } - [BackgroundDependencyLoader] - private void load(OsuColour colours) + private bool hasReplay => (Model.Value is APILegacyScoreInfo apiScore && apiScore.Replay) || scores.IsAvailableLocally(Model.Value); + + [BackgroundDependencyLoader(true)] + private void load() { - AddInternal(new TwoLayerButton + EdgeEffect = new EdgeEffectParameters { - BackgroundColour = colours.Yellow, - Icon = FontAwesome.Solid.PlayCircle, - Text = @"Replay", - HoverColour = colours.YellowDark, - Action = onReplay, - }); - } - - private void onReplay() - { - if (scores.IsAvailableLocally(Model.Value)) - { - game.PresentScore(Model.Value); - return; - } - - scores.Download(Model.Value); - - scores.ItemAdded += score => - { - if (score.Equals(Model.Value)) - // use the newly added score instead of ModelInfo.Score because that won't have the Files property populated - game.PresentScore(score); - //ReplayLoaded?.Invoke(scores.GetScore(score)); + Colour = Color4.Black.Opacity(0.4f), + Type = EdgeEffectType.Shadow, + Radius = 5, }; + + InternalChild = shakeContainer = new ShakeContainer + { + RelativeSizeAxes = Axes.Both, + Child = button = new OsuClickableContainer + { + RelativeSizeAxes = Axes.Both, + Children = new Drawable[] + { + new Box + { + RelativeSizeAxes = Axes.Both, + Colour = colours.GrayF, + }, + playIcon = new SpriteIcon + { + Icon = FontAwesome.Solid.Play, + Size = Vector2.Zero, + Colour = colours.Gray3, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + }, + downloadIcon = new SpriteIcon + { + Icon = FontAwesome.Solid.FileDownload, + Size = Vector2.Zero, + Colour = colours.Gray3, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + }, + }, + } + }; + + button.Action = () => + { + switch (State.Value) + { + case DownloadState.LocallyAvailable: + game.PresentScore(Model.Value); + break; + + case DownloadState.NotDownloaded: + scores.Download(Model.Value); + break; + + case DownloadState.Downloading: + shakeContainer.Shake(); + break; + } + }; + + State.BindValueChanged(state => + { + switch (state.NewValue) + { + case DownloadState.Downloading: + FadeEdgeEffectTo(colours.Yellow, 400, Easing.OutQuint); + button.Enabled.Value = false; + break; + + case DownloadState.LocallyAvailable: + playIcon.ResizeTo(13, 300, Easing.OutQuint); + downloadIcon.ResizeTo(Vector2.Zero, 300, Easing.OutExpo); + FadeEdgeEffectTo(Color4.Black.Opacity(0.4f), 400, Easing.OutQuint); + button.Enabled.Value = true; + break; + + case DownloadState.NotDownloaded: + playIcon.ResizeTo(Vector2.Zero, 300, Easing.OutQuint); + downloadIcon.ResizeTo(13, 300, Easing.OutExpo); + FadeEdgeEffectTo(Color4.Black.Opacity(0.4f), 400, Easing.OutQuint); + button.Enabled.Value = true; + break; + } + }, true); } } } diff --git a/osu.Game/Screens/Play/SoloResults.cs b/osu.Game/Screens/Play/SoloResults.cs index 5c747d2d31..e8f4a7e182 100644 --- a/osu.Game/Screens/Play/SoloResults.cs +++ b/osu.Game/Screens/Play/SoloResults.cs @@ -20,23 +20,6 @@ namespace osu.Game.Screens.Play { } - [BackgroundDependencyLoader] - private void load() - { - if (scores.IsAvailableLocally(Score) || hasOnlineReplay) - { - AddInternal(new ReplayDownloadButton(Score) - { - Anchor = Framework.Graphics.Anchor.BottomRight, - Origin = Framework.Graphics.Anchor.BottomRight, - Height = 80, - Width = 100, - }); - } - } - - private bool hasOnlineReplay => Score is APILegacyScoreInfo apiScore && apiScore.OnlineScoreID != null && apiScore.Replay; - protected override IEnumerable CreateResultPages() => new IResultPageInfo[] { new ScoreOverviewPageInfo(Score, Beatmap.Value), diff --git a/osu.Game/Screens/Ranking/Pages/ScoreResultsPage.cs b/osu.Game/Screens/Ranking/Pages/ScoreResultsPage.cs index a82156e34e..3068fd77e8 100644 --- a/osu.Game/Screens/Ranking/Pages/ScoreResultsPage.cs +++ b/osu.Game/Screens/Ranking/Pages/ScoreResultsPage.cs @@ -33,9 +33,12 @@ namespace osu.Game.Screens.Ranking.Pages private Container scoreContainer; private ScoreCounter scoreCounter; + private readonly ScoreInfo score; + public ScoreResultsPage(ScoreInfo score, WorkingBeatmap beatmap) : base(score, beatmap) { + this.score = score; } private FillFlowContainer statisticsContainer; @@ -163,9 +166,15 @@ namespace osu.Game.Screens.Ranking.Pages Direction = FillDirection.Horizontal, LayoutDuration = 200, LayoutEasing = Easing.OutQuint - } - } - } + }, + }, + }, + new ReplayDownloadButton(score) + { + Anchor = Anchor.BottomCentre, + Origin = Anchor.BottomCentre, + Margin = new MarginPadding { Bottom = 10 }, + }, }; statisticsContainer.ChildrenEnumerable = Score.Statistics.OrderByDescending(p => p.Key).Select(s => new DrawableScoreStatistic(s)); From f9316bc038f8e68d030cc3bf0af7654a945bc407 Mon Sep 17 00:00:00 2001 From: naoey Date: Sat, 29 Jun 2019 11:09:39 +0530 Subject: [PATCH 061/267] Hack fix for models not updating correctly when added in DB --- osu.Game/Online/DownloadTrackingComposite.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game/Online/DownloadTrackingComposite.cs b/osu.Game/Online/DownloadTrackingComposite.cs index f0375335da..3d230c5475 100644 --- a/osu.Game/Online/DownloadTrackingComposite.cs +++ b/osu.Game/Online/DownloadTrackingComposite.cs @@ -117,6 +117,8 @@ namespace osu.Game.Online // when model states are being updated from manager, update the model being held by us also so that it will // be up do date when being consumed for reading files etc. + // the value -> null -> value change is to force the bindable to update the value instance + Model.Value = null; Model.Value = s; State.Value = state; }); From 424711d24be8ef4d0fa7175e659079178bc51847 Mon Sep 17 00:00:00 2001 From: naoey Date: Sat, 29 Jun 2019 12:26:37 +0530 Subject: [PATCH 062/267] Fix replay button shake container - Add license headers - Slightly reduce bottom margin of button in score screen --- .../Gameplay/TestSceneReplayDownloadButton.cs | 27 +++++- osu.Game/Screens/Play/ReplayDownloadButton.cs | 92 ++++++++++--------- .../Screens/Ranking/Pages/ScoreResultsPage.cs | 2 +- 3 files changed, 73 insertions(+), 48 deletions(-) diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs index 205d869efe..9c87d4cd79 100644 --- a/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs +++ b/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs @@ -1,5 +1,9 @@ -using NUnit.Framework; +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using NUnit.Framework; using osu.Framework.Graphics; +using osu.Game.Online; using osu.Game.Online.API.Requests.Responses; using osu.Game.Rulesets.Osu; using osu.Game.Scoring; @@ -19,11 +23,19 @@ namespace osu.Game.Tests.Visual.Gameplay typeof(ReplayDownloadButton) }; - private ReplayDownloadButton downloadButton; + private TestReplayDownloadButton downloadButton; public TestSceneReplayDownloadButton() { - Add(new ReplayDownloadButton(getScoreInfo()) + createButton(); + AddStep(@"downloading state", () => downloadButton.SetDownloadState(DownloadState.Downloading)); + AddStep(@"locally available state", () => downloadButton.SetDownloadState(DownloadState.LocallyAvailable)); + AddStep(@"not downloaded state", () => downloadButton.SetDownloadState(DownloadState.NotDownloaded)); + } + + private void createButton() + { + AddStep(@"create button", () => Child = downloadButton = new TestReplayDownloadButton(getScoreInfo()) { Anchor = Anchor.Centre, Origin = Anchor.Centre, @@ -45,5 +57,14 @@ namespace osu.Game.Tests.Visual.Gameplay } }; } + + private class TestReplayDownloadButton : ReplayDownloadButton + { + public void SetDownloadState(DownloadState state) => State.Value = state; + + public TestReplayDownloadButton(ScoreInfo score) : base(score) + { + } + } } } diff --git a/osu.Game/Screens/Play/ReplayDownloadButton.cs b/osu.Game/Screens/Play/ReplayDownloadButton.cs index f56246e615..0d6a159523 100644 --- a/osu.Game/Screens/Play/ReplayDownloadButton.cs +++ b/osu.Game/Screens/Play/ReplayDownloadButton.cs @@ -1,4 +1,7 @@ -using osu.Framework.Allocation; +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Allocation; using osu.Framework.Graphics.Cursor; using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics; @@ -12,6 +15,7 @@ using osu.Game.Online.API.Requests.Responses; using osu.Framework.Graphics.Effects; using osuTK.Graphics; using osu.Framework.Extensions.Color4Extensions; +using osu.Framework.Graphics.Containers; namespace osu.Game.Screens.Play { @@ -32,6 +36,7 @@ namespace osu.Game.Screens.Play private SpriteIcon downloadIcon; private SpriteIcon playIcon; private ShakeContainer shakeContainer; + private CircularContainer circle; public string TooltipText { @@ -50,9 +55,7 @@ namespace osu.Game.Screens.Play public ReplayDownloadButton(ScoreInfo score) : base(score) { - Size = new Vector2(size); - CornerRadius = size / 2; - Masking = true; + AutoSizeAxes = Axes.Both; } private bool hasReplay => (Model.Value is APILegacyScoreInfo apiScore && apiScore.Replay) || scores.IsAvailableLocally(Model.Value); @@ -60,44 +63,48 @@ namespace osu.Game.Screens.Play [BackgroundDependencyLoader(true)] private void load() { - EdgeEffect = new EdgeEffectParameters - { - Colour = Color4.Black.Opacity(0.4f), - Type = EdgeEffectType.Shadow, - Radius = 5, - }; - InternalChild = shakeContainer = new ShakeContainer { - RelativeSizeAxes = Axes.Both, - Child = button = new OsuClickableContainer + AutoSizeAxes = Axes.Both, + Child = circle = new CircularContainer { - RelativeSizeAxes = Axes.Both, - Children = new Drawable[] + Masking = true, + Size = new Vector2(size), + EdgeEffect = new EdgeEffectParameters { - new Box - { - RelativeSizeAxes = Axes.Both, - Colour = colours.GrayF, - }, - playIcon = new SpriteIcon - { - Icon = FontAwesome.Solid.Play, - Size = Vector2.Zero, - Colour = colours.Gray3, - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - }, - downloadIcon = new SpriteIcon - { - Icon = FontAwesome.Solid.FileDownload, - Size = Vector2.Zero, - Colour = colours.Gray3, - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - }, + Colour = Color4.Black.Opacity(0.4f), + Type = EdgeEffectType.Shadow, + Radius = 5, }, - } + Child = button = new OsuClickableContainer + { + RelativeSizeAxes = Axes.Both, + Children = new Drawable[] + { + new Box + { + RelativeSizeAxes = Axes.Both, + Colour = colours.GrayF, + }, + playIcon = new SpriteIcon + { + Icon = FontAwesome.Solid.Play, + Size = Vector2.Zero, + Colour = colours.Gray3, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + }, + downloadIcon = new SpriteIcon + { + Icon = FontAwesome.Solid.FileDownload, + Size = Vector2.Zero, + Colour = colours.Gray3, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + }, + }, + } + }, }; button.Action = () => @@ -105,7 +112,7 @@ namespace osu.Game.Screens.Play switch (State.Value) { case DownloadState.LocallyAvailable: - game.PresentScore(Model.Value); + game?.PresentScore(Model.Value); break; case DownloadState.NotDownloaded: @@ -123,22 +130,19 @@ namespace osu.Game.Screens.Play switch (state.NewValue) { case DownloadState.Downloading: - FadeEdgeEffectTo(colours.Yellow, 400, Easing.OutQuint); - button.Enabled.Value = false; + circle.FadeEdgeEffectTo(colours.Yellow, 400, Easing.OutQuint); break; case DownloadState.LocallyAvailable: playIcon.ResizeTo(13, 300, Easing.OutQuint); downloadIcon.ResizeTo(Vector2.Zero, 300, Easing.OutExpo); - FadeEdgeEffectTo(Color4.Black.Opacity(0.4f), 400, Easing.OutQuint); - button.Enabled.Value = true; + circle.FadeEdgeEffectTo(Color4.Black.Opacity(0.4f), 400, Easing.OutQuint); break; case DownloadState.NotDownloaded: playIcon.ResizeTo(Vector2.Zero, 300, Easing.OutQuint); downloadIcon.ResizeTo(13, 300, Easing.OutExpo); - FadeEdgeEffectTo(Color4.Black.Opacity(0.4f), 400, Easing.OutQuint); - button.Enabled.Value = true; + circle.FadeEdgeEffectTo(Color4.Black.Opacity(0.4f), 400, Easing.OutQuint); break; } }, true); diff --git a/osu.Game/Screens/Ranking/Pages/ScoreResultsPage.cs b/osu.Game/Screens/Ranking/Pages/ScoreResultsPage.cs index 3068fd77e8..676c1e3adf 100644 --- a/osu.Game/Screens/Ranking/Pages/ScoreResultsPage.cs +++ b/osu.Game/Screens/Ranking/Pages/ScoreResultsPage.cs @@ -173,7 +173,7 @@ namespace osu.Game.Screens.Ranking.Pages { Anchor = Anchor.BottomCentre, Origin = Anchor.BottomCentre, - Margin = new MarginPadding { Bottom = 10 }, + Margin = new MarginPadding { Bottom = 5 }, }, }; From 7d9e21574477ab4fb4818fa66a82841dbe6a6563 Mon Sep 17 00:00:00 2001 From: naoey Date: Sat, 29 Jun 2019 12:29:12 +0530 Subject: [PATCH 063/267] Code quality fixes --- .../Visual/Gameplay/TestSceneReplayDownloadButton.cs | 4 ++-- osu.Game/Online/API/Requests/DownloadReplayRequest.cs | 6 +++++- osu.Game/Screens/Play/SoloResults.cs | 5 ----- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs index 9c87d4cd79..0be848f1d5 100644 --- a/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs +++ b/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs @@ -9,7 +9,6 @@ using osu.Game.Rulesets.Osu; using osu.Game.Scoring; using osu.Game.Screens.Play; using osu.Game.Users; -using osuTK; using System; using System.Collections.Generic; @@ -62,7 +61,8 @@ namespace osu.Game.Tests.Visual.Gameplay { public void SetDownloadState(DownloadState state) => State.Value = state; - public TestReplayDownloadButton(ScoreInfo score) : base(score) + public TestReplayDownloadButton(ScoreInfo score) + : base(score) { } } diff --git a/osu.Game/Online/API/Requests/DownloadReplayRequest.cs b/osu.Game/Online/API/Requests/DownloadReplayRequest.cs index 0eacb4ed7b..6fd052653d 100644 --- a/osu.Game/Online/API/Requests/DownloadReplayRequest.cs +++ b/osu.Game/Online/API/Requests/DownloadReplayRequest.cs @@ -1,4 +1,8 @@ -using osu.Game.Scoring; +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Game.Scoring; + namespace osu.Game.Online.API.Requests { public class DownloadReplayRequest : ArchiveDownloadRequest diff --git a/osu.Game/Screens/Play/SoloResults.cs b/osu.Game/Screens/Play/SoloResults.cs index e8f4a7e182..2b9aec257c 100644 --- a/osu.Game/Screens/Play/SoloResults.cs +++ b/osu.Game/Screens/Play/SoloResults.cs @@ -2,8 +2,6 @@ // See the LICENCE file in the repository root for full licence text. using System.Collections.Generic; -using osu.Framework.Allocation; -using osu.Game.Online.API.Requests.Responses; using osu.Game.Scoring; using osu.Game.Screens.Ranking; using osu.Game.Screens.Ranking.Types; @@ -12,9 +10,6 @@ namespace osu.Game.Screens.Play { public class SoloResults : Results { - [Resolved] - ScoreManager scores { get; set; } - public SoloResults(ScoreInfo score) : base(score) { From d8f6bbc90e2648f6059b8cb9790d16390ff993e4 Mon Sep 17 00:00:00 2001 From: naoey Date: Sat, 29 Jun 2019 12:49:03 +0530 Subject: [PATCH 064/267] Disable replay button when replay is unavailable --- .../Gameplay/TestSceneReplayDownloadButton.cs | 18 +++++---- osu.Game/Screens/Play/ReplayDownloadButton.cs | 40 +++++++++++++++---- 2 files changed, 44 insertions(+), 14 deletions(-) diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs index 0be848f1d5..e71b2d596e 100644 --- a/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs +++ b/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs @@ -26,29 +26,33 @@ namespace osu.Game.Tests.Visual.Gameplay public TestSceneReplayDownloadButton() { - createButton(); + createButton(true); AddStep(@"downloading state", () => downloadButton.SetDownloadState(DownloadState.Downloading)); AddStep(@"locally available state", () => downloadButton.SetDownloadState(DownloadState.LocallyAvailable)); AddStep(@"not downloaded state", () => downloadButton.SetDownloadState(DownloadState.NotDownloaded)); + createButton(false); } - private void createButton() + private void createButton(bool withReplay) { - AddStep(@"create button", () => Child = downloadButton = new TestReplayDownloadButton(getScoreInfo()) + AddStep(withReplay ? @"create button with replay" : "create button without replay", () => { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, + Child = downloadButton = new TestReplayDownloadButton(getScoreInfo(withReplay)) + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + }; }); } - private ScoreInfo getScoreInfo() + private ScoreInfo getScoreInfo(bool replayAvailable) { return new APILegacyScoreInfo { ID = 1, OnlineScoreID = 2553163309, Ruleset = new OsuRuleset().RulesetInfo, - Replay = true, + Replay = replayAvailable, User = new User { Id = 39828, diff --git a/osu.Game/Screens/Play/ReplayDownloadButton.cs b/osu.Game/Screens/Play/ReplayDownloadButton.cs index 0d6a159523..d6ded27cdf 100644 --- a/osu.Game/Screens/Play/ReplayDownloadButton.cs +++ b/osu.Game/Screens/Play/ReplayDownloadButton.cs @@ -42,13 +42,17 @@ namespace osu.Game.Screens.Play { get { - if (scores.IsAvailableLocally(Model.Value)) - return @"Watch replay"; + switch (getReplayAvailability()) + { + case ReplayAvailability.Local: + return @"Watch replay"; - if (Model.Value is APILegacyScoreInfo apiScore && apiScore.Replay) - return @"Download replay"; + case ReplayAvailability.Online: + return @"Download replay"; - return @"Replay unavailable"; + default: + return @"Replay unavailable"; + } } } @@ -58,8 +62,6 @@ namespace osu.Game.Screens.Play AutoSizeAxes = Axes.Both; } - private bool hasReplay => (Model.Value is APILegacyScoreInfo apiScore && apiScore.Replay) || scores.IsAvailableLocally(Model.Value); - [BackgroundDependencyLoader(true)] private void load() { @@ -146,6 +148,30 @@ namespace osu.Game.Screens.Play break; } }, true); + + if (getReplayAvailability() == ReplayAvailability.NotAvailable) + { + button.Enabled.Value = false; + button.Alpha = 0.6f; + } + } + + private ReplayAvailability getReplayAvailability() + { + if (scores.IsAvailableLocally(Model.Value)) + return ReplayAvailability.Local; + + if (Model.Value is APILegacyScoreInfo apiScore && apiScore.Replay) + return ReplayAvailability.Online; + + return ReplayAvailability.NotAvailable; + } + + private enum ReplayAvailability + { + Local, + Online, + NotAvailable, } } } From 6c81d5717849b41fa1f50dcb6c793659246378c6 Mon Sep 17 00:00:00 2001 From: naoey Date: Sat, 29 Jun 2019 16:08:48 +0530 Subject: [PATCH 065/267] Remove hacks for updating model info - Re-retrieve score from database when presenting scores --- osu.Game/Online/DownloadTrackingComposite.cs | 5 ----- osu.Game/OsuGame.cs | 4 ++-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/osu.Game/Online/DownloadTrackingComposite.cs b/osu.Game/Online/DownloadTrackingComposite.cs index 3d230c5475..786afdf450 100644 --- a/osu.Game/Online/DownloadTrackingComposite.cs +++ b/osu.Game/Online/DownloadTrackingComposite.cs @@ -115,11 +115,6 @@ namespace osu.Game.Online if (!s.Equals(Model.Value)) return; - // when model states are being updated from manager, update the model being held by us also so that it will - // be up do date when being consumed for reading files etc. - // the value -> null -> value change is to force the bindable to update the value instance - Model.Value = null; - Model.Value = s; State.Value = state; }); diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index f7f2e1b451..0d1fc704f1 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -261,8 +261,8 @@ namespace osu.Game /// public void PresentScore(ScoreInfo score) { - var databasedScore = ScoreManager.GetScore(score); - var databasedScoreInfo = databasedScore.ScoreInfo; + var databasedScoreInfo = ScoreManager.Query(s => s.OnlineScoreID == score.OnlineScoreID); + var databasedScore = ScoreManager.GetScore(databasedScoreInfo); if (databasedScore.Replay == null) { From 04c467fd812153d9733fcb2a4ca0c63e60af3daa Mon Sep 17 00:00:00 2001 From: naoey Date: Sat, 29 Jun 2019 16:10:16 +0530 Subject: [PATCH 066/267] Add comment --- osu.Game/OsuGame.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 0d1fc704f1..12291c430e 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -261,6 +261,8 @@ namespace osu.Game /// public void PresentScore(ScoreInfo score) { + // The given ScoreInfo may have missing properties if it was retrieved from online data. Re-retrieve it from the database + // to ensure all the required data for presenting a replay are present. var databasedScoreInfo = ScoreManager.Query(s => s.OnlineScoreID == score.OnlineScoreID); var databasedScore = ScoreManager.GetScore(databasedScoreInfo); From 8c5397709b242150f3fc7a2d020420bc86e81902 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Sun, 30 Jun 2019 04:20:42 +0300 Subject: [PATCH 067/267] Use drawables instead of textures --- osu.Game/Online/Leaderboards/DrawableRank.cs | 113 ++++++++++++++++--- 1 file changed, 99 insertions(+), 14 deletions(-) diff --git a/osu.Game/Online/Leaderboards/DrawableRank.cs b/osu.Game/Online/Leaderboards/DrawableRank.cs index 9bbaa28e2a..a944356681 100644 --- a/osu.Game/Online/Leaderboards/DrawableRank.cs +++ b/osu.Game/Online/Leaderboards/DrawableRank.cs @@ -3,43 +3,128 @@ using osu.Framework.Allocation; using osu.Framework.Extensions; -using osu.Framework.Graphics.Sprites; -using osu.Framework.Graphics.Textures; +using osu.Framework.Extensions.Color4Extensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Colour; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Game.Graphics; +using osu.Game.Graphics.Backgrounds; +using osu.Game.Graphics.Sprites; using osu.Game.Scoring; -using System; +using osuTK; +using osuTK.Graphics; namespace osu.Game.Online.Leaderboards { - public class DrawableRank : Sprite + public class DrawableRank : CompositeDrawable { private readonly ScoreRank rank; + private readonly Box background; + private readonly Triangles triangles; + private readonly OsuSpriteText name; + public DrawableRank(ScoreRank rank) { this.rank = rank; + + RelativeSizeAxes = Axes.Both; + FillMode = FillMode.Fit; + FillAspectRatio = 2; + + InternalChild = new DrawSizePreservingFillContainer + { + TargetDrawSize = new Vector2(64, 32), + Strategy = DrawSizePreservationStrategy.Minimum, + Child = new CircularContainer + { + Masking = true, + RelativeSizeAxes = Axes.Both, + Children = new Drawable[] + { + background = new Box + { + RelativeSizeAxes = Axes.Both, + }, + triangles = new Triangles + { + RelativeSizeAxes = Axes.Both, + TriangleScale = 1.25f, + Velocity = 0.5f, + }, + name = new OsuSpriteText + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Padding = new MarginPadding { Top = 5 }, + Font = OsuFont.GetFont(Typeface.Venera, 25), + Text = getRankName(), + }, + } + } + }; } - [BackgroundDependencyLoader(true)] - private void load(TextureStore ts) + [BackgroundDependencyLoader] + private void load(OsuColour colours) { - if (ts == null) - throw new ArgumentNullException(nameof(ts)); + var rankColour = getRankColour(colours); + background.Colour = rankColour; + triangles.ColourDark = rankColour.Darken(0.3f); + triangles.ColourLight = rankColour.Lighten(0.1f); - Texture = ts.Get($@"Grades/{getTextureName()}"); + name.Colour = getRankNameColour(colours); } - private string getTextureName() + private string getRankName() => rank.GetDescription().TrimEnd('+'); + + /// + /// Retrieves the grade background colour. + /// + private Color4 getRankColour(OsuColour colours) { switch (rank) { - default: - return rank.GetDescription(); + case ScoreRank.XH: + case ScoreRank.X: + return colours.PinkDarker; case ScoreRank.SH: - return "SPlus"; + case ScoreRank.S: + return Color4.DarkCyan; + case ScoreRank.A: + return colours.Green; + + case ScoreRank.B: + return Color4.Orange; + + case ScoreRank.C: + return Color4.OrangeRed; + + default: + return colours.Red; + } + } + + /// + /// Retrieves the grade text colour. + /// + private ColourInfo getRankNameColour(OsuColour colours) + { + switch (rank) + { case ScoreRank.XH: - return "SSPlus"; + case ScoreRank.SH: + return ColourInfo.GradientVertical(Color4.White, Color4.LightGray); + + case ScoreRank.X: + case ScoreRank.S: + return ColourInfo.GradientVertical(Color4.Yellow, Color4.Orange); + + default: + return getRankColour(colours).Darken(2); } } } From 372d90de6ad53cb2e7319531f72d4fcc5abe29ce Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Sun, 30 Jun 2019 04:25:47 +0300 Subject: [PATCH 068/267] Remove unnecessary assigns --- osu.Game/Online/Leaderboards/UpdateableRank.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/osu.Game/Online/Leaderboards/UpdateableRank.cs b/osu.Game/Online/Leaderboards/UpdateableRank.cs index 64230a92db..d9e8957281 100644 --- a/osu.Game/Online/Leaderboards/UpdateableRank.cs +++ b/osu.Game/Online/Leaderboards/UpdateableRank.cs @@ -22,10 +22,8 @@ namespace osu.Game.Online.Leaderboards protected override Drawable CreateDrawable(ScoreRank rank) => new DrawableRank(rank) { - RelativeSizeAxes = Axes.Both, Anchor = Anchor.Centre, Origin = Anchor.Centre, - FillMode = FillMode.Fit, }; } } From 20ad486d538ee16c940d7b929365c6e31ed210e7 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Sun, 30 Jun 2019 04:59:33 +0300 Subject: [PATCH 069/267] Scale adjustments --- osu.Game/Online/Leaderboards/DrawableRank.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Online/Leaderboards/DrawableRank.cs b/osu.Game/Online/Leaderboards/DrawableRank.cs index a944356681..f9e5d689d0 100644 --- a/osu.Game/Online/Leaderboards/DrawableRank.cs +++ b/osu.Game/Online/Leaderboards/DrawableRank.cs @@ -50,7 +50,7 @@ namespace osu.Game.Online.Leaderboards triangles = new Triangles { RelativeSizeAxes = Axes.Both, - TriangleScale = 1.25f, + TriangleScale = 1, Velocity = 0.5f, }, name = new OsuSpriteText From 9498fc2426aaaf3599783303a40bfbad548e4799 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Sun, 30 Jun 2019 05:47:52 +0300 Subject: [PATCH 070/267] Use proper colours for rank background and text --- osu.Game/Online/Leaderboards/DrawableRank.cs | 60 ++++++++++---------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/osu.Game/Online/Leaderboards/DrawableRank.cs b/osu.Game/Online/Leaderboards/DrawableRank.cs index f9e5d689d0..68dca97ff9 100644 --- a/osu.Game/Online/Leaderboards/DrawableRank.cs +++ b/osu.Game/Online/Leaderboards/DrawableRank.cs @@ -1,7 +1,6 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -using osu.Framework.Allocation; using osu.Framework.Extensions; using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; @@ -21,10 +20,6 @@ namespace osu.Game.Online.Leaderboards { private readonly ScoreRank rank; - private readonly Box background; - private readonly Triangles triangles; - private readonly OsuSpriteText name; - public DrawableRank(ScoreRank rank) { this.rank = rank; @@ -33,6 +28,7 @@ namespace osu.Game.Online.Leaderboards FillMode = FillMode.Fit; FillAspectRatio = 2; + var rankColour = getRankColour(); InternalChild = new DrawSizePreservingFillContainer { TargetDrawSize = new Vector2(64, 32), @@ -43,21 +39,25 @@ namespace osu.Game.Online.Leaderboards RelativeSizeAxes = Axes.Both, Children = new Drawable[] { - background = new Box + new Box { RelativeSizeAxes = Axes.Both, + Colour = rankColour, }, - triangles = new Triangles + new Triangles { RelativeSizeAxes = Axes.Both, + ColourDark = rankColour.Darken(0.1f), + ColourLight = rankColour.Lighten(0.1f), TriangleScale = 1, - Velocity = 0.5f, + Velocity = 0.25f, }, - name = new OsuSpriteText + new OsuSpriteText { Anchor = Anchor.Centre, Origin = Anchor.Centre, Padding = new MarginPadding { Top = 5 }, + Colour = getRankNameColour(), Font = OsuFont.GetFont(Typeface.Venera, 25), Text = getRankName(), }, @@ -66,65 +66,63 @@ namespace osu.Game.Online.Leaderboards }; } - [BackgroundDependencyLoader] - private void load(OsuColour colours) - { - var rankColour = getRankColour(colours); - background.Colour = rankColour; - triangles.ColourDark = rankColour.Darken(0.3f); - triangles.ColourLight = rankColour.Lighten(0.1f); - - name.Colour = getRankNameColour(colours); - } - private string getRankName() => rank.GetDescription().TrimEnd('+'); /// /// Retrieves the grade background colour. /// - private Color4 getRankColour(OsuColour colours) + private Color4 getRankColour() { switch (rank) { case ScoreRank.XH: case ScoreRank.X: - return colours.PinkDarker; + return OsuColour.FromHex(@"ce1c9d"); case ScoreRank.SH: case ScoreRank.S: - return Color4.DarkCyan; + return OsuColour.FromHex(@"00a8b5"); case ScoreRank.A: - return colours.Green; + return OsuColour.FromHex(@"7cce14"); case ScoreRank.B: - return Color4.Orange; + return OsuColour.FromHex(@"e3b130"); case ScoreRank.C: - return Color4.OrangeRed; + return OsuColour.FromHex(@"f18252"); default: - return colours.Red; + return OsuColour.FromHex(@"e95353"); } } /// /// Retrieves the grade text colour. /// - private ColourInfo getRankNameColour(OsuColour colours) + private ColourInfo getRankNameColour() { switch (rank) { case ScoreRank.XH: case ScoreRank.SH: - return ColourInfo.GradientVertical(Color4.White, Color4.LightGray); + return ColourInfo.GradientVertical(Color4.White, OsuColour.FromHex("afdff0")); case ScoreRank.X: case ScoreRank.S: - return ColourInfo.GradientVertical(Color4.Yellow, Color4.Orange); + return ColourInfo.GradientVertical(OsuColour.FromHex(@"ffe7a8"), OsuColour.FromHex(@"ffb800")); + + case ScoreRank.A: + return OsuColour.FromHex(@"275227"); + + case ScoreRank.B: + return OsuColour.FromHex(@"553a2b"); + + case ScoreRank.C: + return OsuColour.FromHex(@"473625"); default: - return getRankColour(colours).Darken(2); + return OsuColour.FromHex(@"512525"); } } } From c5b3572c285073186c2483c6e7bf69b7d27b3dd0 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Sun, 30 Jun 2019 08:05:45 +0300 Subject: [PATCH 071/267] Add missing details --- osu.Game/Online/Leaderboards/DrawableRank.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/osu.Game/Online/Leaderboards/DrawableRank.cs b/osu.Game/Online/Leaderboards/DrawableRank.cs index 68dca97ff9..4d81ead494 100644 --- a/osu.Game/Online/Leaderboards/DrawableRank.cs +++ b/osu.Game/Online/Leaderboards/DrawableRank.cs @@ -56,10 +56,14 @@ namespace osu.Game.Online.Leaderboards { Anchor = Anchor.Centre, Origin = Anchor.Centre, + Spacing = new Vector2(-3, 0), Padding = new MarginPadding { Top = 5 }, Colour = getRankNameColour(), Font = OsuFont.GetFont(Typeface.Venera, 25), Text = getRankName(), + ShadowColour = Color4.Black.Opacity(0.3f), + ShadowOffset = new Vector2(0, 0.08f), + Shadow = true, }, } } From bfcbb47b77daef12d4cb703c50954f600d9f20d4 Mon Sep 17 00:00:00 2001 From: naoey Date: Sun, 30 Jun 2019 10:56:20 +0530 Subject: [PATCH 072/267] Clean up some more leftover code --- osu.Game/Screens/Play/ReplayDownloadButton.cs | 51 +++++++++---------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/osu.Game/Screens/Play/ReplayDownloadButton.cs b/osu.Game/Screens/Play/ReplayDownloadButton.cs index d6ded27cdf..d715f17109 100644 --- a/osu.Game/Screens/Play/ReplayDownloadButton.cs +++ b/osu.Game/Screens/Play/ReplayDownloadButton.cs @@ -21,17 +21,9 @@ namespace osu.Game.Screens.Play { public class ReplayDownloadButton : DownloadTrackingComposite, IHasTooltip { - private const int size = 40; - - [Resolved(canBeNull: true)] - private OsuGame game { get; set; } - [Resolved] private ScoreManager scores { get; set; } - [Resolved] - private OsuColour colours { get; set; } - private OsuClickableContainer button; private SpriteIcon downloadIcon; private SpriteIcon playIcon; @@ -42,7 +34,7 @@ namespace osu.Game.Screens.Play { get { - switch (getReplayAvailability()) + switch (replayAvailability) { case ReplayAvailability.Local: return @"Watch replay"; @@ -56,6 +48,20 @@ namespace osu.Game.Screens.Play } } + private ReplayAvailability replayAvailability + { + get + { + if (scores.IsAvailableLocally(Model.Value)) + return ReplayAvailability.Local; + + if (Model.Value is APILegacyScoreInfo apiScore && apiScore.Replay) + return ReplayAvailability.Online; + + return ReplayAvailability.NotAvailable; + } + } + public ReplayDownloadButton(ScoreInfo score) : base(score) { @@ -63,7 +69,7 @@ namespace osu.Game.Screens.Play } [BackgroundDependencyLoader(true)] - private void load() + private void load(OsuGame game, OsuColour colours) { InternalChild = shakeContainer = new ShakeContainer { @@ -71,7 +77,7 @@ namespace osu.Game.Screens.Play Child = circle = new CircularContainer { Masking = true, - Size = new Vector2(size), + Size = new Vector2(40), EdgeEffect = new EdgeEffectParameters { Colour = Color4.Black.Opacity(0.4f), @@ -132,41 +138,32 @@ namespace osu.Game.Screens.Play switch (state.NewValue) { case DownloadState.Downloading: + playIcon.ResizeTo(Vector2.Zero, 400, Easing.OutQuint); + downloadIcon.ResizeTo(13, 400, Easing.OutQuint); circle.FadeEdgeEffectTo(colours.Yellow, 400, Easing.OutQuint); break; case DownloadState.LocallyAvailable: - playIcon.ResizeTo(13, 300, Easing.OutQuint); - downloadIcon.ResizeTo(Vector2.Zero, 300, Easing.OutExpo); + playIcon.ResizeTo(13, 400, Easing.OutQuint); + downloadIcon.ResizeTo(Vector2.Zero, 400, Easing.OutQuint); circle.FadeEdgeEffectTo(Color4.Black.Opacity(0.4f), 400, Easing.OutQuint); break; case DownloadState.NotDownloaded: - playIcon.ResizeTo(Vector2.Zero, 300, Easing.OutQuint); - downloadIcon.ResizeTo(13, 300, Easing.OutExpo); + playIcon.ResizeTo(Vector2.Zero, 400, Easing.OutQuint); + downloadIcon.ResizeTo(13, 400, Easing.OutQuint); circle.FadeEdgeEffectTo(Color4.Black.Opacity(0.4f), 400, Easing.OutQuint); break; } }, true); - if (getReplayAvailability() == ReplayAvailability.NotAvailable) + if (replayAvailability == ReplayAvailability.NotAvailable) { button.Enabled.Value = false; button.Alpha = 0.6f; } } - private ReplayAvailability getReplayAvailability() - { - if (scores.IsAvailableLocally(Model.Value)) - return ReplayAvailability.Local; - - if (Model.Value is APILegacyScoreInfo apiScore && apiScore.Replay) - return ReplayAvailability.Online; - - return ReplayAvailability.NotAvailable; - } - private enum ReplayAvailability { Local, From 8703f0ad40ec532c98e1fbdfbd7d03bbf51c0829 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 30 Jun 2019 22:23:48 +0900 Subject: [PATCH 073/267] Change song select initialisation to promote db context sharing --- osu.Game/Screens/Select/BeatmapCarousel.cs | 43 ++++++++++------------ osu.Game/Screens/Select/SongSelect.cs | 2 - 2 files changed, 19 insertions(+), 26 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index a6fbb1ff94..16354534f4 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -11,7 +11,6 @@ using osu.Game.Configuration; using osuTK.Input; using osu.Framework.MathUtils; using System.Diagnostics; -using System.Threading.Tasks; using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Framework.Caching; @@ -64,35 +63,29 @@ namespace osu.Game.Screens.Select public IEnumerable BeatmapSets { get => beatmapSets.Select(g => g.BeatmapSet); - set => loadBeatmapSets(() => value); + set => loadBeatmapSets(value); } - public void LoadBeatmapSetsFromManager(BeatmapManager manager) => loadBeatmapSets(manager.GetAllUsableBeatmapSetsEnumerable); - - private void loadBeatmapSets(Func> beatmapSets) + private void loadBeatmapSets(IEnumerable beatmapSets) { CarouselRoot newRoot = new CarouselRoot(this); - Task.Run(() => - { - beatmapSets().Select(createCarouselSet).Where(g => g != null).ForEach(newRoot.AddChild); - newRoot.Filter(activeCriteria); + beatmapSets.Select(createCarouselSet).Where(g => g != null).ForEach(newRoot.AddChild); + newRoot.Filter(activeCriteria); - // preload drawables as the ctor overhead is quite high currently. - var _ = newRoot.Drawables; - }).ContinueWith(_ => Schedule(() => - { - root = newRoot; - scrollableContent.Clear(false); - itemsCache.Invalidate(); - scrollPositionCache.Invalidate(); + // preload drawables as the ctor overhead is quite high currently. + var _ = newRoot.Drawables; - Schedule(() => - { - BeatmapSetsChanged?.Invoke(); - BeatmapSetsLoaded = true; - }); - })); + root = newRoot; + scrollableContent.Clear(false); + itemsCache.Invalidate(); + scrollPositionCache.Invalidate(); + + Schedule(() => + { + BeatmapSetsChanged?.Invoke(); + BeatmapSetsLoaded = true; + }); } private readonly List yPositions = new List(); @@ -125,13 +118,15 @@ namespace osu.Game.Screens.Select } [BackgroundDependencyLoader(permitNulls: true)] - private void load(OsuConfigManager config) + private void load(OsuConfigManager config, BeatmapManager beatmaps) { config.BindWith(OsuSetting.RandomSelectAlgorithm, RandomAlgorithm); config.BindWith(OsuSetting.SongSelectRightMouseScroll, RightClickScrollingEnabled); RightClickScrollingEnabled.ValueChanged += enabled => RightMouseScrollbar = enabled.NewValue; RightClickScrollingEnabled.TriggerChange(); + + loadBeatmapSets(beatmaps.GetAllUsableBeatmapSetsEnumerable()); } public void RemoveBeatmapSet(BeatmapSetInfo beatmapSet) diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index 7c62a49a97..3581ed5534 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -244,8 +244,6 @@ namespace osu.Game.Screens.Select sampleChangeBeatmap = audio.Samples.Get(@"SongSelect/select-expand"); SampleConfirm = audio.Samples.Get(@"SongSelect/confirm-selection"); - Carousel.LoadBeatmapSetsFromManager(this.beatmaps); - if (dialogOverlay != null) { Schedule(() => From 79fc143422815a9b1335f33c87cfc857b1ad14b8 Mon Sep 17 00:00:00 2001 From: HoLLy Date: Sun, 30 Jun 2019 16:52:39 +0200 Subject: [PATCH 074/267] Only remove .osk files when importing skin archives --- osu.Game/Skinning/SkinManager.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs index cf1e9368bc..00e6fddc6a 100644 --- a/osu.Game/Skinning/SkinManager.cs +++ b/osu.Game/Skinning/SkinManager.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Linq.Expressions; using System.Threading; @@ -56,7 +57,7 @@ namespace osu.Game.Skinning protected override IEnumerable GetStableImportPaths() => GetStableStorage().GetDirectories(ImportFromStablePath); - protected override bool ShouldRemoveArchive(string path) => true; + protected override bool ShouldRemoveArchive(string path) => Path.GetExtension(path)?.ToLowerInvariant() == ".osk"; /// /// Returns a list of all usable s. Includes the special default skin plus all skins from . From 9de4bb342311e0573163dba38c41be8878667567 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 1 Jul 2019 16:12:20 +0900 Subject: [PATCH 075/267] Remove all non-transform LogoVisualisation per-frame allocations --- osu.Game/Screens/Menu/LogoVisualisation.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/osu.Game/Screens/Menu/LogoVisualisation.cs b/osu.Game/Screens/Menu/LogoVisualisation.cs index c6de5857c2..2ba82b5d9b 100644 --- a/osu.Game/Screens/Menu/LogoVisualisation.cs +++ b/osu.Game/Screens/Menu/LogoVisualisation.cs @@ -96,13 +96,13 @@ namespace osu.Game.Screens.Menu var track = beatmap.Value.TrackLoaded ? beatmap.Value.Track : null; var effect = beatmap.Value.BeatmapLoaded ? beatmap.Value.Beatmap.ControlPointInfo.EffectPointAt(track?.CurrentTime ?? Time.Current) : null; - float[] temporalAmplitudes = track?.CurrentAmplitudes.FrequencyAmplitudes ?? new float[256]; + float[] temporalAmplitudes = track?.CurrentAmplitudes.FrequencyAmplitudes; for (int i = 0; i < bars_per_visualiser; i++) { if (track?.IsRunning ?? false) { - float targetAmplitude = temporalAmplitudes[(i + indexOffset) % bars_per_visualiser] * (effect?.KiaiMode == true ? 1 : 0.5f); + float targetAmplitude = (temporalAmplitudes?[(i + indexOffset) % bars_per_visualiser] ?? 0) * (effect?.KiaiMode == true ? 1 : 0.5f); if (targetAmplitude > frequencyAmplitudes[i]) frequencyAmplitudes[i] = targetAmplitude; } @@ -115,7 +115,6 @@ namespace osu.Game.Screens.Menu } indexOffset = (indexOffset + index_change) % bars_per_visualiser; - Scheduler.AddDelayed(updateAmplitudes, time_between_updates); } private void updateColour() @@ -131,7 +130,8 @@ namespace osu.Game.Screens.Menu protected override void LoadComplete() { base.LoadComplete(); - updateAmplitudes(); + + Scheduler.AddDelayed(updateAmplitudes, time_between_updates, true); } protected override void Update() From 0636df5660c50ae08adb2732527fbf11ffb5e412 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 1 Jul 2019 18:13:14 +0900 Subject: [PATCH 076/267] Add support for legacy skins which use animation frames to hide elements --- osu.Game/Skinning/LegacySkin.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/osu.Game/Skinning/LegacySkin.cs b/osu.Game/Skinning/LegacySkin.cs index 7b658f86d0..d6424df9fe 100644 --- a/osu.Game/Skinning/LegacySkin.cs +++ b/osu.Game/Skinning/LegacySkin.cs @@ -81,7 +81,10 @@ namespace osu.Game.Skinning }; } - var texture = GetTexture(componentName); + // temporary allowance is given for skins the fact that stable handles non-animatable items such as hitcircles (incorrectly) + // by (incorrectly) displaying the first frame of animation rather than the non-animated version. + // users have userd this to "hide" certain elements like hit300. + var texture = GetTexture($"{componentName}-0") ?? GetTexture(componentName); if (texture == null) return null; From cd5e1bc4b14297e4f4fd694240ab97f5b0f15df8 Mon Sep 17 00:00:00 2001 From: MaxOhnh Date: Mon, 1 Jul 2019 13:55:09 +0200 Subject: [PATCH 077/267] Replace deflate progress with modified copy-paste of grow mod --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 106 ++++++++++---------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index 2638d5bf78..56f64d14b8 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -1,84 +1,84 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System.Collections.Generic; +using System.Linq; +using osu.Framework.Bindables; using osu.Framework.Graphics; -using osu.Game.Graphics; +using osu.Framework.Graphics.Sprites; +using osu.Game.Configuration; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Objects.Drawables; +using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Objects.Drawables; -using System.Collections.Generic; -using OpenTK; namespace osu.Game.Rulesets.Osu.Mods { - public class OsuModDeflate : Mod, IApplicableToDrawableHitObjects + public class OsuModDeflate : Mod, IReadFromConfig, IApplicableToDrawableHitObjects { public override string Name => "Deflate"; - public override string ShortenedName => "DF"; - public override FontAwesome Icon => FontAwesome.fa_compress; + + public override string Acronym => "DF"; + + public override IconUsage Icon => FontAwesome.Solid.CompressArrowsAlt; + public override ModType Type => ModType.Fun; + public override string Description => "Become one with the approach circle..."; + public override double ScoreMultiplier => 1; + private Bindable increaseFirstObjectVisibility = new Bindable(); + + public void ReadFromConfig(OsuConfigManager config) + { + increaseFirstObjectVisibility = config.GetBindable(OsuSetting.IncreaseFirstObjectVisibility); + } + public void ApplyToDrawableHitObjects(IEnumerable drawables) { - foreach (var drawable in drawables) - drawable.ApplyCustomUpdateState += drawableOnApplyCustomUpdateState; + foreach (var drawable in drawables.Skip(increaseFirstObjectVisibility.Value ? 1 : 0)) + { + switch (drawable) + { + case DrawableSpinner _: + continue; + + default: + drawable.ApplyCustomUpdateState += ApplyCustomState; + break; + } + } } - private void drawableOnApplyCustomUpdateState(DrawableHitObject drawable, ArmedState state) + protected virtual void ApplyCustomState(DrawableHitObject drawable, ArmedState state) { - if (!(drawable is DrawableOsuHitObject d)) - return; - - var h = d.HitObject; - - const float rescale = 2; + var h = (OsuHitObject)drawable.HitObject; + // apply grow effect switch (drawable) { - case DrawableHitCircle c: - c.ApproachCircle.Hide(); - using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt)) - { - var origScale = d.Scale; - d.ScaleTo(1.1f, 1) - .Then() - .ScaleTo(origScale, h.TimePreempt); - } - switch (state) - { - case ArmedState.Miss: - d.FadeOut(100); - break; - case ArmedState.Hit: - d.FadeOut(800) - .ScaleTo(d.Scale * 1.5f, 400, Easing.OutQuad); - break; - } + case DrawableSliderHead _: + case DrawableSliderTail _: + // special cases we should *not* be scaling. break; - case DrawableSlider s: - using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt + 1, true)) + case DrawableSlider _: + case DrawableHitCircle _: { - float origPathWidth = s.Body.PathWidth; - var origBodySize = s.Body.Size; - var origBodyDrawPos = s.Body.DrawPosition; - - // Fits nicely for CS=4, too big on lower CS, too small on higher CS - s.Body.Animate( - b => b.MoveTo(origBodyDrawPos - new Vector2(origPathWidth)).MoveTo(origBodyDrawPos, h.TimePreempt), - b => b.ResizeTo(origBodySize * rescale).ResizeTo(origBodySize, h.TimePreempt), - b => b.TransformTo("PathWidth", origPathWidth * rescale).TransformTo("PathWidth", origPathWidth, h.TimePreempt) - ); - } - break; - case DrawableRepeatPoint rp: - if (!rp.IsFirstRepeat) + using (drawable.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) + drawable.ScaleTo(2f).Then().ScaleTo(1f, h.TimePreempt); // sole difference to grow mod break; - var origSizeRp = rp.Size; - using (d.BeginAbsoluteSequence(h.StartTime - h.TimePreempt + 1, true)) - rp.ResizeTo(origSizeRp * rescale).ResizeTo(origSizeRp, h.TimePreempt); + } + } + + // remove approach circles + switch (drawable) + { + case DrawableHitCircle circle: + // we don't want to see the approach circle + using (circle.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) + circle.ApproachCircle.Hide(); break; } } From 02b9e89f431b3164f5850587ae6eca5df3d67b44 Mon Sep 17 00:00:00 2001 From: MaxOhnh Date: Mon, 1 Jul 2019 14:46:17 +0200 Subject: [PATCH 078/267] Removed old unnecessary change, updated license header and apply deflating onto first object regardless --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 15 ++++----------- .../Objects/Drawables/DrawableRepeatPoint.cs | 2 -- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index 56f64d14b8..56bb55c13e 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -1,5 +1,5 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. using System.Collections.Generic; using System.Linq; @@ -14,7 +14,7 @@ using osu.Game.Rulesets.Osu.Objects.Drawables; namespace osu.Game.Rulesets.Osu.Mods { - public class OsuModDeflate : Mod, IReadFromConfig, IApplicableToDrawableHitObjects + public class OsuModDeflate : Mod, IApplicableToDrawableHitObjects { public override string Name => "Deflate"; @@ -28,16 +28,9 @@ namespace osu.Game.Rulesets.Osu.Mods public override double ScoreMultiplier => 1; - private Bindable increaseFirstObjectVisibility = new Bindable(); - - public void ReadFromConfig(OsuConfigManager config) - { - increaseFirstObjectVisibility = config.GetBindable(OsuSetting.IncreaseFirstObjectVisibility); - } - public void ApplyToDrawableHitObjects(IEnumerable drawables) { - foreach (var drawable in drawables.Skip(increaseFirstObjectVisibility.Value ? 1 : 0)) + foreach (var drawable in drawables) { switch (drawable) { diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs index 29a84b53a9..cce6dfe106 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs @@ -41,8 +41,6 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables }; } - public bool IsFirstRepeat => repeatPoint.RepeatIndex == 0; - protected override void CheckForResult(bool userTriggered, double timeOffset) { if (repeatPoint.StartTime <= Time.Current) From fc8dee612388d453437dce5f19985ade52ead788 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 1 Jul 2019 23:26:53 +0930 Subject: [PATCH 079/267] Fix typo --- osu.Game/Skinning/LegacySkin.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Skinning/LegacySkin.cs b/osu.Game/Skinning/LegacySkin.cs index d6424df9fe..513a024a36 100644 --- a/osu.Game/Skinning/LegacySkin.cs +++ b/osu.Game/Skinning/LegacySkin.cs @@ -83,7 +83,7 @@ namespace osu.Game.Skinning // temporary allowance is given for skins the fact that stable handles non-animatable items such as hitcircles (incorrectly) // by (incorrectly) displaying the first frame of animation rather than the non-animated version. - // users have userd this to "hide" certain elements like hit300. + // users have used this to "hide" certain elements like hit300. var texture = GetTexture($"{componentName}-0") ?? GetTexture(componentName); if (texture == null) From 313648b8694863772dcd7e8750be2f76d6e67fe0 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 00:34:43 +0900 Subject: [PATCH 080/267] Update framework --- osu.Game/osu.Game.csproj | 2 +- osu.iOS.props | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index b430c36264..d6a998bf55 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -15,7 +15,7 @@ - + diff --git a/osu.iOS.props b/osu.iOS.props index 48d2e6846a..de4a14f01f 100644 --- a/osu.iOS.props +++ b/osu.iOS.props @@ -105,8 +105,8 @@ - - + + From 48a828b7466a6ce369d4d977af8670ca1c38f889 Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Mon, 1 Jul 2019 17:49:37 +0200 Subject: [PATCH 081/267] Removed redundant imports and fixed indentation --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index 56bb55c13e..cbefc42c3b 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -2,11 +2,8 @@ // See the LICENCE file in the repository root for full licence text. using System.Collections.Generic; -using System.Linq; -using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Framework.Graphics.Sprites; -using osu.Game.Configuration; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects; @@ -58,11 +55,11 @@ namespace osu.Game.Rulesets.Osu.Mods case DrawableSlider _: case DrawableHitCircle _: - { - using (drawable.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) - drawable.ScaleTo(2f).Then().ScaleTo(1f, h.TimePreempt); // sole difference to grow mod - break; - } + { + using (drawable.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) + drawable.ScaleTo(2f).Then().ScaleTo(1f, h.TimePreempt); // sole difference to grow mod + break; + } } // remove approach circles From 72e5cbb07f6ec411c5774c8dbc19229ad2625507 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Tue, 2 Jul 2019 01:45:09 +0300 Subject: [PATCH 082/267] Add checkbox for hiding health bar --- osu.Game/Configuration/OsuConfigManager.cs | 2 ++ .../Overlays/Settings/Sections/Gameplay/GeneralSettings.cs | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/osu.Game/Configuration/OsuConfigManager.cs b/osu.Game/Configuration/OsuConfigManager.cs index 795f0b43f7..b5097e95c8 100644 --- a/osu.Game/Configuration/OsuConfigManager.cs +++ b/osu.Game/Configuration/OsuConfigManager.cs @@ -77,6 +77,7 @@ namespace osu.Game.Configuration Set(OsuSetting.BlurLevel, 0, 0, 1, 0.01); Set(OsuSetting.ShowInterface, true); + Set(OsuSetting.HideHealthBar, true); Set(OsuSetting.KeyOverlay, false); Set(OsuSetting.FloatingComments, false); @@ -131,6 +132,7 @@ namespace osu.Game.Configuration KeyOverlay, FloatingComments, ShowInterface, + HideHealthBar, MouseDisableButtons, MouseDisableWheel, AudioOffset, diff --git a/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs b/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs index 997d1354b3..2d208c5f71 100644 --- a/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs +++ b/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs @@ -35,6 +35,11 @@ namespace osu.Game.Overlays.Settings.Sections.Gameplay Bindable = config.GetBindable(OsuSetting.ShowInterface) }, new SettingsCheckbox + { + LabelText = "Hide health bar if you can't fail", + Bindable = config.GetBindable(OsuSetting.HideHealthBar), + }, + new SettingsCheckbox { LabelText = "Always show key overlay", Bindable = config.GetBindable(OsuSetting.KeyOverlay) From a8e8650dddb79298df8e4a99fddae7500de2cf10 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Tue, 2 Jul 2019 01:47:39 +0300 Subject: [PATCH 083/267] Move blocking fail logic into a base class --- osu.Game.Rulesets.Osu/Mods/OsuModRelax.cs | 7 +----- osu.Game/Rulesets/Mods/ModBlockFail.cs | 30 +++++++++++++++++++++++ osu.Game/Rulesets/Mods/ModNoFail.cs | 10 +------- osu.Game/Rulesets/Mods/ModRelax.cs | 2 +- osu.sln | 12 +++++++++ 5 files changed, 45 insertions(+), 16 deletions(-) create mode 100644 osu.Game/Rulesets/Mods/ModBlockFail.cs diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModRelax.cs b/osu.Game.Rulesets.Osu/Mods/OsuModRelax.cs index a6a81fa989..5625028707 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModRelax.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModRelax.cs @@ -9,18 +9,15 @@ using osu.Game.Rulesets.Objects.Types; using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Objects.Drawables; using osu.Game.Rulesets.UI; -using osu.Game.Screens.Play; using static osu.Game.Input.Handlers.ReplayInputHandler; namespace osu.Game.Rulesets.Osu.Mods { - public class OsuModRelax : ModRelax, IApplicableFailOverride, IUpdatableByPlayfield, IApplicableToDrawableRuleset, IApplicableToHUD + public class OsuModRelax : ModRelax, IUpdatableByPlayfield, IApplicableToDrawableRuleset { public override string Description => @"You don't need to click. Give your clicking/tapping fingers a break from the heat of things."; public override Type[] IncompatibleMods => base.IncompatibleMods.Append(typeof(OsuModAutopilot)).ToArray(); - public bool AllowFail => false; - public void Update(Playfield playfield) { bool requiresHold = false; @@ -86,7 +83,5 @@ namespace osu.Game.Rulesets.Osu.Mods osuInputManager = (OsuInputManager)drawableRuleset.KeyBindingInputManager; osuInputManager.AllowUserPresses = false; } - - public void ApplyToHUD(HUDOverlay overlay) => overlay.HealthDisplay.Hide(); } } diff --git a/osu.Game/Rulesets/Mods/ModBlockFail.cs b/osu.Game/Rulesets/Mods/ModBlockFail.cs new file mode 100644 index 0000000000..42ec82f8aa --- /dev/null +++ b/osu.Game/Rulesets/Mods/ModBlockFail.cs @@ -0,0 +1,30 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Bindables; +using osu.Game.Configuration; +using osu.Game.Screens.Play; + +namespace osu.Game.Rulesets.Mods +{ + public abstract class ModBlockFail : Mod, IApplicableFailOverride, IApplicableToHUD, IReadFromConfig + { + private Bindable hideHealthBar = new Bindable(); + + /// + /// We never fail, 'yo. + /// + public bool AllowFail => false; + + public void ReadFromConfig(OsuConfigManager config) + { + hideHealthBar = config.GetBindable(OsuSetting.HideHealthBar); + } + + public void ApplyToHUD(HUDOverlay overlay) + { + if (hideHealthBar.Value) + overlay.HealthDisplay.Hide(); + } + } +} diff --git a/osu.Game/Rulesets/Mods/ModNoFail.cs b/osu.Game/Rulesets/Mods/ModNoFail.cs index 171ebb78bc..49ee3354c3 100644 --- a/osu.Game/Rulesets/Mods/ModNoFail.cs +++ b/osu.Game/Rulesets/Mods/ModNoFail.cs @@ -4,11 +4,10 @@ using System; using osu.Framework.Graphics.Sprites; using osu.Game.Graphics; -using osu.Game.Screens.Play; namespace osu.Game.Rulesets.Mods { - public abstract class ModNoFail : Mod, IApplicableFailOverride, IApplicableToHUD + public abstract class ModNoFail : ModBlockFail { public override string Name => "No Fail"; public override string Acronym => "NF"; @@ -18,12 +17,5 @@ namespace osu.Game.Rulesets.Mods public override double ScoreMultiplier => 0.5; public override bool Ranked => true; public override Type[] IncompatibleMods => new[] { typeof(ModRelax), typeof(ModSuddenDeath), typeof(ModAutoplay) }; - - /// - /// We never fail, 'yo. - /// - public bool AllowFail => false; - - public void ApplyToHUD(HUDOverlay overlay) => overlay.HealthDisplay.Hide(); } } diff --git a/osu.Game/Rulesets/Mods/ModRelax.cs b/osu.Game/Rulesets/Mods/ModRelax.cs index 4feb89186c..7c355577d4 100644 --- a/osu.Game/Rulesets/Mods/ModRelax.cs +++ b/osu.Game/Rulesets/Mods/ModRelax.cs @@ -7,7 +7,7 @@ using osu.Game.Graphics; namespace osu.Game.Rulesets.Mods { - public abstract class ModRelax : Mod + public abstract class ModRelax : ModBlockFail { public override string Name => "Relax"; public override string Acronym => "RX"; diff --git a/osu.sln b/osu.sln index 688339fab5..cee2be106e 100644 --- a/osu.sln +++ b/osu.sln @@ -29,6 +29,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Game.Tournament", "osu. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Game.Tournament.Tests", "osu.Game.Tournament.Tests\osu.Game.Tournament.Tests.csproj", "{5789E78D-38F9-4072-AB7B-978F34B2C17F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Framework", "..\..\..\Desktop\osu-framework-master\osu.Framework\osu.Framework.csproj", "{05FD51FA-88EA-4895-85A0-FDE2D7DCF6F2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Framework.NativeLibs", "..\..\..\Desktop\osu-framework-master\osu.Framework.NativeLibs\osu.Framework.NativeLibs.csproj", "{2E9365F4-25A1-41D1-90ED-F91B5A946DBD}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -87,6 +91,14 @@ Global {5789E78D-38F9-4072-AB7B-978F34B2C17F}.Debug|Any CPU.Build.0 = Debug|Any CPU {5789E78D-38F9-4072-AB7B-978F34B2C17F}.Release|Any CPU.ActiveCfg = Release|Any CPU {5789E78D-38F9-4072-AB7B-978F34B2C17F}.Release|Any CPU.Build.0 = Release|Any CPU + {05FD51FA-88EA-4895-85A0-FDE2D7DCF6F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {05FD51FA-88EA-4895-85A0-FDE2D7DCF6F2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {05FD51FA-88EA-4895-85A0-FDE2D7DCF6F2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {05FD51FA-88EA-4895-85A0-FDE2D7DCF6F2}.Release|Any CPU.Build.0 = Release|Any CPU + {2E9365F4-25A1-41D1-90ED-F91B5A946DBD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E9365F4-25A1-41D1-90ED-F91B5A946DBD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E9365F4-25A1-41D1-90ED-F91B5A946DBD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E9365F4-25A1-41D1-90ED-F91B5A946DBD}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 6a79349f4aefde437804ca8db4e6025c61e85e02 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Tue, 2 Jul 2019 02:19:59 +0300 Subject: [PATCH 084/267] Move health display out of the visibility container --- osu.Game/Screens/Play/HUDOverlay.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/osu.Game/Screens/Play/HUDOverlay.cs b/osu.Game/Screens/Play/HUDOverlay.cs index 017bf70133..6488bf9452 100644 --- a/osu.Game/Screens/Play/HUDOverlay.cs +++ b/osu.Game/Screens/Play/HUDOverlay.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Linq; using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Framework.Graphics; @@ -40,6 +41,7 @@ namespace osu.Game.Screens.Play private readonly IReadOnlyList mods; private Bindable showHud; + private Bindable hideHealthbar; private readonly Container visibilityContainer; private readonly BindableBool replayLoaded = new BindableBool(); @@ -77,11 +79,11 @@ namespace osu.Game.Screens.Play ComboCounter = CreateComboCounter(), }, }, - HealthDisplay = CreateHealthDisplay(), Progress = CreateProgress(), ModDisplay = CreateModsContainer(), } }, + HealthDisplay = CreateHealthDisplay(), PlayerSettingsOverlay = CreatePlayerSettingsOverlay(), new FillFlowContainer { @@ -112,8 +114,14 @@ namespace osu.Game.Screens.Play ModDisplay.Current.Value = mods; + hideHealthbar = config.GetBindable(OsuSetting.HideHealthBar); showHud = config.GetBindable(OsuSetting.ShowInterface); - showHud.ValueChanged += visible => visibilityContainer.FadeTo(visible.NewValue ? 1 : 0, duration); + showHud.ValueChanged += visible => + { + visibilityContainer.FadeTo(visible.NewValue ? 1 : 0, duration); + if (!(hideHealthbar.Value && mods.OfType().Any())) + HealthDisplay.FadeTo(visible.NewValue ? 1 : 0, duration); + }; showHud.TriggerChange(); if (!showHud.Value && !hasShownNotificationOnce) From 7c1fc075e0ca6243eb9aa6028c583e580070db2c Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Tue, 2 Jul 2019 02:24:04 +0300 Subject: [PATCH 085/267] Remove mistaken change --- osu.sln | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/osu.sln b/osu.sln index cee2be106e..688339fab5 100644 --- a/osu.sln +++ b/osu.sln @@ -29,10 +29,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Game.Tournament", "osu. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Game.Tournament.Tests", "osu.Game.Tournament.Tests\osu.Game.Tournament.Tests.csproj", "{5789E78D-38F9-4072-AB7B-978F34B2C17F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Framework", "..\..\..\Desktop\osu-framework-master\osu.Framework\osu.Framework.csproj", "{05FD51FA-88EA-4895-85A0-FDE2D7DCF6F2}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "osu.Framework.NativeLibs", "..\..\..\Desktop\osu-framework-master\osu.Framework.NativeLibs\osu.Framework.NativeLibs.csproj", "{2E9365F4-25A1-41D1-90ED-F91B5A946DBD}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -91,14 +87,6 @@ Global {5789E78D-38F9-4072-AB7B-978F34B2C17F}.Debug|Any CPU.Build.0 = Debug|Any CPU {5789E78D-38F9-4072-AB7B-978F34B2C17F}.Release|Any CPU.ActiveCfg = Release|Any CPU {5789E78D-38F9-4072-AB7B-978F34B2C17F}.Release|Any CPU.Build.0 = Release|Any CPU - {05FD51FA-88EA-4895-85A0-FDE2D7DCF6F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {05FD51FA-88EA-4895-85A0-FDE2D7DCF6F2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {05FD51FA-88EA-4895-85A0-FDE2D7DCF6F2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {05FD51FA-88EA-4895-85A0-FDE2D7DCF6F2}.Release|Any CPU.Build.0 = Release|Any CPU - {2E9365F4-25A1-41D1-90ED-F91B5A946DBD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2E9365F4-25A1-41D1-90ED-F91B5A946DBD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E9365F4-25A1-41D1-90ED-F91B5A946DBD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2E9365F4-25A1-41D1-90ED-F91B5A946DBD}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 8e54990f62a72dbd3789549fce975ff02e62a884 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 13:40:40 +0900 Subject: [PATCH 086/267] Add database statistics to GlobalStatistics --- osu.Game/Database/DatabaseContextFactory.cs | 19 ++++++++++++++++++- osu.Game/Database/OsuDbContext.cs | 19 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/osu.Game/Database/DatabaseContextFactory.cs b/osu.Game/Database/DatabaseContextFactory.cs index 554337c477..bb6bef1c50 100644 --- a/osu.Game/Database/DatabaseContextFactory.cs +++ b/osu.Game/Database/DatabaseContextFactory.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Threading; using Microsoft.EntityFrameworkCore.Storage; using osu.Framework.Platform; +using osu.Framework.Statistics; namespace osu.Game.Database { @@ -31,11 +32,20 @@ namespace osu.Game.Database recycleThreadContexts(); } + private static readonly GlobalStatistic reads = GlobalStatistics.Get("Database", "Get (Read)"); + private static readonly GlobalStatistic writes = GlobalStatistics.Get("Database", "Get (Write)"); + private static readonly GlobalStatistic commits = GlobalStatistics.Get("Database", "Commits"); + private static readonly GlobalStatistic rollbacks = GlobalStatistics.Get("Database", "Rollbacks"); + /// /// Get a context for the current thread for read-only usage. /// If a is in progress, the existing write-safe context will be returned. /// - public OsuDbContext Get() => threadContexts.Value; + public OsuDbContext Get() + { + reads.Value++; + return threadContexts.Value; + } /// /// Request a context for write usage. Can be consumed in a nested fashion (and will return the same underlying context). @@ -45,6 +55,7 @@ namespace osu.Game.Database /// A usage containing a usable context. public DatabaseWriteUsage GetForWrite(bool withTransaction = true) { + writes.Value++; Monitor.Enter(writeLock); OsuDbContext context; @@ -90,9 +101,15 @@ namespace osu.Game.Database if (usages == 0) { if (currentWriteDidError) + { + rollbacks.Value++; currentWriteTransaction?.Rollback(); + } else + { + commits.Value++; currentWriteTransaction?.Commit(); + } if (currentWriteDidWrite || currentWriteDidError) { diff --git a/osu.Game/Database/OsuDbContext.cs b/osu.Game/Database/OsuDbContext.cs index d31d7cbff7..538ec41b3d 100644 --- a/osu.Game/Database/OsuDbContext.cs +++ b/osu.Game/Database/OsuDbContext.cs @@ -6,6 +6,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.Extensions.Logging; using osu.Framework.Logging; +using osu.Framework.Statistics; using osu.Game.Beatmaps; using osu.Game.Configuration; using osu.Game.IO; @@ -34,6 +35,8 @@ namespace osu.Game.Database private static readonly Lazy logger = new Lazy(() => new OsuDbLoggerFactory()); + private static readonly GlobalStatistic contexts = GlobalStatistics.Get("Database", "Contexts"); + static OsuDbContext() { // required to initialise native SQLite libraries on some platforms. @@ -76,6 +79,8 @@ namespace osu.Game.Database connection.Close(); throw; } + + contexts.Value++; } ~OsuDbContext() @@ -85,6 +90,20 @@ namespace osu.Game.Database Dispose(); } + private bool isDisposed; + + public override void Dispose() + { + if (isDisposed) return; + + isDisposed = true; + + base.Dispose(); + + contexts.Value--; + GC.SuppressFinalize(this); + } + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { base.OnConfiguring(optionsBuilder); From 2645967dc4c3aa26ae1c53a8daf5a9ed53b68ce9 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 15:17:35 +0900 Subject: [PATCH 087/267] Fix wave-based overlays always being present before initial display --- .../Graphics/Containers/OsuFocusedOverlayContainer.cs | 2 +- osu.Game/Graphics/Containers/WaveContainer.cs | 9 ++------- osu.Game/Overlays/WaveOverlayContainer.cs | 4 ++++ 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/osu.Game/Graphics/Containers/OsuFocusedOverlayContainer.cs b/osu.Game/Graphics/Containers/OsuFocusedOverlayContainer.cs index f6db3102f2..5606328575 100644 --- a/osu.Game/Graphics/Containers/OsuFocusedOverlayContainer.cs +++ b/osu.Game/Graphics/Containers/OsuFocusedOverlayContainer.cs @@ -15,7 +15,7 @@ using osu.Game.Overlays; namespace osu.Game.Graphics.Containers { - public class OsuFocusedOverlayContainer : FocusedOverlayContainer, IPreviewTrackOwner, IKeyBindingHandler + public abstract class OsuFocusedOverlayContainer : FocusedOverlayContainer, IPreviewTrackOwner, IKeyBindingHandler { private SampleChannel samplePopIn; private SampleChannel samplePopOut; diff --git a/osu.Game/Graphics/Containers/WaveContainer.cs b/osu.Game/Graphics/Containers/WaveContainer.cs index f87909ab17..64a897088b 100644 --- a/osu.Game/Graphics/Containers/WaveContainer.cs +++ b/osu.Game/Graphics/Containers/WaveContainer.cs @@ -95,6 +95,7 @@ namespace osu.Game.Graphics.Containers AddInternal(contentContainer = new Container { RelativeSizeAxes = Axes.Both, + RelativePositionAxes = Axes.Both, Anchor = Anchor.BottomCentre, Origin = Anchor.BottomCentre, }); @@ -105,21 +106,15 @@ namespace osu.Game.Graphics.Containers foreach (var w in wavesContainer.Children) w.Show(); - this.FadeIn(100, Easing.OutQuint); contentContainer.MoveToY(0, APPEAR_DURATION, Easing.OutQuint); - - this.FadeIn(100, Easing.OutQuint); } protected override void PopOut() { - this.FadeOut(DISAPPEAR_DURATION, Easing.InQuint); - contentContainer.MoveToY(DrawHeight * 2f, DISAPPEAR_DURATION, Easing.In); - foreach (var w in wavesContainer.Children) w.Hide(); - this.FadeOut(DISAPPEAR_DURATION, Easing.InQuint); + contentContainer.MoveToY(2, DISAPPEAR_DURATION, Easing.In); } protected override void UpdateAfterChildren() diff --git a/osu.Game/Overlays/WaveOverlayContainer.cs b/osu.Game/Overlays/WaveOverlayContainer.cs index 05d3e7df0a..5059b136ee 100644 --- a/osu.Game/Overlays/WaveOverlayContainer.cs +++ b/osu.Game/Overlays/WaveOverlayContainer.cs @@ -25,13 +25,17 @@ namespace osu.Game.Overlays protected override void PopIn() { base.PopIn(); + Waves.Show(); + this.FadeIn(100, Easing.OutQuint); } protected override void PopOut() { base.PopOut(); + Waves.Hide(); + this.FadeOut(WaveContainer.DISAPPEAR_DURATION, Easing.InQuint); } } } From d27a0db45c2bfe2df8e7788c1c9b8cda5682ac2f Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 15:21:57 +0900 Subject: [PATCH 088/267] Enforce StartHidden on relevant overlays --- osu.Game/Graphics/Containers/WaveContainer.cs | 2 ++ osu.Game/Overlays/WaveOverlayContainer.cs | 2 ++ 2 files changed, 4 insertions(+) diff --git a/osu.Game/Graphics/Containers/WaveContainer.cs b/osu.Game/Graphics/Containers/WaveContainer.cs index 64a897088b..9050e775f7 100644 --- a/osu.Game/Graphics/Containers/WaveContainer.cs +++ b/osu.Game/Graphics/Containers/WaveContainer.cs @@ -29,6 +29,8 @@ namespace osu.Game.Graphics.Containers protected override Container Content => contentContainer; + protected override bool StartHidden => true; + public Color4 FirstWaveColour { get => firstWave.Colour; diff --git a/osu.Game/Overlays/WaveOverlayContainer.cs b/osu.Game/Overlays/WaveOverlayContainer.cs index 5059b136ee..5c87096dd4 100644 --- a/osu.Game/Overlays/WaveOverlayContainer.cs +++ b/osu.Game/Overlays/WaveOverlayContainer.cs @@ -14,6 +14,8 @@ namespace osu.Game.Overlays protected override bool BlockNonPositionalInput => true; protected override Container Content => Waves; + protected override bool StartHidden => true; + protected WaveOverlayContainer() { AddInternal(Waves = new WaveContainer From 451765784a9f5324c1f011e6c9593e714ffe749b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 15:17:15 +0900 Subject: [PATCH 089/267] Centralise SocialOverlay's scheduling logic Just some clean-ups to make it easier to confirm correct logic --- osu.Game/Overlays/SocialOverlay.cs | 91 +++++++++++++++--------------- 1 file changed, 46 insertions(+), 45 deletions(-) diff --git a/osu.Game/Overlays/SocialOverlay.cs b/osu.Game/Overlays/SocialOverlay.cs index 780a80b4fc..4def249200 100644 --- a/osu.Game/Overlays/SocialOverlay.cs +++ b/osu.Game/Overlays/SocialOverlay.cs @@ -66,24 +66,64 @@ namespace osu.Game.Overlays } }; - Header.Tabs.Current.ValueChanged += _ => Scheduler.AddOnce(updateSearch); + Header.Tabs.Current.ValueChanged += _ => queueUpdate(); - Filter.Tabs.Current.ValueChanged += _ => Scheduler.AddOnce(updateSearch); + Filter.Tabs.Current.ValueChanged += _ => queueUpdate(); Filter.DisplayStyleControl.DisplayStyle.ValueChanged += style => recreatePanels(style.NewValue); - Filter.DisplayStyleControl.Dropdown.Current.ValueChanged += _ => Scheduler.AddOnce(updateSearch); + Filter.DisplayStyleControl.Dropdown.Current.ValueChanged += _ => queueUpdate(); + currentQuery.BindTo(Filter.Search.Current); currentQuery.ValueChanged += query => { queryChangedDebounce?.Cancel(); if (string.IsNullOrEmpty(query.NewValue)) - Scheduler.AddOnce(updateSearch); + queueUpdate(); else queryChangedDebounce = Scheduler.AddDelayed(updateSearch, 500); }; + } - currentQuery.BindTo(Filter.Search.Current); + private APIRequest getUsersRequest; + + private readonly Bindable currentQuery = new Bindable(); + + private ScheduledDelegate queryChangedDebounce; + + private void queueUpdate() => Scheduler.AddOnce(updateSearch); + + private void updateSearch() + { + queryChangedDebounce?.Cancel(); + + if (!IsLoaded) + return; + + Users = null; + clearPanels(); + loading.Hide(); + getUsersRequest?.Cancel(); + + if (API?.IsLoggedIn != true) + return; + + switch (Header.Tabs.Current.Value) + { + case SocialTab.Friends: + var friendRequest = new GetFriendsRequest(); // TODO filter arguments? + friendRequest.Success += updateUsers; + API.Queue(getUsersRequest = friendRequest); + break; + + default: + var userRequest = new GetUsersRequest(); // TODO filter arguments! + userRequest.Success += response => updateUsers(response.Select(r => r.User)); + API.Queue(getUsersRequest = userRequest); + break; + } + + loading.Show(); } private void recreatePanels(PanelDisplayStyle displayStyle) @@ -133,45 +173,6 @@ namespace osu.Game.Overlays }); } - private APIRequest getUsersRequest; - - private readonly Bindable currentQuery = new Bindable(); - - private ScheduledDelegate queryChangedDebounce; - - private void updateSearch() - { - queryChangedDebounce?.Cancel(); - - if (!IsLoaded) - return; - - Users = null; - clearPanels(); - loading.Hide(); - getUsersRequest?.Cancel(); - - if (API?.IsLoggedIn != true) - return; - - switch (Header.Tabs.Current.Value) - { - case SocialTab.Friends: - var friendRequest = new GetFriendsRequest(); // TODO filter arguments? - friendRequest.Success += updateUsers; - API.Queue(getUsersRequest = friendRequest); - break; - - default: - var userRequest = new GetUsersRequest(); // TODO filter arguments! - userRequest.Success += response => updateUsers(response.Select(r => r.User)); - API.Queue(getUsersRequest = userRequest); - break; - } - - loading.Show(); - } - private void updateUsers(IEnumerable newUsers) { Users = newUsers; @@ -193,7 +194,7 @@ namespace osu.Game.Overlays switch (state) { case APIState.Online: - Scheduler.AddOnce(updateSearch); + queueUpdate(); break; default: From 29bb227de28fc264a77ded4cc1180e0a28244b55 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 16:28:06 +0900 Subject: [PATCH 090/267] Avoid Intro screen holding references to the intro beatmap --- osu.Game/Screens/Menu/Intro.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/osu.Game/Screens/Menu/Intro.cs b/osu.Game/Screens/Menu/Intro.cs index c52e8541c5..dab5066c52 100644 --- a/osu.Game/Screens/Menu/Intro.cs +++ b/osu.Game/Screens/Menu/Intro.cs @@ -86,6 +86,7 @@ namespace osu.Game.Screens.Menu if (!resuming) { Beatmap.Value = introBeatmap; + introBeatmap = null; if (menuVoice.Value) welcome.Play(); @@ -94,7 +95,10 @@ namespace osu.Game.Screens.Menu { // Only start the current track if it is the menu music. A beatmap's track is started when entering the Main Manu. if (menuMusic.Value) + { track.Start(); + track = null; + } LoadComponentAsync(mainMenu = new MainMenu()); From 6c7b97931e2642090c7d28c8779498d4a46959f3 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 17:45:46 +0900 Subject: [PATCH 091/267] Avoid using a BufferedContainer for backgrounds unless required --- osu.Game/Graphics/Backgrounds/Background.cs | 36 ++++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/osu.Game/Graphics/Backgrounds/Background.cs b/osu.Game/Graphics/Backgrounds/Background.cs index db055d15e5..8fdb8ebcdd 100644 --- a/osu.Game/Graphics/Backgrounds/Background.cs +++ b/osu.Game/Graphics/Backgrounds/Background.cs @@ -6,23 +6,28 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Textures; +using osu.Framework.Graphics.Transforms; +using osuTK; namespace osu.Game.Graphics.Backgrounds { - public class Background : BufferedContainer + /// + /// A background which offer blurring on demand. + /// + public class Background : CompositeDrawable { public Sprite Sprite; private readonly string textureName; + private BufferedContainer bufferedContainer; + public Background(string textureName = @"") { - CacheDrawnFrameBuffer = true; - this.textureName = textureName; RelativeSizeAxes = Axes.Both; - Add(Sprite = new Sprite + AddInternal(Sprite = new Sprite { RelativeSizeAxes = Axes.Both, Anchor = Anchor.Centre, @@ -37,5 +42,28 @@ namespace osu.Game.Graphics.Backgrounds if (!string.IsNullOrEmpty(textureName)) Sprite.Texture = textures.Get(textureName); } + + public Vector2 BlurSigma => bufferedContainer?.BlurSigma ?? Vector2.Zero; + + /// + /// Smoothly adjusts over time. + /// + /// A to which further transforms can be added. + public void BlurTo(Vector2 newBlurSigma, double duration = 0, Easing easing = Easing.None) + { + if (bufferedContainer == null) + { + RemoveInternal(Sprite); + + AddInternal(bufferedContainer = new BufferedContainer + { + CacheDrawnFrameBuffer = true, + RelativeSizeAxes = Axes.Both, + Child = Sprite + }); + } + + bufferedContainer.BlurTo(newBlurSigma, duration, easing); + } } } From 7b2227c5053f78fb3bda55854259fa7a6422e768 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 17:47:19 +0900 Subject: [PATCH 092/267] Fix xmldoc --- osu.Game/Graphics/Backgrounds/Background.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Graphics/Backgrounds/Background.cs b/osu.Game/Graphics/Backgrounds/Background.cs index 8fdb8ebcdd..526b3da8a6 100644 --- a/osu.Game/Graphics/Backgrounds/Background.cs +++ b/osu.Game/Graphics/Backgrounds/Background.cs @@ -12,7 +12,7 @@ using osuTK; namespace osu.Game.Graphics.Backgrounds { /// - /// A background which offer blurring on demand. + /// A background which offers blurring via a on demand. /// public class Background : CompositeDrawable { From 587be955c3e20d667067660be5b8aa9d1f72aa31 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 17:57:23 +0900 Subject: [PATCH 093/267] Increase number of backgrounds in line with resources --- osu.Game/Screens/Backgrounds/BackgroundScreenDefault.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Backgrounds/BackgroundScreenDefault.cs b/osu.Game/Screens/Backgrounds/BackgroundScreenDefault.cs index 7092ac0c4a..55338ea01a 100644 --- a/osu.Game/Screens/Backgrounds/BackgroundScreenDefault.cs +++ b/osu.Game/Screens/Backgrounds/BackgroundScreenDefault.cs @@ -18,7 +18,7 @@ namespace osu.Game.Screens.Backgrounds private Background background; private int currentDisplay; - private const int background_count = 5; + private const int background_count = 7; private string backgroundName => $@"Menu/menu-background-{currentDisplay % background_count + 1}"; From 79b0deb353c0d13bcf0a86ad46059ef2b82dc05a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 17:59:25 +0900 Subject: [PATCH 094/267] Update resources reference --- osu.Game/osu.Game.csproj | 2 +- osu.iOS.props | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index d6a998bf55..8c4f5dcb7d 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -14,7 +14,7 @@ - + diff --git a/osu.iOS.props b/osu.iOS.props index de4a14f01f..113874f6f6 100644 --- a/osu.iOS.props +++ b/osu.iOS.props @@ -104,7 +104,7 @@ - + From 08dfe413c11d3112735e020dd146a9f0d63923da Mon Sep 17 00:00:00 2001 From: Andrei Zavatski Date: Tue, 2 Jul 2019 13:07:36 +0300 Subject: [PATCH 095/267] Refactor Ruleset Selector in Direct --- .../Overlays/Direct/DirectRulesetSelector.cs | 94 +++++++++++++++++++ osu.Game/Overlays/Direct/FilterControl.cs | 85 +---------------- 2 files changed, 99 insertions(+), 80 deletions(-) create mode 100644 osu.Game/Overlays/Direct/DirectRulesetSelector.cs diff --git a/osu.Game/Overlays/Direct/DirectRulesetSelector.cs b/osu.Game/Overlays/Direct/DirectRulesetSelector.cs new file mode 100644 index 0000000000..b42633eed3 --- /dev/null +++ b/osu.Game/Overlays/Direct/DirectRulesetSelector.cs @@ -0,0 +1,94 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Sprites; +using osu.Framework.Graphics.UserInterface; +using osu.Framework.Input.Events; +using osu.Game.Graphics.UserInterface; +using osu.Game.Rulesets; +using osuTK; +using osuTK.Graphics; + +namespace osu.Game.Overlays.Direct +{ + public class DirectRulesetSelector : RulesetSelector + { + public override bool HandleNonPositionalInput => !Current.Disabled && base.HandleNonPositionalInput; + + public override bool HandlePositionalInput => !Current.Disabled && base.HandlePositionalInput; + + public override bool PropagatePositionalInputSubTree => !Current.Disabled && base.PropagatePositionalInputSubTree; + + public DirectRulesetSelector() + { + TabContainer.Masking = false; + TabContainer.Spacing = new Vector2(10, 0); + AutoSizeAxes = Axes.Both; + + Current.DisabledChanged += value => SelectedTab.FadeColour(value ? Color4.DarkGray : Color4.White, 200, Easing.OutQuint); + } + + protected override TabItem CreateTabItem(RulesetInfo value) => new DirectRulesetTabItem(value); + + protected override TabFillFlowContainer CreateTabFlow() => new TabFillFlowContainer + { + Direction = FillDirection.Horizontal, + AutoSizeAxes = Axes.Both, + }; + + private class DirectRulesetTabItem : TabItem + { + private readonly SpriteIcon icon; + + public DirectRulesetTabItem(RulesetInfo value) + : base(value) + { + AutoSizeAxes = Axes.Both; + + Children = new Drawable[] + { + icon = (SpriteIcon)value.CreateInstance().CreateIcon(), + new HoverClickSounds() + }; + + icon.Size = new Vector2(30); + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + updateState(); + } + + protected override bool OnHover(HoverEvent e) + { + base.OnHover(e); + updateState(); + return true; + } + + protected override void OnHoverLost(HoverLostEvent e) + { + base.OnHoverLost(e); + updateState(); + } + + protected override void OnActivated() => updateState(); + + protected override void OnDeactivated() => updateState(); + + private void updateState() + { + if (IsHovered || Active.Value) + { + icon.FadeColour(Color4.White, 120, Easing.InQuad); + } + else + icon.FadeColour(Color4.Gray, 120, Easing.InQuad); + } + } + } +} diff --git a/osu.Game/Overlays/Direct/FilterControl.cs b/osu.Game/Overlays/Direct/FilterControl.cs index 268e011350..4b43542b43 100644 --- a/osu.Game/Overlays/Direct/FilterControl.cs +++ b/osu.Game/Overlays/Direct/FilterControl.cs @@ -4,105 +4,30 @@ using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; using osu.Game.Graphics; -using osu.Game.Graphics.Containers; using osu.Game.Online.API.Requests; using osu.Game.Overlays.SearchableList; using osu.Game.Rulesets; -using osuTK; using osuTK.Graphics; namespace osu.Game.Overlays.Direct { public class FilterControl : SearchableListFilterControl { - public readonly Bindable Ruleset = new Bindable(); - private FillFlowContainer modeButtons; + private DirectRulesetSelector rulesetSelector; protected override Color4 BackgroundColour => OsuColour.FromHex(@"384552"); protected override DirectSortCriteria DefaultTab => DirectSortCriteria.Ranked; - protected override Drawable CreateSupplementaryControls() - { - modeButtons = new FillFlowContainer - { - AutoSizeAxes = Axes.Both, - Spacing = new Vector2(10f, 0f), - }; + protected override Drawable CreateSupplementaryControls() => rulesetSelector = new DirectRulesetSelector(); - return modeButtons; - } + public Bindable Ruleset => rulesetSelector.Current; [BackgroundDependencyLoader(true)] - private void load(RulesetStore rulesets, OsuColour colours, Bindable ruleset) + private void load(OsuColour colours, Bindable ruleset) { DisplayStyleControl.Dropdown.AccentColour = colours.BlueDark; - - Ruleset.Value = ruleset.Value ?? rulesets.GetRuleset(0); - foreach (var r in rulesets.AvailableRulesets) - modeButtons.Add(new RulesetToggleButton(Ruleset, r)); - } - - private class RulesetToggleButton : OsuClickableContainer - { - private Drawable icon - { - get => iconContainer.Icon; - set => iconContainer.Icon = value; - } - - private RulesetInfo ruleset; - - public RulesetInfo Ruleset - { - get => ruleset; - set - { - ruleset = value; - icon = Ruleset.CreateInstance().CreateIcon(); - } - } - - private readonly Bindable bindable; - - private readonly ConstrainedIconContainer iconContainer; - - private void Bindable_ValueChanged(ValueChangedEvent e) - { - iconContainer.FadeTo(Ruleset.ID == e.NewValue?.ID ? 1f : 0.5f, 100); - } - - public override bool HandleNonPositionalInput => !bindable.Disabled && base.HandleNonPositionalInput; - public override bool HandlePositionalInput => !bindable.Disabled && base.HandlePositionalInput; - - public RulesetToggleButton(Bindable bindable, RulesetInfo ruleset) - { - this.bindable = bindable; - AutoSizeAxes = Axes.Both; - - Children = new[] - { - iconContainer = new ConstrainedIconContainer - { - Origin = Anchor.TopLeft, - Anchor = Anchor.TopLeft, - Size = new Vector2(32), - } - }; - - Ruleset = ruleset; - bindable.ValueChanged += Bindable_ValueChanged; - Bindable_ValueChanged(new ValueChangedEvent(bindable.Value, bindable.Value)); - Action = () => bindable.Value = Ruleset; - } - - protected override void Dispose(bool isDisposing) - { - if (bindable != null) - bindable.ValueChanged -= Bindable_ValueChanged; - base.Dispose(isDisposing); - } + rulesetSelector.Current.BindTo(ruleset); } } From 2971bd8cbcf3ed62c98d4e703963ac0bdcde35fb Mon Sep 17 00:00:00 2001 From: Andrei Zavatski Date: Tue, 2 Jul 2019 13:22:38 +0300 Subject: [PATCH 096/267] Add disable trigger to a testcase --- .../Visual/Online/TestSceneDirectOverlay.cs | 40 +++++++------------ .../Overlays/Direct/DirectRulesetSelector.cs | 2 +- 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/osu.Game.Tests/Visual/Online/TestSceneDirectOverlay.cs b/osu.Game.Tests/Visual/Online/TestSceneDirectOverlay.cs index efc12c5fdd..75c2a2a6a1 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneDirectOverlay.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneDirectOverlay.cs @@ -3,10 +3,8 @@ using System.Collections.Generic; using NUnit.Framework; -using osu.Framework.Allocation; using osu.Game.Beatmaps; using osu.Game.Overlays; -using osu.Game.Rulesets; namespace osu.Game.Tests.Visual.Online { @@ -14,7 +12,6 @@ namespace osu.Game.Tests.Visual.Online public class TestSceneDirectOverlay : OsuTestScene { private DirectOverlay direct; - private RulesetStore rulesets; protected override void LoadComplete() { @@ -25,18 +22,11 @@ namespace osu.Game.Tests.Visual.Online AddStep(@"toggle", direct.ToggleVisibility); AddStep(@"result counts", () => direct.ResultAmounts = new DirectOverlay.ResultCounts(1, 4, 13)); - } - - [BackgroundDependencyLoader] - private void load(RulesetStore rulesets) - { - this.rulesets = rulesets; + AddStep(@"trigger disabled", () => Ruleset.Disabled = !Ruleset.Disabled); } private void newBeatmaps() { - var ruleset = rulesets.GetRuleset(0); - direct.BeatmapSets = new[] { new BeatmapSetInfo @@ -65,7 +55,7 @@ namespace osu.Game.Tests.Visual.Online { new BeatmapInfo { - Ruleset = ruleset, + Ruleset = Ruleset.Value, StarDifficulty = 5.35f, Metadata = new BeatmapMetadata(), }, @@ -97,7 +87,7 @@ namespace osu.Game.Tests.Visual.Online { new BeatmapInfo { - Ruleset = ruleset, + Ruleset = Ruleset.Value, StarDifficulty = 5.81f, Metadata = new BeatmapMetadata(), }, @@ -129,23 +119,23 @@ namespace osu.Game.Tests.Visual.Online { new BeatmapInfo { - Ruleset = ruleset, + Ruleset = Ruleset.Value, StarDifficulty = 0.9f, Metadata = new BeatmapMetadata(), }, new BeatmapInfo { - Ruleset = ruleset, + Ruleset = Ruleset.Value, StarDifficulty = 1.1f, }, new BeatmapInfo { - Ruleset = ruleset, + Ruleset = Ruleset.Value, StarDifficulty = 2.02f, }, new BeatmapInfo { - Ruleset = ruleset, + Ruleset = Ruleset.Value, StarDifficulty = 3.49f, }, }, @@ -176,43 +166,43 @@ namespace osu.Game.Tests.Visual.Online { new BeatmapInfo { - Ruleset = ruleset, + Ruleset = Ruleset.Value, StarDifficulty = 1.26f, Metadata = new BeatmapMetadata(), }, new BeatmapInfo { - Ruleset = ruleset, + Ruleset = Ruleset.Value, StarDifficulty = 2.01f, }, new BeatmapInfo { - Ruleset = ruleset, + Ruleset = Ruleset.Value, StarDifficulty = 2.87f, }, new BeatmapInfo { - Ruleset = ruleset, + Ruleset = Ruleset.Value, StarDifficulty = 3.76f, }, new BeatmapInfo { - Ruleset = ruleset, + Ruleset = Ruleset.Value, StarDifficulty = 3.93f, }, new BeatmapInfo { - Ruleset = ruleset, + Ruleset = Ruleset.Value, StarDifficulty = 4.37f, }, new BeatmapInfo { - Ruleset = ruleset, + Ruleset = Ruleset.Value, StarDifficulty = 5.13f, }, new BeatmapInfo { - Ruleset = ruleset, + Ruleset = Ruleset.Value, StarDifficulty = 5.42f, }, }, diff --git a/osu.Game/Overlays/Direct/DirectRulesetSelector.cs b/osu.Game/Overlays/Direct/DirectRulesetSelector.cs index b42633eed3..289c44a822 100644 --- a/osu.Game/Overlays/Direct/DirectRulesetSelector.cs +++ b/osu.Game/Overlays/Direct/DirectRulesetSelector.cs @@ -43,7 +43,7 @@ namespace osu.Game.Overlays.Direct private readonly SpriteIcon icon; public DirectRulesetTabItem(RulesetInfo value) - : base(value) + : base(value) { AutoSizeAxes = Axes.Both; From ee516d2515c47a3b7728805b6b7f3c8332afb528 Mon Sep 17 00:00:00 2001 From: naoey Date: Tue, 2 Jul 2019 15:55:30 +0530 Subject: [PATCH 097/267] Make direct panel download and replay buttons share UI --- .../Gameplay/TestSceneReplayDownloadButton.cs | 2 + .../UserInterface/OsuDownloadButton.cs | 87 ++++++++++++++ osu.Game/Overlays/Direct/DownloadButton.cs | 61 ++-------- osu.Game/Screens/Play/ReplayDownloadButton.cs | 108 ++++-------------- .../Screens/Ranking/Pages/ScoreResultsPage.cs | 3 +- 5 files changed, 119 insertions(+), 142 deletions(-) create mode 100644 osu.Game/Graphics/UserInterface/OsuDownloadButton.cs diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs index e71b2d596e..0dfcda122f 100644 --- a/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs +++ b/osu.Game.Tests/Visual/Gameplay/TestSceneReplayDownloadButton.cs @@ -9,6 +9,7 @@ using osu.Game.Rulesets.Osu; using osu.Game.Scoring; using osu.Game.Screens.Play; using osu.Game.Users; +using osuTK; using System; using System.Collections.Generic; @@ -41,6 +42,7 @@ namespace osu.Game.Tests.Visual.Gameplay { Anchor = Anchor.Centre, Origin = Anchor.Centre, + Size = new Vector2(80, 40), }; }); } diff --git a/osu.Game/Graphics/UserInterface/OsuDownloadButton.cs b/osu.Game/Graphics/UserInterface/OsuDownloadButton.cs new file mode 100644 index 0000000000..6e95c7e291 --- /dev/null +++ b/osu.Game/Graphics/UserInterface/OsuDownloadButton.cs @@ -0,0 +1,87 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Allocation; +using osu.Framework.Bindables; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Graphics.Sprites; +using osu.Game.Online; +using osuTK; + +namespace osu.Game.Graphics.UserInterface +{ + public class OsuDownloadButton : OsuAnimatedButton + { + public readonly Bindable State = new Bindable(); + + private readonly SpriteIcon icon; + private readonly SpriteIcon checkmark; + private readonly Box background; + + private OsuColour colours; + + public OsuDownloadButton() + { + Children = new Drawable[] + { + background = new Box + { + RelativeSizeAxes = Axes.Both, + Depth = float.MaxValue + }, + icon = new SpriteIcon + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Size = new Vector2(13), + Icon = FontAwesome.Solid.Download, + }, + checkmark = new SpriteIcon + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + X = 8, + Size = Vector2.Zero, + Icon = FontAwesome.Solid.Check, + } + }; + } + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + this.colours = colours; + + State.BindValueChanged(updateState, true); + } + + private void updateState(ValueChangedEvent state) + { + switch (state.NewValue) + { + case DownloadState.NotDownloaded: + background.FadeColour(colours.Gray4, 500, Easing.InOutExpo); + icon.MoveToX(0, 500, Easing.InOutExpo); + checkmark.ScaleTo(Vector2.Zero, 500, Easing.InOutExpo); + break; + + case DownloadState.Downloading: + background.FadeColour(colours.Blue, 500, Easing.InOutExpo); + icon.MoveToX(0, 500, Easing.InOutExpo); + checkmark.ScaleTo(Vector2.Zero, 500, Easing.InOutExpo); + break; + + case DownloadState.Downloaded: + background.FadeColour(colours.Yellow, 500, Easing.InOutExpo); + break; + + case DownloadState.LocallyAvailable: + background.FadeColour(colours.Green, 500, Easing.InOutExpo); + icon.MoveToX(-8, 500, Easing.InOutExpo); + checkmark.ScaleTo(new Vector2(13), 500, Easing.InOutExpo); + break; + } + } + } +} diff --git a/osu.Game/Overlays/Direct/DownloadButton.cs b/osu.Game/Overlays/Direct/DownloadButton.cs index 81709187e7..9aec7bcd0c 100644 --- a/osu.Game/Overlays/Direct/DownloadButton.cs +++ b/osu.Game/Overlays/Direct/DownloadButton.cs @@ -1,4 +1,4 @@ -// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using osu.Framework.Allocation; @@ -10,7 +10,6 @@ using osu.Game.Graphics; using osu.Game.Graphics.Containers; using osu.Game.Graphics.UserInterface; using osu.Game.Online; -using osuTK; namespace osu.Game.Overlays.Direct { @@ -25,7 +24,7 @@ namespace osu.Game.Overlays.Direct private OsuColour colours; private readonly ShakeContainer shakeContainer; - private readonly OsuAnimatedButton button; + private readonly OsuDownloadButton button; public DownloadButton(BeatmapSetInfo beatmapSet, bool noVideo = false) : base(beatmapSet) @@ -35,33 +34,10 @@ namespace osu.Game.Overlays.Direct InternalChild = shakeContainer = new ShakeContainer { RelativeSizeAxes = Axes.Both, - Child = button = new OsuAnimatedButton + Child = button = new OsuDownloadButton { RelativeSizeAxes = Axes.Both, - Children = new Drawable[] - { - background = new Box - { - RelativeSizeAxes = Axes.Both, - Depth = float.MaxValue - }, - icon = new SpriteIcon - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Size = new Vector2(13), - Icon = FontAwesome.Solid.Download, - }, - checkmark = new SpriteIcon - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - X = 8, - Size = Vector2.Zero, - Icon = FontAwesome.Solid.Check, - } - } - } + }, }; } @@ -69,7 +45,7 @@ namespace osu.Game.Overlays.Direct { base.LoadComplete(); - State.BindValueChanged(state => updateState(state.NewValue), true); + button.State.BindTo(State); FinishTransforms(true); } @@ -105,32 +81,11 @@ namespace osu.Game.Overlays.Direct }; } - private void updateState(DownloadState state) + protected override void Dispose(bool isDisposing) { - switch (state) - { - case DownloadState.NotDownloaded: - background.FadeColour(colours.Gray4, 500, Easing.InOutExpo); - icon.MoveToX(0, 500, Easing.InOutExpo); - checkmark.ScaleTo(Vector2.Zero, 500, Easing.InOutExpo); - break; + base.Dispose(isDisposing); - case DownloadState.Downloading: - background.FadeColour(colours.Blue, 500, Easing.InOutExpo); - icon.MoveToX(0, 500, Easing.InOutExpo); - checkmark.ScaleTo(Vector2.Zero, 500, Easing.InOutExpo); - break; - - case DownloadState.Downloaded: - background.FadeColour(colours.Yellow, 500, Easing.InOutExpo); - break; - - case DownloadState.LocallyAvailable: - background.FadeColour(colours.Green, 500, Easing.InOutExpo); - icon.MoveToX(-8, 500, Easing.InOutExpo); - checkmark.ScaleTo(new Vector2(13), 500, Easing.InOutExpo); - break; - } + button?.State.UnbindAll(); } } } diff --git a/osu.Game/Screens/Play/ReplayDownloadButton.cs b/osu.Game/Screens/Play/ReplayDownloadButton.cs index d715f17109..9655bde36a 100644 --- a/osu.Game/Screens/Play/ReplayDownloadButton.cs +++ b/osu.Game/Screens/Play/ReplayDownloadButton.cs @@ -2,57 +2,28 @@ // See the LICENCE file in the repository root for full licence text. using osu.Framework.Allocation; -using osu.Framework.Graphics.Cursor; -using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics; -using osu.Game.Graphics; using osu.Game.Graphics.Containers; using osu.Game.Online; using osu.Game.Scoring; -using osuTK; -using osu.Framework.Graphics.Sprites; using osu.Game.Online.API.Requests.Responses; -using osu.Framework.Graphics.Effects; -using osuTK.Graphics; -using osu.Framework.Extensions.Color4Extensions; -using osu.Framework.Graphics.Containers; +using osu.Game.Graphics.UserInterface; namespace osu.Game.Screens.Play { - public class ReplayDownloadButton : DownloadTrackingComposite, IHasTooltip + public class ReplayDownloadButton : DownloadTrackingComposite { [Resolved] private ScoreManager scores { get; set; } - private OsuClickableContainer button; - private SpriteIcon downloadIcon; - private SpriteIcon playIcon; + private OsuDownloadButton button; private ShakeContainer shakeContainer; - private CircularContainer circle; - - public string TooltipText - { - get - { - switch (replayAvailability) - { - case ReplayAvailability.Local: - return @"Watch replay"; - - case ReplayAvailability.Online: - return @"Download replay"; - - default: - return @"Replay unavailable"; - } - } - } private ReplayAvailability replayAvailability { get { - if (scores.IsAvailableLocally(Model.Value)) + if (State.Value == DownloadState.LocallyAvailable) return ReplayAvailability.Local; if (Model.Value is APILegacyScoreInfo apiScore && apiScore.Replay) @@ -65,54 +36,18 @@ namespace osu.Game.Screens.Play public ReplayDownloadButton(ScoreInfo score) : base(score) { - AutoSizeAxes = Axes.Both; } [BackgroundDependencyLoader(true)] - private void load(OsuGame game, OsuColour colours) + private void load(OsuGame game) { InternalChild = shakeContainer = new ShakeContainer { - AutoSizeAxes = Axes.Both, - Child = circle = new CircularContainer + RelativeSizeAxes = Axes.Both, + Child = button = new OsuDownloadButton { - Masking = true, - Size = new Vector2(40), - EdgeEffect = new EdgeEffectParameters - { - Colour = Color4.Black.Opacity(0.4f), - Type = EdgeEffectType.Shadow, - Radius = 5, - }, - Child = button = new OsuClickableContainer - { - RelativeSizeAxes = Axes.Both, - Children = new Drawable[] - { - new Box - { - RelativeSizeAxes = Axes.Both, - Colour = colours.GrayF, - }, - playIcon = new SpriteIcon - { - Icon = FontAwesome.Solid.Play, - Size = Vector2.Zero, - Colour = colours.Gray3, - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - }, - downloadIcon = new SpriteIcon - { - Icon = FontAwesome.Solid.FileDownload, - Size = Vector2.Zero, - Colour = colours.Gray3, - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - }, - }, - } - }, + RelativeSizeAxes = Axes.Both, + } }; button.Action = () => @@ -127,32 +62,29 @@ namespace osu.Game.Screens.Play scores.Download(Model.Value); break; + case DownloadState.Downloaded: case DownloadState.Downloading: shakeContainer.Shake(); break; } }; - State.BindValueChanged(state => + State.BindValueChanged((state) => { - switch (state.NewValue) + button.State.Value = state.NewValue; + + switch (replayAvailability) { - case DownloadState.Downloading: - playIcon.ResizeTo(Vector2.Zero, 400, Easing.OutQuint); - downloadIcon.ResizeTo(13, 400, Easing.OutQuint); - circle.FadeEdgeEffectTo(colours.Yellow, 400, Easing.OutQuint); + case ReplayAvailability.Local: + button.TooltipText = @"Watch replay"; break; - case DownloadState.LocallyAvailable: - playIcon.ResizeTo(13, 400, Easing.OutQuint); - downloadIcon.ResizeTo(Vector2.Zero, 400, Easing.OutQuint); - circle.FadeEdgeEffectTo(Color4.Black.Opacity(0.4f), 400, Easing.OutQuint); + case ReplayAvailability.Online: + button.TooltipText = @"Download replay"; break; - case DownloadState.NotDownloaded: - playIcon.ResizeTo(Vector2.Zero, 400, Easing.OutQuint); - downloadIcon.ResizeTo(13, 400, Easing.OutQuint); - circle.FadeEdgeEffectTo(Color4.Black.Opacity(0.4f), 400, Easing.OutQuint); + default: + button.TooltipText = @"Replay unavailable"; break; } }, true); diff --git a/osu.Game/Screens/Ranking/Pages/ScoreResultsPage.cs b/osu.Game/Screens/Ranking/Pages/ScoreResultsPage.cs index 676c1e3adf..7c35742ff6 100644 --- a/osu.Game/Screens/Ranking/Pages/ScoreResultsPage.cs +++ b/osu.Game/Screens/Ranking/Pages/ScoreResultsPage.cs @@ -173,7 +173,8 @@ namespace osu.Game.Screens.Ranking.Pages { Anchor = Anchor.BottomCentre, Origin = Anchor.BottomCentre, - Margin = new MarginPadding { Bottom = 5 }, + Margin = new MarginPadding { Bottom = 10 }, + Size = new Vector2(50, 30), }, }; From 082fa0d808c153c105f269ee9a017dfdb0ec83ef Mon Sep 17 00:00:00 2001 From: Andrei Zavatski Date: Tue, 2 Jul 2019 13:35:02 +0300 Subject: [PATCH 098/267] simplify updateState logic --- osu.Game/Overlays/Direct/DirectRulesetSelector.cs | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/osu.Game/Overlays/Direct/DirectRulesetSelector.cs b/osu.Game/Overlays/Direct/DirectRulesetSelector.cs index 289c44a822..f2abca9ce6 100644 --- a/osu.Game/Overlays/Direct/DirectRulesetSelector.cs +++ b/osu.Game/Overlays/Direct/DirectRulesetSelector.cs @@ -80,15 +80,7 @@ namespace osu.Game.Overlays.Direct protected override void OnDeactivated() => updateState(); - private void updateState() - { - if (IsHovered || Active.Value) - { - icon.FadeColour(Color4.White, 120, Easing.InQuad); - } - else - icon.FadeColour(Color4.Gray, 120, Easing.InQuad); - } + private void updateState() => icon.FadeColour(IsHovered || Active.Value ? Color4.White : Color4.Gray, 120, Easing.InQuad); } } } From bc821fcc5d0e16ee9b2891c9e7ce3ff04da4121c Mon Sep 17 00:00:00 2001 From: miterosan Date: Mon, 1 Jul 2019 15:28:34 +0200 Subject: [PATCH 099/267] Add native bass libs for x86 Android --- osu.Android/lib/x86/libbass.so | Bin 0 -> 316716 bytes osu.Android/lib/x86/libbass_fx.so | Bin 0 -> 153532 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 osu.Android/lib/x86/libbass.so create mode 100644 osu.Android/lib/x86/libbass_fx.so diff --git a/osu.Android/lib/x86/libbass.so b/osu.Android/lib/x86/libbass.so new file mode 100644 index 0000000000000000000000000000000000000000..b0f758a42b7397b3289557f51de6b55df7b3b4ea GIT binary patch literal 316716 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 z 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 kkiFcJ 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 E0opfv^#A|> literal 0 HcmV?d00001 From 1a3cc25d6c375784f1a285c56d9367ba89cb551a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 19:40:33 +0900 Subject: [PATCH 100/267] Update in accordance with visual studio changes Adds x86 emulator deployment target --- osu.Android/Properties/AndroidManifest.xml | 14 +++++++------- osu.Android/osu.Android.csproj | 1 + .../osu.Game.Rulesets.Catch.Tests.Android.csproj | 1 + .../osu.Game.Rulesets.Mania.Tests.Android.csproj | 1 + .../osu.Game.Rulesets.Osu.Tests.Android.csproj | 1 + .../osu.Game.Rulesets.Taiko.Tests.Android.csproj | 1 + .../osu.Game.Tests.Android.csproj | 1 + 7 files changed, 13 insertions(+), 7 deletions(-) diff --git a/osu.Android/Properties/AndroidManifest.xml b/osu.Android/Properties/AndroidManifest.xml index 6f77560e01..edbf651d09 100644 --- a/osu.Android/Properties/AndroidManifest.xml +++ b/osu.Android/Properties/AndroidManifest.xml @@ -1,10 +1,10 @@  - - - - - - - + + + + + + + \ No newline at end of file diff --git a/osu.Android/osu.Android.csproj b/osu.Android/osu.Android.csproj index 6a859742ee..f56d38ac5c 100644 --- a/osu.Android/osu.Android.csproj +++ b/osu.Android/osu.Android.csproj @@ -12,6 +12,7 @@ osu.Android osu.Android Properties\AndroidManifest.xml + armeabi-v7a;x86;arm64-v8a diff --git a/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj b/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj index ed746921be..88b420ffad 100644 --- a/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj +++ b/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj @@ -12,6 +12,7 @@ osu.Game.Rulesets.Catch.Tests osu.Game.Rulesets.Catch.Tests.Android Properties\AndroidManifest.xml + armeabi-v7a;x86;arm64-v8a diff --git a/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj b/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj index b366958342..0e557cb260 100644 --- a/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj +++ b/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj @@ -12,6 +12,7 @@ osu.Game.Rulesets.Mania.Tests osu.Game.Rulesets.Mania.Tests.Android Properties\AndroidManifest.xml + armeabi-v7a;x86;arm64-v8a diff --git a/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj b/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj index a40f7ca588..dcf1573522 100644 --- a/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj +++ b/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj @@ -12,6 +12,7 @@ osu.Game.Rulesets.Osu.Tests osu.Game.Rulesets.Osu.Tests.Android Properties\AndroidManifest.xml + armeabi-v7a;x86;arm64-v8a diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj b/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj index bc7b00ffc8..392442b713 100644 --- a/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj +++ b/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj @@ -12,6 +12,7 @@ osu.Game.Rulesets.Taiko.Tests osu.Game.Rulesets.Taiko.Tests.Android Properties\AndroidManifest.xml + armeabi-v7a;x86;arm64-v8a diff --git a/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj b/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj index 4e83234e7d..c2dd194e09 100644 --- a/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj +++ b/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj @@ -12,6 +12,7 @@ osu.Game.Tests osu.Game.Tests.Android Properties\AndroidManifest.xml + armeabi-v7a;x86;arm64-v8a From eaa19d5a49faf44645e824ca48c62651249621d2 Mon Sep 17 00:00:00 2001 From: naoey Date: Tue, 2 Jul 2019 16:13:47 +0530 Subject: [PATCH 101/267] Remove unused/unnecessary fields --- osu.Game/Overlays/Direct/DownloadButton.cs | 10 +--------- osu.Game/Screens/Play/ReplayDownloadButton.cs | 7 ++----- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/osu.Game/Overlays/Direct/DownloadButton.cs b/osu.Game/Overlays/Direct/DownloadButton.cs index 9aec7bcd0c..6bac07fc88 100644 --- a/osu.Game/Overlays/Direct/DownloadButton.cs +++ b/osu.Game/Overlays/Direct/DownloadButton.cs @@ -3,8 +3,6 @@ using osu.Framework.Allocation; using osu.Framework.Graphics; -using osu.Framework.Graphics.Shapes; -using osu.Framework.Graphics.Sprites; using osu.Game.Beatmaps; using osu.Game.Graphics; using osu.Game.Graphics.Containers; @@ -18,11 +16,7 @@ namespace osu.Game.Overlays.Direct protected bool DownloadEnabled => button.Enabled.Value; private readonly bool noVideo; - private readonly SpriteIcon icon; - private readonly SpriteIcon checkmark; - private readonly Box background; - private OsuColour colours; private readonly ShakeContainer shakeContainer; private readonly OsuDownloadButton button; @@ -50,10 +44,8 @@ namespace osu.Game.Overlays.Direct } [BackgroundDependencyLoader(true)] - private void load(OsuColour colours, OsuGame game, BeatmapManager beatmaps) + private void load(OsuGame game, BeatmapManager beatmaps) { - this.colours = colours; - if (BeatmapSet.Value.OnlineInfo.Availability?.DownloadDisabled ?? false) { button.Enabled.Value = false; diff --git a/osu.Game/Screens/Play/ReplayDownloadButton.cs b/osu.Game/Screens/Play/ReplayDownloadButton.cs index 9655bde36a..5acf4e83d9 100644 --- a/osu.Game/Screens/Play/ReplayDownloadButton.cs +++ b/osu.Game/Screens/Play/ReplayDownloadButton.cs @@ -13,9 +13,6 @@ namespace osu.Game.Screens.Play { public class ReplayDownloadButton : DownloadTrackingComposite { - [Resolved] - private ScoreManager scores { get; set; } - private OsuDownloadButton button; private ShakeContainer shakeContainer; @@ -39,7 +36,7 @@ namespace osu.Game.Screens.Play } [BackgroundDependencyLoader(true)] - private void load(OsuGame game) + private void load(OsuGame game, ScoreManager scores) { InternalChild = shakeContainer = new ShakeContainer { @@ -69,7 +66,7 @@ namespace osu.Game.Screens.Play } }; - State.BindValueChanged((state) => + State.BindValueChanged(state => { button.State.Value = state.NewValue; From 486e7e4e1e4e156824423852cea22e37230b4c81 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 19:44:04 +0900 Subject: [PATCH 102/267] Remove unnecessary file --- osu.Android/monogc.txt | 1 - osu.Android/osu.Android.csproj | 3 --- 2 files changed, 4 deletions(-) delete mode 100644 osu.Android/monogc.txt diff --git a/osu.Android/monogc.txt b/osu.Android/monogc.txt deleted file mode 100644 index d15a2bd2ae..0000000000 --- a/osu.Android/monogc.txt +++ /dev/null @@ -1 +0,0 @@ -MONO_GC_PARAMS=nursery-size=8m \ No newline at end of file diff --git a/osu.Android/osu.Android.csproj b/osu.Android/osu.Android.csproj index f56d38ac5c..42a3185cd1 100644 --- a/osu.Android/osu.Android.csproj +++ b/osu.Android/osu.Android.csproj @@ -46,8 +46,5 @@ - - - \ No newline at end of file From 7dbba87e4c83d98defef5d4f01bb3b37607d9e06 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 19:55:16 +0900 Subject: [PATCH 103/267] Update dependencies oops --- osu.Android.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Android.props b/osu.Android.props index 74fe16ebf6..ead059cdf2 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -63,7 +63,7 @@ - - + + From f45b42021ff01782b0594a2c97ee89f5dfc2e7b1 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 19:45:55 +0900 Subject: [PATCH 104/267] Change app label to just "osu!" --- osu.Android/Properties/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Android/Properties/AndroidManifest.xml b/osu.Android/Properties/AndroidManifest.xml index edbf651d09..326d32f7ab 100644 --- a/osu.Android/Properties/AndroidManifest.xml +++ b/osu.Android/Properties/AndroidManifest.xml @@ -6,5 +6,5 @@ - + \ No newline at end of file From 1ff6a9d085da89471a8d608cd4dd72251cef4a52 Mon Sep 17 00:00:00 2001 From: naoey Date: Tue, 2 Jul 2019 16:25:40 +0530 Subject: [PATCH 105/267] Remove unused using --- osu.Game/Overlays/Direct/DownloadButton.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/osu.Game/Overlays/Direct/DownloadButton.cs b/osu.Game/Overlays/Direct/DownloadButton.cs index 6bac07fc88..dac1521bf3 100644 --- a/osu.Game/Overlays/Direct/DownloadButton.cs +++ b/osu.Game/Overlays/Direct/DownloadButton.cs @@ -4,7 +4,6 @@ using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Game.Beatmaps; -using osu.Game.Graphics; using osu.Game.Graphics.Containers; using osu.Game.Graphics.UserInterface; using osu.Game.Online; From a26b14a4f89a44ee8d9adb96774b75fa4989e46e Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 22:21:56 +0900 Subject: [PATCH 106/267] Move finaliser inside disposal region --- osu.Game/Beatmaps/WorkingBeatmap.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs index 61390fe51b..40b3d70262 100644 --- a/osu.Game/Beatmaps/WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/WorkingBeatmap.cs @@ -46,11 +46,6 @@ namespace osu.Game.Beatmaps skin = new RecyclableLazy(GetSkin); } - ~WorkingBeatmap() - { - Dispose(false); - } - protected virtual Track GetVirtualTrack() { const double excess_length = 1000; @@ -229,6 +224,11 @@ namespace osu.Game.Beatmaps beatmapCancellation.Cancel(); } + ~WorkingBeatmap() + { + Dispose(false); + } + #endregion public class RecyclableLazy From 0b66f139020b9a13e3816814c76078db25c97a72 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 22:22:33 +0900 Subject: [PATCH 107/267] Add todo about beatmap load cancellation --- osu.Game/Beatmaps/WorkingBeatmap.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs index 40b3d70262..2f611b8409 100644 --- a/osu.Game/Beatmaps/WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/WorkingBeatmap.cs @@ -145,6 +145,7 @@ namespace osu.Game.Beatmaps public Task LoadBeatmapAsync() => (beatmapLoadTask ?? (beatmapLoadTask = Task.Factory.StartNew(() => { + // Todo: Handle cancellation during beatmap parsing var b = GetBeatmap() ?? new Beatmap(); // The original beatmap version needs to be preserved as the database doesn't contain it From a6acc1f99f25e9dfbd344679ba9cc147e5eb9e3b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 22:25:51 +0900 Subject: [PATCH 108/267] Catch exception and return null for safety . --- osu.Game/Beatmaps/WorkingBeatmap.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs index 2f611b8409..a4324ecb0c 100644 --- a/osu.Game/Beatmaps/WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/WorkingBeatmap.cs @@ -157,7 +157,20 @@ namespace osu.Game.Beatmaps return b; }, beatmapCancellation.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default))); - public IBeatmap Beatmap => LoadBeatmapAsync().Result; + public IBeatmap Beatmap + { + get + { + try + { + return LoadBeatmapAsync().Result; + } + catch (TaskCanceledException) + { + return null; + } + } + } private readonly CancellationTokenSource beatmapCancellation = new CancellationTokenSource(); protected abstract IBeatmap GetBeatmap(); From 9e33fb35e9241dda9fa34c33804bae5f7a9e9670 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 22:24:08 +0900 Subject: [PATCH 109/267] Fix typo --- osu.Game/Beatmaps/WorkingBeatmap.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs index a4324ecb0c..00ba8963cb 100644 --- a/osu.Game/Beatmaps/WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/WorkingBeatmap.cs @@ -231,7 +231,7 @@ namespace osu.Game.Beatmaps { // recycling logic is not here for the time being, as components which use // retrieved objects from WorkingBeatmap may not hold a reference to the WorkingBeatmap itself. - // this should be fine as each retrieved comopnent do have their own finalizers. + // this should be fine as each retrieved component do have their own finalizers. // cancelling the beatmap load is safe for now since the retrieval is a synchronous // operation. if we add an async retrieval method this may need to be reconsidered. From f31d840c13eecb92af95e69aceb26fad15a69a0f Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 22:25:03 +0900 Subject: [PATCH 110/267] Dispose previous WorkingBeatmap on change --- osu.Game/OsuGame.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index bfa4aeadef..49c543537a 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -296,6 +296,8 @@ namespace osu.Game if (nextBeatmap?.Track != null) nextBeatmap.Track.Completed += currentTrackCompleted; + beatmap.OldValue?.Dispose(); + nextBeatmap?.LoadBeatmapAsync(); } From 93511266e5d771b4c2099ddd1b5b45b39b6c81b1 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 22:33:33 +0900 Subject: [PATCH 111/267] Fix waves not displaying at all --- osu.Game/Graphics/Containers/WaveContainer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Graphics/Containers/WaveContainer.cs b/osu.Game/Graphics/Containers/WaveContainer.cs index 9050e775f7..17e4f0afd5 100644 --- a/osu.Game/Graphics/Containers/WaveContainer.cs +++ b/osu.Game/Graphics/Containers/WaveContainer.cs @@ -125,7 +125,7 @@ namespace osu.Game.Graphics.Containers // This is done as an optimization, such that invisible parts of the waves // are masked away, and thus do not consume fill rate. - wavesContainer.Height = Math.Max(0, DrawHeight - (contentContainer.DrawHeight - contentContainer.Y)); + wavesContainer.Height = Math.Max(0, DrawHeight - (contentContainer.DrawHeight - contentContainer.Y * DrawHeight)); } private class Wave : VisibilityContainer From e7a7f2f660c0eed21b1d7696f3236038f59c2edf Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 22:39:42 +0900 Subject: [PATCH 112/267] Add statistic for count of alive WorkingBeatmaps --- osu.Game/Beatmaps/WorkingBeatmap.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs index 00ba8963cb..138d911556 100644 --- a/osu.Game/Beatmaps/WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/WorkingBeatmap.cs @@ -13,6 +13,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using osu.Framework.Audio; +using osu.Framework.Statistics; using osu.Game.IO.Serialization; using osu.Game.Rulesets; using osu.Game.Rulesets.Objects; @@ -32,6 +33,8 @@ namespace osu.Game.Beatmaps protected AudioManager AudioManager { get; } + private static readonly GlobalStatistic total_count = GlobalStatistics.Get(nameof(Beatmaps), $"Total {nameof(WorkingBeatmap)}s"); + protected WorkingBeatmap(BeatmapInfo beatmapInfo, AudioManager audioManager) { AudioManager = audioManager; @@ -44,6 +47,8 @@ namespace osu.Game.Beatmaps waveform = new RecyclableLazy(GetWaveform); storyboard = new RecyclableLazy(GetStoryboard); skin = new RecyclableLazy(GetSkin); + + total_count.Value++; } protected virtual Track GetVirtualTrack() @@ -227,8 +232,15 @@ namespace osu.Game.Beatmaps GC.SuppressFinalize(this); } + private bool isDisposed; + protected virtual void Dispose(bool isDisposing) { + if (isDisposed) + return; + + isDisposed = true; + // recycling logic is not here for the time being, as components which use // retrieved objects from WorkingBeatmap may not hold a reference to the WorkingBeatmap itself. // this should be fine as each retrieved component do have their own finalizers. @@ -236,6 +248,8 @@ namespace osu.Game.Beatmaps // cancelling the beatmap load is safe for now since the retrieval is a synchronous // operation. if we add an async retrieval method this may need to be reconsidered. beatmapCancellation.Cancel(); + + total_count.Value--; } ~WorkingBeatmap() From 8e0b5f16225f00266c52c61818636b798502770d Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 2 Jul 2019 23:21:13 +0900 Subject: [PATCH 113/267] Fix weird merge conflict --- osu.Game/Beatmaps/WorkingBeatmap.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs index c6f26423dd..37aa0024da 100644 --- a/osu.Game/Beatmaps/WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/WorkingBeatmap.cs @@ -51,11 +51,6 @@ namespace osu.Game.Beatmaps total_count.Value++; } - ~WorkingBeatmap() - { - Dispose(false); - } - protected virtual Track GetVirtualTrack() { const double excess_length = 1000; From 778c36c7d7a243696380f14fb0942ad08153cc9d Mon Sep 17 00:00:00 2001 From: miterosan Date: Tue, 2 Jul 2019 17:05:04 +0200 Subject: [PATCH 114/267] Allow discover of rulesets that are already loaded. --- osu.Game/Rulesets/RulesetStore.cs | 42 +++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/osu.Game/Rulesets/RulesetStore.cs b/osu.Game/Rulesets/RulesetStore.cs index 0ebadd73d2..919b5dde22 100644 --- a/osu.Game/Rulesets/RulesetStore.cs +++ b/osu.Game/Rulesets/RulesetStore.cs @@ -22,8 +22,20 @@ namespace osu.Game.Rulesets { AppDomain.CurrentDomain.AssemblyResolve += currentDomain_AssemblyResolve; - foreach (string file in Directory.GetFiles(Environment.CurrentDirectory, $"{ruleset_library_prefix}.*.dll") - .Where(f => !Path.GetFileName(f).Contains("Tests"))) + addLoadedRulesets(); + + IEnumerable files = new string[0]; + + try + { + files = Directory.GetFiles(Environment.CurrentDirectory, $"{ruleset_library_prefix}.*.dll"); + } + catch (Exception e) + { + Logger.Error(e, $"Could not load rulesets from directory {Environment.CurrentDirectory}"); + } + + foreach (string file in files.Where(f => !Path.GetFileName(f).Contains("Tests"))) loadRulesetFromFile(file); } @@ -111,6 +123,17 @@ namespace osu.Game.Rulesets } } + private static void addLoadedRulesets() + { + // on android the rulesets are already loaded + var loadedRulesets = AppDomain.CurrentDomain.GetAssemblies() + .Where(assembly => assembly.GetName().Name.StartsWith(ruleset_library_prefix, StringComparison.InvariantCultureIgnoreCase)) + .Where(assembly => !assembly.GetName().Name.Contains("Tests")); + + foreach (var ruleset in loadedRulesets) + addRuleset(ruleset); + } + private static void loadRulesetFromFile(string file) { var filename = Path.GetFileNameWithoutExtension(file); @@ -128,5 +151,20 @@ namespace osu.Game.Rulesets Logger.Error(e, $"Failed to load ruleset {filename}"); } } + + private static void addRuleset(Assembly assembly) + { + if (loaded_assemblies.ContainsKey(assembly)) + return; + + try + { + loaded_assemblies[assembly] = assembly.GetTypes().First(t => t.IsPublic && t.IsSubclassOf(typeof(Ruleset))); + } + catch (Exception e) + { + Logger.Error(e, $"Failed to add ruleset {assembly}"); + } + } } } From e1d0d2666997580a47f510c088cc3d0af4046f18 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 3 Jul 2019 00:21:16 +0900 Subject: [PATCH 115/267] Add a note about local optimisation that may not be required in the future --- osu.Game/Graphics/Containers/WaveContainer.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game/Graphics/Containers/WaveContainer.cs b/osu.Game/Graphics/Containers/WaveContainer.cs index 17e4f0afd5..c01674f5b4 100644 --- a/osu.Game/Graphics/Containers/WaveContainer.cs +++ b/osu.Game/Graphics/Containers/WaveContainer.cs @@ -125,6 +125,7 @@ namespace osu.Game.Graphics.Containers // This is done as an optimization, such that invisible parts of the waves // are masked away, and thus do not consume fill rate. + // todo: revert https://github.com/ppy/osu/commit/aff9e3617da0c8fe252169fae287e39b44575b5e after FTB is fixed on iOS. wavesContainer.Height = Math.Max(0, DrawHeight - (contentContainer.DrawHeight - contentContainer.Y * DrawHeight)); } From f1ceea8361e18ce23e9e5f4dc031f5bd40a393c5 Mon Sep 17 00:00:00 2001 From: miterosan Date: Tue, 2 Jul 2019 17:25:12 +0200 Subject: [PATCH 116/267] style fixes --- osu.Game/Rulesets/RulesetStore.cs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/osu.Game/Rulesets/RulesetStore.cs b/osu.Game/Rulesets/RulesetStore.cs index 919b5dde22..17834f8545 100644 --- a/osu.Game/Rulesets/RulesetStore.cs +++ b/osu.Game/Rulesets/RulesetStore.cs @@ -24,19 +24,17 @@ namespace osu.Game.Rulesets addLoadedRulesets(); - IEnumerable files = new string[0]; - try { - files = Directory.GetFiles(Environment.CurrentDirectory, $"{ruleset_library_prefix}.*.dll"); + string[] files = Directory.GetFiles(Environment.CurrentDirectory, $"{ruleset_library_prefix}.*.dll"); + + foreach (string file in files.Where(f => !Path.GetFileName(f).Contains("Tests"))) + loadRulesetFromFile(file); } catch (Exception e) { Logger.Error(e, $"Could not load rulesets from directory {Environment.CurrentDirectory}"); } - - foreach (string file in files.Where(f => !Path.GetFileName(f).Contains("Tests"))) - loadRulesetFromFile(file); } public RulesetStore(IDatabaseContextFactory factory) @@ -125,13 +123,15 @@ namespace osu.Game.Rulesets private static void addLoadedRulesets() { - // on android the rulesets are already loaded - var loadedRulesets = AppDomain.CurrentDomain.GetAssemblies() - .Where(assembly => assembly.GetName().Name.StartsWith(ruleset_library_prefix, StringComparison.InvariantCultureIgnoreCase)) - .Where(assembly => !assembly.GetName().Name.Contains("Tests")); + foreach (var ruleset in AppDomain.CurrentDomain.GetAssemblies()) + { + string rulesetName = ruleset.GetName().Name; + + if (!rulesetName.StartsWith(ruleset_library_prefix, StringComparison.InvariantCultureIgnoreCase) || ruleset.GetName().Name.Contains("Tests")) + continue; - foreach (var ruleset in loadedRulesets) addRuleset(ruleset); + } } private static void loadRulesetFromFile(string file) From f9c24f2281dc82ffd14ec3f47b7fc155112d9a66 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 3 Jul 2019 00:35:55 +0900 Subject: [PATCH 117/267] Update framework --- osu.Game/osu.Game.csproj | 2 +- osu.iOS.props | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 8c4f5dcb7d..b59828a52e 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -15,7 +15,7 @@ - + diff --git a/osu.iOS.props b/osu.iOS.props index 113874f6f6..ddbdaf3d18 100644 --- a/osu.iOS.props +++ b/osu.iOS.props @@ -105,8 +105,8 @@ - - + + From d387629e5348aaa8ac3322a169401415e5ba6747 Mon Sep 17 00:00:00 2001 From: Joehu Date: Tue, 2 Jul 2019 10:52:24 -0700 Subject: [PATCH 118/267] Fix layout of profile top header to match web --- .../Profile/Header/TopHeaderContainer.cs | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/osu.Game/Overlays/Profile/Header/TopHeaderContainer.cs b/osu.Game/Overlays/Profile/Header/TopHeaderContainer.cs index dc6c3f56f8..bdf047478d 100644 --- a/osu.Game/Overlays/Profile/Header/TopHeaderContainer.cs +++ b/osu.Game/Overlays/Profile/Header/TopHeaderContainer.cs @@ -72,18 +72,30 @@ namespace osu.Game.Overlays.Profile.Header new FillFlowContainer { AutoSizeAxes = Axes.Both, - Direction = FillDirection.Horizontal, + Direction = FillDirection.Vertical, Children = new Drawable[] { - usernameText = new OsuSpriteText + new FillFlowContainer { - Font = OsuFont.GetFont(size: 24, weight: FontWeight.Regular) + AutoSizeAxes = Axes.Both, + Direction = FillDirection.Horizontal, + Children = new Drawable[] + { + usernameText = new OsuSpriteText + { + Font = OsuFont.GetFont(size: 24, weight: FontWeight.Regular) + }, + openUserExternally = new ExternalLinkButton + { + Margin = new MarginPadding { Left = 5 }, + Anchor = Anchor.CentreLeft, + Origin = Anchor.CentreLeft, + }, + } }, - openUserExternally = new ExternalLinkButton + titleText = new OsuSpriteText { - Margin = new MarginPadding { Left = 5 }, - Anchor = Anchor.CentreLeft, - Origin = Anchor.CentreLeft, + Font = OsuFont.GetFont(size: 18, weight: FontWeight.Regular) }, } }, @@ -95,10 +107,6 @@ namespace osu.Game.Overlays.Profile.Header AutoSizeAxes = Axes.Both, Children = new Drawable[] { - titleText = new OsuSpriteText - { - Font = OsuFont.GetFont(size: 18, weight: FontWeight.Regular) - }, supporterTag = new SupporterIcon { Height = 20, From a1fb41ea66c7489d1036f7e17ca0f9eb5d9f9ba5 Mon Sep 17 00:00:00 2001 From: Joehu Date: Tue, 2 Jul 2019 10:53:52 -0700 Subject: [PATCH 119/267] Use FillFlowContainer on flag and country --- osu.Game/Overlays/Profile/Header/TopHeaderContainer.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/osu.Game/Overlays/Profile/Header/TopHeaderContainer.cs b/osu.Game/Overlays/Profile/Header/TopHeaderContainer.cs index bdf047478d..b0d7070994 100644 --- a/osu.Game/Overlays/Profile/Header/TopHeaderContainer.cs +++ b/osu.Game/Overlays/Profile/Header/TopHeaderContainer.cs @@ -119,10 +119,11 @@ namespace osu.Game.Overlays.Profile.Header Margin = new MarginPadding { Top = 10 }, Colour = colours.GreySeafoamLighter, }, - new Container + new FillFlowContainer { AutoSizeAxes = Axes.Both, Margin = new MarginPadding { Top = 5 }, + Direction = FillDirection.Horizontal, Children = new Drawable[] { userFlag = new UpdateableFlag @@ -133,7 +134,7 @@ namespace osu.Game.Overlays.Profile.Header userCountryText = new OsuSpriteText { Font = OsuFont.GetFont(size: 17.5f, weight: FontWeight.Regular), - Margin = new MarginPadding { Left = 40 }, + Margin = new MarginPadding { Left = 10 }, Origin = Anchor.CentreLeft, Anchor = Anchor.CentreLeft, Colour = colours.GreySeafoamLighter, From 8b4ef52c13b2ce84c7ea387c9e1f08450b9a19bb Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Wed, 3 Jul 2019 07:27:24 +0300 Subject: [PATCH 120/267] Revert unnecessary changes --- osu.Game/Screens/Play/HUDOverlay.cs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/osu.Game/Screens/Play/HUDOverlay.cs b/osu.Game/Screens/Play/HUDOverlay.cs index 6488bf9452..017bf70133 100644 --- a/osu.Game/Screens/Play/HUDOverlay.cs +++ b/osu.Game/Screens/Play/HUDOverlay.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; -using System.Linq; using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Framework.Graphics; @@ -41,7 +40,6 @@ namespace osu.Game.Screens.Play private readonly IReadOnlyList mods; private Bindable showHud; - private Bindable hideHealthbar; private readonly Container visibilityContainer; private readonly BindableBool replayLoaded = new BindableBool(); @@ -79,11 +77,11 @@ namespace osu.Game.Screens.Play ComboCounter = CreateComboCounter(), }, }, + HealthDisplay = CreateHealthDisplay(), Progress = CreateProgress(), ModDisplay = CreateModsContainer(), } }, - HealthDisplay = CreateHealthDisplay(), PlayerSettingsOverlay = CreatePlayerSettingsOverlay(), new FillFlowContainer { @@ -114,14 +112,8 @@ namespace osu.Game.Screens.Play ModDisplay.Current.Value = mods; - hideHealthbar = config.GetBindable(OsuSetting.HideHealthBar); showHud = config.GetBindable(OsuSetting.ShowInterface); - showHud.ValueChanged += visible => - { - visibilityContainer.FadeTo(visible.NewValue ? 1 : 0, duration); - if (!(hideHealthbar.Value && mods.OfType().Any())) - HealthDisplay.FadeTo(visible.NewValue ? 1 : 0, duration); - }; + showHud.ValueChanged += visible => visibilityContainer.FadeTo(visible.NewValue ? 1 : 0, duration); showHud.TriggerChange(); if (!showHud.Value && !hasShownNotificationOnce) From 3f39541cc2daa11b9e319a96ae5b2739db25af51 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Wed, 3 Jul 2019 05:11:11 +0300 Subject: [PATCH 121/267] Fade health bar on value change --- osu.Game/Rulesets/Mods/ModBlockFail.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/osu.Game/Rulesets/Mods/ModBlockFail.cs b/osu.Game/Rulesets/Mods/ModBlockFail.cs index 42ec82f8aa..f98521da69 100644 --- a/osu.Game/Rulesets/Mods/ModBlockFail.cs +++ b/osu.Game/Rulesets/Mods/ModBlockFail.cs @@ -2,14 +2,17 @@ // See the LICENCE file in the repository root for full licence text. using osu.Framework.Bindables; +using osu.Framework.Graphics; using osu.Game.Configuration; using osu.Game.Screens.Play; +using osu.Game.Screens.Play.HUD; namespace osu.Game.Rulesets.Mods { public abstract class ModBlockFail : Mod, IApplicableFailOverride, IApplicableToHUD, IReadFromConfig { - private Bindable hideHealthBar = new Bindable(); + private Bindable hideHealthBar; + private HealthDisplay healthDisplay; /// /// We never fail, 'yo. @@ -19,12 +22,13 @@ namespace osu.Game.Rulesets.Mods public void ReadFromConfig(OsuConfigManager config) { hideHealthBar = config.GetBindable(OsuSetting.HideHealthBar); + hideHealthBar.ValueChanged += v => healthDisplay?.FadeTo(v.NewValue ? 0 : 1, 250, Easing.OutQuint); } public void ApplyToHUD(HUDOverlay overlay) { - if (hideHealthBar.Value) - overlay.HealthDisplay.Hide(); + healthDisplay = overlay.HealthDisplay; + hideHealthBar?.TriggerChange(); } } } From 23acddcb562fcdfd6d66e2182177901d1db55595 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 3 Jul 2019 12:02:35 +0900 Subject: [PATCH 122/267] Rename download buttons to avoid ambiguity --- .../Visual/Online/TestSceneBeatmapSetOverlay.cs | 2 +- .../Visual/Online/TestSceneDirectDownloadButton.cs | 4 ++-- .../{OsuDownloadButton.cs => DownloadButton.cs} | 4 ++-- .../{DownloadButton.cs => HeaderDownloadButton.cs} | 4 ++-- osu.Game/Overlays/BeatmapSet/Header.cs | 9 ++++----- osu.Game/Overlays/Direct/DirectGridPanel.cs | 2 +- osu.Game/Overlays/Direct/DirectListPanel.cs | 4 ++-- .../{DownloadButton.cs => PanelDownloadButton.cs} | 10 +++++----- osu.Game/Screens/Play/ReplayDownloadButton.cs | 4 ++-- 9 files changed, 21 insertions(+), 22 deletions(-) rename osu.Game/Graphics/UserInterface/{OsuDownloadButton.cs => DownloadButton.cs} (96%) rename osu.Game/Overlays/BeatmapSet/Buttons/{DownloadButton.cs => HeaderDownloadButton.cs} (97%) rename osu.Game/Overlays/Direct/{DownloadButton.cs => PanelDownloadButton.cs} (86%) diff --git a/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs b/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs index c494f5ef33..a9c44c9020 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs @@ -32,7 +32,7 @@ namespace osu.Game.Tests.Visual.Online typeof(BasicStats), typeof(BeatmapPicker), typeof(Details), - typeof(DownloadButton), + typeof(HeaderDownloadButton), typeof(FavouriteButton), typeof(Header), typeof(HeaderButton), diff --git a/osu.Game.Tests/Visual/Online/TestSceneDirectDownloadButton.cs b/osu.Game.Tests/Visual/Online/TestSceneDirectDownloadButton.cs index 5a5833feb6..5b0c2d3c67 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneDirectDownloadButton.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneDirectDownloadButton.cs @@ -20,7 +20,7 @@ namespace osu.Game.Tests.Visual.Online { public override IReadOnlyList RequiredTypes => new[] { - typeof(DownloadButton) + typeof(PanelDownloadButton) }; private TestDownloadButton downloadButton; @@ -143,7 +143,7 @@ namespace osu.Game.Tests.Visual.Online return beatmap; } - private class TestDownloadButton : DownloadButton + private class TestDownloadButton : PanelDownloadButton { public new bool DownloadEnabled => base.DownloadEnabled; diff --git a/osu.Game/Graphics/UserInterface/OsuDownloadButton.cs b/osu.Game/Graphics/UserInterface/DownloadButton.cs similarity index 96% rename from osu.Game/Graphics/UserInterface/OsuDownloadButton.cs rename to osu.Game/Graphics/UserInterface/DownloadButton.cs index 6e95c7e291..41b90d3802 100644 --- a/osu.Game/Graphics/UserInterface/OsuDownloadButton.cs +++ b/osu.Game/Graphics/UserInterface/DownloadButton.cs @@ -11,7 +11,7 @@ using osuTK; namespace osu.Game.Graphics.UserInterface { - public class OsuDownloadButton : OsuAnimatedButton + public class DownloadButton : OsuAnimatedButton { public readonly Bindable State = new Bindable(); @@ -21,7 +21,7 @@ namespace osu.Game.Graphics.UserInterface private OsuColour colours; - public OsuDownloadButton() + public DownloadButton() { Children = new Drawable[] { diff --git a/osu.Game/Overlays/BeatmapSet/Buttons/DownloadButton.cs b/osu.Game/Overlays/BeatmapSet/Buttons/HeaderDownloadButton.cs similarity index 97% rename from osu.Game/Overlays/BeatmapSet/Buttons/DownloadButton.cs rename to osu.Game/Overlays/BeatmapSet/Buttons/HeaderDownloadButton.cs index 3e8a5a8324..fe10287491 100644 --- a/osu.Game/Overlays/BeatmapSet/Buttons/DownloadButton.cs +++ b/osu.Game/Overlays/BeatmapSet/Buttons/HeaderDownloadButton.cs @@ -20,7 +20,7 @@ using osuTK.Graphics; namespace osu.Game.Overlays.BeatmapSet.Buttons { - public class DownloadButton : BeatmapDownloadTrackingComposite, IHasTooltip + public class HeaderDownloadButton : BeatmapDownloadTrackingComposite, IHasTooltip { private readonly bool noVideo; @@ -31,7 +31,7 @@ namespace osu.Game.Overlays.BeatmapSet.Buttons private ShakeContainer shakeContainer; private HeaderButton button; - public DownloadButton(BeatmapSetInfo beatmapSet, bool noVideo = false) + public HeaderDownloadButton(BeatmapSetInfo beatmapSet, bool noVideo = false) : base(beatmapSet) { this.noVideo = noVideo; diff --git a/osu.Game/Overlays/BeatmapSet/Header.cs b/osu.Game/Overlays/BeatmapSet/Header.cs index 1c1167d08e..b50eac2c1a 100644 --- a/osu.Game/Overlays/BeatmapSet/Header.cs +++ b/osu.Game/Overlays/BeatmapSet/Header.cs @@ -18,7 +18,6 @@ using osu.Game.Overlays.BeatmapSet.Buttons; using osu.Game.Overlays.Direct; using osuTK; using osuTK.Graphics; -using DownloadButton = osu.Game.Overlays.BeatmapSet.Buttons.DownloadButton; namespace osu.Game.Overlays.BeatmapSet { @@ -268,7 +267,7 @@ namespace osu.Game.Overlays.BeatmapSet { case DownloadState.LocallyAvailable: // temporary for UX until new design is implemented. - downloadButtonsContainer.Child = new Direct.DownloadButton(BeatmapSet.Value) + downloadButtonsContainer.Child = new PanelDownloadButton(BeatmapSet.Value) { Width = 50, RelativeSizeAxes = Axes.Y @@ -278,13 +277,13 @@ namespace osu.Game.Overlays.BeatmapSet case DownloadState.Downloading: case DownloadState.Downloaded: // temporary to avoid showing two buttons for maps with novideo. will be fixed in new beatmap overlay design. - downloadButtonsContainer.Child = new DownloadButton(BeatmapSet.Value); + downloadButtonsContainer.Child = new HeaderDownloadButton(BeatmapSet.Value); break; default: - downloadButtonsContainer.Child = new DownloadButton(BeatmapSet.Value); + downloadButtonsContainer.Child = new HeaderDownloadButton(BeatmapSet.Value); if (BeatmapSet.Value.OnlineInfo.HasVideo) - downloadButtonsContainer.Add(new DownloadButton(BeatmapSet.Value, true)); + downloadButtonsContainer.Add(new HeaderDownloadButton(BeatmapSet.Value, true)); break; } } diff --git a/osu.Game/Overlays/Direct/DirectGridPanel.cs b/osu.Game/Overlays/Direct/DirectGridPanel.cs index 5756a4593d..243e79eb9b 100644 --- a/osu.Game/Overlays/Direct/DirectGridPanel.cs +++ b/osu.Game/Overlays/Direct/DirectGridPanel.cs @@ -155,7 +155,7 @@ namespace osu.Game.Overlays.Direct }, }, }, - new DownloadButton(SetInfo) + new PanelDownloadButton(SetInfo) { Size = new Vector2(50, 30), Margin = new MarginPadding(horizontal_padding), diff --git a/osu.Game/Overlays/Direct/DirectListPanel.cs b/osu.Game/Overlays/Direct/DirectListPanel.cs index 6f3b5bc5f1..5757e1445b 100644 --- a/osu.Game/Overlays/Direct/DirectListPanel.cs +++ b/osu.Game/Overlays/Direct/DirectListPanel.cs @@ -27,7 +27,7 @@ namespace osu.Game.Overlays.Direct private const float height = 70; private FillFlowContainer statusContainer; - protected DownloadButton DownloadButton; + protected PanelDownloadButton DownloadButton; private PlayButton playButton; private Box progressBar; @@ -150,7 +150,7 @@ namespace osu.Game.Overlays.Direct Anchor = Anchor.CentreRight, Origin = Anchor.CentreRight, AutoSizeAxes = Axes.Both, - Child = DownloadButton = new DownloadButton(SetInfo) + Child = DownloadButton = new PanelDownloadButton(SetInfo) { Size = new Vector2(height - vertical_padding * 3), Margin = new MarginPadding { Left = vertical_padding * 2, Right = vertical_padding }, diff --git a/osu.Game/Overlays/Direct/DownloadButton.cs b/osu.Game/Overlays/Direct/PanelDownloadButton.cs similarity index 86% rename from osu.Game/Overlays/Direct/DownloadButton.cs rename to osu.Game/Overlays/Direct/PanelDownloadButton.cs index dac1521bf3..017f92abaa 100644 --- a/osu.Game/Overlays/Direct/DownloadButton.cs +++ b/osu.Game/Overlays/Direct/PanelDownloadButton.cs @@ -1,4 +1,4 @@ -// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using osu.Framework.Allocation; @@ -10,16 +10,16 @@ using osu.Game.Online; namespace osu.Game.Overlays.Direct { - public class DownloadButton : BeatmapDownloadTrackingComposite + public class PanelDownloadButton : BeatmapDownloadTrackingComposite { protected bool DownloadEnabled => button.Enabled.Value; private readonly bool noVideo; private readonly ShakeContainer shakeContainer; - private readonly OsuDownloadButton button; + private readonly DownloadButton button; - public DownloadButton(BeatmapSetInfo beatmapSet, bool noVideo = false) + public PanelDownloadButton(BeatmapSetInfo beatmapSet, bool noVideo = false) : base(beatmapSet) { this.noVideo = noVideo; @@ -27,7 +27,7 @@ namespace osu.Game.Overlays.Direct InternalChild = shakeContainer = new ShakeContainer { RelativeSizeAxes = Axes.Both, - Child = button = new OsuDownloadButton + Child = button = new DownloadButton { RelativeSizeAxes = Axes.Both, }, diff --git a/osu.Game/Screens/Play/ReplayDownloadButton.cs b/osu.Game/Screens/Play/ReplayDownloadButton.cs index 5acf4e83d9..748fe8cc90 100644 --- a/osu.Game/Screens/Play/ReplayDownloadButton.cs +++ b/osu.Game/Screens/Play/ReplayDownloadButton.cs @@ -13,7 +13,7 @@ namespace osu.Game.Screens.Play { public class ReplayDownloadButton : DownloadTrackingComposite { - private OsuDownloadButton button; + private DownloadButton button; private ShakeContainer shakeContainer; private ReplayAvailability replayAvailability @@ -41,7 +41,7 @@ namespace osu.Game.Screens.Play InternalChild = shakeContainer = new ShakeContainer { RelativeSizeAxes = Axes.Both, - Child = button = new OsuDownloadButton + Child = button = new DownloadButton { RelativeSizeAxes = Axes.Both, } From d22a1229cbba13668b9f2abd5b33a220041d9658 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 3 Jul 2019 12:06:20 +0900 Subject: [PATCH 123/267] Remove unnecessary disposal --- osu.Game/Overlays/Direct/PanelDownloadButton.cs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/osu.Game/Overlays/Direct/PanelDownloadButton.cs b/osu.Game/Overlays/Direct/PanelDownloadButton.cs index 017f92abaa..4037cd46f3 100644 --- a/osu.Game/Overlays/Direct/PanelDownloadButton.cs +++ b/osu.Game/Overlays/Direct/PanelDownloadButton.cs @@ -71,12 +71,5 @@ namespace osu.Game.Overlays.Direct } }; } - - protected override void Dispose(bool isDisposing) - { - base.Dispose(isDisposing); - - button?.State.UnbindAll(); - } } } From 98daaf634ae4851fec97326efe1e9a0eea65137f Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Wed, 3 Jul 2019 06:44:17 +0300 Subject: [PATCH 124/267] Simplify changes --- osu.Game/Rulesets/Mods/ModBlockFail.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/osu.Game/Rulesets/Mods/ModBlockFail.cs b/osu.Game/Rulesets/Mods/ModBlockFail.cs index f98521da69..e37b1b0698 100644 --- a/osu.Game/Rulesets/Mods/ModBlockFail.cs +++ b/osu.Game/Rulesets/Mods/ModBlockFail.cs @@ -22,13 +22,12 @@ namespace osu.Game.Rulesets.Mods public void ReadFromConfig(OsuConfigManager config) { hideHealthBar = config.GetBindable(OsuSetting.HideHealthBar); - hideHealthBar.ValueChanged += v => healthDisplay?.FadeTo(v.NewValue ? 0 : 1, 250, Easing.OutQuint); } public void ApplyToHUD(HUDOverlay overlay) { healthDisplay = overlay.HealthDisplay; - hideHealthBar?.TriggerChange(); + hideHealthBar.BindValueChanged(v => healthDisplay.FadeTo(v.NewValue ? 0 : 1, 250, Easing.OutQuint), true); } } } From 1189092e2033daa69f9fc224604de88fdbce546a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 3 Jul 2019 12:49:16 +0900 Subject: [PATCH 125/267] Remove redundant scale specification --- osu.Game/Online/Leaderboards/DrawableRank.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/osu.Game/Online/Leaderboards/DrawableRank.cs b/osu.Game/Online/Leaderboards/DrawableRank.cs index 4d81ead494..50cb58c6ab 100644 --- a/osu.Game/Online/Leaderboards/DrawableRank.cs +++ b/osu.Game/Online/Leaderboards/DrawableRank.cs @@ -49,7 +49,6 @@ namespace osu.Game.Online.Leaderboards RelativeSizeAxes = Axes.Both, ColourDark = rankColour.Darken(0.1f), ColourLight = rankColour.Lighten(0.1f), - TriangleScale = 1, Velocity = 0.25f, }, new OsuSpriteText From 9eef8243c0906efb59013c66da45a7044a18fc1b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 3 Jul 2019 14:22:14 +0900 Subject: [PATCH 126/267] Update bounty/contribution information --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 55f2eebec9..6ef56149ab 100644 --- a/README.md +++ b/README.md @@ -92,11 +92,13 @@ Code analysis can be run with `powershell ./build.ps1` or `build.sh`. This is cu We welcome all contributions, but keep in mind that we already have a lot of the UI designed. If you wish to work on something with the intention on having it included in the official distribution, please open an issue for discussion and we will give you what you need from a design perspective to proceed. If you want to make *changes* to the design, we recommend you open an issue with your intentions before spending too much time, to ensure no effort is wasted. -Please make sure you are familiar with the [development and testing](https://github.com/ppy/osu-framework/wiki/Development-and-Testing) procedure we have set up. New component development, and where possible, bug fixing and debugging existing components **should always be done under VisualTests**. +If you're unsure of what you can help with, check out the [list of open issues](https://github.com/ppy/osu/issues) (especially those with the ["good first issue"](https://github.com/ppy/osu/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22good+first+issue%22) label). -Contributions can be made via pull requests to this repository. We hope to credit and reward larger contributions via a [bounty system](https://www.bountysource.com/teams/ppy). If you're unsure of what you can help with, check out the [list of open issues](https://github.com/ppy/osu/issues). +Before starting, please make sure you are familiar with the [development and testing](https://github.com/ppy/osu-framework/wiki/Development-and-Testing) procedure we have set up. New component development, and where possible, bug fixing and debugging existing components **should always be done under VisualTests**. -Note that while we already have certain standards in place, nothing is set in stone. If you have an issue with the way code is structured; with any libraries we are using; with any processes involved with contributing, *please* bring it up. I welcome all feedback so we can make contributing to this project as pain-free as possible. +Note that while we already have certain standards in place, nothing is set in stone. If you have an issue with the way code is structured; with any libraries we are using; with any processes involved with contributing, *please* bring it up. We welcome all feedback so we can make contributing to this project as pain-free as possible. + +For those interested, we love to reward quality contributions via [awarding bounties](https://docs.google.com/forms/d/e/1FAIpQLSet_8iFAgPMG526pBZ2Kic6HSh7XPM3fE8xPcnWNkMzINDdYg/viewform). Don't hesitate to request a bounty for your work on this project. ## Licence From 6c46643c26c6d5ad5539e2bbb812d4b30377cc2e Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 3 Jul 2019 14:26:19 +0900 Subject: [PATCH 127/267] Update icon --- README.md | 6 ++++-- assets/lazer.png | Bin 0 -> 39498 bytes 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 assets/lazer.png diff --git a/README.md b/README.md index 6ef56149ab..18663353b4 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +

+ +

+ # osu! [![Build status](https://ci.appveyor.com/api/projects/status/u2p01nx7l6og8buh?svg=true)](https://ci.appveyor.com/project/peppy/osu) [![CodeFactor](https://www.codefactor.io/repository/github/ppy/osu/badge)](https://www.codefactor.io/repository/github/ppy/osu) [![dev chat](https://discordapp.com/api/guilds/188630481301012481/widget.png?style=shield)](https://discord.gg/ppy) @@ -22,8 +26,6 @@ Detailed changelogs are published on the [official osu! site](https://osu.ppy.sh ### Releases -![](https://puu.sh/DCmvA/f6a74f5fbb.png) - If you are not interested in developing the game, you can still consume our [binary releases](https://github.com/ppy/osu/releases). **Latest build:** diff --git a/assets/lazer.png b/assets/lazer.png new file mode 100644 index 0000000000000000000000000000000000000000..075a8e7184ad508cedd8fe9ae549d8cea696b51a GIT binary patch literal 39498 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 X{r?ZpP_kcw2Ot$CjR&O)ra}J$c_$^Y literal 0 HcmV?d00001 From 299e9c9c33c7d1c1423813c616eac6085c67b714 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 3 Jul 2019 14:34:51 +0900 Subject: [PATCH 128/267] Update bounty line --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 18663353b4..2c330e403c 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,7 @@ Before starting, please make sure you are familiar with the [development and tes Note that while we already have certain standards in place, nothing is set in stone. If you have an issue with the way code is structured; with any libraries we are using; with any processes involved with contributing, *please* bring it up. We welcome all feedback so we can make contributing to this project as pain-free as possible. -For those interested, we love to reward quality contributions via [awarding bounties](https://docs.google.com/forms/d/e/1FAIpQLSet_8iFAgPMG526pBZ2Kic6HSh7XPM3fE8xPcnWNkMzINDdYg/viewform). Don't hesitate to request a bounty for your work on this project. +For those interested, we love to reward quality contributions via bounties, paid out via paypal or osu! supporter tags. Don't hesitate to [request a bounty](https://docs.google.com/forms/d/e/1FAIpQLSet_8iFAgPMG526pBZ2Kic6HSh7XPM3fE8xPcnWNkMzINDdYg/viewform) for your work on this project. ## Licence From 6e308945b184e3ae8ae4bcc24a724be60de82491 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 3 Jul 2019 15:22:17 +0900 Subject: [PATCH 129/267] Fix logo visualisation trying to catch up after being off-screen --- osu.Game/Screens/Menu/LogoVisualisation.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/osu.Game/Screens/Menu/LogoVisualisation.cs b/osu.Game/Screens/Menu/LogoVisualisation.cs index 2ba82b5d9b..39bda799b5 100644 --- a/osu.Game/Screens/Menu/LogoVisualisation.cs +++ b/osu.Game/Screens/Menu/LogoVisualisation.cs @@ -131,7 +131,8 @@ namespace osu.Game.Screens.Menu { base.LoadComplete(); - Scheduler.AddDelayed(updateAmplitudes, time_between_updates, true); + var delayed = Scheduler.AddDelayed(updateAmplitudes, time_between_updates, true); + delayed.PerformRepeatCatchUpExecutions = false; } protected override void Update() From 6391d21af1b5c671fc99d6cfc9d483971840b6f6 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Wed, 3 Jul 2019 15:54:21 +0900 Subject: [PATCH 130/267] Remove test used for visualization --- .../UserInterface/TestSceneButtonSystem.cs | 21 +------------------ 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs b/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs index 6c4d9b20f7..c8cc864089 100644 --- a/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs +++ b/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs @@ -9,7 +9,6 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Colour; using osu.Framework.Graphics.Shapes; using osu.Game.Screens.Menu; -using osuTK; using osuTK.Graphics; namespace osu.Game.Tests.Visual.UserInterface @@ -43,25 +42,7 @@ namespace osu.Game.Tests.Visual.UserInterface buttons.SetOsuLogo(logo); foreach (var s in Enum.GetValues(typeof(ButtonSystemState)).OfType().Skip(1)) - AddStep($"State to {s}", () => - { - buttons.State = s; - - if (buttons.State == ButtonSystemState.EnteringMode) - { - buttons.FadeOut(400, Easing.InSine); - buttons.MoveTo(new Vector2(-800, 0), 400, Easing.InSine); - logo.FadeOut(300, Easing.InSine) - .ScaleTo(0.2f, 300, Easing.InSine); - } - else - { - buttons.FadeIn(400, Easing.OutQuint); - buttons.MoveTo(new Vector2(0), 400, Easing.OutQuint); - logo.FadeColour(Color4.White, 100, Easing.OutQuint); - logo.FadeIn(100, Easing.OutQuint); - } - }); + AddStep($"State to {s}", () => buttons.State = s); } } } From d9e646d9ef75290af7cf6a79ef59c006e121928e Mon Sep 17 00:00:00 2001 From: miterosan Date: Wed, 3 Jul 2019 09:51:09 +0200 Subject: [PATCH 131/267] Use addRuleset inside loadRulesetFromFile --- osu.Game/Rulesets/RulesetStore.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/osu.Game/Rulesets/RulesetStore.cs b/osu.Game/Rulesets/RulesetStore.cs index 17834f8545..15adc258a1 100644 --- a/osu.Game/Rulesets/RulesetStore.cs +++ b/osu.Game/Rulesets/RulesetStore.cs @@ -143,8 +143,7 @@ namespace osu.Game.Rulesets try { - var assembly = Assembly.LoadFrom(file); - loaded_assemblies[assembly] = assembly.GetTypes().First(t => t.IsPublic && t.IsSubclassOf(typeof(Ruleset))); + addRuleset(Assembly.LoadFrom(file)); } catch (Exception e) { From ab244d1b7f7cb1ab4abf7c65aa043571cc8165b9 Mon Sep 17 00:00:00 2001 From: miterosan Date: Wed, 3 Jul 2019 10:21:18 +0200 Subject: [PATCH 132/267] Only log that the rulesets could not be loaded from a directory. --- osu.Game/Rulesets/RulesetStore.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/Rulesets/RulesetStore.cs b/osu.Game/Rulesets/RulesetStore.cs index 15adc258a1..31c8d03df4 100644 --- a/osu.Game/Rulesets/RulesetStore.cs +++ b/osu.Game/Rulesets/RulesetStore.cs @@ -31,9 +31,9 @@ namespace osu.Game.Rulesets foreach (string file in files.Where(f => !Path.GetFileName(f).Contains("Tests"))) loadRulesetFromFile(file); } - catch (Exception e) + catch { - Logger.Error(e, $"Could not load rulesets from directory {Environment.CurrentDirectory}"); + Logger.Log($"Could not load rulesets from directory {Environment.CurrentDirectory}"); } } From 43d7f66c5bb095bd63ba02de3d34eaefe4c34d79 Mon Sep 17 00:00:00 2001 From: miterosan Date: Wed, 3 Jul 2019 10:54:10 +0200 Subject: [PATCH 133/267] Add comment about the android ruleset situation. --- osu.Game/Rulesets/RulesetStore.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game/Rulesets/RulesetStore.cs b/osu.Game/Rulesets/RulesetStore.cs index 31c8d03df4..d0f6971e1c 100644 --- a/osu.Game/Rulesets/RulesetStore.cs +++ b/osu.Game/Rulesets/RulesetStore.cs @@ -22,6 +22,8 @@ namespace osu.Game.Rulesets { AppDomain.CurrentDomain.AssemblyResolve += currentDomain_AssemblyResolve; + // On android in release configuration the assemblies are loaded from the apk directly into memory. + // In this case there is no way to access the ruleset assemblies from the filesystem. addLoadedRulesets(); try From 9805adc61d527063082a0740f5ebbeda9c64bc8d Mon Sep 17 00:00:00 2001 From: naoey Date: Wed, 3 Jul 2019 14:25:59 +0530 Subject: [PATCH 134/267] Fix online ScoreInfo having the wrong ruleset --- osu.Game/Online/API/Requests/GetScoresRequest.cs | 3 +++ .../API/Requests/Responses/APILegacyScoreInfo.cs | 11 ----------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/osu.Game/Online/API/Requests/GetScoresRequest.cs b/osu.Game/Online/API/Requests/GetScoresRequest.cs index 0b6f65a0e0..e56df05570 100644 --- a/osu.Game/Online/API/Requests/GetScoresRequest.cs +++ b/osu.Game/Online/API/Requests/GetScoresRequest.cs @@ -34,7 +34,10 @@ namespace osu.Game.Online.API.Requests private void onSuccess(APILegacyScores r) { foreach (APILegacyScoreInfo score in r.Scores) + { score.Beatmap = beatmap; + score.Ruleset = ruleset; + } } protected override WebRequest CreateWebRequest() diff --git a/osu.Game/Online/API/Requests/Responses/APILegacyScoreInfo.cs b/osu.Game/Online/API/Requests/Responses/APILegacyScoreInfo.cs index 5a18cf63f9..17da255873 100644 --- a/osu.Game/Online/API/Requests/Responses/APILegacyScoreInfo.cs +++ b/osu.Game/Online/API/Requests/Responses/APILegacyScoreInfo.cs @@ -116,17 +116,6 @@ namespace osu.Game.Online.API.Requests.Responses [JsonProperty(@"mods")] private string[] modStrings { get; set; } - public override BeatmapInfo Beatmap - { - get => base.Beatmap; - set - { - base.Beatmap = value; - if (Beatmap.Ruleset != null) - Ruleset = value.Ruleset; - } - } - public override RulesetInfo Ruleset { get => base.Ruleset; From 5ecb764cdcf65ddd0f9a0bae68f30cda46072542 Mon Sep 17 00:00:00 2001 From: miterosan Date: Wed, 3 Jul 2019 10:57:09 +0200 Subject: [PATCH 135/267] Remove whitespaces and lowercase the comments --- osu.Game/Rulesets/RulesetStore.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/Rulesets/RulesetStore.cs b/osu.Game/Rulesets/RulesetStore.cs index d0f6971e1c..a7d62665db 100644 --- a/osu.Game/Rulesets/RulesetStore.cs +++ b/osu.Game/Rulesets/RulesetStore.cs @@ -22,8 +22,8 @@ namespace osu.Game.Rulesets { AppDomain.CurrentDomain.AssemblyResolve += currentDomain_AssemblyResolve; - // On android in release configuration the assemblies are loaded from the apk directly into memory. - // In this case there is no way to access the ruleset assemblies from the filesystem. + //on android in release configuration the assemblies are loaded from the apk directly into memory. + //in this case there is no way to access the rulesets assemblies from the filesystem. addLoadedRulesets(); try From ccae4ce95ef77a5475ea122653bbc5f393a886e2 Mon Sep 17 00:00:00 2001 From: naoey Date: Wed, 3 Jul 2019 14:39:11 +0530 Subject: [PATCH 136/267] Fix local beatmap leaderboard displaying scores from all game modes --- osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs index aafa6bb0eb..62f93afbbb 100644 --- a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs +++ b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs @@ -55,7 +55,9 @@ namespace osu.Game.Screens.Select.Leaderboards { if (Scope == BeatmapLeaderboardScope.Local) { - Scores = scoreManager.QueryScores(s => !s.DeletePending && s.Beatmap.ID == Beatmap.ID).OrderByDescending(s => s.TotalScore).ToArray(); + Scores = scoreManager + .QueryScores(s => !s.DeletePending && s.Beatmap.ID == Beatmap.ID && s.Ruleset.ID == ruleset.Value.ID) + .OrderByDescending(s => s.TotalScore).ToArray(); PlaceholderState = Scores.Any() ? PlaceholderState.Successful : PlaceholderState.NoScores; return null; } From 62dd89197c7fce70d38744a01beea5ad74056872 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 3 Jul 2019 18:36:04 +0900 Subject: [PATCH 137/267] Refactor comment slightly --- osu.Game/Rulesets/RulesetStore.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/Rulesets/RulesetStore.cs b/osu.Game/Rulesets/RulesetStore.cs index a7d62665db..4476f16e32 100644 --- a/osu.Game/Rulesets/RulesetStore.cs +++ b/osu.Game/Rulesets/RulesetStore.cs @@ -22,8 +22,8 @@ namespace osu.Game.Rulesets { AppDomain.CurrentDomain.AssemblyResolve += currentDomain_AssemblyResolve; - //on android in release configuration the assemblies are loaded from the apk directly into memory. - //in this case there is no way to access the rulesets assemblies from the filesystem. + // On android in release configuration assemblies are loaded from the apk directly into memory. + // We cannot read assemblies from cwd, so should check loaded assemblies isntead. addLoadedRulesets(); try From 06ef8f71e96e2af7242c558c2cd279afe3c72a6c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 3 Jul 2019 18:41:01 +0900 Subject: [PATCH 138/267] Fix typo --- osu.Game/Rulesets/RulesetStore.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/RulesetStore.cs b/osu.Game/Rulesets/RulesetStore.cs index 4476f16e32..69ce5f97b6 100644 --- a/osu.Game/Rulesets/RulesetStore.cs +++ b/osu.Game/Rulesets/RulesetStore.cs @@ -23,7 +23,7 @@ namespace osu.Game.Rulesets AppDomain.CurrentDomain.AssemblyResolve += currentDomain_AssemblyResolve; // On android in release configuration assemblies are loaded from the apk directly into memory. - // We cannot read assemblies from cwd, so should check loaded assemblies isntead. + // We cannot read assemblies from cwd, so should check loaded assemblies instead. addLoadedRulesets(); try From 8120bb36bc598acadb0d30952bd370fdeb639fae Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 3 Jul 2019 18:42:10 +0900 Subject: [PATCH 139/267] More methods --- osu.Game/Rulesets/RulesetStore.cs | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/osu.Game/Rulesets/RulesetStore.cs b/osu.Game/Rulesets/RulesetStore.cs index 69ce5f97b6..fd42f96c92 100644 --- a/osu.Game/Rulesets/RulesetStore.cs +++ b/osu.Game/Rulesets/RulesetStore.cs @@ -24,19 +24,9 @@ namespace osu.Game.Rulesets // On android in release configuration assemblies are loaded from the apk directly into memory. // We cannot read assemblies from cwd, so should check loaded assemblies instead. - addLoadedRulesets(); + loadFromAppDomain(); - try - { - string[] files = Directory.GetFiles(Environment.CurrentDirectory, $"{ruleset_library_prefix}.*.dll"); - - foreach (string file in files.Where(f => !Path.GetFileName(f).Contains("Tests"))) - loadRulesetFromFile(file); - } - catch - { - Logger.Log($"Could not load rulesets from directory {Environment.CurrentDirectory}"); - } + loadFromDisk(); } public RulesetStore(IDatabaseContextFactory factory) @@ -123,7 +113,7 @@ namespace osu.Game.Rulesets } } - private static void addLoadedRulesets() + private static void loadFromAppDomain() { foreach (var ruleset in AppDomain.CurrentDomain.GetAssemblies()) { @@ -136,6 +126,21 @@ namespace osu.Game.Rulesets } } + private static void loadFromDisk() + { + try + { + string[] files = Directory.GetFiles(Environment.CurrentDirectory, $"{ruleset_library_prefix}.*.dll"); + + foreach (string file in files.Where(f => !Path.GetFileName(f).Contains("Tests"))) + loadRulesetFromFile(file); + } + catch + { + Logger.Log($"Could not load rulesets from directory {Environment.CurrentDirectory}"); + } + } + private static void loadRulesetFromFile(string file) { var filename = Path.GetFileNameWithoutExtension(file); From cc9a28afa81042a16284b7ce11d9164d548261a1 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 3 Jul 2019 19:42:16 +0900 Subject: [PATCH 140/267] Add shared base class for both mod imlpementations --- osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs | 62 +------------- osu.Game.Rulesets.Osu/Mods/OsuModGrow.cs | 70 +--------------- .../Mods/OsuModeObjectScaleTween.cs | 84 +++++++++++++++++++ 3 files changed, 89 insertions(+), 127 deletions(-) create mode 100644 osu.Game.Rulesets.Osu/Mods/OsuModeObjectScaleTween.cs diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs index cbefc42c3b..adca95cf8a 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDeflate.cs @@ -1,17 +1,11 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -using System.Collections.Generic; -using osu.Framework.Graphics; using osu.Framework.Graphics.Sprites; -using osu.Game.Rulesets.Mods; -using osu.Game.Rulesets.Objects.Drawables; -using osu.Game.Rulesets.Osu.Objects; -using osu.Game.Rulesets.Osu.Objects.Drawables; namespace osu.Game.Rulesets.Osu.Mods { - public class OsuModDeflate : Mod, IApplicableToDrawableHitObjects + public class OsuModDeflate : OsuModeObjectScaleTween { public override string Name => "Deflate"; @@ -19,58 +13,8 @@ namespace osu.Game.Rulesets.Osu.Mods public override IconUsage Icon => FontAwesome.Solid.CompressArrowsAlt; - public override ModType Type => ModType.Fun; + public override string Description => "Hit them at the right size!"; - public override string Description => "Become one with the approach circle..."; - - public override double ScoreMultiplier => 1; - - public void ApplyToDrawableHitObjects(IEnumerable drawables) - { - foreach (var drawable in drawables) - { - switch (drawable) - { - case DrawableSpinner _: - continue; - - default: - drawable.ApplyCustomUpdateState += ApplyCustomState; - break; - } - } - } - - protected virtual void ApplyCustomState(DrawableHitObject drawable, ArmedState state) - { - var h = (OsuHitObject)drawable.HitObject; - - // apply grow effect - switch (drawable) - { - case DrawableSliderHead _: - case DrawableSliderTail _: - // special cases we should *not* be scaling. - break; - - case DrawableSlider _: - case DrawableHitCircle _: - { - using (drawable.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) - drawable.ScaleTo(2f).Then().ScaleTo(1f, h.TimePreempt); // sole difference to grow mod - break; - } - } - - // remove approach circles - switch (drawable) - { - case DrawableHitCircle circle: - // we don't want to see the approach circle - using (circle.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) - circle.ApproachCircle.Hide(); - break; - } - } + protected override float StartScale => 2f; } } diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModGrow.cs b/osu.Game.Rulesets.Osu/Mods/OsuModGrow.cs index 8072dc09c1..3c81203ad7 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModGrow.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModGrow.cs @@ -1,20 +1,11 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -using System.Collections.Generic; -using System.Linq; -using osu.Framework.Bindables; -using osu.Framework.Graphics; using osu.Framework.Graphics.Sprites; -using osu.Game.Configuration; -using osu.Game.Rulesets.Mods; -using osu.Game.Rulesets.Objects.Drawables; -using osu.Game.Rulesets.Osu.Objects; -using osu.Game.Rulesets.Osu.Objects.Drawables; namespace osu.Game.Rulesets.Osu.Mods { - internal class OsuModGrow : Mod, IReadFromConfig, IApplicableToDrawableHitObjects + internal class OsuModGrow : OsuModeObjectScaleTween { public override string Name => "Grow"; @@ -22,65 +13,8 @@ namespace osu.Game.Rulesets.Osu.Mods public override IconUsage Icon => FontAwesome.Solid.ArrowsAltV; - public override ModType Type => ModType.Fun; - public override string Description => "Hit them at the right size!"; - public override double ScoreMultiplier => 1; - - private Bindable increaseFirstObjectVisibility = new Bindable(); - - public void ReadFromConfig(OsuConfigManager config) - { - increaseFirstObjectVisibility = config.GetBindable(OsuSetting.IncreaseFirstObjectVisibility); - } - - public void ApplyToDrawableHitObjects(IEnumerable drawables) - { - foreach (var drawable in drawables.Skip(increaseFirstObjectVisibility.Value ? 1 : 0)) - { - switch (drawable) - { - case DrawableSpinner _: - continue; - - default: - drawable.ApplyCustomUpdateState += ApplyCustomState; - break; - } - } - } - - protected virtual void ApplyCustomState(DrawableHitObject drawable, ArmedState state) - { - var h = (OsuHitObject)drawable.HitObject; - - // apply grow effect - switch (drawable) - { - case DrawableSliderHead _: - case DrawableSliderTail _: - // special cases we should *not* be scaling. - break; - - case DrawableSlider _: - case DrawableHitCircle _: - { - using (drawable.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) - drawable.ScaleTo(0.5f).Then().ScaleTo(1, h.TimePreempt, Easing.OutSine); - break; - } - } - - // remove approach circles - switch (drawable) - { - case DrawableHitCircle circle: - // we don't want to see the approach circle - using (circle.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) - circle.ApproachCircle.Hide(); - break; - } - } + protected override float StartScale => 0.5f; } } diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModeObjectScaleTween.cs b/osu.Game.Rulesets.Osu/Mods/OsuModeObjectScaleTween.cs new file mode 100644 index 0000000000..ad6a15718a --- /dev/null +++ b/osu.Game.Rulesets.Osu/Mods/OsuModeObjectScaleTween.cs @@ -0,0 +1,84 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Collections.Generic; +using System.Linq; +using osu.Framework.Bindables; +using osu.Framework.Graphics; +using osu.Game.Configuration; +using osu.Game.Rulesets.Mods; +using osu.Game.Rulesets.Objects.Drawables; +using osu.Game.Rulesets.Osu.Objects; +using osu.Game.Rulesets.Osu.Objects.Drawables; + +namespace osu.Game.Rulesets.Osu.Mods +{ + /// + /// Adjusts the size of hit objects during their fade in animation. + /// + public abstract class OsuModeObjectScaleTween : Mod, IReadFromConfig, IApplicableToDrawableHitObjects + { + public override ModType Type => ModType.Fun; + + public override double ScoreMultiplier => 1; + + protected virtual float StartScale => 1; + + protected virtual float EndScale => 1; + + private Bindable increaseFirstObjectVisibility = new Bindable(); + + public void ReadFromConfig(OsuConfigManager config) + { + increaseFirstObjectVisibility = config.GetBindable(OsuSetting.IncreaseFirstObjectVisibility); + } + + public void ApplyToDrawableHitObjects(IEnumerable drawables) + { + foreach (var drawable in drawables.Skip(increaseFirstObjectVisibility.Value ? 1 : 0)) + { + switch (drawable) + { + case DrawableSpinner _: + continue; + + default: + drawable.ApplyCustomUpdateState += ApplyCustomState; + break; + } + } + } + + protected virtual void ApplyCustomState(DrawableHitObject drawable, ArmedState state) + { + var h = (OsuHitObject)drawable.HitObject; + + // apply grow effect + switch (drawable) + { + case DrawableSliderHead _: + case DrawableSliderTail _: + // special cases we should *not* be scaling. + break; + + case DrawableSlider _: + case DrawableHitCircle _: + { + using (drawable.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) + drawable.ScaleTo(StartScale).Then().ScaleTo(EndScale, h.TimePreempt, Easing.OutSine); + break; + } + } + + // remove approach circles + switch (drawable) + { + case DrawableHitCircle circle: + // we don't want to see the approach circle + using (circle.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) + circle.ApproachCircle.Hide(); + break; + } + } + } +} From 0740fff0c9d70d3c6a92dc4f6f4249cb278aaf63 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 3 Jul 2019 19:53:25 +0900 Subject: [PATCH 141/267] Update android package dependencies --- osu.Android.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Android.props b/osu.Android.props index ead059cdf2..8ef635fe75 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -63,7 +63,7 @@ - - + + From 4ba60ed089636efeb6e276c2a80d7f7aee485d98 Mon Sep 17 00:00:00 2001 From: naoey Date: Wed, 3 Jul 2019 17:04:20 +0530 Subject: [PATCH 142/267] Apply currently selected mods to filter leaderboard scores Modifies GetScoresRequest to build query string locally instead of using WebRequest.AddParameter since it doesn't support array parameters --- .../Online/API/Requests/GetScoresRequest.cs | 26 ++++++++------ osu.Game/Screens/Select/BeatmapDetailArea.cs | 2 ++ .../Select/Leaderboards/BeatmapLeaderboard.cs | 35 ++++++++++++++++++- 3 files changed, 52 insertions(+), 11 deletions(-) diff --git a/osu.Game/Online/API/Requests/GetScoresRequest.cs b/osu.Game/Online/API/Requests/GetScoresRequest.cs index 0b6f65a0e0..2de0fcef9c 100644 --- a/osu.Game/Online/API/Requests/GetScoresRequest.cs +++ b/osu.Game/Online/API/Requests/GetScoresRequest.cs @@ -5,8 +5,10 @@ using System; using osu.Game.Beatmaps; using osu.Game.Rulesets; using osu.Game.Screens.Select.Leaderboards; -using osu.Framework.IO.Network; using osu.Game.Online.API.Requests.Responses; +using osu.Game.Rulesets.Mods; +using System.Text; +using System.Collections.Generic; namespace osu.Game.Online.API.Requests { @@ -15,8 +17,9 @@ namespace osu.Game.Online.API.Requests private readonly BeatmapInfo beatmap; private readonly BeatmapLeaderboardScope scope; private readonly RulesetInfo ruleset; + private readonly IEnumerable mods; - public GetScoresRequest(BeatmapInfo beatmap, RulesetInfo ruleset, BeatmapLeaderboardScope scope = BeatmapLeaderboardScope.Global) + public GetScoresRequest(BeatmapInfo beatmap, RulesetInfo ruleset, BeatmapLeaderboardScope scope = BeatmapLeaderboardScope.Global, IEnumerable mods = null) { if (!beatmap.OnlineBeatmapID.HasValue) throw new InvalidOperationException($"Cannot lookup a beatmap's scores without having a populated {nameof(BeatmapInfo.OnlineBeatmapID)}."); @@ -27,6 +30,7 @@ namespace osu.Game.Online.API.Requests this.beatmap = beatmap; this.scope = scope; this.ruleset = ruleset ?? throw new ArgumentNullException(nameof(ruleset)); + this.mods = mods ?? Array.Empty(); Success += onSuccess; } @@ -37,17 +41,19 @@ namespace osu.Game.Online.API.Requests score.Beatmap = beatmap; } - protected override WebRequest CreateWebRequest() + protected override string Target => $@"beatmaps/{beatmap.OnlineBeatmapID}/scores{createQueryParameters()}"; + + private string createQueryParameters() { - var req = base.CreateWebRequest(); + StringBuilder query = new StringBuilder(@"?"); - req.Timeout = 30000; - req.AddParameter(@"type", scope.ToString().ToLowerInvariant()); - req.AddParameter(@"mode", ruleset.ShortName); + query.Append($@"type={scope.ToString().ToLowerInvariant()}&"); + query.Append($@"mode={ruleset.ShortName}&"); - return req; + foreach (var mod in mods) + query.Append($@"mods[]={mod.Acronym}&"); + + return query.ToString().TrimEnd('&'); } - - protected override string Target => $@"beatmaps/{beatmap.OnlineBeatmapID}/scores"; } } diff --git a/osu.Game/Screens/Select/BeatmapDetailArea.cs b/osu.Game/Screens/Select/BeatmapDetailArea.cs index 477037355c..b66a2ffe0f 100644 --- a/osu.Game/Screens/Select/BeatmapDetailArea.cs +++ b/osu.Game/Screens/Select/BeatmapDetailArea.cs @@ -41,6 +41,8 @@ namespace osu.Game.Screens.Select RelativeSizeAxes = Axes.X, OnFilter = (tab, mods) => { + Leaderboard.FilterMods = mods; + switch (tab) { case BeatmapDetailTab.Details: diff --git a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs index aafa6bb0eb..890cc7e9a3 100644 --- a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs +++ b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs @@ -11,6 +11,7 @@ using osu.Game.Online.API; using osu.Game.Online.API.Requests; using osu.Game.Online.Leaderboards; using osu.Game.Rulesets; +using osu.Game.Rulesets.Mods; using osu.Game.Scoring; namespace osu.Game.Screens.Select.Leaderboards @@ -36,12 +37,31 @@ namespace osu.Game.Screens.Select.Leaderboards } } + private bool filterMods; + + public bool FilterMods + { + get => filterMods; + set + { + if (value == filterMods) + return; + + filterMods = value; + + UpdateScores(); + } + } + [Resolved] private ScoreManager scoreManager { get; set; } [Resolved] private IBindable ruleset { get; set; } + [Resolved] + private IBindable> mods { get; set; } + [Resolved] private IAPIProvider api { get; set; } @@ -49,6 +69,11 @@ namespace osu.Game.Screens.Select.Leaderboards private void load() { ruleset.ValueChanged += _ => UpdateScores(); + mods.ValueChanged += _ => + { + if (filterMods) + UpdateScores(); + }; } protected override APIRequest FetchScores(Action> scoresCallback) @@ -72,7 +97,15 @@ namespace osu.Game.Screens.Select.Leaderboards return null; } - var req = new GetScoresRequest(Beatmap, ruleset.Value ?? Beatmap.Ruleset, Scope); + IReadOnlyList requestMods = null; + + if (filterMods && mods.Value.Count == 0) + // add nomod for the request + requestMods = new Mod[] { new ModNoMod() }; + else if (filterMods) + requestMods = mods.Value; + + var req = new GetScoresRequest(Beatmap, ruleset.Value ?? Beatmap.Ruleset, Scope, requestMods); req.Success += r => scoresCallback?.Invoke(r.Scores); From cfac90b228a382854242d6ce99fb33ccb8b0d255 Mon Sep 17 00:00:00 2001 From: Andrei Zavatski Date: Wed, 3 Jul 2019 14:34:24 +0300 Subject: [PATCH 143/267] Use ConstrainedIconContainer instead of SpriteIcon --- osu.Game/Overlays/Direct/DirectRulesetSelector.cs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/osu.Game/Overlays/Direct/DirectRulesetSelector.cs b/osu.Game/Overlays/Direct/DirectRulesetSelector.cs index f2abca9ce6..fdab9f1b90 100644 --- a/osu.Game/Overlays/Direct/DirectRulesetSelector.cs +++ b/osu.Game/Overlays/Direct/DirectRulesetSelector.cs @@ -3,9 +3,9 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.UserInterface; using osu.Framework.Input.Events; +using osu.Game.Graphics.Containers; using osu.Game.Graphics.UserInterface; using osu.Game.Rulesets; using osuTK; @@ -40,7 +40,7 @@ namespace osu.Game.Overlays.Direct private class DirectRulesetTabItem : TabItem { - private readonly SpriteIcon icon; + private readonly ConstrainedIconContainer iconContainer; public DirectRulesetTabItem(RulesetInfo value) : base(value) @@ -49,11 +49,13 @@ namespace osu.Game.Overlays.Direct Children = new Drawable[] { - icon = (SpriteIcon)value.CreateInstance().CreateIcon(), + iconContainer = new ConstrainedIconContainer + { + Icon = value.CreateInstance().CreateIcon(), + Size = new Vector2(32), + }, new HoverClickSounds() }; - - icon.Size = new Vector2(30); } protected override void LoadComplete() @@ -80,7 +82,7 @@ namespace osu.Game.Overlays.Direct protected override void OnDeactivated() => updateState(); - private void updateState() => icon.FadeColour(IsHovered || Active.Value ? Color4.White : Color4.Gray, 120, Easing.InQuad); + private void updateState() => iconContainer.FadeColour(IsHovered || Active.Value ? Color4.White : Color4.Gray, 120, Easing.InQuad); } } } From 66eb979fff5f92698d750bb7d807c6b6a07b0938 Mon Sep 17 00:00:00 2001 From: miterosan Date: Wed, 3 Jul 2019 15:51:20 +0200 Subject: [PATCH 144/267] Massivly deduplicate properties. Removed bass.dll. is it unused (and not included in the apk) --- osu.Android.props | 44 +++++++++--------- osu.Android/bass.dll | Bin 210944 -> 0 bytes osu.Android/osu.Android.csproj | 8 ---- ...u.Game.Rulesets.Catch.Tests.Android.csproj | 8 ---- ...u.Game.Rulesets.Mania.Tests.Android.csproj | 8 ---- ...osu.Game.Rulesets.Osu.Tests.Android.csproj | 8 ---- ...u.Game.Rulesets.Taiko.Tests.Android.csproj | 8 ---- .../osu.Game.Tests.Android.csproj | 8 ---- 8 files changed, 21 insertions(+), 71 deletions(-) delete mode 100644 osu.Android/bass.dll diff --git a/osu.Android.props b/osu.Android.props index 8ef635fe75..217b7ebdab 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -13,37 +13,36 @@ Xamarin.Android.Net.AndroidClientHandler v8.1 false + true + armeabi-v7a;x86;arm64-v8a + true + cjk,mideast,other,rare,west + SdkOnly + False + prompt + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {122416d6-6b49-4ee2-a1e8-b825f31c79fe} + Debug + AnyCPU + 8.0.30703 + 2.0 - + True portable False DEBUG;TRACE - prompt - false - false - SdkOnly - true - false - cjk,mideast,other,rare,west - true - armeabi-v7a;x86;arm64-v8a - true + False + True + False - - false + + False None True - prompt - true - false - SdkOnly + true False - true - cjk,mideast,other,rare,west - true - armeabi-v7a;x86;arm64-v8a - true + True @@ -52,7 +51,6 @@ Always - diff --git a/osu.Android/bass.dll b/osu.Android/bass.dll deleted file mode 100644 index 3cd403c3acbd9e89ad071c5069392ea208baaa38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210944 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 S(A~_h>u%w{`TPGJ1^#c6n$Mj8 diff --git a/osu.Android/osu.Android.csproj b/osu.Android/osu.Android.csproj index 42a3185cd1..3654e0301e 100644 --- a/osu.Android/osu.Android.csproj +++ b/osu.Android/osu.Android.csproj @@ -2,17 +2,9 @@ - Debug - AnyCPU - 8.0.30703 - 2.0 - {D1D5F9A8-B40B-40E6-B02F-482D03346D3D} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {122416d6-6b49-4ee2-a1e8-b825f31c79fe} osu.Android osu.Android Properties\AndroidManifest.xml - armeabi-v7a;x86;arm64-v8a diff --git a/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj b/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj index 88b420ffad..c886ddf92e 100644 --- a/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj +++ b/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj @@ -2,17 +2,9 @@ - Debug - AnyCPU - 8.0.30703 - 2.0 - {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {122416d6-6b49-4ee2-a1e8-b825f31c79fe} osu.Game.Rulesets.Catch.Tests osu.Game.Rulesets.Catch.Tests.Android Properties\AndroidManifest.xml - armeabi-v7a;x86;arm64-v8a diff --git a/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj b/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj index 0e557cb260..27a5ebefcd 100644 --- a/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj +++ b/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj @@ -2,17 +2,9 @@ - Debug - AnyCPU - 8.0.30703 - 2.0 - {531F1092-DB27-445D-AA33-2A77C7187C99} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {122416d6-6b49-4ee2-a1e8-b825f31c79fe} osu.Game.Rulesets.Mania.Tests osu.Game.Rulesets.Mania.Tests.Android Properties\AndroidManifest.xml - armeabi-v7a;x86;arm64-v8a diff --git a/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj b/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj index dcf1573522..7d4389557b 100644 --- a/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj +++ b/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj @@ -2,17 +2,9 @@ - Debug - AnyCPU - 8.0.30703 - 2.0 - {90CAB706-39CB-4B93-9629-3218A6FF8E9B} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {122416d6-6b49-4ee2-a1e8-b825f31c79fe} osu.Game.Rulesets.Osu.Tests osu.Game.Rulesets.Osu.Tests.Android Properties\AndroidManifest.xml - armeabi-v7a;x86;arm64-v8a diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj b/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj index 392442b713..6ed16c0b6a 100644 --- a/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj +++ b/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj @@ -2,17 +2,9 @@ - Debug - AnyCPU - 8.0.30703 - 2.0 - {3701A0A1-8476-42C6-B5C4-D24129B4A484} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {122416d6-6b49-4ee2-a1e8-b825f31c79fe} osu.Game.Rulesets.Taiko.Tests osu.Game.Rulesets.Taiko.Tests.Android Properties\AndroidManifest.xml - armeabi-v7a;x86;arm64-v8a diff --git a/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj b/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj index c2dd194e09..394157f832 100644 --- a/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj +++ b/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj @@ -2,17 +2,9 @@ - Debug - AnyCPU - 8.0.30703 - 2.0 - {5CC222DC-5716-4499-B897-DCBDDA4A5CF9} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {122416d6-6b49-4ee2-a1e8-b825f31c79fe} osu.Game.Tests osu.Game.Tests.Android Properties\AndroidManifest.xml - armeabi-v7a;x86;arm64-v8a From b901aab19da0572328ddc6851cd18a78e91f1f0a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 3 Jul 2019 23:06:16 +0900 Subject: [PATCH 145/267] Fix update notification not correctly restarting the game --- osu.Desktop/Updater/SquirrelUpdateManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Desktop/Updater/SquirrelUpdateManager.cs b/osu.Desktop/Updater/SquirrelUpdateManager.cs index 69064a40cb..78a1e680ec 100644 --- a/osu.Desktop/Updater/SquirrelUpdateManager.cs +++ b/osu.Desktop/Updater/SquirrelUpdateManager.cs @@ -129,7 +129,7 @@ namespace osu.Desktop.Updater Activated = () => { updateManager.PrepareUpdateAsync() - .ContinueWith(_ => Schedule(() => game.GracefullyExit())); + .ContinueWith(_ => updateManager.Schedule(() => game.GracefullyExit())); return true; } }; From 0acaf53c9b1cb73079d36231a3792d395335698e Mon Sep 17 00:00:00 2001 From: miterosan Date: Wed, 3 Jul 2019 17:25:42 +0200 Subject: [PATCH 146/267] Revert everything except removall of the bass.dll --- osu.Android.props | 43 ++++++++++--------- osu.Android/osu.Android.csproj | 8 ++++ ...u.Game.Rulesets.Catch.Tests.Android.csproj | 8 ++++ ...u.Game.Rulesets.Mania.Tests.Android.csproj | 8 ++++ ...osu.Game.Rulesets.Osu.Tests.Android.csproj | 8 ++++ ...u.Game.Rulesets.Taiko.Tests.Android.csproj | 8 ++++ .../osu.Game.Tests.Android.csproj | 8 ++++ 7 files changed, 70 insertions(+), 21 deletions(-) diff --git a/osu.Android.props b/osu.Android.props index 217b7ebdab..d47615d4b3 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -13,36 +13,37 @@ Xamarin.Android.Net.AndroidClientHandler v8.1 false - true - armeabi-v7a;x86;arm64-v8a - true - cjk,mideast,other,rare,west - SdkOnly - False - prompt - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {122416d6-6b49-4ee2-a1e8-b825f31c79fe} - Debug - AnyCPU - 8.0.30703 - 2.0 - + True portable False DEBUG;TRACE - False - True - False + prompt + false + false + SdkOnly + true + false + cjk,mideast,other,rare,west + true + armeabi-v7a;x86;arm64-v8a + true - - False + + false None True - true + prompt + true + false + SdkOnly False - True + true + cjk,mideast,other,rare,west + true + armeabi-v7a;x86;arm64-v8a + true diff --git a/osu.Android/osu.Android.csproj b/osu.Android/osu.Android.csproj index 3654e0301e..42a3185cd1 100644 --- a/osu.Android/osu.Android.csproj +++ b/osu.Android/osu.Android.csproj @@ -2,9 +2,17 @@ + Debug + AnyCPU + 8.0.30703 + 2.0 + {D1D5F9A8-B40B-40E6-B02F-482D03346D3D} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {122416d6-6b49-4ee2-a1e8-b825f31c79fe} osu.Android osu.Android Properties\AndroidManifest.xml + armeabi-v7a;x86;arm64-v8a diff --git a/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj b/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj index c886ddf92e..88b420ffad 100644 --- a/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj +++ b/osu.Game.Rulesets.Catch.Tests.Android/osu.Game.Rulesets.Catch.Tests.Android.csproj @@ -2,9 +2,17 @@ + Debug + AnyCPU + 8.0.30703 + 2.0 + {C5379ECB-3A94-4D2F-AC3B-2615AC23EB0D} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {122416d6-6b49-4ee2-a1e8-b825f31c79fe} osu.Game.Rulesets.Catch.Tests osu.Game.Rulesets.Catch.Tests.Android Properties\AndroidManifest.xml + armeabi-v7a;x86;arm64-v8a diff --git a/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj b/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj index 27a5ebefcd..0e557cb260 100644 --- a/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj +++ b/osu.Game.Rulesets.Mania.Tests.Android/osu.Game.Rulesets.Mania.Tests.Android.csproj @@ -2,9 +2,17 @@ + Debug + AnyCPU + 8.0.30703 + 2.0 + {531F1092-DB27-445D-AA33-2A77C7187C99} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {122416d6-6b49-4ee2-a1e8-b825f31c79fe} osu.Game.Rulesets.Mania.Tests osu.Game.Rulesets.Mania.Tests.Android Properties\AndroidManifest.xml + armeabi-v7a;x86;arm64-v8a diff --git a/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj b/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj index 7d4389557b..dcf1573522 100644 --- a/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj +++ b/osu.Game.Rulesets.Osu.Tests.Android/osu.Game.Rulesets.Osu.Tests.Android.csproj @@ -2,9 +2,17 @@ + Debug + AnyCPU + 8.0.30703 + 2.0 + {90CAB706-39CB-4B93-9629-3218A6FF8E9B} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {122416d6-6b49-4ee2-a1e8-b825f31c79fe} osu.Game.Rulesets.Osu.Tests osu.Game.Rulesets.Osu.Tests.Android Properties\AndroidManifest.xml + armeabi-v7a;x86;arm64-v8a diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj b/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj index 6ed16c0b6a..392442b713 100644 --- a/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj +++ b/osu.Game.Rulesets.Taiko.Tests.Android/osu.Game.Rulesets.Taiko.Tests.Android.csproj @@ -2,9 +2,17 @@ + Debug + AnyCPU + 8.0.30703 + 2.0 + {3701A0A1-8476-42C6-B5C4-D24129B4A484} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {122416d6-6b49-4ee2-a1e8-b825f31c79fe} osu.Game.Rulesets.Taiko.Tests osu.Game.Rulesets.Taiko.Tests.Android Properties\AndroidManifest.xml + armeabi-v7a;x86;arm64-v8a diff --git a/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj b/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj index 394157f832..c2dd194e09 100644 --- a/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj +++ b/osu.Game.Tests.Android/osu.Game.Tests.Android.csproj @@ -2,9 +2,17 @@ + Debug + AnyCPU + 8.0.30703 + 2.0 + {5CC222DC-5716-4499-B897-DCBDDA4A5CF9} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {122416d6-6b49-4ee2-a1e8-b825f31c79fe} osu.Game.Tests osu.Game.Tests.Android Properties\AndroidManifest.xml + armeabi-v7a;x86;arm64-v8a From 1824d2999650969f54ff50c45e4dcc150b41a5a8 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 4 Jul 2019 00:34:39 +0900 Subject: [PATCH 147/267] Update framework --- osu.Android.props | 2 +- osu.Game/osu.Game.csproj | 2 +- osu.iOS.props | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/osu.Android.props b/osu.Android.props index 8ef635fe75..400b43dbe6 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -64,6 +64,6 @@ - + diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index b59828a52e..e872cd1387 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -15,7 +15,7 @@ - + diff --git a/osu.iOS.props b/osu.iOS.props index ddbdaf3d18..a319094cb1 100644 --- a/osu.iOS.props +++ b/osu.iOS.props @@ -105,8 +105,8 @@ - - + + From 99603ca0b67f29edc9fad584cc1e6a4e1fa5526b Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Thu, 4 Jul 2019 04:50:49 +0300 Subject: [PATCH 148/267] Fade out game volume on exiting Invokes 'this.Exit()' on completion (simplify lines) --- osu.Game/Screens/Menu/Intro.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/osu.Game/Screens/Menu/Intro.cs b/osu.Game/Screens/Menu/Intro.cs index dab5066c52..2883559bbd 100644 --- a/osu.Game/Screens/Menu/Intro.cs +++ b/osu.Game/Screens/Menu/Intro.cs @@ -33,6 +33,8 @@ namespace osu.Game.Screens.Menu protected override BackgroundScreen CreateBackground() => new BackgroundScreenBlack(); + private readonly BindableDouble exitingVolumeFade = new BindableDouble(1); + private Bindable menuVoice; private Bindable menuMusic; private Track track; @@ -72,6 +74,8 @@ namespace osu.Game.Screens.Menu welcome = audio.Samples.Get(@"welcome"); seeya = audio.Samples.Get(@"seeya"); + + audio.AddAdjustment(AdjustableProperty.Volume, exitingVolumeFade); } private const double delay_step_one = 2300; @@ -161,7 +165,7 @@ namespace osu.Game.Screens.Menu else fadeOutTime = 500; - Scheduler.AddDelayed(this.Exit, fadeOutTime); + this.TransformBindableTo(exitingVolumeFade, 0, fadeOutTime).OnComplete(_ => this.Exit()); //don't want to fade out completely else we will stop running updates. Game.FadeTo(0.01f, fadeOutTime); From b53aeec90de21feca625932e2163d45ab379d757 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Thu, 4 Jul 2019 05:18:29 +0300 Subject: [PATCH 149/267] Move audio adjustment inside OnResuming --- osu.Game/Screens/Menu/Intro.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/osu.Game/Screens/Menu/Intro.cs b/osu.Game/Screens/Menu/Intro.cs index 2883559bbd..f6fbcf6498 100644 --- a/osu.Game/Screens/Menu/Intro.cs +++ b/osu.Game/Screens/Menu/Intro.cs @@ -35,13 +35,16 @@ namespace osu.Game.Screens.Menu private readonly BindableDouble exitingVolumeFade = new BindableDouble(1); + [Resolved] + private AudioManager audio { get; set; } + private Bindable menuVoice; private Bindable menuMusic; private Track track; private WorkingBeatmap introBeatmap; [BackgroundDependencyLoader] - private void load(AudioManager audio, OsuConfigManager config, BeatmapManager beatmaps, Framework.Game game) + private void load(OsuConfigManager config, BeatmapManager beatmaps, Framework.Game game) { menuVoice = config.GetBindable(OsuSetting.MenuVoice); menuMusic = config.GetBindable(OsuSetting.MenuMusic); @@ -74,8 +77,6 @@ namespace osu.Game.Screens.Menu welcome = audio.Samples.Get(@"welcome"); seeya = audio.Samples.Get(@"seeya"); - - audio.AddAdjustment(AdjustableProperty.Volume, exitingVolumeFade); } private const double delay_step_one = 2300; @@ -165,6 +166,7 @@ namespace osu.Game.Screens.Menu else fadeOutTime = 500; + audio.AddAdjustment(AdjustableProperty.Volume, exitingVolumeFade); this.TransformBindableTo(exitingVolumeFade, 0, fadeOutTime).OnComplete(_ => this.Exit()); //don't want to fade out completely else we will stop running updates. From 7795a16c36d3809768a72240c89ba6c64d681085 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 4 Jul 2019 11:38:25 +0900 Subject: [PATCH 150/267] Update android metadata in line with standards --- osu.Android/Properties/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Android/Properties/AndroidManifest.xml b/osu.Android/Properties/AndroidManifest.xml index 326d32f7ab..0cf2b786b1 100644 --- a/osu.Android/Properties/AndroidManifest.xml +++ b/osu.Android/Properties/AndroidManifest.xml @@ -1,5 +1,5 @@  - + From 70e2b83f294a943dca2369198d9d8a0f73b434a8 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 4 Jul 2019 11:40:05 +0900 Subject: [PATCH 151/267] Target newer api version --- osu.Android/Properties/AndroidManifest.xml | 2 +- .../Properties/AndroidManifest.xml | 2 +- .../Properties/AndroidManifest.xml | 2 +- .../Properties/AndroidManifest.xml | 2 +- .../Properties/AndroidManifest.xml | 2 +- osu.Game.Tests.Android/Properties/AndroidManifest.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/osu.Android/Properties/AndroidManifest.xml b/osu.Android/Properties/AndroidManifest.xml index 0cf2b786b1..acd21f9587 100644 --- a/osu.Android/Properties/AndroidManifest.xml +++ b/osu.Android/Properties/AndroidManifest.xml @@ -1,6 +1,6 @@  - + diff --git a/osu.Game.Rulesets.Catch.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Rulesets.Catch.Tests.Android/Properties/AndroidManifest.xml index b04b0718f5..db95e18f13 100644 --- a/osu.Game.Rulesets.Catch.Tests.Android/Properties/AndroidManifest.xml +++ b/osu.Game.Rulesets.Catch.Tests.Android/Properties/AndroidManifest.xml @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Rulesets.Mania.Tests.Android/Properties/AndroidManifest.xml index c315581606..e6728c801d 100644 --- a/osu.Game.Rulesets.Mania.Tests.Android/Properties/AndroidManifest.xml +++ b/osu.Game.Rulesets.Mania.Tests.Android/Properties/AndroidManifest.xml @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Rulesets.Osu.Tests.Android/Properties/AndroidManifest.xml index dac9c19477..aad907b241 100644 --- a/osu.Game.Rulesets.Osu.Tests.Android/Properties/AndroidManifest.xml +++ b/osu.Game.Rulesets.Osu.Tests.Android/Properties/AndroidManifest.xml @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AndroidManifest.xml index f731042a4c..cd4b74aa16 100644 --- a/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AndroidManifest.xml +++ b/osu.Game.Rulesets.Taiko.Tests.Android/Properties/AndroidManifest.xml @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/osu.Game.Tests.Android/Properties/AndroidManifest.xml b/osu.Game.Tests.Android/Properties/AndroidManifest.xml index 146f96c2a3..bb996dc5ca 100644 --- a/osu.Game.Tests.Android/Properties/AndroidManifest.xml +++ b/osu.Game.Tests.Android/Properties/AndroidManifest.xml @@ -1,5 +1,5 @@  - + \ No newline at end of file From d2ebf296d99858c715a4e09a14150c6680589197 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 4 Jul 2019 13:07:59 +0900 Subject: [PATCH 152/267] Release with better compilation options --- osu.Android/osu.Android.csproj | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/osu.Android/osu.Android.csproj b/osu.Android/osu.Android.csproj index 42a3185cd1..ac3905a372 100644 --- a/osu.Android/osu.Android.csproj +++ b/osu.Android/osu.Android.csproj @@ -14,6 +14,11 @@ Properties\AndroidManifest.xml armeabi-v7a;x86;arm64-v8a + + cjk;mideast;other;rare;west + d8 + r8 + From 32bb9633933cd3398c63ca2faa3a771ea03becc6 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 4 Jul 2019 14:33:00 +0900 Subject: [PATCH 153/267] Lock WorkingBeatmap cache to avoid threading issues --- osu.Game/Beatmaps/BeatmapManager.cs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 860c7fc0fa..ab08d35f52 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -176,20 +176,23 @@ namespace osu.Game.Beatmaps if (beatmapInfo?.BeatmapSet == null || beatmapInfo == DefaultBeatmap?.BeatmapInfo) return DefaultBeatmap; - var cached = workingCache.FirstOrDefault(w => w.BeatmapInfo?.ID == beatmapInfo.ID); + lock (workingCache) + { + var cached = workingCache.FirstOrDefault(w => w.BeatmapInfo?.ID == beatmapInfo.ID); - if (cached != null) - return cached; + if (cached != null) + return cached; - if (beatmapInfo.Metadata == null) - beatmapInfo.Metadata = beatmapInfo.BeatmapSet.Metadata; + if (beatmapInfo.Metadata == null) + beatmapInfo.Metadata = beatmapInfo.BeatmapSet.Metadata; - WorkingBeatmap working = new BeatmapManagerWorkingBeatmap(Files.Store, new LargeTextureStore(host?.CreateTextureLoaderStore(Files.Store)), beatmapInfo, audioManager); + WorkingBeatmap working = new BeatmapManagerWorkingBeatmap(Files.Store, new LargeTextureStore(host?.CreateTextureLoaderStore(Files.Store)), beatmapInfo, audioManager); - previous?.TransferTo(working); - workingCache.Add(working); + previous?.TransferTo(working); + workingCache.Add(working); - return working; + return working; + } } /// From 4885f0f0c72c05a1174a521c77c2392dafbbfe8b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 4 Jul 2019 15:47:06 +0900 Subject: [PATCH 154/267] Add messaging telling users how to leave changelog comments --- .../Online/TestSceneChangelogOverlay.cs | 1 + .../Requests/Responses/APIChangelogBuild.cs | 2 + .../Changelog/ChangelogSingleBuild.cs | 6 +- osu.Game/Overlays/Changelog/Comments.cs | 79 +++++++++++++++++++ 4 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 osu.Game/Overlays/Changelog/Comments.cs diff --git a/osu.Game.Tests/Visual/Online/TestSceneChangelogOverlay.cs b/osu.Game.Tests/Visual/Online/TestSceneChangelogOverlay.cs index 0655611230..cf8bac7642 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneChangelogOverlay.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneChangelogOverlay.cs @@ -24,6 +24,7 @@ namespace osu.Game.Tests.Visual.Online typeof(ChangelogListing), typeof(ChangelogSingleBuild), typeof(ChangelogBuild), + typeof(Comments), }; protected override void LoadComplete() diff --git a/osu.Game/Online/API/Requests/Responses/APIChangelogBuild.cs b/osu.Game/Online/API/Requests/Responses/APIChangelogBuild.cs index 36407c7b0e..d11e2d454b 100644 --- a/osu.Game/Online/API/Requests/Responses/APIChangelogBuild.cs +++ b/osu.Game/Online/API/Requests/Responses/APIChangelogBuild.cs @@ -33,6 +33,8 @@ namespace osu.Game.Online.API.Requests.Responses [JsonProperty("versions")] public VersionNavigation Versions { get; set; } + public object Url => $"https://osu.ppy.sh/home/changelog/{UpdateStream.Name}/{Version}"; + public class VersionNavigation { [JsonProperty("next")] diff --git a/osu.Game/Overlays/Changelog/ChangelogSingleBuild.cs b/osu.Game/Overlays/Changelog/ChangelogSingleBuild.cs index 36ae5a756c..44552b214f 100644 --- a/osu.Game/Overlays/Changelog/ChangelogSingleBuild.cs +++ b/osu.Game/Overlays/Changelog/ChangelogSingleBuild.cs @@ -58,7 +58,11 @@ namespace osu.Game.Overlays.Changelog } if (build != null) - Child = new ChangelogBuildWithNavigation(build) { SelectBuild = SelectBuild }; + Children = new Drawable[] + { + new ChangelogBuildWithNavigation(build) { SelectBuild = SelectBuild }, + new Comments(build) + }; } public class ChangelogBuildWithNavigation : ChangelogBuild diff --git a/osu.Game/Overlays/Changelog/Comments.cs b/osu.Game/Overlays/Changelog/Comments.cs new file mode 100644 index 0000000000..4cf39e7b44 --- /dev/null +++ b/osu.Game/Overlays/Changelog/Comments.cs @@ -0,0 +1,79 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Graphics.Sprites; +using osu.Game.Graphics; +using osu.Game.Graphics.Containers; +using osu.Game.Online.API.Requests.Responses; +using osuTK.Graphics; + +namespace osu.Game.Overlays.Changelog +{ + public class Comments : CompositeDrawable + { + private readonly APIChangelogBuild build; + + public Comments(APIChangelogBuild build) + { + this.build = build; + + RelativeSizeAxes = Axes.X; + AutoSizeAxes = Axes.Y; + + Padding = new MarginPadding + { + Horizontal = 50, + Vertical = 20, + }; + } + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + LinkFlowContainer text; + + InternalChildren = new Drawable[] + { + new Container + { + RelativeSizeAxes = Axes.Both, + Masking = true, + CornerRadius = 10, + Child = new Box + { + RelativeSizeAxes = Axes.Both, + Colour = colours.GreyVioletDarker + }, + }, + text = new LinkFlowContainer(t => + { + t.Colour = colours.PinkLighter; + t.Font = OsuFont.Default.With(size: 14); + }) + { + Padding = new MarginPadding(20), + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + } + }; + + text.AddParagraph("Got feedback?", t => + { + t.Colour = Color4.White; + t.Font = OsuFont.Default.With(italics: true, size: 20); + t.Padding = new MarginPadding { Bottom = 20 }; + }); + + text.AddParagraph("We would love to hear what you think of this update! "); + text.AddIcon(FontAwesome.Regular.GrinHearts); + + text.AddParagraph("Please visit the "); + text.AddLink("web version", $"{build.Url}#comments"); + text.AddText(" of this changelog to leave any comments."); + } + } +} From 2b9f7d551f7214fba14b38f8629ba6b539700c4a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 4 Jul 2019 16:16:17 +0900 Subject: [PATCH 155/267] Fix incorrect type specification --- osu.Game/Online/API/Requests/Responses/APIChangelogBuild.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Online/API/Requests/Responses/APIChangelogBuild.cs b/osu.Game/Online/API/Requests/Responses/APIChangelogBuild.cs index d11e2d454b..56005e15f8 100644 --- a/osu.Game/Online/API/Requests/Responses/APIChangelogBuild.cs +++ b/osu.Game/Online/API/Requests/Responses/APIChangelogBuild.cs @@ -33,7 +33,7 @@ namespace osu.Game.Online.API.Requests.Responses [JsonProperty("versions")] public VersionNavigation Versions { get; set; } - public object Url => $"https://osu.ppy.sh/home/changelog/{UpdateStream.Name}/{Version}"; + public string Url => $"https://osu.ppy.sh/home/changelog/{UpdateStream.Name}/{Version}"; public class VersionNavigation { From 530675f3642a5da7729e9720276c4a4fe34c159e Mon Sep 17 00:00:00 2001 From: David Zhao Date: Thu, 4 Jul 2019 17:05:29 +0900 Subject: [PATCH 156/267] Add tests as separate steps --- .../UserInterface/TestSceneButtonSystem.cs | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs b/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs index 6c4d9b20f7..88129308db 100644 --- a/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs +++ b/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs @@ -43,25 +43,25 @@ namespace osu.Game.Tests.Visual.UserInterface buttons.SetOsuLogo(logo); foreach (var s in Enum.GetValues(typeof(ButtonSystemState)).OfType().Skip(1)) - AddStep($"State to {s}", () => - { - buttons.State = s; + AddStep($"State to {s}", () => buttons.State = s); - if (buttons.State == ButtonSystemState.EnteringMode) - { - buttons.FadeOut(400, Easing.InSine); - buttons.MoveTo(new Vector2(-800, 0), 400, Easing.InSine); - logo.FadeOut(300, Easing.InSine) - .ScaleTo(0.2f, 300, Easing.InSine); - } - else - { - buttons.FadeIn(400, Easing.OutQuint); - buttons.MoveTo(new Vector2(0), 400, Easing.OutQuint); - logo.FadeColour(Color4.White, 100, Easing.OutQuint); - logo.FadeIn(100, Easing.OutQuint); - } - }); + AddStep("Exiting menu", () => + { + buttons.State = ButtonSystemState.EnteringMode; + buttons.FadeOut(400, Easing.InSine); + buttons.MoveTo(new Vector2(-800, 0), 400, Easing.InSine); + logo.FadeOut(300, Easing.InSine) + .ScaleTo(0.2f, 300, Easing.InSine); + }); + + AddStep("Entering menu", () => + { + buttons.State = ButtonSystemState.Play; + buttons.FadeIn(400, Easing.OutQuint); + buttons.MoveTo(new Vector2(0), 400, Easing.OutQuint); + logo.FadeColour(Color4.White, 100, Easing.OutQuint); + logo.FadeIn(100, Easing.OutQuint); + }); } } } From 07078b735c7909fd192570d531bfd3a883312afb Mon Sep 17 00:00:00 2001 From: David Zhao Date: Thu, 4 Jul 2019 17:06:28 +0900 Subject: [PATCH 157/267] use new vector2 --- osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs b/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs index e5a27dac81..88129308db 100644 --- a/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs +++ b/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs @@ -9,6 +9,7 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Colour; using osu.Framework.Graphics.Shapes; using osu.Game.Screens.Menu; +using osuTK; using osuTK.Graphics; namespace osu.Game.Tests.Visual.UserInterface From be4e7d0f5059ea1d5d6d00eea71c368207c6bc36 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Thu, 4 Jul 2019 17:08:21 +0900 Subject: [PATCH 158/267] remove comment --- osu.Game/Screens/Menu/ButtonSystem.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/osu.Game/Screens/Menu/ButtonSystem.cs b/osu.Game/Screens/Menu/ButtonSystem.cs index 040a9f8843..87c009c437 100644 --- a/osu.Game/Screens/Menu/ButtonSystem.cs +++ b/osu.Game/Screens/Menu/ButtonSystem.cs @@ -332,7 +332,6 @@ namespace osu.Game.Screens.Menu break; case ButtonSystemState.EnteringMode: - // When coming from the Initial (untracked) state, interpolate to the tracking position over a brief duration instead of tracking immediately. logoTrackingContainer.StartTracking(logo, lastState == ButtonSystemState.Initial ? 400 : 0, Easing.InSine); break; } From 4758914f7fced0da59361bfb18d8556f5f42eaeb Mon Sep 17 00:00:00 2001 From: Morilli <35152647+Morilli@users.noreply.github.com> Date: Thu, 4 Jul 2019 15:14:15 +0200 Subject: [PATCH 159/267] Bump android TargetFrameworkVersion --- osu.Android.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Android.props b/osu.Android.props index 7b22b76e0e..5ee0573c58 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -11,7 +11,7 @@ Off True Xamarin.Android.Net.AndroidClientHandler - v8.1 + v9.0 false From 9b2ebed669aacbbfc81b46379f017c111a897c1e Mon Sep 17 00:00:00 2001 From: Joehu Date: Thu, 4 Jul 2019 08:36:34 -0700 Subject: [PATCH 160/267] Remove unused EditSongSelect file --- osu.Game/Screens/Select/EditSongSelect.cs | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 osu.Game/Screens/Select/EditSongSelect.cs diff --git a/osu.Game/Screens/Select/EditSongSelect.cs b/osu.Game/Screens/Select/EditSongSelect.cs deleted file mode 100644 index bdf5f905fe..0000000000 --- a/osu.Game/Screens/Select/EditSongSelect.cs +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. -// See the LICENCE file in the repository root for full licence text. - -using osu.Framework.Screens; - -namespace osu.Game.Screens.Select -{ - public class EditSongSelect : SongSelect - { - protected override bool ShowFooter => false; - - protected override bool OnStart() - { - this.Exit(); - return true; - } - } -} From f04adb719252aaf723c89250aaf30e53c63e043d Mon Sep 17 00:00:00 2001 From: naoey Date: Wed, 3 Jul 2019 22:28:13 +0530 Subject: [PATCH 161/267] Apply mods filter to local scores too --- .../Select/Leaderboards/BeatmapLeaderboard.cs | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs index 08f9632462..c1cbc40680 100644 --- a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs +++ b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs @@ -39,6 +39,9 @@ namespace osu.Game.Screens.Select.Leaderboards private bool filterMods; + /// + /// Whether to apply the game's currently selected mods as a filter when retrieving scores. + /// public bool FilterMods { get => filterMods; @@ -80,10 +83,25 @@ namespace osu.Game.Screens.Select.Leaderboards { if (Scope == BeatmapLeaderboardScope.Local) { - Scores = scoreManager - .QueryScores(s => !s.DeletePending && s.Beatmap.ID == Beatmap.ID && s.Ruleset.ID == ruleset.Value.ID) - .OrderByDescending(s => s.TotalScore).ToArray(); + var scores = scoreManager + .QueryScores(s => !s.DeletePending && s.Beatmap.ID == Beatmap.ID && s.Ruleset.ID == ruleset.Value.ID); + + if (filterMods && !mods.Value.Any()) + { + // we need to filter out all scores that have any mods to get all local nomod scores + scores = scores.Where(s => !s.Mods.Any()); + } + else if (filterMods) + { + // otherwise find all the scores that have *any* of the currently selected mods (similar to how web applies mod filters) + // we're creating and using a string list representation of selected mods so that it can be translated into the DB query itself + var selectedMods = mods.Value.Select(m => m.Acronym); + scores = scores.Where(s => s.Mods.Any(m => selectedMods.Contains(m.Acronym))); + } + + Scores = scores.OrderByDescending(s => s.TotalScore).ToArray(); PlaceholderState = Scores.Any() ? PlaceholderState.Successful : PlaceholderState.NoScores; + return null; } @@ -101,7 +119,7 @@ namespace osu.Game.Screens.Select.Leaderboards IReadOnlyList requestMods = null; - if (filterMods && mods.Value.Count == 0) + if (filterMods && !mods.Value.Any()) // add nomod for the request requestMods = new Mod[] { new ModNoMod() }; else if (filterMods) From 5f6544eebfc913cde2c505825a37eb429311951f Mon Sep 17 00:00:00 2001 From: Joehu Date: Thu, 4 Jul 2019 12:05:07 -0700 Subject: [PATCH 162/267] Fix beatmap leaderboards requiring supporter when signed out --- osu.Game/Online/Leaderboards/Leaderboard.cs | 6 ------ osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs | 6 ++++++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/osu.Game/Online/Leaderboards/Leaderboard.cs b/osu.Game/Online/Leaderboards/Leaderboard.cs index b91de93a4a..dea2ff1a21 100644 --- a/osu.Game/Online/Leaderboards/Leaderboard.cs +++ b/osu.Game/Online/Leaderboards/Leaderboard.cs @@ -231,12 +231,6 @@ namespace osu.Game.Online.Leaderboards if (getScoresRequest == null) return; - if (api?.IsLoggedIn != true) - { - PlaceholderState = PlaceholderState.NotLoggedIn; - return; - } - getScoresRequest.Failure += e => Schedule(() => { if (e is OperationCanceledException) diff --git a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs index 62f93afbbb..68f153a97d 100644 --- a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs +++ b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs @@ -62,6 +62,12 @@ namespace osu.Game.Screens.Select.Leaderboards return null; } + if (api?.IsLoggedIn != true) + { + PlaceholderState = PlaceholderState.NotLoggedIn; + return null; + } + if (Beatmap?.OnlineBeatmapID == null) { PlaceholderState = PlaceholderState.Unavailable; From ae7da2557e15e634d140340d7e0a150a0ad31eb3 Mon Sep 17 00:00:00 2001 From: Joehu Date: Thu, 4 Jul 2019 13:24:13 -0700 Subject: [PATCH 163/267] Fix initial colour of leaderboard mod filter --- .../UserInterface/OsuTabControlCheckbox.cs | 29 +++++-------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/osu.Game/Graphics/UserInterface/OsuTabControlCheckbox.cs b/osu.Game/Graphics/UserInterface/OsuTabControlCheckbox.cs index 869005d05c..908fbb67bb 100644 --- a/osu.Game/Graphics/UserInterface/OsuTabControlCheckbox.cs +++ b/osu.Game/Graphics/UserInterface/OsuTabControlCheckbox.cs @@ -37,6 +37,8 @@ namespace osu.Game.Graphics.UserInterface text.Colour = AccentColour; icon.Colour = AccentColour; } + + updateFade(); } } @@ -48,28 +50,22 @@ namespace osu.Game.Graphics.UserInterface private const float transition_length = 500; - private void fadeIn() + private void updateFade() { - box.FadeIn(transition_length, Easing.OutQuint); - text.FadeColour(Color4.White, transition_length, Easing.OutQuint); - } - - private void fadeOut() - { - box.FadeOut(transition_length, Easing.OutQuint); - text.FadeColour(AccentColour, transition_length, Easing.OutQuint); + box.FadeTo(IsHovered ? 1 : 0, transition_length, Easing.OutQuint); + text.FadeColour(IsHovered ? Color4.White : AccentColour, transition_length, Easing.OutQuint); } protected override bool OnHover(HoverEvent e) { - fadeIn(); + updateFade(); return base.OnHover(e); } protected override void OnHoverLost(HoverLostEvent e) { if (!Current.Value) - fadeOut(); + updateFade(); base.OnHoverLost(e); } @@ -117,16 +113,7 @@ namespace osu.Game.Graphics.UserInterface Current.ValueChanged += selected => { - if (selected.NewValue) - { - fadeIn(); - icon.Icon = FontAwesome.Regular.CheckCircle; - } - else - { - fadeOut(); - icon.Icon = FontAwesome.Regular.Circle; - } + icon.Icon = selected.NewValue ? FontAwesome.Regular.CheckCircle : FontAwesome.Regular.Circle; }; } } From 38dceddc2710567b683144a908e1cc19374726fd Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 5 Jul 2019 10:07:45 +0900 Subject: [PATCH 164/267] Fix file ordering --- .../UserInterface/OsuTabControlCheckbox.cs | 59 +++++++++---------- 1 file changed, 28 insertions(+), 31 deletions(-) diff --git a/osu.Game/Graphics/UserInterface/OsuTabControlCheckbox.cs b/osu.Game/Graphics/UserInterface/OsuTabControlCheckbox.cs index 908fbb67bb..8134cfb42d 100644 --- a/osu.Game/Graphics/UserInterface/OsuTabControlCheckbox.cs +++ b/osu.Game/Graphics/UserInterface/OsuTabControlCheckbox.cs @@ -50,33 +50,6 @@ namespace osu.Game.Graphics.UserInterface private const float transition_length = 500; - private void updateFade() - { - box.FadeTo(IsHovered ? 1 : 0, transition_length, Easing.OutQuint); - text.FadeColour(IsHovered ? Color4.White : AccentColour, transition_length, Easing.OutQuint); - } - - protected override bool OnHover(HoverEvent e) - { - updateFade(); - return base.OnHover(e); - } - - protected override void OnHoverLost(HoverLostEvent e) - { - if (!Current.Value) - updateFade(); - - base.OnHoverLost(e); - } - - [BackgroundDependencyLoader] - private void load(OsuColour colours) - { - if (accentColour == null) - AccentColour = colours.Blue; - } - public OsuTabControlCheckbox() { AutoSizeAxes = Axes.Both; @@ -111,10 +84,34 @@ namespace osu.Game.Graphics.UserInterface } }; - Current.ValueChanged += selected => - { - icon.Icon = selected.NewValue ? FontAwesome.Regular.CheckCircle : FontAwesome.Regular.Circle; - }; + Current.ValueChanged += selected => { icon.Icon = selected.NewValue ? FontAwesome.Regular.CheckCircle : FontAwesome.Regular.Circle; }; + } + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + if (accentColour == null) + AccentColour = colours.Blue; + } + + protected override bool OnHover(HoverEvent e) + { + updateFade(); + return base.OnHover(e); + } + + protected override void OnHoverLost(HoverLostEvent e) + { + if (!Current.Value) + updateFade(); + + base.OnHoverLost(e); + } + + private void updateFade() + { + box.FadeTo(IsHovered ? 1 : 0, transition_length, Easing.OutQuint); + text.FadeColour(IsHovered ? Color4.White : AccentColour, transition_length, Easing.OutQuint); } } } From bff5ad22f4fedf8c3a1c1ae9bb1e6cf791ed676e Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Fri, 5 Jul 2019 05:16:40 +0300 Subject: [PATCH 165/267] Check if the locally available score has files --- osu.Game/Scoring/ScoreManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Scoring/ScoreManager.cs b/osu.Game/Scoring/ScoreManager.cs index 2d82987da0..f0d897701c 100644 --- a/osu.Game/Scoring/ScoreManager.cs +++ b/osu.Game/Scoring/ScoreManager.cs @@ -65,6 +65,6 @@ namespace osu.Game.Scoring protected override ArchiveDownloadRequest CreateDownloadRequest(ScoreInfo score, bool minimiseDownload) => new DownloadReplayRequest(score); - protected override bool CheckLocalAvailability(ScoreInfo model, IQueryable items) => items.Any(s => s.OnlineScoreID == model.OnlineScoreID); + protected override bool CheckLocalAvailability(ScoreInfo model, IQueryable items) => items.Any(s => s.OnlineScoreID == model.OnlineScoreID && s.Files.Any()); } } From d624157c45afc11187b58f523c8ff0e61d005c81 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Fri, 5 Jul 2019 05:17:36 +0300 Subject: [PATCH 166/267] Remove unnecessary fading --- osu.Game/Screens/Play/ReplayDownloadButton.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/osu.Game/Screens/Play/ReplayDownloadButton.cs b/osu.Game/Screens/Play/ReplayDownloadButton.cs index 748fe8cc90..290e00f287 100644 --- a/osu.Game/Screens/Play/ReplayDownloadButton.cs +++ b/osu.Game/Screens/Play/ReplayDownloadButton.cs @@ -86,11 +86,7 @@ namespace osu.Game.Screens.Play } }, true); - if (replayAvailability == ReplayAvailability.NotAvailable) - { - button.Enabled.Value = false; - button.Alpha = 0.6f; - } + button.Enabled.Value = replayAvailability != ReplayAvailability.NotAvailable; } private enum ReplayAvailability From 29bc2a27514a8573f17ebc1a9acf1e2e7813f003 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 5 Jul 2019 11:29:47 +0900 Subject: [PATCH 167/267] Split out tests --- .../UserInterface/TestSceneButtonSystem.cs | 36 +++++++++++++++---- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs b/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs index 88129308db..3b790d33b6 100644 --- a/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs +++ b/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs @@ -24,11 +24,12 @@ namespace osu.Game.Tests.Visual.UserInterface typeof(Button) }; - public TestSceneButtonSystem() - { - OsuLogo logo; - ButtonSystem buttons; + private OsuLogo logo; + private ButtonSystem buttons; + [SetUp] + public void SetUp() => Schedule(() => + { Children = new Drawable[] { new Box @@ -37,15 +38,23 @@ namespace osu.Game.Tests.Visual.UserInterface RelativeSizeAxes = Axes.Both, }, buttons = new ButtonSystem(), - logo = new OsuLogo { RelativePositionAxes = Axes.Both } + logo = new OsuLogo + { + RelativePositionAxes = Axes.Both, + Position = new Vector2(0.5f) + } }; buttons.SetOsuLogo(logo); + }); + [Test] + public void TestAllStates() + { foreach (var s in Enum.GetValues(typeof(ButtonSystemState)).OfType().Skip(1)) AddStep($"State to {s}", () => buttons.State = s); - AddStep("Exiting menu", () => + AddStep("Enter mode", () => { buttons.State = ButtonSystemState.EnteringMode; buttons.FadeOut(400, Easing.InSine); @@ -54,7 +63,7 @@ namespace osu.Game.Tests.Visual.UserInterface .ScaleTo(0.2f, 300, Easing.InSine); }); - AddStep("Entering menu", () => + AddStep("Return to menu", () => { buttons.State = ButtonSystemState.Play; buttons.FadeIn(400, Easing.OutQuint); @@ -63,5 +72,18 @@ namespace osu.Game.Tests.Visual.UserInterface logo.FadeIn(100, Easing.OutQuint); }); } + + [Test] + public void TestSmoothExit() + { + AddStep("Enter mode", () => + { + buttons.State = ButtonSystemState.EnteringMode; + buttons.FadeOut(400, Easing.InSine); + buttons.MoveTo(new Vector2(-800, 0), 400, Easing.InSine); + logo.FadeOut(300, Easing.InSine) + .ScaleTo(0.2f, 300, Easing.InSine); + }); + } } } From a30f0c03bb071dbb4d959dc7da0c09ed4314ce51 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Fri, 5 Jul 2019 05:32:30 +0300 Subject: [PATCH 168/267] Fix incorrect xmldoc --- osu.Game/Online/DownloadTrackingComposite.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/Online/DownloadTrackingComposite.cs b/osu.Game/Online/DownloadTrackingComposite.cs index 786afdf450..62d6efcb6f 100644 --- a/osu.Game/Online/DownloadTrackingComposite.cs +++ b/osu.Game/Online/DownloadTrackingComposite.cs @@ -11,7 +11,7 @@ using osu.Game.Online.API; namespace osu.Game.Online { /// - /// A component which tracks a beatmap through potential download/import/deletion. + /// A component which tracks a through potential download/import/deletion. /// public abstract class DownloadTrackingComposite : CompositeDrawable where TModel : class, IEquatable @@ -22,7 +22,7 @@ namespace osu.Game.Online private TModelManager manager; /// - /// Holds the current download state of the beatmap, whether is has already been downloaded, is in progress, or is not downloaded. + /// Holds the current download state of the , whether is has already been downloaded, is in progress, or is not downloaded. /// protected readonly Bindable State = new Bindable(); From 1dab363be309abd7e94e57b161bd63ff74fb8af5 Mon Sep 17 00:00:00 2001 From: naoey Date: Fri, 5 Jul 2019 08:42:44 +0530 Subject: [PATCH 169/267] Require supporter for filtering mods on online leaderboards --- osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs index 88ce5dc117..76bfd96305 100644 --- a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs +++ b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs @@ -117,7 +117,7 @@ namespace osu.Game.Screens.Select.Leaderboards return null; } - if (Scope != BeatmapLeaderboardScope.Global && !api.LocalUser.Value.IsSupporter) + if (!api.LocalUser.Value.IsSupporter && (Scope != BeatmapLeaderboardScope.Global || filterMods)) { PlaceholderState = PlaceholderState.NotSupporter; return null; From f1dab946fff325ae420f87364a2636af4293316f Mon Sep 17 00:00:00 2001 From: naoey Date: Fri, 5 Jul 2019 08:46:17 +0530 Subject: [PATCH 170/267] Remove need to trim query string --- osu.Game/Online/API/Requests/GetScoresRequest.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/osu.Game/Online/API/Requests/GetScoresRequest.cs b/osu.Game/Online/API/Requests/GetScoresRequest.cs index 53349e15d5..6b0e680eb5 100644 --- a/osu.Game/Online/API/Requests/GetScoresRequest.cs +++ b/osu.Game/Online/API/Requests/GetScoresRequest.cs @@ -50,13 +50,13 @@ namespace osu.Game.Online.API.Requests { StringBuilder query = new StringBuilder(@"?"); - query.Append($@"type={scope.ToString().ToLowerInvariant()}&"); - query.Append($@"mode={ruleset.ShortName}&"); + query.Append($@"type={scope.ToString().ToLowerInvariant()}"); + query.Append($@"&mode={ruleset.ShortName}"); foreach (var mod in mods) - query.Append($@"mods[]={mod.Acronym}&"); + query.Append($@"&mods[]={mod.Acronym}"); - return query.ToString().TrimEnd('&'); + return query.ToString(); } } } From 79d6670dc581ed27edaef31a0b57466fce707aeb Mon Sep 17 00:00:00 2001 From: David Zhao Date: Fri, 5 Jul 2019 13:08:45 +0900 Subject: [PATCH 171/267] Expose durations from MainMenu and reorder --- .../UserInterface/TestSceneButtonSystem.cs | 8 ++++---- osu.Game/Screens/Menu/MainMenu.cs | 20 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs b/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs index 88129308db..461db4a30c 100644 --- a/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs +++ b/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs @@ -48,8 +48,8 @@ namespace osu.Game.Tests.Visual.UserInterface AddStep("Exiting menu", () => { buttons.State = ButtonSystemState.EnteringMode; - buttons.FadeOut(400, Easing.InSine); - buttons.MoveTo(new Vector2(-800, 0), 400, Easing.InSine); + buttons.FadeOut(MainMenu.FADE_OUT_DURATION, Easing.InSine); + buttons.MoveTo(new Vector2(-800, 0), MainMenu.FADE_OUT_DURATION, Easing.InSine); logo.FadeOut(300, Easing.InSine) .ScaleTo(0.2f, 300, Easing.InSine); }); @@ -57,8 +57,8 @@ namespace osu.Game.Tests.Visual.UserInterface AddStep("Entering menu", () => { buttons.State = ButtonSystemState.Play; - buttons.FadeIn(400, Easing.OutQuint); - buttons.MoveTo(new Vector2(0), 400, Easing.OutQuint); + buttons.FadeIn(MainMenu.FADE_IN_DURATION, Easing.OutQuint); + buttons.MoveTo(new Vector2(0), MainMenu.FADE_IN_DURATION, Easing.OutQuint); logo.FadeColour(Color4.White, 100, Easing.OutQuint); logo.FadeIn(100, Easing.OutQuint); }); diff --git a/osu.Game/Screens/Menu/MainMenu.cs b/osu.Game/Screens/Menu/MainMenu.cs index 7e6de54d1b..c64bea840f 100644 --- a/osu.Game/Screens/Menu/MainMenu.cs +++ b/osu.Game/Screens/Menu/MainMenu.cs @@ -23,7 +23,9 @@ namespace osu.Game.Screens.Menu { public class MainMenu : OsuScreen { - private ButtonSystem buttons; + public const float FADE_IN_DURATION = 300; + + public const float FADE_OUT_DURATION = 400; public override bool HideOverlaysOnEnter => buttons == null || buttons.State == ButtonSystemState.Initial; @@ -35,6 +37,8 @@ namespace osu.Game.Screens.Menu private MenuSideFlashes sideFlashes; + private ButtonSystem buttons; + [Resolved] private GameHost host { get; set; } @@ -141,12 +145,10 @@ namespace osu.Game.Screens.Menu { buttons.State = ButtonSystemState.TopLevel; - const float length = 300; + this.FadeIn(FADE_IN_DURATION, Easing.OutQuint); + this.MoveTo(new Vector2(0, 0), FADE_IN_DURATION, Easing.OutQuint); - this.FadeIn(length, Easing.OutQuint); - this.MoveTo(new Vector2(0, 0), length, Easing.OutQuint); - - sideFlashes.Delay(length).FadeIn(64, Easing.InQuint); + sideFlashes.Delay(FADE_IN_DURATION).FadeIn(64, Easing.InQuint); } } @@ -171,12 +173,10 @@ namespace osu.Game.Screens.Menu { base.OnSuspending(next); - const float length = 400; - buttons.State = ButtonSystemState.EnteringMode; - this.FadeOut(length, Easing.InSine); - this.MoveTo(new Vector2(-800, 0), length, Easing.InSine); + this.FadeOut(FADE_OUT_DURATION, Easing.InSine); + this.MoveTo(new Vector2(-800, 0), FADE_OUT_DURATION, Easing.InSine); sideFlashes.FadeOut(64, Easing.OutQuint); } From 4eb01b12be4f0cba9ec6a8aa8d17cabafb88284d Mon Sep 17 00:00:00 2001 From: David Zhao Date: Fri, 5 Jul 2019 13:10:59 +0900 Subject: [PATCH 172/267] Convert to method --- .../UserInterface/TestSceneButtonSystem.cs | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs b/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs index 9bc8f332f4..f0e1c38525 100644 --- a/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs +++ b/osu.Game.Tests/Visual/UserInterface/TestSceneButtonSystem.cs @@ -54,14 +54,7 @@ namespace osu.Game.Tests.Visual.UserInterface foreach (var s in Enum.GetValues(typeof(ButtonSystemState)).OfType().Skip(1)) AddStep($"State to {s}", () => buttons.State = s); - AddStep("Enter mode", () => - { - buttons.State = ButtonSystemState.EnteringMode; - buttons.FadeOut(MainMenu.FADE_OUT_DURATION, Easing.InSine); - buttons.MoveTo(new Vector2(-800, 0), MainMenu.FADE_OUT_DURATION, Easing.InSine); - logo.FadeOut(300, Easing.InSine) - .ScaleTo(0.2f, 300, Easing.InSine); - }); + AddStep("Enter mode", performEnterMode); AddStep("Return to menu", () => { @@ -76,14 +69,16 @@ namespace osu.Game.Tests.Visual.UserInterface [Test] public void TestSmoothExit() { - AddStep("Enter mode", () => - { - buttons.State = ButtonSystemState.EnteringMode; - buttons.FadeOut(400, Easing.InSine); - buttons.MoveTo(new Vector2(-800, 0), 400, Easing.InSine); - logo.FadeOut(300, Easing.InSine) - .ScaleTo(0.2f, 300, Easing.InSine); - }); + AddStep("Enter mode", performEnterMode); + } + + private void performEnterMode() + { + buttons.State = ButtonSystemState.EnteringMode; + buttons.FadeOut(MainMenu.FADE_OUT_DURATION, Easing.InSine); + buttons.MoveTo(new Vector2(-800, 0), MainMenu.FADE_OUT_DURATION, Easing.InSine); + logo.FadeOut(300, Easing.InSine) + .ScaleTo(0.2f, 300, Easing.InSine); } } } From e8168037f915a506b1026723a7ad687495a31ef1 Mon Sep 17 00:00:00 2001 From: Joehu Date: Thu, 4 Jul 2019 21:19:51 -0700 Subject: [PATCH 173/267] Fix unranked beatmap leaderboards showing "no records" placeholder --- .../Screens/Select/Leaderboards/BeatmapLeaderboard.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs index 68f153a97d..34f46608da 100644 --- a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs +++ b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs @@ -68,10 +68,14 @@ namespace osu.Game.Screens.Select.Leaderboards return null; } - if (Beatmap?.OnlineBeatmapID == null) + switch (Beatmap?.Status) { - PlaceholderState = PlaceholderState.Unavailable; - return null; + case BeatmapSetOnlineStatus.Graveyard: + case BeatmapSetOnlineStatus.None: + case BeatmapSetOnlineStatus.Pending: + case BeatmapSetOnlineStatus.WIP: + PlaceholderState = PlaceholderState.Unavailable; + return null; } if (Scope != BeatmapLeaderboardScope.Global && !api.LocalUser.Value.IsSupporter) From 04ef6c4d45741bae700e266370c10d9ea574079c Mon Sep 17 00:00:00 2001 From: Joehu Date: Thu, 4 Jul 2019 21:25:10 -0700 Subject: [PATCH 174/267] Add beatmap status tests --- .../Visual/SongSelect/TestSceneLeaderboard.cs | 98 ++++++++++++++----- 1 file changed, 73 insertions(+), 25 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneLeaderboard.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneLeaderboard.cs index 157e572606..fc42048984 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneLeaderboard.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneLeaderboard.cs @@ -47,7 +47,14 @@ namespace osu.Game.Tests.Visual.SongSelect AddStep(@"No supporter", () => leaderboard.SetRetrievalState(PlaceholderState.NotSupporter)); AddStep(@"Not logged in", () => leaderboard.SetRetrievalState(PlaceholderState.NotLoggedIn)); AddStep(@"Unavailable", () => leaderboard.SetRetrievalState(PlaceholderState.Unavailable)); - AddStep(@"Real beatmap", realBeatmap); + AddStep(@"Ranked beatmap", rankedBeatmap); + AddStep(@"Approved beatmap", approvedBeatmap); + AddStep(@"Qualified beatmap", qualifiedBeatmap); + AddStep(@"Loved beatmap", lovedBeatmap); + AddStep(@"Pending beatmap", pendingBeatmap); + AddStep(@"WIP beatmap", wipBeatmap); + AddStep(@"Graveyard beatmap", graveyardBeatmap); + AddStep(@"Unpublished beatmap", unpublishedBeatmap); } [BackgroundDependencyLoader] @@ -245,34 +252,75 @@ namespace osu.Game.Tests.Visual.SongSelect leaderboard.Scores = scores; } - private void realBeatmap() + private void rankedBeatmap() { leaderboard.Beatmap = new BeatmapInfo { - StarDifficulty = 1.36, - Version = @"BASIC", OnlineBeatmapID = 1113057, - Ruleset = rulesets.GetRuleset(0), - BaseDifficulty = new BeatmapDifficulty - { - CircleSize = 4, - DrainRate = 6.5f, - OverallDifficulty = 6.5f, - ApproachRate = 5, - }, - OnlineInfo = new BeatmapOnlineInfo - { - Length = 115000, - CircleCount = 265, - SliderCount = 71, - PlayCount = 47906, - PassCount = 19899, - }, - Metrics = new BeatmapMetrics - { - Fails = Enumerable.Range(1, 100).Select(i => i % 12 - 6).ToArray(), - Retries = Enumerable.Range(-2, 100).Select(i => i % 12 - 6).ToArray(), - }, + Status = BeatmapSetOnlineStatus.Ranked, + }; + } + + private void approvedBeatmap() + { + leaderboard.Beatmap = new BeatmapInfo + { + OnlineBeatmapID = 1113057, + Status = BeatmapSetOnlineStatus.Approved, + }; + } + + private void qualifiedBeatmap() + { + leaderboard.Beatmap = new BeatmapInfo + { + OnlineBeatmapID = 1113057, + Status = BeatmapSetOnlineStatus.Qualified, + }; + } + + private void lovedBeatmap() + { + leaderboard.Beatmap = new BeatmapInfo + { + OnlineBeatmapID = 1113057, + Status = BeatmapSetOnlineStatus.Loved, + }; + } + + private void pendingBeatmap() + { + leaderboard.Beatmap = new BeatmapInfo + { + OnlineBeatmapID = 1113057, + Status = BeatmapSetOnlineStatus.Pending, + }; + } + + private void wipBeatmap() + { + leaderboard.Beatmap = new BeatmapInfo + { + OnlineBeatmapID = 1113057, + Status = BeatmapSetOnlineStatus.WIP, + }; + } + + private void graveyardBeatmap() + { + leaderboard.Beatmap = new BeatmapInfo + { + OnlineBeatmapID = 1113057, + Status = BeatmapSetOnlineStatus.Graveyard, + }; + } + + private void unpublishedBeatmap() + { + leaderboard.Beatmap = new BeatmapInfo + { + OnlineBeatmapID = null, + Status = BeatmapSetOnlineStatus.None, }; } From 1534b75d27658a3bc671a3a483f276bc49e67766 Mon Sep 17 00:00:00 2001 From: Joehu Date: Thu, 4 Jul 2019 21:39:21 -0700 Subject: [PATCH 175/267] Fix ci errors --- .../Visual/SongSelect/TestSceneLeaderboard.cs | 11 ----------- .../Screens/Select/Leaderboards/BeatmapLeaderboard.cs | 6 ++++++ 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneLeaderboard.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneLeaderboard.cs index fc42048984..f6164c8a73 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneLeaderboard.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneLeaderboard.cs @@ -4,12 +4,9 @@ using System; using System.Collections.Generic; using System.ComponentModel; -using System.Linq; -using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Game.Beatmaps; using osu.Game.Online.Leaderboards; -using osu.Game.Rulesets; using osu.Game.Scoring; using osu.Game.Screens.Select.Leaderboards; using osu.Game.Users; @@ -27,8 +24,6 @@ namespace osu.Game.Tests.Visual.SongSelect typeof(RetrievalFailurePlaceholder), }; - private RulesetStore rulesets; - private readonly FailableLeaderboard leaderboard; public TestSceneLeaderboard() @@ -57,12 +52,6 @@ namespace osu.Game.Tests.Visual.SongSelect AddStep(@"Unpublished beatmap", unpublishedBeatmap); } - [BackgroundDependencyLoader] - private void load(RulesetStore rulesets) - { - this.rulesets = rulesets; - } - private void newScores() { var scores = new[] diff --git a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs index 34f46608da..550e87bcdc 100644 --- a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs +++ b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs @@ -68,6 +68,12 @@ namespace osu.Game.Screens.Select.Leaderboards return null; } + if (Beatmap?.OnlineBeatmapID == null) + { + PlaceholderState = PlaceholderState.Unavailable; + return null; + } + switch (Beatmap?.Status) { case BeatmapSetOnlineStatus.Graveyard: From 8346c50ce113cdecea9378cf2a723795251c197b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 5 Jul 2019 13:49:54 +0900 Subject: [PATCH 176/267] Rename delete method and improve xmldoc --- osu.Game/Beatmaps/BeatmapManager.cs | 4 +--- osu.Game/Database/ArchiveModelManager.cs | 8 +++++--- osu.Game/Skinning/SkinManager.cs | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 643fef5904..df9c8973ea 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -82,9 +82,7 @@ namespace osu.Game.Beatmaps protected override ArchiveDownloadRequest CreateDownloadRequest(BeatmapSetInfo set, bool minimiseDownloadSize) => new DownloadBeatmapSetRequest(set, minimiseDownloadSize); - protected override IEnumerable GetStableImportPaths() => GetStableStorage().GetDirectories(ImportFromStablePath); - - protected override bool ShouldRemoveArchive(string path) => Path.GetExtension(path)?.ToLowerInvariant() == ".osz"; + protected override bool ShouldDeleteArchive(string path) => Path.GetExtension(path)?.ToLowerInvariant() == ".osz"; protected override Task Populate(BeatmapSetInfo beatmapSet, ArchiveReader archive, CancellationToken cancellationToken = default) { diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index 939333c6f4..dabd8fa2ef 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -176,7 +176,7 @@ namespace osu.Game.Database // TODO: Add a check to prevent files from storage to be deleted. try { - if (import != null && File.Exists(path) && ShouldRemoveArchive(path)) + if (import != null && File.Exists(path) && ShouldDeleteArchive(path)) File.Delete(path); } catch (Exception e) @@ -504,9 +504,11 @@ namespace osu.Game.Database protected abstract IEnumerable GetStableImportPaths(); /// - /// Should this archive be removed after importing? + /// Whether this specified path should be removed after successful import. /// - protected virtual bool ShouldRemoveArchive(string path) => false; + /// The path for consideration. May be a file or a directory. + /// Whether to perform deletion. + protected virtual bool ShouldDeleteArchive(string path) => false; /// /// This is a temporary method and will likely be replaced by a full-fledged (and more correctly placed) migration process in the future. diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs index 00e6fddc6a..3509263e6f 100644 --- a/osu.Game/Skinning/SkinManager.cs +++ b/osu.Game/Skinning/SkinManager.cs @@ -57,7 +57,7 @@ namespace osu.Game.Skinning protected override IEnumerable GetStableImportPaths() => GetStableStorage().GetDirectories(ImportFromStablePath); - protected override bool ShouldRemoveArchive(string path) => Path.GetExtension(path)?.ToLowerInvariant() == ".osk"; + protected override bool ShouldDeleteArchive(string path) => Path.GetExtension(path)?.ToLowerInvariant() == ".osk"; /// /// Returns a list of all usable s. Includes the special default skin plus all skins from . From ba8df3ba9244034db85fa92828e19c7c9ce4c689 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 5 Jul 2019 13:59:31 +0900 Subject: [PATCH 177/267] Clean up stable lookup and mutate logic --- osu.Game/Database/ArchiveModelManager.cs | 6 +++--- osu.Game/Scoring/ScoreManager.cs | 5 ++--- osu.Game/Skinning/SkinManager.cs | 2 -- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index dabd8fa2ef..445c8feb3b 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -486,7 +486,7 @@ namespace osu.Game.Database /// /// Set a storage with access to an osu-stable install for import purposes. /// - public Func GetStableStorage { protected get; set; } + public Func GetStableStorage { private get; set; } /// /// Denotes whether an osu-stable installation is present to perform automated imports from. @@ -501,7 +501,7 @@ namespace osu.Game.Database /// /// Selects paths to import from. /// - protected abstract IEnumerable GetStableImportPaths(); + protected virtual IEnumerable GetStableImportPaths(Storage stableStoage) => stableStoage.GetDirectories(ImportFromStablePath); /// /// Whether this specified path should be removed after successful import. @@ -530,7 +530,7 @@ namespace osu.Game.Database return Task.CompletedTask; } - return Task.Run(async () => await Import(GetStableImportPaths().Select(f => stable.GetFullPath(f)).ToArray())); + return Task.Run(async () => await Import(GetStableImportPaths(GetStableStorage()).Select(f => stable.GetFullPath(f)).ToArray())); } #endregion diff --git a/osu.Game/Scoring/ScoreManager.cs b/osu.Game/Scoring/ScoreManager.cs index 4c7de90d6f..770b56e1fe 100644 --- a/osu.Game/Scoring/ScoreManager.cs +++ b/osu.Game/Scoring/ScoreManager.cs @@ -56,9 +56,8 @@ namespace osu.Game.Scoring } } - protected override IEnumerable GetStableImportPaths() - => GetStableStorage().GetFiles(ImportFromStablePath) - .Where(p => HandledExtensions.Any(ext => Path.GetExtension(p)?.Equals(ext, StringComparison.InvariantCultureIgnoreCase) ?? false)); + protected override IEnumerable GetStableImportPaths(Storage stableStorage) + => stableStorage.GetFiles(ImportFromStablePath).Where(p => HandledExtensions.Any(ext => Path.GetExtension(p)?.Equals(ext, StringComparison.InvariantCultureIgnoreCase) ?? false)); public Score GetScore(ScoreInfo score) => new LegacyDatabasedScore(score, rulesets, beatmaps(), Files.Store); diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs index 3509263e6f..70abfac501 100644 --- a/osu.Game/Skinning/SkinManager.cs +++ b/osu.Game/Skinning/SkinManager.cs @@ -55,8 +55,6 @@ namespace osu.Game.Skinning }; } - protected override IEnumerable GetStableImportPaths() => GetStableStorage().GetDirectories(ImportFromStablePath); - protected override bool ShouldDeleteArchive(string path) => Path.GetExtension(path)?.ToLowerInvariant() == ".osk"; /// From 99da04527d5ca2b2e130acce60d1f5a1f831413d Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 5 Jul 2019 14:07:14 +0900 Subject: [PATCH 178/267] Replays -> scores --- .../Overlays/Settings/Sections/Maintenance/GeneralSettings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs b/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs index e3f5acc8ac..832673703b 100644 --- a/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs +++ b/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs @@ -58,7 +58,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance { Add(importScoresButton = new SettingsButton { - Text = "Import replays from stable", + Text = "Import scores from stable", Action = () => { importScoresButton.Enabled.Value = false; From 87c8fd0035ec6fa0b7cf37dbe10f674f695127ba Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 5 Jul 2019 14:15:29 +0900 Subject: [PATCH 179/267] Fix path specification not being cross-platform compliant --- osu.Game/Scoring/ScoreManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Scoring/ScoreManager.cs b/osu.Game/Scoring/ScoreManager.cs index 770b56e1fe..d78e9e073e 100644 --- a/osu.Game/Scoring/ScoreManager.cs +++ b/osu.Game/Scoring/ScoreManager.cs @@ -25,7 +25,7 @@ namespace osu.Game.Scoring protected override string[] HashableFileTypes => new[] { ".osr" }; - protected override string ImportFromStablePath => @"Data\r"; + protected override string ImportFromStablePath => Path.Combine("Data", "r"); private readonly RulesetStore rulesets; private readonly Func beatmaps; From 80d8ce83928a09042fd52c5d985fc051d836445f Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 5 Jul 2019 14:21:56 +0900 Subject: [PATCH 180/267] Fix GetStableImportPaths xmldoc --- osu.Game/Database/ArchiveModelManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index 445c8feb3b..355411063d 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -499,7 +499,7 @@ namespace osu.Game.Database protected virtual string ImportFromStablePath => null; /// - /// Selects paths to import from. + /// Select paths to import from stable. Default implementation iterates all directories in . /// protected virtual IEnumerable GetStableImportPaths(Storage stableStoage) => stableStoage.GetDirectories(ImportFromStablePath); From adf6d6c942b2c32c4522458c0023fb89da32915c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 5 Jul 2019 14:25:52 +0900 Subject: [PATCH 181/267] Update initial run import process to include scores --- osu.Game/Screens/Select/ImportFromStablePopup.cs | 2 +- osu.Game/Screens/Select/SongSelect.cs | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/osu.Game/Screens/Select/ImportFromStablePopup.cs b/osu.Game/Screens/Select/ImportFromStablePopup.cs index 54e4c096f6..20494829ae 100644 --- a/osu.Game/Screens/Select/ImportFromStablePopup.cs +++ b/osu.Game/Screens/Select/ImportFromStablePopup.cs @@ -12,7 +12,7 @@ namespace osu.Game.Screens.Select public ImportFromStablePopup(Action importFromStable) { HeaderText = @"You have no beatmaps!"; - BodyText = "An existing copy of osu! was found, though.\nWould you like to import your beatmaps (and skins)?"; + BodyText = "An existing copy of osu! was found, though.\nWould you like to import your beatmaps, skins and scores?"; Icon = FontAwesome.Solid.Plane; diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index 3581ed5534..bf5857f725 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -35,6 +35,7 @@ using System.Linq; using System.Threading.Tasks; using osu.Framework.Graphics.Sprites; using osu.Framework.Input.Bindings; +using osu.Game.Scoring; namespace osu.Game.Screens.Select { @@ -215,7 +216,7 @@ namespace osu.Game.Screens.Select } [BackgroundDependencyLoader(true)] - private void load(BeatmapManager beatmaps, AudioManager audio, DialogOverlay dialog, OsuColour colours, SkinManager skins) + private void load(BeatmapManager beatmaps, AudioManager audio, DialogOverlay dialog, OsuColour colours, SkinManager skins, ScoreManager scores) { mods.BindTo(Mods); @@ -252,7 +253,7 @@ namespace osu.Game.Screens.Select if (!beatmaps.GetAllUsableBeatmapSets().Any() && beatmaps.StableInstallationAvailable) dialogOverlay.Push(new ImportFromStablePopup(() => { - Task.Run(beatmaps.ImportFromStableAsync); + Task.Run(beatmaps.ImportFromStableAsync).ContinueWith(_ => scores.ImportFromStableAsync(), TaskContinuationOptions.OnlyOnRanToCompletion); Task.Run(skins.ImportFromStableAsync); })); }); From df7d31350c8fe8e22478d88f5a57da0b83d88a30 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 5 Jul 2019 14:47:55 +0900 Subject: [PATCH 182/267] Stop import failures from being added to the imported model list --- osu.Game/Database/ArchiveModelManager.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index 01455e7d50..7d81b95203 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -114,7 +114,8 @@ namespace osu.Game.Database lock (imported) { - imported.Add(model); + if (model != null) + imported.Add(model); current++; notification.Text = $"Imported {current} of {paths.Length} {HumanisedModelName}s"; @@ -140,7 +141,7 @@ namespace osu.Game.Database { notification.CompletionText = imported.Count == 1 ? $"Imported {imported.First()}!" - : $"Imported {current} {HumanisedModelName}s!"; + : $"Imported {imported.Count} {HumanisedModelName}s!"; if (imported.Count > 0 && PresentImport != null) { From b902457f8dbe8609b679cdbdfce50cfba3d113d1 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 5 Jul 2019 15:32:07 +0900 Subject: [PATCH 183/267] Allow PlayerLoader to proceed even if the mouse is hovering an overlay panel --- osu.Game/Screens/Play/PlayerLoader.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/osu.Game/Screens/Play/PlayerLoader.cs b/osu.Game/Screens/Play/PlayerLoader.cs index 681ce701d0..5396321160 100644 --- a/osu.Game/Screens/Play/PlayerLoader.cs +++ b/osu.Game/Screens/Play/PlayerLoader.cs @@ -18,6 +18,7 @@ using osu.Game.Graphics; using osu.Game.Graphics.Containers; using osu.Game.Graphics.Sprites; using osu.Game.Graphics.UserInterface; +using osu.Game.Input; using osu.Game.Rulesets.Mods; using osu.Game.Screens.Menu; using osu.Game.Screens.Play.HUD; @@ -53,6 +54,8 @@ namespace osu.Game.Screens.Play private InputManager inputManager; + private IdleTracker idleTracker; + public PlayerLoader(Func createPlayer) { this.createPlayer = createPlayer; @@ -93,7 +96,8 @@ namespace osu.Game.Screens.Play VisualSettings = new VisualSettings(), new InputSettings() } - } + }, + idleTracker = new IdleTracker(750) }); loadNewPlayer(); @@ -193,7 +197,7 @@ namespace osu.Game.Screens.Play // Here because IsHovered will not update unless we do so. public override bool HandlePositionalInput => true; - private bool readyForPush => player.LoadState == LoadState.Ready && IsHovered && GetContainingInputManager()?.DraggedDrawable == null; + private bool readyForPush => player.LoadState == LoadState.Ready && (IsHovered || idleTracker.IsIdle.Value) && inputManager?.DraggedDrawable == null; private void pushWhenLoaded() { From 39bd5e6478daefc5369c34c89ba30bceab73716c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 5 Jul 2019 15:50:31 +0900 Subject: [PATCH 184/267] Add test --- .../Visual/Gameplay/TestScenePlayerLoader.cs | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/osu.Game.Tests/Visual/Gameplay/TestScenePlayerLoader.cs b/osu.Game.Tests/Visual/Gameplay/TestScenePlayerLoader.cs index daee3a520c..18edaf1b92 100644 --- a/osu.Game.Tests/Visual/Gameplay/TestScenePlayerLoader.cs +++ b/osu.Game.Tests/Visual/Gameplay/TestScenePlayerLoader.cs @@ -9,6 +9,7 @@ using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Framework.Graphics; +using osu.Framework.MathUtils; using osu.Framework.Screens; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Osu; @@ -16,12 +17,13 @@ using osu.Game.Rulesets.Scoring; using osu.Game.Scoring; using osu.Game.Screens; using osu.Game.Screens.Play; +using osu.Game.Screens.Play.PlayerSettings; namespace osu.Game.Tests.Visual.Gameplay { public class TestScenePlayerLoader : ManualInputManagerTestScene { - private PlayerLoader loader; + private TestPlayerLoader loader; private OsuScreenStack stack; [SetUp] @@ -31,19 +33,28 @@ namespace osu.Game.Tests.Visual.Gameplay Beatmap.Value = CreateWorkingBeatmap(new OsuRuleset().RulesetInfo); }); + [Test] + public void TestBlockLoadViaMouseMovement() + { + AddStep("load dummy beatmap", () => stack.Push(loader = new TestPlayerLoader(() => new TestPlayer(false, false)))); + AddRepeatStep("move mouse", () => InputManager.MoveMouseTo(loader.VisualSettings.ScreenSpaceDrawQuad.TopLeft + (loader.VisualSettings.ScreenSpaceDrawQuad.BottomRight - loader.VisualSettings.ScreenSpaceDrawQuad.TopLeft) * RNG.NextSingle()), 20); + AddAssert("loader still active", () => loader.IsCurrentScreen()); + AddUntilStep("loads after idle", () => !loader.IsCurrentScreen()); + } + [Test] public void TestLoadContinuation() { Player player = null; SlowLoadPlayer slowPlayer = null; - AddStep("load dummy beatmap", () => stack.Push(loader = new PlayerLoader(() => player = new TestPlayer(false, false)))); + AddStep("load dummy beatmap", () => stack.Push(loader = new TestPlayerLoader(() => player = new TestPlayer(false, false)))); AddUntilStep("wait for current", () => loader.IsCurrentScreen()); AddStep("mouse in centre", () => InputManager.MoveMouseTo(loader.ScreenSpaceDrawQuad.Centre)); AddUntilStep("wait for player to be current", () => player.IsCurrentScreen()); AddStep("load slow dummy beatmap", () => { - stack.Push(loader = new PlayerLoader(() => slowPlayer = new SlowLoadPlayer(false, false))); + stack.Push(loader = new TestPlayerLoader(() => slowPlayer = new SlowLoadPlayer(false, false))); Scheduler.AddDelayed(() => slowPlayer.AllowLoad.Set(), 5000); }); @@ -61,7 +72,7 @@ namespace osu.Game.Tests.Visual.Gameplay AddStep("load player", () => { Mods.Value = new[] { gameMod = new TestMod() }; - stack.Push(loader = new PlayerLoader(() => player = new TestPlayer())); + stack.Push(loader = new TestPlayerLoader(() => player = new TestPlayer())); }); AddUntilStep("wait for loader to become current", () => loader.IsCurrentScreen()); @@ -85,6 +96,16 @@ namespace osu.Game.Tests.Visual.Gameplay AddAssert("player mods applied", () => playerMod2.Applied); } + private class TestPlayerLoader : PlayerLoader + { + public new VisualSettings VisualSettings => base.VisualSettings; + + public TestPlayerLoader(Func createPlayer) + : base(createPlayer) + { + } + } + private class TestMod : Mod, IApplicableToScoreProcessor { public override string Name => string.Empty; From a259247a98fa40d4beb3db268032225533df2e34 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Fri, 5 Jul 2019 16:07:17 +0900 Subject: [PATCH 185/267] use const --- osu.Game/Screens/Menu/ButtonSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Menu/ButtonSystem.cs b/osu.Game/Screens/Menu/ButtonSystem.cs index 87c009c437..1a3e1213b4 100644 --- a/osu.Game/Screens/Menu/ButtonSystem.cs +++ b/osu.Game/Screens/Menu/ButtonSystem.cs @@ -332,7 +332,7 @@ namespace osu.Game.Screens.Menu break; case ButtonSystemState.EnteringMode: - logoTrackingContainer.StartTracking(logo, lastState == ButtonSystemState.Initial ? 400 : 0, Easing.InSine); + logoTrackingContainer.StartTracking(logo, lastState == ButtonSystemState.Initial ? MainMenu.FADE_OUT_DURATION : 0, Easing.InSine); break; } } From 71e40b46843e69d9bba072cbf6eb7aeede9a3d46 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sat, 6 Jul 2019 12:32:16 +0900 Subject: [PATCH 186/267] Force SQLite to multithreading mode --- osu.Game/Database/OsuDbContext.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/osu.Game/Database/OsuDbContext.cs b/osu.Game/Database/OsuDbContext.cs index 538ec41b3d..ea3318598f 100644 --- a/osu.Game/Database/OsuDbContext.cs +++ b/osu.Game/Database/OsuDbContext.cs @@ -41,6 +41,9 @@ namespace osu.Game.Database { // required to initialise native SQLite libraries on some platforms. SQLitePCL.Batteries_V2.Init(); + + // https://github.com/aspnet/EntityFrameworkCore/issues/9994#issuecomment-508588678 + SQLitePCL.raw.sqlite3_config(2 /*SQLITE_CONFIG_MULTITHREAD*/); } /// From 530e07110f0425aed5d7c3c56eed920c03e80483 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Sat, 6 Jul 2019 06:32:25 +0300 Subject: [PATCH 187/267] Use a descriptive name for the setting --- osu.Game/Configuration/OsuConfigManager.cs | 4 ++-- .../Overlays/Settings/Sections/Gameplay/GeneralSettings.cs | 2 +- osu.Game/Rulesets/Mods/ModBlockFail.cs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/osu.Game/Configuration/OsuConfigManager.cs b/osu.Game/Configuration/OsuConfigManager.cs index b5097e95c8..c56a5cc6e4 100644 --- a/osu.Game/Configuration/OsuConfigManager.cs +++ b/osu.Game/Configuration/OsuConfigManager.cs @@ -77,7 +77,7 @@ namespace osu.Game.Configuration Set(OsuSetting.BlurLevel, 0, 0, 1, 0.01); Set(OsuSetting.ShowInterface, true); - Set(OsuSetting.HideHealthBar, true); + Set(OsuSetting.HideHealthBarWhenCantFail, true); Set(OsuSetting.KeyOverlay, false); Set(OsuSetting.FloatingComments, false); @@ -132,7 +132,7 @@ namespace osu.Game.Configuration KeyOverlay, FloatingComments, ShowInterface, - HideHealthBar, + HideHealthBarWhenCantFail, MouseDisableButtons, MouseDisableWheel, AudioOffset, diff --git a/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs b/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs index 2d208c5f71..7aeefe959f 100644 --- a/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs +++ b/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs @@ -37,7 +37,7 @@ namespace osu.Game.Overlays.Settings.Sections.Gameplay new SettingsCheckbox { LabelText = "Hide health bar if you can't fail", - Bindable = config.GetBindable(OsuSetting.HideHealthBar), + Bindable = config.GetBindable(OsuSetting.HideHealthBarWhenCantFail), }, new SettingsCheckbox { diff --git a/osu.Game/Rulesets/Mods/ModBlockFail.cs b/osu.Game/Rulesets/Mods/ModBlockFail.cs index e37b1b0698..de509a7ea7 100644 --- a/osu.Game/Rulesets/Mods/ModBlockFail.cs +++ b/osu.Game/Rulesets/Mods/ModBlockFail.cs @@ -21,7 +21,7 @@ namespace osu.Game.Rulesets.Mods public void ReadFromConfig(OsuConfigManager config) { - hideHealthBar = config.GetBindable(OsuSetting.HideHealthBar); + hideHealthBar = config.GetBindable(OsuSetting.HideHealthBarWhenCantFail); } public void ApplyToHUD(HUDOverlay overlay) From 64de3840b0f84f805077d7434b30e4295372e922 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sat, 6 Jul 2019 15:25:53 +0900 Subject: [PATCH 188/267] Add missing wait step in TestScenePlayerLoader --- osu.Game.Tests/Visual/Gameplay/TestScenePlayerLoader.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game.Tests/Visual/Gameplay/TestScenePlayerLoader.cs b/osu.Game.Tests/Visual/Gameplay/TestScenePlayerLoader.cs index 18edaf1b92..ab519360ac 100644 --- a/osu.Game.Tests/Visual/Gameplay/TestScenePlayerLoader.cs +++ b/osu.Game.Tests/Visual/Gameplay/TestScenePlayerLoader.cs @@ -37,6 +37,7 @@ namespace osu.Game.Tests.Visual.Gameplay public void TestBlockLoadViaMouseMovement() { AddStep("load dummy beatmap", () => stack.Push(loader = new TestPlayerLoader(() => new TestPlayer(false, false)))); + AddUntilStep("wait for current", () => loader.IsCurrentScreen()); AddRepeatStep("move mouse", () => InputManager.MoveMouseTo(loader.VisualSettings.ScreenSpaceDrawQuad.TopLeft + (loader.VisualSettings.ScreenSpaceDrawQuad.BottomRight - loader.VisualSettings.ScreenSpaceDrawQuad.TopLeft) * RNG.NextSingle()), 20); AddAssert("loader still active", () => loader.IsCurrentScreen()); AddUntilStep("loads after idle", () => !loader.IsCurrentScreen()); From 6fd3ad5c1dac275e6a8112f4ae8af31f64ee99f4 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Sat, 6 Jul 2019 12:10:30 +0300 Subject: [PATCH 189/267] Remove unnecessary fading --- .../Beatmaps/Drawables/UpdateableBeatmapBackgroundSprite.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game/Beatmaps/Drawables/UpdateableBeatmapBackgroundSprite.cs b/osu.Game/Beatmaps/Drawables/UpdateableBeatmapBackgroundSprite.cs index 1fd3502799..30346a8a96 100644 --- a/osu.Game/Beatmaps/Drawables/UpdateableBeatmapBackgroundSprite.cs +++ b/osu.Game/Beatmaps/Drawables/UpdateableBeatmapBackgroundSprite.cs @@ -35,15 +35,15 @@ namespace osu.Game.Beatmaps.Drawables protected override DelayedLoadWrapper CreateDelayedLoadWrapper(Func createContentFunc, double timeBeforeLoad) => new DelayedLoadUnloadWrapper(createContentFunc, timeBeforeLoad, UnloadDelay); + protected override double TransformDuration => 400; + protected override Drawable CreateDrawable(BeatmapInfo model) { - Drawable drawable = getDrawableForModel(model); - + var drawable = getDrawableForModel(model); drawable.RelativeSizeAxes = Axes.Both; drawable.Anchor = Anchor.Centre; drawable.Origin = Anchor.Centre; drawable.FillMode = FillMode.Fill; - drawable.OnLoadComplete += d => d.FadeInFromZero(400); return drawable; } From a42c79895d907351d3764f019f9e6ca475a41760 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Sat, 6 Jul 2019 18:38:41 +0300 Subject: [PATCH 190/267] Remove unnecessary private field --- osu.Game/Rulesets/Mods/ModBlockFail.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/osu.Game/Rulesets/Mods/ModBlockFail.cs b/osu.Game/Rulesets/Mods/ModBlockFail.cs index de509a7ea7..1eb997ec58 100644 --- a/osu.Game/Rulesets/Mods/ModBlockFail.cs +++ b/osu.Game/Rulesets/Mods/ModBlockFail.cs @@ -5,14 +5,12 @@ using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Game.Configuration; using osu.Game.Screens.Play; -using osu.Game.Screens.Play.HUD; namespace osu.Game.Rulesets.Mods { public abstract class ModBlockFail : Mod, IApplicableFailOverride, IApplicableToHUD, IReadFromConfig { private Bindable hideHealthBar; - private HealthDisplay healthDisplay; /// /// We never fail, 'yo. @@ -26,7 +24,6 @@ namespace osu.Game.Rulesets.Mods public void ApplyToHUD(HUDOverlay overlay) { - healthDisplay = overlay.HealthDisplay; hideHealthBar.BindValueChanged(v => healthDisplay.FadeTo(v.NewValue ? 0 : 1, 250, Easing.OutQuint), true); } } From 1f13b94c729302707b59e60cbd84073708e16a28 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Sat, 6 Jul 2019 18:44:55 +0300 Subject: [PATCH 191/267] Fix build error --- osu.Game/Rulesets/Mods/ModBlockFail.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/Mods/ModBlockFail.cs b/osu.Game/Rulesets/Mods/ModBlockFail.cs index 1eb997ec58..e90b79bb11 100644 --- a/osu.Game/Rulesets/Mods/ModBlockFail.cs +++ b/osu.Game/Rulesets/Mods/ModBlockFail.cs @@ -24,7 +24,7 @@ namespace osu.Game.Rulesets.Mods public void ApplyToHUD(HUDOverlay overlay) { - hideHealthBar.BindValueChanged(v => healthDisplay.FadeTo(v.NewValue ? 0 : 1, 250, Easing.OutQuint), true); + hideHealthBar.BindValueChanged(v => overlay.HealthDisplay.FadeTo(v.NewValue ? 0 : 1, 250, Easing.OutQuint), true); } } } From 5767f4360e02cd91dcfdb1e42ce45bd7d3fb840c Mon Sep 17 00:00:00 2001 From: Joehu Date: Sat, 6 Jul 2019 12:07:13 -0700 Subject: [PATCH 192/267] Remove unnecessary test checks --- .../Visual/SongSelect/TestSceneLeaderboard.cs | 60 ------------------- 1 file changed, 60 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneLeaderboard.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneLeaderboard.cs index f6164c8a73..9472696295 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneLeaderboard.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneLeaderboard.cs @@ -43,13 +43,7 @@ namespace osu.Game.Tests.Visual.SongSelect AddStep(@"Not logged in", () => leaderboard.SetRetrievalState(PlaceholderState.NotLoggedIn)); AddStep(@"Unavailable", () => leaderboard.SetRetrievalState(PlaceholderState.Unavailable)); AddStep(@"Ranked beatmap", rankedBeatmap); - AddStep(@"Approved beatmap", approvedBeatmap); - AddStep(@"Qualified beatmap", qualifiedBeatmap); - AddStep(@"Loved beatmap", lovedBeatmap); AddStep(@"Pending beatmap", pendingBeatmap); - AddStep(@"WIP beatmap", wipBeatmap); - AddStep(@"Graveyard beatmap", graveyardBeatmap); - AddStep(@"Unpublished beatmap", unpublishedBeatmap); } private void newScores() @@ -250,33 +244,6 @@ namespace osu.Game.Tests.Visual.SongSelect }; } - private void approvedBeatmap() - { - leaderboard.Beatmap = new BeatmapInfo - { - OnlineBeatmapID = 1113057, - Status = BeatmapSetOnlineStatus.Approved, - }; - } - - private void qualifiedBeatmap() - { - leaderboard.Beatmap = new BeatmapInfo - { - OnlineBeatmapID = 1113057, - Status = BeatmapSetOnlineStatus.Qualified, - }; - } - - private void lovedBeatmap() - { - leaderboard.Beatmap = new BeatmapInfo - { - OnlineBeatmapID = 1113057, - Status = BeatmapSetOnlineStatus.Loved, - }; - } - private void pendingBeatmap() { leaderboard.Beatmap = new BeatmapInfo @@ -286,33 +253,6 @@ namespace osu.Game.Tests.Visual.SongSelect }; } - private void wipBeatmap() - { - leaderboard.Beatmap = new BeatmapInfo - { - OnlineBeatmapID = 1113057, - Status = BeatmapSetOnlineStatus.WIP, - }; - } - - private void graveyardBeatmap() - { - leaderboard.Beatmap = new BeatmapInfo - { - OnlineBeatmapID = 1113057, - Status = BeatmapSetOnlineStatus.Graveyard, - }; - } - - private void unpublishedBeatmap() - { - leaderboard.Beatmap = new BeatmapInfo - { - OnlineBeatmapID = null, - Status = BeatmapSetOnlineStatus.None, - }; - } - private class FailableLeaderboard : BeatmapLeaderboard { public void SetRetrievalState(PlaceholderState state) From bf41fd5d9dd590e7a51301c484db0030293ef41f Mon Sep 17 00:00:00 2001 From: Roman Kapustin Date: Sat, 6 Jul 2019 23:29:35 +0300 Subject: [PATCH 193/267] Update package references --- .../osu.Game.Rulesets.Catch.Tests.csproj | 2 +- .../osu.Game.Rulesets.Mania.Tests.csproj | 2 +- .../osu.Game.Rulesets.Osu.Tests.csproj | 2 +- .../osu.Game.Rulesets.Taiko.Tests.csproj | 2 +- osu.Game.Tests/osu.Game.Tests.csproj | 2 +- osu.Game.Tournament.Tests/osu.Game.Tournament.Tests.csproj | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/osu.Game.Rulesets.Catch.Tests/osu.Game.Rulesets.Catch.Tests.csproj b/osu.Game.Rulesets.Catch.Tests/osu.Game.Rulesets.Catch.Tests.csproj index 265ecb7688..9acf47a67c 100644 --- a/osu.Game.Rulesets.Catch.Tests/osu.Game.Rulesets.Catch.Tests.csproj +++ b/osu.Game.Rulesets.Catch.Tests/osu.Game.Rulesets.Catch.Tests.csproj @@ -2,7 +2,7 @@ - + diff --git a/osu.Game.Rulesets.Mania.Tests/osu.Game.Rulesets.Mania.Tests.csproj b/osu.Game.Rulesets.Mania.Tests/osu.Game.Rulesets.Mania.Tests.csproj index dbade6ff8d..df5131dd8b 100644 --- a/osu.Game.Rulesets.Mania.Tests/osu.Game.Rulesets.Mania.Tests.csproj +++ b/osu.Game.Rulesets.Mania.Tests/osu.Game.Rulesets.Mania.Tests.csproj @@ -2,7 +2,7 @@ - + diff --git a/osu.Game.Rulesets.Osu.Tests/osu.Game.Rulesets.Osu.Tests.csproj b/osu.Game.Rulesets.Osu.Tests/osu.Game.Rulesets.Osu.Tests.csproj index a99a93c3e9..bb3e5a66f3 100644 --- a/osu.Game.Rulesets.Osu.Tests/osu.Game.Rulesets.Osu.Tests.csproj +++ b/osu.Game.Rulesets.Osu.Tests/osu.Game.Rulesets.Osu.Tests.csproj @@ -2,7 +2,7 @@ - + diff --git a/osu.Game.Rulesets.Taiko.Tests/osu.Game.Rulesets.Taiko.Tests.csproj b/osu.Game.Rulesets.Taiko.Tests/osu.Game.Rulesets.Taiko.Tests.csproj index 216cc0222f..5510c3a9d9 100644 --- a/osu.Game.Rulesets.Taiko.Tests/osu.Game.Rulesets.Taiko.Tests.csproj +++ b/osu.Game.Rulesets.Taiko.Tests/osu.Game.Rulesets.Taiko.Tests.csproj @@ -2,7 +2,7 @@ - + diff --git a/osu.Game.Tests/osu.Game.Tests.csproj b/osu.Game.Tests/osu.Game.Tests.csproj index 11d70ee7be..659f5415c3 100644 --- a/osu.Game.Tests/osu.Game.Tests.csproj +++ b/osu.Game.Tests/osu.Game.Tests.csproj @@ -3,7 +3,7 @@ - + diff --git a/osu.Game.Tournament.Tests/osu.Game.Tournament.Tests.csproj b/osu.Game.Tournament.Tests/osu.Game.Tournament.Tests.csproj index 1c169184fb..dad2fe0877 100644 --- a/osu.Game.Tournament.Tests/osu.Game.Tournament.Tests.csproj +++ b/osu.Game.Tournament.Tests/osu.Game.Tournament.Tests.csproj @@ -5,9 +5,9 @@ - + - + WinExe From 84919d70bb37cfcb8cd859e01dac2bcdfc0c9da1 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 7 Jul 2019 05:30:30 +0900 Subject: [PATCH 194/267] Health bar -> Health display Also inverts logic --- osu.Game/Configuration/OsuConfigManager.cs | 4 ++-- .../Overlays/Settings/Sections/Gameplay/GeneralSettings.cs | 4 ++-- osu.Game/Rulesets/Mods/ModBlockFail.cs | 7 +++---- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/osu.Game/Configuration/OsuConfigManager.cs b/osu.Game/Configuration/OsuConfigManager.cs index c56a5cc6e4..1da7c7ec1d 100644 --- a/osu.Game/Configuration/OsuConfigManager.cs +++ b/osu.Game/Configuration/OsuConfigManager.cs @@ -77,7 +77,7 @@ namespace osu.Game.Configuration Set(OsuSetting.BlurLevel, 0, 0, 1, 0.01); Set(OsuSetting.ShowInterface, true); - Set(OsuSetting.HideHealthBarWhenCantFail, true); + Set(OsuSetting.ShowHealthDisplayWhenCantFail, true); Set(OsuSetting.KeyOverlay, false); Set(OsuSetting.FloatingComments, false); @@ -132,7 +132,7 @@ namespace osu.Game.Configuration KeyOverlay, FloatingComments, ShowInterface, - HideHealthBarWhenCantFail, + ShowHealthDisplayWhenCantFail, MouseDisableButtons, MouseDisableWheel, AudioOffset, diff --git a/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs b/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs index 7aeefe959f..13a494f51f 100644 --- a/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs +++ b/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs @@ -36,8 +36,8 @@ namespace osu.Game.Overlays.Settings.Sections.Gameplay }, new SettingsCheckbox { - LabelText = "Hide health bar if you can't fail", - Bindable = config.GetBindable(OsuSetting.HideHealthBarWhenCantFail), + LabelText = "Show health display even when can't fail", + Bindable = config.GetBindable(OsuSetting.ShowHealthDisplayWhenCantFail), }, new SettingsCheckbox { diff --git a/osu.Game/Rulesets/Mods/ModBlockFail.cs b/osu.Game/Rulesets/Mods/ModBlockFail.cs index e90b79bb11..26efc3932d 100644 --- a/osu.Game/Rulesets/Mods/ModBlockFail.cs +++ b/osu.Game/Rulesets/Mods/ModBlockFail.cs @@ -2,7 +2,6 @@ // See the LICENCE file in the repository root for full licence text. using osu.Framework.Bindables; -using osu.Framework.Graphics; using osu.Game.Configuration; using osu.Game.Screens.Play; @@ -10,7 +9,7 @@ namespace osu.Game.Rulesets.Mods { public abstract class ModBlockFail : Mod, IApplicableFailOverride, IApplicableToHUD, IReadFromConfig { - private Bindable hideHealthBar; + private Bindable showHealthBar; /// /// We never fail, 'yo. @@ -19,12 +18,12 @@ namespace osu.Game.Rulesets.Mods public void ReadFromConfig(OsuConfigManager config) { - hideHealthBar = config.GetBindable(OsuSetting.HideHealthBarWhenCantFail); + showHealthBar = config.GetBindable(OsuSetting.ShowHealthDisplayWhenCantFail); } public void ApplyToHUD(HUDOverlay overlay) { - hideHealthBar.BindValueChanged(v => overlay.HealthDisplay.FadeTo(v.NewValue ? 0 : 1, 250, Easing.OutQuint), true); + overlay.ShowHealthbar.BindTo(showHealthBar); } } } From 8f2ec736262e3c69ffd4ba35479eb0044539edca Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 7 Jul 2019 05:30:53 +0900 Subject: [PATCH 195/267] Move logic inside of HUDOverlay Add vertical offset adjust. --- osu.Game/Screens/Play/HUDOverlay.cs | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/osu.Game/Screens/Play/HUDOverlay.cs b/osu.Game/Screens/Play/HUDOverlay.cs index 017bf70133..43b9491750 100644 --- a/osu.Game/Screens/Play/HUDOverlay.cs +++ b/osu.Game/Screens/Play/HUDOverlay.cs @@ -23,7 +23,8 @@ namespace osu.Game.Screens.Play { public class HUDOverlay : Container { - private const int duration = 100; + private const int duration = 250; + private const Easing easing = Easing.OutQuint; public readonly KeyCounterDisplay KeyCounter; public readonly RollingCounter ComboCounter; @@ -35,6 +36,8 @@ namespace osu.Game.Screens.Play public readonly HoldForMenuButton HoldToQuit; public readonly PlayerSettingsOverlay PlayerSettingsOverlay; + public Bindable ShowHealthbar = new Bindable(true); + private readonly ScoreProcessor scoreProcessor; private readonly DrawableRuleset drawableRuleset; private readonly IReadOnlyList mods; @@ -47,6 +50,8 @@ namespace osu.Game.Screens.Play public Action RequestSeek; + private readonly Container topScoreContainer; + public HUDOverlay(ScoreProcessor scoreProcessor, DrawableRuleset drawableRuleset, IReadOnlyList mods) { this.scoreProcessor = scoreProcessor; @@ -62,11 +67,10 @@ namespace osu.Game.Screens.Play RelativeSizeAxes = Axes.Both, Children = new Drawable[] { - new Container + topScoreContainer = new Container { Anchor = Anchor.TopCentre, Origin = Anchor.TopCentre, - Y = 30, AutoSizeAxes = Axes.Both, AutoSizeDuration = 200, AutoSizeEasing = Easing.Out, @@ -113,8 +117,21 @@ namespace osu.Game.Screens.Play ModDisplay.Current.Value = mods; showHud = config.GetBindable(OsuSetting.ShowInterface); - showHud.ValueChanged += visible => visibilityContainer.FadeTo(visible.NewValue ? 1 : 0, duration); - showHud.TriggerChange(); + showHud.BindValueChanged(visible => visibilityContainer.FadeTo(visible.NewValue ? 1 : 0, duration, easing), true); + + ShowHealthbar.BindValueChanged(healthBar => + { + if (healthBar.NewValue) + { + HealthDisplay.FadeIn(duration, easing); + topScoreContainer.MoveToY(30, duration, easing); + } + else + { + HealthDisplay.FadeOut(duration, easing); + topScoreContainer.MoveToY(0, duration, easing); + } + }, true); if (!showHud.Value && !hasShownNotificationOnce) { From b10c35b6ab5c74d10f6c100b0a9fa7e081687dc2 Mon Sep 17 00:00:00 2001 From: Salman Ahmed Date: Sun, 7 Jul 2019 06:13:27 +0300 Subject: [PATCH 196/267] Update label text Co-Authored-By: Aergwyn --- osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs b/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs index 13a494f51f..9142492610 100644 --- a/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs +++ b/osu.Game/Overlays/Settings/Sections/Gameplay/GeneralSettings.cs @@ -36,7 +36,7 @@ namespace osu.Game.Overlays.Settings.Sections.Gameplay }, new SettingsCheckbox { - LabelText = "Show health display even when can't fail", + LabelText = "Show health display even when you can't fail", Bindable = config.GetBindable(OsuSetting.ShowHealthDisplayWhenCantFail), }, new SettingsCheckbox From cd31d2bc051e40528a8946c9f31a7e73f8b4091e Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 7 Jul 2019 13:06:31 +0900 Subject: [PATCH 197/267] Simplify tests --- .../Visual/SongSelect/TestSceneLeaderboard.cs | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneLeaderboard.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneLeaderboard.cs index 9472696295..8e358a77db 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestSceneLeaderboard.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestSceneLeaderboard.cs @@ -42,8 +42,8 @@ namespace osu.Game.Tests.Visual.SongSelect AddStep(@"No supporter", () => leaderboard.SetRetrievalState(PlaceholderState.NotSupporter)); AddStep(@"Not logged in", () => leaderboard.SetRetrievalState(PlaceholderState.NotLoggedIn)); AddStep(@"Unavailable", () => leaderboard.SetRetrievalState(PlaceholderState.Unavailable)); - AddStep(@"Ranked beatmap", rankedBeatmap); - AddStep(@"Pending beatmap", pendingBeatmap); + foreach (BeatmapSetOnlineStatus status in Enum.GetValues(typeof(BeatmapSetOnlineStatus))) + AddStep($"{status} beatmap", () => showBeatmapWithStatus(status)); } private void newScores() @@ -235,21 +235,12 @@ namespace osu.Game.Tests.Visual.SongSelect leaderboard.Scores = scores; } - private void rankedBeatmap() + private void showBeatmapWithStatus(BeatmapSetOnlineStatus status) { leaderboard.Beatmap = new BeatmapInfo { OnlineBeatmapID = 1113057, - Status = BeatmapSetOnlineStatus.Ranked, - }; - } - - private void pendingBeatmap() - { - leaderboard.Beatmap = new BeatmapInfo - { - OnlineBeatmapID = 1113057, - Status = BeatmapSetOnlineStatus.Pending, + Status = status, }; } From ebc0e502958e157d21ec5cf7005e39349c57bb44 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 7 Jul 2019 13:21:41 +0900 Subject: [PATCH 198/267] Simplify conditions --- .../Select/Leaderboards/BeatmapLeaderboard.cs | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs index 5c568c6983..0f6d4f3188 100644 --- a/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs +++ b/osu.Game/Screens/Select/Leaderboards/BeatmapLeaderboard.cs @@ -111,22 +111,12 @@ namespace osu.Game.Screens.Select.Leaderboards return null; } - if (Beatmap?.OnlineBeatmapID == null) + if (Beatmap?.OnlineBeatmapID == null || Beatmap?.Status <= BeatmapSetOnlineStatus.Pending) { PlaceholderState = PlaceholderState.Unavailable; return null; } - switch (Beatmap?.Status) - { - case BeatmapSetOnlineStatus.Graveyard: - case BeatmapSetOnlineStatus.None: - case BeatmapSetOnlineStatus.Pending: - case BeatmapSetOnlineStatus.WIP: - PlaceholderState = PlaceholderState.Unavailable; - return null; - } - if (!api.LocalUser.Value.IsSupporter && (Scope != BeatmapLeaderboardScope.Global || filterMods)) { PlaceholderState = PlaceholderState.NotSupporter; From 1a117d1511d48523a7103693e4340a8bd858141d Mon Sep 17 00:00:00 2001 From: Desconocidosmh Date: Sun, 7 Jul 2019 17:05:53 +0200 Subject: [PATCH 199/267] Closes #5277 --- osu.Game/Screens/Edit/Editor.cs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/osu.Game/Screens/Edit/Editor.cs b/osu.Game/Screens/Edit/Editor.cs index 89da9ae063..69fbf7d387 100644 --- a/osu.Game/Screens/Edit/Editor.cs +++ b/osu.Game/Screens/Edit/Editor.cs @@ -168,6 +168,8 @@ namespace osu.Game.Screens.Edit menuBar.Mode.ValueChanged += onModeChanged; + host.Exiting += onQuittingGame; + bottomBackground.Colour = colours.Gray2; } @@ -235,16 +237,27 @@ namespace osu.Game.Screens.Edit Beatmap.Value.Track?.Stop(); } + private bool isExitingGame = false; + public override bool OnExiting(IScreen next) { Background.FadeColour(Color4.White, 500); if (Beatmap.Value.Track != null) { - Beatmap.Value.Track.Tempo.Value = 1; - Beatmap.Value.Track.Start(); + if (isExitingGame) + { + Beatmap.Value.Track.Stop(); + } + else + { + Beatmap.Value.Track.Tempo.Value = 1; + Beatmap.Value.Track.Start(); + } } + host.Exiting -= onQuittingGame; + return base.OnExiting(next); } @@ -281,5 +294,7 @@ namespace osu.Game.Screens.Edit else clock.SeekForward(!clock.IsRunning, amount); } + + private bool onQuittingGame() => isExitingGame = true; } } From 84cadc688a4f12df27485e7ec4c1b570acf065bf Mon Sep 17 00:00:00 2001 From: Desconocidosmh Date: Sun, 7 Jul 2019 17:11:54 +0200 Subject: [PATCH 200/267] Change method name --- osu.Game/Screens/Edit/Editor.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game/Screens/Edit/Editor.cs b/osu.Game/Screens/Edit/Editor.cs index 69fbf7d387..0a9f7672d3 100644 --- a/osu.Game/Screens/Edit/Editor.cs +++ b/osu.Game/Screens/Edit/Editor.cs @@ -168,7 +168,7 @@ namespace osu.Game.Screens.Edit menuBar.Mode.ValueChanged += onModeChanged; - host.Exiting += onQuittingGame; + host.Exiting += onExitingGame; bottomBackground.Colour = colours.Gray2; } @@ -256,7 +256,7 @@ namespace osu.Game.Screens.Edit } } - host.Exiting -= onQuittingGame; + host.Exiting -= onExitingGame; return base.OnExiting(next); } @@ -295,6 +295,6 @@ namespace osu.Game.Screens.Edit clock.SeekForward(!clock.IsRunning, amount); } - private bool onQuittingGame() => isExitingGame = true; + private bool onExitingGame() => isExitingGame = true; } } From 188c80374e2401032d9522a0a1f596882228be1c Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Sun, 7 Jul 2019 18:14:23 +0300 Subject: [PATCH 201/267] Add sorting by BPM --- osu.Game/Beatmaps/BeatmapManager.cs | 6 +++++- osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 7ef50da7d3..c2d8e06d53 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -271,7 +271,11 @@ namespace osu.Game.Beatmaps OnlineBeatmapSetID = beatmap.BeatmapInfo.BeatmapSet?.OnlineBeatmapSetID, Beatmaps = new List(), Metadata = beatmap.Metadata, - DateAdded = DateTimeOffset.UtcNow + DateAdded = DateTimeOffset.UtcNow, + OnlineInfo = new BeatmapSetOnlineInfo + { + BPM = beatmap.ControlPointInfo.BPMMode, + } }; } diff --git a/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs b/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs index f1951e27ab..c51638277d 100644 --- a/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs +++ b/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs @@ -48,6 +48,9 @@ namespace osu.Game.Screens.Select.Carousel case SortMode.DateAdded: return otherSet.BeatmapSet.DateAdded.CompareTo(BeatmapSet.DateAdded); + case SortMode.BPM: + return BeatmapSet.OnlineInfo.BPM.CompareTo(otherSet.BeatmapSet.OnlineInfo.BPM); + case SortMode.Difficulty: return BeatmapSet.MaxStarDifficulty.CompareTo(otherSet.BeatmapSet.MaxStarDifficulty); } From 65c8249c94212dacfff06683b0156e2a2eea0fb7 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Sun, 7 Jul 2019 18:25:52 +0300 Subject: [PATCH 202/267] Add beatmap extension for calculating length --- osu.Game/Beatmaps/Beatmap.cs | 12 ++++++++++++ osu.Game/Screens/Select/BeatmapInfoWedge.cs | 5 +---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/osu.Game/Beatmaps/Beatmap.cs b/osu.Game/Beatmaps/Beatmap.cs index 4ebeee40bf..7fca13a1e2 100644 --- a/osu.Game/Beatmaps/Beatmap.cs +++ b/osu.Game/Beatmaps/Beatmap.cs @@ -8,6 +8,7 @@ using System.Linq; using osu.Game.Beatmaps.ControlPoints; using Newtonsoft.Json; using osu.Game.IO.Serialization.Converters; +using osu.Game.Rulesets.Objects.Types; namespace osu.Game.Beatmaps { @@ -61,4 +62,15 @@ namespace osu.Game.Beatmaps { public new Beatmap Clone() => (Beatmap)base.Clone(); } + + public static class BeatmapExtensions + { + public static double CalculateLength(this IBeatmap b) + { + HitObject lastObject = b.HitObjects.LastOrDefault(); + var endTime = (lastObject as IHasEndTime)?.EndTime ?? lastObject?.StartTime ?? 0; + + return endTime - b.HitObjects.FirstOrDefault()?.StartTime ?? 0; + } + } } diff --git a/osu.Game/Screens/Select/BeatmapInfoWedge.cs b/osu.Game/Screens/Select/BeatmapInfoWedge.cs index fa9ffd0706..e0521307fc 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedge.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedge.cs @@ -289,14 +289,11 @@ namespace osu.Game.Screens.Select if (b?.HitObjects?.Any() == true) { - HitObject lastObject = b.HitObjects.LastOrDefault(); - double endTime = (lastObject as IHasEndTime)?.EndTime ?? lastObject?.StartTime ?? 0; - labels.Add(new InfoLabel(new BeatmapStatistic { Name = "Length", Icon = FontAwesome.Regular.Clock, - Content = TimeSpan.FromMilliseconds(endTime - b.HitObjects.First().StartTime).ToString(@"m\:ss"), + Content = TimeSpan.FromMilliseconds(b.CalculateLength()).ToString(@"m\:ss"), })); labels.Add(new InfoLabel(new BeatmapStatistic From b4ef64fa61a56cc02f09294ab8442fe5739da944 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Sun, 7 Jul 2019 18:26:56 +0300 Subject: [PATCH 203/267] Add sorting by Length --- osu.Game/Beatmaps/BeatmapManager.cs | 5 +++++ osu.Game/Beatmaps/BeatmapSetInfo.cs | 2 ++ osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs | 7 +++++++ osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs | 3 +++ 4 files changed, 17 insertions(+) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index c2d8e06d53..b4c211ad53 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -307,6 +307,11 @@ namespace osu.Game.Beatmaps // TODO: this should be done in a better place once we actually need to dynamically update it. beatmap.BeatmapInfo.StarDifficulty = ruleset?.CreateInstance().CreateDifficultyCalculator(new DummyConversionBeatmap(beatmap)).Calculate().StarRating ?? 0; + beatmap.BeatmapInfo.OnlineInfo = new BeatmapOnlineInfo + { + Length = beatmap.CalculateLength(), + }; + beatmapInfos.Add(beatmap.BeatmapInfo); } } diff --git a/osu.Game/Beatmaps/BeatmapSetInfo.cs b/osu.Game/Beatmaps/BeatmapSetInfo.cs index 524ed0ed56..cdf8ddb5a1 100644 --- a/osu.Game/Beatmaps/BeatmapSetInfo.cs +++ b/osu.Game/Beatmaps/BeatmapSetInfo.cs @@ -37,6 +37,8 @@ namespace osu.Game.Beatmaps public double MaxStarDifficulty => Beatmaps?.Max(b => b.StarDifficulty) ?? 0; + public double MaxLength => Beatmaps?.Max(b => b.OnlineInfo.Length) ?? 0; + [NotMapped] public bool DeletePending { get; set; } diff --git a/osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs b/osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs index 712ab7b571..fa24a64d51 100644 --- a/osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs +++ b/osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs @@ -47,6 +47,13 @@ namespace osu.Game.Screens.Select.Carousel if (ruleset != 0) return ruleset; return Beatmap.StarDifficulty.CompareTo(otherBeatmap.Beatmap.StarDifficulty); + + case SortMode.Length: + // Length comparing must be in seconds + if (TimeSpan.FromMilliseconds(Beatmap.OnlineInfo.Length).Seconds != TimeSpan.FromMilliseconds(otherBeatmap.Beatmap.OnlineInfo.Length).Seconds) + return Beatmap.OnlineInfo.Length.CompareTo(otherBeatmap.Beatmap.OnlineInfo.Length); + + goto case SortMode.Difficulty; } } diff --git a/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs b/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs index c51638277d..7934cf388f 100644 --- a/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs +++ b/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs @@ -51,6 +51,9 @@ namespace osu.Game.Screens.Select.Carousel case SortMode.BPM: return BeatmapSet.OnlineInfo.BPM.CompareTo(otherSet.BeatmapSet.OnlineInfo.BPM); + case SortMode.Length: + return BeatmapSet.MaxLength.CompareTo(otherSet.BeatmapSet.MaxLength); + case SortMode.Difficulty: return BeatmapSet.MaxStarDifficulty.CompareTo(otherSet.BeatmapSet.MaxStarDifficulty); } From 31e1d204d4d1d63debe92159443e09db9ddb1cd1 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Sun, 7 Jul 2019 18:27:12 +0300 Subject: [PATCH 204/267] Add test for sorting by BPM and Length --- .../SongSelect/TestScenePlaySongSelect.cs | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs b/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs index 962e0fb362..04c75d70e3 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs @@ -133,6 +133,9 @@ namespace osu.Game.Tests.Visual.SongSelect AddStep(@"Sort by Artist", delegate { songSelect.FilterControl.Sort = SortMode.Artist; }); AddStep(@"Sort by Title", delegate { songSelect.FilterControl.Sort = SortMode.Title; }); AddStep(@"Sort by Author", delegate { songSelect.FilterControl.Sort = SortMode.Author; }); + AddStep(@"Sort by DateAdded", delegate { songSelect.FilterControl.Sort = SortMode.DateAdded; }); + AddStep(@"Sort by BPM", delegate { songSelect.FilterControl.Sort = SortMode.BPM; }); + AddStep(@"Sort by Length", delegate { songSelect.FilterControl.Sort = SortMode.Length; }); AddStep(@"Sort by Difficulty", delegate { songSelect.FilterControl.Sort = SortMode.Difficulty; }); } @@ -264,20 +267,26 @@ namespace osu.Game.Tests.Visual.SongSelect for (int i = 0; i < 6; i++) { int beatmapId = setId * 10 + i; + int length = RNG.Next(30000, 200000); beatmaps.Add(new BeatmapInfo { Ruleset = getRuleset(), OnlineBeatmapID = beatmapId, Path = "normal.osu", - Version = $"{beatmapId}", + Version = $"{beatmapId} (length {TimeSpan.FromMilliseconds(length):m\\:ss})", BaseDifficulty = new BeatmapDifficulty { OverallDifficulty = 3.5f, + }, + OnlineInfo = new BeatmapOnlineInfo + { + Length = length, } }); } + double bpm = RNG.NextSingle(80, 200); return new BeatmapSetInfo { OnlineBeatmapSetID = setId, @@ -286,10 +295,15 @@ namespace osu.Game.Tests.Visual.SongSelect { // Create random metadata, then we can check if sorting works based on these Artist = "Some Artist " + RNG.Next(0, 9), - Title = $"Some Song (set id {setId})", + Title = $"Some Song (set id {setId}, bpm {bpm:0.#})", AuthorString = "Some Guy " + RNG.Next(0, 9), }, - Beatmaps = beatmaps + Beatmaps = beatmaps, + DateAdded = DateTimeOffset.UtcNow, + OnlineInfo = new BeatmapSetOnlineInfo + { + BPM = bpm, + } }; } } From 28cc797fb61ee60fa82193982e84f2dc86c2d48f Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Sun, 7 Jul 2019 18:29:25 +0300 Subject: [PATCH 205/267] Add migrations --- ...7134040_AddBPMAndLengthSorting.Designer.cs | 500 ++++++++++++++++++ .../20190707134040_AddBPMAndLengthSorting.cs | 17 + 2 files changed, 517 insertions(+) create mode 100644 osu.Game/Migrations/20190707134040_AddBPMAndLengthSorting.Designer.cs create mode 100644 osu.Game/Migrations/20190707134040_AddBPMAndLengthSorting.cs diff --git a/osu.Game/Migrations/20190707134040_AddBPMAndLengthSorting.Designer.cs b/osu.Game/Migrations/20190707134040_AddBPMAndLengthSorting.Designer.cs new file mode 100644 index 0000000000..7038fcba6e --- /dev/null +++ b/osu.Game/Migrations/20190707134040_AddBPMAndLengthSorting.Designer.cs @@ -0,0 +1,500 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using osu.Game.Database; + +namespace osu.Game.Migrations +{ + [DbContext(typeof(OsuDbContext))] + [Migration("20190707134040_AddBPMAndLengthSorting")] + partial class AddBPMAndLengthSorting + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.4-servicing-10062"); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapDifficulty", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("ApproachRate"); + + b.Property("CircleSize"); + + b.Property("DrainRate"); + + b.Property("OverallDifficulty"); + + b.Property("SliderMultiplier"); + + b.Property("SliderTickRate"); + + b.HasKey("ID"); + + b.ToTable("BeatmapDifficulty"); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("AudioLeadIn"); + + b.Property("BaseDifficultyID"); + + b.Property("BeatDivisor"); + + b.Property("BeatmapSetInfoID"); + + b.Property("Countdown"); + + b.Property("DistanceSpacing"); + + b.Property("GridSize"); + + b.Property("Hash"); + + b.Property("Hidden"); + + b.Property("LetterboxInBreaks"); + + b.Property("MD5Hash"); + + b.Property("MetadataID"); + + b.Property("OnlineBeatmapID"); + + b.Property("Path"); + + b.Property("RulesetID"); + + b.Property("SpecialStyle"); + + b.Property("StackLeniency"); + + b.Property("StarDifficulty"); + + b.Property("Status"); + + b.Property("StoredBookmarks"); + + b.Property("TimelineZoom"); + + b.Property("Version"); + + b.Property("WidescreenStoryboard"); + + b.HasKey("ID"); + + b.HasIndex("BaseDifficultyID"); + + b.HasIndex("BeatmapSetInfoID"); + + b.HasIndex("Hash"); + + b.HasIndex("MD5Hash"); + + b.HasIndex("MetadataID"); + + b.HasIndex("OnlineBeatmapID") + .IsUnique(); + + b.HasIndex("RulesetID"); + + b.ToTable("BeatmapInfo"); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapMetadata", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("Artist"); + + b.Property("ArtistUnicode"); + + b.Property("AudioFile"); + + b.Property("AuthorString") + .HasColumnName("Author"); + + b.Property("BackgroundFile"); + + b.Property("PreviewTime"); + + b.Property("Source"); + + b.Property("Tags"); + + b.Property("Title"); + + b.Property("TitleUnicode"); + + b.HasKey("ID"); + + b.ToTable("BeatmapMetadata"); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapSetFileInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("BeatmapSetInfoID"); + + b.Property("FileInfoID"); + + b.Property("Filename") + .IsRequired(); + + b.HasKey("ID"); + + b.HasIndex("BeatmapSetInfoID"); + + b.HasIndex("FileInfoID"); + + b.ToTable("BeatmapSetFileInfo"); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapSetInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("DateAdded"); + + b.Property("DeletePending"); + + b.Property("Hash"); + + b.Property("MetadataID"); + + b.Property("OnlineBeatmapSetID"); + + b.Property("Protected"); + + b.Property("Status"); + + b.HasKey("ID"); + + b.HasIndex("DeletePending"); + + b.HasIndex("Hash") + .IsUnique(); + + b.HasIndex("MetadataID"); + + b.HasIndex("OnlineBeatmapSetID") + .IsUnique(); + + b.ToTable("BeatmapSetInfo"); + }); + + modelBuilder.Entity("osu.Game.Configuration.DatabasedSetting", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("Key") + .HasColumnName("Key"); + + b.Property("RulesetID"); + + b.Property("SkinInfoID"); + + b.Property("StringValue") + .HasColumnName("Value"); + + b.Property("Variant"); + + b.HasKey("ID"); + + b.HasIndex("SkinInfoID"); + + b.HasIndex("RulesetID", "Variant"); + + b.ToTable("Settings"); + }); + + modelBuilder.Entity("osu.Game.IO.FileInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("Hash"); + + b.Property("ReferenceCount"); + + b.HasKey("ID"); + + b.HasIndex("Hash") + .IsUnique(); + + b.HasIndex("ReferenceCount"); + + b.ToTable("FileInfo"); + }); + + modelBuilder.Entity("osu.Game.Input.Bindings.DatabasedKeyBinding", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("IntAction") + .HasColumnName("Action"); + + b.Property("KeysString") + .HasColumnName("Keys"); + + b.Property("RulesetID"); + + b.Property("Variant"); + + b.HasKey("ID"); + + b.HasIndex("IntAction"); + + b.HasIndex("RulesetID", "Variant"); + + b.ToTable("KeyBinding"); + }); + + modelBuilder.Entity("osu.Game.Rulesets.RulesetInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("Available"); + + b.Property("InstantiationInfo"); + + b.Property("Name"); + + b.Property("ShortName"); + + b.HasKey("ID"); + + b.HasIndex("Available"); + + b.HasIndex("ShortName") + .IsUnique(); + + b.ToTable("RulesetInfo"); + }); + + modelBuilder.Entity("osu.Game.Scoring.ScoreFileInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("FileInfoID"); + + b.Property("Filename") + .IsRequired(); + + b.Property("ScoreInfoID"); + + b.HasKey("ID"); + + b.HasIndex("FileInfoID"); + + b.HasIndex("ScoreInfoID"); + + b.ToTable("ScoreFileInfo"); + }); + + modelBuilder.Entity("osu.Game.Scoring.ScoreInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("Accuracy") + .HasColumnType("DECIMAL(1,4)"); + + b.Property("BeatmapInfoID"); + + b.Property("Combo"); + + b.Property("Date"); + + b.Property("DeletePending"); + + b.Property("Hash"); + + b.Property("MaxCombo"); + + b.Property("ModsJson") + .HasColumnName("Mods"); + + b.Property("OnlineScoreID"); + + b.Property("PP"); + + b.Property("Rank"); + + b.Property("RulesetID"); + + b.Property("StatisticsJson") + .HasColumnName("Statistics"); + + b.Property("TotalScore"); + + b.Property("UserID") + .HasColumnName("UserID"); + + b.Property("UserString") + .HasColumnName("User"); + + b.HasKey("ID"); + + b.HasIndex("BeatmapInfoID"); + + b.HasIndex("OnlineScoreID") + .IsUnique(); + + b.HasIndex("RulesetID"); + + b.ToTable("ScoreInfo"); + }); + + modelBuilder.Entity("osu.Game.Skinning.SkinFileInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("FileInfoID"); + + b.Property("Filename") + .IsRequired(); + + b.Property("SkinInfoID"); + + b.HasKey("ID"); + + b.HasIndex("FileInfoID"); + + b.HasIndex("SkinInfoID"); + + b.ToTable("SkinFileInfo"); + }); + + modelBuilder.Entity("osu.Game.Skinning.SkinInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("Creator"); + + b.Property("DeletePending"); + + b.Property("Hash"); + + b.Property("Name"); + + b.HasKey("ID"); + + b.HasIndex("DeletePending"); + + b.HasIndex("Hash") + .IsUnique(); + + b.ToTable("SkinInfo"); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapInfo", b => + { + b.HasOne("osu.Game.Beatmaps.BeatmapDifficulty", "BaseDifficulty") + .WithMany() + .HasForeignKey("BaseDifficultyID") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("osu.Game.Beatmaps.BeatmapSetInfo", "BeatmapSet") + .WithMany("Beatmaps") + .HasForeignKey("BeatmapSetInfoID") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("osu.Game.Beatmaps.BeatmapMetadata", "Metadata") + .WithMany("Beatmaps") + .HasForeignKey("MetadataID"); + + b.HasOne("osu.Game.Rulesets.RulesetInfo", "Ruleset") + .WithMany() + .HasForeignKey("RulesetID") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapSetFileInfo", b => + { + b.HasOne("osu.Game.Beatmaps.BeatmapSetInfo") + .WithMany("Files") + .HasForeignKey("BeatmapSetInfoID") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("osu.Game.IO.FileInfo", "FileInfo") + .WithMany() + .HasForeignKey("FileInfoID") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapSetInfo", b => + { + b.HasOne("osu.Game.Beatmaps.BeatmapMetadata", "Metadata") + .WithMany("BeatmapSets") + .HasForeignKey("MetadataID"); + }); + + modelBuilder.Entity("osu.Game.Configuration.DatabasedSetting", b => + { + b.HasOne("osu.Game.Skinning.SkinInfo") + .WithMany("Settings") + .HasForeignKey("SkinInfoID"); + }); + + modelBuilder.Entity("osu.Game.Scoring.ScoreFileInfo", b => + { + b.HasOne("osu.Game.IO.FileInfo", "FileInfo") + .WithMany() + .HasForeignKey("FileInfoID") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("osu.Game.Scoring.ScoreInfo") + .WithMany("Files") + .HasForeignKey("ScoreInfoID"); + }); + + modelBuilder.Entity("osu.Game.Scoring.ScoreInfo", b => + { + b.HasOne("osu.Game.Beatmaps.BeatmapInfo", "Beatmap") + .WithMany("Scores") + .HasForeignKey("BeatmapInfoID") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("osu.Game.Rulesets.RulesetInfo", "Ruleset") + .WithMany() + .HasForeignKey("RulesetID") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("osu.Game.Skinning.SkinFileInfo", b => + { + b.HasOne("osu.Game.IO.FileInfo", "FileInfo") + .WithMany() + .HasForeignKey("FileInfoID") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("osu.Game.Skinning.SkinInfo") + .WithMany("Files") + .HasForeignKey("SkinInfoID") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/osu.Game/Migrations/20190707134040_AddBPMAndLengthSorting.cs b/osu.Game/Migrations/20190707134040_AddBPMAndLengthSorting.cs new file mode 100644 index 0000000000..98a94b1c4e --- /dev/null +++ b/osu.Game/Migrations/20190707134040_AddBPMAndLengthSorting.cs @@ -0,0 +1,17 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace osu.Game.Migrations +{ + public partial class AddBPMAndLengthSorting : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} From 6ee10640e31f5343fc3eeba33913ab43a1b96591 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Sun, 7 Jul 2019 19:26:41 +0300 Subject: [PATCH 206/267] Remove unnecessary migration + Fix CI issues --- ...7134040_AddBPMAndLengthSorting.Designer.cs | 500 ------------------ .../20190707134040_AddBPMAndLengthSorting.cs | 17 - osu.Game/Screens/Select/BeatmapInfoWedge.cs | 2 - 3 files changed, 519 deletions(-) delete mode 100644 osu.Game/Migrations/20190707134040_AddBPMAndLengthSorting.Designer.cs delete mode 100644 osu.Game/Migrations/20190707134040_AddBPMAndLengthSorting.cs diff --git a/osu.Game/Migrations/20190707134040_AddBPMAndLengthSorting.Designer.cs b/osu.Game/Migrations/20190707134040_AddBPMAndLengthSorting.Designer.cs deleted file mode 100644 index 7038fcba6e..0000000000 --- a/osu.Game/Migrations/20190707134040_AddBPMAndLengthSorting.Designer.cs +++ /dev/null @@ -1,500 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using osu.Game.Database; - -namespace osu.Game.Migrations -{ - [DbContext(typeof(OsuDbContext))] - [Migration("20190707134040_AddBPMAndLengthSorting")] - partial class AddBPMAndLengthSorting - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "2.2.4-servicing-10062"); - - modelBuilder.Entity("osu.Game.Beatmaps.BeatmapDifficulty", b => - { - b.Property("ID") - .ValueGeneratedOnAdd(); - - b.Property("ApproachRate"); - - b.Property("CircleSize"); - - b.Property("DrainRate"); - - b.Property("OverallDifficulty"); - - b.Property("SliderMultiplier"); - - b.Property("SliderTickRate"); - - b.HasKey("ID"); - - b.ToTable("BeatmapDifficulty"); - }); - - modelBuilder.Entity("osu.Game.Beatmaps.BeatmapInfo", b => - { - b.Property("ID") - .ValueGeneratedOnAdd(); - - b.Property("AudioLeadIn"); - - b.Property("BaseDifficultyID"); - - b.Property("BeatDivisor"); - - b.Property("BeatmapSetInfoID"); - - b.Property("Countdown"); - - b.Property("DistanceSpacing"); - - b.Property("GridSize"); - - b.Property("Hash"); - - b.Property("Hidden"); - - b.Property("LetterboxInBreaks"); - - b.Property("MD5Hash"); - - b.Property("MetadataID"); - - b.Property("OnlineBeatmapID"); - - b.Property("Path"); - - b.Property("RulesetID"); - - b.Property("SpecialStyle"); - - b.Property("StackLeniency"); - - b.Property("StarDifficulty"); - - b.Property("Status"); - - b.Property("StoredBookmarks"); - - b.Property("TimelineZoom"); - - b.Property("Version"); - - b.Property("WidescreenStoryboard"); - - b.HasKey("ID"); - - b.HasIndex("BaseDifficultyID"); - - b.HasIndex("BeatmapSetInfoID"); - - b.HasIndex("Hash"); - - b.HasIndex("MD5Hash"); - - b.HasIndex("MetadataID"); - - b.HasIndex("OnlineBeatmapID") - .IsUnique(); - - b.HasIndex("RulesetID"); - - b.ToTable("BeatmapInfo"); - }); - - modelBuilder.Entity("osu.Game.Beatmaps.BeatmapMetadata", b => - { - b.Property("ID") - .ValueGeneratedOnAdd(); - - b.Property("Artist"); - - b.Property("ArtistUnicode"); - - b.Property("AudioFile"); - - b.Property("AuthorString") - .HasColumnName("Author"); - - b.Property("BackgroundFile"); - - b.Property("PreviewTime"); - - b.Property("Source"); - - b.Property("Tags"); - - b.Property("Title"); - - b.Property("TitleUnicode"); - - b.HasKey("ID"); - - b.ToTable("BeatmapMetadata"); - }); - - modelBuilder.Entity("osu.Game.Beatmaps.BeatmapSetFileInfo", b => - { - b.Property("ID") - .ValueGeneratedOnAdd(); - - b.Property("BeatmapSetInfoID"); - - b.Property("FileInfoID"); - - b.Property("Filename") - .IsRequired(); - - b.HasKey("ID"); - - b.HasIndex("BeatmapSetInfoID"); - - b.HasIndex("FileInfoID"); - - b.ToTable("BeatmapSetFileInfo"); - }); - - modelBuilder.Entity("osu.Game.Beatmaps.BeatmapSetInfo", b => - { - b.Property("ID") - .ValueGeneratedOnAdd(); - - b.Property("DateAdded"); - - b.Property("DeletePending"); - - b.Property("Hash"); - - b.Property("MetadataID"); - - b.Property("OnlineBeatmapSetID"); - - b.Property("Protected"); - - b.Property("Status"); - - b.HasKey("ID"); - - b.HasIndex("DeletePending"); - - b.HasIndex("Hash") - .IsUnique(); - - b.HasIndex("MetadataID"); - - b.HasIndex("OnlineBeatmapSetID") - .IsUnique(); - - b.ToTable("BeatmapSetInfo"); - }); - - modelBuilder.Entity("osu.Game.Configuration.DatabasedSetting", b => - { - b.Property("ID") - .ValueGeneratedOnAdd(); - - b.Property("Key") - .HasColumnName("Key"); - - b.Property("RulesetID"); - - b.Property("SkinInfoID"); - - b.Property("StringValue") - .HasColumnName("Value"); - - b.Property("Variant"); - - b.HasKey("ID"); - - b.HasIndex("SkinInfoID"); - - b.HasIndex("RulesetID", "Variant"); - - b.ToTable("Settings"); - }); - - modelBuilder.Entity("osu.Game.IO.FileInfo", b => - { - b.Property("ID") - .ValueGeneratedOnAdd(); - - b.Property("Hash"); - - b.Property("ReferenceCount"); - - b.HasKey("ID"); - - b.HasIndex("Hash") - .IsUnique(); - - b.HasIndex("ReferenceCount"); - - b.ToTable("FileInfo"); - }); - - modelBuilder.Entity("osu.Game.Input.Bindings.DatabasedKeyBinding", b => - { - b.Property("ID") - .ValueGeneratedOnAdd(); - - b.Property("IntAction") - .HasColumnName("Action"); - - b.Property("KeysString") - .HasColumnName("Keys"); - - b.Property("RulesetID"); - - b.Property("Variant"); - - b.HasKey("ID"); - - b.HasIndex("IntAction"); - - b.HasIndex("RulesetID", "Variant"); - - b.ToTable("KeyBinding"); - }); - - modelBuilder.Entity("osu.Game.Rulesets.RulesetInfo", b => - { - b.Property("ID") - .ValueGeneratedOnAdd(); - - b.Property("Available"); - - b.Property("InstantiationInfo"); - - b.Property("Name"); - - b.Property("ShortName"); - - b.HasKey("ID"); - - b.HasIndex("Available"); - - b.HasIndex("ShortName") - .IsUnique(); - - b.ToTable("RulesetInfo"); - }); - - modelBuilder.Entity("osu.Game.Scoring.ScoreFileInfo", b => - { - b.Property("ID") - .ValueGeneratedOnAdd(); - - b.Property("FileInfoID"); - - b.Property("Filename") - .IsRequired(); - - b.Property("ScoreInfoID"); - - b.HasKey("ID"); - - b.HasIndex("FileInfoID"); - - b.HasIndex("ScoreInfoID"); - - b.ToTable("ScoreFileInfo"); - }); - - modelBuilder.Entity("osu.Game.Scoring.ScoreInfo", b => - { - b.Property("ID") - .ValueGeneratedOnAdd(); - - b.Property("Accuracy") - .HasColumnType("DECIMAL(1,4)"); - - b.Property("BeatmapInfoID"); - - b.Property("Combo"); - - b.Property("Date"); - - b.Property("DeletePending"); - - b.Property("Hash"); - - b.Property("MaxCombo"); - - b.Property("ModsJson") - .HasColumnName("Mods"); - - b.Property("OnlineScoreID"); - - b.Property("PP"); - - b.Property("Rank"); - - b.Property("RulesetID"); - - b.Property("StatisticsJson") - .HasColumnName("Statistics"); - - b.Property("TotalScore"); - - b.Property("UserID") - .HasColumnName("UserID"); - - b.Property("UserString") - .HasColumnName("User"); - - b.HasKey("ID"); - - b.HasIndex("BeatmapInfoID"); - - b.HasIndex("OnlineScoreID") - .IsUnique(); - - b.HasIndex("RulesetID"); - - b.ToTable("ScoreInfo"); - }); - - modelBuilder.Entity("osu.Game.Skinning.SkinFileInfo", b => - { - b.Property("ID") - .ValueGeneratedOnAdd(); - - b.Property("FileInfoID"); - - b.Property("Filename") - .IsRequired(); - - b.Property("SkinInfoID"); - - b.HasKey("ID"); - - b.HasIndex("FileInfoID"); - - b.HasIndex("SkinInfoID"); - - b.ToTable("SkinFileInfo"); - }); - - modelBuilder.Entity("osu.Game.Skinning.SkinInfo", b => - { - b.Property("ID") - .ValueGeneratedOnAdd(); - - b.Property("Creator"); - - b.Property("DeletePending"); - - b.Property("Hash"); - - b.Property("Name"); - - b.HasKey("ID"); - - b.HasIndex("DeletePending"); - - b.HasIndex("Hash") - .IsUnique(); - - b.ToTable("SkinInfo"); - }); - - modelBuilder.Entity("osu.Game.Beatmaps.BeatmapInfo", b => - { - b.HasOne("osu.Game.Beatmaps.BeatmapDifficulty", "BaseDifficulty") - .WithMany() - .HasForeignKey("BaseDifficultyID") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("osu.Game.Beatmaps.BeatmapSetInfo", "BeatmapSet") - .WithMany("Beatmaps") - .HasForeignKey("BeatmapSetInfoID") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("osu.Game.Beatmaps.BeatmapMetadata", "Metadata") - .WithMany("Beatmaps") - .HasForeignKey("MetadataID"); - - b.HasOne("osu.Game.Rulesets.RulesetInfo", "Ruleset") - .WithMany() - .HasForeignKey("RulesetID") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("osu.Game.Beatmaps.BeatmapSetFileInfo", b => - { - b.HasOne("osu.Game.Beatmaps.BeatmapSetInfo") - .WithMany("Files") - .HasForeignKey("BeatmapSetInfoID") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("osu.Game.IO.FileInfo", "FileInfo") - .WithMany() - .HasForeignKey("FileInfoID") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("osu.Game.Beatmaps.BeatmapSetInfo", b => - { - b.HasOne("osu.Game.Beatmaps.BeatmapMetadata", "Metadata") - .WithMany("BeatmapSets") - .HasForeignKey("MetadataID"); - }); - - modelBuilder.Entity("osu.Game.Configuration.DatabasedSetting", b => - { - b.HasOne("osu.Game.Skinning.SkinInfo") - .WithMany("Settings") - .HasForeignKey("SkinInfoID"); - }); - - modelBuilder.Entity("osu.Game.Scoring.ScoreFileInfo", b => - { - b.HasOne("osu.Game.IO.FileInfo", "FileInfo") - .WithMany() - .HasForeignKey("FileInfoID") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("osu.Game.Scoring.ScoreInfo") - .WithMany("Files") - .HasForeignKey("ScoreInfoID"); - }); - - modelBuilder.Entity("osu.Game.Scoring.ScoreInfo", b => - { - b.HasOne("osu.Game.Beatmaps.BeatmapInfo", "Beatmap") - .WithMany("Scores") - .HasForeignKey("BeatmapInfoID") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("osu.Game.Rulesets.RulesetInfo", "Ruleset") - .WithMany() - .HasForeignKey("RulesetID") - .OnDelete(DeleteBehavior.Cascade); - }); - - modelBuilder.Entity("osu.Game.Skinning.SkinFileInfo", b => - { - b.HasOne("osu.Game.IO.FileInfo", "FileInfo") - .WithMany() - .HasForeignKey("FileInfoID") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("osu.Game.Skinning.SkinInfo") - .WithMany("Files") - .HasForeignKey("SkinInfoID") - .OnDelete(DeleteBehavior.Cascade); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/osu.Game/Migrations/20190707134040_AddBPMAndLengthSorting.cs b/osu.Game/Migrations/20190707134040_AddBPMAndLengthSorting.cs deleted file mode 100644 index 98a94b1c4e..0000000000 --- a/osu.Game/Migrations/20190707134040_AddBPMAndLengthSorting.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -namespace osu.Game.Migrations -{ - public partial class AddBPMAndLengthSorting : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - - } - } -} diff --git a/osu.Game/Screens/Select/BeatmapInfoWedge.cs b/osu.Game/Screens/Select/BeatmapInfoWedge.cs index e0521307fc..26a83f930c 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedge.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedge.cs @@ -18,8 +18,6 @@ using osu.Game.Beatmaps; using osu.Game.Beatmaps.Drawables; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; -using osu.Game.Rulesets.Objects; -using osu.Game.Rulesets.Objects.Types; using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Cursor; using osu.Framework.Graphics.Effects; From 3ea9629daf6cdbd22658ec4ef5f457d8f86f4d3d Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Sun, 7 Jul 2019 20:11:44 +0300 Subject: [PATCH 207/267] Move BPM out of OnlineInfo --- osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs | 4 ++-- osu.Game.Tests/Visual/Online/TestSceneDirectPanel.cs | 2 +- osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs | 5 +---- osu.Game.Tournament/Components/SongBar.cs | 2 +- osu.Game/Beatmaps/BeatmapManager.cs | 5 +---- osu.Game/Beatmaps/BeatmapSetInfo.cs | 5 +++++ osu.Game/Beatmaps/BeatmapSetOnlineInfo.cs | 5 ----- osu.Game/Online/API/Requests/Responses/APIBeatmapSet.cs | 2 +- osu.Game/Overlays/BeatmapSet/BasicStats.cs | 2 +- osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs | 2 +- 10 files changed, 14 insertions(+), 20 deletions(-) diff --git a/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs b/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs index a9c44c9020..75e8c88f9d 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs @@ -96,11 +96,11 @@ namespace osu.Game.Tests.Visual.Online FavouriteCount = 456, Submitted = DateTime.Now, Ranked = DateTime.Now, - BPM = 111, HasVideo = true, HasStoryboard = true, Covers = new BeatmapSetOnlineCovers(), }, + BPM = 111, Metrics = new BeatmapSetMetrics { Ratings = Enumerable.Range(0, 11).ToArray() }, Beatmaps = new List { @@ -169,11 +169,11 @@ namespace osu.Game.Tests.Visual.Online FavouriteCount = 456, Submitted = DateTime.Now, Ranked = DateTime.Now, - BPM = 111, HasVideo = true, HasStoryboard = true, Covers = new BeatmapSetOnlineCovers(), }, + BPM = 111, Metrics = new BeatmapSetMetrics { Ratings = Enumerable.Range(0, 11).ToArray() }, Beatmaps = new List { diff --git a/osu.Game.Tests/Visual/Online/TestSceneDirectPanel.cs b/osu.Game.Tests/Visual/Online/TestSceneDirectPanel.cs index 53dbaeddda..5f80223541 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneDirectPanel.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneDirectPanel.cs @@ -47,11 +47,11 @@ namespace osu.Game.Tests.Visual.Online Preview = @"https://b.ppy.sh/preview/12345.mp3", PlayCount = 123, FavouriteCount = 456, - BPM = 111, HasVideo = true, HasStoryboard = true, Covers = new BeatmapSetOnlineCovers(), }, + BPM = 111, Beatmaps = new List { new BeatmapInfo diff --git a/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs b/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs index 04c75d70e3..5813e9e6d5 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs @@ -300,10 +300,7 @@ namespace osu.Game.Tests.Visual.SongSelect }, Beatmaps = beatmaps, DateAdded = DateTimeOffset.UtcNow, - OnlineInfo = new BeatmapSetOnlineInfo - { - BPM = bpm, - } + BPM = bpm, }; } } diff --git a/osu.Game.Tournament/Components/SongBar.cs b/osu.Game.Tournament/Components/SongBar.cs index c07882ddd0..06541bc264 100644 --- a/osu.Game.Tournament/Components/SongBar.cs +++ b/osu.Game.Tournament/Components/SongBar.cs @@ -158,7 +158,7 @@ namespace osu.Game.Tournament.Components return; } - var bpm = beatmap.BeatmapSet.OnlineInfo.BPM; + var bpm = beatmap.BeatmapSet.BPM; var length = beatmap.OnlineInfo.Length; string hardRockExtra = ""; string srExtra = ""; diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index b4c211ad53..f94c461c9a 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -272,10 +272,7 @@ namespace osu.Game.Beatmaps Beatmaps = new List(), Metadata = beatmap.Metadata, DateAdded = DateTimeOffset.UtcNow, - OnlineInfo = new BeatmapSetOnlineInfo - { - BPM = beatmap.ControlPointInfo.BPMMode, - } + BPM = beatmap.ControlPointInfo.BPMMode, }; } diff --git a/osu.Game/Beatmaps/BeatmapSetInfo.cs b/osu.Game/Beatmaps/BeatmapSetInfo.cs index cdf8ddb5a1..2b4ef961ce 100644 --- a/osu.Game/Beatmaps/BeatmapSetInfo.cs +++ b/osu.Game/Beatmaps/BeatmapSetInfo.cs @@ -35,6 +35,11 @@ namespace osu.Game.Beatmaps [NotMapped] public BeatmapSetMetrics Metrics { get; set; } + /// + /// The beats per minute of this beatmap set's song. + /// + public double BPM { get; set; } + public double MaxStarDifficulty => Beatmaps?.Max(b => b.StarDifficulty) ?? 0; public double MaxLength => Beatmaps?.Max(b => b.OnlineInfo.Length) ?? 0; diff --git a/osu.Game/Beatmaps/BeatmapSetOnlineInfo.cs b/osu.Game/Beatmaps/BeatmapSetOnlineInfo.cs index ea3f0b61b9..903d07bea0 100644 --- a/osu.Game/Beatmaps/BeatmapSetOnlineInfo.cs +++ b/osu.Game/Beatmaps/BeatmapSetOnlineInfo.cs @@ -51,11 +51,6 @@ namespace osu.Game.Beatmaps /// public string Preview { get; set; } - /// - /// The beats per minute of this beatmap set's song. - /// - public double BPM { get; set; } - /// /// The amount of plays this beatmap set has. /// diff --git a/osu.Game/Online/API/Requests/Responses/APIBeatmapSet.cs b/osu.Game/Online/API/Requests/Responses/APIBeatmapSet.cs index 200a705500..50128bde7a 100644 --- a/osu.Game/Online/API/Requests/Responses/APIBeatmapSet.cs +++ b/osu.Game/Online/API/Requests/Responses/APIBeatmapSet.cs @@ -77,13 +77,13 @@ namespace osu.Game.Online.API.Requests.Responses Metadata = this, Status = Status, Metrics = ratings == null ? null : new BeatmapSetMetrics { Ratings = ratings }, + BPM = bpm, OnlineInfo = new BeatmapSetOnlineInfo { Covers = covers, Preview = preview, PlayCount = playCount, FavouriteCount = favouriteCount, - BPM = bpm, Status = Status, HasVideo = hasVideo, HasStoryboard = hasStoryboard, diff --git a/osu.Game/Overlays/BeatmapSet/BasicStats.cs b/osu.Game/Overlays/BeatmapSet/BasicStats.cs index 6a583baf38..651ef30bdc 100644 --- a/osu.Game/Overlays/BeatmapSet/BasicStats.cs +++ b/osu.Game/Overlays/BeatmapSet/BasicStats.cs @@ -50,7 +50,7 @@ namespace osu.Game.Overlays.BeatmapSet private void updateDisplay() { - bpm.Value = BeatmapSet?.OnlineInfo?.BPM.ToString(@"0.##") ?? "-"; + bpm.Value = BeatmapSet?.BPM.ToString(@"0.##") ?? "-"; if (beatmap == null) { diff --git a/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs b/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs index 7934cf388f..6457f78746 100644 --- a/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs +++ b/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs @@ -49,7 +49,7 @@ namespace osu.Game.Screens.Select.Carousel return otherSet.BeatmapSet.DateAdded.CompareTo(BeatmapSet.DateAdded); case SortMode.BPM: - return BeatmapSet.OnlineInfo.BPM.CompareTo(otherSet.BeatmapSet.OnlineInfo.BPM); + return BeatmapSet.BPM.CompareTo(otherSet.BeatmapSet.BPM); case SortMode.Length: return BeatmapSet.MaxLength.CompareTo(otherSet.BeatmapSet.MaxLength); From 729f0901f7bca3595c2834822a440f2f92433910 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Sun, 7 Jul 2019 20:25:36 +0300 Subject: [PATCH 208/267] Move Length out of OnlineInfo --- osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs | 4 ++-- osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs | 5 +---- osu.Game.Tournament/Components/SongBar.cs | 2 +- osu.Game/Beatmaps/BeatmapInfo.cs | 5 +++++ osu.Game/Beatmaps/BeatmapManager.cs | 6 +----- osu.Game/Beatmaps/BeatmapOnlineInfo.cs | 5 ----- osu.Game/Beatmaps/BeatmapSetInfo.cs | 2 +- osu.Game/Online/API/Requests/Responses/APIBeatmap.cs | 2 +- osu.Game/Overlays/BeatmapSet/BasicStats.cs | 2 +- osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs | 4 ++-- 10 files changed, 15 insertions(+), 22 deletions(-) diff --git a/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs b/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs index 75e8c88f9d..02b26acb7c 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs @@ -108,6 +108,7 @@ namespace osu.Game.Tests.Visual.Online { StarDifficulty = 9.99, Version = @"TEST", + Length = 456000, Ruleset = maniaRuleset, BaseDifficulty = new BeatmapDifficulty { @@ -118,7 +119,6 @@ namespace osu.Game.Tests.Visual.Online }, OnlineInfo = new BeatmapOnlineInfo { - Length = 456000, CircleCount = 111, SliderCount = 12, PlayCount = 222, @@ -181,6 +181,7 @@ namespace osu.Game.Tests.Visual.Online { StarDifficulty = 5.67, Version = @"ANOTHER TEST", + Length = 123000, Ruleset = taikoRuleset, BaseDifficulty = new BeatmapDifficulty { @@ -191,7 +192,6 @@ namespace osu.Game.Tests.Visual.Online }, OnlineInfo = new BeatmapOnlineInfo { - Length = 123000, CircleCount = 123, SliderCount = 45, PlayCount = 567, diff --git a/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs b/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs index 5813e9e6d5..0b0f65f572 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs @@ -275,14 +275,11 @@ namespace osu.Game.Tests.Visual.SongSelect OnlineBeatmapID = beatmapId, Path = "normal.osu", Version = $"{beatmapId} (length {TimeSpan.FromMilliseconds(length):m\\:ss})", + Length = length, BaseDifficulty = new BeatmapDifficulty { OverallDifficulty = 3.5f, }, - OnlineInfo = new BeatmapOnlineInfo - { - Length = length, - } }); } diff --git a/osu.Game.Tournament/Components/SongBar.cs b/osu.Game.Tournament/Components/SongBar.cs index 06541bc264..938fbba303 100644 --- a/osu.Game.Tournament/Components/SongBar.cs +++ b/osu.Game.Tournament/Components/SongBar.cs @@ -159,7 +159,7 @@ namespace osu.Game.Tournament.Components } var bpm = beatmap.BeatmapSet.BPM; - var length = beatmap.OnlineInfo.Length; + var length = beatmap.Length; string hardRockExtra = ""; string srExtra = ""; diff --git a/osu.Game/Beatmaps/BeatmapInfo.cs b/osu.Game/Beatmaps/BeatmapInfo.cs index 3c082bb71e..1610e37620 100644 --- a/osu.Game/Beatmaps/BeatmapInfo.cs +++ b/osu.Game/Beatmaps/BeatmapInfo.cs @@ -51,6 +51,11 @@ namespace osu.Game.Beatmaps [NotMapped] public BeatmapOnlineInfo OnlineInfo { get; set; } + /// + /// The length in milliseconds of this beatmap's song. + /// + public double Length { get; set; } + public string Path { get; set; } [JsonProperty("file_sha2")] diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index f94c461c9a..810db1589e 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -303,11 +303,7 @@ namespace osu.Game.Beatmaps beatmap.BeatmapInfo.Ruleset = ruleset; // TODO: this should be done in a better place once we actually need to dynamically update it. beatmap.BeatmapInfo.StarDifficulty = ruleset?.CreateInstance().CreateDifficultyCalculator(new DummyConversionBeatmap(beatmap)).Calculate().StarRating ?? 0; - - beatmap.BeatmapInfo.OnlineInfo = new BeatmapOnlineInfo - { - Length = beatmap.CalculateLength(), - }; + beatmap.BeatmapInfo.Length = beatmap.CalculateLength(); beatmapInfos.Add(beatmap.BeatmapInfo); } diff --git a/osu.Game/Beatmaps/BeatmapOnlineInfo.cs b/osu.Game/Beatmaps/BeatmapOnlineInfo.cs index faae74db88..bfeacd9bfc 100644 --- a/osu.Game/Beatmaps/BeatmapOnlineInfo.cs +++ b/osu.Game/Beatmaps/BeatmapOnlineInfo.cs @@ -8,11 +8,6 @@ namespace osu.Game.Beatmaps /// public class BeatmapOnlineInfo { - /// - /// The length in milliseconds of this beatmap's song. - /// - public double Length { get; set; } - /// /// The amount of circles in this beatmap. /// diff --git a/osu.Game/Beatmaps/BeatmapSetInfo.cs b/osu.Game/Beatmaps/BeatmapSetInfo.cs index 2b4ef961ce..62366cab4e 100644 --- a/osu.Game/Beatmaps/BeatmapSetInfo.cs +++ b/osu.Game/Beatmaps/BeatmapSetInfo.cs @@ -42,7 +42,7 @@ namespace osu.Game.Beatmaps public double MaxStarDifficulty => Beatmaps?.Max(b => b.StarDifficulty) ?? 0; - public double MaxLength => Beatmaps?.Max(b => b.OnlineInfo.Length) ?? 0; + public double MaxLength => Beatmaps?.Max(b => b.Length) ?? 0; [NotMapped] public bool DeletePending { get; set; } diff --git a/osu.Game/Online/API/Requests/Responses/APIBeatmap.cs b/osu.Game/Online/API/Requests/Responses/APIBeatmap.cs index bcbe060f82..ff4d240bf0 100644 --- a/osu.Game/Online/API/Requests/Responses/APIBeatmap.cs +++ b/osu.Game/Online/API/Requests/Responses/APIBeatmap.cs @@ -71,6 +71,7 @@ namespace osu.Game.Online.API.Requests.Responses StarDifficulty = starDifficulty, OnlineBeatmapID = OnlineBeatmapID, Version = version, + Length = length, Status = Status, BeatmapSet = set, Metrics = metrics, @@ -85,7 +86,6 @@ namespace osu.Game.Online.API.Requests.Responses { PlayCount = playCount, PassCount = passCount, - Length = length, CircleCount = circleCount, SliderCount = sliderCount, }, diff --git a/osu.Game/Overlays/BeatmapSet/BasicStats.cs b/osu.Game/Overlays/BeatmapSet/BasicStats.cs index 651ef30bdc..f97212f180 100644 --- a/osu.Game/Overlays/BeatmapSet/BasicStats.cs +++ b/osu.Game/Overlays/BeatmapSet/BasicStats.cs @@ -60,7 +60,7 @@ namespace osu.Game.Overlays.BeatmapSet } else { - length.Value = TimeSpan.FromSeconds(beatmap.OnlineInfo.Length).ToString(@"m\:ss"); + length.Value = TimeSpan.FromSeconds(beatmap.Length).ToString(@"m\:ss"); circleCount.Value = beatmap.OnlineInfo.CircleCount.ToString(); sliderCount.Value = beatmap.OnlineInfo.SliderCount.ToString(); } diff --git a/osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs b/osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs index fa24a64d51..490012da61 100644 --- a/osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs +++ b/osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs @@ -50,8 +50,8 @@ namespace osu.Game.Screens.Select.Carousel case SortMode.Length: // Length comparing must be in seconds - if (TimeSpan.FromMilliseconds(Beatmap.OnlineInfo.Length).Seconds != TimeSpan.FromMilliseconds(otherBeatmap.Beatmap.OnlineInfo.Length).Seconds) - return Beatmap.OnlineInfo.Length.CompareTo(otherBeatmap.Beatmap.OnlineInfo.Length); + if (TimeSpan.FromMilliseconds(Beatmap.Length).Seconds != TimeSpan.FromMilliseconds(otherBeatmap.Beatmap.Length).Seconds) + return Beatmap.Length.CompareTo(otherBeatmap.Beatmap.Length); goto case SortMode.Difficulty; } From d8745746129c26f25d6ac40ac67a5d1c2b52effc Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Sun, 7 Jul 2019 20:25:59 +0300 Subject: [PATCH 209/267] Add migration --- ...7172237_AddBPMAndLengthColumns.Designer.cs | 504 ++++++++++++++++++ .../20190707172237_AddBPMAndLengthColumns.cs | 33 ++ .../Migrations/OsuDbContextModelSnapshot.cs | 4 + 3 files changed, 541 insertions(+) create mode 100644 osu.Game/Migrations/20190707172237_AddBPMAndLengthColumns.Designer.cs create mode 100644 osu.Game/Migrations/20190707172237_AddBPMAndLengthColumns.cs diff --git a/osu.Game/Migrations/20190707172237_AddBPMAndLengthColumns.Designer.cs b/osu.Game/Migrations/20190707172237_AddBPMAndLengthColumns.Designer.cs new file mode 100644 index 0000000000..c1e9f5071a --- /dev/null +++ b/osu.Game/Migrations/20190707172237_AddBPMAndLengthColumns.Designer.cs @@ -0,0 +1,504 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using osu.Game.Database; + +namespace osu.Game.Migrations +{ + [DbContext(typeof(OsuDbContext))] + [Migration("20190707172237_AddBPMAndLengthColumns")] + partial class AddBPMAndLengthColumns + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.2.4-servicing-10062"); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapDifficulty", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("ApproachRate"); + + b.Property("CircleSize"); + + b.Property("DrainRate"); + + b.Property("OverallDifficulty"); + + b.Property("SliderMultiplier"); + + b.Property("SliderTickRate"); + + b.HasKey("ID"); + + b.ToTable("BeatmapDifficulty"); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("AudioLeadIn"); + + b.Property("BaseDifficultyID"); + + b.Property("BeatDivisor"); + + b.Property("BeatmapSetInfoID"); + + b.Property("Countdown"); + + b.Property("DistanceSpacing"); + + b.Property("GridSize"); + + b.Property("Hash"); + + b.Property("Hidden"); + + b.Property("Length"); + + b.Property("LetterboxInBreaks"); + + b.Property("MD5Hash"); + + b.Property("MetadataID"); + + b.Property("OnlineBeatmapID"); + + b.Property("Path"); + + b.Property("RulesetID"); + + b.Property("SpecialStyle"); + + b.Property("StackLeniency"); + + b.Property("StarDifficulty"); + + b.Property("Status"); + + b.Property("StoredBookmarks"); + + b.Property("TimelineZoom"); + + b.Property("Version"); + + b.Property("WidescreenStoryboard"); + + b.HasKey("ID"); + + b.HasIndex("BaseDifficultyID"); + + b.HasIndex("BeatmapSetInfoID"); + + b.HasIndex("Hash"); + + b.HasIndex("MD5Hash"); + + b.HasIndex("MetadataID"); + + b.HasIndex("OnlineBeatmapID") + .IsUnique(); + + b.HasIndex("RulesetID"); + + b.ToTable("BeatmapInfo"); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapMetadata", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("Artist"); + + b.Property("ArtistUnicode"); + + b.Property("AudioFile"); + + b.Property("AuthorString") + .HasColumnName("Author"); + + b.Property("BackgroundFile"); + + b.Property("PreviewTime"); + + b.Property("Source"); + + b.Property("Tags"); + + b.Property("Title"); + + b.Property("TitleUnicode"); + + b.HasKey("ID"); + + b.ToTable("BeatmapMetadata"); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapSetFileInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("BeatmapSetInfoID"); + + b.Property("FileInfoID"); + + b.Property("Filename") + .IsRequired(); + + b.HasKey("ID"); + + b.HasIndex("BeatmapSetInfoID"); + + b.HasIndex("FileInfoID"); + + b.ToTable("BeatmapSetFileInfo"); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapSetInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("BPM"); + + b.Property("DateAdded"); + + b.Property("DeletePending"); + + b.Property("Hash"); + + b.Property("MetadataID"); + + b.Property("OnlineBeatmapSetID"); + + b.Property("Protected"); + + b.Property("Status"); + + b.HasKey("ID"); + + b.HasIndex("DeletePending"); + + b.HasIndex("Hash") + .IsUnique(); + + b.HasIndex("MetadataID"); + + b.HasIndex("OnlineBeatmapSetID") + .IsUnique(); + + b.ToTable("BeatmapSetInfo"); + }); + + modelBuilder.Entity("osu.Game.Configuration.DatabasedSetting", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("Key") + .HasColumnName("Key"); + + b.Property("RulesetID"); + + b.Property("SkinInfoID"); + + b.Property("StringValue") + .HasColumnName("Value"); + + b.Property("Variant"); + + b.HasKey("ID"); + + b.HasIndex("SkinInfoID"); + + b.HasIndex("RulesetID", "Variant"); + + b.ToTable("Settings"); + }); + + modelBuilder.Entity("osu.Game.IO.FileInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("Hash"); + + b.Property("ReferenceCount"); + + b.HasKey("ID"); + + b.HasIndex("Hash") + .IsUnique(); + + b.HasIndex("ReferenceCount"); + + b.ToTable("FileInfo"); + }); + + modelBuilder.Entity("osu.Game.Input.Bindings.DatabasedKeyBinding", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("IntAction") + .HasColumnName("Action"); + + b.Property("KeysString") + .HasColumnName("Keys"); + + b.Property("RulesetID"); + + b.Property("Variant"); + + b.HasKey("ID"); + + b.HasIndex("IntAction"); + + b.HasIndex("RulesetID", "Variant"); + + b.ToTable("KeyBinding"); + }); + + modelBuilder.Entity("osu.Game.Rulesets.RulesetInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("Available"); + + b.Property("InstantiationInfo"); + + b.Property("Name"); + + b.Property("ShortName"); + + b.HasKey("ID"); + + b.HasIndex("Available"); + + b.HasIndex("ShortName") + .IsUnique(); + + b.ToTable("RulesetInfo"); + }); + + modelBuilder.Entity("osu.Game.Scoring.ScoreFileInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("FileInfoID"); + + b.Property("Filename") + .IsRequired(); + + b.Property("ScoreInfoID"); + + b.HasKey("ID"); + + b.HasIndex("FileInfoID"); + + b.HasIndex("ScoreInfoID"); + + b.ToTable("ScoreFileInfo"); + }); + + modelBuilder.Entity("osu.Game.Scoring.ScoreInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("Accuracy") + .HasColumnType("DECIMAL(1,4)"); + + b.Property("BeatmapInfoID"); + + b.Property("Combo"); + + b.Property("Date"); + + b.Property("DeletePending"); + + b.Property("Hash"); + + b.Property("MaxCombo"); + + b.Property("ModsJson") + .HasColumnName("Mods"); + + b.Property("OnlineScoreID"); + + b.Property("PP"); + + b.Property("Rank"); + + b.Property("RulesetID"); + + b.Property("StatisticsJson") + .HasColumnName("Statistics"); + + b.Property("TotalScore"); + + b.Property("UserID") + .HasColumnName("UserID"); + + b.Property("UserString") + .HasColumnName("User"); + + b.HasKey("ID"); + + b.HasIndex("BeatmapInfoID"); + + b.HasIndex("OnlineScoreID") + .IsUnique(); + + b.HasIndex("RulesetID"); + + b.ToTable("ScoreInfo"); + }); + + modelBuilder.Entity("osu.Game.Skinning.SkinFileInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("FileInfoID"); + + b.Property("Filename") + .IsRequired(); + + b.Property("SkinInfoID"); + + b.HasKey("ID"); + + b.HasIndex("FileInfoID"); + + b.HasIndex("SkinInfoID"); + + b.ToTable("SkinFileInfo"); + }); + + modelBuilder.Entity("osu.Game.Skinning.SkinInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("Creator"); + + b.Property("DeletePending"); + + b.Property("Hash"); + + b.Property("Name"); + + b.HasKey("ID"); + + b.HasIndex("DeletePending"); + + b.HasIndex("Hash") + .IsUnique(); + + b.ToTable("SkinInfo"); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapInfo", b => + { + b.HasOne("osu.Game.Beatmaps.BeatmapDifficulty", "BaseDifficulty") + .WithMany() + .HasForeignKey("BaseDifficultyID") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("osu.Game.Beatmaps.BeatmapSetInfo", "BeatmapSet") + .WithMany("Beatmaps") + .HasForeignKey("BeatmapSetInfoID") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("osu.Game.Beatmaps.BeatmapMetadata", "Metadata") + .WithMany("Beatmaps") + .HasForeignKey("MetadataID"); + + b.HasOne("osu.Game.Rulesets.RulesetInfo", "Ruleset") + .WithMany() + .HasForeignKey("RulesetID") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapSetFileInfo", b => + { + b.HasOne("osu.Game.Beatmaps.BeatmapSetInfo") + .WithMany("Files") + .HasForeignKey("BeatmapSetInfoID") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("osu.Game.IO.FileInfo", "FileInfo") + .WithMany() + .HasForeignKey("FileInfoID") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapSetInfo", b => + { + b.HasOne("osu.Game.Beatmaps.BeatmapMetadata", "Metadata") + .WithMany("BeatmapSets") + .HasForeignKey("MetadataID"); + }); + + modelBuilder.Entity("osu.Game.Configuration.DatabasedSetting", b => + { + b.HasOne("osu.Game.Skinning.SkinInfo") + .WithMany("Settings") + .HasForeignKey("SkinInfoID"); + }); + + modelBuilder.Entity("osu.Game.Scoring.ScoreFileInfo", b => + { + b.HasOne("osu.Game.IO.FileInfo", "FileInfo") + .WithMany() + .HasForeignKey("FileInfoID") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("osu.Game.Scoring.ScoreInfo") + .WithMany("Files") + .HasForeignKey("ScoreInfoID"); + }); + + modelBuilder.Entity("osu.Game.Scoring.ScoreInfo", b => + { + b.HasOne("osu.Game.Beatmaps.BeatmapInfo", "Beatmap") + .WithMany("Scores") + .HasForeignKey("BeatmapInfoID") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("osu.Game.Rulesets.RulesetInfo", "Ruleset") + .WithMany() + .HasForeignKey("RulesetID") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("osu.Game.Skinning.SkinFileInfo", b => + { + b.HasOne("osu.Game.IO.FileInfo", "FileInfo") + .WithMany() + .HasForeignKey("FileInfoID") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("osu.Game.Skinning.SkinInfo") + .WithMany("Files") + .HasForeignKey("SkinInfoID") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/osu.Game/Migrations/20190707172237_AddBPMAndLengthColumns.cs b/osu.Game/Migrations/20190707172237_AddBPMAndLengthColumns.cs new file mode 100644 index 0000000000..b14722daf6 --- /dev/null +++ b/osu.Game/Migrations/20190707172237_AddBPMAndLengthColumns.cs @@ -0,0 +1,33 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace osu.Game.Migrations +{ + public partial class AddBPMAndLengthColumns : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "BPM", + table: "BeatmapSetInfo", + nullable: false, + defaultValue: 0.0); + + migrationBuilder.AddColumn( + name: "Length", + table: "BeatmapInfo", + nullable: false, + defaultValue: 0.0); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "BPM", + table: "BeatmapSetInfo"); + + migrationBuilder.DropColumn( + name: "Length", + table: "BeatmapInfo"); + } + } +} diff --git a/osu.Game/Migrations/OsuDbContextModelSnapshot.cs b/osu.Game/Migrations/OsuDbContextModelSnapshot.cs index 11b032a941..9e65dc7f0f 100644 --- a/osu.Game/Migrations/OsuDbContextModelSnapshot.cs +++ b/osu.Game/Migrations/OsuDbContextModelSnapshot.cs @@ -61,6 +61,8 @@ namespace osu.Game.Migrations b.Property("Hidden"); + b.Property("Length"); + b.Property("LetterboxInBreaks"); b.Property("MD5Hash"); @@ -166,6 +168,8 @@ namespace osu.Game.Migrations b.Property("ID") .ValueGeneratedOnAdd(); + b.Property("BPM"); + b.Property("DateAdded"); b.Property("DeletePending"); From 2747d7692b1db44559f305c3e4873e78048a6f48 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Mon, 8 Jul 2019 14:55:05 +0900 Subject: [PATCH 210/267] Create ReplayPlayerLoader for local mod caching --- osu.Game/OsuGame.cs | 3 +- osu.Game/Screens/Play/ReplayPlayerLoader.cs | 32 +++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 osu.Game/Screens/Play/ReplayPlayerLoader.cs diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 0a472d4dc1..ab7efc6e38 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -284,9 +284,8 @@ namespace osu.Game { Ruleset.Value = databasedScoreInfo.Ruleset; Beatmap.Value = BeatmapManager.GetWorkingBeatmap(databasedBeatmap); - Mods.Value = databasedScoreInfo.Mods; - menuScreen.Push(new PlayerLoader(() => new ReplayPlayer(databasedScore))); + menuScreen.Push(new ReplayPlayerLoader(() => new ReplayPlayer(databasedScore), databasedScoreInfo.Mods)); }, $"watch {databasedScoreInfo}", bypassScreenAllowChecks: true); } diff --git a/osu.Game/Screens/Play/ReplayPlayerLoader.cs b/osu.Game/Screens/Play/ReplayPlayerLoader.cs new file mode 100644 index 0000000000..1c24709e41 --- /dev/null +++ b/osu.Game/Screens/Play/ReplayPlayerLoader.cs @@ -0,0 +1,32 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System; +using System.Collections.Generic; +using osu.Framework.Allocation; +using osu.Framework.Bindables; +using osu.Game.Rulesets.Mods; + +namespace osu.Game.Screens.Play +{ + public class ReplayPlayerLoader : PlayerLoader + { + private readonly IReadOnlyList mods; + + public ReplayPlayerLoader(Func player, IReadOnlyList mods) + : base(player) + { + this.mods = mods; + } + + private DependencyContainer dependencies; + + protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent) + { + dependencies = new DependencyContainer(parent); + dependencies.Cache(new Bindable>(mods)); + + return base.CreateChildDependencies(dependencies); + } + } +} From 90d5484818b9e0372694a1d99a3801d340699bd3 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Mon, 8 Jul 2019 09:10:41 +0300 Subject: [PATCH 211/267] Return BPM back to OnlineInfo Revert commit of "Move BPM out of OnlineInfo" --- osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs | 4 ++-- osu.Game.Tests/Visual/Online/TestSceneDirectPanel.cs | 2 +- osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs | 5 ++++- osu.Game/Beatmaps/BeatmapManager.cs | 5 ++++- osu.Game/Beatmaps/BeatmapSetInfo.cs | 5 ----- osu.Game/Beatmaps/BeatmapSetOnlineInfo.cs | 5 +++++ osu.Game/Online/API/Requests/Responses/APIBeatmapSet.cs | 2 +- osu.Game/Overlays/BeatmapSet/BasicStats.cs | 2 +- osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs | 2 +- 9 files changed, 19 insertions(+), 13 deletions(-) diff --git a/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs b/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs index 02b26acb7c..daee419b52 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs @@ -96,11 +96,11 @@ namespace osu.Game.Tests.Visual.Online FavouriteCount = 456, Submitted = DateTime.Now, Ranked = DateTime.Now, + BPM = 111, HasVideo = true, HasStoryboard = true, Covers = new BeatmapSetOnlineCovers(), }, - BPM = 111, Metrics = new BeatmapSetMetrics { Ratings = Enumerable.Range(0, 11).ToArray() }, Beatmaps = new List { @@ -169,11 +169,11 @@ namespace osu.Game.Tests.Visual.Online FavouriteCount = 456, Submitted = DateTime.Now, Ranked = DateTime.Now, + BPM = 111, HasVideo = true, HasStoryboard = true, Covers = new BeatmapSetOnlineCovers(), }, - BPM = 111, Metrics = new BeatmapSetMetrics { Ratings = Enumerable.Range(0, 11).ToArray() }, Beatmaps = new List { diff --git a/osu.Game.Tests/Visual/Online/TestSceneDirectPanel.cs b/osu.Game.Tests/Visual/Online/TestSceneDirectPanel.cs index 5f80223541..53dbaeddda 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneDirectPanel.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneDirectPanel.cs @@ -47,11 +47,11 @@ namespace osu.Game.Tests.Visual.Online Preview = @"https://b.ppy.sh/preview/12345.mp3", PlayCount = 123, FavouriteCount = 456, + BPM = 111, HasVideo = true, HasStoryboard = true, Covers = new BeatmapSetOnlineCovers(), }, - BPM = 111, Beatmaps = new List { new BeatmapInfo diff --git a/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs b/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs index 0b0f65f572..27a341ffb7 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs @@ -297,7 +297,10 @@ namespace osu.Game.Tests.Visual.SongSelect }, Beatmaps = beatmaps, DateAdded = DateTimeOffset.UtcNow, - BPM = bpm, + OnlineInfo = new BeatmapSetOnlineInfo + { + BPM = bpm, + } }; } } diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 810db1589e..34a8ddf5c9 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -272,7 +272,10 @@ namespace osu.Game.Beatmaps Beatmaps = new List(), Metadata = beatmap.Metadata, DateAdded = DateTimeOffset.UtcNow, - BPM = beatmap.ControlPointInfo.BPMMode, + OnlineInfo = new BeatmapSetOnlineInfo + { + BPM = beatmap.ControlPointInfo.BPMMode, + } }; } diff --git a/osu.Game/Beatmaps/BeatmapSetInfo.cs b/osu.Game/Beatmaps/BeatmapSetInfo.cs index 62366cab4e..a77dfa2148 100644 --- a/osu.Game/Beatmaps/BeatmapSetInfo.cs +++ b/osu.Game/Beatmaps/BeatmapSetInfo.cs @@ -35,11 +35,6 @@ namespace osu.Game.Beatmaps [NotMapped] public BeatmapSetMetrics Metrics { get; set; } - /// - /// The beats per minute of this beatmap set's song. - /// - public double BPM { get; set; } - public double MaxStarDifficulty => Beatmaps?.Max(b => b.StarDifficulty) ?? 0; public double MaxLength => Beatmaps?.Max(b => b.Length) ?? 0; diff --git a/osu.Game/Beatmaps/BeatmapSetOnlineInfo.cs b/osu.Game/Beatmaps/BeatmapSetOnlineInfo.cs index 903d07bea0..ea3f0b61b9 100644 --- a/osu.Game/Beatmaps/BeatmapSetOnlineInfo.cs +++ b/osu.Game/Beatmaps/BeatmapSetOnlineInfo.cs @@ -51,6 +51,11 @@ namespace osu.Game.Beatmaps /// public string Preview { get; set; } + /// + /// The beats per minute of this beatmap set's song. + /// + public double BPM { get; set; } + /// /// The amount of plays this beatmap set has. /// diff --git a/osu.Game/Online/API/Requests/Responses/APIBeatmapSet.cs b/osu.Game/Online/API/Requests/Responses/APIBeatmapSet.cs index 50128bde7a..200a705500 100644 --- a/osu.Game/Online/API/Requests/Responses/APIBeatmapSet.cs +++ b/osu.Game/Online/API/Requests/Responses/APIBeatmapSet.cs @@ -77,13 +77,13 @@ namespace osu.Game.Online.API.Requests.Responses Metadata = this, Status = Status, Metrics = ratings == null ? null : new BeatmapSetMetrics { Ratings = ratings }, - BPM = bpm, OnlineInfo = new BeatmapSetOnlineInfo { Covers = covers, Preview = preview, PlayCount = playCount, FavouriteCount = favouriteCount, + BPM = bpm, Status = Status, HasVideo = hasVideo, HasStoryboard = hasStoryboard, diff --git a/osu.Game/Overlays/BeatmapSet/BasicStats.cs b/osu.Game/Overlays/BeatmapSet/BasicStats.cs index f97212f180..2926c82631 100644 --- a/osu.Game/Overlays/BeatmapSet/BasicStats.cs +++ b/osu.Game/Overlays/BeatmapSet/BasicStats.cs @@ -50,7 +50,7 @@ namespace osu.Game.Overlays.BeatmapSet private void updateDisplay() { - bpm.Value = BeatmapSet?.BPM.ToString(@"0.##") ?? "-"; + bpm.Value = BeatmapSet?.OnlineInfo?.BPM.ToString(@"0.##") ?? "-"; if (beatmap == null) { diff --git a/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs b/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs index 6457f78746..7934cf388f 100644 --- a/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs +++ b/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs @@ -49,7 +49,7 @@ namespace osu.Game.Screens.Select.Carousel return otherSet.BeatmapSet.DateAdded.CompareTo(BeatmapSet.DateAdded); case SortMode.BPM: - return BeatmapSet.BPM.CompareTo(otherSet.BeatmapSet.BPM); + return BeatmapSet.OnlineInfo.BPM.CompareTo(otherSet.BeatmapSet.OnlineInfo.BPM); case SortMode.Length: return BeatmapSet.MaxLength.CompareTo(otherSet.BeatmapSet.MaxLength); From 79ddb8d5d36f76131d5c75da5f6650d91ffa22c9 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Mon, 8 Jul 2019 09:23:01 +0300 Subject: [PATCH 212/267] Change to a more convenient xmldoc --- osu.Game/Beatmaps/BeatmapInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/BeatmapInfo.cs b/osu.Game/Beatmaps/BeatmapInfo.cs index 1610e37620..609f75461c 100644 --- a/osu.Game/Beatmaps/BeatmapInfo.cs +++ b/osu.Game/Beatmaps/BeatmapInfo.cs @@ -52,7 +52,7 @@ namespace osu.Game.Beatmaps public BeatmapOnlineInfo OnlineInfo { get; set; } /// - /// The length in milliseconds of this beatmap's song. + /// The playable length of this beatmap. /// public double Length { get; set; } From 2d0c924bdf579bd935f1eaf9fa19ce50aba39d5f Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Mon, 8 Jul 2019 09:35:12 +0300 Subject: [PATCH 213/267] Add xmldoc for MaxStarDifficulty and MaxLength --- osu.Game/Beatmaps/BeatmapSetInfo.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/osu.Game/Beatmaps/BeatmapSetInfo.cs b/osu.Game/Beatmaps/BeatmapSetInfo.cs index a77dfa2148..3e6385bdd5 100644 --- a/osu.Game/Beatmaps/BeatmapSetInfo.cs +++ b/osu.Game/Beatmaps/BeatmapSetInfo.cs @@ -35,8 +35,14 @@ namespace osu.Game.Beatmaps [NotMapped] public BeatmapSetMetrics Metrics { get; set; } + /// + /// The maximum star difficulty of all beatmaps in this set. + /// public double MaxStarDifficulty => Beatmaps?.Max(b => b.StarDifficulty) ?? 0; + /// + /// The maximum playable length of all beatmaps in this set. + /// public double MaxLength => Beatmaps?.Max(b => b.Length) ?? 0; [NotMapped] From 5853a877c257a14316cf03e5a39dd2a70e912e90 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Mon, 8 Jul 2019 15:40:10 +0900 Subject: [PATCH 214/267] create base dependencies before caching, create player in playerloader --- osu.Game/OsuGame.cs | 2 +- osu.Game/Screens/Play/ReplayPlayerLoader.cs | 21 +++++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index ab7efc6e38..1c426d928f 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -285,7 +285,7 @@ namespace osu.Game Ruleset.Value = databasedScoreInfo.Ruleset; Beatmap.Value = BeatmapManager.GetWorkingBeatmap(databasedBeatmap); - menuScreen.Push(new ReplayPlayerLoader(() => new ReplayPlayer(databasedScore), databasedScoreInfo.Mods)); + menuScreen.Push(new ReplayPlayerLoader(databasedScore, databasedScoreInfo.Mods)); }, $"watch {databasedScoreInfo}", bypassScreenAllowChecks: true); } diff --git a/osu.Game/Screens/Play/ReplayPlayerLoader.cs b/osu.Game/Screens/Play/ReplayPlayerLoader.cs index 1c24709e41..41f02b5cb1 100644 --- a/osu.Game/Screens/Play/ReplayPlayerLoader.cs +++ b/osu.Game/Screens/Play/ReplayPlayerLoader.cs @@ -1,32 +1,33 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -using System; using System.Collections.Generic; using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Game.Rulesets.Mods; +using osu.Game.Scoring; namespace osu.Game.Screens.Play { public class ReplayPlayerLoader : PlayerLoader { - private readonly IReadOnlyList mods; + private readonly Bindable> mods; - public ReplayPlayerLoader(Func player, IReadOnlyList mods) - : base(player) + public ReplayPlayerLoader(Score score, IReadOnlyList mods) + : base(() => new ReplayPlayer(score)) { - this.mods = mods; + this.mods = new Bindable>(mods); } - private DependencyContainer dependencies; - protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent) { - dependencies = new DependencyContainer(parent); - dependencies.Cache(new Bindable>(mods)); + var dependencies = new DependencyContainer(base.CreateChildDependencies(parent)); + dependencies.Cache(mods); - return base.CreateChildDependencies(dependencies); + // Overwrite the global mods here for use in the mod hud. + Mods.Value = mods.Value; + + return dependencies; } } } From 6a86f62d17b05a899059337ed9f82d25a92f2d5d Mon Sep 17 00:00:00 2001 From: David Zhao Date: Mon, 8 Jul 2019 16:13:03 +0900 Subject: [PATCH 215/267] Get mods from score info --- osu.Game/OsuGame.cs | 2 +- osu.Game/Screens/Play/ReplayPlayerLoader.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 1c426d928f..2260c5bb57 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -285,7 +285,7 @@ namespace osu.Game Ruleset.Value = databasedScoreInfo.Ruleset; Beatmap.Value = BeatmapManager.GetWorkingBeatmap(databasedBeatmap); - menuScreen.Push(new ReplayPlayerLoader(databasedScore, databasedScoreInfo.Mods)); + menuScreen.Push(new ReplayPlayerLoader(databasedScore)); }, $"watch {databasedScoreInfo}", bypassScreenAllowChecks: true); } diff --git a/osu.Game/Screens/Play/ReplayPlayerLoader.cs b/osu.Game/Screens/Play/ReplayPlayerLoader.cs index 41f02b5cb1..da30ed80b6 100644 --- a/osu.Game/Screens/Play/ReplayPlayerLoader.cs +++ b/osu.Game/Screens/Play/ReplayPlayerLoader.cs @@ -13,10 +13,10 @@ namespace osu.Game.Screens.Play { private readonly Bindable> mods; - public ReplayPlayerLoader(Score score, IReadOnlyList mods) + public ReplayPlayerLoader(Score score) : base(() => new ReplayPlayer(score)) { - this.mods = new Bindable>(mods); + mods = new Bindable>(score.ScoreInfo.Mods); } protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent) From ef22ab9340d152cb9713b4aded8957321f6b5412 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Mon, 8 Jul 2019 16:32:11 +0900 Subject: [PATCH 216/267] remove bindable --- osu.Game/Screens/Play/ReplayPlayerLoader.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/osu.Game/Screens/Play/ReplayPlayerLoader.cs b/osu.Game/Screens/Play/ReplayPlayerLoader.cs index da30ed80b6..b877e7e2ca 100644 --- a/osu.Game/Screens/Play/ReplayPlayerLoader.cs +++ b/osu.Game/Screens/Play/ReplayPlayerLoader.cs @@ -11,21 +11,20 @@ namespace osu.Game.Screens.Play { public class ReplayPlayerLoader : PlayerLoader { - private readonly Bindable> mods; + private readonly IReadOnlyList mods; public ReplayPlayerLoader(Score score) : base(() => new ReplayPlayer(score)) { - mods = new Bindable>(score.ScoreInfo.Mods); + mods = score.ScoreInfo.Mods; } protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent) { var dependencies = new DependencyContainer(base.CreateChildDependencies(parent)); - dependencies.Cache(mods); // Overwrite the global mods here for use in the mod hud. - Mods.Value = mods.Value; + Mods.Value = mods; return dependencies; } From 72362d92d47e388af4bb9457ed0b963bc1bd77ae Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 8 Jul 2019 16:34:11 +0900 Subject: [PATCH 217/267] Fix a few inspections from EAP r# --- osu.Game.Tests/Visual/Online/TestSceneChannelTabControl.cs | 2 +- osu.Game.Tests/Visual/UserInterface/TestSceneBackButton.cs | 7 ++++--- .../UserInterface/TestSceneScreenBreadcrumbControl.cs | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/osu.Game.Tests/Visual/Online/TestSceneChannelTabControl.cs b/osu.Game.Tests/Visual/Online/TestSceneChannelTabControl.cs index 364c986723..16e47c5df9 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneChannelTabControl.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneChannelTabControl.cs @@ -70,7 +70,7 @@ namespace osu.Game.Tests.Visual.Online }); channelTabControl.OnRequestLeave += channel => channelTabControl.RemoveChannel(channel); - channelTabControl.Current.ValueChanged += channel => currentText.Text = "Currently selected channel: " + channel.NewValue.ToString(); + channelTabControl.Current.ValueChanged += channel => currentText.Text = "Currently selected channel: " + channel.NewValue; AddStep("Add random private channel", addRandomPrivateChannel); AddAssert("There is only one channels", () => channelTabControl.Items.Count() == 2); diff --git a/osu.Game.Tests/Visual/UserInterface/TestSceneBackButton.cs b/osu.Game.Tests/Visual/UserInterface/TestSceneBackButton.cs index 867b3130c9..38a9af05d8 100644 --- a/osu.Game.Tests/Visual/UserInterface/TestSceneBackButton.cs +++ b/osu.Game.Tests/Visual/UserInterface/TestSceneBackButton.cs @@ -14,8 +14,6 @@ namespace osu.Game.Tests.Visual.UserInterface { public class TestSceneBackButton : OsuTestScene { - private readonly BackButton button; - public override IReadOnlyList RequiredTypes => new[] { typeof(TwoLayerButton) @@ -23,6 +21,8 @@ namespace osu.Game.Tests.Visual.UserInterface public TestSceneBackButton() { + BackButton button; + Child = new Container { Anchor = Anchor.Centre, @@ -40,11 +40,12 @@ namespace osu.Game.Tests.Visual.UserInterface { Anchor = Anchor.BottomLeft, Origin = Anchor.BottomLeft, - Action = () => button.Hide(), } } }; + button.Action = () => button.Hide(); + AddStep("show button", () => button.Show()); AddStep("hide button", () => button.Hide()); } diff --git a/osu.Game.Tests/Visual/UserInterface/TestSceneScreenBreadcrumbControl.cs b/osu.Game.Tests/Visual/UserInterface/TestSceneScreenBreadcrumbControl.cs index 9c83fdf96c..0cb8683d72 100644 --- a/osu.Game.Tests/Visual/UserInterface/TestSceneScreenBreadcrumbControl.cs +++ b/osu.Game.Tests/Visual/UserInterface/TestSceneScreenBreadcrumbControl.cs @@ -48,7 +48,7 @@ namespace osu.Game.Tests.Visual.UserInterface }, }; - breadcrumbs.Current.ValueChanged += screen => titleText.Text = $"Changed to {screen.NewValue.ToString()}"; + breadcrumbs.Current.ValueChanged += screen => titleText.Text = $"Changed to {screen.NewValue}"; breadcrumbs.Current.TriggerChange(); waitForCurrent(); From 129899f41950da4d0f11557000e5af1a617777d7 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Mon, 8 Jul 2019 10:43:35 +0300 Subject: [PATCH 218/267] Add a BPM property in BeatmapInfo --- .../Visual/SongSelect/TestScenePlaySongSelect.cs | 12 +++++------- osu.Game.Tournament/Components/SongBar.cs | 2 +- osu.Game/Beatmaps/BeatmapInfo.cs | 5 +++++ osu.Game/Beatmaps/BeatmapManager.cs | 7 ++----- osu.Game/Beatmaps/BeatmapSetInfo.cs | 5 +++++ .../Screens/Select/Carousel/CarouselBeatmapSet.cs | 2 +- 6 files changed, 19 insertions(+), 14 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs b/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs index 27a341ffb7..f3255814f2 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs @@ -267,15 +267,18 @@ namespace osu.Game.Tests.Visual.SongSelect for (int i = 0; i < 6; i++) { int beatmapId = setId * 10 + i; + int length = RNG.Next(30000, 200000); + double bpm = RNG.NextSingle(80, 200); beatmaps.Add(new BeatmapInfo { Ruleset = getRuleset(), OnlineBeatmapID = beatmapId, Path = "normal.osu", - Version = $"{beatmapId} (length {TimeSpan.FromMilliseconds(length):m\\:ss})", + Version = $"{beatmapId} (length {TimeSpan.FromMilliseconds(length):m\\:ss}, bpm {bpm:0.#})", Length = length, + BPM = bpm, BaseDifficulty = new BeatmapDifficulty { OverallDifficulty = 3.5f, @@ -283,7 +286,6 @@ namespace osu.Game.Tests.Visual.SongSelect }); } - double bpm = RNG.NextSingle(80, 200); return new BeatmapSetInfo { OnlineBeatmapSetID = setId, @@ -292,15 +294,11 @@ namespace osu.Game.Tests.Visual.SongSelect { // Create random metadata, then we can check if sorting works based on these Artist = "Some Artist " + RNG.Next(0, 9), - Title = $"Some Song (set id {setId}, bpm {bpm:0.#})", + Title = $"Some Song (set id {setId}, max bpm {beatmaps.Max(b => b.BPM):0.#})", AuthorString = "Some Guy " + RNG.Next(0, 9), }, Beatmaps = beatmaps, DateAdded = DateTimeOffset.UtcNow, - OnlineInfo = new BeatmapSetOnlineInfo - { - BPM = bpm, - } }; } } diff --git a/osu.Game.Tournament/Components/SongBar.cs b/osu.Game.Tournament/Components/SongBar.cs index 938fbba303..ec021a8d1f 100644 --- a/osu.Game.Tournament/Components/SongBar.cs +++ b/osu.Game.Tournament/Components/SongBar.cs @@ -158,7 +158,7 @@ namespace osu.Game.Tournament.Components return; } - var bpm = beatmap.BeatmapSet.BPM; + var bpm = beatmap.BeatmapSet.OnlineInfo.BPM; var length = beatmap.Length; string hardRockExtra = ""; string srExtra = ""; diff --git a/osu.Game/Beatmaps/BeatmapInfo.cs b/osu.Game/Beatmaps/BeatmapInfo.cs index 609f75461c..fa1282647e 100644 --- a/osu.Game/Beatmaps/BeatmapInfo.cs +++ b/osu.Game/Beatmaps/BeatmapInfo.cs @@ -56,6 +56,11 @@ namespace osu.Game.Beatmaps /// public double Length { get; set; } + /// + /// The most common BPM of this beatmap. + /// + public double BPM { get; set; } + public string Path { get; set; } [JsonProperty("file_sha2")] diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 34a8ddf5c9..56816607ee 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -271,11 +271,7 @@ namespace osu.Game.Beatmaps OnlineBeatmapSetID = beatmap.BeatmapInfo.BeatmapSet?.OnlineBeatmapSetID, Beatmaps = new List(), Metadata = beatmap.Metadata, - DateAdded = DateTimeOffset.UtcNow, - OnlineInfo = new BeatmapSetOnlineInfo - { - BPM = beatmap.ControlPointInfo.BPMMode, - } + DateAdded = DateTimeOffset.UtcNow }; } @@ -307,6 +303,7 @@ namespace osu.Game.Beatmaps // TODO: this should be done in a better place once we actually need to dynamically update it. beatmap.BeatmapInfo.StarDifficulty = ruleset?.CreateInstance().CreateDifficultyCalculator(new DummyConversionBeatmap(beatmap)).Calculate().StarRating ?? 0; beatmap.BeatmapInfo.Length = beatmap.CalculateLength(); + beatmap.BeatmapInfo.BPM = beatmap.ControlPointInfo.BPMMode; beatmapInfos.Add(beatmap.BeatmapInfo); } diff --git a/osu.Game/Beatmaps/BeatmapSetInfo.cs b/osu.Game/Beatmaps/BeatmapSetInfo.cs index 3e6385bdd5..4075263e12 100644 --- a/osu.Game/Beatmaps/BeatmapSetInfo.cs +++ b/osu.Game/Beatmaps/BeatmapSetInfo.cs @@ -45,6 +45,11 @@ namespace osu.Game.Beatmaps /// public double MaxLength => Beatmaps?.Max(b => b.Length) ?? 0; + /// + /// The maximum BPM of all beatmaps in this set. + /// + public double MaxBPM => Beatmaps?.Max(b => b.BPM) ?? 0; + [NotMapped] public bool DeletePending { get; set; } diff --git a/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs b/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs index 7934cf388f..5a3996bb49 100644 --- a/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs +++ b/osu.Game/Screens/Select/Carousel/CarouselBeatmapSet.cs @@ -49,7 +49,7 @@ namespace osu.Game.Screens.Select.Carousel return otherSet.BeatmapSet.DateAdded.CompareTo(BeatmapSet.DateAdded); case SortMode.BPM: - return BeatmapSet.OnlineInfo.BPM.CompareTo(otherSet.BeatmapSet.OnlineInfo.BPM); + return BeatmapSet.MaxBPM.CompareTo(otherSet.BeatmapSet.MaxBPM); case SortMode.Length: return BeatmapSet.MaxLength.CompareTo(otherSet.BeatmapSet.MaxLength); From 574d9a51b393a1baae947eab18d08ff1fa74da85 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Mon, 8 Jul 2019 10:44:23 +0300 Subject: [PATCH 219/267] Update migrations --- ...cs => 20190708070844_AddBPMAndLengthColumns.Designer.cs} | 6 +++--- ...hColumns.cs => 20190708070844_AddBPMAndLengthColumns.cs} | 4 ++-- osu.Game/Migrations/OsuDbContextModelSnapshot.cs | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) rename osu.Game/Migrations/{20190707172237_AddBPMAndLengthColumns.Designer.cs => 20190708070844_AddBPMAndLengthColumns.Designer.cs} (99%) rename osu.Game/Migrations/{20190707172237_AddBPMAndLengthColumns.cs => 20190708070844_AddBPMAndLengthColumns.cs} (91%) diff --git a/osu.Game/Migrations/20190707172237_AddBPMAndLengthColumns.Designer.cs b/osu.Game/Migrations/20190708070844_AddBPMAndLengthColumns.Designer.cs similarity index 99% rename from osu.Game/Migrations/20190707172237_AddBPMAndLengthColumns.Designer.cs rename to osu.Game/Migrations/20190708070844_AddBPMAndLengthColumns.Designer.cs index c1e9f5071a..c5fcc16f84 100644 --- a/osu.Game/Migrations/20190707172237_AddBPMAndLengthColumns.Designer.cs +++ b/osu.Game/Migrations/20190708070844_AddBPMAndLengthColumns.Designer.cs @@ -9,7 +9,7 @@ using osu.Game.Database; namespace osu.Game.Migrations { [DbContext(typeof(OsuDbContext))] - [Migration("20190707172237_AddBPMAndLengthColumns")] + [Migration("20190708070844_AddBPMAndLengthColumns")] partial class AddBPMAndLengthColumns { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -47,6 +47,8 @@ namespace osu.Game.Migrations b.Property("AudioLeadIn"); + b.Property("BPM"); + b.Property("BaseDifficultyID"); b.Property("BeatDivisor"); @@ -170,8 +172,6 @@ namespace osu.Game.Migrations b.Property("ID") .ValueGeneratedOnAdd(); - b.Property("BPM"); - b.Property("DateAdded"); b.Property("DeletePending"); diff --git a/osu.Game/Migrations/20190707172237_AddBPMAndLengthColumns.cs b/osu.Game/Migrations/20190708070844_AddBPMAndLengthColumns.cs similarity index 91% rename from osu.Game/Migrations/20190707172237_AddBPMAndLengthColumns.cs rename to osu.Game/Migrations/20190708070844_AddBPMAndLengthColumns.cs index b14722daf6..f5963ebf5e 100644 --- a/osu.Game/Migrations/20190707172237_AddBPMAndLengthColumns.cs +++ b/osu.Game/Migrations/20190708070844_AddBPMAndLengthColumns.cs @@ -8,7 +8,7 @@ namespace osu.Game.Migrations { migrationBuilder.AddColumn( name: "BPM", - table: "BeatmapSetInfo", + table: "BeatmapInfo", nullable: false, defaultValue: 0.0); @@ -23,7 +23,7 @@ namespace osu.Game.Migrations { migrationBuilder.DropColumn( name: "BPM", - table: "BeatmapSetInfo"); + table: "BeatmapInfo"); migrationBuilder.DropColumn( name: "Length", diff --git a/osu.Game/Migrations/OsuDbContextModelSnapshot.cs b/osu.Game/Migrations/OsuDbContextModelSnapshot.cs index 9e65dc7f0f..761dca2801 100644 --- a/osu.Game/Migrations/OsuDbContextModelSnapshot.cs +++ b/osu.Game/Migrations/OsuDbContextModelSnapshot.cs @@ -45,6 +45,8 @@ namespace osu.Game.Migrations b.Property("AudioLeadIn"); + b.Property("BPM"); + b.Property("BaseDifficultyID"); b.Property("BeatDivisor"); @@ -168,8 +170,6 @@ namespace osu.Game.Migrations b.Property("ID") .ValueGeneratedOnAdd(); - b.Property("BPM"); - b.Property("DateAdded"); b.Property("DeletePending"); From e78e326f34d84ce8cc3abbcc581adf35f8194bad Mon Sep 17 00:00:00 2001 From: David Zhao Date: Mon, 8 Jul 2019 17:02:42 +0900 Subject: [PATCH 220/267] remove unused using --- osu.Game/Screens/Play/ReplayPlayerLoader.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/osu.Game/Screens/Play/ReplayPlayerLoader.cs b/osu.Game/Screens/Play/ReplayPlayerLoader.cs index b877e7e2ca..62edb661b9 100644 --- a/osu.Game/Screens/Play/ReplayPlayerLoader.cs +++ b/osu.Game/Screens/Play/ReplayPlayerLoader.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using osu.Framework.Allocation; -using osu.Framework.Bindables; using osu.Game.Rulesets.Mods; using osu.Game.Scoring; From 16c993579bf943cb8ca71e89654e4ffd1115302c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 8 Jul 2019 17:10:12 +0900 Subject: [PATCH 221/267] Fix track transfer not running when beatmap is retrieved from cache --- osu.Game/Beatmaps/BeatmapManager.cs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 7ef50da7d3..5031176790 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -180,19 +180,18 @@ namespace osu.Game.Beatmaps lock (workingCache) { - var cached = workingCache.FirstOrDefault(w => w.BeatmapInfo?.ID == beatmapInfo.ID); + var working = workingCache.FirstOrDefault(w => w.BeatmapInfo?.ID == beatmapInfo.ID); - if (cached != null) - return cached; + if (working == null) + { + if (beatmapInfo.Metadata == null) + beatmapInfo.Metadata = beatmapInfo.BeatmapSet.Metadata; - if (beatmapInfo.Metadata == null) - beatmapInfo.Metadata = beatmapInfo.BeatmapSet.Metadata; - - WorkingBeatmap working = new BeatmapManagerWorkingBeatmap(Files.Store, new LargeTextureStore(host?.CreateTextureLoaderStore(Files.Store)), beatmapInfo, audioManager); + workingCache.Add(working = new BeatmapManagerWorkingBeatmap(Files.Store, + new LargeTextureStore(host?.CreateTextureLoaderStore(Files.Store)), beatmapInfo, audioManager)); + } previous?.TransferTo(working); - workingCache.Add(working); - return working; } } From a0efd50f629476bda2f1bfa86e7d801cd2662a48 Mon Sep 17 00:00:00 2001 From: Andrei Zavatski Date: Mon, 8 Jul 2019 11:25:25 +0300 Subject: [PATCH 222/267] Extend APILegacyScores request --- osu.Game/Online/API/Requests/GetScoresRequest.cs | 8 ++++++++ .../Online/API/Requests/Responses/APILegacyScores.cs | 12 ++++++++++++ 2 files changed, 20 insertions(+) diff --git a/osu.Game/Online/API/Requests/GetScoresRequest.cs b/osu.Game/Online/API/Requests/GetScoresRequest.cs index 6b0e680eb5..50844fa256 100644 --- a/osu.Game/Online/API/Requests/GetScoresRequest.cs +++ b/osu.Game/Online/API/Requests/GetScoresRequest.cs @@ -42,6 +42,14 @@ namespace osu.Game.Online.API.Requests score.Beatmap = beatmap; score.Ruleset = ruleset; } + + var userScore = r.UserScore; + + if (userScore != null) + { + userScore.Score.Beatmap = beatmap; + userScore.Score.Ruleset = ruleset; + } } protected override string Target => $@"beatmaps/{beatmap.OnlineBeatmapID}/scores{createQueryParameters()}"; diff --git a/osu.Game/Online/API/Requests/Responses/APILegacyScores.cs b/osu.Game/Online/API/Requests/Responses/APILegacyScores.cs index c629caaa6f..318fcb00de 100644 --- a/osu.Game/Online/API/Requests/Responses/APILegacyScores.cs +++ b/osu.Game/Online/API/Requests/Responses/APILegacyScores.cs @@ -10,5 +10,17 @@ namespace osu.Game.Online.API.Requests.Responses { [JsonProperty(@"scores")] public List Scores; + + [JsonProperty(@"userScore")] + public APILegacyUserTopScoreInfo UserScore; + } + + public class APILegacyUserTopScoreInfo + { + [JsonProperty(@"position")] + public int Position; + + [JsonProperty(@"score")] + public APILegacyScoreInfo Score; } } From fbd300e6643a582b9fab5299265633e907e16d6b Mon Sep 17 00:00:00 2001 From: David Zhao Date: Mon, 8 Jul 2019 17:37:20 +0900 Subject: [PATCH 223/267] Move ruleset into ReplayPlayerLoader as well --- osu.Game/OsuGame.cs | 1 - osu.Game/Screens/Play/ReplayPlayerLoader.cs | 9 ++++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 2260c5bb57..361ff62155 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -282,7 +282,6 @@ namespace osu.Game performFromMainMenu(() => { - Ruleset.Value = databasedScoreInfo.Ruleset; Beatmap.Value = BeatmapManager.GetWorkingBeatmap(databasedBeatmap); menuScreen.Push(new ReplayPlayerLoader(databasedScore)); diff --git a/osu.Game/Screens/Play/ReplayPlayerLoader.cs b/osu.Game/Screens/Play/ReplayPlayerLoader.cs index 62edb661b9..329e799f7c 100644 --- a/osu.Game/Screens/Play/ReplayPlayerLoader.cs +++ b/osu.Game/Screens/Play/ReplayPlayerLoader.cs @@ -1,21 +1,19 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -using System.Collections.Generic; using osu.Framework.Allocation; -using osu.Game.Rulesets.Mods; using osu.Game.Scoring; namespace osu.Game.Screens.Play { public class ReplayPlayerLoader : PlayerLoader { - private readonly IReadOnlyList mods; + private readonly ScoreInfo scoreInfo; public ReplayPlayerLoader(Score score) : base(() => new ReplayPlayer(score)) { - mods = score.ScoreInfo.Mods; + scoreInfo = score.ScoreInfo; } protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent) @@ -23,7 +21,8 @@ namespace osu.Game.Screens.Play var dependencies = new DependencyContainer(base.CreateChildDependencies(parent)); // Overwrite the global mods here for use in the mod hud. - Mods.Value = mods; + Mods.Value = scoreInfo.Mods; + Ruleset.Value = scoreInfo.Ruleset; return dependencies; } From 67a6abb96c7e08c0afa5e4f5eb49c0e6bbeb369c Mon Sep 17 00:00:00 2001 From: Andrei Zavatski Date: Mon, 8 Jul 2019 11:49:33 +0300 Subject: [PATCH 224/267] Add user top score on selected beatmap --- .../BeatmapSet/Scores/DrawableTopScore.cs | 22 +++------- .../BeatmapSet/Scores/ScoresContainer.cs | 41 +++++++++++++++---- .../BeatmapSet/Scores/TopScoreUserSection.cs | 4 +- 3 files changed, 41 insertions(+), 26 deletions(-) diff --git a/osu.Game/Overlays/BeatmapSet/Scores/DrawableTopScore.cs b/osu.Game/Overlays/BeatmapSet/Scores/DrawableTopScore.cs index 8e806c6747..bdae730f7e 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/DrawableTopScore.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/DrawableTopScore.cs @@ -23,10 +23,8 @@ namespace osu.Game.Overlays.BeatmapSet.Scores private Color4 backgroundHoveredColour; private readonly Box background; - private readonly TopScoreUserSection userSection; - private readonly TopScoreStatisticsSection statisticsSection; - public DrawableTopScore() + public DrawableTopScore(ScoreInfo score, int position = 1) { RelativeSizeAxes = Axes.X; AutoSizeAxes = Axes.Y; @@ -61,16 +59,18 @@ namespace osu.Game.Overlays.BeatmapSet.Scores { new Drawable[] { - userSection = new TopScoreUserSection + new TopScoreUserSection(position) { Anchor = Anchor.CentreLeft, Origin = Anchor.CentreLeft, + Score = score, }, null, - statisticsSection = new TopScoreStatisticsSection + new TopScoreStatisticsSection { Anchor = Anchor.CentreRight, Origin = Anchor.CentreRight, + Score = score, } }, }, @@ -91,18 +91,6 @@ namespace osu.Game.Overlays.BeatmapSet.Scores background.Colour = backgroundIdleColour; } - /// - /// Sets the score to be displayed. - /// - public ScoreInfo Score - { - set - { - userSection.Score = value; - statisticsSection.Score = value; - } - } - protected override bool OnHover(HoverEvent e) { background.FadeColour(backgroundHoveredColour, fade_duration, Easing.OutQuint); diff --git a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs index 3e6c938802..30685fb826 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs @@ -14,6 +14,7 @@ using osuTK; using System.Collections.Generic; using System.Linq; using osu.Game.Scoring; +using osu.Game.Online.API.Requests.Responses; namespace osu.Game.Overlays.BeatmapSet.Scores { @@ -25,7 +26,7 @@ namespace osu.Game.Overlays.BeatmapSet.Scores private readonly Box background; private readonly ScoreTable scoreTable; - private readonly DrawableTopScore topScore; + private readonly FillFlowContainer topScoresContainer; private readonly LoadingAnimation loadingAnimation; [Resolved] @@ -54,7 +55,13 @@ namespace osu.Game.Overlays.BeatmapSet.Scores Margin = new MarginPadding { Vertical = spacing }, Children = new Drawable[] { - topScore = new DrawableTopScore(), + topScoresContainer = new FillFlowContainer + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Direction = FillDirection.Vertical, + Spacing = new Vector2(0, 5), + }, scoreTable = new ScoreTable { Anchor = Anchor.TopCentre, @@ -97,6 +104,20 @@ namespace osu.Game.Overlays.BeatmapSet.Scores } } + private APILegacyUserTopScoreInfo userScore; + + public APILegacyUserTopScoreInfo UserScore + { + get => userScore; + set + { + getScoresRequest?.Cancel(); + userScore = value; + + updateDisplay(); + } + } + private BeatmapInfo beatmap; public BeatmapInfo Beatmap @@ -114,7 +135,12 @@ namespace osu.Game.Overlays.BeatmapSet.Scores loading = true; getScoresRequest = new GetScoresRequest(beatmap, beatmap.Ruleset); - getScoresRequest.Success += r => Schedule(() => Scores = r.Scores); + getScoresRequest.Success += r => Schedule(() => + { + scores = r.Scores; + userScore = r.UserScore; + updateDisplay(); + }); api.Queue(getScoresRequest); } } @@ -122,17 +148,18 @@ namespace osu.Game.Overlays.BeatmapSet.Scores private void updateDisplay() { loading = false; + topScoresContainer.Clear(); scoreTable.Scores = scores?.Count > 1 ? scores : new List(); scoreTable.FadeTo(scores?.Count > 1 ? 1 : 0); if (scores?.Any() == true) { - topScore.Score = scores.FirstOrDefault(); - topScore.Show(); + topScoresContainer.Add(new DrawableTopScore(scores.FirstOrDefault())); + + if (userScore != null && userScore.Position != 1) + topScoresContainer.Add(new DrawableTopScore(userScore.Score, userScore.Position)); } - else - topScore.Hide(); } protected override void Dispose(bool isDisposing) diff --git a/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs b/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs index 1d9c4e7fc8..1314573cb4 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs @@ -28,7 +28,7 @@ namespace osu.Game.Overlays.BeatmapSet.Scores private readonly SpriteText date; private readonly UpdateableFlag flag; - public TopScoreUserSection() + public TopScoreUserSection(int position) { AutoSizeAxes = Axes.Both; @@ -43,7 +43,7 @@ namespace osu.Game.Overlays.BeatmapSet.Scores { Anchor = Anchor.Centre, Origin = Anchor.Centre, - Text = "#1", + Text = position.ToString(), Font = OsuFont.GetFont(size: 30, weight: FontWeight.Bold, italics: true) }, rank = new UpdateableRank(ScoreRank.D) From 5f3f59629ec04a69132f3419d8e2667795500ffb Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Mon, 8 Jul 2019 11:55:07 +0300 Subject: [PATCH 225/267] Use the length field instead of recalculating --- osu.Game/Screens/Select/BeatmapInfoWedge.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Select/BeatmapInfoWedge.cs b/osu.Game/Screens/Select/BeatmapInfoWedge.cs index 26a83f930c..2551ffe2fc 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedge.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedge.cs @@ -291,7 +291,7 @@ namespace osu.Game.Screens.Select { Name = "Length", Icon = FontAwesome.Regular.Clock, - Content = TimeSpan.FromMilliseconds(b.CalculateLength()).ToString(@"m\:ss"), + Content = TimeSpan.FromMilliseconds(b.BeatmapInfo.Length).ToString(@"m\:ss"), })); labels.Add(new InfoLabel(new BeatmapStatistic From b62e69d170ebd0ed24c704a2a1ebf6397af32a82 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Mon, 8 Jul 2019 11:56:48 +0300 Subject: [PATCH 226/267] Calculate length inside BeatmapManager --- osu.Game/Beatmaps/BeatmapManager.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 56816607ee..6fe70b6ec6 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -23,6 +23,7 @@ using osu.Game.IO.Archives; using osu.Game.Online.API; using osu.Game.Online.API.Requests; using osu.Game.Rulesets; +using osu.Game.Rulesets.Objects.Types; namespace osu.Game.Beatmaps { @@ -302,7 +303,7 @@ namespace osu.Game.Beatmaps beatmap.BeatmapInfo.Ruleset = ruleset; // TODO: this should be done in a better place once we actually need to dynamically update it. beatmap.BeatmapInfo.StarDifficulty = ruleset?.CreateInstance().CreateDifficultyCalculator(new DummyConversionBeatmap(beatmap)).Calculate().StarRating ?? 0; - beatmap.BeatmapInfo.Length = beatmap.CalculateLength(); + beatmap.BeatmapInfo.Length = calculateLength(beatmap); beatmap.BeatmapInfo.BPM = beatmap.ControlPointInfo.BPMMode; beatmapInfos.Add(beatmap.BeatmapInfo); @@ -312,6 +313,14 @@ namespace osu.Game.Beatmaps return beatmapInfos; } + private double calculateLength(IBeatmap b) + { + var lastObject = b.HitObjects.LastOrDefault(); + var endTime = (lastObject as IHasEndTime)?.EndTime ?? lastObject?.StartTime ?? 0; + + return endTime - b.HitObjects.FirstOrDefault()?.StartTime ?? 0; + } + /// /// A dummy WorkingBeatmap for the purpose of retrieving a beatmap for star difficulty calculation. /// From 11ef65e3e2d72cd750f4dc1626c3373f0df92864 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Mon, 8 Jul 2019 11:57:02 +0300 Subject: [PATCH 227/267] Remove unnecessary extension --- osu.Game/Beatmaps/Beatmap.cs | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/osu.Game/Beatmaps/Beatmap.cs b/osu.Game/Beatmaps/Beatmap.cs index 7fca13a1e2..4ebeee40bf 100644 --- a/osu.Game/Beatmaps/Beatmap.cs +++ b/osu.Game/Beatmaps/Beatmap.cs @@ -8,7 +8,6 @@ using System.Linq; using osu.Game.Beatmaps.ControlPoints; using Newtonsoft.Json; using osu.Game.IO.Serialization.Converters; -using osu.Game.Rulesets.Objects.Types; namespace osu.Game.Beatmaps { @@ -62,15 +61,4 @@ namespace osu.Game.Beatmaps { public new Beatmap Clone() => (Beatmap)base.Clone(); } - - public static class BeatmapExtensions - { - public static double CalculateLength(this IBeatmap b) - { - HitObject lastObject = b.HitObjects.LastOrDefault(); - var endTime = (lastObject as IHasEndTime)?.EndTime ?? lastObject?.StartTime ?? 0; - - return endTime - b.HitObjects.FirstOrDefault()?.StartTime ?? 0; - } - } } From d489a77fe18c3a3f06b1cccb733fdb8a410bcb39 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Mon, 8 Jul 2019 17:57:29 +0900 Subject: [PATCH 228/267] remove new container and comment --- osu.Game/Screens/Play/ReplayPlayerLoader.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/osu.Game/Screens/Play/ReplayPlayerLoader.cs b/osu.Game/Screens/Play/ReplayPlayerLoader.cs index 329e799f7c..8681ae6887 100644 --- a/osu.Game/Screens/Play/ReplayPlayerLoader.cs +++ b/osu.Game/Screens/Play/ReplayPlayerLoader.cs @@ -18,9 +18,8 @@ namespace osu.Game.Screens.Play protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent) { - var dependencies = new DependencyContainer(base.CreateChildDependencies(parent)); + var dependencies = base.CreateChildDependencies(parent); - // Overwrite the global mods here for use in the mod hud. Mods.Value = scoreInfo.Mods; Ruleset.Value = scoreInfo.Ruleset; From 59cfd39670c62df39ba8ce95f71e23c86395e7f1 Mon Sep 17 00:00:00 2001 From: Andrei Zavatski Date: Mon, 8 Jul 2019 12:02:10 +0300 Subject: [PATCH 229/267] Add testcase --- .../Visual/Online/TestSceneScoresContainer.cs | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs b/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs index 06414af865..e4e6acec06 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs @@ -10,6 +10,7 @@ using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.MathUtils; using osu.Game.Graphics; +using osu.Game.Online.API.Requests.Responses; using osu.Game.Overlays.BeatmapSet.Scores; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Osu.Mods; @@ -165,6 +166,29 @@ namespace osu.Game.Tests.Visual.Online }, }; + var myBestScore = new APILegacyUserTopScoreInfo + { + Score = new APILegacyScoreInfo + { + User = new User + { + Id = 7151382, + Username = @"Mayuri Hana", + Country = new Country + { + FullName = @"Thailand", + FlagName = @"TH", + }, + }, + Rank = ScoreRank.D, + PP = 160, + MaxCombo = 1234, + TotalScore = 123456, + Accuracy = 0.6543, + }, + Position = 1337, + }; + foreach (var s in scores) { s.Statistics.Add(HitResult.Great, RNG.Next(2000)); @@ -173,9 +197,18 @@ namespace osu.Game.Tests.Visual.Online s.Statistics.Add(HitResult.Miss, RNG.Next(2000)); } - AddStep("Load all scores", () => scoresContainer.Scores = scores); - AddStep("Load null scores", () => scoresContainer.Scores = null); + AddStep("Load all scores", () => + { + scoresContainer.Scores = scores; + scoresContainer.UserScore = myBestScore; + }); + AddStep("Load null scores", () => + { + scoresContainer.Scores = null; + scoresContainer.UserScore = null; + }); AddStep("Load only one score", () => scoresContainer.Scores = new[] { scores.First() }); + AddStep("Add my best score", () => scoresContainer.UserScore = myBestScore); } [BackgroundDependencyLoader] From 1e5639acee4858571dfe4c832354a04fef38432d Mon Sep 17 00:00:00 2001 From: Andrei Zavatski Date: Mon, 8 Jul 2019 12:10:08 +0300 Subject: [PATCH 230/267] Add forgotten symbol --- osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs b/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs index 1314573cb4..385d8ff38c 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs @@ -43,7 +43,7 @@ namespace osu.Game.Overlays.BeatmapSet.Scores { Anchor = Anchor.Centre, Origin = Anchor.Centre, - Text = position.ToString(), + Text = $"#{position.ToString()}", Font = OsuFont.GetFont(size: 30, weight: FontWeight.Bold, italics: true) }, rank = new UpdateableRank(ScoreRank.D) From 39f04e497d5734ec57393b7a974cb255540f4ae6 Mon Sep 17 00:00:00 2001 From: Desconocidosmh Date: Mon, 8 Jul 2019 11:24:06 +0200 Subject: [PATCH 231/267] Add UserRequestedPause --- osu.Game/Overlays/MusicController.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/osu.Game/Overlays/MusicController.cs b/osu.Game/Overlays/MusicController.cs index 29ae5983be..3db71d39ee 100644 --- a/osu.Game/Overlays/MusicController.cs +++ b/osu.Game/Overlays/MusicController.cs @@ -66,6 +66,8 @@ namespace osu.Game.Overlays /// public Func GetToolbarHeight; + public bool UserRequestedPause { get; private set; } + public MusicController() { Width = 400; @@ -287,6 +289,8 @@ namespace osu.Game.Overlays return; } + UserRequestedPause = track.IsRunning; + if (track.IsRunning) track.Stop(); else From 54f5e6aedf4ffcce98f62a830020f1252eb42d93 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 8 Jul 2019 22:37:39 +0900 Subject: [PATCH 232/267] Add assertion and comment about lease logic --- osu.Game/Screens/Play/ReplayPlayerLoader.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/osu.Game/Screens/Play/ReplayPlayerLoader.cs b/osu.Game/Screens/Play/ReplayPlayerLoader.cs index 8681ae6887..86179ef067 100644 --- a/osu.Game/Screens/Play/ReplayPlayerLoader.cs +++ b/osu.Game/Screens/Play/ReplayPlayerLoader.cs @@ -1,6 +1,7 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. +using System; using osu.Framework.Allocation; using osu.Game.Scoring; @@ -13,6 +14,9 @@ namespace osu.Game.Screens.Play public ReplayPlayerLoader(Score score) : base(() => new ReplayPlayer(score)) { + if (score.Replay == null) + throw new ArgumentNullException(nameof(score.Replay), $"{nameof(score)} must have a non-null {nameof(score.Replay)}."); + scoreInfo = score.ScoreInfo; } @@ -20,6 +24,7 @@ namespace osu.Game.Screens.Play { var dependencies = base.CreateChildDependencies(parent); + // these will be reverted thanks to PlayerLoader's lease. Mods.Value = scoreInfo.Mods; Ruleset.Value = scoreInfo.Ruleset; From 338371c3fcec0e9c45ac7ec440e732e083eae972 Mon Sep 17 00:00:00 2001 From: Desconocidosmh Date: Tue, 9 Jul 2019 00:08:18 +0200 Subject: [PATCH 233/267] Fix music playing while exiting from editor --- osu.Game/OsuGame.cs | 6 +++--- osu.Game/Screens/Edit/Editor.cs | 6 ------ osu.Game/Screens/Menu/MainMenu.cs | 4 +++- osu.Game/Screens/OsuScreen.cs | 11 ++++++++++- osu.Game/Screens/Select/SongSelect.cs | 2 ++ 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 0a472d4dc1..325d2cbd85 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -306,7 +306,7 @@ namespace osu.Game private void currentTrackCompleted() { if (!Beatmap.Value.Track.Looping && !Beatmap.Disabled) - musicController.NextTrack(); + MusicController.NextTrack(); } #endregion @@ -484,7 +484,7 @@ namespace osu.Game Origin = Anchor.TopRight, }, rightFloatingOverlayContent.Add, true); - loadComponentSingleFile(musicController = new MusicController + loadComponentSingleFile(MusicController = new MusicController { GetToolbarHeight = () => ToolbarOffset, Anchor = Anchor.TopRight, @@ -752,7 +752,7 @@ namespace osu.Game private ScalingContainer screenContainer; - private MusicController musicController; + public MusicController MusicController { get; private set; } protected override bool OnExiting() { diff --git a/osu.Game/Screens/Edit/Editor.cs b/osu.Game/Screens/Edit/Editor.cs index 89da9ae063..676e060433 100644 --- a/osu.Game/Screens/Edit/Editor.cs +++ b/osu.Game/Screens/Edit/Editor.cs @@ -239,12 +239,6 @@ namespace osu.Game.Screens.Edit { Background.FadeColour(Color4.White, 500); - if (Beatmap.Value.Track != null) - { - Beatmap.Value.Track.Tempo.Value = 1; - Beatmap.Value.Track.Start(); - } - return base.OnExiting(next); } diff --git a/osu.Game/Screens/Menu/MainMenu.cs b/osu.Game/Screens/Menu/MainMenu.cs index c64bea840f..dcce49179d 100644 --- a/osu.Game/Screens/Menu/MainMenu.cs +++ b/osu.Game/Screens/Menu/MainMenu.cs @@ -120,7 +120,7 @@ namespace osu.Game.Screens.Menu var track = Beatmap.Value.Track; var metadata = Beatmap.Value.Metadata; - if (last is Intro && track != null) + if (last is Intro && track != null && !Game.MusicController.UserRequestedPause) { if (!track.IsRunning) { @@ -189,6 +189,8 @@ namespace osu.Game.Screens.Menu //we may have consumed our preloaded instance, so let's make another. preloadSongSelect(); + + ResumeIfNoUserPauseRequested(); } public override bool OnExiting(IScreen next) diff --git a/osu.Game/Screens/OsuScreen.cs b/osu.Game/Screens/OsuScreen.cs index 328631ff9c..0682710133 100644 --- a/osu.Game/Screens/OsuScreen.cs +++ b/osu.Game/Screens/OsuScreen.cs @@ -50,7 +50,7 @@ namespace osu.Game.Screens public virtual bool CursorVisible => true; - protected new OsuGameBase Game => base.Game as OsuGameBase; + protected new OsuGame Game => base.Game as OsuGame; /// /// The to set the user's activity automatically to when this screen is entered @@ -179,6 +179,15 @@ namespace osu.Game.Screens api.Activity.Value = activity; } + protected void ResumeIfNoUserPauseRequested() + { + if (Beatmap.Value.Track != null && !Game.MusicController.UserRequestedPause) + { + Beatmap.Value.Track.Tempo.Value = 1; + Beatmap.Value.Track.Start(); + } + } + /// /// Fired when this screen was entered or resumed and the logo state is required to be adjusted. /// diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index bf5857f725..17b2ae376f 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -426,6 +426,8 @@ namespace osu.Game.Screens.Select { base.OnEntering(last); + ResumeIfNoUserPauseRequested(); + this.FadeInFromZero(250); FilterControl.Activate(); } From 8f7476e9ccf2f8dd3744315cb56a852d5ff4197a Mon Sep 17 00:00:00 2001 From: Oskar Solecki <31374466+Desconocidosmh@users.noreply.github.com> Date: Tue, 9 Jul 2019 00:26:57 +0200 Subject: [PATCH 234/267] Remove unused stuff --- osu.Game/Screens/Edit/Editor.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/osu.Game/Screens/Edit/Editor.cs b/osu.Game/Screens/Edit/Editor.cs index cffe756548..676e060433 100644 --- a/osu.Game/Screens/Edit/Editor.cs +++ b/osu.Game/Screens/Edit/Editor.cs @@ -168,8 +168,6 @@ namespace osu.Game.Screens.Edit menuBar.Mode.ValueChanged += onModeChanged; - host.Exiting += onExitingGame; - bottomBackground.Colour = colours.Gray2; } @@ -237,8 +235,6 @@ namespace osu.Game.Screens.Edit Beatmap.Value.Track?.Stop(); } - private bool isExitingGame = false; - public override bool OnExiting(IScreen next) { Background.FadeColour(Color4.White, 500); @@ -279,7 +275,5 @@ namespace osu.Game.Screens.Edit else clock.SeekForward(!clock.IsRunning, amount); } - - private bool onExitingGame() => isExitingGame = true; } } From 5d81445454bd03c1018bce7c660e65fc931af915 Mon Sep 17 00:00:00 2001 From: Andrei Zavatski Date: Tue, 9 Jul 2019 08:05:34 +0300 Subject: [PATCH 235/267] Move api request outside the scores container --- .../Visual/Online/TestSceneScoresContainer.cs | 243 ++++++++++-------- .../BeatmapSet/Scores/ScoresContainer.cs | 82 ++---- osu.Game/Overlays/BeatmapSetOverlay.cs | 30 ++- 3 files changed, 184 insertions(+), 171 deletions(-) diff --git a/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs b/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs index e4e6acec06..730bf0d4e2 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs @@ -50,120 +50,123 @@ namespace osu.Game.Tests.Visual.Online } }; - var scores = new List + var allScores = new APILegacyScores { - new ScoreInfo + Scores = new List { - User = new User + new APILegacyScoreInfo { - Id = 6602580, - Username = @"waaiiru", - Country = new Country + User = new User { - FullName = @"Spain", - FlagName = @"ES", + Id = 6602580, + Username = @"waaiiru", + Country = new Country + { + FullName = @"Spain", + FlagName = @"ES", + }, }, - }, - Mods = new Mod[] - { - new OsuModDoubleTime(), - new OsuModHidden(), - new OsuModFlashlight(), - new OsuModHardRock(), - }, - Rank = ScoreRank.XH, - PP = 200, - MaxCombo = 1234, - TotalScore = 1234567890, - Accuracy = 1, - }, - new ScoreInfo - { - User = new User - { - Id = 4608074, - Username = @"Skycries", - Country = new Country + Mods = new Mod[] { - FullName = @"Brazil", - FlagName = @"BR", + new OsuModDoubleTime(), + new OsuModHidden(), + new OsuModFlashlight(), + new OsuModHardRock(), }, + Rank = ScoreRank.XH, + PP = 200, + MaxCombo = 1234, + TotalScore = 1234567890, + Accuracy = 1, }, - Mods = new Mod[] + new APILegacyScoreInfo { - new OsuModDoubleTime(), - new OsuModHidden(), - new OsuModFlashlight(), - }, - Rank = ScoreRank.S, - PP = 190, - MaxCombo = 1234, - TotalScore = 1234789, - Accuracy = 0.9997, - }, - new ScoreInfo - { - User = new User - { - Id = 1014222, - Username = @"eLy", - Country = new Country + User = new User { - FullName = @"Japan", - FlagName = @"JP", + Id = 4608074, + Username = @"Skycries", + Country = new Country + { + FullName = @"Brazil", + FlagName = @"BR", + }, }, - }, - Mods = new Mod[] - { - new OsuModDoubleTime(), - new OsuModHidden(), - }, - Rank = ScoreRank.B, - PP = 180, - MaxCombo = 1234, - TotalScore = 12345678, - Accuracy = 0.9854, - }, - new ScoreInfo - { - User = new User - { - Id = 1541390, - Username = @"Toukai", - Country = new Country + Mods = new Mod[] { - FullName = @"Canada", - FlagName = @"CA", + new OsuModDoubleTime(), + new OsuModHidden(), + new OsuModFlashlight(), }, + Rank = ScoreRank.S, + PP = 190, + MaxCombo = 1234, + TotalScore = 1234789, + Accuracy = 0.9997, }, - Mods = new Mod[] + new APILegacyScoreInfo { - new OsuModDoubleTime(), - }, - Rank = ScoreRank.C, - PP = 170, - MaxCombo = 1234, - TotalScore = 1234567, - Accuracy = 0.8765, - }, - new ScoreInfo - { - User = new User - { - Id = 7151382, - Username = @"Mayuri Hana", - Country = new Country + User = new User { - FullName = @"Thailand", - FlagName = @"TH", + Id = 1014222, + Username = @"eLy", + Country = new Country + { + FullName = @"Japan", + FlagName = @"JP", + }, }, + Mods = new Mod[] + { + new OsuModDoubleTime(), + new OsuModHidden(), + }, + Rank = ScoreRank.B, + PP = 180, + MaxCombo = 1234, + TotalScore = 12345678, + Accuracy = 0.9854, }, - Rank = ScoreRank.D, - PP = 160, - MaxCombo = 1234, - TotalScore = 123456, - Accuracy = 0.6543, - }, + new APILegacyScoreInfo + { + User = new User + { + Id = 1541390, + Username = @"Toukai", + Country = new Country + { + FullName = @"Canada", + FlagName = @"CA", + }, + }, + Mods = new Mod[] + { + new OsuModDoubleTime(), + }, + Rank = ScoreRank.C, + PP = 170, + MaxCombo = 1234, + TotalScore = 1234567, + Accuracy = 0.8765, + }, + new APILegacyScoreInfo + { + User = new User + { + Id = 7151382, + Username = @"Mayuri Hana", + Country = new Country + { + FullName = @"Thailand", + FlagName = @"TH", + }, + }, + Rank = ScoreRank.D, + PP = 160, + MaxCombo = 1234, + TotalScore = 123456, + Accuracy = 0.6543, + }, + } }; var myBestScore = new APILegacyUserTopScoreInfo @@ -189,7 +192,39 @@ namespace osu.Game.Tests.Visual.Online Position = 1337, }; - foreach (var s in scores) + var oneScore = new APILegacyScores + { + Scores = new List + { + new APILegacyScoreInfo + { + User = new User + { + Id = 6602580, + Username = @"waaiiru", + Country = new Country + { + FullName = @"Spain", + FlagName = @"ES", + }, + }, + Mods = new Mod[] + { + new OsuModDoubleTime(), + new OsuModHidden(), + new OsuModFlashlight(), + new OsuModHardRock(), + }, + Rank = ScoreRank.XH, + PP = 200, + MaxCombo = 1234, + TotalScore = 1234567890, + Accuracy = 1, + } + } + }; + + foreach (var s in allScores.Scores) { s.Statistics.Add(HitResult.Great, RNG.Next(2000)); s.Statistics.Add(HitResult.Good, RNG.Next(2000)); @@ -199,16 +234,16 @@ namespace osu.Game.Tests.Visual.Online AddStep("Load all scores", () => { - scoresContainer.Scores = scores; - scoresContainer.UserScore = myBestScore; + allScores.UserScore = null; + scoresContainer.Scores = allScores; }); - AddStep("Load null scores", () => + AddStep("Load null scores", () => scoresContainer.Scores = null); + AddStep("Load only one score", () => scoresContainer.Scores = oneScore); + AddStep("Load scores with my best", () => { - scoresContainer.Scores = null; - scoresContainer.UserScore = null; + allScores.UserScore = myBestScore; + scoresContainer.Scores = allScores; }); - AddStep("Load only one score", () => scoresContainer.Scores = new[] { scores.First() }); - AddStep("Add my best score", () => scoresContainer.UserScore = myBestScore); } [BackgroundDependencyLoader] diff --git a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs index 30685fb826..7e0f3d0b1c 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs @@ -5,15 +5,11 @@ using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; -using osu.Game.Beatmaps; using osu.Game.Graphics; using osu.Game.Graphics.UserInterface; -using osu.Game.Online.API; -using osu.Game.Online.API.Requests; using osuTK; using System.Collections.Generic; using System.Linq; -using osu.Game.Scoring; using osu.Game.Online.API.Requests.Responses; namespace osu.Game.Overlays.BeatmapSet.Scores @@ -29,9 +25,6 @@ namespace osu.Game.Overlays.BeatmapSet.Scores private readonly FillFlowContainer topScoresContainer; private readonly LoadingAnimation loadingAnimation; - [Resolved] - private IAPIProvider api { get; set; } - public ScoresContainer() { RelativeSizeAxes = Axes.X; @@ -72,7 +65,7 @@ namespace osu.Game.Overlays.BeatmapSet.Scores loadingAnimation = new LoadingAnimation { Alpha = 0, - Margin = new MarginPadding(20) + Margin = new MarginPadding(20), }, }; } @@ -84,87 +77,46 @@ namespace osu.Game.Overlays.BeatmapSet.Scores updateDisplay(); } - private bool loading + public bool Loading { - set => loadingAnimation.FadeTo(value ? 1 : 0, fade_duration); + set + { + loadingAnimation.FadeTo(value ? 1 : 0, fade_duration); + + if (value) + Scores = null; + } } - private GetScoresRequest getScoresRequest; - private IReadOnlyList scores; + private APILegacyScores scores; - public IReadOnlyList Scores + public APILegacyScores Scores { get => scores; set { - getScoresRequest?.Cancel(); scores = value; updateDisplay(); } } - private APILegacyUserTopScoreInfo userScore; - - public APILegacyUserTopScoreInfo UserScore - { - get => userScore; - set - { - getScoresRequest?.Cancel(); - userScore = value; - - updateDisplay(); - } - } - - private BeatmapInfo beatmap; - - public BeatmapInfo Beatmap - { - get => beatmap; - set - { - beatmap = value; - - Scores = null; - - if (beatmap?.OnlineBeatmapID.HasValue != true) - return; - - loading = true; - - getScoresRequest = new GetScoresRequest(beatmap, beatmap.Ruleset); - getScoresRequest.Success += r => Schedule(() => - { - scores = r.Scores; - userScore = r.UserScore; - updateDisplay(); - }); - api.Queue(getScoresRequest); - } - } - private void updateDisplay() { - loading = false; topScoresContainer.Clear(); - scoreTable.Scores = scores?.Count > 1 ? scores : new List(); - scoreTable.FadeTo(scores?.Count > 1 ? 1 : 0); + scoreTable.Scores = scores?.Scores.Count > 1 ? scores.Scores : new List(); + scoreTable.FadeTo(scores?.Scores.Count > 1 ? 1 : 0); - if (scores?.Any() == true) + if (scores?.Scores.Any() == true) { - topScoresContainer.Add(new DrawableTopScore(scores.FirstOrDefault())); + topScoresContainer.Add(new DrawableTopScore(scores.Scores.FirstOrDefault())); + + var userScore = scores.UserScore; if (userScore != null && userScore.Position != 1) topScoresContainer.Add(new DrawableTopScore(userScore.Score, userScore.Position)); } } - - protected override void Dispose(bool isDisposing) - { - getScoresRequest?.Cancel(); - } } } diff --git a/osu.Game/Overlays/BeatmapSetOverlay.cs b/osu.Game/Overlays/BeatmapSetOverlay.cs index 19f6a3f692..df132f9d47 100644 --- a/osu.Game/Overlays/BeatmapSetOverlay.cs +++ b/osu.Game/Overlays/BeatmapSetOverlay.cs @@ -11,6 +11,7 @@ using osu.Framework.Input.Events; using osu.Game.Beatmaps; using osu.Game.Graphics; using osu.Game.Graphics.Containers; +using osu.Game.Online.API; using osu.Game.Online.API.Requests; using osu.Game.Overlays.BeatmapSet; using osu.Game.Overlays.BeatmapSet.Scores; @@ -30,9 +31,14 @@ namespace osu.Game.Overlays protected readonly Header Header; private RulesetStore rulesets; + private ScoresContainer scores; + private GetScoresRequest getScoresRequest; private readonly Bindable beatmapSet = new Bindable(); + [Resolved] + private IAPIProvider api { get; set; } + // receive input outside our bounds so we can trigger a close event on ourselves. public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) => true; @@ -40,7 +46,6 @@ namespace osu.Game.Overlays { OsuScrollContainer scroll; Info info; - ScoresContainer scores; Children = new Drawable[] { @@ -74,12 +79,33 @@ namespace osu.Game.Overlays Header.Picker.Beatmap.ValueChanged += b => { info.Beatmap = b.NewValue; - scores.Beatmap = b.NewValue; + getScores(b.NewValue); scroll.ScrollToStart(); }; } + private void getScores(BeatmapInfo b) + { + getScoresRequest?.Cancel(); + + if (b?.OnlineBeatmapID.HasValue != true) + { + scores.Scores = null; + return; + } + + scores.Loading = true; + + getScoresRequest = new GetScoresRequest(b, b.Ruleset); + getScoresRequest.Success += r => Schedule(() => + { + scores.Scores = r; + scores.Loading = false; + }); + api.Queue(getScoresRequest); + } + [BackgroundDependencyLoader] private void load(RulesetStore rulesets) { From 8d46d4a28e6fc0a6ba3c72df86faac97c4439dfd Mon Sep 17 00:00:00 2001 From: Andrei Zavatski Date: Tue, 9 Jul 2019 08:09:31 +0300 Subject: [PATCH 236/267] Fix grade layout --- .../BeatmapSet/Scores/TopScoreUserSection.cs | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs b/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs index 385d8ff38c..056fe71a39 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs @@ -39,19 +39,30 @@ namespace osu.Game.Overlays.BeatmapSet.Scores Spacing = new Vector2(10, 0), Children = new Drawable[] { - rankText = new OsuSpriteText + new FillFlowContainer { Anchor = Anchor.Centre, Origin = Anchor.Centre, - Text = $"#{position.ToString()}", - Font = OsuFont.GetFont(size: 30, weight: FontWeight.Bold, italics: true) - }, - rank = new UpdateableRank(ScoreRank.D) - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Size = new Vector2(40), - FillMode = FillMode.Fit, + AutoSizeAxes = Axes.Both, + Direction = FillDirection.Vertical, + Spacing = new Vector2(0, 3), + Children = new Drawable[] + { + rankText = new OsuSpriteText + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Text = $"#{position.ToString()}", + Font = OsuFont.GetFont(size: 30, weight: FontWeight.Bold, italics: true) + }, + rank = new UpdateableRank(ScoreRank.D) + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Size = new Vector2(40), + FillMode = FillMode.Fit, + }, + } }, avatar = new UpdateableAvatar(hideImmediately: true) { From eb4ef8f6ac8a2c32cb53f4f1cc006e687e7252dc Mon Sep 17 00:00:00 2001 From: Andrei Zavatski Date: Tue, 9 Jul 2019 08:25:10 +0300 Subject: [PATCH 237/267] CI fixes --- osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs | 1 - osu.Game/Overlays/BeatmapSetOverlay.cs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs b/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs index 730bf0d4e2..827a300a5e 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; -using System.Linq; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; diff --git a/osu.Game/Overlays/BeatmapSetOverlay.cs b/osu.Game/Overlays/BeatmapSetOverlay.cs index df132f9d47..44475dc53c 100644 --- a/osu.Game/Overlays/BeatmapSetOverlay.cs +++ b/osu.Game/Overlays/BeatmapSetOverlay.cs @@ -31,7 +31,7 @@ namespace osu.Game.Overlays protected readonly Header Header; private RulesetStore rulesets; - private ScoresContainer scores; + private readonly ScoresContainer scores; private GetScoresRequest getScoresRequest; private readonly Bindable beatmapSet = new Bindable(); From 8d6af1625abda2a84879c508419e116c57448e75 Mon Sep 17 00:00:00 2001 From: Andrei Zavatski Date: Tue, 9 Jul 2019 11:40:51 +0300 Subject: [PATCH 238/267] Visibility improvements --- .../Visual/Online/TestSceneScoresContainer.cs | 1 + .../BeatmapSet/Scores/ScoresContainer.cs | 142 ++++++++++++++---- osu.Game/Overlays/BeatmapSetOverlay.cs | 6 +- 3 files changed, 118 insertions(+), 31 deletions(-) diff --git a/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs b/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs index 827a300a5e..c414b6b940 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs @@ -243,6 +243,7 @@ namespace osu.Game.Tests.Visual.Online allScores.UserScore = myBestScore; scoresContainer.Scores = allScores; }); + AddStep("Trigger loading", () => scoresContainer.Loading = !scoresContainer.Loading); } [BackgroundDependencyLoader] diff --git a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs index 7e0f3d0b1c..eacbe6200a 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs @@ -17,13 +17,14 @@ namespace osu.Game.Overlays.BeatmapSet.Scores public class ScoresContainer : CompositeDrawable { private const int spacing = 15; - private const int fade_duration = 200; + private const int padding = 20; private readonly Box background; private readonly ScoreTable scoreTable; private readonly FillFlowContainer topScoresContainer; - private readonly LoadingAnimation loadingAnimation; + private readonly ContentContainer resizableContainer; + private readonly LoadingContainer loadingContainer; public ScoresContainer() { @@ -38,53 +39,85 @@ namespace osu.Game.Overlays.BeatmapSet.Scores }, new FillFlowContainer { - Anchor = Anchor.TopCentre, - Origin = Anchor.TopCentre, - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, - Width = 0.95f, Direction = FillDirection.Vertical, - Spacing = new Vector2(0, spacing), - Margin = new MarginPadding { Vertical = spacing }, + AutoSizeAxes = Axes.Y, + RelativeSizeAxes = Axes.X, Children = new Drawable[] { - topScoresContainer = new FillFlowContainer + loadingContainer = new LoadingContainer { RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, - Direction = FillDirection.Vertical, - Spacing = new Vector2(0, 5), + Masking = true, }, - scoreTable = new ScoreTable + resizableContainer = new ContentContainer { - Anchor = Anchor.TopCentre, - Origin = Anchor.TopCentre, - } + RelativeSizeAxes = Axes.X, + Masking = true, + Children = new Drawable[] + { + new FillFlowContainer + { + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Width = 0.95f, + Direction = FillDirection.Vertical, + Spacing = new Vector2(0, spacing), + Padding = new MarginPadding { Vertical = padding }, + Children = new Drawable[] + { + topScoresContainer = new FillFlowContainer + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Direction = FillDirection.Vertical, + Spacing = new Vector2(0, 5), + }, + scoreTable = new ScoreTable + { + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, + } + } + }, + } + }, } - }, - loadingAnimation = new LoadingAnimation - { - Alpha = 0, - Margin = new MarginPadding(20), - }, + } }; + + Loading = true; } [BackgroundDependencyLoader] private void load(OsuColour colours) { background.Colour = colours.Gray2; - updateDisplay(); } + private bool loading; + public bool Loading { + get => loading; set { - loadingAnimation.FadeTo(value ? 1 : 0, fade_duration); + if (loading == value) + return; + + loading = value; if (value) - Scores = null; + { + loadingContainer.Show(); + resizableContainer.Hide(); + } + else + { + loadingContainer.Hide(); + resizableContainer.Show(); + } } } @@ -117,6 +150,63 @@ namespace osu.Game.Overlays.BeatmapSet.Scores if (userScore != null && userScore.Position != 1) topScoresContainer.Add(new DrawableTopScore(userScore.Score, userScore.Position)); } + + Loading = false; + } + + private class ContentContainer : VisibilityContainer + { + private const int duration = 300; + + private float maxHeight; + + protected override void PopIn() => this.ResizeHeightTo(maxHeight, duration, Easing.OutQuint); + + protected override void PopOut() => this.ResizeHeightTo(0, duration, Easing.OutQuint); + + protected override void UpdateAfterChildren() + { + base.UpdateAfterChildren(); + + if (State.Value == Visibility.Hidden) + return; + + float height = 0; + + foreach (var c in Children) + { + height += c.Height; + } + + maxHeight = height; + + this.ResizeHeightTo(maxHeight, duration, Easing.OutQuint); + } + } + + private class LoadingContainer : VisibilityContainer + { + private const int duration = 300; + private const int height = 50; + + private readonly LoadingAnimation loadingAnimation; + + public LoadingContainer() + { + Child = loadingAnimation = new LoadingAnimation(); + } + + protected override void PopIn() + { + this.ResizeHeightTo(height, duration, Easing.OutQuint); + loadingAnimation.Show(); + } + + protected override void PopOut() + { + this.ResizeHeightTo(0, duration, Easing.OutQuint); + loadingAnimation.Hide(); + } } } } diff --git a/osu.Game/Overlays/BeatmapSetOverlay.cs b/osu.Game/Overlays/BeatmapSetOverlay.cs index 44475dc53c..1c408ead54 100644 --- a/osu.Game/Overlays/BeatmapSetOverlay.cs +++ b/osu.Game/Overlays/BeatmapSetOverlay.cs @@ -98,11 +98,7 @@ namespace osu.Game.Overlays scores.Loading = true; getScoresRequest = new GetScoresRequest(b, b.Ruleset); - getScoresRequest.Success += r => Schedule(() => - { - scores.Scores = r; - scores.Loading = false; - }); + getScoresRequest.Success += r => Schedule(() => scores.Scores = r); api.Queue(getScoresRequest); } From e8b9b1b0bfe52812948b27b6fbaf834699f27ef3 Mon Sep 17 00:00:00 2001 From: Andrei Zavatski Date: Tue, 9 Jul 2019 12:16:58 +0300 Subject: [PATCH 239/267] visibility logic adjustments --- .../Visual/Online/TestSceneScoresContainer.cs | 15 ++--- .../BeatmapSet/Scores/ScoresContainer.cs | 67 ++++++++----------- 2 files changed, 35 insertions(+), 47 deletions(-) diff --git a/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs b/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs index c414b6b940..10207ea192 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs @@ -3,12 +3,10 @@ using System; using System.Collections.Generic; -using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.MathUtils; -using osu.Game.Graphics; using osu.Game.Online.API.Requests.Responses; using osu.Game.Overlays.BeatmapSet.Scores; using osu.Game.Rulesets.Mods; @@ -16,6 +14,7 @@ using osu.Game.Rulesets.Osu.Mods; using osu.Game.Rulesets.Scoring; using osu.Game.Scoring; using osu.Game.Users; +using osuTK.Graphics; namespace osu.Game.Tests.Visual.Online { @@ -44,7 +43,11 @@ namespace osu.Game.Tests.Visual.Online Width = 0.8f, Children = new Drawable[] { - background = new Box { RelativeSizeAxes = Axes.Both }, + background = new Box + { + RelativeSizeAxes = Axes.Both, + Colour = Color4.Black, + }, scoresContainer = new ScoresContainer(), } }; @@ -245,11 +248,5 @@ namespace osu.Game.Tests.Visual.Online }); AddStep("Trigger loading", () => scoresContainer.Loading = !scoresContainer.Loading); } - - [BackgroundDependencyLoader] - private void load(OsuColour colours) - { - background.Colour = colours.Gray2; - } } } diff --git a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs index eacbe6200a..63e18f3da7 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs @@ -23,7 +23,7 @@ namespace osu.Game.Overlays.BeatmapSet.Scores private readonly ScoreTable scoreTable; private readonly FillFlowContainer topScoresContainer; - private readonly ContentContainer resizableContainer; + private readonly ContentContainer contentContainer; private readonly LoadingContainer loadingContainer; public ScoresContainer() @@ -49,36 +49,33 @@ namespace osu.Game.Overlays.BeatmapSet.Scores RelativeSizeAxes = Axes.X, Masking = true, }, - resizableContainer = new ContentContainer + contentContainer = new ContentContainer { RelativeSizeAxes = Axes.X, Masking = true, - Children = new Drawable[] + Child = new FillFlowContainer { - new FillFlowContainer + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Width = 0.95f, + Direction = FillDirection.Vertical, + Spacing = new Vector2(0, spacing), + Padding = new MarginPadding { Vertical = padding }, + Children = new Drawable[] { - Anchor = Anchor.TopCentre, - Origin = Anchor.TopCentre, - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, - Width = 0.95f, - Direction = FillDirection.Vertical, - Spacing = new Vector2(0, spacing), - Padding = new MarginPadding { Vertical = padding }, - Children = new Drawable[] + topScoresContainer = new FillFlowContainer { - topScoresContainer = new FillFlowContainer - { - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, - Direction = FillDirection.Vertical, - Spacing = new Vector2(0, 5), - }, - scoreTable = new ScoreTable - { - Anchor = Anchor.TopCentre, - Origin = Anchor.TopCentre, - } + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Direction = FillDirection.Vertical, + Spacing = new Vector2(0, 5), + }, + scoreTable = new ScoreTable + { + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, } }, } @@ -103,20 +100,21 @@ namespace osu.Game.Overlays.BeatmapSet.Scores get => loading; set { - if (loading == value) - return; - loading = value; if (value) { loadingContainer.Show(); - resizableContainer.Hide(); + contentContainer.Hide(); } else { loadingContainer.Hide(); - resizableContainer.Show(); + + if (scores == null || scores?.Scores.Count < 1) + contentContainer.Hide(); + else + contentContainer.Show(); } } } @@ -171,14 +169,7 @@ namespace osu.Game.Overlays.BeatmapSet.Scores if (State.Value == Visibility.Hidden) return; - float height = 0; - - foreach (var c in Children) - { - height += c.Height; - } - - maxHeight = height; + maxHeight = Child.DrawHeight; this.ResizeHeightTo(maxHeight, duration, Easing.OutQuint); } From 276873ff8ada90e18a9fde2b8f6e2641828c2e17 Mon Sep 17 00:00:00 2001 From: Andrei Zavatski Date: Tue, 9 Jul 2019 12:28:59 +0300 Subject: [PATCH 240/267] remove unused field --- osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs b/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs index 10207ea192..4ce689ce6b 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs @@ -29,8 +29,6 @@ namespace osu.Game.Tests.Visual.Online typeof(ScoreTableRowBackground), }; - private readonly Box background; - public TestSceneScoresContainer() { ScoresContainer scoresContainer; @@ -43,7 +41,7 @@ namespace osu.Game.Tests.Visual.Online Width = 0.8f, Children = new Drawable[] { - background = new Box + new Box { RelativeSizeAxes = Axes.Both, Colour = Color4.Black, From 2546f647be43d3e44477fa962a22f6dcd768e510 Mon Sep 17 00:00:00 2001 From: Desconocidosmh Date: Tue, 9 Jul 2019 11:32:49 +0200 Subject: [PATCH 241/267] Completely change the way we fix the bug --- osu.Game/OsuGame.cs | 6 +++--- osu.Game/Overlays/MusicController.cs | 4 ++-- osu.Game/Screens/Menu/MainMenu.cs | 18 ++++++++---------- osu.Game/Screens/OsuScreen.cs | 11 +---------- osu.Game/Screens/Select/SongSelect.cs | 7 ++++--- 5 files changed, 18 insertions(+), 28 deletions(-) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 325d2cbd85..0a472d4dc1 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -306,7 +306,7 @@ namespace osu.Game private void currentTrackCompleted() { if (!Beatmap.Value.Track.Looping && !Beatmap.Disabled) - MusicController.NextTrack(); + musicController.NextTrack(); } #endregion @@ -484,7 +484,7 @@ namespace osu.Game Origin = Anchor.TopRight, }, rightFloatingOverlayContent.Add, true); - loadComponentSingleFile(MusicController = new MusicController + loadComponentSingleFile(musicController = new MusicController { GetToolbarHeight = () => ToolbarOffset, Anchor = Anchor.TopRight, @@ -752,7 +752,7 @@ namespace osu.Game private ScalingContainer screenContainer; - public MusicController MusicController { get; private set; } + private MusicController musicController; protected override bool OnExiting() { diff --git a/osu.Game/Overlays/MusicController.cs b/osu.Game/Overlays/MusicController.cs index 3db71d39ee..ad0c0717ac 100644 --- a/osu.Game/Overlays/MusicController.cs +++ b/osu.Game/Overlays/MusicController.cs @@ -55,6 +55,8 @@ namespace osu.Game.Overlays private Container dragContainer; private Container playerContainer; + public bool UserRequestedPause { get; private set; } + [Resolved] private Bindable beatmap { get; set; } @@ -66,8 +68,6 @@ namespace osu.Game.Overlays /// public Func GetToolbarHeight; - public bool UserRequestedPause { get; private set; } - public MusicController() { Width = 400; diff --git a/osu.Game/Screens/Menu/MainMenu.cs b/osu.Game/Screens/Menu/MainMenu.cs index dcce49179d..078f9c5a15 100644 --- a/osu.Game/Screens/Menu/MainMenu.cs +++ b/osu.Game/Screens/Menu/MainMenu.cs @@ -42,6 +42,9 @@ namespace osu.Game.Screens.Menu [Resolved] private GameHost host { get; set; } + [Resolved] + private MusicController musicController { get; set; } + private BackgroundScreenDefault background; protected override BackgroundScreen CreateBackground() => background; @@ -120,15 +123,6 @@ namespace osu.Game.Screens.Menu var track = Beatmap.Value.Track; var metadata = Beatmap.Value.Metadata; - if (last is Intro && track != null && !Game.MusicController.UserRequestedPause) - { - if (!track.IsRunning) - { - track.Seek(metadata.PreviewTime != -1 ? metadata.PreviewTime : 0.4f * track.Length); - track.Start(); - } - } - Beatmap.ValueChanged += beatmap_ValueChanged; } @@ -190,7 +184,11 @@ namespace osu.Game.Screens.Menu //we may have consumed our preloaded instance, so let's make another. preloadSongSelect(); - ResumeIfNoUserPauseRequested(); + if (Beatmap.Value.Track != null && !musicController.UserRequestedPause) + { + Beatmap.Value.Track.Tempo.Value = 1; + Beatmap.Value.Track.Start(); + } } public override bool OnExiting(IScreen next) diff --git a/osu.Game/Screens/OsuScreen.cs b/osu.Game/Screens/OsuScreen.cs index 0682710133..328631ff9c 100644 --- a/osu.Game/Screens/OsuScreen.cs +++ b/osu.Game/Screens/OsuScreen.cs @@ -50,7 +50,7 @@ namespace osu.Game.Screens public virtual bool CursorVisible => true; - protected new OsuGame Game => base.Game as OsuGame; + protected new OsuGameBase Game => base.Game as OsuGameBase; /// /// The to set the user's activity automatically to when this screen is entered @@ -179,15 +179,6 @@ namespace osu.Game.Screens api.Activity.Value = activity; } - protected void ResumeIfNoUserPauseRequested() - { - if (Beatmap.Value.Track != null && !Game.MusicController.UserRequestedPause) - { - Beatmap.Value.Track.Tempo.Value = 1; - Beatmap.Value.Track.Start(); - } - } - /// /// Fired when this screen was entered or resumed and the logo state is required to be adjusted. /// diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index 17b2ae376f..dd115e04d4 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -87,6 +87,9 @@ namespace osu.Game.Screens.Select private readonly Bindable decoupledRuleset = new Bindable(); + [Resolved] + private MusicController musicController { get; set; } + [Cached] [Cached(Type = typeof(IBindable>))] private readonly Bindable> mods = new Bindable>(Array.Empty()); // Bound to the game's mods, but is not reset on exiting @@ -426,8 +429,6 @@ namespace osu.Game.Screens.Select { base.OnEntering(last); - ResumeIfNoUserPauseRequested(); - this.FadeInFromZero(250); FilterControl.Activate(); } @@ -572,7 +573,7 @@ namespace osu.Game.Screens.Select { Track track = Beatmap.Value.Track; - if (!track.IsRunning || restart) + if ((!track.IsRunning || restart) && !musicController.UserRequestedPause) { track.RestartPoint = Beatmap.Value.Metadata.PreviewTime; track.Restart(); From 3472979d0b4d9d2d652ded1a3b9f9c56e2642e1f Mon Sep 17 00:00:00 2001 From: Oskar Solecki <31374466+Desconocidosmh@users.noreply.github.com> Date: Tue, 9 Jul 2019 12:53:40 +0200 Subject: [PATCH 242/267] Make sure exiting editor doesn't unpause the music --- osu.Game/Screens/Edit/Editor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Edit/Editor.cs b/osu.Game/Screens/Edit/Editor.cs index 676e060433..8b3cf1ec90 100644 --- a/osu.Game/Screens/Edit/Editor.cs +++ b/osu.Game/Screens/Edit/Editor.cs @@ -238,7 +238,7 @@ namespace osu.Game.Screens.Edit public override bool OnExiting(IScreen next) { Background.FadeColour(Color4.White, 500); - + Beatmap.Value.Track?.Stop(); return base.OnExiting(next); } From 2472c6b4b121d788c5ef835e5156eb179d582f8e Mon Sep 17 00:00:00 2001 From: Shane Woolcock Date: Tue, 9 Jul 2019 21:07:29 +0930 Subject: [PATCH 243/267] Fix iOS visual tests not supporting raw keyboard handler --- osu.Game.Rulesets.Catch.Tests.iOS/Application.cs | 2 +- osu.Game.Rulesets.Mania.Tests.iOS/Application.cs | 2 +- osu.Game.Rulesets.Osu.Tests.iOS/Application.cs | 2 +- osu.Game.Rulesets.Taiko.Tests.iOS/Application.cs | 2 +- osu.Game.Tests.iOS/Application.cs | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/osu.Game.Rulesets.Catch.Tests.iOS/Application.cs b/osu.Game.Rulesets.Catch.Tests.iOS/Application.cs index 44817c1304..beca477943 100644 --- a/osu.Game.Rulesets.Catch.Tests.iOS/Application.cs +++ b/osu.Game.Rulesets.Catch.Tests.iOS/Application.cs @@ -9,7 +9,7 @@ namespace osu.Game.Rulesets.Catch.Tests.iOS { public static void Main(string[] args) { - UIApplication.Main(args, null, "AppDelegate"); + UIApplication.Main(args, "GameUIApplication", "AppDelegate"); } } } diff --git a/osu.Game.Rulesets.Mania.Tests.iOS/Application.cs b/osu.Game.Rulesets.Mania.Tests.iOS/Application.cs index d47ac4643f..0362402320 100644 --- a/osu.Game.Rulesets.Mania.Tests.iOS/Application.cs +++ b/osu.Game.Rulesets.Mania.Tests.iOS/Application.cs @@ -9,7 +9,7 @@ namespace osu.Game.Rulesets.Mania.Tests.iOS { public static void Main(string[] args) { - UIApplication.Main(args, null, "AppDelegate"); + UIApplication.Main(args, "GameUIApplication", "AppDelegate"); } } } diff --git a/osu.Game.Rulesets.Osu.Tests.iOS/Application.cs b/osu.Game.Rulesets.Osu.Tests.iOS/Application.cs index 7a0797a909..3718264a42 100644 --- a/osu.Game.Rulesets.Osu.Tests.iOS/Application.cs +++ b/osu.Game.Rulesets.Osu.Tests.iOS/Application.cs @@ -9,7 +9,7 @@ namespace osu.Game.Rulesets.Osu.Tests.iOS { public static void Main(string[] args) { - UIApplication.Main(args, null, "AppDelegate"); + UIApplication.Main(args, "GameUIApplication", "AppDelegate"); } } } diff --git a/osu.Game.Rulesets.Taiko.Tests.iOS/Application.cs b/osu.Game.Rulesets.Taiko.Tests.iOS/Application.cs index 6613e9e2b4..330cb42901 100644 --- a/osu.Game.Rulesets.Taiko.Tests.iOS/Application.cs +++ b/osu.Game.Rulesets.Taiko.Tests.iOS/Application.cs @@ -9,7 +9,7 @@ namespace osu.Game.Rulesets.Taiko.Tests.iOS { public static void Main(string[] args) { - UIApplication.Main(args, null, "AppDelegate"); + UIApplication.Main(args, "GameUIApplication", "AppDelegate"); } } } diff --git a/osu.Game.Tests.iOS/Application.cs b/osu.Game.Tests.iOS/Application.cs index a23fe4e129..d96a3e27a4 100644 --- a/osu.Game.Tests.iOS/Application.cs +++ b/osu.Game.Tests.iOS/Application.cs @@ -9,7 +9,7 @@ namespace osu.Game.Tests.iOS { public static void Main(string[] args) { - UIApplication.Main(args, null, "AppDelegate"); + UIApplication.Main(args, "GameUIApplication", "AppDelegate"); } } } From e0c1fb78181571b926f12e84e4f6a508861191ad Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Tue, 9 Jul 2019 14:47:54 +0300 Subject: [PATCH 244/267] Compare by milliseconds for length --- osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs b/osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs index 490012da61..c38b13cfca 100644 --- a/osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs +++ b/osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs @@ -49,11 +49,7 @@ namespace osu.Game.Screens.Select.Carousel return Beatmap.StarDifficulty.CompareTo(otherBeatmap.Beatmap.StarDifficulty); case SortMode.Length: - // Length comparing must be in seconds - if (TimeSpan.FromMilliseconds(Beatmap.Length).Seconds != TimeSpan.FromMilliseconds(otherBeatmap.Beatmap.Length).Seconds) - return Beatmap.Length.CompareTo(otherBeatmap.Beatmap.Length); - - goto case SortMode.Difficulty; + return Beatmap.Length.CompareTo(otherBeatmap.Beatmap.Length); } } From 38bc652bf2b8b740fcf1008dcb67759f93fccc52 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Tue, 9 Jul 2019 17:02:51 +0300 Subject: [PATCH 245/267] Remove sorting by length for beatmaps --- osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs b/osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs index c38b13cfca..712ab7b571 100644 --- a/osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs +++ b/osu.Game/Screens/Select/Carousel/CarouselBeatmap.cs @@ -47,9 +47,6 @@ namespace osu.Game.Screens.Select.Carousel if (ruleset != 0) return ruleset; return Beatmap.StarDifficulty.CompareTo(otherBeatmap.Beatmap.StarDifficulty); - - case SortMode.Length: - return Beatmap.Length.CompareTo(otherBeatmap.Beatmap.Length); } } From f3329f4d792dc97f064f5ab0f0e51384b9ae795c Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Tue, 9 Jul 2019 17:22:21 +0300 Subject: [PATCH 246/267] Use a more readable code for calculating length --- osu.Game/Beatmaps/BeatmapManager.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 6fe70b6ec6..4f67139706 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -315,10 +315,15 @@ namespace osu.Game.Beatmaps private double calculateLength(IBeatmap b) { - var lastObject = b.HitObjects.LastOrDefault(); - var endTime = (lastObject as IHasEndTime)?.EndTime ?? lastObject?.StartTime ?? 0; + if (!b.HitObjects.Any()) + return 0; - return endTime - b.HitObjects.FirstOrDefault()?.StartTime ?? 0; + var lastObject = b.HitObjects.Last(); + + double endTime = (lastObject as IHasEndTime)?.EndTime ?? lastObject.StartTime; + double startTime = b.HitObjects.First().StartTime; + + return endTime - startTime; } /// From 1485c273ab1f3b36f7357823db220536e79c4a6b Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Tue, 9 Jul 2019 17:31:15 +0300 Subject: [PATCH 247/267] Describe the xmldoc mo --- osu.Game/Beatmaps/BeatmapInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/BeatmapInfo.cs b/osu.Game/Beatmaps/BeatmapInfo.cs index fa1282647e..8042f6b4b9 100644 --- a/osu.Game/Beatmaps/BeatmapInfo.cs +++ b/osu.Game/Beatmaps/BeatmapInfo.cs @@ -52,7 +52,7 @@ namespace osu.Game.Beatmaps public BeatmapOnlineInfo OnlineInfo { get; set; } /// - /// The playable length of this beatmap. + /// The playable length in milliseconds of this beatmap. /// public double Length { get; set; } From 9907a58ec4aaf3427769b2044248d060f3a0563b Mon Sep 17 00:00:00 2001 From: Andrei Zavatski Date: Tue, 9 Jul 2019 17:38:17 +0300 Subject: [PATCH 248/267] Revert animations and apply suggested changes --- .../Visual/Online/TestSceneScoresContainer.cs | 1 - .../BeatmapSet/Scores/DrawableTopScore.cs | 3 +- .../BeatmapSet/Scores/ScoresContainer.cs | 137 ++++-------------- .../BeatmapSet/Scores/TopScoreUserSection.cs | 9 +- osu.Game/Overlays/BeatmapSetOverlay.cs | 14 +- 5 files changed, 45 insertions(+), 119 deletions(-) diff --git a/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs b/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs index 4ce689ce6b..824280fe68 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs @@ -244,7 +244,6 @@ namespace osu.Game.Tests.Visual.Online allScores.UserScore = myBestScore; scoresContainer.Scores = allScores; }); - AddStep("Trigger loading", () => scoresContainer.Loading = !scoresContainer.Loading); } } } diff --git a/osu.Game/Overlays/BeatmapSet/Scores/DrawableTopScore.cs b/osu.Game/Overlays/BeatmapSet/Scores/DrawableTopScore.cs index bdae730f7e..d263483046 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/DrawableTopScore.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/DrawableTopScore.cs @@ -59,11 +59,12 @@ namespace osu.Game.Overlays.BeatmapSet.Scores { new Drawable[] { - new TopScoreUserSection(position) + new TopScoreUserSection { Anchor = Anchor.CentreLeft, Origin = Anchor.CentreLeft, Score = score, + ScorePosition = position, }, null, new TopScoreStatisticsSection diff --git a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs index 63e18f3da7..94bcfdee4f 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs @@ -17,20 +17,17 @@ namespace osu.Game.Overlays.BeatmapSet.Scores public class ScoresContainer : CompositeDrawable { private const int spacing = 15; - private const int padding = 20; + private const int fade_duration = 200; private readonly Box background; private readonly ScoreTable scoreTable; - private readonly FillFlowContainer topScoresContainer; - private readonly ContentContainer contentContainer; - private readonly LoadingContainer loadingContainer; + private readonly LoadingAnimation loadingAnimation; public ScoresContainer() { RelativeSizeAxes = Axes.X; AutoSizeAxes = Axes.Y; - InternalChildren = new Drawable[] { background = new Box @@ -39,83 +36,53 @@ namespace osu.Game.Overlays.BeatmapSet.Scores }, new FillFlowContainer { - Direction = FillDirection.Vertical, - AutoSizeAxes = Axes.Y, + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Width = 0.95f, + Direction = FillDirection.Vertical, + Spacing = new Vector2(0, spacing), + Margin = new MarginPadding { Vertical = spacing }, Children = new Drawable[] { - loadingContainer = new LoadingContainer + topScoresContainer = new FillFlowContainer { RelativeSizeAxes = Axes.X, - Masking = true, + AutoSizeAxes = Axes.Y, + Direction = FillDirection.Vertical, + Spacing = new Vector2(0, 5), }, - contentContainer = new ContentContainer + scoreTable = new ScoreTable { - RelativeSizeAxes = Axes.X, - Masking = true, - Child = new FillFlowContainer - { - Anchor = Anchor.TopCentre, - Origin = Anchor.TopCentre, - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, - Width = 0.95f, - Direction = FillDirection.Vertical, - Spacing = new Vector2(0, spacing), - Padding = new MarginPadding { Vertical = padding }, - Children = new Drawable[] - { - topScoresContainer = new FillFlowContainer - { - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, - Direction = FillDirection.Vertical, - Spacing = new Vector2(0, 5), - }, - scoreTable = new ScoreTable - { - Anchor = Anchor.TopCentre, - Origin = Anchor.TopCentre, - } - }, - } - }, + Anchor = Anchor.TopCentre, + Origin = Anchor.TopCentre, + } } - } + }, + loadingAnimation = new LoadingAnimation + { + Alpha = 0, + Margin = new MarginPadding(20), + }, }; - - Loading = true; } [BackgroundDependencyLoader] private void load(OsuColour colours) { background.Colour = colours.Gray2; + updateDisplay(); } - private bool loading; - public bool Loading { - get => loading; set { - loading = value; + loadingAnimation.FadeTo(value ? 1 : 0, fade_duration); if (value) - { - loadingContainer.Show(); - contentContainer.Hide(); - } - else - { - loadingContainer.Hide(); - - if (scores == null || scores?.Scores.Count < 1) - contentContainer.Hide(); - else - contentContainer.Show(); - } + Scores = null; } } @@ -139,7 +106,7 @@ namespace osu.Game.Overlays.BeatmapSet.Scores scoreTable.Scores = scores?.Scores.Count > 1 ? scores.Scores : new List(); scoreTable.FadeTo(scores?.Scores.Count > 1 ? 1 : 0); - if (scores?.Scores.Any() == true) + if (scores?.Scores.Any() ?? false) { topScoresContainer.Add(new DrawableTopScore(scores.Scores.FirstOrDefault())); @@ -148,56 +115,6 @@ namespace osu.Game.Overlays.BeatmapSet.Scores if (userScore != null && userScore.Position != 1) topScoresContainer.Add(new DrawableTopScore(userScore.Score, userScore.Position)); } - - Loading = false; - } - - private class ContentContainer : VisibilityContainer - { - private const int duration = 300; - - private float maxHeight; - - protected override void PopIn() => this.ResizeHeightTo(maxHeight, duration, Easing.OutQuint); - - protected override void PopOut() => this.ResizeHeightTo(0, duration, Easing.OutQuint); - - protected override void UpdateAfterChildren() - { - base.UpdateAfterChildren(); - - if (State.Value == Visibility.Hidden) - return; - - maxHeight = Child.DrawHeight; - - this.ResizeHeightTo(maxHeight, duration, Easing.OutQuint); - } - } - - private class LoadingContainer : VisibilityContainer - { - private const int duration = 300; - private const int height = 50; - - private readonly LoadingAnimation loadingAnimation; - - public LoadingContainer() - { - Child = loadingAnimation = new LoadingAnimation(); - } - - protected override void PopIn() - { - this.ResizeHeightTo(height, duration, Easing.OutQuint); - loadingAnimation.Show(); - } - - protected override void PopOut() - { - this.ResizeHeightTo(0, duration, Easing.OutQuint); - loadingAnimation.Hide(); - } } } } diff --git a/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs b/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs index 056fe71a39..36e60b3fd9 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs @@ -28,7 +28,12 @@ namespace osu.Game.Overlays.BeatmapSet.Scores private readonly SpriteText date; private readonly UpdateableFlag flag; - public TopScoreUserSection(int position) + public int ScorePosition + { + set => rankText.Text = $"#{value}"; + } + + public TopScoreUserSection() { AutoSizeAxes = Axes.Both; @@ -52,7 +57,7 @@ namespace osu.Game.Overlays.BeatmapSet.Scores { Anchor = Anchor.Centre, Origin = Anchor.Centre, - Text = $"#{position.ToString()}", + Text = $"#1", Font = OsuFont.GetFont(size: 30, weight: FontWeight.Bold, italics: true) }, rank = new UpdateableRank(ScoreRank.D) diff --git a/osu.Game/Overlays/BeatmapSetOverlay.cs b/osu.Game/Overlays/BeatmapSetOverlay.cs index 1c408ead54..abd86df920 100644 --- a/osu.Game/Overlays/BeatmapSetOverlay.cs +++ b/osu.Game/Overlays/BeatmapSetOverlay.cs @@ -17,17 +17,14 @@ using osu.Game.Overlays.BeatmapSet; using osu.Game.Overlays.BeatmapSet.Scores; using osu.Game.Rulesets; using osuTK; - namespace osu.Game.Overlays { public class BeatmapSetOverlay : FullscreenOverlay { private const int fade_duration = 300; - public const float X_PADDING = 40; public const float TOP_PADDING = 25; public const float RIGHT_WIDTH = 275; - protected readonly Header Header; private RulesetStore rulesets; @@ -46,7 +43,6 @@ namespace osu.Game.Overlays { OsuScrollContainer scroll; Info info; - Children = new Drawable[] { new Box @@ -98,7 +94,11 @@ namespace osu.Game.Overlays scores.Loading = true; getScoresRequest = new GetScoresRequest(b, b.Ruleset); - getScoresRequest.Success += r => Schedule(() => scores.Scores = r); + getScoresRequest.Success += r => Schedule(() => + { + scores.Scores = r; + scores.Loading = false; + }); api.Queue(getScoresRequest); } @@ -123,6 +123,7 @@ namespace osu.Game.Overlays public void FetchAndShowBeatmap(int beatmapId) { beatmapSet.Value = null; + var req = new GetBeatmapSetRequest(beatmapId, BeatmapSetLookupType.BeatmapId); req.Success += res => { @@ -130,15 +131,18 @@ namespace osu.Game.Overlays Header.Picker.Beatmap.Value = Header.BeatmapSet.Value.Beatmaps.First(b => b.OnlineBeatmapID == beatmapId); }; API.Queue(req); + Show(); } public void FetchAndShowBeatmapSet(int beatmapSetId) { beatmapSet.Value = null; + var req = new GetBeatmapSetRequest(beatmapSetId); req.Success += res => beatmapSet.Value = res.ToBeatmapSet(rulesets); API.Queue(req); + Show(); } From e73f22eff8844b3ee429764801c8b4164a194eb6 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Tue, 9 Jul 2019 17:53:34 +0300 Subject: [PATCH 249/267] Convert length retrieved from online to milliseconds --- osu.Game.Tournament/Components/SongBar.cs | 2 +- osu.Game/Beatmaps/BeatmapSetInfo.cs | 2 +- osu.Game/Online/API/Requests/Responses/APIBeatmap.cs | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/osu.Game.Tournament/Components/SongBar.cs b/osu.Game.Tournament/Components/SongBar.cs index ec021a8d1f..7005c068ae 100644 --- a/osu.Game.Tournament/Components/SongBar.cs +++ b/osu.Game.Tournament/Components/SongBar.cs @@ -180,7 +180,7 @@ namespace osu.Game.Tournament.Components panelContents.Children = new Drawable[] { - new DiffPiece(("Length", TimeSpan.FromSeconds(length).ToString(@"mm\:ss"))) + new DiffPiece(("Length", TimeSpan.FromMilliseconds(length).ToString(@"mm\:ss"))) { Anchor = Anchor.CentreLeft, Origin = Anchor.BottomLeft, diff --git a/osu.Game/Beatmaps/BeatmapSetInfo.cs b/osu.Game/Beatmaps/BeatmapSetInfo.cs index 4075263e12..03bc7c7312 100644 --- a/osu.Game/Beatmaps/BeatmapSetInfo.cs +++ b/osu.Game/Beatmaps/BeatmapSetInfo.cs @@ -41,7 +41,7 @@ namespace osu.Game.Beatmaps public double MaxStarDifficulty => Beatmaps?.Max(b => b.StarDifficulty) ?? 0; /// - /// The maximum playable length of all beatmaps in this set. + /// The maximum playable length in milliseconds of all beatmaps in this set. /// public double MaxLength => Beatmaps?.Max(b => b.Length) ?? 0; diff --git a/osu.Game/Online/API/Requests/Responses/APIBeatmap.cs b/osu.Game/Online/API/Requests/Responses/APIBeatmap.cs index ff4d240bf0..f50e281dd0 100644 --- a/osu.Game/Online/API/Requests/Responses/APIBeatmap.cs +++ b/osu.Game/Online/API/Requests/Responses/APIBeatmap.cs @@ -1,6 +1,7 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. +using System; using Newtonsoft.Json; using osu.Game.Beatmaps; using osu.Game.Rulesets; @@ -71,7 +72,7 @@ namespace osu.Game.Online.API.Requests.Responses StarDifficulty = starDifficulty, OnlineBeatmapID = OnlineBeatmapID, Version = version, - Length = length, + Length = TimeSpan.FromSeconds(length).Milliseconds, Status = Status, BeatmapSet = set, Metrics = metrics, From a0389c338ba2d89e6c07579b397e101d6c4e1c1d Mon Sep 17 00:00:00 2001 From: Andrei Zavatski Date: Tue, 9 Jul 2019 17:56:08 +0300 Subject: [PATCH 250/267] CI fixes --- osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs | 1 - osu.Game/Overlays/BeatmapSetOverlay.cs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs b/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs index 36e60b3fd9..6d43ec6177 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs @@ -57,7 +57,6 @@ namespace osu.Game.Overlays.BeatmapSet.Scores { Anchor = Anchor.Centre, Origin = Anchor.Centre, - Text = $"#1", Font = OsuFont.GetFont(size: 30, weight: FontWeight.Bold, italics: true) }, rank = new UpdateableRank(ScoreRank.D) diff --git a/osu.Game/Overlays/BeatmapSetOverlay.cs b/osu.Game/Overlays/BeatmapSetOverlay.cs index abd86df920..3a17b6eec1 100644 --- a/osu.Game/Overlays/BeatmapSetOverlay.cs +++ b/osu.Game/Overlays/BeatmapSetOverlay.cs @@ -17,11 +17,11 @@ using osu.Game.Overlays.BeatmapSet; using osu.Game.Overlays.BeatmapSet.Scores; using osu.Game.Rulesets; using osuTK; + namespace osu.Game.Overlays { public class BeatmapSetOverlay : FullscreenOverlay { - private const int fade_duration = 300; public const float X_PADDING = 40; public const float TOP_PADDING = 25; public const float RIGHT_WIDTH = 275; From b9be4080d315007715870c8f2381448961691f03 Mon Sep 17 00:00:00 2001 From: Joehu Date: Tue, 9 Jul 2019 07:59:38 -0700 Subject: [PATCH 251/267] Update beatmap leaderboard to placeholder when signing out --- osu.Game/Online/Leaderboards/Leaderboard.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/osu.Game/Online/Leaderboards/Leaderboard.cs b/osu.Game/Online/Leaderboards/Leaderboard.cs index dea2ff1a21..35f7ba1c1b 100644 --- a/osu.Game/Online/Leaderboards/Leaderboard.cs +++ b/osu.Game/Online/Leaderboards/Leaderboard.cs @@ -203,8 +203,13 @@ namespace osu.Game.Online.Leaderboards public void APIStateChanged(IAPIProvider api, APIState state) { - if (state == APIState.Online) - UpdateScores(); + switch (state) + { + case APIState.Online: + case APIState.Offline: + UpdateScores(); + break; + } } protected void UpdateScores() From 8b8e67fd726d5b1a2ae2380a3afd62ecbeb38ddc Mon Sep 17 00:00:00 2001 From: Desconocidosmh Date: Wed, 10 Jul 2019 10:41:52 +0200 Subject: [PATCH 252/267] Add accidentally deleted code --- osu.Game/Screens/Menu/MainMenu.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/osu.Game/Screens/Menu/MainMenu.cs b/osu.Game/Screens/Menu/MainMenu.cs index 078f9c5a15..b67801f9ba 100644 --- a/osu.Game/Screens/Menu/MainMenu.cs +++ b/osu.Game/Screens/Menu/MainMenu.cs @@ -123,6 +123,15 @@ namespace osu.Game.Screens.Menu var track = Beatmap.Value.Track; var metadata = Beatmap.Value.Metadata; + if (last is Intro && track != null) + { + if (!track.IsRunning) + { + track.Seek(metadata.PreviewTime != -1 ? metadata.PreviewTime : 0.4f * track.Length); + track.Start(); + } + } + Beatmap.ValueChanged += beatmap_ValueChanged; } From 100d15e651f3c8d27de36a689d6660c7a4e89083 Mon Sep 17 00:00:00 2001 From: Desconocidosmh Date: Wed, 10 Jul 2019 10:43:02 +0200 Subject: [PATCH 253/267] Move reseting tempo to Editor --- osu.Game/Screens/Edit/Editor.cs | 8 +++++++- osu.Game/Screens/Menu/MainMenu.cs | 3 --- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/osu.Game/Screens/Edit/Editor.cs b/osu.Game/Screens/Edit/Editor.cs index 8b3cf1ec90..310ce27d45 100644 --- a/osu.Game/Screens/Edit/Editor.cs +++ b/osu.Game/Screens/Edit/Editor.cs @@ -238,7 +238,13 @@ namespace osu.Game.Screens.Edit public override bool OnExiting(IScreen next) { Background.FadeColour(Color4.White, 500); - Beatmap.Value.Track?.Stop(); + + if (Beatmap.Value.Track != null) + { + Beatmap.Value.Track.Tempo.Value = 1; + Beatmap.Value.Track.Stop(); + } + return base.OnExiting(next); } diff --git a/osu.Game/Screens/Menu/MainMenu.cs b/osu.Game/Screens/Menu/MainMenu.cs index b67801f9ba..6e1c471c1a 100644 --- a/osu.Game/Screens/Menu/MainMenu.cs +++ b/osu.Game/Screens/Menu/MainMenu.cs @@ -194,10 +194,7 @@ namespace osu.Game.Screens.Menu preloadSongSelect(); if (Beatmap.Value.Track != null && !musicController.UserRequestedPause) - { - Beatmap.Value.Track.Tempo.Value = 1; Beatmap.Value.Track.Start(); - } } public override bool OnExiting(IScreen next) From fae3348a69127b10fcadff6437c1823ab8c9ade4 Mon Sep 17 00:00:00 2001 From: Desconocidosmh Date: Wed, 10 Jul 2019 13:20:23 +0200 Subject: [PATCH 254/267] Add caching MusicController in tests --- .../Visual/Background/TestSceneBackgroundScreenBeatmap.cs | 3 ++- osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/osu.Game.Tests/Visual/Background/TestSceneBackgroundScreenBeatmap.cs b/osu.Game.Tests/Visual/Background/TestSceneBackgroundScreenBeatmap.cs index 8b941e4633..a4bb5a38f0 100644 --- a/osu.Game.Tests/Visual/Background/TestSceneBackgroundScreenBeatmap.cs +++ b/osu.Game.Tests/Visual/Background/TestSceneBackgroundScreenBeatmap.cs @@ -20,6 +20,7 @@ using osu.Game.Database; using osu.Game.Graphics; using osu.Game.Graphics.Containers; using osu.Game.Graphics.Sprites; +using osu.Game.Overlays; using osu.Game.Rulesets; using osu.Game.Rulesets.Osu.Mods; using osu.Game.Scoring; @@ -71,7 +72,7 @@ namespace osu.Game.Tests.Visual.Background Dependencies.Cache(rulesets = new RulesetStore(factory)); Dependencies.Cache(manager = new BeatmapManager(LocalStorage, factory, rulesets, null, audio, host, Beatmap.Default)); Dependencies.Cache(new OsuConfigManager(LocalStorage)); - + Dependencies.Cache(new MusicController()); manager.Import(TestResources.GetTestBeatmapForImport()).Wait(); Beatmap.SetDefault(); diff --git a/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs b/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs index 962e0fb362..446a632b31 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs @@ -16,6 +16,7 @@ using osu.Framework.Platform; using osu.Framework.Screens; using osu.Game.Beatmaps; using osu.Game.Database; +using osu.Game.Overlays; using osu.Game.Rulesets; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Osu; @@ -96,6 +97,7 @@ namespace osu.Game.Tests.Visual.SongSelect Dependencies.Cache(rulesets = new RulesetStore(factory)); Dependencies.Cache(manager = new BeatmapManager(LocalStorage, factory, rulesets, null, audio, host, defaultBeatmap = Beatmap.Default)); + Dependencies.Cache(new MusicController()); Beatmap.SetDefault(); } From c3315e805f92e2cb2e38d3ad42bdca7fa8283416 Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Wed, 10 Jul 2019 16:49:32 +0300 Subject: [PATCH 255/267] Use milliseconds for BasicStats' beatmap length --- osu.Game/Overlays/BeatmapSet/BasicStats.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Overlays/BeatmapSet/BasicStats.cs b/osu.Game/Overlays/BeatmapSet/BasicStats.cs index 2926c82631..5b10c4e0bb 100644 --- a/osu.Game/Overlays/BeatmapSet/BasicStats.cs +++ b/osu.Game/Overlays/BeatmapSet/BasicStats.cs @@ -60,7 +60,7 @@ namespace osu.Game.Overlays.BeatmapSet } else { - length.Value = TimeSpan.FromSeconds(beatmap.Length).ToString(@"m\:ss"); + length.Value = TimeSpan.FromMilliseconds(beatmap.Length).ToString(@"m\:ss"); circleCount.Value = beatmap.OnlineInfo.CircleCount.ToString(); sliderCount.Value = beatmap.OnlineInfo.SliderCount.ToString(); } From 9986178bf41b051c2c288549ed8087f630e2331b Mon Sep 17 00:00:00 2001 From: Desconocidosmh Date: Wed, 10 Jul 2019 13:20:23 +0200 Subject: [PATCH 256/267] Revert "Add caching MusicController in tests" This reverts commit fae3348a69127b10fcadff6437c1823ab8c9ade4. --- .../Visual/Background/TestSceneBackgroundScreenBeatmap.cs | 3 +-- osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/osu.Game.Tests/Visual/Background/TestSceneBackgroundScreenBeatmap.cs b/osu.Game.Tests/Visual/Background/TestSceneBackgroundScreenBeatmap.cs index a4bb5a38f0..8b941e4633 100644 --- a/osu.Game.Tests/Visual/Background/TestSceneBackgroundScreenBeatmap.cs +++ b/osu.Game.Tests/Visual/Background/TestSceneBackgroundScreenBeatmap.cs @@ -20,7 +20,6 @@ using osu.Game.Database; using osu.Game.Graphics; using osu.Game.Graphics.Containers; using osu.Game.Graphics.Sprites; -using osu.Game.Overlays; using osu.Game.Rulesets; using osu.Game.Rulesets.Osu.Mods; using osu.Game.Scoring; @@ -72,7 +71,7 @@ namespace osu.Game.Tests.Visual.Background Dependencies.Cache(rulesets = new RulesetStore(factory)); Dependencies.Cache(manager = new BeatmapManager(LocalStorage, factory, rulesets, null, audio, host, Beatmap.Default)); Dependencies.Cache(new OsuConfigManager(LocalStorage)); - Dependencies.Cache(new MusicController()); + manager.Import(TestResources.GetTestBeatmapForImport()).Wait(); Beatmap.SetDefault(); diff --git a/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs b/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs index 446a632b31..962e0fb362 100644 --- a/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs +++ b/osu.Game.Tests/Visual/SongSelect/TestScenePlaySongSelect.cs @@ -16,7 +16,6 @@ using osu.Framework.Platform; using osu.Framework.Screens; using osu.Game.Beatmaps; using osu.Game.Database; -using osu.Game.Overlays; using osu.Game.Rulesets; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Osu; @@ -97,7 +96,6 @@ namespace osu.Game.Tests.Visual.SongSelect Dependencies.Cache(rulesets = new RulesetStore(factory)); Dependencies.Cache(manager = new BeatmapManager(LocalStorage, factory, rulesets, null, audio, host, defaultBeatmap = Beatmap.Default)); - Dependencies.Cache(new MusicController()); Beatmap.SetDefault(); } From b225b2eb3958cf7c3f1d4fd245a1703885d3d228 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 11 Jul 2019 00:18:19 +0900 Subject: [PATCH 257/267] Rename to IsUserPaused --- osu.Game/Overlays/MusicController.cs | 14 +++++++++----- osu.Game/Screens/Menu/MainMenu.cs | 2 +- osu.Game/Screens/Select/SongSelect.cs | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/osu.Game/Overlays/MusicController.cs b/osu.Game/Overlays/MusicController.cs index ad0c0717ac..abbcec5094 100644 --- a/osu.Game/Overlays/MusicController.cs +++ b/osu.Game/Overlays/MusicController.cs @@ -55,7 +55,7 @@ namespace osu.Game.Overlays private Container dragContainer; private Container playerContainer; - public bool UserRequestedPause { get; private set; } + public bool IsUserPaused { get; private set; } [Resolved] private Bindable beatmap { get; set; } @@ -159,7 +159,7 @@ namespace osu.Game.Overlays Origin = Anchor.Centre, Scale = new Vector2(1.4f), IconScale = new Vector2(1.4f), - Action = play, + Action = togglePause, Icon = FontAwesome.Regular.PlayCircle, }, nextButton = new MusicIconButton @@ -278,7 +278,7 @@ namespace osu.Game.Overlays } } - private void play() + private void togglePause() { var track = current?.Track; @@ -289,12 +289,16 @@ namespace osu.Game.Overlays return; } - UserRequestedPause = track.IsRunning; - if (track.IsRunning) + { + IsUserPaused = true; track.Stop(); + } else + { track.Start(); + IsUserPaused = false; + } } private void prev() diff --git a/osu.Game/Screens/Menu/MainMenu.cs b/osu.Game/Screens/Menu/MainMenu.cs index 6e1c471c1a..93c413452d 100644 --- a/osu.Game/Screens/Menu/MainMenu.cs +++ b/osu.Game/Screens/Menu/MainMenu.cs @@ -193,7 +193,7 @@ namespace osu.Game.Screens.Menu //we may have consumed our preloaded instance, so let's make another. preloadSongSelect(); - if (Beatmap.Value.Track != null && !musicController.UserRequestedPause) + if (Beatmap.Value.Track != null && !musicController.IsUserPaused) Beatmap.Value.Track.Start(); } diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index dd115e04d4..085232b27f 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -573,7 +573,7 @@ namespace osu.Game.Screens.Select { Track track = Beatmap.Value.Track; - if ((!track.IsRunning || restart) && !musicController.UserRequestedPause) + if ((!track.IsRunning || restart) && !musicController.IsUserPaused) { track.RestartPoint = Beatmap.Value.Metadata.PreviewTime; track.Restart(); From 6819c528db75c4d88f75ab35c837f1f3e81e13bd Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 11 Jul 2019 00:20:01 +0900 Subject: [PATCH 258/267] Use canBeNull instead of needlessly caching MusicController for tests --- osu.Game/Screens/Menu/MainMenu.cs | 6 +++--- osu.Game/Screens/Select/SongSelect.cs | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/osu.Game/Screens/Menu/MainMenu.cs b/osu.Game/Screens/Menu/MainMenu.cs index 93c413452d..5999cbdfb5 100644 --- a/osu.Game/Screens/Menu/MainMenu.cs +++ b/osu.Game/Screens/Menu/MainMenu.cs @@ -42,8 +42,8 @@ namespace osu.Game.Screens.Menu [Resolved] private GameHost host { get; set; } - [Resolved] - private MusicController musicController { get; set; } + [Resolved(canBeNull: true)] + private MusicController music { get; set; } private BackgroundScreenDefault background; @@ -193,7 +193,7 @@ namespace osu.Game.Screens.Menu //we may have consumed our preloaded instance, so let's make another. preloadSongSelect(); - if (Beatmap.Value.Track != null && !musicController.IsUserPaused) + if (Beatmap.Value.Track != null && music?.IsUserPaused != true) Beatmap.Value.Track.Start(); } diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index 085232b27f..0eeffda5eb 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -87,8 +87,8 @@ namespace osu.Game.Screens.Select private readonly Bindable decoupledRuleset = new Bindable(); - [Resolved] - private MusicController musicController { get; set; } + [Resolved(canBeNull: true)] + private MusicController music { get; set; } [Cached] [Cached(Type = typeof(IBindable>))] @@ -573,7 +573,7 @@ namespace osu.Game.Screens.Select { Track track = Beatmap.Value.Track; - if ((!track.IsRunning || restart) && !musicController.IsUserPaused) + if ((!track.IsRunning || restart) && music?.IsUserPaused != true) { track.RestartPoint = Beatmap.Value.Metadata.PreviewTime; track.Restart(); From ad873b542a09334a86956be8b34249bce849b2f3 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 11 Jul 2019 00:22:40 +0900 Subject: [PATCH 259/267] Simplify editor logic --- osu.Game/Screens/Edit/Editor.cs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/osu.Game/Screens/Edit/Editor.cs b/osu.Game/Screens/Edit/Editor.cs index 310ce27d45..8cc227d9be 100644 --- a/osu.Game/Screens/Edit/Editor.cs +++ b/osu.Game/Screens/Edit/Editor.cs @@ -224,30 +224,32 @@ namespace osu.Game.Screens.Edit public override void OnResuming(IScreen last) { - Beatmap.Value.Track?.Stop(); base.OnResuming(last); + Beatmap.Value.Track?.Stop(); } public override void OnEntering(IScreen last) { base.OnEntering(last); + Background.FadeColour(Color4.DarkGray, 500); - Beatmap.Value.Track?.Stop(); + resetTrack(); } public override bool OnExiting(IScreen next) { Background.FadeColour(Color4.White, 500); - - if (Beatmap.Value.Track != null) - { - Beatmap.Value.Track.Tempo.Value = 1; - Beatmap.Value.Track.Stop(); - } + resetTrack(); return base.OnExiting(next); } + private void resetTrack() + { + Beatmap.Value.Track?.ResetSpeedAdjustments(); + Beatmap.Value.Track?.Stop(); + } + private void exportBeatmap() => host.OpenFileExternally(Beatmap.Value.Save()); private void onModeChanged(ValueChangedEvent e) From f21e700b7af378f7196732cf1a725137433de8fc Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 11 Jul 2019 00:42:14 +0900 Subject: [PATCH 260/267] Code style cleanup --- osu.Game/Overlays/BeatmapSetOverlay.cs | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/osu.Game/Overlays/BeatmapSetOverlay.cs b/osu.Game/Overlays/BeatmapSetOverlay.cs index 3a17b6eec1..154e6f20f6 100644 --- a/osu.Game/Overlays/BeatmapSetOverlay.cs +++ b/osu.Game/Overlays/BeatmapSetOverlay.cs @@ -28,7 +28,9 @@ namespace osu.Game.Overlays protected readonly Header Header; private RulesetStore rulesets; - private readonly ScoresContainer scores; + + private readonly ScoresContainer scoreContainer; + private GetScoresRequest getScoresRequest; private readonly Bindable beatmapSet = new Bindable(); @@ -63,7 +65,7 @@ namespace osu.Game.Overlays { Header = new Header(), info = new Info(), - scores = new ScoresContainer(), + scoreContainer = new ScoresContainer(), }, }, }, @@ -81,23 +83,24 @@ namespace osu.Game.Overlays }; } - private void getScores(BeatmapInfo b) + private void getScores(BeatmapInfo beatmap) { getScoresRequest?.Cancel(); + getScoresRequest = null; - if (b?.OnlineBeatmapID.HasValue != true) + if (beatmap?.OnlineBeatmapID.HasValue != true) { - scores.Scores = null; + scoreContainer.Scores = null; return; } - scores.Loading = true; + scoreContainer.Loading = true; - getScoresRequest = new GetScoresRequest(b, b.Ruleset); - getScoresRequest.Success += r => Schedule(() => + getScoresRequest = new GetScoresRequest(beatmap, beatmap.Ruleset); + getScoresRequest.Success += scores => Schedule(() => { - scores.Scores = r; - scores.Loading = false; + scoreContainer.Scores = scores; + scoreContainer.Loading = false; }); api.Queue(getScoresRequest); } From 953d32366c8f067fe11f41825d64268e18889ed4 Mon Sep 17 00:00:00 2001 From: Andrei Zavatski Date: Wed, 10 Jul 2019 19:40:29 +0300 Subject: [PATCH 261/267] Move request inside the ScoresContainer again --- .../Visual/Online/TestSceneScoresContainer.cs | 12 +++- .../BeatmapSet/Scores/ScoresContainer.cs | 64 ++++++++++++++++--- osu.Game/Overlays/BeatmapSetOverlay.cs | 34 +--------- 3 files changed, 68 insertions(+), 42 deletions(-) diff --git a/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs b/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs index 824280fe68..b26de1984a 100644 --- a/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs +++ b/osu.Game.Tests/Visual/Online/TestSceneScoresContainer.cs @@ -31,7 +31,7 @@ namespace osu.Game.Tests.Visual.Online public TestSceneScoresContainer() { - ScoresContainer scoresContainer; + TestScoresContainer scoresContainer; Child = new Container { @@ -46,7 +46,7 @@ namespace osu.Game.Tests.Visual.Online RelativeSizeAxes = Axes.Both, Colour = Color4.Black, }, - scoresContainer = new ScoresContainer(), + scoresContainer = new TestScoresContainer(), } }; @@ -245,5 +245,13 @@ namespace osu.Game.Tests.Visual.Online scoresContainer.Scores = allScores; }); } + + private class TestScoresContainer : ScoresContainer + { + public new APILegacyScores Scores + { + set => base.Scores = value; + } + } } } diff --git a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs index 94bcfdee4f..bcb9383d0b 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs @@ -11,6 +11,9 @@ using osuTK; using System.Collections.Generic; using System.Linq; using osu.Game.Online.API.Requests.Responses; +using osu.Game.Beatmaps; +using osu.Game.Online.API; +using osu.Game.Online.API.Requests; namespace osu.Game.Overlays.BeatmapSet.Scores { @@ -24,6 +27,40 @@ namespace osu.Game.Overlays.BeatmapSet.Scores private readonly FillFlowContainer topScoresContainer; private readonly LoadingAnimation loadingAnimation; + [Resolved] + private IAPIProvider api { get; set; } + + private GetScoresRequest getScoresRequest; + + private APILegacyScores scores; + + protected APILegacyScores Scores + { + get => scores; + set + { + scores = value; + + updateDisplay(); + } + } + + private BeatmapInfo beatmap; + + public BeatmapInfo Beatmap + { + get => beatmap; + set + { + if (beatmap == value) + return; + + beatmap = value; + + getScores(beatmap); + } + } + public ScoresContainer() { RelativeSizeAxes = Axes.X; @@ -75,7 +112,7 @@ namespace osu.Game.Overlays.BeatmapSet.Scores updateDisplay(); } - public bool Loading + private bool loading { set { @@ -86,17 +123,26 @@ namespace osu.Game.Overlays.BeatmapSet.Scores } } - private APILegacyScores scores; - - public APILegacyScores Scores + private void getScores(BeatmapInfo beatmap) { - get => scores; - set - { - scores = value; + getScoresRequest?.Cancel(); + getScoresRequest = null; - updateDisplay(); + if (beatmap?.OnlineBeatmapID.HasValue != true) + { + Scores = null; + return; } + + loading = true; + + getScoresRequest = new GetScoresRequest(beatmap, beatmap.Ruleset); + getScoresRequest.Success += scores => Schedule(() => + { + Scores = scores; + loading = false; + }); + api.Queue(getScoresRequest); } private void updateDisplay() diff --git a/osu.Game/Overlays/BeatmapSetOverlay.cs b/osu.Game/Overlays/BeatmapSetOverlay.cs index 154e6f20f6..c20e6368d8 100644 --- a/osu.Game/Overlays/BeatmapSetOverlay.cs +++ b/osu.Game/Overlays/BeatmapSetOverlay.cs @@ -11,7 +11,6 @@ using osu.Framework.Input.Events; using osu.Game.Beatmaps; using osu.Game.Graphics; using osu.Game.Graphics.Containers; -using osu.Game.Online.API; using osu.Game.Online.API.Requests; using osu.Game.Overlays.BeatmapSet; using osu.Game.Overlays.BeatmapSet.Scores; @@ -29,15 +28,8 @@ namespace osu.Game.Overlays private RulesetStore rulesets; - private readonly ScoresContainer scoreContainer; - - private GetScoresRequest getScoresRequest; - private readonly Bindable beatmapSet = new Bindable(); - [Resolved] - private IAPIProvider api { get; set; } - // receive input outside our bounds so we can trigger a close event on ourselves. public override bool ReceivePositionalInputAt(Vector2 screenSpacePos) => true; @@ -45,6 +37,8 @@ namespace osu.Game.Overlays { OsuScrollContainer scroll; Info info; + ScoresContainer scoreContainer; + Children = new Drawable[] { new Box @@ -77,34 +71,12 @@ namespace osu.Game.Overlays Header.Picker.Beatmap.ValueChanged += b => { info.Beatmap = b.NewValue; - getScores(b.NewValue); + scoreContainer.Beatmap = b.NewValue; scroll.ScrollToStart(); }; } - private void getScores(BeatmapInfo beatmap) - { - getScoresRequest?.Cancel(); - getScoresRequest = null; - - if (beatmap?.OnlineBeatmapID.HasValue != true) - { - scoreContainer.Scores = null; - return; - } - - scoreContainer.Loading = true; - - getScoresRequest = new GetScoresRequest(beatmap, beatmap.Ruleset); - getScoresRequest.Success += scores => Schedule(() => - { - scoreContainer.Scores = scores; - scoreContainer.Loading = false; - }); - api.Queue(getScoresRequest); - } - [BackgroundDependencyLoader] private void load(RulesetStore rulesets) { From b2f23a10c87437db39a20b98a1fd2ad6afcf738f Mon Sep 17 00:00:00 2001 From: iiSaLMaN Date: Wed, 10 Jul 2019 23:12:18 +0300 Subject: [PATCH 262/267] Use the correct property to retrieve the milliseconds --- osu.Game/Online/API/Requests/Responses/APIBeatmap.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Online/API/Requests/Responses/APIBeatmap.cs b/osu.Game/Online/API/Requests/Responses/APIBeatmap.cs index f50e281dd0..f4d67a56aa 100644 --- a/osu.Game/Online/API/Requests/Responses/APIBeatmap.cs +++ b/osu.Game/Online/API/Requests/Responses/APIBeatmap.cs @@ -72,7 +72,7 @@ namespace osu.Game.Online.API.Requests.Responses StarDifficulty = starDifficulty, OnlineBeatmapID = OnlineBeatmapID, Version = version, - Length = TimeSpan.FromSeconds(length).Milliseconds, + Length = TimeSpan.FromSeconds(length).TotalMilliseconds, Status = Status, BeatmapSet = set, Metrics = metrics, From a49bde7ed3369a734f27957b3a08e4456cbc8f90 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 11 Jul 2019 10:38:32 +0900 Subject: [PATCH 263/267] Move protected below public --- .../BeatmapSet/Scores/ScoresContainer.cs | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs index bcb9383d0b..dfe6c45750 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs @@ -32,19 +32,6 @@ namespace osu.Game.Overlays.BeatmapSet.Scores private GetScoresRequest getScoresRequest; - private APILegacyScores scores; - - protected APILegacyScores Scores - { - get => scores; - set - { - scores = value; - - updateDisplay(); - } - } - private BeatmapInfo beatmap; public BeatmapInfo Beatmap @@ -61,6 +48,19 @@ namespace osu.Game.Overlays.BeatmapSet.Scores } } + private APILegacyScores scores; + + protected APILegacyScores Scores + { + get => scores; + set + { + scores = value; + + updateDisplay(); + } + } + public ScoresContainer() { RelativeSizeAxes = Axes.X; From cc9ee472d6090584587c56098c92bee6f5e34d30 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 11 Jul 2019 11:07:30 +0900 Subject: [PATCH 264/267] Move score nulling out of loading property --- .../Overlays/BeatmapSet/Scores/ScoresContainer.cs | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs index dfe6c45750..5f200d7343 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs @@ -114,13 +114,7 @@ namespace osu.Game.Overlays.BeatmapSet.Scores private bool loading { - set - { - loadingAnimation.FadeTo(value ? 1 : 0, fade_duration); - - if (value) - Scores = null; - } + set => loadingAnimation.FadeTo(value ? 1 : 0, fade_duration); } private void getScores(BeatmapInfo beatmap) @@ -128,11 +122,10 @@ namespace osu.Game.Overlays.BeatmapSet.Scores getScoresRequest?.Cancel(); getScoresRequest = null; + Scores = null; + if (beatmap?.OnlineBeatmapID.HasValue != true) - { - Scores = null; return; - } loading = true; From 8f9b8ed5a19d121977a08c16b308dc734ef2d3a8 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 11 Jul 2019 11:17:33 +0900 Subject: [PATCH 265/267] Simplify information propagation logic --- .../Overlays/BeatmapSet/Scores/ScoreTable.cs | 2 +- .../BeatmapSet/Scores/ScoresContainer.cs | 60 +++++++++---------- 2 files changed, 29 insertions(+), 33 deletions(-) diff --git a/osu.Game/Overlays/BeatmapSet/Scores/ScoreTable.cs b/osu.Game/Overlays/BeatmapSet/Scores/ScoreTable.cs index 15816be327..347522fb48 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/ScoreTable.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/ScoreTable.cs @@ -59,7 +59,7 @@ namespace osu.Game.Overlays.BeatmapSet.Scores Content = null; backgroundFlow.Clear(); - if (value == null || !value.Any()) + if (value?.Any() != true) return; for (int i = 0; i < value.Count; i++) diff --git a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs index 5f200d7343..22d7ea9c97 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/ScoresContainer.cs @@ -8,7 +8,6 @@ using osu.Framework.Graphics.Shapes; using osu.Game.Graphics; using osu.Game.Graphics.UserInterface; using osuTK; -using System.Collections.Generic; using System.Linq; using osu.Game.Online.API.Requests.Responses; using osu.Game.Beatmaps; @@ -48,16 +47,34 @@ namespace osu.Game.Overlays.BeatmapSet.Scores } } - private APILegacyScores scores; - protected APILegacyScores Scores { - get => scores; set { - scores = value; + Schedule(() => + { + loading = false; - updateDisplay(); + topScoresContainer.Clear(); + + if (value?.Scores.Any() != true) + { + scoreTable.Scores = null; + scoreTable.Hide(); + return; + } + + scoreTable.Scores = value.Scores; + scoreTable.Show(); + + var topScore = value.Scores.First(); + var userScore = value.UserScore; + + topScoresContainer.Add(new DrawableTopScore(topScore)); + + if (userScore != null && userScore.Score.OnlineScoreID != topScore.OnlineScoreID) + topScoresContainer.Add(new DrawableTopScore(userScore.Score, userScore.Position)); + }); } } @@ -109,7 +126,6 @@ namespace osu.Game.Overlays.BeatmapSet.Scores private void load(OsuColour colours) { background.Colour = colours.Gray2; - updateDisplay(); } private bool loading @@ -125,35 +141,15 @@ namespace osu.Game.Overlays.BeatmapSet.Scores Scores = null; if (beatmap?.OnlineBeatmapID.HasValue != true) + { + loading = false; return; - - loading = true; + } getScoresRequest = new GetScoresRequest(beatmap, beatmap.Ruleset); - getScoresRequest.Success += scores => Schedule(() => - { - Scores = scores; - loading = false; - }); + getScoresRequest.Success += scores => Scores = scores; api.Queue(getScoresRequest); - } - - private void updateDisplay() - { - topScoresContainer.Clear(); - - scoreTable.Scores = scores?.Scores.Count > 1 ? scores.Scores : new List(); - scoreTable.FadeTo(scores?.Scores.Count > 1 ? 1 : 0); - - if (scores?.Scores.Any() ?? false) - { - topScoresContainer.Add(new DrawableTopScore(scores.Scores.FirstOrDefault())); - - var userScore = scores.UserScore; - - if (userScore != null && userScore.Position != 1) - topScoresContainer.Add(new DrawableTopScore(userScore.Score, userScore.Position)); - } + loading = true; } } } From 85f2212ebcb8d3612e41304f49d4caf0289374ec Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 11 Jul 2019 11:32:42 +0900 Subject: [PATCH 266/267] Reduce spacing and font for rank position --- .../BeatmapSet/Scores/TopScoreUserSection.cs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs b/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs index 6d43ec6177..a15d3c5fd1 100644 --- a/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs +++ b/osu.Game/Overlays/BeatmapSet/Scores/TopScoreUserSection.cs @@ -28,11 +28,6 @@ namespace osu.Game.Overlays.BeatmapSet.Scores private readonly SpriteText date; private readonly UpdateableFlag flag; - public int ScorePosition - { - set => rankText.Text = $"#{value}"; - } - public TopScoreUserSection() { AutoSizeAxes = Axes.Both; @@ -50,14 +45,13 @@ namespace osu.Game.Overlays.BeatmapSet.Scores Origin = Anchor.Centre, AutoSizeAxes = Axes.Both, Direction = FillDirection.Vertical, - Spacing = new Vector2(0, 3), Children = new Drawable[] { rankText = new OsuSpriteText { Anchor = Anchor.Centre, Origin = Anchor.Centre, - Font = OsuFont.GetFont(size: 30, weight: FontWeight.Bold, italics: true) + Font = OsuFont.GetFont(size: 24, weight: FontWeight.Bold, italics: true) }, rank = new UpdateableRank(ScoreRank.D) { @@ -124,6 +118,11 @@ namespace osu.Game.Overlays.BeatmapSet.Scores rankText.Colour = colours.Yellow; } + public int ScorePosition + { + set => rankText.Text = $"#{value}"; + } + /// /// Sets the score to be displayed. /// From b6e15fb79186fc94379f2993694b8474af35c076 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 11 Jul 2019 22:21:37 +0900 Subject: [PATCH 267/267] Update framework --- osu.Android.props | 2 +- osu.Game/Input/Bindings/GlobalActionContainer.cs | 2 +- osu.Game/osu.Game.csproj | 2 +- osu.iOS.props | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/osu.Android.props b/osu.Android.props index 5ee0573c58..98f9bf1a42 100644 --- a/osu.Android.props +++ b/osu.Android.props @@ -63,6 +63,6 @@ - + diff --git a/osu.Game/Input/Bindings/GlobalActionContainer.cs b/osu.Game/Input/Bindings/GlobalActionContainer.cs index 14d356f889..669fd62e45 100644 --- a/osu.Game/Input/Bindings/GlobalActionContainer.cs +++ b/osu.Game/Input/Bindings/GlobalActionContainer.cs @@ -39,7 +39,7 @@ namespace osu.Game.Input.Bindings new KeyBinding(InputKey.F4, GlobalAction.ToggleMute), new KeyBinding(InputKey.Escape, GlobalAction.Back), - new KeyBinding(InputKey.MouseButton1, GlobalAction.Back), + new KeyBinding(InputKey.ExtraMouseButton1, GlobalAction.Back), new KeyBinding(InputKey.Space, GlobalAction.Select), new KeyBinding(InputKey.Enter, GlobalAction.Select), diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index e872cd1387..436ba90a88 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -15,7 +15,7 @@ - + diff --git a/osu.iOS.props b/osu.iOS.props index a319094cb1..c24349bcb5 100644 --- a/osu.iOS.props +++ b/osu.iOS.props @@ -105,8 +105,8 @@ - - + +