4040import java .util .ArrayList ;
4141import java .util .Arrays ;
4242import java .util .HashSet ;
43- import java .util .Iterator ;
4443import java .util .List ;
4544import java .util .Queue ;
4645import java .util .Set ;
@@ -63,6 +62,27 @@ public class EpgSyncTask implements HtspMessage.Listener, Authenticator.Listener
6362 "eventAdd" , "eventUpdate" , "eventDelete" ,
6463 "initialSyncCompleted" ,
6564 }));
65+ private static final String CHANNEL_ID_KEY = "channelId" ;
66+ private static final String CHANNEL_NUMBER_KEY = "channelNumber" ;
67+ private static final String CHANNEL_NUMBER_MINOR_KEY = "channelNumberMinor" ;
68+ private static final String CHANNEL_NAME_KEY = "channelName" ;
69+ private static final String CHANNEL_ICON_KEY = "channelIcon" ;
70+
71+ private static final String PROGRAM_DESCRIPTION_KEY = "description" ;
72+ private static final String PROGRAM_SUMMARY_KEY = "summary" ;
73+ private static final String PROGRAM_TITLE_KEY = "title" ;
74+ private static final String PROGRAM_EPISODE_TITLE_KEY = "subtitle" ;
75+ private static final String PROGRAM_CONTENT_TYPE_KEY = "contentType" ;
76+ private static final String PROGRAM_AGE_RATING_KEY = "ageRating" ;
77+ private static final String PROGRAM_START_TIME_KEY = "start" ;
78+ private static final String PROGRAM_FINISH_TIME_KEY = "stop" ;
79+ private static final String PROGRAM_SEASON_NUMBER_KEY = "seasonNumber" ;
80+ private static final String PROGRAM_EPISODE_NUMBER_KEY = "episodeNumber" ;
81+ private static final String PROGRAM_IMAGE = "image" ;
82+
83+ private static final String EVENT_ID_KEY = "eventId" ;
84+
85+ private static final int TWO_HOURS = 2 *60 *60 ;
6686
6787 /**
6888 * A listener for EpgSync events
@@ -174,7 +194,7 @@ public void onAuthenticationStateChange(@NonNull Authenticator.State state) {
174194
175195 if (mQuickSync ) {
176196 // Quick sync ignores the epg time preference, and syncs 2 hours of data
177- epgMaxTime = 7200 ;
197+ epgMaxTime = TWO_HOURS ;
178198 }
179199
180200 epgMaxTime = epgMaxTime + (System .currentTimeMillis () / 1000L );
@@ -244,19 +264,19 @@ private ContentValues channelToContentValues(@NonNull HtspMessage message) {
244264
245265 values .put (TvContract .Channels .COLUMN_INPUT_ID , TvContractUtils .getInputId ());
246266 values .put (TvContract .Channels .COLUMN_TYPE , TvContract .Channels .TYPE_OTHER );
247- values .put (TvContract .Channels .COLUMN_ORIGINAL_NETWORK_ID , message .getInteger ("channelId" ));
267+ values .put (TvContract .Channels .COLUMN_ORIGINAL_NETWORK_ID , message .getInteger (CHANNEL_ID_KEY ));
248268
249- if (message .containsKey ("channelNumber" ) && message .containsKey ("channelNumberMinor" )) {
250- final int channelNumber = message .getInteger ("channelNumber" );
251- final int channelNumberMinor = message .getInteger ("channelNumberMinor" );
269+ if (message .containsKey (CHANNEL_NUMBER_KEY ) && message .containsKey (CHANNEL_NUMBER_MINOR_KEY )) {
270+ final int channelNumber = message .getInteger (CHANNEL_NUMBER_KEY );
271+ final int channelNumberMinor = message .getInteger (CHANNEL_NUMBER_MINOR_KEY );
252272 values .put (TvContract .Channels .COLUMN_DISPLAY_NUMBER , channelNumber + "." + channelNumberMinor );
253- } else if (message .containsKey ("channelNumber" )) {
254- final int channelNumber = message .getInteger ("channelNumber" );
273+ } else if (message .containsKey (CHANNEL_NUMBER_KEY )) {
274+ final int channelNumber = message .getInteger (CHANNEL_NUMBER_KEY );
255275 values .put (TvContract .Channels .COLUMN_DISPLAY_NUMBER , String .valueOf (channelNumber ));
256276 }
257277
258- if (message .containsKey ("channelName" )) {
259- values .put (TvContract .Channels .COLUMN_DISPLAY_NAME , message .getString ("channelName" ));
278+ if (message .containsKey (CHANNEL_NAME_KEY )) {
279+ values .put (TvContract .Channels .COLUMN_DISPLAY_NAME , message .getString (CHANNEL_NAME_KEY ));
260280 }
261281
262282 // TODO
@@ -266,7 +286,7 @@ private ContentValues channelToContentValues(@NonNull HtspMessage message) {
266286 }
267287
268288 private void handleChannelAddUpdate (@ NonNull HtspMessage message ) {
269- final int channelId = message .getInteger ("channelId" );
289+ final int channelId = message .getInteger (CHANNEL_ID_KEY );
270290 final ContentValues values = channelToContentValues (message );
271291 final Uri channelUri = TvContractUtils .getChannelUri (mContext , channelId );
272292
@@ -298,8 +318,8 @@ private void handleChannelAddUpdate(@NonNull HtspMessage message) {
298318 flushPendingChannelOps ();
299319 }
300320
301- if (message .containsKey ("channelIcon" )) {
302- mPendingChannelLogoFetches .add (new PendingChannelLogoFetch (channelId , Uri .parse (message .getString ("channelIcon" ))));
321+ if (message .containsKey (CHANNEL_ICON_KEY )) {
322+ mPendingChannelLogoFetches .add (new PendingChannelLogoFetch (channelId , Uri .parse (message .getString (CHANNEL_ICON_KEY ))));
303323 }
304324
305325 mSeenChannels .add (channelId );
@@ -433,78 +453,78 @@ protected void deleteChannels() {
433453 private ContentValues eventToContentValues (@ NonNull HtspMessage message ) {
434454 ContentValues values = new ContentValues ();
435455
436- values .put (TvContract .Programs .COLUMN_CHANNEL_ID , TvContractUtils .getChannelId (mContext , message .getInteger ("channelId" )));
437- values .put (TvContract .Programs .COLUMN_INTERNAL_PROVIDER_DATA , String .valueOf (message .getInteger ("eventId" )));
456+ values .put (TvContract .Programs .COLUMN_CHANNEL_ID , TvContractUtils .getChannelId (mContext , message .getInteger (CHANNEL_ID_KEY )));
457+ values .put (TvContract .Programs .COLUMN_INTERNAL_PROVIDER_DATA , String .valueOf (message .getInteger (EVENT_ID_KEY )));
438458
439459 // COLUMN_TITLE, COLUMN_EPISODE_TITLE, and COLUMN_SHORT_DESCRIPTION are used in the
440460 // Live Channels app EPG Grid. COLUMN_LONG_DESCRIPTION appears unused.
441461 // On Sony TVs, COLUMN_LONG_DESCRIPTION is used for the "more info" display.
442462
443- if (message .containsKey ("title" )) {
463+ if (message .containsKey (PROGRAM_TITLE_KEY )) {
444464 // The title of this TV program.
445- values .put (TvContract .Programs .COLUMN_TITLE , message .getString ("title" ));
465+ values .put (TvContract .Programs .COLUMN_TITLE , message .getString (PROGRAM_TITLE_KEY ));
446466 }
447467
448- if (message .containsKey ("subtitle" )) {
468+ if (message .containsKey (PROGRAM_EPISODE_TITLE_KEY )) {
449469 // The episode title of this TV program for episodic TV shows.
450- values .put (TvContract .Programs .COLUMN_EPISODE_TITLE , message .getString ("subtitle" ));
470+ values .put (TvContract .Programs .COLUMN_EPISODE_TITLE , message .getString (PROGRAM_EPISODE_TITLE_KEY ));
451471 }
452472
453- if (message .containsKey ("summary" ) && message .containsKey ("description" )) {
473+ if (message .containsKey (PROGRAM_SUMMARY_KEY ) && message .containsKey (PROGRAM_DESCRIPTION_KEY )) {
454474 // If we have both summary and description... use them both
455- values .put (TvContract .Programs .COLUMN_SHORT_DESCRIPTION , message .getString ("summary" ));
456- values .put (TvContract .Programs .COLUMN_LONG_DESCRIPTION , message .getString ("description" ));
475+ values .put (TvContract .Programs .COLUMN_SHORT_DESCRIPTION , message .getString (PROGRAM_SUMMARY_KEY ));
476+ values .put (TvContract .Programs .COLUMN_LONG_DESCRIPTION , message .getString (PROGRAM_DESCRIPTION_KEY ));
457477
458- } else if (message .containsKey ("summary" ) && !message .containsKey ("description" )) {
478+ } else if (message .containsKey (PROGRAM_SUMMARY_KEY ) && !message .containsKey (PROGRAM_DESCRIPTION_KEY )) {
459479 // If we have only summary, use it.
460- values .put (TvContract .Programs .COLUMN_SHORT_DESCRIPTION , message .getString ("summary" ));
480+ values .put (TvContract .Programs .COLUMN_SHORT_DESCRIPTION , message .getString (PROGRAM_SUMMARY_KEY ));
461481
462- } else if (!message .containsKey ("summary" ) && message .containsKey ("description" )) {
482+ } else if (!message .containsKey (PROGRAM_SUMMARY_KEY ) && message .containsKey (PROGRAM_DESCRIPTION_KEY )) {
463483 // If we have only description, use it.
464- values .put (TvContract .Programs .COLUMN_SHORT_DESCRIPTION , message .getString ("description" ));
484+ values .put (TvContract .Programs .COLUMN_SHORT_DESCRIPTION , message .getString (PROGRAM_DESCRIPTION_KEY ));
465485 }
466486
467- if (message .containsKey ("contentType" )) {
487+ if (message .containsKey (PROGRAM_CONTENT_TYPE_KEY )) {
468488 values .put (TvContract .Programs .COLUMN_CANONICAL_GENRE ,
469- DvbMappings .ProgramGenre .get (message .getInteger ("contentType" )));
489+ DvbMappings .ProgramGenre .get (message .getInteger (PROGRAM_CONTENT_TYPE_KEY )));
470490 }
471491
472- if (message .containsKey ("ageRating" )) {
473- final int ageRating = message .getInteger ("ageRating" );
492+ if (message .containsKey (PROGRAM_AGE_RATING_KEY )) {
493+ final int ageRating = message .getInteger (PROGRAM_AGE_RATING_KEY );
474494 if (ageRating >= 4 && ageRating <= 18 ) {
475495 TvContentRating rating = TvContentRating .createRating ("com.android.tv" , "DVB" , "DVB_" + ageRating );
476496 values .put (TvContract .Programs .COLUMN_CONTENT_RATING , rating .flattenToString ());
477497 }
478498 }
479499
480- if (message .containsKey ("start" )) {
481- values .put (TvContract .Programs .COLUMN_START_TIME_UTC_MILLIS , message .getLong ("start" ) * 1000 );
500+ if (message .containsKey (PROGRAM_START_TIME_KEY )) {
501+ values .put (TvContract .Programs .COLUMN_START_TIME_UTC_MILLIS , message .getLong (PROGRAM_START_TIME_KEY ) * 1000 );
482502 }
483503
484- if (message .containsKey ("stop" )) {
485- values .put (TvContract .Programs .COLUMN_END_TIME_UTC_MILLIS , message .getLong ("stop" ) * 1000 );
504+ if (message .containsKey (PROGRAM_FINISH_TIME_KEY )) {
505+ values .put (TvContract .Programs .COLUMN_END_TIME_UTC_MILLIS , message .getLong (PROGRAM_FINISH_TIME_KEY ) * 1000 );
486506 }
487507
488508 if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .N ) {
489- if (message .containsKey ("seasonNumber" )) {
490- values .put (TvContract .Programs .COLUMN_SEASON_DISPLAY_NUMBER , message .getInteger ("seasonNumber" ));
509+ if (message .containsKey (PROGRAM_SEASON_NUMBER_KEY )) {
510+ values .put (TvContract .Programs .COLUMN_SEASON_DISPLAY_NUMBER , message .getInteger (PROGRAM_SEASON_NUMBER_KEY ));
491511 }
492512
493- if (message .containsKey ("episodeNumber" )) {
494- values .put (TvContract .Programs .COLUMN_EPISODE_DISPLAY_NUMBER , message .getInteger ("episodeNumber" ));
513+ if (message .containsKey (PROGRAM_EPISODE_NUMBER_KEY )) {
514+ values .put (TvContract .Programs .COLUMN_EPISODE_DISPLAY_NUMBER , message .getInteger (PROGRAM_EPISODE_NUMBER_KEY ));
495515 }
496516 } else {
497- if (message .containsKey ("seasonNumber" )) {
498- values .put (TvContract .Programs .COLUMN_SEASON_NUMBER , message .getInteger ("seasonNumber" ));
517+ if (message .containsKey (PROGRAM_SEASON_NUMBER_KEY )) {
518+ values .put (TvContract .Programs .COLUMN_SEASON_NUMBER , message .getInteger (PROGRAM_SEASON_NUMBER_KEY ));
499519 }
500520
501- if (message .containsKey ("episodeNumber" )) {
502- values .put (TvContract .Programs .COLUMN_EPISODE_NUMBER , message .getInteger ("episodeNumber" ));
521+ if (message .containsKey (PROGRAM_EPISODE_NUMBER_KEY )) {
522+ values .put (TvContract .Programs .COLUMN_EPISODE_NUMBER , message .getInteger (PROGRAM_EPISODE_NUMBER_KEY ));
503523 }
504524 }
505525
506- if (message .containsKey ("image" )) {
507- values .put (TvContract .Programs .COLUMN_POSTER_ART_URI , message .getString ("image" ));
526+ if (message .containsKey (PROGRAM_IMAGE )) {
527+ values .put (TvContract .Programs .COLUMN_POSTER_ART_URI , message .getString (PROGRAM_IMAGE ));
508528 } else if (mSharedPreferences .getBoolean (Constants .KEY_EPG_DEFAULT_POSTER_ART_ENABLED , false )) {
509529 values .put (TvContract .Programs .COLUMN_POSTER_ART_URI , "android.resource://" + BuildConfig .APPLICATION_ID + "/" + R .drawable .default_event_icon );
510530 }
@@ -517,8 +537,8 @@ private void handleEventAddUpdate(@NonNull HtspMessage message) {
517537 // once there are no pending operations
518538 flushPendingChannelOps ();
519539
520- final int channelId = message .getInteger ("channelId" );
521- final int eventId = message .getInteger ("eventId" );
540+ final int channelId = message .getInteger (CHANNEL_ID_KEY );
541+ final int eventId = message .getInteger (EVENT_ID_KEY );
522542 final ContentValues values = eventToContentValues (message );
523543 final Uri eventUri = TvContractUtils .getProgramUri (mContext , channelId , eventId );
524544
0 commit comments