diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 526b4c2..a2d7c21 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -13,7 +13,6 @@ - diff --git a/.idea/misc.xml b/.idea/misc.xml index b2ae640..8705768 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,7 +3,13 @@ diff --git a/app/build.gradle b/app/build.gradle index 70e6b9e..dbf2bb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -44,4 +44,13 @@ dependencies { testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + + //Retrofit + implementation 'com.squareup.retrofit2:retrofit:2.9.0' + implementation 'com.squareup.retrofit2:converter-gson:2.9.0' + implementation 'com.squareup.retrofit2:adapter-rxjava2:2.9.0' + + //firebase + implementation platform('com.google.firebase:firebase-bom:30.1.0') + implementation 'com.google.firebase:firebase-analytics-ktx' } \ No newline at end of file diff --git a/app/google-services.json b/app/google-services.json new file mode 100644 index 0000000..97eceb8 --- /dev/null +++ b/app/google-services.json @@ -0,0 +1,39 @@ +{ + "project_info": { + "project_number": "479150024482", + "project_id": "mbtree-7a9b6", + "storage_bucket": "mbtree-7a9b6.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:479150024482:android:5913d300515a08e031a77b", + "android_client_info": { + "package_name": "com.umc.project.mbtree" + } + }, + "oauth_client": [ + { + "client_id": "479150024482-s1ef07pjscklju3cd5uvjci4j917ute9.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyC1YTQIMNFcZ9LFJ4tHwPorEjimPIECCKk" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "479150024482-s1ef07pjscklju3cd5uvjci4j917ute9.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 37e546c..40e764f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + + @@ -18,6 +21,8 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/umc/project/mbtree/ChatActivity.kt b/app/src/main/java/com/umc/project/mbtree/ChatActivity.kt new file mode 100644 index 0000000..1ed747f --- /dev/null +++ b/app/src/main/java/com/umc/project/mbtree/ChatActivity.kt @@ -0,0 +1,35 @@ +package com.umc.project.mbtree + +import android.os.Bundle +import android.os.PersistableBundle +import android.view.LayoutInflater +import androidx.appcompat.app.AppCompatActivity +import com.google.firebase.analytics.FirebaseAnalytics +import com.google.firebase.analytics.ktx.analytics +import com.google.firebase.analytics.ktx.logEvent +import com.google.firebase.ktx.Firebase +import com.umc.project.mbtree.databinding.ActivityChatBinding + +class ChatActivity: AppCompatActivity() { + + lateinit var binding: ActivityChatBinding + private lateinit var firebaseAnalytics: FirebaseAnalytics + + override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) { + super.onCreate(savedInstanceState, persistentState) + binding = ActivityChatBinding.inflate(layoutInflater) + + binding.ibSend.setOnClickListener{ + + } + //firebase객체 가져오기 + firebaseAnalytics = Firebase.analytics + //이벤트 로깅 + firebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_ITEM){ + param(FirebaseAnalytics.Param.ITEM_ID, 1) + param(FirebaseAnalytics.Param.ITEM_NAME, "user1") + param(FirebaseAnalytics.Param.CONTENT_TYPE, "") + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/umc/project/mbtree/LetterActivity.kt b/app/src/main/java/com/umc/project/mbtree/LetterActivity.kt new file mode 100644 index 0000000..cfdcb85 --- /dev/null +++ b/app/src/main/java/com/umc/project/mbtree/LetterActivity.kt @@ -0,0 +1,38 @@ +package com.umc.project.mbtree + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import android.os.PersistableBundle +import android.util.Log +import android.view.Window +import androidx.appcompat.app.AppCompatActivity +import com.umc.project.mbtree.databinding.ActivityLetterBinding + +class LetterActivity: Activity() { + + lateinit var binding: ActivityLetterBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityLetterBinding.inflate(layoutInflater) + requestWindowFeature(Window.FEATURE_NO_TITLE) + setContentView(binding.root) + + Log.d("LetterAcitivity", "Letter넘어옴") + binding.btnOk.setOnClickListener{ + val intent = Intent(baseContext, MainActivity::class.java) + intent.putExtra("content", binding.etPost.toString()) + setResult(Activity.RESULT_OK, intent) + finish() + } + + binding.btnCancel.setOnClickListener{ + val intent = Intent(baseContext, MainActivity::class.java) + setResult(RESULT_CANCELED, intent) + finish() + } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/umc/project/mbtree/LetterDialog.kt b/app/src/main/java/com/umc/project/mbtree/LetterDialog.kt new file mode 100644 index 0000000..4dc67a1 --- /dev/null +++ b/app/src/main/java/com/umc/project/mbtree/LetterDialog.kt @@ -0,0 +1,23 @@ +package com.umc.project.mbtree + +import android.app.Dialog +import android.content.Context +import android.view.WindowManager + +class LetterDialog(context: Context) { + private val dialog = Dialog(context) + + fun showDialog(){ + dialog.setContentView(R.layout.activity_letter) + dialog.window!!.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT) + dialog.setCanceledOnTouchOutside(true) + dialog.setCancelable(true) + dialog.show() + } + +// private lateinit var onClickListener: ButtonClickListener +// +// fun setOnClickListener(listener: ButtonClickListener){ +// onClickListener = listener +// } +} \ No newline at end of file diff --git a/app/src/main/java/com/umc/project/mbtree/MainActivity.kt b/app/src/main/java/com/umc/project/mbtree/MainActivity.kt index 1b7cb64..33e2f28 100644 --- a/app/src/main/java/com/umc/project/mbtree/MainActivity.kt +++ b/app/src/main/java/com/umc/project/mbtree/MainActivity.kt @@ -1,5 +1,8 @@ package com.umc.project.mbtree +import android.app.Activity +import android.app.Dialog +import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log @@ -7,12 +10,41 @@ import android.view.MotionEvent import android.view.View import android.widget.ImageView import android.widget.Toast +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts +import com.umc.project.mbtree.api.RetrofitInterface +import com.umc.project.mbtree.api.getRetrofit import com.umc.project.mbtree.databinding.ActivityMainBinding +import com.umc.project.mbtree.dto.Post +import retrofit2.Call +import retrofit2.Response class MainActivity : AppCompatActivity() { - lateinit var binding: ActivityMainBinding var TAG: String = "MainActivity" + lateinit var binding: ActivityMainBinding + + private lateinit var getResult: ActivityResultLauncher + private var curX:Float = 0.0F + private var curY:Float = 0.0F + // PR연습 + + val resultLauncher = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ result-> + if(result.resultCode == Activity.RESULT_OK){ + val data:Intent? = result.data + val content = data?.getStringExtra("content").toString() + Log.d(TAG, "적은 내용: " + content) + + var fruit: ImageView = ImageView(this@MainActivity) + fruit.setImageResource(R.drawable.ic_letter) + fruit.maxWidth = 10 + fruit.maxHeight = 10 + fruit.x = curX + fruit.y = curY + binding.mainLayout.addView(fruit) + } + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -20,10 +52,14 @@ class MainActivity : AppCompatActivity() { setContentView(binding.root) binding.ivMainTree.bringToFront() + Log.d("레트로핏 테스트", "레트로핏 연결") + getPosts() + + //나무에 열매달기 binding.touchView.setOnTouchListener(object: View.OnTouchListener{ override fun onTouch(p0: View?, p1: MotionEvent?): Boolean { - var curX: Float = p1!!.x - var curY: Float = p1.y!! + curX = p1!!.x + curY = p1.y!! when(p1.action){ //터치가 처음 눌렸을 때 @@ -36,17 +72,33 @@ class MainActivity : AppCompatActivity() { Toast.makeText(applicationContext, "손 뗌", Toast.LENGTH_SHORT).show() Log.d(TAG, "마지막 x좌표: " + curX) Log.d(TAG, "마지막 y좌표" + curY) - var fruit: ImageView = ImageView(this@MainActivity) - fruit.setImageResource(R.drawable.ic_fruit) - fruit.maxWidth = 20 - fruit.maxHeight = 20 - fruit.x = curX - fruit.y = curY - binding.mainLayout.addView(fruit) + + val intent = Intent(application, LetterActivity::class.java) + resultLauncher.launch(intent) } } return true } }) } + + private fun getPosts(){ + //test: 1번 유저 인덱스 요청 + val service = getRetrofit().create(RetrofitInterface::class.java) +// Log.d("레트로핏 테스트", service.get) + service.getPosts(1) + .enqueue(object: retrofit2.Callback>{ + override fun onResponse(call: Call>, response: Response>) { + Log.d("레트로핏 테스트", "성공") + val pList: List = response.body()!! + Log.d("레트로핏 테스트", pList.toString()) + } + + override fun onFailure(call: Call>, t: Throwable) { + Log.d("레트로핏 테스트", "실패") + Log.d("레트로핏 테스트", t.message.toString()) + } + + }) + } } \ No newline at end of file diff --git a/app/src/main/java/com/umc/project/mbtree/api/NetworkModule.kt b/app/src/main/java/com/umc/project/mbtree/api/NetworkModule.kt new file mode 100644 index 0000000..8633187 --- /dev/null +++ b/app/src/main/java/com/umc/project/mbtree/api/NetworkModule.kt @@ -0,0 +1,15 @@ +package com.umc.project.mbtree.api + +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory + +const val BASE_URL = "http://52.79.254.180:3306" + +fun getRetrofit(): Retrofit { + val retrofit = Retrofit.Builder() + .baseUrl(BASE_URL) + .addConverterFactory(GsonConverterFactory.create()) + .build() + + return retrofit +} \ No newline at end of file diff --git a/app/src/main/java/com/umc/project/mbtree/api/RetrofitInterface.kt b/app/src/main/java/com/umc/project/mbtree/api/RetrofitInterface.kt new file mode 100644 index 0000000..bbcf7a5 --- /dev/null +++ b/app/src/main/java/com/umc/project/mbtree/api/RetrofitInterface.kt @@ -0,0 +1,14 @@ +package com.umc.project.mbtree.api + +import com.umc.project.mbtree.dto.Post +import retrofit2.Call +import retrofit2.http.* + +interface RetrofitInterface { + @POST("/posts") + fun createPost(post: Post) + + @GET("/tree") + fun getPosts(@Query("useridx")useridx: Int?): Call> + +} \ No newline at end of file diff --git a/app/src/main/java/com/umc/project/mbtree/dto/Chat.kt b/app/src/main/java/com/umc/project/mbtree/dto/Chat.kt new file mode 100644 index 0000000..cb18041 --- /dev/null +++ b/app/src/main/java/com/umc/project/mbtree/dto/Chat.kt @@ -0,0 +1,7 @@ +package com.umc.project.mbtree.dto + +data class Chat( + val name: String, + val profileImg: String, + val msg: String +) diff --git a/app/src/main/java/com/umc/project/mbtree/dto/Post.kt b/app/src/main/java/com/umc/project/mbtree/dto/Post.kt new file mode 100644 index 0000000..2938f6e --- /dev/null +++ b/app/src/main/java/com/umc/project/mbtree/dto/Post.kt @@ -0,0 +1,12 @@ +package com.umc.project.mbtree.dto + +import com.google.gson.annotations.SerializedName + +data class Post( + @SerializedName("id") var id: Int, + @SerializedName("content") var content: String, + @SerializedName("xPos") var xPos: Float, + @SerializedName("yPos") var yPos: Float, + @SerializedName("writerId") var writerId: User, + @SerializedName("userId") var userId: User +) diff --git a/app/src/main/java/com/umc/project/mbtree/dto/User.kt b/app/src/main/java/com/umc/project/mbtree/dto/User.kt new file mode 100644 index 0000000..703a361 --- /dev/null +++ b/app/src/main/java/com/umc/project/mbtree/dto/User.kt @@ -0,0 +1,10 @@ +package com.umc.project.mbtree.dto + +data class User( + var id: Int, + var email: String, + var location: String, + var myers: String, + var name: String, + var user_token: String +) diff --git a/app/src/main/res/drawable-v24/background.png b/app/src/main/res/drawable-v24/background.png new file mode 100644 index 0000000..c756bb9 Binary files /dev/null and b/app/src/main/res/drawable-v24/background.png differ diff --git a/app/src/main/res/drawable-v24/ic_letter.png b/app/src/main/res/drawable-v24/ic_letter.png new file mode 100644 index 0000000..30d7002 Binary files /dev/null and b/app/src/main/res/drawable-v24/ic_letter.png differ diff --git a/app/src/main/res/drawable-v24/ic_tree.png b/app/src/main/res/drawable-v24/ic_tree.png new file mode 100644 index 0000000..03d23f9 Binary files /dev/null and b/app/src/main/res/drawable-v24/ic_tree.png differ diff --git a/app/src/main/res/drawable/custom_chat_me.xml b/app/src/main/res/drawable/custom_chat_me.xml new file mode 100644 index 0000000..4708110 --- /dev/null +++ b/app/src/main/res/drawable/custom_chat_me.xml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dialog_round.xml b/app/src/main/res/drawable/dialog_round.xml new file mode 100644 index 0000000..d45ae8f --- /dev/null +++ b/app/src/main/res/drawable/dialog_round.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_fruit.png b/app/src/main/res/drawable/ic_fruit.png deleted file mode 100644 index 6cefbd3..0000000 Binary files a/app/src/main/res/drawable/ic_fruit.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_tree.png b/app/src/main/res/drawable/ic_tree.png deleted file mode 100644 index 8adde3e..0000000 Binary files a/app/src/main/res/drawable/ic_tree.png and /dev/null differ diff --git a/app/src/main/res/layout/activity_chat.xml b/app/src/main/res/layout/activity_chat.xml new file mode 100644 index 0000000..6310b9a --- /dev/null +++ b/app/src/main/res/layout/activity_chat.xml @@ -0,0 +1,34 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_letter.xml b/app/src/main/res/layout/activity_letter.xml new file mode 100644 index 0000000..b03b931 --- /dev/null +++ b/app/src/main/res/layout/activity_letter.xml @@ -0,0 +1,46 @@ + + + + + +