author | wei wang <wei.wang@amlogic.com> | 2018-01-12 09:53:41 (GMT) |
---|---|---|
committer | Sandy Luo <sandy.luo@amlogic.com> | 2018-01-19 08:12:24 (GMT) |
commit | 29a33a0de24952b4ac3651ca49e3a3550c9506ad (patch) | |
tree | fbc3733f5be7b71be581e7137c967cfbea3ccdee | |
parent | b849f474095629e71794252a4951115b39e650ae (diff) | |
download | TvInput-29a33a0de24952b4ac3651ca49e3a3550c9506ad.zip TvInput-29a33a0de24952b4ac3651ca49e3a3550c9506ad.tar.gz TvInput-29a33a0de24952b4ac3651ca49e3a3550c9506ad.tar.bz2 |
TvInput: reset session's status if it's released [1/3]
PD# 158650
Change-Id: I92f891acd93eb066393e4828f8d993aa06185ed9
9 files changed, 215 insertions, 68 deletions
diff --git a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/ATVInputService.java b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/ATVInputService.java index a34c4a2..a3ae269 100644 --- a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/ATVInputService.java +++ b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/ATVInputService.java @@ -99,6 +99,13 @@ public class ATVInputService extends DroidLogicTvInputService { } } + @Override + public void doReleaseFinish(int sessionId) { + Utils.logd(TAG, "doReleaseFinish,sessionId:"+sessionId); + ATVSessionImpl session = sessionMap.get(sessionId); + if (session != null) + session.performDoReleaseSession(); + } public class ATVSessionImpl extends TvInputBaseSession { private final Context mContext; @@ -127,15 +134,24 @@ public class ATVInputService extends DroidLogicTvInputService { public boolean onSetSurface(Surface surface) { return setSurfaceInService(surface,this); } - + @Override + public void onRelease() { + //doRelease(); + Log.d(TAG, "onRelease,session:"+this); + doReleaseInService(getSessionId()); + } @Override public boolean onTune(Uri channelUri) { return doTuneInService(channelUri, getSessionId()); } - @Override - public void doRelease() { - super.doRelease(); + + public void performDoReleaseSession() { + super.performDoReleaseSession(); + if (mCurrentSession != null && mCurrentSession.getSessionId() == getSessionId()) { + mCurrentSession = null; + registerInputSession(null); + } } @Override diff --git a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/AV1InputService.java b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/AV1InputService.java index da02412..d1e336d 100644 --- a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/AV1InputService.java +++ b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/AV1InputService.java @@ -141,6 +141,14 @@ public class AV1InputService extends DroidLogicTvInputService { } } + @Override + public void doReleaseFinish(int sessionId) { + Utils.logd(TAG, "doReleaseFinish,sessionId:"+sessionId); + AV1InputSession session = sessionMap.get(sessionId); + if (session != null) + session.performDoReleaseSession(); + } + public class AV1InputSession extends TvInputBaseSession implements DTVSubtitleView.SubtitleDataListener{ private TvInputManager mTvInputManager; private final Context mContext; @@ -263,6 +271,12 @@ public class AV1InputService extends DroidLogicTvInputService { return setSurfaceInService(surface,this); } @Override + public void onRelease() { + //doRelease(); + Log.d(TAG, "onRelease,session:"+this); + doReleaseInService(getSessionId()); + } + @Override public boolean onTune(Uri channelUri) { isUnlockCurrent_NR = false; mUnblockedRatingSet.clear(); @@ -285,9 +299,9 @@ public class AV1InputService extends DroidLogicTvInputService { } } } - @Override - public void doRelease() { - super.doRelease(); + + public void performDoReleaseSession() { + super.performDoReleaseSession(); mUnblockedRatingSet.clear(); stopSubtitle(); releaseWorkThread(); @@ -301,7 +315,10 @@ public class AV1InputService extends DroidLogicTvInputService { if (sessionMap.containsKey(getSessionId())) { sessionMap.remove(getSessionId()); } - + if (mCurrentSession != null && mCurrentSession.getSessionId() == getSessionId()) { + mCurrentSession = null; + registerInputSession(null); + } mSubtitleView = null; } diff --git a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/AV2InputService.java b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/AV2InputService.java index bc410f9..f789796 100644 --- a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/AV2InputService.java +++ b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/AV2InputService.java @@ -141,6 +141,14 @@ public class AV2InputService extends DroidLogicTvInputService { } } + @Override + public void doReleaseFinish(int sessionId) { + Utils.logd(TAG, "doReleaseFinish,sessionId:"+sessionId); + AV2InputSession session = sessionMap.get(sessionId); + if (session != null) + session.performDoReleaseSession(); + } + public class AV2InputSession extends TvInputBaseSession implements DTVSubtitleView.SubtitleDataListener{ private TvInputManager mTvInputManager; private final Context mContext; @@ -263,6 +271,12 @@ public class AV2InputService extends DroidLogicTvInputService { return setSurfaceInService(surface,this); } @Override + public void onRelease() { + //doRelease(); + Log.d(TAG, "onRelease,session:"+this); + doReleaseInService(getSessionId()); + } + @Override public boolean onTune(Uri channelUri) { isUnlockCurrent_NR = false; mUnblockedRatingSet.clear(); @@ -285,9 +299,9 @@ public class AV2InputService extends DroidLogicTvInputService { } } } - @Override - public void doRelease() { - super.doRelease(); + + public void performDoReleaseSession() { + super.performDoReleaseSession(); mUnblockedRatingSet.clear(); stopSubtitle(); releaseWorkThread(); @@ -301,7 +315,10 @@ public class AV2InputService extends DroidLogicTvInputService { if (sessionMap.containsKey(getSessionId())) { sessionMap.remove(getSessionId()); } - + if (mCurrentSession != null && mCurrentSession.getSessionId() == getSessionId()) { + mCurrentSession = null; + registerInputSession(null); + } mSubtitleView = null; } diff --git a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/DTVInputService.java b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/DTVInputService.java index 21a3b47..535daec 100644 --- a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/DTVInputService.java +++ b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/DTVInputService.java @@ -166,7 +166,7 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr String action = intent.getAction(); Log.d(TAG, "-----onReceive:"+action); if (mCurrentSession != null) - mCurrentSession.doRelease(); + mCurrentSession.performDoReleaseSession(); resetScanStoreListener(); } }; @@ -264,6 +264,14 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr } @Override + public void doReleaseFinish(int sessionId) { + Utils.logd(TAG, "doReleaseFinish,sessionId:"+sessionId); + DTVSessionImpl session = sessionMap.get(sessionId); + if (session != null) + session.performDoReleaseSession(); + } + + @Override public void onSigChanged(TVInSignalInfo signal_info) { if (mTvControlManager.GetCurrentSourceInput() == DroidLogicTvUtils.DEVICE_ID_DTV || mTvControlManager.GetCurrentVirtualSourceInput() == DroidLogicTvUtils.DEVICE_ID_ADTV) { @@ -485,9 +493,15 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr @Override public boolean onSetSurface(Surface surface) { + Log.d(TAG,"onSetSurface:"+surface); return setSurfaceInService(surface,this); } - + @Override + public void onRelease() { + //doRelease(); + Log.d(TAG, "onRelease,session:"+this); + doReleaseInService(getSessionId()); + } @Override public void onOverlayViewSizeChanged(int width, int height) { Log.d(TAG, "onOverlayViewSizeChanged: "+width+","+height); @@ -537,10 +551,10 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr } }; - @Override - public void doRelease() { - Log.d(TAG, "release:"+this); - super.doRelease(); + + public void performDoReleaseSession() { + Log.d(TAG, "performDoReleaseSession:"+this); + super.performDoReleaseSession(); cancelAllMessagesInQuene(); if (mSystemControlManager.getPropertyBoolean("persist.sys.getdtvtime.isneed", false)) { int autoTimeValue = Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.AUTO_TIME, 0); @@ -573,8 +587,10 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr if (sessionMap.containsKey(getSessionId())) { sessionMap.remove(getSessionId()); } - if (mCurrentSession.getSessionId() == getSessionId()) + if (mCurrentSession != null && mCurrentSession.getSessionId() == getSessionId()) { mCurrentSession = null; + registerInputSession(null); + } } @Override @@ -673,6 +689,7 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr /*if (mCurrentSession == msg.obj) why?*/ { switch (msg.what) { case MSG_PLAY: + Log.d(TAG, "MSG_PLAY"); doPlay((Uri)msg.obj); break; case MSG_PARENTAL_CONTROL: @@ -754,7 +771,9 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr } protected void switchToSourceInput(Uri uri) { + Log.d(TAG, "switchToSourceInput uri=" + uri + " this:"+ this); if (mHandler != null) { + Log.d(TAG, "--remove msg_play and start a new one"); mHandler.removeMessages(MSG_PLAY); resetWorkThread(); mHandler.obtainMessage(MSG_PLAY, uri).sendToTarget(); @@ -2328,7 +2347,7 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr private boolean auto_retune_service = true; private HandlerThread mHandlerThread; - private Handler mHandler; + private Handler mMonitorHandler; private HandlerThread mHandlerThreadEPG; private Handler mHandlerEPG; private Context mContext; @@ -2427,7 +2446,7 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr mHandlerThread = new HandlerThread(getClass().getSimpleName()); mHandlerThread.start(); - mHandler = new Handler(mHandlerThread.getLooper()) { + mMonitorHandler = new Handler(mHandlerThread.getLooper()) { @Override public void handleMessage(Message msg) { switch (msg.what) { @@ -2491,8 +2510,8 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr if (mHandlerEPG != null) mHandlerEPG.obtainMessage(MSG_MONITOR_EVENT, event).sendToTarget(); } else { - if (mHandler != null) - mHandler.obtainMessage(MSG_MONITOR_EVENT, event).sendToTarget(); + if (mMonitorHandler != null) + mMonitorHandler.obtainMessage(MSG_MONITOR_EVENT, event).sendToTarget(); } } }; @@ -2574,13 +2593,12 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr mCCObserver = null; } - if (mHandler != null) {/*take care of rescan befor epgScanner=null*/ - mHandler.removeMessages(MSG_MONITOR_RESCAN_SERVICE); - mHandler.removeMessages(MSG_MONITOR_RESCAN_TIME); + if (mMonitorHandler != null) {/*take care of rescan befor epgScanner=null*/ + mMonitorHandler.removeMessages(MSG_MONITOR_RESCAN_SERVICE); + mMonitorHandler.removeMessages(MSG_MONITOR_RESCAN_TIME); } if (mHandlerEPG != null) mHandlerEPG.removeCallbacksAndMessages(null); - synchronized (this) { mTvControlManager.setStorDBListener(null); mTvControlManager.DtvStopScan(); @@ -2589,9 +2607,9 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr epgScanner.destroy(); epgScanner = null; } - if (mHandler != null) { - mHandler.removeCallbacksAndMessages(null); - mHandler = null; + if (mMonitorHandler != null) { + mMonitorHandler.removeCallbacksAndMessages(null); + mMonitorHandler = null; } if (mHandlerThread != null) { @@ -2664,11 +2682,11 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr Log.d(TAG, "monitor may exit, ignore."); return; } - if (mHandler != null) { - mHandler.removeMessages(MSG_MONITOR_RESCAN_SERVICE); + if (mMonitorHandler != null) { + mMonitorHandler.removeMessages(MSG_MONITOR_RESCAN_SERVICE); if (on && (auto_rescan_service == AUTO_RESCAN_CONTINUOUS)) { Log.d(TAG, "rescanServiceLater"); - mHandler.sendEmptyMessageDelayed(MSG_MONITOR_RESCAN_SERVICE, AUTO_RESCAN_SERVICE_INTERVAL); + mMonitorHandler.sendEmptyMessageDelayed(MSG_MONITOR_RESCAN_SERVICE, AUTO_RESCAN_SERVICE_INTERVAL); } } if (on) { @@ -2695,10 +2713,10 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr return; } if (mHandler != null) { - mHandler.removeMessages(MSG_MONITOR_RESCAN_TIME); + mMonitorHandler.removeMessages(MSG_MONITOR_RESCAN_TIME); if (on && (auto_rescan_time == AUTO_RESCAN_CONTINUOUS)) { Log.d(TAG, "rescanTimeLater"); - mHandler.sendEmptyMessageDelayed(MSG_MONITOR_RESCAN_TIME, AUTO_RESCAN_TIME_INTERVAL); + mMonitorHandler.sendEmptyMessageDelayed(MSG_MONITOR_RESCAN_TIME, AUTO_RESCAN_TIME_INTERVAL); } } if (on) { @@ -3438,7 +3456,7 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr private final String mInputId; private final Context mContext; - private final Handler mHandler; + private final Handler mRecordingHandler; private final Random mRandom = new Random(); private static final int MSG_TUNE = 1; @@ -3476,7 +3494,7 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr HandlerThread handlerThread = new HandlerThread(TAG); handlerThread.start(); - mHandler = new Handler(handlerThread.getLooper(), this); + mRecordingHandler = new Handler(handlerThread.getLooper(), this); mStorageDir = new File(getCacheStoragePath()); @@ -3627,7 +3645,7 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr private void exeRelease() { // Current recording will be canceled. mTvControlManager.stopRecording("atsc-rec", null); - mHandler.getLooper().quitSafely(); + mRecordingHandler.getLooper().quitSafely(); } private final String SORT_BY_TIME = TvContract.Programs.COLUMN_START_TIME_UTC_MILLIS @@ -3696,8 +3714,8 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr if (DEBUG) { Log.d(TAG, "Requesting recording session tune: " + channelUri); } - mHandler.removeCallbacksAndMessages(null); - mHandler.obtainMessage(MSG_TUNE, channelUri).sendToTarget(); + mRecordingHandler.removeCallbacksAndMessages(null); + mRecordingHandler.obtainMessage(MSG_TUNE, channelUri).sendToTarget(); } @Override @@ -3705,8 +3723,8 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr if (DEBUG) { Log.d(TAG, "Requesting recording session release."); } - mHandler.removeCallbacksAndMessages(null); - mHandler.sendEmptyMessage(MSG_RELEASE); + mRecordingHandler.removeCallbacksAndMessages(null); + mRecordingHandler.sendEmptyMessage(MSG_RELEASE); } @Override @@ -3714,7 +3732,7 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr if (DEBUG) { Log.d(TAG, "Requesting start recording."); } - mHandler.sendEmptyMessage(MSG_START_RECORDING); + mRecordingHandler.sendEmptyMessage(MSG_START_RECORDING); } @Override @@ -3722,7 +3740,7 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr if (DEBUG) { Log.d(TAG, "Requesting stop recording."); } - mHandler.sendEmptyMessage(MSG_STOP_RECORDING); + mRecordingHandler.sendEmptyMessage(MSG_STOP_RECORDING); } @@ -3763,7 +3781,7 @@ public class DTVInputService extends DroidLogicTvInputService implements TvContr case TvControlManager.RecorderEvent.EVENT_RECORDER_START: break; case TvControlManager.RecorderEvent.EVENT_RECORDER_STOP: - mHandler.obtainMessage(MSG_RECORDING_RESULT, ev.Error == 0).sendToTarget(); + mRecordingHandler.obtainMessage(MSG_RECORDING_RESULT, ev.Error == 0).sendToTarget(); break; } } diff --git a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/Hdmi1InputService.java b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/Hdmi1InputService.java index d8d2683..b2d36af 100644 --- a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/Hdmi1InputService.java +++ b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/Hdmi1InputService.java @@ -65,6 +65,14 @@ public class Hdmi1InputService extends DroidLogicTvInputService { } } + @Override + public void doReleaseFinish(int sessionId) { + Utils.logd(TAG, "doReleaseFinish,sessionId:"+sessionId); + Hdmi1InputSession session = sessionMap.get(sessionId); + if (session != null) + session.performDoReleaseSession(); + } + public class Hdmi1InputSession extends TvInputBaseSession { public Hdmi1InputSession(Context context, String inputId, int deviceId) { super(context, inputId, deviceId); @@ -79,15 +87,24 @@ public class Hdmi1InputService extends DroidLogicTvInputService { public boolean onSetSurface(Surface surface) { return setSurfaceInService(surface,this); } - + @Override + public void onRelease() { + //doRelease(); + Utils.logd(TAG, "onRelease,session:"+this); + doReleaseInService(getSessionId()); + } @Override public boolean onTune(Uri channelUri) { return doTuneInService(channelUri, getSessionId()); } - @Override - public void doRelease() { - super.doRelease(); + + public void performDoReleaseSession() { + super.performDoReleaseSession(); + if (mCurrentSession != null && mCurrentSession.getSessionId() == getSessionId()) { + mCurrentSession = null; + registerInputSession(null); + } } @Override diff --git a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/Hdmi2InputService.java b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/Hdmi2InputService.java index 3ae5d86..dc5bd38 100644 --- a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/Hdmi2InputService.java +++ b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/Hdmi2InputService.java @@ -64,7 +64,13 @@ public class Hdmi2InputService extends DroidLogicTvInputService { } } - + @Override + public void doReleaseFinish(int sessionId) { + Utils.logd(TAG, "doReleaseFinish,sessionId:"+sessionId); + Hdmi2InputSession session = sessionMap.get(sessionId); + if (session != null) + session.performDoReleaseSession(); + } public class Hdmi2InputSession extends TvInputBaseSession { public Hdmi2InputSession(Context context, String inputId, int deviceId) { super(context, inputId, deviceId); @@ -79,15 +85,24 @@ public class Hdmi2InputService extends DroidLogicTvInputService { public boolean onSetSurface(Surface surface) { return setSurfaceInService(surface,this); } - + @Override + public void onRelease() { + //doRelease(); + Utils.logd(TAG, "onRelease,session:"+this); + doReleaseInService(getSessionId()); + } @Override public boolean onTune(Uri channelUri) { return doTuneInService(channelUri, getSessionId()); } - @Override - public void doRelease() { - super.doRelease(); + + public void performDoReleaseSession() { + super.performDoReleaseSession(); + if (mCurrentSession != null && mCurrentSession.getSessionId() == getSessionId()) { + mCurrentSession = null; + registerInputSession(null); + } } @Override diff --git a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/Hdmi3InputService.java b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/Hdmi3InputService.java index eb4a1fd..f1661ba 100644 --- a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/Hdmi3InputService.java +++ b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/Hdmi3InputService.java @@ -65,7 +65,13 @@ public class Hdmi3InputService extends DroidLogicTvInputService { } } - + @Override + public void doReleaseFinish(int sessionId) { + Utils.logd(TAG, "doReleaseFinish,sessionId:"+sessionId); + Hdmi3InputSession session = sessionMap.get(sessionId); + if (session != null) + session.performDoReleaseSession(); + } public class Hdmi3InputSession extends TvInputBaseSession { public Hdmi3InputSession(Context context, String inputId, int deviceId) { super(context, inputId, deviceId); @@ -80,15 +86,24 @@ public class Hdmi3InputService extends DroidLogicTvInputService { public boolean onSetSurface(Surface surface) { return setSurfaceInService(surface,this); } - + @Override + public void onRelease() { + //doRelease(); + Utils.logd(TAG, "onRelease,session:"+this); + doReleaseInService(getSessionId()); + } @Override public boolean onTune(Uri channelUri) { return doTuneInService(channelUri, getSessionId()); } - @Override - public void doRelease() { - super.doRelease(); + + public void performDoReleaseSession() { + super.performDoReleaseSession(); + if (mCurrentSession != null && mCurrentSession.getSessionId() == getSessionId()) { + mCurrentSession = null; + registerInputSession(null); + } } @Override diff --git a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/Hdmi4InputService.java b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/Hdmi4InputService.java index db490c6..ffb7ea0 100644 --- a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/Hdmi4InputService.java +++ b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/Hdmi4InputService.java @@ -65,7 +65,13 @@ public class Hdmi4InputService extends DroidLogicTvInputService { } } - + @Override + public void doReleaseFinish(int sessionId) { + Utils.logd(TAG, "doReleaseFinish,sessionId:"+sessionId); + Hdmi4InputSession session = sessionMap.get(sessionId); + if (session != null) + session.performDoReleaseSession(); + } public class Hdmi4InputSession extends TvInputBaseSession { public Hdmi4InputSession(Context context, String inputId, int deviceId) { super(context, inputId, deviceId); @@ -80,15 +86,24 @@ public class Hdmi4InputService extends DroidLogicTvInputService { public boolean onSetSurface(Surface surface) { return setSurfaceInService(surface,this); } - + @Override + public void onRelease() { + //doRelease(); + Utils.logd(TAG, "onRelease,session:"+this); + doReleaseInService(getSessionId()); + } @Override public boolean onTune(Uri channelUri) { return doTuneInService(channelUri, getSessionId()); } - @Override - public void doRelease() { - super.doRelease(); + + public void performDoReleaseSession() { + super.performDoReleaseSession(); + if (mCurrentSession != null && mCurrentSession.getSessionId() == getSessionId()) { + mCurrentSession = null; + registerInputSession(null); + } } @Override diff --git a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/SPDIFInputService.java b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/SPDIFInputService.java index a5939b8..52e2860 100644 --- a/DroidLogicTvInput/src/com/droidlogic/tvinput/services/SPDIFInputService.java +++ b/DroidLogicTvInput/src/com/droidlogic/tvinput/services/SPDIFInputService.java @@ -52,6 +52,14 @@ public class SPDIFInputService extends DroidLogicTvInputService { } } + @Override + public void doReleaseFinish(int sessionId) { + Utils.logd(TAG, "doReleaseFinish,sessionId:"+sessionId); + SPDIFInputSession session = sessionMap.get(sessionId); + if (session != null) + session.performDoReleaseSession(); + } + public class SPDIFInputSession extends TvInputBaseSession { public SPDIFInputSession(Context context, String inputId, int deviceId) { super(context, inputId, deviceId); @@ -66,15 +74,24 @@ public class SPDIFInputService extends DroidLogicTvInputService { public boolean onSetSurface(Surface surface) { return setSurfaceInService(surface,this); } - + @Override + public void onRelease() { + //doRelease(); + Utils.logd(TAG, "onRelease,session:"+this); + doReleaseInService(getSessionId()); + } @Override public boolean onTune(Uri channelUri) { return doTuneInService(channelUri, getSessionId()); } - @Override - public void doRelease() { - super.doRelease(); + + public void performDoReleaseSession() { + super.performDoReleaseSession(); + if (mCurrentSession != null && mCurrentSession.getSessionId() == getSessionId()) { + mCurrentSession = null; + registerInputSession(null); + } } @Override |