提交 916f8d21 authored 作者: kongdywang's avatar kongdywang

Fix an issue where releasing the player would close the global Picture-in-Picture mode

上级 92d0fdf2
#### Version: 12.4.2 2025.04.30
##### Features:
- Fix an issue where releasing the player would close the global Picture-in-Picture mode.
#### Version: 12.4.1 2025.04.02
##### Features:
......
......@@ -5,7 +5,7 @@ buildLog() {
}
inputVersion=$1
export VERSION_NAME="12.4.1"
export VERSION_NAME="12.4.2"
if [ -n "$inputVersion" ]; then
VERSION_NAME=$inputVersion
fi
......
......@@ -4,7 +4,7 @@ rootProject.ext {
supportSdkVersion = "26.0.1"
minSdkVersion = 19
targetSdkVersion = 28
playerVersion = "12.4.1"
playerVersion = "12.4.2"
compat = "androidx.appcompat:appcompat:1.6.1"
/**
......
......@@ -125,15 +125,18 @@ public class FTXPIPManager implements TXSimpleEventBus.EventSubscriber, FtxMessa
*
* 通知退出当前pip
*/
public void exitPip() {
if (mIsInPipMode) {
final Activity curActivity = TXFlutterEngineHolder.getInstance().getCurActivity();
if (null != curActivity) {
Intent intent = new Intent(curActivity, FlutterPipImplActivity.class);
intent.setAction(FTXEvent.PIP_ACTION_EXIT);
curActivity.startActivity(intent);
mIsInPipMode = false;
}
public void exitCurrentPip() {
exitPipByPlayerId(-1);
}
/**
* @param playerId -1 is close anyway
*/
public void exitPipByPlayerId(int playerId) {
if (isInPipMode()) {
Bundle params = new Bundle();
params.putInt(FTXEvent.EXTRA_NAME_PLAYER_ID, playerId);
TXSimpleEventBus.getInstance().post(FTXEvent.PIP_ACTION_EXIT, params);
}
}
......@@ -238,14 +241,10 @@ public class FTXPIPManager implements TXSimpleEventBus.EventSubscriber, FtxMessa
* 更新PIP悬浮框按钮
*/
public void updatePipActions(PipParams params) {
final Activity mAct = TXFlutterEngineHolder.getInstance().getCurActivity();
if (null != mAct) {
Intent intent = new Intent(mAct, FlutterPipImplActivity.class);
if (isInPipMode()) {
Bundle bundle = new Bundle();
bundle.putParcelable(FTXEvent.EXTRA_NAME_PARAMS, params);
intent.setAction(FTXEvent.PIP_ACTION_UPDATE);
intent.putExtra("data", bundle);
mAct.startActivity(intent);
TXSimpleEventBus.getInstance().post(FTXEvent.PIP_ACTION_UPDATE, bundle);
}
}
......
......@@ -479,7 +479,7 @@ public class SuperPlayerPlugin implements FlutterPlugin, ActivityAware,
}
if (null != mTxPipManager) {
mTxPipManager.releaseActivityListener();
mTxPipManager.exitPip();
mTxPipManager.exitCurrentPip();
}
// Close the solution to the problem of the picture-in-picture click restore
// failure on some versions of Android 12.
......
......@@ -393,7 +393,7 @@ public class FTXLivePlayer extends FTXLivePlayerRenderHost implements TXFlutterL
@Override
public void exitPictureInPictureMode(@NonNull PlayerMsg playerMsg) {
mPipManager.exitPip();
mPipManager.exitPipByPlayerId(getPlayerId());
}
@NonNull
......
......@@ -297,7 +297,7 @@ public class FTXVodPlayer extends FTXVodPlayerRenderHost implements ITXVodPlayLi
result = mVodPlayer.stopPlay(isNeedClearLastImg);
}
mUIHandler.removeCallbacksAndMessages(null);
mPipManager.exitPip();
mPipManager.exitPipByPlayerId(getPlayerId());
releaseTXImageSprite();
mHardwareDecodeFail = false;
if (isNeedClearLastImg && null != mCurRenderView) {
......@@ -723,7 +723,7 @@ public class FTXVodPlayer extends FTXVodPlayerRenderHost implements ITXVodPlayLi
@Override
public void exitPictureInPictureMode(@NonNull PlayerMsg playerMsg) {
mPipManager.exitPip();
mPipManager.exitPipByPlayerId(getPlayerId());
}
@Override
......
......@@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* use to communicate with Activities frequently
......@@ -39,6 +40,16 @@ public class TXSimpleEventBus {
}
}
public void unregisterAllType(EventSubscriber subscriber) {
Set<String> keySets = subscribers.keySet();
for (String key : keySets) {
List<EventSubscriber> subscriberList = subscribers.get(key);
if (subscriberList != null) {
subscriberList.remove(subscriber);
}
}
}
public void post(String eventType, Object data) {
List<EventSubscriber> subscriberList = subscribers.get(eventType);
if (subscriberList != null) {
......
......@@ -45,7 +45,7 @@ import com.tencent.vod.flutter.tools.TXSimpleEventBus;
public class FlutterPipImplActivity extends Activity implements ITXVodPlayListener,
ServiceConnection {
ServiceConnection, TXSimpleEventBus.EventSubscriber {
private static final String TAG = "FlutterPipImplActivity";
private static TXPlayerHolder pipPlayerHolder;
......@@ -159,7 +159,7 @@ public class FlutterPipImplActivity extends Activity implements ITXVodPlayListen
mPipContainer = findViewById(R.id.rl_pip_container);
if (null == pipPlayerHolder) {
LiteavLog.e(TAG, "lack pipPlayerHolder, please check the pip argument");
finish();
destroyPipAct();
return;
}
mPlayerHolder = pipPlayerHolder;
......@@ -169,15 +169,18 @@ public class FlutterPipImplActivity extends Activity implements ITXVodPlayListen
setLivePlayerListener();
} else {
LiteavLog.e(TAG, "lack pipPlayerHolder player, please check the pip argument");
finish();
destroyPipAct();
return;
}
TXSimpleEventBus.getInstance().register(FTXEvent.PIP_ACTION_EXIT, this);
TXSimpleEventBus.getInstance().register(FTXEvent.PIP_ACTION_UPDATE, this);
Intent intent = getIntent();
Bundle data = intent.getBundleExtra("data");
if (null != data) {
PipParams params = data.getParcelable(FTXEvent.EXTRA_NAME_PARAMS);
if (null == params) {
LiteavLog.e(TAG, "lack pip params,please check the argument");
finish();
destroyPipAct();
} else {
mCurrentParams = params;
if (VERSION.SDK_INT >= VERSION_CODES.O) {
......@@ -317,9 +320,11 @@ public class FlutterPipImplActivity extends Activity implements ITXVodPlayListen
}
if (null != mPlayerHolder.getVodPlayer()) {
mPlayerHolder.getVodPlayer().setSurface(null);
mPlayerHolder.getVodPlayer().setVodListener(null);
}
if (null != mPlayerHolder.getLivePlayer()) {
mPlayerHolder.getLivePlayer().setRenderView((TextureView) null);
mPlayerHolder.getLivePlayer().setObserver(null);
}
mPlayerHolder.pause();
int codeEvent = mIsNeedToStop ? FTXEvent.EVENT_PIP_MODE_ALREADY_EXIT : FTXEvent.EVENT_PIP_MODE_RESTORE_UI;
......@@ -336,31 +341,48 @@ public class FlutterPipImplActivity extends Activity implements ITXVodPlayListen
private void handleIntent(Intent intent) {
if (intent != null) {
String action = intent.getAction();
if (TextUtils.equals(action, FTXEvent.PIP_ACTION_START)) {
startPipVideo();
} else if (TextUtils.equals(action, FTXEvent.PIP_ACTION_EXIT)) {
handleAction(action, intent.getExtras());
}
}
private void handleAction(String action, Bundle params) {
if (TextUtils.equals(action, FTXEvent.PIP_ACTION_START)) {
startPipVideo();
} else if (TextUtils.equals(action, FTXEvent.PIP_ACTION_EXIT)) {
int playerId = -1;
if (null != params) {
playerId = params.getInt(FTXEvent.EXTRA_NAME_PLAYER_ID, -1);
}
if (playerId == -1 || playerId == mCurrentParams.getCurrentPlayerId()) {
mIsNeedToStop = true;
handlePipExitEvent();
} else if (TextUtils.equals(action, FTXEvent.PIP_ACTION_UPDATE)) {
Bundle data = intent.getBundleExtra("data");
if (null != data) {
PipParams pipParams = data.getParcelable(FTXEvent.EXTRA_NAME_PARAMS);
updatePip(pipParams);
}
} else if (TextUtils.equals(action, FTXEvent.PIP_ACTION_DO_EXIT)) {
overridePendingTransition(0, 0);
if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {
FlutterPipImplActivity.this.finishAndRemoveTask();
} else {
FlutterPipImplActivity.this.finish();
}
mIsPipFinishing = false;
} else {
LiteavLog.e(TAG, "unknown pip action:" + action);
LiteavLog.w(TAG, "close pip failed, playerId not found:" + playerId);
}
} else if (TextUtils.equals(action, FTXEvent.PIP_ACTION_UPDATE)) {
if (null != params) {
PipParams pipParams = params.getParcelable(FTXEvent.EXTRA_NAME_PARAMS);
updatePip(pipParams);
}
} else if (TextUtils.equals(action, FTXEvent.PIP_ACTION_DO_EXIT)) {
destroyPipAct();
} else {
LiteavLog.e(TAG, "unknown pip action:" + action);
}
}
private void destroyPipAct() {
overridePendingTransition(0, 0);
if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {
FlutterPipImplActivity.this.finishAndRemoveTask();
} else {
FlutterPipImplActivity.this.finish();
}
mIsPipFinishing = false;
pipPlayerHolder = null;
isInPip = false;
}
private void updatePip(PipParams pipParams) {
if (null != pipParams && !isDestroyed() && !isFinishing()) {
mCurrentParams = pipParams;
......@@ -432,23 +454,11 @@ public class FlutterPipImplActivity extends Activity implements ITXVodPlayListen
it can display back to the original page.
*/
moveCurActToFront();
overridePendingTransition(0, 0);
if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {
FlutterPipImplActivity.this.finishAndRemoveTask();
} else {
FlutterPipImplActivity.this.finish();
}
mIsPipFinishing = false;
destroyPipAct();
}
}, 800);
} else {
overridePendingTransition(0, 0);
if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {
finishAndRemoveTask();
} else {
finish();
}
mIsPipFinishing = false;
destroyPipAct();
}
}
}
......@@ -487,6 +497,7 @@ public class FlutterPipImplActivity extends Activity implements ITXVodPlayListen
if (Build.VERSION.SDK_INT >= VERSION_CODES.Q) {
unbindService(this);
}
TXSimpleEventBus.getInstance().unregister(FTXEvent.PIP_ACTION_EXIT, this);
mPlayerHolder = null;
pipPlayerHolder = null;
isInPip = false;
......@@ -650,4 +661,12 @@ public class FlutterPipImplActivity extends Activity implements ITXVodPlayListen
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onEvent(String eventType, Object data) {
if (TextUtils.equals(FTXEvent.PIP_ACTION_EXIT, eventType)
|| TextUtils.equals(FTXEvent.PIP_ACTION_UPDATE, eventType)) {
handleAction(eventType, (Bundle) data);
}
}
}
\ No newline at end of file
......@@ -4,7 +4,7 @@
#
Pod::Spec.new do |s|
s.name = 'super_player'
s.version = '12.4.1'
s.version = '12.4.2'
s.summary = 'The super_player Flutter plugin is one of the sub-product SDKs of the audio/video terminal SDK (Tencent Cloud Video on Demand).'
s.description = <<-DESC
player plugin.
......
......@@ -2,5 +2,5 @@
part of SuperPlayer;
abstract class FPlayerPckInfo {
static const String PLAYER_VERSION = "12.4.1";
static const String PLAYER_VERSION = "12.4.2";
}
\ No newline at end of file
name: super_player
description: The super_player Flutter plugin is one of the sub-product SDKs of the audio/video terminal SDK (Tencent Cloud Video on Demand).
version: 12.4.1
version: 12.4.2
homepage: https://github.com/LiteAVSDK/Player_Flutter
environment:
......
......@@ -3,5 +3,5 @@ part of demo_super_player_lib;
class PlayerConstants {
static const PKG_NAME = "superplayer_widget";
static const String PLAYER_WIDGET_VERSION = "12.4.1";
static const String PLAYER_WIDGET_VERSION = "12.4.2";
}
name: superplayer_widget
description: superplayer,base on vodplayer
version: 12.4.1
version: 12.4.2
environment:
sdk: '>=2.17.0 <4.0.0'
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论