Conversation input light theme fixes.

This commit is contained in:
Anton Chekulaev
2020-08-20 20:36:56 +10:00
parent 743731eeb0
commit fef7154cb4
12 changed files with 257 additions and 49 deletions

View File

@@ -2,7 +2,6 @@ package org.thoughtcrime.securesms;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import android.text.TextUtils;
@@ -19,8 +18,6 @@ public class TransportOption implements Parcelable {
TEXTSECURE
}
private final int drawable;
private final int backgroundColor;
private final @NonNull String text;
private final @NonNull Type type;
private final @NonNull String composeHint;
@@ -29,19 +26,15 @@ public class TransportOption implements Parcelable {
private final @NonNull Optional<Integer> simSubscriptionId;
public TransportOption(@NonNull Type type,
@DrawableRes int drawable,
int backgroundColor,
@NonNull String text,
@NonNull String composeHint,
@NonNull CharacterCalculator characterCalculator)
{
this(type, drawable, backgroundColor, text, composeHint, characterCalculator,
this(type, text, composeHint, characterCalculator,
Optional.<CharSequence>absent(), Optional.<Integer>absent());
}
public TransportOption(@NonNull Type type,
@DrawableRes int drawable,
int backgroundColor,
@NonNull String text,
@NonNull String composeHint,
@NonNull CharacterCalculator characterCalculator,
@@ -49,8 +42,6 @@ public class TransportOption implements Parcelable {
@NonNull Optional<Integer> simSubscriptionId)
{
this.type = type;
this.drawable = drawable;
this.backgroundColor = backgroundColor;
this.text = text;
this.composeHint = composeHint;
this.characterCalculator = characterCalculator;
@@ -60,8 +51,6 @@ public class TransportOption implements Parcelable {
TransportOption(Parcel in) {
this(Type.valueOf(in.readString()),
in.readInt(),
in.readInt(),
in.readString(),
in.readString(),
CharacterCalculator.readFromParcel(in),
@@ -85,14 +74,6 @@ public class TransportOption implements Parcelable {
return characterCalculator.calculateCharacters(messageBody);
}
public @DrawableRes int getDrawable() {
return R.drawable.ic_arrow_up;
}
public int getBackgroundColor() {
return backgroundColor;
}
public @NonNull String getComposeHint() {
return composeHint;
}
@@ -119,8 +100,6 @@ public class TransportOption implements Parcelable {
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(type.name());
dest.writeInt(drawable);
dest.writeInt(backgroundColor);
dest.writeString(text);
dest.writeString(composeHint);
CharacterCalculator.writeToParcel(dest, characterCalculator);

View File

@@ -2,6 +2,10 @@ package org.thoughtcrime.securesms;
import android.Manifest;
import android.content.Context;
import android.util.TypedValue;
import androidx.annotation.AttrRes;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -147,8 +151,7 @@ public class TransportOptions {
private List<TransportOption> initializeAvailableTransports(boolean isMediaMessage) {
List<TransportOption> results = new LinkedList<>();
results.add(new TransportOption(Type.TEXTSECURE, R.drawable.ic_send_push_white_24dp,
context.getResources().getColor(R.color.textsecure_primary),
results.add(new TransportOption(Type.TEXTSECURE,
context.getString(R.string.ConversationActivity_transport_signal),
context.getString(R.string.conversation_activity__type_message_push),
new PushCharacterCalculator()));
@@ -171,13 +174,11 @@ public class TransportOptions {
}
if (subscriptions.size() < 2) {
results.add(new TransportOption(Type.SMS, R.drawable.ic_send_sms_white_24dp,
context.getResources().getColor(R.color.grey_600),
results.add(new TransportOption(Type.SMS,
text, composeHint, characterCalculator));
} else {
for (SubscriptionInfoCompat subscriptionInfo : subscriptions) {
results.add(new TransportOption(Type.SMS, R.drawable.ic_send_sms_white_24dp,
context.getResources().getColor(R.color.grey_600),
results.add(new TransportOption(Type.SMS,
text, composeHint, characterCalculator,
Optional.of(subscriptionInfo.getDisplayName()),
Optional.of(subscriptionInfo.getSubscriptionId())));
@@ -202,6 +203,6 @@ public class TransportOptions {
}
public interface OnTransportChangedListener {
public void onChange(TransportOption newTransport, boolean manuallySelected);
void onChange(TransportOption newTransport, boolean manuallySelected);
}
}

View File

@@ -1,8 +1,6 @@
package org.thoughtcrime.securesms;
import android.content.Context;
import android.graphics.PorterDuff.Mode;
import androidx.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -10,6 +8,8 @@ import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import org.thoughtcrime.securesms.util.ViewUtil;
import java.util.List;
@@ -60,8 +60,7 @@ public class TransportOptionsAdapter extends BaseAdapter {
TextView textView = ViewUtil.findById(convertView, R.id.text);
TextView subtextView = ViewUtil.findById(convertView, R.id.subtext);
imageView.getBackground().setColorFilter(transport.getBackgroundColor(), Mode.MULTIPLY);
imageView.setImageResource(transport.getDrawable());
imageView.setImageResource(R.drawable.ic_arrow_up_circle_24);
textView.setText(transport.getDescription());
if (transport.getSimName().isPresent()) {

View File

@@ -1,23 +1,30 @@
package org.thoughtcrime.securesms.components;
import android.content.Context;
import androidx.annotation.AttrRes;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.AppCompatImageButton;
import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue;
import android.view.View;
import org.thoughtcrime.securesms.TransportOption;
import org.thoughtcrime.securesms.TransportOptions;
import org.thoughtcrime.securesms.TransportOptions.OnTransportChangedListener;
import org.thoughtcrime.securesms.TransportOptionsPopup;
import org.thoughtcrime.securesms.util.ThemeUtil;
import org.thoughtcrime.securesms.util.ViewUtil;
import org.whispersystems.libsignal.util.guava.Optional;
import network.loki.messenger.R;
public class SendButton extends AppCompatImageButton
implements TransportOptions.OnTransportChangedListener,
TransportOptionsPopup.SelectedListener,
View.OnLongClickListener
{
View.OnLongClickListener {
private final TransportOptions transportOptions;
@@ -102,7 +109,19 @@ public class SendButton extends AppCompatImageButton
@Override
public void onChange(TransportOption newTransport, boolean isManualSelection) {
setImageResource(newTransport.getDrawable());
// Map send icon drawable resource from a transport type.
//TODO These values should come from XML layout as view's attributes and not be resolved in code like this.
@DrawableRes final int sendDrawable;
switch (newTransport.getType()) {
case SMS:
case TEXTSECURE:
default: {
sendDrawable = ThemeUtil.getDrawableResWithAttribute(
getContext(), R.attr.conversation_transport_sms_indicator);
}
}
setImageResource(sendDrawable);
setContentDescription(newTransport.getDescription());
}

View File

@@ -4,15 +4,19 @@ import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import androidx.annotation.AttrRes;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.StyleRes;
import androidx.appcompat.view.ContextThemeWrapper;
import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
import network.loki.messenger.R;
public class ThemeUtil {
private static final String TAG = ThemeUtil.class.getSimpleName();
public static boolean isDarkTheme(@NonNull Context context) {
return getAttribute(context, R.attr.theme_type, "light").equals("dark");
@@ -45,4 +49,15 @@ public class ThemeUtil {
return defaultValue;
}
@DrawableRes
public static int getDrawableResWithAttribute(Context context, @AttrRes int attributeId) {
TypedValue resolvedValue = new TypedValue();
context.getTheme().resolveAttribute(attributeId, resolvedValue, true);
if (resolvedValue.type != TypedValue.TYPE_STRING) {
Log.e(TAG, "Cannot resolve a drawable resource from an attribute ID: " + attributeId);
return 0;
}
return resolvedValue.resourceId;
}
}