diff options
Diffstat (limited to '')
7 files changed, 97 insertions, 31 deletions
diff --git a/src/main/java/de/pixart/messenger/services/AudioPlayer.java b/src/main/java/de/pixart/messenger/services/AudioPlayer.java index 501c6b9a5..8909d27a1 100644 --- a/src/main/java/de/pixart/messenger/services/AudioPlayer.java +++ b/src/main/java/de/pixart/messenger/services/AudioPlayer.java @@ -106,7 +106,7 @@ public class AudioPlayer implements View.OnClickListener, MediaPlayer.OnCompleti } viewHolder.progress.setOnSeekBarChangeListener(this); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - ColorStateList color = ContextCompat.getColorStateList(messageAdapter.getContext(), viewHolder.darkBackground ? R.color.white70 : R.color.bubble); + ColorStateList color = viewHolder.darkBackground ? ContextCompat.getColorStateList(messageAdapter.getContext(), R.color.white70) : viewHolder.isOrange ? ContextCompat.getColorStateList(messageAdapter.getContext(), R.color.darkorange) : ContextCompat.getColorStateList(messageAdapter.getContext(), R.color.darkblue); viewHolder.progress.setThumbTintList(color); viewHolder.progress.setProgressTintList(color); } @@ -422,6 +422,7 @@ public class AudioPlayer implements View.OnClickListener, MediaPlayer.OnCompleti private SeekBar progress; private ImageButton playPause; private boolean darkBackground = false; + private boolean isOrange = false; public static ViewHolder get(RelativeLayout audioPlayer) { ViewHolder viewHolder = (ViewHolder) audioPlayer.getTag(R.id.TAG_AUDIO_PLAYER_VIEW_HOLDER); @@ -435,8 +436,9 @@ public class AudioPlayer implements View.OnClickListener, MediaPlayer.OnCompleti return viewHolder; } - public void setDarkBackground(boolean darkBackground) { + public void setTheme(boolean darkBackground, boolean isOrange) { this.darkBackground = darkBackground; + this.isOrange = isOrange; } } }
\ No newline at end of file diff --git a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java index 37b283ecd..0858c7c03 100644 --- a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java +++ b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java @@ -1184,7 +1184,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { this.binding.textinput.setCustomInsertionActionModeCallback(new EditMessageActionModeCallback(this.binding.textinput)); } - + return binding.getRoot(); } @@ -3095,7 +3095,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke } private int messageInputBubble(final boolean isPrivate) { - return isPrivate ? activity.isDarkTheme() ? R.drawable.message_bubble_sent_dark_private : R.drawable.message_bubble_sent_private : activity.isDarkTheme() ? R.drawable.message_bubble_sent_dark : R.drawable.message_bubble_sent; + return isPrivate ? activity.isOrangeTheme() ? activity.isDarkTheme() ? R.drawable.message_bubble_sent_dark_orange_private : R.drawable.message_bubble_sent_orange_private : activity.isDarkTheme() ? R.drawable.message_bubble_sent_dark_private : R.drawable.message_bubble_sent_private : activity.isOrangeTheme() ? activity.isDarkTheme() ? R.drawable.message_bubble_sent_dark_orange : R.drawable.message_bubble_sent_orange : activity.isDarkTheme() ? R.drawable.message_bubble_sent_dark : R.drawable.message_bubble_sent; } public Conversation getConversation() { diff --git a/src/main/java/de/pixart/messenger/ui/SettingsActivity.java b/src/main/java/de/pixart/messenger/ui/SettingsActivity.java index a9ffe12bd..24c782dfb 100644 --- a/src/main/java/de/pixart/messenger/ui/SettingsActivity.java +++ b/src/main/java/de/pixart/messenger/ui/SettingsActivity.java @@ -55,6 +55,7 @@ public class SettingsActivity extends XmppActivity implements public static final String WARN_UNENCRYPTED_CHAT = "warn_unencrypted_chat"; public static final String HIDE_YOU_ARE_NOT_PARTICIPATING = "hide_you_are_not_participating"; public static final String THEME = "theme"; + public static final String THEME_COLOR = "theme_color"; public static final String SHOW_DYNAMIC_TAGS = "show_dynamic_tags"; public static final String OMEMO_SETTING = "omemo"; public static final String SHOW_FOREGROUND_SERVICE = "show_foreground_service"; @@ -506,7 +507,7 @@ public class SettingsActivity extends XmppActivity implements xmppConnectionService.reinitializeMuclumbusService(); } else if (name.equals(AUTOMATIC_MESSAGE_DELETION)) { xmppConnectionService.expireOldMessages(true); - } else if (name.equals(THEME)) { + } else if (name.equals(THEME) || name.equals(THEME_COLOR)) { updateTheme(); } } diff --git a/src/main/java/de/pixart/messenger/ui/XmppActivity.java b/src/main/java/de/pixart/messenger/ui/XmppActivity.java index ab0c53078..18604d4e5 100644 --- a/src/main/java/de/pixart/messenger/ui/XmppActivity.java +++ b/src/main/java/de/pixart/messenger/ui/XmppActivity.java @@ -422,6 +422,10 @@ public abstract class XmppActivity extends ActionBarActivity { return ThemeHelper.isDark(mTheme); } + public boolean isOrangeTheme() { + return getStringPreference("theme_color", R.string.theme_color).equals("orange"); + } + public int getThemeResource(int r_attr_name, int r_drawable_def) { int[] attrs = {r_attr_name}; TypedArray ta = this.getTheme().obtainStyledAttributes(attrs); @@ -467,6 +471,10 @@ public abstract class XmppActivity extends ActionBarActivity { return getPreferences().getBoolean(name, getResources().getBoolean(res)); } + protected String getStringPreference(String name, int res) { + return getPreferences().getString(name, getResources().getString(res)); + } + public void switchToConversation(Conversation conversation) { switchToConversation(conversation, null); } diff --git a/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java b/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java index aed314288..6e277f0f2 100644 --- a/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java +++ b/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java @@ -70,6 +70,7 @@ import de.pixart.messenger.ui.text.DividerSpan; import de.pixart.messenger.ui.text.QuoteSpan; import de.pixart.messenger.ui.util.AvatarWorkerTask; import de.pixart.messenger.ui.util.MyLinkify; +import de.pixart.messenger.ui.util.StyledAttributes; import de.pixart.messenger.ui.util.ViewUtil; import de.pixart.messenger.ui.widget.ClickableMovementMethod; import de.pixart.messenger.ui.widget.CopyTextView; @@ -199,7 +200,7 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie } private int getMessageTextColorPrivate() { - return ContextCompat.getColor(activity, R.color.accent); + return StyledAttributes.getColor(activity, R.attr.colorAccent); } private int getWarningTextColor(boolean onDark) { @@ -470,7 +471,12 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie body.insert(end, "\n"); body.setSpan(new DividerSpan(false), end, end + 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } - int color = darkBackground ? this.getMessageTextColor(darkBackground, false) : ContextCompat.getColor(activity, R.color.bubble); + int color; + if (activity.isOrangeTheme()) { + color = darkBackground ? this.getMessageTextColor(darkBackground, false) : ContextCompat.getColor(activity, R.color.darkorange); + } else { + color = darkBackground ? this.getMessageTextColor(darkBackground, false) : ContextCompat.getColor(activity, R.color.darkblue); + } DisplayMetrics metrics = getContext().getResources().getDisplayMetrics(); body.setSpan(new QuoteSpan(color, metrics), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } @@ -539,7 +545,7 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie } else { viewHolder.messageBody.setTextAppearance(getContext(), R.style.TextAppearance_Conversations_Body1); } - viewHolder.messageBody.setHighlightColor(darkBackground ? type == SENT ? ContextCompat.getColor(activity, R.color.accent) : ContextCompat.getColor(activity, R.color.accent) : ContextCompat.getColor(activity, R.color.accent)); + viewHolder.messageBody.setHighlightColor(darkBackground ? type == SENT ? StyledAttributes.getColor(activity, R.attr.colorAccent) : StyledAttributes.getColor(activity, R.attr.colorAccent) : StyledAttributes.getColor(activity, R.attr.colorAccent)); viewHolder.messageBody.setTypeface(null, Typeface.NORMAL); if (message.getBody() != null) { final String nick = UIHelper.getMessageDisplayName(message); @@ -794,7 +800,7 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie viewHolder.download_button.setVisibility(View.GONE); final RelativeLayout audioPlayer = viewHolder.audioPlayer; audioPlayer.setVisibility(View.VISIBLE); - AudioPlayer.ViewHolder.get(audioPlayer).setDarkBackground(darkBackground); + AudioPlayer.ViewHolder.get(audioPlayer).setTheme(darkBackground, activity.isOrangeTheme()); this.audioPlayer.init(audioPlayer, message); } @@ -994,6 +1000,7 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie } boolean darkBackground = activity.isDarkTheme(); + boolean isOrange = activity.isOrangeTheme(); if (type == DATE_SEPARATOR) { if (UIHelper.today(message.getTimeSent())) { @@ -1134,7 +1141,11 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie if (type == RECEIVED) { if (isInValidSession) { if (message.isPrivateMessage()) { - viewHolder.message_box.setBackgroundResource(darkBackground ? R.drawable.message_bubble_received_light_dark_private : R.drawable.message_bubble_received_light_private); + if (activity.isOrangeTheme()) { + viewHolder.message_box.setBackgroundResource(darkBackground ? R.drawable.message_bubble_received_light_orange_dark_private : R.drawable.message_bubble_received_light_orange_private); + } else { + viewHolder.message_box.setBackgroundResource(darkBackground ? R.drawable.message_bubble_received_light_dark_private : R.drawable.message_bubble_received_light_private); + } } else { viewHolder.message_box.setBackgroundResource(darkBackground ? R.drawable.message_bubble_received_light_dark : R.drawable.message_bubble_received_light); } @@ -1158,9 +1169,17 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie if (type == SENT) { if (message.isPrivateMessage()) { - viewHolder.message_box.setBackgroundResource(activity.isDarkTheme() ? R.drawable.message_bubble_sent_dark_private : R.drawable.message_bubble_sent_private); + if (activity.isOrangeTheme()) { + viewHolder.message_box.setBackgroundResource(activity.isDarkTheme() ? R.drawable.message_bubble_sent_dark_orange_private : R.drawable.message_bubble_sent_orange_private); + } else { + viewHolder.message_box.setBackgroundResource(activity.isDarkTheme() ? R.drawable.message_bubble_sent_dark_private : R.drawable.message_bubble_sent_private); + } } else { - viewHolder.message_box.setBackgroundResource(activity.isDarkTheme() ? R.drawable.message_bubble_sent_dark : R.drawable.message_bubble_sent); + if (activity.isOrangeTheme()) { + viewHolder.message_box.setBackgroundResource(activity.isDarkTheme() ? R.drawable.message_bubble_sent_dark_orange : R.drawable.message_bubble_sent_orange ); + } else { + viewHolder.message_box.setBackgroundResource(activity.isDarkTheme() ? R.drawable.message_bubble_sent_dark : R.drawable.message_bubble_sent); + } } } displayStatus(viewHolder, message, type, darkBackground); diff --git a/src/main/java/de/pixart/messenger/ui/widget/UnreadCountCustomView.java b/src/main/java/de/pixart/messenger/ui/widget/UnreadCountCustomView.java index ae6c968f9..70d6ca5bd 100644 --- a/src/main/java/de/pixart/messenger/ui/widget/UnreadCountCustomView.java +++ b/src/main/java/de/pixart/messenger/ui/widget/UnreadCountCustomView.java @@ -11,6 +11,7 @@ import android.util.AttributeSet; import android.view.View; import de.pixart.messenger.R; +import de.pixart.messenger.ui.util.StyledAttributes; public class UnreadCountCustomView extends View { @@ -20,31 +21,31 @@ public class UnreadCountCustomView extends View { public UnreadCountCustomView(Context context) { super(context); - init(); + init(context); } public UnreadCountCustomView(Context context, AttributeSet attrs) { super(context, attrs); initXMLAttrs(context, attrs); - init(); + init(context); } public UnreadCountCustomView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initXMLAttrs(context, attrs); - init(); + init(context); } private void initXMLAttrs(Context context, AttributeSet attrs) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.UnreadCountCustomView); //setBackgroundColor(a.getColor(a.getIndex(0), ContextCompat.getColor(context, R.color.accent))); - setBackgroundColor(ContextCompat.getColor(context, R.color.accent)); + setBackgroundColor(StyledAttributes.getColor(context, R.attr.colorAccent)); a.recycle(); } - void init() { + void init(Context context) { paint = new Paint(); - paint.setColor(backgroundColor); + paint.setColor(StyledAttributes.getColor(context, R.attr.colorAccent)); paint.setAntiAlias(true); textPaint = new Paint(); textPaint.setColor(Color.WHITE); diff --git a/src/main/java/de/pixart/messenger/utils/ThemeHelper.java b/src/main/java/de/pixart/messenger/utils/ThemeHelper.java index b73559529..738d2d685 100644 --- a/src/main/java/de/pixart/messenger/utils/ThemeHelper.java +++ b/src/main/java/de/pixart/messenger/utils/ThemeHelper.java @@ -35,12 +35,14 @@ import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; import android.preference.PreferenceManager; -import androidx.annotation.StyleRes; -import com.google.android.material.snackbar.Snackbar; -import androidx.core.content.ContextCompat; import android.util.TypedValue; import android.widget.TextView; +import androidx.annotation.StyleRes; +import androidx.core.content.ContextCompat; + +import com.google.android.material.snackbar.Snackbar; + import de.pixart.messenger.R; import de.pixart.messenger.ui.SettingsActivity; @@ -56,12 +58,27 @@ public class ThemeHelper { } else { dark = sharedPreferences.getString(SettingsActivity.THEME, resources.getString(R.string.theme)).equals("dark"); } + final String themeColor = sharedPreferences.getString("theme_color", resources.getString(R.string.theme_color)); final String fontSize = sharedPreferences.getString("font_size", resources.getString(R.string.default_font_size)); - switch (fontSize) { - case "medium": - return dark ? R.style.ConversationsTheme_Dark_Medium : R.style.ConversationsTheme_Medium; - case "large": - return dark ? R.style.ConversationsTheme_Dark_Large : R.style.ConversationsTheme_Large; + switch (themeColor) { + case "c": + switch (fontSize) { + case "medium": + return dark ? R.style.ConversationsTheme_Dark_Medium : R.style.ConversationsTheme_Medium; + case "large": + return dark ? R.style.ConversationsTheme_Dark_Large : R.style.ConversationsTheme_Large; + default: + return dark ? R.style.ConversationsTheme_Dark : R.style.ConversationsTheme; + } + case "orange": + switch (fontSize) { + case "medium": + return dark ? R.style.ConversationsTheme_Orange_Dark_Medium : R.style.ConversationsTheme_Orange_Medium; + case "large": + return dark ? R.style.ConversationsTheme_Orange_Dark_Large : R.style.ConversationsTheme_Orange_Large; + default: + return dark ? R.style.ConversationsTheme_Orange_Dark : R.style.ConversationsTheme_Orange; + } default: return dark ? R.style.ConversationsTheme_Dark : R.style.ConversationsTheme; } @@ -85,11 +102,26 @@ public class ThemeHelper { final Resources resources = context.getResources(); final boolean dark = sharedPreferences.getString(SettingsActivity.THEME, resources.getString(R.string.theme)).equals("dark"); final String fontSize = sharedPreferences.getString("font_size", resources.getString(R.string.default_font_size)); - switch (fontSize) { - case "medium": - return dark ? R.style.ConversationsTheme_Dark_Dialog_Medium : R.style.ConversationsTheme_Dialog_Medium; - case "large": - return dark ? R.style.ConversationsTheme_Dark_Dialog_Large : R.style.ConversationsTheme_Dialog_Large; + final String themeColor = sharedPreferences.getString("theme_color", resources.getString(R.string.theme_color)); + switch (themeColor) { + case "blue": + switch (fontSize) { + case "medium": + return dark ? R.style.ConversationsTheme_Dark_Dialog_Medium : R.style.ConversationsTheme_Dialog_Medium; + case "large": + return dark ? R.style.ConversationsTheme_Dark_Dialog_Large : R.style.ConversationsTheme_Dialog_Large; + default: + return dark ? R.style.ConversationsTheme_Dark_Dialog : R.style.ConversationsTheme_Dialog; + } + case "orange": + switch (fontSize) { + case "medium": + return dark ? R.style.ConversationsTheme_Orange_Dark_Dialog_Medium : R.style.ConversationsTheme_Orange_Dialog_Medium; + case "large": + return dark ? R.style.ConversationsTheme_Orange_Dark_Dialog_Large : R.style.ConversationsTheme_Orange_Dialog_Large; + default: + return dark ? R.style.ConversationsTheme_Orange_Dark_Dialog : R.style.ConversationsTheme_Orange_Dialog; + } default: return dark ? R.style.ConversationsTheme_Dark_Dialog : R.style.ConversationsTheme_Dialog; } @@ -100,6 +132,9 @@ public class ThemeHelper { case R.style.ConversationsTheme_Dark: case R.style.ConversationsTheme_Dark_Large: case R.style.ConversationsTheme_Dark_Medium: + case R.style.ConversationsTheme_Orange_Dark: + case R.style.ConversationsTheme_Orange_Dark_Large: + case R.style.ConversationsTheme_Orange_Dark_Medium: return true; default: return false; |