Cards everywhere

This commit is contained in:
M66B 2019-08-14 17:21:37 +02:00
parent 9f55d108f8
commit d81b6fe8ac
18 changed files with 636 additions and 540 deletions

View File

@ -37,14 +37,12 @@ import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import androidx.appcompat.widget.PopupMenu; import androidx.appcompat.widget.PopupMenu;
import androidx.cardview.widget.CardView;
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;
@ -75,12 +73,9 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
private LifecycleOwner owner; private LifecycleOwner owner;
private LayoutInflater inflater; private LayoutInflater inflater;
private boolean cards;
private boolean circular;
private boolean subscriptions; private boolean subscriptions;
private boolean debug; private boolean debug;
private int dp3;
private int dp12; private int dp12;
private float textSize; private float textSize;
private int colorUnread; private int colorUnread;
@ -93,10 +88,9 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
private NumberFormat NF = NumberFormat.getNumberInstance(); private NumberFormat NF = NumberFormat.getNumberInstance();
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
private CardView card;
private View view; private View view;
private CardView vwColor;
private View vwColor;
private ImageView ivState; private ImageView ivState;
private ImageView ivReadOnly; private ImageView ivReadOnly;
@ -125,10 +119,9 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
ViewHolder(View itemView) { ViewHolder(View itemView) {
super(itemView); super(itemView);
card = itemView.findViewById(R.id.card);
view = itemView.findViewById(R.id.clItem); view = itemView.findViewById(R.id.clItem);
vwColor = itemView.findViewById(R.id.vwColor);
vwColor = itemView.findViewById(R.id.vwColor);
ivState = itemView.findViewById(R.id.ivState); ivState = itemView.findViewById(R.id.ivState);
ivReadOnly = itemView.findViewById(R.id.ivReadOnly); ivReadOnly = itemView.findViewById(R.id.ivReadOnly);
@ -151,22 +144,6 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
tvKeywords = itemView.findViewById(R.id.tvKeywords); tvKeywords = itemView.findViewById(R.id.tvKeywords);
tvError = itemView.findViewById(R.id.tvError); tvError = itemView.findViewById(R.id.tvError);
if (listener == null) {
if (!cards) {
FrameLayout.LayoutParams lparam = (FrameLayout.LayoutParams) card.getLayoutParams();
lparam.setMargins(0, 0, 0, 0);
card.setLayoutParams(lparam);
card.setRadius(0);
card.setElevation(0);
card.setCardBackgroundColor(Color.TRANSPARENT);
view.setPadding(0, 0, 0, 0);
}
vwColor.setRadius(circular ? dp3 / 2f : 0f);
}
} }
private void wire() { private void wire() {
@ -683,12 +660,9 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
if (zoom == 0) if (zoom == 0)
zoom = 1; zoom = 1;
this.circular = prefs.getBoolean("circular", true);
this.cards = prefs.getBoolean("cards", true);
this.subscriptions = prefs.getBoolean("subscriptions", false); this.subscriptions = prefs.getBoolean("subscriptions", false);
this.debug = prefs.getBoolean("debug", false); this.debug = prefs.getBoolean("debug", false);
this.dp3 = Helper.dp2pixels(context, 12);
this.dp12 = Helper.dp2pixels(context, 12); this.dp12 = Helper.dp2pixels(context, 12);
this.textSize = Helper.getTextSize(context, zoom); this.textSize = Helper.getTextSize(context, zoom);
this.colorUnread = Helper.resolveColor(context, R.attr.colorUnread); this.colorUnread = Helper.resolveColor(context, R.attr.colorUnread);

View File

@ -79,7 +79,6 @@ import android.widget.Button;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.EditText; import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
@ -89,7 +88,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.PopupMenu; import androidx.appcompat.widget.PopupMenu;
import androidx.cardview.widget.CardView;
import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.Group; import androidx.constraintlayout.widget.Group;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
@ -167,7 +165,6 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
private LayoutInflater inflater; private LayoutInflater inflater;
private boolean suitable; private boolean suitable;
private int dp3;
private int dp36; private int dp36;
private int colorPrimary; private int colorPrimary;
private int colorAccent; private int colorAccent;
@ -180,10 +177,8 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
private boolean contacts; private boolean contacts;
private float textSize; private float textSize;
private boolean cards;
private boolean date; private boolean date;
private boolean threading; private boolean threading;
private boolean circular;
private boolean name_email; private boolean name_email;
private boolean subject_italic; private boolean subject_italic;
private boolean flags; private boolean flags;
@ -232,11 +227,10 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
public class ViewHolder extends RecyclerView.ViewHolder implements public class ViewHolder extends RecyclerView.ViewHolder implements
View.OnClickListener, View.OnLongClickListener, View.OnKeyListener, View.OnClickListener, View.OnLongClickListener, View.OnKeyListener,
BottomNavigationView.OnNavigationItemSelectedListener { BottomNavigationView.OnNavigationItemSelectedListener {
private CardView card;
private View view; private View view;
private View vwRipple; private View vwRipple;
private CardView vwColor; private View vwColor;
private ImageView ivExpander; private ImageView ivExpander;
private ImageView ivFlagged; private ImageView ivFlagged;
private ImageView ivAvatar; private ImageView ivAvatar;
@ -335,7 +329,6 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
ViewHolder(final View itemView) { ViewHolder(final View itemView) {
super(itemView); super(itemView);
card = itemView.findViewById(R.id.card);
view = itemView.findViewById(R.id.clItem); view = itemView.findViewById(R.id.clItem);
vwRipple = itemView.findViewById(R.id.vwRipple); vwRipple = itemView.findViewById(R.id.vwRipple);
@ -361,20 +354,6 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
ivThread = itemView.findViewById(R.id.ivThread); ivThread = itemView.findViewById(R.id.ivThread);
tvError = itemView.findViewById(R.id.tvError); tvError = itemView.findViewById(R.id.tvError);
pbLoading = itemView.findViewById(R.id.pbLoading); pbLoading = itemView.findViewById(R.id.pbLoading);
if (!cards) {
FrameLayout.LayoutParams lparam = (FrameLayout.LayoutParams) card.getLayoutParams();
lparam.setMargins(0, 0, 0, 0);
card.setLayoutParams(lparam);
card.setRadius(0);
card.setElevation(0);
card.setCardBackgroundColor(Color.TRANSPARENT);
view.setPadding(0, 0, 0, 0);
}
vwColor.setRadius(circular ? dp3 / 2f : 0f);
} }
private void ensureExpanded() { private void ensureExpanded() {
@ -668,7 +647,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
tvTime.setTextColor(colorUnseen); tvTime.setTextColor(colorUnseen);
// Account color // Account color
vwColor.setCardBackgroundColor(message.accountColor == null ? Color.TRANSPARENT : message.accountColor); vwColor.setBackgroundColor(message.accountColor == null ? Color.TRANSPARENT : message.accountColor);
vwColor.setVisibility(ActivityBilling.isPro(context) ? View.VISIBLE : View.INVISIBLE); vwColor.setVisibility(ActivityBilling.isPro(context) ? View.VISIBLE : View.INVISIBLE);
// Expander // Expander
@ -2993,7 +2972,6 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
this.TF = Helper.getTimeInstance(context, SimpleDateFormat.SHORT); this.TF = Helper.getTimeInstance(context, SimpleDateFormat.SHORT);
this.DTF = Helper.getDateTimeInstance(context, SimpleDateFormat.LONG, SimpleDateFormat.LONG); this.DTF = Helper.getDateTimeInstance(context, SimpleDateFormat.LONG, SimpleDateFormat.LONG);
this.dp3 = Helper.dp2pixels(context, 3);
this.dp36 = Helper.dp2pixels(context, 36); this.dp36 = Helper.dp2pixels(context, 36);
this.colorPrimary = Helper.resolveColor(context, R.attr.colorPrimary); this.colorPrimary = Helper.resolveColor(context, R.attr.colorPrimary);
this.colorAccent = Helper.resolveColor(context, R.attr.colorAccent); this.colorAccent = Helper.resolveColor(context, R.attr.colorAccent);
@ -3007,10 +2985,8 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
this.textSize = Helper.getTextSize(context, zoom); this.textSize = Helper.getTextSize(context, zoom);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
this.cards = prefs.getBoolean("cards", true);
this.date = prefs.getBoolean("date", true); this.date = prefs.getBoolean("date", true);
this.threading = prefs.getBoolean("threading", true); this.threading = prefs.getBoolean("threading", true);
this.circular = prefs.getBoolean("circular", true);
this.name_email = prefs.getBoolean("name_email", !compact); this.name_email = prefs.getBoolean("name_email", !compact);
this.subject_italic = prefs.getBoolean("subject_italic", true); this.subject_italic = prefs.getBoolean("subject_italic", true);
this.flags = prefs.getBoolean("flags", true); this.flags = prefs.getBoolean("flags", true);

View File

@ -23,6 +23,7 @@ import android.animation.ObjectAnimator;
import android.animation.ValueAnimator; import android.animation.ValueAnimator;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
@ -37,6 +38,7 @@ import androidx.constraintlayout.widget.Group;
import androidx.fragment.app.FragmentTransaction; import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
@ -48,6 +50,9 @@ import java.util.List;
public class FragmentAccounts extends FragmentBase { public class FragmentAccounts extends FragmentBase {
private boolean settings; private boolean settings;
private boolean cards;
private RecyclerView rvAccount; private RecyclerView rvAccount;
private ContentLoadingProgressBar pbWait; private ContentLoadingProgressBar pbWait;
private Group grpReady; private Group grpReady;
@ -61,8 +66,12 @@ public class FragmentAccounts extends FragmentBase {
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Bundle args = getArguments(); Bundle args = getArguments();
settings = (args == null || args.getBoolean("settings", true)); settings = (args == null || args.getBoolean("settings", true));
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
cards = prefs.getBoolean("cards", true);
} }
@Override @Override
@ -86,9 +95,11 @@ public class FragmentAccounts extends FragmentBase {
LinearLayoutManager llm = new LinearLayoutManager(getContext()); LinearLayoutManager llm = new LinearLayoutManager(getContext());
rvAccount.setLayoutManager(llm); rvAccount.setLayoutManager(llm);
if (!cards) {
DividerItemDecoration itemDecorator = new DividerItemDecoration(getContext(), llm.getOrientation()); DividerItemDecoration itemDecorator = new DividerItemDecoration(getContext(), llm.getOrientation());
itemDecorator.setDrawable(getContext().getDrawable(R.drawable.divider)); itemDecorator.setDrawable(getContext().getDrawable(R.drawable.divider));
rvAccount.addItemDecoration(itemDecorator); rvAccount.addItemDecoration(itemDecorator);
}
adapter = new AdapterAccount(this, settings); adapter = new AdapterAccount(this, settings);
rvAccount.setAdapter(adapter); rvAccount.setAdapter(adapter);

View File

@ -19,6 +19,7 @@ package eu.faircode.email;
Copyright 2018-2019 by Marcel Bokhorst (M66B) Copyright 2018-2019 by Marcel Bokhorst (M66B)
*/ */
import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -29,6 +30,7 @@ import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.Group; import androidx.constraintlayout.widget.Group;
import androidx.fragment.app.FragmentTransaction; import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
@ -39,6 +41,8 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
public class FragmentAnswers extends FragmentBase { public class FragmentAnswers extends FragmentBase {
private boolean cards;
private RecyclerView rvAnswer; private RecyclerView rvAnswer;
private ContentLoadingProgressBar pbWait; private ContentLoadingProgressBar pbWait;
private Group grpReady; private Group grpReady;
@ -46,6 +50,14 @@ public class FragmentAnswers extends FragmentBase {
private AdapterAnswer adapter; private AdapterAnswer adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
cards = prefs.getBoolean("cards", true);
}
@Override @Override
@Nullable @Nullable
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@ -66,9 +78,11 @@ public class FragmentAnswers extends FragmentBase {
LinearLayoutManager llm = new LinearLayoutManager(getContext()); LinearLayoutManager llm = new LinearLayoutManager(getContext());
rvAnswer.setLayoutManager(llm); rvAnswer.setLayoutManager(llm);
if (!cards) {
DividerItemDecoration itemDecorator = new DividerItemDecoration(getContext(), llm.getOrientation()); DividerItemDecoration itemDecorator = new DividerItemDecoration(getContext(), llm.getOrientation());
itemDecorator.setDrawable(getContext().getDrawable(R.drawable.divider)); itemDecorator.setDrawable(getContext().getDrawable(R.drawable.divider));
rvAnswer.addItemDecoration(itemDecorator); rvAnswer.addItemDecoration(itemDecorator);
}
adapter = new AdapterAnswer(this); adapter = new AdapterAnswer(this);
rvAnswer.setAdapter(adapter); rvAnswer.setAdapter(adapter);

View File

@ -21,6 +21,7 @@ package eu.faircode.email;
import android.animation.ObjectAnimator; import android.animation.ObjectAnimator;
import android.animation.ValueAnimator; import android.animation.ValueAnimator;
import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -31,6 +32,7 @@ import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.Group; import androidx.constraintlayout.widget.Group;
import androidx.fragment.app.FragmentTransaction; import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
@ -41,6 +43,8 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
public class FragmentIdentities extends FragmentBase { public class FragmentIdentities extends FragmentBase {
private boolean cards;
private RecyclerView rvIdentity; private RecyclerView rvIdentity;
private ContentLoadingProgressBar pbWait; private ContentLoadingProgressBar pbWait;
private Group grpReady; private Group grpReady;
@ -49,6 +53,14 @@ public class FragmentIdentities extends FragmentBase {
private AdapterIdentity adapter; private AdapterIdentity adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
cards = prefs.getBoolean("cards", true);
}
@Override @Override
@Nullable @Nullable
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@ -68,9 +80,11 @@ public class FragmentIdentities extends FragmentBase {
LinearLayoutManager llm = new LinearLayoutManager(getContext()); LinearLayoutManager llm = new LinearLayoutManager(getContext());
rvIdentity.setLayoutManager(llm); rvIdentity.setLayoutManager(llm);
if (!cards) {
DividerItemDecoration itemDecorator = new DividerItemDecoration(getContext(), llm.getOrientation()); DividerItemDecoration itemDecorator = new DividerItemDecoration(getContext(), llm.getOrientation());
itemDecorator.setDrawable(getContext().getDrawable(R.drawable.divider)); itemDecorator.setDrawable(getContext().getDrawable(R.drawable.divider));
rvIdentity.addItemDecoration(itemDecorator); rvIdentity.addItemDecoration(itemDecorator);
}
adapter = new AdapterIdentity(this); adapter = new AdapterIdentity(this);
rvIdentity.setAdapter(adapter); rvIdentity.setAdapter(adapter);

View File

@ -19,6 +19,7 @@ package eu.faircode.email;
Copyright 2018-2019 by Marcel Bokhorst (M66B) Copyright 2018-2019 by Marcel Bokhorst (M66B)
*/ */
import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -29,6 +30,7 @@ import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.Group; import androidx.constraintlayout.widget.Group;
import androidx.fragment.app.FragmentTransaction; import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
@ -39,6 +41,11 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
public class FragmentRules extends FragmentBase { public class FragmentRules extends FragmentBase {
private long account;
private long folder;
private boolean cards;
private RecyclerView rvRule; private RecyclerView rvRule;
private ContentLoadingProgressBar pbWait; private ContentLoadingProgressBar pbWait;
private Group grpReady; private Group grpReady;
@ -46,9 +53,6 @@ public class FragmentRules extends FragmentBase {
private AdapterRule adapter; private AdapterRule adapter;
private long account;
private long folder;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -57,6 +61,9 @@ public class FragmentRules extends FragmentBase {
Bundle args = getArguments(); Bundle args = getArguments();
account = args.getLong("account", -1); account = args.getLong("account", -1);
folder = args.getLong("folder", -1); folder = args.getLong("folder", -1);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
cards = prefs.getBoolean("cards", true);
} }
@Override @Override
@ -81,9 +88,11 @@ public class FragmentRules extends FragmentBase {
adapter = new AdapterRule(this); adapter = new AdapterRule(this);
rvRule.setAdapter(adapter); rvRule.setAdapter(adapter);
if (!cards) {
DividerItemDecoration itemDecorator = new DividerItemDecoration(getContext(), llm.getOrientation()); DividerItemDecoration itemDecorator = new DividerItemDecoration(getContext(), llm.getOrientation());
itemDecorator.setDrawable(getContext().getDrawable(R.drawable.divider)); itemDecorator.setDrawable(getContext().getDrawable(R.drawable.divider));
rvRule.addItemDecoration(itemDecorator); rvRule.addItemDecoration(itemDecorator);
}
fab.setOnClickListener(new View.OnClickListener() { fab.setOnClickListener(new View.OnClickListener() {
@Override @Override

View File

@ -0,0 +1,71 @@
package eu.faircode.email;
/*
This file is part of FairEmail.
FairEmail 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.
FairEmail 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 FairEmail. If not, see <http://www.gnu.org/licenses/>.
Copyright 2018-2019 by Marcel Bokhorst (M66B)
*/
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.util.AttributeSet;
import android.widget.FrameLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.cardview.widget.CardView;
import androidx.preference.PreferenceManager;
public class ViewCardOptional extends CardView {
public ViewCardOptional(@NonNull Context context) {
super(context);
}
public ViewCardOptional(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public ViewCardOptional(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
boolean cards = prefs.getBoolean("cards", true);
if (cards) {
int dp6 = Helper.dp2pixels(getContext(), 6);
int color = Helper.resolveColor(getContext(), R.attr.colorCardBackground);
FrameLayout.LayoutParams lparam = (FrameLayout.LayoutParams) getLayoutParams();
lparam.setMargins(dp6, dp6, dp6, dp6);
setLayoutParams(lparam);
setRadius(dp6);
setElevation(dp6);
setCardBackgroundColor(color);
getChildAt(0).setPadding(dp6, dp6, dp6, dp6);
} else {
setRadius(0);
setElevation(0);
setCardBackgroundColor(Color.TRANSPARENT);
}
}
}

View File

@ -0,0 +1,39 @@
package eu.faircode.email;
import android.content.Context;
import android.content.SharedPreferences;
import android.util.AttributeSet;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.cardview.widget.CardView;
import androidx.preference.PreferenceManager;
public class ViewStripe extends CardView {
public ViewStripe(@NonNull Context context) {
super(context);
}
public ViewStripe(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public ViewStripe(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
boolean circular = prefs.getBoolean("circular", true);
setRadius(circular ? Helper.dp2pixels(getContext(), 3) / 2f : 0f);
setElevation(0);
}
@Override
public void setBackgroundColor(int color) {
setCardBackgroundColor(color);
}
}

View File

@ -4,13 +4,11 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<androidx.cardview.widget.CardView <eu.faircode.email.ViewStripe
android:id="@+id/vwColor" android:id="@+id/vwColor"
android:layout_width="6dp" android:layout_width="6dp"
android:layout_height="0dp" android:layout_height="0dp"
app:cardBackgroundColor="?attr/colorAccent" android:background="?attr/colorAccent"
app:cardCornerRadius="1.5dp"
app:cardElevation="0dp"
app:layout_constraintBottom_toBottomOf="@+id/paddingBottom" app:layout_constraintBottom_toBottomOf="@+id/paddingBottom"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />

View File

@ -3,13 +3,11 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<androidx.cardview.widget.CardView <eu.faircode.email.ViewStripe
android:id="@+id/vwColor" android:id="@+id/vwColor"
android:layout_width="6dp" android:layout_width="6dp"
android:layout_height="0dp" android:layout_height="0dp"
app:cardBackgroundColor="?attr/colorAccent" android:background="?attr/colorAccent"
app:cardCornerRadius="1.5dp"
app:cardElevation="0dp"
app:layout_constraintBottom_toBottomOf="@+id/paddingBottom" app:layout_constraintBottom_toBottomOf="@+id/paddingBottom"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />

View File

@ -4,6 +4,10 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<eu.faircode.email.ViewCardOptional
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clItem" android:id="@+id/clItem"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -11,7 +15,7 @@
android:background="?attr/activatableItemBackground" android:background="?attr/activatableItemBackground"
android:foreground="?attr/selectableItemBackground"> android:foreground="?attr/selectableItemBackground">
<View <eu.faircode.email.ViewStripe
android:id="@+id/vwColor" android:id="@+id/vwColor"
android:layout_width="6dp" android:layout_width="6dp"
android:layout_height="0dp" android:layout_height="0dp"
@ -213,4 +217,5 @@
android:layout_height="0dp" android:layout_height="0dp"
app:constraint_referenced_ids="ivSync,tvHost" /> app:constraint_referenced_ids="ivSync,tvHost" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</eu.faircode.email.ViewCardOptional>
</FrameLayout> </FrameLayout>

View File

@ -4,6 +4,10 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<eu.faircode.email.ViewCardOptional
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clItem" android:id="@+id/clItem"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -24,4 +28,5 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</eu.faircode.email.ViewCardOptional>
</FrameLayout> </FrameLayout>

View File

@ -4,30 +4,23 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<androidx.cardview.widget.CardView <eu.faircode.email.ViewCardOptional
android:id="@+id/card" android:id="@+id/card"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content">
android:layout_margin="6dp"
app:cardBackgroundColor="?attr/colorCardBackground"
app:cardCornerRadius="6dp"
app:cardElevation="6dp">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clItem" android:id="@+id/clItem"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/activatableItemBackground" android:background="?attr/activatableItemBackground"
android:foreground="?attr/selectableItemBackground" android:foreground="?attr/selectableItemBackground">
android:padding="6dp">
<androidx.cardview.widget.CardView <eu.faircode.email.ViewStripe
android:id="@+id/vwColor" android:id="@+id/vwColor"
android:layout_width="6dp" android:layout_width="6dp"
android:layout_height="0dp" android:layout_height="0dp"
app:cardBackgroundColor="?attr/colorAccent" android:background="?attr/colorAccent"
app:cardCornerRadius="1.5dp"
app:cardElevation="0dp"
app:layout_constraintBottom_toBottomOf="@+id/paddingBottom" app:layout_constraintBottom_toBottomOf="@+id/paddingBottom"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
@ -257,5 +250,5 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvError" /> app:layout_constraintTop_toBottomOf="@id/tvError" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView> </eu.faircode.email.ViewCardOptional>
</FrameLayout> </FrameLayout>

View File

@ -4,28 +4,20 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<androidx.cardview.widget.CardView <eu.faircode.email.ViewCardOptional
android:id="@+id/card"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content">
android:layout_margin="6dp"
app:cardBackgroundColor="?attr/colorCardBackground"
app:cardCornerRadius="6dp"
app:cardElevation="6dp">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clItem" android:id="@+id/clItem"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content">
android:padding="6dp">
<androidx.cardview.widget.CardView <eu.faircode.email.ViewStripe
android:id="@+id/vwColor" android:id="@+id/vwColor"
android:layout_width="6dp" android:layout_width="6dp"
android:layout_height="0dp" android:layout_height="0dp"
app:cardBackgroundColor="?attr/colorAccent" android:background="?attr/colorAccent"
app:cardCornerRadius="1.5dp"
app:cardElevation="0dp"
app:layout_constraintBottom_toBottomOf="@+id/paddingBottom" app:layout_constraintBottom_toBottomOf="@+id/paddingBottom"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
@ -89,5 +81,5 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvName" /> app:layout_constraintTop_toBottomOf="@id/tvName" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView> </eu.faircode.email.ViewCardOptional>
</FrameLayout> </FrameLayout>

View File

@ -4,6 +4,10 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<eu.faircode.email.ViewCardOptional
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clItem" android:id="@+id/clItem"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -11,7 +15,7 @@
android:background="?attr/activatableItemBackground" android:background="?attr/activatableItemBackground"
android:foreground="?attr/selectableItemBackground"> android:foreground="?attr/selectableItemBackground">
<View <eu.faircode.email.ViewStripe
android:id="@+id/vwColor" android:id="@+id/vwColor"
android:layout_width="6dp" android:layout_width="6dp"
android:layout_height="0dp" android:layout_height="0dp"
@ -167,4 +171,5 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvError" /> app:layout_constraintTop_toBottomOf="@id/tvError" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</eu.faircode.email.ViewCardOptional>
</FrameLayout> </FrameLayout>

View File

@ -4,14 +4,9 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<androidx.cardview.widget.CardView <eu.faircode.email.ViewCardOptional
android:id="@+id/card"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content">
android:layout_margin="6dp"
app:cardBackgroundColor="?attr/colorCardBackground"
app:cardCornerRadius="6dp"
app:cardElevation="6dp">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clItem" android:id="@+id/clItem"
@ -20,8 +15,7 @@
android:background="?attr/activatableItemBackground" android:background="?attr/activatableItemBackground"
android:descendantFocusability="beforeDescendants" android:descendantFocusability="beforeDescendants"
android:focusable="true" android:focusable="true"
android:focusableInTouchMode="true" android:focusableInTouchMode="true">
android:padding="6dp">
<include <include
android:id="@+id/inHeader" android:id="@+id/inHeader"
@ -49,5 +43,5 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/inHeader" /> app:layout_constraintTop_toBottomOf="@id/inHeader" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView> </eu.faircode.email.ViewCardOptional>
</FrameLayout> </FrameLayout>

View File

@ -4,14 +4,9 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<androidx.cardview.widget.CardView <eu.faircode.email.ViewCardOptional
android:id="@+id/card"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content">
android:layout_margin="6dp"
app:cardBackgroundColor="?attr/colorCardBackground"
app:cardCornerRadius="6dp"
app:cardElevation="6dp">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clItem" android:id="@+id/clItem"
@ -20,8 +15,7 @@
android:background="?attr/activatableItemBackground" android:background="?attr/activatableItemBackground"
android:descendantFocusability="beforeDescendants" android:descendantFocusability="beforeDescendants"
android:focusable="true" android:focusable="true"
android:focusableInTouchMode="true" android:focusableInTouchMode="true">
android:padding="6dp">
<include <include
android:id="@+id/inHeader" android:id="@+id/inHeader"
@ -49,5 +43,5 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/inHeader" /> app:layout_constraintTop_toBottomOf="@id/inHeader" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView> </eu.faircode.email.ViewCardOptional>
</FrameLayout> </FrameLayout>

View File

@ -4,6 +4,10 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<eu.faircode.email.ViewCardOptional
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clItem" android:id="@+id/clItem"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -64,6 +68,6 @@
android:textAppearance="@style/TextAppearance.AppCompat.Small" android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvCondition" /> app:layout_constraintTop_toBottomOf="@id/tvCondition" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</eu.faircode.email.ViewCardOptional>
</FrameLayout> </FrameLayout>