From e4829ab1ac1024ca26dcfbbb862559d061491363 Mon Sep 17 00:00:00 2001 From: ChronosX88 Date: Sun, 13 Jan 2019 16:14:23 +0400 Subject: [PATCH 1/6] Added the effect of clicking on a tree item --- app/src/main/res/layout/first_level_item.xml | 3 ++- app/src/main/res/layout/second_level_item.xml | 3 ++- app/src/main/res/layout/third_level_item.xml | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/layout/first_level_item.xml b/app/src/main/res/layout/first_level_item.xml index 68a0797..1d2da0f 100644 --- a/app/src/main/res/layout/first_level_item.xml +++ b/app/src/main/res/layout/first_level_item.xml @@ -1,7 +1,8 @@ + android:layout_height="80dp" + android:background="?android:selectableItemBackground"> + android:orientation="vertical" + android:background="?android:selectableItemBackground"> + android:orientation="vertical" + android:background="?android:selectableItemBackground"> Date: Sun, 13 Jan 2019 16:59:53 +0400 Subject: [PATCH 2/6] Removed unnecessary imports. --- .../java/ru/volgorobot/vrcatalog/api/Controller.java | 3 --- .../nodeViewBinders/FirstLevelNodeViewBinder.java | 7 ------- .../nodeViewBinders/SecondLevelNodeViewBinder.java | 6 ------ .../nodeViewBinders/ThirdLevelNodeViewBinder.java | 10 +--------- .../ru/volgorobot/vrcatalog/view/DetailActivity.java | 3 +-- 5 files changed, 2 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/api/Controller.java b/app/src/main/java/ru/volgorobot/vrcatalog/api/Controller.java index 3a1654a..383d4fc 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/api/Controller.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/api/Controller.java @@ -1,8 +1,5 @@ package ru.volgorobot.vrcatalog.api; -import android.content.Context; -import android.widget.Toast; - import com.google.gson.Gson; import com.google.gson.GsonBuilder; diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/FirstLevelNodeViewBinder.java b/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/FirstLevelNodeViewBinder.java index 78b6495..846dbd5 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/FirstLevelNodeViewBinder.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/FirstLevelNodeViewBinder.java @@ -1,23 +1,16 @@ package ru.volgorobot.vrcatalog.nodeViewBinders; import android.content.Context; -import android.os.AsyncTask; import android.view.View; import android.widget.ImageView; import android.widget.TextView; -import java.util.ArrayList; - import me.texy.treeview.TreeNode; import me.texy.treeview.base.BaseNodeViewBinder; import ru.volgorobot.vrcatalog.MainContract; import ru.volgorobot.vrcatalog.R; import ru.volgorobot.vrcatalog.ViewBinderPresenter; -import ru.volgorobot.vrcatalog.additional.NetworkErrorException; -import ru.volgorobot.vrcatalog.additional.ResultWithErrorCode; -import ru.volgorobot.vrcatalog.model.CoreModel; import ru.volgorobot.vrcatalog.model.FirstLevelModel; -import ru.volgorobot.vrcatalog.model.SecondLevelModel; public class FirstLevelNodeViewBinder extends BaseNodeViewBinder implements MainContract.ViewBinder { TextView textView; diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/SecondLevelNodeViewBinder.java b/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/SecondLevelNodeViewBinder.java index fb561bb..d719cc5 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/SecondLevelNodeViewBinder.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/SecondLevelNodeViewBinder.java @@ -1,23 +1,17 @@ package ru.volgorobot.vrcatalog.nodeViewBinders; import android.content.Context; -import android.os.AsyncTask; import android.view.View; import android.widget.ImageView; import android.widget.TextView; -import java.util.ArrayList; - import me.texy.treeview.TreeNode; import me.texy.treeview.base.BaseNodeViewBinder; import ru.volgorobot.vrcatalog.MainContract; import ru.volgorobot.vrcatalog.R; import ru.volgorobot.vrcatalog.ViewBinderPresenter; -import ru.volgorobot.vrcatalog.additional.NetworkErrorException; -import ru.volgorobot.vrcatalog.additional.ResultWithErrorCode; import ru.volgorobot.vrcatalog.model.CoreModel; import ru.volgorobot.vrcatalog.model.SecondLevelModel; -import ru.volgorobot.vrcatalog.model.ThirdLevelModel; public class SecondLevelNodeViewBinder extends BaseNodeViewBinder implements MainContract.ViewBinder { TextView textView; diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/ThirdLevelNodeViewBinder.java b/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/ThirdLevelNodeViewBinder.java index 1545d46..07ba470 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/ThirdLevelNodeViewBinder.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/nodeViewBinders/ThirdLevelNodeViewBinder.java @@ -1,24 +1,16 @@ package ru.volgorobot.vrcatalog.nodeViewBinders; import android.content.Context; -import android.content.Intent; -import android.os.AsyncTask; import android.view.View; import android.widget.TextView; -import java.util.ArrayList; - import me.texy.treeview.TreeNode; import me.texy.treeview.base.BaseNodeViewBinder; import ru.volgorobot.vrcatalog.MainContract; import ru.volgorobot.vrcatalog.R; import ru.volgorobot.vrcatalog.ViewBinderPresenter; -import ru.volgorobot.vrcatalog.additional.NetworkErrorException; -import ru.volgorobot.vrcatalog.additional.ResultWithErrorCode; import ru.volgorobot.vrcatalog.model.CoreModel; -import ru.volgorobot.vrcatalog.model.DetailModel; import ru.volgorobot.vrcatalog.model.ThirdLevelModel; -import ru.volgorobot.vrcatalog.view.DetailActivity; public class ThirdLevelNodeViewBinder extends BaseNodeViewBinder implements MainContract.ViewBinder { TextView textView; @@ -27,7 +19,7 @@ public class ThirdLevelNodeViewBinder extends BaseNodeViewBinder implements Main public ThirdLevelNodeViewBinder(View itemView, Context context, MainContract.MainActivityView mView, CoreModel coreModel) { super(itemView); viewBinderPresenter = new ViewBinderPresenter(mView, coreModel, this, context); - textView = (TextView) itemView.findViewById(R.id.node_name_view); + textView = itemView.findViewById(R.id.node_name_view); } @Override diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/view/DetailActivity.java b/app/src/main/java/ru/volgorobot/vrcatalog/view/DetailActivity.java index b478d3b..8af69ba 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/view/DetailActivity.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/view/DetailActivity.java @@ -1,15 +1,14 @@ package ru.volgorobot.vrcatalog.view; import android.content.Intent; -import android.support.v7.app.AppCompatActivity; import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; import android.text.method.LinkMovementMethod; import android.view.MenuItem; import android.widget.EditText; import android.widget.TextView; import java.util.HashMap; -import java.util.Map; import ru.volgorobot.vrcatalog.R; From 4fb99782d4e0a98adac1fc4d3924e26b45ee2038 Mon Sep 17 00:00:00 2001 From: ChronosX88 Date: Tue, 15 Jan 2019 22:08:09 +0400 Subject: [PATCH 3/6] Added search. --- .idea/caches/build_file_checksums.ser | Bin 537 -> 537 bytes .idea/caches/gradle_models.ser | Bin 0 -> 101927 bytes .idea/gradle.xml | 3 + .idea/render.experimental.xml | 6 + app/src/main/AndroidManifest.xml | 17 +- .../ru/volgorobot/vrcatalog/MainContract.java | 13 ++ .../vrcatalog/SearchablePresenter.java | 219 ++++++++++++++++++ .../vrcatalog/ViewBinderPresenter.java | 11 +- .../vrcatalog/additional/NodeViewFactory.java | 6 +- .../additional/SearchableNodeViewFactory.java | 35 +++ .../ru/volgorobot/vrcatalog/api/VRApi.java | 9 + .../volgorobot/vrcatalog/model/CoreModel.java | 57 +++++ .../FirstLevelNodeViewBinder.java | 4 +- .../SecondLevelNodeViewBinder.java | 5 +- .../ThirdLevelNodeViewBinder.java | 5 +- .../FirstLevelNodeViewBinder.java | 39 ++++ .../SecondLevelNodeViewBinder.java | 39 ++++ .../vrcatalog/view/MainActivity.java | 20 ++ .../vrcatalog/view/SearchableActivity.java | 117 ++++++++++ .../main/res/layout/activity_searchable.xml | 21 ++ app/src/main/res/menu/main.xml | 6 + app/src/main/res/xml/searchable.xml | 5 + build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 3 +- 24 files changed, 620 insertions(+), 22 deletions(-) create mode 100644 .idea/caches/gradle_models.ser create mode 100644 .idea/render.experimental.xml create mode 100644 app/src/main/java/ru/volgorobot/vrcatalog/SearchablePresenter.java create mode 100644 app/src/main/java/ru/volgorobot/vrcatalog/additional/SearchableNodeViewFactory.java create mode 100644 app/src/main/java/ru/volgorobot/vrcatalog/searchNodeViewBinders/FirstLevelNodeViewBinder.java create mode 100644 app/src/main/java/ru/volgorobot/vrcatalog/searchNodeViewBinders/SecondLevelNodeViewBinder.java create mode 100644 app/src/main/java/ru/volgorobot/vrcatalog/view/SearchableActivity.java create mode 100644 app/src/main/res/layout/activity_searchable.xml create mode 100644 app/src/main/res/xml/searchable.xml diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 9c9d4877679efb0f01b207b4ae0d52e78ccc685f..f16fad93624aad29773c93405fada908b06ab6c3 100644 GIT binary patch delta 35 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