From cabd0e73ba5b7d12a9cee03c57f32a8c5620e8ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr>
Date: Fri, 20 Sep 2024 22:01:39 +0200
Subject: [PATCH] Upgrade framework, build tools and dependencies

---
 .editorconfig                                 |  15 ++
 android/app/build.gradle                      |   2 +-
 android/gradle.properties                     |   4 +-
 assets/menu/demo.png                          | Bin 12112 -> 0 bytes
 assets/menu/graph.png                         | Bin 16600 -> 0 bytes
 icons/build_application_icons.sh              |  89 ---------
 icons/build_repository_icons.sh               | 127 -------------
 icons/menu_demo.svg                           |   2 -
 icons/menu_graph.svg                          |   2 -
 pubspec.lock                                  | 172 +++++++++---------
 pubspec.yaml                                  |  29 +--
 resources/app/build_application_resources.sh  | 127 +++++++++++++
 {icons => resources/app}/featureGraphic.svg   |   0
 {icons => resources/app}/icon.svg             |   0
 .../build_resources.sh                        |   3 +-
 upgrade.sh                                    |  17 --
 16 files changed, 252 insertions(+), 337 deletions(-)
 create mode 100644 .editorconfig
 delete mode 100644 assets/menu/demo.png
 delete mode 100644 assets/menu/graph.png
 delete mode 100755 icons/build_application_icons.sh
 delete mode 100755 icons/build_repository_icons.sh
 delete mode 100644 icons/menu_demo.svg
 delete mode 100644 icons/menu_graph.svg
 create mode 100755 resources/app/build_application_resources.sh
 rename {icons => resources/app}/featureGraphic.svg (100%)
 rename {icons => resources/app}/icon.svg (100%)
 rename icons/build_icons.sh => resources/build_resources.sh (51%)
 delete mode 100755 upgrade.sh

diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..8d86e45
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,15 @@
+root = true
+
+[*]
+indent_style = space
+indent_size = 4
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.json]
+indent_size = 2
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 714964c..1c18897 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -37,7 +37,7 @@ if (keystorePropertiesFile.exists()) {
 }
 
 android {
-    compileSdkVersion 33
+    compileSdkVersion 34
     namespace "org.benoitharrault.random"
 
     defaultConfig {
diff --git a/android/gradle.properties b/android/gradle.properties
index 486dd32..e848b20 100644
--- a/android/gradle.properties
+++ b/android/gradle.properties
@@ -1,5 +1,5 @@
 org.gradle.jvmargs=-Xmx1536M
 android.useAndroidX=true
 android.enableJetifier=true
-app.versionName=1.0.52
-app.versionCode=53
+app.versionName=1.0.53
+app.versionCode=54
diff --git a/assets/menu/demo.png b/assets/menu/demo.png
deleted file mode 100644
index 0285d549c885670d34aa0969a5ba200c113c317a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 12112
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
C#7GeU

diff --git a/assets/menu/graph.png b/assets/menu/graph.png
deleted file mode 100644
index c2224c4ffd3fbe14013888af9fb706ce56c7603f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16600
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%0DH
z91{QThD4_K@%ocl0!@ZZl0|E#Pn(i+>&N|W@pCb;FBpzao??@AZjba|#|MtT*KlbI
zn3(9h`KG7!83dIz%-M7B$<=ubGv_FGZwXSIbvmHoi{vEE*Xw5Kizp{d*&6;<E#}~h
zFDoD4-nM4dDy{umFJ6jUC*1oJUFGJsYO(A&KgrHMhL?)!EKI>XfecQcq~g+!u<=>*
zE4cDJ6m?PxJt!M&lY4QMUDKL=!6OrD@2>0$=~<(D>7=mxxA(WBqKbCjUUYeT{+%D4
z!R%^$WxM3kuQa|`xVTv}TUSc(<r$xf>aJOBuX^A8`}dY}!s_!}ndz?z`un~tT&ujW
z<BDyT*kzBR1&^Cf-n3$sE-u!8b9=L@_UDxCUJ)NZHmm#26_mYvz3x%$T%%SA#)Zdc
zUKGfCaNzLwR0&%lGp8lTmW2ILe9JR|b4OLgyBArqo9BILyd4*EnJ?NPilrzqB|hA<
z=s-xsgz5A4y}vUvnV0u#Y)9Yx`Ts9GnYi+?T5DTtN7Ur2k`*U7R2-St8%fr&Z02)|
zm>K9Vy)sMch@9g)HU`ZmsrNlnDIPzAM6E=gv%XBNh~;(Va+C7B)&4j7Nw@eWBO|`l
zd8ae7vfh~F?WwI17GmR<w90Wf<k0OJva|5R!Ud1tT-6SiSK8%Qp5k{dLgMBZF4uzp
zp#o8nPTBPh3T+XGZ7Y5r->SEO)mirWQdfo0FAFqzdTlwJPqlBoIcsXE+ViBexV*B$
zk4v|S_pPkdTI8PMbN?SRJKsBdg?mSNZEihOahtGF<XMkZ*Q{xoFHS^o6(_K)R+2WK
zyK?LNu*;VN87zGzFGfB0mT!`ieco!g<e84|uLF@hQVdR#MP_>rcqP}?#@#!5=gu4N
z)=JT*s-~u)YyTatt^IpQnZabEq2b1hwZDJ<s91er!e!YgnW7I%USw!6IesaSotY58
zvrsppJU3jOF{Q}w!Q@`uva9W4?Fx69E%kkUS2wzQMy!izOVOJmoqG4ltfvKTzTwQF
zW~Qd*)2C0JGIiRN>C>-Vy=HQI`m$rk*gmY>x%6bxM}yhAa&mHUare?T-#mU@U&Fvc
zMMuX(q^70%cZKF+*>z&JeS9)?A(H}1rUWbrZC1#2DNafI8`oZU{;JNU=TCNXJLo0%
z8@D{wk&ta{;GBM*!`bBfyIUOv%1$afo%#+<U{;u%eYABV=Pa(E>Q5<EO>u?G7{Zkb
z_=+5aW%a5K@C!U-bmdg@TyjM5(0T4(K~kBUlBUhO_o$%m=C|NG8yOz*EYvnSyGuD&
z-{<>|Lp+b}l?Kh|>nL+*W=LrYU*O0mDaAZV^G8OrW7D~Sc1~6ghvU(Tf@>$WEH$`u
zKKqo^b>|gpuKf^@aLw9SyUSLVPvGQ)HNjsOE@VEfz?gnQw6Wt;e^mc6ZiUI;mY!U)
zE@8f?d4s&9uu0;wy9!>CuN>?SYe$$gEet&V##H%PmzxJmQ?2CDtD6m+?$qtRblH=^
z@~gn^v=zObH$Q}l3pIMYU85;?;()i(vwML(4_uZVk&{qJab;I<v`lGQvrglP#zha`
zxTcd!mN$kdt7)zD4RsYU<#kn96PdP5Guzl!XY1pcZ&eyZ;+F|m<oG;SogB$i^xjCU
zMdae*$M?2g3{~M+ndu#{nD5E!mx3OgPMfwZT4Jp8XU2&?t%sKsH5;isxT+B1``W^2
zbDf6J?VV8<D;X3`-8!e86FBKp=2Q5cuT$<s*};wOj~G*eR0P%Lr>bsnSn=S?3PF!v
zw+U0kwpbit@i_8Wps%l(``Po--)mmHkPM8?@!q>Unjs}<dBR0M*3vN1OSS>qyI<5~
zZackmUGjsEToX>ROmEt7zC*A%X1dn=i&+bKyfYcQou&L;Ogl_I&k_v2o_W`h@zunO
zzt>EOb9cXRnU%rvX)DWe<6ZggrTnLO_kKRAVY^ylrip%ANW%jcw%z5D;kF&B&d*+%
zW=zOn`KfQJ@KB25<7c7e)@_%Xt&DuavfuIrAHQ(fmEqvEGooD_&s7(HIS}bn{66Zs
z?DrU<sDFV)Vs{T5p8n~CS4*Sv1fQ6xjP2?Nx2_Ij4_fUgV(cGPb)$9RJ|EN60v4eQ
zdbTMSCb+Rr*>Cm5rcBad#+qp-IaFTnET8+3msLSRP59u1BFTlE<%u4$9G#|Lj0D02
zoL)Pu;6BXYbo#QENk((eHQB{KDxdRN)n5BH{mfl%g-{{MH#4+uNiJgl6jQ-J_0_%D
z@CB=G%{2J1&SHry?_N3WlIaCExAt9c3=w>Lhhy#Q?hL_Csps<ACY{cxn|Cu^lx3&z
zxdd@$mgUA?$EVD=dEi-C=eg+_NA^13nkm${<<UYPe)|&#opNndnPv)bAN%}yQeAn^
zm(LN)c?whJmc84>>d;|*Il1G}y^ZI@)9aW`Kb+tSVsBbwU46t^mq~NFl+r(M)A(Cl
z`=yo?IKS^(D9EwYeX`?Rp^9Cy4zDDy&Mtpex^ID}LR)os)`cwTt18K&3QHJtCvSCT
z<aToLjQSk!;VsJT8e*@%sIcR*tn#yEp>hB1Svx{pr&OjJwHor+v`zFZe!q(Q@@nRp
z7iMd}SZbKdKi5j&)u9K~<pI@FD`qZVYH)YwOF#GJvzeBxQi@`6dKNZyg7T?J2?~`9
z*H$QfJF%f=+QJ)$wj?%%O)c}xbTsD+{JSSksknjZ?qsf4eSv>!#OJNd<C>toc;a0B
z74eQSwT@v8J}l0w%9d>je8?pb$90L<=~V#xE~N+GUoY4aGO=kwi|8`bJeDKJlCyTL
zW;!3rATaCVgK4an96~oqm{_X`UW?71d&u!b%A`_l2P2iD8D>0MOcSpvELqCcu5{>9
z_pK>2JB}%Cv2OeE^IbvHE^CKdCLC$IC#=>l;n~w7p(ml4#p=<vb@Mxw37v0NIf?az
z^9G4-DZ1@@Y|6}AryMR6=Df69{_GWlhp^j?4{ftQOHarTzbqNZIBDVkTdz_i_ww)t
zsy(=>@U*O4FYm#$RR>@49ht6awQKj>DXTdZ)-pD6r2qTFR;lcAi=#b{<<kCxBDPEy
z-K@Xl&p$EmT|-aAcN^Jod4~;0mYvBD*p*Q5T4XK5#8QQlMfaB6KPncmc$t>aq56ea
z6;9lkENi&;W#79RrFCHq4{j+Jm-X;CeeteLxv@9-`?VDQtA|+?y<|Cd9y#t}7Cf_X
z#qaq|tECl`6h3M>sQn3&%bCEuvyc5-(w6y}39O1M_*!^MH3U6EFUM4^TcrG-o6+O6
zoy$-5{S40gd%JjxPORut({@nXvh<YHD~ILQ8DBD@e!q&U3uHKW(NXrE!yW5NO@1B$
zn-hx8zFf8Z`UhAQQ(9LrJF+Ui$l|>|J^cN|Wz3Mh`i6gv#Aa@|d*rFurq0^t@WzkJ
zp6p}VIosiiYHR$7i)U>v2Sg|TPW|h9eVSg>I>r*nM*r8-{<AM%%6aOmRKgqv1_lOC
LS3j3^P6<r_Y*hJX

diff --git a/icons/build_application_icons.sh b/icons/build_application_icons.sh
deleted file mode 100755
index 776681b..0000000
--- a/icons/build_application_icons.sh
+++ /dev/null
@@ -1,89 +0,0 @@
-#! /bin/bash
-
-# Check dependencies
-command -v inkscape >/dev/null 2>&1 || {
-  echo >&2 "I require inkscape but it's not installed. Aborting."
-  exit 1
-}
-command -v scour >/dev/null 2>&1 || {
-  echo >&2 "I require scour but it's not installed. Aborting."
-  exit 1
-}
-command -v optipng >/dev/null 2>&1 || {
-  echo >&2 "I require optipng but it's not installed. Aborting."
-  exit 1
-}
-
-CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
-BASE_DIR="$(dirname "${CURRENT_DIR}")"
-ASSETS_DIR="${BASE_DIR}/assets"
-
-OPTIPNG_OPTIONS="-preserve -quiet -o7"
-ICON_SIZE=192
-
-#######################################################
-
-# Menu images
-AVAILABLE_MENU_IMAGES="
-demo
-graph
-"
-
-#######################################################
-
-# optimize svg
-function optimize_svg() {
-  SOURCE="$1"
-
-  cp "${SOURCE}" "${SOURCE}.tmp"
-  scour \
-    --remove-descriptive-elements \
-    --enable-id-stripping \
-    --enable-viewboxing \
-    --enable-comment-stripping \
-    --nindent=4 \
-    --quiet \
-    -i "${SOURCE}.tmp" \
-    -o "${SOURCE}"
-  rm "${SOURCE}.tmp"
-}
-
-# build icons
-function build_icon() {
-  SOURCE="$1"
-  TARGET="$2"
-
-  echo "Building ${TARGET}"
-
-  if [[ ! -f "${SOURCE}" ]]; then
-    echo "Missing file: ${SOURCE}"
-    exit 1
-  fi
-
-  if [[ ! -d "$(dirname ${TARGET})" ]]; then
-    mkdir -p "$(dirname ${TARGET})"
-  fi
-
-  optimize_svg "${SOURCE}"
-
-  inkscape \
-    --export-width="${ICON_SIZE}" \
-    --export-height="${ICON_SIZE}" \
-    --export-filename="${TARGET}" \
-    "${SOURCE}"
-
-  optipng ${OPTIPNG_OPTIONS} "${TARGET}"
-}
-
-#######################################################
-
-# Create output folders
-mkdir -p "${ASSETS_DIR}"
-
-# Delete existing generated images
-find "${ASSETS_DIR}" -type f -name "*.png" -delete
-
-# build menu images
-for MENU_IMAGE in ${AVAILABLE_MENU_IMAGES}; do
-  build_icon "${CURRENT_DIR}/menu_${MENU_IMAGE}.svg" "${ASSETS_DIR}/menu/${MENU_IMAGE}.png"
-done
diff --git a/icons/build_repository_icons.sh b/icons/build_repository_icons.sh
deleted file mode 100755
index b50cfc2..0000000
--- a/icons/build_repository_icons.sh
+++ /dev/null
@@ -1,127 +0,0 @@
-#! /bin/bash
-
-# Check dependencies
-command -v inkscape >/dev/null 2>&1 || {
-  echo >&2 "I require inkscape but it's not installed. Aborting."
-  exit 1
-}
-command -v scour >/dev/null 2>&1 || {
-  echo >&2 "I require scour but it's not installed. Aborting."
-  exit 1
-}
-command -v optipng >/dev/null 2>&1 || {
-  echo >&2 "I require optipng but it's not installed. Aborting."
-  exit 1
-}
-
-CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
-BASE_DIR="$(dirname "${CURRENT_DIR}")"
-
-SOURCE_ICON="${CURRENT_DIR}/icon.svg"
-SOURCE_FASTLANE="${CURRENT_DIR}/featureGraphic.svg"
-SOURCE_LAUNCH_IMAGE="${CURRENT_DIR}/icon.svg"
-
-OPTIPNG_OPTIONS="-preserve -quiet -o7"
-
-if [ ! -f "${SOURCE_ICON}" ]; then
-  echo "Missing file: ${SOURCE_ICON}"
-fi
-
-if [ ! -f "${SOURCE_FASTLANE}" ]; then
-  echo "Missing file: ${SOURCE_FASTLANE}"
-fi
-
-if [ ! -f "${SOURCE_LAUNCH_IMAGE}" ]; then
-  echo "Missing file: ${SOURCE_LAUNCH_IMAGE}"
-fi
-
-function optimize_svg() {
-  SVG="$1"
-
-  cp "${SVG}" "${SVG}.tmp"
-  scour \
-    --remove-descriptive-elements \
-    --enable-id-stripping \
-    --enable-viewboxing \
-    --enable-comment-stripping \
-    --nindent=4 \
-    --quiet \
-    -i "${SVG}.tmp" \
-    -o "${SVG}"
-  rm "${SVG}.tmp"
-}
-
-# optimize source svg files
-optimize_svg "${SOURCE_ICON}"
-optimize_svg "${SOURCE_FASTLANE}"
-optimize_svg "${SOURCE_LAUNCH_IMAGE}"
-
-# build icons
-function build_application_icon() {
-  ICON_SIZE="$1"
-  TARGET="$2"
-
-  echo "Building ${TARGET}"
-
-  TARGET_PNG="${TARGET}.png"
-
-  inkscape \
-    --export-width="${ICON_SIZE}" \
-    --export-height="${ICON_SIZE}" \
-    --export-filename="${TARGET_PNG}" \
-    "${SOURCE_ICON}"
-
-  optipng ${OPTIPNG_OPTIONS} "${TARGET_PNG}"
-}
-
-# build fastlane image
-function build_fastlane_image() {
-  WIDTH="$1"
-  HEIGHT="$2"
-  TARGET="$3"
-
-  echo "Building ${TARGET}"
-
-  TARGET_PNG="${TARGET}.png"
-
-  inkscape \
-    --export-width="${WIDTH}" \
-    --export-height="${HEIGHT}" \
-    --export-filename="${TARGET_PNG}" \
-    "${SOURCE_FASTLANE}"
-
-  optipng ${OPTIPNG_OPTIONS} "${TARGET_PNG}"
-}
-
-# build launch images (splash screen)
-function build_launch_image() {
-  ICON_SIZE="$1"
-  TARGET="$2"
-
-  echo "Building ${TARGET}"
-
-  TARGET_PNG="${TARGET}.png"
-
-  inkscape \
-    --export-width="${ICON_SIZE}" \
-    --export-height="${ICON_SIZE}" \
-    --export-filename="${TARGET_PNG}" \
-    "${SOURCE_LAUNCH_IMAGE}"
-
-  optipng ${OPTIPNG_OPTIONS} "${TARGET_PNG}"
-}
-
-build_application_icon 72 "${BASE_DIR}/android/app/src/main/res/mipmap-hdpi/ic_launcher"
-build_application_icon 48 "${BASE_DIR}/android/app/src/main/res/mipmap-mdpi/ic_launcher"
-build_application_icon 96 "${BASE_DIR}/android/app/src/main/res/mipmap-xhdpi/ic_launcher"
-build_application_icon 144 "${BASE_DIR}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher"
-build_application_icon 192 "${BASE_DIR}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher"
-build_application_icon 512 "${BASE_DIR}/fastlane/metadata/android/en-US/images/icon"
-
-build_launch_image 72 "${BASE_DIR}/android/app/src/main/res/mipmap-hdpi/launch_image"
-build_launch_image 48 "${BASE_DIR}/android/app/src/main/res/mipmap-mdpi/launch_image"
-build_launch_image 96 "${BASE_DIR}/android/app/src/main/res/mipmap-xhdpi/launch_image"
-build_launch_image 144 "${BASE_DIR}/android/app/src/main/res/mipmap-xxhdpi/launch_image"
-build_launch_image 192 "${BASE_DIR}/android/app/src/main/res/mipmap-xxxhdpi/launch_image"
-
-build_fastlane_image 1024 500 "${BASE_DIR}/fastlane/metadata/android/en-US/images/featureGraphic"
diff --git a/icons/menu_demo.svg b/icons/menu_demo.svg
deleted file mode 100644
index f1ae7ea..0000000
--- a/icons/menu_demo.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 102 102" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><defs><radialGradient id="radialGradient876" cx="51" cy="51" r="51" gradientUnits="userSpaceOnUse"><stop stop-color="#94bc4f" offset=".53489"/><stop stop-color="#e84e34" offset="1"/></radialGradient></defs><rect x="1" y="1" width="100" height="100" ry="0" fill="url(#radialGradient876)" stroke="#000" stroke-width="2"/><path d="m50.952 32.393c1.3622-0.0046 4.9652 11.398 6.07 12.195 1.1048 0.79696 13.062 0.61914 13.487 1.9133s-9.3059 8.2444-9.7225 9.5414c-0.41657 1.297 3.4475 12.614 2.3481 13.418-1.0993 0.80441-10.717-6.3028-12.079-6.2982-1.3622 0.0046-10.931 7.1767-12.036 6.3797s2.6827-12.14 2.2574-13.434c-0.42533-1.2941-10.203-8.1785-9.7868-9.4754 0.41657-1.297 12.375-1.2 13.474-2.0044s4.6252-12.231 5.9874-12.236z" fill="#fff" stroke="#030303" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="6" stroke-width="3.3"/></svg>
diff --git a/icons/menu_graph.svg b/icons/menu_graph.svg
deleted file mode 100644
index cb653f2..0000000
--- a/icons/menu_graph.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 102 102" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><defs><radialGradient id="radialGradient876" cx="51" cy="51" r="51" gradientUnits="userSpaceOnUse"><stop stop-color="#534fbc" offset=".53489"/><stop stop-color="#d5e834" offset="1"/></radialGradient></defs><rect x="1" y="1" width="100" height="100" ry="0" fill="url(#radialGradient876)" stroke="#000" stroke-width="2"/><path transform="translate(12.795 -12.378)" d="m41.231 66.406c1.2372-1.351 2.4315 1.0012 2.2454 2.0564-0.50427 2.8593-4.1113 3.4739-6.3581 2.4345-4.0191-1.8593-4.7114-7.1159-2.6236-10.66 3.0639-5.201 10.16-5.9833 14.962-2.8126 6.3992 4.226 7.2698 13.219 3.0017 19.263-5.371 7.6061-16.285 8.5638-23.565 3.1908-8.8179-6.5075-9.8622-19.354-3.3798-27.867 7.6392-10.033 22.425-11.163 32.169-3.5689 11.249 8.768 12.466 25.498 3.758 36.471-9.8949 12.468-28.572 13.77-40.772 3.947-13.687-11.02-15.076-31.647-4.1361-45.074 12.145-14.906 34.723-16.381 49.376-4.3252" fill="none" stroke="#000" stroke-linecap="round" stroke-width="6"/></svg>
diff --git a/pubspec.lock b/pubspec.lock
index 8780081..5512b13 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -5,10 +5,10 @@ packages:
     dependency: transitive
     description:
       name: args
-      sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596
+      sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a"
       url: "https://pub.dev"
     source: hosted
-    version: "2.4.2"
+    version: "2.5.0"
   async:
     dependency: transitive
     description:
@@ -29,42 +29,42 @@ packages:
     dependency: "direct main"
     description:
       name: camera
-      sha256: "9499cbc2e51d8eb0beadc158b288380037618ce4e30c9acbc4fae1ac3ecb5797"
+      sha256: "26ff41045772153f222ffffecba711a206f670f5834d40ebf5eed3811692f167"
       url: "https://pub.dev"
     source: hosted
-    version: "0.10.5+9"
-  camera_android:
+    version: "0.11.0+2"
+  camera_android_camerax:
     dependency: transitive
     description:
-      name: camera_android
-      sha256: ae5b9a996dfb8d77b02031b67f5500873d6402f33bd6a5283e932eef08542a51
+      name: camera_android_camerax
+      sha256: "7cd93578ad201dcc6bb5810451fb00d76a86bab9b68dceb68b8cbd7038ac5846"
       url: "https://pub.dev"
     source: hosted
-    version: "0.10.9"
+    version: "0.6.8+3"
   camera_avfoundation:
     dependency: transitive
     description:
       name: camera_avfoundation
-      sha256: "5d009ae48de1c8ab621b1c4496dadb6e2a83f3223b76c6e6a4a252414105f561"
+      sha256: "7c28969a975a7eb2349bc2cb2dfe3ad218a33dba9968ecfb181ce08c87486655"
       url: "https://pub.dev"
     source: hosted
-    version: "0.9.15"
+    version: "0.9.17+3"
   camera_platform_interface:
     dependency: transitive
     description:
       name: camera_platform_interface
-      sha256: a250314a48ea337b35909a4c9d5416a208d736dcb01d0b02c6af122be66660b0
+      sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061
       url: "https://pub.dev"
     source: hosted
-    version: "2.7.4"
+    version: "2.8.0"
   camera_web:
     dependency: transitive
     description:
       name: camera_web
-      sha256: "9e9aba2fbab77ce2472924196ff8ac4dd8f9126c4f9a3096171cd1d870d6b26c"
+      sha256: "595f28c89d1fb62d77c73c633193755b781c6d2e0ebcd8dc25b763b514e6ba8f"
       url: "https://pub.dev"
     source: hosted
-    version: "0.3.3"
+    version: "0.3.5"
   characters:
     dependency: transitive
     description:
@@ -93,42 +93,50 @@ packages:
     dependency: transitive
     description:
       name: cross_file
-      sha256: "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32"
+      sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670"
       url: "https://pub.dev"
     source: hosted
-    version: "0.3.4+1"
+    version: "0.3.4+2"
   crypto:
     dependency: transitive
     description:
       name: crypto
-      sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab
+      sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27
       url: "https://pub.dev"
     source: hosted
-    version: "3.0.3"
+    version: "3.0.5"
   curved_navigation_bar:
     dependency: "direct main"
     description:
       name: curved_navigation_bar
-      sha256: ea6412d00c5d83501bbf1cf9d1ac2ff11a20fbaf910c103c95ace7de82910334
+      sha256: bb4ab128fcb6f4a9f0f1f72d227db531818b20218984789777f049fcbf919279
       url: "https://pub.dev"
     source: hosted
-    version: "1.0.3"
+    version: "1.0.6"
   dio:
     dependency: "direct main"
     description:
       name: dio
-      sha256: "0978e9a3e45305a80a7210dbeaf79d6ee8bee33f70c8e542dc654c952070217f"
+      sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260"
       url: "https://pub.dev"
     source: hosted
-    version: "5.4.2+1"
+    version: "5.7.0"
+  dio_web_adapter:
+    dependency: transitive
+    description:
+      name: dio_web_adapter
+      sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.0.0"
   easy_localization:
     dependency: "direct main"
     description:
       name: easy_localization
-      sha256: c145aeb6584aedc7c862ab8c737c3277788f47488bfdf9bae0fe112bd0a4789c
+      sha256: fa59bcdbbb911a764aa6acf96bbb6fa7a5cf8234354fc45ec1a43a0349ef0201
       url: "https://pub.dev"
     source: hosted
-    version: "3.0.5"
+    version: "3.0.7"
   easy_logger:
     dependency: transitive
     description:
@@ -149,10 +157,10 @@ packages:
     dependency: transitive
     description:
       name: ffi
-      sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21"
+      sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.2"
+    version: "2.1.3"
   file:
     dependency: transitive
     description:
@@ -170,18 +178,18 @@ packages:
     dependency: "direct main"
     description:
       name: flutter_bloc
-      sha256: f0ecf6e6eb955193ca60af2d5ca39565a86b8a142452c5b24d96fb477428f4d2
+      sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a
       url: "https://pub.dev"
     source: hosted
-    version: "8.1.5"
+    version: "8.1.6"
   flutter_lints:
     dependency: "direct dev"
     description:
       name: flutter_lints
-      sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1"
+      sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c"
       url: "https://pub.dev"
     source: hosted
-    version: "3.0.2"
+    version: "4.0.0"
   flutter_localizations:
     dependency: transitive
     description: flutter
@@ -191,10 +199,10 @@ packages:
     dependency: transitive
     description:
       name: flutter_plugin_android_lifecycle
-      sha256: b068ffc46f82a55844acfa4fdbb61fad72fa2aef0905548419d97f0f95c456da
+      sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda"
       url: "https://pub.dev"
     source: hosted
-    version: "2.0.17"
+    version: "2.0.22"
   flutter_web_plugins:
     dependency: transitive
     description: flutter
@@ -212,10 +220,10 @@ packages:
     dependency: transitive
     description:
       name: http
-      sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938"
+      sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
       url: "https://pub.dev"
     source: hosted
-    version: "1.2.1"
+    version: "1.2.2"
   http_parser:
     dependency: transitive
     description:
@@ -236,34 +244,34 @@ packages:
     dependency: transitive
     description:
       name: intl
-      sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
+      sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
       url: "https://pub.dev"
     source: hosted
-    version: "0.18.1"
+    version: "0.19.0"
   lints:
     dependency: transitive
     description:
       name: lints
-      sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290
+      sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235"
       url: "https://pub.dev"
     source: hosted
-    version: "3.0.0"
+    version: "4.0.0"
   material_color_utilities:
     dependency: transitive
     description:
       name: material_color_utilities
-      sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
+      sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
       url: "https://pub.dev"
     source: hosted
-    version: "0.8.0"
+    version: "0.11.1"
   meta:
     dependency: transitive
     description:
       name: meta
-      sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04
+      sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
       url: "https://pub.dev"
     source: hosted
-    version: "1.11.0"
+    version: "1.15.0"
   nested:
     dependency: transitive
     description:
@@ -276,18 +284,18 @@ packages:
     dependency: "direct main"
     description:
       name: package_info_plus
-      sha256: cb44f49b6e690fa766f023d5b22cac6b9affe741dd792b6ac7ad4fabe0d7b097
+      sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918
       url: "https://pub.dev"
     source: hosted
-    version: "6.0.0"
+    version: "8.0.2"
   package_info_plus_platform_interface:
     dependency: transitive
     description:
       name: package_info_plus_platform_interface
-      sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6"
+      sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66
       url: "https://pub.dev"
     source: hosted
-    version: "2.0.1"
+    version: "3.0.1"
   path:
     dependency: "direct main"
     description:
@@ -300,26 +308,26 @@ packages:
     dependency: "direct main"
     description:
       name: path_provider
-      sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b
+      sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.2"
+    version: "2.1.4"
   path_provider_android:
     dependency: transitive
     description:
       name: path_provider_android
-      sha256: "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668"
+      sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7"
       url: "https://pub.dev"
     source: hosted
-    version: "2.2.2"
+    version: "2.2.10"
   path_provider_foundation:
     dependency: transitive
     description:
       name: path_provider_foundation
-      sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f"
+      sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
       url: "https://pub.dev"
     source: hosted
-    version: "2.3.2"
+    version: "2.4.0"
   path_provider_linux:
     dependency: transitive
     description:
@@ -340,18 +348,18 @@ packages:
     dependency: transitive
     description:
       name: path_provider_windows
-      sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170"
+      sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
       url: "https://pub.dev"
     source: hosted
-    version: "2.2.1"
+    version: "2.3.0"
   platform:
     dependency: transitive
     description:
       name: platform
-      sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec"
+      sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65"
       url: "https://pub.dev"
     source: hosted
-    version: "3.1.4"
+    version: "3.1.5"
   plugin_platform_interface:
     dependency: transitive
     description:
@@ -372,58 +380,58 @@ packages:
     dependency: transitive
     description:
       name: shared_preferences
-      sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02"
+      sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051"
       url: "https://pub.dev"
     source: hosted
-    version: "2.2.2"
+    version: "2.3.2"
   shared_preferences_android:
     dependency: transitive
     description:
       name: shared_preferences_android
-      sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06"
+      sha256: "480ba4345773f56acda9abf5f50bd966f581dac5d514e5fc4a18c62976bbba7e"
       url: "https://pub.dev"
     source: hosted
-    version: "2.2.1"
+    version: "2.3.2"
   shared_preferences_foundation:
     dependency: transitive
     description:
       name: shared_preferences_foundation
-      sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c"
+      sha256: c4b35f6cb8f63c147312c054ce7c2254c8066745125264f0c88739c417fc9d9f
       url: "https://pub.dev"
     source: hosted
-    version: "2.3.5"
+    version: "2.5.2"
   shared_preferences_linux:
     dependency: transitive
     description:
       name: shared_preferences_linux
-      sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa"
+      sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f"
       url: "https://pub.dev"
     source: hosted
-    version: "2.3.2"
+    version: "2.4.1"
   shared_preferences_platform_interface:
     dependency: transitive
     description:
       name: shared_preferences_platform_interface
-      sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b"
+      sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80"
       url: "https://pub.dev"
     source: hosted
-    version: "2.3.2"
+    version: "2.4.1"
   shared_preferences_web:
     dependency: transitive
     description:
       name: shared_preferences_web
-      sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a"
+      sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e
       url: "https://pub.dev"
     source: hosted
-    version: "2.3.0"
+    version: "2.4.2"
   shared_preferences_windows:
     dependency: transitive
     description:
       name: shared_preferences_windows
-      sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59"
+      sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1"
       url: "https://pub.dev"
     source: hosted
-    version: "2.3.2"
+    version: "2.4.1"
   sky_engine:
     dependency: transitive
     description: flutter
@@ -449,18 +457,18 @@ packages:
     dependency: transitive
     description:
       name: string_scanner
-      sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
+      sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
       url: "https://pub.dev"
     source: hosted
-    version: "1.2.0"
+    version: "1.3.0"
   synchronized:
     dependency: transitive
     description:
       name: synchronized
-      sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558"
+      sha256: "51b08572b9f091f8c3eb4d9d4be253f196ff0075d5ec9b10a884026d5b55d7bc"
       url: "https://pub.dev"
     source: hosted
-    version: "3.1.0+1"
+    version: "3.3.0+2"
   term_glyph:
     dependency: transitive
     description:
@@ -481,10 +489,10 @@ packages:
     dependency: "direct main"
     description:
       name: unicons
-      sha256: dbfcf93ff4d4ea19b324113857e358e4882115ab85db04417a4ba1c72b17a670
+      sha256: f3eab9d87c226415ef857cfd2167e1d12ad81ea1f5783b46cf644224fea4eab7
       url: "https://pub.dev"
     source: hosted
-    version: "2.1.1"
+    version: "3.0.0"
   vector_math:
     dependency: transitive
     description:
@@ -497,18 +505,18 @@ packages:
     dependency: transitive
     description:
       name: web
-      sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27"
+      sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062
       url: "https://pub.dev"
     source: hosted
-    version: "0.5.1"
+    version: "1.0.0"
   win32:
     dependency: transitive
     description:
       name: win32
-      sha256: "0a989dc7ca2bb51eac91e8fd00851297cfffd641aa7538b165c62637ca0eaa4a"
+      sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a"
       url: "https://pub.dev"
     source: hosted
-    version: "5.4.0"
+    version: "5.5.4"
   xdg_directories:
     dependency: transitive
     description:
@@ -518,5 +526,5 @@ packages:
     source: hosted
     version: "1.0.4"
 sdks:
-  dart: ">=3.3.0 <4.0.0"
-  flutter: ">=3.19.0"
+  dart: ">=3.5.0 <4.0.0"
+  flutter: ">=3.24.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index 546f914..7c22ee5 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,34 +1,39 @@
 name: random
 description: A random application, for testing purpose only.
 
-publish_to: 'none'
+publish_to: "none"
 
-version: 1.0.52+53
+version: 1.0.53+54
 
 environment:
-  sdk: '^3.0.0'
+  sdk: "^3.0.0"
 
 dependencies:
   flutter:
     sdk: flutter
 
-  camera: ^0.10.5+8
-  curved_navigation_bar: ^1.0.3
+  # base
   easy_localization: ^3.0.1
   equatable: ^2.0.5
   flutter_bloc: ^8.1.1
-  path_provider: ^2.0.11
+  hive: ^2.2.3
   hydrated_bloc: ^9.0.0
-  unicons: ^2.1.1
-  package_info_plus: ^6.0.0
+  package_info_plus: ^8.0.0
+  path_provider: ^2.0.11
+  unicons: ^3.0.0
+
+  # specific
+  camera: ^0.11.0+2
+  curved_navigation_bar: ^1.0.3
   dio: ^5.3.3
-  hive: ^2.2.3
   path: ^1.9.0
 
+dev_dependencies:
+  flutter_lints: ^4.0.0
+
 flutter:
-  uses-material-design: false
+  uses-material-design: true
   assets:
-    - assets/menu/
     - assets/translations/
 
   fonts:
@@ -42,5 +47,3 @@ flutter:
           weight: 400
         - asset: assets/fonts/Nunito-Light.ttf
           weight: 300
-dev_dependencies:
-  flutter_lints: ^3.0.1
diff --git a/resources/app/build_application_resources.sh b/resources/app/build_application_resources.sh
new file mode 100755
index 0000000..1ace90d
--- /dev/null
+++ b/resources/app/build_application_resources.sh
@@ -0,0 +1,127 @@
+#! /bin/bash
+
+# Check dependencies
+command -v inkscape >/dev/null 2>&1 || {
+  echo >&2 "I require inkscape but it's not installed. Aborting."
+  exit 1
+}
+command -v scour >/dev/null 2>&1 || {
+  echo >&2 "I require scour but it's not installed. Aborting."
+  exit 1
+}
+command -v optipng >/dev/null 2>&1 || {
+  echo >&2 "I require optipng but it's not installed. Aborting."
+  exit 1
+}
+
+CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
+BASE_DIR="$(dirname "$(dirname "${CURRENT_DIR}")")"
+
+SOURCE_ICON="${CURRENT_DIR}/icon.svg"
+SOURCE_FASTLANE="${CURRENT_DIR}/featureGraphic.svg"
+SOURCE_LAUNCH_IMAGE="${CURRENT_DIR}/icon.svg"
+
+OPTIPNG_OPTIONS="-preserve -quiet -o7"
+
+if [ ! -f "${SOURCE_ICON}" ]; then
+  echo "Missing file: ${SOURCE_ICON}"
+fi
+
+if [ ! -f "${SOURCE_FASTLANE}" ]; then
+  echo "Missing file: ${SOURCE_FASTLANE}"
+fi
+
+if [ ! -f "${SOURCE_LAUNCH_IMAGE}" ]; then
+  echo "Missing file: ${SOURCE_LAUNCH_IMAGE}"
+fi
+
+function optimize_svg() {
+  SVG="$1"
+
+  cp ${SVG} ${SVG}.tmp
+  scour \
+    --remove-descriptive-elements \
+    --enable-id-stripping \
+    --enable-viewboxing \
+    --enable-comment-stripping \
+    --nindent=4 \
+    --quiet \
+    -i ${SVG}.tmp \
+    -o ${SVG}
+  rm ${SVG}.tmp
+}
+
+# optimize source svg files
+optimize_svg ${SOURCE_ICON}
+optimize_svg ${SOURCE_FASTLANE}
+optimize_svg ${SOURCE_LAUNCH_IMAGE}
+
+# build icons
+function build_application_icon() {
+  ICON_SIZE="$1"
+  TARGET="$2"
+
+  echo "Building ${TARGET}"
+
+  TARGET_PNG="${TARGET}.png"
+
+  inkscape \
+    --export-width=${ICON_SIZE} \
+    --export-height=${ICON_SIZE} \
+    --export-filename=${TARGET_PNG} \
+    ${SOURCE_ICON}
+
+  optipng ${OPTIPNG_OPTIONS} ${TARGET_PNG}
+}
+
+# build fastlane image
+function build_fastlane_image() {
+  WIDTH="$1"
+  HEIGHT="$2"
+  TARGET="$3"
+
+  echo "Building ${TARGET}"
+
+  TARGET_PNG="${TARGET}.png"
+
+  inkscape \
+    --export-width=${WIDTH} \
+    --export-height=${HEIGHT} \
+    --export-filename=${TARGET_PNG} \
+    ${SOURCE_FASTLANE}
+
+  optipng ${OPTIPNG_OPTIONS} ${TARGET_PNG}
+}
+
+# build launch images (splash screen)
+function build_launch_image() {
+  ICON_SIZE="$1"
+  TARGET="$2"
+
+  echo "Building ${TARGET}"
+
+  TARGET_PNG="${TARGET}.png"
+
+  inkscape \
+    --export-width=${ICON_SIZE} \
+    --export-height=${ICON_SIZE} \
+    --export-filename=${TARGET_PNG} \
+    ${SOURCE_LAUNCH_IMAGE}
+
+  optipng ${OPTIPNG_OPTIONS} ${TARGET_PNG}
+}
+
+build_application_icon 72 ${BASE_DIR}/android/app/src/main/res/mipmap-hdpi/ic_launcher
+build_application_icon 48 ${BASE_DIR}/android/app/src/main/res/mipmap-mdpi/ic_launcher
+build_application_icon 96 ${BASE_DIR}/android/app/src/main/res/mipmap-xhdpi/ic_launcher
+build_application_icon 144 ${BASE_DIR}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher
+build_application_icon 192 ${BASE_DIR}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher
+build_application_icon 512 ${BASE_DIR}/fastlane/metadata/android/en-US/images/icon
+
+build_launch_image 72 ${BASE_DIR}/android/app/src/main/res/mipmap-hdpi/launch_image
+build_launch_image 48 ${BASE_DIR}/android/app/src/main/res/mipmap-mdpi/launch_image
+build_launch_image 96 ${BASE_DIR}/android/app/src/main/res/mipmap-xhdpi/launch_image
+build_launch_image 144 ${BASE_DIR}/android/app/src/main/res/mipmap-xxhdpi/launch_image
+build_launch_image 192 ${BASE_DIR}/android/app/src/main/res/mipmap-xxxhdpi/launch_image
+
+build_fastlane_image 1024 500 ${BASE_DIR}/fastlane/metadata/android/en-US/images/featureGraphic
diff --git a/icons/featureGraphic.svg b/resources/app/featureGraphic.svg
similarity index 100%
rename from icons/featureGraphic.svg
rename to resources/app/featureGraphic.svg
diff --git a/icons/icon.svg b/resources/app/icon.svg
similarity index 100%
rename from icons/icon.svg
rename to resources/app/icon.svg
diff --git a/icons/build_icons.sh b/resources/build_resources.sh
similarity index 51%
rename from icons/build_icons.sh
rename to resources/build_resources.sh
index 915a16c..4b76d1c 100755
--- a/icons/build_icons.sh
+++ b/resources/build_resources.sh
@@ -2,5 +2,4 @@
 
 CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
 
-"${CURRENT_DIR}/build_application_icons.sh"
-"${CURRENT_DIR}/build_repository_icons.sh"
+${CURRENT_DIR}/app/build_application_resources.sh
diff --git a/upgrade.sh b/upgrade.sh
deleted file mode 100755
index bd9c64a..0000000
--- a/upgrade.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/env bash
-
-set -o errexit
-set -o nounset
-set -o pipefail
-
-# Check dependencies
-command -v flutter >/dev/null 2>&1 || {
-  echo >&2 "I require flutter but it's not installed. Aborting."
-  exit 1
-}
-
-flutter pub upgrade
-flutter pub upgrade --major-versions
-flutter pub get
-
-flutter build apk --debug
-- 
GitLab