1
0
Fork 0
mirror of https://github.com/MatomoCamp/matomocamp-companion-android.git synced 2024-09-19 16:13:46 +02:00

Enhanced list item layouts and make them RTL-compatible.

This commit is contained in:
Christophe Beyls 2016-01-03 22:50:11 +01:00
parent d6f1de2aae
commit fd8a806236
6 changed files with 97 additions and 81 deletions

View file

@ -3,10 +3,8 @@ package be.digitalia.fosdem.adapters;
import android.content.Context; import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.support.v4.widget.CursorAdapter; import android.support.v4.widget.CursorAdapter;
import android.text.Spannable; import android.support.v4.widget.TextViewCompat;
import android.text.SpannableString;
import android.text.TextUtils; import android.text.TextUtils;
import android.text.style.AbsoluteSizeSpan;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -24,7 +22,6 @@ public class EventsAdapter extends CursorAdapter {
private final LayoutInflater inflater; private final LayoutInflater inflater;
private final DateFormat timeDateFormat; private final DateFormat timeDateFormat;
private final int titleTextSize;
private final boolean showDay; private final boolean showDay;
public EventsAdapter(Context context) { public EventsAdapter(Context context) {
@ -35,7 +32,6 @@ public class EventsAdapter extends CursorAdapter {
super(context, null, 0); super(context, null, 0);
inflater = LayoutInflater.from(context); inflater = LayoutInflater.from(context);
timeDateFormat = DateUtils.getTimeDateFormat(context); timeDateFormat = DateUtils.getTimeDateFormat(context);
titleTextSize = context.getResources().getDimensionPixelSize(R.dimen.list_item_title_text_size);
this.showDay = showDay; this.showDay = showDay;
} }
@ -50,7 +46,7 @@ public class EventsAdapter extends CursorAdapter {
ViewHolder holder = new ViewHolder(); ViewHolder holder = new ViewHolder();
holder.title = (TextView) view.findViewById(R.id.title); holder.title = (TextView) view.findViewById(R.id.title);
holder.titleSizeSpan = new AbsoluteSizeSpan(titleTextSize); holder.persons = (TextView) view.findViewById(R.id.persons);
holder.trackName = (TextView) view.findViewById(R.id.track_name); holder.trackName = (TextView) view.findViewById(R.id.track_name);
holder.details = (TextView) view.findViewById(R.id.details); holder.details = (TextView) view.findViewById(R.id.details);
view.setTag(holder); view.setTag(holder);
@ -64,19 +60,12 @@ public class EventsAdapter extends CursorAdapter {
Event event = DatabaseManager.toEvent(cursor, holder.event); Event event = DatabaseManager.toEvent(cursor, holder.event);
holder.event = event; holder.event = event;
String eventTitle = event.getTitle(); holder.title.setText(event.getTitle());
SpannableString spannableString;
String personsSummary = event.getPersonsSummary();
if (TextUtils.isEmpty(personsSummary)) {
spannableString = new SpannableString(eventTitle);
} else {
spannableString = new SpannableString(String.format("%1$s\n%2$s", eventTitle, event.getPersonsSummary()));
}
spannableString.setSpan(holder.titleSizeSpan, 0, eventTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
holder.title.setText(spannableString);
int bookmarkDrawable = DatabaseManager.toBookmarkStatus(cursor) ? R.drawable.ic_bookmark_grey600_24dp : 0; int bookmarkDrawable = DatabaseManager.toBookmarkStatus(cursor) ? R.drawable.ic_bookmark_grey600_24dp : 0;
holder.title.setCompoundDrawablesWithIntrinsicBounds(0, 0, bookmarkDrawable, 0); TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(holder.title, 0, 0, bookmarkDrawable, 0);
String personsSummary = event.getPersonsSummary();
holder.persons.setText(personsSummary);
holder.persons.setVisibility(TextUtils.isEmpty(personsSummary) ? View.GONE : View.VISIBLE);
holder.trackName.setText(event.getTrack().getName()); holder.trackName.setText(event.getTrack().getName());
Date startTime = event.getStartTime(); Date startTime = event.getStartTime();
@ -94,7 +83,7 @@ public class EventsAdapter extends CursorAdapter {
private static class ViewHolder { private static class ViewHolder {
TextView title; TextView title;
AbsoluteSizeSpan titleSizeSpan; TextView persons;
TextView trackName; TextView trackName;
TextView details; TextView details;
Event event; Event event;

View file

@ -3,19 +3,16 @@ package be.digitalia.fosdem.fragments;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import android.content.res.TypedArray;
import android.database.Cursor; import android.database.Cursor;
import android.graphics.Typeface;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader; import android.support.v4.content.Loader;
import android.support.v4.widget.CursorAdapter; import android.support.v4.widget.CursorAdapter;
import android.text.Spannable; import android.support.v4.widget.TextViewCompat;
import android.text.SpannableString;
import android.text.TextUtils; import android.text.TextUtils;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.StyleSpan;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -240,13 +237,15 @@ public class TrackScheduleListFragment extends SmoothListFragment implements Han
private static class TrackScheduleAdapter extends CursorAdapter { private static class TrackScheduleAdapter extends CursorAdapter {
private static final int[] PRIMARY_TEXT_COLORS
= new int[]{android.R.attr.textColorPrimary, android.R.attr.textColorPrimaryInverse};
private final LayoutInflater inflater; private final LayoutInflater inflater;
private final DateFormat timeDateFormat; private final DateFormat timeDateFormat;
private final int timeBackgroundColor; private final int timeBackgroundColor;
private final int timeForegroundColor; private final int timeForegroundColor;
private final int timeRunningBackgroundColor; private final int timeRunningBackgroundColor;
private final int timeRunningForegroundColor; private final int timeRunningForegroundColor;
private final int titleTextSize;
private long currentTime = -1L; private long currentTime = -1L;
public TrackScheduleAdapter(Context context) { public TrackScheduleAdapter(Context context) {
@ -255,10 +254,12 @@ public class TrackScheduleListFragment extends SmoothListFragment implements Han
timeDateFormat = DateUtils.getTimeDateFormat(context); timeDateFormat = DateUtils.getTimeDateFormat(context);
Resources res = context.getResources(); Resources res = context.getResources();
timeBackgroundColor = res.getColor(R.color.schedule_time_background); timeBackgroundColor = res.getColor(R.color.schedule_time_background);
timeForegroundColor = res.getColor(R.color.schedule_time_foreground);
timeRunningBackgroundColor = res.getColor(R.color.schedule_time_running_background); timeRunningBackgroundColor = res.getColor(R.color.schedule_time_running_background);
timeRunningForegroundColor = res.getColor(R.color.schedule_time_running_foreground);
titleTextSize = res.getDimensionPixelSize(R.dimen.list_item_title_text_size); TypedArray a = context.getTheme().obtainStyledAttributes(PRIMARY_TEXT_COLORS);
timeForegroundColor = a.getColor(0, 0);
timeRunningForegroundColor = a.getColor(1, 0);
a.recycle();
} }
public void setCurrentTime(long time) { public void setCurrentTime(long time) {
@ -279,9 +280,9 @@ public class TrackScheduleListFragment extends SmoothListFragment implements Han
ViewHolder holder = new ViewHolder(); ViewHolder holder = new ViewHolder();
holder.time = (TextView) view.findViewById(R.id.time); holder.time = (TextView) view.findViewById(R.id.time);
holder.text = (TextView) view.findViewById(R.id.text); holder.title = (TextView) view.findViewById(R.id.title);
holder.titleSizeSpan = new AbsoluteSizeSpan(titleTextSize); holder.persons = (TextView) view.findViewById(R.id.persons);
holder.boldStyleSpan = new StyleSpan(Typeface.BOLD); holder.room = (TextView) view.findViewById(R.id.room);
view.setTag(holder); view.setTag(holder);
return view; return view;
@ -304,27 +305,20 @@ public class TrackScheduleListFragment extends SmoothListFragment implements Han
holder.time.setTextColor(timeForegroundColor); holder.time.setTextColor(timeForegroundColor);
} }
SpannableString spannableString; holder.title.setText(event.getTitle());
String eventTitle = event.getTitle();
String personsSummary = event.getPersonsSummary();
if (TextUtils.isEmpty(personsSummary)) {
spannableString = new SpannableString(String.format("%1$s\n%2$s", eventTitle, event.getRoomName()));
} else {
spannableString = new SpannableString(String.format("%1$s\n%2$s\n%3$s", eventTitle, personsSummary, event.getRoomName()));
}
spannableString.setSpan(holder.titleSizeSpan, 0, eventTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(holder.boldStyleSpan, 0, eventTitle.length() + personsSummary.length() + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
holder.text.setText(spannableString);
int bookmarkDrawable = DatabaseManager.toBookmarkStatus(cursor) ? R.drawable.ic_bookmark_grey600_24dp : 0; int bookmarkDrawable = DatabaseManager.toBookmarkStatus(cursor) ? R.drawable.ic_bookmark_grey600_24dp : 0;
holder.text.setCompoundDrawablesWithIntrinsicBounds(0, 0, bookmarkDrawable, 0); TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(holder.title, 0, 0, bookmarkDrawable, 0);
String personsSummary = event.getPersonsSummary();
holder.persons.setText(personsSummary);
holder.persons.setVisibility(TextUtils.isEmpty(personsSummary) ? View.GONE : View.VISIBLE);
holder.room.setText(event.getRoomName());
} }
private static class ViewHolder { private static class ViewHolder {
TextView time; TextView time;
TextView text; TextView title;
AbsoluteSizeSpan titleSizeSpan; TextView persons;
StyleSpan boldStyleSpan; TextView room;
Event event; Event event;
} }
} }

View file

@ -5,34 +5,40 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/activatedBackgroundIndicator" android:background="?attr/activatedBackgroundIndicator"
android:orientation="vertical" android:orientation="vertical"
android:padding="@dimen/list_item_padding"> android:paddingBottom="@dimen/list_item_padding"
android:paddingLeft="?attr/listPreferredItemPaddingLeft"
android:paddingRight="?attr/listPreferredItemPaddingRight"
android:paddingTop="@dimen/list_item_padding">
<TextView <TextView
android:id="@+id/title" android:id="@+id/title"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:drawablePadding="8dp" android:drawablePadding="8dp"
android:textColor="?android:textColorPrimary" android:textAppearance="@style/TextAppearance.AppCompat.Title"
android:textSize="@dimen/list_item_small_text_size" android:textSize="@dimen/abc_text_size_medium_material"
android:textStyle="bold" tools:text="Welcome to FOSDEM 2015"/>
tools:text="Welcome to FOSDEM 2015\nFOSDEM Staff"
tools:textSize="@dimen/list_item_medium_text_size"/> <TextView
android:id="@+id/persons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Body2"
tools:text="FOSDEM Staff"/>
<TextView <TextView
android:id="@+id/track_name" android:id="@+id/track_name"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textColor="?android:textColorPrimary" android:layout_marginTop="4dp"
android:textSize="@dimen/list_item_small_text_size" android:textAppearance="@style/TextAppearance.AppCompat.Caption"
android:textStyle="italic"
tools:text="Keynotes"/> tools:text="Keynotes"/>
<TextView <TextView
android:id="@+id/details" android:id="@+id/details"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textColor="?android:textColorPrimary" android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textSize="@dimen/list_item_small_text_size"
tools:text="Saturday, 09:30 - 09:55 | Janson"/> tools:text="Saturday, 09:30 - 09:55 | Janson"/>
</LinearLayout> </LinearLayout>

View file

@ -1,33 +1,65 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/activatedBackgroundIndicator" android:background="?attr/activatedBackgroundIndicator">
android:orientation="horizontal">
<TextView <TextView
android:id="@+id/time" android:id="@+id/time"
android:layout_width="80dp" android:layout_width="80dp"
android:layout_height="match_parent" android:layout_height="0dp"
android:layout_alignBottom="@+id/room"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:background="@color/schedule_time_background" android:background="@color/schedule_time_background"
android:padding="@dimen/list_item_padding" android:padding="@dimen/list_item_padding"
android:textColor="@color/schedule_time_foreground" android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textSize="@dimen/list_item_small_text_size"
android:textStyle="bold" android:textStyle="bold"
tools:text="09:30"/> tools:text="09:30"/>
<TextView <TextView
android:id="@+id/text" android:id="@+id/title"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="@dimen/list_item_padding"
android:layout_marginRight="@dimen/list_item_padding"
android:layout_toEndOf="@+id/time"
android:layout_toRightOf="@+id/time"
android:drawablePadding="8dp" android:drawablePadding="8dp"
android:padding="@dimen/list_item_padding" android:paddingTop="@dimen/list_item_padding"
android:textColor="?android:textColorPrimary" android:textAppearance="@style/TextAppearance.AppCompat.Title"
android:textSize="@dimen/list_item_small_text_size" android:textSize="@dimen/abc_text_size_medium_material"
tools:text="Welcome to FOSDEM 2015\nFOSDEM Staff" tools:text="Welcome to FOSDEM 2015"/>
tools:textSize="@dimen/list_item_medium_text_size"
tools:textStyle="bold"/>
</LinearLayout> <TextView
android:id="@+id/persons"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignEnd="@+id/title"
android:layout_alignLeft="@+id/title"
android:layout_alignRight="@+id/title"
android:layout_alignStart="@+id/title"
android:layout_below="@+id/title"
android:textAppearance="@style/TextAppearance.AppCompat.Body2"
tools:text="FOSDEM Staff"/>
<TextView
android:id="@+id/room"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignEnd="@+id/title"
android:layout_alignLeft="@+id/title"
android:layout_alignRight="@+id/title"
android:layout_alignStart="@+id/title"
android:layout_below="@+id/persons"
android:layout_marginTop="4dp"
android:paddingBottom="@dimen/list_item_padding"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
tools:text="Janson"/>
</RelativeLayout>

View file

@ -9,8 +9,6 @@
<color name="main_menu_footer_background">#eaeaea</color> <color name="main_menu_footer_background">#eaeaea</color>
<color name="translucent_grey">#0c000000</color> <color name="translucent_grey">#0c000000</color>
<color name="schedule_time_background">#29000000</color> <color name="schedule_time_background">#29000000</color>
<color name="schedule_time_foreground">#000</color>
<color name="schedule_time_running_background">#d6000000</color> <color name="schedule_time_running_background">#d6000000</color>
<color name="schedule_time_running_foreground">#fff</color>
</resources> </resources>

View file

@ -8,9 +8,6 @@
<dimen name="main_menu_item_height">48dp</dimen> <dimen name="main_menu_item_height">48dp</dimen>
<dimen name="main_menu_footer_height">32dp</dimen> <dimen name="main_menu_footer_height">32dp</dimen>
<dimen name="list_item_padding">8dp</dimen> <dimen name="list_item_padding">8dp</dimen>
<dimen name="list_item_title_text_size">18sp</dimen>
<dimen name="list_item_medium_text_size">16sp</dimen>
<dimen name="list_item_small_text_size">14sp</dimen>
<dimen name="content_margin">16dp</dimen> <dimen name="content_margin">16dp</dimen>
<dimen name="toolbar_elevation">8dp</dimen> <dimen name="toolbar_elevation">8dp</dimen>
<dimen name="schedule_column_width">360dp</dimen> <dimen name="schedule_column_width">360dp</dimen>