updated 3.32 flutter & fixes
@ -0,0 +1,74 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector
|
||||
android:height="108dp"
|
||||
android:width="108dp"
|
||||
android:viewportHeight="108"
|
||||
android:viewportWidth="108"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="#3DDC84"
|
||||
android:pathData="M0,0h108v108h-108z"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M9,0L9,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,0L19,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M29,0L29,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M39,0L39,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M49,0L49,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M59,0L59,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M69,0L69,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M79,0L79,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M89,0L89,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M99,0L99,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,9L108,9"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,19L108,19"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,29L108,29"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,39L108,39"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,49L108,49"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,59L108,59"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,69L108,69"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,79L108,79"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,89L108,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,99L108,99"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,29L89,29"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,39L89,39"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,49L89,49"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,59L89,59"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,69L89,69"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,79L89,79"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M29,19L29,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M39,19L39,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M49,19L49,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M59,19L59,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M69,19L69,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M79,19L79,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
</vector>
|
||||
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
|
After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 163 KiB |
|
After Width: | Height: | Size: 71 KiB |
@ -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"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 9.8 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 268 KiB |
@ -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-----
|
||||
@ -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-----
|
||||
@ -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-----
|
||||
@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>API_KEY</key>
|
||||
<string>AIzaSyCRDdv-9_QSpBM2SokbO5zxQsLDsy-z10s</string>
|
||||
<key>GCM_SENDER_ID</key>
|
||||
<string>218653915217</string>
|
||||
<key>PLIST_VERSION</key>
|
||||
<string>1</string>
|
||||
<key>BUNDLE_ID</key>
|
||||
<string>sa.edu.kku.kkuMcApp</string>
|
||||
<key>PROJECT_ID</key>
|
||||
<string>kkumc-e0903</string>
|
||||
<key>STORAGE_BUCKET</key>
|
||||
<string>kkumc-e0903.firebasestorage.app</string>
|
||||
<key>IS_ADS_ENABLED</key>
|
||||
<false></false>
|
||||
<key>IS_ANALYTICS_ENABLED</key>
|
||||
<false></false>
|
||||
<key>IS_APPINVITE_ENABLED</key>
|
||||
<true></true>
|
||||
<key>IS_GCM_ENABLED</key>
|
||||
<true></true>
|
||||
<key>IS_SIGNIN_ENABLED</key>
|
||||
<true></true>
|
||||
<key>GOOGLE_APP_ID</key>
|
||||
<string>1:218653915217:ios:de051163e0381558896070</string>
|
||||
</dict>
|
||||
</plist>
|
||||
@ -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}
|
||||
@ -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-----
|
||||
@ -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: <No 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-----
|
||||
@ -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"
|
||||
}
|
||||
@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>API_KEY</key>
|
||||
<string>AIzaSyCRDdv-9_QSpBM2SokbO5zxQsLDsy-z10s</string>
|
||||
<key>GCM_SENDER_ID</key>
|
||||
<string>218653915217</string>
|
||||
<key>PLIST_VERSION</key>
|
||||
<string>1</string>
|
||||
<key>BUNDLE_ID</key>
|
||||
<string>sa.edu.kku.kkuMcApp</string>
|
||||
<key>PROJECT_ID</key>
|
||||
<string>kkumc-e0903</string>
|
||||
<key>STORAGE_BUCKET</key>
|
||||
<string>kkumc-e0903.firebasestorage.app</string>
|
||||
<key>IS_ADS_ENABLED</key>
|
||||
<false></false>
|
||||
<key>IS_ANALYTICS_ENABLED</key>
|
||||
<false></false>
|
||||
<key>IS_APPINVITE_ENABLED</key>
|
||||
<true></true>
|
||||
<key>IS_GCM_ENABLED</key>
|
||||
<true></true>
|
||||
<key>IS_SIGNIN_ENABLED</key>
|
||||
<true></true>
|
||||
<key>GOOGLE_APP_ID</key>
|
||||
<string>1:218653915217:ios:de051163e0381558896070</string>
|
||||
</dict>
|
||||
</plist>
|
||||
@ -1,36 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CLIENT_ID</key>
|
||||
<string>864393916058-ekeb4s8tgfo58dutv0l54399t7ivr06r.apps.googleusercontent.com</string>
|
||||
<key>REVERSED_CLIENT_ID</key>
|
||||
<string>com.googleusercontent.apps.864393916058-ekeb4s8tgfo58dutv0l54399t7ivr06r</string>
|
||||
<key>API_KEY</key>
|
||||
<string>AIzaSyA_6ayGCk4fly7o7eTVBrj9kuHBYHMAOfs</string>
|
||||
<key>GCM_SENDER_ID</key>
|
||||
<string>864393916058</string>
|
||||
<key>PLIST_VERSION</key>
|
||||
<string>1</string>
|
||||
<key>BUNDLE_ID</key>
|
||||
<string>com.cloud.diplomaticquarterapp</string>
|
||||
<key>PROJECT_ID</key>
|
||||
<string>diplomaticquarter-d2385</string>
|
||||
<key>STORAGE_BUCKET</key>
|
||||
<string>diplomaticquarter-d2385.appspot.com</string>
|
||||
<key>IS_ADS_ENABLED</key>
|
||||
<false></false>
|
||||
<key>IS_ANALYTICS_ENABLED</key>
|
||||
<false></false>
|
||||
<key>IS_APPINVITE_ENABLED</key>
|
||||
<true></true>
|
||||
<key>IS_GCM_ENABLED</key>
|
||||
<true></true>
|
||||
<key>IS_SIGNIN_ENABLED</key>
|
||||
<true></true>
|
||||
<key>GOOGLE_APP_ID</key>
|
||||
<string>1:864393916058:ios:13f787bbfe6051f8b97923</string>
|
||||
<key>DATABASE_URL</key>
|
||||
<string>https://diplomaticquarter-d2385.firebaseio.com</string>
|
||||
</dict>
|
||||
</plist>
|
||||
@ -1,38 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CLIENT_ID</key>
|
||||
<string>815750722565-da8p56le8bd6apsbm9eft0jjl1rtpgkt.apps.googleusercontent.com</string>
|
||||
<key>REVERSED_CLIENT_ID</key>
|
||||
<string>com.googleusercontent.apps.815750722565-da8p56le8bd6apsbm9eft0jjl1rtpgkt</string>
|
||||
<key>ANDROID_CLIENT_ID</key>
|
||||
<string>815750722565-m14h8mkosm7cnq6uh6rhqr54dn02d705.apps.googleusercontent.com</string>
|
||||
<key>API_KEY</key>
|
||||
<string>AIzaSyDiXnCO00li4V7Ioa2YZ_M4ECxRsu_P9tA</string>
|
||||
<key>GCM_SENDER_ID</key>
|
||||
<string>815750722565</string>
|
||||
<key>PLIST_VERSION</key>
|
||||
<string>1</string>
|
||||
<key>BUNDLE_ID</key>
|
||||
<string>com.HMG.Smartphone</string>
|
||||
<key>PROJECT_ID</key>
|
||||
<string>api-project-815750722565</string>
|
||||
<key>STORAGE_BUCKET</key>
|
||||
<string>api-project-815750722565.appspot.com</string>
|
||||
<key>IS_ADS_ENABLED</key>
|
||||
<false></false>
|
||||
<key>IS_ANALYTICS_ENABLED</key>
|
||||
<false></false>
|
||||
<key>IS_APPINVITE_ENABLED</key>
|
||||
<true></true>
|
||||
<key>IS_GCM_ENABLED</key>
|
||||
<true></true>
|
||||
<key>IS_SIGNIN_ENABLED</key>
|
||||
<true></true>
|
||||
<key>GOOGLE_APP_ID</key>
|
||||
<string>1:815750722565:ios:328ec247a81a2ca23c186c</string>
|
||||
<key>DATABASE_URL</key>
|
||||
<string>https://api-project-815750722565.firebaseio.com</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
After Width: | Height: | Size: 286 KiB |
|
After Width: | Height: | Size: 290 KiB |
|
After Width: | Height: | Size: 217 KiB |
|
After Width: | Height: | Size: 246 KiB |
|
After Width: | Height: | Size: 194 KiB |
@ -1,6 +0,0 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgJ5XRSnefd1apSG/z
|
||||
YJTQ55ffLMlPgKlGM9edg88mUZagCgYIKoZIzj0DAQehRANCAATSA2MbS+J0cQsc
|
||||
uBU0xaoxOUgGvnHCQSEK4t22i8eeKPPhH6RHJhK1ugPvj+Eyadf7j6pn3QRonEJu
|
||||
mIL+qvqC
|
||||
-----END PRIVATE KEY-----
|
||||
@ -0,0 +1,4 @@
|
||||
storePassword=KKUH54321
|
||||
keyPassword=KKUH54321
|
||||
keyAlias=key
|
||||
storeFile=Patient_App_KKUH_KeyStore
|
||||
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 71 KiB |
@ -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)
|
||||
// }
|
||||
//}
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -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<GeoZoneModel>{
|
||||
// val type = object : TypeToken<List<GeoZoneModel?>?>() {}.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
|
||||
// }
|
||||
//
|
||||
//}
|
||||
@ -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<GeoZoneModel>): List<GeoZoneModel> {
|
||||
// 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<GeoZoneModel>,
|
||||
// completion: ((Boolean, java.lang.Exception?) -> Unit)? = null
|
||||
// ) {
|
||||
// if (geoZones.isEmpty())
|
||||
// return
|
||||
//
|
||||
// val geoZones_ = limitize(geoZones)
|
||||
//
|
||||
// fun buildGeofencingRequest(geofences: List<Geofence>): GeofencingRequest {
|
||||
// return GeofencingRequest.Builder()
|
||||
// .setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_DWELL)
|
||||
// .addGeofences(geofences)
|
||||
// .build()
|
||||
// }
|
||||
//
|
||||
// getActiveGeofences({ active ->
|
||||
//
|
||||
// val geofences = mutableListOf<Geofence>()
|
||||
// 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<GeoZoneModel> {
|
||||
// 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<String>, failed: List<String>) {
|
||||
// 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<String>) -> Unit,
|
||||
// failure: ((failed: List<String>) -> Unit)?
|
||||
// ) {
|
||||
// val type = object : TypeToken<List<String?>?>() {}.type
|
||||
//
|
||||
// val jsonSuccess = preferences.getString(PREF_KEY_SUCCESS, "[]")
|
||||
// val success = gson.fromJson<List<String>>(jsonSuccess, type)
|
||||
// success(success)
|
||||
//
|
||||
// if (failure != null) {
|
||||
// val jsonFailure = preferences.getString(PREF_KEY_FAILED, "[]")
|
||||
// val failed = gson.fromJson<List<String>>(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<Map<String?, Any?>?>() {}.type
|
||||
// return gson.fromJson<Map<String?, Any?>?>(profileJson, type)
|
||||
// ?.get("PatientID")
|
||||
// .toString()
|
||||
// .toDoubleOrNull()
|
||||
// ?.toInt()
|
||||
// }
|
||||
//
|
||||
//
|
||||
// fun handleEvent(
|
||||
// triggerGeofences: List<Geofence>,
|
||||
// location: Location,
|
||||
// transition: GeofenceTransition
|
||||
// ) {
|
||||
// getPatientID()?.let { patientId ->
|
||||
// getActiveGeofences({ activeGeofences ->
|
||||
//
|
||||
// triggerGeofences.forEach { geofence ->
|
||||
// // Extract PointID from 'geofence.requestId' and find from active geofences
|
||||
// val pointID =
|
||||
// activeGeofences.firstOrNull { it == geofence.requestId }?.split('_')
|
||||
// ?.first()
|
||||
// if (!pointID.isNullOrEmpty() && pointID.toIntOrNull() != null) {
|
||||
//
|
||||
// val body = mutableMapOf<String, Any?>(
|
||||
// "PointsID" to pointID.toIntOrNull(),
|
||||
// "GeoType" to transition.value,
|
||||
// "PatientID" to patientId
|
||||
// )
|
||||
// body.putAll(HMGUtils.defaultHTTPParams(context))
|
||||
//
|
||||
// httpPost<Map<String, Any>>(API.LOG_GEOFENCE, body, { response ->
|
||||
// saveLog(
|
||||
// context,
|
||||
// "HMG_GEOFENCE_NOTIFY",
|
||||
// "Success: Notified to server\uD83D\uDE0E."
|
||||
// )
|
||||
// sendNotification(
|
||||
// context,
|
||||
// transition.named(),
|
||||
// geofence.requestId,
|
||||
// "Notified to server.😎"
|
||||
// )
|
||||
// }, { exception ->
|
||||
// val errorMessage = "${transition.named()}, ${geofence.requestId}"
|
||||
// saveLog(
|
||||
// context,
|
||||
// "HMG_GEOFENCE_NOTIFY",
|
||||
// "failed: $errorMessage | error: ${exception.localizedMessage}"
|
||||
// )
|
||||
// sendNotification(
|
||||
// context,
|
||||
// transition.named(),
|
||||
// geofence.requestId,
|
||||
// "Failed to notify server😔 -> ${exception.localizedMessage}"
|
||||
// )
|
||||
// })
|
||||
//
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// }, null)
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
@ -1,71 +0,0 @@
|
||||
//package com.ejada.hmg.geofence.intent_receivers
|
||||
//
|
||||
//import android.annotation.SuppressLint
|
||||
//import android.content.BroadcastReceiver
|
||||
//import android.content.Context
|
||||
//import android.content.Intent
|
||||
//import android.util.Log
|
||||
//import com.ejada.hmg.geofence.GeofenceTransition
|
||||
//import com.ejada.hmg.geofence.HMG_Geofence
|
||||
//import com.ejada.hmg.utils.Logs
|
||||
//import com.google.android.gms.location.GeofenceStatusCodes
|
||||
//import com.google.android.gms.location.GeofencingEvent
|
||||
//
|
||||
//class GeofenceBroadcastReceiver : BroadcastReceiver() {
|
||||
// private val LOG_TAG = "GeofenceBroadcastReceiver"
|
||||
//
|
||||
// @SuppressLint("LongLogTag")
|
||||
// override fun onReceive(context: Context, intent: Intent) {
|
||||
//
|
||||
// val geofencingEvent = GeofencingEvent.fromIntent(intent)
|
||||
// if (geofencingEvent != null) {
|
||||
// if (geofencingEvent.hasError()) {
|
||||
// val errorMessage =
|
||||
// GeofenceErrorMessages.getErrorString(context, geofencingEvent.errorCode)
|
||||
// Log.e(LOG_TAG, errorMessage)
|
||||
//
|
||||
// Logs.GeofenceEvent.save(
|
||||
// context,
|
||||
// LOG_TAG,
|
||||
// "Error while triggering geofence event",
|
||||
// Logs.STATUS.ERROR
|
||||
// )
|
||||
// doReRegisterIfRequired(context, geofencingEvent.errorCode)
|
||||
//
|
||||
// return
|
||||
// }
|
||||
// }
|
||||
// if (geofencingEvent != null) {
|
||||
// Logs.GeofenceEvent.save(
|
||||
// context,
|
||||
// LOG_TAG,
|
||||
// "Geofence event triggered: ${GeofenceTransition.fromInt(geofencingEvent.geofenceTransition).value} for ${geofencingEvent.triggeringGeofences?.map { it.requestId }}",
|
||||
// Logs.STATUS.SUCCESS
|
||||
// )
|
||||
// geofencingEvent.triggeringLocation?.let {
|
||||
// geofencingEvent.triggeringGeofences?.let { it1 ->
|
||||
// HMG_Geofence.shared(context).handleEvent(
|
||||
// it1,
|
||||
// it, GeofenceTransition.fromInt(geofencingEvent.geofenceTransition)
|
||||
// )
|
||||
// }
|
||||
// }
|
||||
// };
|
||||
//
|
||||
// }
|
||||
//
|
||||
// fun doReRegisterIfRequired(context: Context, errorCode: Int) {
|
||||
// val errorRequiredReregister = listOf(
|
||||
// GeofenceStatusCodes.GEOFENCE_NOT_AVAILABLE,
|
||||
// GeofenceStatusCodes.GEOFENCE_TOO_MANY_GEOFENCES,
|
||||
// GeofenceStatusCodes.GEOFENCE_TOO_MANY_PENDING_INTENTS,
|
||||
// GeofenceStatusCodes.GEOFENCE_REQUEST_TOO_FREQUENT
|
||||
// )
|
||||
//
|
||||
// if (errorRequiredReregister.contains(errorCode))
|
||||
// HMG_Geofence.shared(context).register() { status, error ->
|
||||
//
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//}
|
||||
@ -1,16 +0,0 @@
|
||||
//
|
||||
//
|
||||
//package com.ejada.hmg.geofence.intent_receivers
|
||||
//
|
||||
//import android.content.BroadcastReceiver
|
||||
//import android.content.Context
|
||||
//import android.content.Intent
|
||||
//import com.ejada.hmg.geofence.HMG_Geofence
|
||||
//import com.google.android.gms.location.GeofenceStatusCodes
|
||||
//
|
||||
//class GeofenceBroadcastReceiverWithJobService : BroadcastReceiver() {
|
||||
// override fun onReceive(context: Context, intent: Intent) {
|
||||
// GeofenceTransitionsJobIntentService.enqueueWork(context, intent)
|
||||
// }
|
||||
//
|
||||
//}
|
||||
@ -1,43 +0,0 @@
|
||||
//
|
||||
//
|
||||
//package com.ejada.hmg.geofence.intent_receivers
|
||||
//
|
||||
//import android.content.Context
|
||||
//import sa.edu.kku.kkuMcApp.R
|
||||
//import com.ejada.hmg.geofence.HMG_Geofence
|
||||
//import com.google.android.gms.common.api.ApiException
|
||||
//import com.google.android.gms.location.GeofenceStatusCodes
|
||||
//
|
||||
//object GeofenceErrorMessages {
|
||||
// fun getErrorString(context: Context, e: Exception): String {
|
||||
// return if (e is ApiException) {
|
||||
// getErrorString(context, e.statusCode)
|
||||
// } else {
|
||||
// context.resources.getString(R.string.geofence_unknown_error)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// fun getErrorString(context: Context, errorCode: Int): String {
|
||||
// val resources = context.resources
|
||||
// val errorMessage = when (errorCode) {
|
||||
// GeofenceStatusCodes.GEOFENCE_NOT_AVAILABLE ->
|
||||
// resources.getString(R.string.geofence_not_available)
|
||||
//
|
||||
// GeofenceStatusCodes.GEOFENCE_TOO_MANY_GEOFENCES ->
|
||||
// resources.getString(R.string.geofence_too_many_geofences)
|
||||
//
|
||||
// GeofenceStatusCodes.GEOFENCE_TOO_MANY_PENDING_INTENTS ->
|
||||
// resources.getString(R.string.geofence_too_many_pending_intents)
|
||||
//
|
||||
// GeofenceStatusCodes.GEOFENCE_INSUFFICIENT_LOCATION_PERMISSION ->
|
||||
// resources.getString(R.string.GEOFENCE_INSUFFICIENT_LOCATION_PERMISSION)
|
||||
//
|
||||
// GeofenceStatusCodes.GEOFENCE_REQUEST_TOO_FREQUENT ->
|
||||
// resources.getString(R.string.GEOFENCE_REQUEST_TOO_FREQUENT)
|
||||
//
|
||||
// else -> resources.getString(R.string.geofence_unknown_error)
|
||||
// }
|
||||
//
|
||||
// return errorMessage
|
||||
// }
|
||||
//}
|
||||
@ -1,97 +0,0 @@
|
||||
///*
|
||||
// * Copyright (c) 2018 Razeware LLC
|
||||
// *
|
||||
// * 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.
|
||||
// *
|
||||
// * Notwithstanding the foregoing, you may not use, copy, modify, merge, publish,
|
||||
// * distribute, sublicense, create a derivative work, and/or sell copies of the
|
||||
// * Software in any work that is designed, intended, or marketed for pedagogical or
|
||||
// * instructional purposes related to programming, coding, application development,
|
||||
// * or information technology. Permission for such use, copying, modification,
|
||||
// * merger, publication, distribution, sublicensing, creation of derivative works,
|
||||
// * or sale is expressly withheld.
|
||||
// *
|
||||
// * 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.
|
||||
// */
|
||||
//
|
||||
//
|
||||
//package com.ejada.hmg.geofence.intent_receivers
|
||||
//
|
||||
//import android.content.Context
|
||||
//import android.content.Intent
|
||||
//import android.util.Log
|
||||
//import androidx.core.app.JobIntentService
|
||||
//import com.ejada.hmg.geofence.GeofenceTransition
|
||||
//import com.ejada.hmg.geofence.HMG_Geofence
|
||||
//import com.ejada.hmg.utils.saveLog
|
||||
//import com.google.android.gms.location.GeofenceStatusCodes
|
||||
//import com.google.android.gms.location.GeofencingEvent
|
||||
//
|
||||
//class GeofenceTransitionsJobIntentService : JobIntentService() {
|
||||
//
|
||||
// companion object {
|
||||
// private const val LOG_TAG = "GeoTrIntentService"
|
||||
//
|
||||
// private const val JOB_ID = 95902
|
||||
// var context_: Context? = null
|
||||
// fun enqueueWork(context: Context, intent: Intent) {
|
||||
// context_ = context
|
||||
// enqueueWork(
|
||||
// context,
|
||||
// GeofenceTransitionsJobIntentService::class.java, JOB_ID,
|
||||
// intent)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// override fun onHandleWork(intent: Intent) {
|
||||
// val geofencingEvent = GeofencingEvent.fromIntent(intent)
|
||||
// if (geofencingEvent != null) {
|
||||
// if (geofencingEvent.hasError()) {
|
||||
// val errorMessage = GeofenceErrorMessages.getErrorString(context_!!, geofencingEvent.errorCode)
|
||||
// Log.e(LOG_TAG, errorMessage)
|
||||
//
|
||||
//
|
||||
// saveLog(context_!!,LOG_TAG,errorMessage)
|
||||
// doReRegisterIfRequired(context_!!, geofencingEvent.errorCode)
|
||||
//
|
||||
// return
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (geofencingEvent != null) {
|
||||
// geofencingEvent.triggeringGeofences?.let { geofencingEvent.triggeringLocation?.let { it1 ->
|
||||
// HMG_Geofence.shared(context_!!).handleEvent(it,
|
||||
// it1, GeofenceTransition.fromInt(geofencingEvent.geofenceTransition))
|
||||
// } }
|
||||
// };
|
||||
//
|
||||
// }
|
||||
//
|
||||
//
|
||||
// fun doReRegisterIfRequired(context: Context, errorCode: Int){
|
||||
// val errorRequiredReregister = listOf(
|
||||
// GeofenceStatusCodes.GEOFENCE_NOT_AVAILABLE,
|
||||
// GeofenceStatusCodes.GEOFENCE_TOO_MANY_GEOFENCES,
|
||||
// GeofenceStatusCodes.GEOFENCE_TOO_MANY_PENDING_INTENTS,
|
||||
// GeofenceStatusCodes.GEOFENCE_REQUEST_TOO_FREQUENT
|
||||
// )
|
||||
//
|
||||
// if(errorRequiredReregister.contains(errorCode))
|
||||
// HMG_Geofence.shared(context).register(){ status, exc -> }
|
||||
//
|
||||
// }
|
||||
//}
|
||||
@ -1,23 +0,0 @@
|
||||
//
|
||||
//
|
||||
//package com.ejada.hmg.geofence.intent_receivers
|
||||
//
|
||||
//import android.content.BroadcastReceiver
|
||||
//import android.content.Context
|
||||
//import android.content.Intent
|
||||
//import com.ejada.hmg.geofence.HMG_Geofence
|
||||
//import com.ejada.hmg.utils.PREFS_STORAGE
|
||||
//
|
||||
//class GeofencingRebootBroadcastReceiver : BroadcastReceiver(){
|
||||
// override fun onReceive(context: Context, intent: Intent) {
|
||||
//
|
||||
// if (Intent.ACTION_BOOT_COMPLETED.equals(intent.action)) {
|
||||
//// if (intent.action.equals("android.intent.action.BOOT_COMPLETE")) {
|
||||
// val pref = context.getSharedPreferences(PREFS_STORAGE, Context.MODE_PRIVATE)
|
||||
// pref.edit().putString("REBOOT_DETECTED","YES").apply()
|
||||
//
|
||||
// HMG_Geofence.shared(context).register(){ status, error -> }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
//}
|
||||
@ -1,25 +0,0 @@
|
||||
//
|
||||
//
|
||||
//package com.ejada.hmg.geofence.intent_receivers
|
||||
//
|
||||
//import android.content.BroadcastReceiver
|
||||
//import android.content.Context
|
||||
//import android.content.Intent
|
||||
//import android.location.LocationManager
|
||||
//import com.ejada.hmg.geofence.HMG_Geofence
|
||||
//import com.ejada.hmg.utils.HMGUtils
|
||||
//import com.ejada.hmg.utils.PREFS_STORAGE
|
||||
//
|
||||
//class LocationProviderChangeReceiver : BroadcastReceiver() {
|
||||
// private val LOG_TAG = "LocationProviderChangeReceiver"
|
||||
// override fun onReceive(context: Context, intent: Intent) {
|
||||
//
|
||||
// if (LocationManager.PROVIDERS_CHANGED_ACTION.equals(intent.action)) {
|
||||
// val pref = context.getSharedPreferences(PREFS_STORAGE, Context.MODE_PRIVATE)
|
||||
// pref.edit().putString("LOCATION_PROVIDER_CHANGE","YES").apply()
|
||||
//
|
||||
// HMG_Geofence.shared(context).register(){ s, e -> }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
//}
|
||||
@ -1,24 +0,0 @@
|
||||
//package com.ejada.hmg.geofence.intent_receivers
|
||||
//
|
||||
//import android.app.job.JobParameters
|
||||
//import android.app.job.JobService
|
||||
//import com.ejada.hmg.geofence.HMG_Geofence
|
||||
//import com.ejada.hmg.utils.Logs
|
||||
//
|
||||
//class ReregisterGeofenceJobService : JobService(){
|
||||
// companion object{
|
||||
// val TriggerIntervalDuration:String = "06:00:00"
|
||||
// val JobID = 918273
|
||||
// }
|
||||
// override fun onStartJob(params: JobParameters?): Boolean {
|
||||
// Logs.save(applicationContext,"ReregisterGeofenceJobService.onStartJob", "triggered to re-register the geofences after $TriggerIntervalDuration >> [HH:mm:ss]")
|
||||
// HMG_Geofence.shared(applicationContext).register(){ status, error ->
|
||||
// jobFinished(params, true)
|
||||
// }
|
||||
// return true
|
||||
// }
|
||||
//
|
||||
// override fun onStopJob(params: JobParameters?): Boolean {
|
||||
// return true
|
||||
// }
|
||||
//}
|
||||
@ -1,59 +0,0 @@
|
||||
package com.ejada.hmg.opentok
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.LinearLayout
|
||||
//import com.ejada.hmg.R
|
||||
import sa.edu.kku.kkuMcApp.R
|
||||
import io.flutter.plugin.common.StandardMessageCodec
|
||||
import io.flutter.plugin.platform.PlatformView
|
||||
import io.flutter.plugin.platform.PlatformViewFactory
|
||||
|
||||
class LocalVideoFactory : PlatformViewFactory(StandardMessageCodec.INSTANCE) {
|
||||
|
||||
companion object {
|
||||
private lateinit var view: LocalVideoPlatformView
|
||||
|
||||
fun getViewInstance(context: Context): LocalVideoPlatformView {
|
||||
if(!this::view.isInitialized) {
|
||||
view = LocalVideoPlatformView(context)
|
||||
}
|
||||
|
||||
return view
|
||||
}
|
||||
}
|
||||
|
||||
override fun create(context: Context, viewId: Int, args: Any?): PlatformView {
|
||||
return getViewInstance(context)
|
||||
}
|
||||
}
|
||||
|
||||
class LocalVideoPlatformView(context: Context) : PlatformView {
|
||||
private val videoContainer: LocalVideoContainer = LocalVideoContainer(context)
|
||||
|
||||
val container get() = videoContainer.publisherContainer
|
||||
|
||||
override fun getView(): View {
|
||||
return videoContainer
|
||||
}
|
||||
|
||||
override fun dispose() {}
|
||||
}
|
||||
|
||||
class LocalVideoContainer @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyle: Int = 0,
|
||||
defStyleRes: Int = 0
|
||||
) : LinearLayout(context, attrs, defStyle, defStyleRes) {
|
||||
|
||||
var publisherContainer: FrameLayout private set
|
||||
|
||||
init {
|
||||
val view = LayoutInflater.from(context).inflate(R.layout.local_video, this, true)
|
||||
publisherContainer = view.findViewById(R.id.publisher_container)
|
||||
}
|
||||
}
|
||||
@ -1,181 +0,0 @@
|
||||
package com.ejada.hmg.opentok
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.util.Log
|
||||
import android.view.ViewGroup
|
||||
import com.facebook.stetho.urlconnection.StethoURLConnectionManager
|
||||
import com.opentok.android.*
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.embedding.engine.plugins.util.GeneratedPluginRegister
|
||||
import io.flutter.plugin.common.MethodCall
|
||||
import io.flutter.plugin.common.MethodChannel
|
||||
|
||||
|
||||
enum class OpenTokSDKState {
|
||||
LOGGED_OUT,
|
||||
LOGGED_IN,
|
||||
WAIT,
|
||||
ERROR
|
||||
}
|
||||
|
||||
class OpenTok(private var context: Context, private var flutterEngine: FlutterEngine){
|
||||
private lateinit var remoteVideoPlatformView: RemoteVideoPlatformView
|
||||
private lateinit var localVideoPlatformView: LocalVideoPlatformView
|
||||
|
||||
init {
|
||||
remoteVideoPlatformView = RemoteVideoFactory.getViewInstance(context)
|
||||
flutterEngine
|
||||
.platformViewsController
|
||||
.registry
|
||||
.registerViewFactory("remote-video-container", RemoteVideoFactory())
|
||||
|
||||
localVideoPlatformView = LocalVideoFactory.getViewInstance(context)
|
||||
flutterEngine
|
||||
.platformViewsController
|
||||
.registry
|
||||
.registerViewFactory("local-video-container", LocalVideoFactory())
|
||||
}
|
||||
|
||||
private var session: Session? = null
|
||||
private var publisher: Publisher? = null
|
||||
private var subscriber: Subscriber? = null
|
||||
|
||||
|
||||
|
||||
private val sessionListener: Session.SessionListener = object: Session.SessionListener {
|
||||
override fun onConnected(session: Session) {
|
||||
// Connected to session
|
||||
Log.d("MainActivity", "Connected to session ${session.sessionId}")
|
||||
|
||||
publisher = Publisher.Builder(context).build().apply {
|
||||
setPublisherListener(publisherListener)
|
||||
renderer?.setStyle(BaseVideoRenderer.STYLE_VIDEO_SCALE, BaseVideoRenderer.STYLE_VIDEO_FILL)
|
||||
|
||||
view.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
|
||||
localVideoPlatformView.container.addView(view)
|
||||
}
|
||||
|
||||
notifyFlutter(OpenTokSDKState.LOGGED_IN)
|
||||
session.publish(publisher)
|
||||
}
|
||||
|
||||
override fun onDisconnected(session: Session) {
|
||||
notifyFlutter(OpenTokSDKState.LOGGED_OUT)
|
||||
}
|
||||
|
||||
override fun onStreamReceived(session: Session, stream: Stream) {
|
||||
Log.d(
|
||||
"MainActivity",
|
||||
"onStreamReceived: New Stream Received " + stream.streamId + " in session: " + session.sessionId
|
||||
)
|
||||
if (subscriber == null) {
|
||||
subscriber = Subscriber.Builder(context, stream).build().apply {
|
||||
renderer?.setStyle(BaseVideoRenderer.STYLE_VIDEO_SCALE, BaseVideoRenderer.STYLE_VIDEO_FILL)
|
||||
setSubscriberListener(subscriberListener)
|
||||
session.subscribe(this)
|
||||
|
||||
remoteVideoPlatformView.container.addView(view)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStreamDropped(session: Session, stream: Stream) {
|
||||
Log.d(
|
||||
"MainActivity",
|
||||
"onStreamDropped: Stream Dropped: " + stream.streamId + " in session: " + session.sessionId
|
||||
)
|
||||
|
||||
if (subscriber != null) {
|
||||
subscriber = null
|
||||
|
||||
remoteVideoPlatformView.container.removeAllViews()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onError(session: Session, opentokError: OpentokError) {
|
||||
Log.d("MainActivity", "Session error: " + opentokError.message)
|
||||
notifyFlutter(OpenTokSDKState.ERROR)
|
||||
}
|
||||
}
|
||||
|
||||
private val publisherListener: PublisherKit.PublisherListener = object : PublisherKit.PublisherListener {
|
||||
override fun onStreamCreated(publisherKit: PublisherKit, stream: Stream) {
|
||||
Log.d("MainActivity", "onStreamCreated: Publisher Stream Created. Own stream " + stream.streamId)
|
||||
}
|
||||
|
||||
override fun onStreamDestroyed(publisherKit: PublisherKit, stream: Stream) {
|
||||
Log.d("MainActivity", "onStreamDestroyed: Publisher Stream Destroyed. Own stream " + stream.streamId)
|
||||
}
|
||||
|
||||
override fun onError(publisherKit: PublisherKit, opentokError: OpentokError) {
|
||||
Log.d("MainActivity", "PublisherKit onError: " + opentokError.message)
|
||||
notifyFlutter(OpenTokSDKState.ERROR)
|
||||
}
|
||||
}
|
||||
|
||||
var subscriberListener: SubscriberKit.SubscriberListener = object : SubscriberKit.SubscriberListener {
|
||||
override fun onConnected(subscriberKit: SubscriberKit) {
|
||||
Log.d("MainActivity", "onConnected: Subscriber connected. Stream: " + subscriberKit.stream.streamId)
|
||||
}
|
||||
|
||||
override fun onDisconnected(subscriberKit: SubscriberKit) {
|
||||
Log.d("MainActivity", "onDisconnected: Subscriber disconnected. Stream: " + subscriberKit.stream.streamId)
|
||||
notifyFlutter(OpenTokSDKState.LOGGED_OUT)
|
||||
}
|
||||
|
||||
override fun onError(subscriberKit: SubscriberKit, opentokError: OpentokError) {
|
||||
Log.d("MainActivity", "SubscriberKit onError: " + opentokError.message)
|
||||
notifyFlutter(OpenTokSDKState.ERROR)
|
||||
}
|
||||
}
|
||||
|
||||
fun initSession(call: MethodCall, result: MethodChannel.Result) {
|
||||
|
||||
val apiKey = requireNotNull(call.argument<String>("apiKey"))
|
||||
val sessionId = requireNotNull(call.argument<String>("sessionId"))
|
||||
val token = requireNotNull(call.argument<String>("token"))
|
||||
|
||||
notifyFlutter(OpenTokSDKState.WAIT)
|
||||
session = Session.Builder(context, apiKey, sessionId).build()
|
||||
session?.setSessionListener(sessionListener)
|
||||
session?.connect(token)
|
||||
result.success("")
|
||||
}
|
||||
|
||||
fun swapCamera(call: MethodCall, result: MethodChannel.Result) {
|
||||
publisher?.cycleCamera()
|
||||
result.success(true)
|
||||
}
|
||||
|
||||
fun toggleAudio(call: MethodCall, result: MethodChannel.Result) {
|
||||
if (publisher != null) {
|
||||
publisher?.publishAudio = !(publisher!!.publishAudio)
|
||||
result.success(true)
|
||||
}else{
|
||||
result.success(false)
|
||||
}
|
||||
}
|
||||
|
||||
fun toggleVideo(call: MethodCall, result: MethodChannel.Result) {
|
||||
if (publisher != null) {
|
||||
publisher?.publishVideo = !(publisher!!.publishVideo)
|
||||
result.success(true)
|
||||
}else{
|
||||
result.success(false)
|
||||
}
|
||||
}
|
||||
|
||||
fun hangupCall(call: MethodCall, result: MethodChannel.Result) {
|
||||
session?.disconnect()
|
||||
result.success(true)
|
||||
}
|
||||
|
||||
private fun notifyFlutter(state: OpenTokSDKState) {
|
||||
Handler(Looper.getMainLooper()).post {
|
||||
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "OpenTok-Platform-Bridge")
|
||||
.invokeMethod("updateState", state.toString())
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,59 +0,0 @@
|
||||
package com.ejada.hmg.opentok
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.LinearLayout
|
||||
//import com.ejada.hmg.R
|
||||
import sa.edu.kku.kkuMcApp.R
|
||||
import io.flutter.plugin.common.StandardMessageCodec
|
||||
import io.flutter.plugin.platform.PlatformView
|
||||
import io.flutter.plugin.platform.PlatformViewFactory
|
||||
|
||||
class RemoteVideoFactory : PlatformViewFactory(StandardMessageCodec.INSTANCE) {
|
||||
|
||||
companion object {
|
||||
private lateinit var view: RemoteVideoPlatformView
|
||||
|
||||
fun getViewInstance(context: Context): RemoteVideoPlatformView {
|
||||
if(!this::view.isInitialized) {
|
||||
view = RemoteVideoPlatformView(context)
|
||||
}
|
||||
|
||||
return view
|
||||
}
|
||||
}
|
||||
|
||||
override fun create(context: Context, viewId: Int, args: Any?): PlatformView {
|
||||
return getViewInstance(context)
|
||||
}
|
||||
}
|
||||
|
||||
class RemoteVideoPlatformView(context: Context) : PlatformView {
|
||||
private val videoContainer: RemoteVideoContainer = RemoteVideoContainer(context)
|
||||
|
||||
val container get() = videoContainer.subscriberContainer
|
||||
|
||||
override fun getView(): View {
|
||||
return videoContainer
|
||||
}
|
||||
|
||||
override fun dispose() {}
|
||||
}
|
||||
|
||||
class RemoteVideoContainer @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyle: Int = 0,
|
||||
defStyleRes: Int = 0
|
||||
) : LinearLayout(context, attrs, defStyle, defStyleRes) {
|
||||
|
||||
var subscriberContainer: FrameLayout private set
|
||||
|
||||
init {
|
||||
val view = LayoutInflater.from(context).inflate(R.layout.remote_video, this, true)
|
||||
subscriberContainer = view.findViewById(R.id.subscriber_container)
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
@ -0,0 +1,74 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector
|
||||
android:height="108dp"
|
||||
android:width="108dp"
|
||||
android:viewportHeight="108"
|
||||
android:viewportWidth="108"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="#3DDC84"
|
||||
android:pathData="M0,0h108v108h-108z"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M9,0L9,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,0L19,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M29,0L29,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M39,0L39,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M49,0L49,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M59,0L59,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M69,0L69,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M79,0L79,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M89,0L89,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M99,0L99,108"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,9L108,9"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,19L108,19"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,29L108,29"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,39L108,39"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,49L108,49"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,59L108,59"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,69L108,69"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,79L108,79"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,89L108,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M0,99L108,99"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,29L89,29"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,39L89,39"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,49L89,49"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,59L89,59"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,69L89,69"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M19,79L89,79"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M29,19L29,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M39,19L39,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M49,19L49,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M59,19L59,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M69,19L69,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
<path android:fillColor="#00000000" android:pathData="M79,19L79,89"
|
||||
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
|
||||
</vector>
|
||||
|
Before Width: | Height: | Size: 1021 B |
|
Before Width: | Height: | Size: 180 B |
|
Before Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |