audio player now requests permission when hitting play

This commit is contained in:
Daniel Gultsch 2018-03-05 17:19:56 +01:00
parent b5e1bbbdc1
commit 0add9a0ea2
4 changed files with 43 additions and 0 deletions

View file

@ -85,6 +85,7 @@ public class ConversationActivity extends XmppActivity implements OnConversation
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; public static final int REQUEST_OPEN_MESSAGE = 0x9876;
public static final int REQUEST_PLAY_PAUSE = 0x5432;
//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
@ -291,6 +292,9 @@ public class ConversationActivity extends XmppActivity implements OnConversation
refreshUiReal(); refreshUiReal();
ConversationFragment.openPendingMessage(this); ConversationFragment.openPendingMessage(this);
break; break;
case REQUEST_PLAY_PAUSE:
ConversationFragment.startStopPending(this);
break;
} }
} }
} }

View file

@ -424,6 +424,13 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
return null; return null;
} }
public static void startStopPending(Activity activity) {
ConversationFragment fragment = findConversationFragment(activity);
if (fragment != null) {
fragment.messageListAdapter.startStopPending();
}
}
public static void downloadFile(Activity activity, Message message) { public static void downloadFile(Activity activity, Message message) {
ConversationFragment fragment = findConversationFragment(activity); ConversationFragment fragment = findConversationFragment(activity);
if (fragment != null) { if (fragment != null) {

View file

@ -1,6 +1,7 @@
package eu.siacs.conversations.ui.adapter; package eu.siacs.conversations.ui.adapter;
import android.Manifest; import android.Manifest;
import android.app.Activity;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
@ -182,6 +183,10 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
this.mOnContactPictureClickedListener = listener; this.mOnContactPictureClickedListener = listener;
} }
public Activity getActivity() {
return activity;
}
public void setOnContactPictureLongClicked( public void setOnContactPictureLongClicked(
OnContactPictureLongClicked listener) { OnContactPictureLongClicked listener) {
this.mOnContactPictureLongClickedListener = listener; this.mOnContactPictureLongClickedListener = listener;
@ -903,6 +908,10 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
audioPlayer.stop(); audioPlayer.stop();
} }
public void startStopPending() {
audioPlayer.startStopPending();
}
public void openDownloadable(Message message) { public void openDownloadable(Message message) {
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ConversationFragment.registerPendingMessage(activity, message); ConversationFragment.registerPendingMessage(activity, message);

View file

@ -1,9 +1,13 @@
package eu.siacs.conversations.ui.service; package eu.siacs.conversations.ui.service;
import android.Manifest;
import android.content.pm.PackageManager;
import android.content.res.ColorStateList; import android.content.res.ColorStateList;
import android.media.Image;
import android.media.MediaPlayer; import android.media.MediaPlayer;
import android.os.Build; import android.os.Build;
import android.os.Handler; import android.os.Handler;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat; import android.support.v4.content.ContextCompat;
import android.view.View; import android.view.View;
import android.widget.ImageButton; import android.widget.ImageButton;
@ -16,7 +20,9 @@ import java.util.Locale;
import eu.siacs.conversations.R; import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Message; import eu.siacs.conversations.entities.Message;
import eu.siacs.conversations.ui.ConversationActivity;
import eu.siacs.conversations.ui.adapter.MessageAdapter; import eu.siacs.conversations.ui.adapter.MessageAdapter;
import eu.siacs.conversations.ui.util.PendingItem;
import eu.siacs.conversations.utils.WeakReferenceSet; import eu.siacs.conversations.utils.WeakReferenceSet;
public class AudioPlayer implements View.OnClickListener, MediaPlayer.OnCompletionListener, SeekBar.OnSeekBarChangeListener, Runnable { public class AudioPlayer implements View.OnClickListener, MediaPlayer.OnCompletionListener, SeekBar.OnSeekBarChangeListener, Runnable {
@ -28,6 +34,8 @@ public class AudioPlayer implements View.OnClickListener, MediaPlayer.OnCompleti
private final MessageAdapter messageAdapter; private final MessageAdapter messageAdapter;
private final WeakReferenceSet<RelativeLayout> audioPlayerLayouts = new WeakReferenceSet<>(); private final WeakReferenceSet<RelativeLayout> audioPlayerLayouts = new WeakReferenceSet<>();
private final PendingItem<WeakReference<ImageButton>> pendingOnClickView = new PendingItem<>();
private final Handler handler = new Handler(); private final Handler handler = new Handler();
public AudioPlayer(MessageAdapter adapter) { public AudioPlayer(MessageAdapter adapter) {
@ -97,6 +105,11 @@ public class AudioPlayer implements View.OnClickListener, MediaPlayer.OnCompleti
} }
private void startStop(ImageButton playPause) { private void startStop(ImageButton playPause) {
if (ContextCompat.checkSelfPermission(messageAdapter.getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
pendingOnClickView.push(new WeakReference<>(playPause));
ActivityCompat.requestPermissions(messageAdapter.getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, ConversationActivity.REQUEST_PLAY_PAUSE);
return;
}
final RelativeLayout audioPlayer = (RelativeLayout) playPause.getParent(); final RelativeLayout audioPlayer = (RelativeLayout) playPause.getParent();
final ViewHolder viewHolder = ViewHolder.get(audioPlayer); final ViewHolder viewHolder = ViewHolder.get(audioPlayer);
final Message message = (Message) audioPlayer.getTag(); final Message message = (Message) audioPlayer.getTag();
@ -143,6 +156,16 @@ public class AudioPlayer implements View.OnClickListener, MediaPlayer.OnCompleti
} }
} }
public void startStopPending() {
WeakReference<ImageButton> reference = pendingOnClickView.pop();
if (reference != null) {
ImageButton imageButton = reference.get();
if (imageButton != null) {
startStop(imageButton);
}
}
}
private boolean startStop(ViewHolder viewHolder, Message message) { private boolean startStop(ViewHolder viewHolder, Message message) {
if (message == currentlyPlayingMessage && player != null) { if (message == currentlyPlayingMessage && player != null) {
return playPauseCurrent(viewHolder); return playPauseCurrent(viewHolder);