Compare commits
168 Commits
fix-backgr
...
master
Author | SHA1 | Date | |
---|---|---|---|
faed9e05b7 | |||
1095386659 | |||
b7e1e4a984 | |||
4473834218 | |||
5a96d93d37 | |||
33cfa90a28 | |||
6fa458d198 | |||
2ca95e0ba0 | |||
eb30100183 | |||
e1c266263a | |||
d88525a764 | |||
430914bab1 | |||
786a73c963 | |||
1f2867cb43 | |||
5770217c45 | |||
17b7f4c9a2 | |||
f46d9cc60e | |||
325f8a99a2 | |||
0ec0e95798 | |||
085dc1e4d6 | |||
9f78eaf688 | |||
b528ec68bb | |||
7b79a5339a | |||
6e98eeff16 | |||
5fccb72843 | |||
377ee3bcbc | |||
282f74f5e0 | |||
b126cbfe31 | |||
fae7a5f0fe | |||
e64f5d380c | |||
2f25f06d18 | |||
a27c18b468 | |||
311cd7868b | |||
be58fba3ad | |||
2f93dc5d54 | |||
c8cdc3aac0 | |||
f872b08acc | |||
97bb141a81 | |||
a98b188978 | |||
20f585509c | |||
ad83c5ed88 | |||
623957bcb2 | |||
ec68ae14ef | |||
393f25b1f9 | |||
3379faf59b | |||
1f888ad1f2 | |||
ebe2266036 | |||
f36a811d03 | |||
ffff380560 | |||
6d73598d5e | |||
f98e4289fb | |||
d583c807d5 | |||
86b6a1a86f | |||
4300c33d65 | |||
b7b284252b | |||
5dcaca9dd2 | |||
c55578c8ae | |||
59cb517ac7 | |||
ae3c355259 | |||
022669c6ee | |||
9c03d84b0a | |||
b978ee560c | |||
c188ce38a8 | |||
f02afb5e56 | |||
59c28e35d8 | |||
76d008e098 | |||
d87a08a9e8 | |||
a98ec8de47 | |||
d0b714731b | |||
aaca6c008e | |||
413fc7d49a | |||
cf016bc6f4 | |||
d78ae83877 | |||
6bd109e1cc | |||
1ba6cdf6f0 | |||
7a41dcbb1f | |||
4bb9452cbc | |||
701ee6e9d5 | |||
8da6ca8c0d | |||
654bcb3653 | |||
3e7e77a430 | |||
2d93b23197 | |||
66fa45baa0 | |||
065fff7867 | |||
51dcefcc62 | |||
489901dca1 | |||
a4c0881300 | |||
8ab7e526e6 | |||
bca6885591 | |||
e2f15ea772 | |||
fac7ae0fdf | |||
7e043c9826 | |||
e9f71d5790 | |||
3b4bb9cbae | |||
72eea53a8c | |||
9a96f474d9 | |||
5c5b9c745e | |||
e4b0bb1f3d | |||
331e7b5fe3 | |||
9525d47600 | |||
1f5ac834e5 | |||
25e8d42ee0 | |||
eb4147557b | |||
3f0ccda50b | |||
da018120f1 | |||
dfc30c3790 | |||
46cdaa8ef9 | |||
cb1e7bcdef | |||
5db5d2f8e0 | |||
ec29191342 | |||
42f501f8e2 | |||
35ef25b2b7 | |||
9e32a909d9 | |||
bc6e5179c7 | |||
8a88629b9a | |||
87e0be8e79 | |||
39d2d78ad8 | |||
ed2ec41d8d | |||
4fceb4195f | |||
8e610c52ca | |||
7d1460353d | |||
f9226262ed | |||
cff66ef70d | |||
a0934638b3 | |||
0147a83034 | |||
81af3360f7 | |||
7d74d46d27 | |||
2338e484f8 | |||
1eed752b1a | |||
6902a62d07 | |||
af1e1a53b4 | |||
3a6f20d12e | |||
d9ada9319b | |||
a908623064 | |||
8e94d86968 | |||
77d15a734e | |||
b81e28cd61 | |||
4d921f7321 | |||
8bcecbbed5 | |||
88d016779f | |||
ea0d6e1e96 | |||
88f263217a | |||
a4fd031a36 | |||
94368b05d1 | |||
6bdf402df8 | |||
|
b323939067 | ||
b366c0a17c | |||
44e392c027 | |||
be7a0cec0a | |||
9059cbd01d | |||
96e31166c6 | |||
aec9eaae19 | |||
fce812f3ce | |||
c8e68e3bb6 | |||
150caf187d | |||
1a5c85c213 | |||
0bf3d147f0 | |||
540536a4a8 | |||
4fd2795377 | |||
9dd2a62d43 | |||
598e603dfb | |||
18547a3c52 | |||
7f169e5b61 | |||
87642c5d7a | |||
84e6b95675 | |||
8fdcdf4f80 | |||
2d9c8aa6cc | |||
c1e20934e4 |
@ -10,10 +10,11 @@ android {
|
|||||||
applicationId "com.uam.wmi.findmytutor"
|
applicationId "com.uam.wmi.findmytutor"
|
||||||
minSdkVersion 22
|
minSdkVersion 22
|
||||||
targetSdkVersion 27
|
targetSdkVersion 27
|
||||||
versionCode 22
|
versionCode 66
|
||||||
versionName "0.9.5-beta"
|
versionName "1.0.0"
|
||||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
|
resConfigs "en", "pl"
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
@ -37,10 +38,8 @@ dependencies {
|
|||||||
implementation "ch.acra:acra-limiter:$acraVersion"
|
implementation "ch.acra:acra-limiter:$acraVersion"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||||
implementation 'com.android.support:preference-v7:27.1.1'
|
implementation 'com.android.support:preference-v7:27.1.1'
|
||||||
implementation 'com.android.support:appcompat-v7:27.1.1'
|
|
||||||
implementation 'com.android.support:cardview-v7:27.1.1'
|
implementation 'com.android.support:cardview-v7:27.1.1'
|
||||||
implementation 'com.android.support:design:27.1.1'
|
implementation 'com.android.support:design:27.1.1'
|
||||||
implementation 'com.android.support:support-v4:27.1.1'
|
implementation 'com.android.support:support-v4:27.1.1'
|
||||||
@ -72,4 +71,10 @@ dependencies {
|
|||||||
// FloatingBarMenu
|
// FloatingBarMenu
|
||||||
implementation 'com.getbase:floatingactionbutton:1.10.1'
|
implementation 'com.getbase:floatingactionbutton:1.10.1'
|
||||||
implementation 'org.apache.commons:commons-collections4:4.0'
|
implementation 'org.apache.commons:commons-collections4:4.0'
|
||||||
|
implementation 'com.android.support:design:27.1.1'
|
||||||
|
|
||||||
|
// spinner loaders library
|
||||||
|
implementation 'com.github.ybq:Android-SpinKit:1.2.0'
|
||||||
|
// rx binding
|
||||||
|
implementation 'com.jakewharton.rxbinding:rxbinding:0.3.0'
|
||||||
}
|
}
|
||||||
|
BIN
app/release/release/fmtBeta0.9.5v18.aab
Normal file
BIN
app/release/release/fmtBeta0.9.5v18.aab
Normal file
Binary file not shown.
@ -4,10 +4,10 @@
|
|||||||
package="com.uam.wmi.findmytutor">
|
package="com.uam.wmi.findmytutor">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
|
||||||
<uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" />
|
<uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
|
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
|
||||||
@ -24,13 +24,14 @@
|
|||||||
android:roundIcon="@mipmap/ic_launcher_round"
|
android:roundIcon="@mipmap/ic_launcher_round"
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/AppTheme"
|
android:theme="@style/AppTheme"
|
||||||
|
android:configChanges="locale"
|
||||||
tools:ignore="AllowBackup,GoogleAppIndexingWarning">
|
tools:ignore="AllowBackup,GoogleAppIndexingWarning">
|
||||||
<activity
|
<activity
|
||||||
android:name=".activity.StartupActivity"
|
android:name=".activity.StartupActivity"
|
||||||
|
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||||
android:launchMode="singleInstance"
|
android:launchMode="singleInstance"
|
||||||
android:theme="@style/AppTheme.NoActionBar"
|
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="portrait"
|
||||||
android:configChanges="keyboardHidden|orientation|screenSize">
|
android:theme="@style/AppTheme.NoActionBar">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
@ -39,20 +40,21 @@
|
|||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:name=".activity.MapActivity"
|
android:name=".activity.MapActivity"
|
||||||
|
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||||
android:launchMode="singleTop"
|
android:launchMode="singleTop"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="portrait"
|
||||||
android:configChanges="keyboardHidden|orientation|screenSize"/>
|
android:windowSoftInputMode="adjustPan" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activity.LoginActivity"
|
android:name=".activity.LoginActivity"
|
||||||
|
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||||
android:excludeFromRecents="true"
|
android:excludeFromRecents="true"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
android:noHistory="true"
|
android:noHistory="true"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="portrait" />
|
||||||
android:configChanges="keyboardHidden|orientation|screenSize"/>
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".activity.SettingsActivity"
|
android:name=".activity.SettingsActivity"
|
||||||
android:screenOrientation="portrait"
|
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||||
android:configChanges="keyboardHidden|orientation|screenSize"/>
|
android:screenOrientation="portrait" />
|
||||||
|
|
||||||
<service
|
<service
|
||||||
android:name=".service.BackgroundLocalizationService"
|
android:name=".service.BackgroundLocalizationService"
|
||||||
@ -62,9 +64,21 @@
|
|||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".activity.TutorTab"
|
android:name=".activity.TutorTab"
|
||||||
android:theme="@style/AppTheme"
|
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||||
|
android:windowSoftInputMode="stateHidden|adjustPan"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="portrait"
|
||||||
android:configChanges="keyboardHidden|orientation|screenSize"/>
|
android:theme="@style/AppTheme" />
|
||||||
|
<activity
|
||||||
|
android:name=".activity.WhiteList"
|
||||||
|
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||||
|
android:screenOrientation="portrait"
|
||||||
|
android:theme="@style/AppTheme" />
|
||||||
|
<activity
|
||||||
|
android:name=".activity.BlackList"
|
||||||
|
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||||
|
android:screenOrientation="portrait"
|
||||||
|
android:theme="@style/AppTheme" />
|
||||||
|
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
727
app/src/main/assets/wmi1floor.geojson
Normal file
727
app/src/main/assets/wmi1floor.geojson
Normal file
@ -0,0 +1,727 @@
|
|||||||
|
{
|
||||||
|
"features": [
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "Pokoje profesorskie"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
16.926707,
|
||||||
|
52.46657
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92652,
|
||||||
|
52.466244
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926459,
|
||||||
|
52.466255
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926645,
|
||||||
|
52.466582
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926707,
|
||||||
|
52.46657
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
},
|
||||||
|
"id": "07f45cd94d45bb5ad0b6b285b0f6fbbb"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "Skrzydło B"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
16.926961,
|
||||||
|
52.467026
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92677,
|
||||||
|
52.466682
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92652,
|
||||||
|
52.466244
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926459,
|
||||||
|
52.466255
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926428,
|
||||||
|
52.466203
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926175,
|
||||||
|
52.46625
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92621,
|
||||||
|
52.466306
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926323,
|
||||||
|
52.466282
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926515,
|
||||||
|
52.466632
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926408,
|
||||||
|
52.466654
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92644,
|
||||||
|
52.466712
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926543,
|
||||||
|
52.46669
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926754,
|
||||||
|
52.467067
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926961,
|
||||||
|
52.467026
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
},
|
||||||
|
"id": "143facf35f322434cfc5776f70f1db36"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "Winda"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
16.92669,
|
||||||
|
52.467141
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92666,
|
||||||
|
52.467089
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926755,
|
||||||
|
52.46707
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926786,
|
||||||
|
52.467121
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92669,
|
||||||
|
52.467141
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
},
|
||||||
|
"id": "1a35bfafd619b80ffb8b36f03549e9e3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "D2"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
16.926876,
|
||||||
|
52.466659
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926984,
|
||||||
|
52.466635
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92694,
|
||||||
|
52.466557
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926831,
|
||||||
|
52.46658
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926876,
|
||||||
|
52.466659
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
},
|
||||||
|
"id": "3e0a32a0583254e9e7c47fea1f402472"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "Sale A"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
16.92714,
|
||||||
|
52.466489
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926925,
|
||||||
|
52.466127
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927027,
|
||||||
|
52.466106
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927232,
|
||||||
|
52.466472
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92714,
|
||||||
|
52.466489
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
},
|
||||||
|
"id": "3e56cb54baf90049a3ce2f16577c2cd8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "D1"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
16.926984,
|
||||||
|
52.466635
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927084,
|
||||||
|
52.466614
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92704,
|
||||||
|
52.466536
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92694,
|
||||||
|
52.466557
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926984,
|
||||||
|
52.466635
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
},
|
||||||
|
"id": "56c2a7ab4e4d2ac14a46448d523470dc"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "Hol"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
16.927104,
|
||||||
|
52.467081
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927039,
|
||||||
|
52.467095
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.9268,
|
||||||
|
52.467145
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926754,
|
||||||
|
52.467067
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926961,
|
||||||
|
52.467026
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927277,
|
||||||
|
52.46696
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927272,
|
||||||
|
52.466951
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927451,
|
||||||
|
52.466918
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927494,
|
||||||
|
52.467002
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927278,
|
||||||
|
52.467047
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927144,
|
||||||
|
52.467073
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927104,
|
||||||
|
52.467081
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
},
|
||||||
|
"id": "6f1db27a4df5a46f7a6913556b01effe"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "Pokoje profesorskie"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
16.92677,
|
||||||
|
52.466683
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926961,
|
||||||
|
52.467026
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926887,
|
||||||
|
52.467041
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926695,
|
||||||
|
52.466699
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92677,
|
||||||
|
52.466683
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
},
|
||||||
|
"id": "94f310dcaa6cee75d9e7800bf8d94155"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "Biblioteka"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
16.926801,
|
||||||
|
52.467144
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926971,
|
||||||
|
52.467424
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926956,
|
||||||
|
52.46743
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926944,
|
||||||
|
52.467436
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92693,
|
||||||
|
52.467441
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926903,
|
||||||
|
52.467452
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926861,
|
||||||
|
52.467464
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926778,
|
||||||
|
52.467476
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926731,
|
||||||
|
52.467485
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926567,
|
||||||
|
52.467194
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926801,
|
||||||
|
52.467144
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
},
|
||||||
|
"id": "aadab5775bdeb4eaf82c940255ddadd7"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "Sale A"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
16.927082,
|
||||||
|
52.466492
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926999,
|
||||||
|
52.466509
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926771,
|
||||||
|
52.466109
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926857,
|
||||||
|
52.466088
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927082,
|
||||||
|
52.466492
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
},
|
||||||
|
"id": "b39857ed605e5794fa6c9cdee5d7d6cf"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "Pokoje profesorskie"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
16.926754,
|
||||||
|
52.467066
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926814,
|
||||||
|
52.467054
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926605,
|
||||||
|
52.466676
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926542,
|
||||||
|
52.46669
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926564,
|
||||||
|
52.466728
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926754,
|
||||||
|
52.467066
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
},
|
||||||
|
"id": "b754d867fde3826e72fe8c243399ff26"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "Sale A"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
16.927272,
|
||||||
|
52.46695
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927083,
|
||||||
|
52.466613
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927167,
|
||||||
|
52.466595
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92735,
|
||||||
|
52.466936
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927272,
|
||||||
|
52.46695
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
},
|
||||||
|
"id": "c3726b2a2b3a589995fd3f17eecd1f53"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "D3"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
16.92677,
|
||||||
|
52.466682
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926876,
|
||||||
|
52.466659
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926832,
|
||||||
|
52.46658
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926725,
|
||||||
|
52.466604
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92677,
|
||||||
|
52.466682
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
},
|
||||||
|
"id": "c73d9bdbccc15d9907e24b8bb731118a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "Pokoje profesorskie"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
16.926324,
|
||||||
|
52.466282
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926503,
|
||||||
|
52.46661
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926579,
|
||||||
|
52.466595
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926398,
|
||||||
|
52.466268
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926324,
|
||||||
|
52.466282
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
},
|
||||||
|
"id": "d54475cedfa0a866e13933c56bf35d76"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "Sale A"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
16.927607,
|
||||||
|
52.466891
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92734,
|
||||||
|
52.466562
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927242,
|
||||||
|
52.466585
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927451,
|
||||||
|
52.466918
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927607,
|
||||||
|
52.466891
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
},
|
||||||
|
"id": "d97989e446002de50bc8844d2d9cdf5c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "Winda"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
16.92669,
|
||||||
|
52.467141
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92666,
|
||||||
|
52.467089
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926755,
|
||||||
|
52.46707
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926786,
|
||||||
|
52.467121
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92669,
|
||||||
|
52.467141
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
},
|
||||||
|
"id": "dfdba4ee1ee0c55193b8dd04f8b00f6c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Feature",
|
||||||
|
"properties": {
|
||||||
|
"name": "Skrzydło A"
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
[
|
||||||
|
16.927606,
|
||||||
|
52.466891
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927339,
|
||||||
|
52.466562
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927242,
|
||||||
|
52.466585
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92718,
|
||||||
|
52.466482
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927232,
|
||||||
|
52.466473
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927025,
|
||||||
|
52.466105
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926924,
|
||||||
|
52.466126
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926896,
|
||||||
|
52.466078
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92677,
|
||||||
|
52.466108
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.926998,
|
||||||
|
52.466509
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927041,
|
||||||
|
52.466537
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927075,
|
||||||
|
52.466595
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927082,
|
||||||
|
52.466614
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927277,
|
||||||
|
52.46696
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927358,
|
||||||
|
52.466942
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927354,
|
||||||
|
52.466935
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.92745,
|
||||||
|
52.466918
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16.927606,
|
||||||
|
52.466891
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"type": "Polygon"
|
||||||
|
},
|
||||||
|
"id": "faaa569e3642a741f70a77071f19f131"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "FeatureCollection"
|
||||||
|
}
|
@ -6,8 +6,9 @@ import android.content.SharedPreferences;
|
|||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
|
|
||||||
import com.uam.wmi.findmytutor.utils.Const;
|
import com.uam.wmi.findmytutor.utils.Const;
|
||||||
|
import com.uam.wmi.findmytutor.utils.MapUtils;
|
||||||
|
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
||||||
|
|
||||||
import static org.acra.ReportField.*;
|
|
||||||
import org.acra.ACRA;
|
import org.acra.ACRA;
|
||||||
import org.acra.annotation.AcraLimiter;
|
import org.acra.annotation.AcraLimiter;
|
||||||
import org.acra.annotation.AcraNotification;
|
import org.acra.annotation.AcraNotification;
|
||||||
@ -16,18 +17,32 @@ import org.acra.config.HttpSenderConfigurationBuilder;
|
|||||||
import org.acra.config.ToastConfigurationBuilder;
|
import org.acra.config.ToastConfigurationBuilder;
|
||||||
import org.acra.data.StringFormat;
|
import org.acra.data.StringFormat;
|
||||||
import org.acra.sender.HttpSender;
|
import org.acra.sender.HttpSender;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.acra.ReportField.ANDROID_VERSION;
|
||||||
|
import static org.acra.ReportField.BUILD_CONFIG;
|
||||||
|
import static org.acra.ReportField.CUSTOM_DATA;
|
||||||
|
import static org.acra.ReportField.LOGCAT;
|
||||||
|
import static org.acra.ReportField.PHONE_MODEL;
|
||||||
|
import static org.acra.ReportField.REPORT_ID;
|
||||||
|
import static org.acra.ReportField.SHARED_PREFERENCES;
|
||||||
|
import static org.acra.ReportField.STACK_TRACE;
|
||||||
|
import static org.acra.ReportField.USER_APP_START_DATE;
|
||||||
|
import static org.acra.ReportField.USER_CRASH_DATE;
|
||||||
|
|
||||||
|
|
||||||
@AcraNotification(resText = R.string.notification_text,
|
@AcraNotification(resText = R.string.notification_text,
|
||||||
resTitle = R.string.notification_title,
|
resTitle = R.string.notification_title,
|
||||||
resChannelName = R.string.notification_channel)
|
resChannelName = R.string.notification_channel)
|
||||||
@AcraLimiter(failedReportLimit = 2)
|
@AcraLimiter(failedReportLimit = 2)
|
||||||
public class FindMyTutor extends Application {
|
public class FindMyTutor extends Application {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void attachBaseContext(Context base) {
|
protected void attachBaseContext(Context base) {
|
||||||
super.attachBaseContext(base);
|
super.attachBaseContext(base);
|
||||||
|
//super.attachBaseContext(LocaleHelper.onAttach(base));
|
||||||
|
|
||||||
// ACRA core
|
// ACRA core
|
||||||
CoreConfigurationBuilder builder = new CoreConfigurationBuilder(this)
|
CoreConfigurationBuilder builder = new CoreConfigurationBuilder(this)
|
||||||
@ -43,6 +58,7 @@ public class FindMyTutor extends Application {
|
|||||||
ToastConfigurationBuilder.class
|
ToastConfigurationBuilder.class
|
||||||
).setResText(R.string.acra_toast_text);
|
).setResText(R.string.acra_toast_text);
|
||||||
|
|
||||||
|
|
||||||
SharedPreferences sharedPreferences = base.getSharedPreferences("com.uam.wmi.findmytutor_preferences", Context.MODE_PRIVATE);
|
SharedPreferences sharedPreferences = base.getSharedPreferences("com.uam.wmi.findmytutor_preferences", Context.MODE_PRIVATE);
|
||||||
Map header = new HashMap();
|
Map header = new HashMap();
|
||||||
String token = sharedPreferences.getString("API_KEY", "KEY_EMPTY");
|
String token = sharedPreferences.getString("API_KEY", "KEY_EMPTY");
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.uam.wmi.findmytutor.activity;
|
package com.uam.wmi.findmytutor.activity;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@ -13,6 +14,8 @@ import android.view.MenuInflater;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import com.uam.wmi.findmytutor.utils.LocaleHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link android.preference.PreferenceActivity} which implements and proxies the necessary calls
|
* A {@link android.preference.PreferenceActivity} which implements and proxies the necessary calls
|
||||||
* to be used with AppCompat.
|
* to be used with AppCompat.
|
||||||
|
@ -4,6 +4,7 @@ import android.Manifest;
|
|||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
import android.app.FragmentTransaction;
|
import android.app.FragmentTransaction;
|
||||||
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
@ -35,6 +36,9 @@ import com.uam.wmi.findmytutor.R;
|
|||||||
import com.uam.wmi.findmytutor.service.BackgroundLocalizationService;
|
import com.uam.wmi.findmytutor.service.BackgroundLocalizationService;
|
||||||
import com.uam.wmi.findmytutor.utils.ActiveFragment;
|
import com.uam.wmi.findmytutor.utils.ActiveFragment;
|
||||||
import com.uam.wmi.findmytutor.utils.FeedbackUtils;
|
import com.uam.wmi.findmytutor.utils.FeedbackUtils;
|
||||||
|
import com.uam.wmi.findmytutor.utils.LocaleHelper;
|
||||||
|
import com.uam.wmi.findmytutor.utils.LocaleUtils;
|
||||||
|
import com.uam.wmi.findmytutor.utils.MapUtils;
|
||||||
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
||||||
import com.uam.wmi.findmytutor.utils.RxSearchObservable;
|
import com.uam.wmi.findmytutor.utils.RxSearchObservable;
|
||||||
|
|
||||||
@ -53,6 +57,7 @@ import io.reactivex.schedulers.Schedulers;
|
|||||||
|
|
||||||
import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext;
|
import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext;
|
||||||
import static com.uam.wmi.findmytutor.utils.Const.defaultMapZoom;
|
import static com.uam.wmi.findmytutor.utils.Const.defaultMapZoom;
|
||||||
|
import static com.uam.wmi.findmytutor.utils.Const.onlineBackgroundLocationInterval;
|
||||||
import static com.uam.wmi.findmytutor.utils.Const.searchMapZoom;
|
import static com.uam.wmi.findmytutor.utils.Const.searchMapZoom;
|
||||||
import static com.uam.wmi.findmytutor.utils.PrefUtils.storeBackgroundLocationStatus;
|
import static com.uam.wmi.findmytutor.utils.PrefUtils.storeBackgroundLocationStatus;
|
||||||
|
|
||||||
@ -79,11 +84,16 @@ public abstract class BaseActivity
|
|||||||
private SharingFragment sharingFragment;
|
private SharingFragment sharingFragment;
|
||||||
|
|
||||||
private Fragment userListFragment;
|
private Fragment userListFragment;
|
||||||
private ActiveFragment activeFragment = ActiveFragment.NONE;
|
public ActiveFragment activeFragment = ActiveFragment.NONE;
|
||||||
private Fragment activeBottomMenu = null;
|
private Fragment activeBottomMenu = null;
|
||||||
private SearchView searchView;
|
public SearchView searchView;
|
||||||
public MenuItem infoMenuItem;
|
public MenuItem infoMenuItem;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void attachBaseContext(Context base) {
|
||||||
|
super.attachBaseContext(LocaleHelper.onAttach(base));
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressLint("CheckResult")
|
@SuppressLint("CheckResult")
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@ -99,11 +109,11 @@ public abstract class BaseActivity
|
|||||||
String itemName = (String) item.getTitle();
|
String itemName = (String) item.getTitle();
|
||||||
Intent launchIntent;
|
Intent launchIntent;
|
||||||
if (itemName.equals(getResources().getString(R.string.navigation_item_whitelist))) {
|
if (itemName.equals(getResources().getString(R.string.navigation_item_whitelist))) {
|
||||||
/* launchIntent = new Intent(getApplicationContext(), WhitelistActivity.class);
|
launchIntent = new Intent(getApplicationContext(), WhiteList.class);
|
||||||
startActivity(launchIntent);*/
|
startActivity(launchIntent);
|
||||||
} else if (itemName.equals(getResources().getString(R.string.navigation_item_blacklist))) {
|
} else if (itemName.equals(getResources().getString(R.string.navigation_item_blacklist))) {
|
||||||
/* launchIntent = new Intent(getApplicationContext(), BlacklistActivity.class);
|
launchIntent = new Intent(getApplicationContext(),BlackList.class);
|
||||||
startActivity(launchIntent);*/
|
startActivity(launchIntent);
|
||||||
|
|
||||||
} else if (itemName.equals(getResources().getString(R.string.navigation_item_profile))) {
|
} else if (itemName.equals(getResources().getString(R.string.navigation_item_profile))) {
|
||||||
|
|
||||||
@ -117,17 +127,9 @@ public abstract class BaseActivity
|
|||||||
if(PrefUtils.isBackgroundLocationServiceRunning(getApplicationContext())) {
|
if(PrefUtils.isBackgroundLocationServiceRunning(getApplicationContext())) {
|
||||||
stopBackgroundLocalizationTask();
|
stopBackgroundLocalizationTask();
|
||||||
}
|
}
|
||||||
|
logout();
|
||||||
|
|
||||||
storeBackgroundLocationStatus(getApplication(), false);
|
|
||||||
PrefUtils.storeIsLoggedIn(getApplicationContext(), false);
|
|
||||||
|
|
||||||
Intent i = getBaseContext().getPackageManager()
|
|
||||||
.getLaunchIntentForPackage(getBaseContext().getPackageName());
|
|
||||||
if (i != null) {
|
|
||||||
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
|
||||||
}
|
|
||||||
startActivity(i);
|
|
||||||
finish();
|
|
||||||
} else if (itemName.equals(getResources().getString(R.string.navigation_item_feedback))) {
|
} else if (itemName.equals(getResources().getString(R.string.navigation_item_feedback))) {
|
||||||
feedbackUtils.showNoteDialog("FEEDBACK");
|
feedbackUtils.showNoteDialog("FEEDBACK");
|
||||||
|
|
||||||
@ -156,6 +158,21 @@ public abstract class BaseActivity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected void logout(){
|
||||||
|
storeBackgroundLocationStatus(getApplication(), false);
|
||||||
|
PrefUtils.storeIsLoggedIn(getApplicationContext(), false);
|
||||||
|
PrefUtils.setBatteryExlusionInfoStatus(getApplicationContext(), true);
|
||||||
|
|
||||||
|
Intent i = getBaseContext().getPackageManager()
|
||||||
|
.getLaunchIntentForPackage(getBaseContext().getPackageName());
|
||||||
|
if (i != null) {
|
||||||
|
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||||
|
}
|
||||||
|
startActivity(i);
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
protected void checkPermissions() {
|
protected void checkPermissions() {
|
||||||
final List<String> missingPermissions = new ArrayList<String>();
|
final List<String> missingPermissions = new ArrayList<String>();
|
||||||
|
|
||||||
@ -198,9 +215,10 @@ public abstract class BaseActivity
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void stopBackgroundLocalizationTask() {
|
public void stopBackgroundLocalizationTask() {
|
||||||
|
PrefUtils.storeEnableSharingLocalization(getApplicationContext(), false);
|
||||||
|
|
||||||
Intent stopIntent = new Intent(getApplicationContext(), BackgroundLocalizationService.class);
|
Intent stopIntent = new Intent(getApplicationContext(), BackgroundLocalizationService.class);
|
||||||
stopIntent.putExtra("request_stop", true);
|
stopIntent.putExtra("request_stop", true);
|
||||||
Log.e("Localization", "JEstem w stop BG");
|
|
||||||
|
|
||||||
stopService(stopIntent);
|
stopService(stopIntent);
|
||||||
|
|
||||||
@ -208,10 +226,12 @@ public abstract class BaseActivity
|
|||||||
|
|
||||||
public void startBackgroundLocalizationTask() {
|
public void startBackgroundLocalizationTask() {
|
||||||
checkPermissions();
|
checkPermissions();
|
||||||
|
PrefUtils.storeEnableSharingLocalization(getApplicationContext(), true);
|
||||||
|
|
||||||
Intent startIntent = new Intent(getApplicationContext(), BackgroundLocalizationService.class);
|
Intent startIntent = new Intent(getApplicationContext(), BackgroundLocalizationService.class);
|
||||||
|
startIntent.putExtra("notify_interval", onlineBackgroundLocationInterval);
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
startForegroundService(startIntent);
|
startForegroundService(startIntent);
|
||||||
} else {
|
} else {
|
||||||
startService(startIntent);
|
startService(startIntent);
|
||||||
@ -219,17 +239,12 @@ public abstract class BaseActivity
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void handleBackgroundTaskLifeCycle() {
|
public void handleBackgroundTaskLifeCycle() {
|
||||||
Log.e("Localization", String.valueOf(PrefUtils.isEnableSharingLocalization(getApplicationContext())));
|
|
||||||
Boolean shouldServiceRun = PrefUtils.isEnableSharingLocalization(getApplicationContext()) && isTutor;
|
Boolean shouldServiceRun = PrefUtils.isEnableSharingLocalization(getApplicationContext()) && isTutor;
|
||||||
Log.e("Localization", String.valueOf(shouldServiceRun));
|
|
||||||
|
|
||||||
if (shouldServiceRun) {
|
if (shouldServiceRun) {
|
||||||
startBackgroundLocalizationTask();
|
startBackgroundLocalizationTask();
|
||||||
Log.e("Localization", "JEstem i odpalam");
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
stopBackgroundLocalizationTask();
|
stopBackgroundLocalizationTask();
|
||||||
Log.e("Localization", "JEstem i nie odpalam");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,7 +285,6 @@ public abstract class BaseActivity
|
|||||||
setUpNav();
|
setUpNav();
|
||||||
|
|
||||||
actionBarDrawerToggle.syncState();
|
actionBarDrawerToggle.syncState();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -285,7 +299,6 @@ public abstract class BaseActivity
|
|||||||
getMenuInflater().inflate(R.menu.menu_main, menu);
|
getMenuInflater().inflate(R.menu.menu_main, menu);
|
||||||
infoMenuItem = menu.findItem(R.id.action_info);
|
infoMenuItem = menu.findItem(R.id.action_info);
|
||||||
|
|
||||||
|
|
||||||
MenuItem myActionMenuItem = menu.findItem(R.id.action_search);
|
MenuItem myActionMenuItem = menu.findItem(R.id.action_search);
|
||||||
searchView = (SearchView) myActionMenuItem.getActionView();
|
searchView = (SearchView) myActionMenuItem.getActionView();
|
||||||
|
|
||||||
@ -295,6 +308,10 @@ public abstract class BaseActivity
|
|||||||
adjustMapToSearch(defaultMapZoom);
|
adjustMapToSearch(defaultMapZoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!hasFocus && activeFragment.equals(ActiveFragment.USER_LIST)) {
|
||||||
|
((UsersListFragment) userListFragment).restoreUsersList();
|
||||||
|
}
|
||||||
|
|
||||||
if(hasFocus && activeFragment.equals(ActiveFragment.NONE)){
|
if(hasFocus && activeFragment.equals(ActiveFragment.NONE)){
|
||||||
adjustMapToSearch(searchMapZoom);
|
adjustMapToSearch(searchMapZoom);
|
||||||
}
|
}
|
||||||
@ -303,6 +320,7 @@ public abstract class BaseActivity
|
|||||||
RxSearchObservable.fromView(searchView)
|
RxSearchObservable.fromView(searchView)
|
||||||
.skip(0)
|
.skip(0)
|
||||||
.map(String::toLowerCase)
|
.map(String::toLowerCase)
|
||||||
|
.filter(t -> !t.isEmpty())
|
||||||
.debounce(250, TimeUnit.MILLISECONDS)
|
.debounce(250, TimeUnit.MILLISECONDS)
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
@ -390,10 +408,13 @@ public abstract class BaseActivity
|
|||||||
removeFragment(sharingFragment);
|
removeFragment(sharingFragment);
|
||||||
removeFragment(userListFragment);
|
removeFragment(userListFragment);
|
||||||
activeFragment = ActiveFragment.NONE;
|
activeFragment = ActiveFragment.NONE;
|
||||||
|
findViewById(R.id.action_search).setVisibility(View.VISIBLE);
|
||||||
} else if (itemId == R.id.nav_profile) {
|
} else if (itemId == R.id.nav_profile) {
|
||||||
loadUserSettingsFragment();
|
loadUserSettingsFragment();
|
||||||
|
findViewById(R.id.action_search).setVisibility(View.GONE);
|
||||||
} else if (itemId == R.id.nav_user_list) {
|
} else if (itemId == R.id.nav_user_list) {
|
||||||
loadUserListFragment();
|
loadUserListFragment();
|
||||||
|
findViewById(R.id.action_search).setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
selectBottomNavigationBarItem(itemId);
|
selectBottomNavigationBarItem(itemId);
|
||||||
}, 300);
|
}, 300);
|
||||||
@ -406,8 +427,8 @@ public abstract class BaseActivity
|
|||||||
sharingFragment = SharingFragment.newInstance();
|
sharingFragment = SharingFragment.newInstance();
|
||||||
FragmentTransaction ft = getFragmentManager().beginTransaction();
|
FragmentTransaction ft = getFragmentManager().beginTransaction();
|
||||||
ft.replace(R.id.activity_content, sharingFragment);
|
ft.replace(R.id.activity_content, sharingFragment);
|
||||||
|
//ft.addToBackStack(null);
|
||||||
ft.commit();
|
ft.commit();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadUserListFragment() {
|
private void loadUserListFragment() {
|
||||||
@ -416,11 +437,12 @@ public abstract class BaseActivity
|
|||||||
userListFragment = UsersListFragment.newInstance();
|
userListFragment = UsersListFragment.newInstance();
|
||||||
FragmentTransaction ft = getFragmentManager().beginTransaction();
|
FragmentTransaction ft = getFragmentManager().beginTransaction();
|
||||||
ft.replace(R.id.activity_content, userListFragment);
|
ft.replace(R.id.activity_content, userListFragment);
|
||||||
|
//ft.addToBackStack(null);
|
||||||
ft.commit();
|
ft.commit();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateNavigationBarState() {
|
public void updateNavigationBarState() {
|
||||||
int actionId = getNavigationMenuItemId();
|
int actionId = getNavigationMenuItemId();
|
||||||
selectBottomNavigationBarItem(actionId);
|
selectBottomNavigationBarItem(actionId);
|
||||||
}
|
}
|
||||||
@ -432,4 +454,8 @@ public abstract class BaseActivity
|
|||||||
|
|
||||||
abstract int getNavigationMenuItemId();
|
abstract int getNavigationMenuItemId();
|
||||||
abstract int getContentViewId();
|
abstract int getContentViewId();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,370 @@
|
|||||||
|
package com.uam.wmi.findmytutor.activity;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.drawable.ColorDrawable;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.design.widget.CoordinatorLayout;
|
||||||
|
import android.support.design.widget.FloatingActionButton;
|
||||||
|
import android.support.design.widget.Snackbar;
|
||||||
|
import android.support.v7.app.ActionBar;
|
||||||
|
import android.support.v7.app.AlertDialog;
|
||||||
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
import android.support.v7.widget.DefaultItemAnimator;
|
||||||
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.support.v7.widget.Toolbar;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.Gravity;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.WindowManager;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.CompoundButton;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.PopupWindow;
|
||||||
|
import android.widget.Switch;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
import android.widget.ToggleButton;
|
||||||
|
|
||||||
|
import com.github.ybq.android.spinkit.SpinKitView;
|
||||||
|
import com.jakewharton.retrofit2.adapter.rxjava2.HttpException;
|
||||||
|
import com.mapbox.geojson.Point;
|
||||||
|
import com.mapbox.mapboxsdk.geometry.LatLng;
|
||||||
|
import com.uam.wmi.findmytutor.R;
|
||||||
|
import com.uam.wmi.findmytutor.adapters.BlackListAdapter;
|
||||||
|
import com.uam.wmi.findmytutor.model.IsUsingListBool;
|
||||||
|
import com.uam.wmi.findmytutor.model.PredefinedCoordViewModel;
|
||||||
|
import com.uam.wmi.findmytutor.model.StudentIdModel;
|
||||||
|
import com.uam.wmi.findmytutor.model.User;
|
||||||
|
import com.uam.wmi.findmytutor.model.UserResponseModel;
|
||||||
|
import com.uam.wmi.findmytutor.network.ApiClient;
|
||||||
|
import com.uam.wmi.findmytutor.service.PredefinedStatusesService;
|
||||||
|
import com.uam.wmi.findmytutor.service.UserService;
|
||||||
|
import com.uam.wmi.findmytutor.utils.LocaleHelper;
|
||||||
|
import com.uam.wmi.findmytutor.utils.MyDividerItemDecoration;
|
||||||
|
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
||||||
|
import com.uam.wmi.findmytutor.utils.RecyclerTouchListener;
|
||||||
|
import com.uam.wmi.findmytutor.utils.RestApiHelper;
|
||||||
|
import com.uam.wmi.findmytutor.utils.SharingLevel;
|
||||||
|
import com.uam.wmi.findmytutor.utils.WrapContentLinearLayoutManager;
|
||||||
|
|
||||||
|
import java.text.Collator;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import butterknife.BindView;
|
||||||
|
import butterknife.ButterKnife;
|
||||||
|
import io.reactivex.Observable;
|
||||||
|
import io.reactivex.ObservableSource;
|
||||||
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
|
import io.reactivex.disposables.CompositeDisposable;
|
||||||
|
import io.reactivex.disposables.Disposable;
|
||||||
|
import io.reactivex.functions.Function;
|
||||||
|
import io.reactivex.observers.DisposableObserver;
|
||||||
|
import io.reactivex.observers.DisposableSingleObserver;
|
||||||
|
import io.reactivex.schedulers.Schedulers;
|
||||||
|
import okhttp3.ResponseBody;
|
||||||
|
|
||||||
|
public class BlackList extends AppCompatActivity {
|
||||||
|
|
||||||
|
private CompositeDisposable disposable = new CompositeDisposable();
|
||||||
|
private UserService userService;
|
||||||
|
private boolean didFetched = false;
|
||||||
|
private String tutorId;
|
||||||
|
|
||||||
|
@BindView(R.id.recycler_view_blacklist)
|
||||||
|
RecyclerView recyclerView;
|
||||||
|
@BindView(R.id.black_list_empty_text_view)
|
||||||
|
TextView noNotesView;
|
||||||
|
@BindView(R.id.switch_blacklist_toggle)
|
||||||
|
Switch aSwitch;
|
||||||
|
@BindView(R.id.add_to_black_list_fab)
|
||||||
|
FloatingActionButton addToBlackListFab;
|
||||||
|
@BindView(R.id.loader)
|
||||||
|
SpinKitView loader;
|
||||||
|
|
||||||
|
|
||||||
|
private Integer prevSize;
|
||||||
|
private BlackListAdapter mAdapter;
|
||||||
|
private List<User> blacklistedUsers = new ArrayList<>();
|
||||||
|
private Collator plCollator = Collator.getInstance(Locale.forLanguageTag("pl-PL"));
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void attachBaseContext(Context base) {
|
||||||
|
super.attachBaseContext(LocaleHelper.onAttach(base));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
|
||||||
|
setContentView(R.layout.activity_black_list);
|
||||||
|
ButterKnife.bind(this);
|
||||||
|
|
||||||
|
tutorId = PrefUtils.getUserId(getApplicationContext());
|
||||||
|
userService = ApiClient.getClient(getApplicationContext())
|
||||||
|
.create(UserService.class);
|
||||||
|
|
||||||
|
if (PrefUtils.isBlackListing(this)){
|
||||||
|
aSwitch.setText(getString(R.string.action_black_list) + " " +getString(R.string.on));
|
||||||
|
aSwitch.setChecked(true);
|
||||||
|
handleChangeRequest(true);
|
||||||
|
}else{
|
||||||
|
aSwitch.setText(getString(R.string.action_black_list) + " " +getString(R.string.off) );
|
||||||
|
aSwitch.setChecked(false);
|
||||||
|
handleChangeRequest(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||||
|
toolbar.setTitle(getString(R.string.activity_title_blacklist));
|
||||||
|
setSupportActionBar(toolbar);
|
||||||
|
|
||||||
|
mAdapter = new BlackListAdapter(this, blacklistedUsers);
|
||||||
|
recyclerView.setLayoutManager(new WrapContentLinearLayoutManager(getApplicationContext()));
|
||||||
|
recyclerView.setItemAnimator(new DefaultItemAnimator());
|
||||||
|
recyclerView.addItemDecoration(new MyDividerItemDecoration(this, LinearLayoutManager.VERTICAL, 16));
|
||||||
|
recyclerView.setAdapter(mAdapter);
|
||||||
|
noNotesView.setVisibility(View.GONE);
|
||||||
|
|
||||||
|
fetchBlackListedUsers();
|
||||||
|
/**
|
||||||
|
* On long press on RecyclerView item, open alert dialog
|
||||||
|
* with options to choose
|
||||||
|
* Edit and Delete
|
||||||
|
* */
|
||||||
|
recyclerView.addOnItemTouchListener(new RecyclerTouchListener(this,
|
||||||
|
recyclerView, new RecyclerTouchListener.ClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view, final int position) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLongClick(View view, int position) {
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
addToBlackListFab.setOnClickListener(this::showFabDialog);
|
||||||
|
handleSwitch();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Observable<List<String>> getListOfBlacklistedUsers(String userId) {
|
||||||
|
return userService.getTutorBlacklistedByID(userId)
|
||||||
|
.toObservable()
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread());
|
||||||
|
}
|
||||||
|
|
||||||
|
private Observable<User> getUserObservable(String userId) {
|
||||||
|
return userService
|
||||||
|
.getUserById(userId)
|
||||||
|
.toObservable()
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fetchBlackListedUsers() {
|
||||||
|
disposable.add(getListOfBlacklistedUsers(tutorId)
|
||||||
|
.doOnSubscribe(this::handleDoOnSubscribe)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.flatMap(Observable::fromIterable)
|
||||||
|
.flatMap(this::getUserObservable)
|
||||||
|
.subscribe(user -> blacklistedUsers.add(user), this::handleError,this::handleComplete));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleDoOnSubscribe(Disposable disposable) {
|
||||||
|
prevSize = blacklistedUsers.size();
|
||||||
|
blacklistedUsers.clear();
|
||||||
|
didFetched = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleComplete() {
|
||||||
|
Collections.sort(blacklistedUsers, this::sortByUserName);
|
||||||
|
didFetched = true;
|
||||||
|
refreshUI();
|
||||||
|
}
|
||||||
|
private void handleError(Throwable e){
|
||||||
|
showError(e);
|
||||||
|
didFetched = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void refreshUI(){
|
||||||
|
toggleEmptyNotes();
|
||||||
|
mAdapter.notifyItemRangeInserted(prevSize, blacklistedUsers.size() - prevSize);
|
||||||
|
mAdapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private int sortByUserName(User t1, User t2) {
|
||||||
|
return plCollator.compare(t1.getLastName(), t2.getLastName());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showFabDialog(View v){
|
||||||
|
LayoutInflater layoutInflaterAndroid = LayoutInflater.from(getApplicationContext());
|
||||||
|
@SuppressLint("InflateParams") View view = layoutInflaterAndroid.inflate(R.layout.black_list_fab_modal, null);
|
||||||
|
AlertDialog.Builder alertDialogBuilderUserInput = new android.support.v7.app.AlertDialog.Builder(this);
|
||||||
|
|
||||||
|
alertDialogBuilderUserInput.setView(view).setPositiveButton(getApplicationContext().getString(R.string.modal_location_send), null);
|
||||||
|
|
||||||
|
alertDialogBuilderUserInput
|
||||||
|
.setPositiveButton(R.string.add, null)
|
||||||
|
.setNegativeButton(R.string.cancel, null);
|
||||||
|
|
||||||
|
final AlertDialog alertDialog = alertDialogBuilderUserInput.create();
|
||||||
|
alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
|
||||||
|
|
||||||
|
EditText modalUserInput = view.findViewById(R.id.black_list_modal_input);
|
||||||
|
|
||||||
|
alertDialog.setOnShowListener(dialogInterface -> {
|
||||||
|
Button sendButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
|
||||||
|
|
||||||
|
Button dismissButton = alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE);
|
||||||
|
|
||||||
|
dismissButton.setOnClickListener(view1 -> alertDialog.dismiss());
|
||||||
|
|
||||||
|
sendButton.setOnClickListener(view1 -> {
|
||||||
|
String body = modalUserInput.getText().toString();
|
||||||
|
|
||||||
|
if (TextUtils.isEmpty(body)) {
|
||||||
|
Toast.makeText(getApplicationContext(), R.string.can_not_be_empty, Toast.LENGTH_SHORT).show();
|
||||||
|
modalUserInput.requestFocus();
|
||||||
|
} else {
|
||||||
|
sendUserToBlacklist(body);
|
||||||
|
alertDialog.dismiss();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
alertDialog.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendUserToBlacklist(String body) {
|
||||||
|
StudentIdModel studentIdModel = new StudentIdModel(body);
|
||||||
|
disposable.add(
|
||||||
|
userService.addStudentToBlacklist(PrefUtils.getUserId(getApplicationContext()), studentIdModel)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(this::handleAddUser,this::showError)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleAddUser(User user) {
|
||||||
|
Toast.makeText(this, R.string.add_user_to_list, Snackbar.LENGTH_LONG).show();
|
||||||
|
blacklistedUsers.clear();
|
||||||
|
fetchBlackListedUsers();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showError(Throwable e) {
|
||||||
|
String message;
|
||||||
|
|
||||||
|
if (e instanceof HttpException) {
|
||||||
|
ResponseBody responseBody = ((HttpException) e).response().errorBody();
|
||||||
|
message = RestApiHelper.getErrorMessage(responseBody);
|
||||||
|
if (((HttpException) e).response().code() == 404) {
|
||||||
|
message = getString(R.string.no_such_a_user);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
message = "Network Error !";
|
||||||
|
}
|
||||||
|
|
||||||
|
Toast.makeText(this, message, Snackbar.LENGTH_LONG).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void toggleEmptyNotes() {
|
||||||
|
if (didFetched && blacklistedUsers.size() == 0) {
|
||||||
|
noNotesView.setVisibility(View.VISIBLE);
|
||||||
|
noNotesView.setText(R.string.list_is_empty);
|
||||||
|
loader.setVisibility(View.GONE);
|
||||||
|
}else if (blacklistedUsers.size() > 0) {
|
||||||
|
noNotesView.setVisibility(View.GONE);
|
||||||
|
loader.setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
|
loader.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
// Inflate the menu; this adds items to the action bar if it is present.
|
||||||
|
getMenuInflater().inflate(R.menu.menu_black_list, menu);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
|
||||||
|
if (item.getItemId()==R.id.action_blacklist_info_popup){
|
||||||
|
int layoutID = R.layout.info_popup_blacklist;
|
||||||
|
|
||||||
|
View popupView = getLayoutInflater().inflate(layoutID,null);
|
||||||
|
|
||||||
|
PopupWindow popupWindow = new PopupWindow(popupView,
|
||||||
|
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||||
|
// If the PopupWindow should be focusable
|
||||||
|
popupWindow.setFocusable(true);
|
||||||
|
// If you need the PopupWindow to dismiss when when touched outside
|
||||||
|
popupWindow.setBackgroundDrawable(new ColorDrawable());
|
||||||
|
// Get the View's(the one that was clicked in the Fragment) location
|
||||||
|
View anchorView= getWindow().getDecorView().findViewById(android.R.id.content);
|
||||||
|
popupWindow.showAtLocation(anchorView,Gravity.TOP|Gravity.END, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleSwitch(){
|
||||||
|
aSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
||||||
|
if (isChecked){
|
||||||
|
aSwitch.setText(getString(R.string.action_black_list) + " "+ getString(R.string.on));
|
||||||
|
handleChangeRequest(true);
|
||||||
|
PrefUtils.useBlacklist(this,true);
|
||||||
|
}else {
|
||||||
|
aSwitch.setText(getString(R.string.action_black_list) + " "+getString(R.string.off));
|
||||||
|
handleChangeRequest(false);
|
||||||
|
PrefUtils.useBlacklist(this,false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleChangeRequest(boolean value){
|
||||||
|
IsUsingListBool isUsingListBool = new IsUsingListBool();
|
||||||
|
isUsingListBool.setIsUsing(value);
|
||||||
|
disposable.add(
|
||||||
|
userService.setTutorBlacklist(tutorId, isUsingListBool)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(()->{
|
||||||
|
},this::showError)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStop() {
|
||||||
|
super.onStop();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
disposable.dispose();
|
||||||
|
}
|
||||||
|
}
|
@ -27,6 +27,7 @@ import com.uam.wmi.findmytutor.model.ValidateUser;
|
|||||||
import com.uam.wmi.findmytutor.network.ApiClient;
|
import com.uam.wmi.findmytutor.network.ApiClient;
|
||||||
import com.uam.wmi.findmytutor.service.LdapService;
|
import com.uam.wmi.findmytutor.service.LdapService;
|
||||||
import com.uam.wmi.findmytutor.service.UserService;
|
import com.uam.wmi.findmytutor.service.UserService;
|
||||||
|
import com.uam.wmi.findmytutor.utils.MapUtils;
|
||||||
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
||||||
import com.uam.wmi.findmytutor.utils.RestApiHelper;
|
import com.uam.wmi.findmytutor.utils.RestApiHelper;
|
||||||
|
|
||||||
@ -190,6 +191,7 @@ public class LoginActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
getUserProfile(userId.asString());
|
getUserProfile(userId.asString());
|
||||||
|
|
||||||
|
|
||||||
Intent data = new Intent();
|
Intent data = new Intent();
|
||||||
String txt = "Main Activity";
|
String txt = "Main Activity";
|
||||||
data.setData(Uri.parse(txt));
|
data.setData(Uri.parse(txt));
|
||||||
|
@ -4,9 +4,11 @@ import android.Manifest;
|
|||||||
import android.animation.ObjectAnimator;
|
import android.animation.ObjectAnimator;
|
||||||
import android.animation.ValueAnimator;
|
import android.animation.ValueAnimator;
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.Context;
|
||||||
import android.location.Location;
|
import android.location.Location;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
import android.os.PowerManager;
|
||||||
import android.support.v4.content.ContextCompat;
|
import android.support.v4.content.ContextCompat;
|
||||||
import android.support.v7.app.AlertDialog;
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
@ -44,12 +46,12 @@ import com.uam.wmi.findmytutor.model.PredefinedCoordViewModel;
|
|||||||
import com.uam.wmi.findmytutor.model.User;
|
import com.uam.wmi.findmytutor.model.User;
|
||||||
import com.uam.wmi.findmytutor.network.ApiClient;
|
import com.uam.wmi.findmytutor.network.ApiClient;
|
||||||
import com.uam.wmi.findmytutor.service.CoordinateService;
|
import com.uam.wmi.findmytutor.service.CoordinateService;
|
||||||
import com.uam.wmi.findmytutor.service.PredefinedStatusesService;
|
import com.uam.wmi.findmytutor.service.PredefinedCoordinatesService;
|
||||||
import com.uam.wmi.findmytutor.service.UserService;
|
import com.uam.wmi.findmytutor.service.UserService;
|
||||||
import com.uam.wmi.findmytutor.utils.ApproximatedLocalization;
|
import com.uam.wmi.findmytutor.utils.ApproximatedLocalization;
|
||||||
|
|
||||||
import com.uam.wmi.findmytutor.utils.EnableSharingDialog;
|
import com.uam.wmi.findmytutor.utils.EnableSharingDialog;
|
||||||
|
import com.uam.wmi.findmytutor.utils.LocaleHelper;
|
||||||
|
import com.uam.wmi.findmytutor.utils.LocaleUtils;
|
||||||
import com.uam.wmi.findmytutor.utils.ManualLocationUtils;
|
import com.uam.wmi.findmytutor.utils.ManualLocationUtils;
|
||||||
import com.uam.wmi.findmytutor.utils.MapMarker;
|
import com.uam.wmi.findmytutor.utils.MapMarker;
|
||||||
import com.uam.wmi.findmytutor.utils.MapUtils;
|
import com.uam.wmi.findmytutor.utils.MapUtils;
|
||||||
@ -70,17 +72,19 @@ import io.reactivex.schedulers.Schedulers;
|
|||||||
import okhttp3.ResponseBody;
|
import okhttp3.ResponseBody;
|
||||||
import timber.log.Timber;
|
import timber.log.Timber;
|
||||||
|
|
||||||
|
import static com.uam.wmi.findmytutor.utils.Const.mapRefreshInterval;
|
||||||
|
|
||||||
public class MapActivity extends BaseActivity
|
public class MapActivity extends BaseActivity
|
||||||
implements PermissionsListener, OnMapReadyCallback {
|
implements PermissionsListener, OnMapReadyCallback {
|
||||||
|
|
||||||
|
private HashMap<Long, String> markerUserHash = new HashMap<>();
|
||||||
private String tag = getClass().getName();
|
private String tag = getClass().getName();
|
||||||
private PermissionsManager permissionsManager;
|
private PermissionsManager permissionsManager;
|
||||||
private LocationComponent locationComponent;
|
private LocationComponent locationComponent;
|
||||||
private CoordinateService coordinateService;
|
private CoordinateService coordinateService;
|
||||||
private UserService userService;
|
private UserService userService;
|
||||||
|
|
||||||
private CompositeDisposable disposable = new CompositeDisposable();
|
private CompositeDisposable disposable = new CompositeDisposable();
|
||||||
private int mInterval = 10000;
|
private int mInterval = mapRefreshInterval;
|
||||||
private Handler mHandler = new Handler();
|
private Handler mHandler = new Handler();
|
||||||
private Runnable mStatusChecker;
|
private Runnable mStatusChecker;
|
||||||
private MapView mapView;
|
private MapView mapView;
|
||||||
@ -89,9 +93,8 @@ public class MapActivity extends BaseActivity
|
|||||||
private Button removeLocationButton;
|
private Button removeLocationButton;
|
||||||
private Marker tmpLocalMarker;
|
private Marker tmpLocalMarker;
|
||||||
private Coordinate droppedMarkercoordinate;
|
private Coordinate droppedMarkercoordinate;
|
||||||
private HashMap<String, Coordinate> coordsMap = new HashMap<>();
|
public HashMap<String, Coordinate> coordsMap = new HashMap<>();
|
||||||
private HashMap<String, MapMarker> markerHash = new HashMap<>();
|
private HashMap<String, MapMarker> markerHash = new HashMap<>();
|
||||||
private HashMap<Long, String> markerUserHash = new HashMap<>();
|
|
||||||
private Set<String> previousCoordsIds = new HashSet<>();
|
private Set<String> previousCoordsIds = new HashSet<>();
|
||||||
private ManualLocationUtils manualLocationUtils;
|
private ManualLocationUtils manualLocationUtils;
|
||||||
// Camera Animation params
|
// Camera Animation params
|
||||||
@ -103,6 +106,11 @@ public class MapActivity extends BaseActivity
|
|||||||
private ApproximatedLocalization approximatedLocalization;
|
private ApproximatedLocalization approximatedLocalization;
|
||||||
private boolean shouldFetchNewCoords = true;
|
private boolean shouldFetchNewCoords = true;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void attachBaseContext(Context base) {
|
||||||
|
super.attachBaseContext(LocaleHelper.onAttach(base));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@ -119,6 +127,7 @@ public class MapActivity extends BaseActivity
|
|||||||
mStatusChecker = () -> {
|
mStatusChecker = () -> {
|
||||||
try {
|
try {
|
||||||
if (shouldFetchNewCoords) {
|
if (shouldFetchNewCoords) {
|
||||||
|
checkIfUsesCanBeTutor();
|
||||||
fetchTopCoords();
|
fetchTopCoords();
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
@ -127,7 +136,6 @@ public class MapActivity extends BaseActivity
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
selectLocationButton = findViewById(R.id.select_location_button);
|
selectLocationButton = findViewById(R.id.select_location_button);
|
||||||
removeLocationButton = findViewById(R.id.remove_location_button);
|
removeLocationButton = findViewById(R.id.remove_location_button);
|
||||||
mapView = findViewById(R.id.mapView);
|
mapView = findViewById(R.id.mapView);
|
||||||
@ -138,6 +146,11 @@ public class MapActivity extends BaseActivity
|
|||||||
handleBackgroundTaskLifeCycle();
|
handleBackgroundTaskLifeCycle();
|
||||||
manualLocationUtils = new ManualLocationUtils(MapActivity.this);
|
manualLocationUtils = new ManualLocationUtils(MapActivity.this);
|
||||||
approximatedLocalization = new ApproximatedLocalization(MapUtils.loadJsonFromAsset(getApplicationContext(), "building.geojson"));
|
approximatedLocalization = new ApproximatedLocalization(MapUtils.loadJsonFromAsset(getApplicationContext(), "building.geojson"));
|
||||||
|
|
||||||
|
if(isTutor){
|
||||||
|
MapUtils.BatteryOptimizationsExceptionCheck(this);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -148,22 +161,7 @@ public class MapActivity extends BaseActivity
|
|||||||
|
|
||||||
mapboxMap.setOnMarkerClickListener(marker -> {
|
mapboxMap.setOnMarkerClickListener(marker -> {
|
||||||
String id = markerUserHash.get(marker.getId());
|
String id = markerUserHash.get(marker.getId());
|
||||||
String locationLevel = PrefUtils.getLocationLevel(getApplicationContext());
|
|
||||||
|
|
||||||
/* if (id.equals(myId) && (locationLevel.equals(SharingLevel.MANUAL.toString()) || locationLevel.equals(SharingLevel.PREDEFINED.toString()))) {
|
|
||||||
selectLocationButton.setVisibility(View.GONE);
|
|
||||||
removeLocationButton.setVisibility(View.VISIBLE);
|
|
||||||
|
|
||||||
removeLocationButton.setOnClickListener(view -> {
|
|
||||||
stopBackgroundLocalizationTask();
|
|
||||||
|
|
||||||
removeLocationButton.setVisibility(View.GONE);
|
|
||||||
Toast.makeText(MapActivity.this, R.string.manual_marker_info, Toast.LENGTH_SHORT).show();
|
|
||||||
|
|
||||||
});
|
|
||||||
} else {*/
|
|
||||||
createMarkerModal(id);
|
createMarkerModal(id);
|
||||||
/* }*/
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
@ -222,7 +220,22 @@ public class MapActivity extends BaseActivity
|
|||||||
status.setText(String.format("%s: %s", getResources().getString(R.string.status_switch_title), cordStatus));
|
status.setText(String.format("%s: %s", getResources().getString(R.string.status_switch_title), cordStatus));
|
||||||
}
|
}
|
||||||
|
|
||||||
sharingLevelView.setText(String.format("%s: %s", getResources().getString(R.string.settings_location_level), sharingLevel));
|
String sharingLevelToRender = sharingLevel;
|
||||||
|
Log.e("LOCALE",PrefUtils.getLocale(getApplicationContext()));
|
||||||
|
|
||||||
|
if (PrefUtils.getLocale(getApplicationContext()).equals("pl") ||
|
||||||
|
PrefUtils.getLocale(getApplicationContext()).equals("pl-PL") ||
|
||||||
|
PrefUtils.getLocale(getApplicationContext()).equals("[pl-PL]")) {
|
||||||
|
if (sharingLevel.equals(SharingLevel.MANUAL.toString())) {
|
||||||
|
sharingLevelToRender = getString(R.string.manual_mode);
|
||||||
|
} else if (sharingLevel.equals(SharingLevel.EXACT.toString())) {
|
||||||
|
sharingLevelToRender = getString(R.string.exact_mode);
|
||||||
|
} else if (sharingLevel.equals(SharingLevel.APPROXIMATED.toString())) {
|
||||||
|
sharingLevelToRender = getString(R.string.approx_mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sharingLevelView.setText(String.format("%s: %s", getResources().getString(R.string.settings_location_level), sharingLevelToRender));
|
||||||
|
|
||||||
final AlertDialog alertDialog = alertDialogBuilderUserInput.create();
|
final AlertDialog alertDialog = alertDialogBuilderUserInput.create();
|
||||||
alertDialog.show();
|
alertDialog.show();
|
||||||
@ -246,7 +259,12 @@ public class MapActivity extends BaseActivity
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setOnMapClickListener() {
|
private void setOnMapClickListener() {
|
||||||
mapboxMap.addOnMapClickListener(e -> removeLocationButton.setVisibility(View.GONE));
|
|
||||||
|
mapboxMap.addOnMapClickListener(e -> {
|
||||||
|
removeLocationButton.setVisibility(View.GONE);
|
||||||
|
selectLocationButton.setVisibility(View.GONE);
|
||||||
|
restoreMapMarkers();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setOnMapLongClickListener() {
|
private void setOnMapLongClickListener() {
|
||||||
@ -333,14 +351,14 @@ public class MapActivity extends BaseActivity
|
|||||||
|
|
||||||
final AlertDialog alertDialog = alertDialogBuilderUserInput.create();
|
final AlertDialog alertDialog = alertDialogBuilderUserInput.create();
|
||||||
|
|
||||||
EditText modalUserInput = view.findViewById(R.id.feedback_input);
|
EditText modalUserInput = view.findViewById(R.id.manual_input);
|
||||||
|
|
||||||
alertDialog.setOnShowListener(dialogInterface -> {
|
alertDialog.setOnShowListener(dialogInterface -> {
|
||||||
Button sendButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
|
Button sendButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
|
||||||
Button dismissButton = alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE);
|
Button dismissButton = alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE);
|
||||||
|
|
||||||
dismissButton.setOnClickListener(view1 -> {
|
dismissButton.setOnClickListener(view1 -> {
|
||||||
PrefUtils.putCurrentManualLocationName(getApplicationContext(), "Inne");
|
PrefUtils.putCurrentManualLocationName(getApplicationContext(), getString(R.string.other_location));
|
||||||
PrefUtils.putCurrentManualLocation(getApplicationContext(), "-1");
|
PrefUtils.putCurrentManualLocation(getApplicationContext(), "-1");
|
||||||
|
|
||||||
alertDialog.dismiss();
|
alertDialog.dismiss();
|
||||||
@ -365,7 +383,7 @@ public class MapActivity extends BaseActivity
|
|||||||
|
|
||||||
|
|
||||||
private void sendLocation(String body, LatLng latLng) {
|
private void sendLocation(String body, LatLng latLng) {
|
||||||
PredefinedStatusesService predefinedStatusesService = ApiClient.getClient(getApplicationContext()).create(PredefinedStatusesService.class);
|
PredefinedCoordinatesService predefinedCoordinatesService = ApiClient.getClient(getApplicationContext()).create(PredefinedCoordinatesService.class);
|
||||||
|
|
||||||
PredefinedCoordViewModel droppedMarkercoordinate = new PredefinedCoordViewModel(
|
PredefinedCoordViewModel droppedMarkercoordinate = new PredefinedCoordViewModel(
|
||||||
latLng.getLatitude(),
|
latLng.getLatitude(),
|
||||||
@ -379,7 +397,7 @@ public class MapActivity extends BaseActivity
|
|||||||
|
|
||||||
CompositeDisposable disposable = new CompositeDisposable();
|
CompositeDisposable disposable = new CompositeDisposable();
|
||||||
disposable.add(
|
disposable.add(
|
||||||
predefinedStatusesService.postUserPredefinedCoord(PrefUtils.getUserId(getApplicationContext()), droppedMarkercoordinate)
|
predefinedCoordinatesService.postUserPredefinedCoord(PrefUtils.getUserId(getApplicationContext()), droppedMarkercoordinate)
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribe(this::SaveCurrentManualLocation, this::handleError)
|
.subscribe(this::SaveCurrentManualLocation, this::handleError)
|
||||||
@ -391,6 +409,30 @@ public class MapActivity extends BaseActivity
|
|||||||
PrefUtils.putCurrentManualLocation(getApplicationContext(), resp.getPredefinedCoordinateId());
|
PrefUtils.putCurrentManualLocation(getApplicationContext(), resp.getPredefinedCoordinateId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void checkIfUsesCanBeTutor(){
|
||||||
|
disposable.add(
|
||||||
|
userService.getSelf(myId)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribeWith(new DisposableSingleObserver<User>() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess(User user) {
|
||||||
|
boolean tutorFromBackend = user.getTitle().equals("tutor");
|
||||||
|
|
||||||
|
if(tutorFromBackend != PrefUtils.getIsTutor(getApplicationContext())){
|
||||||
|
logout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(Throwable e) {
|
||||||
|
showError(e);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private void fetchTopCoords() {
|
private void fetchTopCoords() {
|
||||||
|
|
||||||
disposable.add(
|
disposable.add(
|
||||||
@ -603,47 +645,6 @@ public class MapActivity extends BaseActivity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the mapView lifecycle to the activity's lifecycle methods
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
mapView.onResume();
|
|
||||||
shouldFetchNewCoords = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onStart() {
|
|
||||||
super.onStart();
|
|
||||||
mapView.onStart();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onStop() {
|
|
||||||
super.onStop();
|
|
||||||
mapView.onStop();
|
|
||||||
shouldFetchNewCoords = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPause() {
|
|
||||||
super.onPause();
|
|
||||||
mapView.onPause();
|
|
||||||
shouldFetchNewCoords = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLowMemory() {
|
|
||||||
super.onLowMemory();
|
|
||||||
mapView.onLowMemory();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onDestroy() {
|
|
||||||
super.onDestroy();
|
|
||||||
mapView.onDestroy();
|
|
||||||
mHandler.removeCallbacks(mStatusChecker);
|
|
||||||
disposable.dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onSaveInstanceState(Bundle outState) {
|
protected void onSaveInstanceState(Bundle outState) {
|
||||||
@ -686,11 +687,13 @@ public class MapActivity extends BaseActivity
|
|||||||
@Override
|
@Override
|
||||||
public void searchUser(String textToSearch) {
|
public void searchUser(String textToSearch) {
|
||||||
getUserFromApi(textToSearch);
|
getUserFromApi(textToSearch);
|
||||||
|
|
||||||
|
Log.e("LOCALE", LocaleUtils.getCurrentLocale());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getUserFromApi(String userNameToSearch) {
|
private void getUserFromApi(String userNameToSearch) {
|
||||||
disposable.add(
|
disposable.add(
|
||||||
userService.getAllTutors()
|
userService.getAllOnlineTutors()
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.map(tutors -> Stream.of(tutors).filter(t ->
|
.map(tutors -> Stream.of(tutors).filter(t ->
|
||||||
@ -698,6 +701,7 @@ public class MapActivity extends BaseActivity
|
|||||||
.subscribeWith(new DisposableSingleObserver<List<User>>() {
|
.subscribeWith(new DisposableSingleObserver<List<User>>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(List<User> users) {
|
public void onSuccess(List<User> users) {
|
||||||
|
Log.e("USERS", String.valueOf(users));
|
||||||
filterMarkers(users);
|
filterMarkers(users);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -708,7 +712,7 @@ public class MapActivity extends BaseActivity
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void filterMarkers(List<User> users) {
|
public void filterMarkers(List<User> users) {
|
||||||
restoreMapMarkers();
|
restoreMapMarkers();
|
||||||
|
|
||||||
Icon markedMarker = IconFactory.getInstance(MapActivity.this).fromResource(R.drawable.search_marker);
|
Icon markedMarker = IconFactory.getInstance(MapActivity.this).fromResource(R.drawable.search_marker);
|
||||||
@ -729,7 +733,7 @@ public class MapActivity extends BaseActivity
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void restoreMapMarkers() {
|
public void restoreMapMarkers() {
|
||||||
|
try {
|
||||||
for (Marker marker : mapboxMap.getMarkers()) {
|
for (Marker marker : mapboxMap.getMarkers()) {
|
||||||
MapMarker markerMap = markerHash.get(markerUserHash.get(marker.getId()));
|
MapMarker markerMap = markerHash.get(markerUserHash.get(marker.getId()));
|
||||||
|
|
||||||
@ -738,10 +742,56 @@ public class MapActivity extends BaseActivity
|
|||||||
}
|
}
|
||||||
|
|
||||||
mapboxMap.getMarkerViewManager().update();
|
mapboxMap.getMarkerViewManager().update();
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.e("MAP", String.valueOf(e));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void adjustMapToSearch(Integer zoom) {
|
public void adjustMapToSearch(Integer zoom) {
|
||||||
MapUtils.setZoom(mapboxMap, zoom);
|
MapUtils.setZoom(mapboxMap, zoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
mapView.onResume();
|
||||||
|
shouldFetchNewCoords = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onStart() {
|
||||||
|
super.onStart();
|
||||||
|
mapView.onStart();
|
||||||
|
shouldFetchNewCoords = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onStop() {
|
||||||
|
super.onStop();
|
||||||
|
mapView.onStop();
|
||||||
|
shouldFetchNewCoords = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
mapView.onPause();
|
||||||
|
shouldFetchNewCoords = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLowMemory() {
|
||||||
|
super.onLowMemory();
|
||||||
|
mapView.onLowMemory();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
mapView.onDestroy();
|
||||||
|
mHandler.removeCallbacks(mStatusChecker);
|
||||||
|
disposable.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package com.uam.wmi.findmytutor.activity;
|
package com.uam.wmi.findmytutor.activity;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
@ -15,12 +16,15 @@ import android.util.Log;
|
|||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
|
||||||
import com.uam.wmi.findmytutor.R;
|
import com.uam.wmi.findmytutor.R;
|
||||||
|
import com.uam.wmi.findmytutor.utils.LocaleHelper;
|
||||||
|
import com.uam.wmi.findmytutor.utils.LocaleUtils;
|
||||||
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
||||||
|
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class SettingsActivity extends AppCompatPreferenceActivity {
|
public class SettingsActivity extends AppCompatPreferenceActivity {
|
||||||
private static final String TAG = SettingsActivity.class.getSimpleName();
|
private static final String TAG = SettingsActivity.class.getSimpleName();
|
||||||
|
|
||||||
@ -33,9 +37,15 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
|
|||||||
getFragmentManager().beginTransaction().replace(android.R.id.content, new MainPreferenceFragment()).commit();
|
getFragmentManager().beginTransaction().replace(android.R.id.content, new MainPreferenceFragment()).commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void attachBaseContext(Context base) {
|
||||||
|
super.attachBaseContext(LocaleHelper.onAttach(base));
|
||||||
|
}
|
||||||
|
|
||||||
public void setLocale(String localeName) {
|
public void setLocale(String localeName) {
|
||||||
|
Context context = LocaleHelper.setLocale(this, localeName);
|
||||||
|
Resources res = context.getResources();
|
||||||
Locale myLocale = new Locale(localeName);
|
Locale myLocale = new Locale(localeName);
|
||||||
Resources res = getResources();
|
|
||||||
DisplayMetrics dm = res.getDisplayMetrics();
|
DisplayMetrics dm = res.getDisplayMetrics();
|
||||||
Configuration conf = res.getConfiguration();
|
Configuration conf = res.getConfiguration();
|
||||||
conf.locale = myLocale;
|
conf.locale = myLocale;
|
||||||
@ -62,9 +72,12 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
|
|||||||
languagesList.setOnPreferenceChangeListener((preference, newValue) -> {
|
languagesList.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
|
|
||||||
if (!newValue.toString().equals("0")){
|
if (!newValue.toString().equals("0")){
|
||||||
|
LocaleHelper.setLocale(getActivity(), "pl");
|
||||||
((SettingsActivity)getActivity()).setLocale("pl");
|
((SettingsActivity)getActivity()).setLocale("pl");
|
||||||
PrefUtils.storeLocale(getActivity(),"pl");
|
PrefUtils.storeLocale(getActivity(),"pl");
|
||||||
|
LocaleHelper.setLocale(getActivity(), "pl");
|
||||||
}else{
|
}else{
|
||||||
|
LocaleHelper.setLocale(getActivity(), "en");
|
||||||
((SettingsActivity)getActivity()).setLocale("en");
|
((SettingsActivity)getActivity()).setLocale("en");
|
||||||
PrefUtils.storeLocale(getActivity(),"en");
|
PrefUtils.storeLocale(getActivity(),"en");
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
package com.uam.wmi.findmytutor.activity;
|
package com.uam.wmi.findmytutor.activity;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
|
import android.app.AlertDialog;
|
||||||
import android.app.FragmentTransaction;
|
import android.app.FragmentTransaction;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.ListPreference;
|
import android.preference.ListPreference;
|
||||||
@ -21,15 +24,17 @@ import com.jakewharton.retrofit2.adapter.rxjava2.HttpException;
|
|||||||
import com.uam.wmi.findmytutor.R;
|
import com.uam.wmi.findmytutor.R;
|
||||||
import com.uam.wmi.findmytutor.model.PredefinedCoordViewModel;
|
import com.uam.wmi.findmytutor.model.PredefinedCoordViewModel;
|
||||||
import com.uam.wmi.findmytutor.network.ApiClient;
|
import com.uam.wmi.findmytutor.network.ApiClient;
|
||||||
|
import com.uam.wmi.findmytutor.service.PredefinedCoordinatesService;
|
||||||
import com.uam.wmi.findmytutor.service.PredefinedStatusesService;
|
import com.uam.wmi.findmytutor.service.PredefinedStatusesService;
|
||||||
import com.uam.wmi.findmytutor.utils.Const;
|
|
||||||
import com.uam.wmi.findmytutor.utils.EnableSharingDialog;
|
import com.uam.wmi.findmytutor.utils.EnableSharingDialog;
|
||||||
|
import com.uam.wmi.findmytutor.utils.LocaleHelper;
|
||||||
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
||||||
import com.uam.wmi.findmytutor.utils.RestApiHelper;
|
import com.uam.wmi.findmytutor.utils.RestApiHelper;
|
||||||
import com.uam.wmi.findmytutor.utils.RightButtonPreference;
|
import com.uam.wmi.findmytutor.utils.RightButtonPreference;
|
||||||
import com.uam.wmi.findmytutor.utils.SharingLevel;
|
import com.uam.wmi.findmytutor.utils.SharingLevel;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@ -45,17 +50,27 @@ import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext;
|
|||||||
|
|
||||||
public class SharingFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
|
public class SharingFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
protected SwitchPreference locationSharing;
|
protected SwitchPreference locationSharing;
|
||||||
|
protected SwitchPreference statusSwitch;
|
||||||
protected Preference locationMode;
|
protected Preference locationMode;
|
||||||
protected ListPreference manualLocationList;
|
protected ListPreference manualLocationList;
|
||||||
protected PreferenceCategory preferenceCategory;
|
protected PreferenceCategory preferenceCategory;
|
||||||
protected RightButtonPreference manualLocationButton;
|
protected RightButtonPreference manualLocationButton;
|
||||||
|
protected RightButtonPreference removeManualLocation;
|
||||||
|
protected RightButtonPreference removeManualStatus;
|
||||||
protected Preference manualStatus;
|
protected Preference manualStatus;
|
||||||
protected ListPreference statusList;
|
protected ListPreference statusList;
|
||||||
protected List<PredefinedCoordViewModel> predefinedCoordsList = new ArrayList<>();
|
protected List<PredefinedCoordViewModel> predefinedCoordsList = new ArrayList<>();
|
||||||
|
private HashMap<String, String> locationMap;
|
||||||
|
private ArrayList<String> locationUUIDs;
|
||||||
private HashMap<Integer, String> locationLevelMapping;
|
private HashMap<Integer, String> locationLevelMapping;
|
||||||
private HashMap<Integer, String> statusMapping;
|
private HashMap<Integer, String> statusMapping;
|
||||||
private PredefinedStatusesService statusesService;
|
private PredefinedStatusesService statusesService;
|
||||||
|
private PredefinedCoordinatesService locationService;
|
||||||
private CompositeDisposable disposable;
|
private CompositeDisposable disposable;
|
||||||
|
private AlertDialog.Builder builder;
|
||||||
|
private String[] statusesArray;
|
||||||
|
private boolean statusSwitchFlag;
|
||||||
|
private ArrayList<String> predefinedLocationsList;
|
||||||
|
|
||||||
public static SharingFragment newInstance() {
|
public static SharingFragment newInstance() {
|
||||||
return new SharingFragment();
|
return new SharingFragment();
|
||||||
@ -69,7 +84,13 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere
|
|||||||
.subscribeWith(new DisposableSingleObserver<List<String>>() {
|
.subscribeWith(new DisposableSingleObserver<List<String>>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(List<String> strings) {
|
public void onSuccess(List<String> strings) {
|
||||||
String[] statusesArray = strings.toArray(new String[strings.size()]);
|
statusesArray = strings.toArray(new String[strings.size()]);
|
||||||
|
if (strings.isEmpty()) {
|
||||||
|
disableStatusPreferences();
|
||||||
|
} else {
|
||||||
|
enableStatusPreferences();
|
||||||
|
}
|
||||||
|
// Log.d("STATUSES",Integer.toString(statusesArray.length ));
|
||||||
setListPreferenceData(statusList, statusesArray, null);
|
setListPreferenceData(statusList, statusesArray, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,29 +103,48 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere
|
|||||||
}
|
}
|
||||||
|
|
||||||
void getLocations(CompositeDisposable disposable) {
|
void getLocations(CompositeDisposable disposable) {
|
||||||
disposable.add(statusesService.getUserPredefinedCoords(PrefUtils.getUserId(getApplicationContext()))
|
disposable.add(locationService.getUserPredefinedCoords(PrefUtils.getUserId(getApplicationContext()))
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribeWith(new DisposableSingleObserver<List<PredefinedCoordViewModel>>() {
|
.subscribeWith(new DisposableSingleObserver<List<PredefinedCoordViewModel>>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(List<PredefinedCoordViewModel> coords) {
|
public void onSuccess(List<PredefinedCoordViewModel> coords) {
|
||||||
|
|
||||||
String currentCoordId = PrefUtils.getCurrentManualLocation(getApplicationContext());
|
String currentCoordId = PrefUtils.getCurrentManualLocation(getApplicationContext());
|
||||||
|
locationMap = new HashMap<String, String>();
|
||||||
|
locationUUIDs = new ArrayList<String>();
|
||||||
|
for (PredefinedCoordViewModel i : coords)
|
||||||
|
locationMap.put(i.getPredefinedCoordinateId(), i.getName());
|
||||||
|
for (PredefinedCoordViewModel i : coords)
|
||||||
|
locationUUIDs.add(i.getPredefinedCoordinateId());
|
||||||
List<String> predefinedLocationsNames = Stream.of(coords).map(PredefinedCoordViewModel::getName).toList();
|
List<String> predefinedLocationsNames = Stream.of(coords).map(PredefinedCoordViewModel::getName).toList();
|
||||||
|
List<String> predefinedLocationsUUIDs = Stream.of(coords).map(PredefinedCoordViewModel::getPredefinedCoordinateId).toList();
|
||||||
predefinedCoordsList.addAll(coords);
|
predefinedCoordsList.addAll(coords);
|
||||||
|
if (!PrefUtils.getLocationLevel(getApplicationContext()).equals("manual")) {
|
||||||
|
preferenceCategory.removePreference(manualLocationList);
|
||||||
|
preferenceCategory.removePreference(removeManualLocation);
|
||||||
|
preferenceCategory.removePreference(manualLocationButton);
|
||||||
|
} else {
|
||||||
|
if (!predefinedCoordsList.isEmpty()) {
|
||||||
|
|
||||||
|
manualLocationList.setEnabled(true);
|
||||||
|
manualLocationList.setSummary(PrefUtils.getCurrentManualLocationName(getApplicationContext()));
|
||||||
|
removeManualLocation.setEnabled(true);
|
||||||
|
locationSharing.setEnabled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
String[] stringnames = predefinedLocationsNames.toArray(new String[0]);
|
String[] stringnames = predefinedLocationsNames.toArray(new String[0]);
|
||||||
|
predefinedLocationsList = new ArrayList<>(Arrays.asList(stringnames));
|
||||||
List<Integer> activesId = Stream.of(coords).indexed()
|
List<Integer> activesId = Stream.of(coords).indexed()
|
||||||
.filter(v -> v.getSecond().getPredefinedCoordinateId().equals(currentCoordId)).map(IntPair::getFirst).toList();
|
.filter(v -> v.getSecond().getPredefinedCoordinateId().equals(currentCoordId)).map(IntPair::getFirst).toList();
|
||||||
|
|
||||||
if (activesId.size() == 0) {
|
if (activesId.size() == 0) {
|
||||||
setListPreferenceData(manualLocationList, stringnames, null);
|
setListPreferenceData(manualLocationList, stringnames, null);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
setListPreferenceData(manualLocationList, stringnames, activesId.get(0));
|
setListPreferenceData(manualLocationList, stringnames, activesId.get(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -114,20 +154,28 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@SuppressLint("ResourceType")
|
@SuppressLint("ResourceType")
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(final Bundle savedInstanceState) {
|
public void onCreate(final Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
addPreferencesFromResource(R.layout.pref_sharing);
|
addPreferencesFromResource(R.xml.pref_sharing);
|
||||||
locationSharing = (SwitchPreference) findPreference("key_sharing_enabled");
|
locationSharing = (SwitchPreference) findPreference("key_sharing_enabled");
|
||||||
|
statusSwitch = (SwitchPreference) findPreference("key_status_enabled");
|
||||||
locationMode = findPreference("key_location_level");
|
locationMode = findPreference("key_location_level");
|
||||||
preferenceCategory = (PreferenceCategory) findPreference("category_sharing");
|
preferenceCategory = (PreferenceCategory) findPreference("category_sharing");
|
||||||
manualLocationList = (ListPreference) findPreference("key_manual_location_value");
|
manualLocationList = (ListPreference) findPreference("key_manual_location_value");
|
||||||
manualLocationButton = (RightButtonPreference) findPreference("manual_location_button");
|
manualLocationButton = (RightButtonPreference) findPreference("manual_location_button");
|
||||||
|
removeManualLocation = (RightButtonPreference) findPreference("remove_manual_location");
|
||||||
|
builder = new AlertDialog.Builder(getActivity());
|
||||||
|
removeManualStatus = (RightButtonPreference) findPreference("remove_manual_status");
|
||||||
manualStatus = findPreference("key_manual_status");
|
manualStatus = findPreference("key_manual_status");
|
||||||
statusList = (ListPreference) findPreference("key_status_value");
|
statusList = (ListPreference) findPreference("key_status_value");
|
||||||
statusesService = ApiClient.getClient(getApplicationContext()).create(PredefinedStatusesService.class);
|
statusesService = ApiClient.getClient(getApplicationContext()).create(PredefinedStatusesService.class);
|
||||||
|
locationService = ApiClient.getClient(getApplicationContext()).create(PredefinedCoordinatesService.class);
|
||||||
disposable = new CompositeDisposable();
|
disposable = new CompositeDisposable();
|
||||||
|
statusesArray = new String[0];
|
||||||
|
predefinedLocationsList = new ArrayList<String>();
|
||||||
getStatuses(disposable);
|
getStatuses(disposable);
|
||||||
getLocations(disposable);
|
getLocations(disposable);
|
||||||
locationLevelMapping = new HashMap<Integer, String>();
|
locationLevelMapping = new HashMap<Integer, String>();
|
||||||
@ -144,6 +192,7 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere
|
|||||||
statusList.setSummary(PrefUtils.getUserStatus(getApplicationContext()));
|
statusList.setSummary(PrefUtils.getUserStatus(getApplicationContext()));
|
||||||
manualLocationList.setSummary(PrefUtils.getCurrentManualLocationName(getApplicationContext()));
|
manualLocationList.setSummary(PrefUtils.getCurrentManualLocationName(getApplicationContext()));
|
||||||
|
|
||||||
|
|
||||||
/** Main sharing switch**/
|
/** Main sharing switch**/
|
||||||
locationSharing.setOnPreferenceChangeListener((buttonView, newValue) -> {
|
locationSharing.setOnPreferenceChangeListener((buttonView, newValue) -> {
|
||||||
PrefUtils.storeEnableSharingLocalization(getApplicationContext(), (Boolean) newValue);
|
PrefUtils.storeEnableSharingLocalization(getApplicationContext(), (Boolean) newValue);
|
||||||
@ -153,28 +202,27 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere
|
|||||||
|
|
||||||
/** Sharing level list **/
|
/** Sharing level list **/
|
||||||
locationMode.setOnPreferenceChangeListener((preference, newValue) -> {
|
locationMode.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
|
((MapActivity) getActivity()).stopBackgroundLocalizationTask();
|
||||||
|
((MapActivity) getActivity()).startBackgroundLocalizationTask();
|
||||||
PrefUtils.storeLocationMode(getApplicationContext(), locationLevelMapping.get(Integer.parseInt((String) newValue)));
|
PrefUtils.storeLocationMode(getApplicationContext(), locationLevelMapping.get(Integer.parseInt((String) newValue)));
|
||||||
|
|
||||||
if (PrefUtils.getLocationLevel(getApplicationContext()).equals(SharingLevel.MANUAL.toString())) {
|
if (PrefUtils.getLocationLevel(getApplicationContext()).equals(SharingLevel.MANUAL.toString())) {
|
||||||
if (!predefinedCoordsList.isEmpty()) {
|
if (!predefinedCoordsList.isEmpty()) {
|
||||||
preferenceCategory.addPreference(manualLocationList);
|
preferenceCategory.addPreference(manualLocationList);
|
||||||
|
preferenceCategory.addPreference(removeManualLocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
preferenceCategory.addPreference(manualLocationButton);
|
preferenceCategory.addPreference(manualLocationButton);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
locationSharing.setEnabled(true);
|
||||||
preferenceCategory.removePreference(manualLocationList);
|
preferenceCategory.removePreference(manualLocationList);
|
||||||
preferenceCategory.removePreference(manualLocationButton);
|
preferenceCategory.removePreference(manualLocationButton);
|
||||||
|
preferenceCategory.removePreference(removeManualLocation);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
/** Manual location category hiding when location level is != manual **/
|
/** Manual location category hiding when location level is != manual **/
|
||||||
if (!PrefUtils.getLocationLevel(getApplicationContext()).equals("manual")) {
|
|
||||||
preferenceCategory.removePreference(manualLocationList);
|
|
||||||
preferenceCategory.removePreference(manualLocationButton);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Custom manual location list change listener **/
|
/** Custom manual location list change listener **/
|
||||||
manualLocationList.setOnPreferenceChangeListener((preference, newValue) -> {
|
manualLocationList.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
@ -197,16 +245,15 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere
|
|||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Button 'choose from map' button listener **/
|
/** Button 'choose from map' button listener **/
|
||||||
manualLocationButton.setOnPreferenceChangeListener((preference, o) -> {
|
manualLocationButton.setOnPreferenceChangeListener((preference, o) -> {
|
||||||
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
|
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
|
||||||
fragmentTransaction.hide(SharingFragment.this);
|
fragmentTransaction.hide(SharingFragment.this);
|
||||||
fragmentTransaction.commit();
|
fragmentTransaction.commit();
|
||||||
|
((MapActivity) getActivity()).updateNavigationBarState();
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
statusSwitch.setOnPreferenceChangeListener((preference, newValue) -> true);
|
||||||
/** Status list change listener **/
|
/** Status list change listener **/
|
||||||
statusList.setOnPreferenceChangeListener((preference, newValue) -> {
|
statusList.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
ListPreference lp = (ListPreference) preference;
|
ListPreference lp = (ListPreference) preference;
|
||||||
@ -215,8 +262,17 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere
|
|||||||
lp.setSummary(entries[Integer.parseInt((String) newValue)]);
|
lp.setSummary(entries[Integer.parseInt((String) newValue)]);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
statusList.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
|
|
||||||
/** Custom status list change listener **/
|
if (statusesArray.length == 0) {
|
||||||
|
builder.setTitle("nie ma wody na pustyni");
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/** Custom status edittext change listener **/
|
||||||
manualStatus.setOnPreferenceChangeListener((preference, newValue) -> {
|
manualStatus.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
|
|
||||||
disposable.add(statusesService.postUserPredefinedStatus(PrefUtils.getUserId(getApplicationContext()), (String) newValue)
|
disposable.add(statusesService.postUserPredefinedStatus(PrefUtils.getUserId(getApplicationContext()), (String) newValue)
|
||||||
@ -226,6 +282,41 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
removeManualStatus.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
|
showRemoveDialog(statusList.getEntries(), "status");
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
removeManualLocation.setOnPreferenceChangeListener(((preference, newValue) -> {
|
||||||
|
showRemoveDialog(manualLocationList.getEntries(), "location");
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void showRemoveDialog(CharSequence[] entries, String service) {
|
||||||
|
boolean[] checked = new boolean[entries.length];
|
||||||
|
ArrayList<String> tobeDeleted = new ArrayList<String>();
|
||||||
|
// Log.d("sharingDialog", "no to siup");
|
||||||
|
builder.setPositiveButton("DELETE", new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
for (int i = 0; i < entries.length; i++) {
|
||||||
|
if (checked[i] == true) {
|
||||||
|
tobeDeleted.add((String) entries[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
removeEntries(service, tobeDeleted);
|
||||||
|
// Log.d("MANAGE-PREF",tobeDeleted.toString());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
builder.setMultiChoiceItems(entries, checked, new DialogInterface.OnMultiChoiceClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
builder.create().show();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -236,6 +327,36 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere
|
|||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void removeEntries(String service, ArrayList<String> toBeDeleted) {
|
||||||
|
|
||||||
|
// Log.d("MANAGE-PREF", toBeDeleted.toString());
|
||||||
|
if (service.equals("status")) {
|
||||||
|
for (String uuid : toBeDeleted) {
|
||||||
|
disposable.add(statusesService.deleteUserPredefinedStatus(PrefUtils.getUserId(getApplicationContext()), uuid)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(this::handleDeleteStatuses, this::handleError));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ArrayList<String> uuidsToBeDeleted = new ArrayList<String>();
|
||||||
|
for (String name : toBeDeleted) {
|
||||||
|
for (String uuid : locationUUIDs) {
|
||||||
|
if (locationMap.get(uuid).equals(name)) {
|
||||||
|
uuidsToBeDeleted.add(uuid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (String uuid : uuidsToBeDeleted) {
|
||||||
|
// predefinedCoordsList.removeIf(x -> x.getPredefinedCoordinateId().equals(uuid));
|
||||||
|
predefinedCoordsList.removeAll(Stream.of(predefinedCoordsList).filter(x -> x.getPredefinedCoordinateId().equals(uuid)).toList());
|
||||||
|
disposable.add(locationService.deleteUserPredefinedCoord(PrefUtils.getUserId(getApplicationContext()), uuid)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(this::handleDeleteLocations, this::handleError));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected void setListPreferenceData(ListPreference lp, String[] entries, Integer activeId) {
|
protected void setListPreferenceData(ListPreference lp, String[] entries, Integer activeId) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -261,10 +382,15 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere
|
|||||||
;
|
;
|
||||||
|
|
||||||
private void handleResponse(List<String> resp) {
|
private void handleResponse(List<String> resp) {
|
||||||
|
if (resp.size() == 1) {
|
||||||
|
enableStatusPreferences();
|
||||||
|
if (PrefUtils.isStatusEnabled(getApplicationContext()) == false) {
|
||||||
|
PrefUtils.enableStatus(getApplicationContext());
|
||||||
|
statusSwitch.setChecked(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
String[] statusesArray = resp.toArray(new String[resp.size()]);
|
String[] statusesArray = resp.toArray(new String[resp.size()]);
|
||||||
|
|
||||||
setListPreferenceData(statusList, statusesArray, resp.size() - 1);
|
setListPreferenceData(statusList, statusesArray, resp.size() - 1);
|
||||||
|
|
||||||
statusList.setValueIndex(resp.size() - 1);
|
statusList.setValueIndex(resp.size() - 1);
|
||||||
PrefUtils.storeStatus(getApplicationContext(), resp.get(resp.size() - 1));
|
PrefUtils.storeStatus(getApplicationContext(), resp.get(resp.size() - 1));
|
||||||
statusList.setSummary(PrefUtils.getUserStatus(getApplicationContext()));
|
statusList.setSummary(PrefUtils.getUserStatus(getApplicationContext()));
|
||||||
@ -282,6 +408,78 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void handleDeleteStatuses(List<String> resp) {
|
||||||
|
if (resp.isEmpty()) {
|
||||||
|
disableStatusPreferences();
|
||||||
|
} else {
|
||||||
|
String[] statusesArray = resp.toArray(new String[resp.size()]);
|
||||||
|
setListPreferenceData(statusList, statusesArray, null);
|
||||||
|
String currentEntry = PrefUtils.getUserStatus(getApplicationContext());
|
||||||
|
if (resp.contains(currentEntry)) {
|
||||||
|
statusList.setValueIndex(resp.indexOf(currentEntry));
|
||||||
|
} else {
|
||||||
|
statusList.setValueIndex(0);
|
||||||
|
statusList.setSummary(resp.get(0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleDeleteLocations(List<PredefinedCoordViewModel> resp) {
|
||||||
|
getLocations(disposable);
|
||||||
|
String currentEntry = PrefUtils.getCurrentManualLocation(getApplicationContext());
|
||||||
|
if (resp.isEmpty()) {
|
||||||
|
disableManualLocationPreferences();
|
||||||
|
} else {
|
||||||
|
if (!Stream.of(resp).filter(x -> x.getName().equals(currentEntry)).toList().isEmpty()) {
|
||||||
|
for (PredefinedCoordViewModel location : resp) {
|
||||||
|
if (location.getName().equals(currentEntry)) {
|
||||||
|
manualLocationList.setValueIndex(resp.indexOf(location));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
manualLocationList.setValueIndex(0);
|
||||||
|
manualLocationList.setSummary(resp.get(0).getName());
|
||||||
|
//todo czy na pewno w shared pref sa dobre wartosci
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void disableStatusPreferences() {
|
||||||
|
removeManualStatus.setEnabled(false);
|
||||||
|
statusList.setEnabled(false);
|
||||||
|
statusSwitch.setEnabled(false);
|
||||||
|
statusList.setSummary("");
|
||||||
|
PrefUtils.disableStatus(getApplicationContext());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void enableStatusPreferences() {
|
||||||
|
removeManualStatus.setEnabled(true);
|
||||||
|
statusList.setEnabled(true);
|
||||||
|
statusSwitch.setEnabled(true);
|
||||||
|
statusList.setSummary(PrefUtils.getUserStatus(getApplicationContext()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void disableManualLocationPreferences() {
|
||||||
|
removeManualLocation.setEnabled(false);
|
||||||
|
manualLocationList.setEnabled(false);
|
||||||
|
manualLocationList.setSummary("");
|
||||||
|
locationSharing.setChecked(false);
|
||||||
|
locationSharing.setEnabled(false);
|
||||||
|
PrefUtils.disableSharing(getApplicationContext());
|
||||||
|
((MapActivity) getActivity()).handleBackgroundTaskLifeCycle();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void enableManualLocationPreferences() {
|
||||||
|
removeManualLocation.setEnabled(true);
|
||||||
|
manualLocationList.setEnabled(true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||||
locationSharing.setChecked(PrefUtils.isEnableSharingLocalization(getApplicationContext()));
|
locationSharing.setChecked(PrefUtils.isEnableSharingLocalization(getApplicationContext()));
|
||||||
@ -300,4 +498,11 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere
|
|||||||
getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
|
getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
|
||||||
super.onPause();
|
super.onPause();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
disposable.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,19 @@
|
|||||||
|
package com.uam.wmi.findmytutor.activity;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
|
||||||
|
import com.uam.wmi.findmytutor.R;
|
||||||
|
|
||||||
|
public abstract class SpecialList extends AppCompatActivity {
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState){
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(getContentViewId());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract int getContentViewId();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -1,15 +1,29 @@
|
|||||||
package com.uam.wmi.findmytutor.activity;
|
package com.uam.wmi.findmytutor.activity;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.app.Dialog;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.PowerManager;
|
||||||
|
import android.provider.Settings;
|
||||||
|
import android.support.v4.app.DialogFragment;
|
||||||
|
import android.support.v4.app.FragmentManager;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.util.DisplayMetrics;
|
import android.util.DisplayMetrics;
|
||||||
|
import android.widget.ScrollView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
|
||||||
|
import com.uam.wmi.findmytutor.R;
|
||||||
|
import com.uam.wmi.findmytutor.utils.LocaleHelper;
|
||||||
|
import com.uam.wmi.findmytutor.utils.MapUtils;
|
||||||
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@ -18,6 +32,11 @@ public class StartupActivity extends AppCompatActivity {
|
|||||||
private static final int AUTHENTICATION_REQUEST_CODE = 666;
|
private static final int AUTHENTICATION_REQUEST_CODE = 666;
|
||||||
String currentLang;
|
String currentLang;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void attachBaseContext(Context base) {
|
||||||
|
super.attachBaseContext(LocaleHelper.onAttach(base));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
|
||||||
@ -31,10 +50,10 @@ public class StartupActivity extends AppCompatActivity {
|
|||||||
} else {
|
} else {
|
||||||
Intent loginIntent = new Intent(this, LoginActivity.class);
|
Intent loginIntent = new Intent(this, LoginActivity.class);
|
||||||
startActivityForResult(loginIntent, AUTHENTICATION_REQUEST_CODE);
|
startActivityForResult(loginIntent, AUTHENTICATION_REQUEST_CODE);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -47,4 +66,8 @@ public class StartupActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -0,0 +1,49 @@
|
|||||||
|
package com.uam.wmi.findmytutor.activity;
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.app.Dialog;
|
||||||
|
import android.app.DialogFragment;
|
||||||
|
import android.app.TimePickerDialog;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.text.format.DateFormat;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.TimePicker;
|
||||||
|
|
||||||
|
import com.uam.wmi.findmytutor.model.DutyHourViewModel;
|
||||||
|
|
||||||
|
import java.util.Calendar;
|
||||||
|
|
||||||
|
@SuppressLint("ValidFragment")
|
||||||
|
public class TimePickerFragment extends DialogFragment
|
||||||
|
implements TimePickerDialog.OnTimeSetListener {
|
||||||
|
private TextView textView;
|
||||||
|
private String field;
|
||||||
|
private DutyHourViewModel duty;
|
||||||
|
@SuppressLint("ValidFragment")
|
||||||
|
public TimePickerFragment(TextView view, DutyHourViewModel duty, String field){
|
||||||
|
this.textView = view;
|
||||||
|
this.duty=duty;
|
||||||
|
this.field=field;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
|
// Use the current time as the default values for the picker
|
||||||
|
final Calendar c = Calendar.getInstance();
|
||||||
|
int hour = c.get(Calendar.HOUR_OF_DAY);
|
||||||
|
int minute = c.get(Calendar.MINUTE);
|
||||||
|
|
||||||
|
// Create a new instance of TimePickerDialog and return it
|
||||||
|
return new TimePickerDialog(getActivity(), this, hour, minute,
|
||||||
|
DateFormat.is24HourFormat(getActivity()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
|
||||||
|
String time = String.format("%d:%02d",hourOfDay,minute);
|
||||||
|
textView.setText(time);
|
||||||
|
if(field.equals("start")){
|
||||||
|
duty.setStart(time);
|
||||||
|
}else{
|
||||||
|
duty.setEnd(time);
|
||||||
|
}
|
||||||
|
// Do something with the time chosen by the user
|
||||||
|
}
|
||||||
|
}
|
@ -1,14 +1,21 @@
|
|||||||
package com.uam.wmi.findmytutor.activity;
|
package com.uam.wmi.findmytutor.activity;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.drawable.ColorDrawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.design.widget.TextInputEditText;
|
import android.support.design.widget.TextInputEditText;
|
||||||
import android.support.design.widget.TextInputLayout;
|
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.view.Gravity;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.PopupWindow;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
@ -21,22 +28,22 @@ import com.uam.wmi.findmytutor.model.User;
|
|||||||
import com.uam.wmi.findmytutor.network.ApiClient;
|
import com.uam.wmi.findmytutor.network.ApiClient;
|
||||||
import com.uam.wmi.findmytutor.service.TutorTabApi;
|
import com.uam.wmi.findmytutor.service.TutorTabApi;
|
||||||
import com.uam.wmi.findmytutor.service.UserService;
|
import com.uam.wmi.findmytutor.service.UserService;
|
||||||
import com.uam.wmi.findmytutor.utils.InfoHelperUtils;
|
import com.uam.wmi.findmytutor.utils.LocaleHelper;
|
||||||
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
||||||
import com.uam.wmi.findmytutor.utils.RestApiHelper;
|
import com.uam.wmi.findmytutor.utils.RestApiHelper;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import butterknife.ButterKnife;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
import io.reactivex.disposables.CompositeDisposable;
|
import io.reactivex.disposables.CompositeDisposable;
|
||||||
import io.reactivex.observers.DisposableCompletableObserver;
|
|
||||||
import io.reactivex.observers.DisposableSingleObserver;
|
import io.reactivex.observers.DisposableSingleObserver;
|
||||||
import io.reactivex.schedulers.Schedulers;
|
import io.reactivex.schedulers.Schedulers;
|
||||||
import okhttp3.ResponseBody;
|
import okhttp3.ResponseBody;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
|
|
||||||
import static java.lang.String.valueOf;
|
import static java.lang.String.valueOf;
|
||||||
|
|
||||||
public class TutorTab extends AppCompatActivity {
|
public class TutorTab extends AppCompatActivity {
|
||||||
@ -61,16 +68,21 @@ public class TutorTab extends AppCompatActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
|
||||||
setContentView(R.layout.content_tutor_tab);
|
setContentView(R.layout.content_tutor_tab);
|
||||||
|
ButterKnife.bind(this);
|
||||||
|
|
||||||
|
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||||
|
toolbar.setTitle(R.string.profile_activity_title);
|
||||||
|
setSupportActionBar(toolbar);
|
||||||
|
|
||||||
userName = findViewById(R.id.userName);
|
userName = findViewById(R.id.userName);
|
||||||
userNote = (TextInputEditText) findViewById(R.id.userNote);
|
userNote = findViewById(R.id.userNote);
|
||||||
userRoom = findViewById(R.id.userRoom);
|
userRoom = findViewById(R.id.userRoom);
|
||||||
userEmail = findViewById(R.id.userEmail);
|
userEmail = findViewById(R.id.userEmail);
|
||||||
department = findViewById(R.id.userDepartment);
|
department = findViewById(R.id.userDepartment);
|
||||||
saveButon = findViewById(R.id.saveButon);
|
saveButon = findViewById(R.id.saveButton);
|
||||||
scrapButton = findViewById(R.id.scrapTutorTab);
|
scrapButton = findViewById(R.id.scrapTutorTab);
|
||||||
addDutyButton = findViewById(R.id.addDuty);
|
addDutyButton = findViewById(R.id.addDuty);
|
||||||
dutyHoursRecycller = findViewById(R.id.dutyHourView);
|
dutyHoursRecycller = findViewById(R.id.dutyHourView);
|
||||||
@ -84,8 +96,6 @@ public class TutorTab extends AppCompatActivity {
|
|||||||
|
|
||||||
getTutorTab();
|
getTutorTab();
|
||||||
|
|
||||||
findViewById(R.id.contentTutorTabInfoImageButton).setOnClickListener(v-> InfoHelperUtils.infoPopUp(v,R.layout.info_popup_tutor_tab));
|
|
||||||
|
|
||||||
userName.setText(String.format("%s %s", PrefUtils.getUserFirstName(getApplicationContext()), PrefUtils.getUserLastName(getApplicationContext())));
|
userName.setText(String.format("%s %s", PrefUtils.getUserFirstName(getApplicationContext()), PrefUtils.getUserLastName(getApplicationContext())));
|
||||||
|
|
||||||
disposable.add(
|
disposable.add(
|
||||||
@ -110,6 +120,34 @@ public class TutorTab extends AppCompatActivity {
|
|||||||
scrapButton.setOnClickListener(view -> scrapTutorTab());
|
scrapButton.setOnClickListener(view -> scrapTutorTab());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
getMenuInflater().inflate(R.menu.menu_profile, menu);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
|
||||||
|
if (item.getItemId()==R.id.action_profile_info_popup){
|
||||||
|
int layoutID = R.layout.info_popup_tutor_tab;
|
||||||
|
|
||||||
|
View popupView = getLayoutInflater().inflate(layoutID,null);
|
||||||
|
|
||||||
|
PopupWindow popupWindow = new PopupWindow(popupView,
|
||||||
|
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||||
|
// If the PopupWindow should be focusable
|
||||||
|
popupWindow.setFocusable(true);
|
||||||
|
// If you need the PopupWindow to dismiss when when touched outside
|
||||||
|
popupWindow.setBackgroundDrawable(new ColorDrawable());
|
||||||
|
// Get the View's(the one that was clicked in the Fragment) location
|
||||||
|
View anchorView= getWindow().getDecorView().findViewById(android.R.id.content);
|
||||||
|
popupWindow.showAtLocation(anchorView,Gravity.TOP|Gravity.END, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
|
||||||
private void getTutorTab(){
|
private void getTutorTab(){
|
||||||
disposable.add(
|
disposable.add(
|
||||||
tutorTabService.apiUsersTutorTabByTutorIdGet(PrefUtils.getUserId(getApplicationContext()))
|
tutorTabService.apiUsersTutorTabByTutorIdGet(PrefUtils.getUserId(getApplicationContext()))
|
||||||
@ -121,7 +159,7 @@ public class TutorTab extends AppCompatActivity {
|
|||||||
|
|
||||||
dutyHourList = tutorTabViewModel.getDutyHours();
|
dutyHourList = tutorTabViewModel.getDutyHours();
|
||||||
if(dutyHourList != null){
|
if(dutyHourList != null){
|
||||||
dutyHoursAdapter = new DutyHoursAdapter(getApplicationContext(),dutyHourList);
|
dutyHoursAdapter = new DutyHoursAdapter(getApplicationContext(),dutyHourList, getFragmentManager());
|
||||||
dutyHoursRecycller.setAdapter(dutyHoursAdapter);
|
dutyHoursRecycller.setAdapter(dutyHoursAdapter);
|
||||||
addDutyButton.setOnClickListener(v -> addEmptyDuty(dutyHoursAdapter));
|
addDutyButton.setOnClickListener(v -> addEmptyDuty(dutyHoursAdapter));
|
||||||
}
|
}
|
||||||
@ -134,17 +172,21 @@ public class TutorTab extends AppCompatActivity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError(Throwable e) {
|
public void onError(Throwable e) {
|
||||||
int code = ((HttpException) e).response().code();
|
int code = 0;
|
||||||
|
|
||||||
|
if (e instanceof HttpException) {
|
||||||
|
code = ((HttpException) e).response().code();
|
||||||
|
}
|
||||||
|
|
||||||
if( code == 404){
|
if( code == 404){
|
||||||
ifTutorTabExists = false;
|
ifTutorTabExists = false;
|
||||||
dutyHoursAdapter = new DutyHoursAdapter(getApplicationContext(),new ArrayList<DutyHourViewModel>());
|
dutyHoursAdapter = new DutyHoursAdapter(getApplicationContext(),new ArrayList<DutyHourViewModel>(), getFragmentManager());
|
||||||
dutyHoursRecycller.setAdapter(dutyHoursAdapter);
|
dutyHoursRecycller.setAdapter(dutyHoursAdapter);
|
||||||
addDutyButton.setOnClickListener(v -> addEmptyDuty(dutyHoursAdapter));
|
addDutyButton.setOnClickListener(v -> addEmptyDuty(dutyHoursAdapter));
|
||||||
}
|
}
|
||||||
showError(e);
|
showError(e);
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addEmptyDuty(DutyHoursAdapter adapter){
|
private void addEmptyDuty(DutyHoursAdapter adapter){
|
||||||
@ -155,6 +197,7 @@ public class TutorTab extends AppCompatActivity {
|
|||||||
|
|
||||||
private void setUpSaveListener(Button button) {
|
private void setUpSaveListener(Button button) {
|
||||||
button.setOnClickListener(view -> {
|
button.setOnClickListener(view -> {
|
||||||
|
if( isEmailValid(userEmail.getText().toString())){
|
||||||
newTab = new TutorTabViewModel(PrefUtils.getUserId(getApplicationContext()),
|
newTab = new TutorTabViewModel(PrefUtils.getUserId(getApplicationContext()),
|
||||||
userRoom.getText().toString(),
|
userRoom.getText().toString(),
|
||||||
userEmail.getText().toString(),
|
userEmail.getText().toString(),
|
||||||
@ -166,6 +209,9 @@ public class TutorTab extends AppCompatActivity {
|
|||||||
postUserTab(newTab);
|
postUserTab(newTab);
|
||||||
ifTutorTabExists=true;
|
ifTutorTabExists=true;
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
|
userEmail.setError(getString(R.string.error_invalid_email));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,7 +261,6 @@ public class TutorTab extends AppCompatActivity {
|
|||||||
Toast.makeText(getApplicationContext(),
|
Toast.makeText(getApplicationContext(),
|
||||||
"Network error " + error.getMessage(), Toast.LENGTH_SHORT).show();
|
"Network error " + error.getMessage(), Toast.LENGTH_SHORT).show();
|
||||||
|
|
||||||
|
|
||||||
Log.e("WMI SUCC", String.valueOf(error));
|
Log.e("WMI SUCC", String.valueOf(error));
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -233,4 +278,26 @@ public class TutorTab extends AppCompatActivity {
|
|||||||
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
|
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void attachBaseContext(Context base) {
|
||||||
|
super.attachBaseContext(LocaleHelper.onAttach(base));
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEmailValid(String email)
|
||||||
|
{
|
||||||
|
String regExpn =
|
||||||
|
"^(([\\w-]+\\.)+[\\w-]+|([a-zA-Z]{1}|[\\w-]{2,}))@"
|
||||||
|
+"((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?"
|
||||||
|
+"[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\."
|
||||||
|
+"([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\\.([0-1]?"
|
||||||
|
+"[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|"
|
||||||
|
+"([a-zA-Z]+[\\w-]+\\.)+[a-zA-Z]{2,4})$";
|
||||||
|
|
||||||
|
CharSequence inputStr = email;
|
||||||
|
|
||||||
|
Pattern pattern = Pattern.compile(regExpn,Pattern.CASE_INSENSITIVE);
|
||||||
|
Matcher matcher = pattern.matcher(inputStr);
|
||||||
|
|
||||||
|
return matcher.matches();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,46 @@
|
|||||||
|
package com.uam.wmi.findmytutor.activity;
|
||||||
|
|
||||||
|
//import android.app.Fragment;
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.v4.app.FragmentTabHost;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import com.uam.wmi.findmytutor.R;
|
||||||
|
|
||||||
|
public class TutorsListTab extends Fragment {
|
||||||
|
private FragmentTabHost mTabHost;
|
||||||
|
|
||||||
|
public TutorsListTab() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TutorsListTab newInstance() {
|
||||||
|
return new TutorsListTab();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
|
Bundle savedInstanceState) {
|
||||||
|
|
||||||
|
View rootView = inflater.inflate(R.layout.tutors_list_tabs, container, false);
|
||||||
|
|
||||||
|
mTabHost = rootView.findViewById(android.R.id.tabhost);
|
||||||
|
mTabHost.setup(getActivity(), getFragmentManager(), R.id.realtabcontent);
|
||||||
|
|
||||||
|
mTabHost.addTab(mTabHost.newTabSpec("fragmentb").setIndicator("Fragment B"),
|
||||||
|
UsersListFragment.class, null);
|
||||||
|
mTabHost.addTab(mTabHost.newTabSpec("fragmentc").setIndicator("Fragment C"),
|
||||||
|
UsersListFragment.class, null);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return rootView;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,10 @@
|
|||||||
package com.uam.wmi.findmytutor.activity;
|
package com.uam.wmi.findmytutor.activity;
|
||||||
|
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
|
import android.app.FragmentTransaction;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.SystemClock;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.design.widget.CoordinatorLayout;
|
import android.support.design.widget.CoordinatorLayout;
|
||||||
import android.support.design.widget.Snackbar;
|
import android.support.design.widget.Snackbar;
|
||||||
@ -9,40 +12,60 @@ import android.support.v7.app.AlertDialog;
|
|||||||
import android.support.v7.widget.DefaultItemAnimator;
|
import android.support.v7.widget.DefaultItemAnimator;
|
||||||
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.support.v7.widget.SearchView;
|
||||||
|
import android.text.Spannable;
|
||||||
|
import android.text.SpannableString;
|
||||||
|
import android.text.format.DateFormat;
|
||||||
|
import android.text.style.ImageSpan;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.Gravity;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuInflater;
|
||||||
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
import com.annimon.stream.Stream;
|
import com.annimon.stream.Stream;
|
||||||
|
import com.github.ybq.android.spinkit.SpinKitView;
|
||||||
import com.jakewharton.retrofit2.adapter.rxjava2.HttpException;
|
import com.jakewharton.retrofit2.adapter.rxjava2.HttpException;
|
||||||
import com.uam.wmi.findmytutor.R;
|
import com.uam.wmi.findmytutor.R;
|
||||||
import com.uam.wmi.findmytutor.adapters.TutorsListAdapter;
|
import com.uam.wmi.findmytutor.adapters.TutorsListAdapter;
|
||||||
|
import com.uam.wmi.findmytutor.model.Coordinate;
|
||||||
import com.uam.wmi.findmytutor.model.DutyHourViewModel;
|
import com.uam.wmi.findmytutor.model.DutyHourViewModel;
|
||||||
import com.uam.wmi.findmytutor.model.TutorTabViewModel;
|
import com.uam.wmi.findmytutor.model.TutorTabViewModel;
|
||||||
import com.uam.wmi.findmytutor.model.User;
|
import com.uam.wmi.findmytutor.model.User;
|
||||||
import com.uam.wmi.findmytutor.network.ApiClient;
|
import com.uam.wmi.findmytutor.network.ApiClient;
|
||||||
|
import com.uam.wmi.findmytutor.service.CoordinateService;
|
||||||
import com.uam.wmi.findmytutor.service.TutorTabApi;
|
import com.uam.wmi.findmytutor.service.TutorTabApi;
|
||||||
import com.uam.wmi.findmytutor.service.UserService;
|
import com.uam.wmi.findmytutor.service.UserService;
|
||||||
import com.uam.wmi.findmytutor.utils.InfoHelperUtils;
|
import com.uam.wmi.findmytutor.utils.ActiveFragment;
|
||||||
import com.uam.wmi.findmytutor.utils.MyDividerItemDecoration;
|
import com.uam.wmi.findmytutor.utils.MyDividerItemDecoration;
|
||||||
|
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
||||||
import com.uam.wmi.findmytutor.utils.RecyclerTouchListener;
|
import com.uam.wmi.findmytutor.utils.RecyclerTouchListener;
|
||||||
import com.uam.wmi.findmytutor.utils.RestApiHelper;
|
import com.uam.wmi.findmytutor.utils.RestApiHelper;
|
||||||
|
|
||||||
import java.text.Collator;
|
import java.text.Collator;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Calendar;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
|
import io.reactivex.Observable;
|
||||||
|
import io.reactivex.ObservableSource;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
import io.reactivex.disposables.CompositeDisposable;
|
import io.reactivex.disposables.CompositeDisposable;
|
||||||
|
import io.reactivex.disposables.Disposable;
|
||||||
|
import io.reactivex.functions.Function;
|
||||||
|
import io.reactivex.observers.DisposableObserver;
|
||||||
import io.reactivex.observers.DisposableSingleObserver;
|
import io.reactivex.observers.DisposableSingleObserver;
|
||||||
import io.reactivex.schedulers.Schedulers;
|
import io.reactivex.schedulers.Schedulers;
|
||||||
import okhttp3.ResponseBody;
|
import okhttp3.ResponseBody;
|
||||||
@ -58,14 +81,20 @@ public class UsersListFragment extends Fragment {
|
|||||||
RecyclerView recyclerView;
|
RecyclerView recyclerView;
|
||||||
@BindView(R.id.txt_empty_notes_view)
|
@BindView(R.id.txt_empty_notes_view)
|
||||||
TextView noNotesView;
|
TextView noNotesView;
|
||||||
|
@BindView(R.id.loader)
|
||||||
|
SpinKitView loader;
|
||||||
|
|
||||||
|
private SearchView searchView;
|
||||||
private UserService userService;
|
private UserService userService;
|
||||||
private TutorTabApi tutorTabService;
|
private TutorTabApi tutorTabService;
|
||||||
|
private CoordinateService coordinateService;
|
||||||
private CompositeDisposable disposable = new CompositeDisposable();
|
private CompositeDisposable disposable = new CompositeDisposable();
|
||||||
private TutorsListAdapter mAdapter;
|
private TutorsListAdapter mAdapter;
|
||||||
private List<User> tutorsList = new ArrayList<>();
|
private List<User> tutorsList = new ArrayList<>();
|
||||||
private List<User> tutorsFiltered = new ArrayList<>();
|
private HashMap<String, String> tutorsTimeStamps = new HashMap<>();
|
||||||
|
|
||||||
private Collator plCollator = Collator.getInstance(Locale.forLanguageTag("pl-PL"));
|
private Collator plCollator = Collator.getInstance(Locale.forLanguageTag("pl-PL"));
|
||||||
|
private Boolean fetchOnlyOnlineUsers = PrefUtils.getShowOnlyOnlineUsers(getApplicationContext());
|
||||||
|
|
||||||
public UsersListFragment() {
|
public UsersListFragment() {
|
||||||
}
|
}
|
||||||
@ -75,10 +104,10 @@ public class UsersListFragment extends Fragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
mAdapter = new TutorsListAdapter(getActivity().getApplicationContext(), tutorsFiltered);
|
mAdapter = new TutorsListAdapter(getActivity().getApplicationContext(), tutorsList, tutorsTimeStamps);
|
||||||
View view = inflater.inflate(R.layout.users_list, container, false);
|
View view = inflater.inflate(R.layout.users_list, container, false);
|
||||||
view.setBackgroundColor(getResources().getColor(android.R.color.white));
|
view.setBackgroundColor(getResources().getColor(android.R.color.white));
|
||||||
|
setHasOptionsMenu(true);
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,23 +116,27 @@ public class UsersListFragment extends Fragment {
|
|||||||
|
|
||||||
userService = ApiClient.getClient(getApplicationContext())
|
userService = ApiClient.getClient(getApplicationContext())
|
||||||
.create(UserService.class);
|
.create(UserService.class);
|
||||||
|
|
||||||
tutorTabService = ApiClient.getClient(getActivity().getApplicationContext())
|
tutorTabService = ApiClient.getClient(getActivity().getApplicationContext())
|
||||||
.create(TutorTabApi.class);
|
.create(TutorTabApi.class);
|
||||||
|
coordinateService = ApiClient.getClient(getApplicationContext())
|
||||||
|
.create(CoordinateService.class);
|
||||||
|
|
||||||
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
|
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
|
||||||
recyclerView.setLayoutManager(mLayoutManager);
|
recyclerView.setLayoutManager(mLayoutManager);
|
||||||
recyclerView.setItemAnimator(new DefaultItemAnimator());
|
recyclerView.setItemAnimator(new DefaultItemAnimator());
|
||||||
|
recyclerView.setVerticalScrollBarEnabled(true);
|
||||||
recyclerView.addItemDecoration(new MyDividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL, 16));
|
recyclerView.addItemDecoration(new MyDividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL, 16));
|
||||||
recyclerView.setAdapter(mAdapter);
|
recyclerView.setAdapter(mAdapter);
|
||||||
|
noNotesView.setVisibility(View.GONE);
|
||||||
|
|
||||||
fetchAllTutors();
|
fetchAllTutors();
|
||||||
|
fetchTopCords();
|
||||||
|
|
||||||
recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity().getApplicationContext(),
|
recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity().getApplicationContext(),
|
||||||
recyclerView, new RecyclerTouchListener.ClickListener() {
|
recyclerView, new RecyclerTouchListener.ClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view, final int position) {
|
public void onClick(View view, final int position) {
|
||||||
showNoteDialog(tutorsFiltered.get(position));
|
showNoteDialog(tutorsList.get(position));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -113,12 +146,52 @@ public class UsersListFragment extends Fragment {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void searchUser(String textToSearch) {
|
|
||||||
|
|
||||||
tutorsFiltered.clear();
|
@Override
|
||||||
tutorsFiltered.addAll(Stream.of(tutorsList).filter(t ->
|
public void onPrepareOptionsMenu(Menu menu) {
|
||||||
t.toSearchAbleString().toLowerCase().contains(textToSearch.toLowerCase())).toList());
|
super.onPrepareOptionsMenu(menu);
|
||||||
mAdapter.notifyDataSetChanged();
|
try {
|
||||||
|
menu.findItem(R.id.showOnlineUsersOnly).setChecked(fetchOnlyOnlineUsers);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.e(TAG, "onPrepareOptionsMenu error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
//item.setChecked(fetchOnlyOnlineUsers);
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case R.id.showOnlineUsersOnly:
|
||||||
|
|
||||||
|
if (item.isChecked()) {
|
||||||
|
fetchOnlyOnlineUsers = false;
|
||||||
|
item.setChecked(false);
|
||||||
|
} else {
|
||||||
|
item.setChecked(true);
|
||||||
|
fetchOnlyOnlineUsers = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
PrefUtils.putShowOnlyOnlineUsers(getApplicationContext(), fetchOnlyOnlineUsers);
|
||||||
|
fetchAllTutors();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||||
|
inflater.inflate(R.menu.users_list_menu, menu);
|
||||||
|
menu.getItem(0).setChecked(fetchOnlyOnlineUsers);
|
||||||
|
|
||||||
|
MenuItem myActionMenuItem = menu.findItem(R.id.action_search);
|
||||||
|
searchView = (SearchView) myActionMenuItem.getActionView();
|
||||||
|
|
||||||
|
super.onCreateOptionsMenu(menu, inflater);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void searchUser(String textToSearch) {
|
||||||
|
searchTutorInBackend(textToSearch);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showNoteDialog(final User user) {
|
private void showNoteDialog(final User user) {
|
||||||
@ -132,6 +205,7 @@ public class UsersListFragment extends Fragment {
|
|||||||
// User cancelled the dialog
|
// User cancelled the dialog
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
TextView userName = view.findViewById(R.id.userName);
|
TextView userName = view.findViewById(R.id.userName);
|
||||||
ListView userDutyHours = view.findViewById(R.id.userDutyHours);
|
ListView userDutyHours = view.findViewById(R.id.userDutyHours);
|
||||||
TextView userDutyHoursTitle = view.findViewById(R.id.userDutyHoursTitle);
|
TextView userDutyHoursTitle = view.findViewById(R.id.userDutyHoursTitle);
|
||||||
@ -139,9 +213,30 @@ public class UsersListFragment extends Fragment {
|
|||||||
TextView userRoom = view.findViewById(R.id.userRoom);
|
TextView userRoom = view.findViewById(R.id.userRoom);
|
||||||
TextView userEmail = view.findViewById(R.id.userEmail);
|
TextView userEmail = view.findViewById(R.id.userEmail);
|
||||||
TextView department = view.findViewById(R.id.userDepartment);
|
TextView department = view.findViewById(R.id.userDepartment);
|
||||||
|
TextView userStatusLabel = view.findViewById(R.id.user_status_label);
|
||||||
|
LinearLayout userStatusLabelLL = view.findViewById(R.id.user_status_label_linearLayout);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
userName.setText(String.format("%s %s", user.getFirstName(), user.getLastName()));
|
userName.setText(String.format("%s %s", user.getFirstName(), user.getLastName()));
|
||||||
|
Drawable image;
|
||||||
|
if (user.isIsOnline()) {
|
||||||
|
image = this.getResources().getDrawable(R.drawable.user_list_online);
|
||||||
|
} else {
|
||||||
|
image = this.getResources().getDrawable(R.drawable.user_list_offline);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!user.isIsActive()) {
|
||||||
|
image = this.getResources().getDrawable(R.drawable.user_list_off);
|
||||||
|
}
|
||||||
|
|
||||||
|
Spannable span = new SpannableString(" " + userName.getText()); // or set your text manually
|
||||||
|
image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight());
|
||||||
|
ImageSpan imageSpan = new ImageSpan(image);
|
||||||
|
span.setSpan(imageSpan, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||||
|
userName.setText(span);
|
||||||
|
|
||||||
|
UsersListFragment usersListFragment = this;
|
||||||
disposable.add(
|
disposable.add(
|
||||||
tutorTabService.apiUsersTutorTabByTutorIdGet(user.getId())
|
tutorTabService.apiUsersTutorTabByTutorIdGet(user.getId())
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
@ -149,7 +244,21 @@ public class UsersListFragment extends Fragment {
|
|||||||
.subscribeWith(new DisposableSingleObserver<TutorTabViewModel>() {
|
.subscribeWith(new DisposableSingleObserver<TutorTabViewModel>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(TutorTabViewModel tutorTabViewModel) {
|
public void onSuccess(TutorTabViewModel tutorTabViewModel) {
|
||||||
final AlertDialog alertDialog = alertDialogBuilderUserInput.create();
|
final AlertDialog alertDialog;
|
||||||
|
if (((MapActivity) getActivity()).coordsMap.containsKey(user.getId())) {
|
||||||
|
|
||||||
|
alertDialogBuilderUserInput.setPositiveButton(R.string.show_on_map, (dialog, id) -> {
|
||||||
|
// User cancelled the dialog
|
||||||
|
((MapActivity) getActivity()).activeFragment = ActiveFragment.NONE;
|
||||||
|
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
|
||||||
|
fragmentTransaction.hide(usersListFragment);
|
||||||
|
fragmentTransaction.commit();
|
||||||
|
((MapActivity) getActivity()).searchUser(user.getFirstName());
|
||||||
|
((MapActivity) getActivity()).updateNavigationBarState();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
alertDialog = alertDialogBuilderUserInput.create();
|
||||||
|
|
||||||
String userNoteText = tutorTabViewModel.getNote();
|
String userNoteText = tutorTabViewModel.getNote();
|
||||||
List<String> dutyHoursList = Stream.of(tutorTabViewModel.getDutyHours())
|
List<String> dutyHoursList = Stream.of(tutorTabViewModel.getDutyHours())
|
||||||
.map(DutyHourViewModel::getSummary).toList();
|
.map(DutyHourViewModel::getSummary).toList();
|
||||||
@ -168,6 +277,16 @@ public class UsersListFragment extends Fragment {
|
|||||||
department.setText(String.format("%s: %s", getString(R.string.userDepartment), user.getDepartment()));
|
department.setText(String.format("%s: %s", getString(R.string.userDepartment), user.getDepartment()));
|
||||||
userDutyHoursTitle.setText(String.format("%s:", getString(R.string.userDutyHoursHeader)));
|
userDutyHoursTitle.setText(String.format("%s:", getString(R.string.userDutyHoursHeader)));
|
||||||
|
|
||||||
|
Coordinate coordinate = ((MapActivity) getActivity()).coordsMap.get(user.getId());
|
||||||
|
if (coordinate != null){
|
||||||
|
String label = coordinate.getLabel();
|
||||||
|
if (!label.isEmpty()) {
|
||||||
|
userStatusLabelLL.setVisibility(View.VISIBLE);
|
||||||
|
userStatusLabel.setText(String.format("%s: %s", getString(R.string.user_status_label),label));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getActivity(),
|
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getActivity(),
|
||||||
R.layout.duty_hours_item, dutyHoursList);
|
R.layout.duty_hours_item, dutyHoursList);
|
||||||
|
|
||||||
@ -185,17 +304,34 @@ public class UsersListFragment extends Fragment {
|
|||||||
|
|
||||||
private void fetchAllTutors() {
|
private void fetchAllTutors() {
|
||||||
disposable.add(
|
disposable.add(
|
||||||
userService.getAllTutors()
|
(fetchOnlyOnlineUsers ?
|
||||||
|
userService.getAllActiveTutors() :
|
||||||
|
userService.getAllTutors())
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.map(tutors -> {
|
.map(this::mapUsersToSortedList)
|
||||||
|
.subscribeWith(new DisposableSingleObserver<List<User>>() {
|
||||||
|
@Override
|
||||||
|
public void onSuccess(List<User> users) {
|
||||||
|
tutorsList.clear();
|
||||||
|
tutorsList.addAll(users);
|
||||||
|
mAdapter.notifyDataSetChanged();
|
||||||
|
toggleEmptyNotes();
|
||||||
|
fetchTopCords();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(Throwable e) {
|
||||||
|
showError(e);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<User> mapUsersToSortedList(List<User> tutors) {
|
||||||
List<User> tutorsList = new ArrayList<>(tutors);
|
List<User> tutorsList = new ArrayList<>(tutors);
|
||||||
|
|
||||||
List<User> onlineTutors = Stream.of(tutorsList).filter(User::isIsOnline).toList();
|
List<User> onlineTutors = Stream.of(tutorsList).filter(User::isIsOnline).toList();
|
||||||
|
|
||||||
List<User> activeNotOnlineTutors = Stream.of(tutorsList)
|
List<User> activeNotOnlineTutors = Stream.of(tutorsList)
|
||||||
.filter(t -> t.isIsActive() && !onlineTutors.contains(t)).toList();
|
.filter(t -> t.isIsActive() && !onlineTutors.contains(t)).toList();
|
||||||
|
|
||||||
List<User> notActiveTutors = Stream.of(tutorsList)
|
List<User> notActiveTutors = Stream.of(tutorsList)
|
||||||
.filterNot(User::isIsActive).toList();
|
.filterNot(User::isIsActive).toList();
|
||||||
|
|
||||||
@ -208,51 +344,117 @@ public class UsersListFragment extends Fragment {
|
|||||||
sortedUserList.addAll(notActiveTutors);
|
sortedUserList.addAll(notActiveTutors);
|
||||||
|
|
||||||
return sortedUserList;
|
return sortedUserList;
|
||||||
})
|
}
|
||||||
|
|
||||||
|
private void searchTutorInBackend(String searchString) {
|
||||||
|
disposable.add(
|
||||||
|
userService.searchUser(searchString)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribeWith(new DisposableSingleObserver<List<User>>() {
|
.subscribeWith(new DisposableSingleObserver<List<User>>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(List<User> users) {
|
public void onSuccess(List<User> users) {
|
||||||
tutorsList.clear();
|
tutorsList.clear();
|
||||||
tutorsFiltered.clear();
|
|
||||||
tutorsList.addAll(users);
|
tutorsList.addAll(users);
|
||||||
tutorsFiltered.addAll(users);
|
|
||||||
mAdapter.notifyDataSetChanged();
|
mAdapter.notifyDataSetChanged();
|
||||||
toggleEmptyNotes();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError(Throwable e) {
|
public void onError(Throwable e) {
|
||||||
showError(e);
|
showSearchError(e);
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void restoreUsersList() {
|
||||||
|
fetchAllTutors();
|
||||||
|
fetchTopCords();
|
||||||
|
}
|
||||||
|
|
||||||
private int sortByUserName(User t1, User t2) {
|
private int sortByUserName(User t1, User t2) {
|
||||||
return plCollator.compare(t1.getLastName(), t2.getLastName());
|
return plCollator.compare(t1.getLastName(), t2.getLastName());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showError(Throwable e) {
|
private void showError(Throwable e) {
|
||||||
String message;
|
String message;
|
||||||
|
Log.e(TAG, String.valueOf(e));
|
||||||
|
|
||||||
if (e instanceof HttpException) {
|
if (e instanceof HttpException) {
|
||||||
ResponseBody responseBody = ((HttpException) e).response().errorBody();
|
ResponseBody responseBody = ((HttpException) e).response().errorBody();
|
||||||
message = RestApiHelper.getErrorMessage(responseBody);
|
message = RestApiHelper.getErrorMessage(responseBody);
|
||||||
} else {
|
} else {
|
||||||
message = "Network Error !";
|
message = getString(R.string.network_err);
|
||||||
}
|
}
|
||||||
|
|
||||||
Snackbar.make(coordinatorLayout, message, Snackbar.LENGTH_LONG)
|
createSnackbar(message);
|
||||||
.show();
|
}
|
||||||
|
|
||||||
|
private void showSearchError(Throwable e) {
|
||||||
|
String message;
|
||||||
|
Log.e(TAG, String.valueOf(e));
|
||||||
|
|
||||||
|
if (e instanceof HttpException) {
|
||||||
|
ResponseBody responseBody = ((HttpException) e).response().errorBody();
|
||||||
|
message = RestApiHelper.getErrorMessage(responseBody);
|
||||||
|
} else {
|
||||||
|
message = getString(R.string.search_null);
|
||||||
|
}
|
||||||
|
|
||||||
|
createSnackbar(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createSnackbar(String msg) {
|
||||||
|
Snackbar snackbar = Snackbar.make(coordinatorLayout, msg, Snackbar.LENGTH_LONG);
|
||||||
|
View view = snackbar.getView();
|
||||||
|
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) view.getLayoutParams();
|
||||||
|
params.gravity = Gravity.TOP;
|
||||||
|
view.setLayoutParams(params);
|
||||||
|
snackbar.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void toggleEmptyNotes() {
|
private void toggleEmptyNotes() {
|
||||||
if (tutorsList.size() > 0) {
|
loader.setVisibility(View.GONE);
|
||||||
noNotesView.setVisibility(View.GONE);
|
noNotesView.setVisibility(View.GONE);
|
||||||
} else {
|
|
||||||
|
if (tutorsList.size() == 0) {
|
||||||
noNotesView.setVisibility(View.VISIBLE);
|
noNotesView.setVisibility(View.VISIBLE);
|
||||||
|
if (fetchOnlyOnlineUsers)
|
||||||
|
noNotesView.setText(R.string.no_online_users);
|
||||||
|
else {
|
||||||
|
noNotesView.setText(R.string.no_offline_users);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void onSaveInstanceState(Bundle outState) {
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fetchTopCords(){
|
||||||
|
disposable.add(
|
||||||
|
coordinateService.getTopCoordinates()
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(this::addTimestamps,this::showError));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addTimestamps(List<Coordinate> coordinates) {
|
||||||
|
for (Coordinate crd :
|
||||||
|
coordinates) {
|
||||||
|
Long ts = crd.getTimeStamp();
|
||||||
|
tutorsTimeStamps.put(crd.getUserId(), getDate(ts));
|
||||||
|
}
|
||||||
|
|
||||||
|
mAdapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getDate(long time) {
|
||||||
|
Calendar cal = Calendar.getInstance(Locale.ENGLISH);
|
||||||
|
cal.setTimeInMillis(time);
|
||||||
|
return DateFormat.format("HH:mm dd/MM", cal).toString();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
@ -276,7 +478,4 @@ public class UsersListFragment extends Fragment {
|
|||||||
super.onStop();
|
super.onStop();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onSaveInstanceState(Bundle outState) {
|
|
||||||
super.onSaveInstanceState(outState);
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -0,0 +1,363 @@
|
|||||||
|
package com.uam.wmi.findmytutor.activity;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.drawable.ColorDrawable;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.RequiresApi;
|
||||||
|
import android.support.design.widget.FloatingActionButton;
|
||||||
|
import android.support.design.widget.Snackbar;
|
||||||
|
import android.support.v7.app.AlertDialog;
|
||||||
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
import android.support.v7.widget.DefaultItemAnimator;
|
||||||
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.support.v7.widget.Toolbar;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.Gravity;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.WindowManager;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.PopupWindow;
|
||||||
|
import android.widget.Switch;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import com.github.ybq.android.spinkit.SpinKitView;
|
||||||
|
import com.jakewharton.retrofit2.adapter.rxjava2.HttpException;
|
||||||
|
import com.uam.wmi.findmytutor.R;
|
||||||
|
import com.uam.wmi.findmytutor.adapters.WhiteListAdapter;
|
||||||
|
import com.uam.wmi.findmytutor.model.IsUsingListBool;
|
||||||
|
import com.uam.wmi.findmytutor.model.StudentIdModel;
|
||||||
|
import com.uam.wmi.findmytutor.model.User;
|
||||||
|
import com.uam.wmi.findmytutor.network.ApiClient;
|
||||||
|
import com.uam.wmi.findmytutor.service.UserService;
|
||||||
|
import com.uam.wmi.findmytutor.utils.LocaleHelper;
|
||||||
|
import com.uam.wmi.findmytutor.utils.MyDividerItemDecoration;
|
||||||
|
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
||||||
|
import com.uam.wmi.findmytutor.utils.RecyclerTouchListener;
|
||||||
|
import com.uam.wmi.findmytutor.utils.RestApiHelper;
|
||||||
|
import com.uam.wmi.findmytutor.utils.WrapContentLinearLayoutManager;
|
||||||
|
|
||||||
|
import java.text.Collator;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import butterknife.BindView;
|
||||||
|
import butterknife.ButterKnife;
|
||||||
|
import io.reactivex.Observable;
|
||||||
|
import io.reactivex.ObservableSource;
|
||||||
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
|
import io.reactivex.disposables.CompositeDisposable;
|
||||||
|
import io.reactivex.disposables.Disposable;
|
||||||
|
import io.reactivex.functions.Function;
|
||||||
|
import io.reactivex.observers.DisposableObserver;
|
||||||
|
import io.reactivex.schedulers.Schedulers;
|
||||||
|
import okhttp3.ResponseBody;
|
||||||
|
|
||||||
|
public class WhiteList extends AppCompatActivity {
|
||||||
|
|
||||||
|
@BindView(R.id.recycler_view_whitelist)
|
||||||
|
RecyclerView recyclerView;
|
||||||
|
@BindView(R.id.white_list_empty_text_view)
|
||||||
|
TextView noNotesView;
|
||||||
|
@BindView(R.id.switch_whitelist_toggle)
|
||||||
|
Switch aSwitch;
|
||||||
|
@BindView(R.id.add_to_white_list_fab)
|
||||||
|
FloatingActionButton addToWhiteListFab;
|
||||||
|
|
||||||
|
@BindView(R.id.loader)
|
||||||
|
SpinKitView loader;
|
||||||
|
|
||||||
|
|
||||||
|
private CompositeDisposable disposable = new CompositeDisposable();
|
||||||
|
private UserService userService;
|
||||||
|
private boolean didFetched = false;
|
||||||
|
private String tutorId;
|
||||||
|
private WhiteListAdapter mAdapter;
|
||||||
|
private Integer prevSize;
|
||||||
|
private List<User> whitelistedUsers = new ArrayList<>();
|
||||||
|
private Collator plCollator = Collator.getInstance(Locale.forLanguageTag("pl-PL"));
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void attachBaseContext(Context base) {
|
||||||
|
super.attachBaseContext(LocaleHelper.onAttach(base));
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequiresApi(api = Build.VERSION_CODES.M)
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
|
||||||
|
setContentView(R.layout.activity_white_list);
|
||||||
|
ButterKnife.bind(this);
|
||||||
|
|
||||||
|
tutorId = PrefUtils.getUserId(getApplicationContext());
|
||||||
|
userService = ApiClient.getClient(getApplicationContext())
|
||||||
|
.create(UserService.class);
|
||||||
|
|
||||||
|
if (PrefUtils.isWhiteListing(this)) {
|
||||||
|
aSwitch.setText(getString(R.string.action_white_list) +" "+getString(R.string.on) );
|
||||||
|
aSwitch.setChecked(true);
|
||||||
|
handleChangeRequest(true);
|
||||||
|
} else {
|
||||||
|
aSwitch.setText(getString(R.string.action_white_list) +" "+getString(R.string.off) );
|
||||||
|
aSwitch.setChecked(false);
|
||||||
|
handleChangeRequest(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||||
|
toolbar.setTitle(getString(R.string.activity_title_whitelist));
|
||||||
|
setSupportActionBar(toolbar);
|
||||||
|
|
||||||
|
mAdapter = new WhiteListAdapter(this, whitelistedUsers);
|
||||||
|
recyclerView.setLayoutManager(new WrapContentLinearLayoutManager(getApplicationContext()));
|
||||||
|
recyclerView.setItemAnimator(new DefaultItemAnimator());
|
||||||
|
recyclerView.addItemDecoration(new MyDividerItemDecoration(this, LinearLayoutManager.VERTICAL, 16));
|
||||||
|
recyclerView.setAdapter(mAdapter);
|
||||||
|
noNotesView.setVisibility(View.GONE);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On long press on RecyclerView item, open alert dialog
|
||||||
|
* with options to choose
|
||||||
|
* Edit and Delete
|
||||||
|
* */
|
||||||
|
recyclerView.addOnItemTouchListener(new RecyclerTouchListener(this,
|
||||||
|
recyclerView, new RecyclerTouchListener.ClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view, final int position) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLongClick(View view, int position) {
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
addToWhiteListFab.setOnClickListener(this::showFabDialog);
|
||||||
|
fetchWhiteListedUsers();
|
||||||
|
handleSwitch();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Observable<List<String>> getListOfWhitelistedUsers(String userId) {
|
||||||
|
return userService.getTutorWhitelistedByID(userId)
|
||||||
|
.toObservable()
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread());
|
||||||
|
}
|
||||||
|
|
||||||
|
private Observable<User> getUserObservable(String userId) {
|
||||||
|
return userService
|
||||||
|
.getUserById(userId)
|
||||||
|
.toObservable()
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fetchWhiteListedUsers() {
|
||||||
|
disposable.add(getListOfWhitelistedUsers(tutorId)
|
||||||
|
.doOnSubscribe(this::handleDoOnSubscribe)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.flatMap(Observable::fromIterable)
|
||||||
|
.flatMap(this::getUserObservable)
|
||||||
|
.subscribe(user -> whitelistedUsers.add(user), this::handleError,this::handleComplete));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleDoOnSubscribe(Disposable disposable) {
|
||||||
|
prevSize = whitelistedUsers.size();
|
||||||
|
whitelistedUsers.clear();
|
||||||
|
didFetched = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleComplete() {
|
||||||
|
Collections.sort(whitelistedUsers, this::sortByUserName);
|
||||||
|
didFetched = true;
|
||||||
|
refreshUI();
|
||||||
|
}
|
||||||
|
private void handleError(Throwable e){
|
||||||
|
showError(e);
|
||||||
|
didFetched = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void refreshUI() {
|
||||||
|
toggleEmptyNotes();
|
||||||
|
mAdapter.notifyItemRangeInserted(prevSize, whitelistedUsers.size() - prevSize);
|
||||||
|
mAdapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private int sortByUserName(User t1, User t2) {
|
||||||
|
return plCollator.compare(t1.getLastName(), t2.getLastName());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showFabDialog(View v) {
|
||||||
|
LayoutInflater layoutInflaterAndroid = LayoutInflater.from(getApplicationContext());
|
||||||
|
@SuppressLint("InflateParams") View view = layoutInflaterAndroid.inflate(R.layout.white_list_fab_modal, null);
|
||||||
|
AlertDialog.Builder alertDialogBuilderUserInput = new AlertDialog.Builder(this);
|
||||||
|
|
||||||
|
alertDialogBuilderUserInput.setView(view).setPositiveButton(getApplicationContext().getString(R.string.modal_location_send), null);
|
||||||
|
|
||||||
|
alertDialogBuilderUserInput
|
||||||
|
.setPositiveButton(R.string.add, null)
|
||||||
|
.setNegativeButton(R.string.cancel, null);
|
||||||
|
|
||||||
|
final AlertDialog alertDialog = alertDialogBuilderUserInput.create();
|
||||||
|
alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
|
||||||
|
|
||||||
|
EditText modalUserInput = view.findViewById(R.id.white_list_modal_input);
|
||||||
|
|
||||||
|
alertDialog.setOnShowListener(dialogInterface -> {
|
||||||
|
Button sendButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
|
||||||
|
|
||||||
|
Button dismissButton = alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE);
|
||||||
|
|
||||||
|
dismissButton.setOnClickListener(view1 -> alertDialog.dismiss());
|
||||||
|
|
||||||
|
sendButton.setOnClickListener(view1 -> {
|
||||||
|
String body = modalUserInput.getText().toString();
|
||||||
|
|
||||||
|
if (TextUtils.isEmpty(body)) {
|
||||||
|
Toast.makeText(getApplicationContext(), R.string.can_not_be_empty, Toast.LENGTH_SHORT).show();
|
||||||
|
modalUserInput.requestFocus();
|
||||||
|
} else {
|
||||||
|
sendUserToWhitelist(body);
|
||||||
|
alertDialog.dismiss();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
alertDialog.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendUserToWhitelist(String body) {
|
||||||
|
StudentIdModel studentIdModel = new StudentIdModel(body);
|
||||||
|
|
||||||
|
disposable.add(
|
||||||
|
userService.addStudentToWhitelist(tutorId, studentIdModel)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(this::handleAddUser, this::showError)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleAddUser(User user) {
|
||||||
|
Toast.makeText(this, R.string.add_user_to_list, Snackbar.LENGTH_LONG).show();
|
||||||
|
fetchWhiteListedUsers();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showError(Throwable e) {
|
||||||
|
String message;
|
||||||
|
|
||||||
|
if (e instanceof HttpException) {
|
||||||
|
ResponseBody responseBody = ((HttpException) e).response().errorBody();
|
||||||
|
message = RestApiHelper.getErrorMessage(responseBody);
|
||||||
|
if (((HttpException) e).response().code() == 404) {
|
||||||
|
message = getString(R.string.no_such_a_user);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
message = "Network Error !";
|
||||||
|
}
|
||||||
|
Log.e("ERR", message);
|
||||||
|
Toast.makeText(this, message, Snackbar.LENGTH_LONG).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void toggleEmptyNotes() {
|
||||||
|
|
||||||
|
if (didFetched && whitelistedUsers.size() == 0) {
|
||||||
|
noNotesView.setVisibility(View.VISIBLE);
|
||||||
|
noNotesView.setText(R.string.list_is_empty);
|
||||||
|
loader.setVisibility(View.GONE);
|
||||||
|
} else if (whitelistedUsers.size() > 0) {
|
||||||
|
noNotesView.setVisibility(View.GONE);
|
||||||
|
loader.setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
|
loader.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
|
||||||
|
if (item.getItemId() == R.id.action_whitelist_info_popup) {
|
||||||
|
int layoutID = R.layout.info_popup_whitelist;
|
||||||
|
|
||||||
|
View popupView = getLayoutInflater().inflate(layoutID, null);
|
||||||
|
|
||||||
|
PopupWindow popupWindow = new PopupWindow(popupView,
|
||||||
|
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||||
|
// If the PopupWindow should be focusable
|
||||||
|
popupWindow.setFocusable(true);
|
||||||
|
// If you need the PopupWindow to dismiss when when touched outside
|
||||||
|
popupWindow.setBackgroundDrawable(new ColorDrawable());
|
||||||
|
// Get the View's(the one that was clicked in the Fragment) location
|
||||||
|
View anchorView = getWindow().getDecorView().findViewById(android.R.id.content);
|
||||||
|
popupWindow.showAtLocation(anchorView, Gravity.TOP | Gravity.END, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleSwitch() {
|
||||||
|
aSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
||||||
|
if (isChecked) {
|
||||||
|
aSwitch.setText(getString(R.string.action_white_list) + " " + getString(R.string.on));
|
||||||
|
handleChangeRequest(true);
|
||||||
|
PrefUtils.useWhitelist(this, true);
|
||||||
|
} else {
|
||||||
|
aSwitch.setText(getString(R.string.action_white_list) + " " + getString(R.string.off));
|
||||||
|
handleChangeRequest(false);
|
||||||
|
PrefUtils.useWhitelist(this, false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleChangeRequest(boolean value) {
|
||||||
|
IsUsingListBool isUsingListBool = new IsUsingListBool();
|
||||||
|
isUsingListBool.setIsUsing(value);
|
||||||
|
disposable.add(
|
||||||
|
userService.setTutorWhitelist(tutorId, isUsingListBool)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(() -> {
|
||||||
|
}, this::showError)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStop() {
|
||||||
|
super.onStop();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
disposable.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
getMenuInflater().inflate(R.menu.menu_white_list, menu);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,119 @@
|
|||||||
|
package com.uam.wmi.findmytutor.adapters;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.design.widget.Snackbar;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ImageButton;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import com.jakewharton.retrofit2.adapter.rxjava2.HttpException;
|
||||||
|
import com.uam.wmi.findmytutor.R;
|
||||||
|
import com.uam.wmi.findmytutor.model.StudentIdModel;
|
||||||
|
import com.uam.wmi.findmytutor.model.User;
|
||||||
|
import com.uam.wmi.findmytutor.network.ApiClient;
|
||||||
|
import com.uam.wmi.findmytutor.service.UserService;
|
||||||
|
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
||||||
|
import com.uam.wmi.findmytutor.utils.RestApiHelper;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import butterknife.BindView;
|
||||||
|
import butterknife.ButterKnife;
|
||||||
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
|
import io.reactivex.disposables.CompositeDisposable;
|
||||||
|
import io.reactivex.schedulers.Schedulers;
|
||||||
|
import okhttp3.ResponseBody;
|
||||||
|
|
||||||
|
import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext;
|
||||||
|
|
||||||
|
|
||||||
|
public class BlackListAdapter extends RecyclerView.Adapter<BlackListAdapter.MyViewHolder> {
|
||||||
|
|
||||||
|
private Context context;
|
||||||
|
private List<User> tutorsList;
|
||||||
|
private CompositeDisposable disposable = new CompositeDisposable();
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
|
public BlackListAdapter(Context context, List<User> tutors) {
|
||||||
|
this.context = context;
|
||||||
|
this.tutorsList = tutors;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
|
userService = ApiClient.getClient(getApplicationContext())
|
||||||
|
.create(UserService.class);
|
||||||
|
View itemView = LayoutInflater.from(parent.getContext())
|
||||||
|
.inflate(R.layout.black_list_row, parent, false);
|
||||||
|
|
||||||
|
return new MyViewHolder(itemView);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
|
||||||
|
Drawable image = null;
|
||||||
|
User tutor = tutorsList.get(position);
|
||||||
|
|
||||||
|
holder.firstName.setText(tutor.getFirstName() + " " + tutor.getLastName());
|
||||||
|
holder.lastName.setText("Index: " + tutor.getLdapLogin() + " Email: " + tutor.getEmail());
|
||||||
|
//"s416196"
|
||||||
|
holder.imageButton.setOnClickListener(l ->{
|
||||||
|
StudentIdModel studentIdModel = new StudentIdModel(tutor.getLdapLogin());
|
||||||
|
String tutorId = PrefUtils.getUserId(getApplicationContext());
|
||||||
|
disposable.add(
|
||||||
|
userService.removeStudentFromBlacklist(tutorId, studentIdModel)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(()->{
|
||||||
|
Toast.makeText(getApplicationContext(), R.string.user_removed, Toast.LENGTH_SHORT).show();
|
||||||
|
tutorsList.remove(position);
|
||||||
|
notifyDataSetChanged();
|
||||||
|
},this::showError)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return tutorsList.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
|
@BindView(R.id.firstName)
|
||||||
|
TextView firstName;
|
||||||
|
|
||||||
|
@BindView(R.id.lastName)
|
||||||
|
TextView lastName;
|
||||||
|
|
||||||
|
@BindView(R.id.removeUserImageButton)
|
||||||
|
ImageButton imageButton;
|
||||||
|
|
||||||
|
MyViewHolder(View view) {
|
||||||
|
super(view);
|
||||||
|
ButterKnife.bind(this, view);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showError(Throwable e) {
|
||||||
|
String message;
|
||||||
|
|
||||||
|
if (e instanceof HttpException) {
|
||||||
|
ResponseBody responseBody = ((HttpException) e).response().errorBody();
|
||||||
|
message = RestApiHelper.getErrorMessage(responseBody);
|
||||||
|
} else {
|
||||||
|
message = "Network Error !";
|
||||||
|
}
|
||||||
|
|
||||||
|
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,9 @@
|
|||||||
package com.uam.wmi.findmytutor.adapters;
|
package com.uam.wmi.findmytutor.adapters;
|
||||||
|
|
||||||
|
import android.app.DialogFragment;
|
||||||
|
import android.app.FragmentManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
@ -11,12 +14,11 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.annimon.stream.Collectors;
|
import com.annimon.stream.Collectors;
|
||||||
import com.annimon.stream.Stream;
|
import com.annimon.stream.Stream;
|
||||||
import com.uam.wmi.findmytutor.R;
|
import com.uam.wmi.findmytutor.R;
|
||||||
|
import com.uam.wmi.findmytutor.activity.TimePickerFragment;
|
||||||
import com.uam.wmi.findmytutor.model.DutyHourViewModel;
|
import com.uam.wmi.findmytutor.model.DutyHourViewModel;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
@ -26,10 +28,12 @@ import butterknife.ButterKnife;
|
|||||||
public class DutyHoursAdapter extends RecyclerView.Adapter<DutyHoursAdapter.MyViewHolder> {
|
public class DutyHoursAdapter extends RecyclerView.Adapter<DutyHoursAdapter.MyViewHolder> {
|
||||||
private Context context;
|
private Context context;
|
||||||
private List<DutyHourViewModel> hours;
|
private List<DutyHourViewModel> hours;
|
||||||
|
private FragmentManager fragmentManager;
|
||||||
|
|
||||||
public DutyHoursAdapter(Context context, List<DutyHourViewModel> hours) {
|
public DutyHoursAdapter(Context context, List<DutyHourViewModel> hours, FragmentManager fragmentManager) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.hours = new ArrayList<DutyHourViewModel>(hours);
|
this.hours = new ArrayList<DutyHourViewModel>(hours);
|
||||||
|
this.fragmentManager = fragmentManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -77,7 +81,7 @@ public class DutyHoursAdapter extends RecyclerView.Adapter<DutyHoursAdapter.MyV
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
holder.dutyStart.setText(duty.getStart());
|
holder.dutyStart.setText(duty.getStart());
|
||||||
holder.dutyStart.addTextChangedListener(new TextWatcher() {
|
/* holder.dutyStart.addTextChangedListener(new TextWatcher() {
|
||||||
@Override
|
@Override
|
||||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||||
|
|
||||||
@ -92,9 +96,23 @@ public class DutyHoursAdapter extends RecyclerView.Adapter<DutyHoursAdapter.MyV
|
|||||||
public void afterTextChanged(Editable s) {
|
public void afterTextChanged(Editable s) {
|
||||||
duty.setStart(holder.dutyStart.getText().toString());
|
duty.setStart(holder.dutyStart.getText().toString());
|
||||||
}
|
}
|
||||||
|
});*/
|
||||||
|
holder.dutyStart.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
DialogFragment picker = new TimePickerFragment(holder.dutyStart,duty,"start");
|
||||||
|
picker.show(fragmentManager,"time picker");
|
||||||
|
}
|
||||||
});
|
});
|
||||||
holder.dutyStop.setText(duty.getEnd());
|
holder.dutyStop.setText(duty.getEnd());
|
||||||
holder.dutyStop.addTextChangedListener(new TextWatcher() {
|
holder.dutyStop.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
DialogFragment picker = new TimePickerFragment(holder.dutyStop,duty,"stop");
|
||||||
|
picker.show(fragmentManager,"time picker");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* holder.dutyStop.addTextChangedListener(new TextWatcher() {
|
||||||
@Override
|
@Override
|
||||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||||
|
|
||||||
@ -109,21 +127,21 @@ public class DutyHoursAdapter extends RecyclerView.Adapter<DutyHoursAdapter.MyV
|
|||||||
public void afterTextChanged(Editable s) {
|
public void afterTextChanged(Editable s) {
|
||||||
duty.setEnd(holder.dutyStop.getText().toString());
|
duty.setEnd(holder.dutyStop.getText().toString());
|
||||||
}
|
}
|
||||||
});
|
});*/
|
||||||
holder.deleteRow.setOnClickListener(new View.OnClickListener() {
|
holder.deleteRow.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
try{
|
try{
|
||||||
Log.d("DutyIndex bf rm size",Integer.toString(getItemCount()));
|
// Log.d("DutyIndex bf rm size",Integer.toString(getItemCount()));
|
||||||
Log.d("DutyIndex bf rm pos",Integer.toString(holder.getLayoutPosition()));
|
// Log.d("DutyIndex bf rm pos",Integer.toString(holder.getLayoutPosition()));
|
||||||
removeDuty(holder.getLayoutPosition());
|
removeDuty(holder.getLayoutPosition());
|
||||||
Log.d("DutyIndex af rm pos",Integer.toString(holder.getLayoutPosition()));
|
// Log.d("DutyIndex af rm pos",Integer.toString(holder.getLayoutPosition()));
|
||||||
|
|
||||||
|
|
||||||
}catch(Error e){
|
}catch(Error e){
|
||||||
Log.e("DutyIndex error",e.getMessage());
|
// Log.e("DutyIndex error",e.getMessage());
|
||||||
Log.e("DutyIndex size",Integer.toString(getItemCount()));
|
// Log.e("DutyIndex size",Integer.toString(getItemCount()));
|
||||||
Log.e("DutyIndex pos",Integer.toString(holder.getAdapterPosition()));
|
// Log.e("DutyIndex pos",Integer.toString(holder.getAdapterPosition()));
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
/*
|
||||||
package com.uam.wmi.findmytutor.adapters;
|
package com.uam.wmi.findmytutor.adapters;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@ -9,9 +10,11 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.github.ybq.android.spinkit.SpinKitView;
|
||||||
import com.uam.wmi.findmytutor.R;
|
import com.uam.wmi.findmytutor.R;
|
||||||
import com.uam.wmi.findmytutor.model.User;
|
import com.uam.wmi.findmytutor.model.User;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
@ -22,10 +25,12 @@ public class TutorsListAdapter extends RecyclerView.Adapter<TutorsListAdapter.My
|
|||||||
|
|
||||||
private Context context;
|
private Context context;
|
||||||
private List<User> tutorsList;
|
private List<User> tutorsList;
|
||||||
|
private HashMap<String, String> tutorsTimeStamps;
|
||||||
|
|
||||||
public TutorsListAdapter(Context context, List<User> tutors) {
|
public TutorsListAdapter(Context context, List<User> tutors, HashMap<String,String> tutorsTimeStamps) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.tutorsList = tutors;
|
this.tutorsList = tutors;
|
||||||
|
this.tutorsTimeStamps = tutorsTimeStamps;
|
||||||
}
|
}
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
@ -41,17 +46,32 @@ public class TutorsListAdapter extends RecyclerView.Adapter<TutorsListAdapter.My
|
|||||||
Drawable image = null;
|
Drawable image = null;
|
||||||
User tutor = tutorsList.get(position);
|
User tutor = tutorsList.get(position);
|
||||||
|
|
||||||
holder.firstName.setText(tutor.getFirstName());
|
holder.firstName.setText(String.format("%s %s", tutor.getFirstName(), tutor.getLastName()));
|
||||||
holder.lastName.setText(tutor.getLastName());
|
String ts = tutorsTimeStamps.get(tutor.getId());
|
||||||
|
|
||||||
if (tutor.isIsOnline()) {
|
if (tutor.isIsOnline()) {
|
||||||
image = context.getResources().getDrawable(R.drawable.user_list_online);
|
image = context.getResources().getDrawable(R.drawable.user_list_online);
|
||||||
|
holder.lastSeen.setText(R.string.available_now);
|
||||||
|
holder.loader.setVisibility(View.GONE);
|
||||||
} else {
|
} else {
|
||||||
image = context.getResources().getDrawable(R.drawable.user_list_offline);
|
image = context.getResources().getDrawable(R.drawable.user_list_offline);
|
||||||
|
|
||||||
|
if (ts != null){
|
||||||
|
holder.lastSeen.setText(R.string.last_sign);
|
||||||
|
holder.lastSeen.append(String.format(": %s", ts));
|
||||||
|
holder.loader.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!tutor.isIsActive()) {
|
if (!tutor.isIsActive()) {
|
||||||
image = context.getResources().getDrawable(R.drawable.user_list_off);
|
image = context.getResources().getDrawable(R.drawable.user_list_off);
|
||||||
|
if(ts != null){
|
||||||
|
holder.lastSeen.setText(R.string.last_sign);
|
||||||
|
holder.lastSeen.append(String.format(": %s", ts));
|
||||||
|
}else{
|
||||||
|
holder.lastSeen.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
holder.loader.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight());
|
image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight());
|
||||||
@ -68,17 +88,132 @@ public class TutorsListAdapter extends RecyclerView.Adapter<TutorsListAdapter.My
|
|||||||
@BindView(R.id.firstName)
|
@BindView(R.id.firstName)
|
||||||
TextView firstName;
|
TextView firstName;
|
||||||
|
|
||||||
@BindView(R.id.lastName)
|
@BindView(R.id.lastSeen)
|
||||||
TextView lastName;
|
TextView lastSeen;
|
||||||
|
|
||||||
@BindView(R.id.isOnline)
|
@BindView(R.id.isOnline)
|
||||||
TextView isOnline;
|
TextView isOnline;
|
||||||
|
|
||||||
|
@BindView(R.id.loader)
|
||||||
|
SpinKitView loader;
|
||||||
|
|
||||||
MyViewHolder(View view) {
|
MyViewHolder(View view) {
|
||||||
super(view);
|
super(view);
|
||||||
ButterKnife.bind(this, view);
|
ButterKnife.bind(this, view);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
package com.uam.wmi.findmytutor.adapters;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import com.github.ybq.android.spinkit.SpinKitView;
|
||||||
|
import com.uam.wmi.findmytutor.R;
|
||||||
|
import com.uam.wmi.findmytutor.model.User;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import butterknife.BindView;
|
||||||
|
import butterknife.ButterKnife;
|
||||||
|
|
||||||
|
|
||||||
|
public class TutorsListAdapter extends RecyclerView.Adapter<TutorsListAdapter.MyViewHolder> {
|
||||||
|
|
||||||
|
private Context context;
|
||||||
|
private List<User> tutorsList;
|
||||||
|
private HashMap<String, String> tutorsTimeStamps;
|
||||||
|
|
||||||
|
public TutorsListAdapter(Context context, List<User> tutors, HashMap<String,String> tutorsTimeStamps) {
|
||||||
|
this.context = context;
|
||||||
|
this.tutorsList = tutors;
|
||||||
|
this.tutorsTimeStamps = tutorsTimeStamps;
|
||||||
|
}
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
|
View itemView = LayoutInflater.from(parent.getContext())
|
||||||
|
.inflate(R.layout.tutor_list_row, parent, false);
|
||||||
|
|
||||||
|
return new MyViewHolder(itemView);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
|
||||||
|
Drawable image = null;
|
||||||
|
User tutor = tutorsList.get(position);
|
||||||
|
|
||||||
|
holder.firstName.setText(String.format("%s %s", tutor.getFirstName(), tutor.getLastName()));
|
||||||
|
String ts = tutorsTimeStamps.get(tutor.getId());
|
||||||
|
|
||||||
|
if (tutor.isIsOnline()) {
|
||||||
|
image = context.getResources().getDrawable(R.drawable.user_list_online);
|
||||||
|
holder.lastSeen.setText(R.string.available_now);
|
||||||
|
holder.lastSeen.setVisibility(View.VISIBLE);
|
||||||
|
holder.loader.setVisibility(View.GONE);
|
||||||
|
} else if(tutor.isIsActive()){
|
||||||
|
image = context.getResources().getDrawable(R.drawable.user_list_offline);
|
||||||
|
|
||||||
|
if (ts != null){
|
||||||
|
holder.lastSeen.setText(R.string.last_sign);
|
||||||
|
holder.lastSeen.append(String.format(": %s", ts));
|
||||||
|
holder.loader.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
image = context.getResources().getDrawable(R.drawable.user_list_off);
|
||||||
|
|
||||||
|
if(ts == null){
|
||||||
|
holder.lastSeen.setText(R.string.never_logged_in);
|
||||||
|
}else{
|
||||||
|
holder.lastSeen.setText(R.string.last_sign);
|
||||||
|
holder.lastSeen.append(String.format(": %s", ts));
|
||||||
|
}
|
||||||
|
holder.loader.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight());
|
||||||
|
holder.isOnline.setCompoundDrawables(image, null, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return tutorsList.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
|
@BindView(R.id.firstName)
|
||||||
|
TextView firstName;
|
||||||
|
|
||||||
|
@BindView(R.id.lastSeen)
|
||||||
|
TextView lastSeen;
|
||||||
|
|
||||||
|
@BindView(R.id.isOnline)
|
||||||
|
TextView isOnline;
|
||||||
|
|
||||||
|
@BindView(R.id.loader)
|
||||||
|
SpinKitView loader;
|
||||||
|
|
||||||
|
MyViewHolder(View view) {
|
||||||
|
super(view);
|
||||||
|
ButterKnife.bind(this, view);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -0,0 +1,117 @@
|
|||||||
|
package com.uam.wmi.findmytutor.adapters;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ImageButton;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import com.jakewharton.retrofit2.adapter.rxjava2.HttpException;
|
||||||
|
import com.uam.wmi.findmytutor.R;
|
||||||
|
import com.uam.wmi.findmytutor.model.StudentIdModel;
|
||||||
|
import com.uam.wmi.findmytutor.model.User;
|
||||||
|
import com.uam.wmi.findmytutor.network.ApiClient;
|
||||||
|
import com.uam.wmi.findmytutor.service.UserService;
|
||||||
|
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
||||||
|
import com.uam.wmi.findmytutor.utils.RestApiHelper;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import butterknife.BindView;
|
||||||
|
import butterknife.ButterKnife;
|
||||||
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
|
import io.reactivex.disposables.CompositeDisposable;
|
||||||
|
import io.reactivex.schedulers.Schedulers;
|
||||||
|
import okhttp3.ResponseBody;
|
||||||
|
|
||||||
|
import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext;
|
||||||
|
|
||||||
|
|
||||||
|
public class WhiteListAdapter extends RecyclerView.Adapter<WhiteListAdapter.MyViewHolder> {
|
||||||
|
|
||||||
|
private Context context;
|
||||||
|
private List<User> tutorsList;
|
||||||
|
private CompositeDisposable disposable = new CompositeDisposable();
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
|
public WhiteListAdapter(Context context, List<User> tutors) {
|
||||||
|
this.context = context;
|
||||||
|
this.tutorsList = tutors;
|
||||||
|
}
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
|
userService = ApiClient.getClient(getApplicationContext())
|
||||||
|
.create(UserService.class);
|
||||||
|
View itemView = LayoutInflater.from(parent.getContext())
|
||||||
|
.inflate(R.layout.white_list_row, parent, false);
|
||||||
|
|
||||||
|
return new MyViewHolder(itemView);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
|
||||||
|
Drawable image = null;
|
||||||
|
User tutor = tutorsList.get(position);
|
||||||
|
|
||||||
|
holder.firstName.setText(tutor.getFirstName() + " " + tutor.getLastName());
|
||||||
|
holder.lastName.setText("Index: " + tutor.getLdapLogin() + " Email: " + tutor.getEmail());
|
||||||
|
//""
|
||||||
|
holder.imageButton.setOnClickListener(l ->{
|
||||||
|
StudentIdModel studentIdModel = new StudentIdModel(tutor.getLdapLogin());
|
||||||
|
String tutorId = PrefUtils.getUserId(getApplicationContext());
|
||||||
|
disposable.add(
|
||||||
|
userService.removeStudentFromWhitelist(tutorId, studentIdModel)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(()->{
|
||||||
|
Toast.makeText(getApplicationContext(), R.string.user_removed, Toast.LENGTH_SHORT).show();
|
||||||
|
tutorsList.remove(position);
|
||||||
|
notifyDataSetChanged();
|
||||||
|
},this::showError)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return tutorsList.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
|
@BindView(R.id.firstName)
|
||||||
|
TextView firstName;
|
||||||
|
|
||||||
|
@BindView(R.id.lastName)
|
||||||
|
TextView lastName;
|
||||||
|
|
||||||
|
@BindView(R.id.removeUserImageButton)
|
||||||
|
ImageButton imageButton;
|
||||||
|
|
||||||
|
MyViewHolder(View view) {
|
||||||
|
super(view);
|
||||||
|
ButterKnife.bind(this, view);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showError(Throwable e) {
|
||||||
|
String message;
|
||||||
|
|
||||||
|
if (e instanceof HttpException) {
|
||||||
|
ResponseBody responseBody = ((HttpException) e).response().errorBody();
|
||||||
|
message = RestApiHelper.getErrorMessage(responseBody);
|
||||||
|
} else {
|
||||||
|
message = "Network Error !";
|
||||||
|
}
|
||||||
|
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -18,6 +18,15 @@ public class StudentIdModel extends BaseResponse{
|
|||||||
@SerializedName("ldapLogin")
|
@SerializedName("ldapLogin")
|
||||||
private String ldapLogin = null;
|
private String ldapLogin = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
*/
|
||||||
|
public StudentIdModel(String str){
|
||||||
|
// this.studentId = str;
|
||||||
|
this.ldapLogin = str;
|
||||||
|
}
|
||||||
|
|
||||||
public StudentIdModel studentId(String studentId) {
|
public StudentIdModel studentId(String studentId) {
|
||||||
this.studentId = studentId;
|
this.studentId = studentId;
|
||||||
return this;
|
return this;
|
||||||
|
@ -11,12 +11,13 @@ import android.content.Intent;
|
|||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.location.Location;
|
import android.location.Location;
|
||||||
|
import android.location.LocationListener;
|
||||||
import android.location.LocationManager;
|
import android.location.LocationManager;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
|
import android.os.Looper;
|
||||||
import android.support.annotation.RequiresApi;
|
import android.support.annotation.RequiresApi;
|
||||||
import android.support.v4.app.ActivityCompat;
|
import android.support.v4.app.ActivityCompat;
|
||||||
import android.support.v4.app.NotificationCompat;
|
import android.support.v4.app.NotificationCompat;
|
||||||
@ -24,30 +25,30 @@ import android.util.Log;
|
|||||||
|
|
||||||
import com.annimon.stream.Stream;
|
import com.annimon.stream.Stream;
|
||||||
import com.google.android.gms.location.FusedLocationProviderClient;
|
import com.google.android.gms.location.FusedLocationProviderClient;
|
||||||
|
import com.google.android.gms.location.LocationCallback;
|
||||||
|
import com.google.android.gms.location.LocationRequest;
|
||||||
|
import com.google.android.gms.location.LocationResult;
|
||||||
import com.google.android.gms.location.LocationServices;
|
import com.google.android.gms.location.LocationServices;
|
||||||
import com.jakewharton.retrofit2.adapter.rxjava2.HttpException;
|
|
||||||
import com.mapbox.geojson.Point;
|
import com.mapbox.geojson.Point;
|
||||||
import com.mapbox.mapboxsdk.geometry.LatLng;
|
import com.mapbox.mapboxsdk.geometry.LatLng;
|
||||||
import com.uam.wmi.findmytutor.model.Coordinate;
|
import com.uam.wmi.findmytutor.model.Coordinate;
|
||||||
import com.uam.wmi.findmytutor.network.ApiClient;
|
import com.uam.wmi.findmytutor.network.ApiClient;
|
||||||
import com.uam.wmi.findmytutor.utils.ApproximatedLocalization;
|
import com.uam.wmi.findmytutor.utils.ApproximatedLocalization;
|
||||||
|
import com.uam.wmi.findmytutor.utils.Const;
|
||||||
import com.uam.wmi.findmytutor.utils.MapUtils;
|
import com.uam.wmi.findmytutor.utils.MapUtils;
|
||||||
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
||||||
import com.uam.wmi.findmytutor.utils.RestApiHelper;
|
|
||||||
import com.uam.wmi.findmytutor.utils.SharingLevel;
|
import com.uam.wmi.findmytutor.utils.SharingLevel;
|
||||||
|
import com.uam.wmi.findmytutor.utils.WifiUtils;
|
||||||
|
|
||||||
import org.apache.commons.collections4.queue.CircularFifoQueue;
|
import org.apache.commons.collections4.queue.CircularFifoQueue;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
|
||||||
|
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
import io.reactivex.disposables.CompositeDisposable;
|
import io.reactivex.disposables.CompositeDisposable;
|
||||||
import io.reactivex.observers.DisposableCompletableObserver;
|
import io.reactivex.observers.DisposableCompletableObserver;
|
||||||
import io.reactivex.observers.DisposableSingleObserver;
|
|
||||||
import io.reactivex.schedulers.Schedulers;
|
import io.reactivex.schedulers.Schedulers;
|
||||||
import okhttp3.ResponseBody;
|
|
||||||
|
|
||||||
import static com.uam.wmi.findmytutor.utils.Const.offlineBackgroundLocationInterval;
|
import static com.uam.wmi.findmytutor.utils.Const.offlineBackgroundLocationInterval;
|
||||||
import static com.uam.wmi.findmytutor.utils.Const.onlineBackgroundLocationInterval;
|
import static com.uam.wmi.findmytutor.utils.Const.onlineBackgroundLocationInterval;
|
||||||
@ -60,32 +61,33 @@ import static java.lang.String.valueOf;
|
|||||||
public class BackgroundLocalizationService extends Service {
|
public class BackgroundLocalizationService extends Service {
|
||||||
|
|
||||||
private static final String TAG = "MyLocationService";
|
private static final String TAG = "MyLocationService";
|
||||||
private static final float LOCATION_DISTANCE = 1f;
|
private static Integer notify_interval = onlineBackgroundLocationInterval;
|
||||||
private static long notify_interval = onlineBackgroundLocationInterval;
|
private static Integer notify_interval_inside_building = onlineBackgroundLocationInterval;
|
||||||
private static long notify_interval_inside_building = onlineBackgroundLocationInterval;
|
private static Integer notify_interval_outside_building = offlineBackgroundLocationInterval;
|
||||||
private static long notify_interval_outside_building = offlineBackgroundLocationInterval;
|
private static int coordinatesHistoryLength = 10;
|
||||||
private static int coordinatesHistoryLength = 5;
|
private Boolean highAccuracyMode;
|
||||||
private static final Long LOCATION_INTERVAL = notify_interval;
|
|
||||||
private Location mLastLocation;
|
private Location mLastLocation;
|
||||||
private Boolean stopService = false;
|
private Boolean stopService = false;
|
||||||
private ArrayList<String> providers = new ArrayList<String>();
|
private ArrayList<String> providers = new ArrayList<String>();
|
||||||
private LocationListener[] mLocationListeners;
|
|
||||||
private CircularFifoQueue<Location> coordinatesHistory = new CircularFifoQueue<Location>(coordinatesHistoryLength);
|
private CircularFifoQueue<Location> coordinatesHistory = new CircularFifoQueue<Location>(coordinatesHistoryLength);
|
||||||
private LocationManager mLocationManager = null;
|
|
||||||
private Handler mHandler = new Handler();
|
private Handler mHandler = new Handler();
|
||||||
private Runnable mStatusChecker;
|
private Runnable mStatusChecker;
|
||||||
private FusedLocationProviderClient mFusedLocationClient;
|
private FusedLocationProviderClient mFusedLocationClient;
|
||||||
|
private Location fakeLoc = null;
|
||||||
|
private LocationRequest mLocationRequest;
|
||||||
|
private Location mCurrentLocation;
|
||||||
|
private LocationCallback mLocationCallback;
|
||||||
|
private LocationListener mLocationListener;
|
||||||
|
|
||||||
public BackgroundLocalizationService() {
|
public BackgroundLocalizationService() {
|
||||||
providers.add(LocationManager.GPS_PROVIDER);
|
providers.add(LocationManager.GPS_PROVIDER);
|
||||||
providers.add(LocationManager.NETWORK_PROVIDER);
|
providers.add(LocationManager.NETWORK_PROVIDER);
|
||||||
providers.add(LocationManager.PASSIVE_PROVIDER);
|
providers.add(LocationManager.PASSIVE_PROVIDER);
|
||||||
|
fakeLoc = new Location("");
|
||||||
|
|
||||||
mLocationListeners = new LocationListener[]{
|
fakeLoc.setLatitude(0);
|
||||||
new LocationListener(LocationManager.GPS_PROVIDER),
|
fakeLoc.setLongitude(0);
|
||||||
new LocationListener(LocationManager.NETWORK_PROVIDER),
|
fakeLoc.setAltitude(0);
|
||||||
new LocationListener(LocationManager.PASSIVE_PROVIDER)
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -100,7 +102,9 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
|
|
||||||
if (intent != null) {
|
if (intent != null) {
|
||||||
stopService = intent.getBooleanExtra("request_stop", false);
|
stopService = intent.getBooleanExtra("request_stop", false);
|
||||||
|
notify_interval = intent.getIntExtra("notify_interval", onlineBackgroundLocationInterval);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stopService) {
|
if (stopService) {
|
||||||
storeBackgroundLocationStatus(getApplication(), false);
|
storeBackgroundLocationStatus(getApplication(), false);
|
||||||
stopForeground(true);
|
stopForeground(true);
|
||||||
@ -111,6 +115,26 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
return START_STICKY;
|
return START_STICKY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void createLocationCallback() {
|
||||||
|
mLocationCallback = new LocationCallback() {
|
||||||
|
@Override
|
||||||
|
public void onLocationResult(LocationResult locationResult) {
|
||||||
|
super.onLocationResult(locationResult);
|
||||||
|
if (locationResult != null) {
|
||||||
|
mCurrentLocation = locationResult.getLastLocation();
|
||||||
|
sendCoordinateToBackend(mCurrentLocation);
|
||||||
|
changeBackgroundMode();
|
||||||
|
|
||||||
|
//Restart service when a user started using presence in GPS mode and wmi is currently available
|
||||||
|
if (WifiUtils.checkIfUserIsInRangeOfWmiWifi(getApplicationContext())
|
||||||
|
&& PrefUtils.getLocationLevel(getApplicationContext()).equals(SharingLevel.PRESENCE.toString())) {
|
||||||
|
restartService();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate() {
|
public void onCreate() {
|
||||||
Log.e(TAG, "onCreate");
|
Log.e(TAG, "onCreate");
|
||||||
@ -124,39 +148,107 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
startForeground(1001, notification);
|
startForeground(1001, notification);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!stopService) {
|
if (!stopService) {
|
||||||
|
if (PrefUtils.getLocationLevel(getApplicationContext()).equals(SharingLevel.PRESENCE.toString())) {
|
||||||
|
if (WifiUtils.checkIfUserIsInRangeOfWmiWifi(getApplicationContext())) {
|
||||||
|
Location presenceFakeLoc = new Location("");
|
||||||
|
|
||||||
|
presenceFakeLoc.setLatitude(Const.presenceLatitude);
|
||||||
|
presenceFakeLoc.setLongitude(Const.presenceLongitude);
|
||||||
|
presenceFakeLoc.setAltitude(0);
|
||||||
|
createPresenceLooper(presenceFakeLoc);
|
||||||
|
} else {
|
||||||
|
createFusedLocationClient();
|
||||||
|
}
|
||||||
|
} else if (PrefUtils.getLocationLevel(getApplicationContext()).equals(SharingLevel.EXACT.toString())
|
||||||
|
|| PrefUtils.getLocationLevel(getApplicationContext()).equals(SharingLevel.APPROXIMATED.toString())
|
||||||
|
) {
|
||||||
|
createFusedLocationClient();
|
||||||
|
} else if (PrefUtils.getLocationLevel(getApplicationContext()).equals(SharingLevel.MANUAL.toString())) {
|
||||||
|
Location manualFakeLoc = new Location("");
|
||||||
|
|
||||||
|
manualFakeLoc.setLatitude(0);
|
||||||
|
manualFakeLoc.setLongitude(0);
|
||||||
|
manualFakeLoc.setAltitude(0);
|
||||||
|
createLowBatteryLooper(manualFakeLoc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createLowBatteryLooper(Location fakeLoc) {
|
||||||
mStatusChecker = () -> {
|
mStatusChecker = () -> {
|
||||||
try {
|
try {
|
||||||
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
|
sendCoordinateToBackend(fakeLoc);
|
||||||
initializeLocationManager();
|
|
||||||
getLocalizationFromListeners();
|
|
||||||
changeBackgroundMode();
|
|
||||||
} finally {
|
} finally {
|
||||||
mFusedLocationClient = null;
|
|
||||||
destroyLocationListeners();
|
|
||||||
mHandler.postDelayed(mStatusChecker, notify_interval);
|
mHandler.postDelayed(mStatusChecker, notify_interval);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
AsyncTask.execute(mStatusChecker);
|
AsyncTask.execute(mStatusChecker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void createPresenceLooper(Location fakeLoc) {
|
||||||
|
mStatusChecker = () -> {
|
||||||
|
try {
|
||||||
|
if (WifiUtils.checkIfUserIsInRangeOfWmiWifi(getApplicationContext())) {
|
||||||
|
sendCoordinateToBackend(fakeLoc);
|
||||||
|
} else {
|
||||||
|
restartService();
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
mHandler.postDelayed(mStatusChecker, notify_interval);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
AsyncTask.execute(mStatusChecker);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void createFusedLocationClient() {
|
||||||
|
Integer saveMode = Long.valueOf(notify_interval).compareTo(Long.valueOf(offlineBackgroundLocationInterval));
|
||||||
|
|
||||||
|
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mLocationRequest = new LocationRequest();
|
||||||
|
|
||||||
|
if (saveMode != 0) {
|
||||||
|
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
|
||||||
|
} else {
|
||||||
|
mLocationRequest.setPriority(LocationRequest.PRIORITY_LOW_POWER);
|
||||||
|
}
|
||||||
|
|
||||||
|
mLocationRequest.setFastestInterval(notify_interval);
|
||||||
|
mLocationRequest.setInterval(notify_interval);
|
||||||
|
|
||||||
|
createLocationCallback();
|
||||||
|
|
||||||
|
if (!stopService) {
|
||||||
|
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
|
||||||
|
mFusedLocationClient.requestLocationUpdates(mLocationRequest,
|
||||||
|
mLocationCallback, Looper.getMainLooper());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changeBackgroundMode() {
|
private void changeBackgroundMode() {
|
||||||
if (coordinatesHistory.size() > 4) {
|
Integer prevInterval = notify_interval;
|
||||||
Boolean shouldExtendTimeInterval = Stream.of(coordinatesHistory)
|
Boolean shouldExtendTimeInterval = Stream.of(coordinatesHistory)
|
||||||
.map(MapUtils::checkIfCoordinateIsValid).takeWhile(s -> !s).toList().size() == coordinatesHistory.size();
|
.map(MapUtils::checkIfCoordinateIsValid).takeWhile(s -> !s).toList().size() == coordinatesHistoryLength;
|
||||||
|
|
||||||
Boolean shouldAbbreviateTimeInterval = Stream.of(coordinatesHistory).
|
Boolean shouldAbbreviateTimeInterval = Stream.of(coordinatesHistory).
|
||||||
map(MapUtils::checkIfCoordinateIsValid).toList().get(coordinatesHistory.size() - 1);
|
map(MapUtils::checkIfCoordinateIsValid).filter(x -> x).toList().size() > 0;
|
||||||
|
|
||||||
if (shouldExtendTimeInterval) {
|
if (shouldExtendTimeInterval) {
|
||||||
notify_interval = notify_interval_outside_building;
|
notify_interval = notify_interval_outside_building;
|
||||||
} else if (shouldAbbreviateTimeInterval) {
|
}
|
||||||
|
|
||||||
|
if (shouldAbbreviateTimeInterval) {
|
||||||
notify_interval = notify_interval_inside_building;
|
notify_interval = notify_interval_inside_building;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Integer changedMode = Long.valueOf(prevInterval).compareTo(Long.valueOf(notify_interval));
|
||||||
|
if (changedMode != 0) {
|
||||||
|
updateListeners();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -180,50 +272,6 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
startForeground(2, notification);
|
startForeground(2, notification);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getLocalizationFromListeners() {
|
|
||||||
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
|
||||||
// TODO: Consider calling
|
|
||||||
// ActivityCompat#requestPermissions
|
|
||||||
// here to request the missing permissions, and then overriding
|
|
||||||
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
|
|
||||||
// int[] grantResults)
|
|
||||||
// to handle the case where the user grants the permission. See the documentation
|
|
||||||
// for ActivityCompat#requestPermissions for more details.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<String> providers1 = mLocationManager.getProviders(true);
|
|
||||||
Location bestLocation = null;
|
|
||||||
AtomicReference<Boolean> triggerAnotherLocationListener = new AtomicReference<>(false);
|
|
||||||
|
|
||||||
mFusedLocationClient.getLastLocation().addOnSuccessListener(
|
|
||||||
location -> {
|
|
||||||
if (location != null) {
|
|
||||||
mLastLocation = location;
|
|
||||||
coordinatesHistory.add(location);
|
|
||||||
sendCoordinateToBackend(location);
|
|
||||||
}
|
|
||||||
|
|
||||||
triggerAnotherLocationListener.set(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (triggerAnotherLocationListener.get()) {
|
|
||||||
for (String provider : providers1) {
|
|
||||||
Location location = mLocationManager.getLastKnownLocation(provider);
|
|
||||||
|
|
||||||
if (location == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (bestLocation == null || location.getAccuracy() < bestLocation.getAccuracy()) {
|
|
||||||
bestLocation = location;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
coordinatesHistory.add(bestLocation);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void sendCoordinateToBackend(Location location) {
|
private void sendCoordinateToBackend(Location location) {
|
||||||
new Task(location).execute();
|
new Task(location).execute();
|
||||||
}
|
}
|
||||||
@ -238,77 +286,44 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void destroyLocationListeners() {
|
private void destroyLocationListeners() {
|
||||||
if (mLocationManager != null) {
|
if (mFusedLocationClient != null) {
|
||||||
for (LocationListener listener : mLocationListeners) {
|
mFusedLocationClient.removeLocationUpdates(mLocationCallback);
|
||||||
try {
|
mFusedLocationClient = null;
|
||||||
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
mLocationCallback = null;
|
||||||
return;
|
mLocationRequest = null;
|
||||||
}
|
|
||||||
mLocationManager.removeUpdates(listener);
|
|
||||||
|
|
||||||
} catch (Exception ex) {
|
|
||||||
Log.i(TAG, "fail to remove location listener, ignore", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeLocationManager() {
|
private void updateListeners() {
|
||||||
Log.e(TAG, "initializeLocationManager - LOCATION_INTERVAL: " + notify_interval + " LOCATION_DISTANCE: " + LOCATION_DISTANCE);
|
if (mFusedLocationClient != null) {
|
||||||
|
mFusedLocationClient.removeLocationUpdates(mLocationCallback)
|
||||||
if (mLocationManager == null) {
|
.addOnCompleteListener(task -> {
|
||||||
mLocationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
|
restartService();
|
||||||
}
|
mFusedLocationClient = null;
|
||||||
|
mLocationCallback = null;
|
||||||
Integer providerIndex = 0;
|
mLocationRequest = null;
|
||||||
|
});
|
||||||
for (LocationListener listener : mLocationListeners) {
|
|
||||||
try {
|
|
||||||
mLocationManager.requestLocationUpdates(
|
|
||||||
providers.get(providerIndex),
|
|
||||||
notify_interval,
|
|
||||||
LOCATION_DISTANCE,
|
|
||||||
listener
|
|
||||||
);
|
|
||||||
|
|
||||||
} catch (java.lang.SecurityException ex) {
|
|
||||||
Log.i(TAG, "fail to request location update, ignore", ex);
|
|
||||||
} catch (IllegalArgumentException ex) {
|
|
||||||
Log.d(TAG, "network provider does not exist, " + ex.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
providerIndex++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class LocationListener implements android.location.LocationListener {
|
private void restartService() {
|
||||||
|
|
||||||
LocationListener(String provider) {
|
Intent stopIntent = new Intent(getApplicationContext(), BackgroundLocalizationService.class);
|
||||||
Log.e(TAG, "LocationListener " + provider);
|
stopIntent.putExtra("request_stop", true);
|
||||||
mLastLocation = new Location(provider);
|
|
||||||
|
stopService(stopIntent);
|
||||||
|
|
||||||
|
Intent startIntent = new Intent(getApplicationContext(), BackgroundLocalizationService.class);
|
||||||
|
startIntent.putExtra("notify_interval", notify_interval);
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) {
|
||||||
|
startForegroundService(startIntent);
|
||||||
|
} else {
|
||||||
|
startService(startIntent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLocationChanged(Location location) {
|
|
||||||
Log.e(TAG, "onLocationChanged: " + location);
|
|
||||||
mLastLocation.set(location);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onProviderDisabled(String provider) {
|
|
||||||
Log.e(TAG, "onProviderDisabled: " + provider);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onProviderEnabled(String provider) {
|
|
||||||
Log.e(TAG, "onProviderEnabled: " + provider);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStatusChanged(String provider, int status, Bundle extras) {
|
|
||||||
Log.e(TAG, "onStatusChanged: " + provider);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("StaticFieldLeak")
|
@SuppressLint("StaticFieldLeak")
|
||||||
private class Task extends AsyncTask {
|
private class Task extends AsyncTask {
|
||||||
@ -325,6 +340,7 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
latitude = location.getLatitude();
|
latitude = location.getLatitude();
|
||||||
longitude = location.getLongitude();
|
longitude = location.getLongitude();
|
||||||
altitude = location.getAltitude();
|
altitude = location.getAltitude();
|
||||||
|
Log.e(TAG, "TASK" + latitude + " " + longitude);
|
||||||
approximatedLocalization = new ApproximatedLocalization(MapUtils.loadJsonFromAsset(getApplicationContext(), "building.geojson"));
|
approximatedLocalization = new ApproximatedLocalization(MapUtils.loadJsonFromAsset(getApplicationContext(), "building.geojson"));
|
||||||
approximatedBuildingPart = approximatedLocalization.getNameOfBuildingPart(Point.fromLngLat(longitude, latitude));
|
approximatedBuildingPart = approximatedLocalization.getNameOfBuildingPart(Point.fromLngLat(longitude, latitude));
|
||||||
}
|
}
|
||||||
@ -335,9 +351,9 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
String locationLevel = PrefUtils.getLocationLevel(getApplicationContext());
|
String locationLevel = PrefUtils.getLocationLevel(getApplicationContext());
|
||||||
String status = (PrefUtils.isStatusEnabled(getApplicationContext())) ? PrefUtils.getUserStatus(getApplicationContext()) : "";
|
String status = (PrefUtils.isStatusEnabled(getApplicationContext())) ? PrefUtils.getUserStatus(getApplicationContext()) : "";
|
||||||
|
|
||||||
|
|
||||||
if (locationLevel.equals(SharingLevel.PRESENCE.toString())) {
|
if (locationLevel.equals(SharingLevel.PRESENCE.toString())) {
|
||||||
if (!MapUtils.checkIfCoordinateIsValid(latitude, longitude)) {
|
if (!MapUtils.checkIfCoordinateIsValid(latitude, longitude)) {
|
||||||
|
coordinatesHistory.add(fakeLoc);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -355,6 +371,12 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
approximatedBuildingPart = PrefUtils.getManualLocationApproximation(getApplicationContext());
|
approximatedBuildingPart = PrefUtils.getManualLocationApproximation(getApplicationContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Location fakeLoc = new Location("");
|
||||||
|
|
||||||
|
fakeLoc.setLatitude(latitude);
|
||||||
|
fakeLoc.setLongitude(longitude);
|
||||||
|
coordinatesHistory.add(fakeLoc);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Coordinate coordinate = new Coordinate(
|
Coordinate coordinate = new Coordinate(
|
||||||
latitude,
|
latitude,
|
||||||
@ -372,7 +394,6 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribeWith(new DisposableCompletableObserver() {
|
.subscribeWith(new DisposableCompletableObserver() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onComplete() {
|
public void onComplete() {
|
||||||
Log.e(TAG, "CoordinateSuccess");
|
Log.e(TAG, "CoordinateSuccess");
|
||||||
@ -380,9 +401,7 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError(Throwable e) {
|
public void onError(Throwable e) {
|
||||||
|
|
||||||
Log.e(TAG, "onErr" + valueOf(e));
|
Log.e(TAG, "onErr" + valueOf(e));
|
||||||
|
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
|
@ -25,7 +25,7 @@ public interface CoordinateService {
|
|||||||
Single<List<Coordinate>> getCoordinatesByUserId(@Path("userId") String userId);
|
Single<List<Coordinate>> getCoordinatesByUserId(@Path("userId") String userId);
|
||||||
|
|
||||||
@GET("api/coordinates/userTop/{userId}")
|
@GET("api/coordinates/userTop/{userId}")
|
||||||
Single<List<Coordinate>> getTopCoordinatesByUserId(@Path("userId") String userId);
|
Single <Coordinate> getTopCoordinateByUserId(@Path("userId") String userId);
|
||||||
|
|
||||||
@GET("api/coordinates/top")
|
@GET("api/coordinates/top")
|
||||||
Single<List<Coordinate>> getTopCoordinates();
|
Single<List<Coordinate>> getTopCoordinates();
|
||||||
@ -42,4 +42,6 @@ public interface CoordinateService {
|
|||||||
@DELETE("api/coordinates/{id}")
|
@DELETE("api/coordinates/{id}")
|
||||||
Completable deleteCoordinatesById(@Path("id") String id);
|
Completable deleteCoordinatesById(@Path("id") String id);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
package com.uam.wmi.findmytutor.service;
|
||||||
|
|
||||||
|
import com.uam.wmi.findmytutor.model.PredefinedCoordViewModel;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import io.reactivex.Single;
|
||||||
|
import retrofit2.http.Body;
|
||||||
|
import retrofit2.http.DELETE;
|
||||||
|
import retrofit2.http.GET;
|
||||||
|
import retrofit2.http.HTTP;
|
||||||
|
import retrofit2.http.POST;
|
||||||
|
import retrofit2.http.Path;
|
||||||
|
|
||||||
|
public interface PredefinedCoordinatesService {
|
||||||
|
@GET("api/users/predefined/coordinate/{tutorId}")
|
||||||
|
Single<List<PredefinedCoordViewModel>> getUserPredefinedCoords(@Path("tutorId") String tutorId);
|
||||||
|
|
||||||
|
@POST("api/users/predefined/coordinate/{tutorId}")
|
||||||
|
Single <PredefinedCoordViewModel> postUserPredefinedCoord(@Path("tutorId") String tutorId, @Body PredefinedCoordViewModel coord);
|
||||||
|
|
||||||
|
@HTTP(method = "DELETE", path = "api/users/predefined/coordinate/{tutorId}", hasBody = true)
|
||||||
|
Single<List<PredefinedCoordViewModel>> deleteUserPredefinedCoord(@Path("tutorId") String tutorId, @Body String uuid);
|
||||||
|
}
|
@ -5,6 +5,7 @@ import io.reactivex.Single;
|
|||||||
import retrofit2.http.Body;
|
import retrofit2.http.Body;
|
||||||
import retrofit2.http.DELETE;
|
import retrofit2.http.DELETE;
|
||||||
import retrofit2.http.GET;
|
import retrofit2.http.GET;
|
||||||
|
import retrofit2.http.HTTP;
|
||||||
import retrofit2.http.POST;
|
import retrofit2.http.POST;
|
||||||
import retrofit2.http.Path;
|
import retrofit2.http.Path;
|
||||||
|
|
||||||
@ -15,15 +16,16 @@ public interface PredefinedStatusesService {
|
|||||||
@POST("api/users/predefined/status/{tutorId}")
|
@POST("api/users/predefined/status/{tutorId}")
|
||||||
Single<List<String>> postUserPredefinedStatus(@Path("tutorId") String tutorId, @Body String status);
|
Single<List<String>> postUserPredefinedStatus(@Path("tutorId") String tutorId, @Body String status);
|
||||||
|
|
||||||
@DELETE("api/users/predefined/status/{tutorId}")
|
// @DELETE("api/users/predefined/status/{tutorId}")
|
||||||
|
@HTTP(method = "DELETE", path = "api/users/predefined/status/{tutorId}", hasBody = true)
|
||||||
Single<List<String>> deleteUserPredefinedStatus(@Path("tutorId") String tutorId, @Body String status);
|
Single<List<String>> deleteUserPredefinedStatus(@Path("tutorId") String tutorId, @Body String status);
|
||||||
|
|
||||||
@GET("api/users/predefined/coordinate/{tutorId}")
|
/* @GET("api/users/predefined/coordinate/{tutorId}")
|
||||||
Single<List<PredefinedCoordViewModel>> getUserPredefinedCoords(@Path("tutorId") String tutorId);
|
Single<List<PredefinedCoordViewModel>> getUserPredefinedCoords(@Path("tutorId") String tutorId);
|
||||||
|
|
||||||
@POST("api/users/predefined/coordinate/{tutorId}")
|
@POST("api/users/predefined/coordinate/{tutorId}")
|
||||||
Single <PredefinedCoordViewModel> postUserPredefinedCoord(@Path("tutorId") String tutorId, @Body PredefinedCoordViewModel coord);
|
Single <PredefinedCoordViewModel> postUserPredefinedCoord(@Path("tutorId") String tutorId, @Body PredefinedCoordViewModel coord);
|
||||||
|
|
||||||
@DELETE("api/users/predefined/coordinate/{tutorId}")
|
@DELETE("api/users/predefined/coordinate/{tutorId}")
|
||||||
Single<List<PredefinedCoordViewModel>> deleteUserPredefinedCoord(@Path("tutorId") String tutorId, @Body PredefinedCoordViewModel coord);
|
Single<List<PredefinedCoordViewModel>> deleteUserPredefinedCoord(@Path("tutorId") String tutorId, @Body PredefinedCoordViewModel coord);*/
|
||||||
}
|
}
|
||||||
|
@ -10,14 +10,17 @@ import java.util.List;
|
|||||||
|
|
||||||
import io.reactivex.Completable;
|
import io.reactivex.Completable;
|
||||||
import io.reactivex.Observable;
|
import io.reactivex.Observable;
|
||||||
|
import io.reactivex.ObservableEmitter;
|
||||||
import io.reactivex.Single;
|
import io.reactivex.Single;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
import retrofit2.http.Body;
|
import retrofit2.http.Body;
|
||||||
import retrofit2.http.DELETE;
|
import retrofit2.http.DELETE;
|
||||||
import retrofit2.http.GET;
|
import retrofit2.http.GET;
|
||||||
|
import retrofit2.http.HTTP;
|
||||||
import retrofit2.http.POST;
|
import retrofit2.http.POST;
|
||||||
import retrofit2.http.PUT;
|
import retrofit2.http.PUT;
|
||||||
import retrofit2.http.Path;
|
import retrofit2.http.Path;
|
||||||
|
import retrofit2.http.Query;
|
||||||
|
|
||||||
|
|
||||||
public interface UserService {
|
public interface UserService {
|
||||||
@ -30,6 +33,21 @@ public interface UserService {
|
|||||||
@GET("api/users/tutors")
|
@GET("api/users/tutors")
|
||||||
Single <List<User>> getAllTutors();
|
Single <List<User>> getAllTutors();
|
||||||
|
|
||||||
|
@GET("api/users/tutors/online")
|
||||||
|
Single <List<User>> getAllOnlineTutors();
|
||||||
|
|
||||||
|
@GET("api/users/tutors/active")
|
||||||
|
Single <List<User>> getAllActiveTutors();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@GET("api/users/tutors/offline")
|
||||||
|
Single <List<User>> getAllOfflineTutors();
|
||||||
|
|
||||||
|
@GET("api/users/tutors/search")
|
||||||
|
Single <List<User>> searchUser(@Query(value = "searchString", encoded = true) String searchString);
|
||||||
|
|
||||||
@POST("api/users")
|
@POST("api/users")
|
||||||
Completable createUser(@Body User user);
|
Completable createUser(@Body User user);
|
||||||
|
|
||||||
@ -45,6 +63,9 @@ public interface UserService {
|
|||||||
@GET("api/users/{id}")
|
@GET("api/users/{id}")
|
||||||
Single <User> getUserById(@Path("id") String userID);
|
Single <User> getUserById(@Path("id") String userID);
|
||||||
|
|
||||||
|
@GET("api/users/self/{id}")
|
||||||
|
Single <User> getSelf(@Path("id") String userID);
|
||||||
|
|
||||||
@PUT("api/users/{id}")
|
@PUT("api/users/{id}")
|
||||||
Completable updateUserByID(@Path("id") String userID, @Body User user);
|
Completable updateUserByID(@Path("id") String userID, @Body User user);
|
||||||
|
|
||||||
@ -61,26 +82,28 @@ public interface UserService {
|
|||||||
Completable setUserInActive(@Path("userID") String userID);
|
Completable setUserInActive(@Path("userID") String userID);
|
||||||
|
|
||||||
@GET("api/users/blacklist/{tutorID}")
|
@GET("api/users/blacklist/{tutorID}")
|
||||||
Single<List<User>> getTutorBlacklistedByID(@Path("tutorID") String tutorID);
|
Single <List<String>> getTutorBlacklistedByID(@Path("tutorID") String tutorID);
|
||||||
|
|
||||||
@PUT("api/users/blacklist/{tutorID}")
|
@PUT("api/users/blacklist/{tutorID}")
|
||||||
Completable setTutorBlacklist(@Path("tutorID") String tutorID, @Body IsUsingListBool isUsing);
|
Completable setTutorBlacklist(@Path("tutorID") String tutorID, @Body IsUsingListBool isUsing);
|
||||||
|
|
||||||
@POST("api/users/blacklist/{tutorID}")
|
@POST("api/users/blacklist/{tutorID}")
|
||||||
Completable addStudentToBlacklist(@Path("tutorID") String tutorID, @Body StudentIdModel student);
|
Observable <User> addStudentToBlacklist(@Path("tutorID") String tutorID, @Body StudentIdModel student);
|
||||||
|
|
||||||
@DELETE("api/users/blacklist/{tutorID}")
|
// @DELETE("api/users/blacklist/{tutorID}")
|
||||||
|
@HTTP(method = "DELETE", path = "api/users/blacklist/{tutorID}", hasBody = true)
|
||||||
Completable removeStudentFromBlacklist(@Path("tutorID") String tutorID, @Body StudentIdModel student);
|
Completable removeStudentFromBlacklist(@Path("tutorID") String tutorID, @Body StudentIdModel student);
|
||||||
|
|
||||||
@GET("api/users/whitelist/{tutorID}")
|
@GET("api/users/whitelist/{tutorID}")
|
||||||
Single<List<User>> getTutorwhitelistedByID(@Path("tutorID") String tutorID);
|
Single<List<String>> getTutorWhitelistedByID(@Path("tutorID") String tutorID);
|
||||||
|
|
||||||
@PUT("api/users/whitelist/{tutorID}")
|
@PUT("api/users/whitelist/{tutorID}")
|
||||||
Completable setTutorWhitelist(@Path("tutorID") String tutorID, @Body IsUsingListBool isUsing);
|
Completable setTutorWhitelist(@Path("tutorID") String tutorID, @Body IsUsingListBool isUsing);
|
||||||
|
|
||||||
@POST("api/users/whitelist/{tutorID}")
|
@POST("api/users/whitelist/{tutorID}")
|
||||||
Completable addStudentTowhitelist(@Path("tutorID") String tutorID, @Body StudentIdModel student);
|
Observable <User> addStudentToWhitelist(@Path("tutorID") String tutorID, @Body StudentIdModel student);
|
||||||
|
|
||||||
@DELETE("api/users/whitelist/{tutorID}")
|
// @DELETE("api/users/whitelist/{tutorID}")
|
||||||
|
@HTTP(method = "DELETE", path = "api/users/whitelist/{tutorID}", hasBody = true)
|
||||||
Completable removeStudentFromWhitelist(@Path("tutorID") String tutorID, @Body StudentIdModel student);
|
Completable removeStudentFromWhitelist(@Path("tutorID") String tutorID, @Body StudentIdModel student);
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,9 @@ import java.util.List;
|
|||||||
|
|
||||||
public class Const {
|
public class Const {
|
||||||
public final static String BASE_URL = "https://s416084.projektstudencki.pl/master/";
|
public final static String BASE_URL = "https://s416084.projektstudencki.pl/master/";
|
||||||
|
public final static Integer mapRefreshInterval = 6000;
|
||||||
public final static Integer onlineBackgroundLocationInterval = 7000;
|
public final static Integer onlineBackgroundLocationInterval = 7000;
|
||||||
public final static Integer offlineBackgroundLocationInterval = 36000;
|
public final static Integer offlineBackgroundLocationInterval = 360000;
|
||||||
public final static Integer defaultMapZoom = 17;
|
public final static Integer defaultMapZoom = 17;
|
||||||
public final static Integer searchMapZoom = 13;
|
public final static Integer searchMapZoom = 13;
|
||||||
public final static Double presenceLatitude = 52.466365;
|
public final static Double presenceLatitude = 52.466365;
|
||||||
@ -16,8 +17,10 @@ public class Const {
|
|||||||
public final static String presenceApproximatedName = "Unknown";
|
public final static String presenceApproximatedName = "Unknown";
|
||||||
public final static Range<Double> buildingLatitudeRange = Range.create(52.466092, 52.467529);
|
public final static Range<Double> buildingLatitudeRange = Range.create(52.466092, 52.467529);
|
||||||
public final static Range<Double> buildingLongitudeRange = Range.create(16.926159, 16.927759);
|
public final static Range<Double> buildingLongitudeRange = Range.create(16.926159, 16.927759);
|
||||||
public final static Range<Double> outsideLatitudeRange = Range.create(52.463512, 52.468837);
|
public final static Range<Double> outsideLatitudeRange = Range.create(52.4651, 52.468837);
|
||||||
public final static Range<Double> outsideLongitudeRange = Range.create(16.922372, 16.936004);
|
public final static Range<Double> outsideLongitudeRange = Range.create(16.9186, 16.936004);
|
||||||
public final static List<String> validApproximatedLocations = Arrays.asList("Skrzydło B", "Skrzydło A", "Aule", "Łącznik", "Biblioteka", "Hol", "Unknown");
|
public final static List<String> validApproximatedLocations = Arrays.asList("Skrzydło B", "Skrzydło A", "Aule", "Łącznik", "Biblioteka", "Hol", "Unknown");
|
||||||
|
public final static String WMI_SSID_NAME = "wmi";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -0,0 +1,80 @@
|
|||||||
|
package com.uam.wmi.findmytutor.utils;
|
||||||
|
|
||||||
|
|
||||||
|
import android.annotation.TargetApi;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.res.Configuration;
|
||||||
|
import android.content.res.Resources;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
public class LocaleHelper {
|
||||||
|
|
||||||
|
private static final String SELECTED_LANGUAGE = "Locale.Helper.Selected.Language";
|
||||||
|
|
||||||
|
public static Context onAttach(Context context) {
|
||||||
|
String lang = getPersistedData(context, Locale.getDefault().getLanguage());
|
||||||
|
return setLocale(context, lang);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Context onAttach(Context context, String defaultLanguage) {
|
||||||
|
String lang = getPersistedData(context, defaultLanguage);
|
||||||
|
return setLocale(context, lang);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getLanguage(Context context) {
|
||||||
|
return getPersistedData(context, Locale.getDefault().getLanguage());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Context setLocale(Context context, String language) {
|
||||||
|
persist(context, language);
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||||
|
return updateResources(context, language);
|
||||||
|
}
|
||||||
|
|
||||||
|
return updateResourcesLegacy(context, language);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getPersistedData(Context context, String defaultLanguage) {
|
||||||
|
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
return preferences.getString(SELECTED_LANGUAGE, defaultLanguage);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void persist(Context context, String language) {
|
||||||
|
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
SharedPreferences.Editor editor = preferences.edit();
|
||||||
|
|
||||||
|
editor.putString(SELECTED_LANGUAGE, language);
|
||||||
|
editor.apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
@TargetApi(Build.VERSION_CODES.N)
|
||||||
|
private static Context updateResources(Context context, String language) {
|
||||||
|
Locale locale = new Locale(language);
|
||||||
|
Locale.setDefault(locale);
|
||||||
|
|
||||||
|
Configuration configuration = context.getResources().getConfiguration();
|
||||||
|
configuration.setLocale(locale);
|
||||||
|
|
||||||
|
return context.createConfigurationContext(configuration);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
private static Context updateResourcesLegacy(Context context, String language) {
|
||||||
|
Locale locale = new Locale(language);
|
||||||
|
Locale.setDefault(locale);
|
||||||
|
|
||||||
|
Resources resources = context.getResources();
|
||||||
|
|
||||||
|
Configuration configuration = resources.getConfiguration();
|
||||||
|
configuration.locale = locale;
|
||||||
|
|
||||||
|
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
|
||||||
|
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,32 @@
|
|||||||
package com.uam.wmi.findmytutor.utils;
|
package com.uam.wmi.findmytutor.utils;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.os.Build;
|
||||||
import android.support.v4.os.ConfigurationCompat;
|
import android.support.v4.os.ConfigurationCompat;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
public class LocaleUtils {
|
public class LocaleUtils {
|
||||||
public static String getCurrentLocale() {
|
public static String getCurrentLocale() {
|
||||||
return String.valueOf(ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()));
|
return String.valueOf(ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Context updateResources(Context context, String language) {
|
||||||
|
Locale locale = new Locale(language);
|
||||||
|
Locale.setDefault(locale);
|
||||||
|
|
||||||
|
Resources res = context.getResources();
|
||||||
|
Configuration config = new Configuration(res.getConfiguration());
|
||||||
|
if (Build.VERSION.SDK_INT >= 22) {
|
||||||
|
config.setLocale(locale);
|
||||||
|
context = context.createConfigurationContext(config);
|
||||||
|
} else {
|
||||||
|
config.locale = locale;
|
||||||
|
res.updateConfiguration(config, res.getDisplayMetrics());
|
||||||
}
|
}
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,12 @@
|
|||||||
package com.uam.wmi.findmytutor.utils;
|
package com.uam.wmi.findmytutor.utils;
|
||||||
|
|
||||||
import android.animation.TypeEvaluator;
|
import android.animation.TypeEvaluator;
|
||||||
|
import android.app.AlertDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
import android.location.Location;
|
import android.location.Location;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.provider.Settings;
|
||||||
|
|
||||||
import com.mapbox.mapboxsdk.camera.CameraPosition;
|
import com.mapbox.mapboxsdk.camera.CameraPosition;
|
||||||
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
|
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
|
||||||
@ -10,12 +14,15 @@ import com.mapbox.mapboxsdk.geometry.LatLng;
|
|||||||
import com.mapbox.mapboxsdk.geometry.LatLngBounds;
|
import com.mapbox.mapboxsdk.geometry.LatLngBounds;
|
||||||
import com.mapbox.mapboxsdk.maps.MapView;
|
import com.mapbox.mapboxsdk.maps.MapView;
|
||||||
import com.mapbox.mapboxsdk.maps.MapboxMap;
|
import com.mapbox.mapboxsdk.maps.MapboxMap;
|
||||||
|
import com.uam.wmi.findmytutor.R;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
import static com.uam.wmi.findmytutor.utils.Const.outsideLongitudeRange;
|
import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext;
|
||||||
import static com.uam.wmi.findmytutor.utils.Const.outsideLatitudeRange;
|
import static com.uam.wmi.findmytutor.utils.Const.outsideLatitudeRange;
|
||||||
|
import static com.uam.wmi.findmytutor.utils.Const.outsideLongitudeRange;
|
||||||
|
import static com.uam.wmi.findmytutor.utils.PrefUtils.shouldBatteryExclusionBeShown;
|
||||||
|
|
||||||
public class MapUtils {
|
public class MapUtils {
|
||||||
|
|
||||||
@ -81,6 +88,26 @@ public class MapUtils {
|
|||||||
return Const.buildingLatitudeRange.contains(latitude) && Const.buildingLongitudeRange.contains(longitude);
|
return Const.buildingLatitudeRange.contains(latitude) && Const.buildingLongitudeRange.contains(longitude);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void BatteryOptimizationsExceptionCheck(Context context) {
|
||||||
|
if (shouldBatteryExclusionBeShown(getApplicationContext())) {
|
||||||
|
PrefUtils.setBatteryExlusionInfoStatus(getApplicationContext(), false);
|
||||||
|
|
||||||
|
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||||
|
builder.setTitle(R.string.batter_exclusions_title);
|
||||||
|
builder.setMessage(R.string.batter_exclusions_message)
|
||||||
|
.setPositiveButton(R.string.ok, (dialog, id) -> {
|
||||||
|
Intent intent = new Intent();
|
||||||
|
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
|
||||||
|
Uri uri = Uri.fromParts("package", getApplicationContext().getPackageName(), null);
|
||||||
|
intent.setData(uri);
|
||||||
|
context.startActivity(intent);
|
||||||
|
})
|
||||||
|
.setNegativeButton(R.string.cancel, (dialog, id) -> {
|
||||||
|
|
||||||
|
}).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Function for marker animation
|
// Function for marker animation
|
||||||
public static class LatLngEvaluator implements TypeEvaluator<LatLng> {
|
public static class LatLngEvaluator implements TypeEvaluator<LatLng> {
|
||||||
// Method is used to interpolate the marker animation.
|
// Method is used to interpolate the marker animation.
|
||||||
|
@ -60,6 +60,16 @@ public class PrefUtils {
|
|||||||
return getSharedPreferences(context).getBoolean("key_status_enabled", false);
|
return getSharedPreferences(context).getBoolean("key_status_enabled", false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
public static void enableStatus(Context context){
|
||||||
|
SharedPreferences.Editor editor = getSharedPreferences(context).edit();
|
||||||
|
editor.putBoolean("key_status_enabled", true);
|
||||||
|
editor.apply();
|
||||||
|
}
|
||||||
|
public static void disableStatus(Context context) {
|
||||||
|
SharedPreferences.Editor editor = getSharedPreferences(context).edit();
|
||||||
|
editor.putBoolean("key_status_enabled", false);
|
||||||
|
editor.apply();
|
||||||
|
}
|
||||||
|
|
||||||
public static String getUserStatus(Context context) {
|
public static String getUserStatus(Context context) {
|
||||||
return getSharedPreferences(context).getString("status_entry", "Dostępny");
|
return getSharedPreferences(context).getString("status_entry", "Dostępny");
|
||||||
@ -94,6 +104,11 @@ public class PrefUtils {
|
|||||||
public static boolean isEnableSharingLocalization(Context context) {
|
public static boolean isEnableSharingLocalization(Context context) {
|
||||||
return getSharedPreferences(context).getBoolean("key_sharing_enabled", false);
|
return getSharedPreferences(context).getBoolean("key_sharing_enabled", false);
|
||||||
}
|
}
|
||||||
|
public static void disableSharing(Context context){
|
||||||
|
SharedPreferences.Editor editor = getSharedPreferences(context).edit();
|
||||||
|
editor.putBoolean("key_sharing_enabled", false);
|
||||||
|
editor.apply();
|
||||||
|
}
|
||||||
|
|
||||||
public static void storeEnableSharingLocalization(Context context, Boolean isChecked) {
|
public static void storeEnableSharingLocalization(Context context, Boolean isChecked) {
|
||||||
SharedPreferences.Editor editor = getSharedPreferences(context).edit();
|
SharedPreferences.Editor editor = getSharedPreferences(context).edit();
|
||||||
@ -197,4 +212,44 @@ public class PrefUtils {
|
|||||||
return getSharedPreferences(context).getString("current_manual_location_name", null);
|
return getSharedPreferences(context).getString("current_manual_location_name", null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void putShowOnlyOnlineUsers(Context context, Boolean flag) {
|
||||||
|
SharedPreferences.Editor editor = getSharedPreferences(context).edit();
|
||||||
|
editor.putBoolean("show_only_online_users_in_list", flag);
|
||||||
|
editor.apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Boolean getShowOnlyOnlineUsers(Context context) {
|
||||||
|
return getSharedPreferences(context).getBoolean("show_only_online_users_in_list", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void useBlacklist(Context context, Boolean flag) {
|
||||||
|
SharedPreferences.Editor editor = getSharedPreferences(context).edit();
|
||||||
|
editor.putBoolean("blacklisting", flag);
|
||||||
|
editor.putBoolean("whitelisting", false);
|
||||||
|
editor.apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void useWhitelist(Context context, Boolean flag) {
|
||||||
|
SharedPreferences.Editor editor = getSharedPreferences(context).edit();
|
||||||
|
editor.putBoolean("whitelisting", flag);
|
||||||
|
editor.putBoolean("blacklisting", false);
|
||||||
|
editor.apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Boolean isBlackListing(Context context) {
|
||||||
|
return getSharedPreferences(context).getBoolean("blacklisting", false);
|
||||||
|
}
|
||||||
|
public static Boolean isWhiteListing(Context context) {
|
||||||
|
return getSharedPreferences(context).getBoolean("whitelisting", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Boolean shouldBatteryExclusionBeShown(Context context) {
|
||||||
|
return getSharedPreferences(context).getBoolean("show_battery_exclusion", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setBatteryExlusionInfoStatus(Context context, Boolean flag) {
|
||||||
|
SharedPreferences.Editor editor = getSharedPreferences(context).edit();
|
||||||
|
editor.putBoolean("show_battery_exclusion", flag);
|
||||||
|
editor.apply();
|
||||||
|
}
|
||||||
}
|
}
|
@ -2,6 +2,8 @@ package com.uam.wmi.findmytutor.utils;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.preference.Preference;
|
import android.preference.Preference;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
@ -9,30 +11,62 @@ import com.uam.wmi.findmytutor.R;
|
|||||||
|
|
||||||
public class RightButtonPreference extends Preference {
|
public class RightButtonPreference extends Preference {
|
||||||
|
|
||||||
|
private Button prefButton;
|
||||||
|
private String buttonText;
|
||||||
|
|
||||||
public RightButtonPreference(Context context, AttributeSet attrs) {
|
public RightButtonPreference(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
setWidgetLayoutResource(R.layout.preference_button_widget);
|
setWidgetLayoutResource(R.layout.preference_button_widget);
|
||||||
|
init(context, attrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void init(Context context, AttributeSet attrs){
|
||||||
|
for (int i=0;i<attrs.getAttributeCount();i++) {
|
||||||
|
String attr = attrs.getAttributeName(i);
|
||||||
|
try {
|
||||||
|
if(attr.equalsIgnoreCase("key")){
|
||||||
|
Log.e("BUTTON_ERR",attr);
|
||||||
|
String val = attrs.getAttributeValue(i);
|
||||||
|
|
||||||
|
switch (val) {
|
||||||
|
case "remove_manual_status":
|
||||||
|
buttonText = context.getResources().getString(R.string.preference_manual_location_button_remove);
|
||||||
|
break;
|
||||||
|
case "manual_location_button":
|
||||||
|
buttonText = context.getResources().getString(R.string.preference_manual_location_button);
|
||||||
|
break;
|
||||||
|
case "remove_manual_location":
|
||||||
|
buttonText = context.getResources().getString(R.string.preference_manual_location_button_remove);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
buttonText = "";
|
||||||
|
Log.e("BUTTON_ERR", String.valueOf(e));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setText(String text){
|
||||||
|
prefButton.setText(text);
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
protected View onCreateView(ViewGroup parent) {
|
protected View onCreateView(ViewGroup parent) {
|
||||||
View view = super.onCreateView(parent);
|
return super.onCreateView(parent);
|
||||||
// LayoutInflater li = (LayoutInflater)getContext().getSystemService( Context.LAYOUT_INFLATER_SERVICE );
|
|
||||||
// View temp =li.inflate( R.layout.preference_button_widget, parent, false);
|
|
||||||
return view;
|
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
protected void onBindView(View view)
|
protected void onBindView(View view)
|
||||||
{
|
{
|
||||||
super.onBindView(view);
|
super.onBindView(view);
|
||||||
Button button = (Button)view.findViewById(R.id.button_choose_from_map);
|
prefButton = view.findViewById(R.id.button_choose_from_map);
|
||||||
if(button != null)
|
prefButton.setText(buttonText);
|
||||||
|
if(prefButton != null)
|
||||||
{
|
{
|
||||||
button.setOnClickListener(new View.OnClickListener() {
|
prefButton.setOnClickListener(view1 -> {
|
||||||
@Override
|
|
||||||
public void onClick(View view) {
|
|
||||||
callChangeListener(null);
|
callChangeListener(null);
|
||||||
notifyChanged();
|
notifyChanged();
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,13 @@
|
|||||||
package com.uam.wmi.findmytutor.utils;
|
package com.uam.wmi.findmytutor.utils;
|
||||||
|
|
||||||
|
|
||||||
import android.support.v7.widget.SearchView;
|
import android.support.v7.widget.SearchView;
|
||||||
|
|
||||||
import io.reactivex.Observable;
|
import io.reactivex.Observable;
|
||||||
import io.reactivex.subjects.PublishSubject;
|
import io.reactivex.subjects.PublishSubject;
|
||||||
|
|
||||||
|
|
||||||
public class RxSearchObservable {
|
public class RxSearchObservable {
|
||||||
|
|
||||||
private RxSearchObservable() {
|
private RxSearchObservable() {
|
||||||
// no instance
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Observable<String> fromView(SearchView searchView) {
|
public static Observable<String> fromView(SearchView searchView) {
|
||||||
@ -21,6 +18,7 @@ public class RxSearchObservable {
|
|||||||
@Override
|
@Override
|
||||||
public boolean onQueryTextSubmit(String s) {
|
public boolean onQueryTextSubmit(String s) {
|
||||||
subject.onNext(s);
|
subject.onNext(s);
|
||||||
|
searchView.clearFocus();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -29,11 +27,8 @@ public class RxSearchObservable {
|
|||||||
subject.onNext(text);
|
subject.onNext(text);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
return subject;
|
return subject;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,30 @@
|
|||||||
|
package com.uam.wmi.findmytutor.utils;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.net.NetworkInfo;
|
||||||
|
import android.net.wifi.WifiInfo;
|
||||||
|
import android.net.wifi.WifiManager;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class WifiUtils {
|
||||||
|
|
||||||
|
public static String getWifiName(Context context) {
|
||||||
|
WifiManager manager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
|
||||||
|
if (Objects.requireNonNull(manager).isWifiEnabled()) {
|
||||||
|
WifiInfo wifiInfo = manager.getConnectionInfo();
|
||||||
|
if (wifiInfo != null) {
|
||||||
|
NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState());
|
||||||
|
if (state == NetworkInfo.DetailedState.CONNECTED || state == NetworkInfo.DetailedState.OBTAINING_IPADDR) {
|
||||||
|
return wifiInfo.getSSID();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Boolean checkIfUserIsInRangeOfWmiWifi(Context context) {
|
||||||
|
return Objects.equals(getWifiName(context), Const.WMI_SSID_NAME);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package com.uam.wmi.findmytutor.utils;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
public class WrapContentLinearLayoutManager extends LinearLayoutManager {
|
||||||
|
public WrapContentLinearLayoutManager(Context context) {
|
||||||
|
super(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
|
||||||
|
try {
|
||||||
|
super.onLayoutChildren(recycler, state);
|
||||||
|
} catch (IndexOutOfBoundsException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
13
app/src/main/res/drawable/ic_add_person.xml
Normal file
13
app/src/main/res/drawable/ic_add_person.xml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
|
||||||
|
<path
|
||||||
|
android:pathData="M0 0h24v24H0z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFFFF"
|
||||||
|
android:pathData="M15 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm-9-2V7H4v3H1v2h3v3h2v-3h3v-2H6zm9 4c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z" />
|
||||||
|
</vector>
|
15
app/src/main/res/drawable/trip_orgin.xml
Normal file
15
app/src/main/res/drawable/trip_orgin.xml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
|
||||||
|
<path
|
||||||
|
android:pathData="M0 0h24v24H0z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#FFFF"
|
||||||
|
android:pathData="M2 12C2 6.48 6.48 2 12 2s10 4.48 10 10-4.48 10-10 10S2 17.52 2 12zm10 6c3.31 0 6-2.69 6-6s-2.69-6-6-6-6 2.69-6 6 2.69 6 6 6z" />
|
||||||
|
<path
|
||||||
|
android:pathData="M0 0h24v24H0z" />
|
||||||
|
</vector>
|
13
app/src/main/res/drawable/user_modal_title.xml
Normal file
13
app/src/main/res/drawable/user_modal_title.xml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:pathData="M22 10l-6-6H4c-1.1 0-2 0.9-2 2v12.01c0 1.1 0.9 1.99 2 1.99l16-0.01c1.1 0 2-0.89 2-1.99v-8zm-7-4.5l5.5 5.5H15V5.5z" />
|
||||||
|
<path
|
||||||
|
android:pathData="M0 0h24v24H0V0z" />
|
||||||
|
</vector>
|
83
app/src/main/res/layout/activity_black_list.xml
Normal file
83
app/src/main/res/layout/activity_black_list.xml
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:fitsSystemWindows="true"
|
||||||
|
android:id="@+id/activity_blacklist_container"
|
||||||
|
tools:context=".activity.BlackList">
|
||||||
|
|
||||||
|
<android.support.design.widget.AppBarLayout
|
||||||
|
android:id="@+id/app_bar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/app_bar_height"
|
||||||
|
android:fitsSystemWindows="true"
|
||||||
|
android:theme="@style/AppTheme.AppBarOverlay">
|
||||||
|
|
||||||
|
<android.support.design.widget.CollapsingToolbarLayout
|
||||||
|
android:id="@+id/toolbar_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:fitsSystemWindows="true"
|
||||||
|
app:contentScrim="?attr/colorPrimary"
|
||||||
|
app:layout_scrollFlags="scroll|exitUntilCollapsed"
|
||||||
|
app:expandedTitleGravity="top|right"
|
||||||
|
app:toolbarId="@+id/toolbar"
|
||||||
|
>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:gravity="left|bottom"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:layout_marginBottom="20dp"
|
||||||
|
app:layout_collapseMode="parallax">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:text="@string/block_the_users"
|
||||||
|
android:textSize="15sp"/>
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/switch_blacklist_toggle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:thumbTextPadding="45dp"
|
||||||
|
android:text="BLACKLIST TEXT SWITCH" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<android.support.v7.widget.Toolbar
|
||||||
|
android:id="@+id/toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
app:layout_collapseMode="pin"
|
||||||
|
app:popupTheme="@style/AppTheme.PopupOverlay"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</android.support.design.widget.CollapsingToolbarLayout>
|
||||||
|
</android.support.design.widget.AppBarLayout>
|
||||||
|
|
||||||
|
<include layout="@layout/content_black_list" />
|
||||||
|
|
||||||
|
<android.support.design.widget.FloatingActionButton
|
||||||
|
android:id="@+id/add_to_black_list_fab"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="@dimen/fab_margin"
|
||||||
|
android:layout_marginTop="-322dp"
|
||||||
|
app:layout_anchor="@id/app_bar"
|
||||||
|
app:layout_anchorGravity="bottom|end"
|
||||||
|
app:srcCompat="@drawable/ic_add_person"
|
||||||
|
app:useCompatPadding="true"
|
||||||
|
tools:srcCompat="@tools:sample/backgrounds/scenic" />
|
||||||
|
|
||||||
|
<!-- A RecyclerView with some commonly used attributes -->
|
||||||
|
|
||||||
|
|
||||||
|
</android.support.design.widget.CoordinatorLayout>
|
@ -4,13 +4,13 @@
|
|||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
android:fontFamily="@font/lato_regular"
|
||||||
android:gravity="center_horizontal"
|
android:gravity="center_horizontal"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:paddingBottom="@dimen/activity_vertical_margin"
|
|
||||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
|
||||||
android:paddingTop="@dimen/activity_vertical_margin"
|
android:paddingTop="@dimen/activity_vertical_margin"
|
||||||
android:fontFamily="@font/lato_regular"
|
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||||
|
android:paddingBottom="@dimen/activity_vertical_margin"
|
||||||
tools:context=".activity.LoginActivity">
|
tools:context=".activity.LoginActivity">
|
||||||
|
|
||||||
|
|
||||||
@ -58,6 +58,7 @@
|
|||||||
|
|
||||||
<android.support.design.widget.TextInputLayout
|
<android.support.design.widget.TextInputLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
app:passwordToggleEnabled="true"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
@ -74,7 +75,6 @@
|
|||||||
|
|
||||||
</android.support.design.widget.TextInputLayout>
|
</android.support.design.widget.TextInputLayout>
|
||||||
|
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/email_sign_in_button"
|
android:id="@+id/email_sign_in_button"
|
||||||
style="?android:textAppearanceSmall"
|
style="?android:textAppearanceSmall"
|
||||||
@ -84,7 +84,6 @@
|
|||||||
android:text="@string/action_log_in"
|
android:text="@string/action_log_in"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
@ -5,30 +5,29 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:fontFamily="@font/lato_regular"
|
android:fontFamily="@font/lato_regular"
|
||||||
|
android:id="@+id/activity_tutor_tab"
|
||||||
tools:context=".activity.TutorTab">
|
tools:context=".activity.TutorTab">
|
||||||
|
|
||||||
<android.support.design.widget.AppBarLayout
|
<android.support.design.widget.AppBarLayout
|
||||||
|
android:id="@+id/app_bar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="@dimen/app_bar_height"
|
||||||
|
android:fitsSystemWindows="true"
|
||||||
android:theme="@style/AppTheme.AppBarOverlay">
|
android:theme="@style/AppTheme.AppBarOverlay">
|
||||||
|
|
||||||
<android.support.v7.widget.Toolbar
|
<android.support.design.widget.CollapsingToolbarLayout
|
||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="match_parent"
|
||||||
android:background="?attr/colorPrimary"
|
android:fitsSystemWindows="true"
|
||||||
app:popupTheme="@style/AppTheme.PopupOverlay" />
|
app:contentScrim="?attr/colorPrimary"
|
||||||
|
app:layout_scrollFlags="scroll|exitUntilCollapsed"
|
||||||
|
app:expandedTitleGravity="top|right"
|
||||||
|
app:toolbarId="@+id/toolbar"
|
||||||
|
/>
|
||||||
|
|
||||||
</android.support.design.widget.AppBarLayout>
|
</android.support.design.widget.AppBarLayout>
|
||||||
|
|
||||||
<include layout="@layout/content_tutor_tab" />
|
<include layout="@layout/content_tutor_tab" />
|
||||||
|
|
||||||
<android.support.design.widget.FloatingActionButton
|
|
||||||
android:id="@+id/fab"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="bottom|end"
|
|
||||||
android:layout_margin="@dimen/fab_margin"
|
|
||||||
app:srcCompat="@android:drawable/ic_dialog_email" />
|
|
||||||
|
|
||||||
</android.support.design.widget.CoordinatorLayout>
|
</android.support.design.widget.CoordinatorLayout>
|
83
app/src/main/res/layout/activity_white_list.xml
Normal file
83
app/src/main/res/layout/activity_white_list.xml
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:fitsSystemWindows="true"
|
||||||
|
android:id="@+id/activity_whitelist_container"
|
||||||
|
tools:context=".activity.WhiteList">
|
||||||
|
|
||||||
|
<android.support.design.widget.AppBarLayout
|
||||||
|
android:id="@+id/app_bar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/app_bar_height"
|
||||||
|
android:fitsSystemWindows="true"
|
||||||
|
android:theme="@style/AppTheme.AppBarOverlay">
|
||||||
|
|
||||||
|
<android.support.design.widget.CollapsingToolbarLayout
|
||||||
|
android:id="@+id/toolbar_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:fitsSystemWindows="true"
|
||||||
|
app:contentScrim="?attr/colorPrimary"
|
||||||
|
app:layout_scrollFlags="scroll|exitUntilCollapsed"
|
||||||
|
app:expandedTitleGravity="top|right"
|
||||||
|
app:toolbarId="@+id/toolbar"
|
||||||
|
>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:gravity="left|bottom"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:layout_marginBottom="20dp"
|
||||||
|
app:layout_collapseMode="parallax">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:text="@string/be_visible_for_these_users"
|
||||||
|
android:textSize="15sp"/>
|
||||||
|
|
||||||
|
<Switch
|
||||||
|
android:id="@+id/switch_whitelist_toggle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:thumbTextPadding="45dp"
|
||||||
|
android:text="WHITELIST TEXT SWITCH" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<android.support.v7.widget.Toolbar
|
||||||
|
android:id="@+id/toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
app:layout_collapseMode="pin"
|
||||||
|
app:popupTheme="@style/AppTheme.PopupOverlay"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</android.support.design.widget.CollapsingToolbarLayout>
|
||||||
|
</android.support.design.widget.AppBarLayout>
|
||||||
|
|
||||||
|
<include layout="@layout/content_white_list" />
|
||||||
|
|
||||||
|
<android.support.design.widget.FloatingActionButton
|
||||||
|
android:id="@+id/add_to_white_list_fab"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="@dimen/fab_margin"
|
||||||
|
android:layout_marginTop="-322dp"
|
||||||
|
app:layout_anchor="@id/app_bar"
|
||||||
|
app:layout_anchorGravity="bottom|end"
|
||||||
|
app:srcCompat="@drawable/ic_add_person"
|
||||||
|
app:useCompatPadding="true"
|
||||||
|
tools:srcCompat="@tools:sample/backgrounds/scenic" />
|
||||||
|
|
||||||
|
<!-- A RecyclerView with some commonly used attributes -->
|
||||||
|
|
||||||
|
|
||||||
|
</android.support.design.widget.CoordinatorLayout>
|
42
app/src/main/res/layout/black_list_fab_modal.xml
Normal file
42
app/src/main/res/layout/black_list_fab_modal.xml
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:fontFamily="@font/lato_regular"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||||
|
android:paddingTop="@dimen/activity_vertical_margin"
|
||||||
|
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||||
|
android:paddingBottom="@dimen/activity_vertical_margin">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/black_list_modal_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignStart="@+id/black_list_modal_input"
|
||||||
|
android:layout_marginBottom="@dimen/dimen_10"
|
||||||
|
android:fontFamily="sans-serif-medium"
|
||||||
|
android:lineSpacingExtra="8sp"
|
||||||
|
android:text="@string/black_list_title"
|
||||||
|
android:textColor="@color/colorAccent"
|
||||||
|
android:textSize="@dimen/lbl_new_note_title"
|
||||||
|
android:textStyle="normal" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/black_list_modal_input"
|
||||||
|
android:layout_width="315dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_marginTop="50dp"
|
||||||
|
android:ems="10"
|
||||||
|
android:hint="@string/index_user"
|
||||||
|
android:maxLength="30"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:requiresFadingEdge="vertical"
|
||||||
|
android:scrollbars="vertical"
|
||||||
|
android:textColor="@color/note_list_text" />
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
48
app/src/main/res/layout/black_list_row.xml
Normal file
48
app/src/main/res/layout/black_list_row.xml
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="90dp"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:paddingLeft="10dp"
|
||||||
|
android:paddingTop="@dimen/dimen_10"
|
||||||
|
android:paddingRight="10dp"
|
||||||
|
android:fontFamily="@font/lato_regular"
|
||||||
|
android:paddingBottom="@dimen/dimen_10">
|
||||||
|
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/firstName"
|
||||||
|
android:layout_width="271dp"
|
||||||
|
android:layout_height="22dp"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_marginStart="12dp"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:textColor="@color/note_list_text"
|
||||||
|
android:textSize="15sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/lastName"
|
||||||
|
android:layout_width="270dp"
|
||||||
|
android:layout_height="22dp"
|
||||||
|
android:layout_below="@+id/firstName"
|
||||||
|
android:layout_alignEnd="@+id/firstName"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:layout_marginEnd="0dp"
|
||||||
|
android:textColor="@color/note_list_text"
|
||||||
|
android:textSize="15sp" />
|
||||||
|
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/removeUserImageButton"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/firstName"
|
||||||
|
android:layout_toEndOf="@+id/firstName"
|
||||||
|
android:background="@null"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
app:srcCompat="@drawable/abc_ic_clear_material" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
48
app/src/main/res/layout/content_black_list.xml
Normal file
48
app/src/main/res/layout/content_black_list.xml
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior"
|
||||||
|
tools:context=".activity.UsersListFragment"
|
||||||
|
android:fontFamily="@font/lato_regular"
|
||||||
|
tools:showIn="@layout/users_list_main">
|
||||||
|
|
||||||
|
|
||||||
|
<android.support.v7.widget.RecyclerView
|
||||||
|
android:id="@+id/recycler_view_blacklist"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/black_list_empty_text_view"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_marginTop="@dimen/margin_top_no_notes"
|
||||||
|
android:fontFamily="sans-serif-light"
|
||||||
|
android:text="@string/loading"
|
||||||
|
android:textColor="@color/msg_no_notes"
|
||||||
|
android:textSize="@dimen/msg_no_notes" />
|
||||||
|
|
||||||
|
<com.github.ybq.android.spinkit.SpinKitView
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:id="@+id/loader"
|
||||||
|
style="@style/SpinKitView.Large.Wave"
|
||||||
|
android:layout_width="150dp"
|
||||||
|
android:layout_height="150dp"
|
||||||
|
app:SpinKit_Color="@color/msg_no_notes"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_marginTop="@dimen/margin_top_no_notes"
|
||||||
|
android:fontFamily="sans-serif-light"
|
||||||
|
android:text="@string/loading"
|
||||||
|
android:textColor="@color/msg_no_notes"
|
||||||
|
android:textSize="@dimen/msg_no_notes" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
@ -1,188 +1,61 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
<ScrollView
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:mapbox="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
android:fitsSystemWindows="true"
|
||||||
|
android:id="@+id/activity_tutor_content"
|
||||||
|
tools:context=".activity.TutorTab">
|
||||||
|
|
||||||
|
|
||||||
|
<android.support.design.widget.AppBarLayout
|
||||||
|
android:id="@+id/app_bar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="132dp"
|
||||||
|
android:fitsSystemWindows="true"
|
||||||
|
android:theme="@style/AppTheme.AppBarOverlay">
|
||||||
|
|
||||||
|
<android.support.design.widget.CollapsingToolbarLayout
|
||||||
|
android:id="@+id/toolbar_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:fitsSystemWindows="true"
|
||||||
|
app:contentScrim="?attr/colorPrimary"
|
||||||
|
app:expandedTitleGravity="top|right"
|
||||||
|
app:layout_scrollFlags="scroll|exitUntilCollapsed"
|
||||||
|
app:toolbarId="@+id/toolbar">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginBottom="20dp"
|
||||||
|
android:gravity="left|bottom"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:fontFamily="@font/lato_regular"
|
android:padding="10dp"
|
||||||
android:paddingLeft="@dimen/activity_margin"
|
app:layout_collapseMode="parallax">
|
||||||
android:paddingRight="@dimen/activity_margin"
|
|
||||||
android:paddingTop="@dimen/activity_margin">
|
|
||||||
<LinearLayout android:layout_width="fill_parent"
|
|
||||||
android:id="@+id/linearLayout1" android:layout_height="wrap_content">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/scrapTutorTab"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1.0"
|
|
||||||
android:text="@string/scrap_tutor_tab" />
|
|
||||||
<ImageButton
|
|
||||||
android:id="@+id/contentTutorTabInfoImageButton"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="end"
|
|
||||||
mapbox:srcCompat="@drawable/outline_info_24"/>
|
|
||||||
</LinearLayout>
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/userName"
|
android:id="@+id/userName"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="@dimen/dimen_10"
|
android:layout_alignParentRight="true"
|
||||||
android:fontFamily="sans-serif-medium"
|
android:text="User Name"
|
||||||
android:lineSpacingExtra="8sp"
|
android:textSize="22sp" />
|
||||||
android:textColor="@color/mapboxRedDark"
|
|
||||||
android:textSize="@dimen/lbl_new_note_title"
|
|
||||||
android:textStyle="normal" />
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="vertical"
|
|
||||||
>
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/personalInfoTitle"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:paddingTop="0dp"
|
|
||||||
android:paddingBottom="0dp"
|
|
||||||
android:textColor="@color/mapboxRedDark"
|
|
||||||
android:text="@string/personalInfoTitle"/>
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
>
|
|
||||||
<android.support.design.widget.TextInputLayout
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="0.7">
|
|
||||||
|
|
||||||
<android.support.design.widget.TextInputEditText
|
|
||||||
android:id="@+id/userDepartment"
|
|
||||||
android:maxLines="1"
|
|
||||||
android:inputType="text"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:hint="@string/hint_department"
|
|
||||||
android:lineSpacingExtra="8sp"
|
|
||||||
android:paddingTop="5dp"
|
|
||||||
android:textColor="@color/note_list_text" />
|
|
||||||
</android.support.design.widget.TextInputLayout>
|
|
||||||
<android.support.design.widget.TextInputLayout
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="0.3">
|
|
||||||
|
|
||||||
<android.support.design.widget.TextInputEditText
|
|
||||||
android:id="@+id/userRoom"
|
|
||||||
android:maxLines="1"
|
|
||||||
android:inputType="text"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:hint="@string/hint_room"
|
|
||||||
android:lineSpacingExtra="8sp"
|
|
||||||
android:paddingTop="5dp"
|
|
||||||
android:textColor="@color/note_list_text" />
|
|
||||||
</android.support.design.widget.TextInputLayout>
|
|
||||||
</LinearLayout>
|
|
||||||
<android.support.design.widget.TextInputLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content">
|
|
||||||
<android.support.design.widget.TextInputEditText
|
|
||||||
android:id="@+id/userEmail"
|
|
||||||
android:maxLines="1"
|
|
||||||
android:inputType="text"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:lineSpacingExtra="8sp"
|
|
||||||
android:paddingTop="5dp"
|
|
||||||
android:textColor="@color/note_list_text"
|
|
||||||
android:hint="@string/hint_email"
|
|
||||||
/>
|
|
||||||
</android.support.design.widget.TextInputLayout>
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<android.support.v7.widget.Toolbar
|
||||||
<TextView
|
android:id="@+id/toolbar"
|
||||||
android:id="@+id/dutyTitle"
|
|
||||||
android:textSize="16sp"
|
|
||||||
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="?attr/actionBarSize"
|
||||||
android:paddingTop="0dp"
|
app:layout_collapseMode="pin"
|
||||||
android:paddingBottom="0dp"
|
app:popupTheme="@style/AppTheme.PopupOverlay" />
|
||||||
android:textColor="@color/mapboxRedDark"
|
|
||||||
android:text="@string/dutyTitle"/>
|
|
||||||
|
|
||||||
<android.support.v7.widget.RecyclerView
|
</android.support.design.widget.CollapsingToolbarLayout>
|
||||||
android:id="@+id/dutyHourView"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="100dp"
|
|
||||||
android:scrollbars="vertical" />
|
|
||||||
|
|
||||||
<LinearLayout android:layout_width="fill_parent"
|
</android.support.design.widget.AppBarLayout>
|
||||||
android:id="@+id/linearLayout1" android:layout_height="wrap_content">
|
|
||||||
|
|
||||||
|
<include layout="@layout/content_tutor_tab_layout" />
|
||||||
|
|
||||||
<Button
|
</android.support.design.widget.CoordinatorLayout>
|
||||||
android:id="@+id/addDuty"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_weight="1.0"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
|
|
||||||
android:layout_gravity="end"
|
|
||||||
android:text="@string/addDuty" />
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:id="@+id/userNoteTitle"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:paddingTop="0dp"
|
|
||||||
android:paddingBottom="0dp"
|
|
||||||
android:textColor="@color/mapboxRedDark"
|
|
||||||
android:text="@string/userNoteTitle"/>
|
|
||||||
<android.support.design.widget.TextInputLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content">
|
|
||||||
<android.support.design.widget.TextInputEditText
|
|
||||||
|
|
||||||
android:id="@+id/userNote"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="150dp"
|
|
||||||
android:lineSpacingExtra="8sp"
|
|
||||||
android:paddingTop="5dp"
|
|
||||||
android:textColor="@color/note_list_text"
|
|
||||||
android:hint="@string/tutorTabHint"
|
|
||||||
android:inputType="textMultiLine"
|
|
||||||
android:maxLength="1000"
|
|
||||||
android:maxLines="7"
|
|
||||||
android:requiresFadingEdge="vertical"
|
|
||||||
android:scrollbars="vertical"/>
|
|
||||||
</android.support.design.widget.TextInputLayout>
|
|
||||||
|
|
||||||
|
|
||||||
<Button
|
|
||||||
android:id="@+id/saveButon"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/saveButton" />
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</ScrollView>
|
|
||||||
|
|
215
app/src/main/res/layout/content_tutor_tab_layout.xml
Normal file
215
app/src/main/res/layout/content_tutor_tab_layout.xml
Normal file
@ -0,0 +1,215 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:fillViewport="true"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior"
|
||||||
|
tools:context=".activity.TutorTab"
|
||||||
|
android:fontFamily="@font/lato_regular"
|
||||||
|
tools:showIn="@layout/content_tutor_tab">
|
||||||
|
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:fontFamily="@font/lato_regular"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior"
|
||||||
|
tools:context=".activity.TutorTab">
|
||||||
|
|
||||||
|
<android.support.design.widget.TextInputLayout
|
||||||
|
android:id="@+id/userDepartmentLayout"
|
||||||
|
android:layout_width="189dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/userEmailLayout"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_marginStart="25dp"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:layout_marginEnd="30dp"
|
||||||
|
android:layout_toEndOf="@+id/userRoomLayout">
|
||||||
|
|
||||||
|
<android.support.design.widget.TextInputEditText
|
||||||
|
android:id="@+id/userDepartment"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/userDepartmentLayout"
|
||||||
|
android:layout_alignStart="@+id/userDepartmentLayout"
|
||||||
|
android:layout_alignTop="@+id/userDepartmentLayout"
|
||||||
|
android:hint="@string/hint_department"
|
||||||
|
android:inputType="text"
|
||||||
|
android:lineSpacingExtra="8sp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:paddingTop="5dp"
|
||||||
|
android:textColor="@color/note_list_text" />
|
||||||
|
</android.support.design.widget.TextInputLayout>
|
||||||
|
|
||||||
|
<android.support.design.widget.TextInputLayout
|
||||||
|
android:id="@+id/userRoomLayout"
|
||||||
|
android:layout_width="115dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/userEmailLayout"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_marginStart="30dp"
|
||||||
|
android:layout_marginTop="10dp">
|
||||||
|
|
||||||
|
<android.support.design.widget.TextInputEditText
|
||||||
|
android:id="@+id/userRoom"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
|
||||||
|
android:layout_below="@+id/userRoomLayout"
|
||||||
|
android:layout_alignTop="@+id/userRoomLayout"
|
||||||
|
android:hint="@string/hint_room"
|
||||||
|
android:inputType="text"
|
||||||
|
android:lineSpacingExtra="8sp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:paddingTop="5dp"
|
||||||
|
android:textColor="@color/note_list_text" />
|
||||||
|
</android.support.design.widget.TextInputLayout>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/personalInfoTitle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignStart="@+id/userRoomLayout"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_marginTop="30dp"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:text="@string/personalInfoTitle"
|
||||||
|
android:textColor="@color/mapboxRedDark"
|
||||||
|
android:textSize="18sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<android.support.design.widget.TextInputLayout
|
||||||
|
android:id="@+id/userEmailLayout"
|
||||||
|
android:layout_width="326dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_marginStart="30dp"
|
||||||
|
android:layout_marginTop="70dp"
|
||||||
|
android:layout_marginEnd="30dp">
|
||||||
|
|
||||||
|
<android.support.design.widget.TextInputEditText
|
||||||
|
android:id="@+id/userEmail"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignStart="@+id/userEmailLayout"
|
||||||
|
android:layout_alignTop="@+id/userEmailLayout"
|
||||||
|
android:hint="@string/hint_email"
|
||||||
|
android:inputType="textEmailAddress"
|
||||||
|
android:lineSpacingExtra="8sp"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:paddingTop="5dp"
|
||||||
|
android:textColor="@color/note_list_text" />
|
||||||
|
</android.support.design.widget.TextInputLayout>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/dutyTitle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/userRoomLayout"
|
||||||
|
android:layout_alignStart="@+id/userRoomLayout"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:layout_marginEnd="30dp"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/dutyTitle"
|
||||||
|
android:textColor="@color/mapboxRedDark"
|
||||||
|
android:textSize="18sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<android.support.v7.widget.RecyclerView
|
||||||
|
android:id="@+id/dutyHourView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="120dp"
|
||||||
|
android:layout_below="@+id/addDuty"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_marginStart="30dp"
|
||||||
|
android:layout_marginTop="15dp"
|
||||||
|
android:layout_marginEnd="50dp"
|
||||||
|
android:scrollbars="vertical" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/userNoteTitle"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:layout_marginStart="5dp"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/dutyHourView"
|
||||||
|
android:layout_alignStart="@+id/userRoomLayout"
|
||||||
|
android:text="@string/userNoteTitle"
|
||||||
|
android:textColor="@color/mapboxRedDark"
|
||||||
|
android:textSize="18sp" />
|
||||||
|
|
||||||
|
<android.support.v7.widget.AppCompatButton
|
||||||
|
android:id="@+id/addDuty"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
app:backgroundTint="@color/colorPrimary"
|
||||||
|
android:layout_alignBaseline="@+id/dutyTitle"
|
||||||
|
android:layout_toEndOf="@+id/dutyTitle"
|
||||||
|
android:stateListAnimator="@null"
|
||||||
|
|
||||||
|
android:text="@string/addDuty" />
|
||||||
|
|
||||||
|
<android.support.design.widget.TextInputLayout
|
||||||
|
android:id="@+id/userNoteLayout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/userNoteTitle"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_marginStart="30dp"
|
||||||
|
android:layout_marginEnd="30dp"
|
||||||
|
android:layout_marginTop="15dp"
|
||||||
|
app:counterEnabled="true"
|
||||||
|
app:counterMaxLength="1000">
|
||||||
|
|
||||||
|
<android.support.design.widget.TextInputEditText
|
||||||
|
android:id="@+id/userNote"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="100dp"
|
||||||
|
android:layout_alignStart="@+id/userNoteLayout"
|
||||||
|
android:hint="@string/tutorTabHint"
|
||||||
|
android:inputType="textMultiLine"
|
||||||
|
android:lineSpacingExtra="8sp"
|
||||||
|
android:maxLength="1000"
|
||||||
|
android:maxLines="7"
|
||||||
|
android:paddingTop="15dp"
|
||||||
|
android:requiresFadingEdge="vertical"
|
||||||
|
android:scrollbars="vertical"
|
||||||
|
android:textColor="@color/note_list_text" />
|
||||||
|
</android.support.design.widget.TextInputLayout>
|
||||||
|
|
||||||
|
<android.support.v7.widget.AppCompatButton
|
||||||
|
android:id="@+id/scrapTutorTab"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignBaseline="@+id/personalInfoTitle"
|
||||||
|
android:layout_alignEnd="@+id/userEmailLayout"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
app:backgroundTint="@color/colorPrimary"
|
||||||
|
android:stateListAnimator="@null"
|
||||||
|
android:text="@string/scrap_tutor_tab" />
|
||||||
|
|
||||||
|
<android.support.v7.widget.AppCompatButton
|
||||||
|
android:id="@+id/saveButton"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="30dp"
|
||||||
|
android:layout_marginEnd="-20dp"
|
||||||
|
android:layout_below="@+id/userNoteLayout"
|
||||||
|
android:layout_alignEnd="@+id/dutyHourView"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
app:backgroundTint="@color/colorPrimary"
|
||||||
|
android:stateListAnimator="@null"
|
||||||
|
|
||||||
|
android:text="@string/saveButton" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
</android.support.v4.widget.NestedScrollView>
|
47
app/src/main/res/layout/content_white_list.xml
Normal file
47
app/src/main/res/layout/content_white_list.xml
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior"
|
||||||
|
tools:context=".activity.UsersListFragment"
|
||||||
|
android:fontFamily="@font/lato_regular"
|
||||||
|
tools:showIn="@layout/users_list_main">
|
||||||
|
|
||||||
|
|
||||||
|
<android.support.v7.widget.RecyclerView
|
||||||
|
android:id="@+id/recycler_view_whitelist"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/white_list_empty_text_view"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_marginTop="@dimen/margin_top_no_notes"
|
||||||
|
android:fontFamily="sans-serif-light"
|
||||||
|
android:text="@string/loading"
|
||||||
|
android:textColor="@color/msg_no_notes"
|
||||||
|
android:textSize="@dimen/msg_no_notes" />
|
||||||
|
|
||||||
|
<com.github.ybq.android.spinkit.SpinKitView
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:id="@+id/loader"
|
||||||
|
style="@style/SpinKitView.Large.Wave"
|
||||||
|
android:layout_width="150dp"
|
||||||
|
android:layout_height="150dp"
|
||||||
|
app:SpinKit_Color="@color/msg_no_notes"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_marginTop="@dimen/margin_top_no_notes"
|
||||||
|
android:fontFamily="sans-serif-light"
|
||||||
|
android:text="@string/loading"
|
||||||
|
android:textColor="@color/msg_no_notes"
|
||||||
|
android:textSize="@dimen/msg_no_notes" />
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
@ -33,7 +33,9 @@
|
|||||||
android:inputType="text"
|
android:inputType="text"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:text="@tools:sample/date/hhmm" />
|
tools:text="@tools:sample/date/hhmm"
|
||||||
|
android:focusableInTouchMode="false"
|
||||||
|
/>
|
||||||
</android.support.design.widget.TextInputLayout>
|
</android.support.design.widget.TextInputLayout>
|
||||||
|
|
||||||
<android.support.design.widget.TextInputLayout
|
<android.support.design.widget.TextInputLayout
|
||||||
@ -48,7 +50,9 @@
|
|||||||
android:inputType="text"
|
android:inputType="text"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:text="@tools:sample/date/hhmm" />
|
tools:text="@tools:sample/date/hhmm"
|
||||||
|
android:focusableInTouchMode="false"
|
||||||
|
/>
|
||||||
</android.support.design.widget.TextInputLayout>
|
</android.support.design.widget.TextInputLayout>
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
|
13
app/src/main/res/layout/home_layout.xml
Normal file
13
app/src/main/res/layout/home_layout.xml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:text="Homw Tab"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceLarge"/>
|
||||||
|
</RelativeLayout>
|
39
app/src/main/res/layout/info_popup_blacklist.xml
Normal file
39
app/src/main/res/layout/info_popup_blacklist.xml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:background="@drawable/layout_bg"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:textColor="@color/half_black">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textViewP1_info_icon_blacklist_p1"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="5dp"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="@string/info_icon_blacklist_p1"
|
||||||
|
android:textColor="@color/half_black" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textViewP2_info_icon_blacklist_p2"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="5dp"
|
||||||
|
android:layout_marginTop="20dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="@string/info_icon_blacklist_p2"
|
||||||
|
android:textColor="@color/half_black" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textViewP3_info_icon_blacklist_p3"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="5dp"
|
||||||
|
android:layout_marginTop="20dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="@string/info_icon_blacklist_p3"
|
||||||
|
android:textColor="@color/half_black" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
@ -72,4 +72,6 @@
|
|||||||
android:text="@string/info_icon_userlist_summary"
|
android:text="@string/info_icon_userlist_summary"
|
||||||
android:textColor="@color/half_black"/>
|
android:textColor="@color/half_black"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
39
app/src/main/res/layout/info_popup_whitelist.xml
Normal file
39
app/src/main/res/layout/info_popup_whitelist.xml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:background="@drawable/layout_bg"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:textColor="@color/half_black">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textViewP1_info_icon_whitelist_p1"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="5dp"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="@string/info_icon_whitelist_p1"
|
||||||
|
android:textColor="@color/half_black" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textViewP2_info_icon_whitelist_p2"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="5dp"
|
||||||
|
android:layout_marginTop="20dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="@string/info_icon_whitelist_p2"
|
||||||
|
android:textColor="@color/half_black" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textViewP3_info_icon_whitelist_p3"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="5dp"
|
||||||
|
android:layout_marginTop="20dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="@string/info_icon_whitelist_p3"
|
||||||
|
android:textColor="@color/half_black" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
@ -24,14 +24,14 @@
|
|||||||
android:textStyle="normal" />
|
android:textStyle="normal" />
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/feedback_input"
|
android:id="@+id/manual_input"
|
||||||
android:layout_width="315dp"
|
android:layout_width="315dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentTop="true"
|
android:layout_alignParentTop="true"
|
||||||
android:layout_centerHorizontal="true"
|
android:layout_centerHorizontal="true"
|
||||||
android:layout_marginTop="50dp"
|
android:layout_marginTop="50dp"
|
||||||
android:ems="10"
|
android:ems="10"
|
||||||
android:hint="@string/modal_feedback_hint"
|
android:hint="@string/modal_manual_hint"
|
||||||
android:maxLength="30"
|
android:maxLength="30"
|
||||||
android:maxLines="1"
|
android:maxLines="1"
|
||||||
android:requiresFadingEdge="vertical"
|
android:requiresFadingEdge="vertical"
|
||||||
|
@ -1,13 +1,23 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:gravity="right"
|
android:gravity="right"
|
||||||
|
android:fontFamily="@font/lato_regular"
|
||||||
>
|
>
|
||||||
<Button xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
|
<android.support.v7.widget.AppCompatButton
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:id="@+id/button_choose_from_map"
|
android:id="@+id/button_choose_from_map"
|
||||||
android:text="@string/preference_manual_location_button"
|
android:text="@string/preference_manual_location_button"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
app:backgroundTint="@color/top_user_modal"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:stateListAnimator="@null"
|
||||||
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="90dp"
|
android:layout_height="90dp"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
@ -13,36 +13,48 @@
|
|||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/firstName"
|
android:id="@+id/firstName"
|
||||||
android:layout_width="271dp"
|
android:layout_width="270dp"
|
||||||
android:layout_height="22dp"
|
android:layout_height="22dp"
|
||||||
android:layout_alignParentStart="true"
|
android:layout_alignParentStart="true"
|
||||||
android:layout_alignParentTop="true"
|
android:layout_alignParentTop="true"
|
||||||
android:layout_marginStart="12dp"
|
android:layout_marginStart="12dp"
|
||||||
android:layout_marginTop="10dp"
|
android:layout_marginTop="10dp"
|
||||||
|
|
||||||
android:textColor="@color/note_list_text"
|
android:textColor="@color/note_list_text"
|
||||||
android:textSize="15sp" />
|
android:textSize="15sp" />
|
||||||
|
|
||||||
|
|
||||||
|
<com.github.ybq.android.spinkit.SpinKitView xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:id="@+id/loader"
|
||||||
|
style="@style/SpinKitView.Large.Wave"
|
||||||
|
android:layout_marginStart="12dp"
|
||||||
|
android:layout_marginTop="35dp"
|
||||||
|
android:layout_width="30dp"
|
||||||
|
android:layout_height="30dp"
|
||||||
|
app:SpinKit_Color="@color/colorAccent" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/lastName"
|
android:id="@+id/lastSeen"
|
||||||
android:layout_width="270dp"
|
android:layout_width="270dp"
|
||||||
android:layout_height="22dp"
|
android:layout_height="22dp"
|
||||||
|
android:layout_marginStart="12dp"
|
||||||
android:layout_below="@+id/firstName"
|
android:layout_below="@+id/firstName"
|
||||||
android:layout_alignEnd="@+id/firstName"
|
android:layout_alignEnd="@+id/firstName"
|
||||||
android:layout_marginTop="10dp"
|
android:layout_marginTop="10dp"
|
||||||
android:layout_marginEnd="0dp"
|
android:layout_marginEnd="0dp"
|
||||||
android:textColor="@color/note_list_text"
|
android:layout_alignParentStart="true"
|
||||||
android:textSize="15sp" />
|
android:textColor="#979797"
|
||||||
|
android:textSize="13sp" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/isOnline"
|
android:id="@+id/isOnline"
|
||||||
android:layout_width="48dp"
|
android:layout_width="50dp"
|
||||||
android:layout_height="30dp"
|
android:layout_height="30dp"
|
||||||
android:layout_below="@+id/firstName"
|
android:layout_below="@+id/firstName"
|
||||||
android:layout_marginStart="7dp"
|
android:layout_marginStart="7dp"
|
||||||
android:layout_marginTop="-10dp"
|
android:layout_marginTop="-10dp"
|
||||||
android:layout_toEndOf="@+id/firstName"
|
|
||||||
android:textColor="@color/note_list_text"
|
android:textColor="@color/note_list_text"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
android:textSize="@dimen/note_list_text" />
|
android:textSize="@dimen/note_list_text" />
|
||||||
|
|
||||||
|
|
||||||
|
56
app/src/main/res/layout/tutors_list_tabs.xml
Normal file
56
app/src/main/res/layout/tutors_list_tabs.xml
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<android.support.v4.app.FragmentTabHost
|
||||||
|
android:id="@+id/tabHost"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_centerHorizontal="true">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TabWidget
|
||||||
|
android:id="@android:id/tabs"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="30dp"/>
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@android:id/tabcontent"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/tab1"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/tab2"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/realtabcontent"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:layout_below="@+id/tabLinear"/>
|
||||||
|
|
||||||
|
</android.support.v4.app.FragmentTabHost>
|
||||||
|
</RelativeLayout>
|
@ -32,12 +32,15 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="15dp"
|
android:layout_marginBottom="15dp"
|
||||||
|
android:drawablePadding="10dp"
|
||||||
android:gravity="center_horizontal"
|
android:gravity="center_horizontal"
|
||||||
|
android:text="Name Surname"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:textSize="@dimen/lbl_new_note_title"
|
android:textSize="@dimen/lbl_new_note_title"
|
||||||
android:textStyle="normal"
|
android:textStyle="normal"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent" />
|
app:layout_constraintStart_toStartOf="parent" />
|
||||||
|
|
||||||
</android.support.constraint.ConstraintLayout>
|
</android.support.constraint.ConstraintLayout>
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
@ -48,6 +51,28 @@
|
|||||||
android:layout_marginTop="25dp"
|
android:layout_marginTop="25dp"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/user_status_label_linearLayout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:paddingLeft="20dp">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="25dp"
|
||||||
|
android:layout_height="25dp"
|
||||||
|
android:src="@drawable/user_modal_title" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/user_status_label"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:paddingLeft="10dp"
|
||||||
|
android:textColor="@color/mapboxWhite" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
@ -58,14 +83,14 @@
|
|||||||
android:layout_width="25dp"
|
android:layout_width="25dp"
|
||||||
android:layout_height="25dp"
|
android:layout_height="25dp"
|
||||||
android:src="@drawable/user_modal_department" />
|
android:src="@drawable/user_modal_department" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/userDepartment"
|
android:id="@+id/userDepartment"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:textColor="@color/mapboxWhite"
|
|
||||||
android:paddingLeft="10dp"
|
android:paddingLeft="10dp"
|
||||||
/>
|
android:textColor="@color/mapboxWhite" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
@ -79,14 +104,14 @@
|
|||||||
android:layout_width="25dp"
|
android:layout_width="25dp"
|
||||||
android:layout_height="25dp"
|
android:layout_height="25dp"
|
||||||
android:src="@drawable/user_modal_room" />
|
android:src="@drawable/user_modal_room" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/userRoom"
|
android:id="@+id/userRoom"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:textColor="@color/mapboxWhite"
|
|
||||||
android:paddingLeft="10dp"
|
android:paddingLeft="10dp"
|
||||||
/>
|
android:textColor="@color/mapboxWhite" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
@ -100,14 +125,14 @@
|
|||||||
android:layout_width="25dp"
|
android:layout_width="25dp"
|
||||||
android:layout_height="25dp"
|
android:layout_height="25dp"
|
||||||
android:src="@drawable/user_modal_email" />
|
android:src="@drawable/user_modal_email" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/userEmail"
|
android:id="@+id/userEmail"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:textColor="@color/mapboxWhite"
|
|
||||||
android:paddingLeft="10dp"
|
android:paddingLeft="10dp"
|
||||||
/>
|
android:textColor="@color/mapboxWhite" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
@ -127,9 +152,8 @@
|
|||||||
android:id="@+id/userDutyHoursTitle"
|
android:id="@+id/userDutyHoursTitle"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textColor="@color/mapboxWhite"
|
|
||||||
android:paddingLeft="10dp"
|
android:paddingLeft="10dp"
|
||||||
/>
|
android:textColor="@color/mapboxWhite" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
@ -149,12 +173,11 @@
|
|||||||
android:id="@+id/userDutyHours"
|
android:id="@+id/userDutyHours"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingLeft="25dp"
|
|
||||||
android:paddingTop="-10dp"
|
|
||||||
android:divider="@color/background_user_modal"
|
android:divider="@color/background_user_modal"
|
||||||
android:dividerHeight="1dp"
|
android:dividerHeight="1dp"
|
||||||
android:textColor="@color/mapboxWhite"
|
android:paddingLeft="25dp"
|
||||||
/>
|
android:paddingTop="-10dp"
|
||||||
|
android:textColor="@color/mapboxWhite" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
@ -168,14 +191,14 @@
|
|||||||
android:layout_width="25dp"
|
android:layout_width="25dp"
|
||||||
android:layout_height="25dp"
|
android:layout_height="25dp"
|
||||||
android:src="@drawable/user_modal_note" />
|
android:src="@drawable/user_modal_note" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/userNote"
|
android:id="@+id/userNote"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:textColor="@color/mapboxWhite"
|
|
||||||
android:paddingLeft="10dp"
|
android:paddingLeft="10dp"
|
||||||
/>
|
android:textColor="@color/mapboxWhite" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
<include layout="@layout/users_list_main" />
|
<include layout="@layout/users_list_main" />
|
||||||
|
|
||||||
|
|
||||||
</android.support.design.widget.CoordinatorLayout>
|
</android.support.design.widget.CoordinatorLayout>
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
<android.support.v7.widget.RecyclerView
|
<android.support.v7.widget.RecyclerView
|
||||||
android:id="@+id/recycler_view"
|
android:id="@+id/recycler_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
android:scrollbars="vertical"
|
||||||
android:layout_height="match_parent" />
|
android:layout_height="match_parent" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
@ -26,5 +27,20 @@
|
|||||||
android:textSize="@dimen/msg_no_notes" />
|
android:textSize="@dimen/msg_no_notes" />
|
||||||
|
|
||||||
|
|
||||||
|
<com.github.ybq.android.spinkit.SpinKitView
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:id="@+id/loader"
|
||||||
|
style="@style/SpinKitView.Large.Wave"
|
||||||
|
android:layout_width="150dp"
|
||||||
|
android:layout_height="150dp"
|
||||||
|
app:SpinKit_Color="@color/msg_no_notes"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_marginTop="@dimen/margin_top_no_notes"
|
||||||
|
android:fontFamily="sans-serif-light"
|
||||||
|
android:text="@string/loading"
|
||||||
|
android:textColor="@color/msg_no_notes"
|
||||||
|
android:textSize="@dimen/msg_no_notes" />
|
||||||
|
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
|
27
app/src/main/res/layout/users_list_tabs.xml
Normal file
27
app/src/main/res/layout/users_list_tabs.xml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
xmlns:mapbox="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:id="@+id/coordinator_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:fontFamily="@font/lato_regular"
|
||||||
|
tools:context=".activity.UsersListFragment">
|
||||||
|
<android.support.design.widget.TabLayout
|
||||||
|
android:id="@+id/tabs"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
|
||||||
|
/>
|
||||||
|
<android.support.v4.view.ViewPager
|
||||||
|
android:id="@+id/viewpager"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</android.support.design.widget.CoordinatorLayout>
|
||||||
|
|
||||||
|
|
||||||
|
|
42
app/src/main/res/layout/white_list_fab_modal.xml
Normal file
42
app/src/main/res/layout/white_list_fab_modal.xml
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:fontFamily="@font/lato_regular"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||||
|
android:paddingTop="@dimen/activity_vertical_margin"
|
||||||
|
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||||
|
android:paddingBottom="@dimen/activity_vertical_margin">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/white_list_modal_title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignStart="@+id/white_list_modal_input"
|
||||||
|
android:layout_marginBottom="@dimen/dimen_10"
|
||||||
|
android:fontFamily="sans-serif-medium"
|
||||||
|
android:lineSpacingExtra="8sp"
|
||||||
|
android:text="@string/white_list_title"
|
||||||
|
android:textColor="@color/colorAccent"
|
||||||
|
android:textSize="@dimen/lbl_new_note_title"
|
||||||
|
android:textStyle="normal" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/white_list_modal_input"
|
||||||
|
android:layout_width="315dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_marginTop="50dp"
|
||||||
|
android:ems="10"
|
||||||
|
android:hint="@string/index_user"
|
||||||
|
android:maxLength="30"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:requiresFadingEdge="vertical"
|
||||||
|
android:scrollbars="vertical"
|
||||||
|
android:textColor="@color/note_list_text" />
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
47
app/src/main/res/layout/white_list_row.xml
Normal file
47
app/src/main/res/layout/white_list_row.xml
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="90dp"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:paddingLeft="10dp"
|
||||||
|
android:paddingTop="@dimen/dimen_10"
|
||||||
|
android:paddingRight="10dp"
|
||||||
|
android:fontFamily="@font/lato_regular"
|
||||||
|
android:paddingBottom="@dimen/dimen_10">
|
||||||
|
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/firstName"
|
||||||
|
android:layout_width="271dp"
|
||||||
|
android:layout_height="22dp"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_marginStart="12dp"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:textColor="@color/note_list_text"
|
||||||
|
android:textSize="15sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/lastName"
|
||||||
|
android:layout_width="270dp"
|
||||||
|
android:layout_height="22dp"
|
||||||
|
android:layout_below="@+id/firstName"
|
||||||
|
android:layout_alignEnd="@+id/firstName"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:layout_marginEnd="0dp"
|
||||||
|
android:textColor="@color/note_list_text"
|
||||||
|
android:textSize="15sp" />
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/removeUserImageButton"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/firstName"
|
||||||
|
android:layout_toEndOf="@+id/firstName"
|
||||||
|
android:background="@null"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
app:srcCompat="@drawable/abc_ic_clear_material" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
@ -1,14 +1,14 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<group android:id="@+id/drawer_group_tutor">
|
<group android:id="@+id/drawer_group_tutor">
|
||||||
<!-- <item
|
<item
|
||||||
android:id="@+id/nav_item_one"
|
android:id="@+id/nav_item_one"
|
||||||
android:icon="@drawable/ic_people_white"
|
android:icon="@drawable/ic_people_white"
|
||||||
android:title="@string/navigation_item_whitelist" />
|
android:title="@string/navigation_item_whitelist" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/nav_item_two"
|
android:id="@+id/nav_item_two"
|
||||||
android:icon="@drawable/ic_people_black"
|
android:icon="@drawable/ic_people_black"
|
||||||
android:title="@string/navigation_item_blacklist" />-->
|
android:title="@string/navigation_item_blacklist" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/nav_item_three"
|
android:id="@+id/nav_item_three"
|
||||||
android:icon="@drawable/outline_person_white_24dp"
|
android:icon="@drawable/outline_person_white_24dp"
|
||||||
|
11
app/src/main/res/menu/menu_black_list.xml
Normal file
11
app/src/main/res/menu/menu_black_list.xml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
tools:context="com.uam.wmi.findmytutor.activity.BlackList">
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_blacklist_info_popup"
|
||||||
|
android:orderInCategory="100"
|
||||||
|
android:title="Popup info icon"
|
||||||
|
android:icon="@drawable/outline_info_24"
|
||||||
|
app:showAsAction="ifRoom" />
|
||||||
|
</menu>
|
@ -6,6 +6,8 @@
|
|||||||
android:id="@+id/action_search"
|
android:id="@+id/action_search"
|
||||||
android:icon="@drawable/ic_menu_search"
|
android:icon="@drawable/ic_menu_search"
|
||||||
app:showAsAction="always"
|
app:showAsAction="always"
|
||||||
|
android:focusable="true"
|
||||||
|
android:focusableInTouchMode="true"
|
||||||
app:actionViewClass="android.support.v7.widget.SearchView"
|
app:actionViewClass="android.support.v7.widget.SearchView"
|
||||||
android:title="@string/search"/>
|
android:title="@string/search"/>
|
||||||
<item
|
<item
|
||||||
|
11
app/src/main/res/menu/menu_profile.xml
Normal file
11
app/src/main/res/menu/menu_profile.xml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
tools:context="com.uam.wmi.findmytutor.activity.TutorTab">
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_profile_info_popup"
|
||||||
|
android:orderInCategory="100"
|
||||||
|
android:title="Popup info icon"
|
||||||
|
android:icon="@drawable/outline_info_24"
|
||||||
|
app:showAsAction="ifRoom" />
|
||||||
|
</menu>
|
11
app/src/main/res/menu/menu_white_list.xml
Normal file
11
app/src/main/res/menu/menu_white_list.xml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
tools:context="com.uam.wmi.findmytutor.activity.BlackList">
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_whitelist_info_popup"
|
||||||
|
android:orderInCategory="100"
|
||||||
|
android:title="Popup info icon"
|
||||||
|
android:icon="@drawable/outline_info_24"
|
||||||
|
app:showAsAction="ifRoom" />
|
||||||
|
</menu>
|
11
app/src/main/res/menu/users_list_menu.xml
Normal file
11
app/src/main/res/menu/users_list_menu.xml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/showOnlineUsersOnly"
|
||||||
|
android:checkable="true"
|
||||||
|
android:title="@string/only_online_users"
|
||||||
|
app:actionViewClass="android.widget.CheckBox"
|
||||||
|
app:showAsAction="never" />
|
||||||
|
</menu>
|
@ -57,7 +57,7 @@
|
|||||||
<string name="navigation_item_blacklist">Czarna lista</string>
|
<string name="navigation_item_blacklist">Czarna lista</string>
|
||||||
<string name="navigation_item_whitelist">Biała lista</string>
|
<string name="navigation_item_whitelist">Biała lista</string>
|
||||||
<string name="navigation_item_settings">Ustawienia</string>
|
<string name="navigation_item_settings">Ustawienia</string>
|
||||||
<string name="navigation_item_profile">Profil uzytkownika</string>
|
<string name="navigation_item_profile">Profil użytkownika</string>
|
||||||
<string name="navigation_item_logout">Wyloguj</string>
|
<string name="navigation_item_logout">Wyloguj</string>
|
||||||
<!-- Tutors list -->
|
<!-- Tutors list -->
|
||||||
<string name="action_settings">Ustawienia</string>
|
<string name="action_settings">Ustawienia</string>
|
||||||
@ -211,7 +211,11 @@
|
|||||||
<string name="info_icon_userlist_tab_level_status_offline">- użytkownik jest obecnie offline</string>
|
<string name="info_icon_userlist_tab_level_status_offline">- użytkownik jest obecnie offline</string>
|
||||||
<string name="info_icon_userlist_tab_level_status_inactive">- użytkownik jest nieaktywny</string>
|
<string name="info_icon_userlist_tab_level_status_inactive">- użytkownik jest nieaktywny</string>
|
||||||
<string name="info_icon_userlist_tab_level_status_inactive_tip">(nie udostępnił żadnych danych o lokalizacji od conajmniej tygodnia)</string>
|
<string name="info_icon_userlist_tab_level_status_inactive_tip">(nie udostępnił żadnych danych o lokalizacji od conajmniej tygodnia)</string>
|
||||||
<string name="info_icon_userlist_summary">Po kliknięciu w imię i nazwisko wyświetli się karta zawierająca dokładne informacje o profesorze.</string>
|
<string name="add">Dodaj</string>
|
||||||
|
<string name="index_user">Index użytkownika</string>
|
||||||
|
<string name="black_list_title">Dodaj użytkownika do Blacklsi</string>
|
||||||
|
|
||||||
|
<string name="info_icon_userlist_summary">Po kliknięciu w imię i nazwisko, wyświetli się karta zawierająca dokładne informacje o profesorze.</string>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -239,9 +243,56 @@
|
|||||||
<string name="negative_dialog_button">Nie</string>
|
<string name="negative_dialog_button">Nie</string>
|
||||||
<string name="enable_sharing_question">Aby skorzystać z tej funkcji musisz pozwolić na udostępnianie lokalizacji. Zgadzasz sie?</string>
|
<string name="enable_sharing_question">Aby skorzystać z tej funkcji musisz pozwolić na udostępnianie lokalizacji. Zgadzasz sie?</string>
|
||||||
<string name="sharing_modal_title">Udostępnianie</string>
|
<string name="sharing_modal_title">Udostępnianie</string>
|
||||||
|
<string name="preference_manual_location_button_remove">Zarządzaj zapisanymi</string>
|
||||||
|
<string name="preference_manual_status_button_remove">Zarządzaj zapisanymi</string>
|
||||||
|
|
||||||
|
<string name="blacklist">Czarna lista</string>
|
||||||
|
<string name="can_not_be_empty">Pole nie może być puste</string>
|
||||||
|
<string name="user_added">Użytkownik dodany</string>
|
||||||
|
<string name="list_is_empty">Lista jest pusta</string>
|
||||||
|
<string name="on">WŁĄCZONA</string>
|
||||||
|
<string name="off">WYŁĄCZONA</string>
|
||||||
|
<string name="title_activity_black_list">Czarna lista</string>
|
||||||
<string name="scrap_tutor_tab">Pobierz dane z WMI</string>
|
<string name="scrap_tutor_tab">Pobierz dane z WMI</string>
|
||||||
<string name="scrap_tutor_msg">Dane zostały zaktualizwane!</string>
|
<string name="scrap_tutor_msg">Dane zostały zaktualizwane!</string>
|
||||||
|
|
||||||
|
<!--(ENG) Checkbox online users list -->
|
||||||
|
<string name="no_online_users">Brak aktywnych użytkowników.</string>
|
||||||
|
<string name="no_offline_users">Brak użytkowników offline.</string>
|
||||||
|
<string name="activity_title_blacklist">Czarna lista</string>
|
||||||
|
<string name="activity_title_whitelist">Biała lista</string>
|
||||||
|
<string name="title_activity_white_list">Biała lista</string>
|
||||||
|
<string name="white_list_title">Dodaj użytkownika do białej listy</string>
|
||||||
|
<string name="no_such_a_user">Nie ma takiego użytkownika</string>
|
||||||
|
<string name="only_online_users">Tylko aktywni użytkownicy</string>
|
||||||
|
<string name="network_err">Błąd sieci!</string>
|
||||||
|
<string name="search_null">Brak wyników!</string>
|
||||||
|
<string name="modal_manual_hint">Nadaj nazwę tej lokalizacji.</string>
|
||||||
|
<string name="online">Dostępny</string>
|
||||||
|
<string name="offline">Niedostępny</string>
|
||||||
|
<string name="inactive">Nieaktywny</string>
|
||||||
|
<string name="show_on_map">POKAŻ NA MAPIE</string>
|
||||||
|
|
||||||
|
<!--(ENG) Blacked/Whited users -->
|
||||||
|
<string name="add_user_to_list">Użytkownik został dodany!</string>
|
||||||
|
<string name="user_removed">Użytkownik usunięty!</string>
|
||||||
|
<string name="floor">Piętro</string>
|
||||||
|
<string name="block_the_users">Zablokuj użytkowników</string>
|
||||||
|
<string name="be_visible_for_these_users">Bądź dostępny dla użytkowników</string>
|
||||||
|
|
||||||
|
<string name="manual_mode">manualny</string>
|
||||||
|
<string name="exact_mode">dokładny</string>
|
||||||
|
<string name="approx_mode">przybliżony</string>
|
||||||
|
<string name="other_location">Niezapisana lokalizacja.</string>
|
||||||
|
<string name="last_sign">Ostatnio</string>
|
||||||
|
|
||||||
|
<string name="available_now">Dostępny teraz</string>
|
||||||
|
<string name="profile_activity_title">Profil użytkownika</string>
|
||||||
|
<string name="batter_exclusions_title">Uwaga</string>
|
||||||
|
<string name="batter_exclusions_message">Aby aplikacja była w pełni funkcjonalna, dodaj FMT do wyjątków w oszczędzaniu baterii. Po wciśnięciu przycisku \"ok\" zostaniesz przeniesiony do opcji zarządzania baterią. W panelu \"Bateria\" upewnij się, że opcja optymalizacji jest wyłączona.</string>
|
||||||
|
|
||||||
|
<string name="never_logged_in">Nigdy</string>
|
||||||
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,23 +55,15 @@
|
|||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="status_entries">
|
<string-array name="status_entries">
|
||||||
<item>@string/description_available</item>
|
<item>@string/description_available</item>
|
||||||
<item>@string/description_busy</item>
|
|
||||||
<item>@string/description_consultation</item>
|
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="status_values">
|
<string-array name="status_values">
|
||||||
<item>0</item>
|
<item>0</item>
|
||||||
<item>1</item>
|
|
||||||
<item>2</item>
|
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="manual_location_entries">
|
<string-array name="manual_location_entries">
|
||||||
<item>@string/assembly_c</item>
|
<item>@string/assembly_c</item>
|
||||||
<item>@string/assembly_a</item>
|
|
||||||
<item>@string/passage_d</item>
|
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="manual_location_values">
|
<string-array name="manual_location_values">
|
||||||
<item>0</item>
|
<item>0</item>
|
||||||
<item>1</item>
|
|
||||||
<item>2</item>
|
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="language_entries">
|
<string-array name="language_entries">
|
||||||
<item>@string/lang_eng</item>
|
<item>@string/lang_eng</item>
|
||||||
@ -81,4 +73,19 @@
|
|||||||
<item>0</item>
|
<item>0</item>
|
||||||
<item>1</item>
|
<item>1</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
|
|
||||||
|
<string-array name="yourArray">
|
||||||
|
<item>Item 1</item>
|
||||||
|
<item>Item 2</item>
|
||||||
|
<item>Item 3</item>
|
||||||
|
<item>Item 4</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
|
<string-array name="yourValues">
|
||||||
|
<item>0</item>
|
||||||
|
<item>1</item>
|
||||||
|
<item>2</item>
|
||||||
|
<item>3</item>
|
||||||
|
</string-array>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -19,4 +19,6 @@
|
|||||||
<dimen name="note_list_text">13sp</dimen>
|
<dimen name="note_list_text">13sp</dimen>
|
||||||
<dimen name="default_margin">12dp</dimen>
|
<dimen name="default_margin">12dp</dimen>
|
||||||
<dimen name="text_large">10dp</dimen>
|
<dimen name="text_large">10dp</dimen>
|
||||||
|
<dimen name="app_bar_height">180dp</dimen>
|
||||||
|
<dimen name="text_margin">16dp</dimen>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -32,7 +32,8 @@
|
|||||||
|
|
||||||
<!-- Tutors list -->
|
<!-- Tutors list -->
|
||||||
<string name="action_settings">Settings</string>
|
<string name="action_settings">Settings</string>
|
||||||
<string name="activity_title_home">Notes</string>
|
<string name="activity_title_blacklist">Blacklist</string>
|
||||||
|
<string name="activity_title_whitelist">Whitelist</string>
|
||||||
<string name="prompt_password">Password</string>
|
<string name="prompt_password">Password</string>
|
||||||
<string name="action_sign_in">Sign in or register</string>
|
<string name="action_sign_in">Sign in or register</string>
|
||||||
<string name="action_sign_out">Sign out</string>
|
<string name="action_sign_out">Sign out</string>
|
||||||
@ -53,12 +54,10 @@
|
|||||||
|
|
||||||
|
|
||||||
<!-- Strings related to SharingActivity -->
|
<!-- Strings related to SharingActivity -->
|
||||||
|
|
||||||
<string name="title_activity_sharing">Sharing</string>
|
<string name="title_activity_sharing">Sharing</string>
|
||||||
|
|
||||||
|
|
||||||
<!-- Strings related to settings -->
|
<!-- Strings related to settings -->
|
||||||
|
|
||||||
<string name="title_sharing">Sharing</string>
|
<string name="title_sharing">Sharing</string>
|
||||||
<string name="settings_category_location">Location sharing</string>
|
<string name="settings_category_location">Location sharing</string>
|
||||||
<string name="settings_category_status">Status settings</string>
|
<string name="settings_category_status">Status settings</string>
|
||||||
@ -69,6 +68,9 @@
|
|||||||
<string name="location_level_precise">Exact</string>
|
<string name="location_level_precise">Exact</string>
|
||||||
<string name="location_level_manual">Manual</string>
|
<string name="location_level_manual">Manual</string>
|
||||||
<string name="preference_manual_location_button">Choose from map</string>
|
<string name="preference_manual_location_button">Choose from map</string>
|
||||||
|
<string name="preference_manual_location_button_remove">Manage saved</string>
|
||||||
|
<string name="preference_manual_status_button_remove">Manage saved</string>
|
||||||
|
|
||||||
<string name="settings_location_level">Location level</string>
|
<string name="settings_location_level">Location level</string>
|
||||||
<string name="key_location_level">key_location_level</string>
|
<string name="key_location_level">key_location_level</string>
|
||||||
|
|
||||||
@ -86,14 +88,10 @@
|
|||||||
<string name="title_manual_status">Add custom status</string>
|
<string name="title_manual_status">Add custom status</string>
|
||||||
|
|
||||||
|
|
||||||
<string name="settings_description">Descrition</string>
|
<string name="settings_description">Description</string>
|
||||||
<string name="saveButton">Save</string>
|
<string name="saveButton">Save</string>
|
||||||
<string name="tutorTabHint">Edit your note. It will be shown in the users list.</string>
|
<string name="tutorTabHint">Edit your note. It will be shown in the users list.</string>
|
||||||
|
|
||||||
|
|
||||||
<string name="key_description">key_description</string>
|
<string name="key_description">key_description</string>
|
||||||
|
|
||||||
|
|
||||||
<string name="manual_location">Manual location</string>
|
<string name="manual_location">Manual location</string>
|
||||||
<string name="title_list_manual_location">Choose manual location</string>
|
<string name="title_list_manual_location">Choose manual location</string>
|
||||||
<string name="title_manual_location">Add custom location</string>
|
<string name="title_manual_location">Add custom location</string>
|
||||||
@ -128,7 +126,6 @@
|
|||||||
<string name="title_activity_settings2">Settings</string>
|
<string name="title_activity_settings2">Settings</string>
|
||||||
<string name="modal_location_send">SEND</string>
|
<string name="modal_location_send">SEND</string>
|
||||||
<string name="modal_location_hint">Please name choosen location.</string>
|
<string name="modal_location_hint">Please name choosen location.</string>
|
||||||
modal_feedback_send
|
|
||||||
<!-- Strings related to Settings -->
|
<!-- Strings related to Settings -->
|
||||||
|
|
||||||
<!-- Example General settings -->
|
<!-- Example General settings -->
|
||||||
@ -225,9 +222,9 @@
|
|||||||
<string name="nav_profile">User profile</string>
|
<string name="nav_profile">User profile</string>
|
||||||
<string name="remove_manual_location">Remove Manual location</string>
|
<string name="remove_manual_location">Remove Manual location</string>
|
||||||
<string name="title_activity_tutor_tab">TutorTab</string>
|
<string name="title_activity_tutor_tab">TutorTab</string>
|
||||||
<string name="manual_modal_title">Do you want to save this localization?</string>
|
<string name="manual_modal_title">Manual localization</string>
|
||||||
<string name="lbl_ok">Save!</string>
|
<string name="lbl_ok">Save</string>
|
||||||
<string name="lbl_cancel">Cancel!</string>
|
<string name="lbl_cancel">Cancel</string>
|
||||||
<string name="manual_marker_info">Your marker will disappear in next couple minutes</string>
|
<string name="manual_marker_info">Your marker will disappear in next couple minutes</string>
|
||||||
<string name="manual_location_selected">Manual Locations selected!</string>
|
<string name="manual_location_selected">Manual Locations selected!</string>
|
||||||
<string name="location_saved">Location saved!</string>
|
<string name="location_saved">Location saved!</string>
|
||||||
@ -297,13 +294,22 @@
|
|||||||
<string name="info_icon_userlist_tab_level_status_offline">- user is currently offline</string>
|
<string name="info_icon_userlist_tab_level_status_offline">- user is currently offline</string>
|
||||||
<string name="info_icon_userlist_tab_level_status_inactive">- user is inactive </string>
|
<string name="info_icon_userlist_tab_level_status_inactive">- user is inactive </string>
|
||||||
<string name="info_icon_userlist_tab_level_status_inactive_tip">(didn’t share any localization data since 7 days)</string>
|
<string name="info_icon_userlist_tab_level_status_inactive_tip">(didn’t share any localization data since 7 days)</string>
|
||||||
<string name="info_icon_userlist_summary">After clicking on a name, the tutor tab will pop up, containing details about selected tutor.</string>
|
<string name="title_activity_black_list">BlackList</string>
|
||||||
|
<string name="title_activity_white_list">Whitelist</string>
|
||||||
|
<string name="white_list_title">Add user to Whitelist</string>
|
||||||
|
|
||||||
|
<string name="info_icon_userlist_summary">After clicking on a name, the tutor tab will pop up, containing details about selected tutor.\n\nYou can search for any tutor on the map by entering his name and surname in the search field.\n\nBy default, only active users are shown. You can change that in menu (three dots icon).\n\nYou can also search for a tutor directly, by entering name and surname of person that you look for.</string>
|
||||||
|
|
||||||
|
<!--(ENG) Blacklist -->
|
||||||
|
<string name="index_user">User index</string>
|
||||||
|
<string name="black_list_title">Add user to blacklist</string>
|
||||||
|
<string name="add">Add</string>
|
||||||
|
|
||||||
<string name="possitive_dialog_button">Yes</string>
|
<string name="possitive_dialog_button">Yes</string>
|
||||||
|
|
||||||
<string name="pref_title_acra" translatable="false">App issues reporting</string>
|
<string name="pref_title_acra" translatable="false">App issues reporting</string>
|
||||||
|
|
||||||
<!--(ENG) Profile Activity strings-->
|
<!--(ENG) Profile Activity strings-->
|
||||||
|
<string name="profile_activity_title">Profile</string>
|
||||||
<string name="hint_duty_day">Day</string>
|
<string name="hint_duty_day">Day</string>
|
||||||
<string name="hint_duty_start">Start</string>
|
<string name="hint_duty_start">Start</string>
|
||||||
<string name="hint_duty_end">End</string>
|
<string name="hint_duty_end">End</string>
|
||||||
@ -319,7 +325,138 @@
|
|||||||
<string name="enable_sharing_question">In order to use this function, you have to enable localization sharing. May I do it for you?</string>
|
<string name="enable_sharing_question">In order to use this function, you have to enable localization sharing. May I do it for you?</string>
|
||||||
<string name="sharing_modal_title">Sharing</string>
|
<string name="sharing_modal_title">Sharing</string>
|
||||||
<string name="lack_of_status">The user hasn\'t defined a status.</string>
|
<string name="lack_of_status">The user hasn\'t defined a status.</string>
|
||||||
<string name="scrap_tutor_tab">Scrap!</string>
|
<string name="can_not_be_empty">Field can not be empty</string>
|
||||||
<string name="scrap_tutor_msg">Thank you for scraping your tab!</string>
|
<string name="user_added">User added</string>
|
||||||
|
<string name="list_is_empty">The list is empty</string>
|
||||||
|
<string name="activity_title_home">Map</string>
|
||||||
|
<string name="on">ON</string>
|
||||||
|
<string name="off">OFF</string>
|
||||||
|
<string name="scrap_tutor_tab">Scrap from WMI</string>
|
||||||
|
<string name="scrap_tutor_msg">Data updated!</string>
|
||||||
|
|
||||||
|
<!--(ENG) Checkbox online users list -->
|
||||||
|
<string name="no_online_users">Currently, there are no\nactive users.</string>
|
||||||
|
<string name="no_offline_users">Currently, there are no\noffline users.</string>
|
||||||
|
<string name="only_online_users">Only active users</string>
|
||||||
|
<string name="no_such_a_user">No such a user</string>
|
||||||
|
|
||||||
|
<string name="network_err">Network Error !</string>
|
||||||
|
<string name="search_null">Search response is empty!</string>
|
||||||
|
<string name="modal_manual_hint">Name the localization</string>
|
||||||
|
<string name="online">Online</string>
|
||||||
|
<string name="offline">Offline</string>
|
||||||
|
<string name="inactive">Inactive</string>
|
||||||
|
<string name="show_on_map">SHOW ON MAP</string>
|
||||||
|
|
||||||
|
<!--(ENG) Blacked/Whited users -->
|
||||||
|
<string name="add_user_to_list">User has been added!</string>
|
||||||
|
<string name="user_removed">User removed!</string>
|
||||||
|
<string name="floor">Floor</string>
|
||||||
|
<string name="block_the_users">Block the users</string>
|
||||||
|
<string name="be_visible_for_these_users">Be visible for these users</string>
|
||||||
|
<string name="title_activity_scrolling">ScrollingActivity</string>
|
||||||
|
<string name="large_text">
|
||||||
|
"Material is the metaphor.\n\n"
|
||||||
|
|
||||||
|
"A material metaphor is the unifying theory of a rationalized space and a system of motion."
|
||||||
|
"The material is grounded in tactile reality, inspired by the study of paper and ink, yet "
|
||||||
|
"technologically advanced and open to imagination and magic.\n"
|
||||||
|
"Surfaces and edges of the material provide visual cues that are grounded in reality. The "
|
||||||
|
"use of familiar tactile attributes helps users quickly understand affordances. Yet the "
|
||||||
|
"flexibility of the material creates new affordances that supercede those in the physical "
|
||||||
|
"world, without breaking the rules of physics.\n"
|
||||||
|
"The fundamentals of light, surface, and movement are key to conveying how objects move, "
|
||||||
|
"interact, and exist in space and in relation to each other. Realistic lighting shows "
|
||||||
|
"seams, divides space, and indicates moving parts.\n\n"
|
||||||
|
|
||||||
|
"Bold, graphic, intentional.\n\n"
|
||||||
|
|
||||||
|
"The foundational elements of print based design typography, grids, space, scale, color, "
|
||||||
|
"and use of imagery guide visual treatments. These elements do far more than please the "
|
||||||
|
"eye. They create hierarchy, meaning, and focus. Deliberate color choices, edge to edge "
|
||||||
|
"imagery, large scale typography, and intentional white space create a bold and graphic "
|
||||||
|
"interface that immerse the user in the experience.\n"
|
||||||
|
"An emphasis on user actions makes core functionality immediately apparent and provides "
|
||||||
|
"waypoints for the user.\n\n"
|
||||||
|
|
||||||
|
"Motion provides meaning.\n\n"
|
||||||
|
|
||||||
|
"Motion respects and reinforces the user as the prime mover. Primary user actions are "
|
||||||
|
"inflection points that initiate motion, transforming the whole design.\n"
|
||||||
|
"All action takes place in a single environment. Objects are presented to the user without "
|
||||||
|
"breaking the continuity of experience even as they transform and reorganize.\n"
|
||||||
|
"Motion is meaningful and appropriate, serving to focus attention and maintain continuity. "
|
||||||
|
"Feedback is subtle yet clear. Transitions are efficient yet coherent.\n\n"
|
||||||
|
|
||||||
|
"3D world.\n\n"
|
||||||
|
|
||||||
|
"The material environment is a 3D space, which means all objects have x, y, and z "
|
||||||
|
"dimensions. The z-axis is perpendicularly aligned to the plane of the display, with the "
|
||||||
|
"positive z-axis extending towards the viewer. Every sheet of material occupies a single "
|
||||||
|
"position along the z-axis and has a standard 1dp thickness.\n"
|
||||||
|
"On the web, the z-axis is used for layering and not for perspective. The 3D world is "
|
||||||
|
"emulated by manipulating the y-axis.\n\n"
|
||||||
|
|
||||||
|
"Light and shadow.\n\n"
|
||||||
|
|
||||||
|
"Within the material environment, virtual lights illuminate the scene. Key lights create "
|
||||||
|
"directional shadows, while ambient light creates soft shadows from all angles.\n"
|
||||||
|
"Shadows in the material environment are cast by these two light sources. In Android "
|
||||||
|
"development, shadows occur when light sources are blocked by sheets of material at "
|
||||||
|
"various positions along the z-axis. On the web, shadows are depicted by manipulating the "
|
||||||
|
"y-axis only. The following example shows the card with a height of 6dp.\n\n"
|
||||||
|
|
||||||
|
"Resting elevation.\n\n"
|
||||||
|
|
||||||
|
"All material objects, regardless of size, have a resting elevation, or default elevation "
|
||||||
|
"that does not change. If an object changes elevation, it should return to its resting "
|
||||||
|
"elevation as soon as possible.\n\n"
|
||||||
|
|
||||||
|
"Component elevations.\n\n"
|
||||||
|
|
||||||
|
"The resting elevation for a component type is consistent across apps (e.g., FAB elevation "
|
||||||
|
"does not vary from 6dp in one app to 16dp in another app).\n"
|
||||||
|
"Components may have different resting elevations across platforms, depending on the depth "
|
||||||
|
"of the environment (e.g., TV has a greater depth than mobile or desktop).\n\n"
|
||||||
|
|
||||||
|
"Responsive elevation and dynamic elevation offsets.\n\n"
|
||||||
|
|
||||||
|
"Some component types have responsive elevation, meaning they change elevation in response "
|
||||||
|
"to user input (e.g., normal, focused, and pressed) or system events. These elevation "
|
||||||
|
"changes are consistently implemented using dynamic elevation offsets.\n"
|
||||||
|
"Dynamic elevation offsets are the goal elevation that a component moves towards, relative "
|
||||||
|
"to the component’s resting state. They ensure that elevation changes are consistent "
|
||||||
|
"across actions and component types. For example, all components that lift on press have "
|
||||||
|
"the same elevation change relative to their resting elevation.\n"
|
||||||
|
"Once the input event is completed or cancelled, the component will return to its resting "
|
||||||
|
"elevation.\n\n"
|
||||||
|
|
||||||
|
"Avoiding elevation interference.\n\n"
|
||||||
|
|
||||||
|
"Components with responsive elevations may encounter other components as they move between "
|
||||||
|
"their resting elevations and dynamic elevation offsets. Because material cannot pass "
|
||||||
|
"through other material, components avoid interfering with one another any number of ways, "
|
||||||
|
"whether on a per component basis or using the entire app layout.\n"
|
||||||
|
"On a component level, components can move or be removed before they cause interference. "
|
||||||
|
"For example, a floating action button (FAB) can disappear or move off screen before a "
|
||||||
|
"user picks up a card, or it can move if a snackbar appears.\n"
|
||||||
|
"On the layout level, design your app layout to minimize opportunities for interference. "
|
||||||
|
"For example, position the FAB to one side of stream of a cards so the FAB won’t interfere "
|
||||||
|
"when a user tries to pick up one of cards.\n\n"
|
||||||
|
</string>
|
||||||
|
|
||||||
|
|
||||||
|
<!--(ENG) Sharing Modes -->
|
||||||
|
<string name="manual_mode">manual</string>
|
||||||
|
<string name="exact_mode">exact</string>
|
||||||
|
<string name="approx_mode">approximate</string>
|
||||||
|
|
||||||
|
<!--(ENG) Undefined manual -->
|
||||||
|
<string name="other_location">Not saved location.</string>
|
||||||
|
<string name="user_status_label" translatable="false">Status</string>
|
||||||
|
<string name="available_now">Available now</string>
|
||||||
|
<string name="last_sign">Last seen</string>
|
||||||
|
<string name="batter_exclusions_message">To make app fully functional add FMT to battery saving exclusions. You can change battery options in \"Optimise battery usage\". Unfortunately, you have to do it manually. Click \"ok\" to open battery settings and make sure that the application is not optimised.</string>
|
||||||
|
<string name="batter_exclusions_title">Please note</string>
|
||||||
|
<string name="never_logged_in">Never</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -22,4 +22,5 @@
|
|||||||
<item name="android:background">@drawable/fab_label_background</item>
|
<item name="android:background">@drawable/fab_label_background</item>
|
||||||
<item name="android:textColor">@color/mapboxWhite</item>
|
<item name="android:textColor">@color/mapboxWhite</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<PreferenceScreen xmlns:tools="http://schemas.android.com/tools"
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
android:id="@+id/pref_screen"
|
||||||
tools:ignore="MissingDefaultResource"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:fontFamily="@font/lato_regular"
|
android:layout_height="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:fontFamily="@font/lato_regular">
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:title="@string/settings_category_location"
|
android:key="category_sharing"
|
||||||
android:key="category_sharing">
|
android:title="@string/settings_category_location">
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:disableDependentsState="false"
|
android:disableDependentsState="false"
|
||||||
@ -16,7 +16,7 @@
|
|||||||
android:persistent="true"
|
android:persistent="true"
|
||||||
android:title="@string/title_sharing" />
|
android:title="@string/title_sharing" />
|
||||||
<ListPreference
|
<ListPreference
|
||||||
android:defaultValue="1"
|
android:defaultValue="2"
|
||||||
android:dialogTitle="@string/settings_location_level"
|
android:dialogTitle="@string/settings_location_level"
|
||||||
android:entries="@array/location_level_entries"
|
android:entries="@array/location_level_entries"
|
||||||
android:entryValues="@array/location_level_values"
|
android:entryValues="@array/location_level_values"
|
||||||
@ -25,12 +25,17 @@
|
|||||||
android:title="@string/title_location_level" />
|
android:title="@string/title_location_level" />
|
||||||
<ListPreference
|
<ListPreference
|
||||||
android:defaultValue="0"
|
android:defaultValue="0"
|
||||||
|
android:entries="@array/manual_location_entries"
|
||||||
|
android:entryValues="@array/manual_location_values"
|
||||||
android:key="key_manual_location_value"
|
android:key="key_manual_location_value"
|
||||||
android:summary="%s"
|
android:summary="%s"
|
||||||
android:title="@string/title_list_manual_location" />
|
android:title="@string/title_list_manual_location" />
|
||||||
<com.uam.wmi.findmytutor.utils.RightButtonPreference
|
<com.uam.wmi.findmytutor.utils.RightButtonPreference
|
||||||
android:key="manual_location_button"
|
android:key="manual_location_button"
|
||||||
/>
|
android:text="@string/preference_manual_location_button" />
|
||||||
|
<com.uam.wmi.findmytutor.utils.RightButtonPreference
|
||||||
|
android:key="remove_manual_location"
|
||||||
|
android:text="@string/preference_manual_location_button_remove" />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory android:title="@string/settings_category_status">
|
<PreferenceCategory android:title="@string/settings_category_status">
|
||||||
@ -41,7 +46,9 @@
|
|||||||
android:persistent="true"
|
android:persistent="true"
|
||||||
android:title="@string/status_switch_title" />
|
android:title="@string/status_switch_title" />
|
||||||
<ListPreference
|
<ListPreference
|
||||||
android:defaultValue="2"
|
android:defaultValue="0"
|
||||||
|
android:entries="@array/status_entries"
|
||||||
|
android:entryValues="@array/status_values"
|
||||||
android:key="@string/key_status_value"
|
android:key="@string/key_status_value"
|
||||||
android:summary="%s"
|
android:summary="%s"
|
||||||
android:title="@string/status_list_title" />
|
android:title="@string/status_list_title" />
|
||||||
@ -49,10 +56,12 @@
|
|||||||
android:key="key_manual_status"
|
android:key="key_manual_status"
|
||||||
android:selectAllOnFocus="true"
|
android:selectAllOnFocus="true"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:title="@string/title_manual_status"
|
android:title="@string/title_manual_status" />
|
||||||
/>
|
<com.uam.wmi.findmytutor.utils.RightButtonPreference
|
||||||
|
android:key="remove_manual_status"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
app:backgroundTint="@color/mapboxRedDark"
|
||||||
|
android:text="@string/preference_manual_status_button_remove" />
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
@ -9,7 +9,6 @@ buildscript {
|
|||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:3.2.1'
|
classpath 'com.android.tools.build:gradle:3.2.1'
|
||||||
|
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
// in the individual module build.gradle files
|
// in the individual module build.gradle files
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user