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 @@ - + - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + - + - - - + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + - - + - - - + + - - - - - - - - - - - - - - - - - + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - + + - + @@ -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" "> + scriptText = ""${SRCROOT}/Scripts/status-bar-screenshots.sh" "> 5.15.0' pod 'FSCalendar', '2.7.9' pod 'google-cast-sdk-no-bluetooth', '~> 4.4.6' - pod 'InAppSettingsKit', '~> 2.10.0' - pod 'MaterialComponents/Tabs', '~> 101.1.1' + pod 'InAppSettingsKit', '~> 3.0.1' + pod 'MaterialComponents/Tabs', '~> 109.5' pod 'MGSwipeTableCell', '~> 1.6.8' - pod 'paper-onboarding', '~> 6.1.3' - pod 'SwiftMessages', '~> 7.0.0' - pod 'UrbanAirship-iOS-SDK', '9.4.0' + pod 'paper-onboarding', '~> 6.1.5' + pod 'SwiftMessages', '~> 7.0.1' target 'Play SRF' do end diff --git a/Podfile.lock b/Podfile.lock index 4ec5de7a4..1ede0eae7 100755 --- a/Podfile.lock +++ b/Podfile.lock @@ -65,26 +65,31 @@ PODS: - GoogleUtilities/Logger - GoogleUtilities/UserDefaults (5.3.7): - GoogleUtilities/Logger - - InAppSettingsKit (2.10) - - MaterialComponents/AnimationTiming (101.1.1) - - MaterialComponents/Elevation (101.1.1): + - InAppSettingsKit (3.0.1) + - MaterialComponents/AnimationTiming (109.5.0) + - MaterialComponents/Availability (109.5.0) + - MaterialComponents/Elevation (109.5.0): + - MaterialComponents/Availability - MaterialComponents/private/Color - MaterialComponents/private/Math - - MaterialComponents/Ink (101.1.1): + - MaterialComponents/Ink (109.5.0): + - MaterialComponents/Availability - MaterialComponents/private/Color - MaterialComponents/private/Math - - MaterialComponents/Palettes (101.1.1) - - MaterialComponents/private/Application (101.1.1) - - MaterialComponents/private/Color (101.1.1) - - MaterialComponents/private/Math (101.1.1) - - MaterialComponents/Ripple (101.1.1): + - MaterialComponents/Palettes (109.5.0) + - MaterialComponents/private/Application (109.5.0) + - MaterialComponents/private/Color (109.5.0): + - MaterialComponents/Availability + - MaterialComponents/private/Math (109.5.0) + - MaterialComponents/Ripple (109.5.0): - MaterialComponents/AnimationTiming + - MaterialComponents/Availability - MaterialComponents/private/Color - MaterialComponents/private/Math - - MaterialComponents/ShadowElevations (101.1.1) - - MaterialComponents/ShadowLayer (101.1.1): + - MaterialComponents/ShadowElevations (109.5.0) + - MaterialComponents/ShadowLayer (109.5.0): - MaterialComponents/ShadowElevations - - MaterialComponents/Tabs (101.1.1): + - MaterialComponents/Tabs (109.5.0): - MaterialComponents/AnimationTiming - MaterialComponents/Elevation - MaterialComponents/Ink @@ -95,7 +100,7 @@ PODS: - MaterialComponents/ShadowLayer - MaterialComponents/Typography - MDFInternationalization - - MaterialComponents/Typography (101.1.1): + - MaterialComponents/Typography (109.5.0): - MaterialComponents/private/Application - MaterialComponents/private/Math - MDFInternationalization (2.0.0) @@ -105,12 +110,11 @@ PODS: - nanopb/encode (= 0.3.901) - nanopb/decode (0.3.901) - nanopb/encode (0.3.901) - - paper-onboarding (6.1.3) + - paper-onboarding (6.1.5) - Protobuf (3.6.1) - - SwiftMessages (7.0.0): - - SwiftMessages/App (= 7.0.0) - - SwiftMessages/App (7.0.0) - - UrbanAirship-iOS-SDK (9.4.0) + - SwiftMessages (7.0.1): + - SwiftMessages/App (= 7.0.1) + - SwiftMessages/App (7.0.1) DEPENDENCIES: - AutoCoding (~> 2.2.3) @@ -118,12 +122,11 @@ DEPENDENCIES: - Firebase/RemoteConfig (~> 5.15.0) - FSCalendar (= 2.7.9) - google-cast-sdk-no-bluetooth (~> 4.4.6) - - InAppSettingsKit (~> 2.10.0) - - MaterialComponents/Tabs (~> 101.1.1) + - InAppSettingsKit (~> 3.0.1) + - MaterialComponents/Tabs (~> 109.5) - MGSwipeTableCell (~> 1.6.8) - - paper-onboarding (~> 6.1.3) - - SwiftMessages (~> 7.0.0) - - UrbanAirship-iOS-SDK (= 9.4.0) + - paper-onboarding (~> 6.1.5) + - SwiftMessages (~> 7.0.1) SPEC REPOS: https://github.com/CocoaPods/Specs.git: @@ -147,7 +150,6 @@ SPEC REPOS: - paper-onboarding - Protobuf - SwiftMessages - - UrbanAirship-iOS-SDK SPEC CHECKSUMS: AutoCoding: 90ca3cbc0d77a37cfff75167d705b44148c5fc51 @@ -162,16 +164,15 @@ SPEC CHECKSUMS: google-cast-sdk-no-bluetooth: 0b2f106f07592fe08bb78851bfd20a89e1cb613b GoogleAppMeasurement: 98b71f5e04142793729a5ef23e5b96651ff4b70f GoogleUtilities: 111a012f4c3a29c9e7c954c082fafd6ee3c999c0 - InAppSettingsKit: d965e29be941eb19857271e4625de3fba6e23c9f - MaterialComponents: ee54e69c0956bd6e341933eee6f34dc6df08ee7a + InAppSettingsKit: 0d6cf327364085375cbfd8011fd6ae1c0d2c7d1c + MaterialComponents: 7698cdf7eacb5f192456dbbe597aa7a8857fa3ef MDFInternationalization: 010097556d6b09d2c4ea38e0820ea6d37be6a314 MGSwipeTableCell: dc4eca3212ed38a563b27d6aa7b3c01ce656c1e2 nanopb: 2901f78ea1b7b4015c860c2fdd1ea2fee1a18d48 - paper-onboarding: 47ded9ede6ae9dd7ec135dddd8bd3e170b79d799 + paper-onboarding: fede1799b1da6988f3788e3b71654583c6f3bce1 Protobuf: 1eb9700044745f00181c136ef21b8ff3ad5a0fd5 - SwiftMessages: a952f7a9103d9aeab93730a2861d2d8fcdd8758f - UrbanAirship-iOS-SDK: 25f155c0142b62e4a94ec21093d65c6e128f5213 + SwiftMessages: b577dc7043be8b299857ab35bb663dbff6483bd0 -PODFILE CHECKSUM: 7bb3a88d688c3065339f4497ff001162c6eded18 +PODFILE CHECKSUM: 93ecde6f871e5fa487173dc4f1b47f4165c5f6fb -COCOAPODS: 1.9.0 +COCOAPODS: 1.9.3 diff --git a/Scripts/satus-bar-screenshots.sh b/Scripts/status-bar-screenshots.sh similarity index 100% rename from Scripts/satus-bar-screenshots.sh rename to Scripts/status-bar-screenshots.sh diff --git a/UITests/Screenshots/Sources/ApplicationScreenshots.swift b/UITests/Screenshots/Sources/ApplicationScreenshots.swift index a608d0fa5..bc7468abb 100644 --- a/UITests/Screenshots/Sources/ApplicationScreenshots.swift +++ b/UITests/Screenshots/Sources/ApplicationScreenshots.swift @@ -43,24 +43,37 @@ class ApplicationScreenshots: XCTestCase { snapshot("1-VideosHomeScreen") } - let audiosTabBarItemQuery = tabBarsQuery.buttons[AccessibilityIdentifier.audiosTabBarItem.rawValue] - if audiosTabBarItemQuery.exists { + let audiosTabBarItemQuery = tabBarsQuery.buttons[AccessibilityIdentifier.audiosTabBarItem.rawValue] + if audiosTabBarItemQuery.exists { audiosTabBarItemQuery.tap() sleep(10) snapshot("2-AudiosHomeScreen") } - let livestreamsTabBarItemQuery = tabBarsQuery.buttons[AccessibilityIdentifier.livestreamsTabBarItem.rawValue] - if livestreamsTabBarItemQuery.exists { + let livestreamsTabBarItemQuery = tabBarsQuery.buttons[AccessibilityIdentifier.livestreamsTabBarItem.rawValue] + if livestreamsTabBarItemQuery.exists { livestreamsTabBarItemQuery.tap() sleep(10) snapshot("3-LiveHomeScreen") + + let firstRadioCellQuery = application.tables.firstMatch.cells.element(boundBy: 1).collectionViews.cells.firstMatch + if firstRadioCellQuery.exists { + firstRadioCellQuery.tap() + + sleep(10) + snapshot("4-RadioLivePlayer") + + let closeButtonQuery = application.buttons[AccessibilityIdentifier.closeButton.rawValue]; + if closeButtonQuery.exists { + closeButtonQuery.tap() + } + } } let searchText = configuration["SearchText"] - let searchTabBarItemQuery = tabBarsQuery.buttons[AccessibilityIdentifier.searchTabBarItem.rawValue] + let searchTabBarItemQuery = tabBarsQuery.buttons[AccessibilityIdentifier.searchTabBarItem.rawValue] if searchTabBarItemQuery.exists && searchText != nil { searchTabBarItemQuery.tap() @@ -70,7 +83,7 @@ class ApplicationScreenshots: XCTestCase { application.typeText("\n") sleep(10) - snapshot("4-SearchScreen") + snapshot("5-SearchScreen") } } } diff --git a/UITests/Screenshots/Sources/Helpers/SnapshotHelper.swift b/UITests/Screenshots/Sources/Helpers/SnapshotHelper.swift index aaa2a9a92..f5b393c2c 100644 --- a/UITests/Screenshots/Sources/Helpers/SnapshotHelper.swift +++ b/UITests/Screenshots/Sources/Helpers/SnapshotHelper.swift @@ -38,22 +38,13 @@ func snapshot(_ name: String, timeWaitingForIdle timeout: TimeInterval = 20) { } enum SnapshotError: Error, CustomDebugStringConvertible { - case cannotDetectUser - case cannotFindHomeDirectory case cannotFindSimulatorHomeDirectory - case cannotAccessSimulatorHomeDirectory(String) case cannotRunOnPhysicalDevice var debugDescription: String { switch self { - case .cannotDetectUser: - return "Couldn't find Snapshot configuration files - can't detect current user " - case .cannotFindHomeDirectory: - return "Couldn't find Snapshot configuration files - can't detect `Users` dir" case .cannotFindSimulatorHomeDirectory: return "Couldn't find simulator home location. Please, check SIMULATOR_HOST_HOME env variable." - case .cannotAccessSimulatorHomeDirectory(let simulatorHostHome): - return "Can't prepare environment. Simulator home location is inaccessible. Does \(simulatorHostHome) exist?" case .cannotRunOnPhysicalDevice: return "Can't use Snapshot on a physical device." } @@ -75,7 +66,7 @@ open class Snapshot: NSObject { Snapshot.waitForAnimations = waitForAnimations do { - let cacheDir = try pathPrefix() + let cacheDir = try getCacheDirectory() Snapshot.cacheDirectory = cacheDir setLanguage(app) setLocale(app) @@ -206,40 +197,28 @@ open class Snapshot: NSObject { _ = XCTWaiter.wait(for: [networkLoadingIndicatorDisappeared], timeout: timeout) } - class func pathPrefix() throws -> URL? { - let homeDir: URL + class func getCacheDirectory() throws -> URL { + let cachePath = "Library/Caches/tools.fastlane" // on OSX config is stored in /Users//Library // and on iOS/tvOS/WatchOS it's in simulator's home dir #if os(OSX) - guard let user = ProcessInfo().environment["USER"] else { - throw SnapshotError.cannotDetectUser + let homeDir = URL(fileURLWithPath: NSHomeDirectory()) + return homeDir.appendingPathComponent(cachePath) + #elseif arch(i386) || arch(x86_64) + guard let simulatorHostHome = ProcessInfo().environment["SIMULATOR_HOST_HOME"] else { + throw SnapshotError.cannotFindSimulatorHomeDirectory } - - guard let usersDir = FileManager.default.urls(for: .userDirectory, in: .localDomainMask).first else { - throw SnapshotError.cannotFindHomeDirectory - } - - homeDir = usersDir.appendingPathComponent(user) + let homeDir = URL(fileURLWithPath: simulatorHostHome) + return homeDir.appendingPathComponent(cachePath) #else - #if arch(i386) || arch(x86_64) - guard let simulatorHostHome = ProcessInfo().environment["SIMULATOR_HOST_HOME"] else { - throw SnapshotError.cannotFindSimulatorHomeDirectory - } - guard let homeDirUrl = URL(string: simulatorHostHome) else { - throw SnapshotError.cannotAccessSimulatorHomeDirectory(simulatorHostHome) - } - homeDir = URL(fileURLWithPath: homeDirUrl.path) - #else - throw SnapshotError.cannotRunOnPhysicalDevice - #endif + throw SnapshotError.cannotRunOnPhysicalDevice #endif - return homeDir.appendingPathComponent("Library/Caches/tools.fastlane") } } private extension XCUIElementAttributes { var isNetworkLoadingIndicator: Bool { - if hasWhiteListedIdentifier { return false } + if hasAllowListedIdentifier { return false } let hasOldLoadingIndicatorSize = frame.size == CGSize(width: 10, height: 20) let hasNewLoadingIndicatorSize = frame.size.width.isBetween(46, and: 47) && frame.size.height.isBetween(2, and: 3) @@ -247,10 +226,10 @@ private extension XCUIElementAttributes { return hasOldLoadingIndicatorSize || hasNewLoadingIndicatorSize } - var hasWhiteListedIdentifier: Bool { - let whiteListedIdentifiers = ["GeofenceLocationTrackingOn", "StandardLocationTrackingOn"] + var hasAllowListedIdentifier: Bool { + let allowListedIdentifiers = ["GeofenceLocationTrackingOn", "StandardLocationTrackingOn"] - return whiteListedIdentifiers.contains(identifier) + return allowListedIdentifiers.contains(identifier) } func isStatusBar(_ deviceWidth: CGFloat) -> Bool { @@ -300,4 +279,4 @@ private extension CGFloat { // Please don't remove the lines below // They are used to detect outdated configuration files -// SnapshotHelperVersion [1.21] +// SnapshotHelperVersion [1.23] diff --git a/WhatsNew-beta.json b/WhatsNew-beta.json index 0c9840eb9..df4bedbc0 100755 --- a/WhatsNew-beta.json +++ b/WhatsNew-beta.json @@ -108,5 +108,11 @@ "3.0.1-329": "- Fixes sometimes erratic scroll position when returning on a homepage.\n- Fixes double tap on tab which sometimes would not return to the top of a list.", "3.0.2-330": "- Latest TV / Radio livestream restoration on livestream tab.\n- Snap content and on horizontal swimlanes.\n- Split view for the iPad profile tab.\n- Fix the mini player when using with Picture in Picture on iPad.\n- Fix preview background color on iOS 13.\n- Fix scroll position coupling between swimlanes\n- Avoid displaying empty screen when no swimlanes have been loaded.", "3.0.2-331": "- Fix profile view rotation on iPhone.\n- Improve empty home screens when no swimlanes have been loaded.\n- Improve VoiceOver for latest TV / Radio livestream items moved to the front on livestream tab.", - "3.0.2-332": "- AppStore release." + "3.0.2-332": "- AppStore release.", + "3.1.0-333": "### Timeshift improvement\n\nImproved timeshift experience for livestreams providing content for the last hours (2h for TV, 6h for radio):\n- Navigate the shows recently broadcasted and restart any of them from the beginning.\n- (Radio only) Check which songs have been broadcasted and play them again.\n\nImprovements and fixes:\n- Topics can be accessed with shortcuts displayed at the top of the video homepage.\n- Device can correctly sleep when playing a video in background.\n- Updated Radio RTR logo.\n\nMinimum iOS supported version: 12.0.", + "3.1.0-334": "- Fix a potential crash when seeking on a livestream.\n- Update italian translation.", + "3.1.0-335": "- Fix crash when updating settings.", + "3.1.0-336": "- Update german translation.", + "3.1.0-337": "- Display waveform for song currently being played.\n- Display current show in show list for livestreams without timeshift.\n- Apply snapping in search results for shows.", + "3.1.0-338": "- UI improvement for video livestreams.\n- Long press to copy the song title and artist name." } \ No newline at end of file diff --git a/docs/README-images/home.jpg b/docs/README-images/home.jpg index 880af5f79..5d62ce314 100644 Binary files a/docs/README-images/home.jpg and b/docs/README-images/home.jpg differ diff --git a/docs/README.md b/docs/README.md index 3affa7039..0eb84969b 100755 --- a/docs/README.md +++ b/docs/README.md @@ -31,7 +31,7 @@ Depending on the business unit, some functionalities might not be available (e.g ## Compatibility -The project runs on iOS 9 and above and must be opened with the latest Xcode version. +The project runs on iOS 12 and above and must be opened with the latest Xcode version. ## Contributing diff --git a/docs/RELEASE_CHECKLIST.md b/docs/RELEASE_CHECKLIST.md index 683f30d89..eea9a37ef 100755 --- a/docs/RELEASE_CHECKLIST.md +++ b/docs/RELEASE_CHECKLIST.md @@ -17,11 +17,12 @@ | Build betas for AppCenter (with fastlane on TeamCity) |||||| | Check what's new in AppCenter betas |||||| | Write test ticket and alert testers on Slack |||||| +| Update production remote configuration on Firebase |||||| | Build versions for iTunes Connect (with fastlane) |||||| | Wait until the binary has been validated on iTunes Connect |||||| | Get the binary DSYM and upload it on AppCenter (with fastlane) |||||| | Ask the BU to approve the version |||||| -| Wait until successful Apple review |||||| +| Obtain successful Apple review |||||| | Release to the store |||||| | Check that the application is available in production |||||| | Remove the _preprod_ flag from what's new information on Pastebin |||||| diff --git a/docs/REMOTE_CONFIGURATION.md b/docs/REMOTE_CONFIGURATION.md index 69edfd5f7..885e782fe 100755 --- a/docs/REMOTE_CONFIGURATION.md +++ b/docs/REMOTE_CONFIGURATION.md @@ -38,18 +38,24 @@ If a remote configuration is found to be invalid (usually a mandatory parameter ## Channel configuration -* `tvChannels` (optional, JSON): A JSON array of JSON dictionaries describing TV channel configuration, and made of the following keys: - * `uid` (mandatory, string): The unique identifier of the TV channel. - * `name` (mandatory, string): The TV channel name. - * `resourceUid` (mandatory, string): Local unique identifier for referencing resources related to the channel. -* `radioChannels` (optional, JSON): A JSON array of JSON dictionaries describing radio channel configuration, and made of the following keys: - * `uid` (mandatory, string): The unique identifier of the radio channel. - * `name` (mandatory, string): The radio channel name. - * `resourceUid` (mandatory, string): Local unique identifier for referencing resources related to the channel. - * `color` (mandatory, string): The radio channel primary hex color. Used as navigation bar background color. - * `homeSections` (optional, string, multiple): The sections to be displayed on the radio channel homepage. Refer to _Audio homepage_ for available values. If omitted, the global `audioHomeSections` setting is used instead (in which case this value is required). - * `titleColor` (optional, string): Hex color of the text displayed within the navigation bar (should provide sufficient contrast with `color`). If omitted, white. - * `hasDarkStatusBar` (optional, boolean): `true` iff the status bar should be dark for this channel. If omitted, `false`. +TV and radio channels are configured with corresponding JSON dictionaries: + +* `tvChannels` (optional, JSON): A JSON array of JSON dictionaries describing TV channel configuration. Available common keys are listed below. +* `radioChannels` (optional, JSON): A JSON array of JSON dictionaries describing radio channel configuration. Available common keys are listed below, with the additional following specific keys: + * `homeSections` (optional, string, multiple): The sections to be displayed on the channel homepage. Refer to _Audio homepage_ for available values. If omitted, the global `audioHomeSections` setting is used instead (in which case this value is required). + +The keys common to both TV and radio channels JSON dictionaries are: + +* `uid` (mandatory, string): The unique identifier of the channel. +* `name` (mandatory, string): The channel name. +* `resourceUid` (mandatory, string): Local unique identifier for referencing resources related to the channel. +* `color` (optional, string): The channel primary hex color. Used as navigation bar background color. If omitted, gray. +* `secondColor` (optional, string): The channel second hex color. Currently used for gradients. If omitted, same as `color`. +* `titleColor` (optional, string): Hex color of the text displayed on top of colored areas (should provide sufficient contrast with `color` and `secondColor`). If omitted, white. +* `hasDarkStatusBar` (optional, boolean): `true` iff the status bar should be dark for this channel. If omitted, `false`. +* `songsViewStyle` (optional, string): The songs view style when added to the view. Never displayed if not set. Available values are: + * `collapsed`: Collapsed when added to the view. + * `expanded`: Expanded when added to the view. ## Video homepage @@ -57,20 +63,21 @@ If a remote configuration is found to be invalid (usually a mandatory parameter ### Home sections -* `tvEvents`: Event modules. +* `tvEvents`: Event modules (expand into a row per event). * `tvFavoriteShows`: TV shows added to the favorites. * `tvLatest`: The latest medias. +* `tvMostPopular`: The most popular videos. * `tvShowsAccess`: A-Z and By date access buttons. * `tvSoonExpiring`: Soon expiring videos. -* `tvTopics`: Topics. +* `tvTopics`: Topics (expand into a row per topic). +* `tvTopicsAccess`: Topic access. * `tvTrending`: Trending medias and editorial picks. See `tvTrendingEpisodesOnly` and `tvTrendingEditorialLimit` options. -* `tvMostPopular`: The most popular videos. ### Topic configuration * `topicSections` (optional, string, multiple): The sections to be displayed when opening a topic. If none is provided, latest medias are displayed. Available values are: * `latest`: The latest medias. - * `mostPopular`: The most popular medias + * `mostPopular`: The most popular medias. * `topicSectionsWithSubtopics` (optional, string, multiple): The sections to be displayed when opening a topic with subtopics. If none is provided, only subtopics are displayed. Available values are the same as `topicSections`. ### User interface options diff --git a/fastlane/README.md b/fastlane/README.md index 3b2244f33..c6fd914aa 100755 --- a/fastlane/README.md +++ b/fastlane/README.md @@ -12,7 +12,7 @@ Install _fastlane_ using ``` [sudo] gem install fastlane -NV ``` -or alternatively using `brew cask install fastlane` +or alternatively using `brew install fastlane` # Available Actions ## iOS diff --git a/fastlane/Snapfile b/fastlane/Snapfile index 450b3f3ec..134b7411a 100644 --- a/fastlane/Snapfile +++ b/fastlane/Snapfile @@ -4,7 +4,7 @@ devices([ 'iPhone 11 Pro Max', # 6.5 inch, required 'iPhone 8 Plus', # 5.5 inch, required - 'iPad Pro (12.9-inch) (3rd generation)', # 12.9 inch, required + 'iPad Pro (12.9-inch) (4th generation)', # 12.9 inch, required 'iPad Pro (12.9-inch) (2nd generation)' # 12.9 inch, required ])