am 771466f6: resolved conflicts for da76169f to lmp-dev
* commit '771466f6a00c2bd123edac644b66963b32fc5184':
TIF: Verify if the TV app shows EPG for 3rd-party input
diff --git a/apps/CtsVerifier/res/values/strings.xml b/apps/CtsVerifier/res/values/strings.xml
index 6fa743c..4354bf8 100644
--- a/apps/CtsVerifier/res/values/strings.xml
+++ b/apps/CtsVerifier/res/values/strings.xml
@@ -1428,6 +1428,14 @@
Overlay view must be shown. Verify that there is a text view displaying \"Overlay View Dummy Text\"
when you tune to the \"Dummy\" channel.
</string>
+ <string name="tv_input_discover_test_go_to_epg">
+ Press the \"Launch EPG\" button, and locate the channel named \"Dummy\".
+ </string>
+ <string name="tv_input_discover_test_verify_epg">
+ Do you see the programs named \"Dummy Program\" and its description
+ "Dummy Program Description" in the EPG?
+ </string>
+ <string name="tv_input_discover_test_yes">Yes</string>
<string name="tv_parental_control_test">Live Channels app parental control test</string>
<string name="tv_parental_control_test_info">
@@ -1455,6 +1463,7 @@
</string>
<string name="tv_launch_tv_app">Launch Live Channels</string>
+ <string name="tv_launch_epg">Launch EPG</string>
<string name="tv_channel_not_found">
CtsVerifier channel is not set up. Please set up before proceeding.
</string>
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/tv/MockTvInputSetupActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/tv/MockTvInputSetupActivity.java
index 81a8edc..1d3fd40 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/tv/MockTvInputSetupActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/tv/MockTvInputSetupActivity.java
@@ -21,18 +21,26 @@
import android.content.ContentValues;
import android.database.Cursor;
import android.media.tv.TvContract;
+import android.media.tv.TvContract.Programs;
import android.media.tv.TvInputInfo;
import android.net.Uri;
import android.os.Bundle;
import android.util.Pair;
import android.view.View;
+import java.util.ArrayList;
+
public class MockTvInputSetupActivity extends Activity {
private static final String TAG = "MockTvInputSetupActivity";
private static final String CHANNEL_NUMBER = "999-0";
private static final String CHANNEL_NAME = "Dummy";
+ private static final String PROGRAM_TITLE = "Dummy Program";
+ private static final String PROGRAM_DESCRIPTION = "Dummy Program Description";
+ private static final long PROGRAM_LENGTH_MILLIS = 60 * 60 * 1000;
+ private static final int PROGRAM_COUNT = 24;
+
private static Object sLock = new Object();
private static Pair<View, Runnable> sLaunchCallback = null;
@@ -55,6 +63,8 @@
return;
}
}
+
+ // Add a channel.
ContentValues values = new ContentValues();
values.put(TvContract.Channels.COLUMN_INPUT_ID, inputId);
values.put(TvContract.Channels.COLUMN_DISPLAY_NUMBER, CHANNEL_NUMBER);
@@ -62,9 +72,27 @@
Uri channelUri = getContentResolver().insert(uri, values);
// If the channel's ID happens to be zero, we add another and delete the one.
if (ContentUris.parseId(channelUri) == 0) {
- getContentResolver().insert(uri, values);
getContentResolver().delete(channelUri, null, null);
+ channelUri = getContentResolver().insert(uri, values);
}
+
+ // Add Programs.
+ values = new ContentValues();
+ values.put(Programs.COLUMN_CHANNEL_ID, ContentUris.parseId(channelUri));
+ values.put(Programs.COLUMN_TITLE, PROGRAM_TITLE);
+ values.put(Programs.COLUMN_SHORT_DESCRIPTION, PROGRAM_DESCRIPTION);
+ long nowMs = System.currentTimeMillis();
+ long startTimeMs = nowMs - nowMs % PROGRAM_LENGTH_MILLIS;
+ ArrayList<ContentValues> list = new ArrayList<>();
+ for (int i = 0; i < PROGRAM_COUNT; ++i) {
+ values.put(Programs.COLUMN_START_TIME_UTC_MILLIS, startTimeMs);
+ values.put(Programs.COLUMN_END_TIME_UTC_MILLIS,
+ startTimeMs + PROGRAM_LENGTH_MILLIS);
+ startTimeMs += PROGRAM_LENGTH_MILLIS;
+ list.add(new ContentValues(values));
+ }
+ getContentResolver().bulkInsert(Programs.CONTENT_URI, list.toArray(
+ new ContentValues[0]));
} finally {
Pair<View, Runnable> launchCallback = null;
synchronized (sLock) {
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/tv/TvInputDiscoveryTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/tv/TvInputDiscoveryTestActivity.java
index 3d17a1a..4d12d52 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/tv/TvInputDiscoveryTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/tv/TvInputDiscoveryTestActivity.java
@@ -30,7 +30,9 @@
private static final String TAG = "TvInputDiscoveryTestActivity";
private static final Intent TV_APP_INTENT = new Intent(Intent.ACTION_VIEW,
- TvContract.buildChannelUri(0));
+ TvContract.Channels.CONTENT_URI);
+ private static final Intent EPG_INTENT = new Intent(Intent.ACTION_VIEW,
+ TvContract.Programs.CONTENT_URI);
private static final long TIMEOUT_MS = 5l * 60l * 1000l; // 5 mins.
@@ -39,6 +41,8 @@
private View mTuneToChannelItem;
private View mVerifyTuneItem;
private View mVerifyOverlayViewItem;
+ private View mGoToEpgItem;
+ private View mVerifyEpgItem;
private boolean mTuneVerified;
private boolean mOverlayViewVerified;
@@ -63,6 +67,7 @@
setButtonEnabled(mTuneToChannelItem, true);
}
});
+ startActivity(TV_APP_INTENT);
} else if (containsButton(mTuneToChannelItem, v)) {
final Runnable failCallback = new Runnable() {
@Override
@@ -78,7 +83,7 @@
setPassState(mVerifyTuneItem, true);
mTuneVerified = true;
- updatePassState(postTarget, failCallback);
+ goToNextState(postTarget, failCallback);
}
});
MockTvInputService.expectOverlayView(postTarget, new Runnable() {
@@ -88,11 +93,18 @@
setPassState(mVerifyOverlayViewItem, true);
mOverlayViewVerified = true;
- updatePassState(postTarget, failCallback);
+ goToNextState(postTarget, failCallback);
}
});
+ startActivity(TV_APP_INTENT);
+ } else if (containsButton(mGoToEpgItem, v)) {
+ startActivity(EPG_INTENT);
+ setPassState(mGoToEpgItem, true);
+ setButtonEnabled(mVerifyEpgItem, true);
+ } else if (containsButton(mVerifyEpgItem, v)) {
+ setPassState(mVerifyEpgItem, true);
+ getPassButton().setEnabled(true);
}
- startActivity(TV_APP_INTENT);
}
@Override
@@ -106,12 +118,16 @@
mVerifyTuneItem = createAutoItem(R.string.tv_input_discover_test_verify_tune);
mVerifyOverlayViewItem = createAutoItem(
R.string.tv_input_discover_test_verify_overlay_view);
+ mGoToEpgItem = createUserItem(R.string.tv_input_discover_test_go_to_epg,
+ R.string.tv_launch_epg, this);
+ mVerifyEpgItem = createUserItem(R.string.tv_input_discover_test_verify_epg,
+ R.string.tv_input_discover_test_yes, this);
}
- private void updatePassState(View postTarget, Runnable failCallback) {
+ private void goToNextState(View postTarget, Runnable failCallback) {
if (mTuneVerified && mOverlayViewVerified) {
postTarget.removeCallbacks(failCallback);
- getPassButton().setEnabled(true);
+ setButtonEnabled(mGoToEpgItem, true);
}
}