From bced9a1634c13de4410038adfa3453f9f5cdcb11 Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 15 Aug 2021 22:55:38 +0800 Subject: [PATCH] experimental: introduce core module. --- app/build.gradle | 2 +- app/proguard-rules.pro | 4 -- .../com/louis383/coffeefinder/BaseFragment.kt | 2 +- .../coffeefinder/details/DetailsFragment.kt | 5 +- .../coffeefinder/di/module/LocationModule.kt | 6 +- .../coffeefinder/di/module/NetworkModule.kt | 4 +- .../di/module/RepositoryModule.kt | 4 +- .../coffeefinder/list/CoffeeShopListView.kt | 2 +- .../coffeefinder/list/ListAdapterHandler.kt | 2 +- .../coffeefinder/list/ListFragment.kt | 2 +- .../coffeefinder/list/ListPresenter.kt | 4 +- .../coffeefinder/mainpage/MainActivity.kt | 3 +- .../coffeefinder/mainpage/MainPresenter.kt | 11 ++-- .../coffeefinder/mainpage/MainView.kt | 2 +- .../coffeefinder/maps/MapsClickHandler.kt | 2 +- .../coffeefinder/maps/MapsFragment.kt | 2 +- .../coffeefinder/maps/MapsPresenter.kt | 5 +- .../louis383/coffeefinder/maps/MapsView.kt | 2 +- .../data/mapper/NetworkShopListMapper.kt | 9 --- .../model/data/mapper/basic/Mapper.kt | 5 -- .../model/domain/model/CoffeeShop.kt | 33 ---------- .../coffeefinder/uimodel/CoffeeShopUiModel.kt | 10 ++- .../louis383/coffeefinder/utils/Extensions.kt | 9 +++ .../coffeefinder/view/CoffeeListAdapter.kt | 3 +- core/.gitignore | 1 + core/build.gradle | 66 +++++++++++++++++++ core/consumer-rules.pro | 48 ++++++++++++++ core/proguard-rules.pro | 21 ++++++ .../core/ExampleInstrumentedTest.kt | 24 +++++++ core/src/main/AndroidManifest.xml | 5 ++ .../coffeefinder/core}/ConnectivityChecker.kt | 2 +- .../core}/CurrentLocationCarrier.kt | 2 +- .../coffeefinder/core}/PermissionChecker.kt | 2 +- .../coffeefinder/core}/PreferenceManager.java | 2 +- .../core}/UserLocationListener.kt | 4 +- .../core}/data/api/CoffeeTripService.kt | 4 +- .../core}/data/dto/NetworkShop.kt | 2 +- .../core/data/mapper/NetworkShopListMapper.kt | 9 +++ .../core}/data/mapper/NetworkShopMapper.kt | 15 +++-- .../core}/data/mapper/basic/IListMapper.kt | 2 +- .../core/data/mapper/basic/Mapper.kt | 5 ++ .../coffeefinder/core}/domain/Result.kt | 2 +- .../domain/comparator/DistanceComparator.kt | 4 +- .../core/domain/model/CoffeeShop.kt | 27 ++++++++ .../core/domain/model/MapLocation.kt | 10 +++ .../domain/repository/CoffeeShopRepository.kt | 6 +- .../repository/CoffeeShopRepositoryImpl.kt | 14 ++-- .../domain/usecase/GetCoffeeShopsUseCase.kt | 4 +- .../coffeefinder/core}/utils/MathUtils.kt | 14 ++-- .../coffeefinder/core/ExampleUnitTest.kt | 17 +++++ settings.gradle | 1 + 51 files changed, 325 insertions(+), 121 deletions(-) delete mode 100644 app/src/main/java/tw/com/louis383/coffeefinder/model/data/mapper/NetworkShopListMapper.kt delete mode 100644 app/src/main/java/tw/com/louis383/coffeefinder/model/data/mapper/basic/Mapper.kt delete mode 100644 app/src/main/java/tw/com/louis383/coffeefinder/model/domain/model/CoffeeShop.kt create mode 100644 core/.gitignore create mode 100644 core/build.gradle create mode 100644 core/consumer-rules.pro create mode 100644 core/proguard-rules.pro create mode 100644 core/src/androidTest/java/tw/com/louis383/coffeefinder/core/ExampleInstrumentedTest.kt create mode 100644 core/src/main/AndroidManifest.xml rename {app/src/main/java/tw/com/louis383/coffeefinder/model => core/src/main/java/tw/com/louis383/coffeefinder/core}/ConnectivityChecker.kt (95%) rename {app/src/main/java/tw/com/louis383/coffeefinder/model => core/src/main/java/tw/com/louis383/coffeefinder/core}/CurrentLocationCarrier.kt (71%) rename {app/src/main/java/tw/com/louis383/coffeefinder/model => core/src/main/java/tw/com/louis383/coffeefinder/core}/PermissionChecker.kt (92%) rename {app/src/main/java/tw/com/louis383/coffeefinder/model => core/src/main/java/tw/com/louis383/coffeefinder/core}/PreferenceManager.java (93%) rename {app/src/main/java/tw/com/louis383/coffeefinder/model => core/src/main/java/tw/com/louis383/coffeefinder/core}/UserLocationListener.kt (98%) rename {app/src/main/java/tw/com/louis383/coffeefinder/model => core/src/main/java/tw/com/louis383/coffeefinder/core}/data/api/CoffeeTripService.kt (74%) rename {app/src/main/java/tw/com/louis383/coffeefinder/model => core/src/main/java/tw/com/louis383/coffeefinder/core}/data/dto/NetworkShop.kt (89%) create mode 100644 core/src/main/java/tw/com/louis383/coffeefinder/core/data/mapper/NetworkShopListMapper.kt rename {app/src/main/java/tw/com/louis383/coffeefinder/model => core/src/main/java/tw/com/louis383/coffeefinder/core}/data/mapper/NetworkShopMapper.kt (59%) rename {app/src/main/java/tw/com/louis383/coffeefinder/model => core/src/main/java/tw/com/louis383/coffeefinder/core}/data/mapper/basic/IListMapper.kt (80%) create mode 100644 core/src/main/java/tw/com/louis383/coffeefinder/core/data/mapper/basic/Mapper.kt rename {app/src/main/java/tw/com/louis383/coffeefinder/model => core/src/main/java/tw/com/louis383/coffeefinder/core}/domain/Result.kt (88%) rename {app/src/main/java/tw/com/louis383/coffeefinder/model => core/src/main/java/tw/com/louis383/coffeefinder/core}/domain/comparator/DistanceComparator.kt (67%) create mode 100644 core/src/main/java/tw/com/louis383/coffeefinder/core/domain/model/CoffeeShop.kt create mode 100644 core/src/main/java/tw/com/louis383/coffeefinder/core/domain/model/MapLocation.kt rename {app/src/main/java/tw/com/louis383/coffeefinder/model => core/src/main/java/tw/com/louis383/coffeefinder/core}/domain/repository/CoffeeShopRepository.kt (52%) rename {app/src/main/java/tw/com/louis383/coffeefinder/model => core/src/main/java/tw/com/louis383/coffeefinder/core}/domain/repository/CoffeeShopRepositoryImpl.kt (78%) rename {app/src/main/java/tw/com/louis383/coffeefinder/model => core/src/main/java/tw/com/louis383/coffeefinder/core}/domain/usecase/GetCoffeeShopsUseCase.kt (68%) rename {app/src/main/java/tw/com/louis383/coffeefinder => core/src/main/java/tw/com/louis383/coffeefinder/core}/utils/MathUtils.kt (64%) create mode 100644 core/src/test/java/tw/com/louis383/coffeefinder/core/ExampleUnitTest.kt diff --git a/app/build.gradle b/app/build.gradle index 42c4cff..a8d0a0e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -112,6 +112,7 @@ ext { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation project(":core") implementation project(":anchor-bottom-sheet-behavior") coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' // FIXME:: map 3.1.0 use volley 1.1.0 which is not available on mavenCentral and google @@ -130,7 +131,6 @@ dependencies { implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.core:core-ktx:1.6.0' implementation "androidx.fragment:fragment-ktx:1.3.6" - implementation "com.google.android.gms:play-services-location:${gms_version}" // HTTP Client implementation "com.squareup.retrofit2:retrofit:${retrofit_version}" diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 2cba5a6..7cf489a 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -16,10 +16,6 @@ # public *; #} --keep class tw.com.louis383.coffeefinder.model.entity.** { *; } --keep class tw.com.louis383.coffeefinder.model.domain.** { *; } --keep interface tw.com.louis383.coffeefinder.model.data.api.CoffeeTripService { *; } - # Uncomment this to preserve the line number information for # debugging stack traces. -keepattributes SourceFile,LineNumberTable diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/BaseFragment.kt b/app/src/main/java/tw/com/louis383/coffeefinder/BaseFragment.kt index e8a4dd0..1043ce9 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/BaseFragment.kt +++ b/app/src/main/java/tw/com/louis383/coffeefinder/BaseFragment.kt @@ -1,7 +1,7 @@ package tw.com.louis383.coffeefinder import androidx.fragment.app.Fragment -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop /** * Created by louis383 on 2017/2/26. diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/details/DetailsFragment.kt b/app/src/main/java/tw/com/louis383/coffeefinder/details/DetailsFragment.kt index b15fbcb..4d32954 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/details/DetailsFragment.kt +++ b/app/src/main/java/tw/com/louis383/coffeefinder/details/DetailsFragment.kt @@ -15,9 +15,10 @@ import androidx.lifecycle.Lifecycle import com.google.android.libraries.maps.model.LatLng import dagger.hilt.android.AndroidEntryPoint import tw.com.louis383.coffeefinder.R -import tw.com.louis383.coffeefinder.model.CurrentLocationCarrier -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.core.CurrentLocationCarrier +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop import tw.com.louis383.coffeefinder.uimodel.CoffeeShopUiModel +import tw.com.louis383.coffeefinder.uimodel.getUiModel import tw.com.louis383.coffeefinder.utils.FragmentArgumentDelegate import javax.inject.Inject diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/di/module/LocationModule.kt b/app/src/main/java/tw/com/louis383/coffeefinder/di/module/LocationModule.kt index 65ca7f3..00df450 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/di/module/LocationModule.kt +++ b/app/src/main/java/tw/com/louis383/coffeefinder/di/module/LocationModule.kt @@ -10,9 +10,9 @@ import dagger.Reusable import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent -import tw.com.louis383.coffeefinder.model.CurrentLocationCarrier -import tw.com.louis383.coffeefinder.model.PermissionChecker -import tw.com.louis383.coffeefinder.model.UserLocationListener +import tw.com.louis383.coffeefinder.core.CurrentLocationCarrier +import tw.com.louis383.coffeefinder.core.PermissionChecker +import tw.com.louis383.coffeefinder.core.UserLocationListener import javax.inject.Singleton @InstallIn(SingletonComponent::class) diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/di/module/NetworkModule.kt b/app/src/main/java/tw/com/louis383/coffeefinder/di/module/NetworkModule.kt index 0dc6125..02dfa56 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/di/module/NetworkModule.kt +++ b/app/src/main/java/tw/com/louis383/coffeefinder/di/module/NetworkModule.kt @@ -15,8 +15,8 @@ import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit import tw.com.louis383.coffeefinder.BuildConfig -import tw.com.louis383.coffeefinder.model.ConnectivityChecker -import tw.com.louis383.coffeefinder.model.data.api.CoffeeTripService +import tw.com.louis383.coffeefinder.core.ConnectivityChecker +import tw.com.louis383.coffeefinder.core.data.api.CoffeeTripService import java.util.concurrent.TimeUnit import javax.inject.Qualifier diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/di/module/RepositoryModule.kt b/app/src/main/java/tw/com/louis383/coffeefinder/di/module/RepositoryModule.kt index fb16b04..658fe81 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/di/module/RepositoryModule.kt +++ b/app/src/main/java/tw/com/louis383/coffeefinder/di/module/RepositoryModule.kt @@ -4,8 +4,8 @@ import dagger.Binds import dagger.Module import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent -import tw.com.louis383.coffeefinder.model.domain.repository.CoffeeShopRepository -import tw.com.louis383.coffeefinder.model.domain.repository.CoffeeShopRepositoryImpl +import tw.com.louis383.coffeefinder.core.domain.repository.CoffeeShopRepository +import tw.com.louis383.coffeefinder.core.domain.repository.CoffeeShopRepositoryImpl @InstallIn(SingletonComponent::class) @Module diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/list/CoffeeShopListView.kt b/app/src/main/java/tw/com/louis383/coffeefinder/list/CoffeeShopListView.kt index cd35613..0969b3d 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/list/CoffeeShopListView.kt +++ b/app/src/main/java/tw/com/louis383/coffeefinder/list/CoffeeShopListView.kt @@ -1,7 +1,7 @@ package tw.com.louis383.coffeefinder.list import tw.com.louis383.coffeefinder.BaseView -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop interface CoffeeShopListView : BaseView { fun setLoadingProgressBarVisibility(visible: Boolean) diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/list/ListAdapterHandler.kt b/app/src/main/java/tw/com/louis383/coffeefinder/list/ListAdapterHandler.kt index 6812fa0..24378c4 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/list/ListAdapterHandler.kt +++ b/app/src/main/java/tw/com/louis383/coffeefinder/list/ListAdapterHandler.kt @@ -1,7 +1,7 @@ package tw.com.louis383.coffeefinder.list import android.location.Location -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop /** * Created by louis383 on 2017/3/8. diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/list/ListFragment.kt b/app/src/main/java/tw/com/louis383/coffeefinder/list/ListFragment.kt index df00b1b..73e85ea 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/list/ListFragment.kt +++ b/app/src/main/java/tw/com/louis383/coffeefinder/list/ListFragment.kt @@ -16,7 +16,7 @@ import dagger.hilt.android.AndroidEntryPoint import tw.com.louis383.coffeefinder.BaseFragment import tw.com.louis383.coffeefinder.R import tw.com.louis383.coffeefinder.R.layout -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop import tw.com.louis383.coffeefinder.utils.FragmentArgumentDelegate import tw.com.louis383.coffeefinder.utils.RecyclerViewDividerHelper import tw.com.louis383.coffeefinder.view.CoffeeListAdapter diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/list/ListPresenter.kt b/app/src/main/java/tw/com/louis383/coffeefinder/list/ListPresenter.kt index 5871591..0d3eb15 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/list/ListPresenter.kt +++ b/app/src/main/java/tw/com/louis383/coffeefinder/list/ListPresenter.kt @@ -3,8 +3,8 @@ package tw.com.louis383.coffeefinder.list import android.location.Location import dagger.hilt.android.scopes.FragmentScoped import tw.com.louis383.coffeefinder.BasePresenter -import tw.com.louis383.coffeefinder.model.CurrentLocationCarrier -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.core.CurrentLocationCarrier +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop import javax.inject.Inject /** diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/mainpage/MainActivity.kt b/app/src/main/java/tw/com/louis383/coffeefinder/mainpage/MainActivity.kt index 08884b6..53de05f 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/mainpage/MainActivity.kt +++ b/app/src/main/java/tw/com/louis383/coffeefinder/mainpage/MainActivity.kt @@ -27,12 +27,13 @@ import com.trafi.anchorbottomsheetbehavior.AnchorBottomSheetBehavior import dagger.hilt.android.AndroidEntryPoint import tw.com.louis383.coffeefinder.R import tw.com.louis383.coffeefinder.adapter.ViewPagerAdapter +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop import tw.com.louis383.coffeefinder.details.DetailsFragment import tw.com.louis383.coffeefinder.details.DetailsItemClickListener import tw.com.louis383.coffeefinder.list.ListFragment import tw.com.louis383.coffeefinder.maps.MapsClickHandler import tw.com.louis383.coffeefinder.maps.MapsFragment -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.uimodel.getUiModel import tw.com.louis383.coffeefinder.utils.Utils import tw.com.louis383.coffeefinder.utils.bindView import javax.inject.Inject diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/mainpage/MainPresenter.kt b/app/src/main/java/tw/com/louis383/coffeefinder/mainpage/MainPresenter.kt index 3ec1c3b..856eb22 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/mainpage/MainPresenter.kt +++ b/app/src/main/java/tw/com/louis383/coffeefinder/mainpage/MainPresenter.kt @@ -21,10 +21,11 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import tw.com.louis383.coffeefinder.BasePresenter import tw.com.louis383.coffeefinder.R -import tw.com.louis383.coffeefinder.model.ConnectivityChecker -import tw.com.louis383.coffeefinder.model.UserLocationListener -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop -import tw.com.louis383.coffeefinder.model.domain.usecase.GetCoffeeShopsUseCase +import tw.com.louis383.coffeefinder.core.ConnectivityChecker +import tw.com.louis383.coffeefinder.core.UserLocationListener +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.core.domain.usecase.GetCoffeeShopsUseCase +import tw.com.louis383.coffeefinder.uimodel.getUiModel import tw.com.louis383.coffeefinder.utils.ifNotNull import tw.com.louis383.coffeefinder.utils.toLatLng import java.util.* @@ -162,7 +163,7 @@ class MainPresenter @Inject constructor( ifNotNull(currentLocation, lastTappedCoffeeShop) { currentLocation: Location, lastTappedCoffeeShop: CoffeeShop -> val urlString = String.format( Locale.getDefault(), "http://maps.google.com/maps?daddr=%f,%f&saddr=%f,%f&mode=w", - lastTappedCoffeeShop.location.latitude, lastTappedCoffeeShop.location.longitude, + lastTappedCoffeeShop.mapLocation.latitude, lastTappedCoffeeShop.mapLocation.longitude, currentLocation.latitude, currentLocation.longitude ) diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/mainpage/MainView.kt b/app/src/main/java/tw/com/louis383/coffeefinder/mainpage/MainView.kt index 2b1ef3f..a1fd1a2 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/mainpage/MainView.kt +++ b/app/src/main/java/tw/com/louis383/coffeefinder/mainpage/MainView.kt @@ -7,7 +7,7 @@ import com.google.android.gms.common.api.ResolvableApiException import com.google.android.libraries.maps.model.LatLng import com.trafi.anchorbottomsheetbehavior.AnchorBottomSheetBehavior import tw.com.louis383.coffeefinder.BaseView -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop interface MainView : BaseView { fun isApplicationInstalled(packageName: String): Boolean diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/maps/MapsClickHandler.kt b/app/src/main/java/tw/com/louis383/coffeefinder/maps/MapsClickHandler.kt index 129b28a..a508486 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/maps/MapsClickHandler.kt +++ b/app/src/main/java/tw/com/louis383/coffeefinder/maps/MapsClickHandler.kt @@ -1,6 +1,6 @@ package tw.com.louis383.coffeefinder.maps -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop /** * Created by louis383 on 2017/3/7. diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/maps/MapsFragment.kt b/app/src/main/java/tw/com/louis383/coffeefinder/maps/MapsFragment.kt index 9909969..d59c3c1 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/maps/MapsFragment.kt +++ b/app/src/main/java/tw/com/louis383/coffeefinder/maps/MapsFragment.kt @@ -22,7 +22,7 @@ import com.google.android.libraries.maps.model.MarkerOptions import dagger.hilt.android.AndroidEntryPoint import tw.com.louis383.coffeefinder.BaseFragment import tw.com.louis383.coffeefinder.R -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop import tw.com.louis383.coffeefinder.utils.ifNotNull import javax.inject.Inject diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/maps/MapsPresenter.kt b/app/src/main/java/tw/com/louis383/coffeefinder/maps/MapsPresenter.kt index f3a98d1..d874172 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/maps/MapsPresenter.kt +++ b/app/src/main/java/tw/com/louis383/coffeefinder/maps/MapsPresenter.kt @@ -10,7 +10,8 @@ import com.google.android.libraries.maps.model.Marker import dagger.hilt.android.scopes.FragmentScoped import tw.com.louis383.coffeefinder.BasePresenter import tw.com.louis383.coffeefinder.R -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.utils.toLatLng import javax.inject.Inject /** @@ -105,7 +106,7 @@ class MapsPresenter @Inject constructor() : BasePresenter(), GoogleMap for (coffeeShop in coffeeShops) { val distance = coffeeShop.distance.toString() normalMarker?.run { - val generatedMarker = view?.addMakers(coffeeShop.location, coffeeShop.name, distance, coffeeShop, this) + val generatedMarker = view?.addMakers(coffeeShop.mapLocation.toLatLng(), coffeeShop.name, distance, coffeeShop, this) generatedMarker?.let { markerMap[coffeeShop.id] = it } diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/maps/MapsView.kt b/app/src/main/java/tw/com/louis383/coffeefinder/maps/MapsView.kt index 7fe8586..d6eaa76 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/maps/MapsView.kt +++ b/app/src/main/java/tw/com/louis383/coffeefinder/maps/MapsView.kt @@ -6,7 +6,7 @@ import com.google.android.libraries.maps.model.BitmapDescriptor import com.google.android.libraries.maps.model.LatLng import com.google.android.libraries.maps.model.Marker import tw.com.louis383.coffeefinder.BaseView -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop interface MapsView : BaseView { fun checkLocationPermission(): Boolean diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/model/data/mapper/NetworkShopListMapper.kt b/app/src/main/java/tw/com/louis383/coffeefinder/model/data/mapper/NetworkShopListMapper.kt deleted file mode 100644 index a8b47c7..0000000 --- a/app/src/main/java/tw/com/louis383/coffeefinder/model/data/mapper/NetworkShopListMapper.kt +++ /dev/null @@ -1,9 +0,0 @@ -package tw.com.louis383.coffeefinder.model.data.mapper - -import tw.com.louis383.coffeefinder.model.data.dto.NetworkShop -import tw.com.louis383.coffeefinder.model.data.mapper.basic.ListMapper -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop -import javax.inject.Inject - -class NetworkShopListMapper @Inject constructor(mapper: NetworkShopMapper) : - ListMapper(mapper) \ No newline at end of file diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/model/data/mapper/basic/Mapper.kt b/app/src/main/java/tw/com/louis383/coffeefinder/model/data/mapper/basic/Mapper.kt deleted file mode 100644 index 958a004..0000000 --- a/app/src/main/java/tw/com/louis383/coffeefinder/model/data/mapper/basic/Mapper.kt +++ /dev/null @@ -1,5 +0,0 @@ -package tw.com.louis383.coffeefinder.model.data.mapper.basic - -interface Mapper { - fun map(input: I): O -} \ No newline at end of file diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/model/domain/model/CoffeeShop.kt b/app/src/main/java/tw/com/louis383/coffeefinder/model/domain/model/CoffeeShop.kt deleted file mode 100644 index 5e5c08d..0000000 --- a/app/src/main/java/tw/com/louis383/coffeefinder/model/domain/model/CoffeeShop.kt +++ /dev/null @@ -1,33 +0,0 @@ -package tw.com.louis383.coffeefinder.model.domain.model - -import android.os.Parcelable -import com.google.android.libraries.maps.model.LatLng -import kotlinx.parcelize.Parcelize -import tw.com.louis383.coffeefinder.uimodel.CoffeeShopUiModel -import tw.com.louis383.coffeefinder.utils.MathUtils - -@Parcelize -data class CoffeeShop( - val id: String, - val name: String, - val wifi: Float, - val seat: Float, - val cheap: Float, - val url: String, - val address: String, - val location: LatLng, - val distance: Double, - val limitedTime: String?, - val socket: String?, - val standingDesk: Boolean, - val mrt: String?, - val openTime: String? -) : Parcelable { - fun getUiModel(): CoffeeShopUiModel { - return CoffeeShopUiModel(this) - } - - fun calculateDistanceFromLocation(fromLatLng: LatLng): Int { - return MathUtils.calculateDistance(fromLatLng, location).toInt() - } -} diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/uimodel/CoffeeShopUiModel.kt b/app/src/main/java/tw/com/louis383/coffeefinder/uimodel/CoffeeShopUiModel.kt index 56f6210..576d3fa 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/uimodel/CoffeeShopUiModel.kt +++ b/app/src/main/java/tw/com/louis383/coffeefinder/uimodel/CoffeeShopUiModel.kt @@ -5,11 +5,17 @@ import android.net.Uri import android.text.TextUtils import com.google.android.libraries.maps.model.LatLng import tw.com.louis383.coffeefinder.R -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.utils.toMapLocation /** * Created by louis383 on 2017/1/24. */ + +fun CoffeeShop.getUiModel(): CoffeeShopUiModel { + return CoffeeShopUiModel(this) +} + class CoffeeShopUiModel(private val coffeeShop: CoffeeShop) { companion object { private const val CAFE_NOMAD_PATH = "https://cafenomad.tw/shop/" @@ -43,7 +49,7 @@ class CoffeeShopUiModel(private val coffeeShop: CoffeeShop) { get() = coffeeShop.address fun getDistancesFromLocation(latLng: LatLng): String { - val distance: Int = coffeeShop.calculateDistanceFromLocation(latLng) + val distance: Int = coffeeShop.calculateDistanceFromLocation(latLng.toMapLocation()) return distance.toString() } diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/utils/Extensions.kt b/app/src/main/java/tw/com/louis383/coffeefinder/utils/Extensions.kt index b75c7ee..c00f8ef 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/utils/Extensions.kt +++ b/app/src/main/java/tw/com/louis383/coffeefinder/utils/Extensions.kt @@ -5,6 +5,7 @@ import android.location.Location import android.view.View import androidx.annotation.IdRes import com.google.android.libraries.maps.model.LatLng +import tw.com.louis383.coffeefinder.core.domain.model.MapLocation fun Activity.bindView(@IdRes resId: Int): Lazy = lazy { findViewById(resId) @@ -20,3 +21,11 @@ fun Location.toLatLng(): LatLng { return LatLng(latitude, longitude) } +fun MapLocation.toLatLng(): LatLng { + return LatLng(latitude, longitude) +} + +fun LatLng.toMapLocation(): MapLocation { + return MapLocation(latitude, longitude) +} + diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/view/CoffeeListAdapter.kt b/app/src/main/java/tw/com/louis383/coffeefinder/view/CoffeeListAdapter.kt index 2350f0b..c885997 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/view/CoffeeListAdapter.kt +++ b/app/src/main/java/tw/com/louis383/coffeefinder/view/CoffeeListAdapter.kt @@ -11,8 +11,9 @@ import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView import com.google.android.libraries.maps.model.LatLng import tw.com.louis383.coffeefinder.R +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop import tw.com.louis383.coffeefinder.list.ListAdapterHandler -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.uimodel.getUiModel /** * Created by louis383 on 2017/2/26. diff --git a/core/.gitignore b/core/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/core/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/core/build.gradle b/core/build.gradle new file mode 100644 index 0000000..dc0b587 --- /dev/null +++ b/core/build.gradle @@ -0,0 +1,66 @@ +plugins { + id 'com.android.library' + id 'org.jetbrains.kotlin.android' + id 'kotlin-parcelize' + id 'kotlin-kapt' + id 'kotlinx-serialization' + id 'dagger.hilt.android.plugin' +} + +android { + compileSdk compile_sdk_version + + defaultConfig { + minSdk min_sdk_version + targetSdk target_sdk_version + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles "consumer-rules.pro" + } + + buildTypes { + release { + minifyEnabled true + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + + compileOptions { + coreLibraryDesugaringEnabled true + sourceCompatibility JavaVersion.VERSION_11 + targetCompatibility JavaVersion.VERSION_11 + } + + kotlinOptions { + jvmTarget = "11" + } +} + +ext { + retrofit_version = '2.9.0' + coroutines_version = '1.5.1' +} + +dependencies { + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' + // Kotlin + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:${coroutines_version}" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:${coroutines_version}" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:${coroutines_version}" + implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.2" + + // GMS + implementation "com.google.android.gms:play-services-location:${gms_version}" + + // HTTP Client + implementation "com.squareup.retrofit2:retrofit:${retrofit_version}" + implementation "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0" + implementation 'com.squareup.okhttp3:logging-interceptor:3.5.0' + + // Dependency Injection + implementation "com.google.dagger:hilt-android:$dagger_version" + kapt "com.google.dagger:hilt-compiler:$dagger_version" + + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test.ext:junit:1.1.3' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' +} \ No newline at end of file diff --git a/core/consumer-rules.pro b/core/consumer-rules.pro new file mode 100644 index 0000000..cd5dfc4 --- /dev/null +++ b/core/consumer-rules.pro @@ -0,0 +1,48 @@ +-keep class tw.com.louis383.coffeefinder.core.data.dto.** { *; } +-keep interface tw.com.louis383.coffeefinder.core.data.api.CoffeeTripService { *; } + +# Uncomment this to preserve the line number information for +# debugging stack traces. +-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +-renamesourcefileattribute SourceFile + +# Google Play Service +-keep class com.google.android.gms.** { *; } +-dontwarn com.google.android.gms.** + +# Retrofit 2 +-dontwarn retrofit2.** +-keep class retrofit2.** { *; } +-keepattributes Signature +-keepattributes Exceptions + +-keepclasseswithmembers class * { + @retrofit2.http.* ; +} + +# OkHttp 3 +-dontwarn okhttp3.** +-keep class okhttp3.** { *; } +-dontwarn okio.* + +# Kotlin Serialization +-keepattributes *Annotation*, InnerClasses +-dontnote kotlinx.serialization.SerializationKt +-keep,includedescriptorclasses class tw.com.louis383.coffeefinder.**$$serializer { *; } +-keepclassmembers class tw.com.louis383.coffeefinder.** { + *** Companion; +} +-keepclasseswithmembers class tw.com.louis383.coffeefinder.** { + kotlinx.serialization.KSerializer serializer(...); +} + +# Remove Log +-assumenosideeffects class android.util.Log { + public static *** v(...); + public static *** d(...); + public static *** i(...); + public static *** w(...); +} diff --git a/core/proguard-rules.pro b/core/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/core/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/core/src/androidTest/java/tw/com/louis383/coffeefinder/core/ExampleInstrumentedTest.kt b/core/src/androidTest/java/tw/com/louis383/coffeefinder/core/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..bc4b282 --- /dev/null +++ b/core/src/androidTest/java/tw/com/louis383/coffeefinder/core/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package tw.com.louis383.coffeefinder.core + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("tw.com.louis383.coffeefinder.core.test", appContext.packageName) + } +} \ No newline at end of file diff --git a/core/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml new file mode 100644 index 0000000..aad3a69 --- /dev/null +++ b/core/src/main/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/model/ConnectivityChecker.kt b/core/src/main/java/tw/com/louis383/coffeefinder/core/ConnectivityChecker.kt similarity index 95% rename from app/src/main/java/tw/com/louis383/coffeefinder/model/ConnectivityChecker.kt rename to core/src/main/java/tw/com/louis383/coffeefinder/core/ConnectivityChecker.kt index 47b80d6..cba9ba2 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/model/ConnectivityChecker.kt +++ b/core/src/main/java/tw/com/louis383/coffeefinder/core/ConnectivityChecker.kt @@ -1,4 +1,4 @@ -package tw.com.louis383.coffeefinder.model +package tw.com.louis383.coffeefinder.core import android.content.Context import android.net.ConnectivityManager diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/model/CurrentLocationCarrier.kt b/core/src/main/java/tw/com/louis383/coffeefinder/core/CurrentLocationCarrier.kt similarity index 71% rename from app/src/main/java/tw/com/louis383/coffeefinder/model/CurrentLocationCarrier.kt rename to core/src/main/java/tw/com/louis383/coffeefinder/core/CurrentLocationCarrier.kt index ce3616f..0e7d2b3 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/model/CurrentLocationCarrier.kt +++ b/core/src/main/java/tw/com/louis383/coffeefinder/core/CurrentLocationCarrier.kt @@ -1,4 +1,4 @@ -package tw.com.louis383.coffeefinder.model +package tw.com.louis383.coffeefinder.core import android.location.Location diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/model/PermissionChecker.kt b/core/src/main/java/tw/com/louis383/coffeefinder/core/PermissionChecker.kt similarity index 92% rename from app/src/main/java/tw/com/louis383/coffeefinder/model/PermissionChecker.kt rename to core/src/main/java/tw/com/louis383/coffeefinder/core/PermissionChecker.kt index e667c09..8efc1bd 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/model/PermissionChecker.kt +++ b/core/src/main/java/tw/com/louis383/coffeefinder/core/PermissionChecker.kt @@ -1,4 +1,4 @@ -package tw.com.louis383.coffeefinder.model +package tw.com.louis383.coffeefinder.core import android.Manifest import android.content.Context diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/model/PreferenceManager.java b/core/src/main/java/tw/com/louis383/coffeefinder/core/PreferenceManager.java similarity index 93% rename from app/src/main/java/tw/com/louis383/coffeefinder/model/PreferenceManager.java rename to core/src/main/java/tw/com/louis383/coffeefinder/core/PreferenceManager.java index f5dd16c..e2b1376 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/model/PreferenceManager.java +++ b/core/src/main/java/tw/com/louis383/coffeefinder/core/PreferenceManager.java @@ -1,4 +1,4 @@ -package tw.com.louis383.coffeefinder.model; +package tw.com.louis383.coffeefinder.core; import android.content.SharedPreferences; diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/model/UserLocationListener.kt b/core/src/main/java/tw/com/louis383/coffeefinder/core/UserLocationListener.kt similarity index 98% rename from app/src/main/java/tw/com/louis383/coffeefinder/model/UserLocationListener.kt rename to core/src/main/java/tw/com/louis383/coffeefinder/core/UserLocationListener.kt index 22cb3bd..402e0bf 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/model/UserLocationListener.kt +++ b/core/src/main/java/tw/com/louis383/coffeefinder/core/UserLocationListener.kt @@ -1,10 +1,8 @@ -package tw.com.louis383.coffeefinder.model +package tw.com.louis383.coffeefinder.core import android.annotation.SuppressLint import android.location.Location -import android.os.Handler import android.os.HandlerThread -import android.os.Looper import android.util.Log import com.google.android.gms.common.api.ApiException import com.google.android.gms.common.api.ResolvableApiException diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/model/data/api/CoffeeTripService.kt b/core/src/main/java/tw/com/louis383/coffeefinder/core/data/api/CoffeeTripService.kt similarity index 74% rename from app/src/main/java/tw/com/louis383/coffeefinder/model/data/api/CoffeeTripService.kt rename to core/src/main/java/tw/com/louis383/coffeefinder/core/data/api/CoffeeTripService.kt index d2faa95..d219c85 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/model/data/api/CoffeeTripService.kt +++ b/core/src/main/java/tw/com/louis383/coffeefinder/core/data/api/CoffeeTripService.kt @@ -1,9 +1,9 @@ -package tw.com.louis383.coffeefinder.model.data.api +package tw.com.louis383.coffeefinder.core.data.api import retrofit2.Response import retrofit2.http.GET import retrofit2.http.Query -import tw.com.louis383.coffeefinder.model.data.dto.NetworkShop +import tw.com.louis383.coffeefinder.core.data.dto.NetworkShop /** * Created by louis383 on 2017/1/16. diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/model/data/dto/NetworkShop.kt b/core/src/main/java/tw/com/louis383/coffeefinder/core/data/dto/NetworkShop.kt similarity index 89% rename from app/src/main/java/tw/com/louis383/coffeefinder/model/data/dto/NetworkShop.kt rename to core/src/main/java/tw/com/louis383/coffeefinder/core/data/dto/NetworkShop.kt index 7e6285d..b8031ce 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/model/data/dto/NetworkShop.kt +++ b/core/src/main/java/tw/com/louis383/coffeefinder/core/data/dto/NetworkShop.kt @@ -1,4 +1,4 @@ -package tw.com.louis383.coffeefinder.model.data.dto +package tw.com.louis383.coffeefinder.core.data.dto import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/core/src/main/java/tw/com/louis383/coffeefinder/core/data/mapper/NetworkShopListMapper.kt b/core/src/main/java/tw/com/louis383/coffeefinder/core/data/mapper/NetworkShopListMapper.kt new file mode 100644 index 0000000..99446b4 --- /dev/null +++ b/core/src/main/java/tw/com/louis383/coffeefinder/core/data/mapper/NetworkShopListMapper.kt @@ -0,0 +1,9 @@ +package tw.com.louis383.coffeefinder.core.data.mapper + +import tw.com.louis383.coffeefinder.core.data.dto.NetworkShop +import tw.com.louis383.coffeefinder.core.data.mapper.basic.ListMapper +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop +import javax.inject.Inject + +class NetworkShopListMapper @Inject constructor(mapper: NetworkShopMapper) : + ListMapper(mapper) \ No newline at end of file diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/model/data/mapper/NetworkShopMapper.kt b/core/src/main/java/tw/com/louis383/coffeefinder/core/data/mapper/NetworkShopMapper.kt similarity index 59% rename from app/src/main/java/tw/com/louis383/coffeefinder/model/data/mapper/NetworkShopMapper.kt rename to core/src/main/java/tw/com/louis383/coffeefinder/core/data/mapper/NetworkShopMapper.kt index 69c7827..07a6e52 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/model/data/mapper/NetworkShopMapper.kt +++ b/core/src/main/java/tw/com/louis383/coffeefinder/core/data/mapper/NetworkShopMapper.kt @@ -1,9 +1,9 @@ -package tw.com.louis383.coffeefinder.model.data.mapper +package tw.com.louis383.coffeefinder.core.data.mapper -import com.google.android.libraries.maps.model.LatLng -import tw.com.louis383.coffeefinder.model.data.dto.NetworkShop -import tw.com.louis383.coffeefinder.model.data.mapper.basic.Mapper -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.core.data.dto.NetworkShop +import tw.com.louis383.coffeefinder.core.data.mapper.basic.Mapper +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.core.domain.model.MapLocation import javax.inject.Inject class NetworkShopMapper @Inject constructor() : Mapper { @@ -16,7 +16,10 @@ class NetworkShopMapper @Inject constructor() : Mapper cheap = input.cheap, url = input.url, address = input.address, - location = LatLng(input.latitude, input.longitude), + mapLocation = MapLocation( + latitude = input.latitude, + longitude = input.longitude + ), distance = input.distance, limitedTime = input.limitedTime, socket = input.socket, diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/model/data/mapper/basic/IListMapper.kt b/core/src/main/java/tw/com/louis383/coffeefinder/core/data/mapper/basic/IListMapper.kt similarity index 80% rename from app/src/main/java/tw/com/louis383/coffeefinder/model/data/mapper/basic/IListMapper.kt rename to core/src/main/java/tw/com/louis383/coffeefinder/core/data/mapper/basic/IListMapper.kt index 208cf60..3c9e5f9 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/model/data/mapper/basic/IListMapper.kt +++ b/core/src/main/java/tw/com/louis383/coffeefinder/core/data/mapper/basic/IListMapper.kt @@ -1,4 +1,4 @@ -package tw.com.louis383.coffeefinder.model.data.mapper.basic +package tw.com.louis383.coffeefinder.core.data.mapper.basic interface IListMapper : Mapper, List> diff --git a/core/src/main/java/tw/com/louis383/coffeefinder/core/data/mapper/basic/Mapper.kt b/core/src/main/java/tw/com/louis383/coffeefinder/core/data/mapper/basic/Mapper.kt new file mode 100644 index 0000000..11c19b2 --- /dev/null +++ b/core/src/main/java/tw/com/louis383/coffeefinder/core/data/mapper/basic/Mapper.kt @@ -0,0 +1,5 @@ +package tw.com.louis383.coffeefinder.core.data.mapper.basic + +interface Mapper { + fun map(input: I): O +} \ No newline at end of file diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/model/domain/Result.kt b/core/src/main/java/tw/com/louis383/coffeefinder/core/domain/Result.kt similarity index 88% rename from app/src/main/java/tw/com/louis383/coffeefinder/model/domain/Result.kt rename to core/src/main/java/tw/com/louis383/coffeefinder/core/domain/Result.kt index 6cef2b3..e31d1b7 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/model/domain/Result.kt +++ b/core/src/main/java/tw/com/louis383/coffeefinder/core/domain/Result.kt @@ -1,4 +1,4 @@ -package tw.com.louis383.coffeefinder.model.domain +package tw.com.louis383.coffeefinder.core.domain sealed class Result { data class Success(val value: T) : Result() diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/model/domain/comparator/DistanceComparator.kt b/core/src/main/java/tw/com/louis383/coffeefinder/core/domain/comparator/DistanceComparator.kt similarity index 67% rename from app/src/main/java/tw/com/louis383/coffeefinder/model/domain/comparator/DistanceComparator.kt rename to core/src/main/java/tw/com/louis383/coffeefinder/core/domain/comparator/DistanceComparator.kt index 528eb05..f81077c 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/model/domain/comparator/DistanceComparator.kt +++ b/core/src/main/java/tw/com/louis383/coffeefinder/core/domain/comparator/DistanceComparator.kt @@ -1,6 +1,6 @@ -package tw.com.louis383.coffeefinder.model.domain.comparator +package tw.com.louis383.coffeefinder.core.domain.comparator -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop /** * Created by louis383 on 2017/3/2. diff --git a/core/src/main/java/tw/com/louis383/coffeefinder/core/domain/model/CoffeeShop.kt b/core/src/main/java/tw/com/louis383/coffeefinder/core/domain/model/CoffeeShop.kt new file mode 100644 index 0000000..3c5a03b --- /dev/null +++ b/core/src/main/java/tw/com/louis383/coffeefinder/core/domain/model/CoffeeShop.kt @@ -0,0 +1,27 @@ +package tw.com.louis383.coffeefinder.core.domain.model + +import android.os.Parcelable +import kotlinx.parcelize.Parcelize +import tw.com.louis383.coffeefinder.core.utils.MathUtils + +@Parcelize +data class CoffeeShop( + val id: String, + val name: String, + val wifi: Float, + val seat: Float, + val cheap: Float, + val url: String, + val address: String, + val mapLocation: MapLocation, + val distance: Double, + val limitedTime: String?, + val socket: String?, + val standingDesk: Boolean, + val mrt: String?, + val openTime: String? +) : Parcelable { + fun calculateDistanceFromLocation(fromLatLng: MapLocation): Int { + return MathUtils.calculateDistance(fromLatLng, mapLocation).toInt() + } +} diff --git a/core/src/main/java/tw/com/louis383/coffeefinder/core/domain/model/MapLocation.kt b/core/src/main/java/tw/com/louis383/coffeefinder/core/domain/model/MapLocation.kt new file mode 100644 index 0000000..e4772dd --- /dev/null +++ b/core/src/main/java/tw/com/louis383/coffeefinder/core/domain/model/MapLocation.kt @@ -0,0 +1,10 @@ +package tw.com.louis383.coffeefinder.core.domain.model + +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + +@Parcelize +data class MapLocation( + val latitude: Double, + val longitude: Double +) : Parcelable diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/model/domain/repository/CoffeeShopRepository.kt b/core/src/main/java/tw/com/louis383/coffeefinder/core/domain/repository/CoffeeShopRepository.kt similarity index 52% rename from app/src/main/java/tw/com/louis383/coffeefinder/model/domain/repository/CoffeeShopRepository.kt rename to core/src/main/java/tw/com/louis383/coffeefinder/core/domain/repository/CoffeeShopRepository.kt index ecefbdb..c7af5cb 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/model/domain/repository/CoffeeShopRepository.kt +++ b/core/src/main/java/tw/com/louis383/coffeefinder/core/domain/repository/CoffeeShopRepository.kt @@ -1,8 +1,8 @@ -package tw.com.louis383.coffeefinder.model.domain.repository +package tw.com.louis383.coffeefinder.core.domain.repository import android.location.Location -import tw.com.louis383.coffeefinder.model.domain.SimpleResult -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.core.domain.SimpleResult +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop interface CoffeeShopRepository { fun coffeeShopsCount(): Int diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/model/domain/repository/CoffeeShopRepositoryImpl.kt b/core/src/main/java/tw/com/louis383/coffeefinder/core/domain/repository/CoffeeShopRepositoryImpl.kt similarity index 78% rename from app/src/main/java/tw/com/louis383/coffeefinder/model/domain/repository/CoffeeShopRepositoryImpl.kt rename to core/src/main/java/tw/com/louis383/coffeefinder/core/domain/repository/CoffeeShopRepositoryImpl.kt index f58c36a..7de2750 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/model/domain/repository/CoffeeShopRepositoryImpl.kt +++ b/core/src/main/java/tw/com/louis383/coffeefinder/core/domain/repository/CoffeeShopRepositoryImpl.kt @@ -1,15 +1,15 @@ -package tw.com.louis383.coffeefinder.model.domain.repository +package tw.com.louis383.coffeefinder.core.domain.repository import android.location.Location import android.util.Log import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext -import tw.com.louis383.coffeefinder.model.data.api.CoffeeTripService -import tw.com.louis383.coffeefinder.model.data.mapper.NetworkShopListMapper -import tw.com.louis383.coffeefinder.model.domain.Result -import tw.com.louis383.coffeefinder.model.domain.SimpleResult -import tw.com.louis383.coffeefinder.model.domain.comparator.DistanceComparator -import tw.com.louis383.coffeefinder.model.domain.model.CoffeeShop +import tw.com.louis383.coffeefinder.core.data.api.CoffeeTripService +import tw.com.louis383.coffeefinder.core.data.mapper.NetworkShopListMapper +import tw.com.louis383.coffeefinder.core.domain.Result +import tw.com.louis383.coffeefinder.core.domain.SimpleResult +import tw.com.louis383.coffeefinder.core.domain.comparator.DistanceComparator +import tw.com.louis383.coffeefinder.core.domain.model.CoffeeShop import java.util.* import javax.inject.Inject import javax.inject.Singleton diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/model/domain/usecase/GetCoffeeShopsUseCase.kt b/core/src/main/java/tw/com/louis383/coffeefinder/core/domain/usecase/GetCoffeeShopsUseCase.kt similarity index 68% rename from app/src/main/java/tw/com/louis383/coffeefinder/model/domain/usecase/GetCoffeeShopsUseCase.kt rename to core/src/main/java/tw/com/louis383/coffeefinder/core/domain/usecase/GetCoffeeShopsUseCase.kt index 6d2c6c6..ea292d8 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/model/domain/usecase/GetCoffeeShopsUseCase.kt +++ b/core/src/main/java/tw/com/louis383/coffeefinder/core/domain/usecase/GetCoffeeShopsUseCase.kt @@ -1,7 +1,7 @@ -package tw.com.louis383.coffeefinder.model.domain.usecase +package tw.com.louis383.coffeefinder.core.domain.usecase import android.location.Location -import tw.com.louis383.coffeefinder.model.domain.repository.CoffeeShopRepository +import tw.com.louis383.coffeefinder.core.domain.repository.CoffeeShopRepository import javax.inject.Inject class GetCoffeeShopsUseCase @Inject constructor( diff --git a/app/src/main/java/tw/com/louis383/coffeefinder/utils/MathUtils.kt b/core/src/main/java/tw/com/louis383/coffeefinder/core/utils/MathUtils.kt similarity index 64% rename from app/src/main/java/tw/com/louis383/coffeefinder/utils/MathUtils.kt rename to core/src/main/java/tw/com/louis383/coffeefinder/core/utils/MathUtils.kt index 43c41ae..5d1608c 100644 --- a/app/src/main/java/tw/com/louis383/coffeefinder/utils/MathUtils.kt +++ b/core/src/main/java/tw/com/louis383/coffeefinder/core/utils/MathUtils.kt @@ -1,6 +1,6 @@ -package tw.com.louis383.coffeefinder.utils +package tw.com.louis383.coffeefinder.core.utils -import com.google.android.libraries.maps.model.LatLng +import tw.com.louis383.coffeefinder.core.domain.model.MapLocation object MathUtils { private const val EARTH_RADIUS = 6378137 @@ -12,14 +12,14 @@ object MathUtils { * @return Double, the unit of the return value is **meter**. */ @JvmStatic - fun calculateDistance(previousLocation: LatLng, location: LatLng): Double { - val currentLatitude = location.latitude - val currentLongitude = location.longitude + fun calculateDistance(previousMapLocation: MapLocation, mapLocation: MapLocation): Double { + val currentLatitude = mapLocation.latitude + val currentLongitude = mapLocation.longitude - val radiansPreviousLatitude = Math.toRadians(previousLocation.latitude) + val radiansPreviousLatitude = Math.toRadians(previousMapLocation.latitude) val radiansCurrentLatitude = Math.toRadians(currentLatitude) - val radiansPreviousLongitude = Math.toRadians(previousLocation.longitude) + val radiansPreviousLongitude = Math.toRadians(previousMapLocation.longitude) val radiansCurrentLongitude = Math.toRadians(currentLongitude) val radiansLatitudeChange = radiansPreviousLatitude - radiansCurrentLatitude diff --git a/core/src/test/java/tw/com/louis383/coffeefinder/core/ExampleUnitTest.kt b/core/src/test/java/tw/com/louis383/coffeefinder/core/ExampleUnitTest.kt new file mode 100644 index 0000000..64bd621 --- /dev/null +++ b/core/src/test/java/tw/com/louis383/coffeefinder/core/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package tw.com.louis383.coffeefinder.core + +import org.junit.Test + +import org.junit.Assert.* + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 6471b0c..06d6306 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,2 @@ include ':app', ':anchor-bottom-sheet-behavior' +include ':core'