diff --git a/LOOKID/.gitignore b/LOOKID/.gitignore index f082bda..799cb5e 100644 --- a/LOOKID/.gitignore +++ b/LOOKID/.gitignore @@ -8,7 +8,7 @@ /build /captures .externalNativeBuild -*/strings.xml +/strings.xml # Created by https://www.gitignore.io/api/kotlin,windows,androidstudio diff --git a/LOOKID/app/build.gradle b/LOOKID/app/build.gradle index 3e6c50e..5bd2920 100644 --- a/LOOKID/app/build.gradle +++ b/LOOKID/app/build.gradle @@ -20,20 +20,29 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + splits{ + abi{ + enable true + reset() + include 'x86', 'x86_64', 'armeabi-v7a', 'armeabi', 'arm64-v8a' + universalApk false + } + } } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support:design:28.0.0' + implementation "com.android.support:support-core-utils: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 'com.squareup.okhttp3:okhttp:3.8.0' implementation 'com.android.support:support-v4:28.0.0' implementation 'com.android.support:recyclerview-v7:28.0.0' implementation 'com.google.code.gson:gson:2.8.5' + implementation files('libs/libDaumMapAndroid.jar') } diff --git a/LOOKID/app/src/main/AndroidManifest.xml b/LOOKID/app/src/main/AndroidManifest.xml index 52ed5b5..311e21b 100644 --- a/LOOKID/app/src/main/AndroidManifest.xml +++ b/LOOKID/app/src/main/AndroidManifest.xml @@ -1,8 +1,10 @@ - + + + android:networkSecurityConfig="@xml/network_security_config" + android:usesCleartextTraffic="true" + tools:targetApi="n"> + + diff --git a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/FindInfo_Activity.kt b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/FindInfo_Activity.kt index 9b8e7b1..410277f 100644 --- a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/FindInfo_Activity.kt +++ b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/FindInfo_Activity.kt @@ -12,7 +12,6 @@ import android.widget.Button import android.widget.EditText import android.widget.Toast import kotlinx.android.synthetic.main.activity_findinfo.* -import kotlinx.android.synthetic.main.activity_findinfo.view.* import lookid_front.lookid.Control.Json import lookid_front.lookid.Control.Okhttp import lookid_front.lookid.R @@ -77,14 +76,14 @@ class FindInfo_Activity : AppCompatActivity() { url = url.replace("{name}",name,false) url = url.replace("{phone}",phone,true) //Log.d("Findinfo_Activity",url) - Asynctask().execute("0",url) + asynctask().execute("0",url) } fun GET_find_pw(id : String, email : String){ var url = getString(R.string.server_url) + getString(R.string.find_pw) url = url.replace("{id}",id) url = url.replace("{mail}",email) - Asynctask().execute("1",url) + asynctask().execute("1",url) } fun Dialog_findid(id : String){ @@ -104,34 +103,26 @@ class FindInfo_Activity : AppCompatActivity() { } } - inner class Asynctask : AsyncTask(){ + inner class asynctask : AsyncTask(){ var state : Int = -1 //state == 0 : GET_아이디 찾기, state == 1 : GET_비밀번호 찾기 + var url = "" override fun doInBackground(vararg params: String): String { state = Integer.parseInt(params[0]) - val url = params[1] - var response : String = "" - - when (state){ - 0 -> response = Okhttp().GET(url) - 1 -> response = Okhttp().GET(url) - } - - return response + url = params[1] + return Okhttp().GET(url) } - override fun onPostExecute(response: String) { if(response.isEmpty()){ Toast.makeText(applicationContext,"서버 오류 발생",Toast.LENGTH_SHORT).show() Log.d("FindInfo_Activity","response is null") return } - + Log.d("FindInfo_Activity",url) + Log.d("FindInfo_Activity",response) if(!Json().isJson(response)){ Toast.makeText(applicationContext,"네트워크 통신 오류", Toast.LENGTH_SHORT).show() - Log.d("FindInfo_Activity",response) return } - val jsonObj = JSONObject(response) when (state){ 0->{ @@ -149,12 +140,10 @@ class FindInfo_Activity : AppCompatActivity() { } } } - override fun onPause() { - Asynctask().cancel(true) + asynctask().cancel(true) super.onPause() } - //Activity 클릭 리스너 fun findinfo_Click_Listener(view : View){ when(view.id){ diff --git a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/Loading_Activity.kt b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/Loading_Activity.kt index f3d1e9c..0b8aea2 100644 --- a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/Loading_Activity.kt +++ b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/Loading_Activity.kt @@ -1,16 +1,24 @@ package lookid_front.lookid.Activity +import android.content.Context import android.content.Intent +import android.content.pm.PackageManager +import android.os.Build import android.os.Bundle import android.support.v7.app.AppCompatActivity +import android.util.Base64 +import android.util.Base64.NO_WRAP +import android.util.Log +import com.kakao.util.maps.helper.Utility.getPackageInfo import lookid_front.lookid.R +import java.security.MessageDigest +import java.security.NoSuchAlgorithmException class Loading_Activity : AppCompatActivity(){ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_loading) - startActivity(Intent(applicationContext,SignIn_Activity::class.java)) finish() } diff --git a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/Main_Activity.kt b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/Main_Activity.kt index ae30302..0118c15 100644 --- a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/Main_Activity.kt +++ b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/Main_Activity.kt @@ -6,9 +6,9 @@ import android.os.Bundle import android.support.v4.view.GravityCompat import android.support.v7.app.ActionBarDrawerToggle import android.support.v7.app.AppCompatActivity -import android.support.v7.widget.LinearLayoutManager import android.util.Log import android.view.View +import android.webkit.WebSettings import android.webkit.WebViewClient import android.widget.Toast import kotlinx.android.synthetic.main.activity_main.* @@ -19,116 +19,127 @@ import lookid_front.lookid.Control.Json import lookid_front.lookid.Control.Okhttp import lookid_front.lookid.Control.Res_adapter import lookid_front.lookid.Control.User_Control -import lookid_front.lookid.Dialog.Basic_Dialog import lookid_front.lookid.Dialog.SignOut_Dialog import lookid_front.lookid.Dialog.Exit_Dialog -import lookid_front.lookid.Entity.Reservation_Entity -import lookid_front.lookid.Entity.User_Entity +import lookid_front.lookid.Entity.Reservation import lookid_front.lookid.R -import lookid_front.lookid.R.id.* +import org.json.JSONArray import org.json.JSONObject class Main_Activity : AppCompatActivity() { - lateinit var res_adapter : Res_adapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) - + } + override fun onResume() { Main_Control().init_Activity() - Main_Control().GET_checkdate() + super.onResume() } - inner class Main_Control{ //액티비티 초기화 fun init_Activity(){ + GET_checkdate() + GET_res_list() + //네비게이션 메뉴 초기화 val toggle = ActionBarDrawerToggle( this@Main_Activity, main_drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) main_drawer_layout.addDrawerListener(toggle) toggle.syncState() - res_adapter = Res_adapter(this@Main_Activity, arrayListOf(Reservation_Entity("롯데월드","2019-09-29","2019-09-30",1))) - main_reslist_RecView.adapter = res_adapter - main_reslist_RecView.layoutManager = LinearLayoutManager(applicationContext) - //회원정보 초기화 - User_Control(applicationContext).set_user(User_Entity("hong10","홍홍택","010-1234-5678","honggildong@naver.com" - ,"서울시 ","농협","51230123","홍홍택")) - main_id_TextView.text = User_Control(applicationContext).get_user().id - - //main_missing_child_WebView.webViewClient(WebViewClient()) - val webSettings = main_missing_child_WebView.settings - webSettings.javaScriptEnabled = true - - main_missing_child_WebView.loadUrl("http://a6d98d12.ngrok.io/web/childCustom") + init_WepView() } + fun init_WepView(){ + main_missing_child_WebView.webViewClient = WebViewClient() + val webViewSettings = main_missing_child_WebView.settings + main_missing_child_WebView.settings.layoutAlgorithm = WebSettings.LayoutAlgorithm.SINGLE_COLUMN + webViewSettings.javaScriptEnabled = true + main_missing_child_WebView.setInitialScale(100) + //webViewSettings.useWideViewPort = true + //webViewSettings.loadWithOverviewMode = true + webViewSettings.setSupportZoom(true) + webViewSettings.defaultZoom = WebSettings.ZoomDensity.FAR + var url = "${getString(R.string.server_url)}${getString(R.string.main_child_ad)}" + main_missing_child_WebView.loadUrl(url) + } //사용자가 예약한 날짜가 오늘인지 확인 후 실행 activity 결정 - fun GET_checkdate(){ + fun GET_checkdate(){ //0 val url = getString(R.string.server_url)+getString(R.string.check_date) //asynctask().execute(url) } - - fun GET_signout(){ - SignOut_Dialog(this@Main_Activity,"로그아웃","정말로 로그아웃 하시겠습니까?").show() + fun GET_signout() { //1 + SignOut_Dialog(this@Main_Activity, "로그아웃", "정말로 로그아웃 하시겠습니까?").show() val url = getString(R.string.server_url) + getString(R.string.sign_out) + asynctask().execute("1",url) + } + fun GET_res_list(){ //2 + val url = getString(R.string.server_url) + getString(R.string.selete_res_list) + asynctask().execute("2",url) } } inner class asynctask : AsyncTask(){ var state : Int = -1 - + var url = "" override fun doInBackground(vararg params: String): String { state = params[0].toInt() - var url = params[1] - var response = Okhttp().GET(url) - - when(state){ - 0->{ - - } - 1->{ - - } - } - - return response + url = params[1] + return Okhttp(applicationContext).GET(url) } override fun onPostExecute(response: String) { //넘어온 값이 없을 때 로그 찍고 리턴 + Log.d("Main_Activity", url) if(response.isNullOrEmpty()) { Toast.makeText(applicationContext,"서버 문제 발생", Toast.LENGTH_SHORT).show() Log.d("Main_Activity", "null in") return } + Log.d("Main_Activity",response) //response 값이 json문이 아니면 통신 오류 메세지 출력 if(!Json().isJson(response)){ Toast.makeText(applicationContext,"네트워크 통신 오류", Toast.LENGTH_SHORT).show() - Log.d("Main_Activity",response) return } - - var jsonObj = JSONObject(response) - if(!jsonObj.getInt("rv_pid").toString().isEmpty()) - startActivity(Intent(applicationContext, Map_Activity::class.java).putExtra("rv_pid",jsonObj.getInt("rv_pid"))) + when(state){ + 0->{ //GET_check_date + val jsonObj = JSONObject(response) + if(!jsonObj.getInt("rv_pid").toString().isEmpty()){ + User_Control(applicationContext).set_rv_pid(jsonObj.getInt("rv_pid")) + startActivity(Intent(applicationContext, Map_Activity::class.java).putExtra("rv_pid",jsonObj.getInt("rv_pid")).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)) + } + } + 2->{ + val jsonAry = JSONArray(response) + val resList : ArrayList = arrayListOf() + for (i in 0 until jsonAry.length()){ + val jsonObj : JSONObject = jsonAry.getJSONObject(i) + resList.add(Reservation(jsonObj.getInt("rv_pid"),jsonObj.getString("r_name"),jsonObj.getLong("s_date"), + jsonObj.getLong("e_date"),jsonObj.getInt("state"))) + } + main_reslist_RecView.adapter = Res_adapter(this@Main_Activity, resList) + } + } } } - fun main_Click_Listener(view : View){ when(view.id){ - R.id.main_reservation_View -> startActivity(Intent(applicationContext, Reservation_Activity::class.java)) - R.id.main_map_View ->startActivity(Intent(applicationContext, Map_Activity::class.java)) - R.id.main_checkRes_View ->startActivity(Intent(applicationContext, ResList_Activity::class.java)) + R.id.main_reservation_View -> startActivity(Intent(applicationContext, Reservation_Activity::class.java).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)) + R.id.main_map_View ->startActivity(Intent(applicationContext, Map_Activity::class.java).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) + .putExtra("rv_pid",User_Control(applicationContext).get_rv_pid())) + R.id.main_checkRes_View ->startActivity(Intent(applicationContext, ResList_Activity::class.java).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)) R.id.main_signout_Button ->Main_Control().GET_signout() R.id.main_logout_View -> Main_Control().GET_signout() - R.id.main_userinfo_Button -> startActivity(Intent(applicationContext, UserInfo_Activity::class.java)) + R.id.main_userinfo_Button -> startActivity(Intent(applicationContext, UserInfo_Activity::class.java).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)) } } - override fun onBackPressed() { - if (main_drawer_layout.isDrawerOpen(GravityCompat.START)) { + if (main_drawer_layout.isDrawerOpen(GravityCompat.START)) main_drawer_layout.closeDrawer(GravityCompat.START) - } else { + else Exit_Dialog(this).create().show() - //super.onBackPressed() - } + } + override fun onPause() { + asynctask().cancel(true) + super.onPause() } } \ No newline at end of file diff --git a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/Map_Activity.kt b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/Map_Activity.kt index c9a00aa..dee6193 100644 --- a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/Map_Activity.kt +++ b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/Map_Activity.kt @@ -1,13 +1,411 @@ package lookid_front.lookid.Activity -import android.os.Bundle +import android.Manifest +import android.annotation.SuppressLint +import android.app.* +import android.content.Context +import android.content.Intent +import android.content.Intent.FLAG_ACTIVITY_NEW_TASK +import android.content.pm.PackageManager +import android.location.LocationManager +import android.os.* +import android.provider.Settings +import android.support.v4.app.ActivityCompat +import android.support.v4.app.NotificationCompat +import android.support.v4.app.NotificationManagerCompat +import android.support.v4.content.ContextCompat +import android.support.v4.view.GravityCompat +import android.support.v7.app.ActionBarDrawerToggle import android.support.v7.app.AppCompatActivity +import android.support.v7.widget.LinearLayoutManager +import android.util.Log +import android.view.View +import android.view.WindowManager +import android.widget.LinearLayout +import android.widget.Toast +import kotlinx.android.synthetic.main.activity_map.* +import kotlinx.android.synthetic.main.activity_map_content.* +import kotlinx.android.synthetic.main.activity_map_navigation.* +import lookid_front.lookid.Control.* +import lookid_front.lookid.Control.Map +import lookid_front.lookid.Dialog.Map_Dialog +import lookid_front.lookid.Entity.Admin +import lookid_front.lookid.Entity.Child +import lookid_front.lookid.Entity.Group + +import net.daum.mf.map.api.* +import net.daum.mf.map.api.MapPoint.mapPointWithGeoCoord import lookid_front.lookid.R +import org.json.JSONArray +import org.json.JSONObject + class Map_Activity : AppCompatActivity() { + lateinit var unmissingAdapter: Unmissing_adapter + lateinit var missingAdapter: Missing_adapter + lateinit var group_adapter: Group_map_adapter + val alarmMap: HashMap = hashMapOf() + var rv_pid: Int = -1 + + private val GPS_ENABLE_REQUEST_CODE = 2001 + private val PERMISSIONS_REQUEST_CODE = 100 + internal var REQUIRED_PERMISSIONS = arrayOf(Manifest.permission.ACCESS_FINE_LOCATION) + + var mMapView: Map? = null + val trackingImageAnchorPointOffset = MapPOIItem.ImageOffset(31, 0) // 이미지 상의 좌표조정값 + var g_pid: Int = 0 + val handler = Handler() + var handlerTask : Runnable ?= null + + var unmissing_childlist = arrayListOf() + var missing_childlist = arrayListOf() + + //전체 GROUPLIST 전역변수 + var grouplist = arrayListOf() + //전체 CHILDLIST 전역변수 + var childlist = arrayListOf() + + @SuppressLint("PrivateResource") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_map) + val Intent = intent + rv_pid = Intent.getIntExtra("rv_pid", -1)//intent로 rv_pid 받아옴, 단 없으면 -1 + //이거 이용해서 처리 + window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) // 맵이 사용되는 동안 화면 끄지 않기. + mapControl().init() + Log.d("Map_Activity", "oncreate") + } + + inner class mapControl { + fun init() { + GET_Map_init(7) //****************************** + + + + mapView_init() // 가공 작업 + mapView_start() + + user_location.setOnCheckedChangeListener { buttonView, isChecked -> + if (user_location.isChecked) { + user_location.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_mylocation)) + mMapView?.setCurrentLocationTrackingMode(MapView.CurrentLocationTrackingMode.TrackingModeOnWithoutHeading) // 현위치가 중앙으로 이동(이후 지도 중앙으로가는건 강제임...) + mMapView?.setCustomCurrentLocationMarkerTrackingImage(R.drawable.icon_mark_blue, trackingImageAnchorPointOffset) //커스텀된 마커 표시 + } else { + user_location.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_mylocation_gray)) + mMapView?.setCurrentLocationTrackingMode(MapView.CurrentLocationTrackingMode.TrackingModeOff) // 본인 강제 중앙 없애기 + mMapView?.setShowCurrentLocationMarker(true) //TrackingModeOff를 해두 현위치 마커 표시하기 + mMapView?.setCustomCurrentLocationMarkerTrackingImage(R.drawable.icon_mark_blue, trackingImageAnchorPointOffset) //커스텀된 마커 표시 -> 안되누 + } + } + + user_alarm.setOnCheckedChangeListener { buttonView, isChecked -> + if (user_alarm.isChecked) + user_alarm.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_alarm)) + else + user_alarm.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_alarm_no)) + } + mapinfo.setOnClickListener { Map_Dialog(this@Map_Activity).create().show() } + } + + fun mapView_init() { + mMapView = Map(childlist, this@Map_Activity) + val mapViewContainer = map_view + mapViewContainer.addView(mMapView) + gpsCheck() + } + + fun mapView_start() { + handlerTask = object : Runnable { + override fun run() { + Log.i("innerclass set_up()", "asdf" + getGpid()) + Log.d("alarm_list",alarmMap.toString()) + + GET_Map_setup(g_pid) //********************************* + mMapView!!.set_childlist(childlist) + childlist_setup() + check_alarm() + rec() + handler.postDelayed(this,5000) + } + } + handler.post(handlerTask) + } + + fun childlist_setup() { + val unmissing_childlist = arrayListOf() + val missing_childlist = arrayListOf() + for (i in childlist) { + if (i.isMissing) { + missing_childlist.add(i) + if (alarmMap[i.c_pid] == null) + alarmMap[i.c_pid] = false + } else { + unmissing_childlist.add(i) + alarmMap.remove(i.c_pid) + } + } + this@Map_Activity.missing_childlist = missing_childlist + this@Map_Activity.unmissing_childlist = unmissing_childlist + if (missing_childlist.size == 0) { + textView51.visibility = View.GONE + } + else{ + textView51.visibility = View.VISIBLE + } + } + + fun gpsCheck() { + if (!checkLocationServicesStatus()) + showDialogForLocationServiceSetting() + else + checkRunTimePermission() + } + + fun check_alarm() { + for (i in alarmMap) { + if (user_alarm.isChecked == true && !i.value) + Alert() + } + } + + fun rec() { + val toggle = ActionBarDrawerToggle( + this@Map_Activity, map_drawer_layout, R.string.navigation_drawer_open, R.string.navigation_drawer_close + ) + map_drawer_layout.addDrawerListener(toggle) + toggle.syncState() + unmissingAdapter = Unmissing_adapter(this@Map_Activity, unmissing_childlist) { child -> mMapView?.moveCamera(CameraUpdateFactory.newMapPoint(mapPointWithGeoCoord(child.x, child.y))); user_location.isChecked = false; map_drawer_layout.closeDrawer(GravityCompat.START) } + missingAdapter = Missing_adapter(this@Map_Activity, missing_childlist) { child -> mMapView?.moveCamera(CameraUpdateFactory.newMapPoint(mapPointWithGeoCoord(child.x, child.y))); user_location.isChecked = false; map_drawer_layout.closeDrawer(GravityCompat.START) } + map_reslist_RecView.adapter = unmissingAdapter + map_missing_reslist_RecView.adapter = missingAdapter + } + + fun Alert() { + createNotificationChannel(applicationContext, NotificationManagerCompat.IMPORTANCE_MAX, + false, getString(R.string.app_name), "App notification channel") + + val channelId = "$packageName-${getString(R.string.app_name)}" // 알람뜰때 앱이름뜨게 + val intent = Intent(baseContext, this@Map_Activity::class.java) + intent.flags = Intent.FLAG_ACTIVITY_SINGLE_TOP or FLAG_ACTIVITY_NEW_TASK //알람 인탠드 + val pendingIntent = PendingIntent.getActivity(baseContext, 0, + intent, PendingIntent.FLAG_UPDATE_CURRENT) // + + val builder = NotificationCompat.Builder(this@Map_Activity, channelId) // + builder.setSmallIcon(R.drawable.ic_recent_copy) // 알람 왼쪽 아이콘부분 + builder.setContentTitle("제목부분 미아생김") // + builder.setContentText("내용부분 미드미아") // + builder.priority = NotificationCompat.PRIORITY_MAX // 우선순윈데 걍 맥스때림 + builder.setDefaults(Notification.DEFAULT_VIBRATE) // 진동울리게 + builder.setAutoCancel(true) // 알람 누르면 사라지게 + builder.setFullScreenIntent(pendingIntent, true) //왜 풀스크린 안뜨냐 + + + val notificationManager = NotificationManagerCompat.from(applicationContext) + notificationManager.notify(0, builder.build()) // 11 + } + + fun createNotificationChannel(context: Context, importance: Int, showBadge: Boolean, + name: String, description: String) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val channelId = "${context.packageName}-$name" + val channel = NotificationChannel(channelId, name, importance) + channel.description = description + channel.setShowBadge(showBadge) + + val notificationManager = context.getSystemService(NotificationManager::class.java) + notificationManager.createNotificationChannel(channel) + } + } + + fun GET_Map_init(rv_pid: Int) { + var url: String = getString(R.string.server_url) + getString(R.string.map_init) + url = url.replace("{rv_pid}",rv_pid.toString()) + asynctask().execute("0",url) + } + + fun GET_Map_setup(g_pid: Int) { + var url: String = getString(R.string.server_url) + getString(R.string.map_setup) + url = url.replace("{g_pid}",g_pid.toString()) + asynctask().execute("1",url) + } + } + + fun getGpid(): Int { + return g_pid + } + + @SuppressLint("StaticFieldLeak") + inner class asynctask : AsyncTask() { + var state: Int = -1 // 0 : get_map , 1 : get_map_loc + var url = "" + override fun doInBackground(vararg params: String): String { + //POST_예약하기 (url, jsonStr) + state = params[0].toInt() + url = params[1] + return Okhttp(applicationContext).GET(url) + } + + override fun onPostExecute(response: String) { + if (response.isEmpty()) { + Log.d("Map_Activity", "null") + return + } + Log.d("Map_Activity", url) + Log.d("Map_Activity", response) + if (!Json().isJson(response)) { + Toast.makeText(applicationContext, "네트워크 통신 오류", Toast.LENGTH_SHORT).show() + return + } + val jsonArray = JSONArray(response) + when (state) { + 0 -> { + for (i in 0 until jsonArray.length()) { + val jsonObject: JSONObject = jsonArray.getJSONObject(i) + grouplist.add(Group(jsonObject.getInt("g_pid"), arrayListOf(), + arrayListOf(), jsonObject.getString("g_name"))) + } + g_pid = grouplist[0].g_pid + mapControl().GET_Map_setup(g_pid) + group_adapter = Group_map_adapter(this@Map_Activity, grouplist) { group -> g_pid = group.g_pid; Toast.makeText(this@Map_Activity, group.name + " 입니다", Toast.LENGTH_SHORT).show() } + group_RecView.adapter = group_adapter + group_RecView.layoutManager = LinearLayoutManager(applicationContext, LinearLayout.HORIZONTAL, false) + } + 1 -> { + childlist.clear() + for (i in 0 until jsonArray.length()) { + val jsonObject: JSONObject = jsonArray.getJSONObject(i) + childlist.add(Child(i, jsonObject.getString("c_name"), + jsonObject.getDouble("x"), jsonObject.getDouble("y"), false)) + } + } + } + } + } + + //gps켜져있는지 확인하는 메소드 -> gps가 켜져있어야 현재위치 마커가능, 현위치 위경도 좌표값 가져올수있음(거리계산 함수에 써야함) + override fun onRequestPermissionsResult(permsRequestCode: Int, permissions: Array, grandResults: IntArray) { + if (permsRequestCode == PERMISSIONS_REQUEST_CODE && grandResults.size == REQUIRED_PERMISSIONS.size) { + + // 요청 코드가 PERMISSIONS_REQUEST_CODE 이고, 요청한 퍼미션 개수만큼 수신되었다면 + + var check_result = true + + // 모든 퍼미션을 허용했는지 체크합니다. + + for (result in grandResults) { + if (result != PackageManager.PERMISSION_GRANTED) { + check_result = false + break + } + } + if (check_result) { + Log.d("@@@", "start") + //위치 값을 가져올 수 있음 + mMapView?.currentLocationTrackingMode = MapView.CurrentLocationTrackingMode.TrackingModeOnWithoutHeading + mMapView?.setCustomCurrentLocationMarkerTrackingImage(R.drawable.icon_mark_blue, trackingImageAnchorPointOffset) + + } else { + // 거부한 퍼미션이 있다면 앱을 사용할 수 없는 이유를 설명해주고 앱을 종료합니다. 2가지 경우가 있습니다. + + if (ActivityCompat.shouldShowRequestPermissionRationale(this, REQUIRED_PERMISSIONS[0])) { + Toast.makeText(this@Map_Activity, "퍼미션이 거부되었습니다. 앱을 다시 실행하여 퍼미션을 허용해주세요.", Toast.LENGTH_LONG).show() + finish() + } else { + Toast.makeText(this@Map_Activity, "퍼미션이 거부되었습니다. 설정(앱 정보)에서 퍼미션을 허용해야 합니다. ", Toast.LENGTH_LONG).show() + } + } + } + } + + internal fun checkRunTimePermission() { + //런타임 퍼미션 처리 + // 1. 위치 퍼미션을 가지고 있는지 체크합니다. + val hasFineLocationPermission = ContextCompat.checkSelfPermission(this@Map_Activity, Manifest.permission.ACCESS_FINE_LOCATION) + if (hasFineLocationPermission == PackageManager.PERMISSION_GRANTED) { + // 2. 이미 퍼미션을 가지고 있다면 + // ( 안드로이드 6.0 이하 버전은 런타임 퍼미션이 필요없기 때문에 이미 허용된 걸로 인식합니다.) + // 3. 위치 값을 가져올 수 있음 + mMapView?.currentLocationTrackingMode = MapView.CurrentLocationTrackingMode.TrackingModeOnWithoutHeading + mMapView?.setCustomCurrentLocationMarkerTrackingImage(R.drawable.icon_mark_blue, trackingImageAnchorPointOffset) + } else { //2. 퍼미션 요청을 허용한 적이 없다면 퍼미션 요청이 필요합니다. 2가지 경우(3-1, 4-1)가 있습니다. + + // 3-1. 사용자가 퍼미션 거부를 한 적이 있는 경우에는 + if (ActivityCompat.shouldShowRequestPermissionRationale(this@Map_Activity, REQUIRED_PERMISSIONS[0])) { + + // 3-2. 요청을 진행하기 전에 사용자가에게 퍼미션이 필요한 이유를 설명해줄 필요가 있습니다. + Toast.makeText(this@Map_Activity, "이 앱을 실행하려면 위치 접근 권한이 필요합니다.", Toast.LENGTH_LONG).show() + // 3-3. 사용자게에 퍼미션 요청을 합니다. 요청 결과는 onRequestPermissionResult에서 수신됩니다. + ActivityCompat.requestPermissions( + this@Map_Activity, REQUIRED_PERMISSIONS, + PERMISSIONS_REQUEST_CODE) + } else { + // 4-1. 사용자가 퍼미션 거부를 한 적이 없는 경우에는 퍼미션 요청을 바로 합니다. + // 요청 결과는 onRequestPermissionResult에서 수신됩니다. + ActivityCompat.requestPermissions( + this@Map_Activity, REQUIRED_PERMISSIONS, + PERMISSIONS_REQUEST_CODE + ) + } + } + } + + //여기부터는 GPS 활성화 하기위한 메소드들 + private fun showDialogForLocationServiceSetting() { + val builder = AlertDialog.Builder(this@Map_Activity) + builder.setTitle("위치 서비스 비활성화") + builder.setMessage("앱을 사용하기 위해서는 위치 서비스가 필요합니다.\n" + "위치 설정을 하시겠습니까?") + builder.setCancelable(true) + builder.setPositiveButton("설정") { dialog, id -> + val callGPSSettingIntent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS) + startActivityForResult(callGPSSettingIntent, GPS_ENABLE_REQUEST_CODE) + } + builder.setNegativeButton( + "취소" + ) { dialog, id -> dialog.cancel() } + builder.create().show() + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + when (requestCode) { + GPS_ENABLE_REQUEST_CODE -> + //사용자가 GPS 활성 시켰는지 검사 + if (checkLocationServicesStatus()) { + if (checkLocationServicesStatus()) { + Log.d("@@@", "onActivityResult : GPS 활성화 되있음") + checkRunTimePermission() + return + } + } + } + } + + fun checkLocationServicesStatus(): Boolean { + val locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager + return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled( + LocationManager.NETWORK_PROVIDER + ) + } + + override fun onResume() { + for (i in alarmMap) + i.setValue(true) + super.onResume() + } + + override fun onDestroy() { + Log.d("Map_activity", "onDestroy") + handler.removeCallbacks(handlerTask) + super.onDestroy() + } + + override fun onBackPressed() { + if (map_drawer_layout.isDrawerOpen(GravityCompat.START)) { + map_drawer_layout.closeDrawer(GravityCompat.START) + } else { + super.onBackPressed() + } } } \ No newline at end of file diff --git a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/ResInfo_Activity.kt b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/ResInfo_Activity.kt index 722f5c0..7939a65 100644 --- a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/ResInfo_Activity.kt +++ b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/ResInfo_Activity.kt @@ -11,35 +11,34 @@ import android.view.View import android.widget.Button import android.widget.Toast import kotlinx.android.synthetic.main.activity_resinfo.* -import lookid_front.lookid.Control.Date_Control -import lookid_front.lookid.Control.Group_adapter -import lookid_front.lookid.Control.User_Control +import lookid_front.lookid.Control.* import lookid_front.lookid.Dialog.Address_Dialog import lookid_front.lookid.Dialog.Bank_Dialog -import lookid_front.lookid.Entity.Reservation_Entity +import lookid_front.lookid.Dialog.Basic_Dialog +import lookid_front.lookid.Entity.Reservation import lookid_front.lookid.R +import org.json.JSONObject import java.text.DecimalFormat import java.text.SimpleDateFormat import java.util.* class ResInfo_Activity : AppCompatActivity() { - lateinit var res : Reservation_Entity + lateinit var res : Reservation lateinit var bank_list : Array lateinit var group_Adapter : Group_adapter val dateFormat = SimpleDateFormat(Date_Control().dateFormat, Locale.KOREA) - var state : Boolean = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_resinfo) ResInfo_Control().init() } - inner class ResInfo_Control(){ fun init(){ bank_list = resources.getStringArray(R.array.bank_list) val intent = getIntent() - res = intent.getSerializableExtra("res") as Reservation_Entity + res = intent.getSerializableExtra("res") as Reservation + GET_res_detail() if(res.state == 1) resinfo_modify_Button.visibility = View.VISIBLE @@ -49,7 +48,6 @@ class ResInfo_Activity : AppCompatActivity() { init_view() init_state(state) } - fun init_state(modify : Boolean){ val viewlist_enabled = arrayListOf(resinfo_resname_EditText,resinfo_name_EditText,resinfo_phone_EditText,resinfo_bank_number_EditText ,resinfo_bank_holder_EditText,resinfo_rec_del_RadioButton,resinfo_rec_vis_RadioButton,resinfo_ret_del_RadioButton,resinfo_ret_vis_RadioButton,resinfo_addressDet_EditText @@ -72,14 +70,14 @@ class ResInfo_Activity : AppCompatActivity() { resinfo_grouplist_RecView.adapter = group_Adapter } } - fun init_view(){ resinfo_resname_EditText.setText(res.r_name) val state_list = resources.getStringArray(R.array.state_list) resinfo_state_TextView.text = state_list[res.state] + if(res.state > 1) + resinfo_delete_Button.visibility = View.GONE resinfo_name_EditText.setText(res.user.name) resinfo_phone_EditText.setText(res.user.phone) - if(res.receipt_item == 0) resinfo_rec_del_RadioButton.isChecked = true else @@ -88,27 +86,25 @@ class ResInfo_Activity : AppCompatActivity() { resinfo_ret_del_RadioButton.isChecked = true else resinfo_ret_vis_RadioButton.isChecked = true - resinfo_bank_name_TextView.text = res.user.bank_name - resinfo_bank_number_EditText.setText(res.user.bank_number) + resinfo_bank_number_EditText.setText(res.user.bank_num) resinfo_bank_holder_EditText.setText(res.user.bank_holder) - resinfo_startdate_TextView.text = res.s_date - resinfo_enddate_TextView.text = res.e_date + resinfo_startdate_TextView.text = dateFormat.format(Date(res.s_date)) + resinfo_enddate_TextView.text = dateFormat.format(Date(res.e_date)) resinfo_address_EditText.setText(res.user.address) - resinfo_addressDet_EditText.setText(res.user.address) + resinfo_addressDet_EditText.setText(res.user.address_detail) group_Adapter = Group_adapter(this@ResInfo_Activity,res.group_list,true,"ResInfo") resinfo_grouplist_RecView.adapter = group_Adapter resinfo_grouplist_RecView.layoutManager = LinearLayoutManager(applicationContext) resinfo_grouplist_RecView.setItemViewCacheSize(100) - - //pay_init() //금액 정보 view 초기화 + pay_init() //금액 정보 view 초기화 } - fun pay_init(){ val devicenum = group_Adapter.getDevice_num() val startdate = dateFormat.parse(resinfo_startdate_TextView.text.toString()) val enddate = dateFormat.parse(resinfo_enddate_TextView.text.toString()) val useDay : Long = (enddate.time - startdate.time) / (24*60*60*1000) + Log.d("ResInfo_Activity","device num : $devicenum, useDay : $useDay") if(devicenum == 0|| useDay.toInt() == 0) return @@ -137,13 +133,14 @@ class ResInfo_Activity : AppCompatActivity() { res.r_name = resinfo_resname_EditText.text.toString() res.user.name = resinfo_name_EditText.text.toString() res.user.phone = resinfo_phone_EditText.text.toString() - res.user.bank_number = resinfo_bank_number_EditText.text.toString() + res.user.bank_num = resinfo_bank_number_EditText.text.toString() res.user.bank_name = resinfo_bank_name_TextView.text.toString() res.user.bank_holder = resinfo_bank_holder_EditText.text.toString() - res.r_date = dateFormat.format(Date()) - res.s_date = resinfo_startdate_TextView.text.toString() - res.e_date = resinfo_enddate_TextView.text.toString() - res.user.address = resinfo_address_EditText.text.toString() + " " + resinfo_addressDet_EditText.text.toString() + res.r_date = Date().time + res.s_date = dateFormat.parse(resinfo_startdate_TextView.text.toString()).time + res.e_date = dateFormat.parse(resinfo_enddate_TextView.text.toString()).time + res.user.address = resinfo_address_EditText.text.toString() + res.user.address_detail = resinfo_addressDet_EditText.text.toString() res.state = 1 res.group_list = group_Adapter.grouplist @@ -159,7 +156,7 @@ class ResInfo_Activity : AppCompatActivity() { resinfo_name_EditText.setText(user.name) resinfo_phone_EditText.setText(user.phone) resinfo_bank_name_TextView.text = user.bank_name - resinfo_bank_number_EditText.setText(user.bank_number) + resinfo_bank_number_EditText.setText(user.bank_num) resinfo_bank_holder_EditText.setText(user.bank_holder) for(i in 0 until viewlist.size) viewlist[i].isEnabled = false @@ -175,7 +172,6 @@ class ResInfo_Activity : AppCompatActivity() { } } - fun Dialog_DatePicker(state : Int){ var listener = DatePickerDialog.OnDateSetListener { view, year, month, dayOfMonth -> when(state){ @@ -205,7 +201,6 @@ class ResInfo_Activity : AppCompatActivity() { cal.time = date val dateDialog = DatePickerDialog(this@ResInfo_Activity, listener,cal.get(Calendar.YEAR),cal.get(Calendar.MONTH), cal.get(Calendar.DATE)) - dateDialog.show() } @@ -219,17 +214,85 @@ class ResInfo_Activity : AppCompatActivity() { bank_Dialog.setOnShowListener(Dialog_Listener()) bank_Dialog.show() } + fun Dialog_cancel(){ + Basic_Dialog(this@ResInfo_Activity,"예약 취소","정말로 취소하시겠습니까?", DialogInterface.OnClickListener { _, _ -> + DELETE_res_cancel() + },true).show() + } + fun GET_res_detail(){ //0 + var url: String = getString(R.string.server_url) + getString(R.string.selete_res_detail) + url = url.replace("{rv_pid}",res.rv_pid.toString()) + asynctask().execute("0",url) + } + fun PUT_res_modify(){ //1 + val url = getString(R.string.server_url) + getString(R.string.reservation_modify) + asynctask().execute("1",url,Json().reservation(res)) + } + fun DELETE_res_cancel(){ + val url = getString(R.string.server_url) + getString(R.string.reservation_cancel) + asynctask().execute("2",url,Json().res_delete(res.rv_pid)) + } } inner class asynctask : AsyncTask(){ - override fun doInBackground(vararg params: String?): String { + var state :Int = -1; + var url = "" + override fun doInBackground(vararg params: String): String { var response : String = "" - + state = params[0].toInt() + url = params[1] + when(state){ + 0->response = Okhttp(applicationContext).GET(url) + 1->response = Okhttp(applicationContext).PUT(url,params[2]) + 2->response = Okhttp(applicationContext).DELETE(url,params[2]) + } return response } - - override fun onPostExecute(result: String?) { - + override fun onPostExecute(response: String) { + Log.d("ResInfo_Activity",url)//response 값이 json문이 아니면 통신 오류 메세지 출력 + if(response.isNullOrEmpty()) {//넘어온 값이 없을 때 로그 찍고 리턴 + Toast.makeText(applicationContext,"서버 문제 발생", Toast.LENGTH_SHORT).show() + Log.d("ResInfo_Activity", url) + Log.d("ResInfo_Activity", "null in") + return + } + Log.d("ResInfo_Activity",response)//response 값이 json문이 아니면 통신 오류 메세지 출력 + if(!Json().isJson(response)){ + Toast.makeText(applicationContext,"네트워크 통신 오류", Toast.LENGTH_SHORT).show() + return + } + when(state){ + 0-> {//GET_res_detail + res = Json().to_Res(response) + ResInfo_Control().init_view() + Log.d("ResInfo",res.toString()) + } + 1->{ + val json = JSONObject(response) + if(json.getBoolean("success")){ + Toast.makeText(applicationContext,"예약 수정 완료",Toast.LENGTH_SHORT).show() + this@ResInfo_Activity.state = !this@ResInfo_Activity.state + resinfo_modify_Button.background = getDrawable(R.drawable.icon_modify) + ResInfo_Control().init_state(this@ResInfo_Activity.state) //view를 수정 불가능으로 초기화 + } + else{ + Toast.makeText(applicationContext,"예약 수정 실패",Toast.LENGTH_SHORT).show() + ResInfo_Control().init() + this@ResInfo_Activity.state = !this@ResInfo_Activity.state + resinfo_modify_Button.background = getDrawable(R.drawable.icon_modify) + ResInfo_Control().init_state(this@ResInfo_Activity.state) + } + } + 2->{ + val json = JSONObject(response) + if(json.getBoolean("success")){ + Toast.makeText(applicationContext,"예약 삭제 완료",Toast.LENGTH_SHORT).show() + finish() + } + else + Toast.makeText(applicationContext,"예약 삭제 실패",Toast.LENGTH_SHORT).show() + } + } } } @@ -263,17 +326,13 @@ class ResInfo_Activity : AppCompatActivity() { return } //서버에 보내기 - - state = !state - resinfo_modify_Button.background = getDrawable(R.drawable.icon_modify) - ResInfo_Control().init_state(state) //view를 수정 불가능으로 초기화 + ResInfo_Control().PUT_res_modify() } } R.id.resinfo_groupadd_Button->{ group_Adapter.add() resinfo_grouplist_RecView.scrollToPosition(group_Adapter.itemCount - 1) } - R.id.resinfo_auto_CheckBox->ResInfo_Control().user_init(resinfo_auto_CheckBox.isChecked) R.id.resinfo_startdate_Button->ResInfo_Control().Dialog_DatePicker(0) R.id.resinfo_enddate_Button->ResInfo_Control().Dialog_DatePicker(1) @@ -283,6 +342,11 @@ class ResInfo_Activity : AppCompatActivity() { R.id.resinfo_ret_del_RadioButton ->{res.return_item = 0} R.id.resinfo_ret_vis_RadioButton ->{res.return_item = 1} R.id.resinfo_bank_name_ImageButton ->{ResInfo_Control().Dialog_bankname()} + R.id.resinfo_delete_Button->{ResInfo_Control().Dialog_cancel() } } } + override fun onPause() { + asynctask().cancel(true) + super.onPause() + } } \ No newline at end of file diff --git a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/ResList_Activity.kt b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/ResList_Activity.kt index 17b7b39..9af9f5d 100644 --- a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/ResList_Activity.kt +++ b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/ResList_Activity.kt @@ -1,12 +1,18 @@ package lookid_front.lookid.Activity +import android.os.AsyncTask import android.os.Bundle import android.support.v7.app.AppCompatActivity -import android.support.v7.widget.LinearLayoutManager +import android.util.Log +import android.widget.Toast import kotlinx.android.synthetic.main.activity_reslist.* +import lookid_front.lookid.Control.Json +import lookid_front.lookid.Control.Okhttp import lookid_front.lookid.Control.Res_adapter -import lookid_front.lookid.Entity.Reservation_Entity +import lookid_front.lookid.Entity.Reservation import lookid_front.lookid.R +import org.json.JSONArray +import org.json.JSONObject class ResList_Activity : AppCompatActivity() { lateinit var res_adapter : Res_adapter @@ -18,8 +24,47 @@ class ResList_Activity : AppCompatActivity() { inner class ResList_Control(){ fun init_Activity(){ - res_adapter = Res_adapter(this@ResList_Activity, arrayListOf(Reservation_Entity("롯데월드","2019-09-29","2019-09-30",1))) - reslist_res_RecView.adapter = res_adapter + GET_res_list() } + fun GET_res_list(){ + val url = getString(R.string.server_url) + getString(R.string.selete_res_list) + asynctask().execute(url) + } + } + + inner class asynctask : AsyncTask(){ + var state : Int = -1 + var url = "" + override fun doInBackground(vararg params: String): String { + url = params[0] + return Okhttp(applicationContext).GET(url) + } + override fun onPostExecute(response: String) { + //넘어온 값이 없을 때 로그 찍고 리턴 + if (response.isNullOrEmpty()) { + Toast.makeText(applicationContext, "서버 문제 발생", Toast.LENGTH_SHORT).show() + Log.d("ResList_Activity", url) + Log.d("ResList_Activity", "null in") + return + } + Log.d("ResList_Activity", response) + //response 값이 json문이 아니면 통신 오류 메세지 출력 + if (!Json().isJson(response)) { + Toast.makeText(applicationContext, "네트워크 통신 오류", Toast.LENGTH_SHORT).show() + return + } + val jsonAry = JSONArray(response) + val resList: ArrayList = arrayListOf() + for (i in 0 until jsonAry.length()) { + val jsonObj: JSONObject = jsonAry.getJSONObject(i) + resList.add(Reservation(jsonObj.getInt("rv_pid"), jsonObj.getString("r_name"), jsonObj.getLong("s_date"), + jsonObj.getLong("e_date"), jsonObj.getInt("state"))) + } + reslist_res_RecView.adapter = Res_adapter(this@ResList_Activity, resList) + } + } + override fun onPause() { + asynctask().cancel(true) + super.onPause() } } \ No newline at end of file diff --git a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/ReservationLast_Activity.kt b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/ReservationLast_Activity.kt index b8b9f69..6f74914 100644 --- a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/ReservationLast_Activity.kt +++ b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/ReservationLast_Activity.kt @@ -5,11 +5,9 @@ import android.content.Intent import android.os.AsyncTask import android.os.Bundle import android.support.v7.app.AppCompatActivity -import android.support.v7.widget.LinearLayoutManager import android.util.Log import android.view.View import android.widget.Toast -import com.google.gson.Gson import kotlinx.android.synthetic.main.activity_reservation_last.* import lookid_front.lookid.Control.Date_Control import lookid_front.lookid.Control.Group_adapter_ResLast @@ -17,7 +15,7 @@ import lookid_front.lookid.Control.Json import lookid_front.lookid.Control.Okhttp import lookid_front.lookid.Dialog.Basic_Dialog import lookid_front.lookid.Dialog.Refund_Dialog -import lookid_front.lookid.Entity.Reservation_Entity +import lookid_front.lookid.Entity.Reservation import lookid_front.lookid.R import org.json.JSONObject import java.text.DecimalFormat @@ -25,9 +23,10 @@ import java.text.SimpleDateFormat import java.util.* class ReservationLast_Activity : AppCompatActivity(){ - lateinit var reservation_Entity : Reservation_Entity + lateinit var reservation_ : Reservation var devicenum : Int = 0 lateinit var group_Adapter : Group_adapter_ResLast + val dateFormat = SimpleDateFormat(Date_Control().dateFormat, Locale.KOREA) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -39,39 +38,38 @@ class ReservationLast_Activity : AppCompatActivity(){ //page 초기화 fun res_init(){ val intent = intent - reservation_Entity = intent.getSerializableExtra("res") as Reservation_Entity + reservation_ = intent.getSerializableExtra("res") as Reservation devicenum = intent.getIntExtra("res_devicenum",0) val useday = intent.getLongExtra("res_useday",0) //결제 정보 초기화 - reslast_resname_TextView.text = reservation_Entity.r_name - reslast_name_TextView.text = reservation_Entity.user.name - reslast_phone_TextView.text = reservation_Entity.user.phone - reslast_bank_TextView.text = reservation_Entity.user.bank_toString() - reslast_startdate_TextView.text = reservation_Entity.s_date - reslast_enddate_TextView.text = reservation_Entity.e_date - reslast_address_TextView.text = (reservation_Entity.user.address + " " +reservation_Entity.user.address_detail) + reslast_resname_TextView.text = reservation_.r_name + reslast_name_TextView.text = reservation_.user.name + reslast_phone_TextView.text = reservation_.user.phone + reslast_bank_TextView.text = reservation_.user.bank_toString() + reslast_startdate_TextView.text = dateFormat.format(reservation_.s_date) + reslast_enddate_TextView.text = dateFormat.format(reservation_.e_date) + reslast_address_TextView.text = (reservation_.user.address + " " +reservation_.user.address_detail) reslast_devicenum_TextView.text = devicenum.toString() val payformat = DecimalFormat("###,###") reslast_pay_TextView.text = payformat.format(useday * devicenum * 1500) - reslast_deposit_TextView.text = payformat.format(reservation_Entity.deposit) + reslast_deposit_TextView.text = payformat.format(reservation_.deposit) if(useday * devicenum * 1500 < 50000) reslast_postpay_TextView.text = payformat.format(5000) - reslast_totalpay_TextView.text = payformat.format(reservation_Entity.cost) - if(reservation_Entity.receipt_item == 0) + reslast_totalpay_TextView.text = payformat.format(reservation_.cost) + if(reservation_.receipt_item == 0) reslast_rec_TextView.text = "택배" else reslast_rec_TextView.text = "방문" - if(reservation_Entity.return_item == 0) + if(reservation_.return_item == 0) reslast_ret_TextView.text = "택배" else reslast_ret_TextView.text = "방문" //그룹 리사이클러뷰 초기화 - group_Adapter = Group_adapter_ResLast(this@ReservationLast_Activity,reservation_Entity.group_list) + group_Adapter = Group_adapter_ResLast(this@ReservationLast_Activity,reservation_.group_list) reslast_grouplist_RecView.adapter = group_Adapter - reslast_grouplist_RecView.layoutManager = LinearLayoutManager(applicationContext) reslast_grouplist_RecView.setItemViewCacheSize(100) } @@ -80,32 +78,44 @@ class ReservationLast_Activity : AppCompatActivity(){ , DialogInterface.OnClickListener { _, _ -> startActivity(Intent(applicationContext, Main_Activity::class.java).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) finish() - }).show() + },true).show() + } + + fun Dialog_cancel(){ + Basic_Dialog(this@ReservationLast_Activity,"취소","정말로 취소하시겠습니까?", DialogInterface.OnClickListener { _, _ -> + val intent = Intent(applicationContext, Main_Activity::class.java) + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) + startActivity(intent) + finish() + },true).show() + } + fun POST_res(){ + val url = getString(R.string.server_url)+getString(R.string.reservation) + Log.d("ResLast_Activity",Json().reservation(reservation_)) + asynctask().execute(url,Json().reservation(reservation_)) } } inner class asynctask : AsyncTask(){ + var url = "" override fun doInBackground(vararg params: String): String { //POST_예약하기 (url, jsonStr) - val url = params[0] + url = params[0] return Okhttp(applicationContext).POST(url,params[1]) } - override fun onPostExecute(response: String) { if(response.isEmpty()) { Log.d("ResLast_Activity", "null") return } + Log.d("ResLast_Activity", url) + Log.d("ResLast_Activity", response) if(!Json().isJson(response)){ Toast.makeText(applicationContext,"네트워크 통신 오류", Toast.LENGTH_SHORT).show() - Log.d("ResLast_Activity", response) return } val json = JSONObject(response) - val success = json.getInt("success") - if(success == 1){ - Toast.makeText(applicationContext,"예약 성공", Toast.LENGTH_SHORT).show() - finish() - } + if(json.getBoolean("success")) + ResLast_Control().Dialog_res() else Toast.makeText(applicationContext,"예약 실패", Toast.LENGTH_SHORT).show() } @@ -113,20 +123,16 @@ class ReservationLast_Activity : AppCompatActivity(){ fun reslast_ClickListener(view : View){ when(view.id){ - R.id.reslast_cancel_Button ->{ - Basic_Dialog(this,"취소","정말로 취소하시겠습니까?", DialogInterface.OnClickListener { _, _ -> - val intent = Intent(applicationContext, Main_Activity::class.java) - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) - startActivity(intent) - finish() - }).show() - } + R.id.reslast_cancel_Button -> ResLast_Control().Dialog_cancel() R.id.reslast_payment_Button ->{ //서버에 포스트로 결제정보 보내기 - Log.d("ResLast_Activity",Gson().toJson(reservation_Entity)) - ResLast_Control().Dialog_res() + ResLast_Control().POST_res() } R.id.reslast_refund_View-> Refund_Dialog(this).create().show() } } + override fun onPause() { + asynctask().cancel(true) + super.onPause() + } } \ No newline at end of file diff --git a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/Reservation_Activity.kt b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/Reservation_Activity.kt index c3588b4..d878979 100644 --- a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/Reservation_Activity.kt +++ b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/Reservation_Activity.kt @@ -1,21 +1,21 @@ package lookid_front.lookid.Activity import android.app.DatePickerDialog +import android.content.DialogInterface import android.content.Intent import android.os.Bundle import android.support.v4.widget.NestedScrollView import android.support.v7.app.AppCompatActivity -import android.support.v7.widget.LinearLayoutManager import android.util.Log import android.view.View import android.widget.* -import com.google.gson.Gson import kotlinx.android.synthetic.main.activity_reservation.* import lookid_front.lookid.Control.* import lookid_front.lookid.Dialog.Address_Dialog import lookid_front.lookid.Dialog.Bank_Dialog -import lookid_front.lookid.Entity.Group_Entity -import lookid_front.lookid.Entity.Reservation_Entity +import lookid_front.lookid.Dialog.Basic_Dialog +import lookid_front.lookid.Entity.Group +import lookid_front.lookid.Entity.Reservation import lookid_front.lookid.R import java.text.DecimalFormat import java.text.SimpleDateFormat @@ -26,8 +26,8 @@ class Reservation_Activity : AppCompatActivity() { var Res_Activity : Reservation_Activity? = null var devicenum : Int = 0; var bank_list = arrayOf("") - var Reservation_Entity = Reservation_Entity() - var group_list = arrayListOf(Group_Entity()) + var Reservation_Entity = Reservation() + var group_list = arrayListOf(Group()) lateinit var group_Adapter : Group_adapter var calendar : Calendar = Calendar.getInstance() val dateFormat = SimpleDateFormat(Date_Control().dateFormat, Locale.KOREA) @@ -48,7 +48,7 @@ class Reservation_Activity : AppCompatActivity() { val user = User_Control(applicationContext).get_user() res_name_EditText.setText(user.name) res_phone_EditText.setText(user.phone) - res_bank_number_EditText.setText(user.bank_number) + res_bank_number_EditText.setText(user.bank_num) res_bank_holder_EditText.setText(user.bank_holder) userinfo_bank_name_TextView.text = user.bank_name } @@ -103,8 +103,7 @@ class Reservation_Activity : AppCompatActivity() { } //예약정보 초기화 var user = User_Control(applicationContext).get_user() - //Reservation_Entity!!.user!!.id = user.id - Reservation_Entity.user.id = "hyoseung" + Reservation_Entity!!.user!!.id = user.id Reservation_Entity.receipt_item = 0 Reservation_Entity.return_item = 0 //스피너 초기화 @@ -116,7 +115,6 @@ class Reservation_Activity : AppCompatActivity() { //그룹 리사이클러뷰 초기화 group_Adapter = Group_adapter(this@Reservation_Activity,group_list) res_grouplist_RecView.adapter = group_Adapter - res_grouplist_RecView.layoutManager = LinearLayoutManager(applicationContext) res_grouplist_RecView.setItemViewCacheSize(100) } @@ -171,18 +169,25 @@ class Reservation_Activity : AppCompatActivity() { bank_Dialog.show() } + fun Dialog_cancel(){ + Basic_Dialog(this@Reservation_Activity,"취소","정말로 뒤로 가시겠습니까?\n작성하신 내용이 초기화 됩니다.", + DialogInterface.OnClickListener { _, _ -> + finish() + },true).show() + } + //결제 정보 초기화 함수 fun res_init():Boolean{ Reservation_Entity.r_name = res_resname_EditText.text.toString() Reservation_Entity.user.name = res_name_EditText.text.toString() Reservation_Entity.user.phone = res_phone_EditText.text.toString() - Reservation_Entity.user.bank_number = res_bank_number_EditText.text.toString() + Reservation_Entity.user.bank_num = res_bank_number_EditText.text.toString() Reservation_Entity.user.bank_holder = res_bank_holder_EditText.text.toString() Reservation_Entity.user.bank_name = userinfo_bank_name_TextView.text.toString() - Reservation_Entity.r_date = dateFormat.format(Date()) - Reservation_Entity.s_date = res_startdate_TextView.text.toString() - Reservation_Entity.e_date = res_enddate_TextView.text.toString() - Reservation_Entity.user.address = res_address_EditText.text.toString() + res_addressDet_EditText.text.toString() + Reservation_Entity.r_date = Date().time + Reservation_Entity.s_date = dateFormat.parse(res_startdate_TextView.text.toString()).time + Reservation_Entity.e_date = dateFormat.parse(res_enddate_TextView.text.toString()).time + Reservation_Entity.user.address = res_address_EditText.text.toString() Reservation_Entity.user.address_detail = res_addressDet_EditText.text.toString() Reservation_Entity.state = 1 Reservation_Entity.group_list = group_Adapter.grouplist @@ -223,12 +228,11 @@ class Reservation_Activity : AppCompatActivity() { R.id.res_resvation_Button ->{ Reservation_Control().pay_init() if(Reservation_Control().res_init()) { + Log.d("Res_Acitivity",Json().reservation(Reservation_Entity)) Toast.makeText(applicationContext, "예약 정보를 모두 입력해주세요", Toast.LENGTH_LONG).show() - Log.d("Res_Acitivity",Reservation_Entity.toString()) - Log.d("Res_Acitivity",Gson().toJson(Reservation_Entity)) return } - Log.d("Res_Acitivity",Reservation_Entity.toString()) + Log.d("Res_Acitivity",Json().reservation(Reservation_Entity)) val intent = Intent(applicationContext, ReservationLast_Activity::class.java) intent.putExtra("res", Reservation_Entity) intent.putExtra("res_devicenum" , group_Adapter.getDevice_num()) @@ -240,4 +244,7 @@ class Reservation_Activity : AppCompatActivity() { R.id.res_enddate_TextView ->Reservation_Control().Dialog_DatePicker(1) } } + override fun onBackPressed() { + Reservation_Control().Dialog_cancel() + } } \ No newline at end of file diff --git a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/SignIn_Activity.kt b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/SignIn_Activity.kt index 4a521a2..6d7b7b8 100644 --- a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/SignIn_Activity.kt +++ b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/SignIn_Activity.kt @@ -1,7 +1,6 @@ package lookid_front.lookid.Activity import android.content.Intent -import android.graphics.Color import android.os.AsyncTask import android.support.v7.app.AppCompatActivity import android.os.Bundle @@ -14,33 +13,31 @@ import kotlinx.android.synthetic.main.activity_signin.* import lookid_front.lookid.Control.Okhttp import lookid_front.lookid.Control.User_Control import lookid_front.lookid.Control.Json -import lookid_front.lookid.Dialog.Refund2_Dialog -import lookid_front.lookid.Entity.User_Entity +import lookid_front.lookid.Entity.User import lookid_front.lookid.R -import lookid_front.lookid.View.StateEditText import org.json.JSONObject class SignIn_Activity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_signin) - - //자동 로그인 상태 초기화 - login_auto_CheckBox.isChecked = User_Control(applicationContext).get_auto_login() - //자동 로그인 확인 및 페이지 이동 - if(User_Control(applicationContext).get_auto_login() && !User_Control(applicationContext).get_token().isNullOrEmpty()) { - startActivity(Intent(applicationContext, Main_Activity::class.java)) - finish() - } - Login_Control().edit_init() + Login_Control().init() } - inner class Login_Control { + fun init(){ + //자동 로그인 상태 초기화 + login_auto_CheckBox.isChecked = User_Control(applicationContext).get_auto_login() + //자동 로그인 확인 및 페이지 이동 + if(User_Control(applicationContext).get_auto_login() && !User_Control(applicationContext).get_token().isNullOrEmpty()) { + startActivity(Intent(applicationContext, Main_Activity::class.java)) + finish() + } + edit_init() + } fun edit_init(){ login_id_EditText.addTextChangedListener(EditListener()) login_pw_EditText.addTextChangedListener(EditListener()) } - fun edit_check() : Boolean{ if(login_id_EditText.text.isNullOrEmpty() && login_pw_EditText.text.isNullOrEmpty()) { Toast.makeText(applicationContext, "아이디와 비밀번호를 입력해주세요", Toast.LENGTH_LONG).show() @@ -56,21 +53,18 @@ class SignIn_Activity : AppCompatActivity() { } return true } - fun POST_login(id : String, pw : String){ val url = getString(R.string.server_url) + getString(R.string.sign_in) asynctask().execute(url,id,pw) } } - inner class asynctask : AsyncTask(){ + var url = "" override fun doInBackground(vararg params: String): String { - var url = params[0] - - var id = params[1] - var pw = params[2] - - return Okhttp().POST(url, Json().login(id,pw)) + url = params[0] + val id = params[1] + val pw = params[2] + return Okhttp(applicationContext).POST(url, Json().login(id,pw)) } override fun onPostExecute(response: String) { //넘어온 값이 없을 때 로그 찍고 리턴 @@ -79,42 +73,43 @@ class SignIn_Activity : AppCompatActivity() { Log.d("SignIn_Activity", "null in") return } + Log.d("SignIn_Activity",url) + Log.d("SignIn_Activity",response) //response 값이 json문이 아니면 통신 오류 메세지 출력 if(!Json().isJson(response)){ Toast.makeText(applicationContext,"네트워크 통신 오류",Toast.LENGTH_SHORT).show() - Log.d("SignIn_Activity",response) return } - - var jsonObj = JSONObject(response) - var user = User_Entity( + val jsonObj = JSONObject(response) + val user = User( login_id_EditText.text.toString(), jsonObj.getString("name"), jsonObj.getString("phone"), - jsonObj.getString("email"), + jsonObj.getString("mail"), jsonObj.getString("address"), jsonObj.getString("bank_name"), jsonObj.getString("bank_num"), jsonObj.getString("bank_holder") ) + if(user.name == "null"){ + Toast.makeText(applicationContext,"아이디가 없거나 비밀번호가 틀렸습니다",Toast.LENGTH_SHORT).show() + return + } User_Control(applicationContext).set_user(user) - startActivity(Intent(applicationContext, Main_Activity::class.java)) + startActivity(Intent(applicationContext, Main_Activity::class.java).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)) finish() } } - //Activity 클릭 리스너 fun login_Click_Listener(view :View){ when(view.id){ R.id.login_login_Button ->{ if(Login_Control().edit_check()) { - //Login_Control().POST_login(login_id_EditText.text.toString(), login_pw_EditText.text.toString()) - startActivity(Intent(applicationContext, Main_Activity::class.java)) - finish() + Login_Control().POST_login(login_id_EditText.text.toString(), login_pw_EditText.text.toString()) } } - R.id.login_signup_Button ->startActivity(Intent(applicationContext, SignUp_Activity::class.java)) - R.id.login_find_info_TextView ->startActivity(Intent(applicationContext, FindInfo_Activity::class.java)) + R.id.login_signup_Button ->startActivity(Intent(applicationContext, SignUp_Activity::class.java).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)) + R.id.login_find_info_TextView ->startActivity(Intent(applicationContext, FindInfo_Activity::class.java).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)) R.id.login_auto_CheckBox -> { User_Control(applicationContext).set_auto_login(login_auto_CheckBox.isChecked) } } } @@ -126,9 +121,11 @@ class SignIn_Activity : AppCompatActivity() { login_login_Button.isEnabled = false } override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { } - override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { - //signup_signup_Button.isEnabled = false - } + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { } + } + override fun onPause() { + asynctask().cancel(true) + super.onPause() } } diff --git a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/SignUp_Activity.kt b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/SignUp_Activity.kt index 76f873f..1dac8ba 100644 --- a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/SignUp_Activity.kt +++ b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/SignUp_Activity.kt @@ -2,7 +2,6 @@ package lookid_front.lookid.Activity import android.app.AlertDialog import android.content.DialogInterface -import android.graphics.Color import android.os.AsyncTask import android.support.v7.app.AppCompatActivity import android.os.Bundle @@ -11,20 +10,18 @@ import android.text.TextWatcher import android.util.Log import android.view.View import android.widget.* -import com.google.gson.Gson import kotlinx.android.synthetic.main.activity_signup.* import lookid_front.lookid.Dialog.Loading_Dialog import lookid_front.lookid.Control.Okhttp import lookid_front.lookid.Control.Json import lookid_front.lookid.Dialog.Address_Dialog import lookid_front.lookid.Dialog.Bank_Dialog -import lookid_front.lookid.Entity.Reservation_Entity -import lookid_front.lookid.Entity.User_Entity +import lookid_front.lookid.Entity.User import lookid_front.lookid.R import org.json.JSONObject class SignUp_Activity : AppCompatActivity() { - var user : User_Entity? = null + var user : User? = null var checkId : Boolean = false override fun onCreate(savedInstanceState: Bundle?) { @@ -33,56 +30,46 @@ class SignUp_Activity : AppCompatActivity() { //Id_edittext 리스너 장착 signup_id_EditText.addTextChangedListener(EditListener()) - } inner class SignUp_Control{ fun edit_check() : Boolean{ //필수 사항 EditText id값 array - val editArray = arrayListOf(R.id.signup_name_EditText, R.id.signup_pw_EditText, R.id.signup_pw2_EditText, R.id.signup_name_EditText, + val editArray = arrayListOf(R.id.signup_name_EditText, R.id.signup_pw_EditText, R.id.signup_pw2_EditText, R.id.signup_name_EditText, R.id.signup_phone_EditText, R.id.signup_email_EditText) - - //해당 EditText 값이 비었는지 체크 - for(i in 0 until editArray.size){ - val editText : EditText = findViewById(editArray[i]) + for(i in editArray){//해당 EditText 값이 비었는지 체크 + val editText : EditText = findViewById(i) if(editText.text.isNullOrEmpty()) { Toast.makeText(applicationContext,"필수 정보를 입력해주세요",Toast.LENGTH_SHORT).show() return false } } - //1차 비밀번호와 2차 비밀번호 같은지 확인 if(!signup_pw_EditText.text.toString().equals(signup_pw2_EditText.text.toString())){ Toast.makeText(applicationContext,"1차 2차 비밀번호가 다릅니다",Toast.LENGTH_SHORT).show() return false } - return true } - fun GET_Check(id : String){ val url = getString(R.string.server_url) + getString(R.string.check_id) + id asynctask().execute("0",url) } - fun POST_SignUp(pw : String){ val url = getString(R.string.server_url) + getString(R.string.sign_up) asynctask().execute("1",url,pw) } - fun Dialog_Signup(){ - var builder = AlertDialog.Builder(this@SignUp_Activity) + val builder = AlertDialog.Builder(this@SignUp_Activity) builder.setMessage("회원가입 성공") builder.setCancelable(false) builder.setPositiveButton("확인") { dialog, which -> finish() } builder.show() } - fun Dialog_search_Address(){ val address_Dialog = Address_Dialog(this@SignUp_Activity, signup_address_TextView) address_Dialog.show() } - fun Dialog_bankname(){ val bank_Dialog = Bank_Dialog(this@SignUp_Activity,signup_bank_name_TextView.text.toString()) bank_Dialog.setOnShowListener(Dialog_Listener()) @@ -93,15 +80,13 @@ class SignUp_Activity : AppCompatActivity() { inner class asynctask : AsyncTask(){ var state : Int = -1 //state == 0 : GET_아이디 중복확인, state == 1 : POST_회원가입 var loadingDialog = Loading_Dialog(this@SignUp_Activity) - override fun onPreExecute() { - loadingDialog.show() - } + //loadingDialog.show() + } override fun doInBackground(vararg params: String): String { state = Integer.parseInt(params[0]) - var url = params[1] + val url = params[1] var response : String = "" - when (state){ 0->response = Okhttp().GET(url) 1->{ @@ -113,15 +98,14 @@ class SignUp_Activity : AppCompatActivity() { } override fun onPostExecute(response: String) { + //loadingDialog.dismiss() if(response.isEmpty()) { Log.d("SignUp_Activity", "null") - loadingDialog.dismiss() return } if(!Json().isJson(response)){ Toast.makeText(applicationContext,"네트워크 통신 오류", Toast.LENGTH_SHORT).show() Log.d("SignUp_Activity",response) - loadingDialog.dismiss() return } @@ -181,7 +165,6 @@ class SignUp_Activity : AppCompatActivity() { Toast.makeText(applicationContext,"중복확인이 필요합니다",Toast.LENGTH_SHORT).show() return } - if(SignUp_Control().edit_check()){ //필수 입력 정보 체크 val id = signup_id_EditText.text.toString() val name = signup_name_EditText.text.toString() @@ -193,9 +176,8 @@ class SignUp_Activity : AppCompatActivity() { val bank_number = signup_bank_number_EditText.text.toString() val bank_holder = signup_bank_holder_EditText.text.toString() val pw = signup_pw2_EditText.text.toString() - user = User_Entity(id,name,phone,email,address,bank_name,bank_number,bank_holder) + user = User(id,name,phone,email,address,bank_name,bank_number,bank_holder) user!!.address_detail = address_detail - SignUp_Control().POST_SignUp(pw) } } @@ -203,13 +185,15 @@ class SignUp_Activity : AppCompatActivity() { R.id.signup_findadd_Button->SignUp_Control().Dialog_search_Address() } } - inner class EditListener : TextWatcher { override fun afterTextChanged(s: Editable?) { signup_idcheck_Button.isEnabled = !s.isNullOrEmpty() } override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { } override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { checkId = false - //signup_signup_Button.isEnabled = false } } + override fun onPause() { + asynctask().cancel(true) + super.onPause() + } } diff --git a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/UserInfo_Activity.kt b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/UserInfo_Activity.kt index bff693d..6ea564f 100644 --- a/LOOKID/app/src/main/java/lookid_front/lookid/Activity/UserInfo_Activity.kt +++ b/LOOKID/app/src/main/java/lookid_front/lookid/Activity/UserInfo_Activity.kt @@ -17,30 +17,25 @@ import lookid_front.lookid.Control.Okhttp import lookid_front.lookid.Control.User_Control import lookid_front.lookid.Dialog.Address_Dialog import lookid_front.lookid.Dialog.Bank_Dialog -import lookid_front.lookid.Entity.User_Entity +import lookid_front.lookid.Entity.User import lookid_front.lookid.R -import lookid_front.lookid.R.id.* import org.json.JSONObject class UserInfo_Activity : AppCompatActivity() { var editmode : Boolean = false var bank_list = arrayOf("") - var user_upload : User_Entity? = null - + var user_upload : User? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_userinfo) - - //UserText 초기화 UserInfo_Control().user_init() } - inner class UserInfo_Control{ fun user_init(){ editmode = false val editary = arrayListOf(userinfo_name_EditText, userinfo_phone_EditText, userinfo_email_EditText, userinfo_addressDet_EditText, userinfo_bank_number_EditText, userinfo_bank_holder_EditText, userinfo_findadd_Button) - var user : User_Entity = User_Control(applicationContext).get_user() + val user : User = User_Control(applicationContext).get_user() for(i in 0 until editary.size) editary[i].isEnabled = false @@ -52,7 +47,7 @@ class UserInfo_Activity : AppCompatActivity() { userinfo_address_TextView.text = user.address userinfo_addressDet_EditText.setText(user.address_detail) userinfo_bank_name_TextView.text = user.bank_name - userinfo_bank_number_EditText.setText(user.bank_number) + userinfo_bank_number_EditText.setText(user.bank_num) userinfo_bank_holder_EditText.setText(user.bank_holder) } @@ -67,27 +62,23 @@ class UserInfo_Activity : AppCompatActivity() { userinfo_bank_name_Button.visibility = View.VISIBLE userinfo_findadd_Button.isEnabled = true } - fun user_modfiy_go(){ if(edit_check()){ //0. User init - val user : User_Entity = User_Control(applicationContext).get_user() - + val user : User = User_Control(applicationContext).get_user() user.name = userinfo_name_EditText.text.toString() user.phone = userinfo_phone_EditText.text.toString() user.email = userinfo_email_EditText.text.toString() user.address = userinfo_address_TextView.text.toString() user.address_detail = userinfo_addressDet_EditText.text.toString() user.bank_name = userinfo_bank_name_TextView.text.toString() - user.bank_number = userinfo_bank_number_EditText.text.toString() + user.bank_num = userinfo_bank_number_EditText.text.toString() user.bank_holder = userinfo_bank_holder_EditText.text.toString() //1. User_Control update User_Control(applicationContext).set_user(user) userinfo_modify_Button.background = getDrawable(R.drawable.icon_modify) - //2. server update PUT_user_modify(user) - user_init() } } @@ -135,14 +126,14 @@ class UserInfo_Activity : AppCompatActivity() { address_Dialog.show() } - fun PUT_user_modify(user : User_Entity){ - val url = getString(R.string.server_url) + fun PUT_user_modify(user : User){ + val url = getString(R.string.server_url) + getString(R.string.user_modify) user_upload = user asynctask().execute("0",url) } fun PUT_pw_modify(pw : String){ - val url = getString(R.string.server_url) + val url = getString(R.string.server_url) + getString(R.string.user_modify_pw) asynctask().execute("1",url,pw) } } @@ -153,12 +144,10 @@ class UserInfo_Activity : AppCompatActivity() { override fun onPreExecute() { loadingDialog.show() } - override fun doInBackground(vararg params: String): String { state = Integer.parseInt(params[0]) - var url = params[1] + val url = params[1] var response : String = "" - when (state){ 0->response = Okhttp(applicationContext).PUT(url, Json().modify_user(user_upload)) 1-> { @@ -168,20 +157,18 @@ class UserInfo_Activity : AppCompatActivity() { } return response } - override fun onPostExecute(response: String) { if(response.isEmpty()) { Log.d("UserInfo_Activity", "null") loadingDialog.dismiss() return } + Log.d("UserInfo_Activity",response) if(!Json().isJson(response)){ Toast.makeText(applicationContext,"네트워크 통신 오류", Toast.LENGTH_SHORT).show() - Log.d("UserInfo_Activity",response) loadingDialog.dismiss() return } - val jsonObj = JSONObject(response) when (state){ 0->{ @@ -192,16 +179,13 @@ class UserInfo_Activity : AppCompatActivity() { else Toast.makeText(applicationContext,"사용자 정보 변경 실패",Toast.LENGTH_LONG).show() } 1->{ - if(jsonObj.getBoolean("success")) { - Toast.makeText(applicationContext, "정보가 변경되었습니다", Toast.LENGTH_LONG).show() - } + if(jsonObj.getBoolean("success")) Toast.makeText(applicationContext, "정보가 변경되었습니다", Toast.LENGTH_LONG).show() else Toast.makeText(applicationContext,"사용자 정보 변경 실패",Toast.LENGTH_LONG).show() } } loadingDialog.dismiss() } } - //Activity 클릭 리스너 fun userinfo_Click_Listener(view : View){ when (view.id){ @@ -210,16 +194,13 @@ class UserInfo_Activity : AppCompatActivity() { UserInfo_Control().user_modify() userinfo_modify_Button.background = getDrawable(R.drawable.icon_save) } - else { - UserInfo_Control().Dialog_make_sure() - } + else UserInfo_Control().Dialog_make_sure() } R.id.userinfo_pwchange_Button ->{ UserInfo_Control().Dialog_pw_change() } R.id.userinfo_bank_name_Button -> { UserInfo_Control().Dialog_bankname()} R.id.userinfo_findadd_Button ->{ UserInfo_Control().Dialog_search_Address()} } } - inner class Dialog_Listener : DialogInterface.OnShowListener{ override fun onShow(dialog: DialogInterface?) { val alert = dialog as AlertDialog @@ -233,7 +214,6 @@ class UserInfo_Activity : AppCompatActivity() { } } } - fun checkpw(pw1 : String, pw2 : String) : Boolean{ if(pw1.isEmpty() || pw2.isEmpty()) { Toast.makeText(applicationContext,"비밀번호를 입력해주세요",Toast.LENGTH_SHORT).show() @@ -246,4 +226,8 @@ class UserInfo_Activity : AppCompatActivity() { return true } } + override fun onPause() { + asynctask().cancel(true) + super.onPause() + } } \ No newline at end of file diff --git a/LOOKID/app/src/main/java/lookid_front/lookid/Control/Admin_adapter.kt b/LOOKID/app/src/main/java/lookid_front/lookid/Control/Admin_adapter.kt index 3477c7e..ec76eac 100644 --- a/LOOKID/app/src/main/java/lookid_front/lookid/Control/Admin_adapter.kt +++ b/LOOKID/app/src/main/java/lookid_front/lookid/Control/Admin_adapter.kt @@ -5,12 +5,15 @@ import android.support.v7.widget.RecyclerView import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.TextView import android.widget.Toast -import lookid_front.lookid.Entity.Admin_Entity +import lookid_front.lookid.Entity.Admin import lookid_front.lookid.R -class Admin_adapter(val context: Context, val adminlist: ArrayList) : RecyclerView.Adapter() { +class Admin_adapter(val context: Context, val adminlist: ArrayList) : RecyclerView.Adapter() { + var delete : Boolean = false + constructor(context: Context, adminlist: ArrayList, delete : Boolean) : this(context,adminlist){this.delete = delete} override fun onCreateViewHolder(p0: ViewGroup, p1: Int): holder { val view = LayoutInflater.from(context).inflate(R.layout.row_res_admin,p0,false) return holder(view) @@ -20,12 +23,22 @@ class Admin_adapter(val context: Context, val adminlist: ArrayList inner class holder(view : View) : RecyclerView.ViewHolder(view) { val admin_TextView = view.findViewById(R.id.res_group_admin_TextView) - fun bind(context: Context, admin : Admin_Entity,index : Int) { + val admin_delete_Button = view.findViewById