Skip to content

Commit afc92bf

Browse files
authored
Merge pull request #592 from naveensingh/sdk_and_viewbinding_migration
Migrate to View binding, SDK 34 and Version catalogs
2 parents ce2b213 + 1bcab95 commit afc92bf

File tree

68 files changed

+1363
-1237
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+1363
-1237
lines changed

app/build.gradle

Lines changed: 0 additions & 93 deletions
This file was deleted.

app/build.gradle.kts

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
2+
import org.jetbrains.kotlin.konan.properties.Properties
3+
import java.io.FileInputStream
4+
5+
plugins {
6+
alias(libs.plugins.android)
7+
alias(libs.plugins.kotlinAndroid)
8+
alias(libs.plugins.ksp)
9+
}
10+
11+
val keystorePropertiesFile: File = rootProject.file("keystore.properties")
12+
val keystoreProperties = Properties()
13+
if (keystorePropertiesFile.exists()) {
14+
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
15+
}
16+
17+
android {
18+
compileSdk = project.libs.versions.app.build.compileSDKVersion.get().toInt()
19+
20+
defaultConfig {
21+
applicationId = libs.versions.app.version.appId.get()
22+
minSdk = project.libs.versions.app.build.minimumSDK.get().toInt()
23+
targetSdk = project.libs.versions.app.build.targetSDK.get().toInt()
24+
versionName = project.libs.versions.app.version.versionName.get()
25+
versionCode = project.libs.versions.app.version.versionCode.get().toInt()
26+
setProperty("archivesBaseName", "music-player")
27+
vectorDrawables.useSupportLibrary = true
28+
}
29+
30+
signingConfigs {
31+
if (keystorePropertiesFile.exists()) {
32+
register("release") {
33+
keyAlias = keystoreProperties["keyAlias"] as String
34+
keyPassword = keystoreProperties["keyPassword"] as String
35+
storeFile = file(keystoreProperties["storeFile"] as String)
36+
storePassword = keystoreProperties["storePassword"] as String
37+
}
38+
}
39+
}
40+
41+
buildFeatures {
42+
viewBinding = true
43+
buildConfig = true
44+
}
45+
46+
buildTypes {
47+
debug {
48+
applicationIdSuffix = ".debug"
49+
}
50+
release {
51+
isMinifyEnabled = true
52+
proguardFiles(
53+
getDefaultProguardFile("proguard-android-optimize.txt"),
54+
"proguard-rules.pro"
55+
)
56+
if (keystorePropertiesFile.exists()) {
57+
signingConfig = signingConfigs.getByName("release")
58+
}
59+
}
60+
}
61+
62+
flavorDimensions.add("variants")
63+
productFlavors {
64+
register("core")
65+
register("fdroid")
66+
register("prepaid")
67+
}
68+
69+
sourceSets {
70+
getByName("main").java.srcDirs("src/main/kotlin")
71+
}
72+
73+
compileOptions {
74+
val currentJavaVersionFromLibs = JavaVersion.valueOf(libs.versions.app.build.javaVersion.get().toString())
75+
sourceCompatibility = currentJavaVersionFromLibs
76+
targetCompatibility = currentJavaVersionFromLibs
77+
isCoreLibraryDesugaringEnabled = true
78+
}
79+
80+
tasks.withType<KotlinCompile> {
81+
kotlinOptions.jvmTarget = project.libs.versions.app.build.kotlinJVMTarget.get()
82+
}
83+
84+
namespace = libs.versions.app.version.appId.get()
85+
86+
lint {
87+
checkReleaseBuilds = false
88+
abortOnError = false
89+
}
90+
}
91+
92+
dependencies {
93+
implementation(libs.simple.mobile.tools.commons)
94+
implementation(libs.eventbus)
95+
implementation(libs.androidx.media)
96+
implementation(libs.androidx.swiperefreshlayout)
97+
implementation(libs.androidx.constraintlayout)
98+
implementation(libs.androidx.lifecycle.process)
99+
implementation(libs.androidx.media3.session)
100+
implementation(libs.androidx.media3.exoplayer)
101+
implementation(libs.lottie)
102+
implementation(libs.m3u.parser)
103+
implementation(libs.autofittextview)
104+
implementation(libs.jaudiotagger)
105+
coreLibraryDesugaring(libs.desugar.jdk.libs)
106+
107+
implementation(libs.bundles.room)
108+
ksp(libs.androidx.room.compiler)
109+
}

app/proguard-rules.pro

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,17 @@
88
public <fields>;
99
}
1010

11+
# Gson uses generic type information stored in a class file when working with
12+
# fields. Proguard removes such information by default, keep it.
13+
-keepattributes Signature
14+
# This is also needed for R8 in compat mode since multiple optimizations will
15+
# remove the generic signature such as class merging and argument removal.
16+
-keep class com.google.gson.reflect.TypeToken { *; }
17+
-keep class * extends com.google.gson.reflect.TypeToken
18+
1119
# EventBus
1220
-keepattributes *Annotation*
1321
-keepclassmembers class ** {
1422
@org.greenrobot.eventbus.Subscribe <methods>;
1523
}
1624
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
17-
18-
# Picasso
19-
-dontwarn javax.annotation.**
20-
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
21-
-dontwarn org.codehaus.mojo.animal_sniffer.*
22-
-dontwarn okhttp3.internal.platform.ConscryptPlatform

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
<uses-permission android:name="android.permission.WAKE_LOCK" />
88
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
9+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
910
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
1011
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
1112
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

app/src/main/kotlin/com/simplemobiletools/musicplayer/activities/AlbumsActivity.kt

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,29 +10,30 @@ import com.simplemobiletools.commons.helpers.NavigationIcon
1010
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
1111
import com.simplemobiletools.musicplayer.R
1212
import com.simplemobiletools.musicplayer.adapters.AlbumsTracksAdapter
13+
import com.simplemobiletools.musicplayer.databinding.ActivityAlbumsBinding
1314
import com.simplemobiletools.musicplayer.extensions.audioHelper
1415
import com.simplemobiletools.musicplayer.helpers.ALBUM
1516
import com.simplemobiletools.musicplayer.helpers.ARTIST
1617
import com.simplemobiletools.musicplayer.models.*
17-
import kotlinx.android.synthetic.main.activity_albums.*
18-
import kotlinx.android.synthetic.main.view_current_track_bar.current_track_bar
1918

2019
// Artists -> Albums -> Tracks
2120
class AlbumsActivity : SimpleMusicActivity() {
2221

22+
private val binding by viewBinding(ActivityAlbumsBinding::inflate)
23+
2324
override fun onCreate(savedInstanceState: Bundle?) {
2425
isMaterialActivity = true
2526
super.onCreate(savedInstanceState)
26-
setContentView(R.layout.activity_albums)
27+
setContentView(binding.root)
2728

28-
updateMaterialActivityViews(albums_coordinator, albums_holder, useTransparentNavigation = true, useTopSearchMenu = false)
29-
setupMaterialScrollListener(albums_list, albums_toolbar)
29+
updateMaterialActivityViews(binding.albumsCoordinator, binding.albumsHolder, useTransparentNavigation = true, useTopSearchMenu = false)
30+
setupMaterialScrollListener(binding.albumsList, binding.albumsToolbar)
3031

31-
albums_fastscroller.updateColors(getProperPrimaryColor())
32+
binding.albumsFastscroller.updateColors(getProperPrimaryColor())
3233

3334
val artistType = object : TypeToken<Artist>() {}.type
3435
val artist = Gson().fromJson<Artist>(intent.getStringExtra(ARTIST), artistType)
35-
albums_toolbar.title = artist.title
36+
binding.albumsToolbar.title = artist.title
3637

3738
ensureBackgroundThread {
3839
val albums = audioHelper.getArtistAlbums(artist.id)
@@ -50,7 +51,7 @@ class AlbumsActivity : SimpleMusicActivity() {
5051
listItems.addAll(albumTracks)
5152

5253
runOnUiThread {
53-
AlbumsTracksAdapter(this, listItems, albums_list) {
54+
AlbumsTracksAdapter(this, listItems, binding.albumsList) {
5455
hideKeyboard()
5556
if (it is Album) {
5657
Intent(this, TracksActivity::class.java).apply {
@@ -63,25 +64,29 @@ class AlbumsActivity : SimpleMusicActivity() {
6364
val startIndex = albumTracks.indexOf(it as Track)
6465
prepareAndPlay(albumTracks, startIndex)
6566
} else {
66-
PermissionRequiredDialog(this, R.string.allow_notifications_music_player, { openNotificationSettings() })
67+
PermissionRequiredDialog(
68+
this,
69+
com.simplemobiletools.commons.R.string.allow_notifications_music_player,
70+
{ openNotificationSettings() }
71+
)
6772
}
6873
}
6974
}
7075
}.apply {
71-
albums_list.adapter = this
76+
binding.albumsList.adapter = this
7277
}
7378

7479
if (areSystemAnimationsEnabled) {
75-
albums_list.scheduleLayoutAnimation()
80+
binding.albumsList.scheduleLayoutAnimation()
7681
}
7782
}
7883
}
7984

80-
setupCurrentTrackBar(current_track_bar)
85+
setupCurrentTrackBar(binding.currentTrackBar.root)
8186
}
8287

8388
override fun onResume() {
8489
super.onResume()
85-
setupToolbar(albums_toolbar, NavigationIcon.Arrow)
90+
setupToolbar(binding.albumsToolbar, NavigationIcon.Arrow)
8691
}
8792
}

0 commit comments

Comments
 (0)