diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 03c49a3..fb1c6ff 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -58,13 +58,6 @@ android:enabled="true" android:exported="false" android:launchMode="singleTop" /> - - tutorsList = new ArrayList<>(); private List tutorsFiltered = new ArrayList<>(); private Collator plCollator = Collator.getInstance(Locale.forLanguageTag("pl-PL")); + private Boolean fetchOnlyOnlineUsers = PrefUtils.getShowOnlyOnlineUsers(getApplicationContext()); public UsersListFragment() { } @@ -78,7 +82,7 @@ public class UsersListFragment extends Fragment { mAdapter = new TutorsListAdapter(getActivity().getApplicationContext(), tutorsFiltered); View view = inflater.inflate(R.layout.users_list, container, false); view.setBackgroundColor(getResources().getColor(android.R.color.white)); - + setHasOptionsMenu(true); 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) { tutorsFiltered.clear(); @@ -185,7 +231,9 @@ public class UsersListFragment extends Fragment { private void fetchAllTutors() { disposable.add( - userService.getAllTutors() + (fetchOnlyOnlineUsers ? + userService.getAllOnlineTutors() : + userService.getAllOfflineTutors()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .map(tutors -> { @@ -234,6 +282,7 @@ public class UsersListFragment extends Fragment { private void showError(Throwable e) { String message; + Log.e(TAG, String.valueOf(e)); if (e instanceof HttpException) { ResponseBody responseBody = ((HttpException) e).response().errorBody(); @@ -251,6 +300,11 @@ public class UsersListFragment extends Fragment { noNotesView.setVisibility(View.GONE); } else { noNotesView.setVisibility(View.VISIBLE); + if(fetchOnlyOnlineUsers) + noNotesView.setText(R.string.no_online_users); + else{ + noNotesView.setText(R.string.no_offline_users); + } } } diff --git a/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java b/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java index 3419925..d59d533 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java @@ -14,7 +14,6 @@ import android.location.Location; import android.location.LocationManager; import android.os.AsyncTask; import android.os.Build; -import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.support.annotation.RequiresApi; @@ -206,35 +205,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") private class Task extends AsyncTask { diff --git a/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundService.java b/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundService.java deleted file mode 100644 index 23f25f2..0000000 --- a/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundService.java +++ /dev/null @@ -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 { - - } - } -} diff --git a/app/src/main/java/com/uam/wmi/findmytutor/service/UserService.java b/app/src/main/java/com/uam/wmi/findmytutor/service/UserService.java index 75671ed..8bbd910 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/service/UserService.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/service/UserService.java @@ -30,6 +30,12 @@ public interface UserService { @GET("api/users/tutors") Single > getAllTutors(); + @GET("api/users/tutors/online") + Single > getAllOnlineTutors(); + + @GET("api/users/tutors/offline") + Single > getAllOfflineTutors(); + @POST("api/users") Completable createUser(@Body User user); diff --git a/app/src/main/java/com/uam/wmi/findmytutor/utils/PrefUtils.java b/app/src/main/java/com/uam/wmi/findmytutor/utils/PrefUtils.java index 5d45d85..a630b83 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/utils/PrefUtils.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/utils/PrefUtils.java @@ -197,4 +197,15 @@ public class PrefUtils { 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); + } + + } \ No newline at end of file diff --git a/app/src/main/res/layout/home_layout.xml b/app/src/main/res/layout/home_layout.xml new file mode 100644 index 0000000..d26e4eb --- /dev/null +++ b/app/src/main/res/layout/home_layout.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/users_list.xml b/app/src/main/res/layout/users_list.xml index daed3cd..6618359 100644 --- a/app/src/main/res/layout/users_list.xml +++ b/app/src/main/res/layout/users_list.xml @@ -10,6 +10,7 @@ + diff --git a/app/src/main/res/layout/users_list_tabs.xml b/app/src/main/res/layout/users_list_tabs.xml new file mode 100644 index 0000000..2ed642f --- /dev/null +++ b/app/src/main/res/layout/users_list_tabs.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + diff --git a/app/src/main/res/menu/users_list_menu.xml b/app/src/main/res/menu/users_list_menu.xml new file mode 100644 index 0000000..6e6a220 --- /dev/null +++ b/app/src/main/res/menu/users_list_menu.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index c6aef95..0bc326e 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -242,6 +242,10 @@ Pobierz dane z WMI Dane zostały zaktualizwane! + Brak użytkowników online. + Brak użytkowników offline. + Tylko użytkownicy online + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9195d48..ebd5c88 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -321,5 +321,8 @@ The user hasn\'t defined a status. Scrap! Thank you for scraping your tab! + Currently, there are no\nonline users. + Currently, there are no\noffline users. + Only online users