Skip to content

Commit 794a101

Browse files
committed
initial update to checking permission
1 parent 0a94f61 commit 794a101

File tree

5 files changed

+45
-30
lines changed

5 files changed

+45
-30
lines changed

app/src/main/java/org/thoughtcrime/securesms/conversation/v2/utilities/AttachmentManager.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import android.content.ActivityNotFoundException;
2525
import android.content.Context;
2626
import android.content.Intent;
27-
import android.content.pm.PackageManager;
2827
import android.database.Cursor;
2928
import android.net.Uri;
3029
import android.os.AsyncTask;
@@ -35,8 +34,6 @@
3534
import android.widget.Toast;
3635
import androidx.annotation.NonNull;
3736
import androidx.annotation.Nullable;
38-
import androidx.core.app.ActivityCompat;
39-
import androidx.core.content.ContextCompat;
4037

4138
import com.bumptech.glide.RequestManager;
4239
import com.squareup.phrase.Phrase;
@@ -349,13 +346,13 @@ public static void selectGallery(Activity activity, int requestCode, @NonNull Ad
349346
.execute();
350347
}
351348

352-
public static boolean hasFullAccess(Activity activity) {
349+
public static boolean hasFullAccess(Context c) {
353350
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
354-
return Permissions.hasAll(activity,
351+
return Permissions.hasAll(c,
355352
Manifest.permission.READ_MEDIA_IMAGES,
356353
Manifest.permission.READ_MEDIA_VIDEO);
357354
} else {
358-
return Permissions.hasAll(activity, android.Manifest.permission.READ_EXTERNAL_STORAGE);
355+
return Permissions.hasAll(c, android.Manifest.permission.READ_EXTERNAL_STORAGE);
359356
}
360357
}
361358

@@ -386,9 +383,9 @@ public static void managePhotoAccess(@NonNull Activity activity, @Nullable Runna
386383
}
387384
}
388385

389-
public static boolean shouldShowManagePhoto(@NonNull Activity activity){
386+
public static boolean shouldShowManagePhoto(@NonNull Context c){
390387
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE){
391-
return !hasFullAccess(activity) && hasPartialAccess(activity);
388+
return !hasFullAccess(c) && hasPartialAccess(c);
392389
}else{
393390
// No partial access for <= API 33
394391
return false;

app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ import javax.inject.Inject
5555
* It will return the [Media] that the user decided to send.
5656
*/
5757
@AndroidEntryPoint
58-
class MediaSendActivity : ScreenLockActionBarActivity(), MediaPickerFolderFragment.Controller,
58+
class MediaSendActivity : ScreenLockActionBarActivity(), MediaPickerFolderComposeFragment.Controller,
5959
MediaPickerItemComposeFragment.Controller, MediaSendFragment.Controller,
6060
ImageEditorFragment.Controller {
6161

app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendViewModel.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.mediasend
33
import android.app.Application
44
import android.content.Context
55
import android.net.Uri
6+
import android.os.Build
67
import androidx.lifecycle.LiveData
78
import androidx.lifecycle.asLiveData
89
import com.annimon.stream.Stream
@@ -21,6 +22,8 @@ import org.session.libsignal.utilities.Log
2122
import org.session.libsignal.utilities.guava.Optional
2223
import org.thoughtcrime.securesms.ApplicationContext
2324
import org.thoughtcrime.securesms.InputbarViewModel
25+
import org.thoughtcrime.securesms.conversation.v2.utilities.AttachmentManager.hasFullAccess
26+
import org.thoughtcrime.securesms.conversation.v2.utilities.AttachmentManager.hasPartialAccess
2427
import org.thoughtcrime.securesms.database.RecipientRepository
2528
import org.thoughtcrime.securesms.mms.MediaConstraints
2629
import org.thoughtcrime.securesms.pro.ProStatusManager
@@ -337,6 +340,14 @@ class MediaSendViewModel @Inject constructor(
337340
lastImageCapture = Optional.absent()
338341
}
339342

343+
fun refreshPhotoAccessUi() {
344+
val show = Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE &&
345+
!hasFullAccess(context) &&
346+
hasPartialAccess(context)
347+
348+
_uiState.update { it.copy(showManagePhotoAccess = show) }
349+
}
350+
340351
fun saveDrawState(state: Map<Uri, Any>) {
341352
savedDrawState.clear()
342353
savedDrawState.putAll(state)
@@ -499,6 +510,7 @@ class MediaSendViewModel @Inject constructor(
499510
val position: Int = -1,
500511
val countVisibility: CountButtonState.Visibility = CountButtonState.Visibility.FORCED_OFF,
501512
val showCameraButton: Boolean = false,
513+
val showManagePhotoAccess : Boolean = false
502514
) {
503515
val count: Int get() = selectedMedia.size
504516

app/src/main/java/org/thoughtcrime/securesms/mediasend/compose/MediaPickerFolderComposeFragment.kt

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import network.loki.messenger.R
1616
import org.session.libsession.utilities.StringSubstitutionConstants
1717
import org.session.libsession.utilities.recipients.Recipient
1818
import org.session.libsession.utilities.recipients.displayName
19+
import org.thoughtcrime.securesms.conversation.v2.utilities.AttachmentManager
20+
import org.thoughtcrime.securesms.mediasend.MediaFolder
1921
import org.thoughtcrime.securesms.mediasend.MediaPickerFolderFragment
2022
import org.thoughtcrime.securesms.mediasend.MediaSendViewModel
2123
import org.thoughtcrime.securesms.ui.setThemedContent
@@ -26,11 +28,11 @@ class MediaPickerFolderComposeFragment : Fragment() {
2628
private val viewModel: MediaSendViewModel by activityViewModels()
2729

2830
private var recipientName: String? = null
29-
private var controller: MediaPickerFolderFragment.Controller? = null
31+
private var controller: Controller? = null
3032

3133
override fun onAttach(context: Context) {
3234
super.onAttach(context)
33-
controller = activity as? MediaPickerFolderFragment.Controller
35+
controller = activity as? Controller
3436
?: throw IllegalStateException("Parent activity must implement controller class.")
3537
}
3638

@@ -42,6 +44,7 @@ class MediaPickerFolderComposeFragment : Fragment() {
4244
override fun onResume() {
4345
super.onResume()
4446
viewModel.onFolderPickerStarted()
47+
viewModel.refreshPhotoAccessUi()
4548
}
4649

4750
override fun onCreateView(
@@ -68,12 +71,19 @@ class MediaPickerFolderComposeFragment : Fragment() {
6871
},
6972
onFolderClick = { folder ->
7073
controller?.onFolderSelected(folder)
71-
}
74+
},
75+
manageMediaAccess = ::manageMediaAccess
7276
)
7377
}
7478
}
7579
}
7680

81+
fun manageMediaAccess() {
82+
AttachmentManager.managePhotoAccess(requireActivity()) {
83+
viewModel.refreshFolders()
84+
}
85+
}
86+
7787
companion object {
7888
private const val KEY_RECIPIENT_NAME = "recipient_name"
7989

@@ -85,4 +95,8 @@ class MediaPickerFolderComposeFragment : Fragment() {
8595
}
8696
}
8797
}
98+
99+
interface Controller {
100+
fun onFolderSelected(folder: MediaFolder)
101+
}
88102
}

app/src/main/java/org/thoughtcrime/securesms/mediasend/compose/MediaPickerFolderScreen.kt

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,13 @@ import androidx.compose.runtime.Composable
2121
import androidx.compose.runtime.LaunchedEffect
2222
import androidx.compose.runtime.collectAsState
2323
import androidx.compose.runtime.getValue
24-
import androidx.compose.runtime.remember
2524
import androidx.compose.ui.Modifier
2625
import androidx.compose.ui.platform.LocalConfiguration
27-
import androidx.compose.ui.platform.LocalContext
2826
import androidx.compose.ui.res.dimensionResource
2927
import androidx.compose.ui.res.painterResource
3028
import androidx.compose.ui.tooling.preview.Preview
3129
import androidx.compose.ui.unit.dp
32-
import androidx.fragment.app.FragmentActivity
3330
import network.loki.messenger.R
34-
import org.thoughtcrime.securesms.conversation.v2.utilities.AttachmentManager
3531
import org.thoughtcrime.securesms.mediasend.MediaFolder
3632
import org.thoughtcrime.securesms.mediasend.MediaSendViewModel
3733
import org.thoughtcrime.securesms.ui.components.BackAppBar
@@ -43,7 +39,8 @@ fun MediaPickerFolderScreen(
4339
viewModel: MediaSendViewModel,
4440
onFolderClick: (MediaFolder) -> Unit,
4541
title: String,
46-
handleBack: () -> Unit
42+
handleBack: () -> Unit,
43+
manageMediaAccess: () -> Unit
4744
) {
4845
val uiState by viewModel.uiState.collectAsState()
4946

@@ -57,7 +54,8 @@ fun MediaPickerFolderScreen(
5754
onFolderClick = onFolderClick,
5855
title = title,
5956
handleBack = handleBack,
60-
refreshFolders = { viewModel.refreshFolders() }
57+
showManageMediaAccess = uiState.showManagePhotoAccess,
58+
manageMediaAccess = manageMediaAccess
6159
)
6260
}
6361

@@ -69,31 +67,24 @@ private fun MediaPickerFolder(
6967
onFolderClick: (folder: MediaFolder) -> Unit,
7068
title: String,
7169
handleBack: () -> Unit,
72-
refreshFolders: () -> Unit
70+
showManageMediaAccess: Boolean,
71+
manageMediaAccess : () -> Unit
7372
) {
7473

7574
// span logic: screenWidth / media_picker_folder_width
7675
val folderWidth = dimensionResource(R.dimen.media_picker_folder_width)
7776
val columns = maxOf(1, (LocalConfiguration.current.screenWidthDp.dp / folderWidth).toInt())
7877

79-
val context = LocalContext.current
80-
val activity = context as? FragmentActivity
81-
val showManage = remember(activity) {
82-
activity?.let { AttachmentManager.shouldShowManagePhoto(it) } == true
83-
}
84-
8578
Scaffold(
8679
topBar = {
8780
BackAppBar(
8881
title = title,
8982
onBack = handleBack,
9083
actions = {
91-
if (showManage && activity != null) {
84+
if (showManageMediaAccess) {
9285
IconButton(
9386
onClick = {
94-
AttachmentManager.managePhotoAccess(activity) {
95-
refreshFolders()
96-
}
87+
manageMediaAccess()
9788
}
9889
) {
9990
Icon(
@@ -159,6 +150,7 @@ private fun MediaPickerFolderPreview() {
159150
onFolderClick = {},
160151
title = "Folders",
161152
handleBack = {},
162-
refreshFolders = {}
153+
showManageMediaAccess = true,
154+
manageMediaAccess = {}
163155
)
164156
}

0 commit comments

Comments
 (0)