diff --git a/app/build.gradle b/app/build.gradle
index 2e828e1..39c446a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,17 +20,32 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
+ dataBinding {
+ enabled = true
+ }
}
dependencies {
- implementation fileTree(include: ['*.jar'], dir: 'libs')
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+
+ implementation "android.arch.lifecycle:extensions:1.1.1"
+ annotationProcessor "android.arch.lifecycle:compiler:1.1.1"
+
+ implementation 'com.squareup.retrofit2:retrofit:2.3.0'
+ implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
+ implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
+ implementation 'io.reactivex.rxjava2:rxjava:2.1.6'
+ implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
+
+ kapt "com.android.databinding:compiler:3.0.1"
+ implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.10'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index bbaa63b..090dbcf 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,35 +1,76 @@
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/mashup/loling/Adapter/AuthorListItemAdapter.kt b/app/src/main/java/mashup/loling/Adapter/AuthorListItemAdapter.kt
new file mode 100644
index 0000000..5629b29
--- /dev/null
+++ b/app/src/main/java/mashup/loling/Adapter/AuthorListItemAdapter.kt
@@ -0,0 +1,36 @@
+package mashup.loling.Adapter
+
+import android.support.v7.widget.RecyclerView
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import kotlinx.android.synthetic.main.item_author_list.view.*
+import mashup.loling.R
+import mashup.loling.model.Paper
+
+
+class AuthorListItemAdapter(var items : ArrayList) : RecyclerView
+.Adapter(){
+
+ class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ var authorListItemName : TextView = itemView.tvAuthorListItemName
+ var authorListItemTime : TextView = itemView.tvAuthorListItemDate
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, p1: Int): ViewHolder {
+ val view = LayoutInflater.from(parent.context)
+ .inflate(R.layout.item_author_list, parent, false)
+ return ViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return items.size
+ }
+
+ override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
+ val item = items[position]
+ viewHolder.authorListItemName.text = item.name
+ viewHolder.authorListItemTime.text = item.createdAt.toString()+ item.dueDay.toString()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/mashup/loling/Adapter/CreateRoomPagerAdapter.kt b/app/src/main/java/mashup/loling/Adapter/CreateRoomPagerAdapter.kt
new file mode 100644
index 0000000..7fb378c
--- /dev/null
+++ b/app/src/main/java/mashup/loling/Adapter/CreateRoomPagerAdapter.kt
@@ -0,0 +1,82 @@
+package mashup.loling.Adapter
+
+import android.content.Context
+import android.support.v4.view.PagerAdapter
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import kotlinx.android.synthetic.main.layout_create_room_calendar.view.*
+import kotlinx.android.synthetic.main.layout_create_room_main.view.*
+import kotlinx.android.synthetic.main.layout_create_room_new_or_enter.view.*
+import mashup.loling.R
+import mashup.loling.room.view.CreateRoomActivity
+import java.util.*
+
+class CreateRoomPagerAdapter(val context: Context,
+ val createRoomMethods : CreateRoomActivity.Companion
+ .ICreateRoomMethods, val name : String)
+ : PagerAdapter() {
+
+ companion object {
+ val PAGE_CALENDAR = 0
+ val PAGE_MAIN = 1
+ val PAGE_EXISTED_CHK = 2
+ val PAGE_EXISTED_LOLING_LIST = 3
+ }
+
+ override fun isViewFromObject(p0: View, p1: Any): Boolean {
+ return p0 == p1
+ }
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ lateinit var view: ViewGroup
+ val inflater = LayoutInflater.from(context)
+ when(position) {
+ PAGE_CALENDAR -> {
+ view = inflater.inflate(R.layout.layout_create_room_calendar, container, false) as ViewGroup
+ view.btnOkay.setOnClickListener {
+ val selDate = Date()
+ selDate.year = view.calSelectDate.year - 1900
+ selDate.month = view.calSelectDate.month
+ selDate.date = view.calSelectDate.dayOfMonth
+ createRoomMethods.onDateSelectedFromCal(selDate)
+ }
+ view.btnCancel.setOnClickListener { createRoomMethods.onCancelFromCal() }
+ }
+
+ PAGE_EXISTED_CHK -> {
+ view = inflater.inflate(R.layout.layout_create_room_new_or_enter, container, false) as ViewGroup
+ view.btnCreateNewLoling.setOnClickListener { createRoomMethods.onCreateNewLolingClicked() }
+ view.btnJoinExistedLoling.setOnClickListener { createRoomMethods.onJoinExitedLolingClicked() }
+ }
+
+ PAGE_EXISTED_LOLING_LIST -> {
+ view = inflater.inflate(R.layout.layout_create_room_existed_loling_list, container, false) as ViewGroup
+
+ }
+ else-> { //PAGE_MAIN
+ view = inflater.inflate(R.layout.layout_create_room_main, container, false) as ViewGroup
+ view.tvRoomDate.setOnClickListener { createRoomMethods.onSelectRoomTextClicked() }
+ view.btnCreateLoling.setOnClickListener { createRoomMethods.onCreateLolingButtonClicked() }
+ view.tvNameAndText.text = String.format(
+ context.getString(R.string.create_room_ps_type_the_anniversary_date), name)
+
+ }
+ }
+
+ container.addView(view)
+ container.setTag(container.hashCode() + position, view)
+ return view
+ }
+
+
+
+ override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
+ container.removeView(`object` as View)
+ }
+
+ override fun getCount(): Int {
+ return 4 //only 4 items
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/mashup/loling/Adapter/FriendItemAdapter.kt b/app/src/main/java/mashup/loling/Adapter/FriendItemAdapter.kt
index 811769c..0f46dfd 100644
--- a/app/src/main/java/mashup/loling/Adapter/FriendItemAdapter.kt
+++ b/app/src/main/java/mashup/loling/Adapter/FriendItemAdapter.kt
@@ -1,15 +1,19 @@
package mashup.loling.Adapter
+import android.content.Context
+import android.content.Intent
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import kotlinx.android.synthetic.main.item_friend_day_list.view.*
-import mashup.loling.model.FriendItem
import mashup.loling.R
+import mashup.loling.model.ERoom
+import mashup.loling.room.view.CreateRoomActivity
-class FriendItemAdapter(var items : ArrayList) : RecyclerView.Adapter(){
+class FriendItemAdapter(val context : Context ,var items : ArrayList) : RecyclerView
+.Adapter(){
public class ViewHolder : RecyclerView.ViewHolder{
constructor(itemView: View) : super(itemView)
@@ -17,6 +21,7 @@ class FriendItemAdapter(var items : ArrayList) : RecyclerView.Adapte
var friendItemName : TextView = itemView.tvFriendItemName
var friendItemBday : TextView = itemView.tvFriendItemBday
var friendItemDday : TextView = itemView.tvFriendItemDday
+ var friendItemBtn = itemView.btnFriendItem
}
@@ -32,8 +37,16 @@ class FriendItemAdapter(var items : ArrayList) : RecyclerView.Adapte
override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
val item = items[position]
- viewHolder.friendItemName.text = item.friendItemName
- viewHolder.friendItemBday.text = item.friendItemBday
- viewHolder.friendItemDday.text = item.friendItemDday
+ viewHolder.friendItemName.text = item.name
+ viewHolder.friendItemBday.text = item.date
+ viewHolder.friendItemDday.text = "D-" + item.Dday
+
+ viewHolder.friendItemBtn.setOnClickListener {
+ val intent = Intent(context, CreateRoomActivity::class.java)
+ intent.putExtra("name",item.name)
+ intent.putExtra("phoneNum",item.phone)
+ context.startActivity(intent)
+ }
+
}
}
\ No newline at end of file
diff --git a/app/src/main/java/mashup/loling/Adapter/LolingItemAdapter.kt b/app/src/main/java/mashup/loling/Adapter/LolingItemAdapter.kt
index 2055f95..ee435dc 100644
--- a/app/src/main/java/mashup/loling/Adapter/LolingItemAdapter.kt
+++ b/app/src/main/java/mashup/loling/Adapter/LolingItemAdapter.kt
@@ -1,10 +1,19 @@
package mashup.loling.Adapter
+import android.content.Context
+import android.graphics.Color
+import android.graphics.drawable.ColorDrawable
+import android.support.v7.app.AlertDialog
import android.support.v7.widget.RecyclerView
+import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.ImageButton
import android.widget.TextView
+import android.widget.Toast
+import kotlinx.android.synthetic.main.activity_select_friend.view.*
+import kotlinx.android.synthetic.main.dialog_delete_list.view.*
import kotlinx.android.synthetic.main.item_loling_list.view.*
import mashup.loling.model.FriendItem
import mashup.loling.R
@@ -12,18 +21,21 @@ import mashup.loling.R
class LolingItemAdapter(var items : ArrayList) : RecyclerView.Adapter(){
- public class ViewHolder : RecyclerView.ViewHolder{
+ var papa : ViewGroup? = null
+ class ViewHolder : RecyclerView.ViewHolder{
constructor(itemView: View) : super(itemView)
var friendItemName : TextView = itemView.tvLolingItem
var friendItemBday : TextView = itemView.tvLolingItemBday
var friendItemDday : TextView = itemView.tvLolingItemDday
+ var btnDelete: ImageButton = itemView.btnLolingDelete
}
override fun onCreateViewHolder(parent: ViewGroup, p1: Int): ViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_loling_list, parent, false)
+ papa=parent
return ViewHolder(view)
}
@@ -36,5 +48,18 @@ class LolingItemAdapter(var items : ArrayList) : RecyclerView.Adapte
viewHolder.friendItemName.text = item.friendItemName
viewHolder.friendItemBday.text = item.friendItemBday
viewHolder.friendItemDday.text = item.friendItemDday
+
+ viewHolder.btnDelete.setOnClickListener { v ->
+ var builder = AlertDialog.Builder(v!!.context)
+ var mView = LayoutInflater.from(v.context)
+ .inflate(R.layout.dialog_delete_list, papa, false)
+ builder.setView(mView)
+ var dialog = builder.create()
+ dialog.window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
+ dialog.show()
+
+ }
+
}
+
}
\ No newline at end of file
diff --git a/app/src/main/java/mashup/loling/Adapter/SelectFriendAddressItemAdapter.kt b/app/src/main/java/mashup/loling/Adapter/SelectFriendAddressItemAdapter.kt
new file mode 100644
index 0000000..0d0d9ee
--- /dev/null
+++ b/app/src/main/java/mashup/loling/Adapter/SelectFriendAddressItemAdapter.kt
@@ -0,0 +1,49 @@
+package mashup.loling.Adapter
+
+import android.content.Context
+import android.content.Intent
+import android.support.v7.widget.RecyclerView
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import kotlinx.android.synthetic.main.selectfriend_item_address_list.view.*
+import mashup.loling.model.FriendItem
+import mashup.loling.R
+import mashup.loling.room.view.CreateRoomActivity
+
+class SelectFriendAddressItemAdapter(val context: Context, var items : ArrayList) :
+RecyclerView.Adapter(){
+
+ class ViewHolder : RecyclerView.ViewHolder{
+ constructor(itemView: View) : super(itemView)
+
+ var addressItemName : TextView = itemView.tvSelectAddressName
+ var addressItemPnum : TextView = itemView.tvSelectFriendAddressPnum
+ var addressItemLayout = itemView.itemSelectAddress
+
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, p1: Int): ViewHolder {
+ val view = LayoutInflater.from(parent.context)
+ .inflate(R.layout.selectfriend_item_address_list, parent, false)
+ return ViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return items.size
+ }
+
+ override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
+ val item = items[position]
+ viewHolder.addressItemName.text = item.friendItemName
+ viewHolder.addressItemPnum.text = item.friendItemPnum
+ viewHolder.addressItemLayout.setOnClickListener {
+ val intent = Intent(context,CreateRoomActivity::class.java)
+ intent.putExtra("phoneNum",item.friendItemPnum)
+ intent.putExtra("name",item.friendItemName)
+ context.startActivity(intent)
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/mashup/loling/Adapter/SelectFriendItemAdapter.kt b/app/src/main/java/mashup/loling/Adapter/SelectFriendItemAdapter.kt
new file mode 100644
index 0000000..d4475dd
--- /dev/null
+++ b/app/src/main/java/mashup/loling/Adapter/SelectFriendItemAdapter.kt
@@ -0,0 +1,43 @@
+package mashup.loling.Adapter
+
+import android.support.v7.widget.RecyclerView
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import mashup.loling.model.FriendItem
+import mashup.loling.R
+
+class SelectFriendItemAdapter(var items : ArrayList) : RecyclerView.Adapter(){
+
+ class ViewHolder : RecyclerView.ViewHolder{
+ constructor(itemView: View) : super(itemView)
+
+ var friendItemName : TextView
+ var friendItemBday : TextView
+
+ init {
+ friendItemName = itemView.findViewById(R.id.tvSelectFriendItemName) as TextView
+ friendItemBday = itemView.findViewById(R.id.tvSelectFriendItemBday) as TextView
+ }
+
+ }
+
+
+
+ override fun onCreateViewHolder(parent: ViewGroup, p1: Int): ViewHolder {
+ val view = LayoutInflater.from(parent.context)
+ .inflate(R.layout.selectfriend_item_friend_list, parent, false)
+ return ViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return items.size
+ }
+
+ override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
+ val item = items[position]
+ viewHolder.friendItemName.text = item.friendItemName
+ viewHolder.friendItemBday.text = item.friendItemBday
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/mashup/loling/BaseActivity.kt b/app/src/main/java/mashup/loling/BaseActivity.kt
new file mode 100644
index 0000000..38d6217
--- /dev/null
+++ b/app/src/main/java/mashup/loling/BaseActivity.kt
@@ -0,0 +1,26 @@
+package mashup.loling
+
+import android.graphics.Color
+import android.os.Build
+import android.os.Bundle
+import android.support.v7.app.AppCompatActivity
+import android.view.View
+
+
+open class BaseActivity : AppCompatActivity() {
+
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ val view = window.decorView
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ view.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
+ window.statusBarColor = Color.WHITE
+ } else if (Build.VERSION.SDK_INT >= 21) {
+ // 21 버전 이상일 때
+ window.statusBarColor = Color.GRAY
+ }
+ }
+}
diff --git a/app/src/main/java/mashup/loling/DataBindingBaseActivity.kt b/app/src/main/java/mashup/loling/DataBindingBaseActivity.kt
new file mode 100644
index 0000000..46af248
--- /dev/null
+++ b/app/src/main/java/mashup/loling/DataBindingBaseActivity.kt
@@ -0,0 +1,18 @@
+package mashup.loling.user.view
+
+
+import android.databinding.DataBindingUtil
+import android.databinding.ViewDataBinding
+import android.os.Bundle
+import mashup.loling.BaseActivity
+
+abstract class DataBindingBaseActivity: BaseActivity(){
+ lateinit var viewDataBinding: T
+ abstract val layoutResourceId: Int
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ viewDataBinding = DataBindingUtil.setContentView(this, layoutResourceId)
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/mashup/loling/Fragment/FriendListFragment.kt b/app/src/main/java/mashup/loling/Fragment/FriendListFragment.kt
deleted file mode 100644
index f39a645..0000000
--- a/app/src/main/java/mashup/loling/Fragment/FriendListFragment.kt
+++ /dev/null
@@ -1,38 +0,0 @@
-package mashup.loling.Fragment
-
-import android.os.Bundle
-import android.support.v4.app.Fragment
-import android.support.v7.widget.LinearLayoutManager
-import android.support.v7.widget.RecyclerView
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import mashup.loling.Adapter.FriendItemAdapter
-import mashup.loling.model.FriendItem
-import mashup.loling.R
-
-class FriendListFragment : Fragment {
- constructor() : super()
- val friends: ArrayList = ArrayList()
-
- override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
- val root = inflater.inflate(R.layout.recyclerview, container, false)
-
- val recyclerView = root.findViewById(R.id.recyclerView)
- if(recyclerView != null) {
- recyclerView.layoutManager = LinearLayoutManager(context)//this.context/getContext()
- makeFriendList()
- recyclerView.adapter = FriendItemAdapter(friends)
- }
-
- return root
-
- }
-
- fun makeFriendList(){//친구목록 가져와 처리
- for (i in 0..9){
- friends.add(FriendItem("유채원" + i, "D-10" + i, "1996.03.22"))
- }
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/mashup/loling/Fragment/WrittenListFragment.kt b/app/src/main/java/mashup/loling/Fragment/WrittenListFragment.kt
deleted file mode 100644
index 4645dd7..0000000
--- a/app/src/main/java/mashup/loling/Fragment/WrittenListFragment.kt
+++ /dev/null
@@ -1,36 +0,0 @@
-package mashup.loling.Fragment
-
-import android.os.Bundle
-import android.support.v4.app.Fragment
-import android.support.v7.widget.LinearLayoutManager
-import android.support.v7.widget.RecyclerView
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import mashup.loling.Adapter.LolingItemAdapter
-import mashup.loling.model.FriendItem
-import mashup.loling.R
-
-class WrittenListFragment : Fragment {
- constructor() : super()
- val friends: ArrayList = ArrayList()
-
- override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
- val root = inflater.inflate(R.layout.recyclerview, container, false)
-
- val recyclerView = root.findViewById(R.id.recyclerView)
- if(recyclerView != null) {
- recyclerView.layoutManager = LinearLayoutManager(context)//this.context/getContext()
- makeFriendList()
- recyclerView.adapter = LolingItemAdapter(friends)
- }
- return root
- }
-
- fun makeFriendList(){//친구목록 가져와 처리
- for (i in 0..9){
- friends.add(FriendItem("유채원" + i, "D-10" + i, "1996.03.22"))
- }
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/mashup/loling/IntroActivity.kt b/app/src/main/java/mashup/loling/IntroActivity.kt
new file mode 100644
index 0000000..e127165
--- /dev/null
+++ b/app/src/main/java/mashup/loling/IntroActivity.kt
@@ -0,0 +1,25 @@
+package mashup.loling
+
+import android.content.Intent
+import android.os.Bundle
+import android.os.Handler
+import android.support.v7.app.AppCompatActivity
+import mashup.loling.main.MainActivity
+import mashup.loling.user.view.LoginActivityDataBinding
+
+class IntroActivity : BaseActivity(){
+ var r: Runnable = Runnable {
+ val intent = Intent(applicationContext, LoginActivityDataBinding::class.java)
+ startActivity(intent)
+
+ finish()
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_intro)
+
+ var handler: Handler = Handler()
+ handler.postDelayed(r, 3000)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/mashup/loling/LoginActivity.kt b/app/src/main/java/mashup/loling/LoginActivity.kt
deleted file mode 100644
index 58ffe0a..0000000
--- a/app/src/main/java/mashup/loling/LoginActivity.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package mashup.loling
-
-import android.support.v7.app.AppCompatActivity
-import android.os.Bundle
-
-class LoginActivity : AppCompatActivity() {
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_login)
- }
-}
diff --git a/app/src/main/java/mashup/loling/MainActivity.kt b/app/src/main/java/mashup/loling/MainActivity.kt
deleted file mode 100644
index 2e83e2f..0000000
--- a/app/src/main/java/mashup/loling/MainActivity.kt
+++ /dev/null
@@ -1,78 +0,0 @@
-package mashup.loling
-
-import android.content.Context
-import android.content.Intent
-import android.os.Bundle
-import android.support.v4.view.PagerAdapter
-import android.support.v4.view.ViewPager
-import android.support.v7.app.AppCompatActivity
-import android.view.View
-import android.view.ViewGroup
-import kotlinx.android.synthetic.main.activity_main.*
-import mashup.loling.Fragment.FriendListFragment
-
-class MainActivity : AppCompatActivity() {
-
- private var context: Context = this
- var pageNum = 10
-// var mainIndicator = pagerIndicator
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_main)
-
- val fragment = FriendListFragment()
- supportFragmentManager.beginTransaction().add(R.id.frMainFriendList, fragment).commit()
-
- val pager = pagerContainer.viewPager as ViewPager
- val adapter = MainPageAdepter()
-
- pager.adapter = adapter
-
- //필요한 경우 또는 호출기는 표시할 추가 페이지가 하나뿐입니다.
- // 최소 몇 페이지 이상 볼 수 있도록 설정
- pager.offscreenPageLimit = adapter.count
- //페이지 간의 마진
- pager.pageMargin = 20
- //If hardware acceleration is enabled, you should also remove
- // clipping on the pager for its children.
- pager.clipChildren = false
- pagerIndicator?.createDotPanel(pageNum, R.drawable.indicator_dot_off, R.drawable
- .indicator_dot_on, pager.currentItem)
- pagerContainer.setIndicator(pagerIndicator)
-
- btnMainSettingFriend.setOnClickListener {
- val intent = Intent(context,MyPageActivity()::class.java)
- startActivity(intent)
- }
- }
-
- private inner class MainPageAdepter : PagerAdapter() {
-
- override fun instantiateItem(container: ViewGroup, position: Int): Any {
- if (position == 9) {
- val view2 = layoutInflater.inflate(R.layout.item_main_loling_room_max
- , container, false)
- container.addView(view2)
- return view2
- }
- val view = layoutInflater.inflate(R.layout.item_main_loling_room, container
- , false)
- container.addView(view)
- return view
- }
-
- override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
- container.removeView(`object` as View)
- }
-
- override fun isViewFromObject(view: View, `object`: Any): Boolean {
- return view == `object`
- }
-
- override fun getCount(): Int {
- return pageNum
- }
- }
-
-}
diff --git a/app/src/main/java/mashup/loling/MyPageActivity.kt b/app/src/main/java/mashup/loling/MyPageActivity.kt
deleted file mode 100644
index 0a94f66..0000000
--- a/app/src/main/java/mashup/loling/MyPageActivity.kt
+++ /dev/null
@@ -1,73 +0,0 @@
-package mashup.loling
-
-import android.content.Intent
-import android.os.Bundle
-import android.support.design.widget.TabLayout
-import android.support.v4.app.Fragment
-import android.support.v4.app.FragmentManager
-import android.support.v4.app.FragmentStatePagerAdapter
-import android.support.v7.app.AppCompatActivity
-import kotlinx.android.synthetic.main.activity_my_page.*
-import mashup.loling.Fragment.FriendListFragment
-import mashup.loling.Fragment.ReceivedListFragment
-import mashup.loling.Fragment.WrittenListFragment
-
-class MyPageActivity : AppCompatActivity() {
- val friendFrag = FriendListFragment()
- val writtenFrag = WrittenListFragment()
- val receivedFrag = ReceivedListFragment()
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_my_page)
-
- val tabs = tabsMypage
- tabs.addTab(tabs.newTab().setText(R.string.friendList))
- tabs.addTab(tabs.newTab().setText(R.string.writtenLoling))
- tabs.addTab(tabs.newTab().setText(R.string.receiveLiling))
-
- val pager = vpMyPage
- val adapter = PagerAdapter(supportFragmentManager, tabs.tabCount)
- pager.adapter = adapter
- pager.addOnPageChangeListener(TabLayout.TabLayoutOnPageChangeListener(tabs))
-
- tabs.setOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
- override fun onTabReselected(p0: TabLayout.Tab?) {
- }
-
- override fun onTabUnselected(p0: TabLayout.Tab?) {
- }
-
- override fun onTabSelected(p0: TabLayout.Tab?) {
- pager.setCurrentItem(tabs.selectedTabPosition)
- }
- })
-
- btnMypageSetting.setOnClickListener {
- val intent = Intent(this, MyPageSettingActivity::class.java)
- startActivity(intent)
- overridePendingTransition(R.anim.anim_slide_in_left, R.anim.anim_slide_in_left)
- }
- }
-
- internal inner class PagerAdapter : FragmentStatePagerAdapter {
- var mNumOfTabs: Int
-
- constructor(fm: FragmentManager?, mNumOfTabs: Int) : super(fm) {
- this.mNumOfTabs = mNumOfTabs
- }
-
- override fun getItem(position: Int): Fragment {
- return when (position) {
- 0 -> friendFrag
- 1 -> writtenFrag
- 2 -> receivedFrag
- else -> friendFrag
- }
- }
-
- override fun getCount(): Int {
- return mNumOfTabs
- }
- }
-}
diff --git a/app/src/main/java/mashup/loling/PagerContainer.kt b/app/src/main/java/mashup/loling/PagerContainer.kt
index 4576ffc..c0657aa 100644
--- a/app/src/main/java/mashup/loling/PagerContainer.kt
+++ b/app/src/main/java/mashup/loling/PagerContainer.kt
@@ -6,7 +6,12 @@ import android.support.annotation.Px
import android.support.v4.view.ViewPager
import android.util.AttributeSet
import android.view.MotionEvent
+import android.view.View
import android.widget.FrameLayout
+import android.widget.TextView
+import kotlinx.android.synthetic.main.activity_author_list_detail.view.*
+import mashup.loling.R.id.tvAuthorListDetailPage
+import org.w3c.dom.Text
class PagerContainer : FrameLayout, ViewPager.OnPageChangeListener {
var viewPager: ViewPager? = null
@@ -64,6 +69,11 @@ class PagerContainer : FrameLayout, ViewPager.OnPageChangeListener {
override fun onPageSelected(p0: Int) {
mIndicatorView?.selectDot(p0)
+
+ val parentView = parent as View
+ parentView.tvAuthorListDetailPage?.text = (p0+1).toString()
+
+
}
override fun onPageScrolled(position: Int, p1: Float, @Px p2: Int) {}
override fun onPageScrollStateChanged(state: Int) {}
diff --git a/app/src/main/java/mashup/loling/SelectFriendActivity.kt b/app/src/main/java/mashup/loling/SelectFriendActivity.kt
deleted file mode 100644
index 9b67263..0000000
--- a/app/src/main/java/mashup/loling/SelectFriendActivity.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package mashup.loling
-
-import android.support.v7.app.AppCompatActivity
-import android.os.Bundle
-
-class SelectFriendActivity : AppCompatActivity() {
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_select_friend)
- }
-}
diff --git a/app/src/main/java/mashup/loling/SignupEntryActivity.kt b/app/src/main/java/mashup/loling/SignupEntryActivity.kt
deleted file mode 100644
index 776f359..0000000
--- a/app/src/main/java/mashup/loling/SignupEntryActivity.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package mashup.loling
-
-import android.support.v7.app.AppCompatActivity
-import android.os.Bundle
-
-class SignupEntryActivity : AppCompatActivity() {
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_signup_entry)
- }
-}
diff --git a/app/src/main/java/mashup/loling/SignupPersonalActivity.kt b/app/src/main/java/mashup/loling/SignupPersonalActivity.kt
deleted file mode 100644
index 61e2c3f..0000000
--- a/app/src/main/java/mashup/loling/SignupPersonalActivity.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package mashup.loling
-
-import android.support.v7.app.AppCompatActivity
-import android.os.Bundle
-
-class SignupPersonalActivity : AppCompatActivity() {
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_signup_personal)
-
- }
-}
diff --git a/app/src/main/java/mashup/loling/drawpaper/Component.kt b/app/src/main/java/mashup/loling/drawpaper/Component.kt
new file mode 100644
index 0000000..e536657
--- /dev/null
+++ b/app/src/main/java/mashup/loling/drawpaper/Component.kt
@@ -0,0 +1,86 @@
+package mashup.loling.drawpaper
+
+import android.graphics.drawable.Drawable
+import android.graphics.drawable.LayerDrawable
+import android.graphics.drawable.ShapeDrawable
+import android.support.v4.content.ContextCompat
+import android.util.TypedValue
+import android.view.MotionEvent
+import android.view.View
+import android.view.ViewOutlineProvider
+import android.widget.TextView
+import mashup.loling.R
+import mashup.loling.drawpaper.view.IComponentTouchListener
+
+class Component(val view: View,
+ var zIndex: Int,
+ val componentTouchedListener: IComponentTouchListener) {
+
+ var textSize = 20f
+
+ init{
+ view.setOnTouchListener { v, event ->
+ if(event.action == MotionEvent.ACTION_DOWN) {
+ componentTouchedListener.onComponentTouchedDown(this)
+ }
+
+ return@setOnTouchListener v.onTouchEvent(event)
+ }
+
+ // set outlineProvider to BOUNDS for elevation
+ view.outlineProvider = ViewOutlineProvider.BOUNDS
+
+ }
+
+ /** 현재 꾸미기 컴포넌트의 뷰를 회전한다
+ * @param deg (절대값)회전할 각도(degree). 이 각도로 회전 */
+ fun rotate(deg: Float) {
+ view.rotation = deg
+ }
+
+ /** 현재 꾸미기 컴포넌트의 뷰를 확대/축소한다
+ * @param scale (절대값)확대/축소시킬 scale값. 1.0이 기본 크기 */
+ fun scale(scale: Float) {
+ view.scaleX = scale
+ view.scaleY = scale
+ }
+
+ /**
+ * 이 꾸미기 컴포넌트가 선택됐을 때 불리는 메소드
+ */
+ fun onComponentSelected() {
+
+ }
+
+ /**
+ * 이 꾸미기 컴포넌트가 선택해제됐을 때 불리는 메소드
+ */
+ fun onComponentUnselected() {
+
+ }
+
+ fun increaseTextSizeRequest() {
+ if(textSize >= 150) return
+ if(view !is TextView) return
+ textSize += 5
+ view.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize)
+
+ }
+
+ fun decreaseTextSizeRequest() {
+ if(textSize <= 20) return
+ if(view !is TextView) return
+ textSize -= 5
+ view.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize)
+ }
+
+ fun onTextColorChangeRequest(colorInt: Int) {
+ if(view is TextView) {
+ view.setTextColor(colorInt)
+ }
+ }
+
+ fun onTextBackgroundChangeRequest(colorInt: Int) {
+ view.setBackgroundColor(colorInt)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/mashup/loling/drawpaper/DrawPaperActivity.kt b/app/src/main/java/mashup/loling/drawpaper/DrawPaperActivity.kt
deleted file mode 100644
index 494617a..0000000
--- a/app/src/main/java/mashup/loling/drawpaper/DrawPaperActivity.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package mashup.loling.drawpaper
-
-import android.support.v7.app.AppCompatActivity
-import android.os.Bundle
-import mashup.loling.R
-
-class DrawPaperActivity : AppCompatActivity() {
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_draw_paper)
- }
-}
diff --git a/app/src/main/java/mashup/loling/drawpaper/LoadImageActivity.kt b/app/src/main/java/mashup/loling/drawpaper/LoadImageActivity.kt
deleted file mode 100644
index 7031c10..0000000
--- a/app/src/main/java/mashup/loling/drawpaper/LoadImageActivity.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package mashup.loling.drawpaper
-
-import android.support.v7.app.AppCompatActivity
-import android.os.Bundle
-import mashup.loling.R
-
-class LoadImageActivity : AppCompatActivity() {
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_load_image)
- }
-}
diff --git a/app/src/main/java/mashup/loling/drawpaper/view/DrawPaperActivity.kt b/app/src/main/java/mashup/loling/drawpaper/view/DrawPaperActivity.kt
new file mode 100644
index 0000000..77a75c3
--- /dev/null
+++ b/app/src/main/java/mashup/loling/drawpaper/view/DrawPaperActivity.kt
@@ -0,0 +1,598 @@
+package mashup.loling.drawpaper.view
+
+import android.app.Activity
+import android.app.AlertDialog
+import android.content.Intent
+import android.graphics.*
+import android.graphics.drawable.GradientDrawable
+import android.support.v7.app.AppCompatActivity
+import android.os.Bundle
+import android.os.Environment
+import android.os.Handler
+import android.text.Editable
+import android.text.TextWatcher
+import android.util.DisplayMetrics
+import android.util.Log
+import android.util.TypedValue
+import android.view.MotionEvent
+import android.view.View
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.RelativeLayout
+import android.widget.TextView
+import kotlinx.android.synthetic.main.activity_draw_paper.*
+import mashup.loling.R
+import mashup.loling.drawpaper.Component
+import mashup.loling.room.view.ReceivedPaperListActivity
+import java.io.File
+import java.io.FileOutputStream
+import java.lang.Exception
+import java.text.SimpleDateFormat
+import java.util.*
+import kotlin.math.roundToInt
+
+class DrawPaperActivity : AppCompatActivity(), IComponentTouchListener {
+ private val REQUEST_CODE_GET_IMAGE = 100
+
+ private val CLICK_TIME_GAP = 200
+ private val CLICK_DIST_THRESHOLD = 10
+ private val LONG_CLICK_TIME = 500L
+
+ private val componentList: ArrayList = ArrayList()
+ private var selectedComponent: Component? = null
+
+ private var selectedName = ""
+ private var selectedPhoneNum = ""
+ private var selectedDate = 0L
+
+ enum class State { LOLING_EDIT, TEXT_EDIT, IV_EDIT }
+ private var currentState = State.LOLING_EDIT
+
+ private val colorList = arrayOf(
+ R.color.draw_paper_txt_black,
+ R.color.draw_paper_txt_red,
+ R.color.draw_paper_txt_yellow,
+ R.color.draw_paper_txt_green,
+ R.color.draw_paper_txt_blue,
+ R.color.draw_paper_txt_violet,
+ R.color.draw_paper_txt_white
+ )
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_draw_paper)
+
+ // Add image or text
+ btnDrawPaperCamera.setOnClickListener { btnDrawPaperCameraClicked() }
+ btnDrawPaperText.setOnClickListener { btnDrawPaperTextClicked() }
+
+ // Text size change
+ btnTextSizeUp.setOnClickListener { btnTextSizeChangeClicked(sizeUp = true) }
+ btnTextSizeDown.setOnClickListener { btnTextSizeChangeClicked(sizeUp = false) }
+
+ // Component zIndex change
+ btnTextZindexUp.setOnClickListener { btnZindexAdjustClicked(isUp = true) }
+ btnTextZindexDown.setOnClickListener { btnZindexAdjustClicked(isUp = false) }
+ btnIvZindexUp.setOnClickListener { btnZindexAdjustClicked(isUp = true) }
+ btnIvZindexDown.setOnClickListener { btnZindexAdjustClicked(isUp = false) }
+
+ // Close component edit
+ btnCloseEditTextPanel.setOnClickListener { closeEditPanel() }
+ btnCloseIvPanel.setOnClickListener { closeEditPanel() }
+
+ // Exit DrawPaper
+ btnDrawPaperClose.setOnClickListener { exitDrawPaper() }
+
+ // Save DrawPaper
+ btnDrawPaperSave.setOnClickListener { saveDrawPaper() }
+
+ generateTvColorChangeBtn()
+
+ // receive passed parameters
+ selectedName = intent.getStringExtra("name")
+ selectedPhoneNum = intent.getStringExtra("phoneNum")
+ selectedDate = intent.getLongExtra("date", 0)
+ }
+
+ private fun generateTvColorChangeBtn() {
+ for (colorId: Int in colorList) {
+ val colorInt = Color.parseColor(getString(colorId))
+ val btnSize = resources.getDimensionPixelSize(R.dimen.draw_paper_panel_color_btn_size)
+ val newIvChangeTxtColor = ImageView(this)
+ val newIvChangeBgColor = ImageView(this)
+
+ newIvChangeTxtColor.scaleType = ImageView.ScaleType.CENTER
+ newIvChangeBgColor.scaleType = ImageView.ScaleType.CENTER
+
+ val shapeTxt = GradientDrawable()
+ shapeTxt.shape = GradientDrawable.OVAL
+ shapeTxt.setColor(colorInt)
+ shapeTxt.setStroke(2, Color.WHITE)
+ shapeTxt.setSize(btnSize, btnSize)
+ newIvChangeTxtColor.setImageDrawable(shapeTxt)
+
+ val shapeBg = GradientDrawable()
+ shapeBg.shape = GradientDrawable.RECTANGLE
+ shapeBg.setColor(colorInt)
+ shapeBg.setStroke(2, Color.WHITE)
+ shapeBg.setSize(btnSize, btnSize)
+ newIvChangeBgColor.setImageDrawable(shapeBg)
+
+ pnTvColorSelector.addView(newIvChangeTxtColor)
+ pnTvBgSelector.addView(newIvChangeBgColor)
+
+ val paramTxt = newIvChangeTxtColor.layoutParams as LinearLayout.LayoutParams
+ val paramBg = newIvChangeBgColor.layoutParams as LinearLayout.LayoutParams
+
+ paramTxt.width = btnSize
+ paramTxt.weight = 1f
+ paramTxt.height = btnSize
+ newIvChangeTxtColor.layoutParams = paramTxt
+
+ paramBg.width = btnSize
+ paramBg.weight = 1f
+ paramBg.height = btnSize
+ newIvChangeBgColor.layoutParams = paramBg
+
+ // listener
+ newIvChangeTxtColor.setOnClickListener {
+ selectedComponent?.let {
+ if(it.view is TextView)
+ it.view.setTextColor(colorInt)
+ }
+ }
+ newIvChangeBgColor.setOnClickListener {
+ selectedComponent?.let {
+ it.view.setBackgroundColor(colorInt)
+ }
+ }
+
+ }
+ }
+
+ private fun btnTextSizeChangeClicked(sizeUp: Boolean) {
+ selectedComponent?.let {
+ if(it.view !is TextView) return@let
+ when (sizeUp) {
+ true -> {
+ it.increaseTextSizeRequest()
+ }
+ false -> {
+ it.decreaseTextSizeRequest()
+ }
+ }
+ }
+ }
+
+ private fun btnZindexAdjustClicked(isUp: Boolean) {
+ selectedComponent?.let {
+ when (isUp) {
+ true -> {
+ // 자기보다 바로 에 있위는 애의 zIndex를 가져온다
+ var aboveMin = Int.MAX_VALUE
+ for(comp: Component in componentList) {
+ if(comp != it && comp.zIndex > it.zIndex && comp.zIndex < aboveMin)
+ aboveMin = comp.zIndex
+ }
+ // aboveMin 갱신이 없으면 이미 얘가 왕임
+ if(aboveMin == Int.MAX_VALUE) return
+ // 걔보다 1 더 높게
+ val targetZIndex = aboveMin + 1
+ // zindex가 겹치면 안되기 때문에, 리스트 중 targetIndex와 같거나 높은 모든 컴포넌트의 zIndex를 +1 해준다
+ for(comp: Component in componentList) {
+ if(!comp.equals(it) && comp.zIndex >= targetZIndex)
+ comp.zIndex += 1
+ }
+ it.zIndex = targetZIndex
+ }
+ false -> {
+ // 자기보다 바로 아래에 있는 애의 zIndex를 가져온다
+ var underMax = -1
+ for(comp: Component in componentList) {
+ if(comp != it && comp.zIndex < it.zIndex && comp.zIndex > underMax)
+ underMax = comp.zIndex
+ }
+ // underMax 갱신이 없으면 이미 얘가 바닥임
+ if(underMax == -1) return
+ val targetZIndex = underMax
+ // zindex가 겹치면 안되기 때문에, 리스트 중 targetIndex와 같거나 높은 모든 컴포넌트의 zIndex를 +1 해준다
+ for(comp: Component in componentList) {
+ if(!comp.equals(it) && comp.zIndex >= targetZIndex)
+ comp.zIndex += 1
+ }
+ it.zIndex = targetZIndex
+ }
+ }
+
+ orderViews()
+ }
+ }
+
+ private fun btnDrawPaperCameraClicked() {
+ val imgIntent = Intent(Intent.ACTION_PICK)
+ imgIntent.type = "image/*"
+ startActivityForResult(imgIntent, REQUEST_CODE_GET_IMAGE)
+ }
+
+ private fun btnDrawPaperTextClicked() {
+ val newComponent = Component(TextView(this), getMostTopZIndex()+1, this)
+ // test data
+ (newComponent.view as TextView).text = "Hello"
+ newComponent.view.setTextColor(Color.BLACK)
+ newComponent.view.setTextSize(TypedValue.COMPLEX_UNIT_SP, 30f)
+ addComponent(newComponent)
+
+ Log.v(DrawPaperActivity::class.java.simpleName, "New Text Component Added!!")
+ }
+
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ when(requestCode) {
+ REQUEST_CODE_GET_IMAGE -> {
+ if(resultCode == Activity.RESULT_OK && data != null && data.data != null) {
+ val imgUri = data.data
+ val inputStream = contentResolver.openInputStream(imgUri!!)
+
+ val bitmap = BitmapFactory.decodeStream(inputStream)
+
+ // 이미지 가로세로 다시 계산 (적절한 크기)
+ var bWidth = bitmap.width
+ var bHeight = bitmap.height
+ var toWidth = drawArea.width/2
+ var scale = toWidth / bWidth.toFloat()
+ var toHeight = (bHeight * scale).roundToInt()
+
+ val resizedBmp = Bitmap.createScaledBitmap(bitmap, toWidth, toHeight, true)
+
+ val newComponent = Component(ImageView(this), getMostTopZIndex()+1, this)
+ (newComponent.view as ImageView).setImageBitmap(resizedBmp)
+ newComponent.view.scaleType = ImageView.ScaleType.FIT_XY
+ addComponent(newComponent)
+
+ Log.v(DrawPaperActivity::class.java.simpleName, "New Image Component Added!!")
+ }
+ }
+ }
+ }
+
+ override fun onBackPressed() {
+ // 컴포넌트 편집상태라면 편집 전으로, 롤링 편집상태라면 만들기 취소하고 버리시겠습니까? 메시지박스
+ when (currentState) {
+ State.LOLING_EDIT -> {
+ exitDrawPaper()
+ }
+
+ State.TEXT_EDIT, State.IV_EDIT -> {
+ closeEditPanel()
+ }
+ }
+ }
+
+ private fun exitDrawPaper() {
+ val dialog = AlertDialog.Builder(this, R.style.AlertDialogStyle)
+ dialog.setMessage(R.string.draw_activity_msg_do_you_really_wanna_go_back_and_discard)
+ .setCancelable(false)
+ .setPositiveButton(R.string.btn_yes) { _, _ ->
+ super.onBackPressed()
+ return@setPositiveButton
+ }.setNegativeButton(R.string.btn_cancel) { _, _ ->
+ return@setNegativeButton
+ }.create().show()
+ }
+
+ private fun saveDrawPaper() {
+ // 물어본다
+ val dialog = AlertDialog.Builder(this, R.style.AlertDialogStyle)
+ dialog.setMessage(R.string.draw_activity_msg_do_you_want_to_submit_your_paper)
+ .setCancelable(false)
+ .setPositiveButton(R.string.btn_yes) { _, _ ->
+ // 크기가져와
+ val displayMetrics = DisplayMetrics()
+ windowManager.defaultDisplay.getMetrics(displayMetrics)
+ val w = displayMetrics.widthPixels
+ val h = displayMetrics.heightPixels
+
+ // View를 Bitmap으로 변환
+ drawArea.layout(0, 0, w,h)
+ val bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888)
+ bmp.eraseColor(Color.TRANSPARENT)
+ val canvas = Canvas(bmp)
+ drawArea.draw(canvas)
+
+ // 저장
+ val fileName = "loling/loling_" + SimpleDateFormat("yyMMdd-hhmmss", Locale.getDefault()).format(Date()) + ".png"
+ val path = Environment.getExternalStorageDirectory()
+ val dir = File(path, "loling")
+ if(!dir.exists()) dir.mkdir()
+ val file = File(path, fileName)
+ file.createNewFile()
+
+ val fileOutputStream = FileOutputStream(file, false)
+ try {
+ bmp.compress(Bitmap.CompressFormat.JPEG, 50, fileOutputStream)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ Log.v("JUJIN", "Cannot save img")
+ }
+
+ // 다음 액티비티로 가즈아
+ val intent = Intent(this, ReceivedPaperListActivity::class.java)
+ intent.putExtra("name", selectedName)
+ intent.putExtra("phoneNum", selectedPhoneNum)
+ intent.putExtra("date", selectedDate)
+ startActivity(intent)
+
+ return@setPositiveButton
+ }.setNegativeButton(R.string.btn_cancel) { _, _ ->
+ return@setNegativeButton
+ }.create().show()
+ }
+
+ /** Text 컴포넌트에서 문자열 수정시 즉시 적용될 수 있도록 하는 watcher */
+ private val textChangeWatcher: TextWatcher = object : TextWatcher {
+ override fun afterTextChanged(s: Editable?) {}
+ override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
+ override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
+ selectedComponent?.let {
+ if(it.view is TextView && s != null) {
+ it.view.text = s.toString()
+ }
+ }
+ }
+ }
+
+ private fun closeEditPanel() {
+ if (selectedComponent != null) {
+ selectedComponent?.onComponentUnselected()
+ selectedComponent = null
+ }
+ pnTvEdit.visibility = View.GONE
+ pnIvEdit.visibility = View.GONE
+ pnAddComponent.visibility = View.VISIBLE
+ txtTvEdit.removeTextChangedListener(textChangeWatcher)
+
+ currentState = State.LOLING_EDIT
+ }
+
+ override fun onComponentTouchedDown(component: Component) {
+ if(selectedComponent == null) {
+ // 이미 선택된 컴포넌트가 있다면 해당 컴포넌트 컨트롤을 유지한다
+ selectedComponent = component
+ selectedComponent?.onComponentSelected()
+ }
+ }
+
+ override fun onComponentClicked(component: Component) {
+ // 컴포넌트가 텍스트뷰면 텍스트 수정모드로 들어간다
+ if (component.view is TextView) {
+ pnAddComponent.visibility = View.GONE
+ pnTvEdit.visibility = View.VISIBLE
+ txtTvEdit.setText(component.view.text)
+ currentState = State.TEXT_EDIT
+
+ txtTvEdit.addTextChangedListener(textChangeWatcher)
+
+ } else // 컴포넌트가 이미지뷰면 zindex조절만
+ if (component.view is ImageView) {
+ pnAddComponent.visibility = View.GONE
+ pnIvEdit.visibility = View.VISIBLE
+ currentState = State.IV_EDIT
+ }
+ }
+
+ override fun onComponentLongClicked(component: Component) {
+ val dialog = AlertDialog.Builder(this, R.style.AlertDialogStyle)
+ dialog.setMessage(R.string.draw_activity_msg_do_you_want_to_delete_selected_component)
+ .setCancelable(false)
+ .setPositiveButton(R.string.btn_yes) { _, _ ->
+ removeComponent(component)
+ selectedComponent = null
+ return@setPositiveButton
+ }.setNegativeButton(R.string.btn_cancel) { _, _ ->
+ return@setNegativeButton
+ }.create().show()
+ }
+
+ /** 새로운 꾸미기 컴포넌트를 추가한다 */
+ private fun addComponent(newComponent: Component) {
+ componentList.add(newComponent)
+ drawArea.addView(newComponent.view)
+
+ val lParams = newComponent.view.layoutParams as RelativeLayout.LayoutParams
+ lParams.width = RelativeLayout.LayoutParams.WRAP_CONTENT
+ lParams.height = RelativeLayout.LayoutParams.WRAP_CONTENT
+ newComponent.view.layoutParams = lParams
+ newComponent.view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED)
+ lParams.leftMargin = drawArea.width/2 - newComponent.view.measuredWidth/2
+ lParams.topMargin = drawArea.height/2 - newComponent.view.measuredHeight/2
+ newComponent.view.layoutParams = lParams
+ }
+
+ /** 꾸미기 컴포넌트를 삭제한다 */
+ private fun removeComponent(component : Component) {
+ componentList.remove(component)
+ drawArea.removeView(component.view)
+ }
+
+ // variables for position
+ private var originTouchPoint = PointF(0f, 0f)
+ private var originLeft = 0f
+ private var originTop = 0f
+ // variables for scale
+ private var originDistance = 0f
+ private var originScale = 0f
+ // variables for rotation
+ private var originDegree = 0f
+ private var originRotation = 0f
+ // variables to implement click/long click event
+ private var touchedTime: Long = 0 // timestamp
+ private var isStillHolding = false // for long click
+ private val longClickHandler = Handler()
+ private val longClickRunnable = Runnable {
+ selectedComponent?.let { if(isStillHolding) onComponentLongClicked(it); isStillHolding = false }
+ }
+ override fun onTouchEvent(ev: MotionEvent?): Boolean {
+ if (ev == null) return super.onTouchEvent(ev)
+
+ var pointerCnt = ev.pointerCount // 터치된 손가락 개수 저장
+ pointerCnt = if(pointerCnt > 2) 2 else pointerCnt // 최대 멀티터치는 두개까지만 제한
+
+ when(ev.action and MotionEvent.ACTION_MASK) {
+ MotionEvent.ACTION_DOWN -> { // 1개 터치 다운
+ // 처음 터치 위치 저장
+ originTouchPoint.x = ev.getX(0)
+ originTouchPoint.y = ev.getY(0)
+ selectedComponent?.let {
+ // 처음 뷰 위치 저장
+ val lParam: RelativeLayout.LayoutParams = it.view.layoutParams as RelativeLayout.LayoutParams
+ originLeft = it.view.translationX
+ originTop = it.view.translationY
+
+ }
+
+ // 터치된 시간 저장
+ touchedTime = System.currentTimeMillis()
+
+ // 롱 터치 인식을 위한 flag on
+ isStillHolding = true
+ longClickHandler.removeCallbacks(longClickRunnable)
+ longClickHandler.postDelayed(longClickRunnable, LONG_CLICK_TIME)
+
+ }
+ MotionEvent.ACTION_POINTER_DOWN -> { // 터치 다운
+ if(pointerCnt == 2) { // 두 손가락만 지원
+ selectedComponent?.let {
+ // 처음 뷰의 크기/회전 저장
+ originScale = it.view.scaleX
+ originRotation = it.view.rotation
+ }
+
+ // 처음 손가락 거리/손가락 좌표 기울기 저장
+ originDistance = calculateDistance(ev)
+ originDegree = calculateDegree(ev)
+ }
+ isStillHolding = false
+ }
+
+ MotionEvent.ACTION_MOVE -> { // 무-브
+ // 처음 터치 위치로부터 얼마나 움직였나?
+ val dMove = PointF(ev.getX(0), ev.getY(0))
+ dMove.offset(-originTouchPoint.x, -originTouchPoint.y)
+
+ // 처음 손가락 거리로부터 얼마나 벌어졌나? (기준 1, 몇 배나 벌어졌는지) (1개 손가락일 경우 0)
+ var dDist = if(pointerCnt < 2) 0f else calculateDistance(ev) / originDistance
+
+ // 처음 두 손가락 좌표의 기울기로부터 얼마나 돌아갔나? (degree로) (1개 손가락일 경우 0)
+ var dDeg = if(pointerCnt < 2) 0f else calculateDegree(ev) - originDegree
+
+ selectedComponent?.let {
+ // 뷰 이동
+ val lParam: RelativeLayout.LayoutParams = it.view.layoutParams as RelativeLayout.LayoutParams
+ it.view.translationX = originLeft + dMove.x
+ it.view.translationY = originTop + dMove.y
+ it.view.layoutParams = lParam
+
+ // 뷰 확대축소/회전(2개 손가락일 경우에만)
+ if(pointerCnt > 1) {
+ if (dDist.isNaN() || dDist == 0f) dDist = 1f
+ it.scale(originScale * dDist)
+ it.rotate(originRotation + dDeg)
+ }
+ }
+
+ if(Math.abs(dMove.x) > CLICK_DIST_THRESHOLD || Math.abs(dMove.y) > CLICK_DIST_THRESHOLD || pointerCnt != 1) {
+ isStillHolding = false
+ }
+ }
+
+ MotionEvent.ACTION_POINTER_UP -> { // 터치 업
+ selectedComponent?.let {
+ // 두 손가락 중 첫번째 댓던 손가락을 때면 선택된 컴포넌트 없음으로 한다
+ if (ev.actionIndex == 0) {
+ if (isClickGesture(
+ touchedTime,
+ System.currentTimeMillis(),
+ originTouchPoint,
+ PointF(ev.getX(0), ev.getY(0)))) {
+ onComponentClicked(it)
+ } else if (currentState == State.LOLING_EDIT) {
+ it.onComponentUnselected()
+ selectedComponent = null
+ }
+ }
+ }
+ isStillHolding = false
+ }
+ MotionEvent.ACTION_UP -> { // 마지막 터치 업
+ selectedComponent?.let {
+ if (isClickGesture(
+ touchedTime,
+ System.currentTimeMillis(),
+ originTouchPoint,
+ PointF(ev.getX(0), ev.getY(0)))) {
+ onComponentClicked(it)
+ } else if (currentState == State.LOLING_EDIT) {
+ // 모든 손가락을 때면 선택된 컴포넌트 없음으로 한다 (선택중이 아니면)
+ it.onComponentUnselected()
+ selectedComponent = null
+ }
+ }
+ isStillHolding = false
+ }
+ }
+
+ return super.onTouchEvent(ev)
+ }
+
+ private fun calculateDistance(ev: MotionEvent): Float {
+ if(ev.pointerCount < 2) return 0f
+ return calculateDistance(
+ ev.getX(0), ev.getY(0),
+ ev.getX(1), ev.getY(1))
+ }
+ private fun calculateDistance(x1: Float, y1: Float, x2: Float, y2: Float): Float {
+ val dx = (x1 - x2).toDouble()
+ val dy = (y1 - y2).toDouble()
+ return Math.sqrt((dx*dx)+(dy*dy)).toFloat()
+ }
+
+ private fun calculateDegree(ev: MotionEvent): Float {
+ if(ev.pointerCount < 2) return 0f
+ return calculateDegree(
+ ev.getX(0), ev.getY(0),
+ ev.getX(1), ev.getY(1))
+ }
+ private fun calculateDegree(x1: Float, y1: Float, x2: Float, y2: Float): Float {
+ val rad = Math.atan2(y1-y2.toDouble(), x1-x2.toDouble())
+ return Math.toDegrees(rad).toFloat()
+ }
+
+ private fun isClickGesture(touchDownTime: Long, touchUpTime: Long, touchDownPoint: PointF, touchUpPoint: PointF ) : Boolean {
+ if (touchUpTime - touchDownTime > CLICK_TIME_GAP) return false
+ if (Math.abs(touchDownPoint.x - touchUpPoint.x) > CLICK_DIST_THRESHOLD ||
+ Math.abs(touchDownPoint.y - touchUpPoint.y) > CLICK_DIST_THRESHOLD)
+ return false
+ return true
+ }
+
+ /**
+ * 현재 컴포넌트들중 가장 높은 zIndex값을 가져온다
+ */
+ private fun getMostTopZIndex(): Int{
+ var top = 0
+ for(comp: Component in componentList) {
+ if(comp.zIndex > top) top = comp.zIndex
+ }
+ return top
+ }
+
+ /**
+ * 뷰들 보이는 순서를 다시 정리한다.
+ * 각 꾸미기 컴포넌트들의 zIndex값이 낮을수록 밑에 보여지고(가려지고), 높을수록 위에 보여진다.
+ */
+ private fun orderViews() {
+ val sortedList = componentList.sortedWith(compareBy{it.zIndex})
+ for(comp: Component in sortedList)
+ comp.view.bringToFront()
+ }
+
+}
diff --git a/app/src/main/java/mashup/loling/drawpaper/view/IComponentTouchListener.kt b/app/src/main/java/mashup/loling/drawpaper/view/IComponentTouchListener.kt
new file mode 100644
index 0000000..ad5ec2e
--- /dev/null
+++ b/app/src/main/java/mashup/loling/drawpaper/view/IComponentTouchListener.kt
@@ -0,0 +1,9 @@
+package mashup.loling.drawpaper.view
+
+import mashup.loling.drawpaper.Component
+
+interface IComponentTouchListener {
+ fun onComponentTouchedDown(component: Component)
+ fun onComponentClicked(component: Component)
+ fun onComponentLongClicked(component: Component)
+}
\ No newline at end of file
diff --git a/app/src/main/java/mashup/loling/fagment/FriendListFragment.kt b/app/src/main/java/mashup/loling/fagment/FriendListFragment.kt
new file mode 100644
index 0000000..8791ea2
--- /dev/null
+++ b/app/src/main/java/mashup/loling/fagment/FriendListFragment.kt
@@ -0,0 +1,46 @@
+package mashup.loling.fagment
+
+import android.annotation.SuppressLint
+import android.os.Bundle
+import android.support.v4.app.Fragment
+import android.support.v7.widget.LinearLayoutManager
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import kotlinx.android.synthetic.main.recyclerview.view.*
+import mashup.loling.Adapter.FriendItemAdapter
+import mashup.loling.model.FriendItem
+import mashup.loling.R
+import mashup.loling.model.ERoom
+
+@SuppressLint("ValidFragment")
+class FriendListFragment(dataList: ArrayList) : Fragment() {
+ val friends: ArrayList = dataList
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ val root = inflater.inflate(R.layout.recyclerview, container, false)
+
+ root.recyclerView.layoutManager = LinearLayoutManager(context)
+// root.recyclerView.isNestedScrollingEnabled = false
+// makeFriendList()
+ root.recyclerView.adapter = FriendItemAdapter(
+ context!!,friends)
+
+ return root
+
+ }
+
+
+// fun makeFriendList(){//친구목록 가져와 처리
+// for (i in 0..15){
+// friends.add(FriendItem("유채원" + i, "D-10" + i, "1996.03.22"))
+// }
+// }
+
+ fun friendsSzie(): Int{
+ //makeFriendList()
+ return friends.size
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/mashup/loling/Fragment/ReceivedListFragment.kt b/app/src/main/java/mashup/loling/fagment/ReceivedListFragment.kt
similarity index 64%
rename from app/src/main/java/mashup/loling/Fragment/ReceivedListFragment.kt
rename to app/src/main/java/mashup/loling/fagment/ReceivedListFragment.kt
index 7065dc6..1a8c9ce 100644
--- a/app/src/main/java/mashup/loling/Fragment/ReceivedListFragment.kt
+++ b/app/src/main/java/mashup/loling/fagment/ReceivedListFragment.kt
@@ -1,4 +1,4 @@
-package mashup.loling.Fragment
+package mashup.loling.fagment
import android.os.Bundle
import android.support.v4.app.Fragment
@@ -7,6 +7,8 @@ import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import kotlinx.android.synthetic.main.recyclerview.view.*
+import mashup.loling.Adapter.FriendItemAdapter
import mashup.loling.Adapter.LolingItemAdapter
import mashup.loling.model.FriendItem
import mashup.loling.R
@@ -18,19 +20,23 @@ class ReceivedListFragment : Fragment {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val root = inflater.inflate(R.layout.recyclerview, container, false)
- val recyclerView = root.findViewById(R.id.recyclerView)
- if(recyclerView != null) {
- recyclerView.layoutManager = LinearLayoutManager(context)//this.context/getContext()
- makeFriendList()
- recyclerView.adapter = LolingItemAdapter(friends)
- }
+ root.recyclerView.layoutManager = LinearLayoutManager(context)
+ root.recyclerView.isNestedScrollingEnabled = false
+ makeFriendList()
+ root.recyclerView.adapter = LolingItemAdapter(friends)
+
return root
}
fun makeFriendList(){//친구목록 가져와 처리
- for (i in 0..9){
+ for (i in 0..10){
friends.add(FriendItem("유채원" + i, "D-10" + i, "1996.03.22"))
}
}
+ fun friendsSzie(): Int{
+ makeFriendList()
+ return friends.size
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/mashup/loling/fagment/SelectFriendAddressListFragment.kt b/app/src/main/java/mashup/loling/fagment/SelectFriendAddressListFragment.kt
new file mode 100644
index 0000000..8fbd0ce
--- /dev/null
+++ b/app/src/main/java/mashup/loling/fagment/SelectFriendAddressListFragment.kt
@@ -0,0 +1,73 @@
+package mashup.loling.fagment
+
+import android.os.Bundle
+import android.provider.ContactsContract
+import android.support.v4.app.Fragment
+import android.support.v7.widget.LinearLayoutManager
+import android.support.v7.widget.RecyclerView
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import mashup.loling.Adapter.SelectFriendAddressItemAdapter
+import mashup.loling.R
+import mashup.loling.model.FriendItem
+import java.util.HashMap
+import kotlin.collections.ArrayList
+import kotlin.collections.Map
+
+class SelectFriendAddressListFragment : Fragment {
+ constructor() : super()
+
+ val friends: ArrayList = ArrayList()
+
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+
+ //get contract
+ val dataList = ArrayList