~singpolyma/cheogram-android

0add9a0ea22ff7e2d9f35b06a76553bcb35e87c3 — Daniel Gultsch 6 years ago b5e1bbb
audio player now requests permission when hitting play
M src/main/java/eu/siacs/conversations/ui/ConversationActivity.java => src/main/java/eu/siacs/conversations/ui/ConversationActivity.java +4 -0
@@ 85,6 85,7 @@ public class ConversationActivity extends XmppActivity implements OnConversation
	public static final String EXTRA_IS_PRIVATE_MESSAGE = "pm";

	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


@@ 291,6 292,9 @@ public class ConversationActivity extends XmppActivity implements OnConversation
						refreshUiReal();
						ConversationFragment.openPendingMessage(this);
						break;
					case REQUEST_PLAY_PAUSE:
						ConversationFragment.startStopPending(this);
						break;
				}
			}
		}

M src/main/java/eu/siacs/conversations/ui/ConversationFragment.java => src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +7 -0
@@ 424,6 424,13 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
		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) {
		ConversationFragment fragment = findConversationFragment(activity);
		if (fragment != null) {

M src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java => src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java +9 -0
@@ 1,6 1,7 @@
package eu.siacs.conversations.ui.adapter;

import android.Manifest;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.content.SharedPreferences;


@@ 182,6 183,10 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
		this.mOnContactPictureClickedListener = listener;
	}

	public Activity getActivity() {
		return activity;
	}

	public void setOnContactPictureLongClicked(
			OnContactPictureLongClicked listener) {
		this.mOnContactPictureLongClickedListener = listener;


@@ 903,6 908,10 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
		audioPlayer.stop();
	}

	public void startStopPending() {
		audioPlayer.startStopPending();
	}

	public void openDownloadable(Message message) {
		if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
			ConversationFragment.registerPendingMessage(activity, message);

M src/main/java/eu/siacs/conversations/ui/service/AudioPlayer.java => src/main/java/eu/siacs/conversations/ui/service/AudioPlayer.java +23 -0
@@ 1,9 1,13 @@
package eu.siacs.conversations.ui.service;

import android.Manifest;
import android.content.pm.PackageManager;
import android.content.res.ColorStateList;
import android.media.Image;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Handler;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.view.View;
import android.widget.ImageButton;


@@ 16,7 20,9 @@ import java.util.Locale;

import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Message;
import eu.siacs.conversations.ui.ConversationActivity;
import eu.siacs.conversations.ui.adapter.MessageAdapter;
import eu.siacs.conversations.ui.util.PendingItem;
import eu.siacs.conversations.utils.WeakReferenceSet;

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 WeakReferenceSet<RelativeLayout> audioPlayerLayouts = new WeakReferenceSet<>();

	private final PendingItem<WeakReference<ImageButton>> pendingOnClickView = new PendingItem<>();

	private final Handler handler = new Handler();

	public AudioPlayer(MessageAdapter adapter) {


@@ 97,6 105,11 @@ public class AudioPlayer implements View.OnClickListener, MediaPlayer.OnCompleti
	}

	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 ViewHolder viewHolder = ViewHolder.get(audioPlayer);
		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) {
		if (message == currentlyPlayingMessage && player != null) {
			return playPauseCurrent(viewHolder);