aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv
diff options
context:
space:
mode:
authorYoungsang Cho <youngsang@google.com>2014-05-15 14:38:47 +0900
committerYoungsang Cho <youngsang@google.com>2014-05-15 21:55:10 +0900
commitabbb11f93689809f258fa99a9d106a9f85ce5805 (patch)
tree444c1f7be87cbe2022faf5f9a8d90ddba77d946d /src/com/android/tv
parentc5822c429140d918688dcce2867b8e652a9ca49b (diff)
downloadTV-abbb11f93689809f258fa99a9d106a9f85ce5805.tar.gz
Handle the case that the last selected TV input is uninstalled
Bug: 14974586 Change-Id: Ie7c1ef30461e7ffb4998f4333e92d4c8e2c19920
Diffstat (limited to 'src/com/android/tv')
-rw-r--r--src/com/android/tv/ChannelMap.java11
-rw-r--r--src/com/android/tv/TvActivity.java9
-rw-r--r--src/com/android/tv/TvInputManagerHelper.java8
3 files changed, 19 insertions, 9 deletions
diff --git a/src/com/android/tv/ChannelMap.java b/src/com/android/tv/ChannelMap.java
index 2fd855ed..0970052d 100644
--- a/src/com/android/tv/ChannelMap.java
+++ b/src/com/android/tv/ChannelMap.java
@@ -118,8 +118,7 @@ public class ChannelMap implements LoaderManager.LoaderCallbacks<Cursor> {
while(browsableChannelCount > 0 && (mCursor.moveToNext() || mCursor.moveToFirst())) {
if (mCursor.getInt(mIndexBrowsable) == BROWSABLE || ignoreBrowsable) {
--browsableChannelCount;
- if (!mTvInputManagerHelper.isAvaliable(
- TvInputInfo.generateInputIdForComponenetName(getComponentName()))) {
+ if (!mTvInputManagerHelper.isAvailable(getInputId())) {
continue;
}
mCurrentChannelId = mCursor.getLong(mIndexId);
@@ -143,8 +142,7 @@ public class ChannelMap implements LoaderManager.LoaderCallbacks<Cursor> {
while(browsableChannelCount > 0 && (mCursor.moveToPrevious() || mCursor.moveToLast())) {
if (mCursor.getInt(mIndexBrowsable) == BROWSABLE || ignoreBrowsable) {
--browsableChannelCount;
- if (!mTvInputManagerHelper.isAvaliable(
- TvInputInfo.generateInputIdForComponenetName(getComponentName()))) {
+ if (!mTvInputManagerHelper.isAvailable(getInputId())) {
continue;
}
mCurrentChannelId = mCursor.getLong(mIndexId);
@@ -253,9 +251,10 @@ public class ChannelMap implements LoaderManager.LoaderCallbacks<Cursor> {
mCursor.moveToPosition(oldPosition);
}
- private ComponentName getComponentName() {
- return new ComponentName(mCursor.getString(mIndexPackageName),
+ private String getInputId() {
+ ComponentName componentName = new ComponentName(mCursor.getString(mIndexPackageName),
mCursor.getString(mIndexServiceName));
+ return TvInputInfo.generateInputIdForComponenetName(componentName);
}
private void checkCursor() {
diff --git a/src/com/android/tv/TvActivity.java b/src/com/android/tv/TvActivity.java
index 1f9b1972..7df9b307 100644
--- a/src/com/android/tv/TvActivity.java
+++ b/src/com/android/tv/TvActivity.java
@@ -344,11 +344,18 @@ public class TvActivity extends Activity implements
return;
}
TvInputInfo input = mTvInputManagerHelper.getTvInputInfo(inputId);
+ if (input == null) {
+ // TODO: if the last selected TV input is uninstalled, getLastWatchedChannelId
+ // should return Channel.INVALID_ID.
+ Log.w(TAG, "Input (id=" + inputId + ") doesn't exist");
+ showInputPickerDialog();
+ return;
+ }
startSessionIfAvailableOrRetry(input, channelId, 0);
}
private void startSessionIfAvailableOrRetry(TvInputInfo input, long channelId, int retryCount) {
- if (!mTvInputManagerHelper.isAvaliable(input.getId())) {
+ if (!mTvInputManagerHelper.isAvailable(input.getId())) {
if (retryCount >= START_DEFAULT_SESSION_MAX_RETRY) {
showInputPickerDialog();
return;
diff --git a/src/com/android/tv/TvInputManagerHelper.java b/src/com/android/tv/TvInputManagerHelper.java
index ac1b272d..33c6b15e 100644
--- a/src/com/android/tv/TvInputManagerHelper.java
+++ b/src/com/android/tv/TvInputManagerHelper.java
@@ -19,6 +19,7 @@ package com.android.tv;
import android.os.Handler;
import android.tv.TvInputInfo;
import android.tv.TvInputManager;
+import android.util.Log;
import junit.framework.Assert;
@@ -33,6 +34,8 @@ import java.util.Set;
public class TvInputManagerHelper {
+ private static final String TAG = "TvInputManagerHelper";
+
private final TvInputManager mTvInputManager;
private final Map<String, Boolean> mInputAvailabilityMap =
new HashMap<String, Boolean>();
@@ -145,7 +148,7 @@ public class TvInputManagerHelper {
return mInputAvailabilityMap.size();
}
- public boolean isAvaliable(String inputId) {
+ public boolean isAvailable(String inputId) {
if (!mStarted) {
throw new IllegalStateException("AvailabilityManager doesn't started");
}
@@ -154,7 +157,8 @@ public class TvInputManagerHelper {
update();
available = mInputAvailabilityMap.get(inputId);
if (available == null) {
- throw new IllegalArgumentException("inputName (" + inputId + ") doesn't exist");
+ Log.w(TAG, "isAvailable: no such input (id=" + inputId + ")");
+ return false;
}
}
return available;