Fix duplicate programs when starting games

This commit is contained in:
Cameron Gutman 2019-07-16 21:24:10 -07:00
parent ee46906376
commit dc984e8679

View File

@ -144,7 +144,16 @@ public class TvChannelHelper {
.setPosterArtAspectRatio(ASPECT_RATIO_MOVIE_POSTER)
.setPosterArtUri(resourceURI)
.setIntent(i)
.setInternalProviderId(appId);
.setInternalProviderId(appId)
// Weight should increase each time we run the game
.setWeight((int)((System.currentTimeMillis() - 1500000000000L) / 1000));
Long programId = getProgramId(channelId, appId);
if (programId != null) {
context.getContentResolver().update(TvContract.buildPreviewProgramUri(programId),
builder.toContentValues(), null, null);
return;
}
context.getContentResolver().insert(TvContract.PreviewPrograms.CONTENT_URI,
builder.toContentValues());
@ -170,16 +179,13 @@ public class TvChannelHelper {
@TargetApi(Build.VERSION_CODES.O)
private Long getChannelId(String computerUuid) {
Uri uri = TvContract.Channels.CONTENT_URI;
final String[] CHANNEL_PROJECTION = {TvContract.Channels._ID, TvContract.Channels.COLUMN_INTERNAL_PROVIDER_ID};
Cursor cursor = context.getContentResolver().query(uri,
CHANNEL_PROJECTION,
try (Cursor cursor = context.getContentResolver().query(
TvContract.Channels.CONTENT_URI,
new String[] {TvContract.Channels._ID, TvContract.Channels.COLUMN_INTERNAL_PROVIDER_ID},
null,
null,
null);
try {
if (cursor == null) {
null)) {
if (cursor == null || cursor.getCount() == 0) {
return null;
}
while (cursor.moveToNext()) {
@ -190,11 +196,29 @@ public class TvChannelHelper {
}
return null;
} finally {
if (cursor != null) {
cursor.close();
}
}
@TargetApi(Build.VERSION_CODES.O)
private Long getProgramId(long channelId, String appId) {
try (Cursor cursor = context.getContentResolver().query(
TvContract.buildPreviewProgramsUriForChannel(channelId),
new String[] {TvContract.PreviewPrograms._ID, TvContract.PreviewPrograms.COLUMN_INTERNAL_PROVIDER_ID},
null,
null,
null)) {
if (cursor == null || cursor.getCount() == 0) {
return null;
}
while (cursor.moveToNext()) {
String internalProviderId = cursor.getString(INTERNAL_PROVIDER_ID_INDEX);
if (appId.equals(internalProviderId)) {
return cursor.getLong(ID_INDEX);
}
}
return null;
}
}
private static <T> String toValueString(T value) {
@ -206,7 +230,7 @@ public class TvChannelHelper {
}
@TargetApi(Build.VERSION_CODES.O)
public boolean isAndroidTV() {
private boolean isAndroidTV() {
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK);
}
@ -256,6 +280,11 @@ public class TvChannelHelper {
return this;
}
public PreviewProgramBuilder setWeight(int weight) {
mValues.put(TvContract.PreviewPrograms.COLUMN_WEIGHT, weight);
return this;
}
public ContentValues toContentValues() {
return new ContentValues(mValues);
}