From f9afe7757d494f85e6103f5f41a0214f807519cb Mon Sep 17 00:00:00 2001 From: HridoyBongo Date: Mon, 23 Jul 2018 18:30:32 +0600 Subject: [PATCH 1/2] upgrade gradle to 4.4 --- build.gradle | 3 ++- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 775421d..7de8918 100644 --- a/build.gradle +++ b/build.gradle @@ -3,9 +3,10 @@ buildscript { repositories { jcenter() + google() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.1.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fafaba0..cdc5da5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Jul 20 15:08:02 BDT 2018 +#Mon Jul 23 18:23:48 BDT 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip From 5f454a808c730c07cf1fab1e99cfef0b50d26ab9 Mon Sep 17 00:00:00 2001 From: HridoyBongo Date: Mon, 23 Jul 2018 20:14:59 +0600 Subject: [PATCH 2/2] add search functionality --- app/build.gradle | 18 +-- .../com/roaimsapp/findit/SearchActivity.java | 57 ++++++++++ .../findit/adapter/SearchAdapter.java | 105 ++++++++++++++++++ .../adapter/viewholder/SearchViewHolder.java | 35 ++++++ app/src/main/res/layout/content_main.xml | 61 +++++++++- app/src/main/res/layout/item_search.xml | 48 ++++++++ 6 files changed, 312 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/com/roaimsapp/findit/adapter/SearchAdapter.java create mode 100644 app/src/main/java/com/roaimsapp/findit/adapter/viewholder/SearchViewHolder.java create mode 100644 app/src/main/res/layout/item_search.xml diff --git a/app/build.gradle b/app/build.gradle index 0b3d6ba..f8880fa 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,8 +1,8 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 26 - buildToolsVersion '26.0.2' + compileSdkVersion 27 + buildToolsVersion '27.0.3' defaultConfig { applicationId "com.roaimsapp.findit" minSdkVersion 19 @@ -23,18 +23,18 @@ android { } dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') - androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + implementation fileTree(include: ['*.jar'], dir: 'libs') + androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - compile 'com.android.support.constraint:constraint-layout:1.0.2' - compile 'com.android.support:design:26.1.0' - compile 'com.android.support:appcompat-v7:26.1.0' - testCompile 'junit:junit:4.12' + implementation 'com.android.support.constraint:constraint-layout:1.1.2' + implementation 'com.android.support:design:27.1.1' + implementation 'com.android.support:appcompat-v7:27.1.1' + testImplementation 'junit:junit:4.12' def room_version = "1.1.1" - compile "android.arch.persistence.room:runtime:$room_version" + implementation "android.arch.persistence.room:runtime:$room_version" annotationProcessor "android.arch.persistence.room:compiler:$room_version" // optional - RxJava support for Room diff --git a/app/src/main/java/com/roaimsapp/findit/SearchActivity.java b/app/src/main/java/com/roaimsapp/findit/SearchActivity.java index c9dd1a0..fd1da79 100644 --- a/app/src/main/java/com/roaimsapp/findit/SearchActivity.java +++ b/app/src/main/java/com/roaimsapp/findit/SearchActivity.java @@ -11,9 +11,12 @@ import android.widget.AdapterView; import android.widget.SearchView; +import com.roaimsapp.findit.adapter.SearchAdapter; import com.roaimsapp.findit.adapter.SegmentAdapter; import com.roaimsapp.findit.adapter.SegmentSpinnerAdapter; import com.roaimsapp.findit.data.NumberDatabase; +import com.roaimsapp.findit.data.dao.NumberDao; +import com.roaimsapp.findit.data.model.Number; import com.roaimsapp.findit.data.model.Segment; import com.roaimsapp.findit.databinding.ActivityMainBinding; @@ -24,6 +27,7 @@ public class SearchActivity extends AppCompatActivity implements AdapterView.OnI ActivityMainBinding binding; private NumberDatabase database; private Segment mSegment; + private SearchAdapter searchAdapter; @Override protected void onCreate(Bundle savedInstanceState) { @@ -33,7 +37,12 @@ protected void onCreate(Bundle savedInstanceState) { database = NumberDatabase.getDatabase(this); + searchAdapter = new SearchAdapter(); + binding.include.recyclerView.setLayoutManager(new LinearLayoutManager(this)); + binding.include.recyclerView.setAdapter(searchAdapter); + Tasker.start(null, new Tasker.Callback>() { + @Override public List onBackground(Void input) { return database.segmentDao().getAll(); @@ -55,6 +64,51 @@ public void onUi(List output) { @Override public boolean onQueryTextSubmit(String s) { Log.d(TAG, "onQueryTextSubmit() called with: s = [" + s + "]"); + String[] split = new String[1]; + if (s.contains(" ")) { + split = s.split(" "); + } else if (!s.isEmpty()){ + split[0] = s; + } + Tasker.start(split, new Tasker.Callback>() { + @Override + public List onBackground(String[] input) { + int length = input.length; + Log.d(TAG, "onBackground: length: " + length); + if (length > 3) return null; + searchAdapter.setLength(length); + NumberDao numberDao = database.numberDao(); + List numbers = null; + if (length == 1) { + if (mSegment != null) { + numbers = numberDao.getNumbers(input[0], mSegment.getId()); + } else { + numbers = numberDao.getNumbers(input[0]); + } + } else if (length == 2) { + if (mSegment != null) { + numbers = numberDao.getNumbers(input[0], input[1], mSegment.getId()); + } else { + numbers = numberDao.getNumbers(input[0], input[1]); + } + } else if (length == 3) { + if (mSegment != null) { + numbers = numberDao.getNumbers(input[0], input[1], input[2], mSegment.getId()); + } else { + numbers = numberDao.getNumbers(input[0], input[1], input[2]); + } + } + return numbers; + } + + @Override + public void onUi(List output) { + Log.d(TAG, "onQueryTextSubmit::onUi() called with: output = [" + output + "]"); + if (output != null) { + searchAdapter.addAll(output); + } + } + }, binding.include.progressBar); return false; } @@ -63,6 +117,7 @@ public boolean onQueryTextChange(String s) { Log.d(TAG, "onQueryTextChange() called with: s = [" + s + "]"); if (s.isEmpty()) { prev = ""; + searchAdapter.clear(); return true; } if (s.startsWith(" ")) { @@ -107,6 +162,7 @@ public boolean onOptionsItemSelected(MenuItem item) { @Override public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + Log.d(TAG, "onItemSelected() called with: i = [" + i + "], l = [" + l + "]"); if (adapterView.getAdapter() instanceof SegmentSpinnerAdapter) { Segment item = (Segment) adapterView.getItemAtPosition(i); if (item.getId()==-1) mSegment = null; @@ -116,6 +172,7 @@ public void onItemSelected(AdapterView adapterView, View view, int i, long l) @Override public void onNothingSelected(AdapterView adapterView) { + Log.d(TAG, "onNothingSelected() called"); mSegment = null; } } diff --git a/app/src/main/java/com/roaimsapp/findit/adapter/SearchAdapter.java b/app/src/main/java/com/roaimsapp/findit/adapter/SearchAdapter.java new file mode 100644 index 0000000..1d305cc --- /dev/null +++ b/app/src/main/java/com/roaimsapp/findit/adapter/SearchAdapter.java @@ -0,0 +1,105 @@ +package com.roaimsapp.findit.adapter; + +import android.databinding.DataBindingUtil; +import android.support.annotation.NonNull; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import com.roaimsapp.findit.R; +import com.roaimsapp.findit.adapter.viewholder.NumberViewHolder; +import com.roaimsapp.findit.adapter.viewholder.SearchViewHolder; +import com.roaimsapp.findit.data.model.Number; +import com.roaimsapp.findit.databinding.ItemNumberBinding; +import com.roaimsapp.findit.databinding.ItemSearchBinding; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Roaim on 21-Jul-18. + */ + +public class SearchAdapter extends RecyclerView.Adapter { + private List mList; + private int length; + + public void setLength(int length) { + this.length = length; + } + + public SearchAdapter() { + mList = new ArrayList<>(); + } + + @Override + public SearchViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + LayoutInflater inflater = LayoutInflater.from(parent.getContext()); + ItemSearchBinding binding = DataBindingUtil.inflate(inflater, R.layout.item_search, parent, false); + return new SearchViewHolder(binding); + } + + @Override + public void onBindViewHolder(@NonNull SearchViewHolder holder, int position) { + Number number = getNumber(position); + holder.bind(number, length); + } + + @Override + public int getItemCount() { + return mList.size(); + } + + public Number getNumber(int position) { + return mList.get(position); + } + + public int getIndexOf(Number number) { + return mList.indexOf(number); + } + + public void update(Number number, int index) { + mList.set(index, number); + } + + public void update(int startIndex, Number... numbers) { + for (int i = 0; i < numbers.length; i++) { + int index = startIndex - 1 - i; + mList.set(index, numbers[i]); + } + } + + public void update(Number... numbers) { + for (int i = 0; i < numbers.length; i++) { + int index = mList.size() - 1 - i; + mList.set(index, numbers[i]); + } + } + + public void addAll(List list) { + clear(); + mList.addAll(list); + notifyDataSetChanged(); + } + + public void addNumber(Number number) { + mList.add(number); + } + + public void removeNumber(Number number) { + mList.remove(number); + } + + @Override + public void onViewDetachedFromWindow(SearchViewHolder holder) { + super.onViewDetachedFromWindow(holder); + holder.unBind(); + } + + public void clear() { + if (!mList.isEmpty()) { + mList.removeAll(mList); + } + notifyDataSetChanged(); + } +} diff --git a/app/src/main/java/com/roaimsapp/findit/adapter/viewholder/SearchViewHolder.java b/app/src/main/java/com/roaimsapp/findit/adapter/viewholder/SearchViewHolder.java new file mode 100644 index 0000000..6088319 --- /dev/null +++ b/app/src/main/java/com/roaimsapp/findit/adapter/viewholder/SearchViewHolder.java @@ -0,0 +1,35 @@ +package com.roaimsapp.findit.adapter.viewholder; + +import com.roaimsapp.findit.data.model.Number; +import com.roaimsapp.findit.databinding.ItemSearchBinding; + +/** + * Created by Roaim on 22-Jul-18. + */ + +public class SearchViewHolder extends BaseViewHolder { + + public SearchViewHolder(ItemSearchBinding binding) { + super(binding); + } + + public void bind(Number number, int length) { +// binding.setNumber(number); + binding.setPrev(number.getPrev()); + switch (length) { + case 1: + binding.setSearch(number.getNumber()); + binding.setNext(number.getNext1()); + break; + case 2: + binding.setSearch(number.getNumber() + " " + number.getNext1()); + binding.setNext(number.getNext2()); + break; + case 3: + binding.setSearch(number.getNumber() + " " + number.getNext1() + " " + number.getNext2()); + binding.setNext(number.getNext3()); + } + binding.executePendingBindings(); + } + +} diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml index c3990b2..e53dd02 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_main.xml @@ -40,6 +40,50 @@ app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/spinner" /> + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/linearLayout" /> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_search.xml b/app/src/main/res/layout/item_search.xml new file mode 100644 index 0000000..b5a6b7b --- /dev/null +++ b/app/src/main/res/layout/item_search.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file