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.ActivityNotFoundException; | ||||||
| import android.content.Context; | import android.content.Context; | ||||||
| import android.content.Intent; | import android.content.Intent; | ||||||
|  | import android.content.pm.PackageManager; | ||||||
| import android.databinding.DataBindingUtil; | import android.databinding.DataBindingUtil; | ||||||
| import android.net.Uri; | import android.net.Uri; | ||||||
| import android.os.Build; | 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_NICK = "nick"; | ||||||
| 	public static final String EXTRA_IS_PRIVATE_MESSAGE = "pm"; | 	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 | 	//secondary fragment (when holding the conversation, must be initialized before refreshing the overview fragment | ||||||
| 	private static final @IdRes | 	private static final @IdRes | ||||||
| @ -281,6 +284,16 @@ public class ConversationActivity extends XmppActivity implements OnConversation | |||||||
| 	@Override | 	@Override | ||||||
| 	public void onRequestPermissionsResult(int requestCode,@NonNull String permissions[], @NonNull int[] grantResults) { | 	public void onRequestPermissionsResult(int requestCode,@NonNull String permissions[], @NonNull int[] grantResults) { | ||||||
| 		UriHandlerActivity.onRequestPermissionResult(this, requestCode, 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 | 	@Override | ||||||
|  | |||||||
| @ -409,16 +409,42 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke | |||||||
| 	private int lastCompletionCursor; | 	private int lastCompletionCursor; | ||||||
| 	private boolean firstWord = false; | 	private boolean firstWord = false; | ||||||
| 	private Message mPendingDownloadableMessage; | 	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); | 		Fragment fragment = activity.getFragmentManager().findFragmentById(R.id.main_fragment); | ||||||
| 		if (fragment != null && fragment instanceof ConversationFragment) { | 		if (fragment != null && fragment instanceof ConversationFragment) { | ||||||
| 			((ConversationFragment) fragment).startDownloadable(message); | 			return (ConversationFragment) fragment; | ||||||
| 			return; |  | ||||||
| 		} | 		} | ||||||
| 		fragment = activity.getFragmentManager().findFragmentById(R.id.secondary_fragment); | 		fragment = activity.getFragmentManager().findFragmentById(R.id.secondary_fragment); | ||||||
| 		if (fragment != null && fragment instanceof ConversationFragment) { | 		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; | package eu.siacs.conversations.ui.adapter; | ||||||
| 
 | 
 | ||||||
|  | import android.Manifest; | ||||||
| import android.content.ActivityNotFoundException; | import android.content.ActivityNotFoundException; | ||||||
| import android.content.Intent; | import android.content.Intent; | ||||||
| import android.content.SharedPreferences; | import android.content.SharedPreferences; | ||||||
| @ -15,6 +16,7 @@ import android.net.Uri; | |||||||
| import android.os.AsyncTask; | import android.os.AsyncTask; | ||||||
| import android.preference.PreferenceManager; | import android.preference.PreferenceManager; | ||||||
| import android.support.annotation.ColorInt; | import android.support.annotation.ColorInt; | ||||||
|  | import android.support.v4.app.ActivityCompat; | ||||||
| import android.support.v4.content.ContextCompat; | import android.support.v4.content.ContextCompat; | ||||||
| import android.text.Spannable; | import android.text.Spannable; | ||||||
| import android.text.SpannableString; | import android.text.SpannableString; | ||||||
| @ -63,6 +65,7 @@ import eu.siacs.conversations.entities.Transferable; | |||||||
| import eu.siacs.conversations.persistance.FileBackend; | import eu.siacs.conversations.persistance.FileBackend; | ||||||
| import eu.siacs.conversations.services.MessageArchiveService; | import eu.siacs.conversations.services.MessageArchiveService; | ||||||
| import eu.siacs.conversations.services.NotificationService; | import eu.siacs.conversations.services.NotificationService; | ||||||
|  | import eu.siacs.conversations.ui.ConversationActivity; | ||||||
| import eu.siacs.conversations.ui.ConversationFragment; | import eu.siacs.conversations.ui.ConversationFragment; | ||||||
| import eu.siacs.conversations.ui.XmppActivity; | import eu.siacs.conversations.ui.XmppActivity; | ||||||
| import eu.siacs.conversations.ui.service.AudioPlayer; | import eu.siacs.conversations.ui.service.AudioPlayer; | ||||||
| @ -901,6 +904,11 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	public void openDownloadable(Message message) { | 	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); | 		DownloadableFile file = activity.xmppConnectionService.getFileBackend().getFile(message); | ||||||
| 		if (!file.exists()) { | 		if (!file.exists()) { | ||||||
| 			Toast.makeText(activity, R.string.file_deleted, Toast.LENGTH_SHORT).show(); | 			Toast.makeText(activity, R.string.file_deleted, Toast.LENGTH_SHORT).show(); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch