diff --git a/app/build.gradle b/app/build.gradle index 248a2f6..2244d7e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -30,10 +30,16 @@ android { kotlinOptions { jvmTarget = '11' } + buildFeatures { + viewBinding true + } } dependencies { - + implementation 'com.github.bumptech.glide:glide:4.12.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2" + implementation "androidx.fragment:fragment-ktx:1.6.1" implementation 'androidx.core:core-ktx:1.8.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.5.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 22397d5..c2dcd01 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,9 @@ + + + + android:exported="false"> + + - + + + + + + \ No newline at end of file diff --git a/app/src/main/java/org/sopt/dosopttemplate/DoAndroidFragment.kt b/app/src/main/java/org/sopt/dosopttemplate/DoAndroidFragment.kt new file mode 100644 index 0000000..34cc61f --- /dev/null +++ b/app/src/main/java/org/sopt/dosopttemplate/DoAndroidFragment.kt @@ -0,0 +1,35 @@ +package org.sopt.dosopttemplate + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import org.sopt.dosopttemplate.databinding.FragmentDoAndroidBinding + + +class DoAndroidFragment : Fragment() { + private var _binding : FragmentDoAndroidBinding ? = null + private val binding: FragmentDoAndroidBinding + get() = requireNotNull(_binding){"바인딩 에러"} + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + _binding = FragmentDoAndroidBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + } + + override fun onDestroyView() { + _binding = null + super.onDestroyView() + } +} + + diff --git a/app/src/main/java/org/sopt/dosopttemplate/FriendViewHolder.kt b/app/src/main/java/org/sopt/dosopttemplate/FriendViewHolder.kt new file mode 100644 index 0000000..8253012 --- /dev/null +++ b/app/src/main/java/org/sopt/dosopttemplate/FriendViewHolder.kt @@ -0,0 +1,19 @@ +package org.sopt.dosopttemplate + +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import org.sopt.dosopttemplate.databinding.ItemFriendBinding + +class FriendViewHolder(private val binding: ItemFriendBinding) : + RecyclerView.ViewHolder(binding.root) { + + fun onBind(userUserProfileData: UserProfile.User) { + with(binding) { + Glide.with(ivProfile) + .load(userUserProfileData.profileImage) + .into(ivProfile) + tvName.text = userUserProfileData.name + tvSelfMessage.text = userUserProfileData.message + } + } + } diff --git a/app/src/main/java/org/sopt/dosopttemplate/HomeActivity.kt b/app/src/main/java/org/sopt/dosopttemplate/HomeActivity.kt new file mode 100644 index 0000000..a852260 --- /dev/null +++ b/app/src/main/java/org/sopt/dosopttemplate/HomeActivity.kt @@ -0,0 +1,174 @@ +package org.sopt.dosopttemplate + +import android.animation.ObjectAnimator +import android.content.pm.PackageManager +import android.graphics.Bitmap +import android.graphics.Canvas +import android.os.Bundle +import android.os.Environment +import android.provider.MediaStore +import android.util.Log +import android.view.View +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import androidx.core.app.ActivityCompat +import androidx.core.content.ContextCompat +import androidx.fragment.app.Fragment +import org.sopt.dosopttemplate.databinding.ActivityHomeBinding +import java.io.File +import java.io.FileOutputStream +import java.io.IOException +import android.Manifest + + +class HomeActivity : AppCompatActivity() { + private lateinit var binding: ActivityHomeBinding + private var openFAB = false + private val WRITE_EXTERNAL_STORAGE_REQUEST_CODE = 1 + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityHomeBinding.inflate(layoutInflater) + setContentView(binding.root) + + val currentFragment = supportFragmentManager.findFragmentById(R.id.fcv_home) + if (currentFragment == null) { + supportFragmentManager.beginTransaction() + .add(R.id.fcv_home, HomeFragment()) + .commit() + } + clickBottomNavigation() + setCLICKFAB() + checkManageExternalStoragePermission() + } + + companion object { + fun createMyPageFragment(user_id: String?, user_major: String?): MyPageFragment { + return if (user_id != null && user_major != null) { + MyPageFragment.newInstance(user_id, user_major) + } else { + throw IllegalArgumentException("데이터가 없어요!") + } + } + } + + private fun clickBottomNavigation() { + binding.bnvHome.setOnItemSelectedListener { + when (it.itemId) { + R.id.menu_home -> { + replaceFragment(HomeFragment()) + true + } + + R.id.menu_do_android -> { + replaceFragment(DoAndroidFragment()) + true + } + + R.id.menu_mypage -> { + try { + val user_id = intent?.getStringExtra("user_id") + val user_major = intent?.getStringExtra("user_major") + val myPageFragment = createMyPageFragment(user_id, user_major) + replaceFragment(myPageFragment) + } catch (e: IllegalArgumentException) { + Toast.makeText(this, e.message, Toast.LENGTH_SHORT).show() + } + true + } + + else -> false + } + } + } + + private fun replaceFragment(fragment: Fragment) { + supportFragmentManager.beginTransaction() + .replace(R.id.fcv_home, fragment) + .commit() + + } + + private fun setCLICKFAB() { + binding.fabMain.setOnClickListener { + eventFAB() + } + binding.fabCapture.setOnClickListener { + takeScreenshot() + } + + binding.fabShare.setOnClickListener { + Toast.makeText(this, "공유하는 중", Toast.LENGTH_SHORT).show() + } + } + + private fun eventFAB() { + if (openFAB) { + ObjectAnimator.ofFloat(binding.fabShare, "translationY", 0f).apply { start() } + ObjectAnimator.ofFloat(binding.fabCapture, "translationY", 0f).apply { start() } + } else { + ObjectAnimator.ofFloat(binding.fabShare, "translationY", -400f).apply { start() } + ObjectAnimator.ofFloat(binding.fabCapture, "translationY", -200f).apply { start() } + } + openFAB = !openFAB + } + + private fun checkManageExternalStoragePermission() { + val managePermission = ContextCompat.checkSelfPermission( + this, + Manifest.permission.WRITE_EXTERNAL_STORAGE + ) + + if (managePermission != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions( + this, + arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), + WRITE_EXTERNAL_STORAGE_REQUEST_CODE + ) + } + } + override fun onRequestPermissionsResult( + requestCode: Int, + permissions: Array, + grantResults: IntArray + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + + if (requestCode == WRITE_EXTERNAL_STORAGE_REQUEST_CODE) { + if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + Toast.makeText(this, "권한이 허용되었습니다.", Toast.LENGTH_SHORT).show() + } else { + Toast.makeText(this, "권한이 거부되었습니다.", Toast.LENGTH_SHORT).show() + } + } + } + + private fun takeScreenshot() { + val rootView = window.decorView.rootView + val screenShot: File? = captureScreen(rootView) + } + private fun captureScreen(view: View): File? { + val screenBitmap = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888) + val canvas = Canvas(screenBitmap) + view.draw(canvas) + + if (screenBitmap.byteCount == 0) { + return null + } + + val filename = "Profilescreenshot.png" + val file = File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), filename) + + try { + val output = FileOutputStream(file) + screenBitmap.compress(Bitmap.CompressFormat.PNG, 100, output) + output.close() + + } catch (e: IOException) { + e.printStackTrace() + return null + } + + return file + } +} + diff --git a/app/src/main/java/org/sopt/dosopttemplate/HomeFragment.kt b/app/src/main/java/org/sopt/dosopttemplate/HomeFragment.kt new file mode 100644 index 0000000..12b292a --- /dev/null +++ b/app/src/main/java/org/sopt/dosopttemplate/HomeFragment.kt @@ -0,0 +1,41 @@ +package org.sopt.dosopttemplate + +import MainAdapter +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.viewModels +import org.sopt.dosopttemplate.databinding.FragmentHomeBinding + +class HomeFragment : Fragment() { + private var _binding: FragmentHomeBinding? = null + private val binding: FragmentHomeBinding + get() = requireNotNull(_binding) { "바인딩 에러" } + + private val viewModel by viewModels() + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + _binding = FragmentHomeBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val MainAdapter = MainAdapter(requireContext()) + binding.rvFriends.adapter = MainAdapter + MainAdapter.profileList = viewModel.mockUserProfileLists + } + + override fun onDestroyView() { + _binding = null + super.onDestroyView() + } +} + + diff --git a/app/src/main/java/org/sopt/dosopttemplate/HomeViewModel.kt b/app/src/main/java/org/sopt/dosopttemplate/HomeViewModel.kt new file mode 100644 index 0000000..61402a6 --- /dev/null +++ b/app/src/main/java/org/sopt/dosopttemplate/HomeViewModel.kt @@ -0,0 +1,68 @@ +package org.sopt.dosopttemplate + +import androidx.lifecycle.ViewModel + +class HomeViewModel : ViewModel() { + val mockUserProfileLists = mutableListOf( + UserProfile.My ( + profileImage = R.drawable.boong1, + name = "조세연", + message = "붕어의 계절티비", + ), + UserProfile.User( + profileImage = R.drawable.myimage, + name = "경지현", + message = "비티비타오백" + ), + UserProfile.User( + profileImage = R.drawable.myimage, + name = "박강희", + message = "오늘 생일티비!" + ), + UserProfile.User( + profileImage = R.drawable.myimage, + name = "이삭", + message = "안드짱티비" + ), + UserProfile.User( + profileImage = R.drawable.myimage, + name = "박동민", + message = "일본티비" + ), + UserProfile.User( + profileImage = R.drawable.myimage, + name = "붕어빵", + message = "슈크림근본" + ), + UserProfile.User( + profileImage = R.drawable.myimage, + name = "붕어", + message = "예?" + ), + UserProfile.User( + profileImage = R.drawable.myimage, + name = "붕", + message = "붕붕아" + ), + UserProfile.User( + profileImage = R.drawable.myimage, + name = "시험", + message = "멈춰티비" + ), + UserProfile.User( + profileImage = R.drawable.myimage, + name = "숙대", + message = "눈송티비" + ), + UserProfile.User( + profileImage = R.drawable.myimage, + name = "새벽", + message = "배고픔티비" + ), + UserProfile.User( + profileImage = R.drawable.myimage, + name = "솝트", + message = "안드티비" + ) + ) +} \ No newline at end of file diff --git a/app/src/main/java/org/sopt/dosopttemplate/LoginActivity.kt b/app/src/main/java/org/sopt/dosopttemplate/LoginActivity.kt new file mode 100644 index 0000000..23b3608 --- /dev/null +++ b/app/src/main/java/org/sopt/dosopttemplate/LoginActivity.kt @@ -0,0 +1,64 @@ +package org.sopt.dosopttemplate +import android.content.Intent +import android.os.Bundle +import android.util.Log +import android.widget.Toast +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts +import androidx.appcompat.app.AppCompatActivity +import org.sopt.dosopttemplate.databinding.ActivityLoginBinding + +class LoginActivity : AppCompatActivity() { + private lateinit var binding: ActivityLoginBinding + lateinit var enteredId: String + lateinit var enteredPassword: String + lateinit var enteredMajor: String + lateinit var enteredName: String + lateinit var resultLauncher: ActivityResultLauncher + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityLoginBinding.inflate(layoutInflater) + setContentView(binding.root) + + val signButton = binding.signupButton + val loginButton = binding.loginButton + + resultLauncher = registerForActivityResult( + ActivityResultContracts.StartActivityForResult() + ) { result -> + if (result.resultCode == RESULT_OK) { + val data: Intent? = result.data + enteredId = data?.getStringExtra("entered_id") ?: "" + enteredPassword = data?.getStringExtra("entered_password") ?: "" + enteredMajor = data?.getStringExtra("entered_Major") ?: "" + enteredName = data?.getStringExtra("entered_Name") ?: "" + } + } + + signButton.setOnClickListener { + val intent = Intent(this, SignUpActivity::class.java) + resultLauncher.launch(intent) + } + + loginButton.setOnClickListener { + + val inputId = binding.inputTextId + val inputPw = binding.inputTextPw + + val isLoginSuccessful = + enteredId == inputId.text.toString() && enteredPassword == inputPw.text.toString() + if (isLoginSuccessful) { + Toast.makeText(this, "로그인에 성공했습니다 :)", Toast.LENGTH_LONG).show() + + val mainIntent = Intent(this, HomeActivity::class.java) + mainIntent.putExtra("user_id", enteredId) + mainIntent.putExtra("user_major", enteredMajor) + startActivity(mainIntent) + } else { + Toast.makeText(this, "로그인에 실패했습니다 :(", Toast.LENGTH_LONG).show() + } + } + } + } + diff --git a/app/src/main/java/org/sopt/dosopttemplate/MainActivity.kt b/app/src/main/java/org/sopt/dosopttemplate/MainActivity.kt index 6d11107..c863255 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/MainActivity.kt +++ b/app/src/main/java/org/sopt/dosopttemplate/MainActivity.kt @@ -2,10 +2,28 @@ package org.sopt.dosopttemplate import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import org.sopt.dosopttemplate.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { + private lateinit var binding: ActivityMainBinding + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) - } -} \ No newline at end of file + binding = ActivityMainBinding.inflate(layoutInflater) + setContentView(binding.root) + val inputTextId = intent.getStringExtra("user_id") + val inputTextMajor = intent.getStringExtra("user_major") + val inputTextName = intent.getStringExtra("user_name") + + val idTextView = binding.mypageTextId + val majorTextView = binding.mypageTextMajor + val nameTextView = binding.mypageTextName + + idTextView.text = "$inputTextId" + majorTextView.text = "$inputTextMajor" + nameTextView.text = "$inputTextName" + } + +} + + diff --git a/app/src/main/java/org/sopt/dosopttemplate/MainAdapter.kt b/app/src/main/java/org/sopt/dosopttemplate/MainAdapter.kt new file mode 100644 index 0000000..d64dfd9 --- /dev/null +++ b/app/src/main/java/org/sopt/dosopttemplate/MainAdapter.kt @@ -0,0 +1,55 @@ +import android.content.Context +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import org.sopt.dosopttemplate.FriendViewHolder +import org.sopt.dosopttemplate.MyProfileViewHolder +import org.sopt.dosopttemplate.UserProfile +import org.sopt.dosopttemplate.databinding.ItemFriendBinding +import org.sopt.dosopttemplate.databinding.ItemMyprofileBinding + +class MainAdapter(requireContext: Context) : + RecyclerView.Adapter() { + + lateinit var profileList: MutableList + + private val View_Myprofile = 0 + private val View_Friend = 1 + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + return when (viewType) { + View_Myprofile -> { + val binding = ItemMyprofileBinding.inflate(LayoutInflater.from(parent.context), parent, false) + MyProfileViewHolder(binding) + } + View_Friend -> { + val binding = ItemFriendBinding.inflate(LayoutInflater.from(parent.context), parent, false) + FriendViewHolder(binding) + } + else -> throw IllegalArgumentException("유효하지 않소") + } + } + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + val item = profileList[position] + when (holder) { + is MyProfileViewHolder -> { + holder.onBind(item as UserProfile.My ) + } + is FriendViewHolder -> { + holder.onBind(item as UserProfile.User) + } + } + } + + override fun getItemCount(): Int { + return profileList.size + } + + override fun getItemViewType(position: Int): Int = when(profileList[position]){ + is UserProfile.My -> View_Myprofile + is UserProfile.User -> View_Friend + } +} + + diff --git a/app/src/main/java/org/sopt/dosopttemplate/MyPageFragment.kt b/app/src/main/java/org/sopt/dosopttemplate/MyPageFragment.kt new file mode 100644 index 0000000..85f6a4a --- /dev/null +++ b/app/src/main/java/org/sopt/dosopttemplate/MyPageFragment.kt @@ -0,0 +1,50 @@ +package org.sopt.dosopttemplate + +import android.os.Bundle +import android.util.Log +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import org.sopt.dosopttemplate.databinding.FragmentMyPageBinding + +class MyPageFragment : Fragment() { + private var _binding: FragmentMyPageBinding? = null + private val binding: FragmentMyPageBinding + get() = requireNotNull(_binding) { "바인딩 에러" } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + _binding = FragmentMyPageBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + with(binding) { + mypageTextId.text = arguments?.getString("user_id") + mypageTextMajor.text = arguments?.getString("user_major") + } + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + + companion object { + @JvmStatic + fun newInstance(id: String, major: String): MyPageFragment { + val fragment = MyPageFragment() + val args = Bundle() + args.putString("user_id", id) + args.putString("user_major", major) + fragment.arguments = args + return fragment + } + } +} diff --git a/app/src/main/java/org/sopt/dosopttemplate/MyProfileViewHolder.kt b/app/src/main/java/org/sopt/dosopttemplate/MyProfileViewHolder.kt new file mode 100644 index 0000000..ae45e34 --- /dev/null +++ b/app/src/main/java/org/sopt/dosopttemplate/MyProfileViewHolder.kt @@ -0,0 +1,20 @@ +package org.sopt.dosopttemplate + +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import org.sopt.dosopttemplate.databinding.ItemFriendBinding +import org.sopt.dosopttemplate.databinding.ItemMyprofileBinding + +class MyProfileViewHolder(private val binding: ItemMyprofileBinding) : + RecyclerView.ViewHolder(binding.root) { + + fun onBind(userUserProfileData: UserProfile.My) { + with(binding) { + Glide.with(ivProfile) + .load(userUserProfileData.profileImage) + .into(ivProfile) + tvName.text = userUserProfileData.name + tvSelfMessage.text = userUserProfileData.message + } + } +} diff --git a/app/src/main/java/org/sopt/dosopttemplate/SignUpActivity.kt b/app/src/main/java/org/sopt/dosopttemplate/SignUpActivity.kt new file mode 100644 index 0000000..53272c7 --- /dev/null +++ b/app/src/main/java/org/sopt/dosopttemplate/SignUpActivity.kt @@ -0,0 +1,59 @@ +package org.sopt.dosopttemplate + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import org.sopt.dosopttemplate.databinding.ActivitySignupBinding + +class SignUpActivity : AppCompatActivity() { + private lateinit var binding: ActivitySignupBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + binding = ActivitySignupBinding.inflate(layoutInflater) + setContentView(binding.root) + + val signupButton = binding.signupButton + val editTextId = binding.editTextId + val editTextPassword = binding.editTextPassword + val editTextMajor = binding.editTextMajor + val editTextName = binding.editTextName + + signupButton.setOnClickListener { + val enteredId = editTextId.text.toString() + val enteredPassword = editTextPassword.text.toString() + val enteredMajor = editTextMajor.text.toString() + val enteredName = editTextName.text.toString() + + if (isValidSignUp(enteredId, enteredPassword, enteredMajor, enteredName)) { + val loginIntent = Intent() + loginIntent.putExtra("entered_id", enteredId) + loginIntent.putExtra("entered_password", enteredPassword) + loginIntent.putExtra("entered_Major", enteredMajor) + loginIntent.putExtra("entered_Name", enteredName) + setResult(RESULT_OK, loginIntent) + finish() + } else { + Toast.makeText(this, "회원가입 조건을 다시 확인하세요 !", Toast.LENGTH_SHORT).show() + } + } + } + + private fun isValidSignUp( + enteredId: String, + enteredPassword: String, + enteredMajor: String, + enteredName: String + ): Boolean { + + val isIdValid = enteredId.length >= 6 && enteredId.length <= 10 + val isPasswordValid = enteredPassword.length >= 8 && enteredPassword.length <= 12 + val isNicknameValid = enteredName.length >= 1 && !enteredName.isBlank() + val isMajorValid = enteredMajor.length >= 1 && !enteredMajor.isBlank() + + return isIdValid && isPasswordValid && isNicknameValid && isMajorValid + } +} diff --git a/app/src/main/java/org/sopt/dosopttemplate/UserProfile.kt b/app/src/main/java/org/sopt/dosopttemplate/UserProfile.kt new file mode 100644 index 0000000..243ad2d --- /dev/null +++ b/app/src/main/java/org/sopt/dosopttemplate/UserProfile.kt @@ -0,0 +1,16 @@ +package org.sopt.dosopttemplate +import androidx.annotation.DrawableRes + +sealed class UserProfile { + data class My( + @DrawableRes val profileImage: Int, + val name: String, + val message: String + ) : UserProfile() + + data class User( + @DrawableRes val profileImage: Int, + val name: String, + val message: String + ) : UserProfile() +} \ No newline at end of file diff --git a/app/src/main/res/drawable/boong1.jpeg b/app/src/main/res/drawable/boong1.jpeg new file mode 100644 index 0000000..cb25ff8 Binary files /dev/null and b/app/src/main/res/drawable/boong1.jpeg differ diff --git a/app/src/main/res/drawable/ic_do_android_pink_24.xml b/app/src/main/res/drawable/ic_do_android_pink_24.xml new file mode 100644 index 0000000..d2b0ff2 --- /dev/null +++ b/app/src/main/res/drawable/ic_do_android_pink_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_fab_capture_pink_24.xml b/app/src/main/res/drawable/ic_fab_capture_pink_24.xml new file mode 100644 index 0000000..c3517f1 --- /dev/null +++ b/app/src/main/res/drawable/ic_fab_capture_pink_24.xml @@ -0,0 +1,6 @@ + + + + diff --git a/app/src/main/res/drawable/ic_fab_main_pink_24.xml b/app/src/main/res/drawable/ic_fab_main_pink_24.xml new file mode 100644 index 0000000..afef92e --- /dev/null +++ b/app/src/main/res/drawable/ic_fab_main_pink_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_fab_share_pink_24.xml b/app/src/main/res/drawable/ic_fab_share_pink_24.xml new file mode 100644 index 0000000..071b829 --- /dev/null +++ b/app/src/main/res/drawable/ic_fab_share_pink_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_pink_24.xml b/app/src/main/res/drawable/ic_home_pink_24.xml new file mode 100644 index 0000000..037a420 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_pink_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_person_pink_24.xml b/app/src/main/res/drawable/ic_person_pink_24.xml new file mode 100644 index 0000000..52934be --- /dev/null +++ b/app/src/main/res/drawable/ic_person_pink_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/menu_selector_color.xml b/app/src/main/res/drawable/menu_selector_color.xml new file mode 100644 index 0000000..bef68a6 --- /dev/null +++ b/app/src/main/res/drawable/menu_selector_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/myimage.jpg b/app/src/main/res/drawable/myimage.jpg new file mode 100644 index 0000000..e9db6b3 Binary files /dev/null and b/app/src/main/res/drawable/myimage.jpg differ diff --git a/app/src/main/res/font/do_sopt_font.xml b/app/src/main/res/font/do_sopt_font.xml new file mode 100644 index 0000000..891a76f --- /dev/null +++ b/app/src/main/res/font/do_sopt_font.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml new file mode 100644 index 0000000..2c1cc8e --- /dev/null +++ b/app/src/main/res/layout/activity_home.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml new file mode 100644 index 0000000..6c65fc2 --- /dev/null +++ b/app/src/main/res/layout/activity_login.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + +