diff --git a/summer_coding_android/app/src/main/AndroidManifest.xml b/summer_coding_android/app/src/main/AndroidManifest.xml
index 46b301c..ef3fc38 100644
--- a/summer_coding_android/app/src/main/AndroidManifest.xml
+++ b/summer_coding_android/app/src/main/AndroidManifest.xml
@@ -9,6 +9,12 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.SummerCodingAndroid">
+
+
diff --git a/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/Gok59592Activity.kt b/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/Gok59592Activity.kt
new file mode 100644
index 0000000..b0fa01a
--- /dev/null
+++ b/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/Gok59592Activity.kt
@@ -0,0 +1,53 @@
+package kr.co.landvibe.summer_coding_android.gok5959
+
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.util.Log
+import androidx.recyclerview.widget.ItemTouchHelper
+import kr.co.landvibe.summer_coding_android.R
+import kr.co.landvibe.summer_coding_android.databinding.ActivityGok59592Binding
+import kr.co.landvibe.summer_coding_android.gok5959.adapters.LocationAdapter
+import kr.co.landvibe.summer_coding_android.gok5959.data.Location
+import kr.co.landvibe.summer_coding_android.gok5959.data.locationItem
+import kr.co.landvibe.summer_coding_android.gok5959.itemTouch.ItemTouchHelperCallback
+
+class Gok59592Activity : AppCompatActivity() {
+
+ private lateinit var text:String
+ private lateinit var binding:ActivityGok59592Binding
+
+ val location: MutableList = mutableListOf(
+ Location("인하대학교 후문", 1),
+ Location("캐리비안베이", 2),
+ Location("파라다이스 시티", 3),
+ Location("BBQ치킨 인하대후문점", 4),
+ Location("인천국제공항 제1여객터미널", 5),
+ Location("부평역", 6),
+ Location("성원상떼빌아파트", 7),
+ Location("광안대교", 8),
+ Location("김해국제공항", 9),
+ Location("CU 영주 적십자병원점", 10),
+ Location("미진프라자", 11),
+ Location("강남역 1번출구", 12)
+
+
+ )
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = ActivityGok59592Binding.inflate(layoutInflater)
+ setContentView(binding.root)
+
+ val adapter = LocationAdapter(location)
+ binding.locationRV.adapter = adapter
+
+ val itemTouchHelperCallback = ItemTouchHelperCallback(adapter)
+
+ val helper = ItemTouchHelper(itemTouchHelperCallback)
+ helper.attachToRecyclerView(binding.locationRV)
+ adapter.addFooterAndSubmitList(location)
+ }
+
+
+
+}
\ No newline at end of file
diff --git a/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/Gok5959Activity.kt b/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/Gok5959Activity.kt
index e3f6511..02dbb6d 100644
--- a/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/Gok5959Activity.kt
+++ b/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/Gok5959Activity.kt
@@ -1,12 +1,43 @@
package kr.co.landvibe.summer_coding_android.gok5959
+import android.content.ContentValues.TAG
+import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
+import android.util.Log
+import androidx.activity.result.ActivityResultLauncher
+import androidx.activity.result.contract.ActivityResultContracts
import kr.co.landvibe.summer_coding_android.R
+import kr.co.landvibe.summer_coding_android.databinding.ActivityGok5959Binding
class Gok5959Activity : AppCompatActivity() {
+ private lateinit var binding: ActivityGok5959Binding
+ private lateinit var activityResultLauncher: ActivityResultLauncher
+ private val TAG:String = "MainActivity"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_gok5959)
+ binding = ActivityGok5959Binding.inflate(layoutInflater)
+ setContentView(binding.root)
+ Log.d(TAG, "init")
+ initView()
+ Log.d(TAG, "init2")
+ }
+
+ fun initView() {
+ binding.run {
+ activityResultLauncher =
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+ when (result.resultCode) {
+ 1000 -> {
+ nameTV.text = result.data?.getStringExtra("inputText")
+ }
+ }
+ }
+ }
+
+ binding.nameBTN.setOnClickListener {
+ val intent = Intent(this@Gok5959Activity, Gok59592Activity::class.java)
+ activityResultLauncher.launch(intent)
+ }
}
}
\ No newline at end of file
diff --git a/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/Gok5959LocationinformationActivity.kt b/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/Gok5959LocationinformationActivity.kt
new file mode 100644
index 0000000..e2d745e
--- /dev/null
+++ b/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/Gok5959LocationinformationActivity.kt
@@ -0,0 +1,23 @@
+package kr.co.landvibe.summer_coding_android.gok5959
+
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import kr.co.landvibe.summer_coding_android.R
+import kr.co.landvibe.summer_coding_android.databinding.ActivityGok5959LocationinformationBinding
+
+class Gok5959LocationinformationActivity : AppCompatActivity() {
+ lateinit var binding:ActivityGok5959LocationinformationBinding
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = ActivityGok5959LocationinformationBinding.inflate(layoutInflater)
+ init()
+ setContentView(binding.root)
+ }
+
+ fun init(){
+ binding.locationTV.text = intent.getStringExtra("locationName")
+ binding.backBTN.setOnClickListener {
+ finish()
+ }
+ }
+}
\ No newline at end of file
diff --git a/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/adapters/LocationAdapter.kt b/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/adapters/LocationAdapter.kt
new file mode 100644
index 0000000..f53812f
--- /dev/null
+++ b/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/adapters/LocationAdapter.kt
@@ -0,0 +1,121 @@
+package kr.co.landvibe.summer_coding_android.gok5959.adapters
+
+import android.content.Intent
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import android.widget.Toast
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.DiffUtil
+import androidx.recyclerview.widget.ListAdapter
+import androidx.recyclerview.widget.RecyclerView
+import kr.co.landvibe.summer_coding_android.databinding.FooterGok5959Binding
+import kr.co.landvibe.summer_coding_android.databinding.ItemViewGok5959Binding
+import kr.co.landvibe.summer_coding_android.gok5959.Gok5959LocationinformationActivity
+import kr.co.landvibe.summer_coding_android.gok5959.data.Location
+import kr.co.landvibe.summer_coding_android.gok5959.data.locationItem
+import kr.co.landvibe.summer_coding_android.gok5959.itemTouch.ItemTouchHelperListener
+import kr.co.landvibe.summer_coding_android.gok5959.util.DiffUtilCallback
+
+class LocationAdapter(private val locationList: MutableList) :
+ ListAdapter(DiffUtilCallback()),
+ ItemTouchHelperListener {
+ lateinit var LocationAdded: String
+ val HEADER = 0
+ val ITEM = 1
+ val FOOTER = 2
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
+
+ return when (viewType) {
+ ITEM -> LocationViewHolder(ItemViewGok5959Binding.inflate(LayoutInflater.from(
+ parent.context),
+ parent,
+ false))
+ FOOTER -> FooterViewHolder(FooterGok5959Binding.inflate(LayoutInflater.from(
+ parent.context),
+ parent,
+ false))
+ else -> {
+ throw ClassCastException("error")
+ }
+ }
+
+ }
+
+ override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
+ when (holder) {
+ is FooterViewHolder -> {
+ holder.binding.addBTN.setOnClickListener {
+ LocationAdded = holder.binding.addET.text.toString()
+ if (LocationAdded.equals("")) {
+ Toast.makeText(it.context, "입력하세요", Toast.LENGTH_SHORT).show()
+ } else {
+ addLocation()
+ }
+ }
+ }
+ is LocationViewHolder -> {
+ val item = getItem(position) as locationItem.Item
+ holder.bind(item)
+ holder.binding.locationCTRL.setOnClickListener {
+ val tmp : String = holder.binding.locationTV.text.toString()
+ val intent = Intent(holder.binding.locationCTRL?.context,
+ Gok5959LocationinformationActivity::class.java)
+ intent.putExtra("locationName", tmp)
+ ContextCompat.startActivity(holder.binding.locationCTRL.context, intent, null)
+ }
+ }
+ }
+ }
+
+ override fun getItemViewType(position: Int): Int {
+ return when (getItem(position)) {
+ is locationItem.Footer -> FOOTER
+ is locationItem.Item -> ITEM
+ else -> 0
+ }
+ }
+
+
+ class FooterViewHolder(val binding: FooterGok5959Binding) :
+ RecyclerView.ViewHolder(binding.root) {
+
+ }
+
+ class LocationViewHolder(val binding: ItemViewGok5959Binding) :
+ RecyclerView.ViewHolder(binding.root) {
+
+ fun bind(item: locationItem.Item) { //
+ binding.locationTV.text = item.name
+ }
+ }
+
+ fun addLocation() {
+ val newLocation = Location(LocationAdded, locationList.size + 1.toLong())
+ locationList.add(newLocation)
+ addFooterAndSubmitList(locationList)
+ }
+
+ override fun onItemMove(from_position: Int, to_position: Int): Boolean {
+ val item = locationList[from_position]
+
+ locationList.removeAt(from_position)
+ locationList.add(to_position, item)
+ addFooterAndSubmitList(locationList)
+ return true;
+ }
+
+ override fun onItemSwipe(position: Int) {
+ TODO("Not yet implemented")
+ }
+
+ fun addFooterAndSubmitList(list: MutableList?) {
+ val items = when (list.isNullOrEmpty()) {
+ true -> listOf(locationItem.Footer)
+ false -> list.map { locationItem.Item(it) } + listOf(locationItem.Footer)
+ }
+ submitList(items)
+ }
+}
+
diff --git a/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/data/Location.kt b/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/data/Location.kt
new file mode 100644
index 0000000..4e92f87
--- /dev/null
+++ b/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/data/Location.kt
@@ -0,0 +1,6 @@
+package kr.co.landvibe.summer_coding_android.gok5959.data
+
+data class Location(
+ var name: String,
+ var id: Long
+)
diff --git a/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/data/locationItem.kt b/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/data/locationItem.kt
new file mode 100644
index 0000000..70c6a9d
--- /dev/null
+++ b/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/data/locationItem.kt
@@ -0,0 +1,16 @@
+package kr.co.landvibe.summer_coding_android.gok5959.data
+
+sealed class locationItem{
+ abstract var id: Long
+ abstract var name: String
+ data class Item(val location: Location) : locationItem() {
+ override var id = location.id
+ override var name = location.name
+
+ }
+ object Footer : locationItem(){
+ override var id = Long.MAX_VALUE
+ override var name = ""
+ }
+}
+
diff --git a/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/itemTouch/ItemTouchHelperCallback.kt b/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/itemTouch/ItemTouchHelperCallback.kt
new file mode 100644
index 0000000..a4e3bb6
--- /dev/null
+++ b/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/itemTouch/ItemTouchHelperCallback.kt
@@ -0,0 +1,32 @@
+package kr.co.landvibe.summer_coding_android.gok5959.itemTouch
+
+import androidx.recyclerview.widget.ItemTouchHelper
+import androidx.recyclerview.widget.RecyclerView
+
+class ItemTouchHelperCallback(val listener: ItemTouchHelperListener)
+ : ItemTouchHelper.Callback()
+{
+
+ override fun getMovementFlags(
+ recyclerView: RecyclerView,
+ viewHolder: RecyclerView.ViewHolder,
+ ): Int {
+ val dragFlags = ItemTouchHelper.UP or ItemTouchHelper.DOWN
+ val swipeFlags = ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT
+ return makeMovementFlags(dragFlags, 0)
+ }
+
+ override fun onMove(
+ recyclerView: RecyclerView,
+ viewHolder: RecyclerView.ViewHolder,
+ target: RecyclerView.ViewHolder,
+ ): Boolean {
+ return listener.onItemMove(viewHolder.adapterPosition, target.adapterPosition)
+ }
+
+ override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
+ listener.onItemSwipe(viewHolder.adapterPosition)
+ }
+
+
+}
\ No newline at end of file
diff --git a/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/itemTouch/ItemTouchHelperListener.kt b/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/itemTouch/ItemTouchHelperListener.kt
new file mode 100644
index 0000000..d1eaed0
--- /dev/null
+++ b/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/itemTouch/ItemTouchHelperListener.kt
@@ -0,0 +1,6 @@
+package kr.co.landvibe.summer_coding_android.gok5959.itemTouch
+
+interface ItemTouchHelperListener {
+ fun onItemMove(from_position : Int, to_position: Int): Boolean
+ fun onItemSwipe(position: Int)
+}
\ No newline at end of file
diff --git a/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/util/DiffUtilCallback.kt b/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/util/DiffUtilCallback.kt
new file mode 100644
index 0000000..50b9140
--- /dev/null
+++ b/summer_coding_android/app/src/main/java/kr/co/landvibe/summer_coding_android/gok5959/util/DiffUtilCallback.kt
@@ -0,0 +1,18 @@
+package kr.co.landvibe.summer_coding_android.gok5959.util
+
+import androidx.recyclerview.widget.DiffUtil
+import kr.co.landvibe.summer_coding_android.gok5959.data.Location
+import kr.co.landvibe.summer_coding_android.gok5959.data.locationItem
+
+class DiffUtilCallback : DiffUtil.ItemCallback(){
+
+
+ override fun areItemsTheSame(oldItem: locationItem, newItem: locationItem): Boolean {
+ return oldItem.id == newItem.id
+ }
+
+ override fun areContentsTheSame(oldItem: locationItem, newItem: locationItem): Boolean {
+ return oldItem == newItem
+ }
+
+}
\ No newline at end of file
diff --git a/summer_coding_android/app/src/main/res/drawable/edge_gok5959.xml b/summer_coding_android/app/src/main/res/drawable/edge_gok5959.xml
new file mode 100644
index 0000000..8781c13
--- /dev/null
+++ b/summer_coding_android/app/src/main/res/drawable/edge_gok5959.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/summer_coding_android/app/src/main/res/drawable/mapping.png b/summer_coding_android/app/src/main/res/drawable/mapping.png
new file mode 100644
index 0000000..0144b47
Binary files /dev/null and b/summer_coding_android/app/src/main/res/drawable/mapping.png differ
diff --git a/summer_coding_android/app/src/main/res/drawable/xbutton.png b/summer_coding_android/app/src/main/res/drawable/xbutton.png
new file mode 100644
index 0000000..e538f9d
Binary files /dev/null and b/summer_coding_android/app/src/main/res/drawable/xbutton.png differ
diff --git a/summer_coding_android/app/src/main/res/layout/activity_gok5959.xml b/summer_coding_android/app/src/main/res/layout/activity_gok5959.xml
index 4d9ce04..b1079f8 100644
--- a/summer_coding_android/app/src/main/res/layout/activity_gok5959.xml
+++ b/summer_coding_android/app/src/main/res/layout/activity_gok5959.xml
@@ -13,12 +13,33 @@
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:text="@string/gcooter"
- android:textColor="@color/green"
+
+ android:textColor="@color/green_gok"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+
+
+
+
+
+
+ android:background="@color/blue_gok">
+
@@ -195,7 +218,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
- android:backgroundTint="@color/blue"
+ android:backgroundTint="@color/blue_gok"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/thirdCL">
diff --git a/summer_coding_android/app/src/main/res/layout/activity_gok59592.xml b/summer_coding_android/app/src/main/res/layout/activity_gok59592.xml
new file mode 100644
index 0000000..269e4f3
--- /dev/null
+++ b/summer_coding_android/app/src/main/res/layout/activity_gok59592.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/summer_coding_android/app/src/main/res/layout/activity_gok5959_locationinformation.xml b/summer_coding_android/app/src/main/res/layout/activity_gok5959_locationinformation.xml
new file mode 100644
index 0000000..498e9ea
--- /dev/null
+++ b/summer_coding_android/app/src/main/res/layout/activity_gok5959_locationinformation.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/summer_coding_android/app/src/main/res/layout/footer_gok5959.xml b/summer_coding_android/app/src/main/res/layout/footer_gok5959.xml
new file mode 100644
index 0000000..38a8cef
--- /dev/null
+++ b/summer_coding_android/app/src/main/res/layout/footer_gok5959.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/summer_coding_android/app/src/main/res/layout/item_view_gok5959.xml b/summer_coding_android/app/src/main/res/layout/item_view_gok5959.xml
new file mode 100644
index 0000000..b7fe2b3
--- /dev/null
+++ b/summer_coding_android/app/src/main/res/layout/item_view_gok5959.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/summer_coding_android/app/src/main/res/values/colors.xml b/summer_coding_android/app/src/main/res/values/colors.xml
index 0d9bb02..d61125e 100644
--- a/summer_coding_android/app/src/main/res/values/colors.xml
+++ b/summer_coding_android/app/src/main/res/values/colors.xml
@@ -15,8 +15,8 @@
#252A3F
#8f949f
- #FF008000
- #DFE5F4
- #EDEFF1
+ #FF008000
+ #DFE5F4
+ #EDEFF1
\ No newline at end of file