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

Handle events with no speakers (Issue reported by B. Leseul)

This commit is contained in:
Christophe Beyls 2014-01-18 20:51:21 +01:00
parent d2decf9d22
commit 2e5e417742
7 changed files with 79 additions and 42 deletions

View file

@ -27,7 +27,6 @@
android:id="@+id/persons" android:id="@+id/persons"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:textIsSelectable="true" android:textIsSelectable="true"
android:textSize="14sp" android:textSize="14sp"
@ -37,6 +36,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="16dp" android:layout_marginBottom="16dp"
android:layout_marginTop="10dp"
android:background="@color/fosdem_purple" android:background="@color/fosdem_purple"
android:orientation="vertical" android:orientation="vertical"
android:padding="6dp" > android:padding="6dp" >

View file

@ -8,6 +8,7 @@ import android.database.Cursor;
import android.support.v4.widget.CursorAdapter; import android.support.v4.widget.CursorAdapter;
import android.text.Spannable; import android.text.Spannable;
import android.text.SpannableString; import android.text.SpannableString;
import android.text.TextUtils;
import android.text.style.AbsoluteSizeSpan; import android.text.style.AbsoluteSizeSpan;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -63,7 +64,13 @@ public class EventsAdapter extends CursorAdapter {
holder.event = event; holder.event = event;
String eventTitle = event.getTitle(); String eventTitle = event.getTitle();
SpannableString spannableString = new SpannableString(String.format("%1$s\n%2$s", eventTitle, event.getPersonsSummary())); 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); spannableString.setSpan(holder.titleSizeSpan, 0, eventTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
holder.title.setText(spannableString); holder.title.setText(spannableString);

View file

@ -398,10 +398,10 @@ public class DatabaseManager {
+ " JOIN " + " JOIN "
+ DatabaseHelper.TRACKS_TABLE_NAME + DatabaseHelper.TRACKS_TABLE_NAME
+ " t ON e.track_id = t.id" + " t ON e.track_id = t.id"
+ " JOIN " + " LEFT JOIN "
+ DatabaseHelper.EVENTS_PERSONS_TABLE_NAME + DatabaseHelper.EVENTS_PERSONS_TABLE_NAME
+ " ep ON e.id = ep.event_id" + " ep ON e.id = ep.event_id"
+ " JOIN " + " LEFT JOIN "
+ DatabaseHelper.PERSONS_TABLE_NAME + DatabaseHelper.PERSONS_TABLE_NAME
+ " p ON ep.person_id = p.rowid" + " p ON ep.person_id = p.rowid"
+ " WHERE e.id = ?" + " GROUP BY e.id", selectionArgs); + " WHERE e.id = ?" + " GROUP BY e.id", selectionArgs);
@ -441,10 +441,10 @@ public class DatabaseManager {
+ " JOIN " + " JOIN "
+ DatabaseHelper.TRACKS_TABLE_NAME + DatabaseHelper.TRACKS_TABLE_NAME
+ " t ON e.track_id = t.id" + " t ON e.track_id = t.id"
+ " JOIN " + " LEFT JOIN "
+ DatabaseHelper.EVENTS_PERSONS_TABLE_NAME + DatabaseHelper.EVENTS_PERSONS_TABLE_NAME
+ " ep ON e.id = ep.event_id" + " ep ON e.id = ep.event_id"
+ " JOIN " + " LEFT JOIN "
+ DatabaseHelper.PERSONS_TABLE_NAME + DatabaseHelper.PERSONS_TABLE_NAME
+ " p ON ep.person_id = p.rowid" + " p ON ep.person_id = p.rowid"
+ " WHERE e.day_index = ? AND t.name = ? AND t.type = ?" + " GROUP BY e.id" + " ORDER BY e.start_time ASC", selectionArgs); + " WHERE e.day_index = ? AND t.name = ? AND t.type = ?" + " GROUP BY e.id" + " ORDER BY e.start_time ASC", selectionArgs);
@ -508,16 +508,15 @@ public class DatabaseManager {
+ " JOIN " + " JOIN "
+ DatabaseHelper.TRACKS_TABLE_NAME + DatabaseHelper.TRACKS_TABLE_NAME
+ " t ON e.track_id = t.id" + " t ON e.track_id = t.id"
+ " JOIN " + " LEFT JOIN "
+ DatabaseHelper.EVENTS_PERSONS_TABLE_NAME + DatabaseHelper.EVENTS_PERSONS_TABLE_NAME
+ " ep ON e.id = ep.event_id" + " ep ON e.id = ep.event_id"
+ " JOIN " + " LEFT JOIN "
+ DatabaseHelper.PERSONS_TABLE_NAME + DatabaseHelper.PERSONS_TABLE_NAME
+ " p ON ep.person_id = p.rowid" + " p ON ep.person_id = p.rowid"
+ " WHERE " + " WHERE "
+ whereCondition.toString() + whereCondition.toString()
+ " GROUP BY e.id" + " GROUP BY e.id" + " ORDER BY e.start_time " + ascendingString, selectionArgs.toArray(new String[selectionArgs.size()]));
+ " ORDER BY e.start_time " + ascendingString, selectionArgs.toArray(new String[selectionArgs.size()]));
cursor.setNotificationUri(context.getContentResolver(), URI_SCHEDULE); cursor.setNotificationUri(context.getContentResolver(), URI_SCHEDULE);
return cursor; return cursor;
} }
@ -546,15 +545,18 @@ public class DatabaseManager {
+ " JOIN " + " JOIN "
+ DatabaseHelper.TRACKS_TABLE_NAME + DatabaseHelper.TRACKS_TABLE_NAME
+ " t ON e.track_id = t.id" + " t ON e.track_id = t.id"
+ " JOIN " + " LEFT JOIN "
+ DatabaseHelper.EVENTS_PERSONS_TABLE_NAME + DatabaseHelper.EVENTS_PERSONS_TABLE_NAME
+ " ep ON e.id = ep.event_id" + " ep ON e.id = ep.event_id"
+ " JOIN " + " LEFT JOIN "
+ DatabaseHelper.PERSONS_TABLE_NAME + DatabaseHelper.PERSONS_TABLE_NAME
+ " p ON ep.person_id = p.rowid" + " p ON ep.person_id = p.rowid"
+ " JOIN " + " JOIN "
+ DatabaseHelper.EVENTS_PERSONS_TABLE_NAME + DatabaseHelper.EVENTS_PERSONS_TABLE_NAME
+ " ep2 ON e.id = ep2.event_id" + " WHERE ep2.person_id = ?" + " GROUP BY e.id" + " ORDER BY e.start_time ASC", selectionArgs); + " ep2 ON e.id = ep2.event_id"
+ " WHERE ep2.person_id = ?"
+ " GROUP BY e.id"
+ " ORDER BY e.start_time ASC", selectionArgs);
cursor.setNotificationUri(context.getContentResolver(), URI_SCHEDULE); cursor.setNotificationUri(context.getContentResolver(), URI_SCHEDULE);
return cursor; return cursor;
} }
@ -596,10 +598,10 @@ public class DatabaseManager {
+ " JOIN " + " JOIN "
+ DatabaseHelper.TRACKS_TABLE_NAME + DatabaseHelper.TRACKS_TABLE_NAME
+ " t ON e.track_id = t.id" + " t ON e.track_id = t.id"
+ " JOIN " + " LEFT JOIN "
+ DatabaseHelper.EVENTS_PERSONS_TABLE_NAME + DatabaseHelper.EVENTS_PERSONS_TABLE_NAME
+ " ep ON e.id = ep.event_id" + " ep ON e.id = ep.event_id"
+ " JOIN " + " LEFT JOIN "
+ DatabaseHelper.PERSONS_TABLE_NAME + DatabaseHelper.PERSONS_TABLE_NAME
+ " p ON ep.person_id = p.rowid" + whereCondition + " GROUP BY e.id" + " ORDER BY e.start_time ASC", selectionArgs); + " p ON ep.person_id = p.rowid" + whereCondition + " GROUP BY e.id" + " ORDER BY e.start_time ASC", selectionArgs);
cursor.setNotificationUri(context.getContentResolver(), URI_BOOKMARKS); cursor.setNotificationUri(context.getContentResolver(), URI_BOOKMARKS);
@ -632,10 +634,10 @@ public class DatabaseManager {
+ " JOIN " + " JOIN "
+ DatabaseHelper.TRACKS_TABLE_NAME + DatabaseHelper.TRACKS_TABLE_NAME
+ " t ON e.track_id = t.id" + " t ON e.track_id = t.id"
+ " JOIN " + " LEFT JOIN "
+ DatabaseHelper.EVENTS_PERSONS_TABLE_NAME + DatabaseHelper.EVENTS_PERSONS_TABLE_NAME
+ " ep ON e.id = ep.event_id" + " ep ON e.id = ep.event_id"
+ " JOIN " + " LEFT JOIN "
+ DatabaseHelper.PERSONS_TABLE_NAME + DatabaseHelper.PERSONS_TABLE_NAME
+ " p ON ep.person_id = p.rowid" + " p ON ep.person_id = p.rowid"
+ " WHERE e.id IN ( " + " WHERE e.id IN ( "
@ -677,10 +679,10 @@ public class DatabaseManager {
// Query is similar to getSearchResults but returns different columns, does not join the Day table and limits the result set to 5 entries. // Query is similar to getSearchResults but returns different columns, does not join the Day table and limits the result set to 5 entries.
Cursor cursor = helper.getReadableDatabase().rawQuery( Cursor cursor = helper.getReadableDatabase().rawQuery(
"SELECT e.id AS " + BaseColumns._ID + ", et.title AS " + SearchManager.SUGGEST_COLUMN_TEXT_1 "SELECT e.id AS " + BaseColumns._ID + ", et.title AS " + SearchManager.SUGGEST_COLUMN_TEXT_1
+ ", GROUP_CONCAT(p.name, ', ') || ' - ' || t.name AS " + SearchManager.SUGGEST_COLUMN_TEXT_2 + ", e.id AS " + ", IFNULL(GROUP_CONCAT(p.name, ', '), '') || ' - ' || t.name AS " + SearchManager.SUGGEST_COLUMN_TEXT_2 + ", e.id AS "
+ SearchManager.SUGGEST_COLUMN_INTENT_DATA + " FROM " + DatabaseHelper.EVENTS_TABLE_NAME + " e" + " JOIN " + SearchManager.SUGGEST_COLUMN_INTENT_DATA + " FROM " + DatabaseHelper.EVENTS_TABLE_NAME + " e" + " JOIN "
+ DatabaseHelper.EVENTS_TITLES_TABLE_NAME + " et ON e.id = et.rowid" + " JOIN " + DatabaseHelper.TRACKS_TABLE_NAME + DatabaseHelper.EVENTS_TITLES_TABLE_NAME + " et ON e.id = et.rowid" + " JOIN " + DatabaseHelper.TRACKS_TABLE_NAME
+ " t ON e.track_id = t.id" + " JOIN " + DatabaseHelper.EVENTS_PERSONS_TABLE_NAME + " ep ON e.id = ep.event_id" + " JOIN " + " t ON e.track_id = t.id" + " LEFT JOIN " + DatabaseHelper.EVENTS_PERSONS_TABLE_NAME + " ep ON e.id = ep.event_id" + " LEFT JOIN "
+ DatabaseHelper.PERSONS_TABLE_NAME + " p ON ep.person_id = p.rowid" + " WHERE e.id IN ( " + "SELECT rowid" + " FROM " + DatabaseHelper.PERSONS_TABLE_NAME + " p ON ep.person_id = p.rowid" + " WHERE e.id IN ( " + "SELECT rowid" + " FROM "
+ DatabaseHelper.EVENTS_TITLES_TABLE_NAME + " WHERE " + DatabaseHelper.EVENTS_TITLES_TABLE_NAME + " MATCH ?" + " UNION " + DatabaseHelper.EVENTS_TITLES_TABLE_NAME + " WHERE " + DatabaseHelper.EVENTS_TITLES_TABLE_NAME + " MATCH ?" + " UNION "
+ "SELECT e.id" + " FROM " + DatabaseHelper.EVENTS_TABLE_NAME + " e" + " JOIN " + DatabaseHelper.TRACKS_TABLE_NAME + "SELECT e.id" + " FROM " + DatabaseHelper.EVENTS_TABLE_NAME + " e" + " JOIN " + DatabaseHelper.TRACKS_TABLE_NAME

View file

@ -127,8 +127,14 @@ public class EventDetailsFragment extends Fragment {
// Set the persons summary text first; replace it with the clickable text when the loader completes // Set the persons summary text first; replace it with the clickable text when the loader completes
holder.personsTextView = (TextView) view.findViewById(R.id.persons); holder.personsTextView = (TextView) view.findViewById(R.id.persons);
holder.personsTextView.setText(event.getPersonsSummary()); String personsSummary = event.getPersonsSummary();
if (TextUtils.isEmpty(personsSummary)) {
holder.personsTextView.setVisibility(View.GONE);
} else {
holder.personsTextView.setText(personsSummary);
holder.personsTextView.setMovementMethod(linkMovementMethod); holder.personsTextView.setMovementMethod(linkMovementMethod);
holder.personsTextView.setVisibility(View.VISIBLE);
}
((TextView) view.findViewById(R.id.track)).setText(event.getTrack().getName()); ((TextView) view.findViewById(R.id.track)).setText(event.getTrack().getName());
Date startTime = event.getStartTime(); Date startTime = event.getStartTime();
@ -241,9 +247,11 @@ public class EventDetailsFragment extends Fragment {
} }
// Strip HTML // Strip HTML
description = StringUtils.trimEnd(Html.fromHtml(description)).toString(); description = StringUtils.trimEnd(Html.fromHtml(description)).toString();
// Add speaker info // Add speaker info if available
if (personsCount > 0) {
description = String.format("%1$s: %2$s\n\n%3$s", getResources().getQuantityString(R.plurals.speakers, personsCount), event.getPersonsSummary(), description = String.format("%1$s: %2$s\n\n%3$s", getResources().getQuantityString(R.plurals.speakers, personsCount), event.getPersonsSummary(),
description); description);
}
intent.putExtra(CalendarContract.Events.DESCRIPTION, description); intent.putExtra(CalendarContract.Events.DESCRIPTION, description);
intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, event.getStartTime().getTime()); intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, event.getStartTime().getTime());
intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, event.getEndTime().getTime()); intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, event.getEndTime().getTime());
@ -302,6 +310,7 @@ public class EventDetailsFragment extends Fragment {
// 1. Persons // 1. Persons
if (data.persons != null) { if (data.persons != null) {
personsCount = data.persons.size(); personsCount = data.persons.size();
if (personsCount > 0) {
// Build a list of clickable persons // Build a list of clickable persons
SpannableStringBuilder sb = new SpannableStringBuilder(); SpannableStringBuilder sb = new SpannableStringBuilder();
int length = 0; int length = 0;
@ -315,6 +324,8 @@ public class EventDetailsFragment extends Fragment {
sb.setSpan(new PersonClickableSpan(person), length - name.length(), length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); sb.setSpan(new PersonClickableSpan(person), length - name.length(), length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
} }
holder.personsTextView.setText(sb); holder.personsTextView.setText(sb);
holder.personsTextView.setVisibility(View.VISIBLE);
}
} }
// 2. Links // 2. Links

View file

@ -13,6 +13,7 @@ import android.support.v4.content.Loader;
import android.support.v4.widget.CursorAdapter; import android.support.v4.widget.CursorAdapter;
import android.text.Spannable; import android.text.Spannable;
import android.text.SpannableString; import android.text.SpannableString;
import android.text.TextUtils;
import android.text.style.AbsoluteSizeSpan; import android.text.style.AbsoluteSizeSpan;
import android.text.style.StyleSpan; import android.text.style.StyleSpan;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -189,9 +190,14 @@ public class TrackScheduleListFragment extends ListFragment implements LoaderCal
holder.event = event; holder.event = event;
holder.time.setText(TIME_DATE_FORMAT.format(event.getStartTime())); holder.time.setText(TIME_DATE_FORMAT.format(event.getStartTime()));
SpannableString spannableString;
String eventTitle = event.getTitle(); String eventTitle = event.getTitle();
String personsSummary = event.getPersonsSummary(); String personsSummary = event.getPersonsSummary();
SpannableString spannableString = new SpannableString(String.format("%1$s\n%2$s\n%3$s", eventTitle, personsSummary, event.getRoomName())); 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.titleSizeSpan, 0, eventTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(holder.boldStyleSpan, 0, eventTitle.length() + personsSummary.length() + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); spannableString.setSpan(holder.boldStyleSpan, 0, eventTitle.length() + personsSummary.length() + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

View file

@ -73,7 +73,7 @@ public class Event implements Parcelable {
} }
public String getRoomName() { public String getRoomName() {
return roomName; return (roomName == null) ? "" : roomName;
} }
public void setRoomName(String roomName) { public void setRoomName(String roomName) {
@ -133,10 +133,13 @@ public class Event implements Parcelable {
} }
public String getPersonsSummary() { public String getPersonsSummary() {
if ((personsSummary == null) && (persons != null)) { if (personsSummary != null) {
return personsSummary;
}
if (persons != null) {
return TextUtils.join(", ", persons); return TextUtils.join(", ", persons);
} }
return personsSummary; return "";
} }
public void setPersonsSummary(String personsSummary) { public void setPersonsSummary(String personsSummary) {

View file

@ -15,6 +15,7 @@ import android.net.Uri;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationCompat;
import android.support.v4.app.TaskStackBuilder; import android.support.v4.app.TaskStackBuilder;
import android.text.TextUtils;
import be.digitalia.fosdem.R; import be.digitalia.fosdem.R;
import be.digitalia.fosdem.activities.EventDetailsActivity; import be.digitalia.fosdem.activities.EventDetailsActivity;
import be.digitalia.fosdem.activities.MainActivity; import be.digitalia.fosdem.activities.MainActivity;
@ -139,10 +140,17 @@ public class AlarmIntentService extends IntentService {
defaultFlags |= Notification.DEFAULT_LIGHTS; defaultFlags |= Notification.DEFAULT_LIGHTS;
} }
String personsSummary = event.getPersonsSummary();
String contentText;
if (TextUtils.isEmpty(personsSummary)) {
contentText = event.getTrack().getName();
} else {
contentText = String.format("%1$s - %2$s", event.getTrack().getName(), personsSummary);
}
Notification notification = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.ic_launcher).setWhen(event.getStartTime().getTime()) Notification notification = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.ic_launcher).setWhen(event.getStartTime().getTime())
.setContentTitle(event.getTitle()).setContentText(String.format("%1$s - %2$s", event.getTrack().getName(), event.getPersonsSummary())) .setContentTitle(event.getTitle()).setContentText(contentText).setContentInfo(event.getRoomName()).setContentIntent(eventPendingIntent)
.setContentInfo(event.getRoomName()).setContentIntent(eventPendingIntent).setAutoCancel(true).setDefaults(defaultFlags) .setAutoCancel(true).setDefaults(defaultFlags).setPriority(NotificationCompat.PRIORITY_DEFAULT).build();
.setPriority(NotificationCompat.PRIORITY_DEFAULT).build();
notificationManager.notify(eventId, notification); notificationManager.notify(eventId, notification);
} }