Skip to content

Commit

Permalink
Add search to MainActivity
Browse files Browse the repository at this point in the history
  • Loading branch information
teccheck committed Apr 30, 2021
1 parent 003c40a commit 09619e3
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ public LiveData<List<ItemEntity>> getItemsInDatabase(int databaseId) {
return appDatabase.itemDao().getItemsInDatabase(databaseId);
}

public LiveData<List<ItemEntity>> searchItemsInDatabase(int databaseId, String searchQuery) {
return appDatabase.itemDao().searchItemsInDatabase(databaseId, searchQuery);
}

public LiveData<List<Tag>> getTagsInItem(int itemId) {
return null; // TODO
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ public interface ItemDao {
@Query("SELECT * FROM items WHERE databaseId=:databaseId")
LiveData<List<ItemEntity>> getItemsInDatabase(int databaseId);

@Query("SELECT * FROM items WHERE databaseId=:databaseId AND name LIKE :searchQuery")
LiveData<List<ItemEntity>> searchItemsInDatabase(int databaseId, String searchQuery);

@Query("SELECT * FROM items WHERE id=:itemId")
LiveData<ItemEntity> getItem(int itemId);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.widget.SearchView;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
Expand All @@ -38,6 +39,8 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
RecyclerTestAdapter adapter;
int databaseId = -1;

DatabaseViewModel viewModel;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Expand Down Expand Up @@ -79,20 +82,20 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
protected void onResume() {
super.onResume();

DatabaseViewModel model = new ViewModelProvider(this).get(DatabaseViewModel.class);
viewModel = new ViewModelProvider(this).get(DatabaseViewModel.class);

// If onActivityResult delivered a databaseId
if (this.databaseId != -1) {
model.setDatabaseId(this.databaseId);
model.getDatabase().observe(this, databaseEntity -> {
viewModel.setDatabaseId(this.databaseId);
viewModel.getDatabase().observe(this, databaseEntity -> {
Log.d("MainActivity", String.valueOf(databaseEntity));

if (databaseEntity != null) {
toolbar.setTitle(databaseEntity.getName());
}
});

model.getItems().observe(this, items -> {
viewModel.getItems().observe(this, items -> {
if (items != null)
adapter.setItems(items);
});
Expand All @@ -101,7 +104,7 @@ protected void onResume() {
}

// Get the first available database if none was selected
model.getDatabases().observe(this, databases -> {
viewModel.getDatabases().observe(this, databases -> {
if (databases != null) {

if(databases.isEmpty()){
Expand All @@ -115,16 +118,16 @@ protected void onResume() {
noDatabaseLayout.setVisibility(View.GONE);

int databaseId = databases.get(0).getId();
model.setDatabaseId(databaseId);
model.getDatabase().observe(this, databaseEntity -> {
viewModel.setDatabaseId(databaseId);
viewModel.getDatabase().observe(this, databaseEntity -> {
Log.d("MainActivity", String.valueOf(databaseEntity));

if (databaseEntity != null) {
toolbar.setTitle(databaseEntity.getName());
}
});

model.getItems().observe(this, items -> {
viewModel.getItems().observe(this, items -> {
if (items != null)
adapter.setItems(items);
});
Expand All @@ -136,6 +139,20 @@ protected void onResume() {
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main_activity, menu);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {

return false;
}

@Override
public boolean onQueryTextChange(String newText) {
viewModel.setSearchQuery(newText);
return false;
}
});
return true;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package io.github.storagereloaded.android.viewmodel;

import android.app.Application;
import android.text.TextUtils;

import androidx.annotation.NonNull;
import androidx.arch.core.util.Function;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.SavedStateHandle;
import androidx.lifecycle.Transformations;

import java.util.List;

Expand All @@ -16,20 +20,36 @@

public class DatabaseViewModel extends AndroidViewModel {

private static final String SEARCH_QUERY_KEY = "SEARCH_QUERY";

private final DataRepository repository;
private final SavedStateHandle savedStateHandle;
private final LiveData<List<ItemEntity>> items;
private int databaseId;

public DatabaseViewModel(@NonNull Application application) {
public DatabaseViewModel(@NonNull Application application, @NonNull SavedStateHandle savedStateHandle) {
super(application);
this.savedStateHandle = savedStateHandle;
this.repository = ((StoReApp) application).getRepository();

items = Transformations.switchMap(savedStateHandle.getLiveData(SEARCH_QUERY_KEY, null), (Function<CharSequence, LiveData<List<ItemEntity>>>) searchQuery -> {
if (TextUtils.isEmpty(searchQuery)) {
return repository.getItemsInDatabase(databaseId);
}
return repository.searchItemsInDatabase(databaseId, "%" + searchQuery + "%");
});
}

public void setDatabaseId(int databaseId) {
this.databaseId = databaseId;
}

public void setSearchQuery(String searchQuery) {
savedStateHandle.set(SEARCH_QUERY_KEY, searchQuery);
}

public LiveData<List<ItemEntity>> getItems() {
return repository.getItemsInDatabase(databaseId);
return items;
}

public LiveData<DatabaseEntity> getDatabase() {
Expand Down

0 comments on commit 09619e3

Please sign in to comment.