From 025c3202291c8bde33f90c16a1dc6e17f8955e65 Mon Sep 17 00:00:00 2001 From: Jujin Date: Sat, 9 Feb 2019 02:31:22 +0900 Subject: [PATCH 01/71] =?UTF-8?q?ScrollView=20=EB=8C=80=EC=8B=A0=20NestedS?= =?UTF-8?q?crollView=EB=A1=9C=20=EB=A9=94=EC=9D=B8=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=EB=A5=BC=20=EA=B0=90=EC=8C=88.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 메인페이지 하단에 recyclerView가 있기 때문에 nestedScrollView로 감싸야함. 이렇게 하면 관성스크롤 됨. --- .../mashup/loling/Fragment/FriendListFragment.kt | 12 +++++------- app/src/main/res/layout/activity_main.xml | 4 ++-- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/mashup/loling/Fragment/FriendListFragment.kt b/app/src/main/java/mashup/loling/Fragment/FriendListFragment.kt index f39a645..a96dbbf 100644 --- a/app/src/main/java/mashup/loling/Fragment/FriendListFragment.kt +++ b/app/src/main/java/mashup/loling/Fragment/FriendListFragment.kt @@ -3,10 +3,10 @@ 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 kotlinx.android.synthetic.main.recyclerview.view.* import mashup.loling.Adapter.FriendItemAdapter import mashup.loling.model.FriendItem import mashup.loling.R @@ -18,12 +18,10 @@ class FriendListFragment : 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 = FriendItemAdapter(friends) - } + root.recyclerView.layoutManager = LinearLayoutManager(context) + root.recyclerView.isNestedScrollingEnabled = false + makeFriendList() + root.recyclerView.adapter = FriendItemAdapter(friends) return root diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 34d748e..e2a2d0b 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - @@ -97,5 +97,5 @@ app:layout_constraintTop_toBottomOf="@+id/ivMainFriendMsg" /> - + From 295501bcdf08b1f8bb5ee09b546fecb27c83e0c1 Mon Sep 17 00:00:00 2001 From: pengin7384 Date: Sat, 9 Feb 2019 04:56:42 +0900 Subject: [PATCH 02/71] implementation rxjava, retrofit, lifecycle & enable databinding --- app/build.gradle | 18 ++++++++++++++++-- app/src/main/AndroidManifest.xml | 2 +- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2e828e1..d6828bc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,17 +20,31 @@ 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" +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bbaa63b..754e617 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -24,8 +24,8 @@ - + From 2caf1cd39e5a33eda8ed8f1859be5d273b85afff Mon Sep 17 00:00:00 2001 From: pengin7384 Date: Sat, 9 Feb 2019 04:57:34 +0900 Subject: [PATCH 03/71] Layout DataBinding --- app/src/main/res/layout/activity_login.xml | 159 +++++++++++---------- 1 file changed, 87 insertions(+), 72 deletions(-) diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 9e04146..a3b832b 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -1,80 +1,95 @@ - + xmlns:tools="http://schemas.android.com/tools"> - - + + + + - - + android:layout_height="match_parent" + android:padding="@dimen/LoginActivityPadding" + tools:context=".user.view.LoginActivity"> - - \ No newline at end of file + + + + + + + + + + + + \ No newline at end of file From 007ebb9b8aebd68bad39e18c6507978cbf8ba6d5 Mon Sep 17 00:00:00 2001 From: pengin7384 Date: Sat, 9 Feb 2019 04:58:27 +0900 Subject: [PATCH 04/71] Add BaseActivity, LoginActivity --- .../main/java/mashup/loling/BaseActivity.kt | 19 +++++++++ .../mashup/loling/user/view/LoginActivity.kt | 42 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 app/src/main/java/mashup/loling/BaseActivity.kt create mode 100644 app/src/main/java/mashup/loling/user/view/LoginActivity.kt 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..d473b21 --- /dev/null +++ b/app/src/main/java/mashup/loling/BaseActivity.kt @@ -0,0 +1,19 @@ +package mashup.loling + + +import android.databinding.DataBindingUtil +import android.databinding.ViewDataBinding +import android.os.Bundle +import android.support.v7.app.AppCompatActivity +import mashup.loling.user.viewmodel.DisposableViewModel + +abstract class BaseActivity: AppCompatActivity(){ + 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/user/view/LoginActivity.kt b/app/src/main/java/mashup/loling/user/view/LoginActivity.kt new file mode 100644 index 0000000..5f3bf68 --- /dev/null +++ b/app/src/main/java/mashup/loling/user/view/LoginActivity.kt @@ -0,0 +1,42 @@ +package mashup.loling.user.view + +import android.arch.lifecycle.Observer +import android.arch.lifecycle.ViewModelProviders +import android.databinding.DataBindingUtil.getBinding +import android.databinding.DataBindingUtil.setContentView +import android.support.v7.app.AppCompatActivity +import android.os.Bundle +import android.util.Log +import android.view.View +import io.reactivex.disposables.CompositeDisposable +import mashup.loling.BaseActivity +import mashup.loling.R +import mashup.loling.databinding.ActivityLoginBinding +import mashup.loling.user.model.UserRepository +import mashup.loling.user.viewmodel.UserViewModel +import mashup.loling.user.viewmodel.UserViewModelFactory +import android.databinding.adapters.TextViewBindingAdapter.setText + + +class LoginActivity : BaseActivity() { + private val mDisposable : CompositeDisposable = CompositeDisposable() + private lateinit var userViewModel : UserViewModel + override val layoutResourceId: Int = R.layout.activity_login + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + userViewModel = ViewModelProviders.of(this, UserViewModelFactory(UserRepository())).get(UserViewModel::class.java) + + + viewDataBinding.setLifecycleOwner(this) + } + + override fun onStop() { + super.onStop() + mDisposable.dispose() + } + + + +} From 0e799cc6035a14038d16e7c741e2a28c3cd37a18 Mon Sep 17 00:00:00 2001 From: pengin7384 Date: Sat, 9 Feb 2019 04:59:04 +0900 Subject: [PATCH 05/71] Add UserViewModel --- .../user/viewmodel/DisposableViewModel.kt | 19 ++++++++ .../loling/user/viewmodel/UserViewModel.kt | 44 +++++++++++++++++++ .../user/viewmodel/UserViewModelFactory.kt | 11 +++++ 3 files changed, 74 insertions(+) create mode 100644 app/src/main/java/mashup/loling/user/viewmodel/DisposableViewModel.kt create mode 100644 app/src/main/java/mashup/loling/user/viewmodel/UserViewModel.kt create mode 100644 app/src/main/java/mashup/loling/user/viewmodel/UserViewModelFactory.kt diff --git a/app/src/main/java/mashup/loling/user/viewmodel/DisposableViewModel.kt b/app/src/main/java/mashup/loling/user/viewmodel/DisposableViewModel.kt new file mode 100644 index 0000000..7bb3732 --- /dev/null +++ b/app/src/main/java/mashup/loling/user/viewmodel/DisposableViewModel.kt @@ -0,0 +1,19 @@ +package mashup.loling.user.viewmodel + +import android.arch.lifecycle.ViewModel +import io.reactivex.disposables.CompositeDisposable +import io.reactivex.disposables.Disposable + +open class DisposableViewModel: ViewModel() { + + private val compositeDisposable = CompositeDisposable() + + fun addDisposable(disposable: Disposable) { + compositeDisposable.add(disposable) + } + + override fun onCleared() { + compositeDisposable.clear() + super.onCleared() + } +} \ No newline at end of file diff --git a/app/src/main/java/mashup/loling/user/viewmodel/UserViewModel.kt b/app/src/main/java/mashup/loling/user/viewmodel/UserViewModel.kt new file mode 100644 index 0000000..c2cc6bc --- /dev/null +++ b/app/src/main/java/mashup/loling/user/viewmodel/UserViewModel.kt @@ -0,0 +1,44 @@ +package mashup.loling.user.viewmodel + +import android.arch.lifecycle.LiveData +import android.arch.lifecycle.MutableLiveData +import android.util.Log +import io.reactivex.Single +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.schedulers.Schedulers +import mashup.loling.R.string.id +import mashup.loling.user.model.UserRepository + +class UserViewModel(private val repository: UserRepository) : DisposableViewModel() { + + fun register(id: String, pw: String) { + addDisposable(repository.registerFromRemote(id, pw) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ + TODO("응답 처리") + }, { + Log.d(this.javaClass.name, "fun register() error") + })) + } + + fun login(id: String, pw: String) { + Log.v("csh","login"+id+pw) + addDisposable(repository.loginFromRemote(id, pw) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ + TODO("응답 처리") + }, { + Log.d(this.javaClass.name, "fun login() error") + })) + } + + + + + + + + +} \ No newline at end of file diff --git a/app/src/main/java/mashup/loling/user/viewmodel/UserViewModelFactory.kt b/app/src/main/java/mashup/loling/user/viewmodel/UserViewModelFactory.kt new file mode 100644 index 0000000..b6500f9 --- /dev/null +++ b/app/src/main/java/mashup/loling/user/viewmodel/UserViewModelFactory.kt @@ -0,0 +1,11 @@ +package mashup.loling.user.viewmodel + +import android.arch.lifecycle.ViewModel +import android.arch.lifecycle.ViewModelProvider +import mashup.loling.user.model.UserRepository + +class UserViewModelFactory(private val repository: UserRepository): ViewModelProvider.Factory { + override fun create(modelClass: Class): T { + return UserViewModel(repository) as T + } +} \ No newline at end of file From 4f31fb168a3416f51a639ab4bd5bd5b60bc3f1b5 Mon Sep 17 00:00:00 2001 From: pengin7384 Date: Sat, 9 Feb 2019 04:59:26 +0900 Subject: [PATCH 06/71] Add UserAPI --- .../java/mashup/loling/user/api/Response.kt | 4 ++++ .../main/java/mashup/loling/user/api/UserApi.kt | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 app/src/main/java/mashup/loling/user/api/Response.kt create mode 100644 app/src/main/java/mashup/loling/user/api/UserApi.kt diff --git a/app/src/main/java/mashup/loling/user/api/Response.kt b/app/src/main/java/mashup/loling/user/api/Response.kt new file mode 100644 index 0000000..89a9f1a --- /dev/null +++ b/app/src/main/java/mashup/loling/user/api/Response.kt @@ -0,0 +1,4 @@ +package mashup.loling.user.api + +data class Response(val result: String) { +} \ No newline at end of file diff --git a/app/src/main/java/mashup/loling/user/api/UserApi.kt b/app/src/main/java/mashup/loling/user/api/UserApi.kt new file mode 100644 index 0000000..a8bf2b2 --- /dev/null +++ b/app/src/main/java/mashup/loling/user/api/UserApi.kt @@ -0,0 +1,17 @@ +package mashup.loling.user.api + +import io.reactivex.Single +import retrofit2.http.GET +import retrofit2.http.Query + +interface UserApi { + @GET("login") + fun login( + @Query("id") id: String, + @Query("pw") pw: String) : Single + + @GET("register") + fun register( + @Query("id") id: String, + @Query("pw") pw: String) : Single +} \ No newline at end of file From 2ef62058a583f9341e54cab4918253bd8dd219bf Mon Sep 17 00:00:00 2001 From: pengin7384 Date: Sat, 9 Feb 2019 04:59:48 +0900 Subject: [PATCH 07/71] Add UserModel --- .../loling/user/model/UserDataSource.kt | 11 +++++ .../loling/user/model/UserRemoteData.kt | 41 +++++++++++++++++++ .../loling/user/model/UserRepository.kt | 21 ++++++++++ 3 files changed, 73 insertions(+) create mode 100644 app/src/main/java/mashup/loling/user/model/UserDataSource.kt create mode 100644 app/src/main/java/mashup/loling/user/model/UserRemoteData.kt create mode 100644 app/src/main/java/mashup/loling/user/model/UserRepository.kt diff --git a/app/src/main/java/mashup/loling/user/model/UserDataSource.kt b/app/src/main/java/mashup/loling/user/model/UserDataSource.kt new file mode 100644 index 0000000..7c6d5bc --- /dev/null +++ b/app/src/main/java/mashup/loling/user/model/UserDataSource.kt @@ -0,0 +1,11 @@ +package mashup.loling.user.model + +import io.reactivex.Single + +interface UserDataSource { + + fun login(id: String, pw:String): Single + + fun register(id: String, pw:String): Single + +} \ No newline at end of file diff --git a/app/src/main/java/mashup/loling/user/model/UserRemoteData.kt b/app/src/main/java/mashup/loling/user/model/UserRemoteData.kt new file mode 100644 index 0000000..84cf927 --- /dev/null +++ b/app/src/main/java/mashup/loling/user/model/UserRemoteData.kt @@ -0,0 +1,41 @@ +package mashup.loling.user.model + +import io.reactivex.Single +import mashup.loling.user.api.UserApi +import retrofit2.Retrofit +import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory +import retrofit2.converter.gson.GsonConverterFactory + + +class UserRemoteData : UserDataSource { + object UserRemoteData + + override fun register(id: String, pw: String): Single { + var retrofit = Retrofit.Builder() + .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) + .addConverterFactory(GsonConverterFactory.create()) + .baseUrl("http://www.www.www/") + .build() + .create(UserApi::class.java) + + return retrofit.register(id, pw) + .map { response -> + response.result + } + } + + override fun login(id: String, pw: String): Single { + var retrofit = Retrofit.Builder() + .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) + .addConverterFactory(GsonConverterFactory.create()) + .baseUrl("http://www.www.www/") + .build() + .create(UserApi::class.java) + + return retrofit.login(id, pw) + .map { response -> + response.result + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/mashup/loling/user/model/UserRepository.kt b/app/src/main/java/mashup/loling/user/model/UserRepository.kt new file mode 100644 index 0000000..9d990fe --- /dev/null +++ b/app/src/main/java/mashup/loling/user/model/UserRepository.kt @@ -0,0 +1,21 @@ +package mashup.loling.user.model + +import io.reactivex.Single + +class UserRepository { + object UserRepository + + private val userRemoteData = UserRemoteData() + + fun registerFromRemote(id: String, pw: String) : Single { + return userRemoteData.register(id, pw) + } + + fun loginFromRemote(id: String, pw: String) : Single { + return userRemoteData.login(id, pw) + } + + + + +} \ No newline at end of file From 24c7054a6f561978ab33e5dbc76c4ad9a8801364 Mon Sep 17 00:00:00 2001 From: Jujin Date: Sat, 9 Feb 2019 04:11:21 +0900 Subject: [PATCH 08/71] =?UTF-8?q?=EB=B0=A9=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EC=95=A1=ED=8B=B0=EB=B9=84=ED=8B=B0,=20?= =?UTF-8?q?=ED=94=84=EB=9E=98=EA=B7=B8=EB=A8=BC=ED=8A=B8,=20=EB=B7=B0=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 + .../mashup/loling/room/CreateRoomActivity.kt | 20 ++++++ .../loling/room/CreateRoomCalendarFragment.kt | 36 ++++++++++ .../loling/room/CreateRoomMainFragment.kt | 40 +++++++++++ .../room/CreateRoomNewOrEnterFragment.kt | 37 ++++++++++ .../loling/room/CreateRoomPagerAdapter.kt | 26 +++++++ .../drawable/textview_bottom_border_black.xml | 9 +++ .../main/res/layout/activity_create_room.xml | 26 +++++++ .../layout/fragment_create_room_calendar.xml | 35 ++++++++++ .../res/layout/fragment_create_room_main.xml | 52 ++++++++++++++ .../fragment_create_room_new_or_enter.xml | 67 +++++++++++++++++++ app/src/main/res/values/dimens.xml | 3 + app/src/main/res/values/strings.xml | 12 ++++ app/src/main/res/values/styles.xml | 4 ++ 14 files changed, 369 insertions(+) create mode 100644 app/src/main/java/mashup/loling/room/CreateRoomActivity.kt create mode 100644 app/src/main/java/mashup/loling/room/CreateRoomCalendarFragment.kt create mode 100644 app/src/main/java/mashup/loling/room/CreateRoomMainFragment.kt create mode 100644 app/src/main/java/mashup/loling/room/CreateRoomNewOrEnterFragment.kt create mode 100644 app/src/main/java/mashup/loling/room/CreateRoomPagerAdapter.kt create mode 100644 app/src/main/res/drawable/textview_bottom_border_black.xml create mode 100644 app/src/main/res/layout/activity_create_room.xml create mode 100644 app/src/main/res/layout/fragment_create_room_calendar.xml create mode 100644 app/src/main/res/layout/fragment_create_room_main.xml create mode 100644 app/src/main/res/layout/fragment_create_room_new_or_enter.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bbaa63b..21dfe77 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,6 +9,8 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> + diff --git a/app/src/main/java/mashup/loling/room/CreateRoomActivity.kt b/app/src/main/java/mashup/loling/room/CreateRoomActivity.kt new file mode 100644 index 0000000..cc699ff --- /dev/null +++ b/app/src/main/java/mashup/loling/room/CreateRoomActivity.kt @@ -0,0 +1,20 @@ +package mashup.loling.room + +import android.support.v7.app.AppCompatActivity +import android.os.Bundle +import android.view.WindowManager +import kotlinx.android.synthetic.main.activity_create_room.* +import mashup.loling.R + +class CreateRoomActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_create_room) + window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT) + + createRoomViewPager.adapter = CreateRoomPagerAdapter(supportFragmentManager) + createRoomViewPager.currentItem = 1 + + } +} diff --git a/app/src/main/java/mashup/loling/room/CreateRoomCalendarFragment.kt b/app/src/main/java/mashup/loling/room/CreateRoomCalendarFragment.kt new file mode 100644 index 0000000..350447f --- /dev/null +++ b/app/src/main/java/mashup/loling/room/CreateRoomCalendarFragment.kt @@ -0,0 +1,36 @@ +package mashup.loling.room + +import android.os.Bundle +import android.support.v4.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup + +import mashup.loling.R + +class CreateRoomCalendarFragment : Fragment() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle?): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_create_room_calendar, container, false) + } + + companion object { + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @return A new instance of fragment CreateRoomCalendarFragment. + */ + @JvmStatic + fun newInstance() = + CreateRoomCalendarFragment().apply { + + } + } +} diff --git a/app/src/main/java/mashup/loling/room/CreateRoomMainFragment.kt b/app/src/main/java/mashup/loling/room/CreateRoomMainFragment.kt new file mode 100644 index 0000000..d593814 --- /dev/null +++ b/app/src/main/java/mashup/loling/room/CreateRoomMainFragment.kt @@ -0,0 +1,40 @@ +package mashup.loling.room + +import android.os.Bundle +import android.support.v4.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup + +import mashup.loling.R + +class CreateRoomMainFragment : Fragment() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle?): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_create_room_main, container, false) + } + + override fun onDetach() { + super.onDetach() + } + + companion object { + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @return A new instance of fragment CreateRoomMainFragment. + */ + @JvmStatic + fun newInstance() = + CreateRoomMainFragment().apply { + + } + } +} diff --git a/app/src/main/java/mashup/loling/room/CreateRoomNewOrEnterFragment.kt b/app/src/main/java/mashup/loling/room/CreateRoomNewOrEnterFragment.kt new file mode 100644 index 0000000..b9179eb --- /dev/null +++ b/app/src/main/java/mashup/loling/room/CreateRoomNewOrEnterFragment.kt @@ -0,0 +1,37 @@ +package mashup.loling.room + +import android.os.Bundle +import android.support.v4.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup + +import mashup.loling.R + +class CreateRoomNewOrEnterFragment : Fragment() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle?): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_create_room_new_or_enter, container, false) + } + + companion object { + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @return A new instance of fragment CreateRoomNewOrEnterFragment. + */ + @JvmStatic + fun newInstance() = + CreateRoomNewOrEnterFragment().apply { + + } + } +} diff --git a/app/src/main/java/mashup/loling/room/CreateRoomPagerAdapter.kt b/app/src/main/java/mashup/loling/room/CreateRoomPagerAdapter.kt new file mode 100644 index 0000000..78ba69d --- /dev/null +++ b/app/src/main/java/mashup/loling/room/CreateRoomPagerAdapter.kt @@ -0,0 +1,26 @@ +package mashup.loling.room + +import android.support.v4.app.Fragment +import android.support.v4.app.FragmentManager +import android.support.v4.app.FragmentPagerAdapter + +class CreateRoomPagerAdapter(fm: FragmentManager?) : FragmentPagerAdapter(fm) { + + private val item0CalendarFragment = CreateRoomCalendarFragment.newInstance() + private val item1MainFragment = CreateRoomMainFragment.newInstance() + private val item2NewOrEnterFragment = CreateRoomNewOrEnterFragment.newInstance() + + override fun getItem(p0: Int): Fragment { + return when(p0) { + 0 -> item0CalendarFragment + 1 -> item1MainFragment + 2 -> item2NewOrEnterFragment + else -> item1MainFragment //default + } + } + + override fun getCount(): Int { + return 3 //only 3 item + } + +} \ No newline at end of file diff --git a/app/src/main/res/drawable/textview_bottom_border_black.xml b/app/src/main/res/drawable/textview_bottom_border_black.xml new file mode 100644 index 0000000..a526338 --- /dev/null +++ b/app/src/main/res/drawable/textview_bottom_border_black.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_create_room.xml b/app/src/main/res/layout/activity_create_room.xml new file mode 100644 index 0000000..309828b --- /dev/null +++ b/app/src/main/res/layout/activity_create_room.xml @@ -0,0 +1,26 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_create_room_calendar.xml b/app/src/main/res/layout/fragment_create_room_calendar.xml new file mode 100644 index 0000000..b560d8f --- /dev/null +++ b/app/src/main/res/layout/fragment_create_room_calendar.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_create_room_main.xml b/app/src/main/res/layout/fragment_create_room_main.xml new file mode 100644 index 0000000..ed3e34e --- /dev/null +++ b/app/src/main/res/layout/fragment_create_room_main.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_create_room_new_or_enter.xml b/app/src/main/res/layout/fragment_create_room_new_or_enter.xml new file mode 100644 index 0000000..51ecdaa --- /dev/null +++ b/app/src/main/res/layout/fragment_create_room_new_or_enter.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 97b2b07..14c3350 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -59,4 +59,7 @@ 20sp 24sp 1dp + + 13dp + 40dp \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5de65fd..948de2a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -23,4 +23,16 @@ 친구목록 작성한 롤링 받은 롤링 + + Okay + Cancel + + Please set the date for %s. + Paper will be sent at the midnight. + Create Loling + Click here to select date + Loling is already existed for %s at %s.\nWould you create new Loling or join to existed Loling? + Create new + Join + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index d67f277..d823c16 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -11,4 +11,8 @@ true + From 1516ef589996906b5765817fc80638d8795a1a2d Mon Sep 17 00:00:00 2001 From: yoo-chaewon Date: Sat, 9 Feb 2019 20:53:37 +0900 Subject: [PATCH 09/71] add SelectFriendActivity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SelectFriendActivity에 `SelectFriendListFragment`와 `SelectFriendAddressListFragment`포함 되어 있어요 그리고 `SelectFriendAddressItemAdapter`와 `SelectFriendItemAdapter`로 어댑터 파일이 너무 많나요ㅠㅠ나중에 겹치는 파일은 삭제하고 수정하도록 하겠습니당 아 그리고 MainAcitivity 연락처 접근 퍼미션을 추가했어용! 아 그리고 이전 올렸던거 dimen, string파일에 값 넣어줬어용 --- app/src/main/AndroidManifest.xml | 2 + .../Adapter/SelectFriendAddressItemAdapter.kt | 41 ++++++++ .../loling/Adapter/SelectFriendItemAdapter.kt | 43 +++++++++ .../SelectFriendAddressListFragment.kt | 86 +++++++++++++++++ .../Fragment/SelectFriendListFragment.kt | 38 ++++++++ .../main/java/mashup/loling/MainActivity.kt | 22 +++++ .../main/java/mashup/loling/MyPageActivity.kt | 7 ++ .../mashup/loling/SelectFriendActivity.kt | 54 +++++++++++ .../java/mashup/loling/model/FriendItem.kt | 7 +- app/src/main/res/drawable-v24/ic_search.xml | 9 ++ .../main/res/drawable-v24/square_button.xml | 6 ++ .../main/res/drawable-v24/square_dialog.xml | 7 ++ app/src/main/res/layout/activity_my_page.xml | 3 +- .../res/layout/activity_select_friend.xml | 95 +++++++++++++------ .../main/res/layout/dialog_delete_list.xml | 59 ++++++++++++ .../layout/selectfriend_item_address_list.xml | 56 +++++++++++ .../layout/selectfriend_item_friend_list.xml | 56 +++++++++++ app/src/main/res/values/colors.xml | 3 + 18 files changed, 561 insertions(+), 33 deletions(-) create mode 100644 app/src/main/java/mashup/loling/Adapter/SelectFriendAddressItemAdapter.kt create mode 100644 app/src/main/java/mashup/loling/Adapter/SelectFriendItemAdapter.kt create mode 100644 app/src/main/java/mashup/loling/Fragment/SelectFriendAddressListFragment.kt create mode 100644 app/src/main/java/mashup/loling/Fragment/SelectFriendListFragment.kt create mode 100644 app/src/main/res/drawable-v24/ic_search.xml create mode 100644 app/src/main/res/drawable-v24/square_button.xml create mode 100644 app/src/main/res/drawable-v24/square_dialog.xml create mode 100644 app/src/main/res/layout/dialog_delete_list.xml create mode 100644 app/src/main/res/layout/selectfriend_item_address_list.xml create mode 100644 app/src/main/res/layout/selectfriend_item_friend_list.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bbaa63b..3f7b58a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + ) : RecyclerView.Adapter(){ + + class ViewHolder : RecyclerView.ViewHolder{ + constructor(itemView: View) : super(itemView) + + var addressItemName : TextView + var addressItemPnum : TextView + + init { + addressItemName = itemView.findViewById(R.id.tvSelectAddressName) as TextView + addressItemPnum = itemView.findViewById(R.id.tvSelectFriendAddressPnum) as TextView + } + + } + + 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 + } +} \ 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/Fragment/SelectFriendAddressListFragment.kt b/app/src/main/java/mashup/loling/Fragment/SelectFriendAddressListFragment.kt new file mode 100644 index 0000000..1954e8e --- /dev/null +++ b/app/src/main/java/mashup/loling/Fragment/SelectFriendAddressListFragment.kt @@ -0,0 +1,86 @@ +package mashup.loling.Fragment + +import android.Manifest +import android.content.ContentResolver +import android.content.pm.PackageManager +import android.os.Bundle +import android.provider.ContactsContract +import android.support.v4.app.ActivityCompat +import android.support.v4.app.Fragment +import android.support.v4.content.ContentResolverCompat.query +import android.support.v4.content.ContextCompat +import android.support.v7.widget.LinearLayoutManager +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.SimpleAdapter +import android.widget.Toast +import mashup.loling.Adapter.SelectFriendAddressItemAdapter +import mashup.loling.model.FriendItem +import mashup.loling.R +import mashup.loling.SelectFriendActivity +import java.util.HashMap + +class SelectFriendAddressListFragment : Fragment { + constructor() : super() + + val friends: ArrayList = ArrayList() + + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + + //get contract + var dataList = ArrayList>() + val c = context!!.contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null + , ContactsContract.Contacts.DISPLAY_NAME_PRIMARY) + + while (c.moveToNext()) { + val map: HashMap = HashMap() + val id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID)) + val name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME_PRIMARY)) + map.put("name", name) + + val phoneCursor = context!!.contentResolver.query( + ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null + , ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + id, null, null) + + if (phoneCursor!!.moveToFirst()) { + val number = phoneCursor.getString(phoneCursor.getColumnIndex( + ContactsContract.CommonDataKinds.Phone.NUMBER)) + map.put("phone", number) + } + phoneCursor.close() + dataList.add(map) + } + c.close() + + + //Log.d("머얀머얀", ""+ dataList) + //Log.d("머얀머얀", ""+ dataList.get(0).get("name")) + + + 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(dataList) + recyclerView.adapter = SelectFriendAddressItemAdapter(friends) + } + + return root + + } + + fun makeFriendList(dataList: ArrayList>) {//연락처에서가져와 처리 + + for (i in 0..dataList.size-1) { + + friends.add(FriendItem(dataList[i]["name"].toString(),"","",dataList[i]["phone"].toString())) + } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/mashup/loling/Fragment/SelectFriendListFragment.kt b/app/src/main/java/mashup/loling/Fragment/SelectFriendListFragment.kt new file mode 100644 index 0000000..4ef0e2c --- /dev/null +++ b/app/src/main/java/mashup/loling/Fragment/SelectFriendListFragment.kt @@ -0,0 +1,38 @@ +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.SelectFriendItemAdapter +import mashup.loling.model.FriendItem +import mashup.loling.R + +class SelectFriendListFragment : 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 = SelectFriendItemAdapter(friends) + } + + return root + + } + + fun makeFriendList(){//친구목록 가져와 처리 + for (i in 0..9){ + friends.add(FriendItem("유채원" + i, "1996.03.22")) + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/mashup/loling/MainActivity.kt b/app/src/main/java/mashup/loling/MainActivity.kt index 2e83e2f..98b5da7 100644 --- a/app/src/main/java/mashup/loling/MainActivity.kt +++ b/app/src/main/java/mashup/loling/MainActivity.kt @@ -1,13 +1,18 @@ package mashup.loling +import android.Manifest import android.content.Context import android.content.Intent +import android.content.pm.PackageManager import android.os.Bundle +import android.support.v4.app.ActivityCompat +import android.support.v4.content.ContextCompat 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 android.widget.Toast import kotlinx.android.synthetic.main.activity_main.* import mashup.loling.Fragment.FriendListFragment @@ -75,4 +80,21 @@ class MainActivity : AppCompatActivity() { } } + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + //address permission + val permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) + if (permissionCheck == PackageManager.PERMISSION_GRANTED) { + Toast.makeText(this, "연락처 권한 주어져 있음.", Toast.LENGTH_LONG).show() + } else { + Toast.makeText(this, "연락처 권한 없음.", Toast.LENGTH_LONG).show() + + //if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECEIVE_SMS)) { + // Toast.makeText(this, "SMS 권한 설명 필요함", Toast.LENGTH_LONG).show(); + //} else { + ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_CONTACTS), 1) + //} + } + + } + } diff --git a/app/src/main/java/mashup/loling/MyPageActivity.kt b/app/src/main/java/mashup/loling/MyPageActivity.kt index 0a94f66..ff3dd72 100644 --- a/app/src/main/java/mashup/loling/MyPageActivity.kt +++ b/app/src/main/java/mashup/loling/MyPageActivity.kt @@ -8,6 +8,7 @@ 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 kotlinx.android.synthetic.main.activity_mypage_setting.* import mashup.loling.Fragment.FriendListFragment import mashup.loling.Fragment.ReceivedListFragment import mashup.loling.Fragment.WrittenListFragment @@ -48,6 +49,12 @@ class MyPageActivity : AppCompatActivity() { startActivity(intent) overridePendingTransition(R.anim.anim_slide_in_left, R.anim.anim_slide_in_left) } + + btnMypageClose.setOnClickListener { + finish() + } + + } internal inner class PagerAdapter : FragmentStatePagerAdapter { diff --git a/app/src/main/java/mashup/loling/SelectFriendActivity.kt b/app/src/main/java/mashup/loling/SelectFriendActivity.kt index 9b67263..9cbf464 100644 --- a/app/src/main/java/mashup/loling/SelectFriendActivity.kt +++ b/app/src/main/java/mashup/loling/SelectFriendActivity.kt @@ -2,11 +2,65 @@ package mashup.loling import android.support.v7.app.AppCompatActivity 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.v4.view.ViewPager +import mashup.loling.Fragment.SelectFriendAddressListFragment +import mashup.loling.Fragment.SelectFriendListFragment class SelectFriendActivity : AppCompatActivity() { + val friendFrag = SelectFriendListFragment() + val addressFrag = SelectFriendAddressListFragment() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_select_friend) + + + val tabs = findViewById(R.id.tabsSelectFriend) + tabs.addTab(tabs.newTab().setText("친구")) + tabs.addTab(tabs.newTab().setText("연락처")) + + var pager = findViewById(R.id.vpSelectFriend) + 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) + } + }) + + + + + } + + internal inner class PagerAdapter : FragmentStatePagerAdapter { + var mNumOfTabs: Int + constructor(fm: FragmentManager?, mNumOfTabs: Int) : super(fm) { + this.mNumOfTabs = mNumOfTabs + } + override fun getItem(position: Int): Fragment { + when (position) { + 0 -> { + return friendFrag + } + 1 -> { + return addressFrag + } + else -> return friendFrag + } + } + override fun getCount(): Int { + return mNumOfTabs + } } } diff --git a/app/src/main/java/mashup/loling/model/FriendItem.kt b/app/src/main/java/mashup/loling/model/FriendItem.kt index 300cc43..aae4047 100644 --- a/app/src/main/java/mashup/loling/model/FriendItem.kt +++ b/app/src/main/java/mashup/loling/model/FriendItem.kt @@ -2,7 +2,12 @@ package mashup.loling.model import android.widget.TextView -class FriendItem (var friendItemName: String, var friendItemDday: String, var friendItemBday: String){ +class FriendItem (var friendItemName: String, var friendItemDday: String, var friendItemBday: String, var friendItemPnum: String){ + constructor(friendItemName: String, friendItemDday: String, friendItemBday: String) : this(friendItemName, friendItemDday, friendItemBday,"") + constructor(friendItemName: String, friendItemBday: String) : this(friendItemName,"",friendItemBday, "") + //constructor(friendItemName: String, friendItemPnum: String) : this(friendItemName, "", "", friendItemPnum) + + override fun toString(): String { return "FriendItem(friendItemName='$friendItemName', friendItemDday='$friendItemDday', friendItemBday='$friendItemBday')" } diff --git a/app/src/main/res/drawable-v24/ic_search.xml b/app/src/main/res/drawable-v24/ic_search.xml new file mode 100644 index 0000000..affc7ba --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_search.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-v24/square_button.xml b/app/src/main/res/drawable-v24/square_button.xml new file mode 100644 index 0000000..cd721f5 --- /dev/null +++ b/app/src/main/res/drawable-v24/square_button.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/square_dialog.xml b/app/src/main/res/drawable-v24/square_dialog.xml new file mode 100644 index 0000000..013e843 --- /dev/null +++ b/app/src/main/res/drawable-v24/square_dialog.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_my_page.xml b/app/src/main/res/layout/activity_my_page.xml index e1eb03f..00d9d65 100644 --- a/app/src/main/res/layout/activity_my_page.xml +++ b/app/src/main/res/layout/activity_my_page.xml @@ -1,7 +1,6 @@ @@ -24,7 +23,7 @@ app:srcCompat="@drawable/ic_settings" /> - - - - + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/appBarLayout"> + + + - + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_delete_list.xml b/app/src/main/res/layout/dialog_delete_list.xml new file mode 100644 index 0000000..d699d79 --- /dev/null +++ b/app/src/main/res/layout/dialog_delete_list.xml @@ -0,0 +1,59 @@ + + + + + + + + +