diff --git a/app/src/main/java/com/example/yeseul/movieapp/mapper/MovieMapper.java b/app/src/main/java/com/example/yeseul/movieapp/mapper/MovieMapper.java index c8cd8fe..ff48e49 100644 --- a/app/src/main/java/com/example/yeseul/movieapp/mapper/MovieMapper.java +++ b/app/src/main/java/com/example/yeseul/movieapp/mapper/MovieMapper.java @@ -9,13 +9,24 @@ public class MovieMapper { public static final String QUERY_STRING_PAGE_UNIT = "display"; public static final String QUERY_STRING_START = "start"; - public static Map toRequest(String searchKey, int pageUnit, int start){ + public static final String QUERY_STRING_GENRE = "genre"; + public static final String QUERY_STRING_COUNTRY = "country"; + + public static Map toRequest(String searchKey, int pageUnit, int start, String genre, String country){ Map queryMap = new HashMap<>(); queryMap.put(QUERY_STRING_SEARCH_KEY, searchKey); queryMap.put(QUERY_STRING_PAGE_UNIT, ""+pageUnit); queryMap.put(QUERY_STRING_START, ""+start); + if( genre != null && !genre.equals("0") && !genre.equals("")){ + queryMap.put(QUERY_STRING_GENRE, genre); + } + + if( country != null && !country.equals("ALL") && !country.equals("")){ + queryMap.put(QUERY_STRING_COUNTRY, country); + } + return queryMap; } diff --git a/app/src/main/java/com/example/yeseul/movieapp/view/main/MainActivity.java b/app/src/main/java/com/example/yeseul/movieapp/view/main/MainActivity.java index 574b81f..8168dd9 100644 --- a/app/src/main/java/com/example/yeseul/movieapp/view/main/MainActivity.java +++ b/app/src/main/java/com/example/yeseul/movieapp/view/main/MainActivity.java @@ -1,15 +1,18 @@ package com.example.yeseul.movieapp.view.main; +import android.content.DialogInterface; import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.customtabs.CustomTabsIntent; +import android.support.v7.app.AlertDialog; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.Html; import android.text.TextUtils; import android.view.inputmethod.EditorInfo; +import android.widget.Toast; import com.example.yeseul.movieapp.R; import com.example.yeseul.movieapp.data.source.movie.MovieRepository; @@ -17,10 +20,13 @@ import com.example.yeseul.movieapp.utils.KeyboardUtil; import com.example.yeseul.movieapp.view.BaseActivity; +import java.util.HashMap; + public class MainActivity extends BaseActivity implements MainContract.View { private MovieListAdapter adapter; + @Override protected int getLayoutId() { return R.layout.activity_movie; @@ -44,6 +50,9 @@ protected void onCreate(Bundle savedInstanceState) { initView(); presenter.onViewCreated(); + + + } private void initView() { @@ -66,6 +75,7 @@ public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newStat } }); + // 키보드 검색 버튼 리스너 등록 binding.searchBox.etSearch.setOnEditorActionListener((v, actionId, event) -> { if(actionId == EditorInfo.IME_ACTION_SEARCH){ @@ -77,6 +87,44 @@ public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newStat // 검색 버튼 리스너 등록 binding.searchBox.btnSubmit.setOnClickListener(v -> onSearchButtonClicked()); + + // 필터 버튼 리스터 등록 + binding.searchBox.btnFilter.setOnClickListener(v -> onFilterButtonClicked()); + + } + + //필터 설정 + private void onFilterButtonClicked() { + + + //국가 선택 + AlertDialog.Builder cDialog = new AlertDialog.Builder(this); + cDialog.setTitle(R.string.country) + .setItems(R.array.country, + (dialog, which) -> { + presenter.setCountry(Integer.toString(which)); + //country + } + ) + .setOnDismissListener( (dialog) -> presenter.setFilter( getResources().getStringArray(R.array.genre)[Integer.parseInt(presenter.getGenre())], + getResources().getStringArray(R.array.country)[Integer.parseInt(presenter.getCountry())] + ) ); + + + //장르 선택 + AlertDialog.Builder gDialog = new AlertDialog.Builder(this); + gDialog.setTitle(R.string.genre) + .setItems(R.array.genre, + (dialog, which) -> { + + presenter.setGenre(Integer.toString(which)); + } + ) + .setOnDismissListener( (dialog) -> cDialog.show() ); + + gDialog.show(); + + } /** @@ -86,8 +134,9 @@ private void onSearchButtonClicked(){ // 입력값이 존재 하는지 체크 String searchKey = binding.searchBox.etSearch.getText().toString(); + if(!TextUtils.isEmpty(searchKey)) { - presenter.onSearchButtonClicked(searchKey); + presenter.onSearchButtonClicked(searchKey, presenter.getGenre(), getResources().getStringArray(R.array.countryCode)[Integer.parseInt(presenter.getCountry())] ); binding.recyclerMovie.scrollToPosition(0); binding.emptyView.setText(""); KeyboardUtil.closeKeyboard(this, binding.searchBox.etSearch); diff --git a/app/src/main/java/com/example/yeseul/movieapp/view/main/MainContract.java b/app/src/main/java/com/example/yeseul/movieapp/view/main/MainContract.java index ac42353..6fb5c17 100644 --- a/app/src/main/java/com/example/yeseul/movieapp/view/main/MainContract.java +++ b/app/src/main/java/com/example/yeseul/movieapp/view/main/MainContract.java @@ -16,7 +16,7 @@ interface View extends BaseView { interface Presenter extends BasePresenter { - void onSearchButtonClicked(String searchKey); + void onSearchButtonClicked(String searchKey, String genre, String coutnry); void setAdapterView(AdapterContract.View adapterView); diff --git a/app/src/main/java/com/example/yeseul/movieapp/view/main/MainPresenter.java b/app/src/main/java/com/example/yeseul/movieapp/view/main/MainPresenter.java index b57c015..aefc8ef 100644 --- a/app/src/main/java/com/example/yeseul/movieapp/view/main/MainPresenter.java +++ b/app/src/main/java/com/example/yeseul/movieapp/view/main/MainPresenter.java @@ -9,6 +9,7 @@ import com.example.yeseul.movieapp.pojo.Movie; import com.example.yeseul.movieapp.view.adapter.AdapterContract; +import java.util.HashMap; import java.util.List; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -23,15 +24,27 @@ public class MainPresenter implements MainContract.Presenter { private AdapterContract.Model adapterModel; private String searchKey = ""; // 검색 키워드 + private String genre = "0"; + private String country = "0"; private final int PAGE_UNIT = 20; // 한번에 가져올 데이터 개수 private int currentPage = 0; // 현재 페이지 index private boolean isEndOfPage = false; // 페이지 끝 flag + private ObservableField filter = new ObservableField<>("필터"); + public MainPresenter(MainContract.View view, MovieRepository repository) { this.view = view; this.repository = repository; } + public ObservableField getFilter() { + return filter; + } + + public void setFilter(String genre, String country) { + filter.set("장르 : " + genre +"\n"+"국가 : "+country); + } + @Override public void onViewCreated() { // do nothing @@ -54,8 +67,10 @@ public void loadItems(boolean isRefresh) { } @Override - public void onSearchButtonClicked(String searchKey) { + public void onSearchButtonClicked(String searchKey, String genre, String country) { this.searchKey = searchKey; + this.genre = genre; + this.country = country; loadItems(true); } @@ -76,7 +91,7 @@ private void getMovieList(){ isLoading.set(true); - repository.searchMovies(MovieMapper.toRequest(searchKey, PAGE_UNIT, (PAGE_UNIT * currentPage++) + 1)) + repository.searchMovies(MovieMapper.toRequest(searchKey, PAGE_UNIT, (PAGE_UNIT * currentPage++) + 1, genre, country)) .observeOn(AndroidSchedulers.mainThread()) .subscribe(response -> { @@ -111,4 +126,20 @@ private void getMovieList(){ view.onSearchResultEmpty(searchKey); }); } + + public String getGenre() { + return genre; + } + + public void setGenre(String genre) { + this.genre = genre; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } } diff --git a/app/src/main/res/layout/layout_search_box.xml b/app/src/main/res/layout/layout_search_box.xml index 439c61f..2d59c71 100644 --- a/app/src/main/res/layout/layout_search_box.xml +++ b/app/src/main/res/layout/layout_search_box.xml @@ -17,7 +17,7 @@ +