Skip to content

Instantly share code, notes, and snippets.

@LAHomieJob
Created April 5, 2018 19:13
Show Gist options
  • Save LAHomieJob/aaa005eae27c6b2c25b1df1c27c3b89f to your computer and use it in GitHub Desktop.
Save LAHomieJob/aaa005eae27c6b2c25b1df1c27c3b89f to your computer and use it in GitHub Desktop.
package com.hfad.singleton.groupsActivityController;
import android.app.SearchManager;
import android.arch.lifecycle.Observer;
import android.arch.lifecycle.ViewModelProviders;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
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.MenuInflater;
import android.widget.EditText;
import com.hfad.singleton.R;
import com.hfad.singleton.adapter.GroupsVcAdapter;
import com.hfad.singleton.adapter.OnItemClicked;
import com.hfad.singleton.database.GroupVc;
import com.hfad.singleton.viewModel.GroupsViewModel;
import com.hfad.singleton.wordsActivityController.WordsActivity;
import java.util.List;
public class GroupsActivity extends AppCompatActivity implements
DeleteAlertDialog.DeleteAlertDialogListener,
EditNameGroupAlertDialog.EditNameListener{
public static final String EXTRA_GROUP = "com.hfad.singleton.GroupsActivityController.Name";
public static final String EXTRA_LANGUAGE = "com.hfad.singleton.GroupsActivityController.Language";
private static final String DELETE_DIALOG = "Delete dialog";
private static final String EDIT_DIALOG = "Edit dialog";
private static final String TAG = "CANCEL";
private static final String NAME_GROUP = "Name group";
private RecyclerView mRecyclerView;
private GroupsVcAdapter adapter;
private GroupsViewModel mGroupsViewModel;
private String nameGroup;
private EditNameGroupAlertDialog editDialog;
private DeleteAlertDialog deleteDialog;
private SearchView searchView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Restore value of members from saved state
if (savedInstanceState != null) {
nameGroup = savedInstanceState.getString(NAME_GROUP);
}
setContentView(R.layout.activity_groups);
//Creating of toolbar with title Groups
Toolbar myToolbar = findViewById(R.id.toolbar_groups);
setSupportActionBar(myToolbar);
//Enable Up Button
ActionBar ab = getSupportActionBar();
ab.setDisplayHomeAsUpEnabled(true);
//RecyclerView containing the list of groups with sound icons
mRecyclerView = initRecyclerView();
//Using ViewModel to observe GroupVc data
mGroupsViewModel = ViewModelProviders.of(this).get(GroupsViewModel.class);
mGroupsViewModel.getAllGroups().observe(this, new Observer<List<GroupVc>>() {
@Override
public void onChanged(@Nullable List<GroupVc> groupVcs) {
adapter.setGroupsVc(groupVcs);
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
//Save the user's current selected group in Edit or Delete dialog
outState.putString(NAME_GROUP, nameGroup);
super.onSaveInstanceState(outState);
}
private RecyclerView initRecyclerView() {
RecyclerView recyclerView = findViewById(R.id.groups_recycler_view);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
OnItemClicked listener = (v, position) -> {
nameGroup = adapter.getFilteredGroupsVc().get(position).getNameGroup();
switch (v.getId()) {
case R.id.delete_group:
showDeleteDialog();
break;
case R.id.edit_group:
showEditNameDialog();
break;
case R.id.surface:
String language = adapter.getFilteredGroupsVc().get(position).getLanguage();
Intent intent = new Intent(this, WordsActivity.class);
intent.putExtra(EXTRA_GROUP, nameGroup);
intent.putExtra(EXTRA_LANGUAGE, language);
startActivity(intent);
break;
}
};
adapter = new GroupsVcAdapter(this, listener);
recyclerView.setAdapter(adapter);
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this,
layoutManager.getOrientation());
recyclerView.addItemDecoration(dividerItemDecoration);
recyclerView.setItemAnimator(new DefaultItemAnimator());
return recyclerView;
}
@Override
public void onEditDialogPositiveClick(DialogFragment dialog) {
EditText newName = dialog.getDialog().findViewById(R.id.newGroupName);
if (TextUtils.isEmpty(newName.getText()) && nameGroup != null) {
dialog.dismiss();
} else {
mGroupsViewModel.updateGroupByName(nameGroup, newName.getText().toString());
}
}
private void showDeleteDialog() {
deleteDialog = new DeleteAlertDialog();
deleteDialog.show(getSupportFragmentManager(), DELETE_DIALOG);
}
private void showEditNameDialog() {
editDialog = new EditNameGroupAlertDialog();
editDialog.show(getSupportFragmentManager(), EDIT_DIALOG);
}
@Override
public void onDeleteDialogPositiveClick(DialogFragment dialog) {
if (nameGroup != null) {
mGroupsViewModel.delete(nameGroup);
}
}
@Override
public void onDeleteDialogNegativeClick(DialogFragment dialog) {
Log.i(TAG, "Cancel button in Delete dialog.");
dialog.dismiss();
}
@Override
public void onEditDialogNegativeClick(DialogFragment dialog) {
Log.i(TAG, "Cancel button in EditName dialog.");
dialog.dismiss();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_activity_words, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
searchView =
(SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String text) {
return false;
}
@Override
public boolean onQueryTextChange(String text) {
adapter.getFilter().filter(text);
return true;
}
});
return true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment