Skip to content

Commit 68b00ac

Browse files
authored
Merge pull request #733 from fatihergin/feature/viewbinding-sdk-34-migration
Feature/viewbinding sdk 34 migration
2 parents ebb4bf6 + 6cee221 commit 68b00ac

27 files changed

Lines changed: 951 additions & 677 deletions

app/build.gradle

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
apply plugin: 'com.android.application'
22
apply plugin: 'kotlin-android'
3-
apply plugin: 'kotlin-android-extensions'
43

54
def keystorePropertiesFile = rootProject.file("keystore.properties")
65
def keystoreProperties = new Properties()
@@ -9,12 +8,13 @@ if (keystorePropertiesFile.exists()) {
98
}
109

1110
android {
12-
compileSdkVersion 33
11+
namespace "com.simplemobiletools.filemanager.pro"
12+
compileSdk 34
1313

1414
defaultConfig {
1515
applicationId "com.simplemobiletools.filemanager.pro"
16-
minSdkVersion 23
17-
targetSdkVersion 33
16+
minSdk 23
17+
targetSdk 34
1818
versionCode 135
1919
versionName "6.16.0"
2020
multiDexEnabled true
@@ -33,6 +33,11 @@ android {
3333
}
3434
}
3535

36+
buildFeatures {
37+
buildConfig true
38+
viewBinding true
39+
}
40+
3641
buildTypes {
3742
debug {
3843
applicationIdSuffix ".debug"
@@ -46,7 +51,16 @@ android {
4651
}
4752
}
4853

49-
flavorDimensions "variants"
54+
compileOptions {
55+
sourceCompatibility JavaVersion.VERSION_17
56+
targetCompatibility JavaVersion.VERSION_17
57+
}
58+
59+
kotlinOptions {
60+
jvmTarget = '17'
61+
}
62+
63+
flavorDimensions = ["variants"]
5064
productFlavors {
5165
core {}
5266
fdroid {}
@@ -64,7 +78,7 @@ android {
6478
}
6579

6680
dependencies {
67-
implementation 'com.github.SimpleMobileTools:Simple-Commons:ae8713396b'
81+
implementation 'com.github.SimpleMobileTools:Simple-Commons:d1629c7f1a'
6882
implementation 'com.github.tibbi:AndroidPdfViewer:e6a533125b'
6983
implementation 'com.github.Stericson:RootTools:df729dcb13'
7084
implementation 'com.github.Stericson:RootShell:1.6'

app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/DecompressActivity.kt

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,22 @@ import com.simplemobiletools.commons.helpers.ensureBackgroundThread
1111
import com.simplemobiletools.commons.helpers.isOreoPlus
1212
import com.simplemobiletools.filemanager.pro.R
1313
import com.simplemobiletools.filemanager.pro.adapters.DecompressItemsAdapter
14+
import com.simplemobiletools.filemanager.pro.databinding.ActivityDecompressBinding
1415
import com.simplemobiletools.filemanager.pro.extensions.config
1516
import com.simplemobiletools.filemanager.pro.models.ListItem
16-
import kotlinx.android.synthetic.main.activity_decompress.*
1717
import net.lingala.zip4j.exception.ZipException
1818
import net.lingala.zip4j.exception.ZipException.Type
1919
import net.lingala.zip4j.io.inputstream.ZipInputStream
2020
import net.lingala.zip4j.model.LocalFileHeader
2121
import java.io.BufferedInputStream
22+
import java.io.File
2223

2324
class DecompressActivity : SimpleActivity() {
2425
companion object {
2526
private const val PASSWORD = "password"
2627
}
2728

29+
private val binding by lazy(LazyThreadSafetyMode.NONE) { ActivityDecompressBinding.inflate(layoutInflater) }
2830
private val allFiles = ArrayList<ListItem>()
2931
private var currentPath = ""
3032
private var uri: Uri? = null
@@ -34,10 +36,12 @@ class DecompressActivity : SimpleActivity() {
3436
override fun onCreate(savedInstanceState: Bundle?) {
3537
isMaterialActivity = true
3638
super.onCreate(savedInstanceState)
37-
setContentView(R.layout.activity_decompress)
39+
setContentView(binding.root)
3840
setupOptionsMenu()
39-
updateMaterialActivityViews(decompress_coordinator, decompress_list, useTransparentNavigation = true, useTopSearchMenu = false)
40-
setupMaterialScrollListener(decompress_list, decompress_toolbar)
41+
binding.apply {
42+
updateMaterialActivityViews(decompressCoordinator, decompressList, useTransparentNavigation = true, useTopSearchMenu = false)
43+
setupMaterialScrollListener(decompressList, decompressToolbar)
44+
}
4145

4246
uri = intent.data
4347
if (uri == null) {
@@ -48,13 +52,13 @@ class DecompressActivity : SimpleActivity() {
4852
password = savedInstanceState?.getString(PASSWORD, null)
4953

5054
val realPath = getRealPathFromURI(uri!!)
51-
decompress_toolbar.title = realPath?.getFilenameFromPath() ?: Uri.decode(uri.toString().getFilenameFromPath())
55+
binding.decompressToolbar.title = realPath?.getFilenameFromPath() ?: Uri.decode(uri.toString().getFilenameFromPath())
5256
setupFilesList()
5357
}
5458

5559
override fun onResume() {
5660
super.onResume()
57-
setupToolbar(decompress_toolbar, NavigationIcon.Arrow)
61+
setupToolbar(binding.decompressToolbar, NavigationIcon.Arrow)
5862
}
5963

6064
override fun onSaveInstanceState(outState: Bundle) {
@@ -63,7 +67,7 @@ class DecompressActivity : SimpleActivity() {
6367
}
6468

6569
private fun setupOptionsMenu() {
66-
decompress_toolbar.setOnMenuItemClickListener { menuItem ->
70+
binding.decompressToolbar.setOnMenuItemClickListener { menuItem ->
6771
when (menuItem.itemId) {
6872
R.id.decompress -> decompressFiles()
6973
else -> return@setOnMenuItemClickListener false
@@ -90,12 +94,12 @@ class DecompressActivity : SimpleActivity() {
9094
currentPath = path
9195
try {
9296
val listItems = getFolderItems(currentPath)
93-
DecompressItemsAdapter(this, listItems, decompress_list) {
97+
DecompressItemsAdapter(this, listItems, binding.decompressList) {
9498
if ((it as ListItem).isDirectory) {
9599
updateCurrentPath(it.path)
96100
}
97101
}.apply {
98-
decompress_list.adapter = this
102+
binding.decompressList.adapter = this
99103
}
100104
} catch (e: Exception) {
101105
showErrorToast(e)
@@ -141,6 +145,11 @@ class DecompressActivity : SimpleActivity() {
141145
continue
142146
}
143147

148+
val isVulnerableForZipPathTraversal = !File(newPath).canonicalPath.startsWith(parent)
149+
if (isVulnerableForZipPathTraversal) {
150+
continue
151+
}
152+
144153
val fos = getFileOutputStreamSync(newPath, newPath.getMimeType())
145154
var count: Int
146155
while (true) {

app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/FavoritesActivity.kt

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,31 @@ import com.simplemobiletools.commons.helpers.NavigationIcon
1010
import com.simplemobiletools.commons.interfaces.RefreshRecyclerViewListener
1111
import com.simplemobiletools.filemanager.pro.R
1212
import com.simplemobiletools.filemanager.pro.adapters.ManageFavoritesAdapter
13+
import com.simplemobiletools.filemanager.pro.databinding.ActivityFavoritesBinding
1314
import com.simplemobiletools.filemanager.pro.extensions.config
14-
import kotlinx.android.synthetic.main.activity_favorites.*
1515

1616
class FavoritesActivity : SimpleActivity(), RefreshRecyclerViewListener {
17+
private val binding by lazy(LazyThreadSafetyMode.NONE) { ActivityFavoritesBinding.inflate(layoutInflater) }
1718

1819
override fun onCreate(savedInstanceState: Bundle?) {
1920
isMaterialActivity = true
2021
super.onCreate(savedInstanceState)
21-
setContentView(R.layout.activity_favorites)
22+
setContentView(binding.root)
2223
setupOptionsMenu()
2324
updateFavorites()
24-
updateMaterialActivityViews(manage_favorites_coordinator, manage_favorites_list, useTransparentNavigation = true, useTopSearchMenu = false)
25-
setupMaterialScrollListener(manage_favorites_list, manage_favorites_toolbar)
25+
binding.apply {
26+
updateMaterialActivityViews(manageFavoritesCoordinator, manageFavoritesList, useTransparentNavigation = true, useTopSearchMenu = false)
27+
setupMaterialScrollListener(manageFavoritesList, manageFavoritesToolbar)
28+
}
2629
}
2730

2831
override fun onResume() {
2932
super.onResume()
30-
setupToolbar(manage_favorites_toolbar, NavigationIcon.Arrow)
33+
setupToolbar(binding.manageFavoritesToolbar, NavigationIcon.Arrow)
3134
}
3235

3336
private fun setupOptionsMenu() {
34-
manage_favorites_toolbar.setOnMenuItemClickListener { menuItem ->
37+
binding.manageFavoritesToolbar.setOnMenuItemClickListener { menuItem ->
3538
when (menuItem.itemId) {
3639
R.id.add_favorite -> addFavorite()
3740
else -> return@setOnMenuItemClickListener false
@@ -41,22 +44,24 @@ class FavoritesActivity : SimpleActivity(), RefreshRecyclerViewListener {
4144
}
4245

4346
private fun updateFavorites() {
44-
val favorites = ArrayList<String>()
45-
config.favorites.mapTo(favorites) { it }
46-
manage_favorites_placeholder.beVisibleIf(favorites.isEmpty())
47-
manage_favorites_placeholder.setTextColor(getProperTextColor())
47+
binding.apply {
48+
val favorites = ArrayList<String>()
49+
config.favorites.mapTo(favorites) { it }
50+
manageFavoritesPlaceholder.beVisibleIf(favorites.isEmpty())
51+
manageFavoritesPlaceholder.setTextColor(getProperTextColor())
4852

49-
manage_favorites_placeholder_2.apply {
50-
paintFlags = paintFlags or Paint.UNDERLINE_TEXT_FLAG
51-
beVisibleIf(favorites.isEmpty())
52-
setTextColor(getProperPrimaryColor())
53-
setOnClickListener {
54-
addFavorite()
53+
manageFavoritesPlaceholder2.apply {
54+
paintFlags = paintFlags or Paint.UNDERLINE_TEXT_FLAG
55+
beVisibleIf(favorites.isEmpty())
56+
setTextColor(getProperPrimaryColor())
57+
setOnClickListener {
58+
addFavorite()
59+
}
5560
}
56-
}
5761

58-
ManageFavoritesAdapter(this, favorites, this, manage_favorites_list) { }.apply {
59-
manage_favorites_list.adapter = this
62+
ManageFavoritesAdapter(this@FavoritesActivity, favorites, this@FavoritesActivity, manageFavoritesList) { }.apply {
63+
manageFavoritesList.adapter = this
64+
}
6065
}
6166
}
6267

0 commit comments

Comments
 (0)