request storage permission when opening message
This commit is contained in:
parent
6aee638432
commit
b5e1bbbdc1
|
@ -38,6 +38,7 @@ import android.app.FragmentTransaction;
|
|||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.databinding.DataBindingUtil;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
|
@ -83,6 +84,8 @@ public class ConversationActivity extends XmppActivity implements OnConversation
|
|||
public static final String EXTRA_NICK = "nick";
|
||||
public static final String EXTRA_IS_PRIVATE_MESSAGE = "pm";
|
||||
|
||||
public static final int REQUEST_OPEN_MESSAGE = 0x9876;
|
||||
|
||||
|
||||
//secondary fragment (when holding the conversation, must be initialized before refreshing the overview fragment
|
||||
private static final @IdRes
|
||||
|
@ -281,6 +284,16 @@ public class ConversationActivity extends XmppActivity implements OnConversation
|
|||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode,@NonNull String permissions[], @NonNull int[] grantResults) {
|
||||
UriHandlerActivity.onRequestPermissionResult(this, requestCode, grantResults);
|
||||
if (grantResults.length > 0) {
|
||||
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
switch(requestCode) {
|
||||
case REQUEST_OPEN_MESSAGE:
|
||||
refreshUiReal();
|
||||
ConversationFragment.openPendingMessage(this);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -409,16 +409,42 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
|
|||
private int lastCompletionCursor;
|
||||
private boolean firstWord = false;
|
||||
private Message mPendingDownloadableMessage;
|
||||
private final PendingItem<Message> pendingMessage = new PendingItem<>();
|
||||
|
||||
public static void downloadFile(Activity activity, Message message) {
|
||||
|
||||
private static ConversationFragment findConversationFragment(Activity activity) {
|
||||
Fragment fragment = activity.getFragmentManager().findFragmentById(R.id.main_fragment);
|
||||
if (fragment != null && fragment instanceof ConversationFragment) {
|
||||
((ConversationFragment) fragment).startDownloadable(message);
|
||||
return;
|
||||
return (ConversationFragment) fragment;
|
||||
}
|
||||
fragment = activity.getFragmentManager().findFragmentById(R.id.secondary_fragment);
|
||||
if (fragment != null && fragment instanceof ConversationFragment) {
|
||||
((ConversationFragment) fragment).startDownloadable(message);
|
||||
return (ConversationFragment) fragment;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void downloadFile(Activity activity, Message message) {
|
||||
ConversationFragment fragment = findConversationFragment(activity);
|
||||
if (fragment != null) {
|
||||
fragment.startDownloadable(message);
|
||||
}
|
||||
}
|
||||
|
||||
public static void registerPendingMessage(Activity activity, Message message) {
|
||||
ConversationFragment fragment = findConversationFragment(activity);
|
||||
if (fragment != null) {
|
||||
fragment.pendingMessage.push(message);
|
||||
}
|
||||
}
|
||||
|
||||
public static void openPendingMessage(Activity activity) {
|
||||
ConversationFragment fragment = findConversationFragment(activity);
|
||||
if (fragment != null) {
|
||||
Message message = fragment.pendingMessage.pop();
|
||||
if (message != null) {
|
||||
fragment.messageListAdapter.openDownloadable(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package eu.siacs.conversations.ui.adapter;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
|
@ -15,6 +16,7 @@ import android.net.Uri;
|
|||
import android.os.AsyncTask;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.ColorInt;
|
||||
import android.support.v4.app.ActivityCompat;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.text.Spannable;
|
||||
import android.text.SpannableString;
|
||||
|
@ -63,6 +65,7 @@ import eu.siacs.conversations.entities.Transferable;
|
|||
import eu.siacs.conversations.persistance.FileBackend;
|
||||
import eu.siacs.conversations.services.MessageArchiveService;
|
||||
import eu.siacs.conversations.services.NotificationService;
|
||||
import eu.siacs.conversations.ui.ConversationActivity;
|
||||
import eu.siacs.conversations.ui.ConversationFragment;
|
||||
import eu.siacs.conversations.ui.XmppActivity;
|
||||
import eu.siacs.conversations.ui.service.AudioPlayer;
|
||||
|
@ -901,6 +904,11 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
|
|||
}
|
||||
|
||||
public void openDownloadable(Message message) {
|
||||
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
|
||||
ConversationFragment.registerPendingMessage(activity, message);
|
||||
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, ConversationActivity.REQUEST_OPEN_MESSAGE);
|
||||
return;
|
||||
}
|
||||
DownloadableFile file = activity.xmppConnectionService.getFileBackend().getFile(message);
|
||||
if (!file.exists()) {
|
||||
Toast.makeText(activity, R.string.file_deleted, Toast.LENGTH_SHORT).show();
|
||||
|
|
Loading…
Reference in a new issue