diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e25e2553..e1daa24d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,6 +1,7 @@ plugins { id("com.android.application") id("org.jetbrains.kotlin.android") + id("kotlin-kapt") } android { @@ -40,6 +41,11 @@ android { } dependencies { + kapt("com.android.databinding:compiler:3.1.4") + implementation("androidx.fragment:fragment-ktx:1.8.1") + implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.3") + implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.8.3") + implementation("com.google.code.gson:gson:2.11.0") implementation("androidx.core:core-ktx:1.12.0") implementation("androidx.appcompat:appcompat:1.6.1") @@ -49,7 +55,7 @@ dependencies { implementation("androidx.datastore:datastore-preferences:1.0.0") implementation("com.squareup.retrofit2:retrofit:2.11.0") implementation("com.squareup.retrofit2:converter-gson:2.11.0") - implementation("com.kakao.maps.open:android:2.9.5") +// implementation("com.kakao.maps.open:android:2.9.5") implementation("androidx.activity:activity:1.8.0") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 930d7f16..583a82ae 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,6 +5,7 @@ + for (i in 1..15) { + val name = "$category $i" + val address = "$baseAddress $i" + val sql = "INSERT INTO ${PlaceContract.TABLE_NAME} (" + + "${PlaceContract.TABLE_COLUMN_NAME}, ${PlaceContract.TABLE_COLUMN_ADDRESS}, ${PlaceContract.TABLE_COLUMN_CATEGORY}) " + + "VALUES ('$name', '$address', '$category');" + it.execSQL(sql) + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/campus/tech/kakao/map/MainActivity.kt b/app/src/main/java/campus/tech/kakao/map/MainActivity.kt index 95b43803..c195f395 100644 --- a/app/src/main/java/campus/tech/kakao/map/MainActivity.kt +++ b/app/src/main/java/campus/tech/kakao/map/MainActivity.kt @@ -1,11 +1,118 @@ package campus.tech.kakao.map import android.os.Bundle +import android.text.Editable +import android.text.TextWatcher +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.Observer +import androidx.recyclerview.widget.LinearLayoutManager +import campus.tech.kakao.map.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { + private val viewModel: MainViewModel by viewModels { + ViewModelFactory(applicationContext) + } + + private val placeAdapter: PlaceAdapter by lazy { + PlaceAdapter(placeList, + LayoutInflater.from(this@MainActivity), + object : + PlaceAdapter.OnItemClickListener { + override fun onItemClick(position: Int) { + val item = placeAdapter.getItem(position) + val searchHistory = SearchHistory(item.name) + viewModel.saveSearchHistory(searchHistory) + Log.d("실행", "저장") + } + } + ) + } + + private val historyAdapter: HistoryAdapter by lazy { + HistoryAdapter( + viewModel.searchHistoryList.value ?: emptyList(), + LayoutInflater.from(this@MainActivity), + object : HistoryAdapter.OnItemClickListener { + override fun onItemClick(position: Int) { + val item = viewModel.searchHistoryList.value?.get(position) + if (item != null) { + mainBinding.search.setText(item.searchHistory) + Log.d("실행", "검색창") + } + } + override fun onXMarkClick(position: Int) { + viewModel.deleteSearchHistory(position) + Log.d("실행", "삭제") + } + } + ) + } + + private lateinit var mainBinding: ActivityMainBinding + + + private var placeList: List = emptyList() + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) + mainBinding = ActivityMainBinding.inflate(layoutInflater) + setContentView(mainBinding.root) + + if (placeList.isNullOrEmpty()) { + mainBinding.emptyMainText.visibility = View.VISIBLE + } else { + mainBinding.emptyMainText.visibility = View.GONE + } + + setupRecyclerViews(mainBinding) + setupSearchEditText(mainBinding) + observeViewModel(mainBinding) + + mainBinding.xmark.setOnClickListener { + mainBinding.search.setText("") + } + } + + private fun setupRecyclerViews(mainBinding: ActivityMainBinding) { + mainBinding.placeResult.apply { + layoutManager = LinearLayoutManager(this@MainActivity, LinearLayoutManager.VERTICAL, false) + adapter = placeAdapter + } + + mainBinding.searchHistory.apply { + layoutManager = LinearLayoutManager(this@MainActivity, LinearLayoutManager.HORIZONTAL, false) + adapter = historyAdapter + } + } + + private fun setupSearchEditText(mainBinding: ActivityMainBinding) { + val searchEditText = mainBinding.search + + searchEditText.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} + + override fun afterTextChanged(s: Editable?) { + val searchText = searchEditText.text.toString() + viewModel.getSearchResult(searchText) + } + }) + } + + private fun observeViewModel(mainBinding: ActivityMainBinding) { + viewModel.searchHistoryList.observe(this@MainActivity, Observer { + historyAdapter.setData(it) + }) + viewModel.getSearchHistoryList() + + viewModel.placeList.observe(this@MainActivity, Observer { + placeAdapter.setData(it) + mainBinding.emptyMainText.visibility = if (it.isNullOrEmpty()) View.VISIBLE else View.GONE + }) } } diff --git a/app/src/main/java/campus/tech/kakao/map/MainViewModel.kt b/app/src/main/java/campus/tech/kakao/map/MainViewModel.kt new file mode 100644 index 00000000..88e5e8f6 --- /dev/null +++ b/app/src/main/java/campus/tech/kakao/map/MainViewModel.kt @@ -0,0 +1,78 @@ +package campus.tech.kakao.map + +import android.content.Context +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel + +class MainViewModel(context: Context) : ViewModel() { + private val dbHelper: DBHelper = DBHelper(context) + private val db = dbHelper.writableDatabase + private val preferenceManager = MapApplication.prefs + + private var _placeList = MutableLiveData>() + private val _searchHistoryList = MutableLiveData>() + + init { + _searchHistoryList.value = getSearchHistory() + } + + val searchHistoryList: LiveData> + get() = _searchHistoryList + + val placeList: LiveData> + get() = _placeList + + fun insertPlace(place: Place) { + dbHelper.insert(db, place) + } + + override fun onCleared() { + super.onCleared() + if (db.isOpen) db.close() + } + + fun getSearchResult(searchText: String) { + if (searchText.isEmpty()) { + _placeList.postValue(emptyList()) + } else { + val rDb = dbHelper.readableDatabase + val places = mutableListOf() + val query = "SELECT * FROM ${PlaceContract.TABLE_NAME} WHERE ${PlaceContract.TABLE_COLUMN_NAME} LIKE ?" + val cursor = rDb.rawQuery(query, arrayOf("%$searchText%")) + + if (cursor != null) { + if (cursor.moveToFirst()) { + do { + val name = cursor.getString(cursor.getColumnIndexOrThrow(PlaceContract.TABLE_COLUMN_NAME)) + val address = cursor.getString(cursor.getColumnIndexOrThrow(PlaceContract.TABLE_COLUMN_ADDRESS)) + val category = cursor.getString(cursor.getColumnIndexOrThrow(PlaceContract.TABLE_COLUMN_CATEGORY)) + val place = Place(name, address, category) + places.add(place) + } while (cursor.moveToNext()) + } + cursor.close() + } + _placeList.postValue(places) + } + } + + fun getSearchHistoryList() { + _searchHistoryList.value = getSearchHistory() + } + + private fun getSearchHistory(): ArrayList { + return preferenceManager.getArrayList(Constants.SEARCH_HISTORY_KEY) + } + + fun saveSearchHistory(searchHistory: SearchHistory) { + val currentList = getSearchHistory() + preferenceManager.savePreference(Constants.SEARCH_HISTORY_KEY, searchHistory, currentList) + getSearchHistoryList() + } + + fun deleteSearchHistory(position: Int) { + preferenceManager.deleteArrayListItem(Constants.SEARCH_HISTORY_KEY, position) + getSearchHistoryList() + } +} diff --git a/app/src/main/java/campus/tech/kakao/map/MapApplication.kt b/app/src/main/java/campus/tech/kakao/map/MapApplication.kt new file mode 100644 index 00000000..9af8823b --- /dev/null +++ b/app/src/main/java/campus/tech/kakao/map/MapApplication.kt @@ -0,0 +1,15 @@ +package campus.tech.kakao.map + +import android.app.Application +import android.content.SharedPreferences + +class MapApplication: Application() { + companion object { + lateinit var prefs: PreferenceManager + } + + override fun onCreate() { + prefs = PreferenceManager(applicationContext) + super.onCreate() + } +} \ No newline at end of file diff --git a/app/src/main/java/campus/tech/kakao/map/Place.kt b/app/src/main/java/campus/tech/kakao/map/Place.kt new file mode 100644 index 00000000..b332afdc --- /dev/null +++ b/app/src/main/java/campus/tech/kakao/map/Place.kt @@ -0,0 +1,7 @@ +package campus.tech.kakao.map + +data class Place ( + val name: String, + val address: String, + val category: String, +) \ No newline at end of file diff --git a/app/src/main/java/campus/tech/kakao/map/PlaceAdapter.kt b/app/src/main/java/campus/tech/kakao/map/PlaceAdapter.kt new file mode 100644 index 00000000..59793a24 --- /dev/null +++ b/app/src/main/java/campus/tech/kakao/map/PlaceAdapter.kt @@ -0,0 +1,61 @@ +package campus.tech.kakao.map + +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.AdapterView +import android.widget.BaseAdapter +import android.widget.TextView +import androidx.appcompat.content.res.AppCompatResources +import androidx.recyclerview.widget.RecyclerView + +class PlaceAdapter(var items: List, val inflater: LayoutInflater, var itemClickListener: OnItemClickListener): RecyclerView.Adapter() { + + interface OnItemClickListener { + fun onItemClick(position: Int) {} + } + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int + ): PlaceAdapter.PlaceViewHolder { + val view = inflater.inflate(R.layout.place_item, parent, false) + return PlaceViewHolder(view) + } + + override fun onBindViewHolder(holder: PlaceAdapter.PlaceViewHolder, position: Int) { + holder.name.text = items[position].name + holder.address.text = items[position].address + holder.category.text = items[position].category + } + + override fun getItemCount(): Int { + return items.size + } + + fun setData(searchResults: List) { + items = searchResults + notifyDataSetChanged() + } + + fun getItem(position: Int): Place { + return items[position] + } + + inner class PlaceViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) { + val name: TextView + val address: TextView + val category: TextView + + init { + name = itemView.findViewById(R.id.place) + address = itemView.findViewById(R.id.address) + category = itemView.findViewById(R.id.category) + + itemView.setOnClickListener { + itemClickListener.onItemClick(absoluteAdapterPosition) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/campus/tech/kakao/map/PlaceContract.kt b/app/src/main/java/campus/tech/kakao/map/PlaceContract.kt new file mode 100644 index 00000000..1626e61b --- /dev/null +++ b/app/src/main/java/campus/tech/kakao/map/PlaceContract.kt @@ -0,0 +1,10 @@ +package campus.tech.kakao.map + +import android.provider.BaseColumns + +object PlaceContract: BaseColumns { + const val TABLE_NAME = "place" + const val TABLE_COLUMN_NAME = "name" + const val TABLE_COLUMN_ADDRESS = "address" + const val TABLE_COLUMN_CATEGORY = "category" +} \ No newline at end of file diff --git a/app/src/main/java/campus/tech/kakao/map/PreferenceManager.kt b/app/src/main/java/campus/tech/kakao/map/PreferenceManager.kt new file mode 100644 index 00000000..c42aef15 --- /dev/null +++ b/app/src/main/java/campus/tech/kakao/map/PreferenceManager.kt @@ -0,0 +1,44 @@ +package campus.tech.kakao.map + +import android.content.Context +import android.content.SharedPreferences +import com.google.gson.GsonBuilder +import com.google.gson.reflect.TypeToken + +class PreferenceManager(context: Context) { + private val prefs: SharedPreferences + = context.getSharedPreferences(Constants.PREFERENCE_NAME, Context.MODE_PRIVATE) + + fun deleteString(key: String) { + prefs.edit().remove(key).apply() + } + + fun getArrayList(key: String): ArrayList { + val stringPrefs = prefs.getString(key, null) + return if (stringPrefs != null && stringPrefs != "[]") { + GsonBuilder().create().fromJson( + stringPrefs, object : TypeToken>() {}.type + ) + } else { + ArrayList() + } + } + + private fun setArrayList(key: String, list: ArrayList) { + val jsonString = GsonBuilder().create().toJson(list) + prefs.edit().putString(key, jsonString).apply() + } + + fun deleteArrayListItem(key: String, index: Int) { + val list = getArrayList(key) + if (index >= 0 && index < list.size) { + list.removeAt(index) + setArrayList(key, list) + } + } + + fun savePreference(key: String, history: SearchHistory, list: ArrayList) { + list.add(0, history) + setArrayList(key, list) + } +} \ No newline at end of file diff --git a/app/src/main/java/campus/tech/kakao/map/SearchHistory.kt b/app/src/main/java/campus/tech/kakao/map/SearchHistory.kt new file mode 100644 index 00000000..21775e1c --- /dev/null +++ b/app/src/main/java/campus/tech/kakao/map/SearchHistory.kt @@ -0,0 +1,5 @@ +package campus.tech.kakao.map + +data class SearchHistory( + val searchHistory: String +) \ No newline at end of file diff --git a/app/src/main/java/campus/tech/kakao/map/SearchHistoryAdapter.kt b/app/src/main/java/campus/tech/kakao/map/SearchHistoryAdapter.kt new file mode 100644 index 00000000..4275a0eb --- /dev/null +++ b/app/src/main/java/campus/tech/kakao/map/SearchHistoryAdapter.kt @@ -0,0 +1,50 @@ +package campus.tech.kakao.map + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import campus.tech.kakao.map.databinding.SearchHistoryItemBinding + +class HistoryAdapter(var items: List, val inflater: LayoutInflater, var itemClickListener: OnItemClickListener) : RecyclerView.Adapter() { + + interface OnItemClickListener { + fun onItemClick(position: Int) + fun onXMarkClick(position: Int) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HistoryViewHolder { + val binding = SearchHistoryItemBinding.inflate(inflater, parent, false) + return HistoryViewHolder(binding) + } + + override fun onBindViewHolder(holder: HistoryViewHolder, position: Int) { + holder.bind(items[position]) + } + + override fun getItemCount(): Int { + return items.size + } + + fun setData(searchHistory: List) { + items = searchHistory + notifyDataSetChanged() + } + + inner class HistoryViewHolder(private val binding: SearchHistoryItemBinding) : RecyclerView.ViewHolder(binding.root) { + init { + itemView.setOnClickListener { + itemClickListener.onItemClick(absoluteAdapterPosition) + } + + binding.xmark.setOnClickListener { + itemClickListener.onXMarkClick(absoluteAdapterPosition) + } + } + fun bind(searchHistory: SearchHistory) { + binding.history.text = searchHistory.searchHistory + } + } +} diff --git a/app/src/main/java/campus/tech/kakao/map/ViewModelFactory.kt b/app/src/main/java/campus/tech/kakao/map/ViewModelFactory.kt new file mode 100644 index 00000000..d48e6646 --- /dev/null +++ b/app/src/main/java/campus/tech/kakao/map/ViewModelFactory.kt @@ -0,0 +1,16 @@ +package campus.tech.kakao.map + +import android.content.Context +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider + +class ViewModelFactory(private val context: Context): ViewModelProvider.Factory { + + override fun create(modelClass: Class): T { + if (modelClass.isAssignableFrom(MainViewModel::class.java)) { + return MainViewModel(context) as T + } else { + throw IllegalArgumentException("Failed to create ViewModel : ${modelClass.name}") + } + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml index 07d5da9c..ca3826a4 100644 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -1,170 +1,74 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + xmlns:android="http://schemas.android.com/apk/res/android"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/map_marker.xml b/app/src/main/res/drawable/map_marker.xml new file mode 100644 index 00000000..9ce300a5 --- /dev/null +++ b/app/src/main/res/drawable/map_marker.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/search_history_background.xml b/app/src/main/res/drawable/search_history_background.xml new file mode 100644 index 00000000..e107d40e --- /dev/null +++ b/app/src/main/res/drawable/search_history_background.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/xmark.xml b/app/src/main/res/drawable/xmark.xml new file mode 100644 index 00000000..f5e3a847 --- /dev/null +++ b/app/src/main/res/drawable/xmark.xml @@ -0,0 +1,15 @@ + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 24d17df2..11a530ee 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -5,15 +5,58 @@ android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" + android:paddingHorizontal="20dp" tools:context=".MainActivity"> + + + + + + app:layout_constraintEnd_toEndOf="parent"/> + + + + + diff --git a/app/src/main/res/layout/place_item.xml b/app/src/main/res/layout/place_item.xml new file mode 100644 index 00000000..6342b296 --- /dev/null +++ b/app/src/main/res/layout/place_item.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/search_history_item.xml b/app/src/main/res/layout/search_history_item.xml new file mode 100644 index 00000000..559b5b4e --- /dev/null +++ b/app/src/main/res/layout/search_history_item.xml @@ -0,0 +1,29 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 51% rename from app/src/main/res/mipmap-anydpi/ic_launcher.xml rename to app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index b3e26b4c..c4a603d4 100644 --- a/app/src/main/res/mipmap-anydpi/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,6 +1,5 @@ - - - - + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 51% rename from app/src/main/res/mipmap-anydpi/ic_launcher_round.xml rename to app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index b3e26b4c..c4a603d4 100644 --- a/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,6 +1,5 @@ - - - - + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp index c209e78e..1cb2bc1c 100644 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.webp and b/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp new file mode 100644 index 00000000..3a8c85f6 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp index b2dfe3d1..df98a819 100644 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp index 4f0f1d64..cb81f4ae 100644 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.webp and b/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp new file mode 100644 index 00000000..c117c04b Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp index 62b611da..e6bc028e 100644 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp index 948a3070..e6be427e 100644 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp and b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp new file mode 100644 index 00000000..2d29b928 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp index 1b9a6956..5d46a9c9 100644 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp index 28d4b77f..c0bcf7c9 100644 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp new file mode 100644 index 00000000..9946a9bb Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp index 9287f508..04544edd 100644 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp index aa7d6427..e6c8f5fb 100644 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp new file mode 100644 index 00000000..ca6fbd99 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp index 9126ae37..a228ba7f 100644 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e5ba5b9c..c1e67643 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,5 @@ Map + 검색어를 입력해주세요. + 검색 결과가 없습니다. \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 05ed4b9e..adc928b4 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -3,6 +3,10 @@