提交 cf887068 authored 作者: kongdywang's avatar kongdywang

1、add registerSysBrightness for control android brightness' observer

2、move restorePageBrightness from moreView to demoSuperPlayer
上级 034be03d
......@@ -85,6 +85,8 @@ public class SuperPlayerPlugin implements FlutterPlugin, ActivityAware,
private int mCurrentOrientation = FTXEvent.ORIENTATION_PORTRAIT_UP;
private final TXFlutterEngineHolder mEngineHolder = new TXFlutterEngineHolder();
private boolean mIsBrightnessObserverRegistered = false;
private final FTXAudioManager.AudioFocusChangeListener audioFocusChangeListener =
new FTXAudioManager.AudioFocusChangeListener() {
@Override
......@@ -102,8 +104,7 @@ public class SuperPlayerPlugin implements FlutterPlugin, ActivityAware,
@Override
public void onChange(boolean selfChange, @NonNull Collection<Uri> uris, int flags) {
super.onChange(selfChange, uris, flags);
double systemBrightness = getSystemScreenBrightness();
setWindowBrightness(systemBrightness);
setWindowBrightness(-1D);
}
};
......@@ -449,10 +450,23 @@ public class SuperPlayerPlugin implements FlutterPlugin, ActivityAware,
IntentFilter filter = new IntentFilter();
filter.addAction(VOLUME_CHANGED_ACTION);
mActivityPluginBinding.getActivity().registerReceiver(mVolumeBroadcastReceiver, filter);
// brightness observer
ContentResolver resolver = mActivityPluginBinding.getActivity().getContentResolver();
resolver.registerContentObserver(Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS),
true, brightnessObserver);
}
public void enableBrightnessObserver(boolean enable) {
if (null != mActivityPluginBinding && !mActivityPluginBinding.getActivity().isDestroyed()) {
if (enable) {
if (!mIsBrightnessObserverRegistered) {
// brightness observer
ContentResolver resolver = mActivityPluginBinding.getActivity().getContentResolver();
resolver.registerContentObserver(Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS),
true, brightnessObserver);
mIsBrightnessObserverRegistered = true;
}
} else {
mActivityPluginBinding.getActivity().getContentResolver().unregisterContentObserver(brightnessObserver);
mIsBrightnessObserverRegistered = false;
}
}
}
/**
......@@ -464,7 +478,7 @@ public class SuperPlayerPlugin implements FlutterPlugin, ActivityAware,
try {
mTxAudioManager.removeAudioFocusChangedListener(audioFocusChangeListener);
mActivityPluginBinding.getActivity().unregisterReceiver(mVolumeBroadcastReceiver);
mActivityPluginBinding.getActivity().getContentResolver().unregisterContentObserver(brightnessObserver);
enableBrightnessObserver(false);
} catch (Exception e) {
e.printStackTrace();
}
......@@ -548,6 +562,13 @@ public class SuperPlayerPlugin implements FlutterPlugin, ActivityAware,
return intMsg;
}
@Override
public void registerSysBrightness(@NonNull BoolMsg isRegister) {
if (null != isRegister.getValue()) {
enableBrightnessObserver(isRegister.getValue());
}
}
private class VolumeBroadcastReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
......
......@@ -61,27 +61,23 @@ public class CommonUtil {
if (CACHE_MAP.containsKey(KEY_MAX_BRIGHTNESS)) {
//noinspection ConstantConditions
return (float) CACHE_MAP.get(KEY_MAX_BRIGHTNESS);
} else if (CommonUtil.isMIUI()) {
float maxBrightness = 255f;
if (Build.VERSION.SDK_INT < 33) {
try {
Resources system = Resources.getSystem();
int resId = system.getIdentifier("config_screenBrightnessSettingMaximum",
"integer", "android");
if (resId != 0) {
maxBrightness = system.getInteger(resId);
}
} catch (Exception e) {
Log.getStackTraceString(e);
}
} else {
maxBrightness = 128F;
}
float maxBrightness = 255f;
try {
Resources system = Resources.getSystem();
int resId = system.getIdentifier("config_screenBrightnessSettingMaximum",
"integer", "android");
if (resId != 0) {
maxBrightness = system.getInteger(resId);
}
CACHE_MAP.put(KEY_MAX_BRIGHTNESS, maxBrightness);
return maxBrightness;
} catch (Exception e) {
Log.getStackTraceString(e);
}
if (CommonUtil.isMIUI() && Build.VERSION.SDK_INT >= 33) {
maxBrightness = 128F;
}
CACHE_MAP.put(KEY_MAX_BRIGHTNESS, 255f);
return 255f;
CACHE_MAP.put(KEY_MAX_BRIGHTNESS, maxBrightness);
return maxBrightness;
}
public static boolean isMIUI() {
......
......@@ -443,6 +443,30 @@ static Future<bool> startVideoOrientationService() async
| result | bool | true 开启成功,false 开启失败,如开启过早,还未等到上下文初始化、获取sensor失败等原因 |
### registerSysBrightness
**说明**
开启或关闭对于系统亮度的监听,如果开启,当系统亮度发生变化,会改变当前window亮度,并回调亮度到flutter层。该接口需配合
setBrightness和onExtraEventBroadcast使用。
**接口**
```dart
static Future<void>registerSysBrightness(bool isRegister) async
```
**参数说明**
| 参数名 | 类型 | 描述 |
| ------ | ------ |-------------------------|
| isRegister | bool | true 开启建提高,false 关闭监听 |
**返回值说明**
## TXVodPlayerController类
......@@ -1739,20 +1763,20 @@ Future<void> startDownload(TXVodDownloadMediaInfo mediaInfo) async
**TXVodDownloadMediaInfo**
| 参数名 | 类型 | 描述 |
| ------ | ------ | ------------------ |
| playPath | String? | 缓存地址,获得到的视频缓存会有该值,启动下载可以不赋值|
| progress | double? | 缓存进度,获得到的视频缓存会有该值,启动下载可以不赋值|
| downloadState | int? | 缓存状态,获得到的视频缓存会有该值,启动下载可以不赋值|
| userName | String? | 下载账户名称,用于区分不同账户的下载,传空则为 default|
| duration | int? | 缓存视频总时长,安卓端单位为毫秒,IOS为秒,获得到的视频缓存会有该值,启动下载可以不赋值|
| playableDuration | int? | 视频已缓存时长,安卓端单位为毫秒,IOS为秒,获得到的视频缓存会有该值,启动下载可以不赋值|
| size | int? | 文件总大小,单位:byte,获得到的视频缓存会有该值,启动下载可以不赋值|
| downloadSize | int? | 文件已下载的大小,单位:byte,获得到的视频缓存会有该值,启动下载可以不赋值|
| url | String? | 需要下载的视频url,url下载必填,不支持嵌套m3u8和mp4下载|
| dataSource | TXVodDownloadDataSource? | 需要下载的视频fileId信息,url与该参数可只使用一个|
| speed | int? | 下载速度,单位:KByte/秒 |
| isResourceBroken | bool? | 资源是否已损坏, 如:资源被删除了 |
| 参数名 | 类型 | 描述 |
| ------ | ------ |-----------------------------------------------|
| playPath | String? | 缓存地址,获得到的视频缓存会有该值,启动下载可以不赋值 |
| progress | double? | 缓存进度,获得到的视频缓存会有该值,启动下载可以不赋值 |
| downloadState | int? | 缓存状态,获得到的视频缓存会有该值,启动下载可以不赋值 |
| userName | String? | 下载账户名称,用于区分不同账户的下载,传空则为 default,不建议设置比较长的字符串 |
| duration | int? | 缓存视频总时长,安卓端单位为毫秒,IOS为秒,获得到的视频缓存会有该值,启动下载可以不赋值 |
| playableDuration | int? | 视频已缓存时长,安卓端单位为毫秒,IOS为秒,获得到的视频缓存会有该值,启动下载可以不赋值 |
| size | int? | 文件总大小,单位:byte,获得到的视频缓存会有该值,启动下载可以不赋值 |
| downloadSize | int? | 文件已下载的大小,单位:byte,获得到的视频缓存会有该值,启动下载可以不赋值 |
| url | String? | 需要下载的视频url,url下载必填,不支持嵌套m3u8和mp4下载 |
| dataSource | TXVodDownloadDataSource? | 需要下载的视频fileId信息,url与该参数可只使用一个 |
| speed | int? | 下载速度,单位:KByte/秒 |
| isResourceBroken | bool? | 资源是否已损坏, 如:资源被删除了 |
**TXVodDownloadDataSource**
......
......@@ -46,6 +46,8 @@ class _DemoSuperPlayerState extends State<DemoSuperPlayer> with TXPipPlayerResto
super.initState();
// Listen for device rotation.
SuperPlayerPlugin.startVideoOrientationService();
// open brightness observer
SuperPlayerPlugin.registerSysBrightness(true);
_controller = SuperPlayerController(context);
TXPipController.instance.setPipPlayerPage(this);
FTXVodPlayConfig config = FTXVodPlayConfig();
......@@ -417,6 +419,10 @@ class _DemoSuperPlayerState extends State<DemoSuperPlayer> with TXPipPlayerResto
// must invoke when page exit.
_controller.releasePlayer();
simpleEventSubscription?.cancel();
// restore current brightness to sys brightness
SuperPlayerPlugin.restorePageBrightness();
// unregister brightness observer
SuperPlayerPlugin.registerSysBrightness(false);
super.dispose();
}
......
......@@ -359,6 +359,10 @@ SuperPlayerPlugin* instance;
[audioManager setVolume:volumeNum.floatValue];
}
- (void)registerSysBrightnessIsRegister:(BoolMsg *)isRegister error:(FlutterError * _Nullable __autoreleasing *)error {
// only for android
}
#pragma mark DataBridge
- (NSMutableDictionary *)getPlayers {
......
......@@ -365,6 +365,11 @@ abstract class TXFlutterNativeAPI {
/// -102 画中画权限关闭/设备不支持画中画
/// -103 当前界面已销毁
IntMsg isDeviceSupportPip();
///
/// register or unregister system brightness
///
void registerSysBrightness(BoolMsg isRegister);
}
@HostApi()
......
......@@ -260,4 +260,15 @@ class SuperPlayerPlugin {
BoolMsg boolMsg = await _playerPluginApi.startVideoOrientationService();
return boolMsg.value;
}
///
/// register or unregister system brightness.if register the system brightness observer,
/// current window brightness wil changed by system brightness's change.
/// <h2>only for android</h2>
/// @param isRegister:true register system brightness
/// :false unregister system brightness
///
static Future<void>registerSysBrightness(bool isRegister) async {
await _nativeAPI.registerSysBrightness(BoolMsg()..value = isRegister);
}
}
......@@ -547,7 +547,9 @@ class TXVodDownloadDataSource {
String? token;
/// Account name, used to set the account name for URL download.
/// 账户名称,用于url下载设置账户名称
/// It is not recommended to set a string that is too long,
/// Otherwise, it may lead to unforeseen problems.
/// 账户名称,用于url下载设置账户名称。不建议设置比较长的字符串,否则可能会导致不可预料的问题。
String? userName;
Map<String, dynamic> toJson() {
......@@ -578,7 +580,9 @@ class TXVodDownloadMediaInfo {
int? downloadState;
/// Account name, used to set the account name for URL download.
/// 账户名称,用于url下载设置账户名称
/// It is not recommended to set a string that is too long,
/// Otherwise, it may lead to unforeseen problems.
/// 账户名称,用于url下载设置账户名称。不建议设置比较长的字符串,否则可能会导致不可预料的问题。
String? userName;
/// Total duration.
......
......@@ -300,7 +300,6 @@ class _SuperPlayerMoreViewState extends State<SuperPlayerMoreView> {
void dispose() {
super.dispose();
eventSubscription?.cancel();
SuperPlayerPlugin.restorePageBrightness();
}
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论