move in-chat sounds to InChatSounds class

This commit is contained in:
B. Petersen 2020-05-16 19:48:06 +02:00
parent 84c35c7483
commit 48f1693420
No known key found for this signature in database
GPG key ID: 3B88E92DEA8E9AFC
4 changed files with 85 additions and 9 deletions

View file

@ -27,6 +27,7 @@ import org.thoughtcrime.securesms.connect.NetworkStateReceiver;
import org.thoughtcrime.securesms.crypto.PRNGFixes; import org.thoughtcrime.securesms.crypto.PRNGFixes;
import org.thoughtcrime.securesms.geolocation.DcLocationManager; import org.thoughtcrime.securesms.geolocation.DcLocationManager;
import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.JobManager;
import org.thoughtcrime.securesms.notifications.InChatSounds;
import org.thoughtcrime.securesms.util.AndroidSignalProtocolLogger; import org.thoughtcrime.securesms.util.AndroidSignalProtocolLogger;
import org.thoughtcrime.securesms.util.DynamicLanguage; import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.ScreenLockUtil; import org.thoughtcrime.securesms.util.ScreenLockUtil;
@ -71,6 +72,7 @@ public class ApplicationContext extends MultiDexApplication implements DefaultLi
initializeLogging(); initializeLogging();
initializeJobManager(); initializeJobManager();
ProcessLifecycleOwner.get().getLifecycle().addObserver(this); ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
InChatSounds.getInstance(this);
dcLocationManager = new DcLocationManager(this); dcLocationManager = new DcLocationManager(this);
try { try {

View file

@ -93,6 +93,7 @@ import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.mms.MediaConstraints; import org.thoughtcrime.securesms.mms.MediaConstraints;
import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.mms.PartAuthority;
import org.thoughtcrime.securesms.mms.SlideDeck; import org.thoughtcrime.securesms.mms.SlideDeck;
import org.thoughtcrime.securesms.notifications.InChatSounds;
import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.providers.PersistentBlobProvider; import org.thoughtcrime.securesms.providers.PersistentBlobProvider;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
@ -1442,7 +1443,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
} }
else { else {
processComposeControls(ACTION_SEND_OUT); processComposeControls(ACTION_SEND_OUT);
dcContext.notificationManger.playSendSound(); InChatSounds.getInstance(ConversationActivity.this).playSendSound();
} }
} }

View file

@ -0,0 +1,61 @@
package org.thoughtcrime.securesms.notifications;
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
import android.util.Log;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.util.Prefs;
public class InChatSounds {
private static final String TAG = InChatSounds.class.getSimpleName();
private static volatile InChatSounds instance;
private Context appContext = null;
private SoundPool soundPool = null;
private int soundIn = 0;
private int soundOut = 0;
static public InChatSounds getInstance(Context context) {
if (instance == null) {
synchronized (InChatSounds.class) {
if (instance == null) {
instance = new InChatSounds(context);
}
}
}
return instance;
}
private InChatSounds(Context context) {
try {
appContext = context.getApplicationContext();
soundPool = new SoundPool(3, AudioManager.STREAM_SYSTEM, 0);
soundIn = soundPool.load(context, R.raw.sound_in, 1);
soundOut = soundPool.load(context, R.raw.sound_out, 1);
} catch(Exception e) {
Log.e(TAG, "cannot initialize sounds", e);
}
}
public void playSendSound() {
try {
if (Prefs.isInChatNotifications(appContext)) {
soundPool.play(soundOut, 1.0f, 1.0f, 1, 0, 1.0f);
}
} catch(Exception e) {
Log.e(TAG, "cannot play send sound", e);
}
}
public void playIncomingSound() {
try {
if (Prefs.isInChatNotifications(appContext)) {
soundPool.play(soundIn, 1.0f, 1.0f, 1, 0, 1.0f);
}
} catch(Exception e) {
Log.e(TAG, "cannot play incoming sound", e);
}
}
}

View file

@ -1,21 +1,34 @@
package org.thoughtcrime.securesms.notifications; package org.thoughtcrime.securesms.notifications;
import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.b44t.messenger.DcContext; import org.thoughtcrime.securesms.connect.ApplicationDcContext;
import org.thoughtcrime.securesms.util.Prefs;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
public class MsgNotificationManager { public class MsgNotificationManager {
@NonNull private DcContext dcContext; private static final String TAG = InChatSounds.class.getSimpleName();
@NonNull private ApplicationDcContext dcContext;
private volatile int visibleChatId = 0;
public MsgNotificationManager(DcContext dcContext) { public MsgNotificationManager(ApplicationDcContext dcContext) {
this.dcContext = dcContext; this.dcContext = dcContext;
} }
public void addNotification(int chatId, int msgId) { public void addNotification(int chatId, int msgId) {
Util.runOnAnyBackgroundThread(() -> { Util.runOnAnyBackgroundThread(() -> {
if (Prefs.isChatMuted(dcContext.context, chatId)) {
return;
}
if (chatId == visibleChatId) {
InChatSounds.getInstance(dcContext.context).playIncomingSound();
return;
}
}); });
} }
@ -27,11 +40,10 @@ public class MsgNotificationManager {
public void updateVisibleChat(int chatId) { public void updateVisibleChat(int chatId) {
Util.runOnAnyBackgroundThread(() -> { Util.runOnAnyBackgroundThread(() -> {
visibleChatId = chatId;
removeNotifications(chatId); removeNotifications(chatId);
}); });
} }
public void playSendSound() {
}
} }