Merge branch 'online-offline-list' of s416084/find-my-tutor-android into develop
This commit is contained in:
commit
540536a4a8
@ -58,13 +58,6 @@
|
|||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
android:exported="false"
|
android:exported="false"
|
||||||
android:launchMode="singleTop" />
|
android:launchMode="singleTop" />
|
||||||
<!--
|
|
||||||
<service
|
|
||||||
android:name=".service.BackgroundService"
|
|
||||||
android:enabled="true"
|
|
||||||
android:exported="false"
|
|
||||||
android:launchMode="singleTop" />-->
|
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".activity.TutorTab"
|
android:name=".activity.TutorTab"
|
||||||
android:theme="@style/AppTheme"
|
android:theme="@style/AppTheme"
|
||||||
|
@ -9,13 +9,16 @@ import android.support.v7.app.AlertDialog;
|
|||||||
import android.support.v7.widget.DefaultItemAnimator;
|
import android.support.v7.widget.DefaultItemAnimator;
|
||||||
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuInflater;
|
||||||
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
import com.annimon.stream.Stream;
|
import com.annimon.stream.Stream;
|
||||||
import com.jakewharton.retrofit2.adapter.rxjava2.HttpException;
|
import com.jakewharton.retrofit2.adapter.rxjava2.HttpException;
|
||||||
@ -28,8 +31,8 @@ import com.uam.wmi.findmytutor.model.User;
|
|||||||
import com.uam.wmi.findmytutor.network.ApiClient;
|
import com.uam.wmi.findmytutor.network.ApiClient;
|
||||||
import com.uam.wmi.findmytutor.service.TutorTabApi;
|
import com.uam.wmi.findmytutor.service.TutorTabApi;
|
||||||
import com.uam.wmi.findmytutor.service.UserService;
|
import com.uam.wmi.findmytutor.service.UserService;
|
||||||
import com.uam.wmi.findmytutor.utils.InfoHelperUtils;
|
|
||||||
import com.uam.wmi.findmytutor.utils.MyDividerItemDecoration;
|
import com.uam.wmi.findmytutor.utils.MyDividerItemDecoration;
|
||||||
|
import com.uam.wmi.findmytutor.utils.PrefUtils;
|
||||||
import com.uam.wmi.findmytutor.utils.RecyclerTouchListener;
|
import com.uam.wmi.findmytutor.utils.RecyclerTouchListener;
|
||||||
import com.uam.wmi.findmytutor.utils.RestApiHelper;
|
import com.uam.wmi.findmytutor.utils.RestApiHelper;
|
||||||
|
|
||||||
@ -66,6 +69,7 @@ public class UsersListFragment extends Fragment {
|
|||||||
private List<User> tutorsList = new ArrayList<>();
|
private List<User> tutorsList = new ArrayList<>();
|
||||||
private List<User> tutorsFiltered = new ArrayList<>();
|
private List<User> tutorsFiltered = new ArrayList<>();
|
||||||
private Collator plCollator = Collator.getInstance(Locale.forLanguageTag("pl-PL"));
|
private Collator plCollator = Collator.getInstance(Locale.forLanguageTag("pl-PL"));
|
||||||
|
private Boolean fetchOnlyOnlineUsers = PrefUtils.getShowOnlyOnlineUsers(getApplicationContext());
|
||||||
|
|
||||||
public UsersListFragment() {
|
public UsersListFragment() {
|
||||||
}
|
}
|
||||||
@ -78,7 +82,7 @@ public class UsersListFragment extends Fragment {
|
|||||||
mAdapter = new TutorsListAdapter(getActivity().getApplicationContext(), tutorsFiltered);
|
mAdapter = new TutorsListAdapter(getActivity().getApplicationContext(), tutorsFiltered);
|
||||||
View view = inflater.inflate(R.layout.users_list, container, false);
|
View view = inflater.inflate(R.layout.users_list, container, false);
|
||||||
view.setBackgroundColor(getResources().getColor(android.R.color.white));
|
view.setBackgroundColor(getResources().getColor(android.R.color.white));
|
||||||
|
setHasOptionsMenu(true);
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,6 +117,48 @@ public class UsersListFragment extends Fragment {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPrepareOptionsMenu(Menu menu) {
|
||||||
|
super.onPrepareOptionsMenu(menu);
|
||||||
|
try {
|
||||||
|
menu.findItem(R.id.showOnlineUsersOnly).setChecked(fetchOnlyOnlineUsers);
|
||||||
|
}
|
||||||
|
catch(Exception e) {
|
||||||
|
Log.e(TAG, "onPrepareOptionsMenu error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
//item.setChecked(fetchOnlyOnlineUsers);
|
||||||
|
switch (item.getItemId()){
|
||||||
|
case R.id.showOnlineUsersOnly:
|
||||||
|
|
||||||
|
if(item.isChecked()) {
|
||||||
|
fetchOnlyOnlineUsers = false;
|
||||||
|
item.setChecked(false);
|
||||||
|
}else{
|
||||||
|
item.setChecked(true);
|
||||||
|
fetchOnlyOnlineUsers = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
PrefUtils.putShowOnlyOnlineUsers(getApplicationContext(), fetchOnlyOnlineUsers);
|
||||||
|
fetchAllTutors();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||||
|
inflater.inflate(R.menu.users_list_menu, menu);
|
||||||
|
menu.getItem(0).setChecked(fetchOnlyOnlineUsers);
|
||||||
|
super.onCreateOptionsMenu(menu,inflater);
|
||||||
|
}
|
||||||
|
|
||||||
public void searchUser(String textToSearch) {
|
public void searchUser(String textToSearch) {
|
||||||
|
|
||||||
tutorsFiltered.clear();
|
tutorsFiltered.clear();
|
||||||
@ -185,7 +231,9 @@ public class UsersListFragment extends Fragment {
|
|||||||
|
|
||||||
private void fetchAllTutors() {
|
private void fetchAllTutors() {
|
||||||
disposable.add(
|
disposable.add(
|
||||||
userService.getAllTutors()
|
(fetchOnlyOnlineUsers ?
|
||||||
|
userService.getAllOnlineTutors() :
|
||||||
|
userService.getAllOfflineTutors())
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.map(tutors -> {
|
.map(tutors -> {
|
||||||
@ -234,6 +282,7 @@ public class UsersListFragment extends Fragment {
|
|||||||
|
|
||||||
private void showError(Throwable e) {
|
private void showError(Throwable e) {
|
||||||
String message;
|
String message;
|
||||||
|
Log.e(TAG, String.valueOf(e));
|
||||||
|
|
||||||
if (e instanceof HttpException) {
|
if (e instanceof HttpException) {
|
||||||
ResponseBody responseBody = ((HttpException) e).response().errorBody();
|
ResponseBody responseBody = ((HttpException) e).response().errorBody();
|
||||||
@ -251,6 +300,11 @@ public class UsersListFragment extends Fragment {
|
|||||||
noNotesView.setVisibility(View.GONE);
|
noNotesView.setVisibility(View.GONE);
|
||||||
} else {
|
} else {
|
||||||
noNotesView.setVisibility(View.VISIBLE);
|
noNotesView.setVisibility(View.VISIBLE);
|
||||||
|
if(fetchOnlyOnlineUsers)
|
||||||
|
noNotesView.setText(R.string.no_online_users);
|
||||||
|
else{
|
||||||
|
noNotesView.setText(R.string.no_offline_users);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,7 +14,6 @@ import android.location.Location;
|
|||||||
import android.location.LocationManager;
|
import android.location.LocationManager;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.support.annotation.RequiresApi;
|
import android.support.annotation.RequiresApi;
|
||||||
@ -207,35 +206,6 @@ public class BackgroundLocalizationService extends Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private class LocationListener implements android.location.LocationListener {
|
|
||||||
|
|
||||||
LocationListener(String provider) {
|
|
||||||
Log.e(TAG, "LocationListener " + provider);
|
|
||||||
mLastLocation = new Location(provider);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLocationChanged(Location location) {
|
|
||||||
Log.e(TAG, "onLocationChanged: " + location);
|
|
||||||
mLastLocation.set(location);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onProviderDisabled(String provider) {
|
|
||||||
Log.e(TAG, "onProviderDisabled: " + provider);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onProviderEnabled(String provider) {
|
|
||||||
Log.e(TAG, "onProviderEnabled: " + provider);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStatusChanged(String provider, int status, Bundle extras) {
|
|
||||||
Log.e(TAG, "onStatusChanged: " + provider);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("StaticFieldLeak")
|
@SuppressLint("StaticFieldLeak")
|
||||||
private class Task extends AsyncTask {
|
private class Task extends AsyncTask {
|
||||||
private ApproximatedLocalization approximatedLocalization;
|
private ApproximatedLocalization approximatedLocalization;
|
||||||
|
@ -1,264 +0,0 @@
|
|||||||
package com.uam.wmi.findmytutor.service;
|
|
||||||
|
|
||||||
import android.Manifest;
|
|
||||||
import android.annotation.SuppressLint;
|
|
||||||
import android.app.Service;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.pm.PackageManager;
|
|
||||||
import android.location.Location;
|
|
||||||
import android.location.LocationListener;
|
|
||||||
import android.os.Binder;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.IBinder;
|
|
||||||
import android.os.PowerManager;
|
|
||||||
import android.provider.SyncStateContract;
|
|
||||||
import android.support.v4.app.ActivityCompat;
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import com.google.android.gms.common.ConnectionResult;
|
|
||||||
import com.google.android.gms.common.GooglePlayServicesUtil;
|
|
||||||
import com.google.android.gms.common.api.GoogleApiClient;
|
|
||||||
import com.google.android.gms.location.LocationRequest;
|
|
||||||
import com.google.android.gms.location.LocationServices;
|
|
||||||
|
|
||||||
import java.text.DateFormat;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
import static com.uam.wmi.findmytutor.utils.Const.onlineBackgroundLocationInterval;
|
|
||||||
|
|
||||||
|
|
||||||
public class BackgroundService extends Service implements
|
|
||||||
GoogleApiClient.ConnectionCallbacks,
|
|
||||||
GoogleApiClient.OnConnectionFailedListener,
|
|
||||||
LocationListener {
|
|
||||||
|
|
||||||
IBinder mBinder = new LocalBinder();
|
|
||||||
private static final String TAG = "MyLocationService";
|
|
||||||
|
|
||||||
private GoogleApiClient mGoogleApiClient;
|
|
||||||
private PowerManager.WakeLock mWakeLock;
|
|
||||||
private LocationRequest mLocationRequest;
|
|
||||||
// Flag that indicates if a request is underway.
|
|
||||||
private boolean mInProgress;
|
|
||||||
private static long notify_interval = onlineBackgroundLocationInterval;
|
|
||||||
|
|
||||||
private Boolean servicesAvailable = false;
|
|
||||||
|
|
||||||
public class LocalBinder extends Binder {
|
|
||||||
public BackgroundService getServerInstance() {
|
|
||||||
return BackgroundService.this;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate() {
|
|
||||||
super.onCreate();
|
|
||||||
|
|
||||||
|
|
||||||
mInProgress = false;
|
|
||||||
// Create the LocationRequest object
|
|
||||||
mLocationRequest = LocationRequest.create();
|
|
||||||
// Use high accuracy
|
|
||||||
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
|
|
||||||
// Set the update interval to 5 seconds
|
|
||||||
mLocationRequest.setInterval(notify_interval);
|
|
||||||
// Set the fastest update interval to 1 second
|
|
||||||
mLocationRequest.setFastestInterval(notify_interval);
|
|
||||||
|
|
||||||
servicesAvailable = servicesConnected();
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Create a new location client, using the enclosing class to
|
|
||||||
* handle callbacks.
|
|
||||||
*/
|
|
||||||
setUpLocationClientIfNeeded();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Create a new location client, using the enclosing class to
|
|
||||||
* handle callbacks.
|
|
||||||
*/
|
|
||||||
protected synchronized void buildGoogleApiClient() {
|
|
||||||
this.mGoogleApiClient = new GoogleApiClient.Builder(this)
|
|
||||||
.addConnectionCallbacks(this)
|
|
||||||
.addOnConnectionFailedListener(this)
|
|
||||||
.addApi(LocationServices.API)
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean servicesConnected() {
|
|
||||||
|
|
||||||
// Check that Google Play services is available
|
|
||||||
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
|
|
||||||
|
|
||||||
// If Google Play services is available
|
|
||||||
if (ConnectionResult.SUCCESS == resultCode) {
|
|
||||||
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("InvalidWakeLockTag")
|
|
||||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
|
||||||
super.onStartCommand(intent, flags, startId);
|
|
||||||
|
|
||||||
PowerManager mgr = (PowerManager) getSystemService(Context.POWER_SERVICE);
|
|
||||||
|
|
||||||
/*
|
|
||||||
WakeLock is reference counted so we don't want to create multiple WakeLocks. So do a check before initializing and acquiring.
|
|
||||||
|
|
||||||
This will fix the "java.lang.Exception: WakeLock finalized while still held: MyWakeLock" error that you may find.
|
|
||||||
*/
|
|
||||||
/* if (this.mWakeLock == null) { //**Added this
|
|
||||||
this.mWakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!this.mWakeLock.isHeld()) { //**Added this
|
|
||||||
this.mWakeLock.acquire(10*60*1000L *//*10 minutes*//*);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
if (!servicesAvailable || mGoogleApiClient.isConnected() || mInProgress)
|
|
||||||
return START_STICKY;
|
|
||||||
|
|
||||||
setUpLocationClientIfNeeded();
|
|
||||||
if (!mGoogleApiClient.isConnected() || !mGoogleApiClient.isConnecting() && !mInProgress) {
|
|
||||||
mInProgress = true;
|
|
||||||
mGoogleApiClient.connect();
|
|
||||||
}
|
|
||||||
|
|
||||||
return START_STICKY;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void setUpLocationClientIfNeeded() {
|
|
||||||
if (mGoogleApiClient == null)
|
|
||||||
buildGoogleApiClient();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Define the callback method that receives location updates
|
|
||||||
@Override
|
|
||||||
public void onLocationChanged(Location location) {
|
|
||||||
// Report to the UI that the location was updated
|
|
||||||
String msg = Double.toString(location.getLatitude()) + "," +
|
|
||||||
Double.toString(location.getLongitude());
|
|
||||||
Log.d("debug", msg);
|
|
||||||
Log.e(TAG, "onLocationChanged: " + location);
|
|
||||||
|
|
||||||
// Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStatusChanged(String s, int i, Bundle bundle) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onProviderEnabled(String s) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onProviderDisabled(String s) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IBinder onBind(Intent intent) {
|
|
||||||
return mBinder;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDestroy() {
|
|
||||||
// Turn off the request flag
|
|
||||||
this.mInProgress = false;
|
|
||||||
|
|
||||||
if (this.servicesAvailable && this.mGoogleApiClient != null) {
|
|
||||||
this.mGoogleApiClient.unregisterConnectionCallbacks(this);
|
|
||||||
this.mGoogleApiClient.unregisterConnectionFailedListener(this);
|
|
||||||
this.mGoogleApiClient.disconnect();
|
|
||||||
// Destroy the current location client
|
|
||||||
this.mGoogleApiClient = null;
|
|
||||||
}
|
|
||||||
// Display the connection status
|
|
||||||
// Toast.makeText(this, DateFormat.getDateTimeInstance().format(new Date()) + ":
|
|
||||||
// Disconnected. Please re-connect.", Toast.LENGTH_SHORT).show();
|
|
||||||
|
|
||||||
if (this.mWakeLock != null) {
|
|
||||||
this.mWakeLock.release();
|
|
||||||
this.mWakeLock = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
super.onDestroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Called by Location Services when the request to connect the
|
|
||||||
* client finishes successfully. At this point, you can
|
|
||||||
* request the current location or start periodic updates
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onConnected(Bundle bundle) {
|
|
||||||
|
|
||||||
// Request location updates using static settings
|
|
||||||
//Intent intent = new Intent(this, LocationReceiver.class);
|
|
||||||
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
|
||||||
// TODO: Consider calling
|
|
||||||
// ActivityCompat#requestPermissions
|
|
||||||
// here to request the missing permissions, and then overriding
|
|
||||||
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
|
|
||||||
// int[] grantResults)
|
|
||||||
// to handle the case where the user grants the permission. See the documentation
|
|
||||||
// for ActivityCompat#requestPermissions for more details.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
LocationServices.getFusedLocationProviderClient(this);
|
|
||||||
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, (com.google.android.gms.location.LocationListener) this);
|
|
||||||
|
|
||||||
/* .requestLocationUpdates(this.mGoogleApiClient,
|
|
||||||
mLocationRequest, (com.google.android.gms.location.LocationListener) this); // This is the changed line.*/
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Called by Location Services if the connection to the
|
|
||||||
* location client drops because of an error.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onConnectionSuspended(int i) {
|
|
||||||
// Turn off the request flag
|
|
||||||
mInProgress = false;
|
|
||||||
// Destroy the current location client
|
|
||||||
mGoogleApiClient = null;
|
|
||||||
// Display the connection status
|
|
||||||
// Toast.makeText(this, DateFormat.getDateTimeInstance().format(new Date()) + ": Disconnected. Please re-connect.", Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Called by Location Services if the attempt to
|
|
||||||
* Location Services fails.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onConnectionFailed(ConnectionResult connectionResult) {
|
|
||||||
mInProgress = false;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Google Play services can resolve some errors it detects.
|
|
||||||
* If the error has a resolution, try sending an Intent to
|
|
||||||
* start a Google Play services activity that can resolve
|
|
||||||
* error.
|
|
||||||
*/
|
|
||||||
if (connectionResult.hasResolution()) {
|
|
||||||
|
|
||||||
// If no resolution is available, display an error dialog
|
|
||||||
} else {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -30,6 +30,12 @@ public interface UserService {
|
|||||||
@GET("api/users/tutors")
|
@GET("api/users/tutors")
|
||||||
Single <List<User>> getAllTutors();
|
Single <List<User>> getAllTutors();
|
||||||
|
|
||||||
|
@GET("api/users/tutors/online")
|
||||||
|
Single <List<User>> getAllOnlineTutors();
|
||||||
|
|
||||||
|
@GET("api/users/tutors/offline")
|
||||||
|
Single <List<User>> getAllOfflineTutors();
|
||||||
|
|
||||||
@POST("api/users")
|
@POST("api/users")
|
||||||
Completable createUser(@Body User user);
|
Completable createUser(@Body User user);
|
||||||
|
|
||||||
|
@ -197,4 +197,15 @@ public class PrefUtils {
|
|||||||
return getSharedPreferences(context).getString("current_manual_location_name", null);
|
return getSharedPreferences(context).getString("current_manual_location_name", null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void putShowOnlyOnlineUsers(Context context, Boolean flag) {
|
||||||
|
SharedPreferences.Editor editor = getSharedPreferences(context).edit();
|
||||||
|
editor.putBoolean("show_only_online_users_in_list", flag);
|
||||||
|
editor.apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Boolean getShowOnlyOnlineUsers(Context context) {
|
||||||
|
return getSharedPreferences(context).getBoolean("show_only_online_users_in_list", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
13
app/src/main/res/layout/home_layout.xml
Normal file
13
app/src/main/res/layout/home_layout.xml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:text="Homw Tab"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceLarge"/>
|
||||||
|
</RelativeLayout>
|
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
<include layout="@layout/users_list_main" />
|
<include layout="@layout/users_list_main" />
|
||||||
|
|
||||||
|
|
||||||
</android.support.design.widget.CoordinatorLayout>
|
</android.support.design.widget.CoordinatorLayout>
|
||||||
|
|
||||||
|
|
||||||
|
27
app/src/main/res/layout/users_list_tabs.xml
Normal file
27
app/src/main/res/layout/users_list_tabs.xml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
xmlns:mapbox="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:id="@+id/coordinator_layout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:fontFamily="@font/lato_regular"
|
||||||
|
tools:context=".activity.UsersListFragment">
|
||||||
|
<android.support.design.widget.TabLayout
|
||||||
|
android:id="@+id/tabs"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
|
||||||
|
/>
|
||||||
|
<android.support.v4.view.ViewPager
|
||||||
|
android:id="@+id/viewpager"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</android.support.design.widget.CoordinatorLayout>
|
||||||
|
|
||||||
|
|
||||||
|
|
11
app/src/main/res/menu/users_list_menu.xml
Normal file
11
app/src/main/res/menu/users_list_menu.xml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/showOnlineUsersOnly"
|
||||||
|
android:checkable="true"
|
||||||
|
android:title="@string/only_online_users"
|
||||||
|
app:actionViewClass="android.widget.CheckBox"
|
||||||
|
app:showAsAction="never" />
|
||||||
|
</menu>
|
@ -242,6 +242,10 @@
|
|||||||
<string name="scrap_tutor_tab">Pobierz dane z WMI</string>
|
<string name="scrap_tutor_tab">Pobierz dane z WMI</string>
|
||||||
<string name="scrap_tutor_msg">Dane zostały zaktualizwane!</string>
|
<string name="scrap_tutor_msg">Dane zostały zaktualizwane!</string>
|
||||||
|
|
||||||
|
<string name="no_online_users">Brak użytkowników online.</string>
|
||||||
|
<string name="no_offline_users">Brak użytkowników offline.</string>
|
||||||
|
<string name="only_online_users">Tylko użytkownicy online</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
||||||
|
|
||||||
|
@ -321,5 +321,8 @@
|
|||||||
<string name="lack_of_status">The user hasn\'t defined a status.</string>
|
<string name="lack_of_status">The user hasn\'t defined a status.</string>
|
||||||
<string name="scrap_tutor_tab">Scrap!</string>
|
<string name="scrap_tutor_tab">Scrap!</string>
|
||||||
<string name="scrap_tutor_msg">Thank you for scraping your tab!</string>
|
<string name="scrap_tutor_msg">Thank you for scraping your tab!</string>
|
||||||
|
<string name="no_online_users">Currently, there are no\nonline users.</string>
|
||||||
|
<string name="no_offline_users">Currently, there are no\noffline users.</string>
|
||||||
|
<string name="only_online_users">Only online users</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user