From 13d785894a90cb1dae353ff2d3ad7a70c6f7ac00 Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Fri, 14 Apr 2017 20:39:38 -0700 Subject: [PATCH] Fix up preference screen a little 1) Remove phantom padding on left margin for all fragments 2) Move preferences around slightly 3) Add some card separators and style led list pref // FREEBIE --- res/drawable/preference_divider.xml | 19 +++ res/layout/led_color_preference_widget.xml | 13 ++ res/layout/preference_divider.xml | 14 +++ res/values/strings.xml | 5 + res/xml/preferences_advanced.xml | 18 --- res/xml/preferences_app_protection.xml | 73 ++++++----- res/xml/preferences_chats.xml | 18 +++ res/xml/preferences_notifications.xml | 114 ++++++++++-------- .../ApplicationPreferencesActivity.java | 5 +- .../AppProtectionPreferenceFragment.java | 2 +- .../preferences/BooleanListPreference.java | 58 --------- .../preferences/ChatsPreferenceFragment.java | 3 +- .../CorrectedPreferenceFragment.java | 18 +++ .../preferences/LEDColorListPreference.java | 108 +++++++++++++++++ .../ListSummaryPreferenceFragment.java | 2 +- .../preferences/SmsMmsPreferenceFragment.java | 2 +- 16 files changed, 309 insertions(+), 163 deletions(-) create mode 100644 res/drawable/preference_divider.xml create mode 100644 res/layout/led_color_preference_widget.xml create mode 100644 res/layout/preference_divider.xml delete mode 100644 src/org/thoughtcrime/securesms/preferences/BooleanListPreference.java create mode 100644 src/org/thoughtcrime/securesms/preferences/CorrectedPreferenceFragment.java create mode 100644 src/org/thoughtcrime/securesms/preferences/LEDColorListPreference.java diff --git a/res/drawable/preference_divider.xml b/res/drawable/preference_divider.xml new file mode 100644 index 000000000..a7ce0c1b9 --- /dev/null +++ b/res/drawable/preference_divider.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout/led_color_preference_widget.xml b/res/layout/led_color_preference_widget.xml new file mode 100644 index 000000000..c575131e5 --- /dev/null +++ b/res/layout/led_color_preference_widget.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/res/layout/preference_divider.xml b/res/layout/preference_divider.xml new file mode 100644 index 000000000..9456a5940 --- /dev/null +++ b/res/layout/preference_divider.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index d2834c1a5..c1f7e03a6 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1187,6 +1187,11 @@ Support for next-generation video and voice calls when enabled by both parties. This feature is in beta. Relay all calls through the Signal server to avoid revealing your IP address to your contact. Enabling will reduce call quality. Always relay calls + App access + Communication + Chats + Message notifications + Events diff --git a/res/xml/preferences_advanced.xml b/res/xml/preferences_advanced.xml index dcc6e78fc..ddd5bb446 100644 --- a/res/xml/preferences_advanced.xml +++ b/res/xml/preferences_advanced.xml @@ -7,24 +7,6 @@ android:title="@string/preferences__signal_messages_and_calls" android:summary="@string/preferences__free_private_messages_and_calls"/> - - - - - - diff --git a/res/xml/preferences_app_protection.xml b/res/xml/preferences_app_protection.xml index 1cde21912..5f1a3b04c 100644 --- a/res/xml/preferences_app_protection.xml +++ b/res/xml/preferences_app_protection.xml @@ -1,39 +1,52 @@ - + + - + - + - + - + + + + + + + + + + + + - - - diff --git a/res/xml/preferences_chats.xml b/res/xml/preferences_chats.xml index a687d1a79..dfa8d61a0 100644 --- a/res/xml/preferences_chats.xml +++ b/res/xml/preferences_chats.xml @@ -27,6 +27,24 @@ android:entryValues="@array/pref_media_download_entries" /> + + + + + + + + + + - - + - + - + - + - - - + android:entries="@array/pref_led_color_entries" + android:entryValues="@array/pref_led_color_values" /> - + - + + + + + + + + + + + + \ No newline at end of file diff --git a/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java b/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java index 8cb41ced6..a44edbf62 100644 --- a/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java +++ b/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java @@ -26,11 +26,13 @@ import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v4.preference.PreferenceFragment; +import android.view.View; import org.thoughtcrime.securesms.crypto.MasterSecret; import org.thoughtcrime.securesms.preferences.AdvancedPreferenceFragment; import org.thoughtcrime.securesms.preferences.AppProtectionPreferenceFragment; import org.thoughtcrime.securesms.preferences.AppearancePreferenceFragment; +import org.thoughtcrime.securesms.preferences.CorrectedPreferenceFragment; import org.thoughtcrime.securesms.preferences.NotificationsPreferenceFragment; import org.thoughtcrime.securesms.preferences.SmsMmsPreferenceFragment; import org.thoughtcrime.securesms.preferences.ChatsPreferenceFragment; @@ -121,7 +123,8 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA } } - public static class ApplicationPreferenceFragment extends PreferenceFragment { + public static class ApplicationPreferenceFragment extends CorrectedPreferenceFragment { + @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); diff --git a/src/org/thoughtcrime/securesms/preferences/AppProtectionPreferenceFragment.java b/src/org/thoughtcrime/securesms/preferences/AppProtectionPreferenceFragment.java index dc0a3045d..4df78f140 100644 --- a/src/org/thoughtcrime/securesms/preferences/AppProtectionPreferenceFragment.java +++ b/src/org/thoughtcrime/securesms/preferences/AppProtectionPreferenceFragment.java @@ -27,7 +27,7 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences; import java.util.concurrent.TimeUnit; -public class AppProtectionPreferenceFragment extends PreferenceFragment { +public class AppProtectionPreferenceFragment extends CorrectedPreferenceFragment { private static final String PREFERENCE_CATEGORY_BLOCKED = "preference_category_blocked"; diff --git a/src/org/thoughtcrime/securesms/preferences/BooleanListPreference.java b/src/org/thoughtcrime/securesms/preferences/BooleanListPreference.java deleted file mode 100644 index 6a7ae1e81..000000000 --- a/src/org/thoughtcrime/securesms/preferences/BooleanListPreference.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Copyright (C) 2017 Whisper Systems - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.thoughtcrime.securesms.preferences; - -import android.content.Context; -import android.preference.ListPreference; -import android.util.AttributeSet; - -import org.thoughtcrime.securesms.R; - -/** - * List preference that disables dependents when set to "none", similar to a CheckBoxPreference. - * - * @author Taylor Kline - */ - -public class BooleanListPreference extends ListPreference { - - public BooleanListPreference(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public BooleanListPreference(Context context) { - super(context); - } - - @Override - public void setValue(String value) { - CharSequence oldEntry = getEntry(); - super.setValue(value); - CharSequence newEntry = getEntry(); - if (oldEntry != newEntry) { - notifyDependencyChange(shouldDisableDependents()); - } - } - - @Override - public boolean shouldDisableDependents() { - CharSequence newEntry = getEntry(); - String noneEntry = getContext().getString(R.string.preferences__none); - boolean shouldDisable = newEntry.equals(noneEntry); - return shouldDisable || super.shouldDisableDependents(); - } -} diff --git a/src/org/thoughtcrime/securesms/preferences/ChatsPreferenceFragment.java b/src/org/thoughtcrime/securesms/preferences/ChatsPreferenceFragment.java index 3f8d088be..d84daa9a6 100644 --- a/src/org/thoughtcrime/securesms/preferences/ChatsPreferenceFragment.java +++ b/src/org/thoughtcrime/securesms/preferences/ChatsPreferenceFragment.java @@ -10,6 +10,7 @@ import android.support.v4.preference.PreferenceFragment; import android.support.v7.app.AlertDialog; import android.text.TextUtils; import android.util.Log; +import android.view.View; import org.thoughtcrime.securesms.ApplicationPreferencesActivity; import org.thoughtcrime.securesms.R; @@ -20,7 +21,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; -public class ChatsPreferenceFragment extends PreferenceFragment { +public class ChatsPreferenceFragment extends CorrectedPreferenceFragment { private static final String TAG = ChatsPreferenceFragment.class.getSimpleName(); @Override diff --git a/src/org/thoughtcrime/securesms/preferences/CorrectedPreferenceFragment.java b/src/org/thoughtcrime/securesms/preferences/CorrectedPreferenceFragment.java new file mode 100644 index 000000000..220aabb75 --- /dev/null +++ b/src/org/thoughtcrime/securesms/preferences/CorrectedPreferenceFragment.java @@ -0,0 +1,18 @@ +package org.thoughtcrime.securesms.preferences; + + +import android.os.Bundle; +import android.support.v4.preference.PreferenceFragment; +import android.view.View; + +public class CorrectedPreferenceFragment extends PreferenceFragment { + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + View lv = getView().findViewById(android.R.id.list); + if (lv != null) lv.setPadding(0, 0, 0, 0); + } + +} diff --git a/src/org/thoughtcrime/securesms/preferences/LEDColorListPreference.java b/src/org/thoughtcrime/securesms/preferences/LEDColorListPreference.java new file mode 100644 index 000000000..774e8bdb8 --- /dev/null +++ b/src/org/thoughtcrime/securesms/preferences/LEDColorListPreference.java @@ -0,0 +1,108 @@ +/** + * Copyright (C) 2017 Whisper Systems + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.thoughtcrime.securesms.preferences; + +import android.content.Context; +import android.graphics.drawable.GradientDrawable; +import android.preference.ListPreference; +import android.support.annotation.NonNull; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; + +import org.thoughtcrime.securesms.R; + +/** + * List preference that disables dependents when set to "none", similar to a CheckBoxPreference. + * + * @author Taylor Kline + */ + +public class LEDColorListPreference extends ListPreference { + + private static final String TAG = LEDColorListPreference.class.getSimpleName(); + + private ImageView colorImageView; + + public LEDColorListPreference(Context context, AttributeSet attrs) { + super(context, attrs); + setWidgetLayoutResource(R.layout.led_color_preference_widget); + } + + public LEDColorListPreference(Context context) { + super(context); + setWidgetLayoutResource(R.layout.led_color_preference_widget); + } + + @Override + public void setValue(String value) { + CharSequence oldEntry = getEntry(); + super.setValue(value); + CharSequence newEntry = getEntry(); + if (oldEntry != newEntry) { + notifyDependencyChange(shouldDisableDependents()); + } + + if (value != null) setPreviewColor(value); + } + + @Override + public boolean shouldDisableDependents() { + CharSequence newEntry = getValue(); + boolean shouldDisable = newEntry.equals("none"); + return shouldDisable || super.shouldDisableDependents(); + } + + @Override + protected void onBindView(View view) { + super.onBindView(view); + this.colorImageView = (ImageView)view.findViewById(R.id.color_view); + setPreviewColor(getValue()); + } + + @Override + public void setSummary(CharSequence summary) { + super.setSummary(null); + } + + private void setPreviewColor(@NonNull String value) { + int color; + + switch (value) { + case "green": color = getContext().getResources().getColor(R.color.green_500); break; + case "red": color = getContext().getResources().getColor(R.color.red_500); break; + case "blue": color = getContext().getResources().getColor(R.color.blue_500); break; + case "yellow": color = getContext().getResources().getColor(R.color.yellow_500); break; + case "cyan": color = getContext().getResources().getColor(R.color.cyan_500); break; + case "magenta": color = getContext().getResources().getColor(R.color.pink_500); break; + case "white": color = getContext().getResources().getColor(R.color.white); break; + default: color = getContext().getResources().getColor(R.color.transparent); break; + } + + if (colorImageView != null) { + GradientDrawable drawable = new GradientDrawable(); + drawable.setShape(GradientDrawable.OVAL); + drawable.setColor(color); + + colorImageView.setImageDrawable(drawable); + } + } + + + +} diff --git a/src/org/thoughtcrime/securesms/preferences/ListSummaryPreferenceFragment.java b/src/org/thoughtcrime/securesms/preferences/ListSummaryPreferenceFragment.java index d9902a34b..ebb637593 100644 --- a/src/org/thoughtcrime/securesms/preferences/ListSummaryPreferenceFragment.java +++ b/src/org/thoughtcrime/securesms/preferences/ListSummaryPreferenceFragment.java @@ -8,7 +8,7 @@ import org.thoughtcrime.securesms.R; import java.util.Arrays; -public abstract class ListSummaryPreferenceFragment extends PreferenceFragment { +public abstract class ListSummaryPreferenceFragment extends CorrectedPreferenceFragment { protected class ListSummaryListener implements Preference.OnPreferenceChangeListener { @Override diff --git a/src/org/thoughtcrime/securesms/preferences/SmsMmsPreferenceFragment.java b/src/org/thoughtcrime/securesms/preferences/SmsMmsPreferenceFragment.java index fa9841b15..5fe97930b 100644 --- a/src/org/thoughtcrime/securesms/preferences/SmsMmsPreferenceFragment.java +++ b/src/org/thoughtcrime/securesms/preferences/SmsMmsPreferenceFragment.java @@ -20,7 +20,7 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; -public class SmsMmsPreferenceFragment extends PreferenceFragment { +public class SmsMmsPreferenceFragment extends CorrectedPreferenceFragment { private static final String KITKAT_DEFAULT_PREF = "pref_set_default"; private static final String MMS_PREF = "pref_mms_preferences";