Skip to content

Commit

Permalink
Fix wakelock release exception.
Browse files Browse the repository at this point in the history
  • Loading branch information
alex-signal committed Oct 21, 2020
1 parent e766b97 commit b182f73
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public void onCreate() {
VoiceNoteMediaSourceFactory mediaSourceFactory = new VoiceNoteMediaSourceFactory(this);

voiceNotePlaybackPreparer = new VoiceNotePlaybackPreparer(this, player, queueDataAdapter, mediaSourceFactory);
voiceNoteProximityManager = new VoiceNoteProximityManager(this, player);
voiceNoteProximityManager = new VoiceNoteProximityManager(this, player, queueDataAdapter);

mediaSession.setPlaybackState(stateBuilder.build());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import android.media.AudioManager;
import android.os.Build;
import android.os.PowerManager;
import android.support.v4.media.MediaDescriptionCompat;

import androidx.annotation.NonNull;

Expand All @@ -17,6 +18,7 @@
import com.google.android.exoplayer2.audio.AudioAttributes;
import com.google.android.exoplayer2.util.Util;

import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.util.ServiceUtil;

Expand All @@ -28,19 +30,24 @@ class VoiceNoteProximityManager implements SensorEventListener {

private static final float PROXIMITY_THRESHOLD = 5f;

private final SimpleExoPlayer player;
private final AudioManager audioManager;
private final SensorManager sensorManager;
private final Sensor proximitySensor;
private final PowerManager.WakeLock wakeLock;
private final SimpleExoPlayer player;
private final AudioManager audioManager;
private final SensorManager sensorManager;
private final Sensor proximitySensor;
private final PowerManager.WakeLock wakeLock;
private final VoiceNoteQueueDataAdapter queueDataAdapter;

private long startTime;

VoiceNoteProximityManager(@NonNull Context context, @NonNull SimpleExoPlayer player) {
this.player = player;
this.audioManager = ServiceUtil.getAudioManager(context);
this.sensorManager = ServiceUtil.getSensorManager(context);
this.proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
VoiceNoteProximityManager(@NonNull Context context,
@NonNull SimpleExoPlayer player,
@NonNull VoiceNoteQueueDataAdapter queueDataAdapter)
{
this.player = player;
this.audioManager = ServiceUtil.getAudioManager(context);
this.sensorManager = ServiceUtil.getSensorManager(context);
this.proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
this.queueDataAdapter = queueDataAdapter;

if (Build.VERSION.SDK_INT >= 21) {
this.wakeLock = ServiceUtil.getPowerManager(context).newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, TAG);
Expand Down Expand Up @@ -81,11 +88,24 @@ public void onSensorChanged(SensorEvent event) {

final int currentStreamType = Util.getStreamTypeForAudioUsage(player.getAudioAttributes().usage);

final long threadId;
final int windowIndex = player.getCurrentWindowIndex();

if (queueDataAdapter.isEmpty() || windowIndex == C.INDEX_UNSET) {
threadId = -1;
} else {
MediaDescriptionCompat mediaDescriptionCompat = queueDataAdapter.getMediaDescription(windowIndex);

threadId = mediaDescriptionCompat.getExtras().getLong(VoiceNoteMediaDescriptionCompatFactory.EXTRA_THREAD_ID, -1);
}

if (desiredStreamType == AudioManager.STREAM_VOICE_CALL &&
desiredStreamType != currentStreamType &&
!audioManager.isWiredHeadsetOn())
!audioManager.isWiredHeadsetOn() &&
threadId != -1 &&
ApplicationDependencies.getMessageNotifier().getVisibleThread() == threadId)
{
if (wakeLock != null) {
if (wakeLock != null && !wakeLock.isHeld()) {
wakeLock.acquire(TimeUnit.MINUTES.toMillis(30));
}

Expand All @@ -102,7 +122,10 @@ public void onSensorChanged(SensorEvent event) {
System.currentTimeMillis() - startTime > 500)
{
if (wakeLock != null) {
wakeLock.release();
if (wakeLock.isHeld()) {
wakeLock.release();
}

player.setPlayWhenReady(false);
player.setAudioAttributes(new AudioAttributes.Builder()
.setContentType(C.CONTENT_TYPE_MUSIC)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,11 @@ public void setVisibleThread(long threadId) {
visibleThread = threadId;
}

@Override
public long getVisibleThread() {
return visibleThread;
}

@Override
public void clearVisibleThread() {
setVisibleThread(-1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

public interface MessageNotifier {
void setVisibleThread(long threadId);
long getVisibleThread();
void clearVisibleThread();
void setLastDesktopActivityTimestamp(long timestamp);
void notifyMessageDeliveryFailed(Context context, Recipient recipient, long threadId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,11 @@ public void setVisibleThread(long threadId) {
wrapped.setVisibleThread(threadId);
}

@Override
public long getVisibleThread() {
return wrapped.getVisibleThread();
}

@Override
public void clearVisibleThread() {
wrapped.clearVisibleThread();
Expand Down

0 comments on commit b182f73

Please sign in to comment.