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

View file

@ -8,6 +8,7 @@ import android.database.Cursor;
import android.support.v4.widget.CursorAdapter;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.style.AbsoluteSizeSpan;
import android.view.LayoutInflater;
import android.view.View;
@ -63,7 +64,13 @@ public class EventsAdapter extends CursorAdapter {
holder.event = event;
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);
holder.title.setText(spannableString);

View file

@ -398,10 +398,10 @@ public class DatabaseManager {
+ " JOIN "
+ DatabaseHelper.TRACKS_TABLE_NAME
+ " t ON e.track_id = t.id"
+ " JOIN "
+ " LEFT JOIN "
+ DatabaseHelper.EVENTS_PERSONS_TABLE_NAME
+ " ep ON e.id = ep.event_id"
+ " JOIN "
+ " LEFT JOIN "
+ DatabaseHelper.PERSONS_TABLE_NAME
+ " p ON ep.person_id = p.rowid"
+ " WHERE e.id = ?" + " GROUP BY e.id", selectionArgs);
@ -441,10 +441,10 @@ public class DatabaseManager {
+ " JOIN "
+ DatabaseHelper.TRACKS_TABLE_NAME
+ " t ON e.track_id = t.id"
+ " JOIN "
+ " LEFT JOIN "
+ DatabaseHelper.EVENTS_PERSONS_TABLE_NAME
+ " ep ON e.id = ep.event_id"
+ " JOIN "
+ " LEFT JOIN "
+ DatabaseHelper.PERSONS_TABLE_NAME
+ " 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);
@ -508,16 +508,15 @@ public class DatabaseManager {
+ " JOIN "
+ DatabaseHelper.TRACKS_TABLE_NAME
+ " t ON e.track_id = t.id"
+ " JOIN "
+ " LEFT JOIN "
+ DatabaseHelper.EVENTS_PERSONS_TABLE_NAME
+ " ep ON e.id = ep.event_id"
+ " JOIN "
+ " LEFT JOIN "
+ DatabaseHelper.PERSONS_TABLE_NAME
+ " p ON ep.person_id = p.rowid"
+ " WHERE "
+ whereCondition.toString()
+ " GROUP BY e.id"
+ " ORDER BY e.start_time " + ascendingString, selectionArgs.toArray(new String[selectionArgs.size()]));
+ " GROUP BY e.id" + " ORDER BY e.start_time " + ascendingString, selectionArgs.toArray(new String[selectionArgs.size()]));
cursor.setNotificationUri(context.getContentResolver(), URI_SCHEDULE);
return cursor;
}
@ -546,15 +545,18 @@ public class DatabaseManager {
+ " JOIN "
+ DatabaseHelper.TRACKS_TABLE_NAME
+ " t ON e.track_id = t.id"
+ " JOIN "
+ " LEFT JOIN "
+ DatabaseHelper.EVENTS_PERSONS_TABLE_NAME
+ " ep ON e.id = ep.event_id"
+ " JOIN "
+ " LEFT JOIN "
+ DatabaseHelper.PERSONS_TABLE_NAME
+ " p ON ep.person_id = p.rowid"
+ " JOIN "
+ 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);
return cursor;
}
@ -596,10 +598,10 @@ public class DatabaseManager {
+ " JOIN "
+ DatabaseHelper.TRACKS_TABLE_NAME
+ " t ON e.track_id = t.id"
+ " JOIN "
+ " LEFT JOIN "
+ DatabaseHelper.EVENTS_PERSONS_TABLE_NAME
+ " ep ON e.id = ep.event_id"
+ " JOIN "
+ " LEFT JOIN "
+ DatabaseHelper.PERSONS_TABLE_NAME
+ " 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);
@ -632,10 +634,10 @@ public class DatabaseManager {
+ " JOIN "
+ DatabaseHelper.TRACKS_TABLE_NAME
+ " t ON e.track_id = t.id"
+ " JOIN "
+ " LEFT JOIN "
+ DatabaseHelper.EVENTS_PERSONS_TABLE_NAME
+ " ep ON e.id = ep.event_id"
+ " JOIN "
+ " LEFT JOIN "
+ DatabaseHelper.PERSONS_TABLE_NAME
+ " p ON ep.person_id = p.rowid"
+ " 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.
Cursor cursor = helper.getReadableDatabase().rawQuery(
"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 "
+ 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.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

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

View file

@ -13,6 +13,7 @@ import android.support.v4.content.Loader;
import android.support.v4.widget.CursorAdapter;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.StyleSpan;
import android.view.LayoutInflater;
@ -189,9 +190,14 @@ public class TrackScheduleListFragment extends ListFragment implements LoaderCal
holder.event = event;
holder.time.setText(TIME_DATE_FORMAT.format(event.getStartTime()));
SpannableString spannableString;
String eventTitle = event.getTitle();
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.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() {
return roomName;
return (roomName == null) ? "" : roomName;
}
public void setRoomName(String roomName) {
@ -133,10 +133,13 @@ public class Event implements Parcelable {
}
public String getPersonsSummary() {
if ((personsSummary == null) && (persons != null)) {
if (personsSummary != null) {
return personsSummary;
}
if (persons != null) {
return TextUtils.join(", ", persons);
}
return personsSummary;
return "";
}
public void setPersonsSummary(String personsSummary) {

View file

@ -15,6 +15,7 @@ import android.net.Uri;
import android.preference.PreferenceManager;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.TaskStackBuilder;
import android.text.TextUtils;
import be.digitalia.fosdem.R;
import be.digitalia.fosdem.activities.EventDetailsActivity;
import be.digitalia.fosdem.activities.MainActivity;
@ -139,10 +140,17 @@ public class AlarmIntentService extends IntentService {
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())
.setContentTitle(event.getTitle()).setContentText(String.format("%1$s - %2$s", event.getTrack().getName(), event.getPersonsSummary()))
.setContentInfo(event.getRoomName()).setContentIntent(eventPendingIntent).setAutoCancel(true).setDefaults(defaultFlags)
.setPriority(NotificationCompat.PRIORITY_DEFAULT).build();
.setContentTitle(event.getTitle()).setContentText(contentText).setContentInfo(event.getRoomName()).setContentIntent(eventPendingIntent)
.setAutoCancel(true).setDefaults(defaultFlags).setPriority(NotificationCompat.PRIORITY_DEFAULT).build();
notificationManager.notify(eventId, notification);
}