diff --git a/Application/Resources/Apps/Play RSI/ApplicationConfiguration.json b/Application/Resources/Apps/Play RSI/ApplicationConfiguration.json
index d14d4d9d4..df1de4e24 100755
--- a/Application/Resources/Apps/Play RSI/ApplicationConfiguration.json
+++ b/Application/Resources/Apps/Play RSI/ApplicationConfiguration.json
@@ -8,7 +8,7 @@
"appStoreProductIdentifier": 920753497,
"playURL": "https://www.rsi.ch/play/",
"middlewareURL": "https://playfff.herokuapp.com",
- "videoHomeSections": "tvTrending,tvShowsAccess,tvFavoriteShows,tvEvents,tvTopics",
+ "videoHomeSections": "tvTrending,tvTopicsAccess,tvShowsAccess,tvFavoriteShows,tvEvents,tvTopics",
"liveHomeSections": "tvLive,radioLive",
"tvTrendingEpisodesOnly": false,
"tvFeaturedHomeSectionHeaderHidden": true,
@@ -21,8 +21,8 @@
"termsAndConditionsURL": "https://www.rsi.ch/chi-siamo",
"dataProtectionURL": "https://www.rsi.ch/chi-siamo/protezione-dei-dati/Dichiarazione-sulla-protezione-dei-dati-10499633.html",
"whatsNewURL": "https://pastebin.com/raw/WUM7QS1W",
- "radioChannels": "[ { \"uid\": \"rete-uno\", \"name\": \"Rete Uno\", \"resourceUid\": \"rete_uno\", \"color\": \"#0074C2\" }, { \"uid\": \"rete-due\", \"name\": \"Rete Due\", \"resourceUid\": \"rete_due\", \"color\": \"#05A73A\" }, { \"uid\": \"rete-tre\", \"name\": \"Rete Tre\", \"resourceUid\": \"rete_tre\", \"color\": \"#A3BA1B\" } ]",
- "tvChannels": "[ { \"uid\": \"la1\", \"name\": \"LA 1\", \"resourceUid\": \"la1\" }, { \"uid\": \"la2\", \"name\": \"LA 2\", \"resourceUid\": \"la2\" } ]",
+ "radioChannels": "[{\"uid\":\"rete-uno\",\"name\":\"Rete Uno\",\"resourceUid\":\"rete_uno\",\"songsViewStyle\":\"collapsed\",\"color\":\"#0074C2\",\"secondColor\":\"#54B8EF\"},{\"uid\":\"rete-due\",\"name\":\"Rete Due\",\"resourceUid\":\"rete_due\",\"songsViewStyle\":\"collapsed\",\"color\":\"#06A73B\",\"secondColor\":\"#30E96B\"},{\"uid\":\"rete-tre\",\"name\":\"Rete Tre\",\"resourceUid\":\"rete_tre\",\"songsViewStyle\":\"collapsed\",\"color\":\"#A4BB1B\",\"secondColor\":\"#DEF355\"}]",
+ "tvChannels": "[{\"uid\":\"la1\",\"name\":\"LA 1\",\"resourceUid\":\"la1\",\"color\":\"#FF9120\",\"secondColor\":\"#E15100\"},{\"uid\":\"la2\",\"name\":\"LA 2\",\"resourceUid\":\"la2\",\"color\":\"#FFCF2F\",\"secondColor\":\"#F38A0D\"}]",
"continuousPlaybackPlayerViewTransitionDuration": 5,
"continuousPlaybackForegroundTransitionDuration": 0,
"continuousPlaybackBackgroundTransitionDuration": 0,
diff --git a/Application/Resources/Apps/Play RSI/Overrides/override_artwork_la1.pdf b/Application/Resources/Apps/Play RSI/Overrides/override_artwork_la1.pdf
deleted file mode 100755
index ca60a9f12..000000000
Binary files a/Application/Resources/Apps/Play RSI/Overrides/override_artwork_la1.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RSI/Overrides/override_artwork_la2.pdf b/Application/Resources/Apps/Play RSI/Overrides/override_artwork_la2.pdf
deleted file mode 100755
index 31d9a9bd4..000000000
Binary files a/Application/Resources/Apps/Play RSI/Overrides/override_artwork_la2.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RSI/Overrides/override_artwork_rete_due.pdf b/Application/Resources/Apps/Play RSI/Overrides/override_artwork_rete_due.pdf
deleted file mode 100755
index 0c25ef472..000000000
Binary files a/Application/Resources/Apps/Play RSI/Overrides/override_artwork_rete_due.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RSI/Overrides/override_artwork_rete_tre.pdf b/Application/Resources/Apps/Play RSI/Overrides/override_artwork_rete_tre.pdf
deleted file mode 100755
index 24e136b25..000000000
Binary files a/Application/Resources/Apps/Play RSI/Overrides/override_artwork_rete_tre.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RSI/Overrides/override_artwork_rete_uno.pdf b/Application/Resources/Apps/Play RSI/Overrides/override_artwork_rete_uno.pdf
deleted file mode 100755
index c8aa43fdb..000000000
Binary files a/Application/Resources/Apps/Play RSI/Overrides/override_artwork_rete_uno.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RSI/Overrides/override_default_la1.pdf b/Application/Resources/Apps/Play RSI/Overrides/override_default_la1.pdf
deleted file mode 100755
index 204c463d8..000000000
Binary files a/Application/Resources/Apps/Play RSI/Overrides/override_default_la1.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RSI/Overrides/override_default_la2.pdf b/Application/Resources/Apps/Play RSI/Overrides/override_default_la2.pdf
deleted file mode 100755
index 09ed4406e..000000000
Binary files a/Application/Resources/Apps/Play RSI/Overrides/override_default_la2.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RSI/Overrides/override_default_rete_due.pdf b/Application/Resources/Apps/Play RSI/Overrides/override_default_rete_due.pdf
deleted file mode 100755
index a44d41031..000000000
Binary files a/Application/Resources/Apps/Play RSI/Overrides/override_default_rete_due.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RSI/Overrides/override_default_rete_tre.pdf b/Application/Resources/Apps/Play RSI/Overrides/override_default_rete_tre.pdf
deleted file mode 100755
index ad3c892be..000000000
Binary files a/Application/Resources/Apps/Play RSI/Overrides/override_default_rete_tre.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RSI/Overrides/override_default_rete_uno.pdf b/Application/Resources/Apps/Play RSI/Overrides/override_default_rete_uno.pdf
deleted file mode 100755
index f78e71b54..000000000
Binary files a/Application/Resources/Apps/Play RSI/Overrides/override_default_rete_uno.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RSI/it.lproj/Accessibility.strings b/Application/Resources/Apps/Play RSI/it.lproj/Accessibility.strings
index bbb88eca0..6480c2ac4 100755
--- a/Application/Resources/Apps/Play RSI/it.lproj/Accessibility.strings
+++ b/Application/Resources/Apps/Play RSI/it.lproj/Accessibility.strings
@@ -1,6 +1,9 @@
/* Date at time label to spell a date and time value. */
"%1$@ at %2$@" = "%1$@ a %2$@";
+/* Song description. First placeholder is song title, second is artist name */
+"%1$@, by %2$@" = "%1$@, di %2$@";
+
/* Label displaying the number of listenings on the player */
"%@ listenings" = "%@ ascolti";
@@ -54,9 +57,12 @@
/* Introductory title for error notifications */
"Error" = "Errore";
-/* Text to inform a program time information, like the current program */
+/* Text providing program time information. First placeholder is the start time, second is the end time. */
"From %1$@ to %2$@" = "Dalle %1$@ alle %2$@";
+/* Accessibility label of the song list handle when opened */
+"Hide music list" = "Nascondere la lista dei brani";
+
/* Introductory title for information notifications */
"Information" = "Informazioni";
@@ -72,9 +78,15 @@
/* Accessibility hint associated with the account header */
"Manages account information" = "Gestire le informazioni sull'account";
+/* A more episode button label */
+"More episodes" = "Più episodi";
+
/* Text displayed when a user is logged in but no information has been retrieved yet */
"My account" = "Il mio account";
+/* Text providing next program time information. */
+"Next, at %@" = "Prossimo alle %@";
+
/* Mini player label */
"Now playing: %@" = "In riproduzione: %@";
@@ -90,6 +102,9 @@
/* Mini player action hint */
"Opens the full screen player" = "Player a schermo pieno";
+/* Show cell hint */
+"Opens topic details." = "Dettagli della categoria.";
+
/* Accessibility label for the multi audio badge */
"Original version" = "Versione originale";
@@ -99,10 +114,15 @@
/* Play button label */
"Play" = "Play";
-/* Media cell hint
- Mini player action hint */
+/* Program cell hint */
+"Plays from the beginning." = "Riprodurre dall'inizio.";
+
+/* Media cell hint */
"Plays the content." = "Riprodurre il contenuto.";
+/* Song cell hint */
+"Plays the music." = "Riprodurre la musica.";
+
/* Title displayed in home page shows section. */
"Programmes A-Z" = "Trasmissioni dalla A alla Z";
@@ -134,6 +154,9 @@
/* Share button label on player view */
"Share" = "Condividi";
+/* Accessibility label of the song list handle when closed */
+"Show music list" = "Mostrare la lista dei brani";
+
/* Homepage header action hint */
"Shows all contents." = "Mostra tutti i contenuti.";
diff --git a/Application/Resources/Apps/Play RSI/it.lproj/Localizable.strings b/Application/Resources/Apps/Play RSI/it.lproj/Localizable.strings
index dc95247d7..b83d2d747 100755
--- a/Application/Resources/Apps/Play RSI/it.lproj/Localizable.strings
+++ b/Application/Resources/Apps/Play RSI/it.lproj/Localizable.strings
@@ -74,9 +74,6 @@
Confirmation message displayed when the user is about to remove selected entries from the watch later list */
"Are you sure you want to delete the selected items?" = "Sei sicuro di voler eliminare gli elementi selezionati?";
-/* Introductory text for next program information */
-"At %1$@: %2$@" = "Alle %1$@: %2$@";
-
/* Audios option
Header for audio search results
Title displayed at the top of the audio view */
@@ -110,12 +107,6 @@
/* Settings section header */
"Content" = "Contenuto";
-/* Text displayed on live cells when no program time information is available */
-"Currently" = "Attualmente";
-
-/* Title in the mini player for the live stream, if the current program is known. */
-"Currently: %@" = "Attualmente: %@";
-
/* Title of a delete button
Title of the delete button in the alert view when deleting a download in the player view */
"Delete" = "Elimina";
@@ -221,7 +212,8 @@
/* Explains that a content has expired, will expire or will be available in less than one hour. Displayed in the media player view. */
"less than 1 hour" = "meno di 1 ora";
-/* Short label identifying a livestream. Display in uppercase. */
+/* Introductory text for what is currently on air, displayed on the mini player
+ Short label identifying a livestream. Display in uppercase. */
"Live" = "Live";
/* Label to present the Livestreams view
@@ -261,6 +253,9 @@
/* Most searched shows header */
"Most searched shows" = "Programmi più ricercati";
+/* Song list title */
+"Music" = "Musica";
+
/* Text displayed when a user is logged in but no information has been retrieved yet */
"My account" = "Il mio account";
@@ -270,6 +265,9 @@
/* Title of the button to proceed to the next onboarding page */
"Next" = "Prossimo";
+/* Introductory time for next program information */
+"Next, at %@" = "Prossimo alle %@";
+
/* Text displayed when no media added to the watch later list */
"No content" = "Nessun contenuto";
@@ -438,7 +436,8 @@
/* Show more button label when a link is available for broadcast information. */
"Show more" = "Ulteriori informazioni";
-/* Show search result header
+/* Program list header in livestream view
+ Show search result header
Shows search setting option
Shows search setting option list view title
Title label used to present radio associated shows
@@ -482,7 +481,8 @@
/* Button label to share the content being played at time (hours / minutes / seconds). */
"The content at %@" = "Il contenuto a %@";
-/* Message displayed when some content (media, show, etc.) has been copied to the clipboard */
+/* Message displayed when some content (media, show, etc.) has been copied to the clipboard
+ Message displayed when song title and artist name have been copied to the pasteboard */
"The content has been copied to the clipboard." = "Il contenuto è stato copiato negli Appunti.";
/* Button label to share the entire episode being played. */
@@ -529,11 +529,15 @@
/* Period setting option */
"This week" = "Questa settimana";
+/* Introductory text for live content played with timeshift, displayed on the mini player */
+"Time-shifted" = "Differito";
+
/* Period setting option
Title of the button to go back to the current date */
"Today" = "Oggi";
/* Categories search setting option
+ Title label used to present TV topics
Title label used to present TV topics while loading. It appears if no network connection available and no cache available.
Topics search setting option list view title */
"Topics" = "Categorie";
diff --git a/Application/Resources/Apps/Play RTR/ApplicationConfiguration.json b/Application/Resources/Apps/Play RTR/ApplicationConfiguration.json
index 2803eb684..b686976ba 100755
--- a/Application/Resources/Apps/Play RTR/ApplicationConfiguration.json
+++ b/Application/Resources/Apps/Play RTR/ApplicationConfiguration.json
@@ -7,7 +7,7 @@
"appStoreProductIdentifier": 920754925,
"playURL": "https://www.rtr.ch/play/",
"middlewareURL": "https://playfff.herokuapp.com",
- "videoHomeSections": "tvTrending,tvShowsAccess,tvFavoriteShows,tvEvents,tvTopics",
+ "videoHomeSections": "tvTrending,tvTopicsAccess,tvShowsAccess,tvFavoriteShows,tvEvents,tvTopics",
"liveHomeSections": "tvLive,radioLive",
"tvTrendingEpisodesOnly": true,
"tvFeaturedHomeSectionHeaderHidden": true,
@@ -19,8 +19,8 @@
"minimumSocialViewCount": 50,
"dataProtectionURL": "https://www.rtr.ch/general/cundiziuns-d-utilisaziun-e-decl-davart-la-protecziun-da-datas",
"whatsNewURL": "https://pastebin.com/raw/rmJY7QL7",
- "radioChannels": "[ { \"uid\": \"12fb886e-b7aa-4e55-beb2-45dbc619f3c4\", \"name\": \"Radio RTR\", \"resourceUid\": \"radio_rtr\", \"color\": \"#AF001D\" } ]",
- "tvChannels": "[ { \"uid\": \"f5dc82ed-4564-4223-903f-0bf6a13c5620\", \"name\": \"RTR auf SRF 1\", \"resourceUid\": \"rtr_srf1\" }, { \"uid\": \"80bdf859-b58d-421d-bb27-ce1fba4637a7\", \"name\": \"RTR auf SRF Info\", \"resourceUid\": \"rtr_srf_info\" }, { \"uid\": \"2541c864-f883-4b80-9459-e1026e0e692e\", \"name\": \"RTR auf SRF 2\", \"resourceUid\": \"rtr_srf2\" } ]",
+ "radioChannels": "[{\"uid\":\"12fb886e-b7aa-4e55-beb2-45dbc619f3c4\",\"name\":\"Radio RTR\",\"resourceUid\":\"radio_rtr\",\"songsViewStyle\":\"expanded\",\"color\":\"#AF001D\",\"secondColor\":\"#9B001B\"}]",
+ "tvChannels": "[{\"uid\":\"f5dc82ed-4564-4223-903f-0bf6a13c5620\",\"name\":\"RTR auf SRF 1\",\"resourceUid\":\"rtr_srf1\",\"color\":\"#C91024\",\"secondColor\":\"#8D0614\"},{\"uid\":\"80bdf859-b58d-421d-bb27-ce1fba4637a7\",\"name\":\"RTR auf SRF Info\",\"resourceUid\":\"rtr_srf_info\",\"color\":\"#AF001E\",\"secondColor\":\"#830512\"},{\"uid\":\"2541c864-f883-4b80-9459-e1026e0e692e\",\"name\":\"RTR auf SRF 2\",\"resourceUid\":\"rtr_srf2\",\"color\":\"#FFB600\",\"secondColor\":\"#ED7004\",\"titleColor\":\"#333333\",\"hasDarkStatusBar\":true}]",
"continuousPlaybackPlayerViewTransitionDuration": 5,
"continuousPlaybackForegroundTransitionDuration": 0,
"continuousPlaybackBackgroundTransitionDuration": 0,
diff --git a/Application/Resources/Apps/Play RTR/Overrides/override_artwork_radio_rtr.pdf b/Application/Resources/Apps/Play RTR/Overrides/override_artwork_radio_rtr.pdf
deleted file mode 100755
index 1cf55937f..000000000
Binary files a/Application/Resources/Apps/Play RTR/Overrides/override_artwork_radio_rtr.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTR/Overrides/override_artwork_rtr_srf1.pdf b/Application/Resources/Apps/Play RTR/Overrides/override_artwork_rtr_srf1.pdf
deleted file mode 100755
index 4bd94fedc..000000000
Binary files a/Application/Resources/Apps/Play RTR/Overrides/override_artwork_rtr_srf1.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTR/Overrides/override_artwork_rtr_srf2.pdf b/Application/Resources/Apps/Play RTR/Overrides/override_artwork_rtr_srf2.pdf
deleted file mode 100755
index 4a43ddd56..000000000
Binary files a/Application/Resources/Apps/Play RTR/Overrides/override_artwork_rtr_srf2.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTR/Overrides/override_artwork_rtr_srf_info.pdf b/Application/Resources/Apps/Play RTR/Overrides/override_artwork_rtr_srf_info.pdf
deleted file mode 100755
index fc84c2929..000000000
Binary files a/Application/Resources/Apps/Play RTR/Overrides/override_artwork_rtr_srf_info.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTR/Overrides/override_default_radio_rtr.pdf b/Application/Resources/Apps/Play RTR/Overrides/override_default_radio_rtr.pdf
deleted file mode 100755
index 2bf936511..000000000
Binary files a/Application/Resources/Apps/Play RTR/Overrides/override_default_radio_rtr.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTR/Overrides/override_default_rtr_srf1.pdf b/Application/Resources/Apps/Play RTR/Overrides/override_default_rtr_srf1.pdf
deleted file mode 100755
index 08db09285..000000000
Binary files a/Application/Resources/Apps/Play RTR/Overrides/override_default_rtr_srf1.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTR/Overrides/override_default_rtr_srf2.pdf b/Application/Resources/Apps/Play RTR/Overrides/override_default_rtr_srf2.pdf
deleted file mode 100755
index 3088d8532..000000000
Binary files a/Application/Resources/Apps/Play RTR/Overrides/override_default_rtr_srf2.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTR/Overrides/override_default_rtr_srf_info.pdf b/Application/Resources/Apps/Play RTR/Overrides/override_default_rtr_srf_info.pdf
deleted file mode 100755
index 4153aef7a..000000000
Binary files a/Application/Resources/Apps/Play RTR/Overrides/override_default_rtr_srf_info.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTR/RTRResources.xcassets/Radio/Radio RTR/logo_radio_rtr-22.imageset/Contents.json b/Application/Resources/Apps/Play RTR/RTRResources.xcassets/Radio/Radio RTR/logo_radio_rtr-22.imageset/Contents.json
index 0455899c1..b8eabd1fb 100755
--- a/Application/Resources/Apps/Play RTR/RTRResources.xcassets/Radio/Radio RTR/logo_radio_rtr-22.imageset/Contents.json
+++ b/Application/Resources/Apps/Play RTR/RTRResources.xcassets/Radio/Radio RTR/logo_radio_rtr-22.imageset/Contents.json
@@ -1,12 +1,12 @@
{
"images" : [
{
- "idiom" : "universal",
- "filename" : "logo_rtr.pdf"
+ "filename" : "logo_radiortr.pdf",
+ "idiom" : "universal"
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-}
\ No newline at end of file
+}
diff --git a/Application/Resources/Apps/Play RTR/RTRResources.xcassets/Radio/Radio RTR/logo_radio_rtr-22.imageset/logo_radiortr.pdf b/Application/Resources/Apps/Play RTR/RTRResources.xcassets/Radio/Radio RTR/logo_radio_rtr-22.imageset/logo_radiortr.pdf
new file mode 100644
index 000000000..8c83c6698
Binary files /dev/null and b/Application/Resources/Apps/Play RTR/RTRResources.xcassets/Radio/Radio RTR/logo_radio_rtr-22.imageset/logo_radiortr.pdf differ
diff --git a/Application/Resources/Apps/Play RTR/RTRResources.xcassets/Radio/Radio RTR/logo_radio_rtr-22.imageset/logo_rtr.pdf b/Application/Resources/Apps/Play RTR/RTRResources.xcassets/Radio/Radio RTR/logo_radio_rtr-22.imageset/logo_rtr.pdf
deleted file mode 100644
index b2d508828..000000000
Binary files a/Application/Resources/Apps/Play RTR/RTRResources.xcassets/Radio/Radio RTR/logo_radio_rtr-22.imageset/logo_rtr.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTR/rm.lproj/Accessibility.strings b/Application/Resources/Apps/Play RTR/rm.lproj/Accessibility.strings
index e272bfd2d..c8abddbaf 100755
--- a/Application/Resources/Apps/Play RTR/rm.lproj/Accessibility.strings
+++ b/Application/Resources/Apps/Play RTR/rm.lproj/Accessibility.strings
@@ -1,6 +1,9 @@
/* Date at time label to spell a date and time value. */
"%1$@ at %2$@" = "%1$@ las %2$@";
+/* Song description. First placeholder is song title, second is artist name */
+"%1$@, by %2$@" = "%1$@ da %2$@";
+
/* Label displaying the number of listenings on the player */
"%@ listenings" = "%@ tadlà";
@@ -54,9 +57,12 @@
/* Introductory title for error notifications */
"Error" = "Errur";
-/* Text to inform a program time information, like the current program */
+/* Text providing program time information. First placeholder is the start time, second is the end time. */
"From %1$@ to %2$@" = "Davent da %1$@ enfin %2$@";
+/* Accessibility label of the song list handle when opened */
+"Hide music list" = "Zupper glista da musica";
+
/* Introductory title for information notifications */
"Information" = "Infurmaziun";
@@ -72,9 +78,15 @@
/* Accessibility hint associated with the account header */
"Manages account information" = "Organisescha las infurmaziuns da l'account";
+/* A more episode button label */
+"More episodes" = "Dapli episodas";
+
/* Text displayed when a user is logged in but no information has been retrieved yet */
"My account" = "Mes conto";
+/* Text providing next program time information. */
+"Next, at %@" = "Proxim a las %@";
+
/* Mini player label */
"Now playing: %@" = "Uss va: %@";
@@ -90,6 +102,9 @@
/* Mini player action hint */
"Opens the full screen player" = "Avra il player sin l'entir visur";
+/* Show cell hint */
+"Opens topic details." = "Detagls da la categoria.";
+
/* Accessibility label for the multi audio badge */
"Original version" = "Versiun originala";
@@ -99,10 +114,15 @@
/* Play button label */
"Play" = "Laschar ir";
-/* Media cell hint
- Mini player action hint */
+/* Program cell hint */
+"Plays from the beginning." = "Cumenza a l'entschatta.";
+
+/* Media cell hint */
"Plays the content." = "Laschà ì il cuntegn.";
+/* Song cell hint */
+"Plays the music." = "Lascha tadlar musica.";
+
/* Title displayed in home page shows section. */
"Programmes A-Z" = "Emissiuns dad A fin Z";
@@ -134,6 +154,9 @@
/* Share button label on player view */
"Share" = "Divida";
+/* Accessibility label of the song list handle when closed */
+"Show music list" = "Mussa la glista da musica";
+
/* Homepage header action hint */
"Shows all contents." = "Mussar tuts cuntegns.";
diff --git a/Application/Resources/Apps/Play RTR/rm.lproj/Localizable.strings b/Application/Resources/Apps/Play RTR/rm.lproj/Localizable.strings
index 4b87f7daf..1709ed92f 100755
--- a/Application/Resources/Apps/Play RTR/rm.lproj/Localizable.strings
+++ b/Application/Resources/Apps/Play RTR/rm.lproj/Localizable.strings
@@ -74,9 +74,6 @@
Confirmation message displayed when the user is about to remove selected entries from the watch later list */
"Are you sure you want to delete the selected items?" = "Vulais Vus propi stizzar il elements selectà?";
-/* Introductory text for next program information */
-"At %1$@: %2$@" = "A las %1$@: %2$@";
-
/* Audios option
Header for audio search results
Title displayed at the top of the audio view */
@@ -110,12 +107,6 @@
/* Settings section header */
"Content" = "Cuntegn";
-/* Text displayed on live cells when no program time information is available */
-"Currently" = "Actualmain";
-
-/* Title in the mini player for the live stream, if the current program is known. */
-"Currently: %@" = "Actualmain: %@";
-
/* Title of a delete button
Title of the delete button in the alert view when deleting a download in the player view */
"Delete" = "Stizzar";
@@ -221,7 +212,8 @@
/* Explains that a content has expired, will expire or will be available in less than one hour. Displayed in the media player view. */
"less than 1 hour" = "main ch'ina ura";
-/* Short label identifying a livestream. Display in uppercase. */
+/* Introductory text for what is currently on air, displayed on the mini player
+ Short label identifying a livestream. Display in uppercase. */
"Live" = "Live";
/* Label to present the Livestreams view
@@ -261,6 +253,9 @@
/* Most searched shows header */
"Most searched shows" = "Emissiuns las pli tschertgadas";
+/* Song list title */
+"Music" = "Musica";
+
/* Text displayed when a user is logged in but no information has been retrieved yet */
"My account" = "Mes conto";
@@ -270,6 +265,9 @@
/* Title of the button to proceed to the next onboarding page */
"Next" = "Proxim";
+/* Introductory time for next program information */
+"Next, at %@" = "Proxim a las %@";
+
/* Text displayed when no media added to the watch later list */
"No content" = "Nagin cuntegn";
@@ -438,7 +436,8 @@
/* Show more button label when a link is available for broadcast information. */
"Show more" = "Dapli";
-/* Show search result header
+/* Program list header in livestream view
+ Show search result header
Shows search setting option
Shows search setting option list view title
Title label used to present radio associated shows
@@ -482,7 +481,8 @@
/* Button label to share the content being played at time (hours / minutes / seconds). */
"The content at %@" = "Il cuntegn tar %@";
-/* Message displayed when some content (media, show, etc.) has been copied to the clipboard */
+/* Message displayed when some content (media, show, etc.) has been copied to the clipboard
+ Message displayed when song title and artist name have been copied to the pasteboard */
"The content has been copied to the clipboard." = "Il cuntegn è copià en communicaziuns.";
/* Button label to share the entire episode being played. */
@@ -529,11 +529,15 @@
/* Period setting option */
"This week" = "Emna actuala";
+/* Introductory text for live content played with timeshift, displayed on the mini player */
+"Time-shifted" = "Differì";
+
/* Period setting option
Title of the button to go back to the current date */
"Today" = "Oz";
/* Categories search setting option
+ Title label used to present TV topics
Title label used to present TV topics while loading. It appears if no network connection available and no cache available.
Topics search setting option list view title */
"Topics" = "Themas";
diff --git a/Application/Resources/Apps/Play RTS/ApplicationConfiguration.json b/Application/Resources/Apps/Play RTS/ApplicationConfiguration.json
index 22ee03352..e781811fd 100755
--- a/Application/Resources/Apps/Play RTS/ApplicationConfiguration.json
+++ b/Application/Resources/Apps/Play RTS/ApplicationConfiguration.json
@@ -11,7 +11,7 @@
"identityWebserviceURL": "https://hummingbird.rts.ch/api/profile",
"identityWebsiteURL": "https://www.rts.ch/profile",
"userDataServiceURL": "https://profil.rts.ch/api",
- "videoHomeSections": "tvTrending,tvShowsAccess,tvFavoriteShows,tvEvents,tvTopics",
+ "videoHomeSections": "tvTrending,tvTopicsAccess,tvShowsAccess,tvFavoriteShows,tvEvents,tvTopics",
"liveHomeSections": "tvLive,radioLive",
"tvTrendingEpisodesOnly": false,
"tvTrendingEditorialLimit": 3,
@@ -25,8 +25,8 @@
"termsAndConditionsURL": "https://www.rts.ch/entreprise/a-propos/8994021-conditions-generales.html",
"dataProtectionURL": "https://www.rts.ch/entreprise/a-propos/8994006-charte-de-confiance.html",
"whatsNewURL": "https://pastebin.com/raw/JgDhUuDP",
- "radioChannels": "[ { \"uid\": \"a9e7621504c6959e35c3ecbe7f6bed0446cdf8da\", \"name\": \"La 1ère\", \"resourceUid\": \"la1ere\", \"color\": \"#E20026\" }, { \"uid\": \"a83f29dee7a5d0d3f9fccdb9c92161b1afb512db\", \"name\": \"Espace 2\", \"resourceUid\": \"espace2\", \"color\": \"#0071CE\" }, { \"uid\": \"8ceb28d9b3f1dd876d1df1780f908578cbefc3d7\", \"name\": \"Couleur 3\", \"resourceUid\": \"couleur3\", \"color\": \"#E60096\" }, { \"uid\": \"f8517e5319a515e013551eea15aa114fa5cfbc3a\", \"name\": \"Option Musique\", \"resourceUid\": \"option_musique\", \"color\": \"#00CC99\" }, { \"uid\": \"123456789101112131415161718192021222324x\", \"name\": \"Podcasts Originaux\", \"resourceUid\": \"podcasts_originaux\", \"color\": \"#A550F9\", \"homeSections\": \"radioLatestEpisodes,radioFavoriteShows,radioAllShows\" } ]",
- "tvChannels": "[ { \"uid\": \"143932a79bb5a123a646b68b1d1188d7ae493e5b\", \"name\": \"RTS Un\", \"resourceUid\": \"rts_un\" }, { \"uid\": \"d7dfff28deee44e1d3c49a3d37d36d492b29671b\", \"name\": \"RTS Deux\", \"resourceUid\": \"rts_deux\" }, { \"uid\": \"5d332a26e06d08eec8ad385d566187df72955623\", \"name\": \"RTS Info\", \"resourceUid\": \"rts_info\" } ]",
+ "radioChannels": "[{\"uid\":\"a9e7621504c6959e35c3ecbe7f6bed0446cdf8da\",\"name\":\"La 1ère\",\"resourceUid\":\"la1ere\",\"songsViewStyle\":\"collapsed\",\"color\":\"#E20026\",\"secondColor\":\"#5A285B\"},{\"uid\":\"a83f29dee7a5d0d3f9fccdb9c92161b1afb512db\",\"name\":\"Espace 2\",\"resourceUid\":\"espace2\",\"songsViewStyle\":\"collapsed\",\"color\":\"#0071CE\",\"secondColor\":\"#23B7C1\"},{\"uid\":\"8ceb28d9b3f1dd876d1df1780f908578cbefc3d7\",\"name\":\"Couleur 3\",\"resourceUid\":\"couleur3\",\"songsViewStyle\":\"collapsed\",\"color\":\"#E60096\",\"secondColor\":\"#FB5952\"},{\"uid\":\"f8517e5319a515e013551eea15aa114fa5cfbc3a\",\"name\":\"Option Musique\",\"resourceUid\":\"option_musique\",\"songsViewStyle\":\"expanded\",\"color\":\"#00CC99\",\"secondColor\":\"#CBC57A\"},{\"uid\":\"123456789101112131415161718192021222324x\",\"name\":\"Podcasts Originaux\",\"resourceUid\":\"podcasts_originaux\",\"color\":\"#A550F9\",\"homeSections\":\"radioLatestEpisodes,radioFavoriteShows,radioAllShows\"}]",
+ "tvChannels": "[{\"uid\":\"143932a79bb5a123a646b68b1d1188d7ae493e5b\",\"name\":\"RTS Un\",\"resourceUid\":\"rts_un\",\"color\":\"#007896\",\"secondColor\":\"#00303C\"},{\"uid\":\"d7dfff28deee44e1d3c49a3d37d36d492b29671b\",\"name\":\"RTS Deux\",\"resourceUid\":\"rts_deux\",\"color\":\"#DC5C43\",\"secondColor\":\"#9E2D17\"},{\"uid\":\"5d332a26e06d08eec8ad385d566187df72955623\",\"name\":\"RTS Info\",\"resourceUid\":\"rts_info\",\"color\":\"#AF001E\",\"secondColor\":\"#860017\"}]",
"continuousPlaybackPlayerViewTransitionDuration": 5,
"continuousPlaybackForegroundTransitionDuration": 0,
"continuousPlaybackBackgroundTransitionDuration": 0,
diff --git a/Application/Resources/Apps/Play RTS/Overrides/override_artwork_couleur3.pdf b/Application/Resources/Apps/Play RTS/Overrides/override_artwork_couleur3.pdf
deleted file mode 100755
index 137c379bf..000000000
Binary files a/Application/Resources/Apps/Play RTS/Overrides/override_artwork_couleur3.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTS/Overrides/override_artwork_espace2.pdf b/Application/Resources/Apps/Play RTS/Overrides/override_artwork_espace2.pdf
deleted file mode 100755
index ef43b3993..000000000
Binary files a/Application/Resources/Apps/Play RTS/Overrides/override_artwork_espace2.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTS/Overrides/override_artwork_la1ere.pdf b/Application/Resources/Apps/Play RTS/Overrides/override_artwork_la1ere.pdf
deleted file mode 100755
index 7dc02d2de..000000000
Binary files a/Application/Resources/Apps/Play RTS/Overrides/override_artwork_la1ere.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTS/Overrides/override_artwork_option_musique.pdf b/Application/Resources/Apps/Play RTS/Overrides/override_artwork_option_musique.pdf
deleted file mode 100755
index 8bcaa93ae..000000000
Binary files a/Application/Resources/Apps/Play RTS/Overrides/override_artwork_option_musique.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTS/Overrides/override_artwork_rts_deux.pdf b/Application/Resources/Apps/Play RTS/Overrides/override_artwork_rts_deux.pdf
deleted file mode 100644
index 24499c1c2..000000000
Binary files a/Application/Resources/Apps/Play RTS/Overrides/override_artwork_rts_deux.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTS/Overrides/override_artwork_rts_info.pdf b/Application/Resources/Apps/Play RTS/Overrides/override_artwork_rts_info.pdf
deleted file mode 100644
index cdb1425f5..000000000
Binary files a/Application/Resources/Apps/Play RTS/Overrides/override_artwork_rts_info.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTS/Overrides/override_artwork_rts_un.pdf b/Application/Resources/Apps/Play RTS/Overrides/override_artwork_rts_un.pdf
deleted file mode 100644
index 0e8daf982..000000000
Binary files a/Application/Resources/Apps/Play RTS/Overrides/override_artwork_rts_un.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTS/Overrides/override_default_couleur3.pdf b/Application/Resources/Apps/Play RTS/Overrides/override_default_couleur3.pdf
deleted file mode 100755
index 9623e0d22..000000000
Binary files a/Application/Resources/Apps/Play RTS/Overrides/override_default_couleur3.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTS/Overrides/override_default_espace2.pdf b/Application/Resources/Apps/Play RTS/Overrides/override_default_espace2.pdf
deleted file mode 100755
index 794c9606e..000000000
Binary files a/Application/Resources/Apps/Play RTS/Overrides/override_default_espace2.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTS/Overrides/override_default_la1ere.pdf b/Application/Resources/Apps/Play RTS/Overrides/override_default_la1ere.pdf
deleted file mode 100755
index e4e51a9b3..000000000
Binary files a/Application/Resources/Apps/Play RTS/Overrides/override_default_la1ere.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTS/Overrides/override_default_option_musique.pdf b/Application/Resources/Apps/Play RTS/Overrides/override_default_option_musique.pdf
deleted file mode 100755
index 9567357fb..000000000
Binary files a/Application/Resources/Apps/Play RTS/Overrides/override_default_option_musique.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTS/Overrides/override_default_rts_deux.pdf b/Application/Resources/Apps/Play RTS/Overrides/override_default_rts_deux.pdf
deleted file mode 100644
index 9a80e8d40..000000000
Binary files a/Application/Resources/Apps/Play RTS/Overrides/override_default_rts_deux.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTS/Overrides/override_default_rts_info.pdf b/Application/Resources/Apps/Play RTS/Overrides/override_default_rts_info.pdf
deleted file mode 100644
index 6cc0991e2..000000000
Binary files a/Application/Resources/Apps/Play RTS/Overrides/override_default_rts_info.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTS/Overrides/override_default_rts_un.pdf b/Application/Resources/Apps/Play RTS/Overrides/override_default_rts_un.pdf
deleted file mode 100644
index fa81d310a..000000000
Binary files a/Application/Resources/Apps/Play RTS/Overrides/override_default_rts_un.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play RTS/fr.lproj/Accessibility.strings b/Application/Resources/Apps/Play RTS/fr.lproj/Accessibility.strings
index ac239cd08..aeb502489 100644
--- a/Application/Resources/Apps/Play RTS/fr.lproj/Accessibility.strings
+++ b/Application/Resources/Apps/Play RTS/fr.lproj/Accessibility.strings
@@ -1,6 +1,9 @@
/* Date at time label to spell a date and time value. */
"%1$@ at %2$@" = "%1$@ à %2$@";
+/* Song description. First placeholder is song title, second is artist name */
+"%1$@, by %2$@" = "%1$@, de %2$@";
+
/* Label displaying the number of listenings on the player */
"%@ listenings" = "%@ écoutes";
@@ -54,9 +57,12 @@
/* Introductory title for error notifications */
"Error" = "Erreur";
-/* Text to inform a program time information, like the current program */
+/* Text providing program time information. First placeholder is the start time, second is the end time. */
"From %1$@ to %2$@" = "De %1$@ à %2$@";
+/* Accessibility label of the song list handle when opened */
+"Hide music list" = "Masquer la liste musicale";
+
/* Introductory title for information notifications */
"Information" = "Information";
@@ -72,9 +78,15 @@
/* Accessibility hint associated with the account header */
"Manages account information" = "gères les informations du compte";
+/* A more episode button label */
+"More episodes" = "Autres épisodes";
+
/* Text displayed when a user is logged in but no information has been retrieved yet */
"My account" = "Mon compte";
+/* Text providing next program time information. */
+"Next, at %@" = "À suivre à %@";
+
/* Mini player label */
"Now playing: %@" = "A l'écoute : %@";
@@ -90,6 +102,9 @@
/* Mini player action hint */
"Opens the full screen player" = "Ouvre le lecteur en pleine page";
+/* Show cell hint */
+"Opens topic details." = "Affiche le détail de la catégorie.";
+
/* Accessibility label for the multi audio badge */
"Original version" = "Version originale";
@@ -99,10 +114,15 @@
/* Play button label */
"Play" = "Jouer";
-/* Media cell hint
- Mini player action hint */
+/* Program cell hint */
+"Plays from the beginning." = "Joue depuis le début.";
+
+/* Media cell hint */
"Plays the content." = "Joue le contenu.";
+/* Song cell hint */
+"Plays the music." = "Joue la musique.";
+
/* Title displayed in home page shows section. */
"Programmes A-Z" = "Émissions de A à Z";
@@ -134,6 +154,9 @@
/* Share button label on player view */
"Share" = "Partager";
+/* Accessibility label of the song list handle when closed */
+"Show music list" = "Afficher la liste musicale";
+
/* Homepage header action hint */
"Shows all contents." = "Affiche tout le contenu.";
diff --git a/Application/Resources/Apps/Play RTS/fr.lproj/Localizable.strings b/Application/Resources/Apps/Play RTS/fr.lproj/Localizable.strings
index 545f84931..8ec0aa272 100644
--- a/Application/Resources/Apps/Play RTS/fr.lproj/Localizable.strings
+++ b/Application/Resources/Apps/Play RTS/fr.lproj/Localizable.strings
@@ -74,9 +74,6 @@
Confirmation message displayed when the user is about to remove selected entries from the watch later list */
"Are you sure you want to delete the selected items?" = "Etes-vous sûr de vouloir supprimer les éléments sélectionnés ?";
-/* Introductory text for next program information */
-"At %1$@: %2$@" = "Prochainement à %1$@ : %2$@";
-
/* Audios option
Header for audio search results
Title displayed at the top of the audio view */
@@ -110,12 +107,6 @@
/* Settings section header */
"Content" = "Contenu";
-/* Text displayed on live cells when no program time information is available */
-"Currently" = "En ce moment";
-
-/* Title in the mini player for the live stream, if the current program is known. */
-"Currently: %@" = "En direct : %@";
-
/* Title of a delete button
Title of the delete button in the alert view when deleting a download in the player view */
"Delete" = "Supprimer";
@@ -221,7 +212,8 @@
/* Explains that a content has expired, will expire or will be available in less than one hour. Displayed in the media player view. */
"less than 1 hour" = "moins d'une heure";
-/* Short label identifying a livestream. Display in uppercase. */
+/* Introductory text for what is currently on air, displayed on the mini player
+ Short label identifying a livestream. Display in uppercase. */
"Live" = "Direct";
/* Label to present the Livestreams view
@@ -243,7 +235,7 @@
/* Button label to open the show episode page from the long-press menu
Button label to open the show episode page from the preview window
Context menu action to open more episodes associated with a media */
-"More episodes" = "Plus d’épisodes";
+"More episodes" = "Autres épisodes";
/* Title of the related content player section */
"More on this subject" = "Pour aller plus loin";
@@ -261,6 +253,9 @@
/* Most searched shows header */
"Most searched shows" = "Émissions les plus recherchées";
+/* Song list title */
+"Music" = "Musique";
+
/* Text displayed when a user is logged in but no information has been retrieved yet */
"My account" = "Mon compte";
@@ -270,6 +265,9 @@
/* Title of the button to proceed to the next onboarding page */
"Next" = "Suivant";
+/* Introductory time for next program information */
+"Next, at %@" = "À suivre à %@";
+
/* Text displayed when no media added to the watch later list */
"No content" = "Aucun contenu";
@@ -404,7 +402,7 @@
"Remove from favorites" = "Supprimer des favoris";
/* Short label identifying a replay sport event. Display in uppercase. */
-"Replay" = "Replay";
+"Replay" = "Rediffusion";
/* Title of the reset search settings button */
"Reset" = "Effacer";
@@ -438,7 +436,8 @@
/* Show more button label when a link is available for broadcast information. */
"Show more" = "En savoir plus";
-/* Show search result header
+/* Program list header in livestream view
+ Show search result header
Shows search setting option
Shows search setting option list view title
Title label used to present radio associated shows
@@ -482,7 +481,8 @@
/* Button label to share the content being played at time (hours / minutes / seconds). */
"The content at %@" = "Le contenu à %@";
-/* Message displayed when some content (media, show, etc.) has been copied to the clipboard */
+/* Message displayed when some content (media, show, etc.) has been copied to the clipboard
+ Message displayed when song title and artist name have been copied to the pasteboard */
"The content has been copied to the clipboard." = "Le contenu a été copié dans le presse-papier.";
/* Button label to share the entire episode being played. */
@@ -529,11 +529,15 @@
/* Period setting option */
"This week" = "Cette semaine";
+/* Introductory text for live content played with timeshift, displayed on the mini player */
+"Time-shifted" = "Différé";
+
/* Period setting option
Title of the button to go back to the current date */
"Today" = "Aujourd'hui";
/* Categories search setting option
+ Title label used to present TV topics
Title label used to present TV topics while loading. It appears if no network connection available and no cache available.
Topics search setting option list view title */
"Topics" = "Catégories";
diff --git a/Application/Resources/Apps/Play SRF/ApplicationConfiguration.json b/Application/Resources/Apps/Play SRF/ApplicationConfiguration.json
index 8d58e81dc..332e25f36 100755
--- a/Application/Resources/Apps/Play SRF/ApplicationConfiguration.json
+++ b/Application/Resources/Apps/Play SRF/ApplicationConfiguration.json
@@ -8,7 +8,7 @@
"appStoreProductIdentifier": 638194352,
"playURL": "https://www.srf.ch/play/",
"middlewareURL": "https://playfff.herokuapp.com",
- "videoHomeSections": "tvTrending,tvShowsAccess,tvFavoriteShows,tvEvents,tvTopics",
+ "videoHomeSections": "tvTrending,tvTopicsAccess,tvShowsAccess,tvFavoriteShows,tvEvents,tvTopics",
"liveHomeSections": "tvLive,radioLive",
"tvTrendingEpisodesOnly": true,
"tvFeaturedHomeSectionHeaderHidden": true,
@@ -21,8 +21,8 @@
"impressumURL": "http://www.srf.ch/play/tv/hilfe",
"dataProtectionURL": "https://www.srf.ch/hilfe/rechtliches/datenschutzerklaerung",
"whatsNewURL": "https://pastebin.com/raw/nmGqYFny",
- "radioChannels": "[ { \"uid\": \"69e8ac16-4327-4af4-b873-fd5cd6e895a7\", \"name\": \"Radio SRF 1\", \"resourceUid\": \"srf1\", \"color\": \"#F7A600\", \"titleColor\": \"#000000\", \"hasDarkStatusBar\": true, \"badgeStrokeHidden\": true\n }, { \"uid\": \"c8537421-c9c5-4461-9c9c-c15816458b46\", \"name\": \"Radio SRF 2 Kultur\", \"resourceUid\": \"srf2\", \"color\": \"#CA3DAB\" }, { \"uid\": \"dd0fa1ba-4ff6-4e1a-ab74-d7e49057d96f\", \"name\": \"Radio SRF 3\", \"resourceUid\": \"srf3\", \"color\": \"#939184\", \"titleColor\": \"#000000\", \"hasDarkStatusBar\": true, \"badgeStrokeHidden\": true }, { \"uid\": \"ee1fb348-2b6a-4958-9aac-ec6c87e190da\", \"name\": \"Radio SRF 4 News\", \"resourceUid\": \"srf4\", \"color\": \"#E31F2B\" }, { \"uid\": \"a9c5c070-8899-46c7-ac27-f04f1be902fd\", \"name\": \"Radio SRF Musikwelle\", \"resourceUid\": \"srf_musikwelle\", \"color\": \"#42A3F1\" }, { \"uid\": \"66815fe2-9008-4853-80a5-f9caaffdf3a9\", \"name\": \"Radio SRF Virus\", \"resourceUid\": \"virus\", \"color\": \"#A5FF00\", \"titleColor\": \"#000000\", \"hasDarkStatusBar\": true, \"badgeStrokeHidden\": true } ]",
- "tvChannels": "[ { \"uid\": \"23FFBE1B-65CE-4188-ADD2-C724186C2C9F\", \"name\": \"SRF 1\", \"resourceUid\": \"tv_srf1\" }, { \"uid\": \"E4D5AD08-C1E8-46A3-BB58-4875051D60D2\", \"name\": \"SRF zwei\", \"resourceUid\": \"tv_srf2\" }, { \"uid\": \"34c2819e-e715-43d7-9026-40a443152a97\", \"name\": \"SRF info\", \"resourceUid\": \"tv_srf_info\" } ]",
+ "radioChannels": "[{\"uid\":\"69e8ac16-4327-4af4-b873-fd5cd6e895a7\",\"name\":\"Radio SRF 1\",\"resourceUid\":\"srf1\",\"songsViewStyle\":\"collapsed\",\"color\":\"#F7A600\",\"secondColor\":\"#FFD651\",\"titleColor\":\"#333333\",\"hasDarkStatusBar\":true,\"badgeStrokeHidden\":true,\"numberOfLivePlaceholders\":8},{\"uid\":\"c8537421-c9c5-4461-9c9c-c15816458b46\",\"name\":\"Radio SRF 2 Kultur\",\"resourceUid\":\"srf2\",\"songsViewStyle\":\"collapsed\",\"color\":\"#CA3DAB\",\"secondColor\":\"#8C1D60\"},{\"uid\":\"dd0fa1ba-4ff6-4e1a-ab74-d7e49057d96f\",\"name\":\"Radio SRF 3\",\"resourceUid\":\"srf3\",\"songsViewStyle\":\"expanded\",\"color\":\"#464646\",\"secondColor\":\"#000000\"},{\"uid\":\"ee1fb348-2b6a-4958-9aac-ec6c87e190da\",\"name\":\"Radio SRF 4 News\",\"resourceUid\":\"srf4\",\"color\":\"#E31F2B\",\"secondColor\":\"#6A0B0C\"},{\"uid\":\"a9c5c070-8899-46c7-ac27-f04f1be902fd\",\"name\":\"Radio SRF Musikwelle\",\"resourceUid\":\"srf_musikwelle\",\"songsViewStyle\":\"expanded\",\"color\":\"#42A3F1\",\"secondColor\":\"#0066B0\"},{\"uid\":\"66815fe2-9008-4853-80a5-f9caaffdf3a9\",\"name\":\"Radio SRF Virus\",\"resourceUid\":\"virus\",\"songsViewStyle\":\"expanded\",\"color\":\"#A5FF00\",\"secondColor\":\"#BDFF44\",\"titleColor\":\"#333333\",\"hasDarkStatusBar\":true,\"badgeStrokeHidden\":true}]",
+ "tvChannels": "[{\"uid\":\"23FFBE1B-65CE-4188-ADD2-C724186C2C9F\",\"name\":\"SRF 1\",\"resourceUid\":\"tv_srf1\",\"color\":\"#C91024\",\"secondColor\":\"#8D0614\"},{\"uid\":\"E4D5AD08-C1E8-46A3-BB58-4875051D60D2\",\"name\":\"SRF zwei\",\"resourceUid\":\"tv_srf2\",\"color\":\"#FFB600\",\"secondColor\":\"#ED7004\",\"titleColor\":\"#333333\",\"hasDarkStatusBar\":true,\"badgeStrokeHidden\":true},{\"uid\":\"34c2819e-e715-43d7-9026-40a443152a97\",\"name\":\"SRF info\",\"resourceUid\":\"tv_srf_info\",\"color\":\"#AF001E\",\"secondColor\":\"#830512\"}]",
"continuousPlaybackPlayerViewTransitionDuration": 5,
"continuousPlaybackForegroundTransitionDuration": 0,
"continuousPlaybackBackgroundTransitionDuration": 0,
diff --git a/Application/Resources/Apps/Play SRF/Overrides/override_artwork_srf1.pdf b/Application/Resources/Apps/Play SRF/Overrides/override_artwork_srf1.pdf
deleted file mode 100755
index 2e9098499..000000000
Binary files a/Application/Resources/Apps/Play SRF/Overrides/override_artwork_srf1.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play SRF/Overrides/override_artwork_srf2.pdf b/Application/Resources/Apps/Play SRF/Overrides/override_artwork_srf2.pdf
deleted file mode 100755
index 32761ed6a..000000000
Binary files a/Application/Resources/Apps/Play SRF/Overrides/override_artwork_srf2.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play SRF/Overrides/override_artwork_srf3.pdf b/Application/Resources/Apps/Play SRF/Overrides/override_artwork_srf3.pdf
deleted file mode 100755
index fe1f0b0b5..000000000
Binary files a/Application/Resources/Apps/Play SRF/Overrides/override_artwork_srf3.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play SRF/Overrides/override_artwork_srf4.pdf b/Application/Resources/Apps/Play SRF/Overrides/override_artwork_srf4.pdf
deleted file mode 100755
index 50b94e4ff..000000000
Binary files a/Application/Resources/Apps/Play SRF/Overrides/override_artwork_srf4.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play SRF/Overrides/override_artwork_srf_musikwelle.pdf b/Application/Resources/Apps/Play SRF/Overrides/override_artwork_srf_musikwelle.pdf
deleted file mode 100755
index 98367ae6c..000000000
Binary files a/Application/Resources/Apps/Play SRF/Overrides/override_artwork_srf_musikwelle.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play SRF/Overrides/override_artwork_tv_srf1.pdf b/Application/Resources/Apps/Play SRF/Overrides/override_artwork_tv_srf1.pdf
deleted file mode 100755
index 4bd94fedc..000000000
Binary files a/Application/Resources/Apps/Play SRF/Overrides/override_artwork_tv_srf1.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play SRF/Overrides/override_artwork_tv_srf2.pdf b/Application/Resources/Apps/Play SRF/Overrides/override_artwork_tv_srf2.pdf
deleted file mode 100755
index 4a43ddd56..000000000
Binary files a/Application/Resources/Apps/Play SRF/Overrides/override_artwork_tv_srf2.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play SRF/Overrides/override_artwork_tv_srf_info.pdf b/Application/Resources/Apps/Play SRF/Overrides/override_artwork_tv_srf_info.pdf
deleted file mode 100755
index fc84c2929..000000000
Binary files a/Application/Resources/Apps/Play SRF/Overrides/override_artwork_tv_srf_info.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play SRF/Overrides/override_artwork_virus.pdf b/Application/Resources/Apps/Play SRF/Overrides/override_artwork_virus.pdf
deleted file mode 100644
index 584a32c68..000000000
Binary files a/Application/Resources/Apps/Play SRF/Overrides/override_artwork_virus.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play SRF/Overrides/override_default_srf1.pdf b/Application/Resources/Apps/Play SRF/Overrides/override_default_srf1.pdf
deleted file mode 100755
index d96596c95..000000000
Binary files a/Application/Resources/Apps/Play SRF/Overrides/override_default_srf1.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play SRF/Overrides/override_default_srf2.pdf b/Application/Resources/Apps/Play SRF/Overrides/override_default_srf2.pdf
deleted file mode 100755
index 352253113..000000000
Binary files a/Application/Resources/Apps/Play SRF/Overrides/override_default_srf2.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play SRF/Overrides/override_default_srf3.pdf b/Application/Resources/Apps/Play SRF/Overrides/override_default_srf3.pdf
deleted file mode 100755
index 046dc1488..000000000
Binary files a/Application/Resources/Apps/Play SRF/Overrides/override_default_srf3.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play SRF/Overrides/override_default_srf4.pdf b/Application/Resources/Apps/Play SRF/Overrides/override_default_srf4.pdf
deleted file mode 100755
index e74b4bba9..000000000
Binary files a/Application/Resources/Apps/Play SRF/Overrides/override_default_srf4.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play SRF/Overrides/override_default_srf_musikwelle.pdf b/Application/Resources/Apps/Play SRF/Overrides/override_default_srf_musikwelle.pdf
deleted file mode 100755
index 75683f414..000000000
Binary files a/Application/Resources/Apps/Play SRF/Overrides/override_default_srf_musikwelle.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play SRF/Overrides/override_default_tv_srf1.pdf b/Application/Resources/Apps/Play SRF/Overrides/override_default_tv_srf1.pdf
deleted file mode 100755
index 08db09285..000000000
Binary files a/Application/Resources/Apps/Play SRF/Overrides/override_default_tv_srf1.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play SRF/Overrides/override_default_tv_srf2.pdf b/Application/Resources/Apps/Play SRF/Overrides/override_default_tv_srf2.pdf
deleted file mode 100755
index 3088d8532..000000000
Binary files a/Application/Resources/Apps/Play SRF/Overrides/override_default_tv_srf2.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play SRF/Overrides/override_default_tv_srf_info.pdf b/Application/Resources/Apps/Play SRF/Overrides/override_default_tv_srf_info.pdf
deleted file mode 100755
index 4153aef7a..000000000
Binary files a/Application/Resources/Apps/Play SRF/Overrides/override_default_tv_srf_info.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play SRF/Overrides/override_default_virus.pdf b/Application/Resources/Apps/Play SRF/Overrides/override_default_virus.pdf
deleted file mode 100644
index a9ec80a1b..000000000
Binary files a/Application/Resources/Apps/Play SRF/Overrides/override_default_virus.pdf and /dev/null differ
diff --git a/Application/Resources/Apps/Play SRF/de.lproj/Accessibility.strings b/Application/Resources/Apps/Play SRF/de.lproj/Accessibility.strings
index eed75c80f..4415a55ad 100755
--- a/Application/Resources/Apps/Play SRF/de.lproj/Accessibility.strings
+++ b/Application/Resources/Apps/Play SRF/de.lproj/Accessibility.strings
@@ -1,6 +1,9 @@
/* Date at time label to spell a date and time value. */
"%1$@ at %2$@" = "%1$@ um %2$@";
+/* Song description. First placeholder is song title, second is artist name */
+"%1$@, by %2$@" = "%1$@, von %2$@";
+
/* Label displaying the number of listenings on the player */
"%@ listenings" = "%@ gehört";
@@ -54,9 +57,12 @@
/* Introductory title for error notifications */
"Error" = "Fehler";
-/* Text to inform a program time information, like the current program */
+/* Text providing program time information. First placeholder is the start time, second is the end time. */
"From %1$@ to %2$@" = "Von %1$@ bis %2$@";
+/* Accessibility label of the song list handle when opened */
+"Hide music list" = "Musikliste ausblenden";
+
/* Introductory title for information notifications */
"Information" = "Information";
@@ -72,9 +78,15 @@
/* Accessibility hint associated with the account header */
"Manages account information" = "Anmeldeinformationen verwalten";
+/* A more episode button label */
+"More episodes" = "Weitere Folgen";
+
/* Text displayed when a user is logged in but no information has been retrieved yet */
"My account" = "Mein Konto";
+/* Text providing next program time information. */
+"Next, at %@" = "Es folgt um %@";
+
/* Mini player label */
"Now playing: %@" = "Jetzt spielt: %@";
@@ -90,6 +102,9 @@
/* Mini player action hint */
"Opens the full screen player" = "Öffnet den Player";
+/* Show cell hint */
+"Opens topic details." = "Öffnet die Detailseite dieser Kategorie.";
+
/* Accessibility label for the multi audio badge */
"Original version" = "Originalsprache";
@@ -99,10 +114,15 @@
/* Play button label */
"Play" = "Abspielen";
-/* Media cell hint
- Mini player action hint */
+/* Program cell hint */
+"Plays from the beginning." = "Spielt es von Anfang an ab.";
+
+/* Media cell hint */
"Plays the content." = "Inhalt abspielen";
+/* Song cell hint */
+"Plays the music." = "Spielt die Musik ab.";
+
/* Title displayed in home page shows section. */
"Programmes A-Z" = "Sendungen A bis Z";
@@ -134,6 +154,9 @@
/* Share button label on player view */
"Share" = "Inhalt teilen";
+/* Accessibility label of the song list handle when closed */
+"Show music list" = "Musikliste einblenden";
+
/* Homepage header action hint */
"Shows all contents." = "Alle Inhalte anzeigen";
diff --git a/Application/Resources/Apps/Play SRF/de.lproj/Localizable.strings b/Application/Resources/Apps/Play SRF/de.lproj/Localizable.strings
index 023e58c7e..e6b5e0b12 100755
--- a/Application/Resources/Apps/Play SRF/de.lproj/Localizable.strings
+++ b/Application/Resources/Apps/Play SRF/de.lproj/Localizable.strings
@@ -74,9 +74,6 @@
Confirmation message displayed when the user is about to remove selected entries from the watch later list */
"Are you sure you want to delete the selected items?" = "Sind Sie sicher, dass Sie die ausgewählten Elemente löschen wollen?";
-/* Introductory text for next program information */
-"At %1$@: %2$@" = "Um %1$@: %2$@";
-
/* Audios option
Header for audio search results
Title displayed at the top of the audio view */
@@ -110,12 +107,6 @@
/* Settings section header */
"Content" = "Medientyp";
-/* Text displayed on live cells when no program time information is available */
-"Currently" = "Aktuell auf Sendung";
-
-/* Title in the mini player for the live stream, if the current program is known. */
-"Currently: %@" = "Jetzt: %@";
-
/* Title of a delete button
Title of the delete button in the alert view when deleting a download in the player view */
"Delete" = "Löschen";
@@ -221,7 +212,8 @@
/* Explains that a content has expired, will expire or will be available in less than one hour. Displayed in the media player view. */
"less than 1 hour" = "< 1 Stunde";
-/* Short label identifying a livestream. Display in uppercase. */
+/* Introductory text for what is currently on air, displayed on the mini player
+ Short label identifying a livestream. Display in uppercase. */
"Live" = "Live";
/* Label to present the Livestreams view
@@ -261,6 +253,9 @@
/* Most searched shows header */
"Most searched shows" = "Meistgesuchte Sendungen";
+/* Song list title */
+"Music" = "Musik";
+
/* Text displayed when a user is logged in but no information has been retrieved yet */
"My account" = "Mein Konto";
@@ -270,6 +265,9 @@
/* Title of the button to proceed to the next onboarding page */
"Next" = "Weiter";
+/* Introductory time for next program information */
+"Next, at %@" = "Es folgt um %@";
+
/* Text displayed when no media added to the watch later list */
"No content" = "Liste leer";
@@ -438,7 +436,8 @@
/* Show more button label when a link is available for broadcast information. */
"Show more" = "Mehr erfahren";
-/* Show search result header
+/* Program list header in livestream view
+ Show search result header
Shows search setting option
Shows search setting option list view title
Title label used to present radio associated shows
@@ -482,7 +481,8 @@
/* Button label to share the content being played at time (hours / minutes / seconds). */
"The content at %@" = "Start um %@";
-/* Message displayed when some content (media, show, etc.) has been copied to the clipboard */
+/* Message displayed when some content (media, show, etc.) has been copied to the clipboard
+ Message displayed when song title and artist name have been copied to the pasteboard */
"The content has been copied to the clipboard." = "Kopiert.";
/* Button label to share the entire episode being played. */
@@ -529,11 +529,15 @@
/* Period setting option */
"This week" = "Diese Woche";
+/* Introductory text for live content played with timeshift, displayed on the mini player */
+"Time-shifted" = "Zeitversetzt";
+
/* Period setting option
Title of the button to go back to the current date */
"Today" = "Heute";
/* Categories search setting option
+ Title label used to present TV topics
Title label used to present TV topics while loading. It appears if no network connection available and no cache available.
Topics search setting option list view title */
"Topics" = "Themen";
diff --git a/Application/Resources/Apps/Play SWI/en.lproj/Accessibility.strings b/Application/Resources/Apps/Play SWI/en.lproj/Accessibility.strings
index 272ee7e0d..d10f0ca3f 100755
--- a/Application/Resources/Apps/Play SWI/en.lproj/Accessibility.strings
+++ b/Application/Resources/Apps/Play SWI/en.lproj/Accessibility.strings
@@ -1,6 +1,9 @@
/* Date at time label to spell a date and time value. */
"%1$@ at %2$@" = "%1$@ at %2$@";
+/* Song description. First placeholder is song title, second is artist name */
+"%1$@, by %2$@" = "%1$@, by %2$@";
+
/* Label displaying the number of listenings on the player */
"%@ listenings" = "%@ listenings";
@@ -54,9 +57,12 @@
/* Introductory title for error notifications */
"Error" = "Error";
-/* Text to inform a program time information, like the current program */
+/* Text providing program time information. First placeholder is the start time, second is the end time. */
"From %1$@ to %2$@" = "%1$@ to %2$@";
+/* Accessibility label of the song list handle when opened */
+"Hide music list" = "Hide music list";
+
/* Introductory title for information notifications */
"Information" = "Information";
@@ -72,9 +78,15 @@
/* Accessibility hint associated with the account header */
"Manages account information" = "Manages account information";
+/* A more episode button label */
+"More episodes" = "More episodes";
+
/* Text displayed when a user is logged in but no information has been retrieved yet */
"My account" = "My account";
+/* Text providing next program time information. */
+"Next, at %@" = "Next, at %@";
+
/* Mini player label */
"Now playing: %@" = "Now playing: %@";
@@ -90,6 +102,9 @@
/* Mini player action hint */
"Opens the full screen player" = "Opens the full screen player";
+/* Show cell hint */
+"Opens topic details." = "Opens topic details.";
+
/* Accessibility label for the multi audio badge */
"Original version" = "Original version";
@@ -99,10 +114,15 @@
/* Play button label */
"Play" = "Play";
-/* Media cell hint
- Mini player action hint */
+/* Program cell hint */
+"Plays from the beginning." = "Plays from the beginning.";
+
+/* Media cell hint */
"Plays the content." = "Plays the content.";
+/* Song cell hint */
+"Plays the music." = "Plays the music.";
+
/* Title displayed in home page shows section. */
"Programmes A-Z" = "Programmes A-Z";
@@ -134,6 +154,9 @@
/* Share button label on player view */
"Share" = "Share";
+/* Accessibility label of the song list handle when closed */
+"Show music list" = "Show music list";
+
/* Homepage header action hint */
"Shows all contents." = "Shows all contents.";
diff --git a/Application/Resources/Apps/Play SWI/en.lproj/Localizable.strings b/Application/Resources/Apps/Play SWI/en.lproj/Localizable.strings
index ebcfaee71..e9a444ea5 100755
--- a/Application/Resources/Apps/Play SWI/en.lproj/Localizable.strings
+++ b/Application/Resources/Apps/Play SWI/en.lproj/Localizable.strings
@@ -74,9 +74,6 @@
Confirmation message displayed when the user is about to remove selected entries from the watch later list */
"Are you sure you want to delete the selected items?" = "Are you sure you want to delete the selected items?";
-/* Introductory text for next program information */
-"At %1$@: %2$@" = "At %1$@: %2$@";
-
/* Audios option
Header for audio search results
Title displayed at the top of the audio view */
@@ -110,12 +107,6 @@
/* Settings section header */
"Content" = "Content";
-/* Text displayed on live cells when no program time information is available */
-"Currently" = "Currently";
-
-/* Title in the mini player for the live stream, if the current program is known. */
-"Currently: %@" = "Currently: %@";
-
/* Title of a delete button
Title of the delete button in the alert view when deleting a download in the player view */
"Delete" = "Delete";
@@ -221,7 +212,8 @@
/* Explains that a content has expired, will expire or will be available in less than one hour. Displayed in the media player view. */
"less than 1 hour" = "less than 1 hour";
-/* Short label identifying a livestream. Display in uppercase. */
+/* Introductory text for what is currently on air, displayed on the mini player
+ Short label identifying a livestream. Display in uppercase. */
"Live" = "Live";
/* Label to present the Livestreams view
@@ -261,6 +253,9 @@
/* Most searched shows header */
"Most searched shows" = "Most searched topics";
+/* Song list title */
+"Music" = "Music";
+
/* Text displayed when a user is logged in but no information has been retrieved yet */
"My account" = "My account";
@@ -270,6 +265,9 @@
/* Title of the button to proceed to the next onboarding page */
"Next" = "Next";
+/* Introductory time for next program information */
+"Next, at %@" = "Next, at %@";
+
/* Text displayed when no media added to the watch later list */
"No content" = "No content";
@@ -438,7 +436,8 @@
/* Show more button label when a link is available for broadcast information. */
"Show more" = "Show more";
-/* Show search result header
+/* Program list header in livestream view
+ Show search result header
Shows search setting option
Shows search setting option list view title
Title label used to present radio associated shows
@@ -482,7 +481,8 @@
/* Button label to share the content being played at time (hours / minutes / seconds). */
"The content at %@" = "The video at %@";
-/* Message displayed when some content (media, show, etc.) has been copied to the clipboard */
+/* Message displayed when some content (media, show, etc.) has been copied to the clipboard
+ Message displayed when song title and artist name have been copied to the pasteboard */
"The content has been copied to the clipboard." = "The content has been copied to the clipboard.";
/* Button label to share the entire episode being played. */
@@ -529,11 +529,15 @@
/* Period setting option */
"This week" = "This week";
+/* Introductory text for live content played with timeshift, displayed on the mini player */
+"Time-shifted" = "Time-shifted";
+
/* Period setting option
Title of the button to go back to the current date */
"Today" = "Today";
/* Categories search setting option
+ Title label used to present TV topics
Title label used to present TV topics while loading. It appears if no network connection available and no cache available.
Topics search setting option list view title */
"Topics" = "Topics";
diff --git a/Application/Resources/Fonts/FontAwesome.otf b/Application/Resources/Fonts/FontAwesome.otf
deleted file mode 100755
index d4de13e83..000000000
Binary files a/Application/Resources/Fonts/FontAwesome.otf and /dev/null differ
diff --git a/Application/Resources/Fonts/SRGSSRType_Bd.ttf b/Application/Resources/Fonts/SRGSSRType_Bd.ttf
deleted file mode 100755
index 800d71129..000000000
Binary files a/Application/Resources/Fonts/SRGSSRType_Bd.ttf and /dev/null differ
diff --git a/Application/Resources/Fonts/SRGSSRType_BdIt.ttf b/Application/Resources/Fonts/SRGSSRType_BdIt.ttf
deleted file mode 100755
index 057096425..000000000
Binary files a/Application/Resources/Fonts/SRGSSRType_BdIt.ttf and /dev/null differ
diff --git a/Application/Resources/Fonts/SRGSSRType_He.ttf b/Application/Resources/Fonts/SRGSSRType_He.ttf
deleted file mode 100755
index 0c2e3cd28..000000000
Binary files a/Application/Resources/Fonts/SRGSSRType_He.ttf and /dev/null differ
diff --git a/Application/Resources/Fonts/SRGSSRType_It.ttf b/Application/Resources/Fonts/SRGSSRType_It.ttf
deleted file mode 100755
index e5420bd44..000000000
Binary files a/Application/Resources/Fonts/SRGSSRType_It.ttf and /dev/null differ
diff --git a/Application/Resources/Fonts/SRGSSRType_Lt.ttf b/Application/Resources/Fonts/SRGSSRType_Lt.ttf
deleted file mode 100755
index 1bbd13f1a..000000000
Binary files a/Application/Resources/Fonts/SRGSSRType_Lt.ttf and /dev/null differ
diff --git a/Application/Resources/Fonts/SRGSSRType_Md.ttf b/Application/Resources/Fonts/SRGSSRType_Md.ttf
deleted file mode 100755
index 4d56f2e4b..000000000
Binary files a/Application/Resources/Fonts/SRGSSRType_Md.ttf and /dev/null differ
diff --git a/Application/Resources/Fonts/SRGSSRType_Rg.ttf b/Application/Resources/Fonts/SRGSSRType_Rg.ttf
deleted file mode 100755
index 6bbb1af4e..000000000
Binary files a/Application/Resources/Fonts/SRGSSRType_Rg.ttf and /dev/null differ
diff --git a/Application/Resources/Fonts/SRGSSRType_Serif_Rg.ttf b/Application/Resources/Fonts/SRGSSRType_Serif_Rg.ttf
deleted file mode 100755
index 292ce771b..000000000
Binary files a/Application/Resources/Fonts/SRGSSRType_Serif_Rg.ttf and /dev/null differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/Contents.json
new file mode 100644
index 000000000..73c00596a
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-0.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-0.imageset/Contents.json
new file mode 100644
index 000000000..ef515080d
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-0.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-0.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-0@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-0@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-0.imageset/play-34-0.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-0.imageset/play-34-0.png
new file mode 100644
index 000000000..498ecb105
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-0.imageset/play-34-0.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-0.imageset/play-34-0@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-0.imageset/play-34-0@2x.png
new file mode 100644
index 000000000..2999382dc
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-0.imageset/play-34-0@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-0.imageset/play-34-0@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-0.imageset/play-34-0@3x.png
new file mode 100644
index 000000000..13bf603f3
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-0.imageset/play-34-0@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-1.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-1.imageset/Contents.json
new file mode 100644
index 000000000..897fb5189
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-1.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-1.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-1@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-1@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-1.imageset/play-34-1.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-1.imageset/play-34-1.png
new file mode 100644
index 000000000..ee5d846a1
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-1.imageset/play-34-1.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-1.imageset/play-34-1@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-1.imageset/play-34-1@2x.png
new file mode 100644
index 000000000..098e1cdd3
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-1.imageset/play-34-1@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-1.imageset/play-34-1@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-1.imageset/play-34-1@3x.png
new file mode 100644
index 000000000..957d0d95b
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-1.imageset/play-34-1@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-10.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-10.imageset/Contents.json
new file mode 100644
index 000000000..4c2cb6b2a
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-10.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-10.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-10@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-10@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-10.imageset/play-34-10.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-10.imageset/play-34-10.png
new file mode 100644
index 000000000..e6007ab91
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-10.imageset/play-34-10.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-10.imageset/play-34-10@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-10.imageset/play-34-10@2x.png
new file mode 100644
index 000000000..1729b1061
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-10.imageset/play-34-10@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-10.imageset/play-34-10@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-10.imageset/play-34-10@3x.png
new file mode 100644
index 000000000..996f2e527
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-10.imageset/play-34-10@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-11.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-11.imageset/Contents.json
new file mode 100644
index 000000000..574fd8ce4
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-11.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-11.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-11@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-11@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-11.imageset/play-34-11.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-11.imageset/play-34-11.png
new file mode 100644
index 000000000..0aae7a268
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-11.imageset/play-34-11.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-11.imageset/play-34-11@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-11.imageset/play-34-11@2x.png
new file mode 100644
index 000000000..180449778
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-11.imageset/play-34-11@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-11.imageset/play-34-11@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-11.imageset/play-34-11@3x.png
new file mode 100644
index 000000000..2ed08f120
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-11.imageset/play-34-11@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-12.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-12.imageset/Contents.json
new file mode 100644
index 000000000..13f3f282e
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-12.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-12.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-12@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-12@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-12.imageset/play-34-12.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-12.imageset/play-34-12.png
new file mode 100644
index 000000000..b48b814f8
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-12.imageset/play-34-12.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-12.imageset/play-34-12@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-12.imageset/play-34-12@2x.png
new file mode 100644
index 000000000..824d80411
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-12.imageset/play-34-12@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-12.imageset/play-34-12@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-12.imageset/play-34-12@3x.png
new file mode 100644
index 000000000..e812ddf8e
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-12.imageset/play-34-12@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-13.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-13.imageset/Contents.json
new file mode 100644
index 000000000..da50076d4
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-13.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-13.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-13@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-13@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-13.imageset/play-34-13.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-13.imageset/play-34-13.png
new file mode 100644
index 000000000..cf0ce0617
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-13.imageset/play-34-13.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-13.imageset/play-34-13@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-13.imageset/play-34-13@2x.png
new file mode 100644
index 000000000..6f048f4e4
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-13.imageset/play-34-13@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-13.imageset/play-34-13@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-13.imageset/play-34-13@3x.png
new file mode 100644
index 000000000..cc204d995
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-13.imageset/play-34-13@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-14.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-14.imageset/Contents.json
new file mode 100644
index 000000000..4e9d98e5a
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-14.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-14.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-14@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-14@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-14.imageset/play-34-14.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-14.imageset/play-34-14.png
new file mode 100644
index 000000000..20effdb24
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-14.imageset/play-34-14.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-14.imageset/play-34-14@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-14.imageset/play-34-14@2x.png
new file mode 100644
index 000000000..970699631
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-14.imageset/play-34-14@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-14.imageset/play-34-14@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-14.imageset/play-34-14@3x.png
new file mode 100644
index 000000000..a3138a30a
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-14.imageset/play-34-14@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-15.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-15.imageset/Contents.json
new file mode 100644
index 000000000..c34e7870b
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-15.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-15.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-15@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-15@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-15.imageset/play-34-15.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-15.imageset/play-34-15.png
new file mode 100644
index 000000000..80563e41c
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-15.imageset/play-34-15.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-15.imageset/play-34-15@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-15.imageset/play-34-15@2x.png
new file mode 100644
index 000000000..d30483651
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-15.imageset/play-34-15@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-15.imageset/play-34-15@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-15.imageset/play-34-15@3x.png
new file mode 100644
index 000000000..7365fd32f
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-15.imageset/play-34-15@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-16.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-16.imageset/Contents.json
new file mode 100644
index 000000000..c210b6275
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-16.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-16.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-16@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-16@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-16.imageset/play-34-16.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-16.imageset/play-34-16.png
new file mode 100644
index 000000000..2d1c393c9
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-16.imageset/play-34-16.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-16.imageset/play-34-16@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-16.imageset/play-34-16@2x.png
new file mode 100644
index 000000000..b2026b271
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-16.imageset/play-34-16@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-16.imageset/play-34-16@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-16.imageset/play-34-16@3x.png
new file mode 100644
index 000000000..be0a66f0c
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-16.imageset/play-34-16@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-17.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-17.imageset/Contents.json
new file mode 100644
index 000000000..a9de4d800
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-17.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-17.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-17@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-17@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-17.imageset/play-34-17.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-17.imageset/play-34-17.png
new file mode 100644
index 000000000..f2d7622e1
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-17.imageset/play-34-17.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-17.imageset/play-34-17@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-17.imageset/play-34-17@2x.png
new file mode 100644
index 000000000..e37493008
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-17.imageset/play-34-17@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-17.imageset/play-34-17@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-17.imageset/play-34-17@3x.png
new file mode 100644
index 000000000..6706df181
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-17.imageset/play-34-17@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-18.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-18.imageset/Contents.json
new file mode 100644
index 000000000..67db7c214
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-18.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-18.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-18@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-18@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-18.imageset/play-34-18.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-18.imageset/play-34-18.png
new file mode 100644
index 000000000..394099ff7
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-18.imageset/play-34-18.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-18.imageset/play-34-18@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-18.imageset/play-34-18@2x.png
new file mode 100644
index 000000000..564c938dd
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-18.imageset/play-34-18@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-18.imageset/play-34-18@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-18.imageset/play-34-18@3x.png
new file mode 100644
index 000000000..eef9ddbb1
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-18.imageset/play-34-18@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-19.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-19.imageset/Contents.json
new file mode 100644
index 000000000..d97f746ac
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-19.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-19.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-19@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-19@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-19.imageset/play-34-19.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-19.imageset/play-34-19.png
new file mode 100644
index 000000000..eab69a804
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-19.imageset/play-34-19.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-19.imageset/play-34-19@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-19.imageset/play-34-19@2x.png
new file mode 100644
index 000000000..a09616d1b
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-19.imageset/play-34-19@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-19.imageset/play-34-19@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-19.imageset/play-34-19@3x.png
new file mode 100644
index 000000000..f54ee8f22
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-19.imageset/play-34-19@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-2.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-2.imageset/Contents.json
new file mode 100644
index 000000000..25861cbce
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-2.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-2.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-2@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-2@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-2.imageset/play-34-2.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-2.imageset/play-34-2.png
new file mode 100644
index 000000000..cec5c3fad
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-2.imageset/play-34-2.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-2.imageset/play-34-2@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-2.imageset/play-34-2@2x.png
new file mode 100644
index 000000000..a7dd0a4f2
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-2.imageset/play-34-2@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-2.imageset/play-34-2@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-2.imageset/play-34-2@3x.png
new file mode 100644
index 000000000..3b5f5a03b
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-2.imageset/play-34-2@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-20.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-20.imageset/Contents.json
new file mode 100644
index 000000000..8560406ce
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-20.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-20.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-20@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-20@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-20.imageset/play-34-20.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-20.imageset/play-34-20.png
new file mode 100644
index 000000000..e062f06af
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-20.imageset/play-34-20.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-20.imageset/play-34-20@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-20.imageset/play-34-20@2x.png
new file mode 100644
index 000000000..e3464b8fc
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-20.imageset/play-34-20@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-20.imageset/play-34-20@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-20.imageset/play-34-20@3x.png
new file mode 100644
index 000000000..6257b2bb7
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-20.imageset/play-34-20@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-21.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-21.imageset/Contents.json
new file mode 100644
index 000000000..b1d8becc6
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-21.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-21.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-21@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-21@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-21.imageset/play-34-21.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-21.imageset/play-34-21.png
new file mode 100644
index 000000000..8fd66aaf9
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-21.imageset/play-34-21.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-21.imageset/play-34-21@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-21.imageset/play-34-21@2x.png
new file mode 100644
index 000000000..696f4b11d
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-21.imageset/play-34-21@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-21.imageset/play-34-21@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-21.imageset/play-34-21@3x.png
new file mode 100644
index 000000000..4dcb0e14e
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-21.imageset/play-34-21@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-22.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-22.imageset/Contents.json
new file mode 100644
index 000000000..f97c87c33
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-22.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-22.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-22@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-22@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-22.imageset/play-34-22.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-22.imageset/play-34-22.png
new file mode 100644
index 000000000..942d523b8
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-22.imageset/play-34-22.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-22.imageset/play-34-22@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-22.imageset/play-34-22@2x.png
new file mode 100644
index 000000000..2a3f1553c
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-22.imageset/play-34-22@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-22.imageset/play-34-22@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-22.imageset/play-34-22@3x.png
new file mode 100644
index 000000000..369152b45
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-22.imageset/play-34-22@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-23.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-23.imageset/Contents.json
new file mode 100644
index 000000000..65e580fb9
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-23.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-23.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-23@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-23@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-23.imageset/play-34-23.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-23.imageset/play-34-23.png
new file mode 100644
index 000000000..2391bb86f
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-23.imageset/play-34-23.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-23.imageset/play-34-23@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-23.imageset/play-34-23@2x.png
new file mode 100644
index 000000000..f0a47004f
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-23.imageset/play-34-23@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-23.imageset/play-34-23@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-23.imageset/play-34-23@3x.png
new file mode 100644
index 000000000..4fac8daff
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-23.imageset/play-34-23@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-24.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-24.imageset/Contents.json
new file mode 100644
index 000000000..cd9c13372
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-24.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-24.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-24@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-24@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-24.imageset/play-34-24.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-24.imageset/play-34-24.png
new file mode 100644
index 000000000..cc5a41345
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-24.imageset/play-34-24.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-24.imageset/play-34-24@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-24.imageset/play-34-24@2x.png
new file mode 100644
index 000000000..227dd1e5e
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-24.imageset/play-34-24@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-24.imageset/play-34-24@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-24.imageset/play-34-24@3x.png
new file mode 100644
index 000000000..18f0c4c63
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-24.imageset/play-34-24@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-25.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-25.imageset/Contents.json
new file mode 100644
index 000000000..0598f7657
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-25.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-25.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-25@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-25@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-25.imageset/play-34-25.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-25.imageset/play-34-25.png
new file mode 100644
index 000000000..32a278868
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-25.imageset/play-34-25.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-25.imageset/play-34-25@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-25.imageset/play-34-25@2x.png
new file mode 100644
index 000000000..dec892581
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-25.imageset/play-34-25@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-25.imageset/play-34-25@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-25.imageset/play-34-25@3x.png
new file mode 100644
index 000000000..cf2019fb7
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-25.imageset/play-34-25@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-26.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-26.imageset/Contents.json
new file mode 100644
index 000000000..1801f392a
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-26.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-26.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-26@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-26@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-26.imageset/play-34-26.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-26.imageset/play-34-26.png
new file mode 100644
index 000000000..d1dbe69b6
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-26.imageset/play-34-26.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-26.imageset/play-34-26@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-26.imageset/play-34-26@2x.png
new file mode 100644
index 000000000..207da1fe8
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-26.imageset/play-34-26@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-26.imageset/play-34-26@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-26.imageset/play-34-26@3x.png
new file mode 100644
index 000000000..83984bc37
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-26.imageset/play-34-26@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-27.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-27.imageset/Contents.json
new file mode 100644
index 000000000..a7a882314
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-27.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-27.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-27@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-27@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-27.imageset/play-34-27.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-27.imageset/play-34-27.png
new file mode 100644
index 000000000..f986d324c
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-27.imageset/play-34-27.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-27.imageset/play-34-27@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-27.imageset/play-34-27@2x.png
new file mode 100644
index 000000000..dafce8459
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-27.imageset/play-34-27@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-27.imageset/play-34-27@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-27.imageset/play-34-27@3x.png
new file mode 100644
index 000000000..f8a8a0b7b
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-27.imageset/play-34-27@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-28.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-28.imageset/Contents.json
new file mode 100644
index 000000000..ad5f4b5ad
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-28.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-28.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-28@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-28@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-28.imageset/play-34-28.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-28.imageset/play-34-28.png
new file mode 100644
index 000000000..471fceae5
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-28.imageset/play-34-28.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-28.imageset/play-34-28@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-28.imageset/play-34-28@2x.png
new file mode 100644
index 000000000..eee0d422c
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-28.imageset/play-34-28@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-28.imageset/play-34-28@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-28.imageset/play-34-28@3x.png
new file mode 100644
index 000000000..c7877b95c
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-28.imageset/play-34-28@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-29.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-29.imageset/Contents.json
new file mode 100644
index 000000000..9d21e7a54
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-29.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-29.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-29@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-29@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-29.imageset/play-34-29.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-29.imageset/play-34-29.png
new file mode 100644
index 000000000..9dbbd3411
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-29.imageset/play-34-29.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-29.imageset/play-34-29@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-29.imageset/play-34-29@2x.png
new file mode 100644
index 000000000..6a2a0627e
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-29.imageset/play-34-29@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-29.imageset/play-34-29@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-29.imageset/play-34-29@3x.png
new file mode 100644
index 000000000..69a4f1a7a
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-29.imageset/play-34-29@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-3.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-3.imageset/Contents.json
new file mode 100644
index 000000000..4aa3a1f43
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-3.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-3.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-3@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-3@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-3.imageset/play-34-3.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-3.imageset/play-34-3.png
new file mode 100644
index 000000000..dc8565963
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-3.imageset/play-34-3.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-3.imageset/play-34-3@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-3.imageset/play-34-3@2x.png
new file mode 100644
index 000000000..72e804d9a
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-3.imageset/play-34-3@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-3.imageset/play-34-3@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-3.imageset/play-34-3@3x.png
new file mode 100644
index 000000000..66d3e67de
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-3.imageset/play-34-3@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-30.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-30.imageset/Contents.json
new file mode 100644
index 000000000..e3b1c143e
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-30.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-30.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-30@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-30@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-30.imageset/play-34-30.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-30.imageset/play-34-30.png
new file mode 100644
index 000000000..1f8532c77
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-30.imageset/play-34-30.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-30.imageset/play-34-30@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-30.imageset/play-34-30@2x.png
new file mode 100644
index 000000000..bf3781c82
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-30.imageset/play-34-30@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-30.imageset/play-34-30@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-30.imageset/play-34-30@3x.png
new file mode 100644
index 000000000..9c88e0caf
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-30.imageset/play-34-30@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-31.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-31.imageset/Contents.json
new file mode 100644
index 000000000..103bdaaa2
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-31.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-31.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-31@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-31@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-31.imageset/play-34-31.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-31.imageset/play-34-31.png
new file mode 100644
index 000000000..d6f8b73f7
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-31.imageset/play-34-31.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-31.imageset/play-34-31@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-31.imageset/play-34-31@2x.png
new file mode 100644
index 000000000..1985a3f8a
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-31.imageset/play-34-31@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-31.imageset/play-34-31@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-31.imageset/play-34-31@3x.png
new file mode 100644
index 000000000..fe0cab1a8
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-31.imageset/play-34-31@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-32.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-32.imageset/Contents.json
new file mode 100644
index 000000000..8e612d710
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-32.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-32.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-32@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-32@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-32.imageset/play-34-32.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-32.imageset/play-34-32.png
new file mode 100644
index 000000000..8eb6c713c
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-32.imageset/play-34-32.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-32.imageset/play-34-32@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-32.imageset/play-34-32@2x.png
new file mode 100644
index 000000000..bab4af7d6
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-32.imageset/play-34-32@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-32.imageset/play-34-32@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-32.imageset/play-34-32@3x.png
new file mode 100644
index 000000000..f1c9f9929
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-32.imageset/play-34-32@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-33.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-33.imageset/Contents.json
new file mode 100644
index 000000000..a296a5046
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-33.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-33.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-33@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-33@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-33.imageset/play-34-33.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-33.imageset/play-34-33.png
new file mode 100644
index 000000000..784058532
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-33.imageset/play-34-33.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-33.imageset/play-34-33@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-33.imageset/play-34-33@2x.png
new file mode 100644
index 000000000..eccb31b87
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-33.imageset/play-34-33@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-33.imageset/play-34-33@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-33.imageset/play-34-33@3x.png
new file mode 100644
index 000000000..b856a5d74
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-33.imageset/play-34-33@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-34.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-34.imageset/Contents.json
new file mode 100644
index 000000000..7c2ca7823
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-34.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-34.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-34@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-34@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-34.imageset/play-34-34.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-34.imageset/play-34-34.png
new file mode 100644
index 000000000..04b62f8cd
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-34.imageset/play-34-34.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-34.imageset/play-34-34@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-34.imageset/play-34-34@2x.png
new file mode 100644
index 000000000..81f87dc0a
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-34.imageset/play-34-34@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-34.imageset/play-34-34@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-34.imageset/play-34-34@3x.png
new file mode 100644
index 000000000..6d91bb7db
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-34.imageset/play-34-34@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-35.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-35.imageset/Contents.json
new file mode 100644
index 000000000..d61bd8ebd
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-35.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-35.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-35@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-35@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-35.imageset/play-34-35.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-35.imageset/play-34-35.png
new file mode 100644
index 000000000..5717b0adf
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-35.imageset/play-34-35.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-35.imageset/play-34-35@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-35.imageset/play-34-35@2x.png
new file mode 100644
index 000000000..ac6d89a9d
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-35.imageset/play-34-35@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-35.imageset/play-34-35@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-35.imageset/play-34-35@3x.png
new file mode 100644
index 000000000..017c0bad6
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-35.imageset/play-34-35@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-36.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-36.imageset/Contents.json
new file mode 100644
index 000000000..43efb79fa
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-36.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-36.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-36@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-36@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-36.imageset/play-34-36.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-36.imageset/play-34-36.png
new file mode 100644
index 000000000..4efc4c081
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-36.imageset/play-34-36.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-36.imageset/play-34-36@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-36.imageset/play-34-36@2x.png
new file mode 100644
index 000000000..181ff6b2a
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-36.imageset/play-34-36@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-36.imageset/play-34-36@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-36.imageset/play-34-36@3x.png
new file mode 100644
index 000000000..2ce83ceb5
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-36.imageset/play-34-36@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-37.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-37.imageset/Contents.json
new file mode 100644
index 000000000..eed344dc3
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-37.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-37.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-37@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-37@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-37.imageset/play-34-37.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-37.imageset/play-34-37.png
new file mode 100644
index 000000000..498ecb105
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-37.imageset/play-34-37.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-37.imageset/play-34-37@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-37.imageset/play-34-37@2x.png
new file mode 100644
index 000000000..2999382dc
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-37.imageset/play-34-37@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-37.imageset/play-34-37@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-37.imageset/play-34-37@3x.png
new file mode 100644
index 000000000..13bf603f3
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-37.imageset/play-34-37@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-4.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-4.imageset/Contents.json
new file mode 100644
index 000000000..0867020a8
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-4.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-4.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-4@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-4@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-4.imageset/play-34-4.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-4.imageset/play-34-4.png
new file mode 100644
index 000000000..a8d771b89
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-4.imageset/play-34-4.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-4.imageset/play-34-4@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-4.imageset/play-34-4@2x.png
new file mode 100644
index 000000000..12a49aa23
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-4.imageset/play-34-4@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-4.imageset/play-34-4@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-4.imageset/play-34-4@3x.png
new file mode 100644
index 000000000..08e62b729
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-4.imageset/play-34-4@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-5.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-5.imageset/Contents.json
new file mode 100644
index 000000000..6490ff49f
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-5.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-5.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-5@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-5@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-5.imageset/play-34-5.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-5.imageset/play-34-5.png
new file mode 100644
index 000000000..2a89123b6
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-5.imageset/play-34-5.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-5.imageset/play-34-5@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-5.imageset/play-34-5@2x.png
new file mode 100644
index 000000000..c5d2ab8cc
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-5.imageset/play-34-5@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-5.imageset/play-34-5@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-5.imageset/play-34-5@3x.png
new file mode 100644
index 000000000..60e3a0d2f
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-5.imageset/play-34-5@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-6.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-6.imageset/Contents.json
new file mode 100644
index 000000000..839b7ad23
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-6.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-6.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-6@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-6@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-6.imageset/play-34-6.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-6.imageset/play-34-6.png
new file mode 100644
index 000000000..d5b17087e
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-6.imageset/play-34-6.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-6.imageset/play-34-6@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-6.imageset/play-34-6@2x.png
new file mode 100644
index 000000000..2f6e3213d
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-6.imageset/play-34-6@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-6.imageset/play-34-6@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-6.imageset/play-34-6@3x.png
new file mode 100644
index 000000000..2596dfc94
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-6.imageset/play-34-6@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-7.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-7.imageset/Contents.json
new file mode 100644
index 000000000..1438a4564
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-7.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-7.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-7@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-7@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-7.imageset/play-34-7.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-7.imageset/play-34-7.png
new file mode 100644
index 000000000..4f5cf148c
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-7.imageset/play-34-7.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-7.imageset/play-34-7@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-7.imageset/play-34-7@2x.png
new file mode 100644
index 000000000..1c568ac45
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-7.imageset/play-34-7@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-7.imageset/play-34-7@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-7.imageset/play-34-7@3x.png
new file mode 100644
index 000000000..9d4b0be0a
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-7.imageset/play-34-7@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-8.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-8.imageset/Contents.json
new file mode 100644
index 000000000..fe90f3fa5
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-8.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-8.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-8@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-8@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-8.imageset/play-34-8.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-8.imageset/play-34-8.png
new file mode 100644
index 000000000..4d100c32a
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-8.imageset/play-34-8.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-8.imageset/play-34-8@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-8.imageset/play-34-8@2x.png
new file mode 100644
index 000000000..ff18a2028
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-8.imageset/play-34-8@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-8.imageset/play-34-8@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-8.imageset/play-34-8@3x.png
new file mode 100644
index 000000000..0492ba654
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-8.imageset/play-34-8@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-9.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-9.imageset/Contents.json
new file mode 100644
index 000000000..4d34c7f58
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-9.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "play-34-9.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play-34-9@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "play-34-9@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-9.imageset/play-34-9.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-9.imageset/play-34-9.png
new file mode 100644
index 000000000..857d086a2
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-9.imageset/play-34-9.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-9.imageset/play-34-9@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-9.imageset/play-34-9@2x.png
new file mode 100644
index 000000000..c83fc301c
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-9.imageset/play-34-9@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-9.imageset/play-34-9@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-9.imageset/play-34-9@3x.png
new file mode 100644
index 000000000..462a2de29
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Play-34/play-34-9.imageset/play-34-9@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/Contents.json
new file mode 100644
index 000000000..73c00596a
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-0.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-0.imageset/Contents.json
new file mode 100644
index 000000000..5d35661de
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-0.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-0.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-0@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-0@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-0.imageset/waveform-34-0.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-0.imageset/waveform-34-0.png
new file mode 100644
index 000000000..0c4a54265
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-0.imageset/waveform-34-0.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-0.imageset/waveform-34-0@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-0.imageset/waveform-34-0@2x.png
new file mode 100644
index 000000000..71deee671
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-0.imageset/waveform-34-0@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-0.imageset/waveform-34-0@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-0.imageset/waveform-34-0@3x.png
new file mode 100644
index 000000000..2fe95bd21
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-0.imageset/waveform-34-0@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-1.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-1.imageset/Contents.json
new file mode 100644
index 000000000..dc234f68b
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-1.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-1.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-1@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-1@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-1.imageset/waveform-34-1.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-1.imageset/waveform-34-1.png
new file mode 100644
index 000000000..8026780e2
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-1.imageset/waveform-34-1.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-1.imageset/waveform-34-1@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-1.imageset/waveform-34-1@2x.png
new file mode 100644
index 000000000..e34aa0bbc
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-1.imageset/waveform-34-1@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-1.imageset/waveform-34-1@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-1.imageset/waveform-34-1@3x.png
new file mode 100644
index 000000000..91d6c2055
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-1.imageset/waveform-34-1@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-10.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-10.imageset/Contents.json
new file mode 100644
index 000000000..d0870ac28
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-10.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-10.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-10@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-10@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-10.imageset/waveform-34-10.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-10.imageset/waveform-34-10.png
new file mode 100644
index 000000000..a99c09055
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-10.imageset/waveform-34-10.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-10.imageset/waveform-34-10@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-10.imageset/waveform-34-10@2x.png
new file mode 100644
index 000000000..1c2a13899
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-10.imageset/waveform-34-10@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-10.imageset/waveform-34-10@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-10.imageset/waveform-34-10@3x.png
new file mode 100644
index 000000000..36a95e2c7
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-10.imageset/waveform-34-10@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-11.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-11.imageset/Contents.json
new file mode 100644
index 000000000..42a1e2d0c
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-11.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-11.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-11@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-11@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-11.imageset/waveform-34-11.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-11.imageset/waveform-34-11.png
new file mode 100644
index 000000000..0b93e64ae
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-11.imageset/waveform-34-11.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-11.imageset/waveform-34-11@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-11.imageset/waveform-34-11@2x.png
new file mode 100644
index 000000000..f2276bd4b
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-11.imageset/waveform-34-11@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-11.imageset/waveform-34-11@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-11.imageset/waveform-34-11@3x.png
new file mode 100644
index 000000000..747340178
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-11.imageset/waveform-34-11@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-12.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-12.imageset/Contents.json
new file mode 100644
index 000000000..fa2b36853
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-12.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-12.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-12@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-12@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-12.imageset/waveform-34-12.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-12.imageset/waveform-34-12.png
new file mode 100644
index 000000000..0638d2d13
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-12.imageset/waveform-34-12.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-12.imageset/waveform-34-12@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-12.imageset/waveform-34-12@2x.png
new file mode 100644
index 000000000..a9aab9241
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-12.imageset/waveform-34-12@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-12.imageset/waveform-34-12@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-12.imageset/waveform-34-12@3x.png
new file mode 100644
index 000000000..08873c170
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-12.imageset/waveform-34-12@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-13.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-13.imageset/Contents.json
new file mode 100644
index 000000000..0bcf296e1
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-13.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-13.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-13@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-13@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-13.imageset/waveform-34-13.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-13.imageset/waveform-34-13.png
new file mode 100644
index 000000000..671adfe00
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-13.imageset/waveform-34-13.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-13.imageset/waveform-34-13@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-13.imageset/waveform-34-13@2x.png
new file mode 100644
index 000000000..c4bd13461
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-13.imageset/waveform-34-13@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-13.imageset/waveform-34-13@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-13.imageset/waveform-34-13@3x.png
new file mode 100644
index 000000000..a9777b8ae
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-13.imageset/waveform-34-13@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-14.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-14.imageset/Contents.json
new file mode 100644
index 000000000..ef0bc9b88
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-14.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-14.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-14@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-14@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-14.imageset/waveform-34-14.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-14.imageset/waveform-34-14.png
new file mode 100644
index 000000000..bf57311ac
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-14.imageset/waveform-34-14.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-14.imageset/waveform-34-14@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-14.imageset/waveform-34-14@2x.png
new file mode 100644
index 000000000..db5149399
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-14.imageset/waveform-34-14@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-14.imageset/waveform-34-14@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-14.imageset/waveform-34-14@3x.png
new file mode 100644
index 000000000..b83bd467f
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-14.imageset/waveform-34-14@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-15.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-15.imageset/Contents.json
new file mode 100644
index 000000000..6b824f97a
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-15.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-15.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-15@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-15@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-15.imageset/waveform-34-15.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-15.imageset/waveform-34-15.png
new file mode 100644
index 000000000..520f11324
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-15.imageset/waveform-34-15.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-15.imageset/waveform-34-15@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-15.imageset/waveform-34-15@2x.png
new file mode 100644
index 000000000..3848d4847
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-15.imageset/waveform-34-15@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-15.imageset/waveform-34-15@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-15.imageset/waveform-34-15@3x.png
new file mode 100644
index 000000000..18d087cde
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-15.imageset/waveform-34-15@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-16.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-16.imageset/Contents.json
new file mode 100644
index 000000000..9bb049e74
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-16.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-16.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-16@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-16@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-16.imageset/waveform-34-16.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-16.imageset/waveform-34-16.png
new file mode 100644
index 000000000..ad1478bec
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-16.imageset/waveform-34-16.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-16.imageset/waveform-34-16@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-16.imageset/waveform-34-16@2x.png
new file mode 100644
index 000000000..a6fd6b48d
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-16.imageset/waveform-34-16@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-16.imageset/waveform-34-16@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-16.imageset/waveform-34-16@3x.png
new file mode 100644
index 000000000..d2fcb82d6
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-16.imageset/waveform-34-16@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-17.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-17.imageset/Contents.json
new file mode 100644
index 000000000..f6c890d61
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-17.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-17.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-17@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-17@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-17.imageset/waveform-34-17.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-17.imageset/waveform-34-17.png
new file mode 100644
index 000000000..ba0715179
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-17.imageset/waveform-34-17.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-17.imageset/waveform-34-17@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-17.imageset/waveform-34-17@2x.png
new file mode 100644
index 000000000..93e55553f
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-17.imageset/waveform-34-17@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-17.imageset/waveform-34-17@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-17.imageset/waveform-34-17@3x.png
new file mode 100644
index 000000000..e1cd7afdf
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-17.imageset/waveform-34-17@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-18.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-18.imageset/Contents.json
new file mode 100644
index 000000000..4b12a1c08
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-18.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-18.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-18@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-18@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-18.imageset/waveform-34-18.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-18.imageset/waveform-34-18.png
new file mode 100644
index 000000000..3ea33add3
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-18.imageset/waveform-34-18.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-18.imageset/waveform-34-18@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-18.imageset/waveform-34-18@2x.png
new file mode 100644
index 000000000..478c43066
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-18.imageset/waveform-34-18@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-18.imageset/waveform-34-18@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-18.imageset/waveform-34-18@3x.png
new file mode 100644
index 000000000..2ce7d3e8b
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-18.imageset/waveform-34-18@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-19.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-19.imageset/Contents.json
new file mode 100644
index 000000000..9a7cbfa33
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-19.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-19.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-19@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-19@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-19.imageset/waveform-34-19.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-19.imageset/waveform-34-19.png
new file mode 100644
index 000000000..8a339079a
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-19.imageset/waveform-34-19.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-19.imageset/waveform-34-19@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-19.imageset/waveform-34-19@2x.png
new file mode 100644
index 000000000..7c4099e1c
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-19.imageset/waveform-34-19@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-19.imageset/waveform-34-19@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-19.imageset/waveform-34-19@3x.png
new file mode 100644
index 000000000..d0f563cee
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-19.imageset/waveform-34-19@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-2.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-2.imageset/Contents.json
new file mode 100644
index 000000000..d7a0721e2
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-2.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-2.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-2@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-2@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-2.imageset/waveform-34-2.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-2.imageset/waveform-34-2.png
new file mode 100644
index 000000000..73a191504
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-2.imageset/waveform-34-2.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-2.imageset/waveform-34-2@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-2.imageset/waveform-34-2@2x.png
new file mode 100644
index 000000000..34fa32740
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-2.imageset/waveform-34-2@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-2.imageset/waveform-34-2@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-2.imageset/waveform-34-2@3x.png
new file mode 100644
index 000000000..a5c291267
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-2.imageset/waveform-34-2@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-20.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-20.imageset/Contents.json
new file mode 100644
index 000000000..c7f113031
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-20.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-20.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-20@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-20@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-20.imageset/waveform-34-20.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-20.imageset/waveform-34-20.png
new file mode 100644
index 000000000..93686ed67
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-20.imageset/waveform-34-20.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-20.imageset/waveform-34-20@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-20.imageset/waveform-34-20@2x.png
new file mode 100644
index 000000000..bd499d212
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-20.imageset/waveform-34-20@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-20.imageset/waveform-34-20@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-20.imageset/waveform-34-20@3x.png
new file mode 100644
index 000000000..8078382d0
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-20.imageset/waveform-34-20@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-21.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-21.imageset/Contents.json
new file mode 100644
index 000000000..5b5069b70
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-21.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-21.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-21@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-21@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-21.imageset/waveform-34-21.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-21.imageset/waveform-34-21.png
new file mode 100644
index 000000000..91e468997
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-21.imageset/waveform-34-21.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-21.imageset/waveform-34-21@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-21.imageset/waveform-34-21@2x.png
new file mode 100644
index 000000000..f7077848a
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-21.imageset/waveform-34-21@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-21.imageset/waveform-34-21@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-21.imageset/waveform-34-21@3x.png
new file mode 100644
index 000000000..1ca09f8ea
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-21.imageset/waveform-34-21@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-22.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-22.imageset/Contents.json
new file mode 100644
index 000000000..530cbc157
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-22.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-22.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-22@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-22@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-22.imageset/waveform-34-22.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-22.imageset/waveform-34-22.png
new file mode 100644
index 000000000..e31d35de1
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-22.imageset/waveform-34-22.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-22.imageset/waveform-34-22@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-22.imageset/waveform-34-22@2x.png
new file mode 100644
index 000000000..02a4af994
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-22.imageset/waveform-34-22@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-22.imageset/waveform-34-22@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-22.imageset/waveform-34-22@3x.png
new file mode 100644
index 000000000..5afbbec87
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-22.imageset/waveform-34-22@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-23.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-23.imageset/Contents.json
new file mode 100644
index 000000000..fd8cbfb2f
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-23.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-23.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-23@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-23@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-23.imageset/waveform-34-23.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-23.imageset/waveform-34-23.png
new file mode 100644
index 000000000..0c4a54265
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-23.imageset/waveform-34-23.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-23.imageset/waveform-34-23@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-23.imageset/waveform-34-23@2x.png
new file mode 100644
index 000000000..71deee671
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-23.imageset/waveform-34-23@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-23.imageset/waveform-34-23@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-23.imageset/waveform-34-23@3x.png
new file mode 100644
index 000000000..2fe95bd21
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-23.imageset/waveform-34-23@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-3.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-3.imageset/Contents.json
new file mode 100644
index 000000000..9ce7d50ef
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-3.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-3.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-3@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-3@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-3.imageset/waveform-34-3.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-3.imageset/waveform-34-3.png
new file mode 100644
index 000000000..9de67eb1b
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-3.imageset/waveform-34-3.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-3.imageset/waveform-34-3@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-3.imageset/waveform-34-3@2x.png
new file mode 100644
index 000000000..03f8ebb4f
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-3.imageset/waveform-34-3@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-3.imageset/waveform-34-3@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-3.imageset/waveform-34-3@3x.png
new file mode 100644
index 000000000..8e2a01efb
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-3.imageset/waveform-34-3@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-4.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-4.imageset/Contents.json
new file mode 100644
index 000000000..b0022696b
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-4.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-4.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-4@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-4@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-4.imageset/waveform-34-4.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-4.imageset/waveform-34-4.png
new file mode 100644
index 000000000..b6d427344
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-4.imageset/waveform-34-4.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-4.imageset/waveform-34-4@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-4.imageset/waveform-34-4@2x.png
new file mode 100644
index 000000000..a9bbf00e1
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-4.imageset/waveform-34-4@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-4.imageset/waveform-34-4@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-4.imageset/waveform-34-4@3x.png
new file mode 100644
index 000000000..dd6c26024
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-4.imageset/waveform-34-4@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-5.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-5.imageset/Contents.json
new file mode 100644
index 000000000..b8ee5b8bb
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-5.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-5.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-5@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-5@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-5.imageset/waveform-34-5.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-5.imageset/waveform-34-5.png
new file mode 100644
index 000000000..4a3ca3775
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-5.imageset/waveform-34-5.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-5.imageset/waveform-34-5@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-5.imageset/waveform-34-5@2x.png
new file mode 100644
index 000000000..8735c9985
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-5.imageset/waveform-34-5@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-5.imageset/waveform-34-5@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-5.imageset/waveform-34-5@3x.png
new file mode 100644
index 000000000..a2489ab27
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-5.imageset/waveform-34-5@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-6.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-6.imageset/Contents.json
new file mode 100644
index 000000000..4f314152e
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-6.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-6.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-6@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-6@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-6.imageset/waveform-34-6.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-6.imageset/waveform-34-6.png
new file mode 100644
index 000000000..cf51b00b2
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-6.imageset/waveform-34-6.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-6.imageset/waveform-34-6@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-6.imageset/waveform-34-6@2x.png
new file mode 100644
index 000000000..23fe330ea
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-6.imageset/waveform-34-6@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-6.imageset/waveform-34-6@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-6.imageset/waveform-34-6@3x.png
new file mode 100644
index 000000000..d4efb13b9
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-6.imageset/waveform-34-6@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-7.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-7.imageset/Contents.json
new file mode 100644
index 000000000..cfb2460b4
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-7.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-7.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-7@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-7@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-7.imageset/waveform-34-7.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-7.imageset/waveform-34-7.png
new file mode 100644
index 000000000..974505590
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-7.imageset/waveform-34-7.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-7.imageset/waveform-34-7@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-7.imageset/waveform-34-7@2x.png
new file mode 100644
index 000000000..fa5f97d2d
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-7.imageset/waveform-34-7@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-7.imageset/waveform-34-7@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-7.imageset/waveform-34-7@3x.png
new file mode 100644
index 000000000..e77750851
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-7.imageset/waveform-34-7@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-8.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-8.imageset/Contents.json
new file mode 100644
index 000000000..e5e9cf728
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-8.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-8.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-8@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-8@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-8.imageset/waveform-34-8.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-8.imageset/waveform-34-8.png
new file mode 100644
index 000000000..880ea913b
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-8.imageset/waveform-34-8.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-8.imageset/waveform-34-8@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-8.imageset/waveform-34-8@2x.png
new file mode 100644
index 000000000..cbdc10c78
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-8.imageset/waveform-34-8@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-8.imageset/waveform-34-8@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-8.imageset/waveform-34-8@3x.png
new file mode 100644
index 000000000..134c19790
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-8.imageset/waveform-34-8@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-9.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-9.imageset/Contents.json
new file mode 100644
index 000000000..b4b6dfe84
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-9.imageset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "filename" : "waveform-34-9.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "waveform-34-9@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "waveform-34-9@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-9.imageset/waveform-34-9.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-9.imageset/waveform-34-9.png
new file mode 100644
index 000000000..ef1944bf8
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-9.imageset/waveform-34-9.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-9.imageset/waveform-34-9@2x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-9.imageset/waveform-34-9@2x.png
new file mode 100644
index 000000000..21d96b21b
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-9.imageset/waveform-34-9@2x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-9.imageset/waveform-34-9@3x.png b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-9.imageset/waveform-34-9@3x.png
new file mode 100644
index 000000000..72adc72ee
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Animations/Waveform-34/waveform-34-9.imageset/waveform-34-9@3x.png differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Icons/episodes-22.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Icons/episodes-22.imageset/Contents.json
index 5a3888cdc..102298ae3 100644
--- a/Application/Resources/Images/CommonImages.xcassets/Icons/episodes-22.imageset/Contents.json
+++ b/Application/Resources/Images/CommonImages.xcassets/Icons/episodes-22.imageset/Contents.json
@@ -1,15 +1,15 @@
{
"images" : [
{
- "idiom" : "universal",
- "filename" : "episodes-22.pdf"
+ "filename" : "episodes-22.pdf",
+ "idiom" : "universal"
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
},
"properties" : {
"template-rendering-intent" : "template"
}
-}
\ No newline at end of file
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Icons/episodes-22.imageset/episodes-22.pdf b/Application/Resources/Images/CommonImages.xcassets/Icons/episodes-22.imageset/episodes-22.pdf
index e4714459d..e5321cd89 100644
Binary files a/Application/Resources/Images/CommonImages.xcassets/Icons/episodes-22.imageset/episodes-22.pdf and b/Application/Resources/Images/CommonImages.xcassets/Icons/episodes-22.imageset/episodes-22.pdf differ
diff --git a/Application/Resources/Images/CommonImages.xcassets/Player/start_over-22.imageset/Contents.json b/Application/Resources/Images/CommonImages.xcassets/Player/start_over-22.imageset/Contents.json
new file mode 100644
index 000000000..c36b8d55f
--- /dev/null
+++ b/Application/Resources/Images/CommonImages.xcassets/Player/start_over-22.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "startover_22.pdf",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Application/Resources/Images/CommonImages.xcassets/Player/start_over-22.imageset/startover_22.pdf b/Application/Resources/Images/CommonImages.xcassets/Player/start_over-22.imageset/startover_22.pdf
new file mode 100644
index 000000000..31b4f4640
Binary files /dev/null and b/Application/Resources/Images/CommonImages.xcassets/Player/start_over-22.imageset/startover_22.pdf differ
diff --git a/Application/Resources/Settings.bundle/Root.inApp.plist b/Application/Resources/Settings.bundle/Root.inApp.plist
index 54e55e4ab..393f813c4 100644
--- a/Application/Resources/Settings.bundle/Root.inApp.plist
+++ b/Application/Resources/Settings.bundle/Root.inApp.plist
@@ -238,14 +238,6 @@
Key
PlaySRGSettingStandaloneEnabled
-
- Type
- PSToggleSwitchSpecifier
- Title
- Original images only
- Key
- PlaySRGSettingOriginalImagesOnlyEnabled
-
Type
IASKButtonSpecifier
diff --git a/Application/Resources/Settings.bundle/com.mono0926.LicensePlist.latest_result.txt b/Application/Resources/Settings.bundle/com.mono0926.LicensePlist.latest_result.txt
index a2571e7af..f7491a38f 100755
--- a/Application/Resources/Settings.bundle/com.mono0926.LicensePlist.latest_result.txt
+++ b/Application/Resources/Settings.bundle/com.mono0926.LicensePlist.latest_result.txt
@@ -260,48 +260,48 @@ version: 5.3.7
name: InAppSettingsKit, nameSpecified:
body: Copyright (c) 2009-2…
-version: 2.10
+version: 3.0.1
name: InAppSettingsKit, nameSpecified:
body: Copyright (c) 2009-2…
-version: 2.10
+version: 3.0.1
name: InAppSettingsKit, nameSpecified:
body: Copyright (c) 2009-2…
-version: 2.10
+version: 3.0.1
name: InAppSettingsKit, nameSpecified:
body: Copyright (c) 2009-2…
-version: 2.10
+version: 3.0.1
name: InAppSettingsKit, nameSpecified:
body: Copyright (c) 2009-2…
-version: 2.10
+version: 3.0.1
name: MaterialComponents, nameSpecified:
body:
…
-version: 101.1.1
+version: 109.5.0
name: MaterialComponents, nameSpecified:
body:
…
-version: 101.1.1
+version: 109.5.0
name: MaterialComponents, nameSpecified:
body:
…
-version: 101.1.1
+version: 109.5.0
name: MaterialComponents, nameSpecified:
body:
…
-version: 101.1.1
+version: 109.5.0
name: MaterialComponents, nameSpecified:
body:
…
-version: 101.1.1
+version: 109.5.0
name: MDFInternationalization, nameSpecified:
body:
@@ -370,23 +370,23 @@ version: 0.3.901
name: paper-onboarding, nameSpecified:
body: The MIT License (MIT…
-version: 6.1.3
+version: 6.1.5
name: paper-onboarding, nameSpecified:
body: The MIT License (MIT…
-version: 6.1.3
+version: 6.1.5
name: paper-onboarding, nameSpecified:
body: The MIT License (MIT…
-version: 6.1.3
+version: 6.1.5
name: paper-onboarding, nameSpecified:
body: The MIT License (MIT…
-version: 6.1.3
+version: 6.1.5
name: paper-onboarding, nameSpecified:
body: The MIT License (MIT…
-version: 6.1.3
+version: 6.1.5
name: Protobuf, nameSpecified:
body: Copyright 2008 Googl…
@@ -410,83 +410,67 @@ version: 3.6.1
name: SwiftMessages, nameSpecified:
body: Copyright (c) 2016 S…
-version: 7.0.0
+version: 7.0.1
name: SwiftMessages, nameSpecified:
body: Copyright (c) 2016 S…
-version: 7.0.0
+version: 7.0.1
name: SwiftMessages, nameSpecified:
body: Copyright (c) 2016 S…
-version: 7.0.0
+version: 7.0.1
name: SwiftMessages, nameSpecified:
body: Copyright (c) 2016 S…
-version: 7.0.0
+version: 7.0.1
name: SwiftMessages, nameSpecified:
body: Copyright (c) 2016 S…
-version: 7.0.0
+version: 7.0.1
-name: UrbanAirship-iOS-SDK, nameSpecified:
-body: Copyright 2017 Urban…
-version: 9.4.0
+name: Aiolos, nameSpecified: , owner: IdeasOnCanvas, version: 1.3.0
-name: UrbanAirship-iOS-SDK, nameSpecified:
-body: Copyright 2017 Urban…
-version: 9.4.0
-
-name: UrbanAirship-iOS-SDK, nameSpecified:
-body: Copyright 2017 Urban…
-version: 9.4.0
-
-name: UrbanAirship-iOS-SDK, nameSpecified:
-body: Copyright 2017 Urban…
-version: 9.4.0
-
-name: UrbanAirship-iOS-SDK, nameSpecified:
-body: Copyright 2017 Urban…
-version: 9.4.0
-
-name: appcenter-sdk-apple, nameSpecified: , owner: microsoft, version: 3.1.1
+name: appcenter-sdk-apple, nameSpecified: , owner: microsoft, version: 3.3.1
name: CoconutKit, nameSpecified: , owner: defagos, version: 3.4
-name: ComScore-iOS-watchOS-tvOS, nameSpecified: , owner: SRGSSR, version: 6.2.0
+name: ComScore-iOS-watchOS-tvOS, nameSpecified: , owner: SRGSSR, version: 6.3.1
name: DZNEmptyDataSet, nameSpecified: , owner: SRGSSR, version: v1.8.1_srg1
name: FXReachability, nameSpecified: , owner: SRGSSR, version: 1.3.2_srg4
+name: ios-library, nameSpecified: , owner: urbanairship, version: 13.4.0
+
name: libextobjc, nameSpecified: , owner: SRGSSR, version: 0.6_srg2
name: MAKVONotificationCenter, nameSpecified: , owner: SRGSSR, version: 1.0_srg4
-name: Mantle, nameSpecified: , owner: Mantle, version: 2.1.0
+name: Mantle, nameSpecified: , owner: Mantle, version: 2.1.1
name: Masonry, nameSpecified: , owner: SRGSSR, version: v1.1.0_srg1
-name: srganalytics-apple, nameSpecified: , owner: SRGSSR, version: 4.1.1
+name: srganalytics-apple, nameSpecified: , owner: SRGSSR, version: 4.2.0
name: srgappearance-apple, nameSpecified: , owner: SRGSSR, version: 2.1.0
-name: srgcontentprotection-apple, nameSpecified: , owner: SRGSSR, version: 2.0.1
+name: srgcontentprotection-apple, nameSpecified: , owner: SRGSSR, version: 2.0.2
-name: srgdataprovider-apple, nameSpecified: , owner: SRGSSR, version: 7.1.0
+name: srgdataprovider-apple, nameSpecified: , owner: SRGSSR, version: 8.0.0
name: srgdiagnostics-apple, nameSpecified: , owner: SRGSSR, version: 2.0.1
-name: srgidentity-apple, nameSpecified: , owner: SRGSSR, version: 2.0.2
+name: srgidentity-apple, nameSpecified: , owner: SRGSSR, version: 2.0.3
-name: srgletterbox-apple, nameSpecified: , owner: SRGSSR, version: 4.0.0
+name: srgletterbox-apple, nameSpecified: , owner: SRGSSR, version: 5.0.0
-name: srglogger-apple, nameSpecified: , owner: SRGSSR, version: 2.0.0
+name: srglogger-apple, nameSpecified: , owner: SRGSSR, version: 2.0.1
-name: srgmediaplayer-apple, nameSpecified: , owner: SRGSSR, version: 4.0.0
+name: srgmediaplayer-apple, nameSpecified: , owner: SRGSSR, version: 5.0.0
-name: srgnetwork-apple, nameSpecified: , owner: SRGSSR, version: 2.0.1
+name: srgnetwork-apple, nameSpecified: , owner: SRGSSR, version: 2.0.2
-name: srguserdata-apple, nameSpecified: , owner: SRGSSR, version: 2.0.2
+name: srguserdata-apple, nameSpecified: , owner: SRGSSR, version: 2.0.3
name: tagcommander-apple, nameSpecified: , owner: SRGSSR, version: 4.5.4_4.4.1_srg3
diff --git a/Application/Resources/Settings.bundle/com.mono0926.LicensePlist.plist b/Application/Resources/Settings.bundle/com.mono0926.LicensePlist.plist
index c5b3f9799..915525486 100755
--- a/Application/Resources/Settings.bundle/com.mono0926.LicensePlist.plist
+++ b/Application/Resources/Settings.bundle/com.mono0926.LicensePlist.plist
@@ -4,11 +4,19 @@
PreferenceSpecifiers
+
+ File
+ com.mono0926.LicensePlist/Aiolos
+ Title
+ Aiolos (1.3.0)
+ Type
+ PSChildPaneSpecifier
+
File
com.mono0926.LicensePlist/appcenter-sdk-apple
Title
- appcenter-sdk-apple (3.1.1)
+ appcenter-sdk-apple (3.3.1)
Type
PSChildPaneSpecifier
@@ -40,7 +48,7 @@
File
com.mono0926.LicensePlist/ComScore-iOS-watchOS-tvOS
Title
- ComScore-iOS-watchOS-tvOS (6.2.0)
+ ComScore-iOS-watchOS-tvOS (6.3.1)
Type
PSChildPaneSpecifier
@@ -144,7 +152,15 @@
File
com.mono0926.LicensePlist/InAppSettingsKit
Title
- InAppSettingsKit (2.10)
+ InAppSettingsKit (3.0.1)
+ Type
+ PSChildPaneSpecifier
+
+
+ File
+ com.mono0926.LicensePlist/ios-library
+ Title
+ ios-library (13.4.0)
Type
PSChildPaneSpecifier
@@ -168,7 +184,7 @@
File
com.mono0926.LicensePlist/Mantle
Title
- Mantle (2.1.0)
+ Mantle (2.1.1)
Type
PSChildPaneSpecifier
@@ -184,7 +200,7 @@
File
com.mono0926.LicensePlist/MaterialComponents
Title
- MaterialComponents (101.1.1)
+ MaterialComponents (109.5.0)
Type
PSChildPaneSpecifier
@@ -216,7 +232,7 @@
File
com.mono0926.LicensePlist/paper-onboarding
Title
- paper-onboarding (6.1.3)
+ paper-onboarding (6.1.5)
Type
PSChildPaneSpecifier
@@ -232,7 +248,7 @@
File
com.mono0926.LicensePlist/srganalytics-apple
Title
- srganalytics-apple (4.1.1)
+ srganalytics-apple (4.2.0)
Type
PSChildPaneSpecifier
@@ -248,7 +264,7 @@
File
com.mono0926.LicensePlist/srgcontentprotection-apple
Title
- srgcontentprotection-apple (2.0.1)
+ srgcontentprotection-apple (2.0.2)
Type
PSChildPaneSpecifier
@@ -256,7 +272,7 @@
File
com.mono0926.LicensePlist/srgdataprovider-apple
Title
- srgdataprovider-apple (7.1.0)
+ srgdataprovider-apple (8.0.0)
Type
PSChildPaneSpecifier
@@ -272,7 +288,7 @@
File
com.mono0926.LicensePlist/srgidentity-apple
Title
- srgidentity-apple (2.0.2)
+ srgidentity-apple (2.0.3)
Type
PSChildPaneSpecifier
@@ -280,7 +296,7 @@
File
com.mono0926.LicensePlist/srgletterbox-apple
Title
- srgletterbox-apple (4.0.0)
+ srgletterbox-apple (5.0.0)
Type
PSChildPaneSpecifier
@@ -288,7 +304,7 @@
File
com.mono0926.LicensePlist/srglogger-apple
Title
- srglogger-apple (2.0.0)
+ srglogger-apple (2.0.1)
Type
PSChildPaneSpecifier
@@ -296,7 +312,7 @@
File
com.mono0926.LicensePlist/srgmediaplayer-apple
Title
- srgmediaplayer-apple (4.0.0)
+ srgmediaplayer-apple (5.0.0)
Type
PSChildPaneSpecifier
@@ -304,7 +320,7 @@
File
com.mono0926.LicensePlist/srgnetwork-apple
Title
- srgnetwork-apple (2.0.1)
+ srgnetwork-apple (2.0.2)
Type
PSChildPaneSpecifier
@@ -312,7 +328,7 @@
File
com.mono0926.LicensePlist/srguserdata-apple
Title
- srguserdata-apple (2.0.2)
+ srguserdata-apple (2.0.3)
Type
PSChildPaneSpecifier
@@ -320,7 +336,7 @@
File
com.mono0926.LicensePlist/SwiftMessages
Title
- SwiftMessages (7.0.0)
+ SwiftMessages (7.0.1)
Type
PSChildPaneSpecifier
@@ -332,14 +348,6 @@
Type
PSChildPaneSpecifier
-
- File
- com.mono0926.LicensePlist/UrbanAirship-iOS-SDK
- Title
- UrbanAirship-iOS-SDK (9.4.0)
- Type
- PSChildPaneSpecifier
-
File
com.mono0926.LicensePlist/YYWebImage
diff --git a/Application/Resources/Settings.bundle/com.mono0926.LicensePlist/Aiolos.plist b/Application/Resources/Settings.bundle/com.mono0926.LicensePlist/Aiolos.plist
new file mode 100644
index 000000000..62881d2c3
--- /dev/null
+++ b/Application/Resources/Settings.bundle/com.mono0926.LicensePlist/Aiolos.plist
@@ -0,0 +1,35 @@
+
+
+
+
+ PreferenceSpecifiers
+
+
+ FooterText
+ MIT License
+
+Copyright (c) [2019] [IdeasOnCanvas]
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+ Type
+ PSGroupSpecifier
+
+
+
+
diff --git a/Application/Resources/Settings.bundle/com.mono0926.LicensePlist/UrbanAirship-iOS-SDK.plist b/Application/Resources/Settings.bundle/com.mono0926.LicensePlist/ios-library.plist
similarity index 93%
rename from Application/Resources/Settings.bundle/com.mono0926.LicensePlist/UrbanAirship-iOS-SDK.plist
rename to Application/Resources/Settings.bundle/com.mono0926.LicensePlist/ios-library.plist
index 1df52adf7..3806ed4fa 100644
--- a/Application/Resources/Settings.bundle/com.mono0926.LicensePlist/UrbanAirship-iOS-SDK.plist
+++ b/Application/Resources/Settings.bundle/com.mono0926.LicensePlist/ios-library.plist
@@ -6,7 +6,7 @@
FooterText
- Copyright 2017 Urban Airship and Contributors
+ Copyright 2010-2019 Airship and Contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Application/Sources/Application/PlayAppDelegate.m b/Application/Sources/Application/PlayAppDelegate.m
index a2af47604..7c278a85c 100755
--- a/Application/Sources/Application/PlayAppDelegate.m
+++ b/Application/Sources/Application/PlayAppDelegate.m
@@ -34,6 +34,7 @@
#import "UpdateInfo.h"
#import "WatchLater.h"
+#import
#import
#import
#import
@@ -49,7 +50,6 @@
#import
#import
#import
-#import
#if defined(DEBUG) || defined(NIGHTLY) || defined(BETA)
#import
@@ -138,10 +138,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
[self setPresenterModeEnabled:ApplicationSettingPresenterModeEnabled()];
self.window.backgroundColor = UIColor.blackColor;
-
- if (@available(iOS 11, *)) {
- self.window.accessibilityIgnoresInvertColors = YES;
- }
+ self.window.accessibilityIgnoresInvertColors = YES;
[self setupAnalytics];
[self setupDataProvider];
@@ -176,7 +173,8 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
}, @"FirstLaunchDone", nil);
[PushService.sharedService setup];
- [self updateApplicationBadge];
+ [PushService.sharedService updateApplicationBadge];
+
FavoritesSetup();
// Local objects migration
@@ -351,13 +349,13 @@ - (BOOL)application:(UIApplication *)application openURL:(NSURL *)URL options:(N
// https://support.urbanairship.com/hc/en-us/articles/213492483-iOS-Badging-and-Auto-Badging
- (void)applicationDidBecomeActive:(UIApplication *)application
{
- [self updateApplicationBadge];
+ [PushService.sharedService updateApplicationBadge];
}
// https://support.urbanairship.com/hc/en-us/articles/213492483-iOS-Badging-and-Auto-Badging
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
- [self updateApplicationBadge];
+ [PushService.sharedService updateApplicationBadge];
completionHandler(UIBackgroundFetchResultNoData);
}
@@ -510,7 +508,7 @@ - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserAct
if ([userActivity.activityType isEqualToString:[NSBundle.mainBundle.bundleIdentifier stringByAppendingString:@".playing"]]) {
NSString *mediaURN = userActivity.userInfo[@"URNString"];
if (mediaURN) {
- SRGMedia *media = [NSKeyedUnarchiver unarchiveObjectWithData:userActivity.userInfo[@"SRGMediaData"]];
+ SRGMedia *media = [NSKeyedUnarchiver unarchivedObjectOfClass:SRGMedia.class fromData:userActivity.userInfo[@"SRGMediaData"] error:NULL];
NSNumber *position = [userActivity.userInfo[@"position"] isKindOfClass:NSNumber.class] ? userActivity.userInfo[@"position"] : nil;
[self playURN:mediaURN media:media atPosition:[SRGPosition positionAtTimeInSeconds:position.integerValue] fromPushNotification:NO completion:nil];
@@ -532,7 +530,7 @@ - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserAct
else if ([userActivity.activityType isEqualToString:[NSBundle.mainBundle.bundleIdentifier stringByAppendingString:@".displaying"]]) {
NSString *showURN = userActivity.userInfo[@"URNString"];
if (showURN) {
- SRGShow *show = [NSKeyedUnarchiver unarchiveObjectWithData:userActivity.userInfo[@"SRGShowData"]];
+ SRGShow *show = [NSKeyedUnarchiver unarchivedObjectOfClass:SRGShow.class fromData:userActivity.userInfo[@"SRGShowData"] error:NULL];
RadioChannel *radioChannel = [ApplicationConfiguration.sharedApplicationConfiguration radioChannelForUid:show.primaryChannelUid];
ApplicationSectionInfo *applicationSectionInfo = [ApplicationSectionInfo applicationSectionInfoWithApplicationSection:ApplicationSectionOverview radioChannel:radioChannel options:nil];
@@ -602,20 +600,9 @@ - (void)setupAppCenter
[MSAppCenter start:appCenterSecret withServices:@[ MSCrashes.class, MSDistribute.class ]];
}
-- (void)updateApplicationBadge
-{
- if (@available(iOS 10, *)) {
- [PushService.sharedService updateApplicationBadge];
- }
- else {
- [PushService.sharedService resetApplicationBadge];
- }
-}
-
- (void)setupDataProvider
{
[SRGNetworkActivityManagement enable];
- [UIImage play_setUseOriginalImagesOnly:ApplicationSettingOriginalImagesOnlyEnabled()];
NSURL *serviceURL = ApplicationSettingServiceURL();
SRGDataProvider *dataProvider = [[SRGDataProvider alloc] initWithServiceURL:serviceURL];
diff --git a/Application/Sources/Bridges/Play-ObjectiveC-Bridge.h b/Application/Sources/Bridges/Play-ObjectiveC-Bridge.h
index 8ab2f0078..10a17b8c7 100755
--- a/Application/Sources/Bridges/Play-ObjectiveC-Bridge.h
+++ b/Application/Sources/Bridges/Play-ObjectiveC-Bridge.h
@@ -8,10 +8,15 @@
// Objective-C headers will be automatically exposed to all Swift source files.
#import "BaseViewController.h"
+#import "MediaPlayerViewController.h"
+#import "MediaPlayerViewController+Private.h"
+#import "NavigationController.h"
#import "NSBundle+PlaySRG.h"
#import "Onboarding.h"
#import "PlayAppDelegate.h"
#import "PushService.h"
+#import "SongsViewController.h"
+#import "SRGLetterboxController+PlaySRG.h"
#import "UIColor+PlaySRG.h"
#import "UIDevice+PlaySRG.h"
#import "UIViewController+PlaySRG.h"
diff --git a/Application/Sources/Browser/WebViewController.m b/Application/Sources/Browser/WebViewController.m
index a885d3923..bb8770cd2 100755
--- a/Application/Sources/Browser/WebViewController.m
+++ b/Application/Sources/Browser/WebViewController.m
@@ -48,9 +48,6 @@ - (instancetype)initWithRequest:(NSURLRequest *)request
- (void)dealloc
{
- // Avoid iOS 9 crash: https://stackoverflow.com/questions/35529080/wkwebview-crashes-on-deinit
- self.webView.scrollView.delegate = nil;
-
self.webView = nil; // Unregister KVO
}
@@ -80,15 +77,10 @@ - (void)viewDidLoad
webView.scrollView.delegate = self;
[self.view insertSubview:webView atIndex:0];
[webView mas_makeConstraints:^(MASConstraintMaker *make) {
- if (@available(iOS 11, *)) {
- make.top.equalTo(self.view);
- make.bottom.equalTo(self.view);
- make.left.equalTo(self.view.mas_safeAreaLayoutGuideLeft);
- make.right.equalTo(self.view.mas_safeAreaLayoutGuideRight);
- }
- else {
- make.edges.equalTo(self.view);
- }
+ make.top.equalTo(self.view);
+ make.bottom.equalTo(self.view);
+ make.left.equalTo(self.view.mas_safeAreaLayoutGuideLeft);
+ make.right.equalTo(self.view.mas_safeAreaLayoutGuideRight);
}];
self.webView = webView;
@@ -141,13 +133,13 @@ - (UIStatusBarStyle)preferredStatusBarStyle
- (UIEdgeInsets)play_paddingContentInsets
{
// Must adjust depending on the web page viewport-fit setting, see https://modelessdesign.com/backdrop/283
- if (@available(iOS 11, *)) {
- UIScrollView *scrollView = self.webView.scrollView;
- if (scrollView.contentInsetAdjustmentBehavior == UIScrollViewContentInsetAdjustmentNever) {
- return UIEdgeInsetsMake(self.topLayoutGuide.length, 0.f, self.bottomLayoutGuide.length, 0.f);
- }
+ UIScrollView *scrollView = self.webView.scrollView;
+ if (scrollView.contentInsetAdjustmentBehavior == UIScrollViewContentInsetAdjustmentNever) {
+ return scrollView.safeAreaInsets;
+ }
+ else {
+ return UIEdgeInsetsZero;
}
- return UIEdgeInsetsZero;
}
#pragma mark SRGAnalyticsViewTracking protocol
@@ -229,7 +221,7 @@ - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigati
else {
NSURLComponents *URLComponents = [NSURLComponents componentsWithURL:navigationAction.request.URL resolvingAgainstBaseURL:NO];
if (! [URLComponents.scheme isEqualToString:@"http"] && ! [URLComponents.scheme isEqualToString:@"https"] && ! [URLComponents.scheme isEqualToString:@"file"]) {
- [UIApplication.sharedApplication openURL:URLComponents.URL];
+ [UIApplication.sharedApplication openURL:URLComponents.URL options:@{} completionHandler:nil];
decisionHandler(WKNavigationActionPolicyCancel);
}
else {
diff --git a/Application/Sources/Calendar/CalendarViewController.m b/Application/Sources/Calendar/CalendarViewController.m
index ccbbc9e40..3f290604a 100755
--- a/Application/Sources/Calendar/CalendarViewController.m
+++ b/Application/Sources/Calendar/CalendarViewController.m
@@ -47,16 +47,13 @@ - (instancetype)initWithRadioChannel:(RadioChannel *)radioChannel date:(NSDate *
if (self = [super init]) {
self.radioChannel = radioChannel;
self.initialDate = date;
+ self.selectionFeedbackGenerator = [[UISelectionFeedbackGenerator alloc] init];
UIPageViewController *pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:@{ UIPageViewControllerOptionInterPageSpacingKey : @100.f }];
pageViewController.delegate = self;
- if (@available(iOS 10, *)) {
- self.selectionFeedbackGenerator = [[UISelectionFeedbackGenerator alloc] init]; // Only available for iOS 10 and above
- }
-
[self setInsetViewController:pageViewController atIndex:0];
self.pageViewController = pageViewController;
}
@@ -133,7 +130,7 @@ - (void)viewDidLoad
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(accessibilityVoiceOverStatusChanged:)
- name:UIAccessibilityVoiceOverStatusChanged
+ name:UIAccessibilityVoiceOverStatusDidChangeNotification
object:nil];
// Cannot use `-calendar:boundingRectWillChange:animated: since not called with end values.
@@ -279,9 +276,7 @@ - (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds an
- (void)calendar:(FSCalendar *)calendar didSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition
{
- if (@available(iOS 10, *)) {
- [self.selectionFeedbackGenerator selectionChanged];
- }
+ [self.selectionFeedbackGenerator selectionChanged];
[self showMediasForDate:date animated:YES];
}
@@ -300,9 +295,10 @@ - (void)calendarCurrentPageDidChange:(FSCalendar *)calendar
- (UIColor *)calendar:(FSCalendar *)calendar appearance:(FSCalendarAppearance *)appearance titleDefaultColorForDate:(NSDate *)date
{
- BOOL isAvailable = [[self minimumDateForCalendar:calendar] compare:date] != NSOrderedDescending
- && [date compare:[self maximumDateForCalendar:calendar]] != NSOrderedDescending;
- return isAvailable ? UIColor.play_lightGrayColor : [UIColor.play_lightGrayColor colorWithAlphaComponent:0.4f];
+ NSDate *startDate = [self minimumDateForCalendar:calendar];
+ NSDate *endDate = [self maximumDateForCalendar:calendar];
+ NSDateInterval *dateInterval = [[NSDateInterval alloc] initWithStartDate:startDate endDate:endDate];
+ return [dateInterval containsDate:date] ? UIColor.play_lightGrayColor : [UIColor.play_lightGrayColor colorWithAlphaComponent:0.4f];
}
#pragma mark ContainerContentInsets protocol
diff --git a/Application/Sources/Calendar/DailyMediasViewController.m b/Application/Sources/Calendar/DailyMediasViewController.m
index 863762035..0ded9e290 100755
--- a/Application/Sources/Calendar/DailyMediasViewController.m
+++ b/Application/Sources/Calendar/DailyMediasViewController.m
@@ -66,7 +66,7 @@ - (void)viewDidLoad
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(accessibilityVoiceOverStatusChanged:)
- name:UIAccessibilityVoiceOverStatusChanged
+ name:UIAccessibilityVoiceOverStatusDidChangeNotification
object:nil];
}
diff --git a/Application/Sources/Configuration/ApplicationConfiguration.h b/Application/Sources/Configuration/ApplicationConfiguration.h
index fea37f21f..3aa5d733b 100755
--- a/Application/Sources/Configuration/ApplicationConfiguration.h
+++ b/Application/Sources/Configuration/ApplicationConfiguration.h
@@ -23,6 +23,7 @@ typedef NS_ENUM(NSInteger, HomeSection) {
HomeSectionTVTrending,
HomeSectionTVEvents,
HomeSectionTVTopics,
+ HomeSectionTVTopicsAccess,
HomeSectionTVLatest,
HomeSectionTVMostPopular,
HomeSectionTVSoonExpiring,
@@ -159,6 +160,7 @@ OBJC_EXPORT NSString * const ApplicationConfigurationDidChangeNotification;
- (nullable RadioChannel *)radioChannelForUid:(NSString *)uid;
- (nullable TVChannel *)tvChannelForUid:(NSString *)uid;
+- (nullable __kindof Channel *)channelForUid:(NSString *)uid;
/**
* URLs to be used for sharing
diff --git a/Application/Sources/Configuration/ApplicationConfiguration.m b/Application/Sources/Configuration/ApplicationConfiguration.m
index e5a48d63f..deb5e035c 100755
--- a/Application/Sources/Configuration/ApplicationConfiguration.m
+++ b/Application/Sources/Configuration/ApplicationConfiguration.m
@@ -28,6 +28,7 @@
@(HomeSectionTVLive) : NSLocalizedString(@"TV channels", @"Title label to present main TV livestreams"),
@(HomeSectionTVEvents) : NSLocalizedString(@"Highlights", @"Title label used to present TV event modules while loading. It appears if no network connection available and no cache available."),
@(HomeSectionTVTopics) : NSLocalizedString(@"Topics", @"Title label used to present TV topics while loading. It appears if no network connection available and no cache available."),
+ @(HomeSectionTVTopicsAccess) : NSLocalizedString(@"Topics", @"Title label used to present TV topics"),
@(HomeSectionTVLatest) : NSLocalizedString(@"Latest videos", @"Title label used to present the latest videos"),
@(HomeSectionTVMostPopular) : NSLocalizedString(@"Most popular", @"Title label used to present the TV most seen / clicked / popular videos"),
@(HomeSectionTVSoonExpiring) : NSLocalizedString(@"Available for a limited time", @"Title label used to present the soon expiring videos"),
@@ -137,6 +138,7 @@ static HomeSection HomeSectionWithString(NSString *string)
@"tvLive" : @(HomeSectionTVLive),
@"tvEvents" : @(HomeSectionTVEvents),
@"tvTopics" : @(HomeSectionTVTopics),
+ @"tvTopicsAccess" : @(HomeSectionTVTopicsAccess),
@"tvLatest" : @(HomeSectionTVLatest),
@"tvMostPopular" : @(HomeSectionTVMostPopular),
@"tvSoonExpiring" : @(HomeSectionTVSoonExpiring),
@@ -677,6 +679,11 @@ - (TVChannel *)tvChannelForUid:(NSString *)uid
return [self.tvChannels filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"%K == %@", @keypath(TVChannel.new, uid), uid]].firstObject;
}
+- (Channel *)channelForUid:(NSString *)uid
+{
+ return [self radioChannelForUid:uid] ?: [self tvChannelForUid:uid];
+}
+
- (NSURL *)sharingURLForMediaMetadata:(id)mediaMetadata atTime:(CMTime)time;
{
if (PlayIsSwissTXTURN(mediaMetadata.URN)) {
diff --git a/Application/Sources/Configuration/Channel.h b/Application/Sources/Configuration/Channel.h
new file mode 100644
index 000000000..99f3aa854
--- /dev/null
+++ b/Application/Sources/Configuration/Channel.h
@@ -0,0 +1,78 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * Songs view styles
+ */
+typedef NS_ENUM(NSInteger, SongsViewStyle) {
+ /**
+ * Not displayed.
+ */
+ SongsViewStyleNone = 0,
+ /**
+ * Collapsed when added to the view.
+ */
+ SongsViewStyleCollapsed,
+ /**
+ * Expanded when added to the view.
+ */
+ SongsViewStyleExpanded
+};
+
+@interface Channel : NSObject
+
+/**
+ * Create the channel from a dictionary. Return `nil` if the dictionary format is incorrect.
+ */
+- (nullable instancetype)initWithDictionary:(NSDictionary *)dictionary NS_DESIGNATED_INITIALIZER;
+
+/**
+ * The unique identifier of the channel.
+ */
+@property (nonatomic, readonly, copy) NSString *uid;
+
+/**
+ * Local unique identifier for referencing resources in a common way.
+ */
+@property (nonatomic, readonly, copy) NSString *resourceUid;
+
+/**
+ * The channel name.
+ */
+@property (nonatomic, readonly, copy) NSString *name;
+
+/**
+ * The channel primary color.
+ */
+@property (nonatomic, readonly) UIColor *color;
+
+/**
+ * The channel second color.
+ */
+@property (nonatomic, readonly) UIColor *secondColor;
+
+/**
+ * The channel title color.
+ */
+@property (nonatomic, readonly) UIColor *titleColor;
+
+/**
+ * Return `YES` iff the status bar should be dark for this channel.
+ */
+@property (nonatomic, readonly, getter=hasDarkStatusBar) BOOL darkStatusBar;
+
+/**
+ * The songs view style when added to the view.
+ */
+@property (nonatomic, readonly) SongsViewStyle songsViewStyle;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Application/Sources/Configuration/Channel.m b/Application/Sources/Configuration/Channel.m
new file mode 100644
index 000000000..f011ead3c
--- /dev/null
+++ b/Application/Sources/Configuration/Channel.m
@@ -0,0 +1,132 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import "Channel.h"
+
+#import
+
+static SongsViewStyle SongsViewStyleWithString(NSString *string)
+{
+ static dispatch_once_t s_onceToken;
+ static NSDictionary *s_songsViewStyles;
+ dispatch_once(&s_onceToken, ^{
+ s_songsViewStyles = @{ @"collapsed" : @(SongsViewStyleCollapsed),
+ @"expanded" : @(SongsViewStyleExpanded) };
+ });
+ NSNumber *songsViewStyle = s_songsViewStyles[string];
+ return songsViewStyle ? songsViewStyle.integerValue : SongsViewStyleNone;
+}
+
+@interface Channel ()
+
+@property (nonatomic, copy) NSString *uid;
+@property (nonatomic, copy) NSString *name;
+@property (nonatomic, copy) NSString *resourceUid;
+@property (nonatomic) UIColor *color;
+@property (nonatomic) UIColor *secondColor;
+@property (nonatomic) UIColor *titleColor;
+@property (nonatomic, getter=hasDarkStatusBar) BOOL darkStatusBar;
+@property (nonatomic) SongsViewStyle songsViewStyle;
+
+@end
+
+@implementation Channel
+
+#pragma mark Object lifecycle
+
+- (instancetype)initWithDictionary:(NSDictionary *)dictionary
+{
+ if (self = [super init]) {
+ self.uid = dictionary[@"uid"];
+ if (! [self.uid isKindOfClass:NSString.class]) {
+ return nil;
+ }
+
+ self.name = dictionary[@"name"];
+ if (! [self.name isKindOfClass:NSString.class]) {
+ return nil;
+ }
+
+ self.resourceUid = dictionary[@"resourceUid"];
+ if (! [self.resourceUid isKindOfClass:NSString.class]) {
+ return nil;
+ }
+
+ id colorValue = dictionary[@"color"];
+ if ([colorValue isKindOfClass:NSString.class]) {
+ self.color = [UIColor srg_colorFromHexadecimalString:colorValue] ?: UIColor.grayColor;
+ }
+ else {
+ self.color = UIColor.grayColor;
+ }
+
+ id secondColorValue = dictionary[@"secondColor"];
+ if ([secondColorValue isKindOfClass:NSString.class]) {
+ self.secondColor = [UIColor srg_colorFromHexadecimalString:secondColorValue] ?: self.color;
+ }
+ else {
+ self.secondColor = self.color;
+ }
+
+ id titleColorValue = dictionary[@"titleColor"];
+ if ([titleColorValue isKindOfClass:NSString.class]) {
+ self.titleColor = [UIColor srg_colorFromHexadecimalString:titleColorValue] ?: UIColor.whiteColor;
+ }
+ else {
+ self.titleColor = UIColor.whiteColor;
+ }
+
+ id darkStatusBarValue = dictionary[@"hasDarkStatusBar"];
+ if ([darkStatusBarValue isKindOfClass:NSNumber.class]) {
+ self.darkStatusBar = [darkStatusBarValue boolValue];
+ }
+
+ id songsViewStyleValue = dictionary[@"songsViewStyle"];
+ if ([songsViewStyleValue isKindOfClass:NSString.class]) {
+ self.songsViewStyle = SongsViewStyleWithString(songsViewStyleValue);
+ }
+ }
+ return self;
+}
+
+- (instancetype)init
+{
+ [self doesNotRecognizeSelector:_cmd];
+ return [self initWithDictionary:@{}];
+}
+
+#pragma mark Object identity
+
+- (BOOL)isEqual:(id)object
+{
+ if (self == object) {
+ return YES;
+ }
+
+ if (! [object isKindOfClass:self.class]) {
+ return NO;
+ }
+
+ return [self.uid isEqualToString:[object uid]];
+}
+
+- (NSUInteger)hash
+{
+ return self.uid.hash;
+}
+
+#pragma mark Description
+
+- (NSString *)description
+{
+ return [NSString stringWithFormat:@"<%@: %p; uid = %@; name = %@>",
+ self.class,
+ self,
+ self.uid,
+ self.name];
+}
+
+@end
diff --git a/Application/Sources/Configuration/RadioChannel.h b/Application/Sources/Configuration/RadioChannel.h
index 1355f821c..af71dbc05 100755
--- a/Application/Sources/Configuration/RadioChannel.h
+++ b/Application/Sources/Configuration/RadioChannel.h
@@ -4,7 +4,7 @@
// License information is available from the LICENSE file.
//
-#import
+#import "Channel.h"
NS_ASSUME_NONNULL_BEGIN
@@ -25,42 +25,7 @@ OBJC_EXPORT NSString * _Nullable RadioChannelImageOverridePath(RadioChannel * _N
/**
* Represent a radio channel in the application configuration.
*/
-@interface RadioChannel : NSObject
-
-/**
- * Create the radio channel from a dictionary. Return `nil` if the dictionary format is incorrect.
- */
-- (nullable instancetype)initWithDictionary:(NSDictionary *)dictionary NS_DESIGNATED_INITIALIZER;
-
-/**
- * The unique identifier of the radio channel (`SRGChannel` uid).
- */
-@property (nonatomic, readonly, copy) NSString *uid;
-
-/**
- * The radio channel name.
- */
-@property (nonatomic, readonly, copy) NSString *name;
-
-/**
- * The radio channel primary color.
- */
-@property (nonatomic, readonly) UIColor *color;
-
-/**
- * The radio channel title color (white by default).
- */
-@property (nonatomic, readonly) UIColor *titleColor;
-
-/**
- * Return `YES` iff the status bar should be dark for this channel.
- */
-@property (nonatomic, readonly, getter=hasDarkStatusBar) BOOL darkStatusBar;
-
-/**
- * Set to `YES` to hide the badge stroke (the badge stroke color matches title color). Default is `NO`.
- */
-@property (nonatomic, readonly, getter=isBadgeStrokeHidden) BOOL badgeStrokeHidden;
+@interface RadioChannel : Channel
/**
* The home sections ordered list.
diff --git a/Application/Sources/Configuration/RadioChannel.m b/Application/Sources/Configuration/RadioChannel.m
index d1a4c1989..2a01614aa 100755
--- a/Application/Sources/Configuration/RadioChannel.m
+++ b/Application/Sources/Configuration/RadioChannel.m
@@ -6,19 +6,8 @@
#import "RadioChannel.h"
-#import "UIColor+PlaySRG.h"
-
-#import
-
@interface RadioChannel ()
-@property (nonatomic, copy) NSString *uid;
-@property (nonatomic, copy) NSString *name;
-@property (nonatomic, copy) NSString *resourceUid; // Local unique identifier for referencing resources in a common way
-@property (nonatomic) UIColor *color;
-@property (nonatomic) UIColor *titleColor;
-@property (nonatomic, getter=hasDarkStatusBar) BOOL darkStatusBar;
-@property (nonatomic, getter=isBadgeStrokeHidden) BOOL badgeStrokeHidden;
@property (nonatomic) NSArray *homeSections;
@end
@@ -29,95 +18,15 @@ @implementation RadioChannel
- (instancetype)initWithDictionary:(NSDictionary *)dictionary
{
- if (self = [super init]) {
- self.uid = dictionary[@"uid"];
- if (! [self.uid isKindOfClass:NSString.class]) {
- return nil;
- }
-
- self.name = dictionary[@"name"];
- if (! [self.name isKindOfClass:NSString.class]) {
- return nil;
- }
-
- self.resourceUid = dictionary[@"resourceUid"];
- if (! [self.resourceUid isKindOfClass:NSString.class]) {
- return nil;
- }
-
- id colorValue = dictionary[@"color"];
- if (! [colorValue isKindOfClass:NSString.class]) {
- return nil;
- }
-
- self.color = [UIColor srg_colorFromHexadecimalString:colorValue];
- if (! self.color) {
- return nil;
- }
-
+ if (self = [super initWithDictionary:dictionary]) {
self.homeSections = dictionary[@"homeSections"];
if (! [self.homeSections isKindOfClass:NSArray.class] || self.homeSections.count == 0) {
return nil;
}
-
- id titleColorValue = dictionary[@"titleColor"];
- if ([titleColorValue isKindOfClass:NSString.class]) {
- self.titleColor = [UIColor srg_colorFromHexadecimalString:titleColorValue] ?: UIColor.whiteColor;
- }
- else {
- self.titleColor = UIColor.whiteColor;
- }
-
- id darkStatusBarValue = dictionary[@"hasDarkStatusBar"];
- if ([darkStatusBarValue isKindOfClass:NSNumber.class]) {
- self.darkStatusBar = [darkStatusBarValue boolValue];
- }
-
- id badgeStrokeHiddenValue = dictionary[@"badgeStrokeHidden"];
- if ([badgeStrokeHiddenValue isKindOfClass:NSNumber.class]) {
- self.badgeStrokeHidden = [badgeStrokeHiddenValue boolValue];
- }
}
return self;
}
-- (instancetype)init
-{
- [self doesNotRecognizeSelector:_cmd];
- return [self initWithDictionary:@{}];
-}
-
-#pragma mark - Object identity
-
-- (BOOL)isEqual:(id)object
-{
- if (self == object) {
- return YES;
- }
-
- if (! [object isKindOfClass:self.class]) {
- return NO;
- }
-
- return [self.uid isEqualToString:[object uid]];
-}
-
-- (NSUInteger)hash
-{
- return self.uid.hash;
-}
-
-#pragma mark Description
-
-- (NSString *)description
-{
- return [NSString stringWithFormat:@"<%@: %p; uid = %@; name = %@>",
- self.class,
- self,
- self.uid,
- self.name];
-}
-
@end
UIImage *RadioChannelBanner22Image(RadioChannel *radioChannel)
diff --git a/Application/Sources/Configuration/TVChannel.h b/Application/Sources/Configuration/TVChannel.h
index 8172f856d..3bcd6e866 100755
--- a/Application/Sources/Configuration/TVChannel.h
+++ b/Application/Sources/Configuration/TVChannel.h
@@ -4,7 +4,7 @@
// License information is available from the LICENSE file.
//
-#import
+#import "Channel.h"
NS_ASSUME_NONNULL_BEGIN
@@ -24,22 +24,7 @@ OBJC_EXPORT NSString * _Nullable TVChannelImageOverridePath(TVChannel * _Nullabl
/**
* Represent a TV channel in the application configuration.
*/
-@interface TVChannel : NSObject
-
-/**
- * Create the TV channel from a dictionary. Return `nil` if the dictionary format is incorrect.
- */
-- (nullable instancetype)initWithDictionary:(NSDictionary *)dictionary NS_DESIGNATED_INITIALIZER;
-
-/**
- * The unique identifier of the TV channel (`SRGChannel` uid).
- */
-@property (nonatomic, readonly, copy) NSString *uid;
-
-/**
- * The TV channel name.
- */
-@property (nonatomic, readonly, copy) NSString *name;
+@interface TVChannel : Channel
@end
diff --git a/Application/Sources/Configuration/TVChannel.m b/Application/Sources/Configuration/TVChannel.m
index b02d0281f..0867744ba 100755
--- a/Application/Sources/Configuration/TVChannel.m
+++ b/Application/Sources/Configuration/TVChannel.m
@@ -6,78 +6,12 @@
#import "TVChannel.h"
-#import "UIColor+PlaySRG.h"
-
@interface TVChannel ()
-@property (nonatomic, copy) NSString *uid;
-@property (nonatomic, copy) NSString *name;
-@property (nonatomic, copy) NSString *resourceUid; // Local unique identifier for referencing resources in a common way
-
@end
@implementation TVChannel
-#pragma Object lifecycle
-
-- (instancetype)initWithDictionary:(NSDictionary *)dictionary
-{
- if (self = [super init]) {
- self.uid = dictionary[@"uid"];
- if (! [self.uid isKindOfClass:NSString.class]) {
- return nil;
- }
-
- self.name = dictionary[@"name"];
- if (! [self.name isKindOfClass:NSString.class]) {
- return nil;
- }
-
- self.resourceUid = dictionary[@"resourceUid"];
- if (! [self.resourceUid isKindOfClass:NSString.class]) {
- return nil;
- }
- }
- return self;
-}
-
-- (instancetype)init
-{
- [self doesNotRecognizeSelector:_cmd];
- return [self initWithDictionary:@{}];
-}
-
-#pragma mark - Object identity
-
-- (BOOL)isEqual:(id)object
-{
- if (self == object) {
- return YES;
- }
-
- if (! [object isKindOfClass:self.class]) {
- return NO;
- }
-
- return [self.uid isEqualToString:[object uid]];
-}
-
-- (NSUInteger)hash
-{
- return self.uid.hash;
-}
-
-#pragma mark Description
-
-- (NSString *)description
-{
- return [NSString stringWithFormat:@"<%@: %p; uid = %@; name = %@>",
- self.class,
- self,
- self.uid,
- self.name];
-}
-
@end
UIImage *TVChannelBanner22Image(TVChannel *tvChannel)
diff --git a/Application/Sources/Downloads/DownloadSession.m b/Application/Sources/Downloads/DownloadSession.m
index c47ae0ca9..3ea83d1ab 100755
--- a/Application/Sources/Downloads/DownloadSession.m
+++ b/Application/Sources/Downloads/DownloadSession.m
@@ -273,21 +273,6 @@ - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didComp
[task cancel];
// Replace with a new one using the resume data
- // Remark: Does not work perfectly on iOS 10 because of a bug (e.g. resume will only work once in my tests),
- // see https://forums.developer.apple.com/thread/63585 and http://stackoverflow.com/questions/39346231/resume-nsurlsession-on-ios10/39347461#39347461,
- // which describe similar issues encountered with download resuming on iOS 10, some of
- // them fixed by iOS 10.2 (but not all probably)
- //
- // Current status:
- // - iOS 9: Works perfectly
- // - iOS 10.1: Resume does not work, download start again at 0
- // - iOS 10.2: Resume works the first time, a second resume starts again at 0
- //
- // This behavior is consistent with the one obtained with the HalfTunes sample app
- // (see https://www.raywenderlich.com/110458/nsurlsession-tutorial-getting-started):
- // - iOS 9: Works perfectly
- // - iOS 10.1: Pause / resume does not work, download hangs
- // - iOS 10.2: Resume works the first time, a second resume hangs
NSURLSessionDownloadTask *mediaFileTask = [self.session downloadTaskWithResumeData:resumeData];
self.downloads[@(mediaFileTask.taskIdentifier)] = download;
[mediaFileTask resume];
diff --git a/Application/Sources/Downloads/DownloadTableViewCell.m b/Application/Sources/Downloads/DownloadTableViewCell.m
index f40c08f74..ec6b151e8 100755
--- a/Application/Sources/Downloads/DownloadTableViewCell.m
+++ b/Application/Sources/Downloads/DownloadTableViewCell.m
@@ -52,7 +52,7 @@ - (void)awakeFromNib
{
[super awakeFromNib];
- self.backgroundColor = UIColor.clearColor;
+ self.backgroundColor = UIColor.play_blackColor;
UIView *selectedBackgroundView = [[UIView alloc] init];
selectedBackgroundView.backgroundColor = UIColor.clearColor;
@@ -251,7 +251,6 @@ - (void)setDownload:(Download *)download
- (void)updateDownloadStatus
{
- UIImage *downloadImage = nil;
UIColor *tintColor = (self.editing && (self.selected || self.highlighted)) ? UIColor.redColor : UIColor.play_lightGrayColor;
self.subtitleLabel.text = [NSDateFormatter.play_relativeDateAndTimeFormatter stringFromDate:self.download.date].play_localizedUppercaseFirstLetterString;
@@ -260,40 +259,44 @@ - (void)updateDownloadStatus
switch (self.download.state) {
case DownloadStateAdded:
case DownloadStateDownloadingSuspended: {
- [self.downloadStatusImageView play_stopAnimating];
- downloadImage = [UIImage imageNamed:@"downloadable_stop-16"];
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = [UIImage imageNamed:@"downloadable_stop-16"];
+ self.downloadStatusImageView.tintColor = tintColor;
break;
}
case DownloadStateDownloading: {
- [self.downloadStatusImageView play_startAnimatingDownloading16WithTintColor:tintColor];
- NSProgress *progress = ([Download currentlyKnownProgressForDownload:self.download]) ?: [NSProgress progressWithTotalUnitCount:10]; // Display 0% if nothing
+ NSProgress *progress = [Download currentlyKnownProgressForDownload:self.download] ?: [NSProgress progressWithTotalUnitCount:10]; // Display 0% if nothing
self.subtitleLabel.text = [progress localizedDescription];
- downloadImage = self.downloadStatusImageView.image;
+
+ [self.downloadStatusImageView play_setDownloadAnimation16WithTintColor:tintColor];
+ [self.downloadStatusImageView startAnimating];
break;
}
case DownloadStateDownloaded: {
- [self.downloadStatusImageView play_stopAnimating];
self.subtitleLabel.text = [NSByteCountFormatter stringFromByteCount:self.download.size countStyle:NSByteCountFormatterCountStyleFile];
- downloadImage = [UIImage imageNamed:@"downloadable_full-16"];
+
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = [UIImage imageNamed:@"downloadable_full-16"];
+ self.downloadStatusImageView.tintColor = tintColor;
break;
}
case DownloadStateDownloadable:
case DownloadStateRemoved: {
- [self.downloadStatusImageView play_stopAnimating];
- downloadImage = [UIImage imageNamed:@"downloadable-16"];
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = [UIImage imageNamed:@"downloadable-16"];
+ self.downloadStatusImageView.tintColor = tintColor;
break;
}
default: {
- [self.downloadStatusImageView play_stopAnimating];
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = nil;
break;
}
}
- self.downloadStatusImageView.image = downloadImage;
- self.downloadStatusImageView.tintColor = tintColor;
}
- (void)updateHistoryStatus
diff --git a/Application/Sources/Downloads/DownloadsViewController.m b/Application/Sources/Downloads/DownloadsViewController.m
index 9fa67c5cb..5b56bdf5a 100755
--- a/Application/Sources/Downloads/DownloadsViewController.m
+++ b/Application/Sources/Downloads/DownloadsViewController.m
@@ -248,7 +248,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
- return LayoutTableViewCellStandardHeight + LayoutStandardMargin;
+ return LayoutTableTopAlignedCellHeight(LayoutTableViewCellStandardHeight, LayoutStandardMargin, indexPath.row, self.downloads.count);
}
- (void)tableView:(UITableView *)tableView willDisplayCell:(DownloadTableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
diff --git a/Application/Sources/Favorites/FavoritesViewController.m b/Application/Sources/Favorites/FavoritesViewController.m
index e55572ac0..39e2bf8cf 100755
--- a/Application/Sources/Favorites/FavoritesViewController.m
+++ b/Application/Sources/Favorites/FavoritesViewController.m
@@ -342,7 +342,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
- return LayoutTableViewCellStandardHeight + LayoutStandardMargin;
+ return LayoutTableTopAlignedCellHeight(LayoutTableViewCellStandardHeight, LayoutStandardMargin, indexPath.row, self.shows.count);
}
- (void)tableView:(UITableView *)tableView willDisplayCell:(FavoriteTableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
diff --git a/Application/Sources/Helpers/ApplicationSectionInfo.m b/Application/Sources/Helpers/ApplicationSectionInfo.m
index cb211af9e..9f8501d5c 100755
--- a/Application/Sources/Helpers/ApplicationSectionInfo.m
+++ b/Application/Sources/Helpers/ApplicationSectionInfo.m
@@ -53,16 +53,14 @@ + (ApplicationSectionInfo *)applicationSectionInfoWithNotification:(Notification
+ (NSArray *)profileApplicationSectionInfosWithNotificationPreview:(BOOL)notificationPreview
{
NSMutableArray *sectionInfos = [NSMutableArray array];
- if (@available(iOS 10, *)) {
- if (PushService.sharedService.enabled) {
- [sectionInfos addObject:[self applicationSectionInfoWithApplicationSection:ApplicationSectionNotifications radioChannel:nil]];
-
- if (notificationPreview) {
- NSArray *unreadNotifications = Notification.unreadNotifications;
- NSArray *previewNotifications = [unreadNotifications subarrayWithRange:NSMakeRange(0, MIN(3, unreadNotifications.count))];
- for (Notification *notification in previewNotifications) {
- [sectionInfos addObject:[self applicationSectionInfoWithNotification:notification]];
- }
+ if (PushService.sharedService.enabled) {
+ [sectionInfos addObject:[self applicationSectionInfoWithApplicationSection:ApplicationSectionNotifications radioChannel:nil]];
+
+ if (notificationPreview) {
+ NSArray *unreadNotifications = Notification.unreadNotifications;
+ NSArray *previewNotifications = [unreadNotifications subarrayWithRange:NSMakeRange(0, MIN(3, unreadNotifications.count))];
+ for (Notification *notification in previewNotifications) {
+ [sectionInfos addObject:[self applicationSectionInfoWithNotification:notification]];
}
}
}
diff --git a/Application/Sources/Helpers/Categories/NSTimer+PlaySRG.h b/Application/Sources/Helpers/Categories/NSTimer+PlaySRG.h
index 51f980ed3..6686bbf62 100755
--- a/Application/Sources/Helpers/Categories/NSTimer+PlaySRG.h
+++ b/Application/Sources/Helpers/Categories/NSTimer+PlaySRG.h
@@ -11,7 +11,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface NSTimer (PlaySRG)
/**
- * Create a block-based timer (a feature only available since iOS 10), scheduled with common run loop modes.
+ * Create a block-based timer, scheduled with common run loop modes.
*/
+ (NSTimer *)play_timerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats block:(void (^)(NSTimer *timer))block;
diff --git a/Application/Sources/Helpers/Categories/NSTimer+PlaySRG.m b/Application/Sources/Helpers/Categories/NSTimer+PlaySRG.m
index 8406fe164..ac92c92b8 100755
--- a/Application/Sources/Helpers/Categories/NSTimer+PlaySRG.m
+++ b/Application/Sources/Helpers/Categories/NSTimer+PlaySRG.m
@@ -6,26 +6,12 @@
#import "NSTimer+PlaySRG.h"
-#import "TimerTarget.h"
-
@implementation NSTimer (PlaySRG)
+ (NSTimer *)play_timerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats block:(void (^)(NSTimer * _Nonnull))block
{
- NSTimer *timer = nil;
-
- if (@available(iOS 10, *)) {
- timer = [self timerWithTimeInterval:interval repeats:repeats block:block];
- }
- else {
- // Do not use self as target, since this would lead to subtle issues when the timer is deallocated
- TimerTarget *target = [[TimerTarget alloc] initWithBlock:block];
- timer = [self timerWithTimeInterval:interval target:target selector:@selector(fire:) userInfo:nil repeats:repeats];
- }
-
- // Use the recommended 10% tolerance as default, see `tolerance` documentation
+ NSTimer *timer = [self timerWithTimeInterval:interval repeats:repeats block:block];
timer.tolerance = interval / 10.;
-
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
return timer;
}
diff --git a/Application/Sources/Helpers/Categories/SRGLetterboxController+PlaySRG.h b/Application/Sources/Helpers/Categories/SRGLetterboxController+PlaySRG.h
new file mode 100644
index 000000000..edad935d9
--- /dev/null
+++ b/Application/Sources/Helpers/Categories/SRGLetterboxController+PlaySRG.h
@@ -0,0 +1,17 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SRGLetterboxController (PlaySRG)
+
+@property (nonatomic, readonly, nullable) NSDateInterval *play_dateInterval;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Application/Sources/Helpers/Categories/SRGLetterboxController+PlaySRG.m b/Application/Sources/Helpers/Categories/SRGLetterboxController+PlaySRG.m
new file mode 100644
index 000000000..0ac08578d
--- /dev/null
+++ b/Application/Sources/Helpers/Categories/SRGLetterboxController+PlaySRG.m
@@ -0,0 +1,24 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import "SRGLetterboxController+PlaySRG.h"
+
+@implementation SRGLetterboxController (PlaySRG)
+
+- (NSDateInterval *)play_dateInterval
+{
+ CMTimeRange timeRange = self.timeRange;
+ NSDate *startDate = [self streamDateForTime:timeRange.start];
+ NSDate *endDate = [self streamDateForTime:CMTimeRangeGetEnd(timeRange)];
+ if (startDate && endDate) {
+ return [[NSDateInterval alloc] initWithStartDate:startDate endDate:endDate];
+ }
+ else {
+ return nil;
+ }
+}
+
+@end
diff --git a/Application/Sources/Helpers/Categories/SRGProgram+PlaySRG.m b/Application/Sources/Helpers/Categories/SRGProgram+PlaySRG.m
index 49a9891b0..2344aa058 100755
--- a/Application/Sources/Helpers/Categories/SRGProgram+PlaySRG.m
+++ b/Application/Sources/Helpers/Categories/SRGProgram+PlaySRG.m
@@ -10,7 +10,8 @@ @implementation SRGProgram (PlaySRG)
- (BOOL)play_containsDate:(NSDate *)date
{
- return [self.startDate compare:date] != NSOrderedDescending && [date compare:self.endDate] != NSOrderedDescending;
+ NSDateInterval *dateInterval = [[NSDateInterval alloc] initWithStartDate:self.startDate endDate:self.endDate];
+ return [dateInterval containsDate:date];
}
@end
diff --git a/Application/Sources/Helpers/Categories/SRGProgramComposition+PlaySRG.h b/Application/Sources/Helpers/Categories/SRGProgramComposition+PlaySRG.h
new file mode 100644
index 000000000..7f404aca6
--- /dev/null
+++ b/Application/Sources/Helpers/Categories/SRGProgramComposition+PlaySRG.h
@@ -0,0 +1,28 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SRGProgramComposition (PlaySRG)
+
+/**
+* Return the program at the specified date, if any.
+*/
+- (nullable SRGProgram *)play_programAtDate:(NSDate *)date;
+
+/**
+ * Returns only programs matching in a given date range. The range can be open or possibly half-open. If media URNs
+ * are provided, only matching programs will be returned.
+ */
+- (nullable NSArray *)play_programsFromDate:(nullable NSDate *)fromDate
+ toDate:(nullable NSDate *)toDate
+ withMediaURNs:(nullable NSArray *)mediaURNs;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Application/Sources/Helpers/Categories/SRGProgramComposition+PlaySRG.m b/Application/Sources/Helpers/Categories/SRGProgramComposition+PlaySRG.m
new file mode 100644
index 000000000..c89cce32e
--- /dev/null
+++ b/Application/Sources/Helpers/Categories/SRGProgramComposition+PlaySRG.m
@@ -0,0 +1,42 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import "SRGProgramComposition+PlaySRG.h"
+
+#import "SRGProgram+PlaySRG.h"
+
+@implementation SRGProgramComposition (PlaySRG)
+
+- (SRGProgram *)play_programAtDate:(NSDate *)date
+{
+ NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(SRGProgram * _Nullable program, NSDictionary * _Nullable bindings) {
+ return [program play_containsDate:date];
+ }];
+ return [self.programs filteredArrayUsingPredicate:predicate].firstObject;
+}
+
+- (NSArray *)play_programsFromDate:(NSDate *)fromDate toDate:(NSDate *)toDate withMediaURNs:(NSArray *)mediaURNs
+{
+ NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(SRGProgram * _Nullable program, NSDictionary * _Nullable bindings) {
+ if (fromDate && [program.startDate compare:fromDate] == NSOrderedAscending) {
+ return NO;
+ }
+
+ if (toDate && [toDate compare:program.startDate] == NSOrderedAscending) {
+ return NO;
+ }
+
+ if (mediaURNs && ! [mediaURNs containsObject:program.mediaURN]) {
+ return NO;
+ }
+
+ return YES;
+ }];
+
+ return [self.programs filteredArrayUsingPredicate:predicate];
+}
+
+@end
diff --git a/Application/Sources/Helpers/Categories/UIApplication+PlaySRG.m b/Application/Sources/Helpers/Categories/UIApplication+PlaySRG.m
index 4e9b3f7c9..fbb3c52dd 100755
--- a/Application/Sources/Helpers/Categories/UIApplication+PlaySRG.m
+++ b/Application/Sources/Helpers/Categories/UIApplication+PlaySRG.m
@@ -19,35 +19,24 @@ - (void)play_openURL:(NSURL *)URL withCompletionHandler:(void (^)(BOOL))completi
if ([URL.scheme isEqualToString:@"https"] || [URL.scheme isEqualToString:@"http"]) {
SFSafariViewController *safariViewController = [[SFSafariViewController alloc] initWithURL:URL];
safariViewController.modalPresentationStyle = UIModalPresentationFullScreen;
- if (@available(iOS 10, *)) {
- safariViewController.preferredBarTintColor = UIColor.play_blackColor;
- safariViewController.preferredControlTintColor = UIColor.whiteColor;
- }
+ safariViewController.preferredBarTintColor = UIColor.play_blackColor;
+ safariViewController.preferredControlTintColor = UIColor.whiteColor;
[self.keyWindow.play_topViewController presentViewController:safariViewController animated:YES completion:nil];
completion ? completion(YES) : nil;
}
- else if ([self canOpenURL:URL]) {
- [self openURL:URL];
- completion ? completion(YES) : nil;
- }
else {
completion ? completion(NO) : nil;
}
};
- if (@available(iOS 10, *)) {
- [self openURL:URL options:@{ UIApplicationOpenURLOptionUniversalLinksOnly : @YES } completionHandler:^(BOOL success) {
- if (success) {
- completion ? completion(YES) : nil;
- }
- else {
- openCompletion(URL);
- }
- }];
- }
- else {
- openCompletion(URL);
- }
+ [self openURL:URL options:@{ UIApplicationOpenURLOptionUniversalLinksOnly : @YES } completionHandler:^(BOOL success) {
+ if (success) {
+ completion ? completion(YES) : nil;
+ }
+ else {
+ openCompletion(URL);
+ }
+ }];
}
@end
diff --git a/Application/Sources/Helpers/Categories/UIColor+PlaySRG.h b/Application/Sources/Helpers/Categories/UIColor+PlaySRG.h
index 756d39d56..8fb95e77a 100755
--- a/Application/Sources/Helpers/Categories/UIColor+PlaySRG.h
+++ b/Application/Sources/Helpers/Categories/UIColor+PlaySRG.h
@@ -24,7 +24,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (class, nonatomic, readonly) UIColor *play_blackDurationLabelBackgroundColor;
@property (class, nonatomic, readonly) UIColor *play_whiteBadgeColor;
-@property (class, nonatomic, readonly) UIColor *play_blurTintColor API_DEPRECATED("Use UIBlurEffectStyleSystemMaterialDark", ios(9.0, 12.0));
+@property (class, nonatomic, readonly) UIColor *play_blurTintColor API_DEPRECATED("Use UIBlurEffectStyleSystemMaterialDark", ios(9.0, 13.0));
@end
diff --git a/Application/Sources/Helpers/Categories/UIImage+PlaySRG.h b/Application/Sources/Helpers/Categories/UIImage+PlaySRG.h
index 7ff7b41b2..207a17f82 100755
--- a/Application/Sources/Helpers/Categories/UIImage+PlaySRG.h
+++ b/Application/Sources/Helpers/Categories/UIImage+PlaySRG.h
@@ -16,6 +16,7 @@ typedef NS_ENUM(NSInteger, ImageScale) {
};
typedef NS_ENUM(NSInteger, ImagePlaceholder) {
+ ImagePlaceholderNone,
ImagePlaceholderMedia,
ImagePlaceholderMediaList,
ImagePlaceholderNotification
@@ -29,7 +30,7 @@ OBJC_EXPORT CGSize SizeForImageScale(ImageScale imageScale);
/**
* Return the file path corresponding to an image placeholder.
*/
-OBJC_EXPORT NSString *FilePathForImagePlaceholder(ImagePlaceholder imagePlaceholder);
+OBJC_EXPORT NSString * _Nullable FilePathForImagePlaceholder(ImagePlaceholder imagePlaceholder);
/**
* Youth protection image associated with a color, if any.
@@ -43,33 +44,15 @@ OBJC_EXPORT UIImage * _Nullable YouthProtectionImageForColor(SRGYouthProtectionC
*/
+ (nullable UIImage *)play_imageForBlockingReason:(SRGBlockingReason)blockingReason;
-/**
- * If set to `YES`, only original images available from the service will be used, otherwise some bad images might
- * be fixed with local versions.
- *
- * The default behavior is `NO`.
- */
-+ (void)play_setUseOriginalImagesOnly:(BOOL)useOriginalImagesOnly;
-
/**
* Return an image generated from the vector image at the specified path.
*
* @param filePath The path of the vector image to use.
* @param scale The scale of the image to create.
*
- * @return The generated image, `nil` if generation failed.
- */
-+ (nullable UIImage *)play_vectorImageAtPath:(NSString *)filePath withScale:(ImageScale)imageScale;
-
-/**
- * Return the file URL of an image generated from the vector image at the specified path.
- *
- * @param filePath The path of the vector image to use.
- * @param scale The scale of the image to create.
- *
- * @return The generated image, `nil` if generation failed.
+ * @return The generated image, `nil` if generation failed or if the path is `nil`.
*/
-+ (nullable NSURL *)play_URLForVectorImageAtPath:(NSString *)filePath withScale:(ImageScale)imageScale;
++ (nullable UIImage *)play_vectorImageAtPath:(nullable NSString *)filePath withScale:(ImageScale)imageScale;
@end
diff --git a/Application/Sources/Helpers/Categories/UIImage+PlaySRG.m b/Application/Sources/Helpers/Categories/UIImage+PlaySRG.m
index 371dfda8f..a17392d7f 100755
--- a/Application/Sources/Helpers/Categories/UIImage+PlaySRG.m
+++ b/Application/Sources/Helpers/Categories/UIImage+PlaySRG.m
@@ -10,18 +10,6 @@
#import
-// ** Private SRGDataProvider fixes for Play. See NSURL+SRGDataProvider.h for more information
-
-typedef NSURL * _Nullable (^SRGDataProviderURLOverridingBlock)(NSString *uid, NSString *type, SRGImageDimension dimension, CGFloat value);
-
-@interface NSURL (Private_SRGDataProvider)
-
-+ (void)srg_setImageURLOverridingBlock:(SRGDataProviderURLOverridingBlock)imageURLOverridingBlock;
-
-@end
-
-// **
-
CGSize SizeForImageScale(ImageScale imageScale)
{
static NSDictionary *s_widths;
@@ -47,6 +35,11 @@ CGSize SizeForImageScale(ImageScale imageScale)
NSString *FilePathForImagePlaceholder(ImagePlaceholder imagePlaceholder)
{
switch (imagePlaceholder) {
+ case ImagePlaceholderMedia: {
+ return [NSBundle.mainBundle pathForResource:@"placeholder_media-180" ofType:@"pdf"];
+ break;
+ }
+
case ImagePlaceholderMediaList: {
return [NSBundle.mainBundle pathForResource:@"placeholder_media_list-180" ofType:@"pdf"];
break;
@@ -58,7 +51,7 @@ CGSize SizeForImageScale(ImageScale imageScale)
}
default: {
- return [NSBundle.mainBundle pathForResource:@"placeholder_media-180" ofType:@"pdf"];
+ return nil;
break;
}
}
@@ -123,39 +116,9 @@ + (UIImage *)play_imageForBlockingReason:(SRGBlockingReason)blockingReason
}
}
-+ (void)play_setUseOriginalImagesOnly:(BOOL)useOriginalImagesOnly
-{
- if (! useOriginalImagesOnly) {
- [NSURL srg_setImageURLOverridingBlock:^NSURL * _Nullable(NSString *uid, NSString *type, SRGImageDimension dimension, CGFloat value) {
- NSString *overrideImagePath = [self overrideImagePathForUid:uid withType:type];
- if (! overrideImagePath) {
- return nil;
- }
-
- CGFloat valueInPixels = value * UIScreen.mainScreen.scale;
- CGSize size = CGSizeZero;
- if ([type isEqualToString:@"artwork"]) {
- size = CGSizeMake(valueInPixels, valueInPixels);
- }
- else {
- size = (dimension == SRGImageDimensionWidth) ? CGSizeMake(valueInPixels, 9.f * valueInPixels / 16.f) : CGSizeMake(16.f * valueInPixels / 9.f, valueInPixels);
- }
- return [UIImage srg_URLForVectorImageAtPath:overrideImagePath withSize:size];
- }];
- }
- else {
- [NSURL srg_setImageURLOverridingBlock:nil];
- }
-}
-
+ (UIImage *)play_vectorImageAtPath:(NSString *)filePath withScale:(ImageScale)imageScale
{
- return [self srg_vectorImageAtPath:filePath withSize:SizeForImageScale(imageScale)];
-}
-
-+ (NSURL *)play_URLForVectorImageAtPath:(NSString *)filePath withScale:(ImageScale)imageScale
-{
- return [self srg_URLForVectorImageAtPath:filePath withSize:SizeForImageScale(imageScale)];
+ return filePath ? [self srg_vectorImageAtPath:filePath withSize:SizeForImageScale(imageScale)] : nil;
}
+ (NSString *)overrideImagePathForUid:(NSString *)uid withType:(NSString *)type
diff --git a/Application/Sources/Helpers/Categories/UIImageView+PlaySRG.h b/Application/Sources/Helpers/Categories/UIImageView+PlaySRG.h
index fff4854a6..8c45308f4 100755
--- a/Application/Sources/Helpers/Categories/UIImageView+PlaySRG.h
+++ b/Application/Sources/Helpers/Categories/UIImageView+PlaySRG.h
@@ -13,27 +13,28 @@ NS_ASSUME_NONNULL_BEGIN
@interface UIImageView (PlaySRG)
/**
- * Standard loading indicators
+ * Standard loading indicators (animation already started).
*/
+ (UIImageView *)play_loadingImageView48WithTintColor:(nullable UIColor *)tintColor;
+ (UIImageView *)play_loadingImageView90WithTintColor:(nullable UIColor *)tintColor;
/**
- * Standard loading animations
+ * Standard loading animations (must be managed with `-startAnimating` and `-stopAnimating`).
*/
-- (void)play_startAnimatingLoading90WithTintColor:(nullable UIColor *)tintColor;
+- (void)play_setLoadingAnimation90WithTintColor:(nullable UIColor *)tintColor;
/**
- * Standard download animations
+ * Standard download animations (must be managed with `-startAnimating` and `-stopAnimating`).
*/
-- (void)play_startAnimatingDownloading16WithTintColor:(nullable UIColor *)tintColor;
-- (void)play_startAnimatingDownloading22WithTintColor:(nullable UIColor *)tintColor;
-- (void)play_startAnimatingDownloading48WithTintColor:(nullable UIColor *)tintColor;
+- (void)play_setDownloadAnimation16WithTintColor:(nullable UIColor *)tintColor;
+- (void)play_setDownloadAnimation22WithTintColor:(nullable UIColor *)tintColor;
+- (void)play_setDownloadAnimation48WithTintColor:(nullable UIColor *)tintColor;
/**
- * Stop an animation
+ * Standard playback animations (must be managed with `-startAnimating` and `-stopAnimating`).
*/
-- (void)play_stopAnimating;
+- (void)play_setWaveformAnimation34WithTintColor:(nullable UIColor *)tintColor;
+- (void)play_setPlayAnimation34WithTintColor:(nullable UIColor *)tintColor;
/**
* Request an image of the specified object. Use `SRGImageTypeDefault` for the default image.
diff --git a/Application/Sources/Helpers/Categories/UIImageView+PlaySRG.m b/Application/Sources/Helpers/Categories/UIImageView+PlaySRG.m
index a52e6bff9..a5bf51e4a 100755
--- a/Application/Sources/Helpers/Categories/UIImageView+PlaySRG.m
+++ b/Application/Sources/Helpers/Categories/UIImageView+PlaySRG.m
@@ -68,44 +68,49 @@ + (UIImageView *)play_animatedImageViewNamed:(NSString *)name withTintColor:(UIC
return images.copy;
}
-#pragma mark Loading animation
+#pragma mark Loading animations
-- (void)play_startAnimatingLoading90WithTintColor:(UIColor *)tintColor
+- (void)play_setLoadingAnimation90WithTintColor:(UIColor *)tintColor
{
- [self play_startAnimatingWithImagesNamed:@"loading-90" withTintColor:tintColor];
+ [self play_setAnimationImagesNamed:@"loading-90" withTintColor:tintColor duration:1.];
}
-#pragma mark Downloading animation
+#pragma mark Downloading animations
-- (void)play_startAnimatingDownloading16WithTintColor:(nullable UIColor *)tintColor
+- (void)play_setDownloadAnimation16WithTintColor:(UIColor *)tintColor
{
- [self play_startAnimatingWithImagesNamed:@"downloading-16" withTintColor:tintColor];
+ [self play_setAnimationImagesNamed:@"downloading-16" withTintColor:tintColor duration:1.];
}
-- (void)play_startAnimatingDownloading22WithTintColor:(nullable UIColor *)tintColor
+- (void)play_setDownloadAnimation22WithTintColor:(UIColor *)tintColor
{
- [self play_startAnimatingWithImagesNamed:@"downloading-22" withTintColor:tintColor];
+ [self play_setAnimationImagesNamed:@"downloading-22" withTintColor:tintColor duration:1.];
}
-- (void)play_startAnimatingDownloading48WithTintColor:(nullable UIColor *)tintColor
+- (void)play_setDownloadAnimation48WithTintColor:(UIColor *)tintColor
{
- [self play_startAnimatingWithImagesNamed:@"downloading-48" withTintColor:tintColor];
+ [self play_setAnimationImagesNamed:@"downloading-48" withTintColor:tintColor duration:1.];
}
-#pragma mark Animation lifecycle
+#pragma mark Waveform animation
-- (void)play_startAnimatingWithImagesNamed:(NSString *)name withTintColor:(nullable UIColor *)tintColor
+- (void)play_setWaveformAnimation34WithTintColor:(UIColor *)tintColor
{
- self.animationImages = [UIImageView animatedImageNamed:name withTintColor:tintColor];
- self.image = self.animationImages.firstObject;
- self.animationDuration = 1.;
- [self startAnimating];
+ [self play_setAnimationImagesNamed:@"waveform-34" withTintColor:tintColor duration:0.96];
+}
+
+- (void)play_setPlayAnimation34WithTintColor:(UIColor *)tintColor
+{
+ [self play_setAnimationImagesNamed:@"play-34" withTintColor:tintColor duration:1.52];
}
-- (void)play_stopAnimating
+#pragma mark Animation lifecycle
+
+- (void)play_setAnimationImagesNamed:(NSString *)name withTintColor:(UIColor *)tintColor duration:(NSTimeInterval)duration
{
- [self stopAnimating];
- self.animationImages = nil;
+ self.animationImages = [UIImageView animatedImageNamed:name withTintColor:tintColor];
+ self.image = self.animationImages.firstObject;
+ self.animationDuration = duration;
}
#pragma mark Standard image loading
@@ -116,8 +121,9 @@ - (void)play_requestImageForObject:(id)object
placeholder:(ImagePlaceholder)placeholder
unavailabilityHandler:(void (^)(void))unavailabilityHandler
{
+ NSString *filePath = FilePathForImagePlaceholder(placeholder);
CGSize size = SizeForImageScale(scale);
- UIImage *placeholderImage = [UIImage srg_vectorImageAtPath:FilePathForImagePlaceholder(placeholder) withSize:size];
+ UIImage *placeholderImage = filePath ? [UIImage srg_vectorImageAtPath:filePath withSize:size] : nil;
void (^handleUnavailableURL)(void) = ^{
if (unavailabilityHandler) {
diff --git a/Application/Sources/Helpers/Categories/UILabel+PlaySRG.m b/Application/Sources/Helpers/Categories/UILabel+PlaySRG.m
index 4dd641700..d0ef0d8b6 100755
--- a/Application/Sources/Helpers/Categories/UILabel+PlaySRG.m
+++ b/Application/Sources/Helpers/Categories/UILabel+PlaySRG.m
@@ -15,12 +15,6 @@
#import
-@interface UIFont (SRGLetterbox_Private)
-
-+ (UIFont *)srg_awesomeFontWithTextStyle:(NSString *)textStyle;
-
-@end
-
@implementation UILabel (PlaySRG)
#pragma mark Public
diff --git a/Application/Sources/Helpers/Categories/UIScrollView+PlaySRG.m b/Application/Sources/Helpers/Categories/UIScrollView+PlaySRG.m
index 896d6b46e..edb262db2 100644
--- a/Application/Sources/Helpers/Categories/UIScrollView+PlaySRG.m
+++ b/Application/Sources/Helpers/Categories/UIScrollView+PlaySRG.m
@@ -10,12 +10,7 @@ @implementation UIScrollView (PlaySRG)
- (void)play_scrollToTopAnimated:(BOOL)animated
{
- if (@available(iOS 11, *)) {
- [self setContentOffset:CGPointMake(0.f, -self.adjustedContentInset.top) animated:animated];
- }
- else {
- [self setContentOffset:CGPointMake(0.f, -self.contentInset.top) animated:animated];
- }
+ [self setContentOffset:CGPointMake(0.f, -self.adjustedContentInset.top) animated:animated];
}
@end
diff --git a/Application/Sources/Helpers/Categories/UIViewController+PlaySRG.h b/Application/Sources/Helpers/Categories/UIViewController+PlaySRG.h
index 7a00dd123..2af5429cd 100755
--- a/Application/Sources/Helpers/Categories/UIViewController+PlaySRG.h
+++ b/Application/Sources/Helpers/Categories/UIViewController+PlaySRG.h
@@ -37,15 +37,6 @@ NS_ASSUME_NONNULL_BEGIN
- (BOOL)play_isMovingToParentViewController;
- (BOOL)play_isMovingFromParentViewController;
-/**
- * Same as `-setNeedsUpdateOfHomeIndicatorAutoHidden`, but fixing a UIKit crash. See http://www.openradar.me/35127134
- * for more information. Does nothing on devices running on iOS 10 or earlier.
- *
- * FIXME: Remove when possible. Might crash for people still running iOS 11 beta, see
- * https://twitter.com/Javi/status/1064531698015133696.
- */
-- (void)play_setNeedsUpdateOfHomeIndicatorAutoHidden;
-
/**
* The previewing context (peek) from which the view controller is presented, if any.
*/
diff --git a/Application/Sources/Helpers/Categories/UIViewController+PlaySRG.m b/Application/Sources/Helpers/Categories/UIViewController+PlaySRG.m
index ca6f5ec58..275842ef1 100755
--- a/Application/Sources/Helpers/Categories/UIViewController+PlaySRG.m
+++ b/Application/Sources/Helpers/Categories/UIViewController+PlaySRG.m
@@ -66,6 +66,11 @@ + (UIInterfaceOrientationMask)play_supportedInterfaceOrientations
- (BOOL)play_isMovingToParentViewController
{
+ id transitionCoordinator = self.transitionCoordinator;
+ if (transitionCoordinator.cancelled) {
+ return NO;
+ }
+
if (self.movingToParentViewController || self.beingPresented) {
return YES;
}
@@ -109,17 +114,6 @@ - (BOOL)play_isMovingFromParentViewController
return NO;
}
-#pragma mark Home indicator management
-
-- (void)play_setNeedsUpdateOfHomeIndicatorAutoHidden
-{
- if (@available(iOS 11, *)) {
- if ([self respondsToSelector:@selector(setNeedsUpdateOfHomeIndicatorAutoHidden)]) {
- [self setNeedsUpdateOfHomeIndicatorAutoHidden];
- }
- }
-}
-
#pragma mark Previewing
- (void)setPlay_previewingContext:(id)previewingContext
diff --git a/Application/Sources/Helpers/ChannelService.h b/Application/Sources/Helpers/ChannelService.h
index 013b7cd4e..b8e9131d5 100755
--- a/Application/Sources/Helpers/ChannelService.h
+++ b/Application/Sources/Helpers/ChannelService.h
@@ -9,17 +9,12 @@
NS_ASSUME_NONNULL_BEGIN
-/**
- * Notification sent when channels have been updated.
- */
-OBJC_EXPORT NSString * const ChannelServiceDidUpdateChannelsNotification;
-
// Types
-typedef void (^ChannelServiceUpdateBlock)(SRGChannel * _Nullable channel);
+typedef void (^ChannelServiceUpdateBlock)(SRGProgramComposition * _Nullable programComposition);
/**
- * Service responsible for retrieving and broadcasting channel detailed information (with current and next program
- * information). The service periodically retrieves channel data, caches it, and notifies registered observers.
+ * Service responsible for retrieving and broadcasting channel detailed information (program information, mostly).
+ * The service periodically retrieves channel data, caches it, and notifies registered observers.
*/
@interface ChannelService : NSObject
@@ -29,15 +24,15 @@ typedef void (^ChannelServiceUpdateBlock)(SRGChannel * _Nullable channel);
@property (class, nonatomic, readonly) ChannelService *sharedService;
/**
- * Register an observer to be notified of channel updates for a given media. The provided block is called when
- * channel information is available.
+ * Register an observer to be notified of updates for a given channel. The provided block is called when channel information
+ * is available.
*/
-- (void)registerObserver:(id)observer forChannelUpdatesWithMedia:(SRGMedia *)media block:(ChannelServiceUpdateBlock)block;
+- (id)addObserver:(id)observer forUpdatesWithChannel:(SRGChannel *)channel livestreamUid:(NSString *)livestreamUid block:(ChannelServiceUpdateBlock)block;
/**
- * Unregister the observer from channel notifications for the specified media.
+ * Remove the specified observer.
*/
-- (void)unregisterObserver:(id)observer forMedia:(SRGMedia *)media;
+- (void)removeObserver:(nullable id)observer;
@end
diff --git a/Application/Sources/Helpers/ChannelService.m b/Application/Sources/Helpers/ChannelService.m
index a275fb48f..7ada2fa5e 100755
--- a/Application/Sources/Helpers/ChannelService.m
+++ b/Application/Sources/Helpers/ChannelService.m
@@ -6,22 +6,21 @@
#import "ChannelService.h"
+#import "ChannelServiceSetup.h"
#import "ForegroundTimer.h"
+#import "SRGProgram+PlaySRG.h"
#import
#import
#import
-NSString * const ChannelServiceDidUpdateChannelsNotification = @"ChannelServiceDidUpdateChannelsNotification";
-
@interface ChannelService ()
-@property (nonatomic) NSMutableDictionary *> *registrations;
-@property (nonatomic) NSMutableDictionary *medias;
+@property (nonatomic) NSMutableDictionary *> *registrations;
// Cache channels. This cache is never invalidated, but its data is likely rarely to be staled as it is regularly updated. Cached
// data is used to return existing channel information as fast as possible, and when errors have been encountered.
-@property (nonatomic) NSMutableDictionary *channels;
+@property (nonatomic) NSMutableDictionary *programCompositions;
@property (nonatomic) ForegroundTimer *updateTimer;
@property (nonatomic) SRGRequestQueue *requestQueue;
@@ -42,19 +41,13 @@ + (ChannelService *)sharedService
return s_sharedService;
}
-+ (NSString *)channelKeyWithMedia:(SRGMedia *)media
-{
- return [NSString stringWithFormat:@"%@;%@;%@", @(media.channel.transmission), media.channel.uid, media.uid];
-}
-
#pragma mark Object lifecycle
- (instancetype)init
{
if (self = [super init]) {
self.registrations = [NSMutableDictionary dictionary];
- self.medias = [NSMutableDictionary dictionary];
- self.channels = [NSMutableDictionary dictionary];
+ self.programCompositions = [NSMutableDictionary dictionary];
@weakify(self)
self.updateTimer = [ForegroundTimer timerWithTimeInterval:30. repeats:YES block:^(ForegroundTimer * _Nonnull timer) {
@@ -86,42 +79,41 @@ - (void)setUpdateTimer:(ForegroundTimer *)updateTimer
#pragma mark Registration
-- (void)registerObserver:(id)observer forChannelUpdatesWithMedia:(SRGMedia *)media block:(ChannelServiceUpdateBlock)block
+- (id)addObserver:(id)observer forUpdatesWithChannel:(SRGChannel *)channel livestreamUid:(NSString *)livestreamUid block:(ChannelServiceUpdateBlock)block
{
- NSString *channelKey = [ChannelService channelKeyWithMedia:media];
- NSMutableDictionary *channelRegistrations = self.registrations[channelKey];
+ ChannelServiceSetup *setup = [[ChannelServiceSetup alloc] initWithChannel:channel livestreamUid:livestreamUid];
+ NSMutableDictionary *channelRegistrations = self.registrations[setup];
if (! channelRegistrations) {
channelRegistrations = [NSMutableDictionary dictionary];
- self.registrations[channelKey] = channelRegistrations;
+ self.registrations[setup] = channelRegistrations;
}
- NSValue *observerKey = [NSValue valueWithNonretainedObject:observer];
- channelRegistrations[observerKey] = block;
+ NSString *identifier = NSUUID.UUID.UUIDString;
+ channelRegistrations[identifier] = block;
// Return data immediately available from the cache, but still trigger an update
- SRGChannel *channel = self.channels[channelKey];
- if (channel) {
- block(channel);
+ SRGProgramComposition *programComposition = self.programCompositions[setup];
+ if (programComposition) {
+ block(programComposition);
}
// Only force an update the first time a media is added. Other updates will occur perodically afterwards.
- if (! self.medias[channelKey]) {
- [self updateChannelWithMedia:media];
+ if (channelRegistrations.count == 1) {
+ [self refreshWithSetup:setup];
}
- self.medias[channelKey] = media;
+ return identifier;
}
-- (void)unregisterObserver:(id)observer forMedia:(SRGMedia *)media
+- (void)removeObserver:(id)observer
{
- NSString *channelKey = [ChannelService channelKeyWithMedia:media];
- NSMutableDictionary *channelRegistrations = self.registrations[channelKey];
- if (! channelRegistrations) {
+ if (! observer) {
return;
}
- NSValue *observerKey = [NSValue valueWithNonretainedObject:observer];
- [channelRegistrations removeObjectForKey:observerKey];
+ for (NSMutableDictionary *channelRegistrations in self.registrations.allValues) {
+ [channelRegistrations removeObjectForKey:observer];
+ }
// Keep registered channels for the lifetime of the app, do not remove associated entries (otherwise we might
// remove and add channels repeatedly, triggering an update each time)
@@ -129,48 +121,40 @@ - (void)unregisterObserver:(id)observer forMedia:(SRGMedia *)media
#pragma mark Data retrieval
-- (void)updateChannelWithMedia:(SRGMedia *)media
+- (void)refreshWithSetup:(ChannelServiceSetup *)setup
{
@weakify(self)
- SRGChannelCompletionBlock completionBlock = ^(SRGChannel * _Nullable channel, NSHTTPURLResponse * _Nullable HTTPResponse, NSError * _Nullable error) {
+ SRGPaginatedProgramCompositionCompletionBlock completionBlock = ^(SRGProgramComposition * _Nullable programComposition, SRGPage *page, SRGPage * _Nullable nextPage, NSHTTPURLResponse * _Nullable HTTPResponse, NSError * _Nullable error) {
@strongify(self)
- NSString *channelKey = [ChannelService channelKeyWithMedia:media];
- if (channel) {
- self.channels[channelKey] = channel;
+ if (programComposition) {
+ self.programCompositions[setup] = programComposition;
}
- NSMutableDictionary *channelRegistrations = self.registrations[channelKey];
+ NSMutableDictionary *channelRegistrations = self.registrations[setup];
for (ChannelServiceUpdateBlock updateBlock in channelRegistrations.allValues) {
- updateBlock(self.channels[channelKey]);
+ updateBlock(self.programCompositions[setup]);
}
};
- SRGRequest *request = nil;
- if (media.channel.transmission == SRGTransmissionRadio) {
- if (media.vendor == SRGVendorSRF && ! [media.uid isEqualToString:media.channel.uid]) {
- request = [SRGDataProvider.currentDataProvider radioChannelForVendor:media.vendor withUid:media.channel.uid livestreamUid:media.uid completionBlock:completionBlock];
- }
- else {
- request = [SRGDataProvider.currentDataProvider radioChannelForVendor:media.vendor withUid:media.channel.uid livestreamUid:nil completionBlock:completionBlock];
- }
+ static const NSUInteger kPageSize = 50;
+
+ SRGFirstPageRequest *request = nil;
+ if (setup.channel.transmission == SRGTransmissionRadio) {
+ request = [[SRGDataProvider.currentDataProvider radioLatestProgramsForVendor:setup.channel.vendor channelUid:setup.channel.uid livestreamUid:setup.livestreamUid fromDate:nil toDate:nil withCompletionBlock:completionBlock] requestWithPageSize:kPageSize];
}
else {
- request = [SRGDataProvider.currentDataProvider tvChannelForVendor:media.vendor withUid:media.channel.uid completionBlock:completionBlock];
+ request = [[SRGDataProvider.currentDataProvider tvLatestProgramsForVendor:setup.channel.vendor channelUid:setup.channel.uid livestreamUid:setup.livestreamUid fromDate:nil toDate:nil withCompletionBlock:completionBlock] requestWithPageSize:kPageSize];
}
[self.requestQueue addRequest:request resume:YES];
}
- (void)updateChannels
{
- self.requestQueue = [[SRGRequestQueue alloc] initWithStateChangeBlock:^(BOOL finished, NSError * _Nullable error) {
- if (finished && ! error) {
- [NSNotificationCenter.defaultCenter postNotificationName:ChannelServiceDidUpdateChannelsNotification object:self];
- }
- }];
+ self.requestQueue = [[SRGRequestQueue alloc] init];
- for (SRGMedia *media in self.medias.allValues) {
- [self updateChannelWithMedia:media];
+ for (ChannelServiceSetup *setup in self.registrations) {
+ [self refreshWithSetup:setup];
}
}
@@ -183,4 +167,14 @@ - (void)reachabilityDidChange:(NSNotification *)notification
}
}
+#pragma mark Description
+
+- (NSString *)description
+{
+ return [NSString stringWithFormat:@"<%@: %p; registrations = %@>",
+ self.class,
+ self,
+ self.registrations];
+}
+
@end
diff --git a/Application/Sources/Helpers/ChannelServiceSetup.h b/Application/Sources/Helpers/ChannelServiceSetup.h
new file mode 100644
index 000000000..4a1e72643
--- /dev/null
+++ b/Application/Sources/Helpers/ChannelServiceSetup.h
@@ -0,0 +1,29 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * Setup common to a group of channel update registrations.
+ */
+@interface ChannelServiceSetup : NSObject
+
+/**
+ * Setup for retrieval of updates for a given channel and livestream identifier.
+ */
+- (instancetype)initWithChannel:(SRGChannel *)channel livestreamUid:(NSString *)livestreamUid;
+
+/**
+ * Associated data.
+ */
+@property (nonatomic, readonly) SRGChannel *channel;
+@property (nonatomic, readonly, copy) NSString *livestreamUid;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Application/Sources/Helpers/ChannelServiceSetup.m b/Application/Sources/Helpers/ChannelServiceSetup.m
new file mode 100644
index 000000000..93c73240d
--- /dev/null
+++ b/Application/Sources/Helpers/ChannelServiceSetup.m
@@ -0,0 +1,64 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import "ChannelServiceSetup.h"
+
+@interface ChannelServiceSetup ()
+
+@property (nonatomic) SRGChannel *channel;
+@property (nonatomic, copy) NSString *livestreamUid;
+
+@end
+
+@implementation ChannelServiceSetup
+
+#pragma mark Object lifecycle
+
+- (instancetype)initWithChannel:(SRGChannel *)channel livestreamUid:(NSString *)livestreamUid
+{
+ if (self = [super init]) {
+ self.channel = channel;
+ self.livestreamUid = livestreamUid;
+ }
+ return self;
+}
+
+#pragma mark Equality
+
+- (BOOL)isEqual:(id)object
+{
+ if (! [object isKindOfClass:self.class]) {
+ return NO;
+ }
+
+ ChannelServiceSetup *otherSetup = object;
+ return [self.channel isEqual:otherSetup.channel] && [self.livestreamUid isEqualToString:otherSetup.livestreamUid];
+}
+
+- (NSUInteger)hash
+{
+ return [NSString stringWithFormat:@"%@_%@", self.channel.URN, self.livestreamUid].hash;
+}
+
+#pragma mark NSCopying protocol
+
+- (id)copyWithZone:(NSZone *)zone
+{
+ return [[ChannelServiceSetup alloc] initWithChannel:self.channel livestreamUid:self.livestreamUid];
+}
+
+#pragma mark Description
+
+- (NSString *)description
+{
+ return [NSString stringWithFormat:@"<%@: %p; channel = %@; livestreamUid = %@>",
+ self.class,
+ self,
+ self.channel,
+ self.livestreamUid];
+}
+
+@end
diff --git a/Application/Sources/Helpers/ContentInsets.h b/Application/Sources/Helpers/ContentInsets.h
index 98cd5f999..9d7cfdea2 100755
--- a/Application/Sources/Helpers/ContentInsets.h
+++ b/Application/Sources/Helpers/ContentInsets.h
@@ -39,7 +39,6 @@ NS_ASSUME_NONNULL_BEGIN
@end
/**
- * Content inset setup in view hierarchies, introduced with iOS 7 design, has been greatly improved with iOS 11.
* To be able to guarantee proper consistent behavior across iOS versions, and to provide a convenient formalism
* to precisely define content inset contributions in view controller hierarchies:
*
diff --git a/Application/Sources/Helpers/ContentInsets.m b/Application/Sources/Helpers/ContentInsets.m
index bc6a9afe7..1432a817d 100755
--- a/Application/Sources/Helpers/ContentInsets.m
+++ b/Application/Sources/Helpers/ContentInsets.m
@@ -72,40 +72,20 @@ static void UpdateContentInsetsForViewController(UIViewController *viewControlle
NSArray *scrollViews = contentViewController.play_contentScrollViews;
UIEdgeInsets paddingInsets = contentViewController.play_paddingContentInsets;
- if (@available(iOS 11, *)) {
- viewController.additionalSafeAreaInsets = ChildContentInsetsForViewController(viewController.parentViewController);
- [scrollViews enumerateObjectsUsingBlock:^(UIScrollView * _Nonnull scrollView, NSUInteger idx, BOOL * _Nonnull stop) {
- scrollView.contentInset = paddingInsets;
- }];
- }
- else {
- UIEdgeInsets contentInsets = ContentInsetsForViewController(viewController);
- [scrollViews enumerateObjectsUsingBlock:^(UIScrollView * _Nonnull scrollView, NSUInteger idx, BOOL * _Nonnull stop) {
- scrollView.contentInset = UIEdgeInsetsMake(contentInsets.top + paddingInsets.top,
- contentInsets.left + paddingInsets.left,
- contentInsets.bottom + paddingInsets.bottom,
- contentInsets.right + paddingInsets.right);
- scrollView.scrollIndicatorInsets = contentInsets;
- }];
- }
+ contentViewController.additionalSafeAreaInsets = ChildContentInsetsForViewController(viewController.parentViewController);
+ [scrollViews enumerateObjectsUsingBlock:^(UIScrollView * _Nonnull scrollView, NSUInteger idx, BOOL * _Nonnull stop) {
+ scrollView.contentInset = paddingInsets;
+ }];
}
UIEdgeInsets ContentInsetsForViewController(UIViewController *viewController)
{
UIEdgeInsets insets = ChildContentInsetsForViewController(viewController.parentViewController);
- if (@available(iOS 11, *)) {
- UIEdgeInsets safeAreaInsets = viewController.additionalSafeAreaInsets;
- return UIEdgeInsetsMake(insets.top + safeAreaInsets.top,
- insets.left + safeAreaInsets.left,
- insets.bottom + safeAreaInsets.bottom,
- insets.right + safeAreaInsets.right);
- }
- else {
- return UIEdgeInsetsMake(insets.top + viewController.topLayoutGuide.length,
- insets.left,
- insets.bottom + viewController.bottomLayoutGuide.length,
- insets.right);
- }
+ UIEdgeInsets safeAreaInsets = viewController.additionalSafeAreaInsets;
+ return UIEdgeInsetsMake(insets.top + safeAreaInsets.top,
+ insets.left + safeAreaInsets.left,
+ insets.bottom + safeAreaInsets.bottom,
+ insets.right + safeAreaInsets.right);
}
UIEdgeInsets ContentInsetsForScrollView(UIScrollView *scrollView)
@@ -119,18 +99,10 @@ UIEdgeInsets ContentInsetsForScrollView(UIScrollView *scrollView)
}
}
- if (@available(iOS 11, *)) {
- return UIEdgeInsetsMake(scrollView.adjustedContentInset.top + paddingInsets.top,
- scrollView.adjustedContentInset.left + paddingInsets.left,
- scrollView.adjustedContentInset.bottom + paddingInsets.bottom,
- scrollView.adjustedContentInset.right + paddingInsets.right);
- }
- else {
- return UIEdgeInsetsMake(scrollView.contentInset.top + paddingInsets.top,
- scrollView.contentInset.left + paddingInsets.left,
- scrollView.contentInset.bottom + paddingInsets.bottom,
- scrollView.contentInset.right + paddingInsets.right);
- }
+ return UIEdgeInsetsMake(scrollView.adjustedContentInset.top + paddingInsets.top,
+ scrollView.adjustedContentInset.left + paddingInsets.left,
+ scrollView.adjustedContentInset.bottom + paddingInsets.bottom,
+ scrollView.adjustedContentInset.right + paddingInsets.right);
}
CGFloat VerticalOffsetForEmptyDataSet(UIScrollView *scrollView)
diff --git a/Application/Sources/Helpers/GoogleCast.m b/Application/Sources/Helpers/GoogleCast.m
index b045dc4e1..e19af0b93 100755
--- a/Application/Sources/Helpers/GoogleCast.m
+++ b/Application/Sources/Helpers/GoogleCast.m
@@ -128,7 +128,7 @@ BOOL GoogleCastPlayMediaComposition(SRGMediaComposition *mediaComposition, SRGPo
GCKMediaLoadOptions *options = [[GCKMediaLoadOptions alloc] init];
// Only apply playing position for on-demand streams. Does not work well with other kinds of streams.
- CMTime time = position.time;
+ CMTime time = [position.mark timeForMediaPlayerController:nil];
BOOL isLivestream = mainChapter.contentType == SRGContentTypeLivestream || mainChapter.contentType == SRGContentTypeScheduledLivestream;
if (! isLivestream && CMTIME_IS_VALID(time) && CMTIME_COMPARE_INLINE(time, !=, kCMTimeZero)) {
float progress = HistoryPlaybackProgress(CMTimeGetSeconds(time), mainChapter.duration / 1000.);
diff --git a/Application/Sources/Helpers/Layout.h b/Application/Sources/Helpers/Layout.h
index 43e24775b..6e32058ea 100644
--- a/Application/Sources/Helpers/Layout.h
+++ b/Application/Sources/Helpers/Layout.h
@@ -28,7 +28,7 @@ static const CGFloat LayoutStandardMargin = 10.f;
/**
* Standard table view padding.
*/
-static const UIEdgeInsets LayoutStandardTableViewPaddingInsets = { LayoutStandardMargin, 0.f, 0.f, 0.f };
+static const UIEdgeInsets LayoutStandardTableViewPaddingInsets = { LayoutStandardMargin, 0.f, LayoutStandardMargin, 0.f };
/**
* Calculate the width to apply to items within a collection so that they approach some desired size, ensuring constant
@@ -56,10 +56,15 @@ OBJC_EXPORT CGFloat LayoutCollectionItemFeaturedWidth(CGFloat layoutWidth);
OBJC_EXPORT CGFloat LayoutStandardTableSectionHeaderHeight(BOOL hasBackgroundColor);
/**
- * Return the standard height for simple cells.
+ * Return the standard height for simple table cells.
*/
OBJC_EXPORT CGFloat LayoutStandardSimpleTableCellHeight(void);
+/**
+ * Return the height for a top-aligned table cell with given spacing.
+ */
+OBJC_EXPORT CGFloat LayoutTableTopAlignedCellHeight(CGFloat contentHeight, CGFloat spacing, NSInteger row, NSInteger numberOfItems);
+
/**
* Standard media cell (16:9 artwork + text area) size for collection layouts, for a given item width.
*
diff --git a/Application/Sources/Helpers/Layout.m b/Application/Sources/Helpers/Layout.m
index 668673111..af0b7b02e 100644
--- a/Application/Sources/Helpers/Layout.m
+++ b/Application/Sources/Helpers/Layout.m
@@ -60,24 +60,34 @@ CGFloat LayoutStandardTableSectionHeaderHeight(BOOL hasBackgroundColor)
CGFloat LayoutStandardSimpleTableCellHeight(void)
{
- static NSDictionary *s_height;
+ static NSDictionary *s_heights;
static dispatch_once_t s_onceToken;
dispatch_once(&s_onceToken, ^{
- s_height = @{ UIContentSizeCategoryExtraSmall : @42,
- UIContentSizeCategorySmall : @42,
- UIContentSizeCategoryMedium : @46,
- UIContentSizeCategoryLarge : @50,
- UIContentSizeCategoryExtraLarge : @54,
- UIContentSizeCategoryExtraExtraLarge : @58,
- UIContentSizeCategoryExtraExtraExtraLarge : @62,
- UIContentSizeCategoryAccessibilityMedium : @62,
- UIContentSizeCategoryAccessibilityLarge : @62,
- UIContentSizeCategoryAccessibilityExtraLarge : @62,
- UIContentSizeCategoryAccessibilityExtraExtraLarge : @62,
- UIContentSizeCategoryAccessibilityExtraExtraExtraLarge : @62 };
+ s_heights = @{ UIContentSizeCategoryExtraSmall : @42,
+ UIContentSizeCategorySmall : @42,
+ UIContentSizeCategoryMedium : @46,
+ UIContentSizeCategoryLarge : @50,
+ UIContentSizeCategoryExtraLarge : @54,
+ UIContentSizeCategoryExtraExtraLarge : @58,
+ UIContentSizeCategoryExtraExtraExtraLarge : @62,
+ UIContentSizeCategoryAccessibilityMedium : @62,
+ UIContentSizeCategoryAccessibilityLarge : @62,
+ UIContentSizeCategoryAccessibilityExtraLarge : @62,
+ UIContentSizeCategoryAccessibilityExtraExtraLarge : @62,
+ UIContentSizeCategoryAccessibilityExtraExtraExtraLarge : @62 };
});
NSString *contentSizeCategory = UIApplication.sharedApplication.preferredContentSizeCategory;
- return s_height[contentSizeCategory].floatValue;
+ return s_heights[contentSizeCategory].floatValue;
+}
+
+CGFloat LayoutTableTopAlignedCellHeight(CGFloat contentHeight, CGFloat spacing, NSInteger row, NSInteger numberOfItems)
+{
+ if (row < numberOfItems - 1) {
+ return contentHeight + spacing;
+ }
+ else {
+ return contentHeight;
+ }
}
CGSize LayoutMediaStandardCollectionItemSize(CGFloat itemWidth, BOOL large)
diff --git a/Application/Sources/Helpers/PushService.m b/Application/Sources/Helpers/PushService.m
index 26f8966ad..021767ffb 100755
--- a/Application/Sources/Helpers/PushService.m
+++ b/Application/Sources/Helpers/PushService.m
@@ -12,9 +12,9 @@
#import "PlayAppDelegate.h"
#import "Notification.h"
+#import
#import
#import
-#import
#import
NSString * const PushServiceDidReceiveNotification = @"PushServiceDidReceiveNotification";
@@ -124,7 +124,7 @@ - (NSString *)environmentIdentifier
- (NSSet *)subscribedShowURNs
{
- NSArray *tags = [UAirship push].tags;
+ NSArray *tags = [UAirship channel].tags;
if (tags.count == 0) {
return [NSSet set];
}
@@ -142,28 +142,21 @@ - (NSString *)environmentIdentifier
- (BOOL)isEnabled
{
- // iOS 10 and above: Even if alerts have been disabled by the user, `UIApplication.registeredForRemoteNotifications`
- // will still return `YES` if the target supports silent notifications (introduced with iOS 10 rich notifications).
- // We nust retrieve the proper authorization status from iOS 10 `UNUserNotificationCenter`, providing finer-grained
- // information covering these new use cases.
- if (@available(iOS 10, *)) {
- // Make asynchronous call synchronous
- dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
-
- __block UNNotificationSettings *notificationSettings = nil;
- [[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
- notificationSettings = settings;
- dispatch_semaphore_signal(semaphore);
- }];
-
- dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
- return notificationSettings.authorizationStatus == UNAuthorizationStatusAuthorized;
- }
- // Before iOS 10: `UIApplication.registeredForRemoteNotifications` accurately reflects whether the user has authorized
- // notificartions or not.
- else {
- return UIApplication.sharedApplication.currentUserNotificationSettings.types != UIUserNotificationTypeNone;
- }
+ // Even if alerts have been disabled by the user, `UIApplication.registeredForRemoteNotifications` will still return
+ // `YES` if the target supports silent notifications. We must retrieve the proper authorization status from
+ // `UNUserNotificationCenter`, providing finer-grained information about notification settings.
+
+ // Make asynchronous call synchronous
+ dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
+
+ __block UNNotificationSettings *notificationSettings = nil;
+ [[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
+ notificationSettings = settings;
+ dispatch_semaphore_signal(semaphore);
+ }];
+
+ dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
+ return notificationSettings.authorizationStatus == UNAuthorizationStatusAuthorized;
}
#pragma mark Setup
@@ -171,13 +164,10 @@ - (BOOL)isEnabled
- (void)setup
{
[UAirship takeOff:self.configuration];
- if (@available(iOS 10, *)) {
- [UAirship push].defaultPresentationOptions = (UNNotificationPresentationOptionAlert | UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionSound);
- }
+
+ [UAirship push].defaultPresentationOptions = (UNNotificationPresentationOptionAlert | UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionSound);
[UAirship push].pushNotificationDelegate = self;
[UAirship push].autobadgeEnabled = YES;
-
- [[UAirship inAppMessageManager] setEnabled:NO];
}
#pragma mark Badge management
@@ -235,7 +225,7 @@ - (void)subscribeToShowURNs:(NSSet *)URNs
}
for (NSString *URN in URNs) {
- [[UAirship push] addTag:[self tagForShowURN:URN]];
+ [[UAirship channel] addTag:[self tagForShowURN:URN]];
}
[[UAirship push] updateRegistration];
}
@@ -247,14 +237,14 @@ - (void)unsubscribeFromShowURNs:(NSSet *)URNs
}
for (NSString *URN in URNs) {
- [[UAirship push] removeTag:[self tagForShowURN:URN]];
+ [[UAirship channel] removeTag:[self tagForShowURN:URN]];
}
[[UAirship push] updateRegistration];
}
- (BOOL)isSubscribedToShowURN:(NSString *)URN
{
- return [[UAirship push].tags containsObject:[self tagForShowURN:URN]];
+ return [[UAirship channel].tags containsObject:[self tagForShowURN:URN]];
}
#pragma mark Actions
@@ -276,15 +266,12 @@ - (BOOL)presentSystemAlertForPushNotifications
- (void)receivedNotificationResponse:(UANotificationResponse *)notificationResponse completionHandler:(void (^)(void))completionHandler
{
- if (@available(iOS 10, *)) {
- if (notificationResponse.notificationContent.notification) {
- Notification *notification = [[Notification alloc] initWithNotification:notificationResponse.notificationContent.notification];
- [Notification saveNotification:notification read:YES];
- }
+ if (notificationResponse.notificationContent.notification) {
+ Notification *notification = [[Notification alloc] initWithNotification:notificationResponse.notificationContent.notification];
+ [Notification saveNotification:notification read:YES];
}
UANotificationContent *notificationContent = notificationResponse.notificationContent;
-
NSString *channelUid = notificationContent.notificationInfo[@"channelId"];
if (notificationContent.notificationInfo[@"media"]) {
@@ -324,11 +311,9 @@ - (void)receivedNotificationResponse:(UANotificationResponse *)notificationRespo
- (void)receivedForegroundNotification:(UANotificationContent *)notificationContent completionHandler:(void (^)(void))completionHandler
{
- if (@available(iOS 10, *)) {
- if (notificationContent.notification) {
- Notification *notification = [[Notification alloc] initWithNotification:notificationContent.notification];
- [Notification saveNotification:notification read:NO];
- }
+ if (notificationContent.notification) {
+ Notification *notification = [[Notification alloc] initWithNotification:notificationContent.notification];
+ [Notification saveNotification:notification read:NO];
}
[NSNotificationCenter.defaultCenter postNotificationName:PushServiceDidReceiveNotification object:self];
completionHandler();
@@ -336,11 +321,9 @@ - (void)receivedForegroundNotification:(UANotificationContent *)notificationCont
- (void)receivedBackgroundNotification:(UANotificationContent *)notificationContent completionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
- if (@available(iOS 10, *)) {
- if (notificationContent.notification) {
- Notification *notification = [[Notification alloc] initWithNotification:notificationContent.notification];
- [Notification saveNotification:notification read:NO];
- }
+ if (notificationContent.notification) {
+ Notification *notification = [[Notification alloc] initWithNotification:notificationContent.notification];
+ [Notification saveNotification:notification read:NO];
}
[NSNotificationCenter.defaultCenter postNotificationName:PushServiceDidReceiveNotification object:self];
completionHandler(UIBackgroundFetchResultNewData);
@@ -380,7 +363,7 @@ - (BOOL)toggleSubscriptionForShow:(SRGShow *)show inViewController:(UIViewContro
preferredStyle:UIAlertControllerStyleAlert];
[alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Enable in system settings", @"Title of a button to propose the user to enable notifications in the system settings") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
NSURL *URL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
- [UIApplication.sharedApplication openURL:URL];
+ [UIApplication.sharedApplication openURL:URL options:@{} completionHandler:nil];
}]];
[alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Cancel", @"Title of a cancel button") style:UIAlertActionStyleDefault handler:nil]];
[viewController presentViewController:alertController animated:YES completion:nil];
diff --git a/Application/Sources/Helpers/StoreReview.m b/Application/Sources/Helpers/StoreReview.m
index 76ecdc518..d0d758859 100755
--- a/Application/Sources/Helpers/StoreReview.m
+++ b/Application/Sources/Helpers/StoreReview.m
@@ -15,17 +15,15 @@ @implementation StoreReview
+ (void)requestReview
{
#if !defined(DEBUG) && !defined(NIGHTLY) && !defined(BETA)
- if (@available(iOS 10.3, *)) {
- static NSString * const kRequestCountUserDefaultsKey = @"PlaySRGStoreReviewRequestCount";
- NSInteger requestCount = [NSUserDefaults.standardUserDefaults integerForKey:kRequestCountUserDefaultsKey] + 1;
- static const NSInteger kRequestCountThreshold = 50;
- if (requestCount >= kRequestCountThreshold) {
- [SKStoreReviewController requestReview];
- requestCount = 0;
- }
- [NSUserDefaults.standardUserDefaults setInteger:requestCount forKey:kRequestCountUserDefaultsKey];
- [NSUserDefaults.standardUserDefaults synchronize];
+ static NSString * const kRequestCountUserDefaultsKey = @"PlaySRGStoreReviewRequestCount";
+ NSInteger requestCount = [NSUserDefaults.standardUserDefaults integerForKey:kRequestCountUserDefaultsKey] + 1;
+ static const NSInteger kRequestCountThreshold = 50;
+ if (requestCount >= kRequestCountThreshold) {
+ [SKStoreReviewController requestReview];
+ requestCount = 0;
}
+ [NSUserDefaults.standardUserDefaults setInteger:requestCount forKey:kRequestCountUserDefaultsKey];
+ [NSUserDefaults.standardUserDefaults synchronize];
#endif
}
@end
diff --git a/Application/Sources/Helpers/TimerTarget.h b/Application/Sources/Helpers/TimerTarget.h
deleted file mode 100755
index e2ce4ed39..000000000
--- a/Application/Sources/Helpers/TimerTarget.h
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Copyright (c) SRG SSR. All rights reserved.
-//
-// License information is available from the LICENSE file.
-//
-
-#import
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- * Helper class used as target for a timer.
- */
-// TODO: Remove when iOS 10 is the minimum required version
-@interface TimerTarget : NSObject
-
-/**
- * Create the target with the specified to be executed when `-fire:` is called.
- */
-- (instancetype)initWithBlock:(nullable void (^)(NSTimer *timer))block;
-
-/**
- * Execute the attached block on behalf of the specified timer.
- */
-- (void)fire:(NSTimer *)timer;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/Application/Sources/Helpers/TimerTarget.m b/Application/Sources/Helpers/TimerTarget.m
deleted file mode 100755
index c4d78a52c..000000000
--- a/Application/Sources/Helpers/TimerTarget.m
+++ /dev/null
@@ -1,30 +0,0 @@
-//
-// Copyright (c) SRG SSR. All rights reserved.
-//
-// License information is available from the LICENSE file.
-//
-
-#import "TimerTarget.h"
-
-@interface TimerTarget ()
-
-@property (nonatomic, copy) void (^block)(NSTimer *);
-
-@end
-
-@implementation TimerTarget
-
-- (instancetype)initWithBlock:(void (^)(NSTimer * _Nonnull))block
-{
- if (self = [super init]) {
- self.block = block;
- }
- return self;
-}
-
-- (void)fire:(NSTimer *)timer
-{
- self.block ? self.block(timer) : nil;
-}
-
-@end
diff --git a/Application/Sources/History/HistoryTableViewCell.m b/Application/Sources/History/HistoryTableViewCell.m
index 9614571d9..1ccbf5230 100755
--- a/Application/Sources/History/HistoryTableViewCell.m
+++ b/Application/Sources/History/HistoryTableViewCell.m
@@ -60,7 +60,7 @@ - (void)awakeFromNib
{
[super awakeFromNib];
- self.backgroundColor = UIColor.clearColor;
+ self.backgroundColor = UIColor.play_blackColor;
UIView *selectedBackgroundView = [[UIView alloc] init];
selectedBackgroundView.backgroundColor = UIColor.clearColor;
@@ -307,56 +307,50 @@ - (void)setMedia:(SRGMedia *)media
- (void)updateDownloadStatus
{
Download *download = [Download downloadForMedia:self.media];
- if (!download) {
- BOOL downloadsHintsHidden = ApplicationConfiguration.sharedApplicationConfiguration.downloadsHintsHidden;
-
- [self.downloadStatusImageView play_stopAnimating];
+ if (! download) {
+ [self.downloadStatusImageView stopAnimating];
self.downloadStatusImageView.image = [UIImage imageNamed:@"downloadable-16"];
- self.downloadStatusImageView.hidden = downloadsHintsHidden ? YES : ! [Download canDownloadMedia:self.media];
+ BOOL downloadsHintsHidden = ApplicationConfiguration.sharedApplicationConfiguration.downloadsHintsHidden;
+ self.downloadStatusImageView.hidden = downloadsHintsHidden || ! [Download canDownloadMedia:self.media];
return;
}
self.downloadStatusImageView.hidden = NO;
- UIImage *downloadImage = nil;
- UIColor *tintColor = UIColor.play_lightGrayColor;
-
switch (download.state) {
case DownloadStateAdded:
case DownloadStateDownloadingSuspended: {
- [self.downloadStatusImageView play_stopAnimating];
- downloadImage = [UIImage imageNamed:@"downloadable_stop-16"];
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = [UIImage imageNamed:@"downloadable_stop-16"];
break;
}
case DownloadStateDownloading: {
- [self.downloadStatusImageView play_startAnimatingDownloading16WithTintColor:tintColor];
- downloadImage = self.downloadStatusImageView.image;
+ [self.downloadStatusImageView play_setDownloadAnimation16WithTintColor:UIColor.play_lightGrayColor];
+ [self.downloadStatusImageView startAnimating];
break;
}
case DownloadStateDownloaded: {
- [self.downloadStatusImageView play_stopAnimating];
- downloadImage = [UIImage imageNamed:@"downloadable_full-16"];
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = [UIImage imageNamed:@"downloadable_full-16"];
break;
}
case DownloadStateDownloadable:
case DownloadStateRemoved: {
- [self.downloadStatusImageView play_stopAnimating];
- downloadImage = [UIImage imageNamed:@"downloadable-16"];
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = [UIImage imageNamed:@"downloadable-16"];
break;
}
default: {
- [self.downloadStatusImageView play_stopAnimating];
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = nil;
break;
}
}
-
- self.downloadStatusImageView.image = downloadImage;
- self.downloadStatusImageView.tintColor = tintColor;
}
- (void)updateHistoryStatus
diff --git a/Application/Sources/History/HistoryViewController.m b/Application/Sources/History/HistoryViewController.m
index 5022dbb7a..e9fa19bc2 100755
--- a/Application/Sources/History/HistoryViewController.m
+++ b/Application/Sources/History/HistoryViewController.m
@@ -74,7 +74,7 @@ - (void)viewDidLoad
object:SRGUserData.currentUserData.history];
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(accessibilityVoiceOverStatusChanged:)
- name:UIAccessibilityVoiceOverStatusChanged
+ name:UIAccessibilityVoiceOverStatusDidChangeNotification
object:nil];
[self updateInterfaceForEditionAnimated:NO];
@@ -208,7 +208,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
- return LayoutTableViewCellStandardHeight + LayoutStandardMargin;
+ return LayoutTableTopAlignedCellHeight(LayoutTableViewCellStandardHeight, LayoutStandardMargin, indexPath.row, self.items.count);
}
- (void)tableView:(UITableView *)tableView willDisplayCell:(HistoryTableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
diff --git a/Application/Sources/UI/Views/HomeLiveMediaCollectionViewCell.h b/Application/Sources/Home/HomeLiveMediaCollectionViewCell.h
similarity index 100%
rename from Application/Sources/UI/Views/HomeLiveMediaCollectionViewCell.h
rename to Application/Sources/Home/HomeLiveMediaCollectionViewCell.h
diff --git a/Application/Sources/UI/Views/HomeLiveMediaCollectionViewCell.m b/Application/Sources/Home/HomeLiveMediaCollectionViewCell.m
similarity index 81%
rename from Application/Sources/UI/Views/HomeLiveMediaCollectionViewCell.m
rename to Application/Sources/Home/HomeLiveMediaCollectionViewCell.m
index 645a13a87..8367f5db8 100755
--- a/Application/Sources/UI/Views/HomeLiveMediaCollectionViewCell.m
+++ b/Application/Sources/Home/HomeLiveMediaCollectionViewCell.m
@@ -17,6 +17,7 @@
#import "SRGChannel+PlaySRG.h"
#import "SRGMedia+PlaySRG.h"
#import "SRGProgram+PlaySRG.h"
+#import "SRGProgramComposition+PlaySRG.h"
#import "UIColor+PlaySRG.h"
#import "UIImageView+PlaySRG.h"
#import "UILabel+PlaySRG.h"
@@ -27,7 +28,7 @@
@interface HomeLiveMediaCollectionViewCell ()
-@property (nonatomic) SRGChannel *channel;
+@property (nonatomic) SRGProgramComposition *programComposition;
@property (nonatomic, weak) IBOutlet UIView *mediaView;
@property (nonatomic, weak) IBOutlet UIView *placeholderView;
@@ -45,6 +46,8 @@ @interface HomeLiveMediaCollectionViewCell ()
@property (nonatomic, weak) IBOutlet UIProgressView *progressView;
+@property (nonatomic, weak) id channelRegistration;
+
@end
@implementation HomeLiveMediaCollectionViewCell
@@ -93,10 +96,10 @@ - (void)prepareForReuse
self.mediaView.hidden = YES;
self.placeholderView.hidden = NO;
- [self unregisterChannelUpdatesWithMedia:self.media];
+ [self unregisterChannelUpdates];
self.media = nil;
- self.channel = nil;
+ self.programComposition = nil;
self.progressView.hidden = NO;
self.progressView.progress = 1.f;
@@ -115,7 +118,7 @@ - (void)willMoveToWindow:(UIWindow *)newWindow
[self registerForChannelUpdatesWithMedia:self.media];
}
else {
- [self unregisterChannelUpdatesWithMedia:self.media];
+ [self unregisterChannelUpdates];
}
}
@@ -142,13 +145,16 @@ - (BOOL)isAccessibilityElement
- (NSString *)accessibilityLabel
{
- if (self.media.contentType == SRGContentTypeLivestream) {
- NSMutableString *accessibilityLabel = [NSMutableString stringWithFormat:PlaySRGAccessibilityLocalizedString(@"%@ live", @"Live content label, with a channel title"), self.channel.title];
+ SRGChannel *channel = self.programComposition.channel ?: self.media.channel;
+ if (channel) {
+ NSMutableString *accessibilityLabel = [NSMutableString stringWithFormat:PlaySRGAccessibilityLocalizedString(@"%@ live", @"Live content label, with a channel title"), channel.title];
if (! self.recentLabel.hidden) {
[accessibilityLabel appendFormat:@", %@", PlaySRGAccessibilityLocalizedString(@"Last played", @"Label on recently played livestreams")];
}
- if (self.channel.currentProgram) {
- [accessibilityLabel appendFormat:@", %@", self.channel.currentProgram.title];
+
+ SRGProgram *currentProgram = [self.programComposition play_programAtDate:NSDate.date];
+ if (currentProgram) {
+ [accessibilityLabel appendFormat:@", %@", currentProgram.title];
}
return accessibilityLabel.copy;
}
@@ -170,10 +176,9 @@ - (NSString *)accessibilityHint
- (void)setMedia:(SRGMedia *)media
{
- [self unregisterChannelUpdatesWithMedia:self.media];
+ [self unregisterChannelUpdates];
_media = media;
- self.channel = media.channel;
[self registerForChannelUpdatesWithMedia:media];
[self reloadData];
@@ -183,23 +188,20 @@ - (void)setMedia:(SRGMedia *)media
- (void)registerForChannelUpdatesWithMedia:(SRGMedia *)media
{
- if (! media || media.contentType != SRGContentTypeLivestream) {
+ if (media.contentType != SRGContentTypeLivestream || ! media.channel) {
return;
}
- [ChannelService.sharedService registerObserver:self forChannelUpdatesWithMedia:media block:^(SRGChannel * _Nullable channel) {
- self.channel = channel ?: media.channel;
+ [ChannelService.sharedService removeObserver:self.channelRegistration];
+ self.channelRegistration = [ChannelService.sharedService addObserver:self forUpdatesWithChannel:media.channel livestreamUid:media.uid block:^(SRGProgramComposition * _Nullable programComposition) {
+ self.programComposition = programComposition;
[self reloadData];
}];
}
-- (void)unregisterChannelUpdatesWithMedia:(SRGMedia *)media
+- (void)unregisterChannelUpdates
{
- if (! media || media.contentType != SRGContentTypeLivestream) {
- return;
- }
-
- [ChannelService.sharedService unregisterObserver:self forMedia:media];
+ [ChannelService.sharedService removeObserver:self.channelRegistration];
}
#pragma mark UI
@@ -242,29 +244,32 @@ - (void)reloadData
[self.durationLabel play_displayDurationLabelForMediaMetadata:self.media];
- if (self.channel) {
- UIImage *logoImage = self.channel.play_banner22Image;
+ SRGChannel *channel = self.programComposition.channel ?: self.media.channel;
+ if (channel) {
+ UIImage *logoImage = channel.play_banner22Image;
self.logoImageView.image = logoImage;
self.logoImageView.hidden = (logoImage == nil);
- SRGProgram *currentProgram = self.channel.currentProgram;
- if ([currentProgram play_containsDate:NSDate.date]) {
+ SRGProgram *currentProgram = [self.programComposition play_programAtDate:NSDate.date];
+ if (currentProgram) {
self.titleLabel.text = currentProgram.title;
self.subtitleLabel.text = [NSString stringWithFormat:@"%@ - %@", [NSDateFormatter.play_timeFormatter stringFromDate:currentProgram.startDate], [NSDateFormatter.play_timeFormatter stringFromDate:currentProgram.endDate]];
float progress = [NSDate.date timeIntervalSinceDate:currentProgram.startDate] / ([currentProgram.endDate timeIntervalSinceDate:currentProgram.startDate]);
self.progressView.progress = fmaxf(fminf(progress, 1.f), 0.f);
+ self.progressView.hidden = NO;
[self.thumbnailImageView play_requestImageForObject:currentProgram withScale:imageScale type:SRGImageTypeDefault placeholder:ImagePlaceholderMedia unavailabilityHandler:^{
- [self.thumbnailImageView play_requestImageForObject:self.channel withScale:imageScale type:SRGImageTypeDefault placeholder:ImagePlaceholderMedia];
+ [self.thumbnailImageView play_requestImageForObject:channel withScale:imageScale type:SRGImageTypeDefault placeholder:ImagePlaceholderMedia];
}];
}
else {
- self.titleLabel.text = self.channel.title;
- self.subtitleLabel.text = NSLocalizedString(@"Currently", @"Text displayed on live cells when no program time information is available");
+ self.titleLabel.text = channel.title;
+ self.subtitleLabel.text = nil;
self.progressView.progress = 1.f;
+ self.progressView.hidden = NO;
- [self.thumbnailImageView play_requestImageForObject:self.channel withScale:imageScale type:SRGImageTypeDefault placeholder:ImagePlaceholderMedia];
+ [self.thumbnailImageView play_requestImageForObject:channel withScale:imageScale type:SRGImageTypeDefault placeholder:ImagePlaceholderMedia];
}
}
else {
@@ -286,9 +291,14 @@ - (void)reloadData
self.subtitleLabel.text = [NSDateFormatter.play_relativeDateAndTimeFormatter stringFromDate:self.media.date].play_localizedUppercaseFirstLetterString;
}
- if (self.media.contentType == SRGContentTypeScheduledLivestream && self.media.startDate && self.media.endDate && [self.media timeAvailabilityAtDate:NSDate.date] == SRGTimeAvailabilityAvailable) {
+ if (self.media.contentType == SRGContentTypeLivestream) {
+ self.progressView.progress = 1.f;
+ self.progressView.hidden = NO;
+ }
+ else if (self.media.contentType == SRGContentTypeScheduledLivestream && self.media.startDate && self.media.endDate && [self.media timeAvailabilityAtDate:NSDate.date] == SRGTimeAvailabilityAvailable) {
float progress = [NSDate.date timeIntervalSinceDate:self.media.startDate] / ([self.media.endDate timeIntervalSinceDate:self.media.startDate]);
self.progressView.progress = fmaxf(fminf(progress, 1.f), 0.f);
+ self.progressView.hidden = NO;
}
else {
self.progressView.hidden = YES;
diff --git a/Application/Sources/UI/Views/HomeLiveMediaCollectionViewCell.xib b/Application/Sources/Home/HomeLiveMediaCollectionViewCell.xib
similarity index 100%
rename from Application/Sources/UI/Views/HomeLiveMediaCollectionViewCell.xib
rename to Application/Sources/Home/HomeLiveMediaCollectionViewCell.xib
diff --git a/Application/Sources/Home/HomeMediaCollectionViewCell.m b/Application/Sources/Home/HomeMediaCollectionViewCell.m
index f9e9f556b..3b21a4ce1 100755
--- a/Application/Sources/Home/HomeMediaCollectionViewCell.m
+++ b/Application/Sources/Home/HomeMediaCollectionViewCell.m
@@ -319,56 +319,50 @@ - (void)reloadData
- (void)updateDownloadStatus
{
Download *download = [Download downloadForMedia:self.media];
- if (!download) {
- BOOL downloadsHintsHidden = ApplicationConfiguration.sharedApplicationConfiguration.downloadsHintsHidden;
-
- [self.downloadStatusImageView play_stopAnimating];
+ if (! download) {
+ [self.downloadStatusImageView stopAnimating];
self.downloadStatusImageView.image = [UIImage imageNamed:@"downloadable-16"];
- self.downloadStatusImageView.hidden = downloadsHintsHidden ? YES : ! [Download canDownloadMedia:self.media];
+ BOOL downloadsHintsHidden = ApplicationConfiguration.sharedApplicationConfiguration.downloadsHintsHidden;
+ self.downloadStatusImageView.hidden = downloadsHintsHidden || ! [Download canDownloadMedia:self.media];
return;
}
self.downloadStatusImageView.hidden = NO;
- UIColor *imageColor = UIColor.play_lightGrayColor;
- UIImage *downloadImage = nil;
-
switch (download.state) {
case DownloadStateAdded:
case DownloadStateDownloadingSuspended: {
- [self.downloadStatusImageView play_stopAnimating];
- downloadImage = [UIImage imageNamed:@"downloadable_stop-16"];
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = [UIImage imageNamed:@"downloadable_stop-16"];
break;
}
case DownloadStateDownloading: {
- [self.downloadStatusImageView play_startAnimatingDownloading16WithTintColor:imageColor];
- downloadImage = self.downloadStatusImageView.image;
+ [self.downloadStatusImageView play_setDownloadAnimation16WithTintColor:UIColor.play_lightGrayColor];
+ [self.downloadStatusImageView startAnimating];
break;
}
case DownloadStateDownloaded: {
- [self.downloadStatusImageView play_stopAnimating];
- downloadImage = [UIImage imageNamed:@"downloadable_full-16"];
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = [UIImage imageNamed:@"downloadable_full-16"];
break;
}
case DownloadStateDownloadable:
case DownloadStateRemoved: {
- [self.downloadStatusImageView play_stopAnimating];
- downloadImage = [UIImage imageNamed:@"downloadable-16"];
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = [UIImage imageNamed:@"downloadable-16"];
break;
}
default: {
- [self.downloadStatusImageView play_stopAnimating];
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = nil;
break;
}
}
-
- self.downloadStatusImageView.image = downloadImage;
- self.downloadStatusImageView.tintColor = imageColor;
}
- (void)updateHistoryStatus
diff --git a/Application/Sources/Home/HomeSectionHeaderView.m b/Application/Sources/Home/HomeSectionHeaderView.m
index 76a054942..a968bfb68 100755
--- a/Application/Sources/Home/HomeSectionHeaderView.m
+++ b/Application/Sources/Home/HomeSectionHeaderView.m
@@ -75,7 +75,8 @@ - (NSString *)accessibilityLabel
- (NSString *)accessibilityHint
{
- return PlaySRGAccessibilityLocalizedString(@"Shows all contents.", @"Homepage header action hint");
+ HomeSectionInfo *homeSectionInfo = self.homeSectionInfo;
+ return [homeSectionInfo canOpenList] ? PlaySRGAccessibilityLocalizedString(@"Shows all contents.", @"Homepage header action hint") : nil;
}
- (UIAccessibilityTraits)accessibilityTraits
diff --git a/Application/Sources/Home/HomeSectionInfo.m b/Application/Sources/Home/HomeSectionInfo.m
index 1b1ec7f35..2cf1ac957 100755
--- a/Application/Sources/Home/HomeSectionInfo.m
+++ b/Application/Sources/Home/HomeSectionInfo.m
@@ -13,6 +13,7 @@
#import "HomeShowListTableViewCell.h"
#import "HomeShowsAccessTableViewCell.h"
#import "HomeShowVerticalListTableViewCell.h"
+#import "HomeTopicListTableViewCell.h"
#import
#import
@@ -85,6 +86,9 @@ - (Class)cellClass
if (self.homeSection == HomeSectionRadioAllShows) {
return HomeShowVerticalListTableViewCell.class;
}
+ else if (self.homeSection == HomeSectionTVTopicsAccess) {
+ return HomeTopicListTableViewCell.class;
+ }
else if (self.homeSection == HomeSectionTVShowsAccess || self.homeSection == HomeSectionRadioShowsAccess) {
return HomeShowsAccessTableViewCell.class;
}
@@ -99,7 +103,7 @@ - (Class)cellClass
- (BOOL)canOpenList
{
return self.homeSection != HomeSectionTVLive && self.homeSection != HomeSectionRadioLive && self.homeSection != HomeSectionRadioLiveSatellite
- && self.homeSection != HomeSectionRadioAllShows
+ && self.homeSection != HomeSectionTVTopicsAccess && self.homeSection != HomeSectionRadioAllShows
&& self.homeSection != HomeSectionTVShowsAccess && self.homeSection != HomeSectionRadioShowsAccess
&& self.homeSection != HomeSectionTVFavoriteShows && self.homeSection != HomeSectionRadioFavoriteShows
&& ! [self isPlaceholder];
@@ -300,6 +304,15 @@ - (void)refreshWithRequestQueue:(SRGRequestQueue *)requestQueue page:(SRGPage *)
break;
}
+ case HomeSectionTVTopicsAccess: {
+ SRGBaseRequest *request = [SRGDataProvider.currentDataProvider tvTopicsForVendor:vendor withCompletionBlock:^(NSArray * _Nullable topics, NSHTTPURLResponse * _Nullable HTTPResponse, NSError * _Nullable error) {
+ [requestQueue reportError:error];
+ paginatedItemListCompletionBlock(topics, [SRGPage new] /* The request does not support pagination, but we need to return a page */, nil, HTTPResponse, error);
+ }];
+ [requestQueue addRequest:request resume:YES];
+ break;
+ }
+
case HomeSectionTVLatest: {
SRGBaseRequest *request = [[[SRGDataProvider.currentDataProvider tvLatestMediasForVendor:vendor withCompletionBlock:^(NSArray * _Nullable medias, SRGPage * _Nonnull page, SRGPage * _Nullable nextPage, NSHTTPURLResponse * _Nullable HTTPResponse, NSError * _Nullable error) {
[requestQueue reportError:error];
diff --git a/Application/Sources/Home/HomeShowCollectionViewCell.m b/Application/Sources/Home/HomeShowCollectionViewCell.m
index e051e17cd..9b56fb3a4 100755
--- a/Application/Sources/Home/HomeShowCollectionViewCell.m
+++ b/Application/Sources/Home/HomeShowCollectionViewCell.m
@@ -129,8 +129,7 @@ - (void)reloadData
self.showView.hidden = NO;
self.placeholderView.hidden = YES;
- self.titleLabel.font = [UIFont srg_mediumFontWithTextStyle:self.featured ? SRGAppearanceFontTextStyleTitle : SRGAppearanceFontTextStyleBody];
-
+ self.titleLabel.font = [UIFont srg_mediumFontWithTextStyle:self.featured ? SRGAppearanceFontTextStyleTitle : SRGAppearanceFontTextStyleBody];
self.titleLabel.text = self.show.title;
ImageScale imageScale = self.featured ? ImageScaleMedium : ImageScaleSmall;
diff --git a/Application/Sources/Home/HomeShowsAccessTableViewCell.h b/Application/Sources/Home/HomeShowsAccessTableViewCell.h
index 666300371..df47a63c4 100755
--- a/Application/Sources/Home/HomeShowsAccessTableViewCell.h
+++ b/Application/Sources/Home/HomeShowsAccessTableViewCell.h
@@ -6,8 +6,6 @@
#import "HomeTableViewCell.h"
-#import
-
NS_ASSUME_NONNULL_BEGIN
@interface HomeShowsAccessTableViewCell : HomeTableViewCell
diff --git a/Application/Sources/Home/HomeTopicCollectionViewCell.h b/Application/Sources/Home/HomeTopicCollectionViewCell.h
new file mode 100644
index 000000000..62f5abcfb
--- /dev/null
+++ b/Application/Sources/Home/HomeTopicCollectionViewCell.h
@@ -0,0 +1,18 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeTopicCollectionViewCell : UICollectionViewCell
+
+@property (nonatomic, nullable) SRGTopic *topic;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Application/Sources/Home/HomeTopicCollectionViewCell.m b/Application/Sources/Home/HomeTopicCollectionViewCell.m
new file mode 100644
index 000000000..28dd57880
--- /dev/null
+++ b/Application/Sources/Home/HomeTopicCollectionViewCell.m
@@ -0,0 +1,76 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import "HomeTopicCollectionViewCell.h"
+
+#import "Layout.h"
+#import "NSBundle+PlaySRG.h"
+#import "UIColor+PlaySRG.h"
+#import "UIImageView+PlaySRG.h"
+
+#import
+
+@interface HomeTopicCollectionViewCell ()
+
+@property (nonatomic, weak) IBOutlet UILabel *titleLabel;
+@property (nonatomic, weak) IBOutlet UIImageView *imageView;
+@property (nonatomic, weak) IBOutlet UIView *overlayView;
+
+@end
+
+@implementation HomeTopicCollectionViewCell
+
+#pragma mark Overrides
+
+- (void)awakeFromNib
+{
+ [super awakeFromNib];
+
+ self.backgroundColor = UIColor.play_cardGrayBackgroundColor;
+
+ self.layer.cornerRadius = LayoutStandardViewCornerRadius;
+ self.layer.masksToBounds = YES;
+}
+
+- (void)prepareForReuse
+{
+ [super prepareForReuse];
+
+ [self.imageView play_resetImage];
+}
+
+#pragma mark Getters and setters
+
+- (void)setTopic:(SRGTopic *)topic
+{
+ _topic = topic;
+
+ self.titleLabel.font = [UIFont srg_mediumFontWithTextStyle:SRGAppearanceFontTextStyleBody];
+ self.titleLabel.text = topic.title;
+
+ self.overlayView.hidden = (topic == nil);
+
+ [self.imageView play_requestImageForObject:topic withScale:ImageScaleSmall type:SRGImageTypeDefault placeholder:ImagePlaceholderNone];
+}
+
+#pragma mark Accessibility
+
+- (BOOL)isAccessibilityElement
+{
+ return YES;
+}
+
+- (NSString *)accessibilityLabel
+{
+ return self.topic.title;
+}
+
+- (NSString *)accessibilityHint
+{
+ return PlaySRGAccessibilityLocalizedString(@"Opens topic details.", @"Show cell hint");
+}
+
+@end
diff --git a/Application/Sources/Home/HomeTopicCollectionViewCell.xib b/Application/Sources/Home/HomeTopicCollectionViewCell.xib
new file mode 100644
index 000000000..226ad2d56
--- /dev/null
+++ b/Application/Sources/Home/HomeTopicCollectionViewCell.xib
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Application/Sources/Home/HomeTopicListTableViewCell.h b/Application/Sources/Home/HomeTopicListTableViewCell.h
new file mode 100644
index 000000000..404c90bc4
--- /dev/null
+++ b/Application/Sources/Home/HomeTopicListTableViewCell.h
@@ -0,0 +1,15 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import "HomeTableViewCell.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HomeTopicListTableViewCell : HomeTableViewCell
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Application/Sources/Home/HomeTopicListTableViewCell.m b/Application/Sources/Home/HomeTopicListTableViewCell.m
new file mode 100644
index 000000000..e1498a36b
--- /dev/null
+++ b/Application/Sources/Home/HomeTopicListTableViewCell.m
@@ -0,0 +1,153 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import "HomeTopicListTableViewCell.h"
+
+#import "HomeTopicCollectionViewCell.h"
+#import "HomeTopicViewController.h"
+#import "Layout.h"
+#import "SwimlaneCollectionViewLayout.h"
+
+static CGFloat kCellHeight = 100.f;
+
+@interface HomeTopicListTableViewCell ()
+
+@property (nonatomic, weak) UIView *wrapperView;
+@property (nonatomic, weak) UICollectionView *collectionView;
+
+@end
+
+@implementation HomeTopicListTableViewCell
+
+#pragma mark Class overrides
+
++ (CGFloat)heightForHomeSectionInfo:(HomeSectionInfo *)homeSectionInfo bounds:(CGRect)bounds featured:(BOOL)featured
+{
+ return kCellHeight;
+}
+
+#pragma mark Object lifecycle
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
+{
+ if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+ self.backgroundColor = UIColor.clearColor;
+ self.selectedBackgroundView.backgroundColor = UIColor.clearColor;
+
+ UIView *wrapperView = [[UIView alloc] initWithFrame:self.contentView.bounds];
+ wrapperView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
+ [self.contentView addSubview:wrapperView];
+ self.wrapperView = wrapperView;
+
+ SwimlaneCollectionViewLayout *collectionViewLayout = [[SwimlaneCollectionViewLayout alloc] init];
+ collectionViewLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+ collectionViewLayout.minimumLineSpacing = LayoutStandardMargin;
+ collectionViewLayout.minimumInteritemSpacing = LayoutStandardMargin;
+
+ UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:wrapperView.bounds collectionViewLayout:collectionViewLayout];
+ collectionView.backgroundColor = UIColor.clearColor;
+ collectionView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
+ collectionView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
+ collectionView.alwaysBounceHorizontal = YES;
+ collectionView.directionalLockEnabled = YES;
+ collectionView.decelerationRate = UIScrollViewDecelerationRateFast;
+ // Important. If > 1 view on-screen is found on iPhone with this property enabled, none will scroll to top
+ collectionView.scrollsToTop = NO;
+ collectionView.delegate = self;
+ collectionView.dataSource = self;
+ [wrapperView addSubview:collectionView];
+ self.collectionView = collectionView;
+
+ // Remark: The collection view is nested in a dummy view to workaround an accessibility bug
+ // See https://stackoverflow.com/a/38798448/760435
+ wrapperView.accessibilityElements = @[collectionView];
+
+ NSString *topicCellIdentifier = NSStringFromClass(HomeTopicCollectionViewCell.class);
+ UINib *showCellNib = [UINib nibWithNibName:topicCellIdentifier bundle:nil];
+ [collectionView registerNib:showCellNib forCellWithReuseIdentifier:topicCellIdentifier];
+ }
+ return self;
+}
+
+#pragma mark Overrides
+
+- (void)layoutSubviews
+{
+ [super layoutSubviews];
+
+ [self.collectionView.collectionViewLayout invalidateLayout];
+}
+
+- (void)reloadData
+{
+ [super reloadData];
+
+ [self.collectionView reloadData];
+}
+
+#pragma mark Getters and setters
+
+- (void)setHomeSectionInfo:(HomeSectionInfo *)homeSectionInfo featured:(BOOL)featured
+{
+ [super setHomeSectionInfo:homeSectionInfo featured:featured];
+
+ if (homeSectionInfo) {
+ // Restore position in rows when scrolling vertically and returning to a previously scrolled row
+ CGPoint contentOffset = [self.collectionView.collectionViewLayout targetContentOffsetForProposedContentOffset:homeSectionInfo.contentOffset];
+ [self.collectionView setContentOffset:contentOffset animated:NO];
+ }
+ self.collectionView.scrollEnabled = (homeSectionInfo.items.count != 0);
+}
+
+#pragma mark UICollectionViewDataSource protocol
+
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
+{
+ return ! [self isEmpty] ? self.homeSectionInfo.items.count : 10 /* Display 10 placeholders */;
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
+{
+ return [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass(HomeTopicCollectionViewCell.class) forIndexPath:indexPath];
+}
+
+#pragma mark UICollectionViewDelegate protocol
+
+- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(HomeTopicCollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
+{
+ cell.topic = ! [self isEmpty] ? self.homeSectionInfo.items[indexPath.row] : nil;
+}
+
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
+{
+ if (! [self isEmpty]) {
+ SRGTopic *topic = self.homeSectionInfo.items[indexPath.row];
+ HomeTopicViewController *topicViewController = [[HomeTopicViewController alloc] initWithTopic:topic];
+ [self.nearestViewController.navigationController pushViewController:topicViewController animated:YES];
+ }
+}
+
+#pragma mark UICollectionViewDelegateFlowLayout protocol
+
+- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewFlowLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
+{
+ CGFloat height = kCellHeight - 2 * LayoutStandardMargin;
+ return CGSizeMake(height * 16.f / 9.f, height);
+}
+
+- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewFlowLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
+{
+ return UIEdgeInsetsMake(0.f, LayoutStandardMargin, 0.f, LayoutStandardMargin);
+}
+
+#pragma mark UIScrollViewDelegate protocol
+
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView
+{
+ self.homeSectionInfo.contentOffset = scrollView.contentOffset;
+}
+
+@end
diff --git a/Application/Sources/Home/HomeViewController.m b/Application/Sources/Home/HomeViewController.m
index a2165e4d7..a16c39ce3 100755
--- a/Application/Sources/Home/HomeViewController.m
+++ b/Application/Sources/Home/HomeViewController.m
@@ -20,6 +20,7 @@
#import "HomeShowsAccessTableViewCell.h"
#import "HomeShowVerticalListTableViewCell.h"
#import "HomeStatusHeaderView.h"
+#import "HomeTopicListTableViewCell.h"
#import "NavigationController.h"
#import "NSBundle+PlaySRG.h"
#import "RefreshControl.h"
@@ -123,6 +124,9 @@ - (void)viewDidLoad
Class showVerticallListCellClass = HomeShowVerticalListTableViewCell.class;
[self.tableView registerClass:showVerticallListCellClass forCellReuseIdentifier:NSStringFromClass(showVerticallListCellClass)];
+ Class topicListCellClass = HomeTopicListTableViewCell.class;
+ [self.tableView registerClass:topicListCellClass forCellReuseIdentifier:NSStringFromClass(topicListCellClass)];
+
NSString *showsAccessCellIdentifier = NSStringFromClass(HomeShowsAccessTableViewCell.class);
UINib *homeShowsAccessTableViewCellNib = [UINib nibWithNibName:showsAccessCellIdentifier bundle:nil];
[self.tableView registerNib:homeShowsAccessTableViewCellNib forCellReuseIdentifier:showsAccessCellIdentifier];
@@ -138,7 +142,7 @@ - (void)viewDidLoad
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(accessibilityVoiceOverStatusChanged:)
- name:UIAccessibilityVoiceOverStatusChanged
+ name:UIAccessibilityVoiceOverStatusDidChangeNotification
object:nil];
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(preferencesStateDidChange:)
@@ -413,6 +417,9 @@ - (HomeHeaderType)headerTypeForHomeSectionInfo:(HomeSectionInfo *)homeSectionInf
return HomeHeaderTypeView;
}
}
+ else if (homeSectionInfo.homeSection == HomeSectionTVTopicsAccess) {
+ return ! UIAccessibilityIsVoiceOverRunning() ? HomeHeaderTypeNone : HomeHeaderTypeView;
+ }
else {
return HomeHeaderTypeView;
}
@@ -589,22 +596,20 @@ - (void)tableView:(UITableView *)tableView willDisplayCell:(HomeTableViewCell *)
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
+ // Not zero, otherwise not applied
+ static CGFloat kZeroHeight = 0.0001f;
+
HomeSectionInfo *homeSectionInfo = self.homeSectionInfos[section];
if (homeSectionInfo.hidden) {
- return 0.f;
+ return kZeroHeight;
}
HomeHeaderType headerType = [self headerTypeForHomeSectionInfo:homeSectionInfo tableView:tableView inSection:section];
- switch (headerType) {
- case HomeHeaderTypeView: {
- return LayoutStandardTableSectionHeaderHeight(homeSectionInfo.module.play_backgroundColor != nil);
- break;
- }
-
- default: {
- return 0.f;
- break;
- }
+ if (headerType == HomeHeaderTypeView) {
+ return LayoutStandardTableSectionHeaderHeight(homeSectionInfo.module.play_backgroundColor != nil);
+ }
+ else {
+ return kZeroHeight;
}
}
diff --git a/Application/Sources/Library/ProfileTableViewCell.m b/Application/Sources/Library/ProfileTableViewCell.m
index e9b095cd5..9ef5ec976 100755
--- a/Application/Sources/Library/ProfileTableViewCell.m
+++ b/Application/Sources/Library/ProfileTableViewCell.m
@@ -48,13 +48,6 @@ - (void)awakeFromNib
self.selectedBackgroundView = selectedBackgroundView;
}
-- (void)prepareForReuse
-{
- [super prepareForReuse];
-
- [self.iconImageView play_stopAnimating];
-}
-
- (void)willMoveToWindow:(UIWindow *)window
{
[super willMoveToWindow:window];
@@ -93,20 +86,15 @@ - (void)setSelected:(BOOL)selected animated:(BOOL)animated
- (void)updateIconImageViewAnimation
{
- [self.iconImageView play_stopAnimating];
-
if (self.applicationSectionInfo.applicationSection == ApplicationSectionDownloads) {
- switch (DownloadSession.sharedDownloadSession.state) {
- case DownloadSessionStateDownloading: {
- [self.iconImageView play_startAnimatingDownloading22WithTintColor:self.iconImageView.tintColor];
- break;
- }
-
- default: {
- break;
- }
+ if (DownloadSession.sharedDownloadSession.state == DownloadSessionStateDownloading) {
+ [self.iconImageView play_setDownloadAnimation22WithTintColor:self.iconImageView.tintColor];
+ [self.iconImageView startAnimating];
+ }
+ else {
+ [self.iconImageView stopAnimating];
+ self.iconImageView.image = self.applicationSectionInfo.image;
}
- self.iconImageView.image = self.applicationSectionInfo.image;
}
}
diff --git a/Application/Sources/Library/ProfileViewController.m b/Application/Sources/Library/ProfileViewController.m
index 4b00ddffd..901407596 100755
--- a/Application/Sources/Library/ProfileViewController.m
+++ b/Application/Sources/Library/ProfileViewController.m
@@ -19,6 +19,7 @@
#import "ProfileTableViewCell.h"
#import "PushService.h"
#import "SettingsViewController.h"
+#import "TableView.h"
#import "UIColor+PlaySRG.h"
#import "UIDevice+PlaySRG.h"
#import "UIScrollView+PlaySRG.h"
@@ -57,8 +58,7 @@ - (void)viewDidLoad
self.view.backgroundColor = UIColor.play_blackColor;
- self.tableView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
-
+ TableViewConfigure(self.tableView);
self.tableView.dataSource = self;
self.tableView.delegate = self;
@@ -72,7 +72,7 @@ - (void)viewDidLoad
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(accessibilityVoiceOverStatusChanged:)
- name:UIAccessibilityVoiceOverStatusChanged
+ name:UIAccessibilityVoiceOverStatusDidChangeNotification
object:nil];
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(didReceiveNotification:)
diff --git a/Application/Sources/MiniPlayer/GoogleCastMiniPlayerView.m b/Application/Sources/MiniPlayer/GoogleCastMiniPlayerView.m
index 27c39997a..8f86e2471 100755
--- a/Application/Sources/MiniPlayer/GoogleCastMiniPlayerView.m
+++ b/Application/Sources/MiniPlayer/GoogleCastMiniPlayerView.m
@@ -22,6 +22,7 @@ @interface GoogleCastMiniPlayerView ()
@property (nonatomic, weak) IBOutlet AccessibilityView *accessibilityView;
@property (nonatomic, weak) IBOutlet UIProgressView *progressView;
@property (nonatomic, weak) IBOutlet GoogleCastPlaybackButton *playbackButton;
+@property (nonatomic, weak) IBOutlet UILabel *liveLabel;
@property (nonatomic, weak) IBOutlet UILabel *titleLabel;
@end
@@ -83,7 +84,19 @@ - (void)reloadData
// Remark: Do not use controller.session which, probably because of a bug, is not updated to point at the current session
// if created before it. Its progress still reflects the one of the current session media, though.
GCKSession *session = [GCKCastContext sharedInstance].sessionManager.currentSession;
- GCKMediaMetadata *metadata = session.remoteMediaClient.mediaStatus.mediaInformation.metadata;
+ GCKMediaInformation *mediaInformation = session.remoteMediaClient.mediaStatus.mediaInformation;
+ if (mediaInformation.streamType == GCKMediaStreamTypeLive) {
+ self.titleLabel.numberOfLines = 1;
+
+ self.liveLabel.hidden = NO;
+ self.liveLabel.text = NSLocalizedString(@"Live", @"Introductory text for what is currently on air, displayed on the mini player");
+ }
+ else {
+ self.titleLabel.numberOfLines = 2;
+ self.liveLabel.hidden = YES;
+ }
+
+ GCKMediaMetadata *metadata = mediaInformation.metadata;
if (metadata) {
self.titleLabel.text = [metadata stringForKey:kGCKMetadataKeyTitle];
}
@@ -102,6 +115,7 @@ - (void)reloadData
- (void)updateFonts
{
+ self.liveLabel.font = [UIFont srg_regularFontWithTextStyle:SRGAppearanceFontTextStyleSubtitle];
self.titleLabel.font = [UIFont srg_mediumFontWithTextStyle:SRGAppearanceFontTextStyleBody];
}
@@ -116,12 +130,15 @@ - (NSArray *)accessibilityElements
- (NSString *)labelForAccessibilityView:(AccessibilityView *)accessibilityView
{
- return self.titleLabel.text;
+ GCKSession *session = [GCKCastContext sharedInstance].sessionManager.currentSession;
+ GCKMediaPlayerState playerState = session.remoteMediaClient.mediaStatus.playerState;
+ NSString *format = (playerState == GCKMediaPlayerStatePlaying) ? PlaySRGAccessibilityLocalizedString(@"Now playing: %@", @"Mini player label") : PlaySRGAccessibilityLocalizedString(@"Recently played: %@", @"Mini player label");
+ return [NSString stringWithFormat:format, self.titleLabel.text];
}
- (NSString *)hintForAccessibilityView:(AccessibilityView *)accessibilityView
{
- return PlaySRGAccessibilityLocalizedString(@"Plays the content.", @"Mini player action hint");
+ return PlaySRGAccessibilityLocalizedString(@"Opens the full screen player", @"Mini player action hint");
}
#pragma mark GCKUIMediaControllerDelegate protocol
diff --git a/Application/Sources/MiniPlayer/GoogleCastMiniPlayerView.xib b/Application/Sources/MiniPlayer/GoogleCastMiniPlayerView.xib
index 0a14bcf95..b887756b9 100755
--- a/Application/Sources/MiniPlayer/GoogleCastMiniPlayerView.xib
+++ b/Application/Sources/MiniPlayer/GoogleCastMiniPlayerView.xib
@@ -1,9 +1,9 @@
-
+
-
+
@@ -37,12 +37,35 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -54,15 +77,15 @@
-
-
+
+
+
-
@@ -75,6 +98,7 @@
+
diff --git a/Application/Sources/MiniPlayer/PlayMiniPlayerView.m b/Application/Sources/MiniPlayer/PlayMiniPlayerView.m
index cf84679e9..65e116fdb 100755
--- a/Application/Sources/MiniPlayer/PlayMiniPlayerView.m
+++ b/Application/Sources/MiniPlayer/PlayMiniPlayerView.m
@@ -16,6 +16,7 @@
#import "MediaPlayerViewController.h"
#import "NSBundle+PlaySRG.h"
#import "SRGProgram+PlaySRG.h"
+#import "SRGProgramComposition+PlaySRG.h"
#import "UIView+PlaySRG.h"
#import "UIViewController+PlaySRG.h"
@@ -26,8 +27,8 @@
@interface PlayMiniPlayerView ()
-@property (nonatomic) SRGMedia *media; // Latest media
-@property (nonatomic) SRGChannel *channel; // Latest channel information, if any
+@property (nonatomic) SRGMedia *media; // Latest media
+@property (nonatomic) SRGProgramComposition *programComposition; // Latest program information, if any
@property (nonatomic) SRGLetterboxController *controller;
@@ -35,10 +36,12 @@ @interface PlayMiniPlayerView ()
-
+
-
+
@@ -41,15 +41,35 @@
-
+
-
+
@@ -114,7 +115,6 @@
-
@@ -123,389 +123,488 @@
-
+
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
+
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
-
+
@@ -513,25 +612,29 @@
-
-
-
+
+
+
-
-
+
-
-
+
+
+
+
+
+
+
@@ -543,21 +646,17 @@
-
-
-
-
-
-
+
+
+
+
-
-
-
+
-
+
@@ -619,6 +718,7 @@
+
diff --git a/Application/Sources/Player/MediaPreviewViewController.m b/Application/Sources/Player/MediaPreviewViewController.m
index 4a5435989..dc0c86cc8 100755
--- a/Application/Sources/Player/MediaPreviewViewController.m
+++ b/Application/Sources/Player/MediaPreviewViewController.m
@@ -11,6 +11,7 @@
#import "ApplicationConfiguration.h"
#import "ApplicationSettings.h"
#import "Banner.h"
+#import "ChannelService.h"
#import "Download.h"
#import "GoogleCast.h"
#import "History.h"
@@ -22,6 +23,7 @@
#import "SRGDataProvider+PlaySRG.h"
#import "SRGMedia+PlaySRG.h"
#import "SRGMediaComposition+PlaySRG.h"
+#import "SRGProgramComposition+PlaySRG.h"
#import "UIImageView+PlaySRG.h"
#import "UIStackView+PlaySRG.h"
#import "UIView+PlaySRG.h"
@@ -37,6 +39,7 @@
@interface MediaPreviewViewController ()
@property (nonatomic) SRGMedia *media;
+@property (nonatomic) SRGProgramComposition *programComposition;
@property (nonatomic) IBOutlet SRGLetterboxController *letterboxController; // top object, strong
@property (nonatomic, weak) IBOutlet SRGLetterboxView *letterboxView;
@@ -56,6 +59,8 @@ @interface MediaPreviewViewController ()
@property (nonatomic) BOOL shouldRestoreServicePlayback;
@property (nonatomic, copy) NSString *previousAudioSessionCategory;
+@property (nonatomic, weak) id channelRegistration;
+
@end
@implementation MediaPreviewViewController
@@ -104,7 +109,6 @@ - (void)viewDidLoad
[self.letterboxView setUserInterfaceHidden:YES animated:NO togglable:NO];
[self.letterboxView setTimelineAlwaysHidden:YES animated:NO];
- [self reloadData];
[self updateFonts];
}
@@ -121,6 +125,14 @@ - (void)viewWillAppear:(BOOL)animated
CGFloat width = CGRectGetWidth(self.view.frame);
self.preferredContentSize = CGSizeMake(width, factor * 9.f / 16.f * width);
+
+ if (self.media.contentType == SRGContentTypeLivestream && self.media.channel) {
+ self.channelRegistration = [ChannelService.sharedService addObserver:self forUpdatesWithChannel:self.media.channel livestreamUid:self.media.uid block:^(SRGProgramComposition * _Nullable programComposition) {
+ self.programComposition = programComposition;
+ [self reloadData];
+ }];
+ }
+ [self reloadData];
}
self.previousAudioSessionCategory = [AVAudioSession sharedInstance].category;
@@ -137,6 +149,8 @@ - (void)viewDidDisappear:(BOOL)animated
[super viewDidDisappear:animated];
if ([self play_isMovingFromParentViewController]) {
+ [ChannelService.sharedService removeObserver:self.channelRegistration];
+
// Restore playback on exit. Works well with cancelled peek, as well as with pop, without additional checks. Wait
// a little bit since peek view dismissal occurs just before an action item has been selected. Moreover, having
// a small delay sounds better.
@@ -291,33 +305,25 @@ - (void)updateForContentSizeCategory
- (void)reloadData
{
- if (self.media.contentType == SRGContentTypeLivestream) {
+ SRGChannel *channel = self.programComposition.channel;
+ if (channel) {
[self.mediaInfoStackView play_setHidden:YES];
+ [self.channelInfoStackView play_setHidden:NO];
- SRGChannel *channel = self.letterboxController.channel;
- if (channel) {
- [self.channelInfoStackView play_setHidden:NO];
+ SRGProgram *currentProgram = [self.programComposition play_programAtDate:NSDate.date];
+ if (currentProgram) {
+ self.titleLabel.text = currentProgram.title;
- SRGProgram *currentProgram = channel.currentProgram;
- if (currentProgram) {
- self.titleLabel.text = currentProgram.title;
-
- self.channelLabel.font = [UIFont srg_mediumFontWithTextStyle:SRGAppearanceFontTextStyleSubtitle];
- self.channelLabel.text = channel.title;
-
- self.programTimeLabel.font = [UIFont srg_lightFontWithTextStyle:SRGAppearanceFontTextStyleBody];
- self.programTimeLabel.text = [NSString stringWithFormat:@"%@ - %@", [NSDateFormatter.play_timeFormatter stringFromDate:currentProgram.startDate], [NSDateFormatter.play_timeFormatter stringFromDate:currentProgram.endDate]];
- }
- else {
- self.titleLabel.text = channel.title;
- self.channelLabel.text = nil;
- self.programTimeLabel.text = nil;
- }
+ self.channelLabel.font = [UIFont srg_mediumFontWithTextStyle:SRGAppearanceFontTextStyleSubtitle];
+ self.channelLabel.text = channel.title;
+
+ self.programTimeLabel.font = [UIFont srg_lightFontWithTextStyle:SRGAppearanceFontTextStyleBody];
+ self.programTimeLabel.text = [NSString stringWithFormat:@"%@ - %@", [NSDateFormatter.play_timeFormatter stringFromDate:currentProgram.startDate], [NSDateFormatter.play_timeFormatter stringFromDate:currentProgram.endDate]];
}
else {
- self.titleLabel.text = self.media.title;
-
- [self.channelInfoStackView play_setHidden:YES];
+ self.titleLabel.text = channel.title;
+ self.channelLabel.text = nil;
+ self.programTimeLabel.text = nil;
}
}
else {
@@ -361,12 +367,7 @@ - (void)letterboxViewWillAnimateUserInterface:(SRGLetterboxView *)letterboxView
{
[self.view layoutIfNeeded];
[letterboxView animateAlongsideUserInterfaceWithAnimations:^(BOOL hidden, BOOL minimal, CGFloat aspecRatio, CGFloat heightOffset) {
- if (@available(iOS 10, *)) {
- self.playerAspectRatioConstraint = [self.playerAspectRatioConstraint srg_replacementConstraintWithMultiplier:fminf(1.f / aspecRatio, 1.f) constant:heightOffset];
- }
- else {
- self.playerAspectRatioConstraint.constant = heightOffset;
- }
+ self.playerAspectRatioConstraint = [self.playerAspectRatioConstraint srg_replacementConstraintWithMultiplier:fminf(1.f / aspecRatio, 1.f) constant:heightOffset];
[self.view layoutIfNeeded];
} completion:nil];
}
diff --git a/Application/Sources/Player/ProgramHeaderView.h b/Application/Sources/Player/ProgramHeaderView.h
new file mode 100755
index 000000000..e94aa278f
--- /dev/null
+++ b/Application/Sources/Player/ProgramHeaderView.h
@@ -0,0 +1,20 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * Opaque header view for the program list.
+ */
+@interface ProgramHeaderView : UITableViewHeaderFooterView
+
+@property (nonatomic, copy, nullable) NSString *title;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Application/Sources/Player/ProgramHeaderView.m b/Application/Sources/Player/ProgramHeaderView.m
new file mode 100755
index 000000000..b34686d57
--- /dev/null
+++ b/Application/Sources/Player/ProgramHeaderView.m
@@ -0,0 +1,58 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import "ProgramHeaderView.h"
+
+#import "UIColor+PlaySRG.h"
+
+#import
+
+@interface ProgramHeaderView ()
+
+@property (nonatomic, weak) IBOutlet UILabel *titleLabel;
+
+@end
+
+@implementation ProgramHeaderView
+
+#pragma mark Overrides
+
+- (void)awakeFromNib
+{
+ [super awakeFromNib];
+
+ self.contentView.backgroundColor = UIColor.play_blackColor;
+ self.titleLabel.textColor = UIColor.whiteColor;
+}
+
+#pragma mark Getters and setters
+
+- (void)setTitle:(NSString *)title
+{
+ _title = title;
+
+ self.titleLabel.text = title;
+ self.titleLabel.font = [UIFont srg_mediumFontWithTextStyle:SRGAppearanceFontTextStyleTitle];
+}
+
+#pragma mark Accessibility
+
+- (BOOL)isAccessibilityElement
+{
+ return YES;
+}
+
+- (NSString *)accessibilityLabel
+{
+ return self.titleLabel.text;
+}
+
+- (UIAccessibilityTraits)accessibilityTraits
+{
+ return UIAccessibilityTraitHeader;
+}
+
+@end
diff --git a/Application/Sources/Player/ProgramHeaderView.xib b/Application/Sources/Player/ProgramHeaderView.xib
new file mode 100755
index 000000000..d1190de38
--- /dev/null
+++ b/Application/Sources/Player/ProgramHeaderView.xib
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Application/Sources/Player/ProgramTableViewCell.h b/Application/Sources/Player/ProgramTableViewCell.h
new file mode 100644
index 000000000..1c5006a02
--- /dev/null
+++ b/Application/Sources/Player/ProgramTableViewCell.h
@@ -0,0 +1,19 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ProgramTableViewCell : UITableViewCell
+
+- (void)setProgram:(nullable SRGProgram *)program mediaType:(SRGMediaType)mediaType playing:(BOOL)playing;
+- (void)updateProgressForMediaURN:(nullable NSString *)mediaURN date:(NSDate *)date dateInterval:(nullable NSDateInterval *)dateInterval;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Application/Sources/Player/ProgramTableViewCell.m b/Application/Sources/Player/ProgramTableViewCell.m
new file mode 100644
index 000000000..171d5de87
--- /dev/null
+++ b/Application/Sources/Player/ProgramTableViewCell.m
@@ -0,0 +1,170 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import "ProgramTableViewCell.h"
+
+#import "Layout.h"
+#import "NSBundle+PlaySRG.h"
+#import "NSDateFormatter+PlaySRG.h"
+#import "PlayAccessibilityFormatter.h"
+#import "SRGProgram+PlaySRG.h"
+#import "UIColor+PlaySRG.h"
+#import "UIImageView+PlaySRG.h"
+
+#import
+
+@interface ProgramTableViewCell ()
+
+@property (nonatomic) SRGProgram *program;
+@property (nonatomic, getter=isPlaying) BOOL playing;
+
+@property (nonatomic, weak) IBOutlet UILabel *titleLabel;
+@property (nonatomic, weak) IBOutlet UILabel *subtitleLabel;
+@property (nonatomic, weak) IBOutlet UIView *thumbnailWrapperView;
+@property (nonatomic, weak) IBOutlet UIImageView *thumbnailImageView;
+@property (nonatomic, weak) IBOutlet UIView *disabledOverlayView;
+@property (nonatomic, weak) IBOutlet UIProgressView *progressView;
+@property (nonatomic, weak) IBOutlet UIImageView *waveformImageView;
+
+@end
+
+@implementation ProgramTableViewCell
+
+#pragma mark Overrides
+
+- (void)awakeFromNib
+{
+ [super awakeFromNib];
+
+ self.backgroundColor = UIColor.clearColor;
+ self.selectionStyle = UITableViewCellSelectionStyleNone;
+
+ self.thumbnailWrapperView.backgroundColor = UIColor.play_grayThumbnailImageViewBackgroundColor;
+ self.thumbnailWrapperView.layer.cornerRadius = LayoutStandardViewCornerRadius;
+ self.thumbnailWrapperView.layer.masksToBounds = YES;
+
+ self.disabledOverlayView.hidden = YES;
+ self.progressView.progressTintColor = UIColor.play_progressRedColor;
+
+ [self.waveformImageView play_setWaveformAnimation34WithTintColor:UIColor.whiteColor];
+ self.waveformImageView.hidden = YES;
+}
+
+- (void)prepareForReuse
+{
+ [super prepareForReuse];
+
+ self.progressView.hidden = YES;
+
+ [self.thumbnailImageView play_resetImage];
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated
+{
+ [super setSelected:selected animated:animated];
+
+ self.waveformImageView.hidden = ! selected;
+ [self updateWaveformAnimation];
+}
+
+#pragma mark Accessibility
+
+- (BOOL)isAccessibilityElement
+{
+ return YES;
+}
+
+#pragma mark Attached data
+
+- (void)setProgram:(SRGProgram *)program mediaType:(SRGMediaType)mediaType playing:(BOOL)playing
+{
+ self.program = program;
+ self.playing = playing;
+
+ self.titleLabel.text = program.title;
+ self.titleLabel.font = [UIFont srg_mediumFontWithTextStyle:SRGAppearanceFontTextStyleBody];
+
+ self.subtitleLabel.font = [UIFont srg_lightFontWithTextStyle:SRGAppearanceFontTextStyleSubtitle];
+
+ [self.thumbnailImageView play_requestImageForObject:program withScale:ImageScaleSmall type:SRGImageTypeDefault placeholder:ImagePlaceholderMedia];
+
+ if (mediaType == SRGMediaTypeVideo) {
+ [self.waveformImageView play_setPlayAnimation34WithTintColor:UIColor.whiteColor];
+ }
+ else {
+ [self.waveformImageView play_setWaveformAnimation34WithTintColor:UIColor.whiteColor];
+ }
+
+ [self updateWaveformAnimation];
+}
+
+#pragma mark Progress
+
+- (void)updateProgressForMediaURN:(NSString *)mediaURN date:(NSDate *)date dateInterval:(NSDateInterval *)dateInterval
+{
+ SRGProgram *program = self.program;
+ if ([program.mediaURN isEqualToString:mediaURN]) {
+ self.progressView.progress = fmaxf(fminf([date timeIntervalSinceDate:program.startDate] / [program.endDate timeIntervalSinceDate:program.startDate], 1.f), 0.f);
+ self.progressView.hidden = NO;
+ }
+ else {
+ self.progressView.hidden = YES;
+ }
+
+ if ([dateInterval containsDate:program.startDate]) {
+ NSString *timeText = [NSString stringWithFormat:PlaySRGAccessibilityLocalizedString(@"From %1$@ to %2$@", @"Text providing program time information. First placeholder is the start time, second is the end time."), PlayAccessibilityShortTimeFromDate(program.startDate), PlayAccessibilityShortTimeFromDate(program.endDate)];
+ self.accessibilityLabel = [NSString stringWithFormat:@"%@, %@", timeText, program.title];
+ self.accessibilityHint = PlaySRGAccessibilityLocalizedString(@"Plays from the beginning.", @"Program cell hint");
+
+ self.titleLabel.textColor = UIColor.whiteColor;
+
+ self.subtitleLabel.text = [NSString stringWithFormat:@"%@ - %@", [NSDateFormatter.play_timeFormatter stringFromDate:program.startDate], [NSDateFormatter.play_timeFormatter stringFromDate:program.endDate]];
+ self.subtitleLabel.textColor = UIColor.whiteColor;
+
+ self.disabledOverlayView.hidden = YES;
+ self.userInteractionEnabled = YES;
+ }
+ else if ([dateInterval.endDate compare:program.startDate] == NSOrderedAscending) {
+ NSString *timeText = [NSString stringWithFormat:PlaySRGAccessibilityLocalizedString(@"Next, at %@", @"Text providing next program time information."), PlayAccessibilityShortTimeFromDate(program.startDate)];
+ self.accessibilityLabel = [NSString stringWithFormat:@"%@, %@", timeText, program.title];
+ self.accessibilityHint = nil;
+
+ self.titleLabel.textColor = UIColor.play_grayColor;
+
+ self.subtitleLabel.text = [NSString stringWithFormat:NSLocalizedString(@"Next, at %@", @"Introductory time for next program information"), [NSDateFormatter.play_timeFormatter stringFromDate:program.startDate]];
+ self.subtitleLabel.textColor = UIColor.play_grayColor;
+
+ self.disabledOverlayView.hidden = NO;
+ self.userInteractionEnabled = NO;
+ }
+ else {
+ NSString *timeText = [NSString stringWithFormat:PlaySRGAccessibilityLocalizedString(@"From %1$@ to %2$@", @"Text providing program time information. First placeholder is the start time, second is the end time."), PlayAccessibilityShortTimeFromDate(program.startDate), PlayAccessibilityShortTimeFromDate(program.endDate)];
+ self.accessibilityLabel = [NSString stringWithFormat:@"%@, %@", timeText, program.title];
+ self.accessibilityHint = nil;
+
+ self.titleLabel.textColor = UIColor.whiteColor;
+
+ self.subtitleLabel.text = [NSString stringWithFormat:@"%@ - %@", [NSDateFormatter.play_timeFormatter stringFromDate:program.startDate], [NSDateFormatter.play_timeFormatter stringFromDate:program.endDate]];
+ self.subtitleLabel.textColor = UIColor.whiteColor;
+
+ self.disabledOverlayView.hidden = YES;
+ self.userInteractionEnabled = NO;
+ }
+}
+
+#pragma mark UI
+
+- (void)updateWaveformAnimation
+{
+ if (self.playing) {
+ [self.waveformImageView startAnimating];
+ }
+ else {
+ [self.waveformImageView stopAnimating];
+ }
+}
+
+@end
diff --git a/Application/Sources/Player/ProgramTableViewCell.xib b/Application/Sources/Player/ProgramTableViewCell.xib
new file mode 100644
index 000000000..644b28e7b
--- /dev/null
+++ b/Application/Sources/Player/ProgramTableViewCell.xib
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Application/Sources/Player/SongTableViewCell.h b/Application/Sources/Player/SongTableViewCell.h
new file mode 100644
index 000000000..32a108edb
--- /dev/null
+++ b/Application/Sources/Player/SongTableViewCell.h
@@ -0,0 +1,23 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SongTableViewCell : UITableViewCell
+
++ (CGFloat)heightForSong:(nullable SRGSong *)song withCellWidth:(CGFloat)width;
+
+@property (nonatomic, readonly, getter=isPlayable) BOOL playable;
+
+- (void)setSong:(nullable SRGSong *)song playing:(BOOL)playing;
+- (void)updateProgressForDateInterval:(nullable NSDateInterval *)dateInterval;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Application/Sources/Player/SongTableViewCell.m b/Application/Sources/Player/SongTableViewCell.m
new file mode 100644
index 000000000..a02beafa6
--- /dev/null
+++ b/Application/Sources/Player/SongTableViewCell.m
@@ -0,0 +1,189 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import "SongTableViewCell.h"
+
+#import "Banner.h"
+#import "NSBundle+PlaySRG.h"
+#import "NSDateFormatter+PlaySRG.h"
+#import "UIColor+PlaySRG.h"
+#import "UIImageView+PlaySRG.h"
+
+#import
+
+static const CGFloat SongTableViewMargin = 42.f;
+
+@interface SongTableViewCell ()
+
+@property (nonatomic, nullable) SRGSong *song;
+@property (nonatomic, getter=isPlaying) BOOL playing;
+@property (nonatomic, getter=isPlayable) BOOL playable;
+
+@property (nonatomic, weak) IBOutlet UILabel *timeLabel;
+@property (nonatomic, weak) IBOutlet UILabel *titleLabel;
+@property (nonatomic, weak) IBOutlet UILabel *artistLabel;
+@property (nonatomic, weak) IBOutlet UIImageView *waveformImageView;
+
+@property (nonatomic, weak) IBOutlet UIView *rightMarginView;
+@property (nonatomic, weak) IBOutlet UIView *waveformView;
+
+@property (nonatomic) IBOutletCollection(NSLayoutConstraint) NSArray *marginWidthConstraints;
+
+@end
+
+@implementation SongTableViewCell
+
+#pragma mark Class methods
+
++ (UIFont *)timeLabelFont
+{
+ return [UIFont srg_lightFontWithTextStyle:SRGAppearanceFontTextStyleSubtitle];
+}
+
++ (UIFont *)titleLabelFont
+{
+ return [UIFont srg_mediumFontWithTextStyle:SRGAppearanceFontTextStyleBody];
+}
+
++ (UIFont *)artistLabelFont
+{
+ return [UIFont srg_regularFontWithTextStyle:SRGAppearanceFontTextStyleBody];
+}
+
++ (CGFloat)heightForSong:(SRGSong *)song withCellWidth:(CGFloat)width
+{
+ // Add variable contribution depending on the number of lines required to properly display a song title
+ // (maximum of 2 lines)
+ // Remark: We do not take the waveform into account. We namely do not want to change the height of the
+ // cell whether or not the waveform is displayed. We therefore calculate the layout in the nominal
+ // case, i.e. without waveform.
+ UIFont *font = [self titleLabelFont];
+ CGFloat textWidth = fmaxf(width - 2 * SongTableViewMargin, 0.f);
+ CGRect boundingRect = [song.title boundingRectWithSize:CGSizeMake(textWidth, CGFLOAT_MAX)
+ options:NSStringDrawingUsesLineFragmentOrigin
+ attributes:@{ NSFontAttributeName : font }
+ context:nil];
+
+ CGFloat lineHeight = font.lineHeight;
+ NSInteger numberOfLines = MIN(CGRectGetHeight(boundingRect) / lineHeight, 2);
+ CGFloat titleHeight = ceil(numberOfLines * lineHeight);
+
+ // Time and artist fields are mandatory, a contribution is therefore added for each
+ return [self timeLabelFont].lineHeight + [self artistLabelFont].lineHeight + titleHeight;
+}
+
+#pragma mark Overrides
+
+- (void)awakeFromNib
+{
+ [super awakeFromNib];
+
+ self.backgroundColor = UIColor.play_cardGrayBackgroundColor;
+ self.selectionStyle = UITableViewCellSelectionStyleNone;
+
+ [self.marginWidthConstraints enumerateObjectsUsingBlock:^(NSLayoutConstraint * _Nonnull constraint, NSUInteger idx, BOOL * _Nonnull stop) {
+ constraint.constant = SongTableViewMargin;
+ }];
+
+ self.waveformView.hidden = YES;
+ self.rightMarginView.hidden = NO;
+
+ [self.waveformImageView play_setWaveformAnimation34WithTintColor:UIColor.whiteColor];
+
+ UILongPressGestureRecognizer *longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(copySongToPasteboard:)];
+ [self addGestureRecognizer:longPressGestureRecognizer];
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated
+{
+ [super setSelected:selected animated:animated];
+
+ self.waveformView.hidden = ! selected;
+ self.rightMarginView.hidden = selected;
+
+ [self updateWaveformAnimation];
+}
+
+#pragma mark Attached data
+
+- (void)setSong:(SRGSong *)song playing:(BOOL)playing
+{
+ self.song = song;
+ self.playing = playing;
+
+ self.timeLabel.text = [NSDateFormatter.play_timeFormatter stringFromDate:song.date];
+ self.timeLabel.font = [SongTableViewCell timeLabelFont];
+
+ self.titleLabel.text = song.title;
+ self.titleLabel.font = [SongTableViewCell titleLabelFont];
+
+ self.artistLabel.text = song.artist.name;
+ self.artistLabel.font = [SongTableViewCell artistLabelFont];
+
+ [self updateWaveformAnimation];
+}
+
+- (void)updateProgressForDateInterval:(NSDateInterval *)dateInterval
+{
+ if ([dateInterval containsDate:self.song.date]) {
+ self.timeLabel.textColor = UIColor.whiteColor;
+ self.titleLabel.textColor = UIColor.whiteColor;
+ self.artistLabel.textColor = UIColor.play_grayColor;
+ self.playable = YES;
+ }
+ else {
+ self.timeLabel.textColor = UIColor.play_grayColor;
+ self.titleLabel.textColor = UIColor.play_grayColor;
+ self.artistLabel.textColor = UIColor.play_grayColor;
+ self.playable = NO;
+ }
+}
+
+#pragma mark Accessibility
+
+- (BOOL)isAccessibilityElement
+{
+ return YES;
+}
+
+- (NSString *)accessibilityLabel
+{
+ return [NSString stringWithFormat:PlaySRGAccessibilityLocalizedString(@"%1$@, by %2$@", @"Song description. First placeholder is song title, second is artist name"), self.song.title, self.song.artist.name];
+}
+
+- (NSString *)accessibilityHint
+{
+ return self.playable ? PlaySRGAccessibilityLocalizedString(@"Plays the music.", @"Song cell hint") : nil;
+}
+
+#pragma mark UI
+
+- (void)updateWaveformAnimation
+{
+ if (self.playing) {
+ [self.waveformImageView startAnimating];
+ }
+ else {
+ [self.waveformImageView stopAnimating];
+ }
+}
+
+#pragma mark Actions
+
+- (void)copySongToPasteboard:(UIGestureRecognizer *)gestureRecognizer
+{
+ if (gestureRecognizer.state == UIGestureRecognizerStateBegan && self.song) {
+ [UIPasteboard.generalPasteboard setString:[NSString stringWithFormat:@"%@, %@", self.song.title, self.song.artist.name]];
+
+ [Banner showWithStyle:BannerStyleInfo
+ message:NSLocalizedString(@"The content has been copied to the clipboard.", @"Message displayed when song title and artist name have been copied to the pasteboard")
+ image:nil
+ sticky:NO
+ inViewController:nil /* Not 'self' since dismissed */];
+ }
+}
+
+@end
diff --git a/Application/Sources/Player/SongTableViewCell.xib b/Application/Sources/Player/SongTableViewCell.xib
new file mode 100644
index 000000000..e81344ce2
--- /dev/null
+++ b/Application/Sources/Player/SongTableViewCell.xib
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Application/Sources/Player/SongsViewController.h b/Application/Sources/Player/SongsViewController.h
new file mode 100644
index 000000000..ea44fdeb3
--- /dev/null
+++ b/Application/Sources/Player/SongsViewController.h
@@ -0,0 +1,31 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import "ContentInsets.h"
+#import "TableRequestViewController.h"
+
+#import
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SongsViewController : TableRequestViewController
+
+- (instancetype)initWithChannel:(SRGChannel *)channel letterboxController:(SRGLetterboxController *)letterboxController;
+
+@property (nonatomic, readonly) SRGChannel *channel;
+@property (nonatomic, nullable) NSDateInterval *dateInterval;
+
+- (void)scrollToSongAtDate:(nullable NSDate *)date animated:(BOOL)animated;
+
+- (void)updateSelectionForSongAtDate:(nullable NSDate *)date;
+- (void)updateSelectionForCurrentSong;
+
+- (void)updateProgressForDateInterval:(nullable NSDateInterval *)dateInterval;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Application/Sources/Player/SongsViewController.m b/Application/Sources/Player/SongsViewController.m
new file mode 100644
index 000000000..48d5ed598
--- /dev/null
+++ b/Application/Sources/Player/SongsViewController.m
@@ -0,0 +1,299 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import "SongsViewController.h"
+
+#import "ApplicationConfiguration.h"
+#import "ForegroundTimer.h"
+#import "Layout.h"
+#import "SongTableViewCell.h"
+#import "SRGLetterboxController+PlaySRG.h"
+#import "SRGProgramComposition+PlaySRG.h"
+#import "TableView.h"
+#import "UIColor+PlaySRG.h"
+#import "UIViewController+PlaySRG.h"
+
+#import
+
+@interface SongsViewController ()
+
+@property (nonatomic) SRGChannel *channel;
+@property (nonatomic) ForegroundTimer *updateTimer;
+@property (nonatomic, weak) SRGLetterboxController *letterboxController;
+
+@end
+
+@implementation SongsViewController
+
+#pragma mark Object lifecycle
+
+- (instancetype)initWithChannel:(SRGChannel *)channel letterboxController:(SRGLetterboxController *)letterboxController
+{
+ if (self = [super init]) {
+ self.channel = channel;
+ self.letterboxController = letterboxController;
+ }
+ return self;
+}
+
+#pragma mark Getters and setters
+
+- (NSString *)title
+{
+ return NSLocalizedString(@"Music", @"Song list title");
+}
+
+- (void)setUpdateTimer:(ForegroundTimer *)updateTimer
+{
+ [_updateTimer invalidate];
+ _updateTimer = updateTimer;
+}
+
+#pragma mark View lifecycle
+
+- (void)loadView
+{
+ UIView *view = [[UIView alloc] initWithFrame:UIScreen.mainScreen.bounds];
+ view.backgroundColor = UIColor.play_cardGrayBackgroundColor;
+
+ TableView *tableView = [[TableView alloc] initWithFrame:view.bounds];
+ tableView.dataSource = self;
+ tableView.delegate = self;
+ tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
+ [view addSubview:tableView];
+ self.tableView = tableView;
+
+ self.view = view;
+}
+
+- (void)viewDidLoad
+{
+ [super viewDidLoad];
+
+ NSString *cellIdentifier = NSStringFromClass(SongTableViewCell.class);
+ UINib *cellNib = [UINib nibWithNibName:cellIdentifier bundle:nil];
+ [self.tableView registerNib:cellNib forCellReuseIdentifier:cellIdentifier];
+
+ [NSNotificationCenter.defaultCenter addObserver:self
+ selector:@selector(playbackStateDidChange:)
+ name:SRGLetterboxPlaybackStateDidChangeNotification
+ object:self.letterboxController];
+}
+
+- (void)viewWillAppear:(BOOL)animated
+{
+ [super viewWillAppear:animated];
+
+ @weakify(self)
+ self.updateTimer = [ForegroundTimer timerWithTimeInterval:30. repeats:YES block:^(ForegroundTimer * _Nonnull timer) {
+ @strongify(self)
+ [self refresh];
+ }];
+}
+
+- (void)viewDidDisappear:(BOOL)animated
+{
+ [super viewDidDisappear:animated];
+
+ self.updateTimer = nil;
+}
+
+#pragma mark Overrides
+
+- (void)prepareRefreshWithRequestQueue:(SRGRequestQueue *)requestQueue page:(SRGPage *)page completionHandler:(ListRequestPageCompletionHandler)completionHandler
+{
+ ApplicationConfiguration *applicationConfiguration = ApplicationConfiguration.sharedApplicationConfiguration;
+ SRGPageRequest *request = [[[SRGDataProvider.currentDataProvider radioSongsForVendor:self.channel.vendor channelUid:self.channel.uid withCompletionBlock:completionHandler] requestWithPageSize:applicationConfiguration.pageSize] requestWithPage:page];
+ [requestQueue addRequest:request resume:YES];
+}
+
+- (void)refreshDidFinishWithError:(NSError *)error
+{
+ [super refreshDidFinishWithError:error];
+
+ [self updateSelectionForCurrentSong];
+}
+
+#pragma mark UI
+
+- (void)scrollToSongAtDate:(NSDate *)date animated:(BOOL)animated
+{
+ if (! date) {
+ return;
+ }
+
+ if (self.tableView.dragging) {
+ return;
+ }
+
+ void (^animations)(void) = ^{
+ NSIndexPath *indexPath = [self nearestSongIndexPathForDate:date];
+ if (indexPath) {
+ @try {
+ [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionNone animated:NO];
+ }
+ @catch (NSException *exception) {}
+ }
+ };
+
+ if (animated) {
+ [self.view layoutIfNeeded];
+ [UIView animateWithDuration:0.2 animations:^{
+ animations();
+ [self.view layoutIfNeeded];
+ }];
+ }
+ else {
+ animations();
+ }
+}
+
+- (NSIndexPath *)indexPathForSong:(SRGSong *)song
+{
+ NSUInteger row = [self.items indexOfObject:song];
+ return (row != NSNotFound) ? [NSIndexPath indexPathForRow:row inSection:0] : nil;
+}
+
+- (NSIndexPath *)indexPathForSongAtDate:(NSDate *)date
+{
+ for (SRGSong *song in self.items) {
+ // When the duration of the song is unknown, rely on the playing flag.
+ NSTimeInterval durationInSeconds = song.duration / 1000.;
+ if (durationInSeconds <= 0.) {
+ if (song.playing && [date compare:song.date] != NSOrderedAscending) {
+ return [self indexPathForSong:song];
+ }
+ continue;
+ }
+
+ NSDateInterval *dateInterval = [[NSDateInterval alloc] initWithStartDate:song.date duration:durationInSeconds];
+ if ([dateInterval containsDate:date]) {
+ return [self indexPathForSong:song];
+ }
+ }
+ return nil;
+}
+
+- (NSIndexPath *)nearestSongIndexPathForDate:(NSDate *)date
+{
+ if (self.items.count == 0) {
+ return nil;
+ }
+
+ // Consider songs from the oldest to the newest one
+ NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@keypath(SRGSong.new, date) ascending:YES];
+ NSArray *songs = [self.items sortedArrayUsingDescriptors:@[sortDescriptor]];
+
+ // Find the nearest item in the list
+ __block NSUInteger nearestIndex = 0;
+ [songs enumerateObjectsUsingBlock:^(SRGSong * _Nonnull song, NSUInteger idx, BOOL * _Nonnull stop) {
+ if ([date compare:song.date] == NSOrderedAscending) {
+ nearestIndex = (idx > 0) ? idx - 1 : 0;
+ *stop = YES;
+ }
+ else {
+ nearestIndex = idx;
+ }
+ }];
+
+ SRGSong *nearestSong = songs[nearestIndex];
+ NSUInteger row = [self.items indexOfObject:nearestSong];
+ return [NSIndexPath indexPathForRow:row inSection:0];
+}
+
+- (void)updateSelectionForSongAtDate:(NSDate *)date
+{
+ if (! date) {
+ return;
+ }
+
+ NSIndexPath *indexPath = [self indexPathForSongAtDate:date];
+ if (indexPath) {
+ [self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
+ }
+ else {
+ NSIndexPath *indexPath = self.tableView.indexPathForSelectedRow;
+ if (indexPath){
+ [self.tableView deselectRowAtIndexPath:indexPath animated:NO];
+ }
+ }
+}
+
+- (void)updateSelectionForCurrentSong
+{
+ [self updateSelectionForSongAtDate:self.letterboxController.currentDate];
+}
+
+- (void)updateProgressForDateInterval:(NSDateInterval *)dateInterval
+{
+ for (SongTableViewCell *cell in self.tableView.visibleCells) {
+ [cell updateProgressForDateInterval:dateInterval];
+ }
+}
+
+#pragma mark ContentInsets protocol
+
+- (UIEdgeInsets)play_paddingContentInsets
+{
+ return LayoutStandardTableViewPaddingInsets;
+}
+
+#pragma mark UITableViewDataSource protocol
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
+{
+ return self.items.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
+{
+ return [tableView dequeueReusableCellWithIdentifier:NSStringFromClass(SongTableViewCell.class)];
+}
+
+#pragma mark UITableViewDelegate protocol
+
+- (void)tableView:(UITableView *)tableView willDisplayCell:(SongTableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
+{
+ SRGSong *song = self.items[indexPath.row];
+ BOOL playing = (self.letterboxController.playbackState == SRGMediaPlayerPlaybackStatePlaying);
+ [cell setSong:song playing:playing];
+ [cell updateProgressForDateInterval:self.letterboxController.play_dateInterval];
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
+{
+ SRGSong *song = self.items[indexPath.row];
+ CGFloat height = [SongTableViewCell heightForSong:song withCellWidth:CGRectGetWidth(tableView.frame)];
+ return LayoutTableTopAlignedCellHeight(height, 20.f, indexPath.row, self.items.count);
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+{
+ [tableView deselectRowAtIndexPath:indexPath animated:YES];
+
+ SongTableViewCell *songTableViewCell = (SongTableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
+ if (! songTableViewCell.playable) {
+ [self updateSelectionForCurrentSong];
+ return;
+ }
+
+ // Add a tiny offset to for guaranteed start within the song
+ SRGSong *song = self.items[indexPath.row];
+ NSDate *seekDate = [song.date dateByAddingTimeInterval:0.3];
+ [self.letterboxController seekToPosition:[SRGPosition positionAtDate:seekDate] withCompletionHandler:^(BOOL finished) {
+ [self.letterboxController play];
+ }];
+}
+
+#pragma mark Notifications
+
+- (void)playbackStateDidChange:(NSNotification *)notification
+{
+ [self.tableView reloadData];
+ [self updateSelectionForCurrentSong];
+}
+
+@end
diff --git a/Application/Sources/RadioChannels/RadioChannelsViewController.m b/Application/Sources/RadioChannels/RadioChannelsViewController.m
index a8b152115..e270e1994 100755
--- a/Application/Sources/RadioChannels/RadioChannelsViewController.m
+++ b/Application/Sources/RadioChannels/RadioChannelsViewController.m
@@ -93,10 +93,6 @@ - (void)updateNavigationBar:(UINavigationBar *)navigationBar
if (self.subtitle) {
if (! self.navigationItem.titleView) {
UIStackView *stackView = [[UIStackView alloc] init];
- if (@available(iOS 11, *)) {}
- else {
- stackView.bounds = CGRectMake(0.f, 0.f, 180.f, CGRectGetHeight(navigationBar.frame));
- }
stackView.axis = UILayoutConstraintAxisVertical;
self.navigationItem.titleView = stackView;
diff --git a/Application/Sources/Search/MostSearchedShowsHeaderView.m b/Application/Sources/Search/MostSearchedShowsHeaderView.m
index a2e098e69..ef9f36809 100755
--- a/Application/Sources/Search/MostSearchedShowsHeaderView.m
+++ b/Application/Sources/Search/MostSearchedShowsHeaderView.m
@@ -44,7 +44,7 @@ - (BOOL)isAccessibilityElement
- (NSString *)accessibilityLabel
{
- return self.titleLabel.text.lowercaseString;
+ return self.titleLabel.text;
}
- (UIAccessibilityTraits)accessibilityTraits
diff --git a/Application/Sources/Search/SearchHeaderView.m b/Application/Sources/Search/SearchHeaderView.m
index da53dba51..d14bc95dd 100755
--- a/Application/Sources/Search/SearchHeaderView.m
+++ b/Application/Sources/Search/SearchHeaderView.m
@@ -52,7 +52,7 @@ - (BOOL)isAccessibilityElement
- (NSString *)accessibilityLabel
{
- return self.titleLabel.text.lowercaseString;
+ return self.titleLabel.text;
}
- (UIAccessibilityTraits)accessibilityTraits
diff --git a/Application/Sources/Search/SearchLoadingCollectionViewCell.h b/Application/Sources/Search/SearchLoadingCollectionViewCell.h
index 9c9a953aa..ce9278386 100755
--- a/Application/Sources/Search/SearchLoadingCollectionViewCell.h
+++ b/Application/Sources/Search/SearchLoadingCollectionViewCell.h
@@ -10,8 +10,6 @@ NS_ASSUME_NONNULL_BEGIN
@interface SearchLoadingCollectionViewCell : UICollectionViewCell
-- (void)startAnimating;
-
@end
NS_ASSUME_NONNULL_END
diff --git a/Application/Sources/Search/SearchLoadingCollectionViewCell.m b/Application/Sources/Search/SearchLoadingCollectionViewCell.m
index b2bcf4d0f..5d4065a60 100755
--- a/Application/Sources/Search/SearchLoadingCollectionViewCell.m
+++ b/Application/Sources/Search/SearchLoadingCollectionViewCell.m
@@ -25,20 +25,8 @@ - (void)awakeFromNib
[super awakeFromNib];
self.backgroundColor = UIColor.clearColor;
-}
-
-- (void)prepareForReuse
-{
- [super prepareForReuse];
-
- [self.imageView play_stopAnimating];
-}
-
-#pragma mark Animation
-
-- (void)startAnimating
-{
- [self.imageView play_startAnimatingLoading90WithTintColor:UIColor.play_lightGrayColor];
+ [self.imageView play_setLoadingAnimation90WithTintColor:UIColor.play_lightGrayColor];
+ [self.imageView startAnimating];
}
#pragma mark Accessibility
diff --git a/Application/Sources/Search/SearchShowListCollectionViewCell.m b/Application/Sources/Search/SearchShowListCollectionViewCell.m
index 7a981d766..d1f80dc8e 100644
--- a/Application/Sources/Search/SearchShowListCollectionViewCell.m
+++ b/Application/Sources/Search/SearchShowListCollectionViewCell.m
@@ -10,6 +10,7 @@
#import "Layout.h"
#import "ShowCollectionViewCell.h"
#import "ShowViewController.h"
+#import "SwimlaneCollectionViewLayout.h"
#import
#import
@@ -45,7 +46,7 @@ - (instancetype)initWithFrame:(CGRect)frame
if (self = [super initWithFrame:frame]) {
self.backgroundColor = UIColor.clearColor;
- UICollectionViewFlowLayout *collectionViewLayout = [[UICollectionViewFlowLayout alloc] init];
+ SwimlaneCollectionViewLayout *collectionViewLayout = [[SwimlaneCollectionViewLayout alloc] init];
collectionViewLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
collectionViewLayout.minimumLineSpacing = LayoutStandardMargin;
collectionViewLayout.minimumInteritemSpacing = LayoutStandardMargin;
@@ -56,6 +57,7 @@ - (instancetype)initWithFrame:(CGRect)frame
collectionView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
collectionView.alwaysBounceHorizontal = YES;
collectionView.directionalLockEnabled = YES;
+ collectionView.decelerationRate = UIScrollViewDecelerationRateFast;
// Important. If > 1 view on-screen is found on iPhone with this property enabled, none will scroll to top
collectionView.scrollsToTop = NO;
collectionView.delegate = self;
diff --git a/Application/Sources/Search/SearchViewController.m b/Application/Sources/Search/SearchViewController.m
index b05f62287..072ba5540 100755
--- a/Application/Sources/Search/SearchViewController.m
+++ b/Application/Sources/Search/SearchViewController.m
@@ -142,7 +142,7 @@ - (void)viewDidLoad
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
- self.searchController.dimsBackgroundDuringPresentation = NO;
+ self.searchController.obscuresBackgroundDuringPresentation = NO;
self.searchController.hidesNavigationBarDuringPresentation = NO;
self.searchController.delegate = self;
@@ -154,27 +154,17 @@ - (void)viewDidLoad
searchBar.play_textField.font = [UIFont srg_regularFontWithSize:18.f];
searchBar.delegate = self;
searchBar.text = self.query;
+ searchBar.tintColor = UIColor.whiteColor;
// Required for proper search bar behavior
self.definesPresentationContext = YES;
- if (@available(iOS 11, *)) {
- searchBar.tintColor = UIColor.whiteColor;
-
- self.navigationItem.searchController = self.searchController;
- self.navigationItem.hidesSearchBarWhenScrolling = NO;
- }
- else {
- searchBar.tintColor = UIColor.grayColor;
- searchBar.barTintColor = UIColor.clearColor; // Avoid search bar glitch when revealed by pop in navigation controller
-
- self.navigationItem.titleView = searchBar;
- self.searchController.hidesNavigationBarDuringPresentation = NO;
- }
+ self.navigationItem.searchController = self.searchController;
+ self.navigationItem.hidesSearchBarWhenScrolling = NO;
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(accessibilityVoiceOverStatusChanged:)
- name:UIAccessibilityVoiceOverStatusChanged
+ name:UIAccessibilityVoiceOverStatusDidChangeNotification
object:nil];
[self updateSearchSettingsButton];
@@ -348,12 +338,6 @@ - (void)updateSearchSettingsButton
UIImage *image = [SearchViewController containsAdvancedSettings:self.settings] ? [UIImage imageNamed:@"filter_on-22"] : [UIImage imageNamed:@"filter_off-22"];
[filtersButton setImage:image forState:UIControlStateNormal];
- // Ensure the frame is correct prior to iOS 11
- if (@available(iOS 11, *)) {}
- else {
- [filtersButton sizeToFit];
- }
-
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:filtersButton];
}
else {
@@ -537,10 +521,6 @@ - (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICol
SearchShowListCollectionViewCell *showListCell = (SearchShowListCollectionViewCell *)cell;
showListCell.shows = self.shows;
}
- else if ([cell isKindOfClass:SearchLoadingCollectionViewCell.class]) {
- SearchLoadingCollectionViewCell *loadingCell = (SearchLoadingCollectionViewCell *)cell;
- [loadingCell startAnimating];
- }
}
- (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath
@@ -590,9 +570,10 @@ - (void)collectionView:(UICollectionView *)collectionView willDisplaySupplementa
}
}
- // iOS 11 bug: The header hides scroll indicators
+ // iOS 11 - 12 bug: The header hides scroll indicators
// See https://stackoverflow.com/questions/46747960/ios11-uicollectionsectionheader-clipping-scroll-indicator
- if (@available(iOS 11, *)) {
+ if (@available(iOS 13, *)) {}
+ else {
view.layer.zPosition = 0;
}
}
@@ -711,6 +692,7 @@ - (void)showSettings:(id)sender
NavigationController *navigationController = [[NavigationController alloc] initWithRootViewController:searchSettingsViewController
tintColor:UIColor.whiteColor
backgroundColor:backgroundColor
+ separator:YES
statusBarStyle:UIStatusBarStyleLightContent];
navigationController.modalPresentationStyle = UIModalPresentationPopover;
diff --git a/Application/Sources/Search/Settings/SearchSettingMultiSelectionViewController.m b/Application/Sources/Search/Settings/SearchSettingMultiSelectionViewController.m
index 4daac89f3..1959a9db0 100644
--- a/Application/Sources/Search/Settings/SearchSettingMultiSelectionViewController.m
+++ b/Application/Sources/Search/Settings/SearchSettingMultiSelectionViewController.m
@@ -8,6 +8,7 @@
#import "NSSet+PlaySRG.h"
#import "SearchSettingSelectorCell.h"
+#import "TableView.h"
#import "UIColor+PlaySRG.h"
#import "UISearchBar+PlaySRG.h"
#import "UIViewController+PlaySRG.h"
@@ -65,8 +66,7 @@ - (void)viewDidLoad
self.tableView.backgroundView = nil;
self.tableView.backgroundColor = UIColor.clearColor;
- self.tableView.separatorColor = UIColor.clearColor;
- self.tableView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
+ TableViewConfigure(self.tableView);
self.tableView.dataSource = self;
self.tableView.delegate = self;
diff --git a/Application/Sources/Search/Settings/SearchSettingsViewController.m b/Application/Sources/Search/Settings/SearchSettingsViewController.m
index 0db2fd006..f3bbfde27 100644
--- a/Application/Sources/Search/Settings/SearchSettingsViewController.m
+++ b/Application/Sources/Search/Settings/SearchSettingsViewController.m
@@ -17,6 +17,7 @@
#import "SearchSettingSwitchCell.h"
#import "SearchSettingMultiSelectionViewController.h"
#import "SRGDay+PlaySRG.h"
+#import "TableView.h"
#import "UIColor+PlaySRG.h"
#import "UIViewController+PlaySRG.h"
@@ -164,10 +165,9 @@ - (void)viewDidLoad
self.tableView.backgroundView = nil;
self.tableView.backgroundColor = UIColor.clearColor;
- self.tableView.separatorColor = UIColor.clearColor;
- self.tableView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
+ TableViewConfigure(self.tableView);
- // Remove the space at the top of the grouped table view
+ // Remove the spaces at the top and bottom of the grouped table view
// See https://stackoverflow.com/a/18938763/760435
self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.f, 0.f, self.tableView.bounds.size.width, 0.01f)];
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0.f, 0.f, self.tableView.bounds.size.width, 0.01f)];
diff --git a/Application/Sources/Settings/ApplicationSettings.h b/Application/Sources/Settings/ApplicationSettings.h
index c61a14729..9b4cde7a5 100755
--- a/Application/Sources/Settings/ApplicationSettings.h
+++ b/Application/Sources/Settings/ApplicationSettings.h
@@ -41,7 +41,6 @@ typedef NS_ENUM(NSInteger, TabBarItemIdentifier) {
};
OBJC_EXPORT NSString * const PlaySRGSettingHDOverCellularEnabled;
-OBJC_EXPORT NSString * const PlaySRGSettingOriginalImagesOnlyEnabled;
OBJC_EXPORT NSString * const PlaySRGSettingPresenterModeEnabled;
OBJC_EXPORT NSString * const PlaySRGSettingStandaloneEnabled;
OBJC_EXPORT NSString * const PlaySRGSettingAutoplayEnabled;
@@ -54,7 +53,6 @@ OBJC_EXPORT NSString * const PlaySRGSettingServiceURL;
OBJC_EXPORT NSString * const PlaySRGSettingUserLocation;
OBJC_EXPORT BOOL ApplicationSettingAlternateRadioHomepageDesignEnabled(void);
-OBJC_EXPORT BOOL ApplicationSettingOriginalImagesOnlyEnabled(void);
OBJC_EXPORT BOOL ApplicationSettingPresenterModeEnabled(void);
OBJC_EXPORT BOOL ApplicationSettingStandaloneEnabled(void);
diff --git a/Application/Sources/Settings/ApplicationSettings.m b/Application/Sources/Settings/ApplicationSettings.m
index c2aa62012..013e43981 100755
--- a/Application/Sources/Settings/ApplicationSettings.m
+++ b/Application/Sources/Settings/ApplicationSettings.m
@@ -18,7 +18,6 @@
#import
NSString * const PlaySRGSettingHDOverCellularEnabled = @"PlaySRGSettingHDOverCellularEnabled";
-NSString * const PlaySRGSettingOriginalImagesOnlyEnabled = @"PlaySRGSettingOriginalImagesOnlyEnabled";
NSString * const PlaySRGSettingPresenterModeEnabled = @"PlaySRGSettingPresenterModeEnabled";
NSString * const PlaySRGSettingStandaloneEnabled = @"PlaySRGSettingStandaloneEnabled";
NSString * const PlaySRGSettingAutoplayEnabled = @"PlaySRGSettingAutoplayEnabled";
@@ -69,7 +68,6 @@
{
NSUserDefaults *userDefaults = NSUserDefaults.standardUserDefaults;
[userDefaults registerDefaults:@{ PlaySRGSettingHDOverCellularEnabled : @YES,
- PlaySRGSettingOriginalImagesOnlyEnabled : @NO,
PlaySRGSettingPresenterModeEnabled : @NO,
PlaySRGSettingStandaloneEnabled : @NO,
PlaySRGSettingAutoplayEnabled : @YES,
@@ -77,11 +75,6 @@
[userDefaults synchronize];
}
-BOOL ApplicationSettingOriginalImagesOnlyEnabled(void)
-{
- return [NSUserDefaults.standardUserDefaults boolForKey:PlaySRGSettingOriginalImagesOnlyEnabled];
-}
-
BOOL ApplicationSettingPresenterModeEnabled(void)
{
return [NSUserDefaults.standardUserDefaults boolForKey:PlaySRGSettingPresenterModeEnabled];
diff --git a/Application/Sources/Settings/SettingsBaseViewController.m b/Application/Sources/Settings/SettingsBaseViewController.m
index 3abbdba3e..1471d6a56 100755
--- a/Application/Sources/Settings/SettingsBaseViewController.m
+++ b/Application/Sources/Settings/SettingsBaseViewController.m
@@ -16,6 +16,16 @@
@implementation SettingsBaseViewController
+#pragma mark Object lifecycle
+
+- (instancetype)init
+{
+ if (self = [super init]) {
+ self.showDoneButton = NO;
+ }
+ return self;
+}
+
#pragma mark View lifecycle
- (void)viewDidLoad
@@ -29,10 +39,8 @@ - (void)viewDidLoad
self.view.backgroundColor = UIColor.play_blackColor;
self.tableView.separatorColor = UIColor.play_grayColor;
- self.neverShowPrivacySettings = YES;
self.delegate = self;
-
- self.showDoneButton = NO;
+ self.neverShowPrivacySettings = YES;
self.showCreditsFooter = NO;
}
@@ -64,18 +72,18 @@ - (UIEdgeInsets)play_paddingContentInsets
#pragma mark IASKSettingsDelegate protocol
-- (void)settingsViewControllerDidEnd:(IASKAppSettingsViewController *)sender
+- (void)settingsViewControllerDidEnd:(IASKAppSettingsViewController *)settingsViewController
{}
-- (UIView *)settingsViewController:(id)settingsViewController tableView:(UITableView *)tableView viewForHeaderForSection:(NSInteger)section
+- (UIView *)settingsViewController:(id)settingsViewController viewForHeaderInSection:(NSInteger)section specifier:(IASKSpecifier *)specifier
{
// We must return a view for the header so that the height delegate method gets called
return [[UITableViewHeaderFooterView alloc] initWithFrame:CGRectZero];
}
-- (CGFloat)settingsViewController:(id)settingsViewController tableView:(UITableView *)tableView heightForHeaderForSection:(NSInteger)section
+- (CGFloat)settingsViewController:(UITableViewController *)settingsViewController heightForHeaderInSection:(NSInteger)section specifier:(IASKSpecifier *)specifier
{
- BOOL hasTitle = [self tableView:tableView titleForHeaderInSection:section].length != 0;
+ BOOL hasTitle = [self tableView:settingsViewController.tableView titleForHeaderInSection:section].length != 0;
if (section == 0) {
return hasTitle ? 75.f : 15.f;
}
@@ -84,15 +92,15 @@ - (CGFloat)settingsViewController:(id)settingsViewController
}
}
-- (UIView *)settingsViewController:(id)settingsViewController tableView:(UITableView *)tableView viewForFooterForSection:(NSInteger)section
+- (UIView *)settingsViewController:(UITableViewController *)settingsViewController viewForFooterInSection:(NSInteger)section specifier:(IASKSpecifier *)specifier
{
// We must return a view for the footer so that the height delegate method gets called
return [[UITableViewHeaderFooterView alloc] initWithFrame:CGRectZero];
}
-- (CGFloat)settingsViewController:(id)settingsViewController tableView:(UITableView *)tableView heightForFooterForSection:(NSInteger)section
+- (CGFloat)settingsViewController:(UITableViewController *)settingsViewController heightForFooterInSection:(NSInteger)section specifier:(IASKSpecifier *)specifier
{
- BOOL hasFooter = [self tableView:tableView titleForFooterInSection:section].length != 0;
+ BOOL hasFooter = [self tableView:settingsViewController.tableView titleForFooterInSection:section].length != 0;
return hasFooter ? UITableViewAutomaticDimension : 0.1f /* Cannot use 0 = automatic dimension */;
}
diff --git a/Application/Sources/Settings/SettingsViewController.m b/Application/Sources/Settings/SettingsViewController.m
index 62b41773f..d7501291c 100755
--- a/Application/Sources/Settings/SettingsViewController.m
+++ b/Application/Sources/Settings/SettingsViewController.m
@@ -100,10 +100,6 @@ - (void)viewDidLoad
self.navigationItem.leftBarButtonItem = closeBarButtonItem;
}
- [NSNotificationCenter.defaultCenter addObserver:self
- selector:@selector(settingDidChange:)
- name:kIASKAppSettingChanged
- object:nil];
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(applicationConfigurationDidChange:)
name:ApplicationConfigurationDidChangeNotification
@@ -143,7 +139,6 @@ - (void)updateSettingsVisibility
[hiddenKeys addObject:SettingsUserLocationSettingsButton];
[hiddenKeys addObject:PlaySRGSettingPresenterModeEnabled];
[hiddenKeys addObject:PlaySRGSettingStandaloneEnabled];
- [hiddenKeys addObject:PlaySRGSettingOriginalImagesOnlyEnabled];
[hiddenKeys addObject:SettingsVersionsAndReleaseNotes];
[hiddenKeys addObject:SettingsSubscribeToAllShowsButton];
[hiddenKeys addObject:SettingsSystemSettingsButton];
@@ -255,7 +250,7 @@ - (void)loadWhatsNewWithCompletionHandler:(void (^)(UIViewController * _Nullable
#pragma mark IASKSettingsDelegate protocol
-- (void)settingsViewController:(IASKAppSettingsViewController *)sender buttonTappedForSpecifier:(IASKSpecifier *)specifier
+- (void)settingsViewController:(IASKAppSettingsViewController *)settingsViewController buttonTappedForSpecifier:(IASKSpecifier *)specifier
{
if ([specifier.key isEqualToString:SettingsWhatsNewButton]) {
[self loadWhatsNewWithCompletionHandler:^(UIViewController * _Nullable viewController, NSError * _Nullable error) {
@@ -344,7 +339,7 @@ - (void)settingsViewController:(IASKAppSettingsViewController *)sender buttonTap
}
else if ([specifier.key isEqualToString:SettingsVersionsAndReleaseNotes]) {
// Clear internal App Center timestamp to force a new update request
- [NSUserDefaults.standardUserDefaults removeObjectForKey:@"MSPostponedTimestamp"];
+ [NSUserDefaults.standardUserDefaults removeObjectForKey:@"MSAppCenterPostponedTimestamp"];
[MSDistribute checkForUpdate];
// Display version history
@@ -411,7 +406,7 @@ - (void)settingsViewController:(IASKAppSettingsViewController *)sender buttonTap
}
else if ([specifier.key isEqualToString:SettingsSystemSettingsButton]) {
NSURL *URL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
- [UIApplication.sharedApplication openURL:URL];
+ [UIApplication.sharedApplication openURL:URL options:@{} completionHandler:nil];
}
else if ([specifier.key isEqualToString:SettingsClearWebCacheButton]) {
[self clearWebCache];
@@ -431,7 +426,7 @@ - (void)settingsViewController:(IASKAppSettingsViewController *)sender buttonTap
#endif
}
-- (NSString *)settingsViewController:(id)settingsViewController tableView:(UITableView *)tableView titleForFooterForSection:(NSInteger)section
+- (NSString *)settingsViewController:(UITableViewController *)settingsViewController titleForFooterInSection:(NSInteger)section specifier:(IASKSpecifier *)specifier
{
NSString *key = [settingsViewController.settingsReader keyForSection:section];
if ([key isEqualToString:SettingsInformationGroup]) {
@@ -447,7 +442,7 @@ - (NSString *)settingsViewController:(id)settingsViewControl
}
}
-- (CGFloat)tableView:(UITableView *)tableView heightForSpecifier:(IASKSpecifier *)specifier
+- (CGFloat)settingsViewController:(UITableViewController *)settingsViewController heightForSpecifier:(IASKSpecifier *)specifier
{
if ([specifier.key isEqualToString:SettingsApplicationVersionCell]) {
return 44.f;
@@ -457,11 +452,11 @@ - (CGFloat)tableView:(UITableView *)tableView heightForSpecifier:(IASKSpecifier
}
}
-- (UITableViewCell *)tableView:(UITableView *)tableView cellForSpecifier:(IASKSpecifier *)specifier
+- (UITableViewCell *)settingsViewController:(UITableViewController *)settingsViewController cellForSpecifier:(IASKSpecifier *)specifier
{
if ([specifier.key isEqualToString:SettingsApplicationVersionCell]) {
static NSString * const kApplicationVersionCellIdentifier = @"Cell_ApplicationVersion";
- UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kApplicationVersionCellIdentifier];
+ UITableViewCell *cell = [settingsViewController.tableView dequeueReusableCellWithIdentifier:kApplicationVersionCellIdentifier];
if (! cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:kApplicationVersionCellIdentifier];
}
@@ -509,14 +504,6 @@ - (void)close:(id)sender
#pragma mark Notifications
-- (void)settingDidChange:(NSNotification *)notification
-{
- NSNumber *originalImagesOnlyEnabled = notification.userInfo[PlaySRGSettingOriginalImagesOnlyEnabled];
- if (originalImagesOnlyEnabled) {
- [UIImage play_setUseOriginalImagesOnly:originalImagesOnlyEnabled.boolValue];
- }
-}
-
- (void)applicationConfigurationDidChange:(NSNotification *)notification
{
[self updateSettingsVisibility];
diff --git a/Application/Sources/Shows/ShowViewController.m b/Application/Sources/Shows/ShowViewController.m
index dfd868a4e..8db62c047 100755
--- a/Application/Sources/Shows/ShowViewController.m
+++ b/Application/Sources/Shows/ShowViewController.m
@@ -89,7 +89,7 @@ - (void)viewDidLoad
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(accessibilityVoiceOverStatusChanged:)
- name:UIAccessibilityVoiceOverStatusChanged
+ name:UIAccessibilityVoiceOverStatusDidChangeNotification
object:nil];
}
@@ -269,7 +269,7 @@ - (void)updateUserActivityState:(NSUserActivity *)userActivity
userActivity.title = self.show.title;
[userActivity addUserInfoEntriesFromDictionary:@{ @"URNString" : self.show.URN,
- @"SRGShowData" : [NSKeyedArchiver archivedDataWithRootObject:self.show],
+ @"SRGShowData" : [NSKeyedArchiver archivedDataWithRootObject:self.show requiringSecureCoding:NO error:NULL],
@"applicationVersion" : [NSBundle.mainBundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"] }];
userActivity.webpageURL = [ApplicationConfiguration.sharedApplicationConfiguration sharingURLForShow:self.show];
}
@@ -428,9 +428,10 @@ - (void)collectionView:(UICollectionView *)collectionView willDisplaySupplementa
ShowHeaderView *headerView = (ShowHeaderView *)view;
headerView.show = self.show;
- // iOS 11 bug: The header hides scroll indicators
+ // iOS 11 - 12 bug: The header hides scroll indicators
// See https://stackoverflow.com/questions/46747960/ios11-uicollectionsectionheader-clipping-scroll-indicator
- if (@available(iOS 11, *)) {
+ if (@available(iOS 13, *)) {}
+ else {
headerView.layer.zPosition = 0;
}
}
diff --git a/Application/Sources/Shows/ShowsViewController.m b/Application/Sources/Shows/ShowsViewController.m
index d6a359021..7aa01779a 100755
--- a/Application/Sources/Shows/ShowsViewController.m
+++ b/Application/Sources/Shows/ShowsViewController.m
@@ -10,7 +10,6 @@
#import "ApplicationConfiguration.h"
#import "Layout.h"
#import "NSBundle+PlaySRG.h"
-#import "PageViewController.h"
#import "ShowCollectionViewCell.h"
#import "ShowViewController.h"
#import "TranslucentTitleHeaderView.h"
@@ -49,10 +48,7 @@ - (instancetype)initWithRadioChannel:(RadioChannel *)radioChannel alphabeticalIn
self.radioChannel = radioChannel;
self.initialAlphabeticalIndex = alphabeticalIndex;
self.emptyCollectionImage = [UIImage imageNamed:@"media-90"];
-
- if (@available(iOS 10, *)) {
- self.selectionFeedbackGenerator = [[UISelectionFeedbackGenerator alloc] init]; // Only available for iOS 10 and above
- }
+ self.selectionFeedbackGenerator = [[UISelectionFeedbackGenerator alloc] init];
_previousAccessibilityHeadingSection = -1;
}
@@ -139,16 +135,8 @@ - (void)viewWillLayoutSubviews
[super viewWillLayoutSubviews];
[self.collectionIndexView mas_updateConstraints:^(MASConstraintMaker *make) {
- if (@available(iOS 11, *)) {
- make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).with.offset(self.play_pageViewController.play_additionalContentInsets.top);
- make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom);
- }
- else {
- UIEdgeInsets contentInsets = ContentInsetsForViewController(self);
- make.top.equalTo(self.view).with.offset(contentInsets.top);
- make.bottom.equalTo(self.view).with.offset(-contentInsets.bottom);
- }
-
+ make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop);
+ make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom);
make.right.equalTo(self.view.mas_right);
make.width.equalTo(@28.f);
}];
@@ -242,9 +230,6 @@ - (void)scrollToSectionWithIndex:(NSUInteger)index animated:(BOOL)animated
CGRect sectionHeaderFrame = [self.collectionView layoutAttributesForSupplementaryElementOfKind:UICollectionElementKindSectionHeader atIndexPath:indexPath].frame;
CGRect itemFrame = [self.collectionView layoutAttributesForItemAtIndexPath:indexPath].frame;
- // FIXME: Incorrect behavior: When scrolling to the top or bottom of the index, the cell boundary should be exact. Behavior
- // is incorrect at the bottom on < iOS 11 (also in production), incorrect at the top as well on iOS 11. We probably
- // need to take insets into account correctly in all cases.
CGFloat contentInsetTop = ContentInsetsForScrollView(self.collectionView).top;
CGFloat sectionHeaderHeight = CGRectGetHeight(sectionHeaderFrame);
CGFloat newContentOffsetY = fminf(CGRectGetMinY(itemFrame) - sectionHeaderHeight - contentInsetTop,
@@ -396,9 +381,7 @@ - (IBAction)collectionIndexChanged:(id)sender
{
NSAssert([sender isKindOfClass:BDKCollectionIndexView.class], @"Expect a collection index");
- if (@available(iOS 10, *)) {
- [self.selectionFeedbackGenerator selectionChanged];
- }
+ [self.selectionFeedbackGenerator selectionChanged];
BDKCollectionIndexView *collectionIndexView = sender;
[self scrollToSectionWithIndex:collectionIndexView.currentIndex animated:NO];
diff --git a/Application/Sources/UI/Controllers/MediasViewController.m b/Application/Sources/UI/Controllers/MediasViewController.m
index 8a49e1aa0..24496b27b 100755
--- a/Application/Sources/UI/Controllers/MediasViewController.m
+++ b/Application/Sources/UI/Controllers/MediasViewController.m
@@ -28,7 +28,7 @@ - (void)viewDidLoad
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(accessibilityVoiceOverStatusChanged:)
- name:UIAccessibilityVoiceOverStatusChanged
+ name:UIAccessibilityVoiceOverStatusDidChangeNotification
object:nil];
}
diff --git a/Application/Sources/UI/Controllers/NavigationController.h b/Application/Sources/UI/Controllers/NavigationController.h
index 0ec1df8ec..f5f6fe94c 100755
--- a/Application/Sources/UI/Controllers/NavigationController.h
+++ b/Application/Sources/UI/Controllers/NavigationController.h
@@ -23,11 +23,13 @@ NS_ASSUME_NONNULL_BEGIN
*
* @param tintColor The tint color applied to the title and icons.
* @param backgroundColor The background color to be applied. If none standard blur is applied, otherwise the navigation bar is opaque.
+ * @param separator Whether a separator must be displayed or not.
* @param statusBarStyle The style of the status bar when the navigation controller is displayed.
*/
- (instancetype)initWithRootViewController:(UIViewController *)rootViewController
tintColor:(nullable UIColor *)tintColor
backgroundColor:(nullable UIColor *)backgroundColor
+ separator:(BOOL)separator
statusBarStyle:(UIStatusBarStyle)statusBarStyle;
/**
diff --git a/Application/Sources/UI/Controllers/NavigationController.m b/Application/Sources/UI/Controllers/NavigationController.m
index c90476b29..503578a11 100755
--- a/Application/Sources/UI/Controllers/NavigationController.m
+++ b/Application/Sources/UI/Controllers/NavigationController.m
@@ -25,6 +25,7 @@ @implementation NavigationController
- (instancetype)initWithRootViewController:(UIViewController *)rootViewController
tintColor:(UIColor *)tintColor
backgroundColor:(UIColor *)backgroundColor
+ separator:(BOOL)separator
statusBarStyle:(UIStatusBarStyle)statusBarStyle
{
if (self = [super initWithRootViewController:rootViewController]) {
@@ -33,14 +34,14 @@ - (instancetype)initWithRootViewController:(UIViewController *)rootViewControlle
UINavigationBar *navigationBar = self.navigationBar;
navigationBar.barStyle = UIBarStyleBlack;
- [self updateWithTintColor:tintColor backgroundColor:backgroundColor statusBarStyle:statusBarStyle];
+ [self updateWithTintColor:tintColor backgroundColor:backgroundColor separator:separator statusBarStyle:statusBarStyle];
}
return self;
}
- (instancetype)initWithRootViewController:(UIViewController *)rootViewController
{
- return [self initWithRootViewController:rootViewController tintColor:nil backgroundColor:nil statusBarStyle:UIStatusBarStyleLightContent];
+ return [self initWithRootViewController:rootViewController tintColor:nil backgroundColor:nil separator:YES statusBarStyle:UIStatusBarStyleLightContent];
}
#pragma clang diagnostic push
@@ -79,24 +80,18 @@ - (UIStatusBarAnimation)preferredStatusBarUpdateAnimation
#pragma mark UI updates
-- (void)updateWithTintColor:(UIColor *)tintColor backgroundColor:(UIColor *)backgroundColor statusBarStyle:(UIStatusBarStyle)statusBarStyle
+- (void)updateWithTintColor:(UIColor *)tintColor backgroundColor:(UIColor *)backgroundColor separator:(BOOL)separator statusBarStyle:(UIStatusBarStyle)statusBarStyle
{
self.statusBarStyle = statusBarStyle;
[self setNeedsStatusBarAppearanceUpdate];
UINavigationBar *navigationBar = self.navigationBar;
- // Apply background colors with a small shadow for better readability
if (backgroundColor) {
- navigationBar.layer.shadowOpacity = 1.f;
-
navigationBar.barTintColor = backgroundColor;
navigationBar.translucent = NO;
}
- // Use standard blur with no shadow (which would break the blur).
else {
- navigationBar.layer.shadowOpacity = 0.f;
-
if (@available(iOS 13, *)) {
navigationBar.barTintColor = nil;
}
@@ -107,6 +102,19 @@ - (void)updateWithTintColor:(UIColor *)tintColor backgroundColor:(UIColor *)back
navigationBar.translucent = YES;
}
+ // See https://stackoverflow.com/a/19227158/760435
+ if (separator) {
+ [navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
+ navigationBar.shadowImage = nil;
+ }
+ else {
+ [navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
+ navigationBar.shadowImage = [UIImage new];
+ }
+
+ // Add a shadow for solid background to improve readability
+ navigationBar.layer.shadowOpacity = (separator && backgroundColor != nil) ? 1.f : 0.f;
+
UIColor *foregroundColor = tintColor ?: UIColor.whiteColor;
navigationBar.tintColor = foregroundColor;
navigationBar.titleTextAttributes = @{ NSFontAttributeName : [UIFont srg_mediumFontWithSize:18.f],
@@ -131,7 +139,7 @@ - (void)updateWithRadioChannel:(RadioChannel *)radioChannel animated:(BOOL)anima
darkStatusBarStyle = UIStatusBarStyleDarkContent;
}
UIStatusBarStyle statusBarStyle = radioChannel.hasDarkStatusBar ? darkStatusBarStyle : UIStatusBarStyleLightContent;
- [self updateWithTintColor:radioChannel.titleColor backgroundColor:radioChannel.color statusBarStyle:statusBarStyle];
+ [self updateWithTintColor:radioChannel.titleColor backgroundColor:radioChannel.color separator:YES statusBarStyle:statusBarStyle];
};
if (animated) {
diff --git a/Application/Sources/UI/Controllers/PageViewController.m b/Application/Sources/UI/Controllers/PageViewController.m
index 9739ad8c2..12997adb9 100755
--- a/Application/Sources/UI/Controllers/PageViewController.m
+++ b/Application/Sources/UI/Controllers/PageViewController.m
@@ -82,7 +82,7 @@ - (void)loadView
UIVisualEffectView *blurView = UIVisualEffectView.play_blurView;
[self.view addSubview:blurView];
[blurView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.top.equalTo(self.mas_topLayoutGuide); // Warning: Needs self.view to be set, otherwise leads to infinite recursion
+ make.top.equalTo(self.view.mas_safeAreaLayoutGuide);
make.left.equalTo(self.view.mas_left);
make.right.equalTo(self.view.mas_right);
make.height.equalTo(@60);
diff --git a/Application/Sources/UI/Controllers/TabBarController.m b/Application/Sources/UI/Controllers/TabBarController.m
index 14e9cdbf1..aee5c5d38 100755
--- a/Application/Sources/UI/Controllers/TabBarController.m
+++ b/Application/Sources/UI/Controllers/TabBarController.m
@@ -105,16 +105,10 @@ - (void)viewDidLoad
// The mini player is not available for all BUs
MiniPlayerView *miniPlayerView = [[MiniPlayerView alloc] initWithFrame:CGRectZero];
+ miniPlayerView.layer.shadowOpacity = 0.9f;
+ miniPlayerView.layer.shadowRadius = 5.f;
[self.view insertSubview:miniPlayerView belowSubview:self.tabBar];
- // iOS 10 bug: Cannot apply a shadow to a blurred view without breaking the blur effect
- // Probably related to radar 27189321.
- // TODO: Remove when iOS 10 is not supported anymore
- if (NSProcessInfo.processInfo.operatingSystemVersion.majorVersion != 10) {
- miniPlayerView.layer.shadowOpacity = 0.9f;
- miniPlayerView.layer.shadowRadius = 5.f;
- }
-
self.miniPlayerView = miniPlayerView;
@weakify(self)
@@ -129,7 +123,7 @@ - (void)viewDidLoad
object:nil];
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(accessibilityVoiceOverStatusChanged:)
- name:UIAccessibilityVoiceOverStatusChanged
+ name:UIAccessibilityVoiceOverStatusDidChangeNotification
object:nil];
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(didReceiveNotification:)
@@ -311,12 +305,7 @@ - (void)updateLayoutAnimated:(BOOL)animated
{
void (^animations)(void) = ^{
[self.miniPlayerView mas_remakeConstraints:^(MASConstraintMaker *make) {
- if (@available(iOS 11, *)) {
- make.right.equalTo(self.view.mas_safeAreaLayoutGuideRight).with.offset(-self.miniPlayerOffset);
- }
- else {
- make.right.equalTo(self.view).with.offset(-self.miniPlayerOffset);
- }
+ make.right.equalTo(self.view.mas_safeAreaLayoutGuideRight).with.offset(-self.miniPlayerOffset);
if (! UIAccessibilityIsVoiceOverRunning() && UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad) {
// Use 1/3 of the space, minimum of 500 pixels. If the player cannot fit in 80% of the screen,
@@ -329,14 +318,8 @@ - (void)updateLayoutAnimated:(BOOL)animated
make.width.equalTo(@(width));
}
else {
- if (@available(iOS 11, *)) {
- make.left.equalTo(self.view.mas_safeAreaLayoutGuideLeft).with.offset(self.miniPlayerOffset);
- make.right.equalTo(self.view.mas_safeAreaLayoutGuideRight).with.offset(-self.miniPlayerOffset);
- }
- else {
- make.left.equalTo(self.view).with.offset(self.miniPlayerOffset);
- make.right.equalTo(self.view).with.offset(-self.miniPlayerOffset);
- }
+ make.left.equalTo(self.view.mas_safeAreaLayoutGuideLeft).with.offset(self.miniPlayerOffset);
+ make.right.equalTo(self.view.mas_safeAreaLayoutGuideRight).with.offset(-self.miniPlayerOffset);
}
if (self.miniPlayerView.active) {
@@ -377,17 +360,15 @@ - (void)updateLayoutAnimated:(BOOL)animated
- (void)updateProfileTabBarItem
{
- if (@available(iOS 10, *)) {
- UITabBarItem *profileTabBarItem = [self tabBarItemForIdentifier:TabBarItemIdentifierProfile];
- NSInteger badgeNumber = UIApplication.sharedApplication.applicationIconBadgeNumber;
-
- if (PushService.sharedService.enabled && profileTabBarItem && badgeNumber != 0) {
- profileTabBarItem.badgeValue = (badgeNumber > 99) ? @"99+" : @(badgeNumber).stringValue;
- profileTabBarItem.badgeColor = UIColor.play_notificationRedColor;
- }
- else {
- profileTabBarItem.badgeValue = nil;
- }
+ UITabBarItem *profileTabBarItem = [self tabBarItemForIdentifier:TabBarItemIdentifierProfile];
+ NSInteger badgeNumber = UIApplication.sharedApplication.applicationIconBadgeNumber;
+
+ if (PushService.sharedService.enabled && profileTabBarItem && badgeNumber != 0) {
+ profileTabBarItem.badgeValue = (badgeNumber > 99) ? @"99+" : @(badgeNumber).stringValue;
+ profileTabBarItem.badgeColor = UIColor.play_notificationRedColor;
+ }
+ else {
+ profileTabBarItem.badgeValue = nil;
}
}
diff --git a/Application/Sources/UI/Helpers/SwimlaneCollectionViewLayout.m b/Application/Sources/UI/Helpers/SwimlaneCollectionViewLayout.m
index 3a2823393..16ae9a4a9 100644
--- a/Application/Sources/UI/Helpers/SwimlaneCollectionViewLayout.m
+++ b/Application/Sources/UI/Helpers/SwimlaneCollectionViewLayout.m
@@ -15,7 +15,7 @@ - (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentO
NSAssert(self.scrollDirection == UICollectionViewScrollDirectionHorizontal, @"Currently only implemented for horizontal layout direction");
// If already at the beginning or the end, stays there
- CGFloat maxX = fmaxf(self.collectionViewContentSize.width - CGRectGetWidth(self.collectionView.frame), 0.f);
+ CGFloat maxX = floorf(fmaxf(self.collectionViewContentSize.width - CGRectGetWidth(self.collectionView.frame), 0.f));
if (proposedContentOffset.x >= maxX) {
return CGPointMake(maxX, proposedContentOffset.y);
}
diff --git a/Application/Sources/UI/Views/GradientView.h b/Application/Sources/UI/Views/GradientView.h
new file mode 100644
index 000000000..daeb7dd76
--- /dev/null
+++ b/Application/Sources/UI/Views/GradientView.h
@@ -0,0 +1,24 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface GradientView : UIView
+
+/**
+ * Draw a gradient between the two specified points.
+ *
+ * @discussion If a color is `nil`, the current view background color is used instead.
+ */
+- (void)updateWithStartColor:(nullable UIColor *)startColor atPoint:(CGPoint)startPoint
+ endColor:(nullable UIColor *)endColor atPoint:(CGPoint)endPoint
+ animated:(BOOL)animated;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Application/Sources/UI/Views/GradientView.m b/Application/Sources/UI/Views/GradientView.m
new file mode 100644
index 000000000..e9067dbe1
--- /dev/null
+++ b/Application/Sources/UI/Views/GradientView.m
@@ -0,0 +1,80 @@
+//
+// Copyright (c) SRG SSR. All rights reserved.
+//
+// License information is available from the LICENSE file.
+//
+
+#import "GradientView.h"
+
+static void commonInit(GradientView *self);
+
+@interface GradientView ()
+
+@property (nonatomic, weak) CAGradientLayer *gradientLayer;
+
+@end
+
+@implementation GradientView
+
+#pragma mark Object lifecycle
+
+- (instancetype)initWithFrame:(CGRect)frame
+{
+ if (self = [super initWithFrame:frame]) {
+ commonInit(self);
+ }
+ return self;
+}
+
+- (instancetype)initWithCoder:(NSCoder *)coder
+{
+ if (self = [super initWithCoder:coder]) {
+ commonInit(self);
+ }
+ return self;
+}
+
+#pragma mark Overrides
+
+- (void)layoutSubviews
+{
+ [super layoutSubviews];
+
+ [CATransaction begin];
+ [CATransaction setDisableActions:YES];
+ self.gradientLayer.frame = self.bounds;
+ [CATransaction commit];
+}
+
+#pragma mark Gradient
+
+- (void)updateWithStartColor:(UIColor *)startColor atPoint:(CGPoint)startPoint endColor:(UIColor *)endColor atPoint:(CGPoint)endPoint animated:(BOOL)animated
+{
+ void (^update)(void) = ^{
+ UIColor *fromColor = startColor ?: self.backgroundColor;
+ UIColor *toColor = endColor ?: self.backgroundColor;
+
+ self.gradientLayer.colors = @[ (id)fromColor.CGColor, (id)toColor.CGColor ];
+ self.gradientLayer.startPoint = startPoint;
+ self.gradientLayer.endPoint = endPoint;
+ };
+
+ if (animated) {
+ update();
+ }
+ else {
+ [CATransaction begin];
+ [CATransaction setDisableActions:YES];
+ update();
+ [CATransaction commit];
+ }
+}
+
+@end
+
+static void commonInit(GradientView *self)
+{
+ CAGradientLayer *gradientLayer = [CAGradientLayer layer];
+ [self.layer insertSublayer:gradientLayer atIndex:0];
+ self.gradientLayer = gradientLayer;
+}
diff --git a/Application/Sources/UI/Views/MediaCollectionViewCell.m b/Application/Sources/UI/Views/MediaCollectionViewCell.m
index e343c330e..67b9eeee1 100755
--- a/Application/Sources/UI/Views/MediaCollectionViewCell.m
+++ b/Application/Sources/UI/Views/MediaCollectionViewCell.m
@@ -299,56 +299,50 @@ - (void)updateActiveConstraints
- (void)updateDownloadStatus
{
Download *download = [Download downloadForMedia:self.media];
- if (!download) {
- BOOL downloadsHintsHidden = ApplicationConfiguration.sharedApplicationConfiguration.downloadsHintsHidden;
-
- [self.downloadStatusImageView play_stopAnimating];
+ if (! download) {
+ [self.downloadStatusImageView stopAnimating];
self.downloadStatusImageView.image = [UIImage imageNamed:@"downloadable-16"];
- self.downloadStatusImageView.hidden = downloadsHintsHidden ? YES : ! [Download canDownloadMedia:self.media];
+ BOOL downloadsHintsHidden = ApplicationConfiguration.sharedApplicationConfiguration.downloadsHintsHidden;
+ self.downloadStatusImageView.hidden = downloadsHintsHidden || ! [Download canDownloadMedia:self.media];
return;
}
self.downloadStatusImageView.hidden = NO;
- UIImage *downloadImage = nil;
- UIColor *tintColor = UIColor.play_lightGrayColor;
-
switch (download.state) {
case DownloadStateAdded:
case DownloadStateDownloadingSuspended: {
- [self.downloadStatusImageView play_stopAnimating];
- downloadImage = [UIImage imageNamed:@"downloadable_stop-16"];
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = [UIImage imageNamed:@"downloadable_stop-16"];
break;
}
case DownloadStateDownloading: {
- [self.downloadStatusImageView play_startAnimatingDownloading16WithTintColor:tintColor];
- downloadImage = self.downloadStatusImageView.image;
+ [self.downloadStatusImageView play_setDownloadAnimation16WithTintColor:UIColor.play_lightGrayColor];
+ [self.downloadStatusImageView startAnimating];
break;
}
case DownloadStateDownloaded: {
- [self.downloadStatusImageView play_stopAnimating];
- downloadImage = [UIImage imageNamed:@"downloadable_full-16"];
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = [UIImage imageNamed:@"downloadable_full-16"];
break;
}
case DownloadStateDownloadable:
case DownloadStateRemoved: {
- [self.downloadStatusImageView play_stopAnimating];
- downloadImage = [UIImage imageNamed:@"downloadable-16"];
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = [UIImage imageNamed:@"downloadable-16"];
break;
}
default: {
- [self.downloadStatusImageView play_stopAnimating];
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = nil;
break;
}
}
-
- self.downloadStatusImageView.image = downloadImage;
- self.downloadStatusImageView.tintColor = tintColor;
}
- (void)updateHistoryStatus
diff --git a/Application/Sources/UI/Views/TableView.h b/Application/Sources/UI/Views/TableView.h
index c019eb109..021c8cf3f 100644
--- a/Application/Sources/UI/Views/TableView.h
+++ b/Application/Sources/UI/Views/TableView.h
@@ -9,7 +9,12 @@
NS_ASSUME_NONNULL_BEGIN
/**
- * Common Play design for table views instantiated in code (with manual cell height).
+ * Apply standard Play configuration to a given table view (with manual cell height).
+ */
+OBJC_EXPORT void TableViewConfigure(UITableView *tableView);
+
+/**
+ * Properly configured Play standard table view for instantiation in code (with manual cell height).
*/
@interface TableView : UITableView
diff --git a/Application/Sources/UI/Views/TableView.m b/Application/Sources/UI/Views/TableView.m
index 996d3b85f..1b08e9d96 100644
--- a/Application/Sources/UI/Views/TableView.m
+++ b/Application/Sources/UI/Views/TableView.m
@@ -6,20 +6,6 @@
#import "TableView.h"
-static void commonInit(TableView *self)
-{
- self.backgroundColor = UIColor.clearColor;
- self.indicatorStyle = UIScrollViewIndicatorStyleWhite;
- self.separatorStyle = UITableViewCellSeparatorStyleNone;
-
- // The default when instantiated in a xib or storyboard. Avoid unreliable content size calculations
- // when row heights are specified. We do not use automatic cell sizing, so this is best avoided by
- // default.
- self.estimatedRowHeight = 0.f;
- self.estimatedSectionFooterHeight = 0.f;
- self.estimatedSectionHeaderHeight = 0.f;
-}
-
@implementation TableView
#pragma mark Object lifecycle
@@ -27,7 +13,7 @@ @implementation TableView
- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style
{
if (self = [super initWithFrame:frame style:style]) {
- commonInit(self);
+ TableViewConfigure(self);
}
return self;
}
@@ -35,9 +21,23 @@ - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style
- (instancetype)initWithCoder:(NSCoder *)coder
{
if (self = [super initWithCoder:coder]) {
- commonInit(self);
+ TableViewConfigure(self);
}
return self;
}
@end
+
+void TableViewConfigure(UITableView *tableView)
+{
+ tableView.backgroundColor = UIColor.clearColor;
+ tableView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
+ tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+
+ // Avoid unreliable content size calculations when row heights are specified (leads to glitches during scrolling or
+ // reloads). We do not use automatic cell sizing, so this is best avoided by default. This was the old default behavior,
+ // but newer versions of Xcode now enable automatic sizing by default.
+ tableView.estimatedRowHeight = 0.f;
+ tableView.estimatedSectionFooterHeight = 0.f;
+ tableView.estimatedSectionHeaderHeight = 0.f;
+}
diff --git a/Application/Sources/UI/Views/TranslucentTitleHeaderView.m b/Application/Sources/UI/Views/TranslucentTitleHeaderView.m
index 3c31198c8..80be9ebe0 100755
--- a/Application/Sources/UI/Views/TranslucentTitleHeaderView.m
+++ b/Application/Sources/UI/Views/TranslucentTitleHeaderView.m
@@ -6,8 +6,6 @@
#import "TranslucentTitleHeaderView.h"
-#import "UIColor+PlaySRG.h"
-
#import
@interface TranslucentTitleHeaderView ()
@@ -46,7 +44,7 @@ - (BOOL)isAccessibilityElement
- (NSString *)accessibilityLabel
{
- return self.titleLabel.text.lowercaseString;
+ return self.titleLabel.text;
}
- (UIAccessibilityTraits)accessibilityTraits
diff --git a/Application/Sources/WatchLater/WatchLaterTableViewCell.m b/Application/Sources/WatchLater/WatchLaterTableViewCell.m
index 05ceb18ba..5c8f8f8c6 100755
--- a/Application/Sources/WatchLater/WatchLaterTableViewCell.m
+++ b/Application/Sources/WatchLater/WatchLaterTableViewCell.m
@@ -60,7 +60,7 @@ - (void)awakeFromNib
{
[super awakeFromNib];
- self.backgroundColor = UIColor.clearColor;
+ self.backgroundColor = UIColor.play_blackColor;
UIView *selectedBackgroundView = [[UIView alloc] init];
selectedBackgroundView.backgroundColor = UIColor.clearColor;
@@ -307,56 +307,50 @@ - (void)setMedia:(SRGMedia *)media
- (void)updateDownloadStatus
{
Download *download = [Download downloadForMedia:self.media];
- if (!download) {
- BOOL downloadsHintsHidden = ApplicationConfiguration.sharedApplicationConfiguration.downloadsHintsHidden;
-
- [self.downloadStatusImageView play_stopAnimating];
+ if (! download) {
+ [self.downloadStatusImageView stopAnimating];
self.downloadStatusImageView.image = [UIImage imageNamed:@"downloadable-16"];
- self.downloadStatusImageView.hidden = downloadsHintsHidden ? YES : ! [Download canDownloadMedia:self.media];
+ BOOL downloadsHintsHidden = ApplicationConfiguration.sharedApplicationConfiguration.downloadsHintsHidden;
+ self.downloadStatusImageView.hidden = downloadsHintsHidden || ! [Download canDownloadMedia:self.media];
return;
}
self.downloadStatusImageView.hidden = NO;
- UIImage *downloadImage = nil;
- UIColor *tintColor = UIColor.play_lightGrayColor;
-
switch (download.state) {
case DownloadStateAdded:
case DownloadStateDownloadingSuspended: {
- [self.downloadStatusImageView play_stopAnimating];
- downloadImage = [UIImage imageNamed:@"downloadable_stop-16"];
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = [UIImage imageNamed:@"downloadable_stop-16"];
break;
}
case DownloadStateDownloading: {
- [self.downloadStatusImageView play_startAnimatingDownloading16WithTintColor:tintColor];
- downloadImage = self.downloadStatusImageView.image;
+ [self.downloadStatusImageView play_setDownloadAnimation16WithTintColor:UIColor.play_lightGrayColor];
+ [self.downloadStatusImageView startAnimating];
break;
}
case DownloadStateDownloaded: {
- [self.downloadStatusImageView play_stopAnimating];
- downloadImage = [UIImage imageNamed:@"downloadable_full-16"];
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = [UIImage imageNamed:@"downloadable_full-16"];
break;
}
case DownloadStateDownloadable:
case DownloadStateRemoved: {
- [self.downloadStatusImageView play_stopAnimating];
- downloadImage = [UIImage imageNamed:@"downloadable-16"];
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = [UIImage imageNamed:@"downloadable-16"];
break;
}
default: {
- [self.downloadStatusImageView play_stopAnimating];
+ [self.downloadStatusImageView stopAnimating];
+ self.downloadStatusImageView.image = nil;
break;
}
}
-
- self.downloadStatusImageView.image = downloadImage;
- self.downloadStatusImageView.tintColor = tintColor;
}
- (void)updateHistoryStatus
@@ -381,7 +375,7 @@ - (NSValue *)previewAnchorRect
return [NSValue valueWithCGRect:imageViewFrameInSelf];
}
-#pragma mark Notificationsfa
+#pragma mark Notifications
- (void)downloadStateDidChange:(NSNotification *)notification
{
diff --git a/Application/Sources/WatchLater/WatchLaterViewController.m b/Application/Sources/WatchLater/WatchLaterViewController.m
index 4c7227a50..1a2ae5eb8 100755
--- a/Application/Sources/WatchLater/WatchLaterViewController.m
+++ b/Application/Sources/WatchLater/WatchLaterViewController.m
@@ -78,7 +78,7 @@ - (void)viewDidLoad
object:nil];
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(accessibilityVoiceOverStatusChanged:)
- name:UIAccessibilityVoiceOverStatusChanged
+ name:UIAccessibilityVoiceOverStatusDidChangeNotification
object:nil];
[self updateInterfaceForEditionAnimated:NO];
@@ -193,7 +193,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
- return LayoutTableViewCellStandardHeight + LayoutStandardMargin;
+ return LayoutTableTopAlignedCellHeight(LayoutTableViewCellStandardHeight, LayoutStandardMargin, indexPath.row, self.items.count);
}
- (void)tableView:(UITableView *)tableView willDisplayCell:(WatchLaterTableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
diff --git a/Cartfile b/Cartfile
index c38360338..fc65cfd1b 100755
--- a/Cartfile
+++ b/Cartfile
@@ -1,8 +1,10 @@
github "defagos/CoconutKit" "3.4"
github "Flipboard/FLEX" "4.1.1"
+github "IdeasOnCanvas/Aiolos" "1.3.0"
github "mapbox/Fingertips" "cdffabac5506103a2c7cc5aedeed4021df2501da"
github "microsoft/appcenter-sdk-apple" ~> 3.1.0
github "SRGSSR/DZNEmptyDataSet" "v1.8.1_srg1"
github "SRGSSR/Masonry" "v1.1.0_srg1"
-github "SRGSSR/srgletterbox-apple" "4.0.0"
-github "SRGSSR/srguserdata-apple" "2.0.2"
\ No newline at end of file
+github "urbanairship/ios-library" ~> 13.3.2
+github "SRGSSR/srgletterbox-apple" "5.0.0"
+github "SRGSSR/srguserdata-apple" "2.0.3"
diff --git a/Cartfile.private.proprietary b/Cartfile.private.proprietary
index c6064d492..68e8dc763 100755
--- a/Cartfile.private.proprietary
+++ b/Cartfile.private.proprietary
@@ -1 +1 @@
-github "SRGSSR/srgcontentprotection-apple" "2.0.1"
\ No newline at end of file
+github "SRGSSR/srgcontentprotection-apple" "2.0.2"
\ No newline at end of file
diff --git a/Cartfile.private.public b/Cartfile.private.public
index 77283ac59..7ad115988 100755
--- a/Cartfile.private.public
+++ b/Cartfile.private.public
@@ -1 +1 @@
-github "SRGSSR/srgcontentprotection-fake-apple" "2.0.1"
\ No newline at end of file
+github "SRGSSR/srgcontentprotection-fake-apple" "2.0.2"
\ No newline at end of file
diff --git a/Cartfile.resolved.proprietary b/Cartfile.resolved.proprietary
index 3f0763e50..8487554d8 100755
--- a/Cartfile.resolved.proprietary
+++ b/Cartfile.resolved.proprietary
@@ -1,6 +1,7 @@
github "Flipboard/FLEX" "4.1.1"
-github "Mantle/Mantle" "2.1.0"
-github "SRGSSR/ComScore-iOS-watchOS-tvOS" "6.2.0"
+github "IdeasOnCanvas/Aiolos" "1.3.0"
+github "Mantle/Mantle" "2.1.1"
+github "SRGSSR/ComScore-iOS-watchOS-tvOS" "6.3.1"
github "SRGSSR/DZNEmptyDataSet" "v1.8.1_srg1"
github "SRGSSR/FXReachability" "1.3.2_srg4"
github "SRGSSR/MAKVONotificationCenter" "1.0_srg4"
@@ -8,18 +9,19 @@ github "SRGSSR/Masonry" "v1.1.0_srg1"
github "SRGSSR/UICKeyChainStore" "v2.1.2_srg1"
github "SRGSSR/YYWebImage" "1.0.5_srg2"
github "SRGSSR/libextobjc" "0.6_srg2"
-github "SRGSSR/srganalytics-apple" "4.1.1"
+github "SRGSSR/srganalytics-apple" "4.2.0"
github "SRGSSR/srgappearance-apple" "2.1.0"
-github "SRGSSR/srgcontentprotection-apple" "2.0.1"
-github "SRGSSR/srgdataprovider-apple" "7.1.0"
+github "SRGSSR/srgcontentprotection-apple" "2.0.2"
+github "SRGSSR/srgdataprovider-apple" "8.0.0"
github "SRGSSR/srgdiagnostics-apple" "2.0.1"
-github "SRGSSR/srgidentity-apple" "2.0.2"
-github "SRGSSR/srgletterbox-apple" "4.0.0"
-github "SRGSSR/srglogger-apple" "2.0.0"
-github "SRGSSR/srgmediaplayer-apple" "4.0.0"
-github "SRGSSR/srgnetwork-apple" "2.0.1"
-github "SRGSSR/srguserdata-apple" "2.0.2"
+github "SRGSSR/srgidentity-apple" "2.0.3"
+github "SRGSSR/srgletterbox-apple" "5.0.0"
+github "SRGSSR/srglogger-apple" "2.0.1"
+github "SRGSSR/srgmediaplayer-apple" "5.0.0"
+github "SRGSSR/srgnetwork-apple" "2.0.2"
+github "SRGSSR/srguserdata-apple" "2.0.3"
github "SRGSSR/tagcommander-apple" "4.5.4_4.4.1_srg3"
github "defagos/CoconutKit" "3.4"
github "mapbox/Fingertips" "cdffabac5506103a2c7cc5aedeed4021df2501da"
-github "microsoft/appcenter-sdk-apple" "3.1.1"
+github "microsoft/appcenter-sdk-apple" "3.3.1"
+github "urbanairship/ios-library" "13.4.0"
diff --git a/Cartfile.resolved.public b/Cartfile.resolved.public
index b95bca851..eed80646b 100755
--- a/Cartfile.resolved.public
+++ b/Cartfile.resolved.public
@@ -1,6 +1,7 @@
github "Flipboard/FLEX" "4.1.1"
-github "Mantle/Mantle" "2.1.0"
-github "SRGSSR/ComScore-iOS-watchOS-tvOS" "6.2.0"
+github "IdeasOnCanvas/Aiolos" "1.3.0"
+github "Mantle/Mantle" "2.1.1"
+github "SRGSSR/ComScore-iOS-watchOS-tvOS" "6.3.1"
github "SRGSSR/DZNEmptyDataSet" "v1.8.1_srg1"
github "SRGSSR/FXReachability" "1.3.2_srg4"
github "SRGSSR/MAKVONotificationCenter" "1.0_srg4"
@@ -8,18 +9,19 @@ github "SRGSSR/Masonry" "v1.1.0_srg1"
github "SRGSSR/UICKeyChainStore" "v2.1.2_srg1"
github "SRGSSR/YYWebImage" "1.0.5_srg2"
github "SRGSSR/libextobjc" "0.6_srg2"
-github "SRGSSR/srganalytics-apple" "4.1.1"
+github "SRGSSR/srganalytics-apple" "4.2.0"
github "SRGSSR/srgappearance-apple" "2.1.0"
-github "SRGSSR/srgcontentprotection-fake-apple" "2.0.1"
-github "SRGSSR/srgdataprovider-apple" "7.1.0"
+github "SRGSSR/srgcontentprotection-fake-apple" "2.0.2"
+github "SRGSSR/srgdataprovider-apple" "8.0.0"
github "SRGSSR/srgdiagnostics-apple" "2.0.1"
-github "SRGSSR/srgidentity-apple" "2.0.2"
-github "SRGSSR/srgletterbox-apple" "4.0.0"
-github "SRGSSR/srglogger-apple" "2.0.0"
-github "SRGSSR/srgmediaplayer-apple" "4.0.0"
-github "SRGSSR/srgnetwork-apple" "2.0.1"
-github "SRGSSR/srguserdata-apple" "2.0.2"
+github "SRGSSR/srgidentity-apple" "2.0.3"
+github "SRGSSR/srgletterbox-apple" "5.0.0"
+github "SRGSSR/srglogger-apple" "2.0.1"
+github "SRGSSR/srgmediaplayer-apple" "5.0.0"
+github "SRGSSR/srgnetwork-apple" "2.0.2"
+github "SRGSSR/srguserdata-apple" "2.0.3"
github "SRGSSR/tagcommander-apple" "4.5.4_4.4.1_srg3"
github "defagos/CoconutKit" "3.4"
github "mapbox/Fingertips" "cdffabac5506103a2c7cc5aedeed4021df2501da"
-github "microsoft/appcenter-sdk-apple" "3.1.1"
+github "microsoft/appcenter-sdk-apple" "3.3.1"
+github "urbanairship/ios-library" "13.4.0"
diff --git a/Common/Sources/Helpers/AccessibilityIdentifierConstants.h b/Common/Sources/Helpers/AccessibilityIdentifierConstants.h
index 4e1cb9c73..31f61dfcd 100755
--- a/Common/Sources/Helpers/AccessibilityIdentifierConstants.h
+++ b/Common/Sources/Helpers/AccessibilityIdentifierConstants.h
@@ -19,4 +19,6 @@ OBJC_EXPORT AccessibilityIdentifier const AccessibilityIdentifierLivestreamsTabB
OBJC_EXPORT AccessibilityIdentifier const AccessibilityIdentifierSearchTabBarItem;
OBJC_EXPORT AccessibilityIdentifier const AccessibilityIdentifierProfileTabBarItem;
+OBJC_EXPORT AccessibilityIdentifier const AccessibilityIdentifierCloseButton;
+
NS_ASSUME_NONNULL_END
diff --git a/Common/Sources/Helpers/AccessibilityIdentifierConstants.m b/Common/Sources/Helpers/AccessibilityIdentifierConstants.m
index 0e77caa3d..ef8db9f85 100755
--- a/Common/Sources/Helpers/AccessibilityIdentifierConstants.m
+++ b/Common/Sources/Helpers/AccessibilityIdentifierConstants.m
@@ -11,3 +11,5 @@
AccessibilityIdentifier const AccessibilityIdentifierLivestreamsTabBarItem = @"livestreamsTabBarItem";
AccessibilityIdentifier const AccessibilityIdentifierSearchTabBarItem = @"searchTabBarItem";
AccessibilityIdentifier const AccessibilityIdentifierProfileTabBarItem = @"profileTabBarItem";
+
+AccessibilityIdentifier const AccessibilityIdentifierCloseButton = @"closeButton";
diff --git a/Gemfile.lock b/Gemfile.lock
index 39ec20527..b0521994d 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -6,70 +6,69 @@ GEM
public_suffix (>= 2.0.2, < 5.0)
atomos (0.1.3)
aws-eventstream (1.1.0)
- aws-partitions (1.298.0)
- aws-sdk-core (3.94.0)
+ aws-partitions (1.340.0)
+ aws-sdk-core (3.103.0)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.239.0)
aws-sigv4 (~> 1.1)
jmespath (~> 1.0)
- aws-sdk-kms (1.30.0)
- aws-sdk-core (~> 3, >= 3.71.0)
+ aws-sdk-kms (1.36.0)
+ aws-sdk-core (~> 3, >= 3.99.0)
aws-sigv4 (~> 1.1)
- aws-sdk-s3 (1.61.2)
- aws-sdk-core (~> 3, >= 3.83.0)
+ aws-sdk-s3 (1.74.0)
+ aws-sdk-core (~> 3, >= 3.102.1)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.1)
- aws-sigv4 (1.1.2)
- aws-eventstream (~> 1.0, >= 1.0.2)
+ aws-sigv4 (1.2.1)
+ aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.3)
claide (1.0.3)
colored (1.2)
colored2 (3.1.2)
commander-fastlane (4.4.6)
highline (~> 1.7.2)
- declarative (0.0.10)
+ declarative (0.0.20)
declarative-option (0.1.0)
- digest-crc (0.5.1)
+ digest-crc (0.6.1)
+ rake (~> 13.0)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
dotenv (2.7.5)
- emoji_regex (1.0.1)
- excon (0.73.0)
- faraday (0.17.3)
+ emoji_regex (3.0.0)
+ excon (0.75.0)
+ faraday (1.0.1)
multipart-post (>= 1.2, < 3)
faraday-cookie_jar (0.0.6)
faraday (>= 0.7.4)
http-cookie (~> 1.0.0)
- faraday_middleware (0.13.1)
- faraday (>= 0.7.4, < 1.0)
+ faraday_middleware (1.0.0)
+ faraday (~> 1.0)
fastimage (2.1.7)
- fastlane (2.145.0)
+ fastlane (2.151.2)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.3, < 3.0.0)
aws-sdk-s3 (~> 1.0)
- babosa (>= 1.0.2, < 2.0.0)
+ babosa (>= 1.0.3, < 2.0.0)
bundler (>= 1.12.0, < 3.0.0)
colored
commander-fastlane (>= 4.4.6, < 5.0.0)
dotenv (>= 2.1.1, < 3.0.0)
- emoji_regex (>= 0.1, < 2.0)
+ emoji_regex (>= 0.1, < 4.0)
excon (>= 0.71.0, < 1.0.0)
- faraday (~> 0.17)
+ faraday (>= 0.17, < 2.0)
faraday-cookie_jar (~> 0.0.6)
- faraday_middleware (~> 0.13.1)
+ faraday_middleware (>= 0.13.1, < 2.0)
fastimage (>= 2.1.0, < 3.0.0)
gh_inspector (>= 1.1.2, < 2.0.0)
- google-api-client (>= 0.29.2, < 0.37.0)
+ google-api-client (>= 0.37.0, < 0.39.0)
google-cloud-storage (>= 1.15.0, < 2.0.0)
highline (>= 1.7.2, < 2.0.0)
json (< 3.0.0)
- jwt (~> 2.1.0)
+ jwt (>= 2.1.0, < 3)
mini_magick (>= 4.9.4, < 5.0.0)
- multi_xml (~> 0.5)
multipart-post (~> 2.0.0)
plist (>= 3.1.0, < 4.0.0)
- public_suffix (~> 2.0.0)
- rubyzip (>= 1.3.0, < 2.0.0)
+ rubyzip (>= 2.0.0, < 3.0.0)
security (= 0.1.3)
simctl (~> 1.6.3)
slack-notifier (>= 2.0.0, < 3.0.0)
@@ -83,7 +82,7 @@ GEM
xcpretty-travis-formatter (>= 0.0.3)
fastlane-plugin-appcenter (1.8.0)
gh_inspector (1.1.3)
- google-api-client (0.36.4)
+ google-api-client (0.38.0)
addressable (~> 2.5, >= 2.5.1)
googleauth (~> 0.9)
httpclient (>= 2.8.1, < 3.0)
@@ -94,17 +93,17 @@ GEM
google-cloud-core (1.5.0)
google-cloud-env (~> 1.0)
google-cloud-errors (~> 1.0)
- google-cloud-env (1.3.1)
+ google-cloud-env (1.3.2)
faraday (>= 0.17.3, < 2.0)
- google-cloud-errors (1.0.0)
- google-cloud-storage (1.26.0)
+ google-cloud-errors (1.0.1)
+ google-cloud-storage (1.26.2)
addressable (~> 2.5)
digest-crc (~> 0.4)
google-api-client (~> 0.33)
google-cloud-core (~> 1.2)
googleauth (~> 0.9)
mini_mime (~> 1.0)
- googleauth (0.12.0)
+ googleauth (0.13.0)
faraday (>= 0.17.3, < 2.0)
jwt (>= 1.4, < 3.0)
memoist (~> 0.16)
@@ -116,26 +115,26 @@ GEM
domain_name (~> 0.5)
httpclient (2.8.3)
jmespath (1.4.0)
- json (2.3.0)
- jwt (2.1.0)
+ json (2.3.1)
+ jwt (2.2.1)
memoist (0.16.2)
mini_magick (4.10.1)
mini_mime (1.0.2)
multi_json (1.14.1)
- multi_xml (0.6.0)
multipart-post (2.0.0)
nanaimo (0.2.6)
naturally (2.2.0)
os (1.1.0)
plist (3.5.0)
- public_suffix (2.0.5)
+ public_suffix (4.0.5)
+ rake (13.0.1)
representable (3.0.4)
declarative (< 0.1.0)
declarative-option (< 0.2.0)
uber (< 0.2.0)
retriable (3.1.2)
rouge (2.0.7)
- rubyzip (1.3.0)
+ rubyzip (2.3.0)
security (0.1.3)
signet (0.14.0)
addressable (~> 2.3)
@@ -150,7 +149,7 @@ GEM
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
tty-cursor (0.7.1)
- tty-screen (0.7.1)
+ tty-screen (0.8.0)
tty-spinner (0.9.3)
tty-cursor (~> 0.7)
uber (0.1.0)
@@ -159,7 +158,7 @@ GEM
unf_ext (0.0.7.7)
unicode-display_width (1.7.0)
word_wrap (1.0.0)
- xcodeproj (1.16.0)
+ xcodeproj (1.17.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
diff --git a/PlaySRG.xcodeproj/project.pbxproj b/PlaySRG.xcodeproj/project.pbxproj
index 221168ab6..b66f193fa 100644
--- a/PlaySRG.xcodeproj/project.pbxproj
+++ b/PlaySRG.xcodeproj/project.pbxproj
@@ -137,51 +137,6 @@
0837CEB01D3FAEE200A1E089 /* HomeMediaCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEA81D3F7B5D00A1E089 /* HomeMediaCollectionViewCell.xib */; };
0837CEB11D3FAEE300A1E089 /* HomeMediaCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 0837CEA71D3F7B5D00A1E089 /* HomeMediaCollectionViewCell.m */; };
0837CEB21D3FAEE300A1E089 /* HomeMediaCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEA81D3F7B5D00A1E089 /* HomeMediaCollectionViewCell.xib */; };
- 0837CEC41D3FD6E600A1E089 /* FontAwesome.otf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBB1D3FD6E600A1E089 /* FontAwesome.otf */; };
- 0837CEC51D3FD6E600A1E089 /* SRGSSRType_Bd.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBC1D3FD6E600A1E089 /* SRGSSRType_Bd.ttf */; };
- 0837CEC61D3FD6E600A1E089 /* SRGSSRType_BdIt.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBD1D3FD6E600A1E089 /* SRGSSRType_BdIt.ttf */; };
- 0837CEC71D3FD6E600A1E089 /* SRGSSRType_He.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBE1D3FD6E600A1E089 /* SRGSSRType_He.ttf */; };
- 0837CEC81D3FD6E600A1E089 /* SRGSSRType_It.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBF1D3FD6E600A1E089 /* SRGSSRType_It.ttf */; };
- 0837CEC91D3FD6E600A1E089 /* SRGSSRType_Lt.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC01D3FD6E600A1E089 /* SRGSSRType_Lt.ttf */; };
- 0837CECA1D3FD6E600A1E089 /* SRGSSRType_Md.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC11D3FD6E600A1E089 /* SRGSSRType_Md.ttf */; };
- 0837CECB1D3FD6E600A1E089 /* SRGSSRType_Rg.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC21D3FD6E600A1E089 /* SRGSSRType_Rg.ttf */; };
- 0837CECC1D3FD6E600A1E089 /* SRGSSRType_Serif_Rg.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC31D3FD6E600A1E089 /* SRGSSRType_Serif_Rg.ttf */; };
- 0837CECD1D3FDAF900A1E089 /* FontAwesome.otf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBB1D3FD6E600A1E089 /* FontAwesome.otf */; };
- 0837CECE1D3FDAF900A1E089 /* SRGSSRType_Bd.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBC1D3FD6E600A1E089 /* SRGSSRType_Bd.ttf */; };
- 0837CECF1D3FDAF900A1E089 /* SRGSSRType_BdIt.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBD1D3FD6E600A1E089 /* SRGSSRType_BdIt.ttf */; };
- 0837CED01D3FDAF900A1E089 /* SRGSSRType_He.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBE1D3FD6E600A1E089 /* SRGSSRType_He.ttf */; };
- 0837CED11D3FDAF900A1E089 /* SRGSSRType_It.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBF1D3FD6E600A1E089 /* SRGSSRType_It.ttf */; };
- 0837CED21D3FDAF900A1E089 /* SRGSSRType_Lt.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC01D3FD6E600A1E089 /* SRGSSRType_Lt.ttf */; };
- 0837CED31D3FDAF900A1E089 /* SRGSSRType_Md.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC11D3FD6E600A1E089 /* SRGSSRType_Md.ttf */; };
- 0837CED41D3FDAF900A1E089 /* SRGSSRType_Rg.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC21D3FD6E600A1E089 /* SRGSSRType_Rg.ttf */; };
- 0837CED51D3FDAF900A1E089 /* SRGSSRType_Serif_Rg.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC31D3FD6E600A1E089 /* SRGSSRType_Serif_Rg.ttf */; };
- 0837CED61D3FDAFA00A1E089 /* FontAwesome.otf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBB1D3FD6E600A1E089 /* FontAwesome.otf */; };
- 0837CED71D3FDAFA00A1E089 /* SRGSSRType_Bd.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBC1D3FD6E600A1E089 /* SRGSSRType_Bd.ttf */; };
- 0837CED81D3FDAFA00A1E089 /* SRGSSRType_BdIt.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBD1D3FD6E600A1E089 /* SRGSSRType_BdIt.ttf */; };
- 0837CED91D3FDAFA00A1E089 /* SRGSSRType_He.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBE1D3FD6E600A1E089 /* SRGSSRType_He.ttf */; };
- 0837CEDA1D3FDAFA00A1E089 /* SRGSSRType_It.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBF1D3FD6E600A1E089 /* SRGSSRType_It.ttf */; };
- 0837CEDB1D3FDAFA00A1E089 /* SRGSSRType_Lt.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC01D3FD6E600A1E089 /* SRGSSRType_Lt.ttf */; };
- 0837CEDC1D3FDAFA00A1E089 /* SRGSSRType_Md.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC11D3FD6E600A1E089 /* SRGSSRType_Md.ttf */; };
- 0837CEDD1D3FDAFA00A1E089 /* SRGSSRType_Rg.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC21D3FD6E600A1E089 /* SRGSSRType_Rg.ttf */; };
- 0837CEDE1D3FDAFA00A1E089 /* SRGSSRType_Serif_Rg.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC31D3FD6E600A1E089 /* SRGSSRType_Serif_Rg.ttf */; };
- 0837CEDF1D3FDAFA00A1E089 /* FontAwesome.otf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBB1D3FD6E600A1E089 /* FontAwesome.otf */; };
- 0837CEE01D3FDAFA00A1E089 /* SRGSSRType_Bd.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBC1D3FD6E600A1E089 /* SRGSSRType_Bd.ttf */; };
- 0837CEE11D3FDAFA00A1E089 /* SRGSSRType_BdIt.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBD1D3FD6E600A1E089 /* SRGSSRType_BdIt.ttf */; };
- 0837CEE21D3FDAFA00A1E089 /* SRGSSRType_He.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBE1D3FD6E600A1E089 /* SRGSSRType_He.ttf */; };
- 0837CEE31D3FDAFA00A1E089 /* SRGSSRType_It.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBF1D3FD6E600A1E089 /* SRGSSRType_It.ttf */; };
- 0837CEE41D3FDAFA00A1E089 /* SRGSSRType_Lt.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC01D3FD6E600A1E089 /* SRGSSRType_Lt.ttf */; };
- 0837CEE51D3FDAFA00A1E089 /* SRGSSRType_Md.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC11D3FD6E600A1E089 /* SRGSSRType_Md.ttf */; };
- 0837CEE61D3FDAFA00A1E089 /* SRGSSRType_Rg.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC21D3FD6E600A1E089 /* SRGSSRType_Rg.ttf */; };
- 0837CEE71D3FDAFA00A1E089 /* SRGSSRType_Serif_Rg.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC31D3FD6E600A1E089 /* SRGSSRType_Serif_Rg.ttf */; };
- 0837CEE81D3FDAFA00A1E089 /* FontAwesome.otf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBB1D3FD6E600A1E089 /* FontAwesome.otf */; };
- 0837CEE91D3FDAFA00A1E089 /* SRGSSRType_Bd.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBC1D3FD6E600A1E089 /* SRGSSRType_Bd.ttf */; };
- 0837CEEA1D3FDAFA00A1E089 /* SRGSSRType_BdIt.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBD1D3FD6E600A1E089 /* SRGSSRType_BdIt.ttf */; };
- 0837CEEB1D3FDAFA00A1E089 /* SRGSSRType_He.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBE1D3FD6E600A1E089 /* SRGSSRType_He.ttf */; };
- 0837CEEC1D3FDAFA00A1E089 /* SRGSSRType_It.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEBF1D3FD6E600A1E089 /* SRGSSRType_It.ttf */; };
- 0837CEED1D3FDAFA00A1E089 /* SRGSSRType_Lt.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC01D3FD6E600A1E089 /* SRGSSRType_Lt.ttf */; };
- 0837CEEE1D3FDAFA00A1E089 /* SRGSSRType_Md.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC11D3FD6E600A1E089 /* SRGSSRType_Md.ttf */; };
- 0837CEEF1D3FDAFA00A1E089 /* SRGSSRType_Rg.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC21D3FD6E600A1E089 /* SRGSSRType_Rg.ttf */; };
- 0837CEF01D3FDAFA00A1E089 /* SRGSSRType_Serif_Rg.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0837CEC31D3FD6E600A1E089 /* SRGSSRType_Serif_Rg.ttf */; };
0841E70622F0953A009D8304 /* SRGDay+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 0841E70522F0953A009D8304 /* SRGDay+PlaySRG.m */; };
0841E70722F0953A009D8304 /* SRGDay+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 0841E70522F0953A009D8304 /* SRGDay+PlaySRG.m */; };
0841E70822F0953A009D8304 /* SRGDay+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 0841E70522F0953A009D8304 /* SRGDay+PlaySRG.m */; };
@@ -337,11 +292,6 @@
089EA013201148260070E11A /* NSTimer+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 089EA010201148180070E11A /* NSTimer+PlaySRG.m */; };
089EA014201148260070E11A /* NSTimer+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 089EA010201148180070E11A /* NSTimer+PlaySRG.m */; };
089EA015201148270070E11A /* NSTimer+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 089EA010201148180070E11A /* NSTimer+PlaySRG.m */; };
- 089EA018201148D70070E11A /* TimerTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = 089EA016201148D70070E11A /* TimerTarget.m */; };
- 089EA019201148F40070E11A /* TimerTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = 089EA016201148D70070E11A /* TimerTarget.m */; };
- 089EA01A201148F50070E11A /* TimerTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = 089EA016201148D70070E11A /* TimerTarget.m */; };
- 089EA01B201148F50070E11A /* TimerTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = 089EA016201148D70070E11A /* TimerTarget.m */; };
- 089EA01C201148F60070E11A /* TimerTarget.m in Sources */ = {isa = PBXBuildFile; fileRef = 089EA016201148D70070E11A /* TimerTarget.m */; };
08A3ED021FA2612E00A517EF /* SRGDataProvider+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 08A3ED001FA2612B00A517EF /* SRGDataProvider+PlaySRG.m */; };
08A3ED031FA2619100A517EF /* SRGDataProvider+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 08A3ED001FA2612B00A517EF /* SRGDataProvider+PlaySRG.m */; };
08A3ED041FA2619100A517EF /* SRGDataProvider+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 08A3ED001FA2612B00A517EF /* SRGDataProvider+PlaySRG.m */; };
@@ -650,50 +600,6 @@
6F0EDA672448B0D800F0FED2 /* RefreshControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F0EDA632448B0D700F0FED2 /* RefreshControl.m */; };
6F0EDA682448B0D800F0FED2 /* RefreshControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F0EDA632448B0D700F0FED2 /* RefreshControl.m */; };
6F0EDA692448B0D800F0FED2 /* RefreshControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F0EDA632448B0D700F0FED2 /* RefreshControl.m */; };
- 6F0F88361ECEE7800060A893 /* override_default_la1.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F88201ECEE69F0060A893 /* override_default_la1.pdf */; };
- 6F0F88371ECEE7800060A893 /* override_default_la2.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F88211ECEE69F0060A893 /* override_default_la2.pdf */; };
- 6F0F883D1ECEE78C0060A893 /* override_artwork_radio_rtr.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB574F1EC204900015CAB7 /* override_artwork_radio_rtr.pdf */; };
- 6F0F883E1ECEE78C0060A893 /* override_default_radio_rtr.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57501EC204900015CAB7 /* override_default_radio_rtr.pdf */; };
- 6F0F883F1ECEE78C0060A893 /* override_default_rtr_srf1.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F88241ECEE6B30060A893 /* override_default_rtr_srf1.pdf */; };
- 6F0F88401ECEE78C0060A893 /* override_default_rtr_srf_info.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F88251ECEE6B30060A893 /* override_default_rtr_srf_info.pdf */; };
- 6F0F88411ECEE78C0060A893 /* override_default_rtr_srf2.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F88261ECEE6B30060A893 /* override_default_rtr_srf2.pdf */; };
- 6F0F885A1ECF0BA40060A893 /* override_artwork_la1.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F88581ECF0BA40060A893 /* override_artwork_la1.pdf */; };
- 6F0F885B1ECF0BA40060A893 /* override_artwork_la2.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F88591ECF0BA40060A893 /* override_artwork_la2.pdf */; };
- 6F0F88731ECF0CD70060A893 /* override_artwork_rtr_srf1.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F88681ECF0CCB0060A893 /* override_artwork_rtr_srf1.pdf */; };
- 6F0F88741ECF0CD70060A893 /* override_artwork_rtr_srf_info.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F88691ECF0CCB0060A893 /* override_artwork_rtr_srf_info.pdf */; };
- 6F0F88751ECF0CD70060A893 /* override_artwork_rtr_srf2.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F886A1ECF0CCB0060A893 /* override_artwork_rtr_srf2.pdf */; };
- 6F0F88841ECF0CDD0060A893 /* override_artwork_rts_info.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F885C1ECF0C240060A893 /* override_artwork_rts_info.pdf */; };
- 6F0F88851ECF0CDD0060A893 /* override_artwork_couleur3.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57541EC2049C0015CAB7 /* override_artwork_couleur3.pdf */; };
- 6F0F88861ECF0CDD0060A893 /* override_artwork_rts_un.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F885D1ECF0C240060A893 /* override_artwork_rts_un.pdf */; };
- 6F0F88871ECF0CDD0060A893 /* override_artwork_la1ere.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57561EC2049C0015CAB7 /* override_artwork_la1ere.pdf */; };
- 6F0F88881ECF0CDD0060A893 /* override_artwork_espace2.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57551EC2049C0015CAB7 /* override_artwork_espace2.pdf */; };
- 6F0F88891ECF0CDD0060A893 /* override_artwork_rts_deux.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F885E1ECF0C240060A893 /* override_artwork_rts_deux.pdf */; };
- 6F0F888A1ECF0CDD0060A893 /* override_artwork_option_musique.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57571EC2049C0015CAB7 /* override_artwork_option_musique.pdf */; };
- 6F0F888B1ECF0CDD0060A893 /* override_default_rts_info.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F882A1ECEE6C10060A893 /* override_default_rts_info.pdf */; };
- 6F0F888C1ECF0CDD0060A893 /* override_default_couleur3.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57581EC2049C0015CAB7 /* override_default_couleur3.pdf */; };
- 6F0F888D1ECF0CDD0060A893 /* override_default_rts_un.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F882B1ECEE6C10060A893 /* override_default_rts_un.pdf */; };
- 6F0F888E1ECF0CDD0060A893 /* override_default_la1ere.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB575A1EC2049C0015CAB7 /* override_default_la1ere.pdf */; };
- 6F0F888F1ECF0CDD0060A893 /* override_default_espace2.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57591EC2049C0015CAB7 /* override_default_espace2.pdf */; };
- 6F0F88901ECF0CDD0060A893 /* override_default_rts_deux.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F882C1ECEE6C10060A893 /* override_default_rts_deux.pdf */; };
- 6F0F88911ECF0CDD0060A893 /* override_default_option_musique.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB575B1EC2049C0015CAB7 /* override_default_option_musique.pdf */; };
- 6F0F88951ECF0CE50060A893 /* override_artwork_tv_srf1.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F88621ECF0CB20060A893 /* override_artwork_tv_srf1.pdf */; };
- 6F0F88961ECF0CE50060A893 /* override_artwork_tv_srf_info.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F88631ECF0CB20060A893 /* override_artwork_tv_srf_info.pdf */; };
- 6F0F88971ECF0CE50060A893 /* override_artwork_srf1.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57661EC204A80015CAB7 /* override_artwork_srf1.pdf */; };
- 6F0F88981ECF0CE50060A893 /* override_artwork_virus.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57651EC204A80015CAB7 /* override_artwork_virus.pdf */; };
- 6F0F88991ECF0CE50060A893 /* override_artwork_srf_musikwelle.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57671EC204A80015CAB7 /* override_artwork_srf_musikwelle.pdf */; };
- 6F0F889A1ECF0CE50060A893 /* override_artwork_srf2.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57681EC204A80015CAB7 /* override_artwork_srf2.pdf */; };
- 6F0F889B1ECF0CE50060A893 /* override_artwork_srf3.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57691EC204A80015CAB7 /* override_artwork_srf3.pdf */; };
- 6F0F889C1ECF0CE50060A893 /* override_artwork_tv_srf2.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F88641ECF0CB20060A893 /* override_artwork_tv_srf2.pdf */; };
- 6F0F889D1ECF0CE50060A893 /* override_artwork_srf4.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB576A1EC204A80015CAB7 /* override_artwork_srf4.pdf */; };
- 6F0F889E1ECF0CE50060A893 /* override_default_tv_srf1.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F88301ECEE6CC0060A893 /* override_default_tv_srf1.pdf */; };
- 6F0F889F1ECF0CE50060A893 /* override_default_tv_srf_info.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F88311ECEE6CC0060A893 /* override_default_tv_srf_info.pdf */; };
- 6F0F88A01ECF0CE50060A893 /* override_default_srf1.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57711EC204A80015CAB7 /* override_default_srf1.pdf */; };
- 6F0F88A11ECF0CE50060A893 /* override_default_virus.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57701EC204A80015CAB7 /* override_default_virus.pdf */; };
- 6F0F88A21ECF0CE50060A893 /* override_default_srf_musikwelle.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57731EC204A80015CAB7 /* override_default_srf_musikwelle.pdf */; };
- 6F0F88A31ECF0CE50060A893 /* override_default_srf2.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57751EC204A80015CAB7 /* override_default_srf2.pdf */; };
- 6F0F88A41ECF0CE50060A893 /* override_default_srf3.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57761EC204A80015CAB7 /* override_default_srf3.pdf */; };
- 6F0F88A51ECF0CE50060A893 /* override_default_tv_srf2.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F0F88321ECEE6CC0060A893 /* override_default_tv_srf2.pdf */; };
- 6F0F88A61ECF0CE50060A893 /* override_default_srf4.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57771EC204A80015CAB7 /* override_default_srf4.pdf */; };
6F12DB4621A3EFBF0054879D /* HistoryTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F12DB4121A3EFBF0054879D /* HistoryTableViewCell.m */; };
6F12DB4721A3EFBF0054879D /* HistoryTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F12DB4121A3EFBF0054879D /* HistoryTableViewCell.m */; };
6F12DB4821A3EFBF0054879D /* HistoryTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F12DB4121A3EFBF0054879D /* HistoryTableViewCell.m */; };
@@ -729,6 +635,21 @@
6F12E4E922D8676600BC1718 /* SearchHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6F12E4E122D8676500BC1718 /* SearchHeaderView.xib */; };
6F12E4EA22D8676600BC1718 /* SearchHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6F12E4E122D8676500BC1718 /* SearchHeaderView.xib */; };
6F12E4EB22D8676600BC1718 /* SearchHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6F12E4E122D8676500BC1718 /* SearchHeaderView.xib */; };
+ 6F167F4A248197C700B8E7F1 /* HomeTopicListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F167F49248197C700B8E7F1 /* HomeTopicListTableViewCell.m */; };
+ 6F167F4B248197C700B8E7F1 /* HomeTopicListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F167F49248197C700B8E7F1 /* HomeTopicListTableViewCell.m */; };
+ 6F167F4C248197C700B8E7F1 /* HomeTopicListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F167F49248197C700B8E7F1 /* HomeTopicListTableViewCell.m */; };
+ 6F167F4D248197C700B8E7F1 /* HomeTopicListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F167F49248197C700B8E7F1 /* HomeTopicListTableViewCell.m */; };
+ 6F167F4E248197C700B8E7F1 /* HomeTopicListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F167F49248197C700B8E7F1 /* HomeTopicListTableViewCell.m */; };
+ 6F167F51248198DC00B8E7F1 /* HomeTopicCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F167F50248198DC00B8E7F1 /* HomeTopicCollectionViewCell.m */; };
+ 6F167F52248198DC00B8E7F1 /* HomeTopicCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F167F50248198DC00B8E7F1 /* HomeTopicCollectionViewCell.m */; };
+ 6F167F53248198DC00B8E7F1 /* HomeTopicCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F167F50248198DC00B8E7F1 /* HomeTopicCollectionViewCell.m */; };
+ 6F167F54248198DC00B8E7F1 /* HomeTopicCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F167F50248198DC00B8E7F1 /* HomeTopicCollectionViewCell.m */; };
+ 6F167F55248198DC00B8E7F1 /* HomeTopicCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F167F50248198DC00B8E7F1 /* HomeTopicCollectionViewCell.m */; };
+ 6F167F57248199BF00B8E7F1 /* HomeTopicCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6F167F56248199BF00B8E7F1 /* HomeTopicCollectionViewCell.xib */; };
+ 6F167F58248199BF00B8E7F1 /* HomeTopicCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6F167F56248199BF00B8E7F1 /* HomeTopicCollectionViewCell.xib */; };
+ 6F167F59248199BF00B8E7F1 /* HomeTopicCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6F167F56248199BF00B8E7F1 /* HomeTopicCollectionViewCell.xib */; };
+ 6F167F5A248199BF00B8E7F1 /* HomeTopicCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6F167F56248199BF00B8E7F1 /* HomeTopicCollectionViewCell.xib */; };
+ 6F167F5B248199BF00B8E7F1 /* HomeTopicCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6F167F56248199BF00B8E7F1 /* HomeTopicCollectionViewCell.xib */; };
6F1938321EFBFE9E0017B1D1 /* ApplicationConfiguration.json in Resources */ = {isa = PBXBuildFile; fileRef = 6F1938311EFBFE9E0017B1D1 /* ApplicationConfiguration.json */; };
6F1938331EFBFEA40017B1D1 /* ApplicationConfiguration.json in Resources */ = {isa = PBXBuildFile; fileRef = 6F19382F1EFBFE8D0017B1D1 /* ApplicationConfiguration.json */; };
6F1938341EFBFEA80017B1D1 /* ApplicationConfiguration.json in Resources */ = {isa = PBXBuildFile; fileRef = 6F19382D1EFBFE7F0017B1D1 /* ApplicationConfiguration.json */; };
@@ -754,6 +675,16 @@
6F2961FE2006186100CAB0E4 /* placeholder_media_list-180.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F2961FB2006186000CAB0E4 /* placeholder_media_list-180.pdf */; };
6F2961FF2006186100CAB0E4 /* placeholder_media_list-180.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F2961FB2006186000CAB0E4 /* placeholder_media_list-180.pdf */; };
6F2962002006186100CAB0E4 /* placeholder_media_list-180.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6F2961FB2006186000CAB0E4 /* placeholder_media_list-180.pdf */; };
+ 6F2AB1A92487C16A009D9FBC /* Aiolos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F2AB1A82487C16A009D9FBC /* Aiolos.framework */; };
+ 6F2AB1AB2487C181009D9FBC /* Aiolos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F2AB1A82487C16A009D9FBC /* Aiolos.framework */; };
+ 6F2AB1AD2487C190009D9FBC /* Aiolos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F2AB1A82487C16A009D9FBC /* Aiolos.framework */; };
+ 6F2AB1AF2487C19C009D9FBC /* Aiolos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F2AB1A82487C16A009D9FBC /* Aiolos.framework */; };
+ 6F2AB1B12487C1A8009D9FBC /* Aiolos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F2AB1A82487C16A009D9FBC /* Aiolos.framework */; };
+ 6F2AB1B42487C31C009D9FBC /* MediaPlayerViewController+SongPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F2AB1B32487C31C009D9FBC /* MediaPlayerViewController+SongPanel.swift */; };
+ 6F2AB1B52487C31C009D9FBC /* MediaPlayerViewController+SongPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F2AB1B32487C31C009D9FBC /* MediaPlayerViewController+SongPanel.swift */; };
+ 6F2AB1B62487C31C009D9FBC /* MediaPlayerViewController+SongPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F2AB1B32487C31C009D9FBC /* MediaPlayerViewController+SongPanel.swift */; };
+ 6F2AB1B72487C31C009D9FBC /* MediaPlayerViewController+SongPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F2AB1B32487C31C009D9FBC /* MediaPlayerViewController+SongPanel.swift */; };
+ 6F2AB1B82487C31C009D9FBC /* MediaPlayerViewController+SongPanel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F2AB1B32487C31C009D9FBC /* MediaPlayerViewController+SongPanel.swift */; };
6F340F45220DA7E900778CA3 /* SRGUserData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F340F44220DA7E900778CA3 /* SRGUserData.framework */; };
6F340F46220DA7FC00778CA3 /* SRGUserData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F340F44220DA7E900778CA3 /* SRGUserData.framework */; };
6F340F47220DA80B00778CA3 /* SRGUserData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F340F44220DA7E900778CA3 /* SRGUserData.framework */; };
@@ -774,6 +705,16 @@
6F3A47B31DD19A7B00C79E67 /* RTSResources.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6F3A47B21DD19A7B00C79E67 /* RTSResources.xcassets */; };
6F3A47B51DD19A8500C79E67 /* SRFResources.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6F3A47B41DD19A8500C79E67 /* SRFResources.xcassets */; };
6F3A47B71DD19A9100C79E67 /* SWIResources.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6F3A47B61DD19A9100C79E67 /* SWIResources.xcassets */; };
+ 6F3B0221245AAE1B00C5A8D7 /* ProgramTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3B0220245AAE1B00C5A8D7 /* ProgramTableViewCell.m */; };
+ 6F3B0222245AAE1B00C5A8D7 /* ProgramTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3B0220245AAE1B00C5A8D7 /* ProgramTableViewCell.m */; };
+ 6F3B0223245AAE1B00C5A8D7 /* ProgramTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3B0220245AAE1B00C5A8D7 /* ProgramTableViewCell.m */; };
+ 6F3B0224245AAE1B00C5A8D7 /* ProgramTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3B0220245AAE1B00C5A8D7 /* ProgramTableViewCell.m */; };
+ 6F3B0225245AAE1B00C5A8D7 /* ProgramTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3B0220245AAE1B00C5A8D7 /* ProgramTableViewCell.m */; };
+ 6F3B0227245AAF6B00C5A8D7 /* ProgramTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6F3B0226245AAF6B00C5A8D7 /* ProgramTableViewCell.xib */; };
+ 6F3B0228245AAF6B00C5A8D7 /* ProgramTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6F3B0226245AAF6B00C5A8D7 /* ProgramTableViewCell.xib */; };
+ 6F3B0229245AAF6B00C5A8D7 /* ProgramTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6F3B0226245AAF6B00C5A8D7 /* ProgramTableViewCell.xib */; };
+ 6F3B022A245AAF6B00C5A8D7 /* ProgramTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6F3B0226245AAF6B00C5A8D7 /* ProgramTableViewCell.xib */; };
+ 6F3B022B245AAF6B00C5A8D7 /* ProgramTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6F3B0226245AAF6B00C5A8D7 /* ProgramTableViewCell.xib */; };
6F3E0A0123D055DD009B00C1 /* SettingTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3E0A0023D055DD009B00C1 /* SettingTableViewCell.m */; };
6F3E0A0223D055DD009B00C1 /* SettingTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3E0A0023D055DD009B00C1 /* SettingTableViewCell.m */; };
6F3E0A0323D055DD009B00C1 /* SettingTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3E0A0023D055DD009B00C1 /* SettingTableViewCell.m */; };
@@ -975,6 +916,11 @@
6F556B3A1DDC419800B5DEA2 /* SettingsBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F556B371DDC419800B5DEA2 /* SettingsBaseViewController.m */; };
6F556B3B1DDC419800B5DEA2 /* SettingsBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F556B371DDC419800B5DEA2 /* SettingsBaseViewController.m */; };
6F556B3C1DDC419800B5DEA2 /* SettingsBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F556B371DDC419800B5DEA2 /* SettingsBaseViewController.m */; };
+ 6F56F9F4247C407000B2387B /* ChannelServiceSetup.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F56F9F3247C407000B2387B /* ChannelServiceSetup.m */; };
+ 6F56F9F5247C407000B2387B /* ChannelServiceSetup.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F56F9F3247C407000B2387B /* ChannelServiceSetup.m */; };
+ 6F56F9F6247C407000B2387B /* ChannelServiceSetup.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F56F9F3247C407000B2387B /* ChannelServiceSetup.m */; };
+ 6F56F9F7247C407100B2387B /* ChannelServiceSetup.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F56F9F3247C407000B2387B /* ChannelServiceSetup.m */; };
+ 6F56F9F8247C407100B2387B /* ChannelServiceSetup.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F56F9F3247C407000B2387B /* ChannelServiceSetup.m */; };
6F58664A1DD226EE005DAFE4 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 6F5866491DD226EE005DAFE4 /* Settings.bundle */; };
6F58664B1DD226EE005DAFE4 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 6F5866491DD226EE005DAFE4 /* Settings.bundle */; };
6F58664C1DD226EE005DAFE4 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 6F5866491DD226EE005DAFE4 /* Settings.bundle */; };
@@ -991,25 +937,15 @@
6F5F4FCC1DB10CFD0011CCA3 /* RelatedContentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6F5F4FC31DB10CFD0011CCA3 /* RelatedContentView.xib */; };
6F5F4FCD1DB10CFD0011CCA3 /* RelatedContentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6F5F4FC31DB10CFD0011CCA3 /* RelatedContentView.xib */; };
6F5F7FE21F382E9D00C330EC /* TCCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE01F382E9D00C330EC /* TCCore.framework */; };
- 6F5F7FE31F382E9D00C330EC /* TCCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE01F382E9D00C330EC /* TCCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
6F5F7FE41F382E9D00C330EC /* TCSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE11F382E9D00C330EC /* TCSDK.framework */; };
- 6F5F7FE51F382E9D00C330EC /* TCSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE11F382E9D00C330EC /* TCSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
6F5F7FE61F382EB700C330EC /* TCCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE01F382E9D00C330EC /* TCCore.framework */; };
- 6F5F7FE71F382EB700C330EC /* TCCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE01F382E9D00C330EC /* TCCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
6F5F7FE81F382EB700C330EC /* TCSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE11F382E9D00C330EC /* TCSDK.framework */; };
- 6F5F7FE91F382EB700C330EC /* TCSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE11F382E9D00C330EC /* TCSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
6F5F7FEA1F382EBB00C330EC /* TCCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE01F382E9D00C330EC /* TCCore.framework */; };
- 6F5F7FEB1F382EBB00C330EC /* TCCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE01F382E9D00C330EC /* TCCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
6F5F7FEC1F382EBB00C330EC /* TCSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE11F382E9D00C330EC /* TCSDK.framework */; };
- 6F5F7FED1F382EBB00C330EC /* TCSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE11F382E9D00C330EC /* TCSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
6F5F7FEE1F382EBF00C330EC /* TCCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE01F382E9D00C330EC /* TCCore.framework */; };
- 6F5F7FEF1F382EBF00C330EC /* TCCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE01F382E9D00C330EC /* TCCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
6F5F7FF01F382EBF00C330EC /* TCSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE11F382E9D00C330EC /* TCSDK.framework */; };
- 6F5F7FF11F382EBF00C330EC /* TCSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE11F382E9D00C330EC /* TCSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
6F5F7FF21F382EC400C330EC /* TCCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE01F382E9D00C330EC /* TCCore.framework */; };
- 6F5F7FF31F382EC400C330EC /* TCCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE01F382E9D00C330EC /* TCCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
6F5F7FF41F382EC400C330EC /* TCSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE11F382E9D00C330EC /* TCSDK.framework */; };
- 6F5F7FF51F382EC400C330EC /* TCSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6F5F7FE11F382E9D00C330EC /* TCSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
6F6B642E21A70FAA00E207FC /* HomeStatusHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F6B642C21A70FAA00E207FC /* HomeStatusHeaderView.m */; };
6F6B642F21A70FAA00E207FC /* HomeStatusHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F6B642C21A70FAA00E207FC /* HomeStatusHeaderView.m */; };
6F6B643021A70FAA00E207FC /* HomeStatusHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F6B642C21A70FAA00E207FC /* HomeStatusHeaderView.m */; };
@@ -1045,6 +981,11 @@
6F7EEBF522DC7AA7005E5A97 /* SearchSettingMultiSelectionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F7EEBF222DC7AA6005E5A97 /* SearchSettingMultiSelectionCell.m */; };
6F7EEBF622DC7AA7005E5A97 /* SearchSettingMultiSelectionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F7EEBF222DC7AA6005E5A97 /* SearchSettingMultiSelectionCell.m */; };
6F7EEBF722DC7AA7005E5A97 /* SearchSettingMultiSelectionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F7EEBF222DC7AA6005E5A97 /* SearchSettingMultiSelectionCell.m */; };
+ 6F7F2B06249CD78D00C37526 /* SRGLetterboxController+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F7F2B05249CD78D00C37526 /* SRGLetterboxController+PlaySRG.m */; };
+ 6F7F2B07249CD78D00C37526 /* SRGLetterboxController+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F7F2B05249CD78D00C37526 /* SRGLetterboxController+PlaySRG.m */; };
+ 6F7F2B08249CD78D00C37526 /* SRGLetterboxController+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F7F2B05249CD78D00C37526 /* SRGLetterboxController+PlaySRG.m */; };
+ 6F7F2B09249CD78D00C37526 /* SRGLetterboxController+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F7F2B05249CD78D00C37526 /* SRGLetterboxController+PlaySRG.m */; };
+ 6F7F2B0A249CD78E00C37526 /* SRGLetterboxController+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F7F2B05249CD78D00C37526 /* SRGLetterboxController+PlaySRG.m */; };
6F80106920443230009FE197 /* PlayApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F80106820443230009FE197 /* PlayApplication.m */; };
6F80106A20443230009FE197 /* PlayApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F80106820443230009FE197 /* PlayApplication.m */; };
6F80106B20443230009FE197 /* PlayApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F80106820443230009FE197 /* PlayApplication.m */; };
@@ -1130,6 +1071,11 @@
6FA5D15F1F2077B10059E4E2 /* NSString+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FA5D15C1F2077B10059E4E2 /* NSString+PlaySRG.m */; };
6FA5D1601F2077B10059E4E2 /* NSString+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FA5D15C1F2077B10059E4E2 /* NSString+PlaySRG.m */; };
6FA5D1611F2077B10059E4E2 /* NSString+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FA5D15C1F2077B10059E4E2 /* NSString+PlaySRG.m */; };
+ 6FA6C0632458064C00518DE6 /* SRGProgramComposition+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FA6C0622458064C00518DE6 /* SRGProgramComposition+PlaySRG.m */; };
+ 6FA6C0642458064C00518DE6 /* SRGProgramComposition+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FA6C0622458064C00518DE6 /* SRGProgramComposition+PlaySRG.m */; };
+ 6FA6C0652458064C00518DE6 /* SRGProgramComposition+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FA6C0622458064C00518DE6 /* SRGProgramComposition+PlaySRG.m */; };
+ 6FA6C0662458064C00518DE6 /* SRGProgramComposition+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FA6C0622458064C00518DE6 /* SRGProgramComposition+PlaySRG.m */; };
+ 6FA6C0672458064C00518DE6 /* SRGProgramComposition+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FA6C0622458064C00518DE6 /* SRGProgramComposition+PlaySRG.m */; };
6FA7EC3920AB0FEB00A9C5FE /* Onboardings.json in Resources */ = {isa = PBXBuildFile; fileRef = 6FA7EC3820AB0FEB00A9C5FE /* Onboardings.json */; };
6FA7EC3A20AB0FEB00A9C5FE /* Onboardings.json in Resources */ = {isa = PBXBuildFile; fileRef = 6FA7EC3820AB0FEB00A9C5FE /* Onboardings.json */; };
6FA7EC3B20AB0FEB00A9C5FE /* Onboardings.json in Resources */ = {isa = PBXBuildFile; fileRef = 6FA7EC3820AB0FEB00A9C5FE /* Onboardings.json */; };
@@ -1170,6 +1116,11 @@
6FAAF78F20CABC0D00BB58A3 /* NSFileManager+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FAAF78720CABC0D00BB58A3 /* NSFileManager+PlaySRG.m */; };
6FAAF79020CABC0D00BB58A3 /* NSFileManager+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FAAF78720CABC0D00BB58A3 /* NSFileManager+PlaySRG.m */; };
6FAAF79120CABC0D00BB58A3 /* NSFileManager+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FAAF78720CABC0D00BB58A3 /* NSFileManager+PlaySRG.m */; };
+ 6FADEF9F248E6EB900A5F948 /* AirshipCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FADEF9E248E6EB900A5F948 /* AirshipCore.framework */; };
+ 6FADEFA1248E6EDE00A5F948 /* AirshipCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FADEF9E248E6EB900A5F948 /* AirshipCore.framework */; };
+ 6FADEFA3248E6EEF00A5F948 /* AirshipCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FADEF9E248E6EB900A5F948 /* AirshipCore.framework */; };
+ 6FADEFA5248E6EFD00A5F948 /* AirshipCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FADEF9E248E6EB900A5F948 /* AirshipCore.framework */; };
+ 6FADEFA7248E6F0A00A5F948 /* AirshipCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FADEF9E248E6EB900A5F948 /* AirshipCore.framework */; };
6FAF43001EF7CD8A0074E033 /* HomeTopicViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FAF42FE1EF7CD8A0074E033 /* HomeTopicViewController.m */; };
6FAF43011EF7CD8A0074E033 /* HomeTopicViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FAF42FE1EF7CD8A0074E033 /* HomeTopicViewController.m */; };
6FAF43021EF7CD8A0074E033 /* HomeTopicViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FAF42FE1EF7CD8A0074E033 /* HomeTopicViewController.m */; };
@@ -1205,6 +1156,16 @@
6FBF24462148238300E576A2 /* SRGDiagnostics.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 6FBF24432148238300E576A2 /* SRGDiagnostics.bundle */; };
6FBF24472148238300E576A2 /* SRGDiagnostics.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 6FBF24432148238300E576A2 /* SRGDiagnostics.bundle */; };
6FBF24482148238300E576A2 /* SRGDiagnostics.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 6FBF24432148238300E576A2 /* SRGDiagnostics.bundle */; };
+ 6FC0C695245FF06D00B44CAE /* ProgramHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FC0C693245FF06C00B44CAE /* ProgramHeaderView.m */; };
+ 6FC0C696245FF06D00B44CAE /* ProgramHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FC0C693245FF06C00B44CAE /* ProgramHeaderView.m */; };
+ 6FC0C697245FF06D00B44CAE /* ProgramHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FC0C693245FF06C00B44CAE /* ProgramHeaderView.m */; };
+ 6FC0C698245FF06D00B44CAE /* ProgramHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FC0C693245FF06C00B44CAE /* ProgramHeaderView.m */; };
+ 6FC0C699245FF06D00B44CAE /* ProgramHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FC0C693245FF06C00B44CAE /* ProgramHeaderView.m */; };
+ 6FC0C69A245FF06D00B44CAE /* ProgramHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6FC0C694245FF06D00B44CAE /* ProgramHeaderView.xib */; };
+ 6FC0C69B245FF06D00B44CAE /* ProgramHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6FC0C694245FF06D00B44CAE /* ProgramHeaderView.xib */; };
+ 6FC0C69C245FF06D00B44CAE /* ProgramHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6FC0C694245FF06D00B44CAE /* ProgramHeaderView.xib */; };
+ 6FC0C69D245FF06D00B44CAE /* ProgramHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6FC0C694245FF06D00B44CAE /* ProgramHeaderView.xib */; };
+ 6FC0C69E245FF06D00B44CAE /* ProgramHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6FC0C694245FF06D00B44CAE /* ProgramHeaderView.xib */; };
6FC1FA882292E3480036CB34 /* NSSet+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FC1FA872292E3460036CB34 /* NSSet+PlaySRG.m */; };
6FC1FA892292E3480036CB34 /* NSSet+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FC1FA872292E3460036CB34 /* NSSet+PlaySRG.m */; };
6FC1FA8A2292E3480036CB34 /* NSSet+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FC1FA872292E3460036CB34 /* NSSet+PlaySRG.m */; };
@@ -1215,12 +1176,6 @@
6FC8866D1EC58BD5000BC3FF /* SRGProgram+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FC8866A1EC58BD5000BC3FF /* SRGProgram+PlaySRG.m */; };
6FC8866E1EC58BD5000BC3FF /* SRGProgram+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FC8866A1EC58BD5000BC3FF /* SRGProgram+PlaySRG.m */; };
6FC8866F1EC58BD5000BC3FF /* SRGProgram+PlaySRG.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FC8866A1EC58BD5000BC3FF /* SRGProgram+PlaySRG.m */; };
- 6FCB57481EC2047B0015CAB7 /* override_artwork_rete_due.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57421EC2047B0015CAB7 /* override_artwork_rete_due.pdf */; };
- 6FCB57491EC2047B0015CAB7 /* override_artwork_rete_tre.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57431EC2047B0015CAB7 /* override_artwork_rete_tre.pdf */; };
- 6FCB574A1EC2047B0015CAB7 /* override_artwork_rete_uno.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57441EC2047B0015CAB7 /* override_artwork_rete_uno.pdf */; };
- 6FCB574B1EC2047B0015CAB7 /* override_default_rete_due.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57451EC2047B0015CAB7 /* override_default_rete_due.pdf */; };
- 6FCB574C1EC2047B0015CAB7 /* override_default_rete_tre.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57461EC2047B0015CAB7 /* override_default_rete_tre.pdf */; };
- 6FCB574D1EC2047B0015CAB7 /* override_default_rete_uno.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6FCB57471EC2047B0015CAB7 /* override_default_rete_uno.pdf */; };
6FD2A35523C7628000456DCB /* ForegroundTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD2A35323C7628000456DCB /* ForegroundTimer.m */; };
6FD2A35623C7628000456DCB /* ForegroundTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD2A35323C7628000456DCB /* ForegroundTimer.m */; };
6FD2A35723C7628000456DCB /* ForegroundTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD2A35323C7628000456DCB /* ForegroundTimer.m */; };
@@ -1246,6 +1201,16 @@
6FD633EC1FFD151000875BE5 /* MiniPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD633E91FFD151000875BE5 /* MiniPlayerView.m */; };
6FD633ED1FFD151000875BE5 /* MiniPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD633E91FFD151000875BE5 /* MiniPlayerView.m */; };
6FD633EE1FFD151000875BE5 /* MiniPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD633E91FFD151000875BE5 /* MiniPlayerView.m */; };
+ 6FD68618246052A100B8018A /* GradientView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD68617246052A100B8018A /* GradientView.m */; };
+ 6FD68619246052A100B8018A /* GradientView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD68617246052A100B8018A /* GradientView.m */; };
+ 6FD6861A246052A100B8018A /* GradientView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD68617246052A100B8018A /* GradientView.m */; };
+ 6FD6861B246052A100B8018A /* GradientView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD68617246052A100B8018A /* GradientView.m */; };
+ 6FD6861C246052A100B8018A /* GradientView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD68617246052A100B8018A /* GradientView.m */; };
+ 6FD6861F2460670600B8018A /* Channel.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD6861E2460670600B8018A /* Channel.m */; };
+ 6FD686202460670600B8018A /* Channel.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD6861E2460670600B8018A /* Channel.m */; };
+ 6FD686212460670600B8018A /* Channel.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD6861E2460670600B8018A /* Channel.m */; };
+ 6FD686222460670600B8018A /* Channel.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD6861E2460670600B8018A /* Channel.m */; };
+ 6FD686232460670600B8018A /* Channel.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD6861E2460670600B8018A /* Channel.m */; };
6FD88F7722D3618F008859EF /* SearchSettingsHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD88F7522D3618F008859EF /* SearchSettingsHeaderView.m */; };
6FD88F7822D3618F008859EF /* SearchSettingsHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD88F7522D3618F008859EF /* SearchSettingsHeaderView.m */; };
6FD88F7922D3618F008859EF /* SearchSettingsHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD88F7522D3618F008859EF /* SearchSettingsHeaderView.m */; };
@@ -1326,6 +1291,21 @@
6FE1B91B1FAC34D600A58F3B /* ContentInsets.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE1B9181FAC34D600A58F3B /* ContentInsets.m */; };
6FE1B91C1FAC34D600A58F3B /* ContentInsets.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE1B9181FAC34D600A58F3B /* ContentInsets.m */; };
6FE1B91D1FAC34D600A58F3B /* ContentInsets.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE1B9181FAC34D600A58F3B /* ContentInsets.m */; };
+ 6FE2873C2481448C00358CFF /* SongsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE2873B2481448C00358CFF /* SongsViewController.m */; };
+ 6FE2873D2481448C00358CFF /* SongsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE2873B2481448C00358CFF /* SongsViewController.m */; };
+ 6FE2873E2481448C00358CFF /* SongsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE2873B2481448C00358CFF /* SongsViewController.m */; };
+ 6FE2873F2481448C00358CFF /* SongsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE2873B2481448C00358CFF /* SongsViewController.m */; };
+ 6FE287402481448C00358CFF /* SongsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE2873B2481448C00358CFF /* SongsViewController.m */; };
+ 6FE2876D2481687A00358CFF /* SongTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE2876C2481687A00358CFF /* SongTableViewCell.m */; };
+ 6FE2876E2481687A00358CFF /* SongTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE2876C2481687A00358CFF /* SongTableViewCell.m */; };
+ 6FE2876F2481687A00358CFF /* SongTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE2876C2481687A00358CFF /* SongTableViewCell.m */; };
+ 6FE287702481687A00358CFF /* SongTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE2876C2481687A00358CFF /* SongTableViewCell.m */; };
+ 6FE287712481687B00358CFF /* SongTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE2876C2481687A00358CFF /* SongTableViewCell.m */; };
+ 6FE28773248168A100358CFF /* SongTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6FE28772248168A100358CFF /* SongTableViewCell.xib */; };
+ 6FE28774248168A100358CFF /* SongTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6FE28772248168A100358CFF /* SongTableViewCell.xib */; };
+ 6FE28775248168A100358CFF /* SongTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6FE28772248168A100358CFF /* SongTableViewCell.xib */; };
+ 6FE28776248168A100358CFF /* SongTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6FE28772248168A100358CFF /* SongTableViewCell.xib */; };
+ 6FE28777248168A100358CFF /* SongTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6FE28772248168A100358CFF /* SongTableViewCell.xib */; };
6FE686E11EB9D57400067D40 /* ChannelService.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE686E01EB9D57400067D40 /* ChannelService.m */; };
6FE686E21EB9D57400067D40 /* ChannelService.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE686E01EB9D57400067D40 /* ChannelService.m */; };
6FE686E31EB9D57400067D40 /* ChannelService.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE686E01EB9D57400067D40 /* ChannelService.m */; };
@@ -1384,15 +1364,10 @@
7ACE7CA000370D1208243956 /* libPods-PlaySRG-Play SRF.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D6E859054BE4FCA7A62352E /* libPods-PlaySRG-Play SRF.a */; };
E1D8F87EB9409ADB326F446F /* libPods-PlaySRG-Play RTR.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 866AF638938EFA7338C23B03 /* libPods-PlaySRG-Play RTR.a */; };
E60178521D635E130000362E /* ComScore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E60178511D635E130000362E /* ComScore.framework */; };
- E60178531D635E130000362E /* ComScore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E60178511D635E130000362E /* ComScore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E60178541D635E160000362E /* ComScore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E60178511D635E130000362E /* ComScore.framework */; };
- E60178551D635E160000362E /* ComScore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E60178511D635E130000362E /* ComScore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E60178561D635E190000362E /* ComScore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E60178511D635E130000362E /* ComScore.framework */; };
- E60178571D635E190000362E /* ComScore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E60178511D635E130000362E /* ComScore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E60178581D635E1D0000362E /* ComScore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E60178511D635E130000362E /* ComScore.framework */; };
- E60178591D635E1D0000362E /* ComScore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E60178511D635E130000362E /* ComScore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E601785A1D635E210000362E /* ComScore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E60178511D635E130000362E /* ComScore.framework */; };
- E601785B1D635E210000362E /* ComScore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E60178511D635E130000362E /* ComScore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E62459EE1D488D0400482BE9 /* SwiftMessagesBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = E62459ED1D488D0400482BE9 /* SwiftMessagesBridge.swift */; };
E62459EF1D488D0400482BE9 /* SwiftMessagesBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = E62459ED1D488D0400482BE9 /* SwiftMessagesBridge.swift */; };
E62459F01D488D0400482BE9 /* SwiftMessagesBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = E62459ED1D488D0400482BE9 /* SwiftMessagesBridge.swift */; };
@@ -1424,15 +1399,10 @@
E66BEC241DA7FCED00AD4450 /* MediaPlayerViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E66BEC1B1DA7FCED00AD4450 /* MediaPlayerViewController.storyboard */; };
E66BEC251DA7FCED00AD4450 /* MediaPlayerViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E66BEC1B1DA7FCED00AD4450 /* MediaPlayerViewController.storyboard */; };
E67BB6981D3E640C00E1FEA3 /* Mantle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E67BB6971D3E640C00E1FEA3 /* Mantle.framework */; };
- E67BB6991D3E640C00E1FEA3 /* Mantle.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E67BB6971D3E640C00E1FEA3 /* Mantle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E67FFA271D3E6840007BD7BA /* Mantle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E67BB6971D3E640C00E1FEA3 /* Mantle.framework */; };
- E67FFA281D3E6840007BD7BA /* Mantle.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E67BB6971D3E640C00E1FEA3 /* Mantle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E67FFA2C1D3E6844007BD7BA /* Mantle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E67BB6971D3E640C00E1FEA3 /* Mantle.framework */; };
- E67FFA2D1D3E6844007BD7BA /* Mantle.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E67BB6971D3E640C00E1FEA3 /* Mantle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E67FFA311D3E6847007BD7BA /* Mantle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E67BB6971D3E640C00E1FEA3 /* Mantle.framework */; };
- E67FFA321D3E6847007BD7BA /* Mantle.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E67BB6971D3E640C00E1FEA3 /* Mantle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E67FFA361D3E684B007BD7BA /* Mantle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E67BB6971D3E640C00E1FEA3 /* Mantle.framework */; };
- E67FFA371D3E684B007BD7BA /* Mantle.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E67BB6971D3E640C00E1FEA3 /* Mantle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E694A9F51D65F02700372DF0 /* CalendarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E694A9F31D65F02700372DF0 /* CalendarViewController.m */; };
E694A9F61D65F02700372DF0 /* CalendarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E694A9F31D65F02700372DF0 /* CalendarViewController.m */; };
E694A9F71D65F02700372DF0 /* CalendarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E694A9F31D65F02700372DF0 /* CalendarViewController.m */; };
@@ -1620,10 +1590,6 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
- 6F5F7FE31F382E9D00C330EC /* TCCore.framework in Embed Frameworks */,
- E67BB6991D3E640C00E1FEA3 /* Mantle.framework in Embed Frameworks */,
- E60178531D635E130000362E /* ComScore.framework in Embed Frameworks */,
- 6F5F7FE51F382E9D00C330EC /* TCSDK.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@@ -1634,10 +1600,6 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
- 6F5F7FE71F382EB700C330EC /* TCCore.framework in Embed Frameworks */,
- E67FFA281D3E6840007BD7BA /* Mantle.framework in Embed Frameworks */,
- E60178551D635E160000362E /* ComScore.framework in Embed Frameworks */,
- 6F5F7FE91F382EB700C330EC /* TCSDK.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@@ -1648,10 +1610,6 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
- 6F5F7FEB1F382EBB00C330EC /* TCCore.framework in Embed Frameworks */,
- E67FFA2D1D3E6844007BD7BA /* Mantle.framework in Embed Frameworks */,
- E60178571D635E190000362E /* ComScore.framework in Embed Frameworks */,
- 6F5F7FED1F382EBB00C330EC /* TCSDK.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@@ -1662,10 +1620,6 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
- 6F5F7FEF1F382EBF00C330EC /* TCCore.framework in Embed Frameworks */,
- E67FFA321D3E6847007BD7BA /* Mantle.framework in Embed Frameworks */,
- E60178591D635E1D0000362E /* ComScore.framework in Embed Frameworks */,
- 6F5F7FF11F382EBF00C330EC /* TCSDK.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@@ -1676,10 +1630,6 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
- 6F5F7FF31F382EC400C330EC /* TCCore.framework in Embed Frameworks */,
- E67FFA371D3E684B007BD7BA /* Mantle.framework in Embed Frameworks */,
- E601785B1D635E210000362E /* ComScore.framework in Embed Frameworks */,
- 6F5F7FF51F382EC400C330EC /* TCSDK.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@@ -1732,15 +1682,6 @@
0837CEA61D3F7B5D00A1E089 /* HomeMediaCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeMediaCollectionViewCell.h; sourceTree = ""; };
0837CEA71D3F7B5D00A1E089 /* HomeMediaCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeMediaCollectionViewCell.m; sourceTree = ""; };
0837CEA81D3F7B5D00A1E089 /* HomeMediaCollectionViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HomeMediaCollectionViewCell.xib; sourceTree = ""; };
- 0837CEBB1D3FD6E600A1E089 /* FontAwesome.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = FontAwesome.otf; sourceTree = ""; };
- 0837CEBC1D3FD6E600A1E089 /* SRGSSRType_Bd.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = SRGSSRType_Bd.ttf; sourceTree = ""; };
- 0837CEBD1D3FD6E600A1E089 /* SRGSSRType_BdIt.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = SRGSSRType_BdIt.ttf; sourceTree = ""; };
- 0837CEBE1D3FD6E600A1E089 /* SRGSSRType_He.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = SRGSSRType_He.ttf; sourceTree = ""; };
- 0837CEBF1D3FD6E600A1E089 /* SRGSSRType_It.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = SRGSSRType_It.ttf; sourceTree = ""; };
- 0837CEC01D3FD6E600A1E089 /* SRGSSRType_Lt.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = SRGSSRType_Lt.ttf; sourceTree = ""; };
- 0837CEC11D3FD6E600A1E089 /* SRGSSRType_Md.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = SRGSSRType_Md.ttf; sourceTree = ""; };
- 0837CEC21D3FD6E600A1E089 /* SRGSSRType_Rg.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = SRGSSRType_Rg.ttf; sourceTree = ""; };
- 0837CEC31D3FD6E600A1E089 /* SRGSSRType_Serif_Rg.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = SRGSSRType_Serif_Rg.ttf; sourceTree = ""; };
0841E70422F0953A009D8304 /* SRGDay+PlaySRG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SRGDay+PlaySRG.h"; sourceTree = ""; };
0841E70522F0953A009D8304 /* SRGDay+PlaySRG.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SRGDay+PlaySRG.m"; sourceTree = ""; };
084F94AD22D3B77600D2D3A5 /* SearchSettingMultiSelectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SearchSettingMultiSelectionViewController.h; sourceTree = ""; };
@@ -1800,8 +1741,6 @@
088899442077627900242654 /* TVChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TVChannel.h; sourceTree = ""; };
089EA00F201148170070E11A /* NSTimer+PlaySRG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSTimer+PlaySRG.h"; sourceTree = ""; };
089EA010201148180070E11A /* NSTimer+PlaySRG.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSTimer+PlaySRG.m"; sourceTree = ""; };
- 089EA016201148D70070E11A /* TimerTarget.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TimerTarget.m; sourceTree = ""; };
- 089EA017201148D70070E11A /* TimerTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TimerTarget.h; sourceTree = ""; };
08A3ED001FA2612B00A517EF /* SRGDataProvider+PlaySRG.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SRGDataProvider+PlaySRG.m"; sourceTree = ""; };
08A3ED011FA2612B00A517EF /* SRGDataProvider+PlaySRG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SRGDataProvider+PlaySRG.h"; sourceTree = ""; };
08AA551B1D49EBF600C5026E /* ApplicationConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApplicationConfiguration.h; sourceTree = ""; };
@@ -1922,28 +1861,6 @@
6F0E8D971F14F62F002014C3 /* SRGChannel+PlaySRG.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SRGChannel+PlaySRG.m"; sourceTree = ""; };
6F0EDA632448B0D700F0FED2 /* RefreshControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RefreshControl.m; sourceTree = ""; };
6F0EDA642448B0D800F0FED2 /* RefreshControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RefreshControl.h; sourceTree = ""; };
- 6F0F88201ECEE69F0060A893 /* override_default_la1.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_la1.pdf; sourceTree = ""; };
- 6F0F88211ECEE69F0060A893 /* override_default_la2.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_la2.pdf; sourceTree = ""; };
- 6F0F88241ECEE6B30060A893 /* override_default_rtr_srf1.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_rtr_srf1.pdf; sourceTree = ""; };
- 6F0F88251ECEE6B30060A893 /* override_default_rtr_srf_info.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_rtr_srf_info.pdf; sourceTree = ""; };
- 6F0F88261ECEE6B30060A893 /* override_default_rtr_srf2.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_rtr_srf2.pdf; sourceTree = ""; };
- 6F0F882A1ECEE6C10060A893 /* override_default_rts_info.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_rts_info.pdf; sourceTree = ""; };
- 6F0F882B1ECEE6C10060A893 /* override_default_rts_un.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_rts_un.pdf; sourceTree = ""; };
- 6F0F882C1ECEE6C10060A893 /* override_default_rts_deux.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_rts_deux.pdf; sourceTree = ""; };
- 6F0F88301ECEE6CC0060A893 /* override_default_tv_srf1.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_tv_srf1.pdf; sourceTree = ""; };
- 6F0F88311ECEE6CC0060A893 /* override_default_tv_srf_info.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_tv_srf_info.pdf; sourceTree = ""; };
- 6F0F88321ECEE6CC0060A893 /* override_default_tv_srf2.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_tv_srf2.pdf; sourceTree = ""; };
- 6F0F88581ECF0BA40060A893 /* override_artwork_la1.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_la1.pdf; sourceTree = ""; };
- 6F0F88591ECF0BA40060A893 /* override_artwork_la2.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_la2.pdf; sourceTree = ""; };
- 6F0F885C1ECF0C240060A893 /* override_artwork_rts_info.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_rts_info.pdf; sourceTree = ""; };
- 6F0F885D1ECF0C240060A893 /* override_artwork_rts_un.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_rts_un.pdf; sourceTree = ""; };
- 6F0F885E1ECF0C240060A893 /* override_artwork_rts_deux.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_rts_deux.pdf; sourceTree = ""; };
- 6F0F88621ECF0CB20060A893 /* override_artwork_tv_srf1.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_tv_srf1.pdf; sourceTree = ""; };
- 6F0F88631ECF0CB20060A893 /* override_artwork_tv_srf_info.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_tv_srf_info.pdf; sourceTree = ""; };
- 6F0F88641ECF0CB20060A893 /* override_artwork_tv_srf2.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_tv_srf2.pdf; sourceTree = ""; };
- 6F0F88681ECF0CCB0060A893 /* override_artwork_rtr_srf1.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_rtr_srf1.pdf; sourceTree = ""; };
- 6F0F88691ECF0CCB0060A893 /* override_artwork_rtr_srf_info.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_rtr_srf_info.pdf; sourceTree = ""; };
- 6F0F886A1ECF0CCB0060A893 /* override_artwork_rtr_srf2.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_rtr_srf2.pdf; sourceTree = ""; };
6F12DB4021A3EFBF0054879D /* HistoryTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryTableViewCell.h; sourceTree = ""; };
6F12DB4121A3EFBF0054879D /* HistoryTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryTableViewCell.m; sourceTree = ""; };
6F12DB4221A3EFBF0054879D /* HistoryTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HistoryTableViewCell.xib; sourceTree = ""; };
@@ -1955,6 +1872,11 @@
6F12E4DF22D8676300BC1718 /* SearchHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SearchHeaderView.m; sourceTree = ""; };
6F12E4E022D8676300BC1718 /* SearchHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SearchHeaderView.h; sourceTree = ""; };
6F12E4E122D8676500BC1718 /* SearchHeaderView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SearchHeaderView.xib; sourceTree = ""; };
+ 6F167F48248197C700B8E7F1 /* HomeTopicListTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeTopicListTableViewCell.h; sourceTree = ""; };
+ 6F167F49248197C700B8E7F1 /* HomeTopicListTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeTopicListTableViewCell.m; sourceTree = ""; };
+ 6F167F4F248198DC00B8E7F1 /* HomeTopicCollectionViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeTopicCollectionViewCell.h; sourceTree = ""; };
+ 6F167F50248198DC00B8E7F1 /* HomeTopicCollectionViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeTopicCollectionViewCell.m; sourceTree = ""; };
+ 6F167F56248199BF00B8E7F1 /* HomeTopicCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeTopicCollectionViewCell.xib; sourceTree = ""; };
6F19382D1EFBFE7F0017B1D1 /* ApplicationConfiguration.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = ApplicationConfiguration.json; sourceTree = ""; };
6F19382F1EFBFE8D0017B1D1 /* ApplicationConfiguration.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = ApplicationConfiguration.json; sourceTree = ""; };
6F1938311EFBFE9E0017B1D1 /* ApplicationConfiguration.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = ApplicationConfiguration.json; sourceTree = ""; };
@@ -1985,6 +1907,8 @@
6F1F929C22A539D40026BFAC /* SearchShowListCollectionViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SearchShowListCollectionViewCell.h; sourceTree = ""; };
6F1F929D22A539D40026BFAC /* SearchShowListCollectionViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SearchShowListCollectionViewCell.m; sourceTree = ""; };
6F2961FB2006186000CAB0E4 /* placeholder_media_list-180.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "placeholder_media_list-180.pdf"; sourceTree = ""; };
+ 6F2AB1A82487C16A009D9FBC /* Aiolos.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Aiolos.framework; path = Carthage/Build/iOS/Aiolos.framework; sourceTree = ""; };
+ 6F2AB1B32487C31C009D9FBC /* MediaPlayerViewController+SongPanel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "MediaPlayerViewController+SongPanel.swift"; sourceTree = ""; };
6F340F44220DA7E900778CA3 /* SRGUserData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SRGUserData.framework; path = Carthage/Build/iOS/Static/SRGUserData.framework; sourceTree = ""; };
6F340F4A220DA86B00778CA3 /* SRGUserData.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = SRGUserData.bundle; path = Carthage/Build/iOS/Static/SRGUserData.framework/SRGUserData.bundle; sourceTree = ""; };
6F340F50220DA99B00778CA3 /* History.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = History.h; sourceTree = ""; };
@@ -1994,8 +1918,12 @@
6F3A47B21DD19A7B00C79E67 /* RTSResources.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = RTSResources.xcassets; sourceTree = ""; };
6F3A47B41DD19A8500C79E67 /* SRFResources.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = SRFResources.xcassets; sourceTree = ""; };
6F3A47B61DD19A9100C79E67 /* SWIResources.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = SWIResources.xcassets; sourceTree = ""; };
+ 6F3B021F245AAE1B00C5A8D7 /* ProgramTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProgramTableViewCell.h; sourceTree = ""; };
+ 6F3B0220245AAE1B00C5A8D7 /* ProgramTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ProgramTableViewCell.m; sourceTree = ""; };
+ 6F3B0226245AAF6B00C5A8D7 /* ProgramTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ProgramTableViewCell.xib; sourceTree = ""; };
6F3E09FF23D055DD009B00C1 /* SettingTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SettingTableViewCell.h; sourceTree = ""; };
6F3E0A0023D055DD009B00C1 /* SettingTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SettingTableViewCell.m; sourceTree = ""; };
+ 6F3E6A9224978FC8004B26D6 /* MediaPlayerViewController+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MediaPlayerViewController+Private.h"; sourceTree = ""; };
6F4091FF22DCF43D005F3850 /* Previewing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Previewing.m; sourceTree = ""; };
6F40920522DCFE2A005F3850 /* MostSearchedShowCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MostSearchedShowCollectionViewCell.h; sourceTree = ""; };
6F40920622DCFE2B005F3850 /* MostSearchedShowCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MostSearchedShowCollectionViewCell.m; sourceTree = ""; };
@@ -2072,7 +2000,10 @@
6F556B361DDC419800B5DEA2 /* SettingsBaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsBaseViewController.h; sourceTree = ""; };
6F556B371DDC419800B5DEA2 /* SettingsBaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SettingsBaseViewController.m; sourceTree = ""; };
6F556DB020D1174100C3573A /* NotificationService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "NotificationService-Info.plist"; sourceTree = ""; };
+ 6F56F9F2247C407000B2387B /* ChannelServiceSetup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ChannelServiceSetup.h; sourceTree = ""; };
+ 6F56F9F3247C407000B2387B /* ChannelServiceSetup.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ChannelServiceSetup.m; sourceTree = ""; };
6F5866491DD226EE005DAFE4 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = ""; };
+ 6F5CAC86245FF04C0058F9B0 /* ProgramHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProgramHeaderView.h; sourceTree = ""; };
6F5F4FC11DB10CFD0011CCA3 /* RelatedContentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RelatedContentView.h; sourceTree = ""; };
6F5F4FC21DB10CFD0011CCA3 /* RelatedContentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RelatedContentView.m; sourceTree = ""; };
6F5F4FC31DB10CFD0011CCA3 /* RelatedContentView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RelatedContentView.xib; sourceTree = ""; };
@@ -2092,6 +2023,8 @@
6F7EEBDD22DC40B7005E5A97 /* SearchBar.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SearchBar.m; sourceTree = ""; };
6F7EEBF122DC7AA6005E5A97 /* SearchSettingMultiSelectionCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SearchSettingMultiSelectionCell.h; sourceTree = ""; };
6F7EEBF222DC7AA6005E5A97 /* SearchSettingMultiSelectionCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SearchSettingMultiSelectionCell.m; sourceTree = ""; };
+ 6F7F2B04249CD78D00C37526 /* SRGLetterboxController+PlaySRG.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SRGLetterboxController+PlaySRG.h"; sourceTree = ""; };
+ 6F7F2B05249CD78D00C37526 /* SRGLetterboxController+PlaySRG.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "SRGLetterboxController+PlaySRG.m"; sourceTree = ""; };
6F80106720443230009FE197 /* PlayApplication.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PlayApplication.h; sourceTree = ""; };
6F80106820443230009FE197 /* PlayApplication.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PlayApplication.m; sourceTree = ""; };
6F80E9C021A682E60027CA2F /* TableRequestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TableRequestViewController.h; sourceTree = ""; };
@@ -2123,6 +2056,8 @@
6F9D2742203AD99C00FDE899 /* Playlist.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Playlist.m; sourceTree = ""; };
6FA5D15B1F2077B10059E4E2 /* NSString+PlaySRG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+PlaySRG.h"; sourceTree = ""; };
6FA5D15C1F2077B10059E4E2 /* NSString+PlaySRG.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+PlaySRG.m"; sourceTree = ""; };
+ 6FA6C0612458064C00518DE6 /* SRGProgramComposition+PlaySRG.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SRGProgramComposition+PlaySRG.h"; sourceTree = ""; };
+ 6FA6C0622458064C00518DE6 /* SRGProgramComposition+PlaySRG.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "SRGProgramComposition+PlaySRG.m"; sourceTree = ""; };
6FA7EC3820AB0FEB00A9C5FE /* Onboardings.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Onboardings.json; sourceTree = ""; };
6FA9ECAA20C7AA1600D3D6C2 /* NotificationsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NotificationsViewController.h; sourceTree = ""; };
6FA9ECAB20C7AA1600D3D6C2 /* NotificationsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NotificationsViewController.m; sourceTree = ""; };
@@ -2134,6 +2069,7 @@
6FAAF77A20CABA3A00BB58A3 /* Notification.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Notification.m; sourceTree = ""; };
6FAAF78620CABC0D00BB58A3 /* NSFileManager+PlaySRG.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSFileManager+PlaySRG.h"; sourceTree = ""; };
6FAAF78720CABC0D00BB58A3 /* NSFileManager+PlaySRG.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSFileManager+PlaySRG.m"; sourceTree = ""; };
+ 6FADEF9E248E6EB900A5F948 /* AirshipCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AirshipCore.framework; path = Carthage/Build/iOS/AirshipCore.framework; sourceTree = ""; };
6FAF42FD1EF7CD8A0074E033 /* HomeTopicViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeTopicViewController.h; sourceTree = ""; };
6FAF42FE1EF7CD8A0074E033 /* HomeTopicViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeTopicViewController.m; sourceTree = ""; };
6FB0AEFA217F4975009D707A /* SRGMediaComposition+PlaySRG.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SRGMediaComposition+PlaySRG.h"; sourceTree = ""; };
@@ -2150,38 +2086,12 @@
6FBA2ECF20D11A65005EB21D /* Application-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Application-Info.plist"; sourceTree = ""; };
6FBF243D2148232A00E576A2 /* SRGDiagnostics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SRGDiagnostics.framework; path = Carthage/Build/iOS/Static/SRGDiagnostics.framework; sourceTree = ""; };
6FBF24432148238300E576A2 /* SRGDiagnostics.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = SRGDiagnostics.bundle; path = Carthage/Build/iOS/Static/SRGDiagnostics.framework/SRGDiagnostics.bundle; sourceTree = ""; };
+ 6FC0C693245FF06C00B44CAE /* ProgramHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProgramHeaderView.m; sourceTree = ""; };
+ 6FC0C694245FF06D00B44CAE /* ProgramHeaderView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ProgramHeaderView.xib; sourceTree = ""; };
6FC1FA862292E3460036CB34 /* NSSet+PlaySRG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSSet+PlaySRG.h"; sourceTree = ""; };
6FC1FA872292E3460036CB34 /* NSSet+PlaySRG.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSSet+PlaySRG.m"; sourceTree = ""; };
6FC886691EC58BD5000BC3FF /* SRGProgram+PlaySRG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SRGProgram+PlaySRG.h"; sourceTree = ""; };
6FC8866A1EC58BD5000BC3FF /* SRGProgram+PlaySRG.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SRGProgram+PlaySRG.m"; sourceTree = ""; };
- 6FCB57421EC2047B0015CAB7 /* override_artwork_rete_due.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_rete_due.pdf; sourceTree = ""; };
- 6FCB57431EC2047B0015CAB7 /* override_artwork_rete_tre.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_rete_tre.pdf; sourceTree = ""; };
- 6FCB57441EC2047B0015CAB7 /* override_artwork_rete_uno.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_rete_uno.pdf; sourceTree = ""; };
- 6FCB57451EC2047B0015CAB7 /* override_default_rete_due.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_rete_due.pdf; sourceTree = ""; };
- 6FCB57461EC2047B0015CAB7 /* override_default_rete_tre.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_rete_tre.pdf; sourceTree = ""; };
- 6FCB57471EC2047B0015CAB7 /* override_default_rete_uno.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_rete_uno.pdf; sourceTree = ""; };
- 6FCB574F1EC204900015CAB7 /* override_artwork_radio_rtr.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_radio_rtr.pdf; sourceTree = ""; };
- 6FCB57501EC204900015CAB7 /* override_default_radio_rtr.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_radio_rtr.pdf; sourceTree = ""; };
- 6FCB57541EC2049C0015CAB7 /* override_artwork_couleur3.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_couleur3.pdf; sourceTree = ""; };
- 6FCB57551EC2049C0015CAB7 /* override_artwork_espace2.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_espace2.pdf; sourceTree = ""; };
- 6FCB57561EC2049C0015CAB7 /* override_artwork_la1ere.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_la1ere.pdf; sourceTree = ""; };
- 6FCB57571EC2049C0015CAB7 /* override_artwork_option_musique.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_option_musique.pdf; sourceTree = ""; };
- 6FCB57581EC2049C0015CAB7 /* override_default_couleur3.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_couleur3.pdf; sourceTree = ""; };
- 6FCB57591EC2049C0015CAB7 /* override_default_espace2.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_espace2.pdf; sourceTree = ""; };
- 6FCB575A1EC2049C0015CAB7 /* override_default_la1ere.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_la1ere.pdf; sourceTree = ""; };
- 6FCB575B1EC2049C0015CAB7 /* override_default_option_musique.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_option_musique.pdf; sourceTree = ""; };
- 6FCB57651EC204A80015CAB7 /* override_artwork_virus.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_virus.pdf; sourceTree = ""; };
- 6FCB57661EC204A80015CAB7 /* override_artwork_srf1.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_srf1.pdf; sourceTree = ""; };
- 6FCB57671EC204A80015CAB7 /* override_artwork_srf_musikwelle.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_srf_musikwelle.pdf; sourceTree = ""; };
- 6FCB57681EC204A80015CAB7 /* override_artwork_srf2.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_srf2.pdf; sourceTree = ""; };
- 6FCB57691EC204A80015CAB7 /* override_artwork_srf3.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_srf3.pdf; sourceTree = ""; };
- 6FCB576A1EC204A80015CAB7 /* override_artwork_srf4.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_artwork_srf4.pdf; sourceTree = ""; };
- 6FCB57701EC204A80015CAB7 /* override_default_virus.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_virus.pdf; sourceTree = ""; };
- 6FCB57711EC204A80015CAB7 /* override_default_srf1.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_srf1.pdf; sourceTree = ""; };
- 6FCB57731EC204A80015CAB7 /* override_default_srf_musikwelle.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_srf_musikwelle.pdf; sourceTree = ""; };
- 6FCB57751EC204A80015CAB7 /* override_default_srf2.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_srf2.pdf; sourceTree = ""; };
- 6FCB57761EC204A80015CAB7 /* override_default_srf3.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_srf3.pdf; sourceTree = ""; };
- 6FCB57771EC204A80015CAB7 /* override_default_srf4.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = override_default_srf4.pdf; sourceTree = ""; };
6FD2A35323C7628000456DCB /* ForegroundTimer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ForegroundTimer.m; sourceTree = ""; };
6FD2A35423C7628000456DCB /* ForegroundTimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ForegroundTimer.h; sourceTree = ""; };
6FD2CBC21DD19B0200B44958 /* placeholder_media-180.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "placeholder_media-180.pdf"; sourceTree = ""; };
@@ -2190,6 +2100,10 @@
6FD633DD1FFBC0BE00875BE5 /* GoogleCastMiniPlayerView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GoogleCastMiniPlayerView.xib; sourceTree = ""; };
6FD633E81FFD151000875BE5 /* MiniPlayerView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MiniPlayerView.h; sourceTree = ""; };
6FD633E91FFD151000875BE5 /* MiniPlayerView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MiniPlayerView.m; sourceTree = ""; };
+ 6FD68616246052A100B8018A /* GradientView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GradientView.h; sourceTree = ""; };
+ 6FD68617246052A100B8018A /* GradientView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GradientView.m; sourceTree = ""; };
+ 6FD6861D2460670600B8018A /* Channel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Channel.h; sourceTree = ""; };
+ 6FD6861E2460670600B8018A /* Channel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Channel.m; sourceTree = ""; };
6FD88F7422D3618F008859EF /* SearchSettingsHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SearchSettingsHeaderView.h; sourceTree = ""; };
6FD88F7522D3618F008859EF /* SearchSettingsHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SearchSettingsHeaderView.m; sourceTree = ""; };
6FD88F7622D3618F008859EF /* SearchSettingsHeaderView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SearchSettingsHeaderView.xib; sourceTree = ""; };
@@ -2218,6 +2132,11 @@
6FE1B4961DCB84F00094D5BA /* AnalyticsConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AnalyticsConstants.m; sourceTree = ""; };
6FE1B9171FAC34D600A58F3B /* ContentInsets.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ContentInsets.h; sourceTree = ""; };
6FE1B9181FAC34D600A58F3B /* ContentInsets.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ContentInsets.m; sourceTree = ""; };
+ 6FE2873A2481448C00358CFF /* SongsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SongsViewController.h; sourceTree = ""; };
+ 6FE2873B2481448C00358CFF /* SongsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SongsViewController.m; sourceTree = ""; };
+ 6FE2876B2481687A00358CFF /* SongTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SongTableViewCell.h; sourceTree = ""; };
+ 6FE2876C2481687A00358CFF /* SongTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SongTableViewCell.m; sourceTree = ""; };
+ 6FE28772248168A100358CFF /* SongTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SongTableViewCell.xib; sourceTree = ""; };
6FE686DF1EB9D57400067D40 /* ChannelService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChannelService.h; sourceTree = ""; };
6FE686E01EB9D57400067D40 /* ChannelService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChannelService.m; sourceTree = ""; };
6FEC91A721A6B39A00AA50C8 /* TableLoadMoreFooterView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TableLoadMoreFooterView.h; sourceTree = ""; };
@@ -2326,6 +2245,7 @@
6F5392BF2248DB6F0002BF87 /* YYWebImage.framework in Frameworks */,
6F5392A92248CF470002BF87 /* UICKeyChainStore.framework in Frameworks */,
6F5392992248C33E0002BF87 /* DZNEmptyDataSet.framework in Frameworks */,
+ 6FADEF9F248E6EB900A5F948 /* AirshipCore.framework in Frameworks */,
6F340F45220DA7E900778CA3 /* SRGUserData.framework in Frameworks */,
6F1A95F2216DFA0D00DB15AA /* SRGIdentity.framework in Frameworks */,
6FBF243E2148232B00E576A2 /* SRGDiagnostics.framework in Frameworks */,
@@ -2338,6 +2258,7 @@
6F0C99682121FA6B00073AB6 /* SRGAnalytics_DataProvider.framework in Frameworks */,
080731B72224543200AF9C83 /* SRGAnalytics_Identity.framework in Frameworks */,
6F0C99692121FA6B00073AB6 /* SRGAnalytics_MediaPlayer.framework in Frameworks */,
+ 6F2AB1A92487C16A009D9FBC /* Aiolos.framework in Frameworks */,
6F0C996A2121FA6B00073AB6 /* SRGAnalytics.framework in Frameworks */,
6F0C996B2121FA6B00073AB6 /* SRGAppearance.framework in Frameworks */,
6F0C996D2121FA6B00073AB6 /* SRGDataProvider.framework in Frameworks */,
@@ -2364,6 +2285,7 @@
6F5392C02248DB850002BF87 /* YYWebImage.framework in Frameworks */,
6F5392AA2248CF5B0002BF87 /* UICKeyChainStore.framework in Frameworks */,
6F53929A2248C35B0002BF87 /* DZNEmptyDataSet.framework in Frameworks */,
+ 6FADEFA1248E6EDE00A5F948 /* AirshipCore.framework in Frameworks */,
6F340F46220DA7FC00778CA3 /* SRGUserData.framework in Frameworks */,
6F1A95F0216DF9EA00DB15AA /* SRGIdentity.framework in Frameworks */,
6FBF243F2148234100E576A2 /* SRGDiagnostics.framework in Frameworks */,
@@ -2376,6 +2298,7 @@
6F0C995A2121FA5E00073AB6 /* SRGAnalytics_DataProvider.framework in Frameworks */,
080731B6222453EC00AF9C83 /* SRGAnalytics_Identity.framework in Frameworks */,
6F0C995B2121FA5E00073AB6 /* SRGAnalytics_MediaPlayer.framework in Frameworks */,
+ 6F2AB1AB2487C181009D9FBC /* Aiolos.framework in Frameworks */,
6F0C995C2121FA5E00073AB6 /* SRGAnalytics.framework in Frameworks */,
6F0C995D2121FA5E00073AB6 /* SRGAppearance.framework in Frameworks */,
6F0C995F2121FA5E00073AB6 /* SRGDataProvider.framework in Frameworks */,
@@ -2402,6 +2325,7 @@
6F5392C12248DB960002BF87 /* YYWebImage.framework in Frameworks */,
6F5392AB2248CF740002BF87 /* UICKeyChainStore.framework in Frameworks */,
6F53929B2248C36C0002BF87 /* DZNEmptyDataSet.framework in Frameworks */,
+ 6FADEFA3248E6EEF00A5F948 /* AirshipCore.framework in Frameworks */,
6F340F47220DA80B00778CA3 /* SRGUserData.framework in Frameworks */,
6F1A95F3216DFC3900DB15AA /* SRGIdentity.framework in Frameworks */,
6FBF24402148234D00E576A2 /* SRGDiagnostics.framework in Frameworks */,
@@ -2414,6 +2338,7 @@
6F0C994C2121FA5200073AB6 /* SRGAnalytics_DataProvider.framework in Frameworks */,
080731B82224544A00AF9C83 /* SRGAnalytics_Identity.framework in Frameworks */,
6F0C994D2121FA5200073AB6 /* SRGAnalytics_MediaPlayer.framework in Frameworks */,
+ 6F2AB1AD2487C190009D9FBC /* Aiolos.framework in Frameworks */,
6F0C994E2121FA5200073AB6 /* SRGAnalytics.framework in Frameworks */,
6F0C994F2121FA5200073AB6 /* SRGAppearance.framework in Frameworks */,
6F0C99512121FA5200073AB6 /* SRGDataProvider.framework in Frameworks */,
@@ -2440,6 +2365,7 @@
6F5392C22248DBA70002BF87 /* YYWebImage.framework in Frameworks */,
6F5392AC2248CF8C0002BF87 /* UICKeyChainStore.framework in Frameworks */,
6F53929C2248C3810002BF87 /* DZNEmptyDataSet.framework in Frameworks */,
+ 6FADEFA5248E6EFD00A5F948 /* AirshipCore.framework in Frameworks */,
6F340F48220DA81900778CA3 /* SRGUserData.framework in Frameworks */,
6F1A95F4216DFC5800DB15AA /* SRGIdentity.framework in Frameworks */,
6FBF24412148235800E576A2 /* SRGDiagnostics.framework in Frameworks */,
@@ -2452,6 +2378,7 @@
6F0C993E2121FA4600073AB6 /* SRGAnalytics_DataProvider.framework in Frameworks */,
080731B92224546200AF9C83 /* SRGAnalytics_Identity.framework in Frameworks */,
6F0C993F2121FA4600073AB6 /* SRGAnalytics_MediaPlayer.framework in Frameworks */,
+ 6F2AB1AF2487C19C009D9FBC /* Aiolos.framework in Frameworks */,
6F0C99402121FA4600073AB6 /* SRGAnalytics.framework in Frameworks */,
6F0C99412121FA4600073AB6 /* SRGAppearance.framework in Frameworks */,
6F0C99432121FA4600073AB6 /* SRGDataProvider.framework in Frameworks */,
@@ -2478,6 +2405,7 @@
6F5392C32248DBB80002BF87 /* YYWebImage.framework in Frameworks */,
6F5392AD2248CF9D0002BF87 /* UICKeyChainStore.framework in Frameworks */,
6F53929D2248C3940002BF87 /* DZNEmptyDataSet.framework in Frameworks */,
+ 6FADEFA7248E6F0A00A5F948 /* AirshipCore.framework in Frameworks */,
6F340F49220DA83300778CA3 /* SRGUserData.framework in Frameworks */,
6F1A95F5216DFC6600DB15AA /* SRGIdentity.framework in Frameworks */,
6FBF24422148236400E576A2 /* SRGDiagnostics.framework in Frameworks */,
@@ -2490,6 +2418,7 @@
6F0C99312121F9E100073AB6 /* SRGMediaPlayer.framework in Frameworks */,
6F0C99322121F9E100073AB6 /* SRGLetterbox.framework in Frameworks */,
6F0C99332121F9E100073AB6 /* SRGAnalytics_DataProvider.framework in Frameworks */,
+ 6F2AB1B12487C1A8009D9FBC /* Aiolos.framework in Frameworks */,
080731BA2224547A00AF9C83 /* SRGAnalytics_Identity.framework in Frameworks */,
6F0C99362121F9E100073AB6 /* SRGAnalytics_MediaPlayer.framework in Frameworks */,
6F0C99342121F9E100073AB6 /* SRGAnalytics.framework in Frameworks */,
@@ -2605,22 +2534,6 @@
path = Downloads;
sourceTree = "";
};
- 0837CEBA1D3FD6E600A1E089 /* Fonts */ = {
- isa = PBXGroup;
- children = (
- 0837CEBB1D3FD6E600A1E089 /* FontAwesome.otf */,
- 0837CEBC1D3FD6E600A1E089 /* SRGSSRType_Bd.ttf */,
- 0837CEBD1D3FD6E600A1E089 /* SRGSSRType_BdIt.ttf */,
- 0837CEBE1D3FD6E600A1E089 /* SRGSSRType_He.ttf */,
- 0837CEBF1D3FD6E600A1E089 /* SRGSSRType_It.ttf */,
- 0837CEC01D3FD6E600A1E089 /* SRGSSRType_Lt.ttf */,
- 0837CEC11D3FD6E600A1E089 /* SRGSSRType_Md.ttf */,
- 0837CEC21D3FD6E600A1E089 /* SRGSSRType_Rg.ttf */,
- 0837CEC31D3FD6E600A1E089 /* SRGSSRType_Serif_Rg.ttf */,
- );
- path = Fonts;
- sourceTree = "";
- };
086320F22258C6CF00C719A6 /* WatchLater */ = {
isa = PBXGroup;
children = (
@@ -2648,6 +2561,8 @@
087584CF23A0008500FA7207 /* ApplicationSectionInfo.m */,
6FE686DF1EB9D57400067D40 /* ChannelService.h */,
6FE686E01EB9D57400067D40 /* ChannelService.m */,
+ 6F56F9F2247C407000B2387B /* ChannelServiceSetup.h */,
+ 6F56F9F3247C407000B2387B /* ChannelServiceSetup.m */,
6FE1B9171FAC34D600A58F3B /* ContentInsets.h */,
6FE1B9181FAC34D600A58F3B /* ContentInsets.m */,
0821D53C227F5ED300FC091F /* DeepLinkService.h */,
@@ -2678,8 +2593,6 @@
08BDB5B1228D520000335898 /* PushService+Private.h */,
6F00875B219AA888004BD6FF /* StoreReview.h */,
6F00875C219AA888004BD6FF /* StoreReview.m */,
- 089EA017201148D70070E11A /* TimerTarget.h */,
- 089EA016201148D70070E11A /* TimerTarget.m */,
);
path = Helpers;
sourceTree = "";
@@ -2812,6 +2725,8 @@
children = (
08AA551B1D49EBF600C5026E /* ApplicationConfiguration.h */,
08AA551C1D49EBF600C5026E /* ApplicationConfiguration.m */,
+ 6FD6861D2460670600B8018A /* Channel.h */,
+ 6FD6861E2460670600B8018A /* Channel.m */,
0801E0791D4A4A810008021E /* RadioChannel.h */,
0801E07A1D4A4A810008021E /* RadioChannel.m */,
088899442077627900242654 /* TVChannel.h */,
@@ -2924,7 +2839,6 @@
children = (
08C68E991D38DEA100BB8AAA /* Apps */,
0865F616223C7684007DE03B /* Data */,
- 0837CEBA1D3FD6E600A1E089 /* Fonts */,
08C691121D3907E500BB8AAA /* Images */,
6F7C89CD20AAFC4F00255A54 /* Onboardings */,
6F5866491DD226EE005DAFE4 /* Settings.bundle */,
@@ -3019,10 +2933,18 @@
6F6B642D21A70FAA00E207FC /* HomeStatusHeaderView.xib */,
08AA55B91D49EFBD00C5026E /* HomeTableViewCell.h */,
08AA55BA1D49EFBD00C5026E /* HomeTableViewCell.m */,
+ 6F167F4F248198DC00B8E7F1 /* HomeTopicCollectionViewCell.h */,
+ 6F167F50248198DC00B8E7F1 /* HomeTopicCollectionViewCell.m */,
+ 6F167F56248199BF00B8E7F1 /* HomeTopicCollectionViewCell.xib */,
+ 6F167F48248197C700B8E7F1 /* HomeTopicListTableViewCell.h */,
+ 6F167F49248197C700B8E7F1 /* HomeTopicListTableViewCell.m */,
6FAF42FD1EF7CD8A0074E033 /* HomeTopicViewController.h */,
6FAF42FE1EF7CD8A0074E033 /* HomeTopicViewController.m */,
08C68ECF1D38DEA100BB8AAA /* HomeViewController.h */,
08C68ED01D38DEA100BB8AAA /* HomeViewController.m */,
+ 0887824723AD61D400629312 /* HomeLiveMediaCollectionViewCell.h */,
+ 0887824823AD61D500629312 /* HomeLiveMediaCollectionViewCell.m */,
+ 0887824923AD61D500629312 /* HomeLiveMediaCollectionViewCell.xib */,
);
path = Home;
sourceTree = "";
@@ -3038,7 +2960,6 @@
08C68F9E1D38DF8300BB8AAA /* LaunchScreen.xib */,
08C68F9A1D38DF8300BB8AAA /* Localizable.strings */,
6FB0BB3520AEF5A6007C5D87 /* Onboarding.strings */,
- 6FCB57411EC2047B0015CAB7 /* Overrides */,
6F3A47AE1DD19A5B00C79E67 /* RSIResources.xcassets */,
);
path = "Play RSI";
@@ -3055,7 +2976,6 @@
08C68FD41D38E04B00BB8AAA /* LaunchScreen.xib */,
08C68FD71D38E04B00BB8AAA /* Localizable.strings */,
6FB0BB3820AEF5B8007C5D87 /* Onboarding.strings */,
- 6FCB574E1EC204900015CAB7 /* Overrides */,
6F3A47B01DD19A6900C79E67 /* RTRResources.xcassets */,
);
path = "Play RTR";
@@ -3072,7 +2992,6 @@
08C690081D38E08C00BB8AAA /* LaunchScreen.xib */,
08C690041D38E08C00BB8AAA /* Localizable.strings */,
6FB0BB3B20AEF5C4007C5D87 /* Onboarding.strings */,
- 6FCB57531EC2049C0015CAB7 /* Overrides */,
6F3A47B21DD19A7B00C79E67 /* RTSResources.xcassets */,
);
path = "Play RTS";
@@ -3089,7 +3008,6 @@
08C6903C1D38E0BE00BB8AAA /* LaunchScreen.xib */,
08C690381D38E0BE00BB8AAA /* Localizable.strings */,
6FB0BB3E20AEF5D1007C5D87 /* Onboarding.strings */,
- 6FCB57641EC204A80015CAB7 /* Overrides */,
6F3A47B41DD19A8500C79E67 /* SRFResources.xcassets */,
);
path = "Play SRF";
@@ -3249,7 +3167,6 @@
6F475FA01EB37BC6003021EA /* ModalTransition.m */,
6F475FA11EB37BC6003021EA /* Previewing.h */,
6F4091FF22DCF43D005F3850 /* Previewing.m */,
- 6FB340D823E1A21500BC83BF /* Scrollable.h */,
6FFCB62224504C6C00D16466 /* SwimlaneCollectionViewLayout.h */,
6FFCB62324504C6C00D16466 /* SwimlaneCollectionViewLayout.m */,
6FF4D4DE23D5B07E008B981A /* UIVisualEffectView+PlaySRG.h */,
@@ -3271,9 +3188,8 @@
6F475FAB1EB37BC6003021EA /* CollectionLoadMoreFooterView.xib */,
6F88139323D85DD600A00826 /* GoogleCastBarButtonItem.h */,
6F88139423D85DD600A00826 /* GoogleCastBarButtonItem.m */,
- 0887824723AD61D400629312 /* HomeLiveMediaCollectionViewCell.h */,
- 0887824823AD61D500629312 /* HomeLiveMediaCollectionViewCell.m */,
- 0887824923AD61D500629312 /* HomeLiveMediaCollectionViewCell.xib */,
+ 6FD68616246052A100B8018A /* GradientView.h */,
+ 6FD68617246052A100B8018A /* GradientView.m */,
6F475FAC1EB37BC6003021EA /* MediaCollectionViewCell.h */,
6F475FAD1EB37BC6003021EA /* MediaCollectionViewCell.m */,
6F475FAE1EB37BC6003021EA /* MediaCollectionViewCell.xib */,
@@ -3311,6 +3227,8 @@
08A3ED001FA2612B00A517EF /* SRGDataProvider+PlaySRG.m */,
0841E70422F0953A009D8304 /* SRGDay+PlaySRG.h */,
0841E70522F0953A009D8304 /* SRGDay+PlaySRG.m */,
+ 6F7F2B04249CD78D00C37526 /* SRGLetterboxController+PlaySRG.h */,
+ 6F7F2B05249CD78D00C37526 /* SRGLetterboxController+PlaySRG.m */,
0827DA231F0D437400A31A42 /* SRGMedia+PlaySRG.h */,
0827DA241F0D437400A31A42 /* SRGMedia+PlaySRG.m */,
6FB0AEFA217F4975009D707A /* SRGMediaComposition+PlaySRG.h */,
@@ -3319,6 +3237,8 @@
08B2A5382426511700C6EED3 /* SRGModule+PlaySRG.m */,
6FC886691EC58BD5000BC3FF /* SRGProgram+PlaySRG.h */,
6FC8866A1EC58BD5000BC3FF /* SRGProgram+PlaySRG.m */,
+ 6FA6C0612458064C00518DE6 /* SRGProgramComposition+PlaySRG.h */,
+ 6FA6C0622458064C00518DE6 /* SRGProgramComposition+PlaySRG.m */,
6F7C35B323708E8A00259BE7 /* SRGResource+PlaySRG.h */,
6F7C35B423708E8A00259BE7 /* SRGResource+PlaySRG.m */,
0852539522073D5200BCF0B1 /* UIApplication+PlaySRG.h */,
@@ -3469,84 +3389,6 @@
path = Helpers;
sourceTree = "";
};
- 6FCB57411EC2047B0015CAB7 /* Overrides */ = {
- isa = PBXGroup;
- children = (
- 6F0F88581ECF0BA40060A893 /* override_artwork_la1.pdf */,
- 6F0F88591ECF0BA40060A893 /* override_artwork_la2.pdf */,
- 6FCB57421EC2047B0015CAB7 /* override_artwork_rete_due.pdf */,
- 6FCB57431EC2047B0015CAB7 /* override_artwork_rete_tre.pdf */,
- 6FCB57441EC2047B0015CAB7 /* override_artwork_rete_uno.pdf */,
- 6F0F88201ECEE69F0060A893 /* override_default_la1.pdf */,
- 6F0F88211ECEE69F0060A893 /* override_default_la2.pdf */,
- 6FCB57451EC2047B0015CAB7 /* override_default_rete_due.pdf */,
- 6FCB57461EC2047B0015CAB7 /* override_default_rete_tre.pdf */,
- 6FCB57471EC2047B0015CAB7 /* override_default_rete_uno.pdf */,
- );
- path = Overrides;
- sourceTree = "";
- };
- 6FCB574E1EC204900015CAB7 /* Overrides */ = {
- isa = PBXGroup;
- children = (
- 6FCB574F1EC204900015CAB7 /* override_artwork_radio_rtr.pdf */,
- 6F0F88681ECF0CCB0060A893 /* override_artwork_rtr_srf1.pdf */,
- 6F0F886A1ECF0CCB0060A893 /* override_artwork_rtr_srf2.pdf */,
- 6F0F88691ECF0CCB0060A893 /* override_artwork_rtr_srf_info.pdf */,
- 6FCB57501EC204900015CAB7 /* override_default_radio_rtr.pdf */,
- 6F0F88241ECEE6B30060A893 /* override_default_rtr_srf1.pdf */,
- 6F0F88261ECEE6B30060A893 /* override_default_rtr_srf2.pdf */,
- 6F0F88251ECEE6B30060A893 /* override_default_rtr_srf_info.pdf */,
- );
- path = Overrides;
- sourceTree = "";
- };
- 6FCB57531EC2049C0015CAB7 /* Overrides */ = {
- isa = PBXGroup;
- children = (
- 6FCB57541EC2049C0015CAB7 /* override_artwork_couleur3.pdf */,
- 6FCB57551EC2049C0015CAB7 /* override_artwork_espace2.pdf */,
- 6FCB57561EC2049C0015CAB7 /* override_artwork_la1ere.pdf */,
- 6FCB57571EC2049C0015CAB7 /* override_artwork_option_musique.pdf */,
- 6F0F885E1ECF0C240060A893 /* override_artwork_rts_deux.pdf */,
- 6F0F885C1ECF0C240060A893 /* override_artwork_rts_info.pdf */,
- 6F0F885D1ECF0C240060A893 /* override_artwork_rts_un.pdf */,
- 6FCB57581EC2049C0015CAB7 /* override_default_couleur3.pdf */,
- 6FCB57591EC2049C0015CAB7 /* override_default_espace2.pdf */,
- 6FCB575A1EC2049C0015CAB7 /* override_default_la1ere.pdf */,
- 6FCB575B1EC2049C0015CAB7 /* override_default_option_musique.pdf */,
- 6F0F882C1ECEE6C10060A893 /* override_default_rts_deux.pdf */,
- 6F0F882A1ECEE6C10060A893 /* override_default_rts_info.pdf */,
- 6F0F882B1ECEE6C10060A893 /* override_default_rts_un.pdf */,
- );
- path = Overrides;
- sourceTree = "";
- };
- 6FCB57641EC204A80015CAB7 /* Overrides */ = {
- isa = PBXGroup;
- children = (
- 6FCB57671EC204A80015CAB7 /* override_artwork_srf_musikwelle.pdf */,
- 6FCB57661EC204A80015CAB7 /* override_artwork_srf1.pdf */,
- 6FCB57681EC204A80015CAB7 /* override_artwork_srf2.pdf */,
- 6FCB57691EC204A80015CAB7 /* override_artwork_srf3.pdf */,
- 6FCB576A1EC204A80015CAB7 /* override_artwork_srf4.pdf */,
- 6F0F88631ECF0CB20060A893 /* override_artwork_tv_srf_info.pdf */,
- 6F0F88621ECF0CB20060A893 /* override_artwork_tv_srf1.pdf */,
- 6F0F88641ECF0CB20060A893 /* override_artwork_tv_srf2.pdf */,
- 6FCB57651EC204A80015CAB7 /* override_artwork_virus.pdf */,
- 6FCB57731EC204A80015CAB7 /* override_default_srf_musikwelle.pdf */,
- 6FCB57711EC204A80015CAB7 /* override_default_srf1.pdf */,
- 6FCB57751EC204A80015CAB7 /* override_default_srf2.pdf */,
- 6FCB57761EC204A80015CAB7 /* override_default_srf3.pdf */,
- 6FCB57771EC204A80015CAB7 /* override_default_srf4.pdf */,
- 6F0F88311ECEE6CC0060A893 /* override_default_tv_srf_info.pdf */,
- 6F0F88301ECEE6CC0060A893 /* override_default_tv_srf1.pdf */,
- 6F0F88321ECEE6CC0060A893 /* override_default_tv_srf2.pdf */,
- 6FCB57701EC204A80015CAB7 /* override_default_virus.pdf */,
- );
- path = Overrides;
- sourceTree = "";
- };
6FDF08C4218B126700B2AF2C /* Model */ = {
isa = PBXGroup;
children = (
@@ -3606,6 +3448,8 @@
E65311E31D3E6FD100B4B8BB /* Frameworks */ = {
isa = PBXGroup;
children = (
+ 6FADEF9E248E6EB900A5F948 /* AirshipCore.framework */,
+ 6F2AB1A82487C16A009D9FBC /* Aiolos.framework */,
6FE01B032360358C008EBB27 /* AppCenter.framework */,
6FE01B042360358D008EBB27 /* AppCenterCrashes.framework */,
6FE01B052360358D008EBB27 /* AppCenterDistribute.framework */,
@@ -3664,12 +3508,25 @@
E66BEC191DA7FCED00AD4450 /* MediaPlayerViewController.h */,
E66BEC1A1DA7FCED00AD4450 /* MediaPlayerViewController.m */,
E66BEC1B1DA7FCED00AD4450 /* MediaPlayerViewController.storyboard */,
+ 6F3E6A9224978FC8004B26D6 /* MediaPlayerViewController+Private.h */,
+ 6F2AB1B32487C31C009D9FBC /* MediaPlayerViewController+SongPanel.swift */,
6FB3C1A51DBCE783008160B4 /* MediaPreviewViewController.h */,
6FB3C1A61DBCE783008160B4 /* MediaPreviewViewController.m */,
6FB3C1A71DBCE783008160B4 /* MediaPreviewViewController.storyboard */,
+ 6F5CAC86245FF04C0058F9B0 /* ProgramHeaderView.h */,
+ 6FC0C693245FF06C00B44CAE /* ProgramHeaderView.m */,
+ 6FC0C694245FF06D00B44CAE /* ProgramHeaderView.xib */,
+ 6F3B021F245AAE1B00C5A8D7 /* ProgramTableViewCell.h */,
+ 6F3B0220245AAE1B00C5A8D7 /* ProgramTableViewCell.m */,
+ 6F3B0226245AAF6B00C5A8D7 /* ProgramTableViewCell.xib */,
6F5F4FC11DB10CFD0011CCA3 /* RelatedContentView.h */,
6F5F4FC21DB10CFD0011CCA3 /* RelatedContentView.m */,
6F5F4FC31DB10CFD0011CCA3 /* RelatedContentView.xib */,
+ 6FE2873A2481448C00358CFF /* SongsViewController.h */,
+ 6FE2873B2481448C00358CFF /* SongsViewController.m */,
+ 6FE2876B2481687A00358CFF /* SongTableViewCell.h */,
+ 6FE2876C2481687A00358CFF /* SongTableViewCell.m */,
+ 6FE28772248168A100358CFF /* SongTableViewCell.xib */,
);
path = Player;
sourceTree = "";
@@ -4323,57 +4180,44 @@
files = (
6FD88F7C22D3618F008859EF /* SearchSettingsHeaderView.xib in Resources */,
08C690551D38E0BE00BB8AAA /* iTunesArtwork@2x in Resources */,
+ 6FC0C69A245FF06D00B44CAE /* ProgramHeaderView.xib in Resources */,
E6DB5F2E1D66E1640057094B /* ShowCollectionViewCell.xib in Resources */,
- 0837CECB1D3FD6E600A1E089 /* SRGSSRType_Rg.ttf in Resources */,
6F3A47B51DD19A8500C79E67 /* SRFResources.xcassets in Resources */,
+ 6FE28773248168A100358CFF /* SongTableViewCell.xib in Resources */,
6F1938361EFBFEBC0017B1D1 /* ApplicationConfiguration.json in Resources */,
6F340F4B220DA86B00778CA3 /* SRGUserData.bundle in Resources */,
081DAA261E0C1E9700018623 /* DownloadFooterSectionView.xib in Resources */,
6F0C99B02121FBD800073AB6 /* SRGLogger.bundle in Resources */,
- 6F0F88991ECF0CE50060A893 /* override_artwork_srf_musikwelle.pdf in Resources */,
0863210F2258C6D000C719A6 /* WatchLaterTableViewCell.xib in Resources */,
081220AD1DD079BB00BF8326 /* DownloadTableViewCell.xib in Resources */,
6F4760041EB37BC6003021EA /* MediaCollectionViewCell.xib in Resources */,
E64BA3FB1D4A587E002C10D5 /* WebViewController.storyboard in Resources */,
08754F4B201BB01000458F3A /* InfoPlist.strings in Resources */,
0832BF1522BD6BB000EFFFE6 /* SearchLoadingCollectionViewCell.xib in Resources */,
- 0837CEC61D3FD6E600A1E089 /* SRGSSRType_BdIt.ttf in Resources */,
+ 6F3B0227245AAF6B00C5A8D7 /* ProgramTableViewCell.xib in Resources */,
6F40920D22DCFE2B005F3850 /* MostSearchedShowCollectionViewCell.xib in Resources */,
6F0A7F0520AC0FD800DF6723 /* OnboardingViewController.storyboard in Resources */,
- 6F0F88951ECF0CE50060A893 /* override_artwork_tv_srf1.pdf in Resources */,
- 0837CEC51D3FD6E600A1E089 /* SRGSSRType_Bd.ttf in Resources */,
6FE01B1623603E92008EBB27 /* AppCenterDistributeResources.bundle in Resources */,
6F0C99A12121FBD800073AB6 /* SRGNetwork.bundle in Resources */,
0837CEAA1D3F7B5D00A1E089 /* HomeMediaCollectionViewCell.xib in Resources */,
- 6F0F88A61ECF0CE50060A893 /* override_default_srf4.pdf in Resources */,
6F6B643321A70FAA00E207FC /* HomeStatusHeaderView.xib in Resources */,
6FD633E31FFBC0BE00875BE5 /* GoogleCastMiniPlayerView.xib in Resources */,
6F0C998D2121FBD800073AB6 /* SRGMediaPlayer.bundle in Resources */,
- 0837CECC1D3FD6E600A1E089 /* SRGSSRType_Serif_Rg.ttf in Resources */,
6FF7BBB222A7901900FA758A /* SearchSettingsViewController.storyboard in Resources */,
0875850E23A0025F00FA7207 /* ProfileAccountHeaderView.xib in Resources */,
6F7C89CF20AAFC6100255A54 /* Onboardings.xcassets in Resources */,
6FB3C1AD1DBCE783008160B4 /* MediaPreviewViewController.storyboard in Resources */,
- 0837CEC41D3FD6E600A1E089 /* FontAwesome.otf in Resources */,
6FB0BB4020AEF5D1007C5D87 /* Onboarding.strings in Resources */,
6F12E4E722D8676600BC1718 /* SearchHeaderView.xib in Resources */,
08C691281D39089700BB8AAA /* CommonImages.xcassets in Resources */,
- 6F0F88981ECF0CE50060A893 /* override_artwork_virus.pdf in Resources */,
6F0C99972121FBD800073AB6 /* SRGAppearance.bundle in Resources */,
E6E2DF2C1D6AD33400791EDE /* ShowHeaderView.xib in Resources */,
- 6F0F88971ECF0CE50060A893 /* override_artwork_srf1.pdf in Resources */,
08564B231D41112800381549 /* HomeSectionHeaderView.xib in Resources */,
08DADF8C20D92D6500291AD1 /* placeholder_notification-180.pdf in Resources */,
- 0837CEC71D3FD6E600A1E089 /* SRGSSRType_He.ttf in Resources */,
6F93DE1320AE9A9900B71572 /* OnboardingsViewController.storyboard in Resources */,
- 6F0F88A01ECF0CE50060A893 /* override_default_srf1.pdf in Resources */,
6FBF24442148238300E576A2 /* SRGDiagnostics.bundle in Resources */,
- 6F0F889A1ECF0CE50060A893 /* override_artwork_srf2.pdf in Resources */,
08C6904B1D38E0BE00BB8AAA /* Localizable.strings in Resources */,
0804917622832C5D00E4CEC2 /* HomeShowCollectionViewCell.xib in Resources */,
- 6F0F889F1ECF0CE50060A893 /* override_default_tv_srf_info.pdf in Resources */,
- 6F0F889E1ECF0CE50060A893 /* override_default_tv_srf1.pdf in Resources */,
- 6F0F889B1ECF0CE50060A893 /* override_artwork_srf3.pdf in Resources */,
6F58664A1DD226EE005DAFE4 /* Settings.bundle in Resources */,
08C690501D38E0BE00BB8AAA /* iTunesArtwork in Resources */,
6F12E4D522D866E600BC1718 /* MostSearchedShowsHeaderView.xib in Resources */,
@@ -4382,35 +4226,25 @@
08DD9D5A1FFE6EDB00115906 /* ModuleHeaderView.xib in Resources */,
082590F11F054A6A00BB527C /* HomeMediaCollectionHeaderView.xib in Resources */,
E66BEC211DA7FCED00AD4450 /* MediaPlayerViewController.storyboard in Resources */,
- 6F0F88A41ECF0CE50060A893 /* override_default_srf3.pdf in Resources */,
6F2961FC2006186100CAB0E4 /* placeholder_media_list-180.pdf in Resources */,
0828BB3A22E62831009617A7 /* parsePlayUrl.js in Resources */,
6F5F4FC91DB10CFD0011CCA3 /* RelatedContentView.xib in Resources */,
6F0C99922121FBD800073AB6 /* SRGLetterbox.bundle in Resources */,
086BDE161EA63D3800965F45 /* PlayMiniPlayerView.xib in Resources */,
- 6F0F88961ECF0CE50060A893 /* override_artwork_tv_srf_info.pdf in Resources */,
6F4EA13D1EE034E200BEC4DA /* Accessibility.strings in Resources */,
08602BFC2213786B0081D166 /* HomeShowsAccessTableViewCell.xib in Resources */,
- 6F0F88A11ECF0CE50060A893 /* override_default_virus.pdf in Resources */,
08C6905A1D38E0BE00BB8AAA /* LaunchScreen.xib in Resources */,
0887824F23AD61D500629312 /* HomeLiveMediaCollectionViewCell.xib in Resources */,
6F0C99AB2121FBD800073AB6 /* SRGDataProvider.bundle in Resources */,
- 6F0F88A21ECF0CE50060A893 /* override_default_srf_musikwelle.pdf in Resources */,
- 0837CECA1D3FD6E600A1E089 /* SRGSSRType_Md.ttf in Resources */,
- 6F0F88A51ECF0CE50060A893 /* override_default_tv_srf2.pdf in Resources */,
6FD2CBC31DD19B0200B44958 /* placeholder_media-180.pdf in Resources */,
084F94B522D3B77700D2D3A5 /* SearchSettingMultiSelectionViewController.storyboard in Resources */,
- 6F0F889D1ECF0CE50060A893 /* override_artwork_srf4.pdf in Resources */,
6FA9ECC620C7AD9C00D3D6C2 /* NotificationTableViewCell.xib in Resources */,
6F47600E1EB37BC6003021EA /* TranslucentTitleHeaderView.xib in Resources */,
6F0C999C2121FBD800073AB6 /* SRGAnalytics.bundle in Resources */,
- 6F0F88A31ECF0CE50060A893 /* override_default_srf2.pdf in Resources */,
6F1A95EB216DF98D00DB15AA /* SRGIdentity.bundle in Resources */,
+ 6F167F57248199BF00B8E7F1 /* HomeTopicCollectionViewCell.xib in Resources */,
0875851D23A0025F00FA7207 /* ProfileViewController.storyboard in Resources */,
- 0837CEC91D3FD6E600A1E089 /* SRGSSRType_Lt.ttf in Resources */,
- 0837CEC81D3FD6E600A1E089 /* SRGSSRType_It.ttf in Resources */,
6F475FFA1EB37BC6003021EA /* CollectionLoadMoreFooterView.xib in Resources */,
- 6F0F889C1ECF0CE50060A893 /* override_artwork_tv_srf2.pdf in Resources */,
6FA7EC3920AB0FEB00A9C5FE /* Onboardings.json in Resources */,
6F12DB4B21A3EFBF0054879D /* HistoryTableViewCell.xib in Resources */,
E694A9FA1D65F02700372DF0 /* CalendarViewController.storyboard in Resources */,
@@ -4423,12 +4257,12 @@
files = (
6F3A47B31DD19A7B00C79E67 /* RTSResources.xcassets in Resources */,
08C691291D39089700BB8AAA /* CommonImages.xcassets in Resources */,
+ 6FC0C69B245FF06D00B44CAE /* ProgramHeaderView.xib in Resources */,
E6DB5F2F1D66E1640057094B /* ShowCollectionViewCell.xib in Resources */,
6F0A7F0620AC0FD800DF6723 /* OnboardingViewController.storyboard in Resources */,
- 0837CED41D3FDAF900A1E089 /* SRGSSRType_Rg.ttf in Resources */,
+ 6FE28774248168A100358CFF /* SongTableViewCell.xib in Resources */,
082590F31F054ACD00BB527C /* HomeMediaCollectionHeaderView.xib in Resources */,
6FD88F7D22D3618F008859EF /* SearchSettingsHeaderView.xib in Resources */,
- 6F0F888E1ECF0CDD0060A893 /* override_default_la1ere.pdf in Resources */,
081DAA271E0C1FC700018623 /* DownloadFooterSectionView.xib in Resources */,
6FE01B1723603E92008EBB27 /* AppCenterDistributeResources.bundle in Resources */,
6F12E4D822D866F200BC1718 /* MostSearchedShowsHeaderView.xib in Resources */,
@@ -4438,38 +4272,26 @@
081220B11DD07B7A00BF8326 /* DownloadTableViewCell.xib in Resources */,
6F4760051EB37BC6003021EA /* MediaCollectionViewCell.xib in Resources */,
E64BA4001D4A588B002C10D5 /* WebViewController.storyboard in Resources */,
+ 6F3B0228245AAF6B00C5A8D7 /* ProgramTableViewCell.xib in Resources */,
6FBF24452148238300E576A2 /* SRGDiagnostics.bundle in Resources */,
6F12E4E822D8676600BC1718 /* SearchHeaderView.xib in Resources */,
- 0837CECF1D3FDAF900A1E089 /* SRGSSRType_BdIt.ttf in Resources */,
6F93DE1420AE9A9900B71572 /* OnboardingsViewController.storyboard in Resources */,
- 0837CECE1D3FDAF900A1E089 /* SRGSSRType_Bd.ttf in Resources */,
0837CEAC1D3FAEE100A1E089 /* HomeMediaCollectionViewCell.xib in Resources */,
6F0C99B12121FBD800073AB6 /* SRGLogger.bundle in Resources */,
6FA9ECC720C7AD9C00D3D6C2 /* NotificationTableViewCell.xib in Resources */,
- 6F0F88871ECF0CDD0060A893 /* override_artwork_la1ere.pdf in Resources */,
- 0837CED51D3FDAF900A1E089 /* SRGSSRType_Serif_Rg.ttf in Resources */,
6F2961FD2006186100CAB0E4 /* placeholder_media_list-180.pdf in Resources */,
6F4EA13A1EE034D500BEC4DA /* Accessibility.strings in Resources */,
0875850F23A0025F00FA7207 /* ProfileAccountHeaderView.xib in Resources */,
6FB3C1AE1DBCE783008160B4 /* MediaPreviewViewController.storyboard in Resources */,
0804917722832C5D00E4CEC2 /* HomeShowCollectionViewCell.xib in Resources */,
6FA7EC3A20AB0FEB00A9C5FE /* Onboardings.json in Resources */,
- 6F0F88891ECF0CDD0060A893 /* override_artwork_rts_deux.pdf in Resources */,
- 0837CECD1D3FDAF900A1E089 /* FontAwesome.otf in Resources */,
+ 6F167F58248199BF00B8E7F1 /* HomeTopicCollectionViewCell.xib in Resources */,
086F8D6022984B29001BE2F4 /* FavoriteTableViewCell.xib in Resources */,
08DADF8D20D92D6500291AD1 /* placeholder_notification-180.pdf in Resources */,
- 6F0F888D1ECF0CDD0060A893 /* override_default_rts_un.pdf in Resources */,
- 6F0F888C1ECF0CDD0060A893 /* override_default_couleur3.pdf in Resources */,
6FD633E41FFBC0BE00875BE5 /* GoogleCastMiniPlayerView.xib in Resources */,
- 6F0F88881ECF0CDD0060A893 /* override_artwork_espace2.pdf in Resources */,
E6E2DF2D1D6AD33400791EDE /* ShowHeaderView.xib in Resources */,
08564B241D41112800381549 /* HomeSectionHeaderView.xib in Resources */,
- 0837CED01D3FDAF900A1E089 /* SRGSSRType_He.ttf in Resources */,
08C690181D38E08C00BB8AAA /* iTunesArtwork@2x in Resources */,
- 6F0F888F1ECF0CDD0060A893 /* override_default_espace2.pdf in Resources */,
- 6F0F888A1ECF0CDD0060A893 /* override_artwork_option_musique.pdf in Resources */,
- 6F0F88911ECF0CDD0060A893 /* override_default_option_musique.pdf in Resources */,
- 6F0F88861ECF0CDD0060A893 /* override_artwork_rts_un.pdf in Resources */,
6F0C99982121FBD800073AB6 /* SRGAppearance.bundle in Resources */,
6F40920E22DCFE2B005F3850 /* MostSearchedShowCollectionViewCell.xib in Resources */,
08C690131D38E08C00BB8AAA /* iTunesArtwork in Resources */,
@@ -4482,31 +4304,24 @@
084F94B622D3B77700D2D3A5 /* SearchSettingMultiSelectionViewController.storyboard in Resources */,
6F1938321EFBFE9E0017B1D1 /* ApplicationConfiguration.json in Resources */,
6F0C99AC2121FBD800073AB6 /* SRGDataProvider.bundle in Resources */,
- 6F0F88851ECF0CDD0060A893 /* override_artwork_couleur3.pdf in Resources */,
08602BFD2213786B0081D166 /* HomeShowsAccessTableViewCell.xib in Resources */,
E66BEC221DA7FCED00AD4450 /* MediaPlayerViewController.storyboard in Resources */,
6F5F4FCA1DB10CFD0011CCA3 /* RelatedContentView.xib in Resources */,
6F340F4C220DA87500778CA3 /* SRGUserData.bundle in Resources */,
6F0C99A22121FBD800073AB6 /* SRGNetwork.bundle in Resources */,
0832BF1622BD6BB000EFFFE6 /* SearchLoadingCollectionViewCell.xib in Resources */,
- 6F0F88841ECF0CDD0060A893 /* override_artwork_rts_info.pdf in Resources */,
6F1A95EC216DF98D00DB15AA /* SRGIdentity.bundle in Resources */,
086BDE181EA63D5A00965F45 /* PlayMiniPlayerView.xib in Resources */,
08754F48201BB00400458F3A /* InfoPlist.strings in Resources */,
- 6F0F88901ECF0CDD0060A893 /* override_default_rts_deux.pdf in Resources */,
- 6F0F888B1ECF0CDD0060A893 /* override_default_rts_info.pdf in Resources */,
6F12DB4C21A3EFBF0054879D /* HistoryTableViewCell.xib in Resources */,
08C6901D1D38E08C00BB8AAA /* LaunchScreen.xib in Resources */,
- 0837CED31D3FDAF900A1E089 /* SRGSSRType_Md.ttf in Resources */,
6F7C89D020AAFC6100255A54 /* Onboardings.xcassets in Resources */,
6FD2CBC41DD19B0200B44958 /* placeholder_media-180.pdf in Resources */,
6F0C999D2121FBD800073AB6 /* SRGAnalytics.bundle in Resources */,
6FB0BB3D20AEF5C4007C5D87 /* Onboarding.strings in Resources */,
6F47600F1EB37BC6003021EA /* TranslucentTitleHeaderView.xib in Resources */,
- 0837CED21D3FDAF900A1E089 /* SRGSSRType_Lt.ttf in Resources */,
6F0C99932121FBD800073AB6 /* SRGLetterbox.bundle in Resources */,
0887825023AD61D500629312 /* HomeLiveMediaCollectionViewCell.xib in Resources */,
- 0837CED11D3FDAF900A1E089 /* SRGSSRType_It.ttf in Resources */,
6F475FFB1EB37BC6003021EA /* CollectionLoadMoreFooterView.xib in Resources */,
086321102258C6D000C719A6 /* WatchLaterTableViewCell.xib in Resources */,
E694A9FB1D65F02700372DF0 /* CalendarViewController.storyboard in Resources */,
@@ -4519,45 +4334,37 @@
files = (
08C6912A1D39089700BB8AAA /* CommonImages.xcassets in Resources */,
08DD9D631FFE6EF900115906 /* ModuleHeaderView.xib in Resources */,
+ 6FC0C69C245FF06D00B44CAE /* ProgramHeaderView.xib in Resources */,
E6DB5F301D66E1640057094B /* ShowCollectionViewCell.xib in Resources */,
- 6F0F885B1ECF0BA40060A893 /* override_artwork_la2.pdf in Resources */,
6F0C998F2121FBD800073AB6 /* SRGMediaPlayer.bundle in Resources */,
- 0837CEDD1D3FDAFA00A1E089 /* SRGSSRType_Rg.ttf in Resources */,
- 6FCB57491EC2047B0015CAB7 /* override_artwork_rete_tre.pdf in Resources */,
+ 6FE28775248168A100358CFF /* SongTableViewCell.xib in Resources */,
6F12E4DA22D866F200BC1718 /* MostSearchedShowsHeaderView.xib in Resources */,
0875851F23A0025F00FA7207 /* ProfileViewController.storyboard in Resources */,
- 6F0F88371ECEE7800060A893 /* override_default_la2.pdf in Resources */,
6F93DE1520AE9A9900B71572 /* OnboardingsViewController.storyboard in Resources */,
6F2961FE2006186100CAB0E4 /* placeholder_media_list-180.pdf in Resources */,
081DAA291E0C1FC900018623 /* DownloadFooterSectionView.xib in Resources */,
081220B51DD07B7B00BF8326 /* DownloadTableViewCell.xib in Resources */,
6F0C99A32121FBD800073AB6 /* SRGNetwork.bundle in Resources */,
- 6FCB574D1EC2047B0015CAB7 /* override_default_rete_uno.pdf in Resources */,
E64BA4031D4A5891002C10D5 /* WebViewController.storyboard in Resources */,
6F4760061EB37BC6003021EA /* MediaCollectionViewCell.xib in Resources */,
6F1938341EFBFEA80017B1D1 /* ApplicationConfiguration.json in Resources */,
- 6FCB574C1EC2047B0015CAB7 /* override_default_rete_tre.pdf in Resources */,
086F8D6122984B29001BE2F4 /* FavoriteTableViewCell.xib in Resources */,
+ 6F3B0229245AAF6B00C5A8D7 /* ProgramTableViewCell.xib in Resources */,
6F0A7F0720AC0FD800DF6723 /* OnboardingViewController.storyboard in Resources */,
6FB0BB3720AEF5A7007C5D87 /* Onboarding.strings in Resources */,
- 0837CED81D3FDAFA00A1E089 /* SRGSSRType_BdIt.ttf in Resources */,
6FF3B6962137DCD700F8A5E2 /* SRGContentProtection.bundle in Resources */,
- 6F0F885A1ECF0BA40060A893 /* override_artwork_la1.pdf in Resources */,
6FA7EC3B20AB0FEB00A9C5FE /* Onboardings.json in Resources */,
084F94B722D3B77700D2D3A5 /* SearchSettingMultiSelectionViewController.storyboard in Resources */,
- 0837CED71D3FDAFA00A1E089 /* SRGSSRType_Bd.ttf in Resources */,
6F12E4E922D8676600BC1718 /* SearchHeaderView.xib in Resources */,
- 6FCB574B1EC2047B0015CAB7 /* override_default_rete_due.pdf in Resources */,
+ 6F167F59248199BF00B8E7F1 /* HomeTopicCollectionViewCell.xib in Resources */,
6F1A95ED216DF98D00DB15AA /* SRGIdentity.bundle in Resources */,
6F340F4D220DA87600778CA3 /* SRGUserData.bundle in Resources */,
0837CEAE1D3FAEE200A1E089 /* HomeMediaCollectionViewCell.xib in Resources */,
- 0837CEDE1D3FDAFA00A1E089 /* SRGSSRType_Serif_Rg.ttf in Resources */,
086321112258C6D000C719A6 /* WatchLaterTableViewCell.xib in Resources */,
6FB3C1AF1DBCE783008160B4 /* MediaPreviewViewController.storyboard in Resources */,
6FBF24462148238300E576A2 /* SRGDiagnostics.bundle in Resources */,
082590F51F054ACE00BB527C /* HomeMediaCollectionHeaderView.xib in Resources */,
08754F40201BAFD700458F3A /* InfoPlist.strings in Resources */,
- 0837CED61D3FDAFA00A1E089 /* FontAwesome.otf in Resources */,
6F3A47AF1DD19A5B00C79E67 /* RSIResources.xcassets in Resources */,
6F0C99942121FBD800073AB6 /* SRGLetterbox.bundle in Resources */,
6F0C99AD2121FBD800073AB6 /* SRGDataProvider.bundle in Resources */,
@@ -4568,7 +4375,6 @@
0832BF1722BD6BB000EFFFE6 /* SearchLoadingCollectionViewCell.xib in Resources */,
E6E2DF2E1D6AD33400791EDE /* ShowHeaderView.xib in Resources */,
6FA9ECC820C7AD9C00D3D6C2 /* NotificationTableViewCell.xib in Resources */,
- 0837CED91D3FDAFA00A1E089 /* SRGSSRType_He.ttf in Resources */,
08602BFE2213786B0081D166 /* HomeShowsAccessTableViewCell.xib in Resources */,
0887825123AD61D500629312 /* HomeLiveMediaCollectionViewCell.xib in Resources */,
6F0C999E2121FBD800073AB6 /* SRGAnalytics.bundle in Resources */,
@@ -4576,27 +4382,21 @@
6F58664C1DD226EE005DAFE4 /* Settings.bundle in Resources */,
08C68FB41D38DF8300BB8AAA /* LaunchScreen.xib in Resources */,
0875851023A0025F00FA7207 /* ProfileAccountHeaderView.xib in Resources */,
- 6F0F88361ECEE7800060A893 /* override_default_la1.pdf in Resources */,
0804917822832C5D00E4CEC2 /* HomeShowCollectionViewCell.xib in Resources */,
08DADF8E20D92D6500291AD1 /* placeholder_notification-180.pdf in Resources */,
6FE01B1823603E92008EBB27 /* AppCenterDistributeResources.bundle in Resources */,
6FF7BBB422A7901900FA758A /* SearchSettingsViewController.storyboard in Resources */,
E66BEC231DA7FCED00AD4450 /* MediaPlayerViewController.storyboard in Resources */,
- 6FCB57481EC2047B0015CAB7 /* override_artwork_rete_due.pdf in Resources */,
6F0C99B22121FBD800073AB6 /* SRGLogger.bundle in Resources */,
08C68FA51D38DF8300BB8AAA /* Localizable.strings in Resources */,
6F6B643521A70FAA00E207FC /* HomeStatusHeaderView.xib in Resources */,
6F5F4FCB1DB10CFD0011CCA3 /* RelatedContentView.xib in Resources */,
086BDE1A1EA63D5B00965F45 /* PlayMiniPlayerView.xib in Resources */,
- 6FCB574A1EC2047B0015CAB7 /* override_artwork_rete_uno.pdf in Resources */,
- 0837CEDC1D3FDAFA00A1E089 /* SRGSSRType_Md.ttf in Resources */,
0828BB3C22E62831009617A7 /* parsePlayUrl.js in Resources */,
08C68FAA1D38DF8300BB8AAA /* iTunesArtwork in Resources */,
6FD2CBC51DD19B0200B44958 /* placeholder_media-180.pdf in Resources */,
6F4760101EB37BC6003021EA /* TranslucentTitleHeaderView.xib in Resources */,
- 0837CEDB1D3FDAFA00A1E089 /* SRGSSRType_Lt.ttf in Resources */,
6F40920F22DCFE2B005F3850 /* MostSearchedShowCollectionViewCell.xib in Resources */,
- 0837CEDA1D3FDAFA00A1E089 /* SRGSSRType_It.ttf in Resources */,
6F0C99992121FBD800073AB6 /* SRGAppearance.bundle in Resources */,
6F475FFC1EB37BC6003021EA /* CollectionLoadMoreFooterView.xib in Resources */,
6FD633E51FFBC0BE00875BE5 /* GoogleCastMiniPlayerView.xib in Resources */,
@@ -4611,10 +4411,10 @@
files = (
08C6912B1D39089700BB8AAA /* CommonImages.xcassets in Resources */,
E6DB5F311D66E1640057094B /* ShowCollectionViewCell.xib in Resources */,
- 0837CEE61D3FDAFA00A1E089 /* SRGSSRType_Rg.ttf in Resources */,
+ 6FC0C69D245FF06D00B44CAE /* ProgramHeaderView.xib in Resources */,
081DAA281E0C1FC800018623 /* DownloadFooterSectionView.xib in Resources */,
081220B91DD07B7B00BF8326 /* DownloadTableViewCell.xib in Resources */,
- 6F0F88401ECEE78C0060A893 /* override_default_rtr_srf_info.pdf in Resources */,
+ 6FE28776248168A100358CFF /* SongTableViewCell.xib in Resources */,
6F0C99AE2121FBD800073AB6 /* SRGDataProvider.bundle in Resources */,
6FA9ECC920C7AD9C00D3D6C2 /* NotificationTableViewCell.xib in Resources */,
E64BA4011D4A5890002C10D5 /* WebViewController.storyboard in Resources */,
@@ -4624,14 +4424,10 @@
6F0C99B32121FBD800073AB6 /* SRGLogger.bundle in Resources */,
0804917922832C5D00E4CEC2 /* HomeShowCollectionViewCell.xib in Resources */,
6FF7BBB522A7901900FA758A /* SearchSettingsViewController.storyboard in Resources */,
- 0837CEE11D3FDAFA00A1E089 /* SRGSSRType_BdIt.ttf in Resources */,
082590F71F054ACE00BB527C /* HomeMediaCollectionHeaderView.xib in Resources */,
- 0837CEE01D3FDAFA00A1E089 /* SRGSSRType_Bd.ttf in Resources */,
+ 6F3B022A245AAF6B00C5A8D7 /* ProgramTableViewCell.xib in Resources */,
6F340F4E220DA87600778CA3 /* SRGUserData.bundle in Resources */,
0837CEB01D3FAEE200A1E089 /* HomeMediaCollectionViewCell.xib in Resources */,
- 6F0F883F1ECEE78C0060A893 /* override_default_rtr_srf1.pdf in Resources */,
- 0837CEE71D3FDAFA00A1E089 /* SRGSSRType_Serif_Rg.ttf in Resources */,
- 6F0F88411ECEE78C0060A893 /* override_default_rtr_srf2.pdf in Resources */,
6F12E4DC22D866F200BC1718 /* MostSearchedShowsHeaderView.xib in Resources */,
0887825223AD61D500629312 /* HomeLiveMediaCollectionViewCell.xib in Resources */,
6FF3B6972137DCD700F8A5E2 /* SRGContentProtection.bundle in Resources */,
@@ -4641,16 +4437,13 @@
6FB3C1B01DBCE783008160B4 /* MediaPreviewViewController.storyboard in Resources */,
6F0C99902121FBD800073AB6 /* SRGMediaPlayer.bundle in Resources */,
08DD9D671FFE6EF900115906 /* ModuleHeaderView.xib in Resources */,
- 0837CEDF1D3FDAFA00A1E089 /* FontAwesome.otf in Resources */,
08602BFF2213786B0081D166 /* HomeShowsAccessTableViewCell.xib in Resources */,
6F0C99A42121FBD800073AB6 /* SRGNetwork.bundle in Resources */,
- 6F0F883E1ECEE78C0060A893 /* override_default_radio_rtr.pdf in Resources */,
08564B261D41112800381549 /* HomeSectionHeaderView.xib in Resources */,
E6E2DF2F1D6AD33400791EDE /* ShowHeaderView.xib in Resources */,
6F93DE1620AE9A9900B71572 /* OnboardingsViewController.storyboard in Resources */,
086F8D6222984B29001BE2F4 /* FavoriteTableViewCell.xib in Resources */,
6FD88F7F22D3618F008859EF /* SearchSettingsHeaderView.xib in Resources */,
- 0837CEE21D3FDAFA00A1E089 /* SRGSSRType_He.ttf in Resources */,
0828BB3D22E62831009617A7 /* parsePlayUrl.js in Resources */,
08C68FE31D38E04B00BB8AAA /* iTunesArtwork@2x in Resources */,
6FD633E61FFBC0BE00875BE5 /* GoogleCastMiniPlayerView.xib in Resources */,
@@ -4660,6 +4453,7 @@
0832BF1822BD6BB000EFFFE6 /* SearchLoadingCollectionViewCell.xib in Resources */,
6F12DB4E21A3EFBF0054879D /* HistoryTableViewCell.xib in Resources */,
6F0A7F0820AC0FD800DF6723 /* OnboardingViewController.storyboard in Resources */,
+ 6F167F5A248199BF00B8E7F1 /* HomeTopicCollectionViewCell.xib in Resources */,
6F3A47B11DD19A6900C79E67 /* RTRResources.xcassets in Resources */,
6F1938331EFBFEA40017B1D1 /* ApplicationConfiguration.json in Resources */,
E66BEC241DA7FCED00AD4450 /* MediaPlayerViewController.storyboard in Resources */,
@@ -4670,26 +4464,19 @@
08754F44201BAFF500458F3A /* InfoPlist.strings in Resources */,
086BDE1C1EA63D5B00965F45 /* PlayMiniPlayerView.xib in Resources */,
086321122258C6D000C719A6 /* WatchLaterTableViewCell.xib in Resources */,
- 0837CEE51D3FDAFA00A1E089 /* SRGSSRType_Md.ttf in Resources */,
6F2961FF2006186100CAB0E4 /* placeholder_media_list-180.pdf in Resources */,
6F6B643621A70FAA00E207FC /* HomeStatusHeaderView.xib in Resources */,
08C68FE81D38E04B00BB8AAA /* LaunchScreen.xib in Resources */,
6F1A95EE216DF98D00DB15AA /* SRGIdentity.bundle in Resources */,
6F0C999F2121FBD800073AB6 /* SRGAnalytics.bundle in Resources */,
6FA7EC3C20AB0FEB00A9C5FE /* Onboardings.json in Resources */,
- 6F0F883D1ECEE78C0060A893 /* override_artwork_radio_rtr.pdf in Resources */,
6FB0BB3A20AEF5B8007C5D87 /* Onboarding.strings in Resources */,
6FD2CBC61DD19B0200B44958 /* placeholder_media-180.pdf in Resources */,
- 6F0F88731ECF0CD70060A893 /* override_artwork_rtr_srf1.pdf in Resources */,
6F4760111EB37BC6003021EA /* TranslucentTitleHeaderView.xib in Resources */,
0875851123A0025F00FA7207 /* ProfileAccountHeaderView.xib in Resources */,
- 0837CEE41D3FDAFA00A1E089 /* SRGSSRType_Lt.ttf in Resources */,
6F0C999A2121FBD800073AB6 /* SRGAppearance.bundle in Resources */,
- 0837CEE31D3FDAFA00A1E089 /* SRGSSRType_It.ttf in Resources */,
6F40921022DCFE2B005F3850 /* MostSearchedShowCollectionViewCell.xib in Resources */,
6F475FFD1EB37BC6003021EA /* CollectionLoadMoreFooterView.xib in Resources */,
- 6F0F88741ECF0CD70060A893 /* override_artwork_rtr_srf_info.pdf in Resources */,
- 6F0F88751ECF0CD70060A893 /* override_artwork_rtr_srf2.pdf in Resources */,
E694A9FD1D65F02700372DF0 /* CalendarViewController.storyboard in Resources */,
6FE01B1923603E92008EBB27 /* AppCenterDistributeResources.bundle in Resources */,
);
@@ -4701,9 +4488,10 @@
files = (
08C6912C1D39089700BB8AAA /* CommonImages.xcassets in Resources */,
6FBF24482148238300E576A2 /* SRGDiagnostics.bundle in Resources */,
+ 6FC0C69E245FF06D00B44CAE /* ProgramHeaderView.xib in Resources */,
E6DB5F321D66E1640057094B /* ShowCollectionViewCell.xib in Resources */,
- 0837CEEF1D3FDAFA00A1E089 /* SRGSSRType_Rg.ttf in Resources */,
0804917A22832C5D00E4CEC2 /* HomeShowCollectionViewCell.xib in Resources */,
+ 6FE28777248168A100358CFF /* SongTableViewCell.xib in Resources */,
6FA7EC3D20AB0FEB00A9C5FE /* Onboardings.json in Resources */,
6F1938381EFBFEC80017B1D1 /* ApplicationConfiguration.json in Resources */,
6FF7BBB622A7901900FA758A /* SearchSettingsViewController.storyboard in Resources */,
@@ -4715,16 +4503,13 @@
6F4760081EB37BC6003021EA /* MediaCollectionViewCell.xib in Resources */,
08DD9D6B1FFE6EFA00115906 /* ModuleHeaderView.xib in Resources */,
6F0C99912121FBD800073AB6 /* SRGMediaPlayer.bundle in Resources */,
+ 6F3B022B245AAF6B00C5A8D7 /* ProgramTableViewCell.xib in Resources */,
6F12E4EB22D8676600BC1718 /* SearchHeaderView.xib in Resources */,
- 0837CEEA1D3FDAFA00A1E089 /* SRGSSRType_BdIt.ttf in Resources */,
6F7C89D320AAFC6100255A54 /* Onboardings.xcassets in Resources */,
- 0837CEE91D3FDAFA00A1E089 /* SRGSSRType_Bd.ttf in Resources */,
0837CEB21D3FAEE300A1E089 /* HomeMediaCollectionViewCell.xib in Resources */,
6F40921122DCFE2B005F3850 /* MostSearchedShowCollectionViewCell.xib in Resources */,
- 0837CEF01D3FDAFA00A1E089 /* SRGSSRType_Serif_Rg.ttf in Resources */,
6FB3C1B11DBCE783008160B4 /* MediaPreviewViewController.storyboard in Resources */,
08602C002213786B0081D166 /* HomeShowsAccessTableViewCell.xib in Resources */,
- 0837CEE81D3FDAFA00A1E089 /* FontAwesome.otf in Resources */,
08C6908B1D38E3E600BB8AAA /* iTunesArtwork@2x in Resources */,
0887825323AD61D500629312 /* HomeLiveMediaCollectionViewCell.xib in Resources */,
6F6B643721A70FAA00E207FC /* HomeStatusHeaderView.xib in Resources */,
@@ -4736,7 +4521,6 @@
08564B271D41112800381549 /* HomeSectionHeaderView.xib in Resources */,
6FD633E71FFBC0BE00875BE5 /* GoogleCastMiniPlayerView.xib in Resources */,
0828BB3E22E62831009617A7 /* parsePlayUrl.js in Resources */,
- 0837CEEB1D3FDAFA00A1E089 /* SRGSSRType_He.ttf in Resources */,
08DADF9020D92D6500291AD1 /* placeholder_notification-180.pdf in Resources */,
6F0A7F0920AC0FD800DF6723 /* OnboardingViewController.storyboard in Resources */,
08C690901D38E3E600BB8AAA /* LaunchScreen.xib in Resources */,
@@ -4754,12 +4538,11 @@
08C690811D38E3E600BB8AAA /* Localizable.strings in Resources */,
6F0C99962121FBD800073AB6 /* SRGLetterbox.bundle in Resources */,
086BDE1E1EA63D5B00965F45 /* PlayMiniPlayerView.xib in Resources */,
+ 6F167F5B248199BF00B8E7F1 /* HomeTopicCollectionViewCell.xib in Resources */,
0832BF1922BD6BB000EFFFE6 /* SearchLoadingCollectionViewCell.xib in Resources */,
- 0837CEEE1D3FDAFA00A1E089 /* SRGSSRType_Md.ttf in Resources */,
6F0C99A52121FBD800073AB6 /* SRGNetwork.bundle in Resources */,
0875852123A0025F00FA7207 /* ProfileViewController.storyboard in Resources */,
6F0C99AF2121FBD800073AB6 /* SRGDataProvider.bundle in Resources */,
- 0837CEED1D3FDAFA00A1E089 /* SRGSSRType_Lt.ttf in Resources */,
6FD2CBC71DD19B0200B44958 /* placeholder_media-180.pdf in Resources */,
6F4760121EB37BC6003021EA /* TranslucentTitleHeaderView.xib in Resources */,
6FB0BB4320AEF5DC007C5D87 /* Onboarding.strings in Resources */,
@@ -4770,7 +4553,6 @@
6F0C999B2121FBD800073AB6 /* SRGAppearance.bundle in Resources */,
6FF3B6982137DCD700F8A5E2 /* SRGContentProtection.bundle in Resources */,
6F2962002006186100CAB0E4 /* placeholder_media_list-180.pdf in Resources */,
- 0837CEEC1D3FDAFA00A1E089 /* SRGSSRType_It.ttf in Resources */,
6F475FFE1EB37BC6003021EA /* CollectionLoadMoreFooterView.xib in Resources */,
E694A9FE1D65F02700372DF0 /* CalendarViewController.storyboard in Resources */,
6F4EA1401EE034EF00BEC4DA /* Accessibility.strings in Resources */,
@@ -4996,7 +4778,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "URBAN_AIRSHIP_FILE=\"${SRCROOT}/Configuration/UrbanAirship/AirshipConfig-${PRODUCT_BUNDLE_IDENTIFIER}.plist\"\nif [ -f \"${URBAN_AIRSHIP_FILE}\" ]; then\n cp \"${URBAN_AIRSHIP_FILE}\" \"${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/AirshipConfig.plist\"\nfi";
+ shellScript = "URBAN_AIRSHIP_FILE=\"${SRCROOT}/Configuration/UrbanAirship/AirshipConfig-${PRODUCT_BUNDLE_IDENTIFIER}.plist\"\nif [ -f \"${URBAN_AIRSHIP_FILE}\" ]; then\n cp \"${URBAN_AIRSHIP_FILE}\" \"${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/AirshipConfig.plist\"\nfi\n";
};
08B4A22F20935ABE00474EBB /* Copy Urban Airship Configuration File */ = {
isa = PBXShellScriptBuildPhase;
@@ -5228,7 +5010,6 @@
"${PODS_CONFIGURATION_BUILD_DIR}/InAppSettingsKit/InAppSettingsKit.bundle",
"${PODS_ROOT}/MaterialComponents/components/Tabs/src/MaterialTabs.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/SwiftMessages/SwiftMessages.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/UrbanAirship-iOS-SDK/AirshipResources.bundle",
"${PODS_ROOT}/google-cast-sdk-no-bluetooth/GoogleCastSDK-ios-4.4.6_static/GoogleCast.framework/GoogleCastCoreResources.bundle",
"${PODS_ROOT}/google-cast-sdk-no-bluetooth/GoogleCastSDK-ios-4.4.6_static/GoogleCast.framework/GoogleCastUIResources.bundle",
);
@@ -5237,7 +5018,6 @@
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/InAppSettingsKit.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialTabs.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SwiftMessages.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AirshipResources.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleCastCoreResources.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleCastUIResources.bundle",
);
@@ -5274,7 +5054,6 @@
"${PODS_CONFIGURATION_BUILD_DIR}/InAppSettingsKit/InAppSettingsKit.bundle",
"${PODS_ROOT}/MaterialComponents/components/Tabs/src/MaterialTabs.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/SwiftMessages/SwiftMessages.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/UrbanAirship-iOS-SDK/AirshipResources.bundle",
"${PODS_ROOT}/google-cast-sdk-no-bluetooth/GoogleCastSDK-ios-4.4.6_static/GoogleCast.framework/GoogleCastCoreResources.bundle",
"${PODS_ROOT}/google-cast-sdk-no-bluetooth/GoogleCastSDK-ios-4.4.6_static/GoogleCast.framework/GoogleCastUIResources.bundle",
);
@@ -5283,7 +5062,6 @@
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/InAppSettingsKit.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialTabs.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SwiftMessages.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AirshipResources.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleCastCoreResources.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleCastUIResources.bundle",
);
@@ -5662,7 +5440,6 @@
"${PODS_CONFIGURATION_BUILD_DIR}/InAppSettingsKit/InAppSettingsKit.bundle",
"${PODS_ROOT}/MaterialComponents/components/Tabs/src/MaterialTabs.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/SwiftMessages/SwiftMessages.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/UrbanAirship-iOS-SDK/AirshipResources.bundle",
"${PODS_ROOT}/google-cast-sdk-no-bluetooth/GoogleCastSDK-ios-4.4.6_static/GoogleCast.framework/GoogleCastCoreResources.bundle",
"${PODS_ROOT}/google-cast-sdk-no-bluetooth/GoogleCastSDK-ios-4.4.6_static/GoogleCast.framework/GoogleCastUIResources.bundle",
);
@@ -5671,7 +5448,6 @@
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/InAppSettingsKit.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialTabs.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SwiftMessages.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AirshipResources.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleCastCoreResources.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleCastUIResources.bundle",
);
@@ -5690,7 +5466,6 @@
"${PODS_CONFIGURATION_BUILD_DIR}/InAppSettingsKit/InAppSettingsKit.bundle",
"${PODS_ROOT}/MaterialComponents/components/Tabs/src/MaterialTabs.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/SwiftMessages/SwiftMessages.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/UrbanAirship-iOS-SDK/AirshipResources.bundle",
"${PODS_ROOT}/google-cast-sdk-no-bluetooth/GoogleCastSDK-ios-4.4.6_static/GoogleCast.framework/GoogleCastCoreResources.bundle",
"${PODS_ROOT}/google-cast-sdk-no-bluetooth/GoogleCastSDK-ios-4.4.6_static/GoogleCast.framework/GoogleCastUIResources.bundle",
);
@@ -5699,7 +5474,6 @@
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/InAppSettingsKit.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialTabs.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SwiftMessages.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AirshipResources.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleCastCoreResources.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleCastUIResources.bundle",
);
@@ -5718,6 +5492,8 @@
"$(SRCROOT)/Carthage/Build/iOS/ComScore.framework",
"$(SRCROOT)/Carthage/Build/iOS/TCCore.framework",
"$(SRCROOT)/Carthage/Build/iOS/TCSDK.framework",
+ "$(SRCROOT)/Carthage/Build/iOS/Aiolos.framework",
+ "$(SRCROOT)/Carthage/Build/iOS/AirshipCore.framework",
);
name = "Copy Frameworks (Carthage)";
outputPaths = (
@@ -5736,6 +5512,8 @@
"$(SRCROOT)/Carthage/Build/iOS/ComScore.framework",
"$(SRCROOT)/Carthage/Build/iOS/TCCore.framework",
"$(SRCROOT)/Carthage/Build/iOS/TCSDK.framework",
+ "$(SRCROOT)/Carthage/Build/iOS/Aiolos.framework",
+ "$(SRCROOT)/Carthage/Build/iOS/AirshipCore.framework",
);
name = "Copy Frameworks (Carthage)";
outputPaths = (
@@ -5754,6 +5532,8 @@
"$(SRCROOT)/Carthage/Build/iOS/ComScore.framework",
"$(SRCROOT)/Carthage/Build/iOS/TCCore.framework",
"$(SRCROOT)/Carthage/Build/iOS/TCSDK.framework",
+ "$(SRCROOT)/Carthage/Build/iOS/Aiolos.framework",
+ "$(SRCROOT)/Carthage/Build/iOS/AirshipCore.framework",
);
name = "Copy Frameworks (Carthage)";
outputPaths = (
@@ -5772,6 +5552,8 @@
"$(SRCROOT)/Carthage/Build/iOS/ComScore.framework",
"$(SRCROOT)/Carthage/Build/iOS/TCCore.framework",
"$(SRCROOT)/Carthage/Build/iOS/TCSDK.framework",
+ "$(SRCROOT)/Carthage/Build/iOS/Aiolos.framework",
+ "$(SRCROOT)/Carthage/Build/iOS/AirshipCore.framework",
);
name = "Copy Frameworks (Carthage)";
outputPaths = (
@@ -5790,6 +5572,8 @@
"$(SRCROOT)/Carthage/Build/iOS/ComScore.framework",
"$(SRCROOT)/Carthage/Build/iOS/TCCore.framework",
"$(SRCROOT)/Carthage/Build/iOS/TCSDK.framework",
+ "$(SRCROOT)/Carthage/Build/iOS/Aiolos.framework",
+ "$(SRCROOT)/Carthage/Build/iOS/AirshipCore.framework",
);
name = "Copy Frameworks (Carthage)";
outputPaths = (
@@ -5808,7 +5592,6 @@
"${PODS_CONFIGURATION_BUILD_DIR}/InAppSettingsKit/InAppSettingsKit.bundle",
"${PODS_ROOT}/MaterialComponents/components/Tabs/src/MaterialTabs.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/SwiftMessages/SwiftMessages.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/UrbanAirship-iOS-SDK/AirshipResources.bundle",
"${PODS_ROOT}/google-cast-sdk-no-bluetooth/GoogleCastSDK-ios-4.4.6_static/GoogleCast.framework/GoogleCastCoreResources.bundle",
"${PODS_ROOT}/google-cast-sdk-no-bluetooth/GoogleCastSDK-ios-4.4.6_static/GoogleCast.framework/GoogleCastUIResources.bundle",
);
@@ -5817,7 +5600,6 @@
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/InAppSettingsKit.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialTabs.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SwiftMessages.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AirshipResources.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleCastCoreResources.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleCastUIResources.bundle",
);
@@ -5908,10 +5690,12 @@
6FFCB62424504C6C00D16466 /* SwimlaneCollectionViewLayout.m in Sources */,
6F475FC31EB37BC6003021EA /* ListRequestViewController.m in Sources */,
6F475FFF1EB37BC6003021EA /* MediaCollectionViewCell.m in Sources */,
+ 6F56F9F4247C407000B2387B /* ChannelServiceSetup.m in Sources */,
6F12E4E222D8676600BC1718 /* SearchHeaderView.m in Sources */,
0832BF1022BD6BB000EFFFE6 /* SearchLoadingCollectionViewCell.m in Sources */,
082910AE239E90D200D168F4 /* TabBarController.m in Sources */,
E6E2DF261D6AD32800791EDE /* ShowHeaderView.m in Sources */,
+ 6FD68618246052A100B8018A /* GradientView.m in Sources */,
6FD88F8322D476CF008859EF /* UIScrollView+PlaySRG.m in Sources */,
6F80E9C221A682E70027CA2F /* TableRequestViewController.m in Sources */,
E6DB5F281D66E1550057094B /* ShowCollectionViewCell.m in Sources */,
@@ -5936,6 +5720,7 @@
08A3ED021FA2612E00A517EF /* SRGDataProvider+PlaySRG.m in Sources */,
0841E70622F0953A009D8304 /* SRGDay+PlaySRG.m in Sources */,
6F9897CD2412582400B390A2 /* Layout.m in Sources */,
+ 6FA6C0632458064C00518DE6 /* SRGProgramComposition+PlaySRG.m in Sources */,
08AA551D1D49EBF600C5026E /* ApplicationConfiguration.m in Sources */,
08C68F941D38DEA100BB8AAA /* HomeViewController.m in Sources */,
6FDF08EB218B126700B2AF2C /* OnboardingPage.m in Sources */,
@@ -5945,6 +5730,7 @@
6F7C35B523708E8A00259BE7 /* SRGResource+PlaySRG.m in Sources */,
6F93DE1A20AE9BE600B71572 /* OnboardingTableViewCell.m in Sources */,
086F8D5522984B29001BE2F4 /* Favorites.m in Sources */,
+ 6FE2873C2481448C00358CFF /* SongsViewController.m in Sources */,
6F9122BF1DC8708400725EEB /* PlayErrors.m in Sources */,
6FE1B9191FAC34D600A58F3B /* ContentInsets.m in Sources */,
6F93DE0D20AE985C00B71572 /* OnboardingsViewController.m in Sources */,
@@ -5955,6 +5741,7 @@
6F00875D219AA888004BD6FF /* StoreReview.m in Sources */,
08DD9D5D1FFE6EDB00115906 /* ModuleViewController.m in Sources */,
6F4760131EB37BC6003021EA /* Banner.m in Sources */,
+ 6F167F4A248197C700B8E7F1 /* HomeTopicListTableViewCell.m in Sources */,
6F7218131DBE75AC00575072 /* PreviewingDelegate.m in Sources */,
6F475FC81EB37BC6003021EA /* MediasViewController.m in Sources */,
6F47607C1EB37D60003021EA /* UIStackView+PlaySRG.m in Sources */,
@@ -5986,11 +5773,14 @@
6FF7BB9C22A78DE400FA758A /* SearchSettingSegmentCell.m in Sources */,
6F5F4FC41DB10CFD0011CCA3 /* RelatedContentView.m in Sources */,
6F1F929E22A539D40026BFAC /* SearchShowListCollectionViewCell.m in Sources */,
+ 6F7F2B06249CD78D00C37526 /* SRGLetterboxController+PlaySRG.m in Sources */,
6FA9ECAC20C7AA1600D3D6C2 /* NotificationsViewController.m in Sources */,
6FF7BBA622A78DE400FA758A /* SearchSettingSelectorCell.m in Sources */,
0801E07B1D4A4A810008021E /* RadioChannel.m in Sources */,
6F0A7EFF20AC0B9A00DF6723 /* OnboardingViewController.swift in Sources */,
6F8144142008FA970075F52F /* GoogleCast.m in Sources */,
+ 6FE2876D2481687A00358CFF /* SongTableViewCell.m in Sources */,
+ 6F2AB1B42487C31C009D9FBC /* MediaPlayerViewController+SongPanel.swift in Sources */,
08C68F8F1D38DEA100BB8AAA /* main.m in Sources */,
6FD88F7722D3618F008859EF /* SearchSettingsHeaderView.m in Sources */,
6F475FB41EB37BC6003021EA /* BaseViewController.m in Sources */,
@@ -6010,12 +5800,14 @@
6F4843CC23EC3ADF00868F78 /* AccessibilityView.m in Sources */,
6F12DB4621A3EFBF0054879D /* HistoryTableViewCell.m in Sources */,
6FA9ECBA20C7AB3A00D3D6C2 /* NotificationTableViewCell.m in Sources */,
+ 6F3B0221245AAE1B00C5A8D7 /* ProgramTableViewCell.m in Sources */,
08564B1D1D41111A00381549 /* HomeSectionHeaderView.m in Sources */,
6F47607B1EB37D60003021EA /* UIImageView+PlaySRG.m in Sources */,
6F939F6F2090A1B200D3B0C6 /* NSArray+PlaySRG.m in Sources */,
6FD2A35523C7628000456DCB /* ForegroundTimer.m in Sources */,
6F85E4B71EEA8F9B00552256 /* UIView+PlaySRG.m in Sources */,
6F47607E1EB37D60003021EA /* UIWindow+PlaySRG.m in Sources */,
+ 6F167F51248198DC00B8E7F1 /* HomeTopicCollectionViewCell.m in Sources */,
6FDF08F0218B126700B2AF2C /* UpdateInfo.m in Sources */,
6F556B381DDC419800B5DEA2 /* SettingsBaseViewController.m in Sources */,
6FA5D15D1F2077B10059E4E2 /* NSString+PlaySRG.m in Sources */,
@@ -6052,13 +5844,14 @@
0821D53E227F5ED300FC091F /* DeepLinkService.m in Sources */,
08B77AF0240A86FD00A3BC3B /* AccessibilityIdentifierConstants.m in Sources */,
0875851823A0025F00FA7207 /* ProfileTableViewCell.m in Sources */,
+ 6FC0C695245FF06D00B44CAE /* ProgramHeaderView.m in Sources */,
081DAA1F1E099A3A00018623 /* DownloadFooterSectionView.m in Sources */,
087584EF23A0008500FA7207 /* ApplicationSectionInfo.m in Sources */,
6FAAF77C20CABA3A00BB58A3 /* Notification.m in Sources */,
6FC8866B1EC58BD5000BC3FF /* SRGProgram+PlaySRG.m in Sources */,
- 089EA018201148D70070E11A /* TimerTarget.m in Sources */,
089EA011201148180070E11A /* NSTimer+PlaySRG.m in Sources */,
6F12E4D622D866E600BC1718 /* MostSearchedShowsHeaderView.m in Sources */,
+ 6FD6861F2460670600B8018A /* Channel.m in Sources */,
0852539722073D5200BCF0B1 /* UIApplication+PlaySRG.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -6074,7 +5867,9 @@
0804917C22832C5D00E4CEC2 /* HomeShowCollectionViewCell.m in Sources */,
6F12DB5121A3EFBF0054879D /* HistoryViewController.m in Sources */,
6FF7BB9822A78DE400FA758A /* SearchSettingSwitchCell.m in Sources */,
+ 6F167F52248198DC00B8E7F1 /* HomeTopicCollectionViewCell.m in Sources */,
6FA9ECBB20C7AB3A00D3D6C2 /* NotificationTableViewCell.m in Sources */,
+ 6FE2876E2481687A00358CFF /* SongTableViewCell.m in Sources */,
08280F172258F02400AC978D /* WatchLater.m in Sources */,
08DD9D601FFE6EF800115906 /* ModuleViewController.m in Sources */,
088899462077628300242654 /* TVChannel.m in Sources */,
@@ -6099,6 +5894,7 @@
0806E7B91D50D918002ED406 /* SettingsViewController.m in Sources */,
6F475FB51EB37BC6003021EA /* BaseViewController.m in Sources */,
6FC1FA892292E3480036CB34 /* NSSet+PlaySRG.m in Sources */,
+ 6FE2873D2481448C00358CFF /* SongsViewController.m in Sources */,
089EA012201148250070E11A /* NSTimer+PlaySRG.m in Sources */,
6F12E4D722D866F200BC1718 /* MostSearchedShowsHeaderView.m in Sources */,
08B2A53B2426511800C6EED3 /* SRGModule+PlaySRG.m in Sources */,
@@ -6109,6 +5905,8 @@
6F7EEBDF22DC40B7005E5A97 /* SearchBar.m in Sources */,
6F3E0A0223D055DD009B00C1 /* SettingTableViewCell.m in Sources */,
6F7EEBF422DC7AA7005E5A97 /* SearchSettingMultiSelectionCell.m in Sources */,
+ 6F3B0222245AAE1B00C5A8D7 /* ProgramTableViewCell.m in Sources */,
+ 6FD686202460670600B8018A /* Channel.m in Sources */,
6F475FDD1EB37BC6003021EA /* RequestViewController.m in Sources */,
0841E70722F0953A009D8304 /* SRGDay+PlaySRG.m in Sources */,
086F8D6A22984B29001BE2F4 /* FavoriteTableViewCell.m in Sources */,
@@ -6116,7 +5914,8 @@
6FD88F7822D3618F008859EF /* SearchSettingsHeaderView.m in Sources */,
6F6B642F21A70FAA00E207FC /* HomeStatusHeaderView.m in Sources */,
6FD633DF1FFBC0BE00875BE5 /* GoogleCastMiniPlayerView.m in Sources */,
- 089EA019201148F40070E11A /* TimerTarget.m in Sources */,
+ 6F56F9F5247C407000B2387B /* ChannelServiceSetup.m in Sources */,
+ 6FC0C696245FF06D00B44CAE /* ProgramHeaderView.m in Sources */,
6FAF43011EF7CD8A0074E033 /* HomeTopicViewController.m in Sources */,
6F00875E219AA888004BD6FF /* StoreReview.m in Sources */,
6F12DB4721A3EFBF0054879D /* HistoryTableViewCell.m in Sources */,
@@ -6128,6 +5927,7 @@
08C691361D391A1B00BB8AAA /* HomeMediaListTableViewCell.m in Sources */,
6F0A7F0020AC0B9A00DF6723 /* OnboardingViewController.swift in Sources */,
6F475FCE1EB37BC6003021EA /* NavigationController.m in Sources */,
+ 6FA6C0642458064C00518DE6 /* SRGProgramComposition+PlaySRG.m in Sources */,
08C68F951D38DEA100BB8AAA /* HomeViewController.m in Sources */,
6F0A41701F6FAB6E000533E7 /* Calendar.m in Sources */,
6FDF08FB218B126700B2AF2C /* DeprecatedFavorite.m in Sources */,
@@ -6153,6 +5953,8 @@
6F0EDA662448B0D800F0FED2 /* RefreshControl.m in Sources */,
6F80E9C321A682E70027CA2F /* TableRequestViewController.m in Sources */,
6FE1B91A1FAC34D600A58F3B /* ContentInsets.m in Sources */,
+ 6FD68619246052A100B8018A /* GradientView.m in Sources */,
+ 6F7F2B07249CD78D00C37526 /* SRGLetterboxController+PlaySRG.m in Sources */,
6F93DE0E20AE985C00B71572 /* OnboardingsViewController.m in Sources */,
6F861AF91DAE65A600C46102 /* SRGMediaPlayerDesignables.m in Sources */,
6FF4D4E123D5B07E008B981A /* UIVisualEffectView+PlaySRG.m in Sources */,
@@ -6220,10 +6022,12 @@
6FD88F8422D476CF008859EF /* UIScrollView+PlaySRG.m in Sources */,
6F9897CE2412582400B390A2 /* Layout.m in Sources */,
0837CEAB1D3FAEE100A1E089 /* HomeMediaCollectionViewCell.m in Sources */,
+ 6F167F4B248197C700B8E7F1 /* HomeTopicListTableViewCell.m in Sources */,
6F475FBA1EB37BC6003021EA /* CollectionRequestViewController.m in Sources */,
6FDF08D8218B126700B2AF2C /* Download.m in Sources */,
0832BF1122BD6BB000EFFFE6 /* SearchLoadingCollectionViewCell.m in Sources */,
081DAA211E099DAE00018623 /* DownloadFooterSectionView.m in Sources */,
+ 6F2AB1B52487C31C009D9FBC /* MediaPlayerViewController+SongPanel.swift in Sources */,
6F475FD31EB37BC6003021EA /* PageViewController.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -6239,7 +6043,9 @@
0804917D22832C5D00E4CEC2 /* HomeShowCollectionViewCell.m in Sources */,
6F12DB5221A3EFBF0054879D /* HistoryViewController.m in Sources */,
6FF7BB9922A78DE400FA758A /* SearchSettingSwitchCell.m in Sources */,
+ 6F167F53248198DC00B8E7F1 /* HomeTopicCollectionViewCell.m in Sources */,
6FA9ECBC20C7AB3A00D3D6C2 /* NotificationTableViewCell.m in Sources */,
+ 6FE2876F2481687A00358CFF /* SongTableViewCell.m in Sources */,
08280F182258F02400AC978D /* WatchLater.m in Sources */,
08DD9D641FFE6EF900115906 /* ModuleViewController.m in Sources */,
088899472077628400242654 /* TVChannel.m in Sources */,
@@ -6264,6 +6070,7 @@
0806E7BA1D50D919002ED406 /* SettingsViewController.m in Sources */,
6F475FB61EB37BC6003021EA /* BaseViewController.m in Sources */,
6FC1FA8A2292E3480036CB34 /* NSSet+PlaySRG.m in Sources */,
+ 6FE2873E2481448C00358CFF /* SongsViewController.m in Sources */,
089EA013201148260070E11A /* NSTimer+PlaySRG.m in Sources */,
6F12E4D922D866F200BC1718 /* MostSearchedShowsHeaderView.m in Sources */,
08B2A53C2426511800C6EED3 /* SRGModule+PlaySRG.m in Sources */,
@@ -6274,6 +6081,8 @@
6F7EEBE022DC40B7005E5A97 /* SearchBar.m in Sources */,
6F3E0A0323D055DD009B00C1 /* SettingTableViewCell.m in Sources */,
6F7EEBF522DC7AA7005E5A97 /* SearchSettingMultiSelectionCell.m in Sources */,
+ 6F3B0223245AAE1B00C5A8D7 /* ProgramTableViewCell.m in Sources */,
+ 6FD686212460670600B8018A /* Channel.m in Sources */,
6F475FDE1EB37BC6003021EA /* RequestViewController.m in Sources */,
0841E70822F0953A009D8304 /* SRGDay+PlaySRG.m in Sources */,
086F8D6B22984B29001BE2F4 /* FavoriteTableViewCell.m in Sources */,
@@ -6281,7 +6090,8 @@
6FD88F7922D3618F008859EF /* SearchSettingsHeaderView.m in Sources */,
6F6B643021A70FAA00E207FC /* HomeStatusHeaderView.m in Sources */,
6FD633E01FFBC0BE00875BE5 /* GoogleCastMiniPlayerView.m in Sources */,
- 089EA01A201148F50070E11A /* TimerTarget.m in Sources */,
+ 6F56F9F6247C407000B2387B /* ChannelServiceSetup.m in Sources */,
+ 6FC0C697245FF06D00B44CAE /* ProgramHeaderView.m in Sources */,
6FAF43021EF7CD8A0074E033 /* HomeTopicViewController.m in Sources */,
6F00875F219AA888004BD6FF /* StoreReview.m in Sources */,
6F12DB4821A3EFBF0054879D /* HistoryTableViewCell.m in Sources */,
@@ -6293,6 +6103,7 @@
08C691371D391A1B00BB8AAA /* HomeMediaListTableViewCell.m in Sources */,
6F0A7F0120AC0B9A00DF6723 /* OnboardingViewController.swift in Sources */,
6F475FCF1EB37BC6003021EA /* NavigationController.m in Sources */,
+ 6FA6C0652458064C00518DE6 /* SRGProgramComposition+PlaySRG.m in Sources */,
08C68F961D38DEA100BB8AAA /* HomeViewController.m in Sources */,
6F0A41711F6FAB6E000533E7 /* Calendar.m in Sources */,
6FDF08FC218B126700B2AF2C /* DeprecatedFavorite.m in Sources */,
@@ -6318,6 +6129,8 @@
6F0EDA672448B0D800F0FED2 /* RefreshControl.m in Sources */,
6F80E9C421A682E70027CA2F /* TableRequestViewController.m in Sources */,
6FE1B91B1FAC34D600A58F3B /* ContentInsets.m in Sources */,
+ 6FD6861A246052A100B8018A /* GradientView.m in Sources */,
+ 6F7F2B08249CD78D00C37526 /* SRGLetterboxController+PlaySRG.m in Sources */,
6F93DE0F20AE985C00B71572 /* OnboardingsViewController.m in Sources */,
6F861AFA1DAE65A600C46102 /* SRGMediaPlayerDesignables.m in Sources */,
6FF4D4E223D5B07E008B981A /* UIVisualEffectView+PlaySRG.m in Sources */,
@@ -6385,10 +6198,12 @@
6FD88F8522D476CF008859EF /* UIScrollView+PlaySRG.m in Sources */,
6F9897CF2412582400B390A2 /* Layout.m in Sources */,
0837CEAD1D3FAEE200A1E089 /* HomeMediaCollectionViewCell.m in Sources */,
+ 6F167F4C248197C700B8E7F1 /* HomeTopicListTableViewCell.m in Sources */,
6F475FBB1EB37BC6003021EA /* CollectionRequestViewController.m in Sources */,
6FDF08D9218B126700B2AF2C /* Download.m in Sources */,
0832BF1222BD6BB000EFFFE6 /* SearchLoadingCollectionViewCell.m in Sources */,
081DAA221E099DAF00018623 /* DownloadFooterSectionView.m in Sources */,
+ 6F2AB1B62487C31C009D9FBC /* MediaPlayerViewController+SongPanel.swift in Sources */,
6F475FD41EB37BC6003021EA /* PageViewController.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -6404,7 +6219,9 @@
0804917E22832C5D00E4CEC2 /* HomeShowCollectionViewCell.m in Sources */,
6F12DB5321A3EFBF0054879D /* HistoryViewController.m in Sources */,
6FF7BB9A22A78DE400FA758A /* SearchSettingSwitchCell.m in Sources */,
+ 6F167F54248198DC00B8E7F1 /* HomeTopicCollectionViewCell.m in Sources */,
6FA9ECBD20C7AB3A00D3D6C2 /* NotificationTableViewCell.m in Sources */,
+ 6FE287702481687A00358CFF /* SongTableViewCell.m in Sources */,
08280F192258F02400AC978D /* WatchLater.m in Sources */,
08DD9D681FFE6EF900115906 /* ModuleViewController.m in Sources */,
088899482077628400242654 /* TVChannel.m in Sources */,
@@ -6429,6 +6246,7 @@
0806E7BB1D50D919002ED406 /* SettingsViewController.m in Sources */,
6F475FB71EB37BC6003021EA /* BaseViewController.m in Sources */,
6FC1FA8B2292E3480036CB34 /* NSSet+PlaySRG.m in Sources */,
+ 6FE2873F2481448C00358CFF /* SongsViewController.m in Sources */,
089EA014201148260070E11A /* NSTimer+PlaySRG.m in Sources */,
6F12E4DB22D866F200BC1718 /* MostSearchedShowsHeaderView.m in Sources */,
08B2A53D2426511800C6EED3 /* SRGModule+PlaySRG.m in Sources */,
@@ -6439,6 +6257,8 @@
6F7EEBE122DC40B7005E5A97 /* SearchBar.m in Sources */,
6F3E0A0423D055DD009B00C1 /* SettingTableViewCell.m in Sources */,
6F7EEBF622DC7AA7005E5A97 /* SearchSettingMultiSelectionCell.m in Sources */,
+ 6F3B0224245AAE1B00C5A8D7 /* ProgramTableViewCell.m in Sources */,
+ 6FD686222460670600B8018A /* Channel.m in Sources */,
6F475FDF1EB37BC6003021EA /* RequestViewController.m in Sources */,
0841E70922F0953A009D8304 /* SRGDay+PlaySRG.m in Sources */,
086F8D6C22984B29001BE2F4 /* FavoriteTableViewCell.m in Sources */,
@@ -6446,7 +6266,8 @@
6FD88F7A22D3618F008859EF /* SearchSettingsHeaderView.m in Sources */,
6F6B643121A70FAA00E207FC /* HomeStatusHeaderView.m in Sources */,
6FD633E11FFBC0BE00875BE5 /* GoogleCastMiniPlayerView.m in Sources */,
- 089EA01B201148F50070E11A /* TimerTarget.m in Sources */,
+ 6F56F9F7247C407100B2387B /* ChannelServiceSetup.m in Sources */,
+ 6FC0C698245FF06D00B44CAE /* ProgramHeaderView.m in Sources */,
6FAF43031EF7CD8A0074E033 /* HomeTopicViewController.m in Sources */,
6F008760219AA888004BD6FF /* StoreReview.m in Sources */,
6F12DB4921A3EFBF0054879D /* HistoryTableViewCell.m in Sources */,
@@ -6458,6 +6279,7 @@
08C691381D391A1B00BB8AAA /* HomeMediaListTableViewCell.m in Sources */,
6F0A7F0220AC0B9A00DF6723 /* OnboardingViewController.swift in Sources */,
6F475FD01EB37BC6003021EA /* NavigationController.m in Sources */,
+ 6FA6C0662458064C00518DE6 /* SRGProgramComposition+PlaySRG.m in Sources */,
08C68F971D38DEA100BB8AAA /* HomeViewController.m in Sources */,
6F0A41721F6FAB6E000533E7 /* Calendar.m in Sources */,
6FDF08FD218B126700B2AF2C /* DeprecatedFavorite.m in Sources */,
@@ -6483,6 +6305,8 @@
6F0EDA682448B0D800F0FED2 /* RefreshControl.m in Sources */,
6F80E9C521A682E70027CA2F /* TableRequestViewController.m in Sources */,
6FE1B91C1FAC34D600A58F3B /* ContentInsets.m in Sources */,
+ 6FD6861B246052A100B8018A /* GradientView.m in Sources */,
+ 6F7F2B09249CD78D00C37526 /* SRGLetterboxController+PlaySRG.m in Sources */,
6F93DE1020AE985C00B71572 /* OnboardingsViewController.m in Sources */,
6F861AFB1DAE65A600C46102 /* SRGMediaPlayerDesignables.m in Sources */,
6FF4D4E323D5B07E008B981A /* UIVisualEffectView+PlaySRG.m in Sources */,
@@ -6550,10 +6374,12 @@
6FD88F8622D476CF008859EF /* UIScrollView+PlaySRG.m in Sources */,
6F9897D02412582400B390A2 /* Layout.m in Sources */,
0837CEAF1D3FAEE200A1E089 /* HomeMediaCollectionViewCell.m in Sources */,
+ 6F167F4D248197C700B8E7F1 /* HomeTopicListTableViewCell.m in Sources */,
6F475FBC1EB37BC6003021EA /* CollectionRequestViewController.m in Sources */,
6FDF08DA218B126700B2AF2C /* Download.m in Sources */,
0832BF1322BD6BB000EFFFE6 /* SearchLoadingCollectionViewCell.m in Sources */,
081DAA231E099DAF00018623 /* DownloadFooterSectionView.m in Sources */,
+ 6F2AB1B72487C31C009D9FBC /* MediaPlayerViewController+SongPanel.swift in Sources */,
6F475FD51EB37BC6003021EA /* PageViewController.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -6569,7 +6395,9 @@
0804917F22832C5D00E4CEC2 /* HomeShowCollectionViewCell.m in Sources */,
6F12DB5421A3EFBF0054879D /* HistoryViewController.m in Sources */,
6FF7BB9B22A78DE400FA758A /* SearchSettingSwitchCell.m in Sources */,
+ 6F167F55248198DC00B8E7F1 /* HomeTopicCollectionViewCell.m in Sources */,
6FA9ECBE20C7AB3A00D3D6C2 /* NotificationTableViewCell.m in Sources */,
+ 6FE287712481687B00358CFF /* SongTableViewCell.m in Sources */,
08280F1A2258F02400AC978D /* WatchLater.m in Sources */,
08DD9D6C1FFE6EFA00115906 /* ModuleViewController.m in Sources */,
088899492077628500242654 /* TVChannel.m in Sources */,
@@ -6594,6 +6422,7 @@
0806E7BC1D50D919002ED406 /* SettingsViewController.m in Sources */,
6F475FB81EB37BC6003021EA /* BaseViewController.m in Sources */,
6FC1FA8C2292E3480036CB34 /* NSSet+PlaySRG.m in Sources */,
+ 6FE287402481448C00358CFF /* SongsViewController.m in Sources */,
089EA015201148270070E11A /* NSTimer+PlaySRG.m in Sources */,
6F12E4DD22D866F200BC1718 /* MostSearchedShowsHeaderView.m in Sources */,
08B2A53E2426511800C6EED3 /* SRGModule+PlaySRG.m in Sources */,
@@ -6604,6 +6433,8 @@
6F7EEBE222DC40B7005E5A97 /* SearchBar.m in Sources */,
6F3E0A0523D055DD009B00C1 /* SettingTableViewCell.m in Sources */,
6F7EEBF722DC7AA7005E5A97 /* SearchSettingMultiSelectionCell.m in Sources */,
+ 6F3B0225245AAE1B00C5A8D7 /* ProgramTableViewCell.m in Sources */,
+ 6FD686232460670600B8018A /* Channel.m in Sources */,
6F475FE01EB37BC6003021EA /* RequestViewController.m in Sources */,
0841E70A22F0953A009D8304 /* SRGDay+PlaySRG.m in Sources */,
086F8D6D22984B29001BE2F4 /* FavoriteTableViewCell.m in Sources */,
@@ -6611,7 +6442,8 @@
6FD88F7B22D3618F008859EF /* SearchSettingsHeaderView.m in Sources */,
6F6B643221A70FAA00E207FC /* HomeStatusHeaderView.m in Sources */,
6FD633E21FFBC0BE00875BE5 /* GoogleCastMiniPlayerView.m in Sources */,
- 089EA01C201148F60070E11A /* TimerTarget.m in Sources */,
+ 6F56F9F8247C407100B2387B /* ChannelServiceSetup.m in Sources */,
+ 6FC0C699245FF06D00B44CAE /* ProgramHeaderView.m in Sources */,
6FAF43041EF7CD8A0074E033 /* HomeTopicViewController.m in Sources */,
6F008761219AA888004BD6FF /* StoreReview.m in Sources */,
6F12DB4A21A3EFBF0054879D /* HistoryTableViewCell.m in Sources */,
@@ -6623,6 +6455,7 @@
08C691391D391A1B00BB8AAA /* HomeMediaListTableViewCell.m in Sources */,
6F0A7F0320AC0B9A00DF6723 /* OnboardingViewController.swift in Sources */,
6F475FD11EB37BC6003021EA /* NavigationController.m in Sources */,
+ 6FA6C0672458064C00518DE6 /* SRGProgramComposition+PlaySRG.m in Sources */,
08C68F981D38DEA100BB8AAA /* HomeViewController.m in Sources */,
6F0A41731F6FAB6E000533E7 /* Calendar.m in Sources */,
6FDF08FE218B126700B2AF2C /* DeprecatedFavorite.m in Sources */,
@@ -6648,6 +6481,8 @@
6F0EDA692448B0D800F0FED2 /* RefreshControl.m in Sources */,
6F80E9C621A682E70027CA2F /* TableRequestViewController.m in Sources */,
6FE1B91D1FAC34D600A58F3B /* ContentInsets.m in Sources */,
+ 6FD6861C246052A100B8018A /* GradientView.m in Sources */,
+ 6F7F2B0A249CD78E00C37526 /* SRGLetterboxController+PlaySRG.m in Sources */,
6F93DE1120AE985C00B71572 /* OnboardingsViewController.m in Sources */,
6F861AFC1DAE65A600C46102 /* SRGMediaPlayerDesignables.m in Sources */,
6FF4D4E423D5B07E008B981A /* UIVisualEffectView+PlaySRG.m in Sources */,
@@ -6715,10 +6550,12 @@
6FD88F8722D476CF008859EF /* UIScrollView+PlaySRG.m in Sources */,
6F9897D12412582400B390A2 /* Layout.m in Sources */,
0837CEB11D3FAEE300A1E089 /* HomeMediaCollectionViewCell.m in Sources */,
+ 6F167F4E248197C700B8E7F1 /* HomeTopicListTableViewCell.m in Sources */,
6F475FBD1EB37BC6003021EA /* CollectionRequestViewController.m in Sources */,
6FDF08DB218B126700B2AF2C /* Download.m in Sources */,
0832BF1422BD6BB000EFFFE6 /* SearchLoadingCollectionViewCell.m in Sources */,
081DAA241E099DB000018623 /* DownloadFooterSectionView.m in Sources */,
+ 6F2AB1B82487C31C009D9FBC /* MediaPlayerViewController+SongPanel.swift in Sources */,
6F475FD61EB37BC6003021EA /* PageViewController.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -7620,7 +7457,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 332;
+ CURRENT_PROJECT_VERSION = 338;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
@@ -7638,8 +7475,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
- MARKETING_VERSION = 3.0.2;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ MARKETING_VERSION = 3.1.0;
MARKETING_VERSION_SUFFIX = "-debug";
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
@@ -7688,7 +7525,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 332;
+ CURRENT_PROJECT_VERSION = 338;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -7700,8 +7537,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
- MARKETING_VERSION = 3.0.2;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ MARKETING_VERSION = 3.1.0;
MARKETING_VERSION_SUFFIX = "";
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
@@ -7732,7 +7569,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -7762,7 +7598,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -7791,7 +7626,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -7821,7 +7655,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -7850,7 +7683,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -7880,7 +7712,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -7909,7 +7740,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -7939,7 +7769,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -7967,7 +7796,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -7996,7 +7824,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -8043,7 +7870,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 332;
+ CURRENT_PROJECT_VERSION = 338;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -8056,8 +7883,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
- MARKETING_VERSION = 3.0.2;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ MARKETING_VERSION = 3.1.0;
MARKETING_VERSION_SUFFIX = "-beta";
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
@@ -8089,7 +7916,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -8119,7 +7945,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -8149,7 +7974,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -8179,7 +8003,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -8208,7 +8031,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -8255,7 +8077,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
- CURRENT_PROJECT_VERSION = 332;
+ CURRENT_PROJECT_VERSION = 338;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -8268,8 +8090,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
- MARKETING_VERSION = 3.0.2;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ MARKETING_VERSION = 3.1.0;
MARKETING_VERSION_SUFFIX = "-nightly";
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
@@ -8301,7 +8123,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -8333,7 +8154,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -8365,7 +8185,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -8397,7 +8216,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -8428,7 +8246,6 @@
"$(PROJECT_DIR)/Carthage/Build/iOS/Static",
);
INFOPLIST_FILE = "$(PROJECT_DIR)/Application/Application-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -8458,7 +8275,6 @@
);
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -8521,7 +8337,6 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
@@ -8587,7 +8402,6 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
@@ -8653,7 +8467,6 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
@@ -8685,7 +8498,6 @@
);
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -8748,7 +8560,6 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
@@ -8814,7 +8625,6 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
@@ -8880,7 +8690,6 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
@@ -8912,7 +8721,6 @@
);
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -8975,7 +8783,6 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
@@ -9041,7 +8848,6 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
@@ -9107,7 +8913,6 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
@@ -9139,7 +8944,6 @@
);
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -9202,7 +9006,6 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
@@ -9268,7 +9071,6 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
@@ -9334,7 +9136,6 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
@@ -9365,7 +9166,6 @@
);
GCC_C_LANGUAGE_STANDARD = gnu11;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -9427,7 +9227,6 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
@@ -9492,7 +9291,6 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
@@ -9557,7 +9355,6 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = "$(PROJECT_DIR)/Extensions/NotificationService/NotificationService-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_BUNDLE_IDENTIFIER).notification-service-extension";
diff --git a/PlaySRG.xcodeproj/xcshareddata/xcschemes/Play RSI screenshots.xcscheme b/PlaySRG.xcodeproj/xcshareddata/xcschemes/Play RSI screenshots.xcscheme
index 5d278ce75..1c21417dc 100644
--- a/PlaySRG.xcodeproj/xcshareddata/xcschemes/Play RSI screenshots.xcscheme
+++ b/PlaySRG.xcodeproj/xcshareddata/xcschemes/Play RSI screenshots.xcscheme
@@ -1,6 +1,6 @@
+ scriptText = ""${SRCROOT}/Scripts/status-bar-screenshots.sh"
">
+ scriptText = ""${SRCROOT}/Scripts/status-bar-screenshots.sh"
">
+ scriptText = ""${SRCROOT}/Scripts/status-bar-screenshots.sh"
">
+ scriptText = ""${SRCROOT}/Scripts/status-bar-screenshots.sh"
">