From 7932244c51e7c5e6e5775d282e91ec223fe2a9bf Mon Sep 17 00:00:00 2001 From: Steffen Keiper Date: Thu, 12 May 2016 20:00:18 +0200 Subject: Dark theme, theme switch, icons, style, strings added some white icons, changed hardcoded icons to theme attributes, changed icon_edit_dark to icon_edit_body to reflect icons position, grey message bubbles in dark theme, misc purged ic_action_chat as it wasn't used preference use_white_background changed to use_green_background, default true grey chat bubbles darker, text white replaced all grey600 with black icons and 0.54 alpha attribute highlightColor in dark grey chat bubble now darker than background --- .../eu/siacs/conversations/ui/AboutActivity.java | 8 +++++ .../ui/ConferenceDetailsActivity.java | 13 ++++--- .../conversations/ui/ConversationActivity.java | 4 +-- .../conversations/ui/ConversationFragment.java | 15 ++++---- .../siacs/conversations/ui/SettingsActivity.java | 8 ++++- .../eu/siacs/conversations/ui/XmppActivity.java | 42 ++++++++++++++++++++-- .../ui/adapter/ConversationAdapter.java | 9 +++-- .../conversations/ui/adapter/MessageAdapter.java | 17 ++++----- 8 files changed, 88 insertions(+), 28 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/eu/siacs/conversations/ui/AboutActivity.java b/src/main/java/eu/siacs/conversations/ui/AboutActivity.java index a61b872a..5d51e8b9 100644 --- a/src/main/java/eu/siacs/conversations/ui/AboutActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/AboutActivity.java @@ -1,7 +1,9 @@ package eu.siacs.conversations.ui; import android.app.Activity; +import android.content.res.Resources; import android.os.Bundle; +import android.preference.PreferenceManager; import eu.siacs.conversations.R; @@ -10,6 +12,12 @@ public class AboutActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + Boolean dark = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()) + .getString("theme", "light").equals("dark"); + int mTheme = dark ? R.style.ConversationsTheme_Dark : R.style.ConversationsTheme; + setTheme(mTheme); + setContentView(R.layout.activity_about); } } diff --git a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java index a82f8245..a39f735e 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java @@ -559,18 +559,23 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers } } + int ic_notifications = getThemeResource(R.attr.icon_notifications, R.drawable.ic_notifications_black54_24dp); + int ic_notifications_off = getThemeResource(R.attr.icon_notifications_off, R.drawable.ic_notifications_off_black54_24dp); + int ic_notifications_paused = getThemeResource(R.attr.icon_notifications_paused, R.drawable.ic_notifications_paused_black54_24dp); + int ic_notifications_none = getThemeResource(R.attr.icon_notifications_none, R.drawable.ic_notifications_none_black54_24dp); + long mutedTill = mConversation.getLongAttribute(Conversation.ATTRIBUTE_MUTED_TILL,0); if (mutedTill == Long.MAX_VALUE) { mNotifyStatusText.setText(R.string.notify_never); - mNotifyStatusButton.setImageResource(R.drawable.ic_notifications_off_grey600_24dp); + mNotifyStatusButton.setImageResource(ic_notifications_off); } else if (System.currentTimeMillis() < mutedTill) { mNotifyStatusText.setText(R.string.notify_paused); - mNotifyStatusButton.setImageResource(R.drawable.ic_notifications_paused_grey600_24dp); + mNotifyStatusButton.setImageResource(ic_notifications_paused); } else if (mConversation.alwaysNotify()) { - mNotifyStatusButton.setImageResource(R.drawable.ic_notifications_grey600_24dp); + mNotifyStatusButton.setImageResource(ic_notifications); mNotifyStatusText.setText(R.string.notify_on_all_messages); } else { - mNotifyStatusButton.setImageResource(R.drawable.ic_notifications_none_grey600_24dp); + mNotifyStatusButton.setImageResource(ic_notifications_none); mNotifyStatusText.setText(R.string.notify_only_when_highlighted); } diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java index 2717aa3d..b0974713 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java @@ -1569,8 +1569,8 @@ public class ConversationActivity extends XmppActivity return getPreferences().getBoolean("indicate_received", false); } - public boolean useWhiteBackground() { - return getPreferences().getBoolean("use_white_background",false); + public boolean useGreenBackground() { + return getPreferences().getBoolean("use_green_background",true); } protected boolean trustKeysIfNeeded(int requestCode) { diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index 8e0b30a8..53a36525 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -9,6 +9,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentSender.SendIntentException; +import android.content.res.TypedArray; import android.os.Bundle; import android.os.Handler; import android.support.annotation.Nullable; @@ -998,7 +999,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa case DND: return R.drawable.ic_send_text_dnd; default: - return R.drawable.ic_send_text_offline; + return activity.getThemeResource(R.attr.ic_send_text_offline, R.drawable.ic_send_text_offline); } case TAKE_PHOTO: switch (status) { @@ -1011,7 +1012,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa case DND: return R.drawable.ic_send_photo_dnd; default: - return R.drawable.ic_send_photo_offline; + return activity.getThemeResource(R.attr.ic_send_photo_offline, R.drawable.ic_send_photo_offline); } case RECORD_VOICE: switch (status) { @@ -1024,7 +1025,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa case DND: return R.drawable.ic_send_voice_dnd; default: - return R.drawable.ic_send_voice_offline; + return activity.getThemeResource(R.attr.ic_send_voice_offline, R.drawable.ic_send_voice_offline); } case SEND_LOCATION: switch (status) { @@ -1037,7 +1038,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa case DND: return R.drawable.ic_send_location_dnd; default: - return R.drawable.ic_send_location_offline; + return activity.getThemeResource(R.attr.ic_send_location_offline, R.drawable.ic_send_location_offline); } case CANCEL: switch (status) { @@ -1050,7 +1051,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa case DND: return R.drawable.ic_send_cancel_dnd; default: - return R.drawable.ic_send_cancel_offline; + return activity.getThemeResource(R.attr.ic_send_cancel_offline, R.drawable.ic_send_cancel_offline); } case CHOOSE_PICTURE: switch (status) { @@ -1063,10 +1064,10 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa case DND: return R.drawable.ic_send_picture_dnd; default: - return R.drawable.ic_send_picture_offline; + return activity.getThemeResource(R.attr.ic_send_picture_offline, R.drawable.ic_send_picture_offline); } } - return R.drawable.ic_send_text_offline; + return activity.getThemeResource(R.attr.ic_send_text_offline, R.drawable.ic_send_text_offline); } public void updateSendButton() { diff --git a/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java b/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java index 22e12633..17ade702 100644 --- a/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java @@ -14,7 +14,6 @@ import android.preference.Preference; import android.preference.PreferenceCategory; import android.preference.PreferenceManager; import android.preference.PreferenceScreen; -import android.util.Log; import android.widget.Toast; import java.security.KeyStoreException; @@ -46,6 +45,13 @@ public class SettingsActivity extends XmppActivity implements mSettingsFragment = new SettingsFragment(); fm.beginTransaction().replace(android.R.id.content, mSettingsFragment).commit(); } + + this.mTheme = findTheme(); + setTheme(this.mTheme); + + int bgcolor = getPrimaryBackgroundColor(); + getWindow().getDecorView().setBackgroundColor(bgcolor); + } @Override diff --git a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java index c6301643..2d908ff8 100644 --- a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java @@ -21,6 +21,7 @@ import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.Resources; +import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.Point; @@ -379,6 +380,7 @@ public abstract class XmppActivity extends Activity { super.onCreate(savedInstanceState); metrics = getResources().getDisplayMetrics(); ExceptionHelper.init(getApplicationContext()); + mPrimaryTextColor = getResources().getColor(R.color.black87); mSecondaryTextColor = getResources().getColor(R.color.black54); mTertiaryTextColor = getResources().getColor(R.color.black12); @@ -388,8 +390,18 @@ public abstract class XmppActivity extends Activity { mPrimaryColor = getResources().getColor(R.color.primary); mPrimaryBackgroundColor = getResources().getColor(R.color.grey50); mSecondaryBackgroundColor = getResources().getColor(R.color.grey200); + + if(isDarkTheme()) { + mPrimaryTextColor = getResources().getColor(R.color.white); + mSecondaryTextColor = getResources().getColor(R.color.white70); + mTertiaryTextColor = getResources().getColor(R.color.white12); + mPrimaryBackgroundColor = getResources().getColor(R.color.grey800); + mSecondaryBackgroundColor = getResources().getColor(R.color.grey900); + } + this.mTheme = findTheme(); setTheme(this.mTheme); + this.mUsingEnterKey = usingEnterKey(); mUseSubject = getPreferences().getBoolean("use_subject", true); final ActionBar ab = getActionBar(); @@ -398,6 +410,20 @@ public abstract class XmppActivity extends Activity { } } + public boolean isDarkTheme() { + return getPreferences().getString("theme", "light").equals("dark"); + } + + public int getThemeResource(int r_attr_name, int r_drawable_def) { + int[] attrs = { r_attr_name }; + TypedArray ta = this.getTheme().obtainStyledAttributes(attrs); + + int res = ta.getResourceId(0, r_drawable_def); + ta.recycle(); + + return res; + } + protected boolean isOptimizingBattery() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE); @@ -1077,10 +1103,19 @@ public abstract class XmppActivity extends Activity { } protected int findTheme() { - if (getPreferences().getBoolean("use_larger_font", false)) { - return R.style.ConversationsTheme_LargerText; + Boolean dark = getPreferences().getString("theme", "light").equals("dark"); + Boolean larger = getPreferences().getBoolean("use_larger_font", false); + + if(dark) { + if(larger) + return R.style.ConversationsTheme_Dark_LargerText; + else + return R.style.ConversationsTheme_Dark; } else { - return R.style.ConversationsTheme; + if (larger) + return R.style.ConversationsTheme_LargerText; + else + return R.style.ConversationsTheme; } } @@ -1098,6 +1133,7 @@ public abstract class XmppActivity extends Activity { final int width = (size.x < size.y ? size.x : size.y); Bitmap bitmap = createQrCodeBitmap(uri, width); ImageView view = new ImageView(this); + view.setBackgroundColor(Color.WHITE); view.setImageBitmap(bitmap); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setView(view); diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java index 34c9d7b3..4576dea3 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java @@ -98,15 +98,18 @@ public class ConversationAdapter extends ArrayAdapter { long muted_till = conversation.getLongAttribute(Conversation.ATTRIBUTE_MUTED_TILL,0); if (muted_till == Long.MAX_VALUE) { notificationStatus.setVisibility(View.VISIBLE); - notificationStatus.setImageResource(R.drawable.ic_notifications_off_grey600_24dp); + int ic_notifications_off = activity.getThemeResource(R.attr.icon_notifications_off, R.drawable.ic_notifications_off_black54_24dp); + notificationStatus.setImageResource(ic_notifications_off); } else if (muted_till >= System.currentTimeMillis()) { notificationStatus.setVisibility(View.VISIBLE); - notificationStatus.setImageResource(R.drawable.ic_notifications_paused_grey600_24dp); + int ic_notifications_paused = activity.getThemeResource(R.attr.icon_notifications_paused, R.drawable.ic_notifications_paused_black54_24dp); + notificationStatus.setImageResource(ic_notifications_paused); } else if (conversation.alwaysNotify()) { notificationStatus.setVisibility(View.GONE); } else { notificationStatus.setVisibility(View.VISIBLE); - notificationStatus.setImageResource(R.drawable.ic_notifications_none_grey600_24dp); + int ic_notifications_none = activity.getThemeResource(R.attr.icon_notifications_none, R.drawable.ic_notifications_none_black54_24dp); + notificationStatus.setImageResource(ic_notifications_none); } mTimestamp.setText(UIHelper.readableTimeDifference(activity,conversation.getLatestMessage().getTimeSent())); diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java index 5ba29802..1ea2c223 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java @@ -80,7 +80,7 @@ public class MessageAdapter extends ArrayAdapter { } }; private boolean mIndicateReceived = false; - private boolean mUseWhiteBackground = false; + private boolean mUseGreenBackground = false; public MessageAdapter(ConversationActivity activity, List messages) { super(activity, 0, messages); @@ -294,7 +294,7 @@ public class MessageAdapter extends ArrayAdapter { viewHolder.messageBody.setText(span); } - private void displayTextMessage(final ViewHolder viewHolder, final Message message, boolean darkBackground) { + private void displayTextMessage(final ViewHolder viewHolder, final Message message, boolean darkBackground, int type) { if (viewHolder.download_button != null) { viewHolder.download_button.setVisibility(View.GONE); } @@ -388,7 +388,7 @@ public class MessageAdapter extends ArrayAdapter { } viewHolder.messageBody.setTextColor(this.getMessageTextColor(darkBackground, true)); viewHolder.messageBody.setLinkTextColor(this.getMessageTextColor(darkBackground, true)); - viewHolder.messageBody.setHighlightColor(activity.getResources().getColor(darkBackground ? R.color.grey800 : R.color.grey500)); + viewHolder.messageBody.setHighlightColor(activity.getResources().getColor(darkBackground ? (type == SENT || !mUseGreenBackground ? R.color.black26 : R.color.grey800) : R.color.grey500)); viewHolder.messageBody.setTypeface(null, Typeface.NORMAL); viewHolder.messageBody.setOnLongClickListener(openContextMenu); } @@ -556,7 +556,7 @@ public class MessageAdapter extends ArrayAdapter { } } - boolean darkBackground = (type == RECEIVED && (!isInValidSession || !mUseWhiteBackground)); + boolean darkBackground = type == RECEIVED && (!isInValidSession || mUseGreenBackground) || activity.isDarkTheme(); if (type == STATUS) { if ("LOAD_MORE".equals(message.getBody())) { @@ -672,14 +672,15 @@ public class MessageAdapter extends ArrayAdapter { UIHelper.getFileDescriptionString(activity, message))); } } else { - displayTextMessage(viewHolder, message, darkBackground); + displayTextMessage(viewHolder, message, darkBackground, type); } } if (type == RECEIVED) { if(isInValidSession) { - if (mUseWhiteBackground) { - viewHolder.message_box.setBackgroundResource(R.drawable.message_bubble_received_white); + if (!mUseGreenBackground) { + int bubble = activity.getThemeResource(R.attr.message_bubble_received_monochrome, R.drawable.message_bubble_received_white); + viewHolder.message_box.setBackgroundResource(bubble); } else { viewHolder.message_box.setBackgroundResource(R.drawable.message_bubble_received); } @@ -734,7 +735,7 @@ public class MessageAdapter extends ArrayAdapter { public void updatePreferences() { this.mIndicateReceived = activity.indicateReceived(); - this.mUseWhiteBackground = activity.useWhiteBackground(); + this.mUseGreenBackground = activity.useGreenBackground(); } public interface OnContactPictureClicked { -- cgit v1.2.3