Merge branch 'blackNwhiteLists' of s416084/find-my-tutor-android into develop
This commit is contained in:
commit
7d74d46d27
@ -65,6 +65,11 @@
|
||||
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||
android:screenOrientation="portrait"
|
||||
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"
|
||||
|
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"
|
||||
}
|
@ -100,8 +100,8 @@ public abstract class BaseActivity
|
||||
String itemName = (String) item.getTitle();
|
||||
Intent launchIntent;
|
||||
if (itemName.equals(getResources().getString(R.string.navigation_item_whitelist))) {
|
||||
/* launchIntent = new Intent(getApplicationContext(), WhitelistActivity.class);
|
||||
startActivity(launchIntent);*/
|
||||
launchIntent = new Intent(getApplicationContext(), WhiteList.class);
|
||||
startActivity(launchIntent);
|
||||
} else if (itemName.equals(getResources().getString(R.string.navigation_item_blacklist))) {
|
||||
launchIntent = new Intent(getApplicationContext(),BlackList.class);
|
||||
startActivity(launchIntent);
|
||||
|
@ -70,7 +70,7 @@ public class BlackList extends AppCompatActivity {
|
||||
private boolean didFetched = false;
|
||||
private String tutorId;
|
||||
|
||||
@BindView(R.id.recycler_view)
|
||||
@BindView(R.id.recycler_view_blacklist)
|
||||
RecyclerView recyclerView;
|
||||
@BindView(R.id.black_list_empty_text_view)
|
||||
TextView noNotesView;
|
||||
@ -89,16 +89,24 @@ public class BlackList extends AppCompatActivity {
|
||||
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
|
||||
setContentView(R.layout.activity_black_list);
|
||||
ButterKnife.bind(this);
|
||||
aSwitch.setText(getString(R.string.action_black_list) +" ON");
|
||||
tutorId = PrefUtils.getUserId(getApplicationContext());
|
||||
userService = ApiClient.getClient(getApplicationContext())
|
||||
.create(UserService.class);
|
||||
|
||||
if (PrefUtils.isBlackListing(this)){
|
||||
aSwitch.setText(getString(R.string.action_black_list) +" ON");
|
||||
aSwitch.setChecked(true);
|
||||
handleChangeRequest(true);
|
||||
}else{
|
||||
aSwitch.setText(getString(R.string.action_black_list) +" OFF");
|
||||
aSwitch.setChecked(false);
|
||||
handleChangeRequest(false);
|
||||
}
|
||||
|
||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||
toolbar.setTitle(getString(R.string.activity_title_blacklist));
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
userService = ApiClient.getClient(getApplicationContext())
|
||||
.create(UserService.class);
|
||||
|
||||
mAdapter = new BlackListAdapter(this, blacklistedUsers);
|
||||
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
|
||||
recyclerView.setLayoutManager(mLayoutManager);
|
||||
@ -160,8 +168,6 @@ public class BlackList extends AppCompatActivity {
|
||||
@Override
|
||||
public void onSuccess(User user) {
|
||||
blacklistedUsers.add(user);
|
||||
Snackbar.make(getWindow().getDecorView().getRootView(), "user fetch OK! success", Snackbar.LENGTH_LONG)
|
||||
.setAction("Action", null).show();
|
||||
toggleEmptyNotes();
|
||||
if (blacklistedUsers.size() == blacklistedUsersIDs.size()) {
|
||||
mAdapter.notifyDataSetChanged();
|
||||
@ -236,6 +242,9 @@ public class BlackList extends AppCompatActivity {
|
||||
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 !";
|
||||
}
|
||||
@ -314,9 +323,11 @@ public class BlackList extends AppCompatActivity {
|
||||
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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -0,0 +1,331 @@
|
||||
package com.uam.wmi.findmytutor.activity;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.Bundle;
|
||||
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.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.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.MyDividerItemDecoration;
|
||||
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
||||
import com.uam.wmi.findmytutor.utils.RecyclerTouchListener;
|
||||
import com.uam.wmi.findmytutor.utils.RestApiHelper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.CompositeDisposable;
|
||||
import io.reactivex.observers.DisposableSingleObserver;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
import okhttp3.ResponseBody;
|
||||
|
||||
public class WhiteList extends AppCompatActivity {
|
||||
|
||||
private CompositeDisposable disposable = new CompositeDisposable();
|
||||
private UserService userService;
|
||||
private boolean didFetched = false;
|
||||
private String tutorId;
|
||||
|
||||
@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;
|
||||
private WhiteListAdapter mAdapter;
|
||||
private List<User> whitelistedUsers = new ArrayList<>();
|
||||
private HashSet<String> whitelistedUsersIDs = new HashSet<>();
|
||||
|
||||
@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) +" ON");
|
||||
aSwitch.setChecked(true);
|
||||
handleChangeRequest(true);
|
||||
}else{
|
||||
aSwitch.setText(getString(R.string.action_white_list) +" 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.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
|
||||
recyclerView.setLayoutManager(mLayoutManager);
|
||||
recyclerView.setItemAnimator(new DefaultItemAnimator());
|
||||
recyclerView.addItemDecoration(new MyDividerItemDecoration(this, LinearLayoutManager.VERTICAL, 16));
|
||||
recyclerView.setAdapter(mAdapter);
|
||||
|
||||
/**
|
||||
* 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);
|
||||
|
||||
fetchWhiteListedUsersIDs(PrefUtils.getUserId(getApplicationContext()));
|
||||
handleSwitch();
|
||||
}
|
||||
|
||||
private void fetchWhiteListedUsersIDs(String userId) {
|
||||
disposable.add(
|
||||
userService.getTutorWhitelistedByID(userId)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribeWith(new DisposableSingleObserver<List<String>>() {
|
||||
@Override
|
||||
public void onSuccess(List<String> users) {
|
||||
whitelistedUsersIDs.addAll(users);
|
||||
didFetched = true;
|
||||
fetchWhiteListedUsers();
|
||||
toggleEmptyNotes();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
showError(e);
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
private void fetchWhiteListedUsers() {
|
||||
for (String GUID : whitelistedUsersIDs){
|
||||
disposable.add(
|
||||
userService.getUserById(GUID)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribeWith(new DisposableSingleObserver<User>() {
|
||||
@Override
|
||||
public void onSuccess(User user) {
|
||||
whitelistedUsers.add(user);
|
||||
toggleEmptyNotes();
|
||||
if (whitelistedUsers.size() == whitelistedUsersIDs.size()) {
|
||||
mAdapter.notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
showError(e);
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
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(PrefUtils.getUserId(getApplicationContext()), studentIdModel)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(()->{
|
||||
fetchWhiteListedUsersIDs(PrefUtils.getUserId(getApplicationContext()));
|
||||
Toast.makeText(getApplicationContext(), R.string.user_added, Toast.LENGTH_SHORT).show();
|
||||
},this::showError)
|
||||
);
|
||||
}
|
||||
|
||||
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 !";
|
||||
}
|
||||
|
||||
Snackbar.make(getWindow().getDecorView().getRootView(), message, Snackbar.LENGTH_LONG)
|
||||
.setAction("Action", null).show();
|
||||
}
|
||||
|
||||
private void toggleEmptyNotes() {
|
||||
|
||||
if (didFetched && whitelistedUsers.size() == 0) {
|
||||
noNotesView.setText(R.string.list_is_empty);
|
||||
noNotesView.setVisibility(View.VISIBLE);
|
||||
}else if (whitelistedUsers.size() > 0) {
|
||||
noNotesView.setVisibility(View.GONE);
|
||||
} else {
|
||||
noNotesView.setText(getString(R.string.loading));
|
||||
noNotesView.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
disposable.dispose();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
@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_white_list, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@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)
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,132 @@
|
||||
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());
|
||||
//"s416196"
|
||||
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(), "User removed", Toast.LENGTH_SHORT).show();
|
||||
tutorsList.remove(position);
|
||||
notifyDataSetChanged();
|
||||
},this::showError)
|
||||
);
|
||||
});
|
||||
//
|
||||
// if (tutor.isIsOnline()) {
|
||||
// image = context.getResources().getDrawable(R.drawable.user_list_online);
|
||||
// } else {
|
||||
// image = context.getResources().getDrawable(R.drawable.user_list_offline);
|
||||
// }
|
||||
//
|
||||
// if (!tutor.isIsActive()) {
|
||||
// image = context.getResources().getDrawable(R.drawable.user_list_off);
|
||||
// }
|
||||
|
||||
// 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.lastName)
|
||||
TextView lastName;
|
||||
|
||||
// @BindView(R.id.isOnline)
|
||||
// TextView isOnline;
|
||||
@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();
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -88,14 +88,15 @@ public interface UserService {
|
||||
Completable removeStudentFromBlacklist(@Path("tutorID") String tutorID, @Body StudentIdModel student);
|
||||
|
||||
@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}")
|
||||
Completable setTutorWhitelist(@Path("tutorID") String tutorID, @Body IsUsingListBool isUsing);
|
||||
|
||||
@POST("api/users/whitelist/{tutorID}")
|
||||
Completable addStudentTowhitelist(@Path("tutorID") String tutorID, @Body StudentIdModel student);
|
||||
Completable 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);
|
||||
}
|
||||
|
@ -207,5 +207,25 @@ public class PrefUtils {
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
@ -48,7 +48,6 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:thumbTextPadding="45dp"
|
||||
android:checked="true"
|
||||
android:text="BLACKLIST TEXT SWITCH" />
|
||||
|
||||
</LinearLayout>
|
||||
|
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="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="@android:drawable/ic_input_add"
|
||||
app:useCompatPadding="true"
|
||||
tools:srcCompat="@tools:sample/backgrounds/scenic" />
|
||||
|
||||
<!-- A RecyclerView with some commonly used attributes -->
|
||||
|
||||
|
||||
</android.support.design.widget.CoordinatorLayout>
|
@ -13,7 +13,7 @@
|
||||
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/recycler_view"
|
||||
android:id="@+id/recycler_view_blacklist"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
|
33
app/src/main/res/layout/content_white_list.xml
Normal file
33
app/src/main/res/layout/content_white_list.xml
Normal file
@ -0,0 +1,33 @@
|
||||
<?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" />
|
||||
|
||||
|
||||
</RelativeLayout>
|
||||
|
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>
|
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>
|
59
app/src/main/res/layout/white_list_row.xml
Normal file
59
app/src/main/res/layout/white_list_row.xml
Normal file
@ -0,0 +1,59 @@
|
||||
<?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" />
|
||||
|
||||
|
||||
<!--<TextView-->
|
||||
<!--android:id="@+id/isOnline"-->
|
||||
<!--android:layout_width="48dp"-->
|
||||
<!--android:layout_height="30dp"-->
|
||||
<!--android:layout_below="@+id/firstName"-->
|
||||
<!--android:layout_marginStart="7dp"-->
|
||||
<!--android:layout_marginTop="-10dp"-->
|
||||
<!--android:layout_toEndOf="@+id/firstName"-->
|
||||
<!--android:textColor="@color/note_list_text"-->
|
||||
<!--android:textSize="@dimen/note_list_text" />-->
|
||||
|
||||
|
||||
<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"
|
||||
app:srcCompat="@drawable/abc_ic_clear_material" />
|
||||
|
||||
</RelativeLayout>
|
@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<group android:id="@+id/drawer_group_tutor">
|
||||
<!-- <item
|
||||
<item
|
||||
android:id="@+id/nav_item_one"
|
||||
android:icon="@drawable/ic_people_white"
|
||||
android:title="@string/navigation_item_whitelist" />-->
|
||||
android:title="@string/navigation_item_whitelist" />
|
||||
<item
|
||||
android:id="@+id/nav_item_two"
|
||||
android:icon="@drawable/ic_people_black"
|
||||
|
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>
|
@ -256,12 +256,15 @@
|
||||
<!--(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>
|
||||
|
||||
</resources>
|
||||
|
||||
|
||||
|
@ -33,6 +33,7 @@
|
||||
<!-- Tutors list -->
|
||||
<string name="action_settings">Settings</string>
|
||||
<string name="activity_title_blacklist">Blacklist</string>
|
||||
<string name="activity_title_whitelist">Whitelist</string>
|
||||
<string name="prompt_password">Password</string>
|
||||
<string name="action_sign_in">Sign in or register</string>
|
||||
<string name="action_sign_out">Sign out</string>
|
||||
@ -297,10 +298,103 @@
|
||||
<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_tip">(didn’t share any localization data since 7 days)</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="large_text" translatable="false">
|
||||
"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>
|
||||
|
||||
<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="title_activity_black_list">Blacklist</string>
|
||||
<string name="index_user">User index</string>
|
||||
<string name="black_list_title">Add user to blacklist</string>
|
||||
<string name="add">Add</string>
|
||||
@ -336,8 +430,8 @@
|
||||
<!--(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="only_online_users">Only online 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>
|
||||
|
Loading…
Reference in New Issue
Block a user