PlayerInfoView.java
6.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
package com.cnlive.gundam.video.view;
import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.databinding.DataBindingUtil;
import android.databinding.ObservableBoolean;
import android.databinding.ObservableField;
import android.databinding.ObservableInt;
import android.databinding.ViewDataBinding;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.RelativeLayout;
import com.cnlive.gundam.BR;
import com.cnlive.gundam.R;
import com.cnlive.gundam.video.utils.NetworkUtil;
import com.cnlive.gundam.video.utils.PlayerUtils;
/**
* Created by gujun on 2017/5/22.
*/
public class PlayerInfoView extends RelativeLayout {
public static final int ID_CLICK_INFO_RETRY = 0x3001;
public static final int ID_CLICK_INFO_REPLAY = 0x3002;
public static final int ID_CLICK_INFO_MOBILE_NET_PLAY = 0x3003;
public static final int VIDEO_INFO_NORMAL = 0x1001;
public static final int VIDEO_INFO_UGC = 0x1002;
//隐藏所有视图
public static final int SHOW_NULL = 0x2001;
//展示loading视图
public static final int SHOW_LOADING = 0x2002;
//展示缓冲视图
public static final int SHOW_BUFFERING = 0x2003;
//展示error视图
public static final int SHOW_ERROR = 0x2004;
//展示end视图
public static final int SHOW_END = 0x2005;
//展示ugcLive状态页 只有ugc直播才有此功能页
public static final int SHOW_UGC_LIVE_STATUS = 0x2006;
//展示手机网视图
public static final int SHOW_MOBILE_NET = 0x2007;
//存储展示哪个视图
private ObservableInt observableShowType;
//存储状态提示信息
private ObservableField<String> observableStatusMsg;
//存储是否是快新闻类型
private ObservableBoolean observableIsNews;
//存储是否是快新闻类型
private ObservableBoolean observableIsPortrait;
//
private ObservableField<String> observableErrorMsg;
//记录当前view是否展示
private boolean isShow = false;
//记录当前视频是否是ugc
private boolean isUgc = false;
private static VideoInfoListener l;
public PlayerInfoView(Context context) {
this(context, null);
}
public PlayerInfoView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public PlayerInfoView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
observableShowType = new ObservableInt();
observableStatusMsg = new ObservableField<>();
observableIsNews = new ObservableBoolean();
observableIsPortrait = new ObservableBoolean();
observableErrorMsg = new ObservableField<>();
observableIsPortrait.set(PlayerUtils.isPortrait(getContext()));
}
public void setInfoListener(VideoInfoListener listener) {
l = listener;
}
public void setInfoViewLayout(int infoType) {
switch (infoType) {
case VIDEO_INFO_NORMAL:
ViewDataBinding binding = DataBindingUtil.bind(getView(R.layout.layout_player_info));
binding.setVariable(BR.playerInfoView, this);
binding.setVariable(BR.showType, observableShowType);
binding.setVariable(BR.isNews, observableIsNews);
binding.setVariable(BR.isPortrait, observableIsPortrait);
binding.setVariable(BR.errorMsg, observableErrorMsg);
isUgc = false;
break;
case VIDEO_INFO_UGC:
binding = DataBindingUtil.bind(getView(R.layout.layout_player_ugc_info));
binding.setVariable(BR.playerInfoView, this);
binding.setVariable(BR.showType, observableShowType);
binding.setVariable(BR.statusMsg, observableStatusMsg);
binding.setVariable(BR.errorMsg, observableErrorMsg);
isUgc = true;
break;
}
}
//屏幕转换
public void onScreenChange(boolean isPortrait) {
observableIsPortrait.set(isPortrait);
}
//获取对应布局的视图
private View getView(int layout) {
View view = LayoutInflater.from(getContext()).inflate(layout, null, false);
if (getChildCount() > 0)
removeAllViews();
addView(view);
return view;
}
//当前view是否有视图显示
public boolean isShow() {
return isShow;
}
//展示对应视图
public void show(int type) {
isShow = true;
observableShowType.set(type);
switch (type) {
case SHOW_NULL:
case SHOW_BUFFERING:
isShow = false;
break;
case SHOW_ERROR:
observableErrorMsg.set(getErrorMsg());
break;
}
}
//获取当前展示的视图的type
public int getCurInfoType() {
return observableShowType.get();
}
public void show(int type, String statusMsg) {
observableStatusMsg.set(statusMsg);
show(type);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.retry:
if (l != null) l.onInfoViewClick(ID_CLICK_INFO_RETRY);
break;
case R.id.replay:
if (l != null) l.onInfoViewClick(ID_CLICK_INFO_REPLAY);
break;
case R.id.back:
if (!PlayerUtils.isPortrait(getContext()) && !isUgc) {
((Activity) getContext()).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else {
((Activity) getContext()).onBackPressed();
}
break;
case R.id.playByMobileNet:
if (l != null) l.onInfoViewClick(ID_CLICK_INFO_MOBILE_NET_PLAY);
break;
}
}
/**
* 获取播放失败提示文字
*
* @return
*/
private String getErrorMsg() {
return getContext().getResources().getString(NetworkUtil.isConnectInternet(getContext()) ? R.string.player_error : R.string.player_error_net);
}
public interface VideoInfoListener {
void onInfoViewClick(int id);
}
}