Skip to content

Commit 62c17a7

Browse files
author
dokieyang
committed
1. update version to 0.0.2
2. fix crash on Pixel
1 parent 103f627 commit 62c17a7

48 files changed

Lines changed: 367 additions & 32 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

android/src/main/java/com/tcmedia/tcmediax/tceffectplayer/tceffectplayer_flutter/messages/TCEffectMessages.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1048,6 +1048,9 @@ public interface FTCEffectAnimViewApi {
10481048

10491049
void setRate(@NonNull Double rate);
10501050

1051+
@NonNull
1052+
String getSdkVersion();
1053+
10511054
/** The codec used by FTCEffectAnimViewApi. */
10521055
static @NonNull MessageCodec<Object> getCodec() {
10531056
return PigeonCodec.INSTANCE;
@@ -1474,6 +1477,27 @@ static void setUp(@NonNull BinaryMessenger binaryMessenger, @NonNull String mess
14741477
api.setRate(rateArg);
14751478
wrapped.add(0, null);
14761479
}
1480+
catch (Throwable exception) {
1481+
wrapped = wrapError(exception);
1482+
}
1483+
reply.reply(wrapped);
1484+
});
1485+
} else {
1486+
channel.setMessageHandler(null);
1487+
}
1488+
}
1489+
{
1490+
BasicMessageChannel<Object> channel =
1491+
new BasicMessageChannel<>(
1492+
binaryMessenger, "dev.flutter.pigeon.flutter_effect_player.FTCEffectAnimViewApi.getSdkVersion" + messageChannelSuffix, getCodec());
1493+
if (api != null) {
1494+
channel.setMessageHandler(
1495+
(message, reply) -> {
1496+
ArrayList<Object> wrapped = new ArrayList<>();
1497+
try {
1498+
String output = api.getSdkVersion();
1499+
wrapped.add(0, output);
1500+
}
14771501
catch (Throwable exception) {
14781502
wrapped = wrapError(exception);
14791503
}
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
package com.tcmedia.tcmediax.tceffectplayer.tceffectplayer_flutter.tools;
2+
3+
import android.text.TextUtils;
4+
5+
import androidx.annotation.NonNull;
6+
7+
import java.lang.reflect.Field;
8+
9+
/**
10+
* 关于 io.flutter.plugin.platform.PlatformViewsController 类中的 RenderTarget 开关属性统计
11+
* -
12+
* flutter 3.16.0 : 只有 enableHardwareBufferRenderingTarget 开关,默认是 false,因此只会走 SurfaceTexturePlatformViewRenderTarget
13+
* - source link : <a href="https://github.com/flutter/engine/blob/3.16.0/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java">...</a>
14+
* -
15+
* flutter 3.16.9 : 同上
16+
* - source link : <a href="https://github.com/flutter/engine/blob/3.16.9/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java">...</a>
17+
* -
18+
* flutter 3.19.0 : 增加为 enableImageRenderTarget(默认true) & enableSurfaceProducerRenderTarget(默认false) 属性,分别用来控制 ImageReaderPlatformViewRenderTarget 和 SurfaceProducerPlatformViewRenderTarget
19+
* - source link : <a href="https://github.com/flutter/engine/blob/3.19.0/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java">...</a>
20+
* -
21+
* flutter 3.19.6 : 同上
22+
* - source link : <a href="https://github.com/flutter/engine/blob/3.19.6/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java">...</a>
23+
* -
24+
* flutter 3.22.0 : 将默认值修改:enableImageRenderTarget(默认true) & enableSurfaceProducerRenderTarget(默认true)
25+
* - source link : <a href="https://github.com/flutter/engine/blob/3.22.0/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java">...</a>
26+
* -
27+
* flutter 3.22.3 : 同上
28+
* - source link : <a href="https://github.com/flutter/engine/blob/3.22.3/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java">...</a>
29+
* -
30+
* flutter 3.24.0 : 同上
31+
* - source link : <a href="https://github.com/flutter/engine/blob/3.24.0/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java">...</a>
32+
* -
33+
* flutter 3.24.5 : 同上
34+
* - source link : <a href="https://github.com/flutter/engine/blob/3.24.5/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java">...</a>
35+
* -
36+
* flutter 3.27.0 : 同上
37+
* - source link : <a href="https://github.com/flutter/engine/blob/3.27.0/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java">...</a>
38+
* -
39+
* flutter 3.27.4 : 同上
40+
* - source link : <a href="https://github.com/flutter/engine/blob/3.27.4/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java">...</a>
41+
* -
42+
* flutter 3.29.0 : 同上
43+
* - source link : <a href="https://github.com/flutter/flutter/blob/3.29.0/engine/src/flutter/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java">...</a>
44+
* -
45+
* flutter 3.29.3 : 同上
46+
* - source link : <a href="https://github.com/flutter/flutter/blob/3.29.3/engine/src/flutter/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java">...</a>
47+
* -
48+
* flutter 3.32.0 : 同上
49+
* - source link : <a href="https://github.com/flutter/flutter/blob/3.32.0/engine/src/flutter/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java">...</a>
50+
* -
51+
* flutter 3.32.7 : 同上
52+
* - source link : <a href="https://github.com/flutter/flutter/blob/3.32.7/engine/src/flutter/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java">...</a>
53+
*
54+
*/
55+
public class PlatformViewRenderTarget {
56+
public static Boolean oriEnableImageRenderTarget;
57+
public static Boolean oriEnableSurfaceProducerRenderTarget;
58+
59+
public static EnableResult enableSurfaceTexturePlatformViewRenderTarget() {
60+
return enablePlatformViewRenderTarget(false, false);
61+
}
62+
63+
public static EnableResult restorePlatformViewRenderTarget() {
64+
if (oriEnableImageRenderTarget != null && oriEnableSurfaceProducerRenderTarget != null) {
65+
return enablePlatformViewRenderTarget(oriEnableImageRenderTarget, oriEnableSurfaceProducerRenderTarget);
66+
} else {
67+
return new EnableResult(EnableResult.UNKNOWN, "restorePlatformViewRenderTarget failed because no ori-value");
68+
}
69+
}
70+
71+
private static EnableResult enablePlatformViewRenderTarget(boolean enableImageRenderTarget, boolean enableSurfaceProducerRenderTarget) {
72+
try {
73+
Class<?> clazz = Class.forName("io.flutter.plugin.platform.PlatformViewsController");
74+
Field fieldeImageRenderTarget = clazz.getDeclaredField("enableImageRenderTarget");
75+
fieldeImageRenderTarget.setAccessible(true);
76+
if (oriEnableImageRenderTarget == null) {
77+
Object value = fieldeImageRenderTarget.get(null);
78+
if (value instanceof Boolean) {
79+
oriEnableImageRenderTarget = (boolean) value;
80+
}
81+
}
82+
fieldeImageRenderTarget.set(null, enableImageRenderTarget);
83+
84+
Field fieldSurfaceProducerRenderTarget = clazz.getDeclaredField("enableSurfaceProducerRenderTarget");
85+
fieldSurfaceProducerRenderTarget.setAccessible(true);
86+
if (oriEnableSurfaceProducerRenderTarget == null) {
87+
Object value = fieldSurfaceProducerRenderTarget.get(null);
88+
if (value instanceof Boolean) {
89+
oriEnableSurfaceProducerRenderTarget = (boolean) value;
90+
}
91+
}
92+
fieldSurfaceProducerRenderTarget.set(null, enableSurfaceProducerRenderTarget);
93+
return EnableResult.success();
94+
} catch (NoSuchFieldException e) {
95+
// 没有这俩属性的话,就是3.19.0版本之前的sdk
96+
return new EnableResult(EnableResult.NO_SUCH_FILED, e.toString());
97+
} catch (Exception e) {
98+
return new EnableResult(EnableResult.UNKNOWN, e.toString());
99+
}
100+
}
101+
102+
public static final class EnableResult {
103+
public static final String SUCCESS = "SUCCESS";
104+
public static final String NO_SUCH_FILED = "NO_SUCH_FILED";
105+
public static final String UNKNOWN = "UNKNOWN";
106+
107+
public final String result;
108+
public final String msg;
109+
110+
public EnableResult(String result, String msg) {
111+
this.result = result;
112+
this.msg = msg;
113+
}
114+
115+
@NonNull
116+
@Override
117+
public String toString() {
118+
return result + (TextUtils.isEmpty(msg) ? "" : " : " + msg);
119+
}
120+
121+
public static EnableResult success() {
122+
return new EnableResult(SUCCESS, "");
123+
}
124+
}
125+
}

android/src/main/java/com/tcmedia/tcmediax/tceffectplayer/tceffectplayer_flutter/ui/view/FTCEffectAnimController.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ public FTCEffectAnimController(int viewId, BinaryMessenger messenger, TCEffectAn
4444
mEffectView.setPlayListener(new FEffectAnimPlayListenerImpl(mEffectViewEvent));
4545
}
4646

47+
public int getViewId() {
48+
return mViewId;
49+
}
50+
4751
@NonNull
4852
@Override
4953
public Long startPlay(@NonNull String playUrl) {
@@ -160,6 +164,12 @@ public void setRate(@NonNull Double rate) {
160164
mEffectView.getTCEffectPlayer().setRate(rate.floatValue());
161165
}
162166

167+
@NonNull
168+
@Override
169+
public String getSdkVersion() {
170+
return TCEffectAnimView.getSdkVersion();
171+
}
172+
163173
public TCEffectAnimView getEffectView() {
164174
return mEffectView;
165175
}

android/src/main/java/com/tcmedia/tcmediax/tceffectplayer/tceffectplayer_flutter/ui/view/FTCEffectAnimView.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,21 @@
1616
public class FTCEffectAnimView implements PlatformView {
1717

1818
private final FTCEffectAnimController mController;
19+
private final FTCEffectAnimViewLifecycle mLifecycle;
1920

2021
public FTCEffectAnimView(@NonNull Context context, int id, @Nullable Map<String, Object> creationParams,
2122
BinaryMessenger messenger) {
23+
this(context, id, creationParams, messenger, null);
24+
}
25+
26+
public FTCEffectAnimView(@NonNull Context context, int id, @Nullable Map<String, Object> creationParams,
27+
BinaryMessenger messenger, FTCEffectAnimViewLifecycle lifecycle) {
28+
this.mLifecycle = lifecycle;
2229
TCEffectAnimView effectView = new TCEffectAnimView(context);
2330
mController = new FTCEffectAnimController(id, messenger, effectView);
31+
if (mLifecycle != null) {
32+
mLifecycle.onCreate(this, id);
33+
}
2434
}
2535

2636
@Nullable
@@ -31,15 +41,24 @@ public View getView() {
3141

3242
@Override
3343
public void dispose() {
44+
if (mLifecycle != null) {
45+
mLifecycle.onDispose(this, mController.getViewId());
46+
}
3447
mController.onDestroy();
3548
}
3649

3750
@Override
3851
public void onFlutterViewAttached(@NonNull View flutterView) {
52+
if (mLifecycle != null) {
53+
mLifecycle.onFlutterViewAttached(this, mController.getViewId(), flutterView);
54+
}
3955
}
4056

4157
@Override
4258
public void onFlutterViewDetached() {
59+
if (mLifecycle != null) {
60+
mLifecycle.onFlutterViewDetached(this, mController.getViewId());
61+
}
4362
}
4463

4564

@@ -50,4 +69,18 @@ public void onInputConnectionLocked() {
5069
@Override
5170
public void onInputConnectionUnlocked() {
5271
}
72+
73+
public interface FTCEffectAnimViewLifecycle {
74+
default void onCreate(FTCEffectAnimView animView, int viewId) {
75+
}
76+
77+
default void onFlutterViewAttached(FTCEffectAnimView animView, int viewId, View flutterView) {
78+
}
79+
80+
default void onFlutterViewDetached(FTCEffectAnimView animView, int viewId) {
81+
}
82+
83+
default void onDispose(FTCEffectAnimView animView, int viewId) {
84+
}
85+
}
5386
}

android/src/main/java/com/tcmedia/tcmediax/tceffectplayer/tceffectplayer_flutter/ui/view/FTCEffectViewFactory.java

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
import androidx.annotation.NonNull;
66
import androidx.annotation.Nullable;
77

8+
import com.tcmedia.tcmediax.tceffectplayer.tceffectplayer_flutter.tools.PlatformViewRenderTarget;
9+
import com.tencent.tcmediax.utils.Log;
10+
811
import java.lang.ref.WeakReference;
912
import java.util.HashMap;
1013
import java.util.Map;
@@ -15,6 +18,7 @@
1518
import io.flutter.plugin.platform.PlatformViewFactory;
1619

1720
public class FTCEffectViewFactory extends PlatformViewFactory {
21+
private static final String TAG = "FTCEffectViewFactory";
1822

1923
private final Map<Integer, WeakReference<FTCEffectAnimView>> mRenderViewCache = new HashMap<>();
2024
private final BinaryMessenger mBinaryMessenger;
@@ -28,20 +32,26 @@ public FTCEffectViewFactory(BinaryMessenger binaryMessenger) {
2832
@Override
2933
public PlatformView create(Context context, int viewId, @Nullable Object args) {
3034
final Map<String, Object> creationParams = (Map<String, Object>) args;
31-
FTCEffectAnimView effectAnimView = new FTCEffectAnimView(context, viewId, creationParams, mBinaryMessenger);
32-
mRenderViewCache.put(viewId, new WeakReference<>(effectAnimView));
33-
return effectAnimView;
35+
return new FTCEffectAnimView(context, viewId, creationParams, mBinaryMessenger, ftcEffectAnimViewLifecycle);
3436
}
3537

36-
public void removeByViewId(int viewId) {
37-
mRenderViewCache.remove(viewId);
38-
}
38+
private final FTCEffectAnimView.FTCEffectAnimViewLifecycle ftcEffectAnimViewLifecycle = new FTCEffectAnimView.FTCEffectAnimViewLifecycle() {
39+
@Override
40+
public void onCreate(FTCEffectAnimView animView, int viewId) {
41+
if(mRenderViewCache.isEmpty()){
42+
PlatformViewRenderTarget.EnableResult result = PlatformViewRenderTarget.enableSurfaceTexturePlatformViewRenderTarget();
43+
Log.d(TAG, "try to enable SurfaceTextureRenderTarget with result:" + result);
44+
}
45+
mRenderViewCache.put(viewId, new WeakReference<>(animView));
46+
}
3947

40-
public FTCEffectAnimView findViewById(int viewId) {
41-
WeakReference<FTCEffectAnimView> renderViewWeakReference = mRenderViewCache.get(viewId);
42-
if (null == renderViewWeakReference) {
43-
return null;
48+
@Override
49+
public void onDispose(FTCEffectAnimView animView, int viewId) {
50+
mRenderViewCache.remove(viewId);
51+
if (mRenderViewCache.isEmpty()) {
52+
PlatformViewRenderTarget.EnableResult result = PlatformViewRenderTarget.restorePlatformViewRenderTarget();
53+
Log.d(TAG, "try to restore PlatformViewRenderTarget with result:" + result);
54+
}
4455
}
45-
return renderViewWeakReference.get();
46-
}
56+
};
4757
}

doc/Integration Guide-zh_CN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## 环境准备
44

5-
- 仅支持 Flutter 3.16.9 及以下版本
5+
- 支持 Flutter 3.16.0 及以上版本
66

77
- Android 端开发:
88

doc/Integration Guide_EN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## Environment Preparation
44

5-
- Only supports Flutter 3.16.9 and below.
5+
- Supports Flutter 3.16.0 and above.
66

77
- Android development:
88
- Android Studio 3.5 and above.

doc/Quick Run Demo-EN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## Environment Preparation
44

5-
- Only supports Flutter 3.16.9 and below.
5+
- Supports Flutter 3.16.0 and above.
66

77
- Android development:
88
- Android Studio 2.0 or above.

doc/Quick Run Demo-zh_CN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## 环境准备
44

5-
- 仅支持 Flutter 3.16.9 及以下版本
5+
- 支持 Flutter 3.16.0 及以上版本
66

77
- Android 端开发:
88

example/android/app/build.gradle.kts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ plugins {
77

88
android {
99
namespace = "com.tencent.tcmediax.demo"
10-
compileSdk = 34
11-
ndkVersion = "26.1.10909125"
10+
compileSdk = flutter.compileSdkVersion
11+
ndkVersion = flutter.ndkVersion
1212

1313
compileOptions {
1414
sourceCompatibility = JavaVersion.VERSION_17
@@ -24,10 +24,10 @@ android {
2424
applicationId = "com.tencent.tcmediax.demo"
2525
// You can update the following values to match your application needs.
2626
// For more information, see: https://flutter.dev/to/review-gradle-config.
27-
minSdk = 21
28-
targetSdk = 33
29-
versionCode = 1
30-
versionName = "0.0.1"
27+
minSdk = flutter.minSdkVersion
28+
targetSdk = flutter.targetSdkVersion
29+
versionCode = flutter.versionCode
30+
versionName = flutter.versionName
3131
}
3232

3333
buildTypes {

0 commit comments

Comments
 (0)