diff --git a/app/build.gradle b/app/build.gradle
index 595676b..72c08c7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -56,5 +56,6 @@ dependencies {
implementation "com.squareup.okhttp3:logging-interceptor:3.11.0"
implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
implementation 'com.auth0.android:jwtdecode:1.1.1'
+ implementation 'com.annimon:stream:1.2.1'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f29338f..c5863db 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,12 +37,10 @@
android:label="@string/title_activity_login"
android:launchMode="singleTask"
android:noHistory="true" />
+
-
-
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java
index 1d61e36..26078fa 100644
--- a/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java
+++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java
@@ -6,6 +6,7 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.os.Build;
+import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.design.widget.NavigationView;
@@ -15,46 +16,36 @@ import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
-import android.os.Bundle;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
-import android.text.TextUtils;
-import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.FrameLayout;
-import android.widget.ListView;
import android.widget.Toast;
import com.uam.wmi.findmytutor.R;
import com.uam.wmi.findmytutor.service.BackgroundLocalizationService;
+import com.uam.wmi.findmytutor.utils.ActiveFragment;
import com.uam.wmi.findmytutor.utils.PrefUtils;
-import java.util.ArrayList;
public abstract class BaseActivity
extends AppCompatActivity
implements BottomNavigationView.OnNavigationItemSelectedListener {
+ protected static final int REQUEST_PERMISSIONS = 100;
+ public DrawerLayout drawerLayout;
protected BottomNavigationView navigationView;
protected NavigationView drawerNavigationView;
protected DrawerLayout sideDrawer;
-
protected Toolbar toolbar;
-
- public DrawerLayout drawerLayout;
- private ActionBarDrawerToggle actionBarDrawerToggle;
- // 4 search
- private ListView listView;
- private ArrayList stringArrayList;
- private SharingFragment sharingFragment;
- protected static final int REQUEST_PERMISSIONS = 100;
- boolean boolean_permission;
protected boolean isTutor;
-
-
-
+ boolean boolean_permission;
+ private ActionBarDrawerToggle actionBarDrawerToggle;
+ private SharingFragment sharingFragment;
+ private Fragment userListFragment;
+ private ActiveFragment activeFragment = ActiveFragment.NONE;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -66,22 +57,22 @@ public abstract class BaseActivity
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
- String itemName = (String)item.getTitle();
+ String itemName = (String) item.getTitle();
Intent launchIntent;
- if(itemName.equals("Whitelist")){
+ if (itemName.equals("Whitelist")) {
/* launchIntent = new Intent(getApplicationContext(), WhitelistActivity.class);
startActivity(launchIntent);*/
- }else if (itemName.equals("Blacklist")){
+ } else if (itemName.equals("Blacklist")) {
/* launchIntent = new Intent(getApplicationContext(), BlacklistActivity.class);
startActivity(launchIntent);*/
- }else if (itemName.equals("Profile")){
+ } else if (itemName.equals("Profile")) {
/* launchIntent = new Intent(getApplicationContext(), ProfileActivity.class);
startActivity(launchIntent);*/
- }else if (itemName.equals("Settings")){
+ } else if (itemName.equals("Settings")) {
launchIntent = new Intent(getApplicationContext(), SettingsActivity.class);
startActivity(launchIntent);
- }else if (itemName.equals("Log out")){
+ } else if (itemName.equals("Log out")) {
PrefUtils.cleanUserLocalStorage(getApplicationContext());
Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage(getBaseContext().getPackageName());
@@ -101,6 +92,8 @@ public abstract class BaseActivity
navigationView = findViewById(R.id.navigation);
navigationView.setOnNavigationItemSelectedListener(this);
sharingFragment = new SharingFragment();
+ userListFragment = new UsersListFragment();
+
isTutor = PrefUtils.getIsTutor(getApplicationContext());
if (!isTutor) {
@@ -112,7 +105,7 @@ public abstract class BaseActivity
@Override
public void setContentView(int layoutResID) {
DrawerLayout fullView = (DrawerLayout) getLayoutInflater().inflate(R.layout.base_activity, null);
- FrameLayout activityContainer = (FrameLayout) fullView.findViewById(R.id.activity_content);
+ FrameLayout activityContainer = fullView.findViewById(R.id.activity_content);
getLayoutInflater().inflate(layoutResID, activityContainer, true);
super.setContentView(fullView);
@@ -120,14 +113,13 @@ public abstract class BaseActivity
}
private void initToolbar() {
- toolbar = (Toolbar) findViewById(R.id.toolbar);
+ toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
-
private void setUpNav() {
- drawerLayout = (DrawerLayout) findViewById(R.id.activity_container);
+ drawerLayout = findViewById(R.id.activity_container);
actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawerLayout.addDrawerListener(actionBarDrawerToggle);
@@ -147,16 +139,13 @@ public abstract class BaseActivity
setUpNav();
actionBarDrawerToggle.syncState();
- Log.e("erororr", "guewa!" + isTutor);
-// if (isTutor && getContentViewId() == R.layout.activity_map) {
- if (isTutor) {
- Log.e("erororr", "taaaaaak!");
+ if (isTutor) {
fn_permission();
}
}
- private void fn_permission() {
+ private void fn_permission() {
if ((ContextCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) {
if ((ActivityCompat.shouldShowRequestPermissionRationale(BaseActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION))) {
@@ -191,32 +180,40 @@ public abstract class BaseActivity
}
@Override
- public boolean onCreateOptionsMenu( Menu menu) {
- getMenuInflater().inflate( R.menu.menu_main, menu);
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.menu_main, menu);
- MenuItem myActionMenuItem = menu.findItem( R.id.action_search);
+ MenuItem myActionMenuItem = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) myActionMenuItem.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
- public boolean onQueryTextSubmit(String query) {
+ public boolean onQueryTextSubmit(String input) {
+ if (activeFragment.equals(ActiveFragment.USER_LIST)) {
+ executeUserListSearch(input);
+ }
+
return false;
}
@Override
- public boolean onQueryTextChange(String newText) {
- if (TextUtils.isEmpty(newText)) {
- //adapter.filter("");
- //listView.clearTextFilter();
- } else {
- //adapter.filter(newText);
+
+ public boolean onQueryTextChange(String input) {
+ if (activeFragment.equals(ActiveFragment.USER_LIST)) {
+ executeUserListSearch(input);
}
+
return true;
}
+
});
return true;
}
+ private void executeUserListSearch(String input) {
+ ((UsersListFragment) userListFragment).searchUser(input);
+ }
+
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (actionBarDrawerToggle.onOptionsItemSelected(item)) {
@@ -249,46 +246,53 @@ public abstract class BaseActivity
@Override
public void onPause() {
super.onPause();
- overridePendingTransition(0,0);
- }
-
- private void setFragment(Fragment fragment) {
- FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
- fragmentTransaction.replace(R.id.activity_content, fragment);
- fragmentTransaction.commit();
+ overridePendingTransition(0, 0);
}
private void removeFragment(Fragment fragment) {
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
- fragmentTransaction.remove(fragment);
+ fragmentTransaction.hide(fragment);
fragmentTransaction.commit();
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
-
-
navigationView.postDelayed(() -> {
int itemId = item.getItemId();
+
if (itemId == R.id.nav_map) {
removeFragment(sharingFragment);
-
- // startActivity(new Intent(this, MapActivity.class));
+ removeFragment(userListFragment);
} else if (itemId == R.id.nav_profile) {
- // startActivity(new Intent(this, ProfileActivity.class));
- setFragment(sharingFragment);
-
- } else if (itemId == R.id.nav_notif) {
- //startActivity(new Intent(this, NotificationsActivity.class));
- setFragment(sharingFragment);
+ loadUserSettingsFragment();
+ } else if (itemId == R.id.nav_user_list) {
+ loadUserListFragment();
}
- //finish();
+
}, 300);
return true;
}
+ private void loadUserSettingsFragment() {
+ activeFragment = ActiveFragment.SHARED_PREFERENCES;
+ sharingFragment = SharingFragment.newInstance();
+ FragmentTransaction ft = getFragmentManager().beginTransaction();
+ ft.replace(R.id.activity_content, sharingFragment);
+ ft.commit();
+ }
+
+ private void loadUserListFragment() {
+ activeFragment = ActiveFragment.USER_LIST;
+
+ userListFragment = UsersListFragment.newInstance();
+ FragmentTransaction ft = getFragmentManager().beginTransaction();
+ ft.replace(R.id.activity_content, userListFragment);
+ ft.commit();
+ }
+
+
private void updateNavigationBarState() {
int actionId = getNavigationMenuItemId();
selectBottomNavigationBarItem(actionId);
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/LoginActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/LoginActivity.java
index b67cf04..748c8fb 100644
--- a/app/src/main/java/com/uam/wmi/findmytutor/activity/LoginActivity.java
+++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/LoginActivity.java
@@ -10,6 +10,7 @@ import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
+
import android.util.Log;
import android.view.View;
import android.view.inputmethod.EditorInfo;
@@ -143,6 +144,7 @@ public class LoginActivity extends AppCompatActivity {
private void showProgress(final boolean show) {
int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime);
+
mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
mLoginFormView.animate().setDuration(shortAnimTime).alpha(
show ? 0 : 1).setListener(new AnimatorListenerAdapter() {
@@ -160,6 +162,7 @@ public class LoginActivity extends AppCompatActivity {
mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
}
});
+
}
@@ -168,11 +171,11 @@ public class LoginActivity extends AppCompatActivity {
//Fake validate
LdapUser user = new LdapUser(email, password, "admin", (isTutor) ? "Tutor" : "Student", "string", "string", email);
-
// ValidateUser user = new ValidateUser(email, password);
// LDAP logging
// disposable.add(ldapService.validate(user)
+
disposable.add(ldapService.fakeValidate(user)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
@@ -180,6 +183,7 @@ public class LoginActivity extends AppCompatActivity {
}
private void getUserProfile(String userId) {
+
disposable.add(userService.getUserByID(userId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
@@ -198,7 +202,6 @@ public class LoginActivity extends AppCompatActivity {
JWT jwt = new JWT(token);
Claim role = jwt.getClaim("nameid");
- Log.e("LOGIN", "SUCCESS " + token);
PrefUtils.storeIsLoggedIn(getApplicationContext(), true);
PrefUtils.storeApiKey(getApplicationContext(), token);
@@ -231,5 +234,6 @@ public class LoginActivity extends AppCompatActivity {
PrefUtils.storeUserLastName(getApplicationContext(), user.getLastName());
PrefUtils.storeUserName(getApplicationContext(), user.getUserName());
}
+
}
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingActivity.java
deleted file mode 100644
index a989f0e..0000000
--- a/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingActivity.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package com.uam.wmi.findmytutor.activity;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.pm.PackageManager;
-import android.os.Build;
-import android.os.Bundle;
-import android.preference.EditTextPreference;
-import android.preference.ListPreference;
-import android.preference.Preference;
-import android.preference.PreferenceFragment;
-import android.preference.PreferenceManager;
-import android.util.Log;
-import android.view.MenuItem;
-import com.uam.wmi.findmytutor.R;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-import static android.content.ContentValues.TAG;
-
-
-public class SharingActivity extends AppCompatPreferenceActivity {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- getFragmentManager().beginTransaction().replace(android.R.id.content, new MainPreferenceFragment()).commit();
- }
-
- public static class MainPreferenceFragment extends PreferenceFragment {
- @Override
- public void onCreate(final Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.layout.pref_sharing);
-
- Preference manualStatus = findPreference("key_manual_status");
- manualStatus.setOnPreferenceChangeListener((preference, newValue) -> {
- ListPreference lp = (ListPreference) findPreference("key_status_value");
- updateListPreference(lp, newValue, "manual_statuses");
- return true;
- });
-
- /* Preference manualLocation = findPreference("key_sharing_enabled");
- manualLocation.setOnPreferenceChangeListener((preference, newValue) -> {
- ListPreference lp = (ListPreference) findPreference("key_sharing_enabled");
- updateListPreference(lp, newValue, "sharing_enabled");
- return true;
- });*/
-
- Preference sharingLocation = findPreference("key_sharing_enabled");
- sharingLocation.setOnPreferenceChangeListener((preference, o) -> {
- Log.e("change", "1");
- return false;
- });
- }
-
-
- protected void updateListPreference(ListPreference lp,Object newValue,String storageKey){
- CharSequence [] entries = lp.getEntries();
- Set defaultEntries = new HashSet(Arrays.asList(entries));
- SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
- Set manualStatusSet = sharedPref.getStringSet(storageKey,defaultEntries);
- manualStatusSet.add((String) newValue);
- String [] manualStatusArr = manualStatusSet.toArray(new String[0]);
- Arrays.sort(manualStatusArr);
- setListPreferenceData(lp.getKey(),manualStatusArr);
- SharedPreferences.Editor editor = sharedPref.edit();
- editor.putStringSet(storageKey,manualStatusSet);
- editor.commit();
- }
-
- protected ListPreference setListPreferenceData(String lp_name, String [] entries) {
- ListPreference lp = (ListPreference) findPreference(lp_name);
- lp.setEntries(entries);
- CharSequence[] entryValues = new CharSequence [entries.length];
-
- for (int i = 0; i < entries.length; i++){
- entryValues[i] = Integer.toString(i+1);
- }
-
- lp.setDefaultValue("1");
- lp.setEntryValues(entryValues);
-
- return lp;
- }
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getItemId() == android.R.id.home) {
- onBackPressed();
- }
- return super.onOptionsItemSelected(item);
- }
-
- /**
- * Email client intent to send support mail
- * Appends the necessary device information to email body
- * useful when providing support
- */
-/* public static void sendFeedback(Context context) {
- String body = null;
- try {
- body = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
- body = "\n\n-----------------------------\nPlease don't remove this information\n Device OS: Android \n Device OS version: " +
- Build.VERSION.RELEASE + "\n App Version: " + body + "\n Device Brand: " + Build.BRAND +
- "\n Device Model: " + Build.MODEL + "\n Device Manufacturer: " + Build.MANUFACTURER;
- } catch (PackageManager.NameNotFoundException e) {
- }
- Intent intent = new Intent(Intent.ACTION_SEND);
- intent.setType("message/rfc822");
- intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"team@findmytutor.com"});
- intent.putExtra(Intent.EXTRA_SUBJECT, "Query from android app");
- intent.putExtra(Intent.EXTRA_TEXT, body);
- context.startActivity(Intent.createChooser(intent, context.getString(R.string.choose_email_client)));
- }*/
-}
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java
index 586fa13..03f6f2d 100644
--- a/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java
+++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java
@@ -1,5 +1,6 @@
package com.uam.wmi.findmytutor.activity;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
@@ -21,6 +22,7 @@ import java.util.Set;
//}
public class SharingFragment extends PreferenceFragment {
+ @SuppressLint("ResourceType")
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -46,6 +48,13 @@ public class SharingFragment extends PreferenceFragment {
});
}
+
+ public static SharingFragment newInstance() {
+
+ return new SharingFragment();
+ }
+
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/UsersListFragment.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/UsersListFragment.java
new file mode 100644
index 0000000..3af23d8
--- /dev/null
+++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/UsersListFragment.java
@@ -0,0 +1,261 @@
+package com.uam.wmi.findmytutor.activity;
+
+import android.app.Fragment;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.design.widget.CoordinatorLayout;
+import android.support.design.widget.Snackbar;
+import android.support.v7.app.AlertDialog;
+import android.support.v7.widget.DefaultItemAnimator;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import com.annimon.stream.Stream;
+import com.jakewharton.retrofit2.adapter.rxjava2.HttpException;
+import com.uam.wmi.findmytutor.R;
+import com.uam.wmi.findmytutor.adapters.TutorsListAdapter;
+
+import com.uam.wmi.findmytutor.model.DutyHourViewModel;
+import com.uam.wmi.findmytutor.model.TutorTabViewModel;
+import com.uam.wmi.findmytutor.model.User;
+import com.uam.wmi.findmytutor.network.ApiClient;
+import com.uam.wmi.findmytutor.service.TutorTabApi;
+import com.uam.wmi.findmytutor.service.UserService;
+import com.uam.wmi.findmytutor.utils.MyDividerItemDecoration;
+import com.uam.wmi.findmytutor.utils.RecyclerTouchListener;
+import com.uam.wmi.findmytutor.utils.RestApiHelper;
+
+import java.util.ArrayList;
+import java.util.Collections;
+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;
+
+import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext;
+
+public class UsersListFragment extends Fragment {
+ private static final String TAG = UsersListFragment.class.getSimpleName();
+
+ @BindView(R.id.coordinator_layout)
+ CoordinatorLayout coordinatorLayout;
+ @BindView(R.id.recycler_view)
+ RecyclerView recyclerView;
+ @BindView(R.id.txt_empty_notes_view)
+ TextView noNotesView;
+
+ private UserService userService;
+ private TutorTabApi tutorTabService;
+ private CompositeDisposable disposable = new CompositeDisposable();
+ private TutorsListAdapter mAdapter;
+ private List tutorsList = new ArrayList<>();
+ private List tutorsFiltered = new ArrayList<>();
+
+ public UsersListFragment() {
+ }
+
+ public static UsersListFragment newInstance() {
+ return new UsersListFragment();
+ }
+
+ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ mAdapter = new TutorsListAdapter(getActivity().getApplicationContext(), tutorsFiltered);
+ View view = inflater.inflate(R.layout.users_list, container, false);
+ view.setBackgroundColor(getResources().getColor(android.R.color.white));
+ return view;
+ }
+
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ ButterKnife.bind(this, view);
+
+ userService = ApiClient.getClient(getApplicationContext())
+ .create(UserService.class);
+
+ tutorTabService = ApiClient.getClient(getActivity().getApplicationContext())
+ .create(TutorTabApi.class);
+
+ RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
+ recyclerView.setLayoutManager(mLayoutManager);
+ recyclerView.setItemAnimator(new DefaultItemAnimator());
+ recyclerView.addItemDecoration(new MyDividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL, 16));
+ recyclerView.setAdapter(mAdapter);
+
+ fetchAllTutors();
+
+ recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity().getApplicationContext(),
+ recyclerView, new RecyclerTouchListener.ClickListener() {
+ @Override
+ public void onClick(View view, final int position) {
+ showNoteDialog(tutorsFiltered.get(position));
+ }
+
+ @Override
+ public void onLongClick(View view, int position) {
+ }
+ }));
+
+
+ }
+
+ public void searchUser(String textToSearch) {
+ tutorsFiltered.clear();
+ tutorsFiltered.addAll(Stream.of(tutorsList).filter(t ->
+ t.toSearchAbleString().toLowerCase().contains(textToSearch.toLowerCase())).toList());
+ mAdapter.notifyDataSetChanged();
+ }
+
+ private void showNoteDialog(final User user) {
+ LayoutInflater layoutInflaterAndroid = LayoutInflater.from(getActivity().getApplicationContext());
+ View view = layoutInflaterAndroid.inflate(R.layout.note_dialog, null);
+
+ AlertDialog.Builder alertDialogBuilderUserInput = new AlertDialog.Builder(getActivity());
+ alertDialogBuilderUserInput.setView(view);
+
+ alertDialogBuilderUserInput.setNegativeButton(R.string.cancel, (dialog, id) -> {
+ // User cancelled the dialog
+ });
+
+ TextView userName = view.findViewById(R.id.userName);
+ ListView userDutyHours = view.findViewById(R.id.userDutyHours);
+ TextView userNote = view.findViewById(R.id.userNote);
+ TextView userRoom = view.findViewById(R.id.userRoom);
+ TextView userEmail = view.findViewById(R.id.userEmail);
+ TextView department = view.findViewById(R.id.userDepartment);
+
+ userName.setText(String.format("%s %s", user.getFirstName(), user.getLastName()));
+
+ disposable.add(
+ tutorTabService.apiUsersTutorTabByTutorIdGet(user.getId())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribeWith(new DisposableSingleObserver() {
+ @Override
+ public void onSuccess(TutorTabViewModel tutorTabViewModel) {
+ final AlertDialog alertDialog = alertDialogBuilderUserInput.create();
+ List dutyHoursList = Stream.of(tutorTabViewModel.getDutyHours())
+ .map(DutyHourViewModel::getSummary).toList();
+
+ userRoom.setText(String.format("%s: %s", getString(R.string.userRoom), tutorTabViewModel.getRoom()));
+ userEmail.setText(String.format("%s: %s", getString(R.string.userEmail), tutorTabViewModel.getEmailTutorTab()));
+ userNote.setText(String.format("%s: %s", getString(R.string.userNote), tutorTabViewModel.getNote()));
+ department.setText(String.format("%s: %s", getString(R.string.userDepartment), user.getDepartment()));
+
+ final ArrayAdapter arrayAdapter = new ArrayAdapter<>(getActivity(),
+ android.R.layout.simple_list_item_activated_1, dutyHoursList);
+
+ userDutyHours.setAdapter(arrayAdapter);
+ alertDialog.show();
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ showError(e);
+ }
+ }));
+ }
+
+ private void fetchAllTutors() {
+ disposable.add(
+ userService.apiUsersGet()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .map(tutors -> {
+ List tutorsList = new ArrayList<>(tutors);
+
+ List onlineTutors = Stream.of(tutorsList).filter(User::isIsOnline).toList();
+
+ List activeNotOnlineTutors = Stream.of(tutorsList)
+ .filter(t -> t.isIsActive() && !onlineTutors.contains(t)).toList();
+
+ List notActiveTutors = Stream.of(tutorsList)
+ .filterNot(User::isIsActive).toList();
+
+ Collections.sort(onlineTutors, this::sortByUserName);
+ Collections.sort(activeNotOnlineTutors, this::sortByUserName);
+ Collections.sort(notActiveTutors, this::sortByUserName);
+
+ List sortedUserList = new ArrayList<>(onlineTutors);
+ sortedUserList.addAll(activeNotOnlineTutors);
+ sortedUserList.addAll(notActiveTutors);
+
+ return sortedUserList;
+ })
+ .subscribeWith(new DisposableSingleObserver>() {
+ @Override
+ public void onSuccess(List users) {
+ tutorsList.clear();
+ tutorsList.addAll(users);
+ tutorsFiltered.addAll(users);
+ mAdapter.notifyDataSetChanged();
+ toggleEmptyNotes();
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ showError(e);
+ }
+ }));
+ }
+
+
+ private int sortByUserName(User t1, User t2) {
+ return t1.getFirstName().compareTo(t2.getFirstName());
+ }
+
+ private void showError(Throwable e) {
+ String message = e.toString();
+
+ if (e instanceof HttpException) {
+ ResponseBody responseBody = ((HttpException) e).response().errorBody();
+ message = RestApiHelper.getErrorMessage(responseBody);
+ }
+
+ Snackbar.make(coordinatorLayout, message, Snackbar.LENGTH_LONG)
+ .show();
+ }
+
+ private void toggleEmptyNotes() {
+ if (tutorsList.size() > 0) {
+ noNotesView.setVisibility(View.GONE);
+ } else {
+ noNotesView.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ disposable.dispose();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ fetchAllTutors();
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ }
+
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/adapters/TutorsListAdapter.java b/app/src/main/java/com/uam/wmi/findmytutor/adapters/TutorsListAdapter.java
new file mode 100644
index 0000000..36c7f00
--- /dev/null
+++ b/app/src/main/java/com/uam/wmi/findmytutor/adapters/TutorsListAdapter.java
@@ -0,0 +1,87 @@
+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.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.uam.wmi.findmytutor.R;
+import com.uam.wmi.findmytutor.model.User;
+
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+
+public class TutorsListAdapter extends RecyclerView.Adapter {
+
+ private Context context;
+ private List tutorsList;
+
+ public TutorsListAdapter(Context context, List tutors) {
+ this.context = context;
+ this.tutorsList = tutors;
+ }
+
+
+ class MyViewHolder extends RecyclerView.ViewHolder {
+
+ @BindView(R.id.firstName)
+ TextView firstName;
+
+ @BindView(R.id.lastName)
+ TextView lastName;
+
+ @BindView(R.id.isOnline)
+ TextView isOnline;
+
+ MyViewHolder(View view) {
+ super(view);
+ ButterKnife.bind(this, view);
+ }
+ }
+
+ @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(tutor.getFirstName());
+ holder.lastName.setText(tutor.getLastName());
+
+ if(tutor.isIsOnline()) {
+ image = context.getResources().getDrawable(R.drawable.online_user);
+ } else {
+ image = context.getResources().getDrawable(R.drawable.not_online);
+ }
+
+ if(!tutor.isIsActive()){
+ image = context.getResources().getDrawable(R.drawable.not_active_user);
+ }
+
+ image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight());
+ holder.isOnline.setCompoundDrawables(image, null, null, null);
+ }
+
+ @Override
+ public int getItemCount() {
+ return tutorsList.size();
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/model/DutyHourViewModel.java b/app/src/main/java/com/uam/wmi/findmytutor/model/DutyHourViewModel.java
new file mode 100644
index 0000000..d3bcbe2
--- /dev/null
+++ b/app/src/main/java/com/uam/wmi/findmytutor/model/DutyHourViewModel.java
@@ -0,0 +1,127 @@
+package com.uam.wmi.findmytutor.model;
+
+
+import java.util.Objects;
+import com.google.gson.annotations.SerializedName;
+import io.swagger.annotations.ApiModelProperty;
+
+
+/**
+ * DutyHourViewModel
+ */
+
+public class DutyHourViewModel {
+ @SerializedName("day")
+ private String day = null;
+
+ @SerializedName("start")
+ private String start = null;
+
+ @SerializedName("end")
+ private String end = null;
+
+ public DutyHourViewModel day(String day) {
+ this.day = day;
+ return this;
+ }
+
+ /**
+ * Get day
+ * @return day
+ **/
+ @ApiModelProperty(value = "")
+ public String getDay() {
+ return day;
+ }
+
+ public void setDay(String day) {
+ this.day = day;
+ }
+
+ public DutyHourViewModel start(String start) {
+ this.start = start;
+ return this;
+ }
+
+ /**
+ * Get start
+ * @return start
+ **/
+ @ApiModelProperty(value = "")
+ public String getStart() {
+ return start;
+ }
+
+ public void setStart(String start) {
+ this.start = start;
+ }
+
+ public DutyHourViewModel end(String end) {
+ this.end = end;
+ return this;
+ }
+
+ /**
+ * Get end
+ * @return end
+ **/
+ @ApiModelProperty(value = "")
+ public String getEnd() {
+ return end;
+ }
+
+ public void setEnd(String end) {
+ this.end = end;
+ }
+
+
+ @Override
+ public boolean equals(java.lang.Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ DutyHourViewModel dutyHourViewModel = (DutyHourViewModel) o;
+ return Objects.equals(this.day, dutyHourViewModel.day) &&
+ Objects.equals(this.start, dutyHourViewModel.start) &&
+ Objects.equals(this.end, dutyHourViewModel.end);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(day, start, end);
+ }
+
+ public String getSummary() {
+ return this.getDay() + " " + this.getStart() + " " + this.getEnd();
+ }
+
+
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class DutyHourViewModel {\n");
+
+ sb.append(" day: ").append(toIndentedString(day)).append("\n");
+ sb.append(" start: ").append(toIndentedString(start)).append("\n");
+ sb.append(" end: ").append(toIndentedString(end)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(java.lang.Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+
+}
+
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/model/LdapUser.java b/app/src/main/java/com/uam/wmi/findmytutor/model/LdapUser.java
index 3c5cef4..2d4ded5 100644
--- a/app/src/main/java/com/uam/wmi/findmytutor/model/LdapUser.java
+++ b/app/src/main/java/com/uam/wmi/findmytutor/model/LdapUser.java
@@ -11,7 +11,7 @@ import io.swagger.annotations.ApiModelProperty;
* LdapUser
*/
-public class LdapUser extends BaseResponse{
+public class LdapUser extends BaseResponse {
@SerializedName("login")
private String login = null;
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/model/Model.java b/app/src/main/java/com/uam/wmi/findmytutor/model/Model.java
index 3b5ee47..bca9777 100644
--- a/app/src/main/java/com/uam/wmi/findmytutor/model/Model.java
+++ b/app/src/main/java/com/uam/wmi/findmytutor/model/Model.java
@@ -1,3 +1,4 @@
+/*
package com.uam.wmi.findmytutor.model;
@@ -14,3 +15,4 @@ public class Model
}
}
+*/
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/model/PagedResult.java b/app/src/main/java/com/uam/wmi/findmytutor/model/PagedResult.java
index db05386..a5dab31 100644
--- a/app/src/main/java/com/uam/wmi/findmytutor/model/PagedResult.java
+++ b/app/src/main/java/com/uam/wmi/findmytutor/model/PagedResult.java
@@ -1,3 +1,4 @@
+
package com.uam.wmi.findmytutor.model;
import com.google.gson.annotations.Expose;
@@ -9,7 +10,7 @@ public class PagedResult {
@SerializedName("results")
@Expose
- private List results = null;
+ private List results = null;
@SerializedName("currentPage")
@Expose
private Integer currentPage;
@@ -29,11 +30,11 @@ public class PagedResult {
@Expose
private Integer lastRowOnPage;
- public List getResults() {
+ public List getResults() {
return results;
}
- public void setResults(List results) {
+ public void setResults(List results) {
this.results = results;
}
@@ -86,3 +87,15 @@ public class PagedResult {
}
}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/model/PagedResultReturnedTutors.java b/app/src/main/java/com/uam/wmi/findmytutor/model/PagedResultReturnedTutors.java
new file mode 100644
index 0000000..4e98f5f
--- /dev/null
+++ b/app/src/main/java/com/uam/wmi/findmytutor/model/PagedResultReturnedTutors.java
@@ -0,0 +1,89 @@
+package com.uam.wmi.findmytutor.model;
+
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
+import com.uam.wmi.findmytutor.model.Results;
+
+public class PagedResultReturnedTutors extends BaseResponse{
+
+ @SerializedName("results")
+ @Expose
+ private Results results;
+ @SerializedName("currentPage")
+ @Expose
+ private Integer currentPage;
+ @SerializedName("pageCount")
+ @Expose
+ private Integer pageCount;
+ @SerializedName("pageSize")
+ @Expose
+ private Integer pageSize;
+ @SerializedName("rowCount")
+ @Expose
+ private Integer rowCount;
+ @SerializedName("firstRowOnPage")
+ @Expose
+ private Integer firstRowOnPage;
+ @SerializedName("lastRowOnPage")
+ @Expose
+ private Integer lastRowOnPage;
+
+ public Results getResults() {
+ return results;
+ }
+
+ public void setResults(Results results) {
+ this.results = results;
+ }
+
+ public Integer getCurrentPage() {
+ return currentPage;
+ }
+
+ public void setCurrentPage(Integer currentPage) {
+ this.currentPage = currentPage;
+ }
+
+ public Integer getPageCount() {
+ return pageCount;
+ }
+
+ public void setPageCount(Integer pageCount) {
+ this.pageCount = pageCount;
+ }
+
+ public Integer getPageSize() {
+ return pageSize;
+ }
+
+ public void setPageSize(Integer pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ public Integer getRowCount() {
+ return rowCount;
+ }
+
+ public void setRowCount(Integer rowCount) {
+ this.rowCount = rowCount;
+ }
+
+ public Integer getFirstRowOnPage() {
+ return firstRowOnPage;
+ }
+
+ public void setFirstRowOnPage(Integer firstRowOnPage) {
+ this.firstRowOnPage = firstRowOnPage;
+ }
+
+ public Integer getLastRowOnPage() {
+ return lastRowOnPage;
+ }
+
+ public void setLastRowOnPage(Integer lastRowOnPage) {
+ this.lastRowOnPage = lastRowOnPage;
+ }
+
+}
+
+
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/model/PagedResultUserResponseModel.java b/app/src/main/java/com/uam/wmi/findmytutor/model/PagedResultUserResponseModel.java
index 0e16bb2..2927d71 100644
--- a/app/src/main/java/com/uam/wmi/findmytutor/model/PagedResultUserResponseModel.java
+++ b/app/src/main/java/com/uam/wmi/findmytutor/model/PagedResultUserResponseModel.java
@@ -1,5 +1,6 @@
package com.uam.wmi.findmytutor.model;
+import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;
@@ -14,24 +15,31 @@ import io.swagger.annotations.ApiModelProperty;
public class PagedResultUserResponseModel extends BaseResponse {
@SerializedName("results")
+ @Expose
private List results = null;
@SerializedName("currentPage")
+ @Expose
private Integer currentPage = null;
@SerializedName("pageCount")
+ @Expose
private Integer pageCount = null;
@SerializedName("pageSize")
+ @Expose
private Integer pageSize = null;
@SerializedName("rowCount")
+ @Expose
private Integer rowCount = null;
@SerializedName("firstRowOnPage")
+ @Expose
private Integer firstRowOnPage = null;
@SerializedName("lastRowOnPage")
+ @Expose
private Integer lastRowOnPage = null;
public PagedResultUserResponseModel results(List results) {
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/model/Results.java b/app/src/main/java/com/uam/wmi/findmytutor/model/Results.java
new file mode 100644
index 0000000..c57f109
--- /dev/null
+++ b/app/src/main/java/com/uam/wmi/findmytutor/model/Results.java
@@ -0,0 +1,33 @@
+package com.uam.wmi.findmytutor.model;
+
+
+import java.util.List;
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
+
+public class Results extends BaseResponse {
+
+ @SerializedName("tutors")
+ @Expose
+ private List tutors = null;
+ @SerializedName("blacklistersTutors")
+ @Expose
+ private List