Newer
Older
NemophilaClient / app / src / main / java / com / example / nemophila / MapsActivity.java
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);
            //チェック済みの項目をチェックにしておく
            if(isGenre) {
                checkBox.setChecked(nemophila.getSelectGenres().contains(item.getText()));
            } else {
                checkBox.setChecked(nemophila.getSelectFriends().contains(item.getText()));
            }

            // チェックボックスを押したときの処理
            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;
        }
    }

}