diff --git a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java index 2c7a3f2e8..1c872c37e 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java @@ -20,11 +20,13 @@ package com.nextcloud.talk.controllers; +import android.annotation.SuppressLint; import android.media.MediaPlayer; -import android.media.RingtoneManager; import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; +import android.text.TextUtils; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -33,6 +35,7 @@ import android.widget.TextView; import com.bluelinelabs.conductor.RouterTransaction; import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler; +import com.bluelinelabs.logansquare.LoganSquare; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.model.GlideUrl; import com.bumptech.glide.load.model.LazyHeaders; @@ -42,6 +45,7 @@ import com.nextcloud.talk.R; import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.controllers.base.BaseController; +import com.nextcloud.talk.models.RingtoneSettings; import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.json.participants.Participant; import com.nextcloud.talk.models.json.participants.ParticipantsOverall; @@ -50,9 +54,11 @@ import com.nextcloud.talk.models.json.rooms.RoomsOverall; import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.glide.GlideApp; +import com.nextcloud.talk.utils.preferences.AppPreferences; import org.parceler.Parcels; +import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -69,9 +75,14 @@ import io.reactivex.schedulers.Schedulers; @AutoInjector(NextcloudTalkApplication.class) public class CallNotificationController extends BaseController { + private static final String TAG = "CallNotificationController"; + @Inject NcApi ncApi; + @Inject + AppPreferences appPreferences; + @BindView(R.id.conversationNameTextView) TextView conversationNameTextView; @@ -84,7 +95,6 @@ public class CallNotificationController extends BaseController { private String credentials; private Room currentRoom; private MediaPlayer mediaPlayer; - private boolean participantsCheckIsRunning; private boolean leavingScreen = false; public CallNotificationController(Bundle args) { @@ -141,7 +151,6 @@ public class CallNotificationController extends BaseController { @Override public void onSubscribe(Disposable d) { disposablesList.add(d); - participantsCheckIsRunning = true; } @Override @@ -219,6 +228,7 @@ public class CallNotificationController extends BaseController { }); } + @SuppressLint("LongLogTag") @Override protected void onViewBound(@NonNull View view) { super.onViewBound(view); @@ -227,11 +237,27 @@ public class CallNotificationController extends BaseController { handleFromNotification(); - Uri ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); + String callRingtonePreferenceString = appPreferences.getCallRingtoneUri(); + Uri ringtoneUri = null; - mediaPlayer = MediaPlayer.create(getApplicationContext(), ringtoneUri); - mediaPlayer.setLooping(true); - mediaPlayer.start(); + if (TextUtils.isEmpty(callRingtonePreferenceString)) { + // play default sound + ringtoneUri = Uri.parse("android.resource://" + getApplicationContext().getPackageName()+ + "/raw/librem_by_feandesign_call"); + } else { + try { + RingtoneSettings ringtoneSettings = LoganSquare.parse(callRingtonePreferenceString, RingtoneSettings.class); + ringtoneUri = ringtoneSettings.getRingtoneUri(); + } catch (IOException e) { + Log.e(TAG, "Failed to parse ringtone settings"); + } + } + + if (ringtoneUri != null) { + mediaPlayer = MediaPlayer.create(getApplicationContext(), ringtoneUri); + mediaPlayer.setLooping(true); + mediaPlayer.start(); + } } private void loadAvatar() { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/RingtoneSelectionController.java b/app/src/main/java/com/nextcloud/talk/controllers/RingtoneSelectionController.java index 34eed3b27..fa7da8172 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/RingtoneSelectionController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/RingtoneSelectionController.java @@ -149,7 +149,24 @@ public class RingtoneSelectionController extends BaseController implements Flexi abstractFlexibleItemList = new ArrayList<>(); abstractFlexibleItemList.add(new NotificationSoundItem("None", null)); - int positionToToggle = -1; + String ringtoneString; + + if (callNotificationSounds) { + ringtoneString = "android.resource://" + getApplicationContext().getPackageName() + + "/raw/librem_by_feandesign_call"; + } else { + ringtoneString = "android.resource://" + getApplicationContext().getPackageName() + + "/raw/librem_by_feandesign_message"; + } + + abstractFlexibleItemList.add(new NotificationSoundItem(getResources() + .getString(R.string.nc_settings_default_ringtone), ringtoneString)); + + String preferencesString = null; + if ((TextUtils.isEmpty((preferencesString = appPreferences.getCallRingtoneUri()))) + || TextUtils.isEmpty((preferencesString = appPreferences.getMessageRingtoneUri()))) { + ((NotificationSoundItem) abstractFlexibleItemList.get(1)).setSelected(true); + } if (getActivity() != null) { RingtoneManager manager = new RingtoneManager(getActivity()); @@ -164,6 +181,7 @@ public class RingtoneSelectionController extends BaseController implements Flexi NotificationSoundItem notificationSoundItem; + boolean foundDefault = false; while (cursor.moveToNext()) { String notificationTitle = cursor.getString(RingtoneManager.TITLE_COLUMN_INDEX); String notificationUri = cursor.getString(RingtoneManager.URI_COLUMN_INDEX); @@ -174,23 +192,23 @@ public class RingtoneSelectionController extends BaseController implements Flexi abstractFlexibleItemList.add(notificationSoundItem); - String preferencesString; - if (callNotificationSounds && !TextUtils.isEmpty(preferencesString = appPreferences - .getCallRingtoneUri()) || - !callNotificationSounds && !TextUtils.isEmpty(preferencesString = appPreferences - .getMessageRingtoneUri())) { + if (!TextUtils.isEmpty(preferencesString) && !foundDefault) { try { RingtoneSettings ringtoneSettings = LoganSquare.parse(preferencesString, RingtoneSettings.class); if (ringtoneSettings.getRingtoneUri() == null) { - ((NotificationSoundItem)abstractFlexibleItemList.get(0)).setSelected(true); + ((NotificationSoundItem) abstractFlexibleItemList.get(0)).setSelected(true); + foundDefault = true; } else if (completeNotificationUri.equals(ringtoneSettings.getRingtoneUri().toString())) { notificationSoundItem.setSelected(true); + foundDefault = true; + } else if (completeNotificationUri.equals(ringtoneString)) { + ((NotificationSoundItem) abstractFlexibleItemList.get(1)).setSelected(true); + foundDefault = true; } } catch (IOException e) { Log.e(TAG, "Failed to parse ringtone settings"); } } - } cursor.close(); diff --git a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java index f115c6cb2..f23a30e1e 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java @@ -320,6 +320,8 @@ public class SettingsController extends BaseController { Log.e(TAG, "Failed to parse ringtone name"); } settingsCallSounds.setSummary(ringtoneName); + } else { + settingsMessageSound.setSummary(R.string.nc_settings_default_ringtone); } if (!TextUtils.isEmpty(appPreferences.getMessageRingtoneUri())) { @@ -330,6 +332,8 @@ public class SettingsController extends BaseController { Log.e(TAG, "Failed to parse ringtone name"); } settingsMessageSound.setSummary(ringtoneName); + } else { + settingsMessageSound.setSummary(R.string.nc_settings_default_ringtone); } if ("No proxy".equals(appPreferences.getProxyType()) || appPreferences.getProxyType() == null) { diff --git a/app/src/main/res/raw/librem_by_feandesign_call.ogg b/app/src/main/res/raw/librem_by_feandesign_call.ogg new file mode 100644 index 000000000..2d1c7ee91 Binary files /dev/null and b/app/src/main/res/raw/librem_by_feandesign_call.ogg differ diff --git a/app/src/main/res/raw/librem_by_feandesign_message.ogg b/app/src/main/res/raw/librem_by_feandesign_message.ogg new file mode 100644 index 000000000..567f9ce94 Binary files /dev/null and b/app/src/main/res/raw/librem_by_feandesign_message.ogg differ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eaa5194cd..2264ae148 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -65,6 +65,7 @@ call_ringtone Messages message_ringtone + Librem by feandesign No proxy Username