From cb5cff170aab2979cca0a50a7b0711f08910ba9e Mon Sep 17 00:00:00 2001 From: Yoon Date: Fri, 18 Jan 2019 22:22:05 +0900 Subject: [PATCH] Add year selection function --- .../yeseul/movieapp/mapper/MovieMapper.java | 9 ++- .../movieapp/view/main/MainActivity.java | 14 ++++- .../movieapp/view/main/MainContract.java | 1 + .../movieapp/view/main/MainPresenter.java | 12 +++- .../view/main/NumberPickerDialog.java | 49 ++++++++++++++++ app/src/main/res/layout/layout_search_box.xml | 9 +++ app/src/main/res/layout/year_dialog.xml | 57 +++++++++++++++++++ 7 files changed, 146 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/com/example/yeseul/movieapp/view/main/NumberPickerDialog.java create mode 100644 app/src/main/res/layout/year_dialog.xml 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..86958d6 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 @@ -8,14 +8,19 @@ public class MovieMapper { public static final String QUERY_STRING_SEARCH_KEY = "query"; public static final String QUERY_STRING_PAGE_UNIT = "display"; public static final String QUERY_STRING_START = "start"; + public static final String QUERY_STRING_YEAR_FROM="yearFrom"; + public static final String QUERY_STRING_YEAR_TO="yearTo"; - public static Map toRequest(String searchKey, int pageUnit, int start){ + public static Map toRequest(String searchKey, int pageUnit, int start,int yearFrom, int yearTo){ 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(yearFrom!=0&&yearTo!=0) { + queryMap.put(QUERY_STRING_YEAR_FROM,""+yearFrom); + queryMap.put(QUERY_STRING_YEAR_TO,""+yearTo); + } 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..84c7571 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,5 +1,6 @@ package com.example.yeseul.movieapp.view.main; +import android.app.AlertDialog; import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; @@ -10,6 +11,7 @@ import android.text.Html; import android.text.TextUtils; import android.view.inputmethod.EditorInfo; +import android.widget.NumberPicker; import com.example.yeseul.movieapp.R; import com.example.yeseul.movieapp.data.source.movie.MovieRepository; @@ -17,7 +19,7 @@ import com.example.yeseul.movieapp.utils.KeyboardUtil; import com.example.yeseul.movieapp.view.BaseActivity; -public class MainActivity extends BaseActivity implements MainContract.View { +public class MainActivity extends BaseActivity implements MainContract.View{ private MovieListAdapter adapter; @@ -77,6 +79,16 @@ public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newStat // 검색 버튼 리스너 등록 binding.searchBox.btnSubmit.setOnClickListener(v -> onSearchButtonClicked()); + + //년도 버튼 리스너 등록 + binding.searchBox.yearBtn.setOnClickListener(v->onYearButtonClicked()); + } + + // 년도 버튼 눌렀을 때 호출 + private void onYearButtonClicked(){ + NumberPickerDialog dialog=new NumberPickerDialog(); + dialog.setListener(presenter); + dialog.show(getSupportFragmentManager(),"Year Select"); } /** 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..6e1d15d 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 @@ -15,6 +15,7 @@ interface View extends BaseView { } interface Presenter extends BasePresenter { + void onYearButtonClicked(int from,int to); void onSearchButtonClicked(String searchKey); 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..37d9c20 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 @@ -2,7 +2,6 @@ import android.annotation.SuppressLint; import android.databinding.ObservableBoolean; -import android.databinding.ObservableField; import com.example.yeseul.movieapp.data.source.movie.MovieRepository; import com.example.yeseul.movieapp.mapper.MovieMapper; @@ -26,6 +25,8 @@ public class MainPresenter implements MainContract.Presenter { private final int PAGE_UNIT = 20; // 한번에 가져올 데이터 개수 private int currentPage = 0; // 현재 페이지 index private boolean isEndOfPage = false; // 페이지 끝 flag + private int yearFrom=0; //시작 년도 + private int yearTo=0; //끝 년도 public MainPresenter(MainContract.View view, MovieRepository repository) { this.view = view; @@ -76,7 +77,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,yearFrom,yearTo)) .observeOn(AndroidSchedulers.mainThread()) .subscribe(response -> { @@ -111,4 +112,11 @@ private void getMovieList(){ view.onSearchResultEmpty(searchKey); }); } + + @Override + public void onYearButtonClicked(int from,int to){ + yearFrom=from; + yearTo=to; + } + } diff --git a/app/src/main/java/com/example/yeseul/movieapp/view/main/NumberPickerDialog.java b/app/src/main/java/com/example/yeseul/movieapp/view/main/NumberPickerDialog.java new file mode 100644 index 0000000..275e4bb --- /dev/null +++ b/app/src/main/java/com/example/yeseul/movieapp/view/main/NumberPickerDialog.java @@ -0,0 +1,49 @@ +package com.example.yeseul.movieapp.view.main; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.databinding.DataBindingUtil; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.DialogFragment; +import android.view.LayoutInflater; +import android.widget.NumberPicker; + +import com.example.yeseul.movieapp.R; +import com.example.yeseul.movieapp.databinding.YearDialogBinding; +import com.example.yeseul.movieapp.utils.BindingUtil; + +public class NumberPickerDialog extends DialogFragment { + private MainContract.Presenter listener; + private YearDialogBinding binding; + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + binding= DataBindingUtil.inflate(LayoutInflater.from(getContext()),R.layout.year_dialog,null,false); + binding.setDialog(this); + LayoutInflater inflater =getActivity().getLayoutInflater(); + AlertDialog.Builder builder=new AlertDialog.Builder(getActivity()); + builder.setTitle("제작년도 설정"); + builder.setView(binding.getRoot()) + .setPositiveButton("OK",((dialog, which) -> listener.onYearButtonClicked(binding.yearFrom.getValue(),binding.yearTo.getValue()))) + .setNegativeButton("Cancel", ((dialog, which) ->listener.onYearButtonClicked(0,0))); + binding.yearFrom.setMinValue(1990); + binding.yearFrom.setMaxValue(2019); + binding.yearFrom.setValue(2019); + binding.yearTo.setMinValue(1990); + binding.yearTo.setMaxValue(2019); + binding.yearTo.setValue(2019); + binding.yearFrom.setWrapSelectorWheel(false); + binding.yearTo.setWrapSelectorWheel(false); + return builder.create(); + } + + public MainContract.Presenter getListener(){ + return listener; + } + public void setListener(MainContract.Presenter listener){ + this.listener=listener; + } +} diff --git a/app/src/main/res/layout/layout_search_box.xml b/app/src/main/res/layout/layout_search_box.xml index 439c61f..ba5723f 100644 --- a/app/src/main/res/layout/layout_search_box.xml +++ b/app/src/main/res/layout/layout_search_box.xml @@ -29,6 +29,15 @@ android:textColor="@android:color/black" android:textSize="@dimen/text_size_main" android:gravity="center_vertical"/> +