Skip to content

Commit 2c9438d

Browse files
authored
Merge branch 'master' into pull-to-refresh-option
2 parents b019003 + d741dc5 commit 2c9438d

File tree

52 files changed

+591
-637
lines changed

Some content is hidden

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

52 files changed

+591
-637
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ Contains no ads or unnecessary permissions. It is fully opensource, provides cus
1010

1111
This app is just one piece of a bigger series of apps. You can find the rest of them at https://www.simplemobiletools.com
1212

13-
<a href='https://play.google.com/store/apps/details?id=com.simplemobiletools.filemanager.pro'><img src='https://simplemobiletools.com/assets/images/google-play.png' alt='Get it on Google Play' height='45' /></a>
14-
<a href='https://f-droid.org/packages/com.simplemobiletools.filemanager.pro'><img src='https://simplemobiletools.com/assets/images/f-droid.png' alt='Get it on F-Droid' height='45' /></a>
13+
<a href='https://play.google.com/store/apps/details?id=com.simplemobiletools.filemanager.pro'><img src='https://simplemobiletools.com/images/button-google-play.svg' alt='Get it on Google Play' height='45' /></a>
14+
<a href='https://f-droid.org/packages/com.simplemobiletools.filemanager.pro'><img src='https://simplemobiletools.com/images/button-f-droid.png' alt='Get it on F-Droid' height='45' /></a>
1515

1616
<div style="display:flex;">
1717
<img alt="App image" src="fastlane/metadata/android/en-US/images/phoneScreenshots/english/1.jpg" width="30%">

app/build.gradle

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@ if (keystorePropertiesFile.exists()) {
99
}
1010

1111
android {
12-
compileSdkVersion 29
13-
buildToolsVersion "29.0.3"
12+
compileSdkVersion 30
1413

1514
defaultConfig {
1615
applicationId "com.simplemobiletools.filemanager.pro"
1716
minSdkVersion 21
18-
targetSdkVersion 29
17+
targetSdkVersion 30
1918
versionCode 110
2019
versionName "6.10.1"
2120
multiDexEnabled true
@@ -58,7 +57,7 @@ android {
5857
}
5958

6059
dependencies {
61-
implementation 'com.github.SimpleMobileTools:Simple-Commons:5079455be9'
60+
implementation 'com.github.SimpleMobileTools:Simple-Commons:51f1996098'
6261
implementation 'com.github.Stericson:RootTools:df729dcb13'
6362
implementation 'com.github.Stericson:RootShell:1.6'
6463
implementation 'com.alexvasilkov:gesture-views:2.5.2'

app/src/main/AndroidManifest.xml

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

77
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
88
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
9+
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
910

1011
<uses-feature
1112
android:name="android.hardware.faketouch"
@@ -113,21 +114,11 @@
113114
android:label="@string/about"
114115
android:parentActivityName=".activities.MainActivity"/>
115116

116-
<activity
117-
android:name="com.simplemobiletools.commons.activities.LicenseActivity"
118-
android:label="@string/third_party_licences"
119-
android:parentActivityName="com.simplemobiletools.commons.activities.AboutActivity"/>
120-
121117
<activity
122118
android:name="com.simplemobiletools.commons.activities.CustomizationActivity"
123119
android:label="@string/customize_colors"
124120
android:parentActivityName=".activities.SettingsActivity"/>
125121

126-
<activity
127-
android:name="com.simplemobiletools.commons.activities.FAQActivity"
128-
android:label="@string/frequently_asked_questions"
129-
android:parentActivityName="com.simplemobiletools.commons.activities.AboutActivity"/>
130-
131122
<provider
132123
android:name="androidx.core.content.FileProvider"
133124
android:authorities="${applicationId}.provider"

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

Lines changed: 60 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.simplemobiletools.filemanager.pro.activities
22

3+
import android.annotation.SuppressLint
34
import android.app.Activity
45
import android.app.SearchManager
56
import android.content.ClipData
@@ -8,13 +9,18 @@ import android.content.Intent
89
import android.graphics.drawable.ColorDrawable
910
import android.graphics.drawable.Drawable
1011
import android.media.RingtoneManager
12+
import android.net.Uri
1113
import android.os.Bundle
14+
import android.os.Environment
1215
import android.os.Handler
16+
import android.provider.Settings
1317
import android.view.Menu
1418
import android.view.MenuItem
1519
import androidx.appcompat.widget.SearchView
1620
import androidx.core.view.MenuItemCompat
1721
import androidx.viewpager.widget.ViewPager
22+
import com.simplemobiletools.commons.dialogs.ConfirmationAdvancedDialog
23+
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
1824
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
1925
import com.simplemobiletools.commons.extensions.*
2026
import com.simplemobiletools.commons.helpers.*
@@ -46,6 +52,7 @@ import java.util.*
4652

4753
class MainActivity : SimpleActivity() {
4854
private val BACK_PRESS_TIMEOUT = 5000
55+
private val MANAGE_STORAGE_RC = 201
4956
private val PICKED_PATH = "picked_path"
5057
private var isSearchOpen = false
5158
private var wasBackJustPressed = false
@@ -132,11 +139,11 @@ class MainActivity : SimpleActivity() {
132139
override fun onPause() {
133140
super.onPause()
134141
storeStateVariables()
142+
config.lastUsedViewPagerPage = main_view_pager.currentItem
135143
}
136144

137145
override fun onDestroy() {
138146
super.onDestroy()
139-
config.lastUsedViewPagerPage = main_view_pager.currentItem
140147
config.temporarilyShowHidden = false
141148
}
142149

@@ -282,8 +289,8 @@ class MainActivity : SimpleActivity() {
282289
}
283290

284291
private fun tryInitFileManager() {
285-
val hadPermission = hasPermission(PERMISSION_WRITE_STORAGE)
286-
handlePermission(PERMISSION_WRITE_STORAGE) {
292+
val hadPermission = hasStoragePermission()
293+
handleStoragePermission {
287294
checkOTGPath()
288295
if (it) {
289296
if (main_view_pager.adapter == null) {
@@ -300,6 +307,56 @@ class MainActivity : SimpleActivity() {
300307
}
301308
}
302309

310+
@SuppressLint("InlinedApi")
311+
private fun handleStoragePermission(callback: (granted: Boolean) -> Unit) {
312+
actionOnPermission = null
313+
if (hasStoragePermission()) {
314+
callback(true)
315+
} else {
316+
if (isRPlus()) {
317+
ConfirmationAdvancedDialog(this, "", R.string.access_storage_prompt, R.string.ok, 0) { success ->
318+
if (success ) {
319+
isAskingPermissions = true
320+
actionOnPermission = callback
321+
try {
322+
val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
323+
intent.addCategory("android.intent.category.DEFAULT")
324+
intent.data = Uri.parse("package:$packageName")
325+
startActivityForResult(intent, MANAGE_STORAGE_RC)
326+
} catch (e: Exception) {
327+
showErrorToast(e)
328+
val intent = Intent()
329+
intent.action = Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
330+
startActivityForResult(intent, MANAGE_STORAGE_RC)
331+
}
332+
} else {
333+
finish()
334+
}
335+
}
336+
} else {
337+
handlePermission(PERMISSION_WRITE_STORAGE, callback)
338+
}
339+
}
340+
}
341+
342+
@SuppressLint("NewApi")
343+
private fun hasStoragePermission(): Boolean {
344+
return if (isRPlus()) {
345+
Environment.isExternalStorageManager()
346+
} else {
347+
hasPermission(PERMISSION_WRITE_STORAGE)
348+
}
349+
}
350+
351+
@SuppressLint("NewApi")
352+
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
353+
super.onActivityResult(requestCode, resultCode, resultData)
354+
isAskingPermissions = false
355+
if (requestCode == MANAGE_STORAGE_RC && isRPlus()) {
356+
actionOnPermission?.invoke(Environment.isExternalStorageManager())
357+
}
358+
}
359+
303360
private fun initFileManager(refreshRecents: Boolean) {
304361
if (intent.action == Intent.ACTION_VIEW && intent.data != null) {
305362
val data = intent.data

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

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
6161
ensureBackgroundThread {
6262
reFetchItems()
6363
}
64+
65+
val adjustedPrimaryColor = getAdjustedPrimaryColor()
66+
mimetypes_fastscroller.updateColors(adjustedPrimaryColor, adjustedPrimaryColor.getContrastColor())
6467
}
6568

6669
override fun onCreateOptionsMenu(menu: Menu): Boolean {
@@ -130,13 +133,13 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
130133
lastSearchedText = searchText
131134
when {
132135
searchText.isEmpty() -> {
133-
mimetypes_list.beVisible()
136+
mimetypes_fastscroller.beVisible()
134137
getRecyclerAdapter()?.updateItems(storedItems)
135138
mimetypes_placeholder.beGoneIf(storedItems.isNotEmpty())
136139
mimetypes_placeholder_2.beGone()
137140
}
138141
searchText.length == 1 -> {
139-
mimetypes_list.beGone()
142+
mimetypes_fastscroller.beGone()
140143
mimetypes_placeholder.beVisible()
141144
mimetypes_placeholder_2.beVisible()
142145
}
@@ -150,14 +153,9 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
150153

151154
runOnUiThread {
152155
getRecyclerAdapter()?.updateItems(listItems, text)
153-
mimetypes_list.beVisibleIf(listItems.isNotEmpty())
156+
mimetypes_fastscroller.beVisibleIf(listItems.isNotEmpty())
154157
mimetypes_placeholder.beVisibleIf(listItems.isEmpty())
155158
mimetypes_placeholder_2.beGone()
156-
157-
mimetypes_list.onGlobalLayout {
158-
items_fastscroller.setScrollToY(mimetypes_list.computeVerticalScrollOffset())
159-
calculateContentHeight(listItems)
160-
}
161159
}
162160
}
163161
}
@@ -232,7 +230,7 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
232230
isSearchOpen = false
233231
lastSearchedText = ""
234232

235-
mimetypes_list.beVisible()
233+
mimetypes_fastscroller.beVisible()
236234
mimetypes_placeholder.beGoneIf(storedItems.isNotEmpty())
237235
mimetypes_placeholder_2.beGone()
238236
}
@@ -321,7 +319,7 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
321319
}
322320

323321
storedItems = items
324-
ItemsAdapter(this as SimpleActivity, storedItems, this, mimetypes_list, false, items_fastscroller, null) {
322+
ItemsAdapter(this as SimpleActivity, storedItems, this, mimetypes_list, false, null) {
325323
tryOpenPathIntent((it as ListItem).path, false)
326324
}.apply {
327325
setupZoomListener(zoomListener)
@@ -332,13 +330,6 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
332330
mimetypes_list.scheduleLayoutAnimation()
333331
}
334332

335-
val dateFormat = config.dateFormat
336-
val timeFormat = getTimeFormat()
337-
items_fastscroller.setViews(mimetypes_list) {
338-
val listItem = getRecyclerAdapter()?.listItems?.getOrNull(it)
339-
items_fastscroller.updateBubbleText(listItem?.getBubbleText(this, dateFormat, timeFormat) ?: "")
340-
}
341-
342333
mimetypes_placeholder.beVisibleIf(items.isEmpty())
343334
}
344335

@@ -390,18 +381,9 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
390381
invalidateOptionsMenu()
391382
getRecyclerAdapter()?.apply {
392383
notifyItemRangeChanged(0, listItems.size)
393-
calculateContentHeight(listItems)
394384
}
395385
}
396386

397-
private fun calculateContentHeight(items: MutableList<ListItem>) {
398-
val layoutManager = mimetypes_list.layoutManager as MyGridLayoutManager
399-
val thumbnailHeight = layoutManager.getChildAt(0)?.height ?: 0
400-
val fullHeight = ((items.size - 1) / layoutManager.spanCount + 1) * thumbnailHeight
401-
items_fastscroller.setContentHeight(fullHeight)
402-
items_fastscroller.setScrollToY(mimetypes_list.computeVerticalScrollOffset())
403-
}
404-
405387
private fun setupLayoutManager() {
406388
if (config.getFolderViewType(currentMimeType) == VIEW_TYPE_GRID) {
407389
currentViewType = VIEW_TYPE_GRID

app/src/main/kotlin/com/simplemobiletools/filemanager/pro/adapters/DecompressItemsAdapter.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
1212
import com.bumptech.glide.request.RequestOptions
1313
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
1414
import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor
15-
import com.simplemobiletools.commons.extensions.getFileSignature
1615
import com.simplemobiletools.commons.extensions.getTextSize
1716
import com.simplemobiletools.commons.extensions.getTimeFormat
1817
import com.simplemobiletools.commons.helpers.getFilePlaceholderDrawables
@@ -25,7 +24,7 @@ import kotlinx.android.synthetic.main.item_file_dir_list.view.*
2524
import java.util.*
2625

2726
class DecompressItemsAdapter(activity: SimpleActivity, var listItems: MutableList<ListItem>, recyclerView: MyRecyclerView, itemClick: (Any) -> Unit) :
28-
MyRecyclerViewAdapter(activity, recyclerView, null, itemClick) {
27+
MyRecyclerViewAdapter(activity, recyclerView, itemClick) {
2928

3029
private lateinit var fileDrawable: Drawable
3130
private lateinit var folderDrawable: Drawable

0 commit comments

Comments
 (0)