diff --git a/Source/Datafiles/Designs/icons8-24-64.png b/Source/Datafiles/Designs/icons8_24_64.png
similarity index 100%
rename from Source/Datafiles/Designs/icons8-24-64.png
rename to Source/Datafiles/Designs/icons8_24_64.png
diff --git a/Source/Datafiles/Designs/icons8-flagpole-64.png b/Source/Datafiles/Designs/icons8_flagpole_64.png
similarity index 100%
rename from Source/Datafiles/Designs/icons8-flagpole-64.png
rename to Source/Datafiles/Designs/icons8_flagpole_64.png
diff --git a/Source/Datafiles/Designs/javascript.js b/Source/Datafiles/Designs/javascript.js
index 0322b1f3..d93cec60 100644
--- a/Source/Datafiles/Designs/javascript.js
+++ b/Source/Datafiles/Designs/javascript.js
@@ -1,6 +1,6 @@
//MIT License
-//Copyright (c) 2018-2022 Peter Kirmeier
+//Copyright (c) 2018-2023 Peter Kirmeier
//Permission is hereby granted, free of charge, to any person obtaining a copy
//of this software and associated documentation files (the "Software"), to deal
@@ -59,8 +59,8 @@ function IntToStringSigned(i) { if (i == 0) return '0'; else if (i > 0) return '
function ShowCrossOrCheckMark(i) { return ''; }
-function ShowSessionProgress() { return ''; }
-function ShowBestProgress() { return ''; }
+function ShowSessionProgress() { return ''; }
+function ShowBestProgress() { return ''; }
function OffsetTimerTick() { if (offset_timer_tick_callback != undefined) offset_timer_tick_callback(Date.now() - offset_timer_start); }
diff --git a/Source/Directory.Build.props b/Source/Directory.Build.props
new file mode 100644
index 00000000..da3f583f
--- /dev/null
+++ b/Source/Directory.Build.props
@@ -0,0 +1,25 @@
+
+
+
+ 2.0.0.0
+ HitCounterManager
+
+ $(Version)
+ $(Version)
+ $(Product)
+ Manages a hit counter
+ en
+
+ Peter Kirmeier
+
+ Copyright © $(Authors) $([System.DateTime]::Now.Year)
+
+ enable
+
+
+
+
+
+ 11.0.5
+
+
diff --git a/Source/GenerateThirdPartyLicense.sh b/Source/GenerateThirdPartyLicense.sh
index b3698c9e..1073b8b5 100644
--- a/Source/GenerateThirdPartyLicense.sh
+++ b/Source/GenerateThirdPartyLicense.sh
@@ -142,14 +142,16 @@ EOF
echo Fetching NuGet packages 1>&2
LICENSES=""
-NUGET_PACKAGES_DIR=$(dotnet nuget locals -l global-packages | sed -e 's,^[^ ]* ,,')
-NUGET_PACKAGES_SPECS=$(dotnet list $(pwd)/HitCounterManager.sln package --include-transitive | grep ">" | sed -e 's,^[^>]*>[ \t]*\([^ ^\t]*\)[ \t]*\([^ ^\t]*\).*,\L\1/\2/\L\1.nuspec,' | xargs)
+NUGET_PACKAGES_DIR=$(dotnet nuget locals -l global-packages | sed -e 's,^[^ ]* ,,' -e 's,[ \t/\\]*$,,' -e 's,\\,/,g')
+NUGET_PACKAGES_SPECS=$(dotnet list $(pwd)/HitCounterManager.sln package --include-transitive --format json | grep -e '"id":\|"resolvedVersion":' | sed -e 's,.*: "\(.*\)"\,*$,\1,' | xargs -n2 -d'\n' | sed -e 's,\([^ ]*\) \(.*\),\L\1/\2/\L\1.nuspec,')
echo Printing NuGet packages 1>&2
-for nuspec in ${NUGET_PACKAGES_SPECS};
+for nuspec in ${NUGET_PACKAGES_SPECS}
do
- xml="${NUGET_PACKAGES_DIR}/${nuspec}"
+ # (a) seems to be filler expression to whatever version is available, try detect folder using shell's star autocompletion
+ xml="$(echo ${NUGET_PACKAGES_DIR}/${nuspec} | sed -e 's,/(a)/,/*/,g')"
+
id=$(grepkey id "${xml}")
echo ==============================================================================
echo NuGet Package: ${id} $(grepkey version "${xml}")
@@ -174,13 +176,20 @@ do
if [ ! -z ${GITHUB_RAWURL} ] ; then
lic=${GITHUB_RAWURL}
fi
- echo License: ${lic}
- LICENSES="${LICENSES} ${lic}"
+ # Split dual licences
+ if [ "${lic}" = "https://licenses.nuget.org/MIT%20AND%20Apache-2.0" ] ; then
+ lic="https://licenses.nuget.org/MIT https://licenses.nuget.org/Apache-2.0"
+ fi
+ for lic in ${lic}
+ do
+ echo License: ${lic}
+ LICENSES="${LICENSES} ${lic}"
+ done
done
echo Printing NuGet licenses 1>&2
-for lic in $(echo $LICENSES | xargs -n 1 echo | sort -u) ;
+for lic in $(echo $LICENSES | xargs -n 1 echo | sort -u)
do
if [ "${lic}" = "https://licenses.nuget.org/MIT" ] ; then
# MIT is already attached above
diff --git a/Source/HitCounterManager.Android/HitCounterManager.Android.csproj b/Source/HitCounterManager.Android/HitCounterManager.Android.csproj
new file mode 100644
index 00000000..028a6e0c
--- /dev/null
+++ b/Source/HitCounterManager.Android/HitCounterManager.Android.csproj
@@ -0,0 +1,32 @@
+
+
+
+ net7.0-android
+
+
+ Exe
+ $(Product).Android
+
+
+ 21
+ com.peterkirmeier.$(Product)
+ 1
+ 1.0
+ apk
+ False
+
+
+
+
+ Resources\drawable\Icon.png
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/HitCounterManager.Android/HitCounterManager.Android.csproj.user b/Source/HitCounterManager.Android/HitCounterManager.Android.csproj.user
new file mode 100644
index 00000000..b31f0e2e
--- /dev/null
+++ b/Source/HitCounterManager.Android/HitCounterManager.Android.csproj.user
@@ -0,0 +1,9 @@
+
+
+
+ pixel_5_-_api_34
+ Emulator
+ Pixel 5 - API 34 (Android 14.0 - API 34)
+ pixel_5_-_api_34
+
+
\ No newline at end of file
diff --git a/Source/HitCounterManager.Android/Icon.png b/Source/HitCounterManager.Android/Icon.png
new file mode 100644
index 00000000..41a2a618
Binary files /dev/null and b/Source/HitCounterManager.Android/Icon.png differ
diff --git a/Source/HitCounterManager.Android/MainActivity.cs b/Source/HitCounterManager.Android/MainActivity.cs
new file mode 100644
index 00000000..426689d2
--- /dev/null
+++ b/Source/HitCounterManager.Android/MainActivity.cs
@@ -0,0 +1,92 @@
+using Android.App;
+using Android.Content.PM;
+using Avalonia;
+using Avalonia.Android;
+using Avalonia.ReactiveUI;
+
+namespace HitCounterManager.Android;
+
+[Activity(
+ Label = "HitCounterManager.Android",
+ Theme = "@style/MyTheme.NoActionBar",
+ Icon = "@drawable/icon",
+ MainLauncher = true,
+ ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode)]
+public class MainActivity : AvaloniaMainActivity
+{
+ protected override AppBuilder CustomizeAppBuilder(AppBuilder builder)
+ {
+ return base.CustomizeAppBuilder(builder)
+ .WithInterFont()
+ .UseReactiveUI();
+ }
+}
+
+/*using Android.App;
+using Android.Content;
+using Android.Content.PM;
+using Android.Runtime;
+using Avalonia;
+using Avalonia.Android;
+using Avalonia.Controls.ApplicationLifetimes;
+using Avalonia.ReactiveUI;
+using HitCounterManager.Views;
+using System.ComponentModel;
+
+namespace HitCounterManager.Android
+{
+ [Activity(
+ Label = "HitCounterManager.Android",
+ Theme = "@style/MyTheme.NoActionBar",
+ Icon = "@drawable/icon",
+ MainLauncher = true,
+ ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode)]
+ public class MainActivity : AvaloniaMainActivity
+ {
+ protected override AppBuilder CustomizeAppBuilder(AppBuilder builder)
+ {
+ return base.CustomizeAppBuilder(builder)
+ .WithInterFont()
+ .UseReactiveUI();
+ }
+
+ public override void OnBackPressed()
+ {
+ if (App.CurrentApp.ApplicationLifetime is ISingleViewApplicationLifetime singleViewPlatform)
+ {
+ // Return to previous page
+ SingleViewNavigationPage RootPage = (SingleViewNavigationPage)singleViewPlatform.MainView!;
+ if (1 < RootPage.NavStack.Count)
+ {
+ RootPage.PopPage();
+ return;
+ }
+
+ // Idea of stopping the process by defualt but this will popup the message box
+ // every time one is about the hit back button. Therefore it is better to keep
+ // the application running in backgroung.
+ // We will save the current state during OnStop().
+#if EXAMPLE_FORCED_SHUTDOWN
+ RootPage.MainPage.OnClosing(this, new CancelEventArgs());
+ App.CurrentApp.AppExitHandler(this, null);
+ Finish();
+#endif
+ }
+
+ base.OnBackPressed();
+ }
+
+ protected override void OnStop()
+ {
+ App.CurrentApp.SaveSettings();
+ base.OnStop();
+ }
+
+ protected override void OnDestroy()
+ {
+ App.CurrentApp.AppExitHandler(this, new());
+ base.OnDestroy();
+ }
+ }
+}
+*/
\ No newline at end of file
diff --git a/Source/HitCounterManager.Android/Properties/AndroidManifest.xml b/Source/HitCounterManager.Android/Properties/AndroidManifest.xml
new file mode 100644
index 00000000..f6717fa2
--- /dev/null
+++ b/Source/HitCounterManager.Android/Properties/AndroidManifest.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/Source/HitCounterManager.Android/Resources/AboutResources.txt b/Source/HitCounterManager.Android/Resources/AboutResources.txt
new file mode 100644
index 00000000..4cededee
--- /dev/null
+++ b/Source/HitCounterManager.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/Source/HitCounterManager.Android/Resources/drawable-night-v31/avalonia_anim.xml b/Source/HitCounterManager.Android/Resources/drawable-night-v31/avalonia_anim.xml
new file mode 100644
index 00000000..1fef3acf
--- /dev/null
+++ b/Source/HitCounterManager.Android/Resources/drawable-night-v31/avalonia_anim.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/HitCounterManager.Android/Resources/drawable-v31/avalonia_anim.xml b/Source/HitCounterManager.Android/Resources/drawable-v31/avalonia_anim.xml
new file mode 100644
index 00000000..4784f80d
--- /dev/null
+++ b/Source/HitCounterManager.Android/Resources/drawable-v31/avalonia_anim.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/HitCounterManager.Android/Resources/drawable/splash_screen.xml b/Source/HitCounterManager.Android/Resources/drawable/splash_screen.xml
new file mode 100644
index 00000000..4cebfe2c
--- /dev/null
+++ b/Source/HitCounterManager.Android/Resources/drawable/splash_screen.xml
@@ -0,0 +1,13 @@
+
+
+
+ -
+
+
+
+
+
+
diff --git a/Source/HitCounterManager.Android/Resources/values-night/colors.xml b/Source/HitCounterManager.Android/Resources/values-night/colors.xml
new file mode 100644
index 00000000..0f6f6c8c
--- /dev/null
+++ b/Source/HitCounterManager.Android/Resources/values-night/colors.xml
@@ -0,0 +1,4 @@
+
+
+ #212121
+
diff --git a/Source/HitCounterManager.Android/Resources/values-v31/styles.xml b/Source/HitCounterManager.Android/Resources/values-v31/styles.xml
new file mode 100644
index 00000000..8075ffad
--- /dev/null
+++ b/Source/HitCounterManager.Android/Resources/values-v31/styles.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
diff --git a/Source/HitCounterManager.Android/Resources/values/colors.xml b/Source/HitCounterManager.Android/Resources/values/colors.xml
new file mode 100644
index 00000000..6fbae256
--- /dev/null
+++ b/Source/HitCounterManager.Android/Resources/values/colors.xml
@@ -0,0 +1,4 @@
+
+
+ #FFFFFF
+
diff --git a/Source/HitCounterManager.Android/Resources/values/styles.xml b/Source/HitCounterManager.Android/Resources/values/styles.xml
new file mode 100644
index 00000000..77ed2d72
--- /dev/null
+++ b/Source/HitCounterManager.Android/Resources/values/styles.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
diff --git a/Source/HitCounterManager.Desktop/HitCounterManager.Desktop.csproj b/Source/HitCounterManager.Desktop/HitCounterManager.Desktop.csproj
new file mode 100644
index 00000000..cde16da5
--- /dev/null
+++ b/Source/HitCounterManager.Desktop/HitCounterManager.Desktop.csproj
@@ -0,0 +1,21 @@
+
+
+
+ net7.0
+
+
+ WinExe
+ $(Product).Desktop
+
+ win;linux;osx
+ true
+ ../$(Product)/Resources/FireIcon.ico
+
+
+
+
+
+
+
+
+
diff --git a/Source/HitCounterManager/Common/Program.cs b/Source/HitCounterManager.Desktop/Program.cs
similarity index 92%
rename from Source/HitCounterManager/Common/Program.cs
rename to Source/HitCounterManager.Desktop/Program.cs
index babdf389..c95a29a3 100644
--- a/Source/HitCounterManager/Common/Program.cs
+++ b/Source/HitCounterManager.Desktop/Program.cs
@@ -1,45 +1,46 @@
-//MIT License
-
-//Copyright (c) 2022-2022 Peter Kirmeier
-
-//Permission is hereby granted, free of charge, to any person obtaining a copy
-//of this software and associated documentation files (the "Software"), to deal
-//in the Software without restriction, including without limitation the rights
-//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-//copies of the Software, and to permit persons to whom the Software is
-//furnished to do so, subject to the following conditions:
-
-//The above copyright notice and this permission notice shall be included in all
-//copies or substantial portions of the Software.
-
-//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-//SOFTWARE.
-
-using Avalonia;
-using Avalonia.ReactiveUI;
-using System;
-
-namespace HitCounterManager
-{
- class Program
- {
- // Initialization code. Don't use any Avalonia, third-party APIs or any
- // SynchronizationContext-reliant code before AppMain is called: things aren't initialized
- // yet and stuff might break.
- [STAThread]
- public static void Main(string[] args) => BuildAvaloniaApp()
- .StartWithClassicDesktopLifetime(args);
-
- // Avalonia configuration, don't remove; also used by visual designer.
- public static AppBuilder BuildAvaloniaApp()
- => AppBuilder.Configure()
- .UsePlatformDetect()
- .LogToTrace()
- .UseReactiveUI();
- }
-}
+//MIT License
+
+//Copyright (c) 2022-2023 Peter Kirmeier
+
+//Permission is hereby granted, free of charge, to any person obtaining a copy
+//of this software and associated documentation files (the "Software"), to deal
+//in the Software without restriction, including without limitation the rights
+//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+//copies of the Software, and to permit persons to whom the Software is
+//furnished to do so, subject to the following conditions:
+
+//The above copyright notice and this permission notice shall be included in all
+//copies or substantial portions of the Software.
+
+//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+//SOFTWARE.
+
+using Avalonia;
+using Avalonia.ReactiveUI;
+using System;
+
+namespace HitCounterManager.Desktop
+{
+ class Program
+ {
+ // Initialization code. Don't use any Avalonia, third-party APIs or any
+ // SynchronizationContext-reliant code before AppMain is called: things aren't initialized
+ // yet and stuff might break.
+ [STAThread]
+ public static void Main(string[] args) => BuildAvaloniaApp()
+ .StartWithClassicDesktopLifetime(args);
+
+ // Avalonia configuration, don't remove; also used by visual designer.
+ public static AppBuilder BuildAvaloniaApp()
+ => AppBuilder.Configure()
+ .UsePlatformDetect()
+ .WithInterFont()
+ .LogToTrace()
+ .UseReactiveUI();
+ }
+}
diff --git a/Source/HitCounterManager.sln b/Source/HitCounterManager.sln
index 40bb688f..8aace530 100644
--- a/Source/HitCounterManager.sln
+++ b/Source/HitCounterManager.sln
@@ -3,7 +3,11 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31611.283
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HitCounterManager", "HitCounterManager\HitCounterManager.csproj", "{BCD87D6B-3F73-46BA-B87E-0977A3D1CAD4}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HitCounterManager", "HitCounterManager\HitCounterManager.PCL.csproj", "{BCD87D6B-3F73-46BA-B87E-0977A3D1CAD4}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HitCounterManager.Desktop", "HitCounterManager.Desktop\HitCounterManager.Desktop.csproj", "{D69295AA-7BD6-46EC-8482-FB089246B91E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HitCounterManager.Android", "HitCounterManager.Android\HitCounterManager.Android.csproj", "{044A623F-CE8A-4694-A999-F80F02C09666}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -17,6 +21,16 @@ Global
{BCD87D6B-3F73-46BA-B87E-0977A3D1CAD4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BCD87D6B-3F73-46BA-B87E-0977A3D1CAD4}.Release|Any CPU.Build.0 = Release|Any CPU
{BCD87D6B-3F73-46BA-B87E-0977A3D1CAD4}.Release|Any CPU.Deploy.0 = Release|Any CPU
+ {D69295AA-7BD6-46EC-8482-FB089246B91E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D69295AA-7BD6-46EC-8482-FB089246B91E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D69295AA-7BD6-46EC-8482-FB089246B91E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D69295AA-7BD6-46EC-8482-FB089246B91E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {044A623F-CE8A-4694-A999-F80F02C09666}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {044A623F-CE8A-4694-A999-F80F02C09666}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {044A623F-CE8A-4694-A999-F80F02C09666}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
+ {044A623F-CE8A-4694-A999-F80F02C09666}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {044A623F-CE8A-4694-A999-F80F02C09666}.Release|Any CPU.Build.0 = Release|Any CPU
+ {044A623F-CE8A-4694-A999-F80F02C09666}.Release|Any CPU.Deploy.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Source/HitCounterManager/Common/App.axaml b/Source/HitCounterManager/Common/App.axaml
index 31da015e..4a032dd7 100644
--- a/Source/HitCounterManager/Common/App.axaml
+++ b/Source/HitCounterManager/Common/App.axaml
@@ -24,8 +24,7 @@
-->
@@ -69,112 +68,112 @@
Beige
-
- /Resources/Images/icons8-trash-20.png
-
-
- /Resources/Images/icons8-search-in-browser-20.png
-
-
- /Resources/Images/icons8-information-18.png
-
+
+ /Resources/drawable/icons8_trash_20.png
+
+
+ /Resources/drawable/icons8_search_in_browser_20.png
+
+
+ /Resources/drawable/icons8_information_18.png
+
-
- /Resources/Images/icons8-inactive-state-20.png
-
-
- /Resources/Images/icons8-circled-right-20.png
-
-
- /Resources/Images/icons8-last-24-hours-20.png
-
-
- /Resources/Images/icons8-empty-flag-20.png
-
-
- /Resources/Images/icons8-flag-filled-20.png
-
+
+ /Resources/drawable/icons8_inactive_state_20.png
+
+
+ /Resources/drawable/icons8_circled_right_20.png
+
+
+ /Resources/drawable/icons8_last_24_hours_20.png
+
+
+ /Resources/drawable/icons8_empty_flag_20.png
+
+
+ /Resources/drawable/icons8_flag_filled_20.png
+
-
- /Resources/Images/icons8-settings-20.png
-
-
- /Resources/Images/icons8-save-20.png
-
-
- /Resources/Images/icons8-website-20.png
-
-
- /Resources/Images/20p_logo_black.png
-
-
- /Resources/Images/icons8-cloud-20.png
-
-
- /Resources/Images/icons8-about-20.png
-
+
+ /Resources/drawable/icons8_settings_20.png
+
+
+ /Resources/drawable/icons8_save_20.png
+
+
+ /Resources/drawable/icons8_website_20.png
+
+
+ /Resources/drawable/team_hitless_20p_logo_black.png
+
+
+ /Resources/drawable/icons8_cloud_20.png
+
+
+ /Resources/drawable/icons8_about_20.png
+
-
- /Resources/Images/icons8-add-20.png
-
-
- /Resources/Images/icons8-edit-20.png
-
-
- /Resources/Images/icons8-copy-20.png
-
+
+ /Resources/drawable/icons8_add_20.png
+
+
+ /Resources/drawable/icons8_edit_20.png
+
+
+ /Resources/drawable/icons8_copy_20.png
+
-
- /Resources/Images/icons8-counter-20.png
-
-
- /Resources/Images/icons8-scroll-up-20.png
-
-
- /Resources/Images/icons8-scroll-down-20.png
-
-
- /Resources/Images/icons8-add-list-20.png
-
+
+ /Resources/drawable/icons8_counter_20.png
+
+
+ /Resources/drawable/icons8_scroll_up_20.png
+
+
+ /Resources/drawable/icons8_scroll_down_20.png
+
+
+ /Resources/drawable/icons8_add_list_20.png
+
-
- /Resources/Images/icons8-lock-20.png
-
-
- /Resources/Images/icons8-padlock-20.png
-
-
- /Resources/Images/icons8-pin-20.png
-
-
- /Resources/Images/icons8-flash-light-20.png
-
+
+ /Resources/drawable/icons8_lock_20.png
+
+
+ /Resources/drawable/icons8_padlock_20.png
+
+
+ /Resources/drawable/icons8_pin_20.png
+
+
+ /Resources/drawable/icons8_flash_light_20.png
+
-
- /Resources/Images/icons8-repeat-one-32.png
-
-
- /Resources/Images/icons8-trophy-32.png
-
-
- /Resources/Images/icons8-sleep-32.png
-
-
- /Resources/Images/icons8-time-32.png
-
-
- /Resources/Images/icons8-attack-32.png
-
-
- /Resources/Images/icons8-watch-your-step-32.png
-
-
- /Resources/Images/icons8-staircase-32.png
-
+
+ /Resources/drawable/icons8_repeat_one_32.png
+
+
+ /Resources/drawable/icons8_trophy_32.png
+
+
+ /Resources/drawable/icons8_sleep_32.png
+
+
+ /Resources/drawable/icons8_time_32.png
+
+
+ /Resources/drawable/icons8_attack_32.png
+
+
+ /Resources/drawable/icons8_watch_your_step_32.png
+
+
+ /Resources/drawable/icons8_staircase_32.png
+
-
+
@@ -197,7 +196,7 @@
-
+