Skip to content

Commit 006244f

Browse files
committed
Changes per PR feedback #2
- Fix top right menu Open in Terminal not working - Fix permission granting sequence with PermissionsActivity
1 parent 4678801 commit 006244f

File tree

7 files changed

+54
-32
lines changed

7 files changed

+54
-32
lines changed

app/src/main/java/com/amaze/filemanager/ui/activities/MainActivity.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@
115115
import com.amaze.filemanager.ui.dialogs.GeneralDialogCreation;
116116
import com.amaze.filemanager.ui.dialogs.HiddenFilesDialog;
117117
import com.amaze.filemanager.ui.dialogs.HistoryDialog;
118+
import com.amaze.filemanager.ui.dialogs.OpenFolderInTerminalFragment;
118119
import com.amaze.filemanager.ui.dialogs.RenameBookmark;
119120
import com.amaze.filemanager.ui.dialogs.RenameBookmark.BookmarkCallback;
120121
import com.amaze.filemanager.ui.dialogs.SftpConnectDialog;
@@ -1285,7 +1286,8 @@ public boolean onOptionsItemSelected(MenuItem item) {
12851286
} else if (item.getItemId() == R.id.search) {
12861287
getAppbar().getSearchView().revealSearchView();
12871288
} else if (item.getItemId() == R.id.open_in_terminal) {
1288-
// do nothing
1289+
OpenFolderInTerminalFragment.Companion.openTerminalOrShow(
1290+
mainFragment.getCurrentPath(), this);
12891291
}
12901292
return null;
12911293
},

app/src/main/java/com/amaze/filemanager/ui/activities/superclasses/PermissionsActivity.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import com.afollestad.materialdialogs.MaterialDialog
3939
import com.amaze.filemanager.R
4040
import com.amaze.filemanager.application.AppConfig
4141
import com.amaze.filemanager.ui.dialogs.GeneralDialogCreation
42+
import com.amaze.filemanager.ui.dialogs.OpenFolderInTerminalFragment.Companion.TERMINAL_PERMISSIONS
4243
import com.amaze.filemanager.utils.Utils
4344
import com.google.android.material.snackbar.BaseTransientBottomBar
4445
import com.google.android.material.snackbar.Snackbar
@@ -265,8 +266,9 @@ open class PermissionsActivity :
265266
isInitialStart: Boolean,
266267
) {
267268
permissionCallbacks[code] = onPermissionGranted
268-
269-
if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
269+
if (TERMINAL_PERMISSIONS.contains(permission) ||
270+
ActivityCompat.shouldShowRequestPermissionRationale(this, permission)
271+
) {
270272
rationale
271273
.getActionButton(DialogAction.POSITIVE)
272274
.setOnClickListener { v: View? ->

app/src/main/java/com/amaze/filemanager/ui/dialogs/AlertDialog.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,7 @@ object AlertDialog {
4949
MaterialDialog.Builder(activity)
5050
.content(content, contentIsHtml)
5151
.widgetColor(accentColor)
52-
.theme(
53-
activity
54-
.appTheme
55-
.getMaterialDialogTheme(),
56-
)
52+
.theme(activity.appTheme.materialDialogTheme)
5753
.title(title)
5854
.positiveText(positiveButtonText)
5955
.positiveColor(accentColor)

app/src/main/java/com/amaze/filemanager/ui/dialogs/OpenFolderInTerminalFragment.kt

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import android.view.View
2828
import android.view.ViewGroup
2929
import androidx.annotation.VisibleForTesting
3030
import androidx.core.content.ContextCompat
31+
import androidx.core.content.edit
3132
import androidx.preference.PreferenceManager
3233
import androidx.recyclerview.widget.LinearLayoutManager
3334
import com.amaze.filemanager.R
@@ -71,6 +72,7 @@ class OpenFolderInTerminalFragment : BaseBottomSheetFragment(), AdjustListViewFo
7172
private lateinit var sharedPreferences: SharedPreferences
7273

7374
companion object {
75+
@JvmStatic
7476
private val logger = LoggerFactory.getLogger(OpenFileDialogFragment::class.java)
7577

7678
const val KEY_PREFERENCES_DEFAULT = "terminal._DEFAULT"
@@ -80,6 +82,14 @@ class OpenFolderInTerminalFragment : BaseBottomSheetFragment(), AdjustListViewFo
8082
private const val ANDROID_TERM_PERMISSION = "jackpal.androidterm.permission.RUN_SCRIPT"
8183
private const val TERMUX_PERMISSION = "com.termux.permission.RUN_COMMAND"
8284

85+
@JvmStatic
86+
val TERMINAL_PERMISSIONS =
87+
arrayOf(
88+
TERMONE_PLUS_PERMISSION,
89+
ANDROID_TERM_PERMISSION,
90+
TERMUX_PERMISSION,
91+
)
92+
8393
@SuppressLint("SdCardPath")
8494
private const val TERMUX_SHELL_LOCATION = "/data/data/com.termux/files/usr/bin/bash"
8595

@@ -196,10 +206,12 @@ class OpenFolderInTerminalFragment : BaseBottomSheetFragment(), AdjustListViewFo
196206
appDataParcelable: AppDataParcelable,
197207
sharedPreferences: SharedPreferences,
198208
) {
199-
sharedPreferences.edit().putString(
200-
KEY_PREFERENCES_LAST,
201-
appDataParcelable.packageName,
202-
).apply()
209+
sharedPreferences.edit {
210+
putString(
211+
KEY_PREFERENCES_LAST,
212+
appDataParcelable.packageName,
213+
)
214+
}
203215
}
204216

205217
/**
@@ -209,10 +221,12 @@ class OpenFolderInTerminalFragment : BaseBottomSheetFragment(), AdjustListViewFo
209221
appDataParcelable: AppDataParcelable,
210222
sharedPreferences: SharedPreferences,
211223
) {
212-
sharedPreferences.edit().putString(
213-
KEY_PREFERENCES_DEFAULT,
214-
appDataParcelable.packageName,
215-
).apply()
224+
sharedPreferences.edit {
225+
putString(
226+
KEY_PREFERENCES_DEFAULT,
227+
appDataParcelable.packageName,
228+
)
229+
}
216230
}
217231

218232
/**
@@ -221,7 +235,7 @@ class OpenFolderInTerminalFragment : BaseBottomSheetFragment(), AdjustListViewFo
221235
fun clearPreferences(sharedPreferences: SharedPreferences) {
222236
AppConfig.getInstance().runInBackground {
223237
arrayOf(KEY_PREFERENCES_DEFAULT, KEY_PREFERENCES_LAST).forEach {
224-
sharedPreferences.edit().remove(it).apply()
238+
sharedPreferences.edit { remove(it) }
225239
}
226240
}
227241
}

app/src/test/java/com/amaze/filemanager/ui/dialogs/AbstractOpenFolderInTerminalTestBase.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,15 @@ abstract class AbstractOpenFolderInTerminalTestBase : AbstractMainActivityTestBa
5151
/**
5252
* Note: this method will provide a MainActivity spy for the Lambda to work with
5353
*/
54-
protected fun doTestWithMainActivity(withMainActivity: (MainActivity) -> Unit) {
54+
protected fun doTestWithMainActivity(withMainActivity: (MainActivity, MainActivity) -> Unit) {
5555
val scenario = ActivityScenario.launch(MainActivity::class.java)
5656
ShadowLooper.idleMainLooper()
5757
scenario.moveToState(Lifecycle.State.STARTED)
5858
scenario.onActivity { activity ->
5959
val spy = spyk<MainActivity>(activity)
60-
withMainActivity.invoke(spy)
60+
// Dirty trick to allow both spy and activity to be used. Specific for
61+
// OpenFolderInTerminalDialogFragmentTest.testOpenOrShowWhenNoTerminalInstalled
62+
withMainActivity.invoke(spy, activity)
6163
scenario.moveToState(Lifecycle.State.DESTROYED)
6264
scenario.close()
6365
}

app/src/test/java/com/amaze/filemanager/ui/dialogs/OpenFolderInTerminalFragmentTest.kt

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import android.content.Intent
2525
import android.os.Build.VERSION.SDK_INT
2626
import android.view.View
2727
import androidx.test.core.app.ApplicationProvider
28+
import com.afollestad.materialdialogs.MaterialDialog
29+
import com.amaze.filemanager.R
2830
import com.amaze.filemanager.adapters.holders.AppHolder
2931
import com.amaze.filemanager.ui.activities.MainActivity
3032
import com.amaze.filemanager.ui.dialogs.OpenFolderInTerminalFragment.Companion.KEY_PREFERENCES_DEFAULT
@@ -42,6 +44,7 @@ import org.junit.Before
4244
import org.junit.Test
4345
import org.robolectric.Shadows.shadowOf
4446
import org.robolectric.shadows.ShadowApplication
47+
import org.robolectric.shadows.ShadowDialog
4548
import org.robolectric.shadows.ShadowToast
4649

4750
/**
@@ -67,7 +70,7 @@ class OpenFolderInTerminalFragmentTest : AbstractOpenFolderInTerminalTestBase()
6770
*/
6871
@Test
6972
fun testClearPreferencesWhenNoKeyIsSet() {
70-
doTestWithMainActivity { mainActivity ->
73+
doTestWithMainActivity { mainActivity, _ ->
7174
mainActivity.prefs.let { prefs ->
7275
prefs.edit().putString("FOO", "BAR").apply()
7376
assertFalse(prefs.contains(KEY_PREFERENCES_DEFAULT))
@@ -85,7 +88,7 @@ class OpenFolderInTerminalFragmentTest : AbstractOpenFolderInTerminalTestBase()
8588
*/
8689
@Test
8790
fun testClearPreferencesWhenLastKeyIsSet() {
88-
doTestWithMainActivity { mainActivity: MainActivity ->
91+
doTestWithMainActivity { mainActivity: MainActivity, _ ->
8992
mainActivity.prefs.let { prefs ->
9093
prefs.edit()
9194
.putString("FOO", "BAR")
@@ -106,7 +109,7 @@ class OpenFolderInTerminalFragmentTest : AbstractOpenFolderInTerminalTestBase()
106109
*/
107110
@Test
108111
fun testClearPreferencesWhenDefaultKeyIsSet() {
109-
doTestWithMainActivity { mainActivity: MainActivity ->
112+
doTestWithMainActivity { mainActivity: MainActivity, _ ->
110113
mainActivity.prefs.let { prefs ->
111114
prefs.edit()
112115
.putString("FOO", "BAR")
@@ -127,7 +130,7 @@ class OpenFolderInTerminalFragmentTest : AbstractOpenFolderInTerminalTestBase()
127130
*/
128131
@Test
129132
fun testClearPreferencesWhenBothKeysAreSet() {
130-
doTestWithMainActivity { mainActivity: MainActivity ->
133+
doTestWithMainActivity { mainActivity, _ ->
131134
mainActivity.prefs.let { prefs ->
132135
prefs.edit()
133136
.putString("FOO", "BAR")
@@ -149,10 +152,13 @@ class OpenFolderInTerminalFragmentTest : AbstractOpenFolderInTerminalTestBase()
149152
*/
150153
@Test
151154
fun testOpenOrShowWhenNoTerminalInstalled() {
152-
doTestWithMainActivity { mainActivity: MainActivity ->
155+
doTestWithMainActivity { _, mainActivity ->
153156
OpenFolderInTerminalFragment.openTerminalOrShow("/sdcard/tmp", mainActivity)
154-
assertTrue(ShadowToast.shownToastCount() == 1)
155-
assertEquals("No Terminal App installed", ShadowToast.getTextOfLatestToast())
157+
assertTrue(ShadowDialog.getShownDialogs().count() == 1)
158+
assertEquals(
159+
mainActivity.getString(R.string.no_terminal_apps),
160+
(ShadowDialog.getLatestDialog() as MaterialDialog).titleView.text,
161+
)
156162
}
157163
}
158164

@@ -161,7 +167,7 @@ class OpenFolderInTerminalFragmentTest : AbstractOpenFolderInTerminalTestBase()
161167
beforeOpen: ((MainActivity, CapturingSlot<Intent>) -> Unit)? = null,
162168
nextStep: (MainActivity, CapturingSlot<Intent>) -> Unit,
163169
) {
164-
doTestWithMainActivity { mainActivity: MainActivity ->
170+
doTestWithMainActivity { mainActivity: MainActivity, _ ->
165171
installApp(mainActivity, componentName)
166172
val capturedIntent = slot<Intent>()
167173
val capturedCallback = slot<() -> Unit>()
@@ -247,7 +253,7 @@ class OpenFolderInTerminalFragmentTest : AbstractOpenFolderInTerminalTestBase()
247253
beforeOpen: ((MainActivity) -> Unit)? = null,
248254
nextStep: (MainActivity, CapturingSlot<Intent>) -> Unit,
249255
) {
250-
doTestWithMainActivity { mainActivity ->
256+
doTestWithMainActivity { mainActivity, _ ->
251257
installApp(mainActivity, ComponentName("com.termoneplus", "com.termoneplus.Activity"))
252258
installApp(mainActivity, ComponentName("com.termux", "com.termux.Activity"))
253259
val capturedIntent = slot<Intent>()

app/src/test/java/com/amaze/filemanager/utils/OpenTerminalUtilsExtTest.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class OpenTerminalUtilsExtTest : AbstractOpenFolderInTerminalTestBase() {
3737
*/
3838
@Test
3939
fun `Test when there is no terminal app installed`() {
40-
doTestWithMainActivity { mainActivity ->
40+
doTestWithMainActivity { mainActivity, _ ->
4141
val result = mainActivity.detectInstalledTerminalApps()
4242
assertNotNull(result)
4343
assertEquals(0, result.size)
@@ -49,7 +49,7 @@ class OpenTerminalUtilsExtTest : AbstractOpenFolderInTerminalTestBase() {
4949
*/
5050
@Test
5151
fun `Test when there is only Termux installed`() {
52-
doTestWithMainActivity { mainActivity ->
52+
doTestWithMainActivity { mainActivity, _ ->
5353
// Package name is important. Class name is not... no need to 100% match
5454
installApp(mainActivity, ComponentName("com.termux", "com.termux.Activity"))
5555

@@ -65,7 +65,7 @@ class OpenTerminalUtilsExtTest : AbstractOpenFolderInTerminalTestBase() {
6565
*/
6666
@Test
6767
fun `Test when there are both Termux and Termone plus installed`() {
68-
doTestWithMainActivity { mainActivity ->
68+
doTestWithMainActivity { mainActivity, _ ->
6969
// Package name is important. Class name is not... no need to 100% match
7070
installApp(mainActivity, ComponentName("com.termux", "com.termux.Activity"))
7171
installApp(mainActivity, ComponentName("com.termoneplus", "com.termoneplus.Activity"))
@@ -83,7 +83,7 @@ class OpenTerminalUtilsExtTest : AbstractOpenFolderInTerminalTestBase() {
8383
*/
8484
@Test
8585
fun `Test when there are other apps installed, method should filter them out`() {
86-
doTestWithMainActivity { mainActivity ->
86+
doTestWithMainActivity { mainActivity, _ ->
8787
// Package name is important. Class name is not... no need to 100% match
8888
installApp(mainActivity, ComponentName("com.termux", "com.termux.Activity"))
8989
installApp(mainActivity, ComponentName("com.termoneplus", "com.termoneplus.Activity"))

0 commit comments

Comments
 (0)