Add search to list

This commit is contained in:
Mieszko Wrzeszczyński 2018-11-02 15:45:18 +01:00
parent 7191fcf6e7
commit aa3dbfb185
6 changed files with 790 additions and 716 deletions

View File

@ -57,6 +57,5 @@ dependencies {
implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
implementation 'com.auth0.android:jwtdecode:1.1.1'
implementation 'com.annimon:stream:1.2.1'
implementation 'com.facebook.shimmer:shimmer:0.3.0'
}

View File

@ -2,10 +2,10 @@ package com.uam.wmi.findmytutor.activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.content.res.Configuration;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.app.FragmentManager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
@ -13,14 +13,10 @@ 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.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.FrameLayout;
import android.widget.ListView;
import android.widget.Toast;
import com.uam.wmi.findmytutor.ListViewAdapter;
import com.uam.wmi.findmytutor.R;
@ -32,17 +28,13 @@ public abstract class BaseActivity
implements BottomNavigationView.OnNavigationItemSelectedListener {
protected BottomNavigationView navigationView;
protected Toolbar toolbar;
public DrawerLayout drawerLayout;
private ActionBarDrawerToggle actionBarDrawerToggle;
// 4 search
private ListView listView;
private ArrayList<String> stringArrayList;
private ListViewAdapter adapter;
private SharingFragment sharingFragment;
private Fragment userListFragment;
private String activeFragment = "";
@Override
@ -54,14 +46,12 @@ public abstract class BaseActivity
navigationView.setOnNavigationItemSelectedListener(this);
sharingFragment = new SharingFragment();
userListFragment = new UsersListActivity();
}
@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);
@ -69,7 +59,7 @@ public abstract class BaseActivity
}
private void initToolbar() {
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
@ -117,12 +107,10 @@ public abstract class BaseActivity
@Override
public boolean onQueryTextChange(String newText) {
if (TextUtils.isEmpty(newText)) {
adapter.filter("");
listView.clearTextFilter();
} else {
adapter.filter(newText);
if(activeFragment.equals("userList")){
((UsersListActivity) userListFragment).searchUser(newText);
}
return true;
}
});
@ -150,15 +138,10 @@ public abstract class BaseActivity
overridePendingTransition(0,0);
}
private void setFragment(Fragment fragment) {
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.activity_content, fragment);
fragmentTransaction.commit();
}
private void removeFragment(Fragment fragment) {
activeFragment = "map";
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.remove(fragment);
fragmentTransaction.hide(fragment);
fragmentTransaction.commit();
}
@ -171,16 +154,10 @@ public abstract class BaseActivity
if (itemId == R.id.nav_map) {
removeFragment(sharingFragment);
removeFragment(userListFragment);
// startActivity(new Intent(this, MapActivity.class));
} else if (itemId == R.id.nav_profile) {
// startActivity(new Intent(this, ProfileActivity.class));
setFragment(sharingFragment);
removeFragment(userListFragment);
loadUserSettingsFragment();
} else if (itemId == R.id.nav_user_list) {
removeFragment(sharingFragment);
setFragment(userListFragment);
//startActivity(new Intent(this, UsersListActivity.class));
loadUserListFragment();
}
//finish();
}, 300);
@ -188,6 +165,24 @@ public abstract class BaseActivity
return true;
}
private void loadUserSettingsFragment() {
activeFragment = "sharedSettings";
sharingFragment = SharingFragment.newInstance();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.activity_content, sharingFragment);
ft.commit();
}
private void loadUserListFragment() {
activeFragment = "userList";
userListFragment = UsersListActivity.newInstance();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.activity_content, userListFragment);
ft.commit();
}
private void updateNavigationBarState() {
int actionId = getNavigationMenuItemId();
selectBottomNavigationBarItem(actionId);

View File

@ -1,5 +1,6 @@
package com.uam.wmi.findmytutor.activity;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
@ -21,6 +22,7 @@ import java.util.Set;
//}
public class SharingFragment extends PreferenceFragment {
@SuppressLint("ResourceType")
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -46,6 +48,13 @@ public class SharingFragment extends PreferenceFragment {
});
}
public static SharingFragment newInstance() {
return new SharingFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);

View File

@ -53,19 +53,28 @@ public class UsersListActivity extends Fragment {
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 TutorsAdapter mAdapter;
private List<User> tutorsList = new ArrayList<>();
private List<User> tutorsFiltered = new ArrayList<>();
public static UsersListActivity newInstance() {
return new UsersListActivity();
}
public UsersListActivity() {
}
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mAdapter = new TutorsAdapter(getActivity().getApplicationContext(), tutorsList);
mAdapter = new TutorsAdapter(getActivity().getApplicationContext(), tutorsFiltered);
View view = inflater.inflate(R.layout.users_list, container, false);
view.setBackgroundColor(getResources().getColor(android.R.color.white));
return view;
@ -81,11 +90,10 @@ public class UsersListActivity extends Fragment {
tutorTabService = ApiClient.getClient(getActivity().getApplicationContext())
.create(TutorTabApi.class);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity().getApplicationContext());
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.addItemDecoration(new MyDividerItemDecoration(getActivity().getApplicationContext(), LinearLayoutManager.VERTICAL, 16));
recyclerView.addItemDecoration(new MyDividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL, 16));
recyclerView.setAdapter(mAdapter);
fetchAllTutors();
@ -94,21 +102,30 @@ public class UsersListActivity extends Fragment {
recyclerView, new RecyclerTouchListener.ClickListener() {
@Override
public void onClick(View view, final int position) {
showNoteDialog(true, tutorsList.get(position), position);
showNoteDialog(tutorsFiltered.get(position));
}
@Override
public void onLongClick(View view, int position) {
}
}));
}
public void searchUser( String textToSearch){
Log.e("SEARCH","textToSearch");
private void showNoteDialog(final boolean shouldUpdate, final User user, final int position) {
tutorsFiltered.clear();
tutorsFiltered.addAll(Stream.of(tutorsList).filter(t -> t.toSearchString().contains(textToSearch)).toList());
mAdapter.notifyDataSetChanged();
}
private void showNoteDialog(final User user) {
LayoutInflater layoutInflaterAndroid = LayoutInflater.from(getActivity().getApplicationContext());
View view = layoutInflaterAndroid.inflate(R.layout.note_dialog, null);
AlertDialog.Builder alertDialogBuilderUserInput = new AlertDialog.Builder(getActivity().getApplicationContext());
AlertDialog.Builder alertDialogBuilderUserInput = new AlertDialog.Builder(getActivity());
alertDialogBuilderUserInput.setView(view);
alertDialogBuilderUserInput.setNegativeButton(R.string.cancel, (dialog, id) -> {
@ -135,11 +152,13 @@ public class UsersListActivity extends Fragment {
List<String> dutyHoursList = Stream.of(tutorTabViewModel.getDutyHours())
.map(DutyHourViewModel::getSummary).toList();
Log.e("DUTY",dutyHoursList.toString());
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()));
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getActivity().getApplicationContext(),
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getActivity(),
android.R.layout.simple_list_item_activated_1, dutyHoursList);
userDutyHours.setAdapter(arrayAdapter);
@ -183,10 +202,11 @@ public class UsersListActivity extends Fragment {
.subscribeWith(new DisposableSingleObserver<List<User>>() {
@Override
public void onSuccess(List<User> users) {
//toggleEmptyNotes();
tutorsList.clear();
tutorsList.addAll(users);
tutorsFiltered.addAll(users);
mAdapter.notifyDataSetChanged();
toggleEmptyNotes();
}
@ -217,13 +237,13 @@ public class UsersListActivity extends Fragment {
snackbar.show();
}
/* private void toggleEmptyNotes() {
private void toggleEmptyNotes() {
if (tutorsList.size() > 0) {
noNotesView.setVisibility(View.GONE);
} else {
noNotesView.setVisibility(View.VISIBLE);
}
}*/
}
@Override
public void onDestroy() {
@ -254,4 +274,6 @@ public class UsersListActivity extends Fragment {
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
}

View File

@ -15,7 +15,7 @@ import io.swagger.annotations.ApiModelProperty;
* User
*/
public class User extends BaseResponse{
public class User extends BaseResponse {
@SerializedName("isOnline")
private Boolean isOnline = null;
@ -107,6 +107,7 @@ public class User extends BaseResponse{
/**
* Get isOnline
*
* @return isOnline
**/
@ApiModelProperty(value = "")
@ -125,6 +126,7 @@ public class User extends BaseResponse{
/**
* Get isUsingBlacklist
*
* @return isUsingBlacklist
**/
@ApiModelProperty(value = "")
@ -143,6 +145,7 @@ public class User extends BaseResponse{
/**
* Get isUsingWhitelist
*
* @return isUsingWhitelist
**/
@ApiModelProperty(value = "")
@ -169,6 +172,7 @@ public class User extends BaseResponse{
/**
* Get blacklist
*
* @return blacklist
**/
@ApiModelProperty(value = "")
@ -195,6 +199,7 @@ public class User extends BaseResponse{
/**
* Get whitelist
*
* @return whitelist
**/
@ApiModelProperty(value = "")
@ -213,6 +218,7 @@ public class User extends BaseResponse{
/**
* Get department
*
* @return department
**/
@ApiModelProperty(required = true, value = "")
@ -231,6 +237,7 @@ public class User extends BaseResponse{
/**
* Get ldapLogin
*
* @return ldapLogin
**/
@ApiModelProperty(required = true, value = "")
@ -249,6 +256,7 @@ public class User extends BaseResponse{
/**
* Get title
*
* @return title
**/
@ApiModelProperty(required = true, value = "")
@ -267,6 +275,7 @@ public class User extends BaseResponse{
/**
* Get firstName
*
* @return firstName
**/
@ApiModelProperty(required = true, value = "")
@ -285,6 +294,7 @@ public class User extends BaseResponse{
/**
* Get lastName
*
* @return lastName
**/
@ApiModelProperty(required = true, value = "")
@ -303,6 +313,7 @@ public class User extends BaseResponse{
/**
* Get isActive
*
* @return isActive
**/
@ApiModelProperty(required = true, value = "")
@ -321,6 +332,7 @@ public class User extends BaseResponse{
/**
* Get tutorTab
*
* @return tutorTab
**/
@ApiModelProperty(value = "")
@ -347,6 +359,7 @@ public class User extends BaseResponse{
/**
* Get coordinates
*
* @return coordinates
**/
@ApiModelProperty(value = "")
@ -365,6 +378,7 @@ public class User extends BaseResponse{
/**
* Get id
*
* @return id
**/
@ApiModelProperty(value = "")
@ -383,6 +397,7 @@ public class User extends BaseResponse{
/**
* Get userName
*
* @return userName
**/
@ApiModelProperty(value = "")
@ -401,6 +416,7 @@ public class User extends BaseResponse{
/**
* Get normalizedUserName
*
* @return normalizedUserName
**/
@ApiModelProperty(value = "")
@ -419,6 +435,7 @@ public class User extends BaseResponse{
/**
* Get email
*
* @return email
**/
@ApiModelProperty(value = "")
@ -437,6 +454,7 @@ public class User extends BaseResponse{
/**
* Get normalizedEmail
*
* @return normalizedEmail
**/
@ApiModelProperty(value = "")
@ -455,6 +473,7 @@ public class User extends BaseResponse{
/**
* Get emailConfirmed
*
* @return emailConfirmed
**/
@ApiModelProperty(value = "")
@ -473,6 +492,7 @@ public class User extends BaseResponse{
/**
* Get passwordHash
*
* @return passwordHash
**/
@ApiModelProperty(value = "")
@ -491,6 +511,7 @@ public class User extends BaseResponse{
/**
* Get securityStamp
*
* @return securityStamp
**/
@ApiModelProperty(value = "")
@ -509,6 +530,7 @@ public class User extends BaseResponse{
/**
* Get concurrencyStamp
*
* @return concurrencyStamp
**/
@ApiModelProperty(value = "")
@ -527,6 +549,7 @@ public class User extends BaseResponse{
/**
* Get phoneNumber
*
* @return phoneNumber
**/
@ApiModelProperty(value = "")
@ -545,6 +568,7 @@ public class User extends BaseResponse{
/**
* Get phoneNumberConfirmed
*
* @return phoneNumberConfirmed
**/
@ApiModelProperty(value = "")
@ -563,6 +587,7 @@ public class User extends BaseResponse{
/**
* Get twoFactorEnabled
*
* @return twoFactorEnabled
**/
@ApiModelProperty(value = "")
@ -581,6 +606,7 @@ public class User extends BaseResponse{
/**
* Get lockoutEnd
*
* @return lockoutEnd
**/
@ApiModelProperty(value = "")
@ -599,6 +625,7 @@ public class User extends BaseResponse{
/**
* Get lockoutEnabled
*
* @return lockoutEnabled
**/
@ApiModelProperty(value = "")
@ -617,6 +644,7 @@ public class User extends BaseResponse{
/**
* Get accessFailedCount
*
* @return accessFailedCount
**/
@ApiModelProperty(value = "")
@ -674,6 +702,16 @@ public class User extends BaseResponse{
}
public String toSearchString() {
StringBuilder sb = new StringBuilder();
sb.append(userName);
sb.append(lastName);
sb.append(department);
sb.append(email);
return sb.toString();
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();

View File

@ -16,6 +16,17 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView
android:id="@+id/txt_empty_notes_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/margin_top_no_notes"
android:fontFamily="sans-serif-light"
android:text="@string/there_is_no_users_in_system"
android:textColor="@color/msg_no_notes"
android:textSize="@dimen/msg_no_notes" />
</RelativeLayout>