diff --git a/.gitignore b/.gitignore
index 31fce2b..1bbe355 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,5 @@
# Built application files
-*.apk
-*.ap_
+
# Files for the ART/Dalvik VM
*.dex
diff --git a/app/build.gradle b/app/build.gradle
index 73817ff..ab8ae7e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -56,6 +56,7 @@ 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'
// FloatingBarMenu
implementation 'com.getbase:floatingactionbutton:1.10.1'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f29338f..5b1bc92 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -8,6 +8,14 @@
+
+
+
+
+
+
+
+
+
-
-
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 d93fa9c..4a2cea1 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
@@ -1,36 +1,39 @@
package com.uam.wmi.findmytutor.activity;
+import android.Manifest;
import android.app.Fragment;
import android.app.FragmentTransaction;
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;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
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;
+import java.util.Arrays;
+import java.util.List;
+
public abstract class BaseActivity
extends AppCompatActivity
@@ -38,43 +41,167 @@ public abstract class BaseActivity
String tag = getClass().getName();
+ protected static final int REQUEST_PERMISSIONS = 100;
+ private final static int REQUEST_CODE_ASK_PERMISSIONS = 1;
- protected BottomNavigationView navigationView;
-
- protected Toolbar toolbar;
+ private static final String[] REQUIRED_SDK_PERMISSIONS = new String[] {
+ Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS };
public DrawerLayout drawerLayout;
+ protected BottomNavigationView navigationView;
+ protected NavigationView drawerNavigationView;
+ protected DrawerLayout sideDrawer;
+ protected Toolbar toolbar;
+ protected boolean isTutor;
+
private ActionBarDrawerToggle actionBarDrawerToggle;
- // 4 search
- private ListView listView;
- private ArrayList stringArrayList;
private SharingFragment sharingFragment;
- private static final int REQUEST_PERMISSIONS = 100;
boolean boolean_permission;
- private boolean isTutor;
+ private Fragment userListFragment;
+ private ActiveFragment activeFragment = ActiveFragment.NONE;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getContentViewId());
+ drawerNavigationView = findViewById(R.id.nav_view);
+ sideDrawer = findViewById(R.id.activity_container);
+
+ drawerNavigationView.setNavigationItemSelectedListener(
+ item -> {
+ 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);*/
+ } else if (itemName.equals(getResources().getString(R.string.navigation_item_blacklist))) {
+ /* launchIntent = new Intent(getApplicationContext(), BlacklistActivity.class);
+ startActivity(launchIntent);*/
+ } else if (itemName.equals(getResources().getString(R.string.navigation_item_profile))) {
+ /* launchIntent = new Intent(getApplicationContext(), ProfileActivity.class);
+ startActivity(launchIntent);*/
+ } else if (itemName.equals(getResources().getString(R.string.navigation_item_settings))) {
+ launchIntent = new Intent(getApplicationContext(), SettingsActivity.class);
+ startActivity(launchIntent);
+
+ } else if (itemName.equals(getResources().getString(R.string.navigation_item_logout))) {
+ stopBackgroundLocalizationTask();
+
+ PrefUtils.cleanUserLocalStorage(getApplicationContext());
+ Intent i = getBaseContext().getPackageManager()
+ .getLaunchIntentForPackage(getBaseContext().getPackageName());
+ if (i != null) {
+ i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ }
+ startActivity(i);
+ finish();
+
+ }
+
+ sideDrawer.closeDrawers();
+
+ return true;
+ }
+ );
navigationView = findViewById(R.id.navigation);
navigationView.setOnNavigationItemSelectedListener(this);
sharingFragment = new SharingFragment();
+ userListFragment = new UsersListFragment();
+
isTutor = PrefUtils.getIsTutor(getApplicationContext());
if (!isTutor) {
navigationView.findViewById(R.id.nav_profile).setVisibility(View.GONE);
}
+ checkPermissions();
+ }
+
+ protected void checkPermissions() {
+ final List missingPermissions = new ArrayList();
+
+ for (final String permission : REQUIRED_SDK_PERMISSIONS) {
+ final int result = ContextCompat.checkSelfPermission(this, permission);
+ if (result != PackageManager.PERMISSION_GRANTED) {
+ missingPermissions.add(permission);
+ }
+ }
+ if (!missingPermissions.isEmpty()) {
+ // request all missing permissions
+ final String[] permissions = missingPermissions
+ .toArray(new String[missingPermissions.size()]);
+ ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE_ASK_PERMISSIONS);
+ } else {
+ final int[] grantResults = new int[REQUIRED_SDK_PERMISSIONS.length];
+ Arrays.fill(grantResults, PackageManager.PERMISSION_GRANTED);
+ onRequestPermissionsResult(REQUEST_CODE_ASK_PERMISSIONS, REQUIRED_SDK_PERMISSIONS,
+ grantResults);
+ }
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[],
+ @NonNull int[] grantResults) {
+ switch (requestCode) {
+ case REQUEST_CODE_ASK_PERMISSIONS:
+ for (int index = permissions.length - 1; index >= 0; --index) {
+ if (grantResults[index] != PackageManager.PERMISSION_GRANTED) {
+ // exit the app if one permission is not granted
+ Toast.makeText(this, "Required permission '" + permissions[index]
+ + "' not granted, exiting", Toast.LENGTH_LONG).show();
+ finish();
+ return;
+ }
+ }
+
+ break;
+ }
+ }
+
+ public void stopBackgroundLocalizationTask() {
+ Intent stopIntent = new Intent(getApplicationContext(), BackgroundLocalizationService.class);
+ stopIntent.putExtra("request_stop", true);
+ startService(stopIntent);
+ }
+
+ public void startBackgroundLocalizationTask() {
+ if ((ContextCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) {
+
+ if ((ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.ACCESS_FINE_LOCATION))) {
+
+ } else {
+ ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION
+
+ },
+ REQUEST_PERMISSIONS);
+ }
+ } else {
+
+ Intent startIntent = new Intent(getApplicationContext(), BackgroundLocalizationService.class);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ startForegroundService(startIntent);
+ } else {
+ startService(startIntent);
+ }
+ }
+ }
+
+ public void handleBackgroundTaskLifeCycle() {
+ if (PrefUtils.isEnableSharingLocalization(getApplicationContext())) {
+ startBackgroundLocalizationTask();
+ } else {
+ stopBackgroundLocalizationTask();
+ }
}
@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);
@@ -82,14 +209,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);
@@ -110,39 +236,6 @@ public abstract class BaseActivity
actionBarDrawerToggle.syncState();
-// if (isTutor && getContentViewId() == R.layout.activity_map) {
- if (isTutor) {
- Log.e("erororr", "taaaaaak!");
- 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))) {
-
- } else {
- ActivityCompat.requestPermissions(BaseActivity.this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION
-
- },
- REQUEST_PERMISSIONS);
- }
- } else {
-
- if (isTutor) {
- Intent intent = new Intent(getApplicationContext(), BackgroundLocalizationService.class);
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- startForegroundService(intent);
- } else {
- startService(intent);
- }
-
- } else {
- Toast.makeText(getApplicationContext(), "Please enable the gps", Toast.LENGTH_SHORT).show();
- }
- }
}
@Override
@@ -159,25 +252,33 @@ public abstract class BaseActivity
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)) {
@@ -186,20 +287,6 @@ public abstract class BaseActivity
return super.onOptionsItemSelected(item);
}
- @Override
- public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
-
- switch (requestCode) {
- case REQUEST_PERMISSIONS: {
- if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
- boolean_permission = true;
- } else {
- Toast.makeText(getApplicationContext(), "Please allow the permission", Toast.LENGTH_LONG).show();
- }
- }
- }
- }
@Override
protected void onStart() {
@@ -221,7 +308,7 @@ public abstract class BaseActivity
private void removeFragment(Fragment fragment) {
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
- fragmentTransaction.remove(fragment);
+ fragmentTransaction.hide(fragment);
fragmentTransaction.commit();
}
@@ -231,24 +318,39 @@ public abstract class BaseActivity
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 9047291..bc7c95f 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
@@ -3,33 +3,21 @@ package com.uam.wmi.findmytutor.activity;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.annotation.TargetApi;
-import android.app.LoaderManager.LoaderCallbacks;
-import android.content.CursorLoader;
import android.content.Intent;
-import android.content.Loader;
-import android.content.pm.PackageManager;
-import android.database.Cursor;
import android.net.Uri;
-import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
-import android.provider.ContactsContract;
-import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
+
import android.util.Log;
-import android.view.KeyEvent;
import android.view.View;
-import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
-import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Switch;
-import android.widget.TextView;
-import android.widget.ToggleButton;
import com.auth0.android.jwt.Claim;
import com.auth0.android.jwt.JWT;
@@ -38,407 +26,205 @@ import com.uam.wmi.findmytutor.R;
import com.uam.wmi.findmytutor.model.JwtToken;
import com.uam.wmi.findmytutor.model.LdapUser;
import com.uam.wmi.findmytutor.model.User;
+import com.uam.wmi.findmytutor.model.ValidateUser;
import com.uam.wmi.findmytutor.network.ApiClient;
import com.uam.wmi.findmytutor.service.LdapService;
import com.uam.wmi.findmytutor.service.UserService;
import com.uam.wmi.findmytutor.utils.PrefUtils;
import com.uam.wmi.findmytutor.utils.RestApiHelper;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
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 android.Manifest.permission.READ_CONTACTS;
-
-/**
- * A login screen that offers login via email/password.
- */
-public class LoginActivity extends AppCompatActivity implements LoaderCallbacks {
-
- /**
- * Id to identity READ_CONTACTS permission request.
- */
- private static final int REQUEST_READ_CONTACTS = 0;
-
- /**
- * A dummy authentication store containing known user names and passwords.
- * TODO: remove after connecting to a real authentication system.
- */
- private static final String[] DUMMY_CREDENTIALS = new String[]{
- "adam@o2.pl:adamadam", "foo@example.com:hello", "bar@example.com:world"
- };
- /**
- * Keep track of the login task to ensure we can cancel it if requested.
- */
- private UserLoginTask mAuthTask = null;
+public class LoginActivity extends AppCompatActivity {
// UI references.
- private AutoCompleteTextView mEmailView;
+ private AutoCompleteTextView mLoginNameView;
private EditText mPasswordView;
private View mProgressView;
private View mLoginFormView;
- private boolean loginOption;
+ private LdapService ldapService;
+ private UserService userService;
+ private CompositeDisposable disposable = new CompositeDisposable();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
- // Set up the login form.
- mEmailView = (AutoCompleteTextView) findViewById(R.id.email);
- populateAutoComplete();
+ mLoginNameView = findViewById(R.id.email);
- mPasswordView = (EditText) findViewById(R.id.password);
- mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
- @Override
- public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
- if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) {
- attemptLogin();
- return true;
- }
- return false;
- }
- });
+ ldapService = ApiClient.getClient(getApplicationContext())
+ .create(LdapService.class);
+ userService = ApiClient.getClient(getApplicationContext())
+ .create(UserService.class);
- Switch tutorLogin = (Switch) findViewById(R.id.tutor_login_switch);
- tutorLogin.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- loginOption = tutorLogin.isChecked();
- }
- });
-
-
- Button mEmailSignInButton = (Button) findViewById(R.id.email_sign_in_button);
- mEmailSignInButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
+ mPasswordView = findViewById(R.id.password);
+ mPasswordView.setOnEditorActionListener((textView, id, keyEvent) -> {
+ if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) {
attemptLogin();
+ return true;
}
+ return false;
});
+ Switch tutorLogin = findViewById(R.id.tutor_login_switch);
+
+ tutorLogin.setOnCheckedChangeListener((buttonView, isChecked) -> {
+ PrefUtils.storeIsTutor(getApplicationContext(), isChecked);
+ });
+
+ Button mEmailSignInButton = findViewById(R.id.email_sign_in_button);
+ mEmailSignInButton.setOnClickListener(view -> attemptLogin());
+
mLoginFormView = findViewById(R.id.login_form);
mProgressView = findViewById(R.id.login_progress);
}
- private void populateAutoComplete() {
- if (!mayRequestContacts()) {
- return;
- }
- getLoaderManager().initLoader(0, null, this);
- }
-
- private boolean mayRequestContacts() {
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
- return true;
- }
- if (checkSelfPermission(READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
- return true;
- }
- if (shouldShowRequestPermissionRationale(READ_CONTACTS)) {
- Snackbar.make(mEmailView, R.string.permission_rationale, Snackbar.LENGTH_INDEFINITE)
- .setAction(android.R.string.ok, new View.OnClickListener() {
- @Override
- @TargetApi(Build.VERSION_CODES.M)
- public void onClick(View v) {
- requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
- }
- });
- } else {
- requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
- }
- return false;
- }
-
- /**
- * Callback received when a permissions request has been completed.
- */
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
- @NonNull int[] grantResults) {
- if (requestCode == REQUEST_READ_CONTACTS) {
- if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
- populateAutoComplete();
- }
- }
- }
-
-
- /**
- * Attempts to sign in or register the account specified by the login form.
- * If there are form errors (invalid email, missing fields, etc.), the
- * errors are presented and no actual login attempt is made.
- */
private void attemptLogin() {
- if (mAuthTask != null) {
- return;
- }
-
// Reset errors.
- mEmailView.setError(null);
+ mLoginNameView.setError(null);
mPasswordView.setError(null);
// Store values at the time of the login attempt.
- String email = mEmailView.getText().toString();
+ String loginName = mLoginNameView.getText().toString();
String password = mPasswordView.getText().toString();
boolean cancel = false;
View focusView = null;
- // Check for a valid password, if the user entered one.
- if (!TextUtils.isEmpty(password) && !isPasswordValid(password)) {
- mPasswordView.setError(getString(R.string.error_invalid_password));
+ // Check for a valid email address.
+ if (TextUtils.isEmpty(loginName)) {
+ mLoginNameView.setError(getString(R.string.error_field_required));
+ focusView = mLoginNameView;
+ cancel = true;
+ } else if (!isEmailValid(loginName)) {
+ mLoginNameView.setError(getString(R.string.error_invalid_login_name));
+ focusView = mLoginNameView;
+ cancel = true;
+ }
+
+ // Check for a valid password address.
+ if (TextUtils.isEmpty(password)) {
+ mPasswordView.setError(getString(R.string.error_field_required));
focusView = mPasswordView;
cancel = true;
}
- // Check for a valid email address.
- if (TextUtils.isEmpty(email)) {
- mEmailView.setError(getString(R.string.error_field_required));
- focusView = mEmailView;
- cancel = true;
- } else if (!isEmailValid(email)) {
- mEmailView.setError(getString(R.string.error_invalid_email));
- focusView = mEmailView;
- cancel = true;
- }
-
if (cancel) {
- // There was an error; don't attempt login and focus the first
- // form field with an error.
focusView.requestFocus();
} else {
- // Show a progress spinner, and kick off a background task to
- // perform the user login attempt.
showProgress(true);
- mAuthTask = new UserLoginTask(email, password, loginOption);
- mAuthTask.execute((Void) null);
+ loginProcess(loginName, password);
+
}
}
- private boolean isEmailValid(String email) {
- //TODO: Replace this with your own logic
- return email.contains("@");
+ private boolean isEmailValid(String loginName) {
+ Pattern pattern = Pattern.compile("\\s");
+ Matcher matcher = pattern.matcher(loginName);
+ return !matcher.find();
}
- private boolean isPasswordValid(String password) {
- //TODO: Replace this with your own logic
- return password.length() > 4;
- }
-
- /**
- * Shows the progress UI and hides the login form.
- */
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
private void showProgress(final boolean show) {
- // On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow
- // for very easy animations. If available, use these APIs to fade-in
- // the progress spinner.
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
- 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() {
- @Override
- public void onAnimationEnd(Animator animation) {
- mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
- }
- });
-
- mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
- mProgressView.animate().setDuration(shortAnimTime).alpha(
- show ? 1 : 0).setListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
- }
- });
- } else {
- // The ViewPropertyAnimator APIs are not available, so simply show
- // and hide the relevant UI components.
- mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
- mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
- }
- }
-
- @Override
- public Loader onCreateLoader(int i, Bundle bundle) {
- return new CursorLoader(this,
- // Retrieve data rows for the device user's 'profile' contact.
- Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI,
- ContactsContract.Contacts.Data.CONTENT_DIRECTORY), ProfileQuery.PROJECTION,
-
- // Select only email addresses.
- ContactsContract.Contacts.Data.MIMETYPE +
- " = ?", new String[]{ContactsContract.CommonDataKinds.Email
- .CONTENT_ITEM_TYPE},
-
- // Show primary email addresses first. Note that there won't be
- // a primary email address if the user hasn't specified one.
- ContactsContract.Contacts.Data.IS_PRIMARY + " DESC");
- }
-
- @Override
- public void onLoadFinished(Loader cursorLoader, Cursor cursor) {
- List emails = new ArrayList<>();
- cursor.moveToFirst();
- while (!cursor.isAfterLast()) {
- emails.add(cursor.getString(ProfileQuery.ADDRESS));
- cursor.moveToNext();
- }
-
- addEmailsToAutoComplete(emails);
- }
-
- @Override
- public void onLoaderReset(Loader cursorLoader) {
-
- }
-
- private void addEmailsToAutoComplete(List emailAddressCollection) {
- //Create adapter to tell the AutoCompleteTextView what to show in its dropdown list.
- ArrayAdapter adapter =
- new ArrayAdapter<>(LoginActivity.this,
- android.R.layout.simple_dropdown_item_1line, emailAddressCollection);
-
- mEmailView.setAdapter(adapter);
- }
+ int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime);
- private interface ProfileQuery {
- String[] PROJECTION = {
- ContactsContract.CommonDataKinds.Email.ADDRESS,
- ContactsContract.CommonDataKinds.Email.IS_PRIMARY,
- };
-
- int ADDRESS = 0;
- int IS_PRIMARY = 1;
- }
-
- /**
- * Represents an asynchronous login/registration task used to authenticate
- * the user.
- */
- public class UserLoginTask extends AsyncTask {
-
- private final String mEmail;
- private final String mPassword;
- private boolean isTutor;
- private LdapService ldapService;
- private UserService userService;
- private CompositeDisposable disposable = new CompositeDisposable();
- private Boolean isAuthorizate;
-
- // Constructor
- UserLoginTask(String email, String password, Boolean loginOption) {
- mEmail = email;
- mPassword = password;
- isTutor = loginOption;
- isAuthorizate = false;
- ldapService = ApiClient.getClient(getApplicationContext())
- .create(LdapService.class);
- userService = ApiClient.getClient(getApplicationContext())
- .create(UserService.class);
-
- PrefUtils.storeIsTutor(getApplicationContext(), this.isTutor);
- }
-
- private void saveUserProfileToSharedPreferences(User user){
- PrefUtils.storeUserFirstName(getApplicationContext(), user.getFirstName());
- PrefUtils.storeUserLastName(getApplicationContext(), user.getLastName());
- PrefUtils.storeUserName(getApplicationContext(), user.getUserName());
- }
-
- private void getUserProfile(String userId) {
- disposable.add(
- userService
- .getUserByID(userId)
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribeWith(new DisposableSingleObserver() {
- @Override
- public void onSuccess(User user) {
- Log.e("USER", String.valueOf(user));
- saveUserProfileToSharedPreferences(user);
-
- onPostExecute(true);
- }
-
- public void onError(Throwable e) {
- ((HttpException) e).code();
- Log.e("Login onError", e.getMessage());
-
- if (e instanceof HttpException) {
- ResponseBody responseBody = ((HttpException) e).response().errorBody();
- Log.e("Login onError", RestApiHelper.getErrorMessage(responseBody));
- }
-
- }
- }));
- }
-
- @Override
- protected Boolean doInBackground(Void... params) {
- LdapUser user = new LdapUser(mEmail, mPassword, "admin", (isTutor) ? "Tutor" : "Student", "string", "string", mEmail);
-
- disposable.add(
- ldapService
- .fakeValidate(user)
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribeWith(new DisposableSingleObserver() {
- @Override
- public void onSuccess(JwtToken jwtToken) {
- String token = jwtToken.getToken();
-
- JWT jwt = new JWT(token);
- Claim role = jwt.getClaim("nameid");
-
- PrefUtils.storeIsLoggedIn(getApplicationContext(), true);
- PrefUtils.storeApiKey(getApplicationContext(), token);
- PrefUtils.storeUserId(getApplicationContext(), role.asString());
-
- getUserProfile(role.asString());
- }
-
- @Override
- public void onError(Throwable e) {
- Log.e("LoginError", "onError: " + e.getMessage());
- }
- }));
-
- return true;
- }
-
- @Override
- protected void onPostExecute(final Boolean success) {
- mAuthTask = null;
- showProgress(false);
-
- if (success) {
- Intent data = new Intent();
- String txt = "Main Activity";
- data.setData(Uri.parse(txt));
- setResult(RESULT_OK, data);
- finish();
- } else {
- mPasswordView.setError(getString(R.string.error_incorrect_password));
- mPasswordView.requestFocus();
+ mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
+ mLoginFormView.animate().setDuration(shortAnimTime).alpha(
+ show ? 0 : 1).setListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
}
+ });
- }
+ mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
+ mProgressView.animate().setDuration(shortAnimTime).alpha(
+ show ? 1 : 0).setListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
+ }
+ });
- @Override
- protected void onCancelled() {
- mAuthTask = null;
- showProgress(false);
+ }
+
+
+ private void loginProcess(String email, String password) {
+ Log.e("LOGIN", String.valueOf(PrefUtils.getIsTutor(getApplicationContext())));
+
+ //Fake validate
+ LdapUser user = new LdapUser(email, password, "admin", (PrefUtils.getIsTutor(getApplicationContext())) ? "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())
+ .subscribe(this::handleResponse, this::handleError));
+ }
+
+ private void getUserProfile(String userId) {
+
+ disposable.add(userService.getUserByID(userId)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(this::saveUserProfileToSharedPreferences, this::handleError));
+ }
+
+ private void showSnackBarMessage(String message) {
+ Snackbar.make(findViewById(R.id.login_form), message, Snackbar.LENGTH_LONG)
+ .show();
+ }
+
+ private void handleResponse(JwtToken jwtToken) {
+ showProgress(false);
+
+ String token = jwtToken.getToken();
+ JWT jwt = new JWT(token);
+ Claim role = jwt.getClaim("nameid");
+
+ PrefUtils.storeIsLoggedIn(getApplicationContext(), true);
+ PrefUtils.storeApiKey(getApplicationContext(), token);
+ PrefUtils.storeUserId(getApplicationContext(), role.asString());
+
+ getUserProfile(role.asString());
+
+ Intent data = new Intent();
+ String txt = "Main Activity";
+ data.setData(Uri.parse(txt));
+ setResult(RESULT_OK, data);
+ finish();
+ }
+
+ private void handleError(Throwable error) {
+ showProgress(false);
+
+ if (error instanceof HttpException) {
+
+ ResponseBody responseBody = ((HttpException) error).response().errorBody();
+ showSnackBarMessage(RestApiHelper.getErrorMessage(responseBody));
+
+ } else {
+ showSnackBarMessage("Network Error !");
}
}
+
+ private void saveUserProfileToSharedPreferences(User user) {
+ PrefUtils.storeUserFirstName(getApplicationContext(), user.getFirstName());
+ PrefUtils.storeUserLastName(getApplicationContext(), user.getLastName());
+ PrefUtils.storeUserName(getApplicationContext(), user.getUserName());
+ }
+
}
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java
index d812666..1e86905 100644
--- a/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java
+++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java
@@ -15,7 +15,14 @@ import android.os.Handler;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
+import android.util.DisplayMetrics;
import android.util.Log;
+import android.widget.Toast;
import com.jakewharton.retrofit2.adapter.rxjava2.HttpException;
@@ -57,6 +64,7 @@ import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
import com.uam.wmi.findmytutor.R;
import com.uam.wmi.findmytutor.model.Coordinate;
import com.uam.wmi.findmytutor.network.ApiClient;
+import com.uam.wmi.findmytutor.service.BackgroundLocalizationService;
import com.uam.wmi.findmytutor.service.CoordinateService;
import com.uam.wmi.findmytutor.utils.PrefUtils;
import com.uam.wmi.findmytutor.utils.RestApiHelper;
@@ -71,6 +79,7 @@ import io.reactivex.observers.DisposableSingleObserver;
import io.reactivex.schedulers.Schedulers;
import okhttp3.ResponseBody;
import timber.log.Timber;
+import java.util.Locale;
public class MapActivity extends BaseActivity
@@ -99,11 +108,12 @@ public class MapActivity extends BaseActivity
private int bearingParam = 180;
private int tiltParam = 30;
+ Locale myLocale;
+ String currentLanguage = "pl", currentLang;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- configureLogoutButton();
final SharedPreferences sharedPref = getSharedPreferences("fmtPrefs", Context.MODE_PRIVATE);
final String authToken = sharedPref.getString("authToken", null);
@@ -121,13 +131,23 @@ public class MapActivity extends BaseActivity
}
};
+ Bundle extras = getIntent().getExtras();
Mapbox.getInstance(this, getString(R.string.access_token));
mapView = findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(this);
+
+ //start background task
+ startBackgroundLocalizationTask();
+
+ currentLanguage = getIntent().getStringExtra(currentLang);
+
}
+
+
+
@Override
public void onMapReady(MapboxMap mapboxMap) {
MapActivity.this.mapboxMap = mapboxMap;
@@ -395,22 +415,6 @@ public class MapActivity extends BaseActivity
);
}
- private void configureLogoutButton() {
- // Logout button
- final FloatingActionButton button = findViewById(R.id.logoutButton);
-
- button.setOnClickListener(view -> {
- PrefUtils.cleanUserLocalStorage(getApplicationContext());
-
- Intent i = getBaseContext().getPackageManager()
- .getLaunchIntentForPackage(getBaseContext().getPackageName());
- if (i != null) {
- i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- }
- startActivity(i);
- finish();
- });
- }
// Add the mapView lifecycle to the activity's lifecycle methods
@Override
@@ -525,7 +529,7 @@ public class MapActivity extends BaseActivity
@Override
public void onRequestPermissionsResult(int requestCode, @android.support.annotation.NonNull String[] permissions, @android.support.annotation.NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- permissionsManager.onRequestPermissionsResult(requestCode, permissions, grantResults);
+// permissionsManager.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/SettingsActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/SettingsActivity.java
index c20fb4c..a188c9a 100644
--- a/app/src/main/java/com/uam/wmi/findmytutor/activity/SettingsActivity.java
+++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/SettingsActivity.java
@@ -1,52 +1,75 @@
package com.uam.wmi.findmytutor.activity;
-import android.app.Activity;
-import android.content.Context;
+import android.annotation.SuppressLint;
import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.os.Build;
+import android.content.res.Configuration;
+import android.content.res.Resources;
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.DisplayMetrics;
import android.view.MenuItem;
+
import com.uam.wmi.findmytutor.R;
+import com.uam.wmi.findmytutor.utils.PrefUtils;
+
+
+import java.util.Locale;
public class SettingsActivity extends AppCompatPreferenceActivity {
private static final String TAG = SettingsActivity.class.getSimpleName();
+ String currentLang;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- //getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- // load settings fragment
getFragmentManager().beginTransaction().replace(android.R.id.content, new MainPreferenceFragment()).commit();
}
+ public void setLocale(String localeName) {
+ Locale myLocale = new Locale(localeName);
+ Resources res = getResources();
+ DisplayMetrics dm = res.getDisplayMetrics();
+ Configuration conf = res.getConfiguration();
+ conf.locale = myLocale;
+ res.updateConfiguration(conf, dm);
+ Intent refresh = new Intent(this, MapActivity.class);
+ refresh.putExtra(currentLang, localeName);
+ startActivity(refresh);
+ }
+
public static class MainPreferenceFragment extends PreferenceFragment {
+ @SuppressLint("ResourceType")
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.layout.pref_main);
- //TODO add on change listeners for preferences
+ Preference languagesList = findPreference(getResources().getString(R.string.key_language));
- // feedback preference click listener
- Preference myPref = findPreference(getString(R.string.key_send_feedback));
- myPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
- public boolean onPreferenceClick(Preference preference) {
- sendFeedback(getActivity());
- return true;
+ languagesList.setOnPreferenceChangeListener((preference, newValue) -> {
+
+ if (!newValue.toString().equals("0")){
+ ((SettingsActivity)getActivity()).setLocale("pl");
+ PrefUtils.storeLocale(getActivity(),"pl");
+ }else{
+ ((SettingsActivity)getActivity()).setLocale("en");
+ PrefUtils.storeLocale(getActivity(),"en");
}
+
+ return true;
});
}
}
+
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
@@ -96,26 +119,8 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
return true;
}
};
-
- /**
- * 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/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..e671a31 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,7 +1,11 @@
package com.uam.wmi.findmytutor.activity;
+import android.annotation.SuppressLint;
+import android.app.Activity;
import android.content.Context;
+import android.content.Intent;
import android.content.SharedPreferences;
+import android.os.Build;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
@@ -12,44 +16,50 @@ import android.view.View;
import android.view.ViewGroup;
import com.uam.wmi.findmytutor.R;
+import com.uam.wmi.findmytutor.service.BackgroundLocalizationService;
+import com.uam.wmi.findmytutor.utils.PrefUtils;
import java.util.Arrays;
import java.util.HashSet;
+import java.util.Objects;
import java.util.Set;
-//public class SharingFragment {
-//}
+import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext;
+
public class SharingFragment extends PreferenceFragment {
+
+ @SuppressLint("ResourceType")
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.layout.pref_sharing);
Preference manualStatus = findPreference("key_manual_status");
+ Preference locationSharing = findPreference("key_sharing_enabled");
+
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;
- });*/
+ locationSharing.setOnPreferenceChangeListener((buttonView, isChecked) -> {
+ PrefUtils.storeEnableSharingLocalization(getApplicationContext(), (Boolean) isChecked);
+ ((MapActivity)getActivity()).handleBackgroundTaskLifeCycle();
- Preference sharingLocation = findPreference("key_sharing_enabled");
- sharingLocation.setOnPreferenceChangeListener((preference, o) -> {
- Log.e("change", "1");
- return false;
+ return true;
});
}
+ public static SharingFragment newInstance() {
+ return new SharingFragment();
+ }
+
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
- view.setBackgroundColor(getResources().getColor(android.R.color.white));
+ Objects.requireNonNull(view).setBackgroundColor(getResources().getColor(android.R.color.white));
return view;
}
@@ -65,10 +75,10 @@ public class SharingFragment extends PreferenceFragment {
setListPreferenceData(lp.getKey(),manualStatusArr);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putStringSet(storageKey,manualStatusSet);
- editor.commit();
+ editor.apply();
}
- protected ListPreference setListPreferenceData(String lp_name, String [] entries) {
+ protected void setListPreferenceData(String lp_name, String [] entries) {
ListPreference lp = (ListPreference) findPreference(lp_name);
lp.setEntries(entries);
CharSequence[] entryValues = new CharSequence [entries.length];
@@ -79,7 +89,5 @@ public class SharingFragment extends PreferenceFragment {
lp.setDefaultValue("1");
lp.setEntryValues(entryValues);
-
- return lp;
}
}
diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/StartupActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/StartupActivity.java
index 934b486..430311b 100644
--- a/app/src/main/java/com/uam/wmi/findmytutor/activity/StartupActivity.java
+++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/StartupActivity.java
@@ -2,20 +2,28 @@ package com.uam.wmi.findmytutor.activity;
import android.app.Activity;
import android.content.Intent;
+import android.content.res.Configuration;
+import android.content.res.Resources;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
+import android.util.DisplayMetrics;
+import android.widget.Toast;
import com.uam.wmi.findmytutor.utils.PrefUtils;
+import java.util.Locale;
+
public class StartupActivity extends AppCompatActivity {
private static final int AUTHENTICATION_REQUEST_CODE = 666;
+ String currentLang;
@Override
protected void onCreate(Bundle savedInstanceState) {
if (PrefUtils.isLoggedIn(getApplicationContext())){
Intent startupIntent = new Intent(this, MapActivity.class);
+ startupIntent.putExtra(currentLang, PrefUtils.getLocale(getApplicationContext()));
startupIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(startupIntent);
finish();
@@ -38,4 +46,8 @@ public class StartupActivity extends AppCompatActivity {
finish();
}
+
+
+
+
}
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..ecc460a
--- /dev/null
+++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/UsersListFragment.java
@@ -0,0 +1,264 @@
+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.user_list_modal, 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 userDutyHoursTitle = view.findViewById(R.id.userDutyHoursTitle);
+ 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()));
+ userDutyHoursTitle.setText(String.format("%s:", getString(R.string.userDutyHoursHeader)));
+
+ final ArrayAdapter arrayAdapter = new ArrayAdapter<>(getActivity(),
+ android.R.layout.test_list_item, 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 b57c702..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;
@@ -198,7 +198,7 @@ public class LdapUser extends BaseResponse{
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("class LdapUser {\n");
-
+
sb.append(" login: ").append(toIndentedString(login)).append("\n");
sb.append(" password: ").append(toIndentedString(password)).append("\n");
sb.append(" department: ").append(toIndentedString(department)).append("\n");
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