aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/main/java/de/pixart/messenger/ui/ConversationFragment.java87
1 files changed, 26 insertions, 61 deletions
diff --git a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
index cad1beb44..def3c00f6 100644
--- a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
+++ b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
@@ -304,7 +304,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
return false;
}
}
- if (hasStoragePermission(REQUEST_ADD_EDITOR_CONTENT)) {
+ if (hasPermissions(REQUEST_ADD_EDITOR_CONTENT, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
attachImageToConversation(inputContentInfo.getContentUri());
} else {
mPendingEditorContent = inputContentInfo.getContentUri();
@@ -1561,22 +1561,16 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
}
public void attachFile(final int attachmentChoice) {
- if (attachmentChoice == ATTACHMENT_CHOICE_TAKE_FROM_CAMERA) {
- if (!hasStorageAndCameraPermission(attachmentChoice)) {
- return;
- }
- } else if (attachmentChoice != ATTACHMENT_CHOICE_LOCATION) {
- if (!Config.ONLY_INTERNAL_STORAGE && !hasStoragePermission(attachmentChoice)) {
+ if (attachmentChoice == ATTACHMENT_CHOICE_RECORD_VOICE) {
+ if (!hasPermissions(attachmentChoice, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO)) {
return;
}
- }
- if (attachmentChoice == ATTACHMENT_CHOICE_RECORD_VOICE) {
- if (!activity.hasMicPermission(attachmentChoice)) {
+ } else if (attachmentChoice == ATTACHMENT_CHOICE_TAKE_FROM_CAMERA) {
+ if (!hasPermissions(attachmentChoice, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA)) {
return;
}
- }
- if (attachmentChoice == ATTACHMENT_CHOICE_LOCATION) {
- if (!activity.hasLocationPermission(attachmentChoice)) {
+ } else if (attachmentChoice != ATTACHMENT_CHOICE_LOCATION) {
+ if (!hasPermissions(attachmentChoice, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
return;
}
}
@@ -1654,7 +1648,10 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
}
} else {
@StringRes int res;
- if (Manifest.permission.CAMERA.equals(getFirstDenied(grantResults, permissions))) {
+ String firstDenied = getFirstDenied(grantResults, permissions);
+ if (Manifest.permission.RECORD_AUDIO.equals(firstDenied)) {
+ res = R.string.no_microphone_permission;
+ } else if (Manifest.permission.CAMERA.equals(firstDenied)) {
res = R.string.no_camera_permission;
} else {
res = R.string.no_storage_permission;
@@ -1665,7 +1662,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
}
public void startDownloadable(Message message) {
- if (!Config.ONLY_INTERNAL_STORAGE && !hasStoragePermission(REQUEST_START_DOWNLOAD)) {
+ if (!hasPermissions(REQUEST_START_DOWNLOAD, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
this.mPendingDownloadableMessage = message;
return;
}
@@ -1684,26 +1681,6 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
}
}
- private boolean hasStorageAndCameraPermission(int requestCode) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- List<String> missingPermissions = new ArrayList<>();
- if (!Config.ONLY_INTERNAL_STORAGE && activity.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
- missingPermissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
- }
- if (activity.checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
- missingPermissions.add(Manifest.permission.CAMERA);
- }
- if (missingPermissions.size() == 0) {
- return true;
- } else {
- requestPermissions(missingPermissions.toArray(new String[missingPermissions.size()]), requestCode);
- return false;
- }
- } else {
- return true;
- }
- }
-
@SuppressLint("InflateParams")
protected void clearHistoryDialog(final Conversation conversation) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
@@ -1728,13 +1705,22 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
builder.create().show();
}
- private boolean hasStoragePermission(int requestCode) {
+ private boolean hasPermissions(int requestCode, String... permissions) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- if (activity.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
- requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, requestCode);
- return false;
- } else {
+ final List<String> missingPermissions = new ArrayList<>();
+ for (String permission : permissions) {
+ if (Config.ONLY_INTERNAL_STORAGE && permission.equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
+ continue;
+ }
+ if (activity.checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
+ missingPermissions.add(permission);
+ }
+ }
+ if (missingPermissions.size() == 0) {
return true;
+ } else {
+ requestPermissions(missingPermissions.toArray(new String[missingPermissions.size()]), requestCode);
+ return false;
}
} else {
return true;
@@ -1747,7 +1733,6 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
final PresenceSelector.OnPresenceSelected callback = () -> {
final Intent intent = new Intent();
boolean chooser = false;
- String fallbackPackageId = null;
switch (attachmentChoice) {
case ATTACHMENT_CHOICE_CHOOSE_IMAGE:
intent.setAction(Intent.ACTION_GET_CONTENT);
@@ -1807,8 +1792,6 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
} else {
startActivityForResult(intent, attachmentChoice);
}
- } else if (fallbackPackageId != null) {
- startActivity(getInstallApkIntent(fallbackPackageId));
}
};
if (account.httpUploadAvailable() || attachmentChoice == ATTACHMENT_CHOICE_LOCATION) {
@@ -1821,26 +1804,8 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
}
}
- private Intent getInstallApkIntent(final String packageId) {
- Intent intent = new Intent(Intent.ACTION_VIEW);
- intent.setData(Uri.parse("market://details?id=" + packageId));
- if (intent.resolveActivity(getActivity().getPackageManager()) != null) {
- return intent;
- } else {
- intent.setData(Uri.parse("http://play.google.com/store/apps/details?id=" + packageId));
- return intent;
- }
- }
-
@Override
public void onResume() {
- new Handler().post(() -> {
- final Activity activity = getActivity();
- if (activity == null) {
- return;
- }
- getActivity().invalidateOptionsMenu();
- });
super.onResume();
binding.messagesView.post(this::fireReadEvent);
}