Skip to content

Commit 59eb5d6

Browse files
committed
Expand detekt configuration
1 parent b9cd896 commit 59eb5d6

File tree

28 files changed

+259
-262
lines changed

28 files changed

+259
-262
lines changed

.detekt/config.yml

+117-90
Large diffs are not rendered by default.

.editorconfig

+10-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
1-
# http://editorconfig.org
1+
# EditorConfig: http://editorconfig.org
22
root = true
33

44
[*]
5-
indent_size=4
6-
insert_final_newline=true
7-
max_line_length=100
5+
insert_final_newline = true
6+
7+
[*.{yml, json}]
8+
indent_style = space
9+
indent_size = 2
10+
11+
[*.{kt, kts, java}]
12+
indent_size = 4
13+
max_line_length = 100

app/src/main/kotlin/com/vmadalin/android/SampleApp.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class SampleApp : Application() {
4444
*/
4545
@JvmStatic
4646
fun coreComponent(context: Context) =
47-
(context.applicationContext as SampleApp).coreComponent
47+
(context.applicationContext as? SampleApp)?.coreComponent
4848
}
4949

5050
/**

buildSrc/src/main/kotlin/plugins/detekt.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import io.gitlab.arturbosch.detekt.extensions.DetektExtension
2222
apply<DetektPlugin>()
2323

2424
configure<DetektExtension> {
25-
input = project.files("src/main/java")
25+
input = project.files("src/main/kotlin")
2626
config = files("$rootDir/.detekt/config.yml")
2727
filters = ".*build.*,.*/resources/.*,.*/tmp/.*"
2828
reports {

core/src/main/kotlin/com/vmadalin/core/di/modules/DatabaseModule.kt

+5-9
Original file line numberDiff line numberDiff line change
@@ -32,28 +32,24 @@ class DatabaseModule {
3232

3333
@Singleton
3434
@Provides
35-
fun provideMarvelDatabase(context: Context): MarvelDatabase {
36-
return Room.databaseBuilder(
35+
fun provideMarvelDatabase(context: Context) =
36+
Room.databaseBuilder(
3737
context,
3838
MarvelDatabase::class.java,
3939
BuildConfig.MARVEL_DATABASE_NAME
4040
).addMigrations(MIGRATION_1_2)
4141
.build()
42-
}
4342

4443
@Singleton
4544
@Provides
46-
fun provideCharacterFavoriteDao(marvelDatabase: MarvelDatabase): CharacterFavoriteDao {
47-
return marvelDatabase.characterFavoriteDao()
48-
}
45+
fun provideCharacterFavoriteDao(marvelDatabase: MarvelDatabase) =
46+
marvelDatabase.characterFavoriteDao()
4947

5048
@Singleton
5149
@Provides
5250
fun provideCharacterFavoriteRepository(
5351
characterFavoriteDao: CharacterFavoriteDao
54-
): CharacterFavoriteRepository {
55-
return CharacterFavoriteRepository(
52+
) = CharacterFavoriteRepository(
5653
characterFavoriteDao
5754
)
58-
}
5955
}

core/src/main/kotlin/com/vmadalin/core/di/modules/NetworkModule.kt

+4-9
Original file line numberDiff line numberDiff line change
@@ -50,22 +50,17 @@ class NetworkModule {
5050

5151
@Singleton
5252
@Provides
53-
fun provideRetrofitBuilder(): Retrofit {
54-
return Retrofit.Builder()
53+
fun provideRetrofitBuilder() =
54+
Retrofit.Builder()
5555
.baseUrl(BuildConfig.MARVEL_API_BASE_URL)
5656
.addConverterFactory(GsonConverterFactory.create())
5757
.build()
58-
}
5958

6059
@Singleton
6160
@Provides
62-
fun provideMarvelService(retrofit: Retrofit): MarvelService {
63-
return retrofit.create(MarvelService::class.java)
64-
}
61+
fun provideMarvelService(retrofit: Retrofit) = retrofit.create(MarvelService::class.java)
6562

6663
@Singleton
6764
@Provides
68-
fun provideMarvelRepository(service: MarvelService): MarvelRepository {
69-
return MarvelRepository(service)
70-
}
65+
fun provideMarvelRepository(service: MarvelService) = MarvelRepository(service)
7166
}

core/src/main/kotlin/com/vmadalin/core/extensions/ByteArrayExtensions.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@
1616

1717
package com.vmadalin.core.extensions
1818

19-
fun ByteArray.toHex(): String {
20-
return joinToString("") { "%02x".format(it) }
19+
fun ByteArray.toHex() = joinToString("") {
20+
"%02x".format(it)
2121
}

core/src/main/kotlin/com/vmadalin/core/extensions/NavigationExtensions.kt

+4
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import com.vmadalin.core.R
3333
* Issue tracking: https://issuetracker.google.com/issues/127932815
3434
* Issue github: https://github.com/android/architecture-components-samples/issues/530
3535
*/
36+
@Suppress("UnsafeCast", "UnsafeCallOnNullableType", "LongMethod", "ComplexMethod")
3637
fun BottomNavigationView.setupWithNavController(
3738
navGraphIds: List<Int>,
3839
fragmentManager: FragmentManager,
@@ -155,6 +156,7 @@ fun BottomNavigationView.setupWithNavController(
155156
return selectedNavController
156157
}
157158

159+
@Suppress("UnsafeCast")
158160
private fun BottomNavigationView.setupDeepLinks(
159161
navGraphIds: List<Int>,
160162
fragmentManager: FragmentManager,
@@ -179,6 +181,7 @@ private fun BottomNavigationView.setupDeepLinks(
179181
}
180182
}
181183

184+
@Suppress("UnsafeCast")
182185
private fun BottomNavigationView.setupItemReselected(
183186
graphIdToTagMap: SparseArray<String>,
184187
fragmentManager: FragmentManager
@@ -219,6 +222,7 @@ private fun attachNavHostFragment(
219222
.commitNow()
220223
}
221224

225+
@Suppress("UnsafeCast")
222226
private fun obtainNavHostFragment(
223227
fragmentManager: FragmentManager,
224228
fragmentTag: String,

core/src/main/kotlin/com/vmadalin/core/extensions/RecyclerViewExtensions.kt

+2-16
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
2121
import androidx.recyclerview.widget.RecyclerView
2222

2323
val RecyclerView.gridLayoutManager: GridLayoutManager?
24-
get() {
25-
val layoutManager = this.layoutManager
26-
return if (layoutManager is GridLayoutManager) {
27-
layoutManager
28-
} else {
29-
null
30-
}
31-
}
24+
get() = layoutManager as? GridLayoutManager
3225

3326
val RecyclerView.linearLayoutManager: LinearLayoutManager?
34-
get() {
35-
val layoutManager = this.layoutManager
36-
return if (layoutManager is LinearLayoutManager) {
37-
layoutManager
38-
} else {
39-
null
40-
}
41-
}
27+
get() = layoutManager as? LinearLayoutManager

core/src/main/kotlin/com/vmadalin/core/extensions/StringExtensions.kt

+2-3
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@ package com.vmadalin.core.extensions
1818

1919
import java.security.MessageDigest
2020

21-
fun String.toMD5(): String {
22-
return MessageDigest
21+
fun String.toMD5() =
22+
MessageDigest
2323
.getInstance("MD5")
2424
.digest(toByteArray())
2525
.toHex()
26-
}

core/src/main/kotlin/com/vmadalin/core/network/repositiories/MarvelRepository.kt

+2-3
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ class MarvelRepository(
5656
// Private methods
5757
// ============================================================================================
5858

59-
private fun generateApiHash(timestamp: String): String {
60-
return HASH_FORMAT.format(timestamp, API_PRIVATE_KEY, API_PUBLIC_KEY).toMD5()
61-
}
59+
private fun generateApiHash(timestamp: String) =
60+
HASH_FORMAT.format(timestamp, API_PRIVATE_KEY, API_PUBLIC_KEY).toMD5()
6261
}

core/src/main/kotlin/com/vmadalin/core/network/responses/BaseResponse.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ import com.vmadalin.core.annotations.OpenForTesting
2020

2121
@OpenForTesting
2222
data class BaseResponse<T>(
23-
var code: Any,
24-
var status: String,
23+
val code: Any,
24+
val status: String,
2525
val message: String,
26-
var data: DataResponse<T>
26+
val data: DataResponse<T>
2727
)

core/src/main/kotlin/com/vmadalin/core/network/responses/CharacterResponse.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ import com.vmadalin.core.annotations.OpenForTesting
2020

2121
@OpenForTesting
2222
data class CharacterResponse(
23-
var id: Long,
24-
var name: String,
25-
var description: String,
26-
var thumbnail: CharacterThumbnailResponse
23+
val id: Long,
24+
val name: String,
25+
val description: String,
26+
val thumbnail: CharacterThumbnailResponse
2727
)

core/src/main/kotlin/com/vmadalin/core/network/responses/CharacterThumbnailResponse.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ import com.vmadalin.core.annotations.OpenForTesting
2020

2121
@OpenForTesting
2222
data class CharacterThumbnailResponse(
23-
var path: String,
24-
var extension: String
23+
val path: String,
24+
val extension: String
2525
)

core/src/main/kotlin/com/vmadalin/core/network/responses/DataResponse.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ import com.vmadalin.core.annotations.OpenForTesting
2020

2121
@OpenForTesting
2222
data class DataResponse<T>(
23-
var offset: Int,
24-
var limit: Int,
25-
var total: Int,
26-
var count: Int,
27-
var results: List<T>
23+
val offset: Int,
24+
val limit: Int,
25+
val total: Int,
26+
val count: Int,
27+
val results: List<T>
2828
)

core/src/main/kotlin/com/vmadalin/core/ui/recyclerview/RecyclerViewItemDecoration.kt

+38-26
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import android.view.View
2121
import androidx.annotation.VisibleForTesting
2222
import androidx.annotation.VisibleForTesting.PRIVATE
2323
import androidx.recyclerview.widget.GridLayoutManager
24+
import androidx.recyclerview.widget.LinearLayoutManager
2425
import androidx.recyclerview.widget.RecyclerView
2526

2627
class RecyclerViewItemDecoration(
@@ -34,44 +35,55 @@ class RecyclerViewItemDecoration(
3435
parent: RecyclerView,
3536
state: RecyclerView.State
3637
) {
37-
setSpacingForDirection(
38-
outRect = outRect,
39-
layoutManager = parent.layoutManager,
40-
position = parent.getChildViewHolder(view).adapterPosition,
41-
itemCount = state.itemCount
42-
)
38+
when (val layoutManager = parent.layoutManager) {
39+
is GridLayoutManager -> configSpacingForGridLayoutManager(
40+
outRect = outRect,
41+
layoutManager = layoutManager,
42+
position = parent.getChildViewHolder(view).adapterPosition,
43+
itemCount = state.itemCount
44+
)
45+
is LinearLayoutManager -> configSpacingForLinearLayoutManager(
46+
outRect = outRect,
47+
layoutManager = layoutManager,
48+
position = parent.getChildViewHolder(view).adapterPosition,
49+
itemCount = state.itemCount
50+
)
51+
}
4352
}
4453

4554
// ============================================================================================
4655
// Private methods
4756
// ============================================================================================
4857

49-
private fun setSpacingForDirection(
58+
private fun configSpacingForGridLayoutManager(
5059
outRect: Rect,
51-
layoutManager: RecyclerView.LayoutManager?,
60+
layoutManager: GridLayoutManager,
5261
position: Int,
5362
itemCount: Int
5463
) {
55-
outRect.left = spacingPx
56-
outRect.top = spacingPx
64+
val cols = layoutManager.spanCount
65+
val rows = if (itemCount % 2 == 0) itemCount / cols else itemCount / cols + 1
5766

58-
when (layoutManager) {
59-
is GridLayoutManager -> {
60-
val cols = layoutManager.spanCount
61-
val rows = if (itemCount % 2 == 0) itemCount / cols else (itemCount / cols) + 1
67+
outRect.top = spacingPx
68+
outRect.left = spacingPx
69+
outRect.right = if (position % cols == cols - 1) spacingPx else 0
70+
outRect.bottom = if (position / cols == rows - 1) spacingPx else 0
71+
}
6272

63-
outRect.right = if (position % cols == cols - 1) spacingPx else 0
64-
outRect.bottom = if (position / cols == rows - 1) spacingPx else 0
65-
}
66-
is RecyclerView.LayoutManager -> {
67-
if (layoutManager.canScrollHorizontally()) {
68-
outRect.right = if (position == itemCount - 1) spacingPx else 0
69-
outRect.bottom = spacingPx
70-
} else if (layoutManager.canScrollVertically()) {
71-
outRect.right = spacingPx
72-
outRect.bottom = if (position == itemCount - 1) spacingPx else 0
73-
}
74-
}
73+
private fun configSpacingForLinearLayoutManager(
74+
outRect: Rect,
75+
layoutManager: LinearLayoutManager,
76+
position: Int,
77+
itemCount: Int
78+
) {
79+
outRect.top = spacingPx
80+
outRect.left = spacingPx
81+
if (layoutManager.canScrollHorizontally()) {
82+
outRect.right = if (position == itemCount - 1) spacingPx else 0
83+
outRect.bottom = spacingPx
84+
} else if (layoutManager.canScrollVertically()) {
85+
outRect.right = spacingPx
86+
outRect.bottom = if (position == itemCount - 1) spacingPx else 0
7587
}
7688
}
7789
}

core/src/main/kotlin/com/vmadalin/core/ui/utils/ThemeUtils.kt

+5-8
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,13 @@ object ThemeUtils {
2626
/**
2727
* Whether the current configuration is a dark theme i.e. in Night configuration.
2828
*/
29-
fun isDarkTheme(context: Context): Boolean {
30-
return context.resources.configuration.uiMode and
29+
fun isDarkTheme(context: Context) = context.resources.configuration.uiMode and
3130
Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES
32-
}
3331

3432
/**
3533
* Whether the current configuration is a light theme i.e. in Day configuration.
3634
*/
37-
fun isLightTheme(context: Context): Boolean {
38-
return !isDarkTheme(context)
39-
}
35+
fun isLightTheme(context: Context) = !isDarkTheme(context)
4036

4137
/**
4238
* Force [AppCompatDelegate] mode to night/notnight
@@ -47,10 +43,11 @@ object ThemeUtils {
4743
fun setNightMode(forceNight: Boolean, delay: Long = 0L) {
4844
Handler().postDelayed({
4945
AppCompatDelegate.setDefaultNightMode(
50-
if (forceNight)
46+
if (forceNight) {
5147
AppCompatDelegate.MODE_NIGHT_YES
52-
else
48+
} else {
5349
AppCompatDelegate.MODE_NIGHT_NO
50+
}
5451
)
5552
}, delay)
5653
}

features/characters_favorites/src/main/kotlin/com/vmadalin/dynamicfeatures/charactersfavorites/ui/favorite/di/CharactersFavoriteModule.kt

+5-7
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,11 @@ class CharactersFavoriteModule(private val fragment: CharactersFavoriteFragment)
3434
@FeatureScope
3535
fun providesCharactersFavoriteViewModel(
3636
characterFavoriteRepository: CharacterFavoriteRepository
37-
): CharactersFavoriteViewModel {
38-
return fragment.viewModel {
39-
CharactersFavoriteViewModel(
40-
characterFavoriteRepository = characterFavoriteRepository,
41-
coroutineScope = CoroutineScope(Dispatchers.IO)
42-
)
43-
}
37+
) = fragment.viewModel {
38+
CharactersFavoriteViewModel(
39+
characterFavoriteRepository = characterFavoriteRepository,
40+
coroutineScope = CoroutineScope(Dispatchers.IO)
41+
)
4442
}
4543

4644
@Provides

features/characters_list/src/main/kotlin/com/vmadalin/dynamicfeatures/characterslist/ui/detail/CharacterDetailFragment.kt

+1-2
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,8 @@ class CharacterDetailFragment :
7272
R.string.character_detail_added_to_favorite_message,
7373
Snackbar.LENGTH_LONG
7474
).show()
75-
is CharacterDetailViewState.Dismiss -> {
75+
is CharacterDetailViewState.Dismiss ->
7676
findNavController().navigateUp()
77-
}
7877
else -> progressDialog.dismiss()
7978
}
8079
}

0 commit comments

Comments
 (0)