Improved log type selection

pull/194/merge
M66B 3 years ago
parent e30c5b14c4
commit 08e7f29a26

@ -29,7 +29,6 @@ import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle; import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.LifecycleObserver;
@ -50,16 +49,6 @@ public class AdapterLog extends RecyclerView.Adapter<AdapterLog.ViewHolder> {
private LifecycleOwner owner; private LifecycleOwner owner;
private LayoutInflater inflater; private LayoutInflater inflater;
private int textColorSecondary;
private int solarizedYellow;
private int solarizedOrange;
private int solarizedRed;
private int solarizedMagenta;
private int solarizedViolet;
private int solarizedBlue;
private int solarizedCyan;
private int solarizedGreen;
private Long account = null; private Long account = null;
private Long folder = null; private Long folder = null;
private Long message = null; private Long message = null;
@ -86,34 +75,11 @@ public class AdapterLog extends RecyclerView.Adapter<AdapterLog.ViewHolder> {
private void bindTo(EntityLog log) { private void bindTo(EntityLog log) {
tvTime.setText(TF.format(log.time)); tvTime.setText(TF.format(log.time));
SpannableStringBuilder ssb = new SpannableStringBuilderEx(log.data); SpannableStringBuilder ssb = new SpannableStringBuilderEx(log.data);
switch (log.type) {
case General: Integer color = log.getColor(context);
break; if (color != null)
case Statistics: ssb.setSpan(new ForegroundColorSpan(color), 0, ssb.length(), 0);
ssb.setSpan(new ForegroundColorSpan(solarizedGreen), 0, ssb.length(), 0);
break;
case Scheduling:
ssb.setSpan(new ForegroundColorSpan(solarizedYellow), 0, ssb.length(), 0);
break;
case Network:
ssb.setSpan(new ForegroundColorSpan(solarizedOrange), 0, ssb.length(), 0);
break;
case Account:
ssb.setSpan(new ForegroundColorSpan(solarizedMagenta), 0, ssb.length(), 0);
break;
case Protocol:
ssb.setSpan(new ForegroundColorSpan(textColorSecondary), 0, ssb.length(), 0);
break;
case Classification:
ssb.setSpan(new ForegroundColorSpan(solarizedViolet), 0, ssb.length(), 0);
break;
case Notification:
ssb.setSpan(new ForegroundColorSpan(solarizedBlue), 0, ssb.length(), 0);
break;
case Rules:
ssb.setSpan(new ForegroundColorSpan(solarizedCyan), 0, ssb.length(), 0);
break;
}
tvData.setText(ssb); tvData.setText(ssb);
} }
} }
@ -124,16 +90,6 @@ public class AdapterLog extends RecyclerView.Adapter<AdapterLog.ViewHolder> {
this.owner = parentFragment.getViewLifecycleOwner(); this.owner = parentFragment.getViewLifecycleOwner();
this.inflater = LayoutInflater.from(parentFragment.getContext()); this.inflater = LayoutInflater.from(parentFragment.getContext());
this.textColorSecondary = Helper.resolveColor(context, android.R.attr.textColorSecondary);
this.solarizedYellow = ContextCompat.getColor(context, R.color.solarizedYellow);
this.solarizedOrange = ContextCompat.getColor(context, R.color.solarizedOrange);
this.solarizedRed = ContextCompat.getColor(context, R.color.solarizedRed);
this.solarizedMagenta = ContextCompat.getColor(context, R.color.solarizedMagenta);
this.solarizedViolet = ContextCompat.getColor(context, R.color.solarizedViolet);
this.solarizedBlue = ContextCompat.getColor(context, R.color.solarizedBlue);
this.solarizedCyan = ContextCompat.getColor(context, R.color.solarizedCyan);
this.solarizedGreen = ContextCompat.getColor(context, R.color.solarizedGreen);
this.TF = Helper.getTimeInstance(context); this.TF = Helper.getTimeInstance(context);
setHasStableIds(true); setHasStableIds(true);

@ -23,12 +23,16 @@ import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import androidx.room.Entity; import androidx.room.Entity;
import androidx.room.Ignore;
import androidx.room.Index; import androidx.room.Index;
import androidx.room.PrimaryKey; import androidx.room.PrimaryKey;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
@ -63,6 +67,9 @@ public class EntityLog {
@NonNull @NonNull
public String data; public String data;
@Ignore
private static Map<Type, Integer> mapColor = new HashMap<>();
enum Type {General, Statistics, Scheduling, Network, Account, Protocol, Classification, Notification, Rules} enum Type {General, Statistics, Scheduling, Network, Account, Protocol, Classification, Notification, Rules}
private static final ExecutorService executor = private static final ExecutorService executor =
@ -194,6 +201,42 @@ public class EntityLog {
} }
} }
Integer getColor(Context context) {
return getColor(context, this.type);
}
static Integer getColor(Context context, Type type) {
if (!mapColor.containsKey(type))
mapColor.put(type, _getColor(context, type));
return mapColor.get(type);
}
private static Integer _getColor(Context context, Type type) {
// R.color.solarizedRed
switch (type) {
case General:
return Helper.resolveColor(context, android.R.attr.textColorPrimary);
case Statistics:
return ContextCompat.getColor(context, R.color.solarizedGreen);
case Scheduling:
return ContextCompat.getColor(context, R.color.solarizedYellow);
case Network:
return ContextCompat.getColor(context, R.color.solarizedOrange);
case Account:
return ContextCompat.getColor(context, R.color.solarizedMagenta);
case Protocol:
return Helper.resolveColor(context, android.R.attr.textColorSecondary);
case Classification:
return ContextCompat.getColor(context, R.color.solarizedViolet);
case Notification:
return ContextCompat.getColor(context, R.color.solarizedBlue);
case Rules:
return ContextCompat.getColor(context, R.color.solarizedCyan);
default:
return null;
}
}
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if (obj instanceof EntityLog) { if (obj instanceof EntityLog) {

@ -19,10 +19,15 @@ package eu.faircode.email;
Copyright 2018-2022 by Marcel Bokhorst (M66B) Copyright 2018-2022 by Marcel Bokhorst (M66B)
*/ */
import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
@ -189,17 +194,23 @@ public class FragmentLogs extends FragmentBase {
} }
private void onMenuShow() { private void onMenuShow() {
String[] titles = new String[EntityLog.Type.values().length]; final Context context = getContext();
SpannableStringBuilder[] titles = new SpannableStringBuilder[EntityLog.Type.values().length];
boolean[] states = new boolean[EntityLog.Type.values().length]; boolean[] states = new boolean[EntityLog.Type.values().length];
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
for (int i = 0; i < EntityLog.Type.values().length; i++) { for (int i = 0; i < EntityLog.Type.values().length; i++) {
EntityLog.Type type = EntityLog.Type.values()[i]; EntityLog.Type type = EntityLog.Type.values()[i];
titles[i] = type.toString(); titles[i] = new SpannableStringBuilderEx(type.toString());
Integer color = EntityLog.getColor(context, type);
if (color != null)
titles[i].setSpan(new ForegroundColorSpan(color), 0, titles[i].length(), 0);
titles[i].setSpan(new StyleSpan(Typeface.BOLD), 0, titles[i].length(), 0);
String name = type.toString().toLowerCase(Locale.ROOT); String name = type.toString().toLowerCase(Locale.ROOT);
states[i] = prefs.getBoolean("show_log_" + name, true); states[i] = prefs.getBoolean("show_log_" + name, true);
} }
new AlertDialog.Builder(getContext()) new AlertDialog.Builder(context)
.setIcon(R.drawable.twotone_visibility_24) .setIcon(R.drawable.twotone_visibility_24)
.setTitle(R.string.title_unhide) .setTitle(R.string.title_unhide)
.setMultiChoiceItems(titles, states, new DialogInterface.OnMultiChoiceClickListener() { .setMultiChoiceItems(titles, states, new DialogInterface.OnMultiChoiceClickListener() {

Loading…
Cancel
Save