package com.example.nemophila;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.Toolbar;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.DialogFragment;
import androidx.navigation.NavController;
import androidx.navigation.fragment.NavHostFragment;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.material.navigation.NavigationView;
import java.util.ArrayList;
import java.util.List;
public class MapsActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
Nemophila nemophila;
DialogFragment filterDialog;
private Handler handler;
// フィルターのリスト用
ArrayList<FilterDataModel> listData;
ListView list;
boolean isGenre;
String genreData[];
String friendsData[];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
nemophila = (Nemophila) this.getApplication();
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
// DrawerToggle
DrawerLayout drawer =
(DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar,
R.string.drawer_open,
R.string.drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
// NavigationView Listener
NavigationView navigationView = (NavigationView) findViewById(R.id.navView);
navigationView.setNavigationItemSelectedListener(this);
// geocode Test
handler = new Handler();
// // 検索バーの処理
// SearchView searchView = findViewById(R.id.tool_search);
// searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
// @Override
// public boolean onQueryTextSubmit(String query) {
// new Thread(() -> {
// geoCode(query);
// }).start();
// return false;
// }
//
// @Override
// public boolean onQueryTextChange(String newText) {
// return false;
// }
// });
//filterDialog = new FilterDialog();
// サイドメニューのボタン
Button genreButton = findViewById(R.id.filter_genre_button);
Button friendButton = findViewById(R.id.filter_friends_button);
// 押したボタンを灰色にし、listを作成
genreButton.setOnClickListener(view -> {
genreButton.setBackgroundColor(Color.parseColor("#afafb0"));
friendButton.setBackgroundColor(Color.WHITE);
prepareGenreList(null);
});
friendButton.setOnClickListener(view -> {
friendButton.setBackgroundColor(Color.parseColor("#afafb0"));
genreButton.setBackgroundColor(Color.WHITE);
prepareFriendList(null);
});
// サイドメニューのフィルターのリストの準備
genreData = new String[5];
friendsData = new String[5];
genreData[0] = "和食";
genreData[1] = "中華";
genreData[2] = "イタリアン";
genreData[3] = "洋食";
genreData[4] = "ジャンクフード";
friendsData[0] = "iyo";
friendsData[1] = "iyo2";
friendsData[2] = "superiyo";
friendsData[3] = "perfectiyo";
friendsData[4] = "finaliyo";
listData = new ArrayList<>();
list = findViewById(R.id.drawer_list);
prepareGenreList(null);
// フィルターを有効にする
list.setTextFilterEnabled(true);
//サイドメニューの検索バー
SearchView listSearch = findViewById(R.id.drawer_search);
listSearch.setOnQueryTextListener(
new SearchView.OnQueryTextListener() {
// 入力テキストに変更があったとき
@Override
public boolean onQueryTextChange(String s) {
if(isGenre){
if(s.equals("")){
prepareGenreList(null);
} else {
prepareGenreList(s);
}
} else {
if(s.equals("")){
prepareFriendList(null);
} else {
prepareFriendList(s);
}
}
return false;
}
// 検索ボタンを押したとき
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
}
);
}
//右上のメニューを用意、マイページ画面への遷移
@Override
public boolean onCreateOptionsMenu(@NonNull Menu menu) {
getMenuInflater().inflate(R.menu.tool_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Intent intent = new Intent(MapsActivity.this, MyPageActivity.class);
startActivity(intent);
return super.onOptionsItemSelected(item);
}
public void prepareGenreList(String s){
// 現在表示されているリストがジャンルのリストかどうかを設定
isGenre = true;
// 一度リストのデータを取り除いてから追加する
listData.clear();
for(int i = 0; i < genreData.length; i++){
if(s == null) {
FilterDataModel fd = new FilterDataModel();
fd.setText(genreData[i]);
listData.add(fd);
} else {
if(genreData[i].contains(s)){
FilterDataModel fd = new FilterDataModel();
fd.setText(genreData[i]);
listData.add(fd);
}
}
}
// ListViewにデータをセットする
list.setAdapter(new MyAdapter(
this,
R.layout.filter_layout,
listData
));
list.deferNotifyDataSetChanged();
}
public void prepareFriendList(String s){
// 現在表示されているリストがジャンルのリストかどうかを設定
isGenre = false;
// 一度リストのデータを取り除いてから追加する
listData.clear();
for(int i = 0; i < friendsData.length; i++){
if(s == null) {
FilterDataModel fd = new FilterDataModel();
fd.setText(friendsData[i]);
listData.add(fd);
} else {
if(friendsData[i].contains(s)){
FilterDataModel fd = new FilterDataModel();
fd.setText(friendsData[i]);
listData.add(fd);
}
}
}
// ListViewにデータをセットする
list.setAdapter(new MyAdapter(
this,
R.layout.filter_layout,
listData
));
list.deferNotifyDataSetChanged();
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
return false;
}
// 内部クラス
private class MyAdapter extends ArrayAdapter<FilterDataModel> {
private LayoutInflater layoutInflater;
public MyAdapter(Context context, int resourceId, List<FilterDataModel> objects){
super(context, resourceId, objects);
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
// 画面外に行ったときにチェックがずれないようにする
@Override
public View getView(int position, View convertView, ViewGroup parent) {
FilterDataModel item = (FilterDataModel) getItem(position);
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.filter_item, null);
}
TextView textView = convertView.findViewById(R.id.filter_text);
textView.setText(item.text);
CheckBox checkBox = convertView.findViewById(R.id.filter_checkbox);
checkBox.setOnCheckedChangeListener(null);
checkBox.setChecked(item.isChecked);
// チェックボックスを押したときの処理
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if(b) {
if(isGenre) {
//Toast.makeText(MapsActivity.this, listData.get(position).getText(), Toast.LENGTH_SHORT).show();
nemophila.setSelectGenres(listData.get(position).getText());
} else {
nemophila.setSelectFriends(listData.get(position).getText());
}
} else {
if(isGenre) {
//Toast.makeText(MapsActivity.this, listData.get(position).getText(), Toast.LENGTH_SHORT).show();
nemophila.removeSelectGenres(listData.get(position).getText());
} else {
nemophila.removeSelectFriends(listData.get(position).getText());
}
}
FilterDataModel data = getItem(position);
data.isChecked = b;
}
});
return convertView;
}
}
private static class FilterDataModel{
private String text;
private boolean isChecked;
public String getText() {
return text;
}
public boolean isChecked() {
return isChecked;
}
public void setText(String text) {
this.text = text;
}
public void setChecked(boolean checked) {
isChecked = checked;
}
}
}