diff options
author | Youngsang Cho <youngsang@google.com> | 2014-05-15 14:38:47 +0900 |
---|---|---|
committer | Youngsang Cho <youngsang@google.com> | 2014-05-15 21:55:10 +0900 |
commit | abbb11f93689809f258fa99a9d106a9f85ce5805 (patch) | |
tree | 444c1f7be87cbe2022faf5f9a8d90ddba77d946d /src/com/android/tv | |
parent | c5822c429140d918688dcce2867b8e652a9ca49b (diff) | |
download | TV-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.java | 11 | ||||
-rw-r--r-- | src/com/android/tv/TvActivity.java | 9 | ||||
-rw-r--r-- | src/com/android/tv/TvInputManagerHelper.java | 8 |
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; |