mirror of
https://github.com/oxen-io/session-android.git
synced 2023-12-14 02:53:01 +01:00
* feat: start new app theming feature * feat: add some theming colours * refactor: start refactoring themes and colours to use dynamic attributes * feat: adding more colours and switching over default colours to be theme based instead of hard-coded or day/night specific * refactor: take a look at ocean light and logo colour * feat: global search colours for light and dark ocean * feat: more styling * feat: adding themes to conversation activity and refactoring the base theme to apply over the top of the activity's theme so it retains noActionBar etc * feat: add dynamic accent color * docs: add todo for changing how accent colour is applied * feat: update new theming to use override primary style so that the regular colorAccent attribute can be used in existing layouts * feat: coordinating styles across layouts, fixing up pinned icons and naming for conversation list items * refactor: re-styling layouts to match new themes and attributes. Need to figure out action mode close button * refactor: remove @color/text and replace with ?android:textColorPrimary to override in themes * refactor: add context theme wrapper to bottom sheet dialog that references accent color * fix: input bar bug fix and preference activity themes * refactor: new settings menu options * fix: crash for PNModeActivity.kt refactor: move ordering in seed dialog to match designs, copy changes to match new settings menu * feat: add new appearance settings activity * refactor: title and VM changes * fix: correct override * feat: add theme appearance screen UI features and start VM implementation. re-add legacy theme utils to get default for migration * fix: compile errors and missing themes from emoji features * refactor: remove background shape alteration and old bottom sheet styles, re-add the theme mode attr * feat: appearance screen wired up, just need to refresh theme * feat: add theme state recreation and fix match system settings option * refactor: add bottom margin * feat: explore custom preference category * feat: add the customized session theme for CorrectedPreferenceFragment * feat: replace AppProtectionPreferenceFragment to extend ListSummaryPreferenceFragment * refactor: change drawable style and remove explicit dividers * refactor: remove divider in CorrectedPreferenceFragment * feat: add theme state check on resume, might be jarring currently * feat: add preference divider elements for settings menu * refactor: settings menu redesigns * refactor: change led preference to integer and refactor TextSecurePreferences.kt * feat: add scroll parcel to save/restore hierarchy on restart with appearance changes * feat: add the conversations blocked contacts and refactor preference order and copy * feat: add blocked contacts activity, basic layout and vm * feat: add unblock DB functions and storage protocol, start working on the DB query state flow, might have to just implement recipient on modified listener * feat: add blocked contacts and notif recipient listeners * feat: add recipient db reader * feat: add blocked contact interactions and fix a theming crash for notifications * feat: introduce better equals and hashcode implementations to recipient, replace home diff util content check with hashcode-based comparison * feat: add settings menu vectors * fix: preview compile error * refactor: migrating settings menu to new designs * feat: help menu * refactor: simplify link opening * refactor: remove space * feat: refactor preferences and start theming for light mode options * refactor: fixing dark and light modes with dialogs * refactor: popup dialogs use proper themes now * refactor: alert dialogs and media edit fragments use attribute references * refactor: use input bar button attribute instead color control normal in vector tint * refactor: transparency, dialog fixes, notification fix * refactor: attrs and styles for buttons * fix: use prominent button color on the outline button's border * fix: fix the trash * refactor: remove the appearance * refactor: avatar placeholder generation, chips and element border styles * refactor: use colors instead of style references * refactor: theming changes to match designs and feedback * refactor: the titles are bold and the categories are tertiary coloured now * fix: appearance settings match preferences, search bottom bar uses themed attributes * refactor: increase setting button height * Update clear all data dialog * Update seed dialog * refactor: more qa feedback changes * feat: add new TLs and fa-rIR TLs * Update notification content dialog * Fix message requests clear all button text color * feat: re-add screenshot observer * refactor: make send tint accent color * feat: add unread background differences * fix: change unread count indicator * build: upgrade build numbers * Fix message requests popupmenu background color * fix: crash from attr reference in color attribute * build: upgrade build number * fix: message bubbles, thumbnail backgrounds, search bar visibility with input bar, attachment buttons * fix: tertiary text for keyboard page search view * fix: emoji overflow colour differences * fix: reaction pill dialog background is now correct colour * Add style to reactions tab layout * fix: appearance activity reverting primary color at correct time * fix: show call privacy warning every time instead of just once * fix: gradient background(?) and audio autoplay disable * fix: crash in all media containing documents * fix: reaction dialog heading fixes * Add style to reactions tab layout * fix: remove gradient backgrounds * fix: adding new reaction normal text attribute to try correct the tab layout * fix: ocean dark unread/read colours * build; update build number * build: update build number Co-authored-by: charles <charles@oxen.io>
181 lines
7.5 KiB
Java
181 lines
7.5 KiB
Java
package org.thoughtcrime.securesms.preferences;
|
|
|
|
import static android.app.Activity.RESULT_OK;
|
|
|
|
import android.annotation.SuppressLint;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.media.Ringtone;
|
|
import android.media.RingtoneManager;
|
|
import android.net.Uri;
|
|
import android.os.AsyncTask;
|
|
import android.os.Bundle;
|
|
import android.provider.Settings;
|
|
import android.text.TextUtils;
|
|
|
|
import androidx.annotation.Nullable;
|
|
import androidx.preference.ListPreference;
|
|
import androidx.preference.Preference;
|
|
|
|
import org.session.libsession.utilities.TextSecurePreferences;
|
|
import org.thoughtcrime.securesms.ApplicationContext;
|
|
import org.thoughtcrime.securesms.components.SwitchPreferenceCompat;
|
|
import org.thoughtcrime.securesms.notifications.NotificationChannels;
|
|
|
|
import network.loki.messenger.R;
|
|
|
|
public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragment {
|
|
|
|
@SuppressWarnings("unused")
|
|
private static final String TAG = NotificationsPreferenceFragment.class.getSimpleName();
|
|
|
|
@Override
|
|
public void onCreate(Bundle paramBundle) {
|
|
super.onCreate(paramBundle);
|
|
|
|
// Set up FCM toggle
|
|
String fcmKey = "pref_key_use_fcm";
|
|
((SwitchPreferenceCompat)findPreference(fcmKey)).setChecked(TextSecurePreferences.isUsingFCM(getContext()));
|
|
this.findPreference(fcmKey)
|
|
.setOnPreferenceChangeListener((preference, newValue) -> {
|
|
TextSecurePreferences.setIsUsingFCM(getContext(), (boolean) newValue);
|
|
ApplicationContext.getInstance(getContext()).registerForFCMIfNeeded(true);
|
|
return true;
|
|
});
|
|
|
|
if (NotificationChannels.supported()) {
|
|
TextSecurePreferences.setNotificationRingtone(getContext(), NotificationChannels.getMessageRingtone(getContext()).toString());
|
|
TextSecurePreferences.setNotificationVibrateEnabled(getContext(), NotificationChannels.getMessageVibrate(getContext()));
|
|
}
|
|
this.findPreference(TextSecurePreferences.RINGTONE_PREF)
|
|
.setOnPreferenceChangeListener(new RingtoneSummaryListener());
|
|
this.findPreference(TextSecurePreferences.NOTIFICATION_PRIVACY_PREF)
|
|
.setOnPreferenceChangeListener(new NotificationPrivacyListener());
|
|
this.findPreference(TextSecurePreferences.VIBRATE_PREF)
|
|
.setOnPreferenceChangeListener((preference, newValue) -> {
|
|
NotificationChannels.updateMessageVibrate(getContext(), (boolean) newValue);
|
|
return true;
|
|
});
|
|
|
|
this.findPreference(TextSecurePreferences.RINGTONE_PREF)
|
|
.setOnPreferenceClickListener(preference -> {
|
|
Uri current = TextSecurePreferences.getNotificationRingtone(getContext());
|
|
|
|
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
|
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
|
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
|
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
|
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, Settings.System.DEFAULT_NOTIFICATION_URI);
|
|
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, current);
|
|
|
|
startActivityForResult(intent, 1);
|
|
|
|
return true;
|
|
});
|
|
|
|
this.findPreference(TextSecurePreferences.NOTIFICATION_PRIVACY_PREF)
|
|
.setOnPreferenceClickListener(preference -> {
|
|
ListPreference listPreference = (ListPreference) preference;
|
|
listPreference.setDialogMessage(R.string.preferences_notifications__content_message);
|
|
new ListPreferenceDialog(listPreference, () -> {
|
|
initializeListSummary((ListPreference) findPreference(TextSecurePreferences.NOTIFICATION_PRIVACY_PREF));
|
|
return null;
|
|
}).show(getChildFragmentManager(), "ListPreferenceDialog");
|
|
return true;
|
|
});
|
|
|
|
initializeListSummary((ListPreference) findPreference(TextSecurePreferences.NOTIFICATION_PRIVACY_PREF));
|
|
|
|
if (NotificationChannels.supported()) {
|
|
this.findPreference(TextSecurePreferences.NOTIFICATION_PRIORITY_PREF)
|
|
.setOnPreferenceClickListener(preference -> {
|
|
Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
|
|
intent.putExtra(Settings.EXTRA_CHANNEL_ID, NotificationChannels.getMessagesChannel(getContext()));
|
|
intent.putExtra(Settings.EXTRA_APP_PACKAGE, getContext().getPackageName());
|
|
startActivity(intent);
|
|
return true;
|
|
});
|
|
}
|
|
|
|
initializeRingtoneSummary(findPreference(TextSecurePreferences.RINGTONE_PREF));
|
|
initializeMessageVibrateSummary((SwitchPreferenceCompat)findPreference(TextSecurePreferences.VIBRATE_PREF));
|
|
}
|
|
|
|
@Override
|
|
public void onCreatePreferences(@Nullable Bundle savedInstanceState, String rootKey) {
|
|
addPreferencesFromResource(R.xml.preferences_notifications);
|
|
}
|
|
|
|
@Override
|
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
if (requestCode == 1 && resultCode == RESULT_OK && data != null) {
|
|
Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
|
|
|
|
if (Settings.System.DEFAULT_NOTIFICATION_URI.equals(uri)) {
|
|
NotificationChannels.updateMessageRingtone(getContext(), uri);
|
|
TextSecurePreferences.removeNotificationRingtone(getContext());
|
|
} else {
|
|
uri = uri == null ? Uri.EMPTY : uri;
|
|
NotificationChannels.updateMessageRingtone(getContext(), uri);
|
|
TextSecurePreferences.setNotificationRingtone(getContext(), uri.toString());
|
|
}
|
|
|
|
initializeRingtoneSummary(findPreference(TextSecurePreferences.RINGTONE_PREF));
|
|
}
|
|
}
|
|
|
|
private class RingtoneSummaryListener implements Preference.OnPreferenceChangeListener {
|
|
@Override
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
Uri value = (Uri) newValue;
|
|
|
|
if (value == null || TextUtils.isEmpty(value.toString())) {
|
|
preference.setSummary(R.string.preferences__silent);
|
|
} else {
|
|
Ringtone tone = RingtoneManager.getRingtone(getActivity(), value);
|
|
|
|
if (tone != null) {
|
|
preference.setSummary(tone.getTitle(getActivity()));
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
private void initializeRingtoneSummary(Preference pref) {
|
|
RingtoneSummaryListener listener = (RingtoneSummaryListener) pref.getOnPreferenceChangeListener();
|
|
Uri uri = TextSecurePreferences.getNotificationRingtone(getContext());
|
|
|
|
listener.onPreferenceChange(pref, uri);
|
|
}
|
|
|
|
private void initializeMessageVibrateSummary(SwitchPreferenceCompat pref) {
|
|
pref.setChecked(TextSecurePreferences.isNotificationVibrateEnabled(getContext()));
|
|
}
|
|
|
|
public static CharSequence getSummary(Context context) {
|
|
final int onCapsResId = R.string.ApplicationPreferencesActivity_On;
|
|
final int offCapsResId = R.string.ApplicationPreferencesActivity_Off;
|
|
|
|
return context.getString(TextSecurePreferences.isNotificationsEnabled(context) ? onCapsResId : offCapsResId);
|
|
}
|
|
|
|
private class NotificationPrivacyListener extends ListSummaryListener {
|
|
@SuppressLint("StaticFieldLeak")
|
|
@Override
|
|
public boolean onPreferenceChange(Preference preference, Object value) {
|
|
new AsyncTask<Void, Void, Void>() {
|
|
@Override
|
|
protected Void doInBackground(Void... params) {
|
|
ApplicationContext.getInstance(getActivity()).messageNotifier.updateNotification(getActivity());
|
|
return null;
|
|
}
|
|
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
|
|
|
return super.onPreferenceChange(preference, value);
|
|
}
|
|
}
|
|
|
|
}
|