From 50957abeca71a8c78f88cb9e0342b19e1c4a74a5 Mon Sep 17 00:00:00 2001 From: IllusionMan1212 Date: Sun, 17 May 2020 06:00:18 +0300 Subject: [PATCH] Handle recyclerview touches and add single app activity --- app/src/main/AndroidManifest.xml | 3 + .../npsbrowser/RecyclerTouchListener.kt | 44 +++++++++++++ .../npsbrowser/activities/AppsListActivity.kt | 15 ++++- .../activities/SingleAppActivity.kt | 20 ++++++ .../main/res/layout/activity_single_app.xml | 61 +++++++++++++++++++ 5 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/illusionware/npsbrowser/RecyclerTouchListener.kt create mode 100644 app/src/main/java/com/illusionware/npsbrowser/activities/SingleAppActivity.kt create mode 100644 app/src/main/res/layout/activity_single_app.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 551dc3b..5329aa5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,6 +18,9 @@ + + diff --git a/app/src/main/java/com/illusionware/npsbrowser/RecyclerTouchListener.kt b/app/src/main/java/com/illusionware/npsbrowser/RecyclerTouchListener.kt new file mode 100644 index 0000000..af68159 --- /dev/null +++ b/app/src/main/java/com/illusionware/npsbrowser/RecyclerTouchListener.kt @@ -0,0 +1,44 @@ +package com.illusionware.npsbrowser + +import android.content.Context +import android.view.GestureDetector +import android.view.GestureDetector.SimpleOnGestureListener +import android.view.MotionEvent +import android.view.View +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView.OnItemTouchListener + +class RecyclerTouchListener(context: Context?, recyclerView: RecyclerView, + private val clickListener: ClickListener?) : OnItemTouchListener { + interface ClickListener { + fun onClick(view: View?, position: Int) + fun onLongClick(view: View?, recyclerView: RecyclerView?, position: Int) + } + + private val gestureDetector: GestureDetector + override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean { + val child = rv.findChildViewUnder(e.x, e.y) + if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) { + clickListener.onClick(child, rv.getChildAdapterPosition(child)) + } + return false + } + + override fun onTouchEvent(rv: RecyclerView, e: MotionEvent) {} + override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) {} + + init { + gestureDetector = GestureDetector(context, object : SimpleOnGestureListener() { + override fun onSingleTapUp(e: MotionEvent): Boolean { + return true + } + + override fun onLongPress(e: MotionEvent) { + val child = recyclerView.findChildViewUnder(e.x, e.y) + if (child != null && clickListener != null) { + clickListener.onLongClick(child, recyclerView, recyclerView.getChildAdapterPosition(child)) + } + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/illusionware/npsbrowser/activities/AppsListActivity.kt b/app/src/main/java/com/illusionware/npsbrowser/activities/AppsListActivity.kt index 2e6b292..2d83943 100644 --- a/app/src/main/java/com/illusionware/npsbrowser/activities/AppsListActivity.kt +++ b/app/src/main/java/com/illusionware/npsbrowser/activities/AppsListActivity.kt @@ -5,7 +5,6 @@ import android.os.Bundle import android.view.View import android.widget.Toast import androidx.appcompat.app.AppCompatActivity -import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.illusionware.npsbrowser.AppData @@ -31,6 +30,20 @@ class AppsListActivity : AppCompatActivity() { recyclerView.apply { layoutManager = LinearLayoutManager(applicationContext) adapter = viewAdapter + + recyclerView.addOnItemTouchListener(RecyclerTouchListener(applicationContext, recyclerView, object : RecyclerTouchListener.ClickListener { + override fun onClick(view: View?, position: Int) { + val myIntent = Intent(context, SingleAppActivity::class.java) + SingleAppActivity.app = apps[position] + + startActivity(myIntent) + } + + override fun onLongClick(view: View?, recyclerView: RecyclerView?, position: Int) { + Toast.makeText(applicationContext, "TODO: Long Click ", Toast.LENGTH_SHORT).show() + } + } + )) } } } \ No newline at end of file diff --git a/app/src/main/java/com/illusionware/npsbrowser/activities/SingleAppActivity.kt b/app/src/main/java/com/illusionware/npsbrowser/activities/SingleAppActivity.kt new file mode 100644 index 0000000..bf1414a --- /dev/null +++ b/app/src/main/java/com/illusionware/npsbrowser/activities/SingleAppActivity.kt @@ -0,0 +1,20 @@ +package com.illusionware.npsbrowser.activities + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import com.illusionware.npsbrowser.AppData +import com.illusionware.npsbrowser.databinding.ActivitySingleGameBinding + +class SingleAppActivity: AppCompatActivity() { + companion object { + lateinit var app : AppData + } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val binding = ActivitySingleGameBinding.inflate(layoutInflater); + setContentView(binding.root) + + binding.titleID.text = app.TitleID + binding.gameTitle.text = app.Title; + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_single_app.xml b/app/src/main/res/layout/activity_single_app.xml new file mode 100644 index 0000000..4fb40ff --- /dev/null +++ b/app/src/main/res/layout/activity_single_app.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + \ No newline at end of file