diff --git a/App Store Icons/android/drawable/ic_launcher_background.xml b/App Store Icons/android/drawable/ic_launcher_background.xml
new file mode 100755
index 00000000..ca3826a4
--- /dev/null
+++ b/App Store Icons/android/drawable/ic_launcher_background.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/App Store Icons/android/mipmap-anydpi-v26/ic_launcher.xml b/App Store Icons/android/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100755
index 00000000..d372a4fc
--- /dev/null
+++ b/App Store Icons/android/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/App Store Icons/android/mipmap-anydpi-v26/ic_launcher_round.xml b/App Store Icons/android/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100755
index 00000000..d372a4fc
--- /dev/null
+++ b/App Store Icons/android/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/App Store Icons/android/mipmap-hdpi/ic_launcher.png b/App Store Icons/android/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 00000000..dfc4307a
Binary files /dev/null and b/App Store Icons/android/mipmap-hdpi/ic_launcher.png differ
diff --git a/App Store Icons/android/mipmap-hdpi/ic_launcher_foreground.png b/App Store Icons/android/mipmap-hdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..61cb21c7
Binary files /dev/null and b/App Store Icons/android/mipmap-hdpi/ic_launcher_foreground.png differ
diff --git a/App Store Icons/android/mipmap-hdpi/ic_launcher_round.png b/App Store Icons/android/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 00000000..fb945cbd
Binary files /dev/null and b/App Store Icons/android/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/App Store Icons/android/mipmap-mdpi/ic_launcher.png b/App Store Icons/android/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 00000000..16b99780
Binary files /dev/null and b/App Store Icons/android/mipmap-mdpi/ic_launcher.png differ
diff --git a/App Store Icons/android/mipmap-mdpi/ic_launcher_foreground.png b/App Store Icons/android/mipmap-mdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..5c8fb3ec
Binary files /dev/null and b/App Store Icons/android/mipmap-mdpi/ic_launcher_foreground.png differ
diff --git a/App Store Icons/android/mipmap-mdpi/ic_launcher_round.png b/App Store Icons/android/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 00000000..c470c59a
Binary files /dev/null and b/App Store Icons/android/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/App Store Icons/android/mipmap-xhdpi/ic_launcher.png b/App Store Icons/android/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..e68eb987
Binary files /dev/null and b/App Store Icons/android/mipmap-xhdpi/ic_launcher.png differ
diff --git a/App Store Icons/android/mipmap-xhdpi/ic_launcher_foreground.png b/App Store Icons/android/mipmap-xhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..61a5aea3
Binary files /dev/null and b/App Store Icons/android/mipmap-xhdpi/ic_launcher_foreground.png differ
diff --git a/App Store Icons/android/mipmap-xhdpi/ic_launcher_round.png b/App Store Icons/android/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..850c1f58
Binary files /dev/null and b/App Store Icons/android/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/App Store Icons/android/mipmap-xxhdpi/ic_launcher.png b/App Store Icons/android/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..4070ce10
Binary files /dev/null and b/App Store Icons/android/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/App Store Icons/android/mipmap-xxhdpi/ic_launcher_foreground.png b/App Store Icons/android/mipmap-xxhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..9ba7cf5d
Binary files /dev/null and b/App Store Icons/android/mipmap-xxhdpi/ic_launcher_foreground.png differ
diff --git a/App Store Icons/android/mipmap-xxhdpi/ic_launcher_round.png b/App Store Icons/android/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..53ac4eb5
Binary files /dev/null and b/App Store Icons/android/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/App Store Icons/android/mipmap-xxxhdpi/ic_launcher.png b/App Store Icons/android/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 00000000..8f0fb09e
Binary files /dev/null and b/App Store Icons/android/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/App Store Icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png b/App Store Icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..86639b6a
Binary files /dev/null and b/App Store Icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png differ
diff --git a/App Store Icons/android/mipmap-xxxhdpi/ic_launcher_round.png b/App Store Icons/android/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..49711484
Binary files /dev/null and b/App Store Icons/android/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/App Store Icons/android/playstore-icon copy.png b/App Store Icons/android/playstore-icon copy.png
new file mode 100644
index 00000000..b6d890ef
Binary files /dev/null and b/App Store Icons/android/playstore-icon copy.png differ
diff --git a/App Store Icons/android/playstore-icon.png b/App Store Icons/android/playstore-icon.png
new file mode 100644
index 00000000..40797293
Binary files /dev/null and b/App Store Icons/android/playstore-icon.png differ
diff --git a/App Store Icons/ios/AppIcon.appiconset/Contents.json b/App Store Icons/ios/AppIcon.appiconset/Contents.json
new file mode 100755
index 00000000..5c8064e1
--- /dev/null
+++ b/App Store Icons/ios/AppIcon.appiconset/Contents.json
@@ -0,0 +1,122 @@
+{
+ "images": [
+ {
+ "idiom": "iphone",
+ "size": "20x20",
+ "scale": "2x",
+ "filename": "Icon-App-20x20@2x.png"
+ },
+ {
+ "idiom": "iphone",
+ "size": "20x20",
+ "scale": "3x",
+ "filename": "Icon-App-20x20@3x.png"
+ },
+ {
+ "idiom": "iphone",
+ "size": "29x29",
+ "scale": "1x",
+ "filename": "Icon-App-29x29@1x.png"
+ },
+ {
+ "idiom": "iphone",
+ "size": "29x29",
+ "scale": "2x",
+ "filename": "Icon-App-29x29@2x.png"
+ },
+ {
+ "idiom": "iphone",
+ "size": "29x29",
+ "scale": "3x",
+ "filename": "Icon-App-29x29@3x.png"
+ },
+ {
+ "idiom": "iphone",
+ "size": "40x40",
+ "scale": "2x",
+ "filename": "Icon-App-40x40@2x.png"
+ },
+ {
+ "idiom": "iphone",
+ "size": "40x40",
+ "scale": "3x",
+ "filename": "Icon-App-40x40@3x.png"
+ },
+ {
+ "idiom": "iphone",
+ "size": "60x60",
+ "scale": "2x",
+ "filename": "Icon-App-60x60@2x.png"
+ },
+ {
+ "idiom": "iphone",
+ "size": "60x60",
+ "scale": "3x",
+ "filename": "Icon-App-60x60@3x.png"
+ },
+ {
+ "idiom": "ipad",
+ "size": "20x20",
+ "scale": "1x",
+ "filename": "Icon-App-20x20@1x.png"
+ },
+ {
+ "idiom": "ipad",
+ "size": "20x20",
+ "scale": "2x",
+ "filename": "Icon-App-20x20@2x.png"
+ },
+ {
+ "idiom": "ipad",
+ "size": "29x29",
+ "scale": "1x",
+ "filename": "Icon-App-29x29@1x.png"
+ },
+ {
+ "idiom": "ipad",
+ "size": "29x29",
+ "scale": "2x",
+ "filename": "Icon-App-29x29@2x.png"
+ },
+ {
+ "idiom": "ipad",
+ "size": "40x40",
+ "scale": "1x",
+ "filename": "Icon-App-40x40@1x.png"
+ },
+ {
+ "idiom": "ipad",
+ "size": "40x40",
+ "scale": "2x",
+ "filename": "Icon-App-40x40@2x.png"
+ },
+ {
+ "idiom": "ipad",
+ "size": "76x76",
+ "scale": "1x",
+ "filename": "Icon-App-76x76@1x.png"
+ },
+ {
+ "idiom": "ipad",
+ "size": "76x76",
+ "scale": "2x",
+ "filename": "Icon-App-76x76@2x.png"
+ },
+ {
+ "idiom": "ipad",
+ "size": "83.5x83.5",
+ "scale": "2x",
+ "filename": "Icon-App-83.5x83.5@2x.png"
+ },
+ {
+ "size": "1024x1024",
+ "idiom": "ios-marketing",
+ "scale": "1x",
+ "filename": "ItunesArtwork@2x.png"
+ }
+ ],
+ "info": {
+ "version": 1,
+ "author": "makeappicon"
+ }
+}
diff --git a/App Store Icons/ios/AppIcon.appiconset/Icon-App-20x20@1x.png b/App Store Icons/ios/AppIcon.appiconset/Icon-App-20x20@1x.png
new file mode 100644
index 00000000..70592c0f
Binary files /dev/null and b/App Store Icons/ios/AppIcon.appiconset/Icon-App-20x20@1x.png differ
diff --git a/App Store Icons/ios/AppIcon.appiconset/Icon-App-20x20@2x.png b/App Store Icons/ios/AppIcon.appiconset/Icon-App-20x20@2x.png
new file mode 100644
index 00000000..6ed950dc
Binary files /dev/null and b/App Store Icons/ios/AppIcon.appiconset/Icon-App-20x20@2x.png differ
diff --git a/App Store Icons/ios/AppIcon.appiconset/Icon-App-20x20@3x.png b/App Store Icons/ios/AppIcon.appiconset/Icon-App-20x20@3x.png
new file mode 100644
index 00000000..0c2ac3ed
Binary files /dev/null and b/App Store Icons/ios/AppIcon.appiconset/Icon-App-20x20@3x.png differ
diff --git a/App Store Icons/ios/AppIcon.appiconset/Icon-App-29x29@1x.png b/App Store Icons/ios/AppIcon.appiconset/Icon-App-29x29@1x.png
new file mode 100644
index 00000000..35d63116
Binary files /dev/null and b/App Store Icons/ios/AppIcon.appiconset/Icon-App-29x29@1x.png differ
diff --git a/App Store Icons/ios/AppIcon.appiconset/Icon-App-29x29@2x.png b/App Store Icons/ios/AppIcon.appiconset/Icon-App-29x29@2x.png
new file mode 100644
index 00000000..f1dd6085
Binary files /dev/null and b/App Store Icons/ios/AppIcon.appiconset/Icon-App-29x29@2x.png differ
diff --git a/App Store Icons/ios/AppIcon.appiconset/Icon-App-29x29@3x.png b/App Store Icons/ios/AppIcon.appiconset/Icon-App-29x29@3x.png
new file mode 100644
index 00000000..3c9fc024
Binary files /dev/null and b/App Store Icons/ios/AppIcon.appiconset/Icon-App-29x29@3x.png differ
diff --git a/App Store Icons/ios/AppIcon.appiconset/Icon-App-40x40@1x.png b/App Store Icons/ios/AppIcon.appiconset/Icon-App-40x40@1x.png
new file mode 100644
index 00000000..6ed950dc
Binary files /dev/null and b/App Store Icons/ios/AppIcon.appiconset/Icon-App-40x40@1x.png differ
diff --git a/App Store Icons/ios/AppIcon.appiconset/Icon-App-40x40@2x.png b/App Store Icons/ios/AppIcon.appiconset/Icon-App-40x40@2x.png
new file mode 100644
index 00000000..ac72635a
Binary files /dev/null and b/App Store Icons/ios/AppIcon.appiconset/Icon-App-40x40@2x.png differ
diff --git a/App Store Icons/ios/AppIcon.appiconset/Icon-App-40x40@3x.png b/App Store Icons/ios/AppIcon.appiconset/Icon-App-40x40@3x.png
new file mode 100644
index 00000000..883ffdb9
Binary files /dev/null and b/App Store Icons/ios/AppIcon.appiconset/Icon-App-40x40@3x.png differ
diff --git a/App Store Icons/ios/AppIcon.appiconset/Icon-App-60x60@2x.png b/App Store Icons/ios/AppIcon.appiconset/Icon-App-60x60@2x.png
new file mode 100644
index 00000000..883ffdb9
Binary files /dev/null and b/App Store Icons/ios/AppIcon.appiconset/Icon-App-60x60@2x.png differ
diff --git a/App Store Icons/ios/AppIcon.appiconset/Icon-App-60x60@3x.png b/App Store Icons/ios/AppIcon.appiconset/Icon-App-60x60@3x.png
new file mode 100644
index 00000000..28baeae8
Binary files /dev/null and b/App Store Icons/ios/AppIcon.appiconset/Icon-App-60x60@3x.png differ
diff --git a/App Store Icons/ios/AppIcon.appiconset/Icon-App-76x76@1x.png b/App Store Icons/ios/AppIcon.appiconset/Icon-App-76x76@1x.png
new file mode 100644
index 00000000..a74333b2
Binary files /dev/null and b/App Store Icons/ios/AppIcon.appiconset/Icon-App-76x76@1x.png differ
diff --git a/App Store Icons/ios/AppIcon.appiconset/Icon-App-76x76@2x.png b/App Store Icons/ios/AppIcon.appiconset/Icon-App-76x76@2x.png
new file mode 100644
index 00000000..96f4bdf5
Binary files /dev/null and b/App Store Icons/ios/AppIcon.appiconset/Icon-App-76x76@2x.png differ
diff --git a/App Store Icons/ios/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/App Store Icons/ios/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
new file mode 100644
index 00000000..67d14e15
Binary files /dev/null and b/App Store Icons/ios/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ
diff --git a/App Store Icons/ios/AppIcon.appiconset/ItunesArtwork@2x.png b/App Store Icons/ios/AppIcon.appiconset/ItunesArtwork@2x.png
new file mode 100644
index 00000000..d14e9845
Binary files /dev/null and b/App Store Icons/ios/AppIcon.appiconset/ItunesArtwork@2x.png differ
diff --git a/App Store Icons/ios/iTunesArtwork@1x.png b/App Store Icons/ios/iTunesArtwork@1x.png
new file mode 100644
index 00000000..6fc19b0f
Binary files /dev/null and b/App Store Icons/ios/iTunesArtwork@1x.png differ
diff --git a/App Store Icons/ios/iTunesArtwork@2x.png b/App Store Icons/ios/iTunesArtwork@2x.png
new file mode 100644
index 00000000..d14e9845
Binary files /dev/null and b/App Store Icons/ios/iTunesArtwork@2x.png differ
diff --git a/App Store Icons/ios/iTunesArtwork@3x.png b/App Store Icons/ios/iTunesArtwork@3x.png
new file mode 100644
index 00000000..934e2020
Binary files /dev/null and b/App Store Icons/ios/iTunesArtwork@3x.png differ
diff --git a/Certs/APNSDevPushCert.p12 b/Certs/APNSDevPushCert.p12
deleted file mode 100644
index dba27aec..00000000
Binary files a/Certs/APNSDevPushCert.p12 and /dev/null differ
diff --git a/Certs/APNSProdCert.certSigningRequest b/Certs/APNSProdCert.certSigningRequest
deleted file mode 100644
index 3f13a387..00000000
--- a/Certs/APNSProdCert.certSigningRequest
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE REQUEST-----
-MIICkDCCAXgCAQAwSzEjMCEGCSqGSIb3DQEJARYUaGFyb29uNjEzOEBnbWFpbC5j
-b20xFzAVBgNVBAMMDk1vaGFtZWQgTWVrYXd5MQswCQYDVQQGEwJBRTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBALcPrk09MmhQhRNe8LYdaeN4mYtoKJg3
-SndMLgpxnaRqP7a6f4sp118wCFZsTXnwhPVP4DzmXWc2AzZtsusmhdw1tzNFtme0
-PtEjDXIPI2lHU3Zhi2zukZdAVxF+uNi3pcp0axina60ZQciIfb/7Fx6hNbqpk90E
-O8a2Ob17Wq/ZTYIP4H7ZGydUe2ra9QyDtjmGj9vpEv+xXYWX685sgEylTG14DSOP
-ozGsQmaf+QCMbCT3osq7idWc1IQ+3Oed0kUTx1jmRtZwPzQkJJ1Bx3vYSXN/EOlb
-u+ei1Nqtc14aVCYvmcuvGDtMyRtw6w+syCw2CpJCPGNkxNz+EH9h+EUCAwEAAaAA
-MA0GCSqGSIb3DQEBCwUAA4IBAQBYdu2AaZY6kReuT1Xp8ktlyPfjBRKhPPChuaeR
-tFnYMsJtG0aIA/xOu4/RYDgmL92seimULXd9DIPvkJ2DuaB+bdfGTw0qXUlihkm8
-ui5O0L2F9OZbQxJogvTmrMsKnkoR27O5vyfCn9VMOLk3x1nyEzAXIj/5GHWw9T6t
-r65jPUOfm6ikiZtICBzSaTPBtyfZB8mrbwG2dpOvVNSa1dj3xip4L8CL6TxH+qM3
-+N90QFYjvjphJkpn2Kt0ow9IyIyeqJbIYJmsWoV9pXddOHCjKdTWUjq7D2Jn3eUA
-DAKjKgVqF4/dU10k7EtSfrw01aHLXjj5FxsD5YhVrgTA5xSq
------END CERTIFICATE REQUEST-----
diff --git a/Certs/APNSProdCert.p12 b/Certs/APNSProdCert.p12
deleted file mode 100644
index b0ada453..00000000
Binary files a/Certs/APNSProdCert.p12 and /dev/null differ
diff --git a/Certs/ApplePushCert.p12 b/Certs/ApplePushCert.p12
deleted file mode 100644
index 3a1d15c8..00000000
Binary files a/Certs/ApplePushCert.p12 and /dev/null differ
diff --git a/Certs/ApplePushServices.certSigningRequest b/Certs/ApplePushServices.certSigningRequest
deleted file mode 100644
index 7d509a0a..00000000
--- a/Certs/ApplePushServices.certSigningRequest
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE REQUEST-----
-MIICkDCCAXgCAQAwSzEjMCEGCSqGSIb3DQEJARYUaGFyb29uNjEzOEBnbWFpbC5j
-b20xFzAVBgNVBAMMDk1vaGFtZWQgTWVrYXd5MQswCQYDVQQGEwJBRTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnHqsyE7WfiVcE1Lpa4t4OVO6qlll2q
-1djs0XG06R/dlDtIqv4940/XLj+hU93mzAcVvFW4DSIEdD3InM3+T6oMTjPu6meU
-69h9ryaVkluQRrT/tdGI1EKO4MWGMe4MDIt7DqMhMfAcxTwekwdxdKaCEhaw3qnA
-l/64AelY6URW1pHHJMA0VV7j+pE3jVNai+muMXPrhQ1VrOrV8FftpY3bEeRJR2Cl
-T0tv0LhEMu4SfLnVWCzGQQC82hilDw3rH3ZDs8DFxF9agNVdwKlYamarh1dQXwRq
-Yx2+sjY1/51r9L4VS+GAh9ECxz0e+43NpzfZ/N+mTeDYKDepaBwPQ6kCAwEAAaAA
-MA0GCSqGSIb3DQEBCwUAA4IBAQB89OyLfywKT7ftmpEqCmgsmaJexb580q9w8wOk
-1JhJkNV5ec+p1dnge2NZeJ4LGII/5wmPj1vANNW0GZdmJDgnC+2gg9toq1QLCAsF
-rW7/LMpgAoEH+P5bhrHV9RRv6BQi0ZmN0apBHjp/pqZfm2Cl5jQPEWjUEf2tIF4l
-LSKdok6IPO9n4Fgyk0XdUNSEhgVhsLtZkGiXnkI1YovKDnupTFYPXMLp103bc9zP
-xDxwscvOysNDijlzZAkJPg2z8NrJIRDrKvLRHzxQwZ/1LHVB/51bp/1iyks3vOjh
-qw5XVsrtGAjCjU9md7q3XkPSyKzhK9UqPdOxdvl1OY0KKIIY
------END CERTIFICATE REQUEST-----
diff --git a/Certs/ApplePushServicesSandbox.certSigningRequest b/Certs/ApplePushServicesSandbox.certSigningRequest
deleted file mode 100644
index 7d509a0a..00000000
--- a/Certs/ApplePushServicesSandbox.certSigningRequest
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE REQUEST-----
-MIICkDCCAXgCAQAwSzEjMCEGCSqGSIb3DQEJARYUaGFyb29uNjEzOEBnbWFpbC5j
-b20xFzAVBgNVBAMMDk1vaGFtZWQgTWVrYXd5MQswCQYDVQQGEwJBRTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnHqsyE7WfiVcE1Lpa4t4OVO6qlll2q
-1djs0XG06R/dlDtIqv4940/XLj+hU93mzAcVvFW4DSIEdD3InM3+T6oMTjPu6meU
-69h9ryaVkluQRrT/tdGI1EKO4MWGMe4MDIt7DqMhMfAcxTwekwdxdKaCEhaw3qnA
-l/64AelY6URW1pHHJMA0VV7j+pE3jVNai+muMXPrhQ1VrOrV8FftpY3bEeRJR2Cl
-T0tv0LhEMu4SfLnVWCzGQQC82hilDw3rH3ZDs8DFxF9agNVdwKlYamarh1dQXwRq
-Yx2+sjY1/51r9L4VS+GAh9ECxz0e+43NpzfZ/N+mTeDYKDepaBwPQ6kCAwEAAaAA
-MA0GCSqGSIb3DQEBCwUAA4IBAQB89OyLfywKT7ftmpEqCmgsmaJexb580q9w8wOk
-1JhJkNV5ec+p1dnge2NZeJ4LGII/5wmPj1vANNW0GZdmJDgnC+2gg9toq1QLCAsF
-rW7/LMpgAoEH+P5bhrHV9RRv6BQi0ZmN0apBHjp/pqZfm2Cl5jQPEWjUEf2tIF4l
-LSKdok6IPO9n4Fgyk0XdUNSEhgVhsLtZkGiXnkI1YovKDnupTFYPXMLp103bc9zP
-xDxwscvOysNDijlzZAkJPg2z8NrJIRDrKvLRHzxQwZ/1LHVB/51bp/1iyks3vOjh
-qw5XVsrtGAjCjU9md7q3XkPSyKzhK9UqPdOxdvl1OY0KKIIY
------END CERTIFICATE REQUEST-----
diff --git a/Certs/GoogleService-Info.plist b/Certs/GoogleService-Info.plist
new file mode 100644
index 00000000..b410994e
--- /dev/null
+++ b/Certs/GoogleService-Info.plist
@@ -0,0 +1,30 @@
+
+
+
+
+ API_KEY
+ AIzaSyCRDdv-9_QSpBM2SokbO5zxQsLDsy-z10s
+ GCM_SENDER_ID
+ 218653915217
+ PLIST_VERSION
+ 1
+ BUNDLE_ID
+ sa.edu.kku.kkuMcApp
+ PROJECT_ID
+ kkumc-e0903
+ STORAGE_BUCKET
+ kkumc-e0903.firebasestorage.app
+ IS_ADS_ENABLED
+
+ IS_ANALYTICS_ENABLED
+
+ IS_APPINVITE_ENABLED
+
+ IS_GCM_ENABLED
+
+ IS_SIGNIN_ENABLED
+
+ GOOGLE_APP_ID
+ 1:218653915217:ios:de051163e0381558896070
+
+
\ No newline at end of file
diff --git a/Certs/Pass.rtf b/Certs/Pass.rtf
deleted file mode 100644
index 2fe18706..00000000
--- a/Certs/Pass.rtf
+++ /dev/null
@@ -1,8 +0,0 @@
-{\rtf1\ansi\ansicpg1252\cocoartf2513
-\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-{\*\expandedcolortbl;;}
-\paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0
-\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
-
-\f0\fs24 \cf0 Hmg54321}
\ No newline at end of file
diff --git a/Certs/VOIP Certs/HMGVoIPCSR.certSigningRequest b/Certs/VOIP Certs/HMGVoIPCSR.certSigningRequest
deleted file mode 100644
index 15f18c68..00000000
--- a/Certs/VOIP Certs/HMGVoIPCSR.certSigningRequest
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE REQUEST-----
-MIICgjCCAWoCAQAwPTEjMCEGCSqGSIb3DQEJARYUSGFyb29uNjEzOEBnbWFpbC5j
-b20xCTAHBgNVBAMMADELMAkGA1UEBhMCQUUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQDHadAER62mSf+wOxPu9rF1EvifDxbAEv6znZIHvwimgShdPLLS
-rkFdN4VpSHMzrASqpHnlSL3wxO6eym9pATH3WfLvKIQxnn9OkO5fScjQi0RkFbe0
-JqTqN2LaFxrSFrhqQ/1p/izr690HqjrfquRI8t8evatyTku67/xcCj6uSIVLfJoS
-8YCDVn0Y+w9n2Vw/+kHiNY6P96qp/CfXZgMLFpUu0mqcmZl97htfmB9AH2tC45yh
-mKxDJiKEnk69zVCh/bkc9tFE1tUDkkKblJTCEyWfdDUUYM4ET3t3fBqWB78F4J3m
-XglByGZmHgY2+7nsSQBiq7k9tFN2c7FZ9BD3AgMBAAGgADANBgkqhkiG9w0BAQsF
-AAOCAQEAJxqoyfEJ7V83ffCAqkYNNEcCQMIRi1Y4cTTm/5KZGA/UPeDeX48/bm4K
-XIf2zbv88OGASInBrvMDp0x0zs13Dx2yXxofGN+iQSBwN6jPV/upmm0DjgTmgUGh
-BJste70LaU228ADzWDw8UJm/GKjK8WvE0XOGpPKYq9cuVW3M+6QRoRHXy0eJc2PX
-VgopsuhHUyA5trxM7k4yc6GgYVx+fAwMaplovTwn5U8XK6bDEIvCjImfat/u4Wp8
-R31p0BQzQaeyWfpp9Ucn/fvQSeB+wtjhHuA1ukcyWY1kBYOyCMIHymFrJLaTpUj7
-aQFYZDV28HYv0yWhWIAD9Pu+aDHWpA==
------END CERTIFICATE REQUEST-----
diff --git a/Certs/VOIP Certs/VOIP.pem b/Certs/VOIP Certs/VOIP.pem
deleted file mode 100644
index 029e2a7a..00000000
--- a/Certs/VOIP Certs/VOIP.pem
+++ /dev/null
@@ -1,74 +0,0 @@
-Bag Attributes
- friendlyName: VoIP Services: com.HMG.HMG-Smartphone
- localKeyID: 70 4A 99 03 F8 D7 92 FA F7 2F DD 3B D8 BF 2C F0 BD CE 21 C8
-subject=/UID=com.HMG.HMG-Smartphone.voip/CN=VoIP Services: com.HMG.HMG-Smartphone/OU=3A359E86ZF/O=Dr Sulaiman Al Habib Medical Center/C=SA
-issuer=/CN=Apple Worldwide Developer Relations Certification Authority/OU=G4/O=Apple Inc./C=US
------BEGIN CERTIFICATE-----
-MIIGkTCCBXmgAwIBAgIQFB+/PYFlrZ6SCzSX9cqOBDANBgkqhkiG9w0BAQsFADB1
-MUQwQgYDVQQDDDtBcHBsZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9ucyBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTELMAkGA1UECwwCRzQxEzARBgNVBAoMCkFw
-cGxlIEluYy4xCzAJBgNVBAYTAlVTMB4XDTI0MDYwOTEyMDc1MVoXDTI1MDcwOTEy
-MDc1MFowga0xKzApBgoJkiaJk/IsZAEBDBtjb20uSE1HLkhNRy1TbWFydHBob25l
-LnZvaXAxLjAsBgNVBAMMJVZvSVAgU2VydmljZXM6IGNvbS5ITUcuSE1HLVNtYXJ0
-cGhvbmUxEzARBgNVBAsMCjNBMzU5RTg2WkYxLDAqBgNVBAoMI0RyIFN1bGFpbWFu
-IEFsIEhhYmliIE1lZGljYWwgQ2VudGVyMQswCQYDVQQGEwJTQTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAMdp0ARHraZJ/7A7E+72sXUS+J8PFsAS/rOd
-kge/CKaBKF08stKuQV03hWlIczOsBKqkeeVIvfDE7p7Kb2kBMfdZ8u8ohDGef06Q
-7l9JyNCLRGQVt7QmpOo3YtoXGtIWuGpD/Wn+LOvr3QeqOt+q5Ejy3x69q3JOS7rv
-/FwKPq5IhUt8mhLxgINWfRj7D2fZXD/6QeI1jo/3qqn8J9dmAwsWlS7SapyZmX3u
-G1+YH0Afa0LjnKGYrEMmIoSeTr3NUKH9uRz20UTW1QOSQpuUlMITJZ90NRRgzgRP
-e3d8GpYHvwXgneZeCUHIZmYeBjb7uexJAGKruT20U3ZzsVn0EPcCAwEAAaOCAuIw
-ggLeMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUW9n6HeeaGgujmXYiUIY+kchb
-d6gwcAYIKwYBBQUHAQEEZDBiMC0GCCsGAQUFBzAChiFodHRwOi8vY2VydHMuYXBw
-bGUuY29tL3d3ZHJnNC5kZXIwMQYIKwYBBQUHMAGGJWh0dHA6Ly9vY3NwLmFwcGxl
-LmNvbS9vY3NwMDMtd3dkcmc0MDUwggEeBgNVHSAEggEVMIIBETCCAQ0GCSqGSIb3
-Y2QFATCB/zCBwwYIKwYBBQUHAgIwgbYMgbNSZWxpYW5jZSBvbiB0aGlzIGNlcnRp
-ZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRo
-ZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1
-c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2VydGlmaWNhdGlvbiBwcmFjdGlj
-ZSBzdGF0ZW1lbnRzLjA3BggrBgEFBQcCARYraHR0cHM6Ly93d3cuYXBwbGUuY29t
-L2NlcnRpZmljYXRlYXV0aG9yaXR5LzATBgNVHSUEDDAKBggrBgEFBQcDAjAyBgNV
-HR8EKzApMCegJaAjhiFodHRwOi8vY3JsLmFwcGxlLmNvbS93d2RyZzQtNi5jcmww
-HQYDVR0OBBYEFHBKmQP415L69y/dO9i/LPC9ziHIMA4GA1UdDwEB/wQEAwIHgDAQ
-BgoqhkiG92NkBgMBBAIFADAQBgoqhkiG92NkBgMCBAIFADBDBgoqhkiG92NkBgME
-BDUMM2NvbS5ITUcuSE1HLVNtYXJ0cGhvbmUsIGNvbS5ITUcuSE1HLVNtYXJ0cGhv
-bmUudm9pcDAQBgoqhkiG92NkBgMFBAIFADAmBgoqhkiG92NkBgMDBBgMFmNvbS5I
-TUcuSE1HLVNtYXJ0cGhvbmUwDQYJKoZIhvcNAQELBQADggEBAJAcIzSskk8/GbxQ
-7nGUPPEWFswL66xTt3GusHmeXkKDXG3ac+4jLk8yU7gunos77CNDm+9TkShdJ2Rg
-tTRopK4ockqwoPrCeEVrooHR4e42YvmkB6AfYKJRnQZQVJIpW0OES7vrtoWVGoNj
-ktHOV+wFIuAQPI9P4z0RFyRw85MHr+jFqxeLU/1500PwCxIiNHkIcUtzZgrnr22R
-7rgkxav+RrjLjXVQvC4VJispKCU7yR69Xv1rsC5zc7OTCuCkbQ9FvnfsiUz5ZDzp
-3D0gGojU9wmJ1yVk9HiZsuiVwmg/LbDHI3pSYbxz3n1UHB6Pu0jX3c3Uxkx674HD
-/0uvHzg=
------END CERTIFICATE-----
-Bag Attributes
- localKeyID: 70 4A 99 03 F8 D7 92 FA F7 2F DD 3B D8 BF 2C F0 BD CE 21 C8
-Key Attributes:
------BEGIN PRIVATE KEY-----
-MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDHadAER62mSf+w
-OxPu9rF1EvifDxbAEv6znZIHvwimgShdPLLSrkFdN4VpSHMzrASqpHnlSL3wxO6e
-ym9pATH3WfLvKIQxnn9OkO5fScjQi0RkFbe0JqTqN2LaFxrSFrhqQ/1p/izr690H
-qjrfquRI8t8evatyTku67/xcCj6uSIVLfJoS8YCDVn0Y+w9n2Vw/+kHiNY6P96qp
-/CfXZgMLFpUu0mqcmZl97htfmB9AH2tC45yhmKxDJiKEnk69zVCh/bkc9tFE1tUD
-kkKblJTCEyWfdDUUYM4ET3t3fBqWB78F4J3mXglByGZmHgY2+7nsSQBiq7k9tFN2
-c7FZ9BD3AgMBAAECggEBALTXH58SBcd86hS+rsgSDkJ2ruNIQsBzOWpYJjtCIi0l
-ih5r0lu/TWWk2SbuXhLpF95MhILLIf18Ck4UlU5rmA2SE/6RBrkc3KS6SII/no6J
-Db+Z9lu4g+wnyEyxkVAe7KTp/aGmsMROxMaTuQpnptkE8BSnuxhRKtpfksNBQzC2
-19OkEy4JAO7xWbm9w/ASiCtYf0Vj26DQo982Fe44cpG08iB2v1uUJINQkGzmg+85
-vvn5A1ECpSpgd/eOa68ojxeNSU7iFGZPbpjuincLPBFlC5zp9KD1Bt6p2KwIizBl
-GPYTp6a1DnWly6n0PuLN0fl/nRmI6ar48Ja1Qzk8NvECgYEA5iQo9lnjNOHjT6bk
-hj5QXMz3MDMCPdJo6jQyADtmsC/F4RjufujfXPhMv2v8JLAjQjNMgfhTSF68zYHf
-i1qW8e/CgWu7mGQEIhWtxiTkLou8zW3VjxwpgfeUsGI5L+PxoN53ZUVcetLz4Y58
-8ATEhlxh02uGmG2k3HbvFu9NBT8CgYEA3dHJfFX2xv53ZD1E2IE1rM3j7a32s7VB
-k/YX8ODrAJxwNmy/vm4gd5h6ofqVS1/IV4NHFbmQ5c1tzB44YGOEZH5Ta9hhHgHU
-xoa3q6t+kjR9KrQvxjTSe9mW5x/jAgU0Wp/XrAfMZxc2eukb4/sJAGKG0kyFeX5O
-5abVixWj7kkCgYAafd8ZPI+i7r2z1YpIybOGezGZIsYHR8k77HY1AKF5doZYuv35
-LeVIVmy/PDbyIjRs0mrkKymrEvy4y1JoQC1P/EFvlG8rw5eWNNikDmsV0JATNal3
-p84/X7iF9UiP8rVFx1YHGkzi9pWMSVKobmQQ82FvbNk5gqWPm0E6aqF7EQKBgQDB
-mE0PlT9SIdk1xTuG8g5UiUV6tS/xXCql5kyy0LqJx/8voO4gV6FCf/PX1wnhxPDn
-YA30agaKaiZ/1YhCp9hulMpd/3WTaOm5cu5uh7hqBiGP2b8wb/2cViWcBnpr0vsE
-dSkYXZ4KA3pq/3R2HyyWB2e/t0Vu6cwWJuuM/hAa8QKBgGNRStNVSMPvzx2X7mB6
-EqdlWqVbfSTHJiZKyNPWHlSuZgdQ14BRwq7KZ0ysZy+kOX4rh1rIfqzrKc62xEXB
-E+fmIpu+DUOM5ojEPCf9Om87r3fMJ54SjM7z1dtVc+Muy4TnFZ4UQcN9txWbnkAo
-++H5gC9DBedOEXkwoCYjoeuM
------END PRIVATE KEY-----
diff --git a/Certs/VOIP Certs/p12 pass.pdf b/Certs/VOIP Certs/p12 pass.pdf
deleted file mode 100644
index d38d0f4e..00000000
Binary files a/Certs/VOIP Certs/p12 pass.pdf and /dev/null differ
diff --git a/Certs/VOIP Certs/voip_services.cer b/Certs/VOIP Certs/voip_services.cer
deleted file mode 100644
index a4c7342b..00000000
Binary files a/Certs/VOIP Certs/voip_services.cer and /dev/null differ
diff --git a/Certs/aps.cer b/Certs/aps.cer
deleted file mode 100644
index d95bac40..00000000
Binary files a/Certs/aps.cer and /dev/null differ
diff --git a/Certs/aps_development.cer b/Certs/aps_development.cer
deleted file mode 100644
index 9a9934bb..00000000
Binary files a/Certs/aps_development.cer and /dev/null differ
diff --git a/Certs/google-services.json b/Certs/google-services.json
new file mode 100644
index 00000000..a11b41a2
--- /dev/null
+++ b/Certs/google-services.json
@@ -0,0 +1,29 @@
+{
+ "project_info": {
+ "project_number": "218653915217",
+ "project_id": "kkumc-e0903",
+ "storage_bucket": "kkumc-e0903.firebasestorage.app"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:218653915217:android:28ffffcec5fbf67c896070",
+ "android_client_info": {
+ "package_name": "sa.edu.kku.kkuMcApp"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyCcN2iDIOH8X7yOikH95cZqyMqA9Kgc8P0"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/Google Play Signing Certs/deployment_cert.der b/Google Play Signing Certs/deployment_cert.der
deleted file mode 100644
index 46c10c23..00000000
Binary files a/Google Play Signing Certs/deployment_cert.der and /dev/null differ
diff --git a/Google Play Signing Certs/upload_cert.der b/Google Play Signing Certs/upload_cert.der
deleted file mode 100644
index 46c10c23..00000000
Binary files a/Google Play Signing Certs/upload_cert.der and /dev/null differ
diff --git a/GoogleService-Info.plist b/GoogleService-Info.plist
new file mode 100644
index 00000000..b410994e
--- /dev/null
+++ b/GoogleService-Info.plist
@@ -0,0 +1,30 @@
+
+
+
+
+ API_KEY
+ AIzaSyCRDdv-9_QSpBM2SokbO5zxQsLDsy-z10s
+ GCM_SENDER_ID
+ 218653915217
+ PLIST_VERSION
+ 1
+ BUNDLE_ID
+ sa.edu.kku.kkuMcApp
+ PROJECT_ID
+ kkumc-e0903
+ STORAGE_BUCKET
+ kkumc-e0903.firebasestorage.app
+ IS_ADS_ENABLED
+
+ IS_ANALYTICS_ENABLED
+
+ IS_APPINVITE_ENABLED
+
+ IS_GCM_ENABLED
+
+ IS_SIGNIN_ENABLED
+
+ GOOGLE_APP_ID
+ 1:218653915217:ios:de051163e0381558896070
+
+
\ No newline at end of file
diff --git a/GoogleService-Info_DQ.plist b/GoogleService-Info_DQ.plist
deleted file mode 100644
index 0c093a2a..00000000
--- a/GoogleService-Info_DQ.plist
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
- CLIENT_ID
- 864393916058-ekeb4s8tgfo58dutv0l54399t7ivr06r.apps.googleusercontent.com
- REVERSED_CLIENT_ID
- com.googleusercontent.apps.864393916058-ekeb4s8tgfo58dutv0l54399t7ivr06r
- API_KEY
- AIzaSyA_6ayGCk4fly7o7eTVBrj9kuHBYHMAOfs
- GCM_SENDER_ID
- 864393916058
- PLIST_VERSION
- 1
- BUNDLE_ID
- com.cloud.diplomaticquarterapp
- PROJECT_ID
- diplomaticquarter-d2385
- STORAGE_BUCKET
- diplomaticquarter-d2385.appspot.com
- IS_ADS_ENABLED
-
- IS_ANALYTICS_ENABLED
-
- IS_APPINVITE_ENABLED
-
- IS_GCM_ENABLED
-
- IS_SIGNIN_ENABLED
-
- GOOGLE_APP_ID
- 1:864393916058:ios:13f787bbfe6051f8b97923
- DATABASE_URL
- https://diplomaticquarter-d2385.firebaseio.com
-
-
\ No newline at end of file
diff --git a/GoogleService-Info_HMG.plist b/GoogleService-Info_HMG.plist
deleted file mode 100644
index 153aa2c6..00000000
--- a/GoogleService-Info_HMG.plist
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
- CLIENT_ID
- 815750722565-da8p56le8bd6apsbm9eft0jjl1rtpgkt.apps.googleusercontent.com
- REVERSED_CLIENT_ID
- com.googleusercontent.apps.815750722565-da8p56le8bd6apsbm9eft0jjl1rtpgkt
- ANDROID_CLIENT_ID
- 815750722565-m14h8mkosm7cnq6uh6rhqr54dn02d705.apps.googleusercontent.com
- API_KEY
- AIzaSyDiXnCO00li4V7Ioa2YZ_M4ECxRsu_P9tA
- GCM_SENDER_ID
- 815750722565
- PLIST_VERSION
- 1
- BUNDLE_ID
- com.HMG.Smartphone
- PROJECT_ID
- api-project-815750722565
- STORAGE_BUCKET
- api-project-815750722565.appspot.com
- IS_ADS_ENABLED
-
- IS_ANALYTICS_ENABLED
-
- IS_APPINVITE_ENABLED
-
- IS_GCM_ENABLED
-
- IS_SIGNIN_ENABLED
-
- GOOGLE_APP_ID
- 1:815750722565:ios:328ec247a81a2ca23c186c
- DATABASE_URL
- https://api-project-815750722565.firebaseio.com
-
-
\ No newline at end of file
diff --git a/KKUH Screenshots.zip b/KKUH Screenshots.zip
new file mode 100644
index 00000000..acb59246
Binary files /dev/null and b/KKUH Screenshots.zip differ
diff --git a/KKUH Screenshots/Homepage 2.jpg b/KKUH Screenshots/Homepage 2.jpg
new file mode 100755
index 00000000..8c7dfd7e
Binary files /dev/null and b/KKUH Screenshots/Homepage 2.jpg differ
diff --git a/KKUH Screenshots/Homepage.jpg b/KKUH Screenshots/Homepage.jpg
new file mode 100755
index 00000000..1368bb15
Binary files /dev/null and b/KKUH Screenshots/Homepage.jpg differ
diff --git a/KKUH Screenshots/Login.jpg b/KKUH Screenshots/Login.jpg
new file mode 100755
index 00000000..0febdcae
Binary files /dev/null and b/KKUH Screenshots/Login.jpg differ
diff --git a/KKUH Screenshots/Medical File.jpg b/KKUH Screenshots/Medical File.jpg
new file mode 100755
index 00000000..0d4d8814
Binary files /dev/null and b/KKUH Screenshots/Medical File.jpg differ
diff --git a/KKUH Screenshots/My Appointments.jpg b/KKUH Screenshots/My Appointments.jpg
new file mode 100755
index 00000000..4001441e
Binary files /dev/null and b/KKUH Screenshots/My Appointments.jpg differ
diff --git a/PatientAppAPNSAuthKey.p8 b/PatientAppAPNSAuthKey.p8
deleted file mode 100755
index 0515964e..00000000
--- a/PatientAppAPNSAuthKey.p8
+++ /dev/null
@@ -1,6 +0,0 @@
------BEGIN PRIVATE KEY-----
-MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgJ5XRSnefd1apSG/z
-YJTQ55ffLMlPgKlGM9edg88mUZagCgYIKoZIzj0DAQehRANCAATSA2MbS+J0cQsc
-uBU0xaoxOUgGvnHCQSEK4t22i8eeKPPhH6RHJhK1ugPvj+Eyadf7j6pn3QRonEJu
-mIL+qvqC
------END PRIVATE KEY-----
\ No newline at end of file
diff --git a/android/Patient_App_KKUH_KeyStore b/android/Patient_App_KKUH_KeyStore
new file mode 100644
index 00000000..94f63b73
Binary files /dev/null and b/android/Patient_App_KKUH_KeyStore differ
diff --git a/android/app/Patient_App_KKUH_KeyStore b/android/app/Patient_App_KKUH_KeyStore
new file mode 100644
index 00000000..94f63b73
Binary files /dev/null and b/android/app/Patient_App_KKUH_KeyStore differ
diff --git a/android/app/build.gradle b/android/app/build.gradle
index c2d082a2..1ccb900d 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -1,40 +1,16 @@
-def localProperties = new Properties()
-def localPropertiesFile = rootProject.file('local.properties')
-if (localPropertiesFile.exists()) {
- localPropertiesFile.withReader('UTF-8') { reader ->
- localProperties.load(reader)
- }
-}
-
-def flutterRoot = localProperties.getProperty('flutter.sdk')
-//if (flutterRoot == null) {
-// throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
-//}
-
-def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
-if (flutterVersionCode == null) {
- flutterVersionCode = '1'
-}
+plugins {
+ id "com.android.application"
+ id "kotlin-android"
+ id "com.google.gms.google-services"
+ id "dev.flutter.flutter-gradle-plugin"
-def flutterVersionName = localProperties.getProperty('flutter.versionName')
-if (flutterVersionName == null) {
- flutterVersionName = '1.0'
}
-
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
-apply plugin: 'com.android.application'
-//apply plugin: 'com.huawei.agconnect'
-apply plugin: 'kotlin-android'
-apply plugin: 'com.google.gms.google-services'
-//apply plugin: 'com.google.firebase.crashlytics'
-apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
-
-
configurations.all {
c ->
c.resolutionStrategy.eachDependency {
@@ -46,41 +22,34 @@ configurations.all {
}
}
-//configurations.all {
-// resolutionStrategy {
-// force 'androidx.core:core-ktx:1.6.0'
-// }
-//}
android {
- compileSdkVersion 34
-// ndkVersion "24.0.8215888"
+ namespace = "sa.edu.kku.kkuMcApp"
+ compileSdkVersion 35
+ ndkVersion = "27.0.12077973"
- sourceSets {
- main.java.srcDirs += 'src/main/kotlin'
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_11 // Changed from VERSION_21
+ targetCompatibility JavaVersion.VERSION_11 // Changed from VERSION_21
+ coreLibraryDesugaringEnabled true // (Optional, for using Java 8+ APIs on older Android versions)
}
- lintOptions {
- disable 'MissingTranslation'
- checkReleaseBuilds false
+ kotlinOptions {
+ jvmTarget = '11' // Changed from '21'
}
-
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "sa.edu.kku.kkuMcApp"
- minSdkVersion 24
- targetSdkVersion 34
- versionCode flutterVersionCode.toInteger()
- versionName flutterVersionName
+ minSdkVersion 26
+ targetSdk = flutter.targetSdkVersion
+ versionCode = flutter.versionCode
+ versionName = flutter.versionName
multiDexEnabled true
- }
- sourceSets.main {
- jniLibs.srcDir 'src/main/libs'
- jni.srcDirs = [] //disable automatic ndk-build call
}
+
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
@@ -91,43 +60,25 @@ android {
}
buildTypes {
- debug {
- debuggable true
- signingConfig signingConfigs.debug
-// ndk {
-// abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86_64'
-// }
+ buildTypes {
+ release {
+ shrinkResources false // Optional: Set to true to shrink resources
+ minifyEnabled false // Set to true to enable code shrinking and obfuscation
+ signingConfig signingConfigs.release
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ debug {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
}
- release {
- debuggable false
- signingConfig signingConfigs.release
- minifyEnabled true
- shrinkResources true
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- staging {
- // Specifies a sorted list of fallback build types that the
- // plugin should try to use when a dependency does not include a
- // "staging" build type. You may specify as many fallbacks as you
- // like, and the plugin selects the first build type that's
- // available in the dependency.
- matchingFallbacks = ['debug', 'qa', 'release']
- }
- }
-
- packagingOptions {
- exclude 'META-INF/proguard/androidx-annotations.pro'
-// pickFirst 'lib/x86/libc++_shared.so'
-// pickFirst 'lib/x86_64/libc++_shared.so'
-// pickFirst 'lib/armeabi-v7a/libc++_shared.so'
-// pickFirst 'lib/arm64-v8a/libc++_shared.so'
-// pickFirst '**/*.so'
- }
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
+ }
+ packaging {
+ jniLibs {
+ useLegacyPackaging true
+ }
}
}
@@ -135,38 +86,19 @@ flutter {
source '../..'
}
+repositories {
+ maven { url 'https://developer.huawei.com/repo/' }
+}
+
dependencies {
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
- implementation "com.google.firebase:firebase-messaging:21.0.0"
-// implementation ('com.google.firebase:firebase-inappmessaging-display:19.1.2',{
-// exclude group: 'com.google.protobuf',module: 'protobuf-javalite'
-// exclude group: 'com.google.protobuf',module: 'protobuf-lite'
-// })
+ implementation platform("com.google.firebase:firebase-bom:33.14.0") // Firebase BoM
+ implementation "com.google.firebase:firebase-analytics" // Firebase Analytics
+ implementation"com.google.firebase:firebase-messaging"// Firebase Messaging
implementation 'pub.devrel:easypermissions:3.0.0'
-// implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'
- // implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'
implementation 'com.google.guava:guava:27.0.1-android'
// Dependency on local binaries
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.google.code.gson:gson:2.8.6'
-
- // Dependency on a remote binary
-// implementation 'com.example.android:app-magic:12.3'
-
-
- implementation "us.zoom.videosdk:zoomvideosdk-core:1.10.1"
- implementation "us.zoom.videosdk:zoomvideosdk-annotation:1.10.1"
- implementation "us.zoom.videosdk:zoomvideosdk-videoeffects:1.10.1"
-
- // Native Dependency
-
-// implementation "us.zoom.videosdk:ZoomVideoSDK:1.10.11"
-// implementation group: 'us.zoom.videosdk', name: 'zoomvideosdk-core', version: '1.10.11'
-
- implementation "us.zoom.videosdk:zoomvideosdk-core:1.10.1"
- implementation "us.zoom.videosdk:zoomvideosdk-annotation:1.10.1"
- implementation "us.zoom.videosdk:zoomvideosdk-videoeffects:1.10.1"
-
// implementation "org.jetbrains.anko:anko-commons:0.10.4"
implementation 'com.github.kittinunf.fuel:fuel:2.3.0' //for JVM
implementation 'com.github.kittinunf.fuel:fuel-android:2.3.0'
@@ -178,5 +110,6 @@ dependencies {
implementation 'androidx.core:core-ktx:1.6.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
androidTestImplementation "androidx.test:core:1.4.0"
-
+ coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5'
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.10"
}
diff --git a/android/app/key.properties b/android/app/key.properties
new file mode 100644
index 00000000..249d25fe
--- /dev/null
+++ b/android/app/key.properties
@@ -0,0 +1,4 @@
+storePassword=KKUH54321
+keyPassword=KKUH54321
+keyAlias=key
+storeFile=Patient_App_KKUH_KeyStore
\ No newline at end of file
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 84ae9182..b4a29214 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -6,32 +6,68 @@
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
+
+
@@ -39,19 +75,24 @@
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
+
@@ -59,26 +100,28 @@
+ android:icon="@mipmap/ic_launcher"
+ android:label="KKUMC"
+ android:screenOrientation="sensorPortrait"
+ android:showOnLockScreen="true"
+ android:usesCleartextTraffic="true"
+ tools:replace="android:extractNativeLibs">
-
+
+ android:windowSoftInputMode="adjustResize"
+ tools:node="merge">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
diff --git a/android/app/src/main/ic_launcher-playstore.png b/android/app/src/main/ic_launcher-playstore.png
index 8a881bee..a8d4250e 100644
Binary files a/android/app/src/main/ic_launcher-playstore.png and b/android/app/src/main/ic_launcher-playstore.png differ
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/Application.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/Application.kt
index e234b5c0..aecad7b4 100644
--- a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/Application.kt
+++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/Application.kt
@@ -1,59 +1,22 @@
-//package com.cloud.diplomaticquarterapp
package sa.edu.kku.kkuMcApp
+import android.app.Application
import com.facebook.stetho.Stetho
-import io.flutter.app.FlutterApplication
-import io.flutter.plugin.common.PluginRegistry
-import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback
-//import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService
-class Application : FlutterApplication(), PluginRegistrantCallback {
+class Application : Application() {
override fun onCreate() {
super.onCreate()
- // FlutterFirebaseMessagingService.setPluginRegistrant(this)
-
-// Stetho.initializeWithDefaults(this);
- // Create an InitializerBuilder
- // Create an InitializerBuilder
val initializerBuilder = Stetho.newInitializerBuilder(this)
-
- // Enable Chrome DevTools
initializerBuilder.enableWebKitInspector(
- Stetho.defaultInspectorModulesProvider(this)
+ Stetho.defaultInspectorModulesProvider(this)
)
- // Enable command line interface
initializerBuilder.enableDumpapp(
- Stetho.defaultDumperPluginsProvider(this)
+ Stetho.defaultDumperPluginsProvider(this)
)
-
- // Use the InitializerBuilder to generate an Initializer
val initializer = initializerBuilder.build()
-
-
- // Initialize Stetho with the Initializer
Stetho.initialize(initializer)
}
-
- override fun registerWith(registry: PluginRegistry) {
- // io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin.registerWith(registry?.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
- }
-}
-
-//import io.flutter.app.FlutterApplication
-//import io.flutter.plugin.common.PluginRegistry
-//import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback
-//import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService
-//
-//class Application : FlutterApplication(), PluginRegistrantCallback {
-// override fun onCreate() {
-// super.onCreate()
-// FlutterFirebaseMessagingService.setPluginRegistrant(this)
-// }
-//
-// override fun registerWith(registry: PluginRegistry?) {
-// FirebaseCloudMessagingPluginRegistrant.registerWith(registry)
-// }
-//}
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/FirebaseCloudMessagingPluginRegistrant.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/FirebaseCloudMessagingPluginRegistrant.kt
index df471796..6dbc6833 100644
--- a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/FirebaseCloudMessagingPluginRegistrant.kt
+++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/FirebaseCloudMessagingPluginRegistrant.kt
@@ -1,25 +1,32 @@
-//package com.cloud.diplomaticquarterapp
-package com.ejada.hmg
-
-import io.flutter.plugin.common.PluginRegistry
-//import io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin
-
-object FirebaseCloudMessagingPluginRegistrant {
- fun registerWith(registry: PluginRegistry?) {
- if (alreadyRegisteredWith(registry)) {
- return
- }
- // FirebaseMessagingPlugin.registerWith(registry?.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"))
+package sa.edu.kku.kkuMcApp
+
+import io.flutter.embedding.engine.plugins.FlutterPlugin
+import io.flutter.embedding.engine.plugins.activity.ActivityAware
+import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding
+
+object FirebaseCloudMessagingPluginRegistrant : FlutterPlugin, ActivityAware {
+
+ override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {
+ // Register Firebase Messaging plugin here if needed
+ }
+
+ override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
+ // Cleanup if necessary
+ }
+
+ override fun onAttachedToActivity(binding: ActivityPluginBinding) {
+ // Handle activity-specific plugin registration
+ }
+
+ override fun onDetachedFromActivityForConfigChanges() {
+ // Handle activity detachment for configuration changes
+ }
+
+ override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {
+ // Handle reattachment to activity after configuration changes
}
- private fun alreadyRegisteredWith(registry: PluginRegistry?): Boolean {
- val key: String? = FirebaseCloudMessagingPluginRegistrant::class.java.canonicalName
- if (key?.let { registry?.hasPlugin(it) }!!) {
- return true
- }
- if (registry != null) {
- registry.registrarFor(key)
- }
- return false
+ override fun onDetachedFromActivity() {
+ // Handle activity detachment
}
}
\ No newline at end of file
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/geofence/GeoZoneModel.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/geofence/GeoZoneModel.kt
deleted file mode 100644
index 724018fa..00000000
--- a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/geofence/GeoZoneModel.kt
+++ /dev/null
@@ -1,58 +0,0 @@
-//package com.ejada.hmg.geofence
-//
-//import com.google.android.gms.location.Geofence
-//import com.google.gson.Gson
-//import com.google.gson.reflect.TypeToken
-//
-//class GeoZoneModel {
-// var GEOF_ID:Int = 0
-// var Radius:Int = 0
-// var Type:Int = 0
-// var ProjectID:Int = 0
-//
-// var Description:String? = null
-// var DescriptionN:String? = null
-// var Latitude:String? = null
-// var Longitude:String? = null
-// var ImageURL:String? = null
-// var IsCity:String? = null
-//
-// fun identifier():String{
-// return "$GEOF_ID" + "_hmg"
-// }
-//
-// fun message():String{
-// return Description ?: "nil"
-// }
-//
-// fun listFrom(jsonString: String) : List{
-// val type = object : TypeToken?>() {}.getType()
-// return Gson().fromJson(jsonString, type)
-// }
-//
-// fun toGeofence() : Geofence?{
-// if (!Latitude.isNullOrEmpty() && !Longitude.isNullOrEmpty() && Radius > 50) {
-// val lat = Latitude!!.trim().toDoubleOrNull()
-// val long = Longitude!!.trim().toDoubleOrNull()
-// val rad = Radius.toFloat()
-// if(lat != null && long != null){
-//
-// val loiteringDelayMinutes:Int = 2 // in Minutes
-// return Geofence.Builder()
-// .setRequestId(identifier())
-// .setCircularRegion(
-// lat,
-// long,
-// rad
-// )
-// .setTransitionTypes(GeofenceTransition.ENTER_EXIT.value)
-// .setNotificationResponsiveness(0)
-// .setLoiteringDelay(loiteringDelayMinutes * 60 * 1000)
-// .setExpirationDuration(Geofence.NEVER_EXPIRE)
-// .build()
-// }
-// }
-// return null
-// }
-//
-//}
diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/geofence/HMG_Geofence.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/geofence/HMG_Geofence.kt
deleted file mode 100644
index 401595ca..00000000
--- a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/geofence/HMG_Geofence.kt
+++ /dev/null
@@ -1,291 +0,0 @@
-//package com.ejada.hmg.geofence
-//
-//import android.Manifest
-//import android.app.PendingIntent
-//import android.content.Context
-//import android.content.Intent
-//import android.content.SharedPreferences
-//import android.content.pm.PackageManager
-//import android.location.Location
-//import androidx.core.content.ContextCompat
-//import com.ejada.hmg.geofence.intent_receivers.GeofenceBroadcastReceiver
-//import com.ejada.hmg.geofence.intent_receivers.ReregisterGeofenceJobService
-//import com.ejada.hmg.utils.*
-//import com.google.android.gms.location.Geofence
-//import com.google.android.gms.location.GeofencingClient
-//import com.google.android.gms.location.GeofencingRequest
-//import com.google.android.gms.location.LocationServices
-//import com.google.gson.Gson
-//import com.google.gson.reflect.TypeToken
-//
-//enum class GeofenceTransition(val value: Int) {
-// ENTER(1),
-// EXIT(2),
-// DWELL(4),
-//
-// ENTER_EXIT((ENTER.value or EXIT.value)),
-// DWELL_EXIT((DWELL.value or EXIT.value));
-//
-// companion object {
-// fun fromInt(value: Int) = GeofenceTransition.values().first { it.value == value }
-// }
-//
-// fun named(): String {
-// if (value == 1) return "Enter"
-// if (value == 2) return "Exit"
-// if (value == 4) return "dWell"
-// if (value == (ENTER.value or EXIT.value)) return "Enter or Exit"
-// if (value == (DWELL.value or EXIT.value)) return "DWell or Exit"
-// return "unknown"
-// }
-//}
-//
-//class HMG_Geofence {
-// // https://developer.android.com/training/location/geofencing#java
-//
-// private lateinit var context: Context
-// private lateinit var preferences: SharedPreferences
-// private val gson = Gson()
-//
-// private lateinit var geofencingClient: GeofencingClient
-// private val geofencePendingIntent: PendingIntent by lazy {
-// val intent = Intent(context, GeofenceBroadcastReceiver::class.java)
-// PendingIntent.getBroadcast(
-// context,
-// 0,
-// intent,
-// PendingIntent.FLAG_IMMUTABLE
-// )
-// }
-//
-// companion object {
-//
-// var instance: HMG_Geofence? = null
-// fun shared(context: Context): HMG_Geofence {
-// if (instance == null) {
-// instance = HMG_Geofence()
-// instance?.context = context
-// instance?.geofencingClient = LocationServices.getGeofencingClient(context)
-// instance?.preferences =
-// context.getSharedPreferences(PREFS_STORAGE, Context.MODE_PRIVATE)
-// }
-// return instance!!
-// }
-// }
-//
-// private fun limitize(zones: List): List {
-// var geoZones_ = zones
-// if (zones.size > 100)
-// geoZones_ = zones.subList(0, 99)
-// return geoZones_
-// }
-//
-//
-// fun register(completion: ((Boolean, java.lang.Exception?) -> Unit)) {
-// unRegisterAll { status, exception ->
-// val geoZones = getGeoZonesFromPreference(context)
-// doRegister(geoZones) { status_, error ->
-// completion.let { it(status_, error) }
-// }
-// }
-// }
-//
-// fun unRegisterAll(completion: (status: Boolean, exception: Exception?) -> Unit) {
-// getActiveGeofences({ success ->
-// removeActiveGeofences()
-// if (success.isNotEmpty())
-// geofencingClient
-// .removeGeofences(success)
-// .addOnSuccessListener {
-// completion(true, null)
-// }
-// .addOnFailureListener {
-// completion(false, it)
-// saveLog(context, "error:REMOVE_GEOFENCES", it.localizedMessage)
-// }
-// else
-// completion(true, null)
-//
-// }, { failed ->
-// // Nothing to do with failed geofences.
-// })
-// }
-//
-// private fun doRegister(
-// geoZones: List,
-// completion: ((Boolean, java.lang.Exception?) -> Unit)? = null
-// ) {
-// if (geoZones.isEmpty())
-// return
-//
-// val geoZones_ = limitize(geoZones)
-//
-// fun buildGeofencingRequest(geofences: List): GeofencingRequest {
-// return GeofencingRequest.Builder()
-// .setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_DWELL)
-// .addGeofences(geofences)
-// .build()
-// }
-//
-// getActiveGeofences({ active ->
-//
-// val geofences = mutableListOf()
-// geoZones_.forEach {
-// it.toGeofence()?.let { geof ->
-// if (!active.contains(geof.requestId)) { // if not already registered then register
-// geofences.add(geof)
-// }
-// }
-// }
-//
-// if (checkPermission() && geofences.isNotEmpty()) {
-// geofencingClient
-// .addGeofences(buildGeofencingRequest(geofences), geofencePendingIntent)
-// .addOnSuccessListener {
-// Logs.RegisterGeofence.save(
-// context,
-// "SUCCESS",
-// "Successfuly registered the geofences",
-// Logs.STATUS.SUCCESS
-// )
-// saveActiveGeofence(geofences.map { it.requestId }, listOf())
-// completion?.let { it(true, null) }
-// }
-// .addOnFailureListener { exc ->
-// Logs.RegisterGeofence.save(
-// context,
-// "FAILED_TO_REGISTER",
-// "Failed to register geofence",
-// Logs.STATUS.ERROR
-// )
-// completion?.let { it(false, exc) }
-// }
-//
-// // Schedule the job to register after specified duration (due to: events not calling after long period.. days or days [Needs to register fences again])
-// HMGUtils.scheduleJob(
-// context,
-// ReregisterGeofenceJobService::class.java,
-// ReregisterGeofenceJobService.JobID,
-// ReregisterGeofenceJobService.TriggerIntervalDuration
-// )
-// }
-//
-// }, null)
-//
-// }
-//
-// fun getGeoZonesFromPreference(context: Context): List {
-// val pref = context.getSharedPreferences(PREFS_STORAGE, Context.MODE_PRIVATE)
-// val json = pref.getString(PREF_KEY_HMG_ZONES, "[]")
-//
-// val geoZones = GeoZoneModel().listFrom(json!!)
-// return geoZones
-// }
-//
-// fun saveActiveGeofence(success: List, failed: List) {
-// val jsonSuccess = gson.toJson(success)
-// val jsonFailure = gson.toJson(failed)
-// preferences.edit().putString(PREF_KEY_SUCCESS, jsonSuccess).apply()
-// preferences.edit().putString(PREF_KEY_FAILED, jsonFailure).apply()
-// }
-//
-// fun removeActiveGeofences() {
-// preferences.edit().putString(PREF_KEY_SUCCESS, "[]").apply()
-// preferences.edit().putString(PREF_KEY_FAILED, "[]").apply()
-// }
-//
-// fun getActiveGeofences(
-// success: (success: List) -> Unit,
-// failure: ((failed: List) -> Unit)?
-// ) {
-// val type = object : TypeToken?>() {}.type
-//
-// val jsonSuccess = preferences.getString(PREF_KEY_SUCCESS, "[]")
-// val success = gson.fromJson>(jsonSuccess, type)
-// success(success)
-//
-// if (failure != null) {
-// val jsonFailure = preferences.getString(PREF_KEY_FAILED, "[]")
-// val failed = gson.fromJson>(jsonFailure, type)
-// failure(failed)
-// }
-//
-// }
-//
-// private fun checkPermission(): Boolean {
-// return ContextCompat.checkSelfPermission(
-// context,
-// Manifest.permission.ACCESS_FINE_LOCATION
-// ) == PackageManager.PERMISSION_GRANTED
-// }
-//
-// fun getPatientID(): Int? {
-// var profileJson = preferences.getString("flutter.imei-user-data", null)
-// if (profileJson == null)
-// profileJson = preferences.getString("flutter.user-profile", null)
-//
-// val type = object : TypeToken