基线备份:thirdparty 变体完成 + Android 4.2 兼容改造前
包含内容: - thirdparty flavor 独立 applicationId + Intent 入口(ThirdPartyEntryActivity) - 58 后端接口适配(单 /api 路径、code 0/200、camelCase 字段、UNBOUND 轮询) - MAC 硬件锚定校验(防一凭证多设备共用) - EPG mac 覆盖 SDK init(sMacOverride)+ ChannelManger 初始化对齐 - 提示文案优化(设备未注册/权益未绑定)
This commit is contained in:
408
app/src/main/java/com/pukka/jiecheng/base/BaseActivity.java
Executable file
408
app/src/main/java/com/pukka/jiecheng/base/BaseActivity.java
Executable file
@@ -0,0 +1,408 @@
|
||||
/**
|
||||
* @file BaseActivity.java
|
||||
* @description Activity 基类,提供公共功能:按键节流、网络监听、返回按钮等
|
||||
* @author ainetv
|
||||
* @date 2026-04-16
|
||||
*/
|
||||
package com.pukka.jiecheng.base;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.IntentFilter;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.view.Gravity;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
|
||||
import com.pukka.jiecheng.BuildConfig;
|
||||
import com.pukka.jiecheng.R;
|
||||
import com.pukka.jiecheng.config.AppConfiguration;
|
||||
import com.pukka.jiecheng.monitor.HomeMonitor;
|
||||
import com.pukka.jiecheng.monitor.NetworkMonitor;
|
||||
import com.pukka.jiecheng.newtv.NewTvListner;
|
||||
import com.pukka.jiecheng.newtv.NewTvManager;
|
||||
import com.pukka.jiecheng.newtv.NewTvUtils;
|
||||
import com.pukka.jiecheng.newtv.NewTvView;
|
||||
import com.pukka.jiecheng.utils.ChannelManger;
|
||||
import com.pukka.libcore.boxShared.BoxSharedParamsUtils;
|
||||
import com.pukka.libcore.utils.AppManager;
|
||||
import com.pukka.libcore.utils.AppUtils;
|
||||
import com.pukka.libcore.utils.GreyingManager;
|
||||
import com.pukka.libcore.utils.LogUtils;
|
||||
import com.pukka.libcore.utils.StringUtils;
|
||||
|
||||
|
||||
/**
|
||||
* Activity 基类
|
||||
*
|
||||
* 主要功能:
|
||||
* 1. 按键节流机制(防止快速连续按键)
|
||||
* 2. 网络状态监听
|
||||
* 3. 返回按钮管理(触摸模式)
|
||||
* 4. 未来认证页面显示
|
||||
* 5. 应用变灰功能
|
||||
*
|
||||
* 架构设计:
|
||||
* - 提供模板方法模式,子类可重写特定方法
|
||||
* - 使用策略模式实现按键节流
|
||||
* - 使用观察者模式监听网络状态
|
||||
*
|
||||
* @author ainetv
|
||||
*/
|
||||
public class BaseActivity extends AppCompatActivity implements NetworkMonitor.NetworkReceiver {
|
||||
private static final String TAG = "BaseActivity ";
|
||||
|
||||
protected long mLastKeyDownTime;
|
||||
|
||||
protected boolean goToOtherApp;
|
||||
|
||||
public static boolean isResumeVideo = false;
|
||||
protected Context mContext;
|
||||
|
||||
protected NetworkMonitor networkMonitor;
|
||||
private NewTvListner newTvListner;
|
||||
private boolean newtvState;
|
||||
|
||||
protected ImageView mIvGamePad;
|
||||
|
||||
private LinearLayout mBackButton;
|
||||
private boolean mBackButtonEnabled = false;
|
||||
private OnBackButtonClickListener mBackButtonClickListener;
|
||||
|
||||
public interface OnBackButtonClickListener {
|
||||
void onBackButtonClick();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
mContext = this;
|
||||
goToOtherApp = false;
|
||||
AppManager.getAppManager().addActivity(this);
|
||||
themeGrey();
|
||||
registerBroadcastReceiver();
|
||||
HomeMonitor.registerReceiver(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
//可见但不在前台
|
||||
LogUtils.d("BaseActivity onStart()");
|
||||
AppManager.getAppManager().addCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
LogUtils.d("BaseActivity onResume()");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
super.onStop();
|
||||
//完全不可见
|
||||
LogUtils.d("BaseActivity onStop()");
|
||||
AppManager.getAppManager().reduceCount();
|
||||
}
|
||||
|
||||
|
||||
public void killApp() {
|
||||
NewTvUtils.getInstance().newTvLogAppExit();
|
||||
AppManager.getAppManager().appExit();
|
||||
}
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
AppManager.getAppManager().finishActivity(this);
|
||||
unregisterBroadcastReceiver();
|
||||
}
|
||||
|
||||
/**
|
||||
* 所有Activity变灰
|
||||
*/
|
||||
private void themeGrey() {
|
||||
int type = SystemConfigManager.getInstance().isGreying();
|
||||
if (type == 0) {
|
||||
GreyingManager.themeGrey(type, getWindow());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 按键节流策略配置
|
||||
*
|
||||
* 设计意图:
|
||||
* - 防止用户快速连续按键导致的重复操作
|
||||
* - 子类可重写 shouldThrottleKey() 方法自定义节流策略
|
||||
* - 子类可重写 getThrottleInterval() 方法自定义节流间隔
|
||||
*
|
||||
* 默认策略:
|
||||
* - 所有按键节流间隔为 100ms
|
||||
* - 子类可通过重写 shouldThrottleKey() 排除特定按键
|
||||
*/
|
||||
@Override
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
boolean dispatch = super.onKeyDown(keyCode, event);
|
||||
if (event.getAction() == KeyEvent.ACTION_DOWN) {
|
||||
// 检查是否需要节流该按键
|
||||
if (shouldThrottleKey(keyCode, event)) {
|
||||
long current = System.currentTimeMillis();
|
||||
long interval = getThrottleInterval(keyCode);
|
||||
if (current - mLastKeyDownTime < interval) {
|
||||
LogUtils.d(TAG, "按键被节流: keyCode=" + keyCode + ", interval=" + interval + "ms");
|
||||
return true;
|
||||
}
|
||||
mLastKeyDownTime = current;
|
||||
}
|
||||
} else if (keyCode == KeyEvent.KEYCODE_HOME) {
|
||||
// 处理Home键按下事件
|
||||
NewTvUtils.getInstance().newTvLogAppExit();
|
||||
AppManager.getAppManager().appExit();
|
||||
return dispatch;
|
||||
}
|
||||
return dispatch;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否需要节流该按键
|
||||
* 子类可重写此方法自定义节流策略
|
||||
*
|
||||
* @param keyCode 按键代码
|
||||
* @param event 按键事件
|
||||
* @return true 表示需要节流,false 表示不节流
|
||||
*/
|
||||
protected boolean shouldThrottleKey(int keyCode, KeyEvent event) {
|
||||
// 默认对所有按键进行节流
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取按键节流间隔(毫秒)
|
||||
* 子类可重写此方法自定义节流间隔
|
||||
*
|
||||
* @param keyCode 按键代码
|
||||
* @return 节流间隔(毫秒)
|
||||
*/
|
||||
protected long getThrottleInterval(int keyCode) {
|
||||
// 默认节流间隔为 100ms
|
||||
return 100;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onUserLeaveHint() {
|
||||
super.onUserLeaveHint();
|
||||
LogUtils.e(TAG + "onUserLeaveHint ---Activity : " + AppUtils.getTopActivity());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void currentNetType(String currentNetType) {
|
||||
LogUtils.d(TAG, "currentNetType:" + currentNetType);
|
||||
if ("unknown".equals(currentNetType)) {
|
||||
isResumeVideo = true;
|
||||
//NoNetworkActivity.start(this);
|
||||
} else {
|
||||
//AppManager.getAppManager().finishAppointActivity(NoNetworkActivity.class);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册网络广播、install广播
|
||||
*/
|
||||
public void registerBroadcastReceiver() {
|
||||
networkMonitor = new NetworkMonitor();
|
||||
networkMonitor.setNetworkNativeReceiver(this);
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
|
||||
filter.addAction("android.net.wifi.WIFI_STATE_CHANGED");
|
||||
filter.addAction("android.net.wifi.STATE_CHANGE");
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||
mContext.registerReceiver(networkMonitor, filter, Context.RECEIVER_NOT_EXPORTED);
|
||||
} else {
|
||||
mContext.registerReceiver(networkMonitor, filter);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 反注册网络广播、install广播
|
||||
*/
|
||||
public void unregisterBroadcastReceiver() {
|
||||
mContext.unregisterReceiver(networkMonitor);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 未来认证页面显示
|
||||
*/
|
||||
public void activityShowNewTv() {
|
||||
String saveState = NewTvManager.getInstance().getNewtvState();
|
||||
if (!StringUtils.isEmpty(saveState)){
|
||||
return;
|
||||
}
|
||||
// 获取Activity的DecorView
|
||||
View decorView = getWindow().getDecorView();
|
||||
// 获取DecorView的ViewGroup
|
||||
ViewGroup decorViewGroup = (ViewGroup) decorView;
|
||||
|
||||
String state = NewTvManager.getInstance().getState();
|
||||
NewTvManager.getInstance().setNewtvState(state);
|
||||
boolean isFail = "fail".equals(state);
|
||||
newtvState = isFail;
|
||||
if (isFail) {
|
||||
removeDecorView(decorViewGroup);
|
||||
if (NewTvManager.getInstance().getNewTvView() != null) {
|
||||
NewTvManager.getInstance().getNewTvView().showError(isFail);
|
||||
decorViewGroup.addView(NewTvManager.getInstance().getNewTvView());
|
||||
}
|
||||
} else {
|
||||
MutableLiveData<String> goActivityData = new MutableLiveData<String>();
|
||||
goActivityData.observe(this, s -> {
|
||||
LogUtils.d("activityShowNewTv --observe : "+s);
|
||||
NewTvManager.getInstance().setNewtvState(s);
|
||||
removeDecorView(decorViewGroup);
|
||||
boolean fail = "fail".equals(s);
|
||||
newtvState = fail;
|
||||
if (fail) {
|
||||
if (NewTvManager.getInstance().getNewTvView() != null) {
|
||||
NewTvManager.getInstance().getNewTvView().showError(fail);
|
||||
decorViewGroup.addView(NewTvManager.getInstance().getNewTvView());
|
||||
}
|
||||
if (newTvListner != null) {
|
||||
newTvListner.playerPause();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
LogUtils.d("activityShowNewTv --state : "+state);
|
||||
|
||||
}
|
||||
|
||||
private void removeDecorView(ViewGroup decorViewGroup){
|
||||
try {
|
||||
int size = decorViewGroup.getChildCount();
|
||||
for (int i = 0; i < size; i++) {
|
||||
View view = decorViewGroup.getChildAt(i);
|
||||
if (view instanceof NewTvView) {
|
||||
decorViewGroup.removeView(view);
|
||||
LogUtils.d("activityShowNewTv: removeDecorView ");
|
||||
}
|
||||
}
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前未来认证的状态
|
||||
* @return
|
||||
*/
|
||||
public boolean getNewTvState(){
|
||||
LogUtils.d("getNewTvState -- :"+newtvState);
|
||||
return newtvState;
|
||||
}
|
||||
|
||||
public void setNewTvListner(NewTvListner listner){
|
||||
newTvListner = listner;
|
||||
}
|
||||
|
||||
protected void initGamePad(){
|
||||
if(BoxSharedParamsUtils.isJcCloud() || ChannelManger.isAnNingHotel()){
|
||||
//安柠游戏和安柠酒店版本显示手柄
|
||||
mIvGamePad = findViewById(R.id.id_iv_game_pad);
|
||||
if(null != mIvGamePad) {
|
||||
LogUtils.d("显示手柄");
|
||||
mIvGamePad.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void enableBackButton() {
|
||||
if(AppConfiguration.getInstance().isTouchMode()) {
|
||||
enableBackButton(null);
|
||||
}
|
||||
}
|
||||
|
||||
protected void enableBackButton(OnBackButtonClickListener listener) {
|
||||
if(AppConfiguration.getInstance().isTouchMode()) {
|
||||
mBackButtonClickListener = listener;
|
||||
mBackButtonEnabled = true;
|
||||
createAndShowBackButton();
|
||||
}
|
||||
}
|
||||
|
||||
protected void disableBackButton() {
|
||||
mBackButtonEnabled = false;
|
||||
removeBackButton();
|
||||
}
|
||||
|
||||
private void createAndShowBackButton() {
|
||||
if (mBackButton != null) {
|
||||
mBackButton.setVisibility(View.VISIBLE);
|
||||
return;
|
||||
}
|
||||
|
||||
FrameLayout contentLayout = findViewById(android.R.id.content);
|
||||
if (contentLayout == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
mBackButton = new LinearLayout(this);
|
||||
mBackButton.setId(R.id.id_back_button_floating);
|
||||
mBackButton.setOrientation(LinearLayout.VERTICAL);
|
||||
mBackButton.setGravity(Gravity.CENTER);
|
||||
mBackButton.setFocusable(true);
|
||||
mBackButton.setClickable(true);
|
||||
mBackButton.setBackground(ContextCompat.getDrawable(this, R.drawable.bg_search_back_btn_selector));
|
||||
|
||||
int buttonSize = (int) getResources().getDimension(R.dimen.qb_px_80);
|
||||
int iconSize = (int) getResources().getDimension(R.dimen.qb_px_28);
|
||||
int marginEnd = (int) getResources().getDimension(R.dimen.qb_px_40);
|
||||
int marginBottom = (int) getResources().getDimension(R.dimen.qb_px_40);
|
||||
|
||||
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(buttonSize, buttonSize);
|
||||
layoutParams.gravity = Gravity.BOTTOM | Gravity.END;
|
||||
layoutParams.setMargins(0, 0, marginEnd, marginBottom);
|
||||
mBackButton.setLayoutParams(layoutParams);
|
||||
|
||||
ImageView iconView = new ImageView(this);
|
||||
LinearLayout.LayoutParams iconParams = new LinearLayout.LayoutParams(iconSize, iconSize);
|
||||
iconView.setLayoutParams(iconParams);
|
||||
iconView.setImageResource(R.drawable.icon_detail_back_normal);
|
||||
mBackButton.addView(iconView);
|
||||
|
||||
mBackButton.setOnClickListener(v -> {
|
||||
if (mBackButtonClickListener != null) {
|
||||
mBackButtonClickListener.onBackButtonClick();
|
||||
} else {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
|
||||
contentLayout.addView(mBackButton);
|
||||
}
|
||||
|
||||
private void removeBackButton() {
|
||||
if (mBackButton != null && mBackButton.getParent() != null) {
|
||||
ViewGroup parent = (ViewGroup) mBackButton.getParent();
|
||||
parent.removeView(mBackButton);
|
||||
mBackButton = null;
|
||||
}
|
||||
}
|
||||
|
||||
protected LinearLayout getBackButton() {
|
||||
return mBackButton;
|
||||
}
|
||||
|
||||
protected boolean isBackButtonEnabled() {
|
||||
return mBackButtonEnabled;
|
||||
}
|
||||
|
||||
}
|
||||
20
app/src/main/java/com/pukka/jiecheng/base/BaseOnItemClickListener.java
Executable file
20
app/src/main/java/com/pukka/jiecheng/base/BaseOnItemClickListener.java
Executable file
@@ -0,0 +1,20 @@
|
||||
package com.pukka.jiecheng.base;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
/**
|
||||
* 列表Item点击事件接口基类
|
||||
*
|
||||
* @author MajorLL
|
||||
*/
|
||||
public interface BaseOnItemClickListener<T> {
|
||||
|
||||
/**
|
||||
* item 点击事件
|
||||
*
|
||||
* @param view 点击view
|
||||
* @param position 点击位置
|
||||
* @param t item 泛型数据类
|
||||
*/
|
||||
public void onItemClick(View view, int position,T t);
|
||||
}
|
||||
22
app/src/main/java/com/pukka/jiecheng/base/BaseOnItemFocusChangeListener.java
Executable file
22
app/src/main/java/com/pukka/jiecheng/base/BaseOnItemFocusChangeListener.java
Executable file
@@ -0,0 +1,22 @@
|
||||
package com.pukka.jiecheng.base;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
/**
|
||||
* item 焦点变化事件
|
||||
*
|
||||
* @author MajorLL
|
||||
*/
|
||||
public interface BaseOnItemFocusChangeListener<T> {
|
||||
|
||||
/**
|
||||
* item 焦点变化
|
||||
*
|
||||
* @param v 当前view
|
||||
* @param hasFocus 是否获取焦点
|
||||
* @param position 获取位置
|
||||
* @param t 对应泛型数据
|
||||
*/
|
||||
public void onItemFocusChange(View v , boolean hasFocus, int position ,T t);
|
||||
|
||||
}
|
||||
118
app/src/main/java/com/pukka/jiecheng/base/BasePresenter.java
Executable file
118
app/src/main/java/com/pukka/jiecheng/base/BasePresenter.java
Executable file
@@ -0,0 +1,118 @@
|
||||
|
||||
package com.pukka.jiecheng.base;
|
||||
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.leanback.widget.Presenter;
|
||||
|
||||
|
||||
import com.pukka.libcore.utils.LogUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public abstract class BasePresenter<VH extends BasePresenterViewHolder, D> extends Presenter {
|
||||
|
||||
/**
|
||||
* item 点击事件
|
||||
*/
|
||||
protected OnItemClickListener<D> onItemClickListener = null;
|
||||
|
||||
public void setOnItemClickListener(OnItemClickListener<D> onItemClickListener) {
|
||||
this.onItemClickListener = onItemClickListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup viewGroup) {
|
||||
// long time = System.currentTimeMillis();
|
||||
View view;
|
||||
int layoutResId = getLayoutResId();
|
||||
if (layoutResId <= 0) {
|
||||
view = new View(viewGroup.getContext());
|
||||
} else {
|
||||
view = LayoutInflater.from(viewGroup.getContext()).inflate(getLayoutResId(), viewGroup, false);
|
||||
}
|
||||
ViewHolder viewHolder = createViewHolder(view);
|
||||
return viewHolder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(ViewHolder viewHolder, Object o) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(ViewHolder viewHolder, Object item, List<Object> payloads) {
|
||||
try {
|
||||
((VH) viewHolder).bindViewHolderPayloads(item,payloads);
|
||||
if (onItemClickListener != null) {
|
||||
((VH) viewHolder).view.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
onItemClickListener.onItemClick(viewHolder.view, (D) item);
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (ClassCastException e) {
|
||||
LogUtils.e(getLogTag() + "onBindViewHolder, cast param failed. " +e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewAttachedToWindow(ViewHolder viewHolder) {
|
||||
super.onViewAttachedToWindow(viewHolder);
|
||||
try {
|
||||
((VH) viewHolder).setAttachedToWindow(true);
|
||||
} catch (ClassCastException e) {
|
||||
LogUtils.e(getLogTag() + "onViewAttachedToWindow, cast param failed." + e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewDetachedFromWindow(ViewHolder viewHolder) {
|
||||
super.onViewDetachedFromWindow(viewHolder);
|
||||
try {
|
||||
((VH) viewHolder).setAttachedToWindow(false);
|
||||
} catch (ClassCastException e) {
|
||||
LogUtils.e(getLogTag() + "onViewDetachedFromWindow, cast param failed." + e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUnbindViewHolder(ViewHolder viewHolder) {
|
||||
try {
|
||||
// long time = System.currentTimeMillis();
|
||||
((VH) viewHolder).unBindViewHolder();
|
||||
// Logger.d(getLogTag(), "onUnbindViewHolder. cost: " + (System.currentTimeMillis() - time));
|
||||
} catch (ClassCastException e) {
|
||||
LogUtils.e(getLogTag() + "onUnbindViewHolder, cast param failed." + e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取布局的资源Id
|
||||
*
|
||||
* @return 布局的资源Id
|
||||
*/
|
||||
protected abstract int getLayoutResId();
|
||||
|
||||
/**
|
||||
* 创建一个ViewHolder的实例
|
||||
*
|
||||
* @param view view对象
|
||||
* @return viewHolder的实例
|
||||
*/
|
||||
protected abstract VH createViewHolder(View view);
|
||||
|
||||
/**
|
||||
* 获取日志的TAG
|
||||
*
|
||||
* @return 日志的TAG
|
||||
*/
|
||||
protected abstract String getLogTag();
|
||||
|
||||
public interface OnItemClickListener<D> {
|
||||
void onItemClick(View view, D d);
|
||||
}
|
||||
}
|
||||
75
app/src/main/java/com/pukka/jiecheng/base/BasePresenterViewHolder.java
Executable file
75
app/src/main/java/com/pukka/jiecheng/base/BasePresenterViewHolder.java
Executable file
@@ -0,0 +1,75 @@
|
||||
|
||||
package com.pukka.jiecheng.base;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
import androidx.leanback.widget.Presenter;
|
||||
|
||||
|
||||
import com.pukka.libcore.utils.LogUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public abstract class BasePresenterViewHolder<D> extends Presenter.ViewHolder {
|
||||
/**
|
||||
* 布局是否绑定到窗口
|
||||
*/
|
||||
protected boolean mIsAttachedToWindow = false;
|
||||
|
||||
/**
|
||||
* 构造函数
|
||||
*
|
||||
* @param view 布局对象
|
||||
*/
|
||||
public BasePresenterViewHolder(View view) {
|
||||
super(view);
|
||||
initView(view);
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化布局<BR>
|
||||
* 子类可以进行布局的findViewById等操作,提升bindData的性能
|
||||
*
|
||||
* @param itemView 布局
|
||||
*/
|
||||
protected abstract void initView(View itemView);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 绑定数据(刷新时调用)
|
||||
*
|
||||
* @param data 数据对象
|
||||
*/
|
||||
protected abstract void onBindDataPayloads(D data, List<Object> payloads);
|
||||
|
||||
/**
|
||||
* 接触绑定数据
|
||||
*/
|
||||
protected abstract void onUnbindData();
|
||||
|
||||
void bindViewHolderPayloads(Object item, List<Object> payloads) {
|
||||
try {
|
||||
onBindDataPayloads((D) item,payloads);
|
||||
} catch (ClassCastException e) {
|
||||
LogUtils.e("bindViewHolder, cast param failed." + e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 解绑视图ViewHolder
|
||||
*/
|
||||
void unBindViewHolder() {
|
||||
onUnbindData();
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置是否绑定到窗口
|
||||
*
|
||||
* @param isAttachedInWindow true表示绑定到窗口
|
||||
*/
|
||||
void setAttachedToWindow(boolean isAttachedInWindow) {
|
||||
mIsAttachedToWindow = isAttachedInWindow;
|
||||
}
|
||||
}
|
||||
144
app/src/main/java/com/pukka/jiecheng/base/BaseRecyclerAdapter.java
Executable file
144
app/src/main/java/com/pukka/jiecheng/base/BaseRecyclerAdapter.java
Executable file
@@ -0,0 +1,144 @@
|
||||
package com.pukka.jiecheng.base;
|
||||
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author MajorLL
|
||||
*/
|
||||
public abstract class BaseRecyclerAdapter<T> extends RecyclerView.Adapter<BaseRecyclerViewHolder<T>> {
|
||||
/**
|
||||
* 源数据
|
||||
*/
|
||||
protected List<T> mData;
|
||||
/**
|
||||
* item 点击事件
|
||||
*/
|
||||
protected BaseOnItemClickListener<T> onItemClickListener = null;
|
||||
|
||||
/**
|
||||
* item 焦点变化事件
|
||||
*/
|
||||
protected BaseOnItemFocusChangeListener<T> onItemFocusChangeListener = null;
|
||||
|
||||
|
||||
/**
|
||||
* 获取当前布局资源文件ID
|
||||
*
|
||||
* @param viewType viewType类型
|
||||
* @return 返回资源ID
|
||||
*/
|
||||
protected abstract int getLayoutId(int viewType);
|
||||
|
||||
/**
|
||||
* 获取对应ViewHolder
|
||||
*
|
||||
* @param view
|
||||
* @param viewType
|
||||
* @return
|
||||
*/
|
||||
public abstract BaseRecyclerViewHolder<T> getViewHolder(View view, int viewType);
|
||||
|
||||
public BaseRecyclerAdapter(@NonNull List<T> mData) {
|
||||
this.mData = mData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取对应位置泛型数据对象
|
||||
*
|
||||
* @param position 位置
|
||||
* @return 泛型数据
|
||||
*/
|
||||
protected T getIndexData(int position) {
|
||||
if (mData == null || mData.size() <= position) {
|
||||
return null;
|
||||
}
|
||||
return mData.get(position);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public BaseRecyclerViewHolder<T> onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(parent.getContext()).inflate(getLayoutId(viewType), parent, false);
|
||||
return getViewHolder(view, viewType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull BaseRecyclerViewHolder<T> holder, int position) {
|
||||
holder.setData(getIndexData(position));
|
||||
final int index = position;
|
||||
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
holder.onItemClick(v, index, getIndexData(index));
|
||||
if (onItemClickListener != null) {
|
||||
onItemClickListener.onItemClick(v, index, getIndexData(index));
|
||||
}
|
||||
}
|
||||
});
|
||||
holder.itemView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
|
||||
@Override
|
||||
public void onFocusChange(View v, boolean hasFocus) {
|
||||
holder.onItemFocusChange(v, hasFocus);
|
||||
if (onItemFocusChangeListener != null) {
|
||||
onItemFocusChangeListener.onItemFocusChange(v, hasFocus, index, getIndexData(index));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (mData == null) {
|
||||
return 0;
|
||||
}
|
||||
return mData.size();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取空页面数量
|
||||
* @return 空页面数量
|
||||
*/
|
||||
public int getEmptyCount() {
|
||||
if (mData == null) {
|
||||
return 0;
|
||||
}
|
||||
int index = 0;
|
||||
for (T mDatum : mData) {
|
||||
if (mDatum == null) {
|
||||
index++;
|
||||
}
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
return super.getItemViewType(position);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置对应得Item点击事件
|
||||
*
|
||||
* @param onItemClickListener item点击事件回调
|
||||
*/
|
||||
public void setOnItemClickListener(BaseOnItemClickListener<T> onItemClickListener) {
|
||||
this.onItemClickListener = onItemClickListener;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置对应item焦点事件
|
||||
*
|
||||
* @param onItemFocusChangeListener item焦点事件回调
|
||||
*/
|
||||
public void setOnItemFocusChangeListener(BaseOnItemFocusChangeListener<T> onItemFocusChangeListener) {
|
||||
this.onItemFocusChangeListener = onItemFocusChangeListener;
|
||||
}
|
||||
}
|
||||
35
app/src/main/java/com/pukka/jiecheng/base/BaseRecyclerViewHolder.java
Executable file
35
app/src/main/java/com/pukka/jiecheng/base/BaseRecyclerViewHolder.java
Executable file
@@ -0,0 +1,35 @@
|
||||
package com.pukka.jiecheng.base;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
/**
|
||||
* RecyclerViewHolder基类
|
||||
*
|
||||
* @author MajorLL
|
||||
*/
|
||||
public abstract class BaseRecyclerViewHolder<T> extends RecyclerView.ViewHolder {
|
||||
public BaseRecyclerViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置数据
|
||||
*
|
||||
* @param t 泛型数据对象
|
||||
*/
|
||||
public abstract void setData(T t);
|
||||
|
||||
|
||||
/**
|
||||
* item焦点变化
|
||||
*
|
||||
* @param v 视图view
|
||||
* @param hasFocus 是否获取焦点
|
||||
*/
|
||||
public abstract void onItemFocusChange(View v, boolean hasFocus);
|
||||
|
||||
public abstract void onItemClick(View view, int position,T t);
|
||||
}
|
||||
75
app/src/main/java/com/pukka/jiecheng/base/BaseViewHolder.java
Executable file
75
app/src/main/java/com/pukka/jiecheng/base/BaseViewHolder.java
Executable file
@@ -0,0 +1,75 @@
|
||||
|
||||
package com.pukka.jiecheng.base;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
import androidx.leanback.widget.Presenter;
|
||||
|
||||
import com.pukka.libcore.utils.LogUtils;
|
||||
|
||||
|
||||
public abstract class BaseViewHolder<D> extends Presenter.ViewHolder {
|
||||
/**
|
||||
* 布局是否绑定到窗口
|
||||
*/
|
||||
protected boolean mIsAttachedToWindow = false;
|
||||
|
||||
/**
|
||||
* 构造函数
|
||||
*
|
||||
* @param view 布局对象
|
||||
*/
|
||||
public BaseViewHolder(View view) {
|
||||
super(view);
|
||||
initView(view);
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化布局<BR>
|
||||
* 子类可以进行布局的findViewById等操作,提升bindData的性能
|
||||
*
|
||||
* @param itemView 布局
|
||||
*/
|
||||
protected abstract void initView(View itemView);
|
||||
|
||||
/**
|
||||
* 绑定数据
|
||||
*
|
||||
* @param data 数据对象
|
||||
*/
|
||||
protected abstract void onBindData(D data);
|
||||
|
||||
/**
|
||||
* 接触绑定数据
|
||||
*/
|
||||
protected abstract void onUnbindData();
|
||||
|
||||
/**
|
||||
* 绑定视图ViewHolder
|
||||
*
|
||||
* @param data 数据对象
|
||||
*/
|
||||
void bindViewHolder(Object data) {
|
||||
try {
|
||||
onBindData((D) data);
|
||||
} catch (ClassCastException e) {
|
||||
LogUtils.e("bindViewHolder, cast param failed." + e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 解绑视图ViewHolder
|
||||
*/
|
||||
void unBindViewHolder() {
|
||||
onUnbindData();
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置是否绑定到窗口
|
||||
*
|
||||
* @param isAttachedInWindow true表示绑定到窗口
|
||||
*/
|
||||
void setAttachedToWindow(boolean isAttachedInWindow) {
|
||||
mIsAttachedToWindow = isAttachedInWindow;
|
||||
}
|
||||
}
|
||||
537
app/src/main/java/com/pukka/jiecheng/base/SystemConfigManager.java
Executable file
537
app/src/main/java/com/pukka/jiecheng/base/SystemConfigManager.java
Executable file
@@ -0,0 +1,537 @@
|
||||
package com.pukka.jiecheng.base;
|
||||
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.migu.bean.GetLayoutNavBean;
|
||||
import com.migu.bean.GetsystemBean;
|
||||
import com.migu.callback.AijiaCallback;
|
||||
import com.migu.httputils.HomeHttpUtils;
|
||||
import com.pukka.libcore.boxShared.BoxSharedParameters;
|
||||
import com.pukka.libcore.utils.ListUtils;
|
||||
import com.pukka.libcore.utils.LogUtils;
|
||||
import com.pukka.libcore.utils.SharedPreferenceUtils;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Author: wxf
|
||||
* Date: 2023/3/23 17:28
|
||||
* Description:全局配置管理
|
||||
*/
|
||||
public class SystemConfigManager {
|
||||
private static final SystemConfigManager M_INSTANCE = new SystemConfigManager();
|
||||
//一键变灰
|
||||
private static final int GREY_TYPE = 2;
|
||||
//是否驻留
|
||||
private static final int APP_KEEP_TYPE = 25;
|
||||
//是否隐藏VR
|
||||
private static final int HIDE_VR_TYPE = 13;
|
||||
//是否隐藏4K
|
||||
private static final int HIDE_4K_TYPE = 14;
|
||||
//VR测试流
|
||||
private static final int VRPLAYURL_TYPE = 21;
|
||||
//试看时长
|
||||
private static final int TRY_SEEING_TYPE = 3;
|
||||
//直播试看时长
|
||||
private static final int TRY_SEEING_LIVE_TYPE = 38;
|
||||
//首页垫片 shimCode
|
||||
private static final int INDEX_SHIM_CODE = 4;
|
||||
//广东iptv tid
|
||||
private static final int GUANGDONG_IPTV_TID = 62;
|
||||
//四川cdn信息
|
||||
private static final int SICHUAN_CDN = 42;
|
||||
private boolean isUserAgree;
|
||||
private String agreeDes;
|
||||
private String vrTestUrl;
|
||||
private int agreeLookDuration;
|
||||
private int tryLookDuration;
|
||||
private int tryLiveDuration;
|
||||
private String indexShimCode;
|
||||
|
||||
//退订周期 单位:天 默认365天
|
||||
private int cancelOrderPeriod = 365;
|
||||
//短视频息屏
|
||||
private int shortParseNum = 999;
|
||||
//登录页背景图
|
||||
private String loginBg = "";
|
||||
|
||||
public String getLoginBg() {
|
||||
return loginBg;
|
||||
}
|
||||
|
||||
public int getCancelOrderPeriod() {
|
||||
return cancelOrderPeriod;
|
||||
}
|
||||
|
||||
public int getShortParseNum(){
|
||||
return shortParseNum;
|
||||
}
|
||||
|
||||
|
||||
public static SystemConfigManager getInstance() {
|
||||
return M_INSTANCE;
|
||||
}
|
||||
|
||||
public GetsystemBean getsystemBean;
|
||||
|
||||
public void setGetsystemBean(GetsystemBean getsystemBean) {
|
||||
this.getsystemBean = getsystemBean;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过type值获取实体
|
||||
*
|
||||
* @param type type
|
||||
* @return 实体
|
||||
*/
|
||||
public GetsystemBean.ResultBean getResultBeanByType(int type) {
|
||||
if (null == getsystemBean) {
|
||||
return null;
|
||||
}
|
||||
|
||||
List<GetsystemBean.ResultBean> resultBeanList = getsystemBean.getResult();
|
||||
if (ListUtils.isEmpty(resultBeanList)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
int size = resultBeanList.size();
|
||||
for (int i = 0; i < size; i++) {
|
||||
if (type == resultBeanList.get(i).getType()) {
|
||||
return resultBeanList.get(i);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否一键变灰
|
||||
* 0:灰 1:正常
|
||||
*/
|
||||
public int isGreying() {
|
||||
int isGrey = 1;
|
||||
GetsystemBean.ResultBean resultBean = getResultBeanByType(GREY_TYPE);
|
||||
if (null != resultBean) {
|
||||
int status = resultBean.getStatus();
|
||||
if (status == 11) {
|
||||
// 变灰
|
||||
isGrey = 0;
|
||||
}
|
||||
}
|
||||
return isGrey;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否驻留
|
||||
*/
|
||||
public boolean isAppKeep() {
|
||||
GetsystemBean.ResultBean resultBean = getResultBeanByType(APP_KEEP_TYPE);
|
||||
return resultBean != null && 1 == resultBean.getStatus();
|
||||
}
|
||||
|
||||
/**
|
||||
* VR黑白名单
|
||||
* status 1支持 2不支持 3正常
|
||||
* 判断不支持隐藏首页vr tab (vr tab的判断在layoutnav接口里 type值为4的表示为vr tab)
|
||||
*/
|
||||
public int vrBlacklist() {
|
||||
GetsystemBean.ResultBean resultBean = getResultBeanByType(HIDE_VR_TYPE);
|
||||
if (null != resultBean) {
|
||||
return resultBean.getStatus();
|
||||
}
|
||||
return 3;
|
||||
}
|
||||
|
||||
/**
|
||||
* 4K黑白名单 == 是否隐藏4k
|
||||
* 取item里的status 1支持 2不支持 3正常
|
||||
* 判断不支持隐藏首页4k tab(4k tab的判断在layoutnav接口里 type值为3的表示为4k tab)
|
||||
*/
|
||||
public int isHide4K() {
|
||||
GetsystemBean.ResultBean resultBean = getResultBeanByType(HIDE_4K_TYPE);
|
||||
if (null != resultBean) {
|
||||
return resultBean.getStatus();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 隐藏4K导航tab
|
||||
*
|
||||
* @param response response
|
||||
*/
|
||||
public void hide4K(GetLayoutNavBean response) {
|
||||
boolean needHide4k = response != null && (isHide4K() == 2
|
||||
|| (isHide4K() != 1 && "0".equals(SharedPreferenceUtils.getString("epgToApk", "issupport4k", ""))));
|
||||
if (needHide4k) {
|
||||
for (GetLayoutNavBean.DataBean item : response.getData()) {
|
||||
if (ListUtils.isEmpty(item.getNavList())) {
|
||||
return;
|
||||
}
|
||||
|
||||
Iterator<GetLayoutNavBean.DataBean.SubNavDataBean> iteratorSub = item.getNavList().iterator();
|
||||
while (iteratorSub.hasNext()) {
|
||||
GetLayoutNavBean.DataBean.SubNavDataBean itemSub = iteratorSub.next();
|
||||
if (3 == itemSub.getType()) {
|
||||
iteratorSub.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
removeEmptyData(response);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 隐藏VR导航tab
|
||||
*
|
||||
* @param response response
|
||||
*/
|
||||
public void hideVr(GetLayoutNavBean response) {
|
||||
boolean needHideVr = response != null && (vrBlacklist() == 2
|
||||
|| (vrBlacklist() != 1 && "0".equals(SharedPreferenceUtils.getString("epgToApk", "issupportVr", ""))));
|
||||
if (needHideVr) {
|
||||
for (GetLayoutNavBean.DataBean item : response.getData()) {
|
||||
if (ListUtils.isEmpty(item.getNavList())) {
|
||||
return;
|
||||
}
|
||||
|
||||
Iterator<GetLayoutNavBean.DataBean.SubNavDataBean> iteratorSub = item.getNavList().iterator();
|
||||
while (iteratorSub.hasNext()) {
|
||||
GetLayoutNavBean.DataBean.SubNavDataBean itemSub = iteratorSub.next();
|
||||
if (4 == itemSub.getType()) {
|
||||
iteratorSub.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
removeEmptyData(response);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 如果VR或者4K配置在组nav中,在这个组为空时 要移除这组数据
|
||||
*
|
||||
* @param response response
|
||||
*/
|
||||
private void removeEmptyData(GetLayoutNavBean response) {
|
||||
Iterator<GetLayoutNavBean.DataBean> iterator = response.getData().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
GetLayoutNavBean.DataBean item = iterator.next();
|
||||
if (item.getNavList().size() == 0) {
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isUserAgree() {
|
||||
return isUserAgree;
|
||||
}
|
||||
|
||||
|
||||
public void getSystemResponse(OnPassData onPassData) {
|
||||
HomeHttpUtils.getsystemData(new AijiaCallback.GetsystemCallBack() {
|
||||
@Override
|
||||
public void onResponse(GetsystemBean response) {
|
||||
passResponse(response, onPassData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void netFail() {
|
||||
onPassData.fail();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fail() {
|
||||
onPassData.fail();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 配置信息
|
||||
*
|
||||
* @param getSystemBean getSystemBean
|
||||
* @param onPassData onPassData
|
||||
*/
|
||||
private void passResponse(GetsystemBean getSystemBean, OnPassData onPassData) {
|
||||
try {
|
||||
for (GetsystemBean.ResultBean resultBean : getSystemBean.getResult()) {
|
||||
int type = resultBean.getType();
|
||||
int status = resultBean.getStatus();
|
||||
String description = resultBean.getDescription();
|
||||
boolean descriptionIsNotEmpty = !TextUtils.isEmpty(description);
|
||||
LogUtils.d("resultBean -- type : " + type);
|
||||
switch (type) {
|
||||
case 1:
|
||||
//退出挽留弹窗
|
||||
break;
|
||||
case 2:
|
||||
//退订限制时长
|
||||
cancelOrderPeriod = resultBean.getLookDuration();
|
||||
LogUtils.d("cancelOrderPeriod:"+cancelOrderPeriod);
|
||||
break;
|
||||
case 3:
|
||||
shortParseNum = resultBean.getLookDuration();
|
||||
LogUtils.d("shortParseNum:"+shortParseNum);
|
||||
break;
|
||||
case 7:
|
||||
loginBg = resultBean.getCorner_url();
|
||||
LogUtils.d("loginBg:"+loginBg);
|
||||
break;
|
||||
// case 27:
|
||||
// // 设置登陆放通开关 status 0 关闭,1 打开
|
||||
// if (status == 1) {
|
||||
// BoxSharedParameters.getInstance().setToPass(true);
|
||||
// }
|
||||
// break;
|
||||
// case 40:
|
||||
// // 获取未来播控 id
|
||||
// if (descriptionIsNotEmpty) {
|
||||
// LogUtils.d("resultBean -- if 40:" + description);
|
||||
// String[] str = description.split("@@@");
|
||||
// if (str.length == 3) {
|
||||
//// if (!TextUtils.isEmpty(str[0]) && !TextUtils.isEmpty(str[1]) && !TextUtils.isEmpty(str[2])) {
|
||||
//// String channelCodePs = SpTimeUtils.getInstance(ContextUtils.getContext())
|
||||
//// .getString("NewtvSdk_channelCode", "");
|
||||
//// if (TextUtils.isEmpty(channelCodePs)) {
|
||||
//// SpTimeUtils.getInstance(ContextUtils.getContext())
|
||||
//// .setString("NewtvSdk_channelCode", str[0], 24 * SpTimeUtils.TIME_HOUR);
|
||||
//// SpTimeUtils.getInstance(ContextUtils.getContext())
|
||||
//// .setString("NewtvSdk_appKey", str[1], 24 * SpTimeUtils.TIME_HOUR);
|
||||
//// SpTimeUtils.getInstance(ContextUtils.getContext())
|
||||
//// .setString("NewtvSdk_appSecret", str[2], 24 * SpTimeUtils.TIME_HOUR);
|
||||
//// }
|
||||
//// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// break;
|
||||
// case 35:
|
||||
// LogUtils.d("resultBean -- if 35:" + status);
|
||||
// BoxSharedParameters.getInstance().setIsNetPass(status == 1);
|
||||
// break;
|
||||
// case 41:
|
||||
// LogUtils.d("resultBean -- if 41:" + status);
|
||||
// //未来认证放通
|
||||
// BoxSharedParameters.getInstance().setSwitchNewtvPassSwitch(status != 1);
|
||||
// break;
|
||||
// case 36:
|
||||
// // 设置省份id 和 code
|
||||
// String name = resultBean.getName();
|
||||
// if (!TextUtils.isEmpty(name)) {
|
||||
// LogUtils.d("resultBean -- if 36:" + name);
|
||||
// String[] str = name.split("@@@");
|
||||
// if (str.length == 2) {
|
||||
// if (str[0].length() == 2) {
|
||||
// BoxSharedParameters.getInstance().setProvinceId(str[0]);
|
||||
// BoxSharedParameters.getInstance().setProvinceCode(str[1]);
|
||||
// } else {
|
||||
// BoxSharedParameters.getInstance().setProvinceId(str[1]);
|
||||
// BoxSharedParameters.getInstance().setProvinceCode(str[0]);
|
||||
// }
|
||||
// }
|
||||
// // 全国走基地逻辑
|
||||
// if (!TextUtils.isEmpty(BoxSharedParameters.getInstance().getProvinceId())
|
||||
// && BoxSharedParameters.getInstance().getProvinceId().equals("90")) {
|
||||
// BoxSharedParameters.getInstance().setChannelType("jd");
|
||||
// }
|
||||
// }
|
||||
// break;
|
||||
// case 23:
|
||||
// // 设置网络Base api
|
||||
// if (descriptionIsNotEmpty) {
|
||||
// LogUtils.d("resultBean -- if 23:" + description);
|
||||
//// HttpRetrofitRequest.getInstances().setHttpBaseUrl(description);
|
||||
// }
|
||||
// break;
|
||||
// case 26:
|
||||
// LogUtils.d("resultBean -- if 26:" + description);
|
||||
// // 取description 字段,0:vr-mediaplayer 1:vr-mediacodec 2:vr-软解
|
||||
// BoxSharedParameters.getInstance().setVrType(description);
|
||||
// break;
|
||||
// case 31:
|
||||
// if (descriptionIsNotEmpty) {
|
||||
// LogUtils.d("resultBean -- if 31:" + description);
|
||||
// BoxSharedParameters.getInstance().setHotSearchId(description);
|
||||
// }
|
||||
// break;
|
||||
// case 34:
|
||||
// LogUtils.d("resultBean -- if 34:" + status);
|
||||
// BoxSharedParameters.getInstance().setShowSearchHot(status != 1);
|
||||
// break;
|
||||
// case 43:
|
||||
// // 取description 字段,0:系统播放器 1:杭研播放器
|
||||
// if (descriptionIsNotEmpty) {
|
||||
// LogUtils.d("resultBean -- if 43:" + description);
|
||||
// if (description.equals("0")) {
|
||||
// BoxSharedParameters.getInstance().setVideoPlayType(0);
|
||||
// } else if (description.equals("1")) {
|
||||
// BoxSharedParameters.getInstance().setVideoPlayType(1);
|
||||
// }
|
||||
// }
|
||||
// break;
|
||||
// case 44:
|
||||
// // 取description 字段,0:系统键盘 1:tsg自研键盘
|
||||
// if (descriptionIsNotEmpty) {
|
||||
// LogUtils.d("resultBean -- if 44:" + description);
|
||||
//// if (description.equals("0")) {
|
||||
//// ShowLogon.keybordStatus = 0;
|
||||
//// } else {
|
||||
//// ShowLogon.keybordStatus = 1;
|
||||
//// }
|
||||
// }
|
||||
// break;
|
||||
// case 47:
|
||||
// // 取description EPG地址
|
||||
// if (descriptionIsNotEmpty) {
|
||||
// LogUtils.d("resultBean -- if 47:" + description);
|
||||
// // BoxSharedParameters.getInstance().setEpgUrl(description);
|
||||
// // BaseUrl.getSingleton().setHomeUrl(description);
|
||||
// }
|
||||
// break;
|
||||
// case 53:
|
||||
// // 取description 域名白名单
|
||||
// if (descriptionIsNotEmpty) {
|
||||
// LogUtils.d("resultBean -- if 53:" + description);
|
||||
//// BaseWay.getSingleton().setcmdUrl(description);
|
||||
//// BaseWay.getSingleton().setPassUrl(description);
|
||||
// }
|
||||
// break;
|
||||
// case 56:
|
||||
// // 取description 省测鉴权主接口
|
||||
// if (descriptionIsNotEmpty) {
|
||||
// LogUtils.d("resultBean -- if 56:" + description);
|
||||
// BoxSharedParameters.getInstance().setProvInteface(description);
|
||||
// }
|
||||
// break;
|
||||
// case 64:
|
||||
// // 取status 1 :NATIVE 模式 2 :H5 模式
|
||||
// LogUtils.d("resultBean -- if 64:" + status);
|
||||
// BoxSharedParameters.getInstance().setLoadType(status);
|
||||
//
|
||||
// break;
|
||||
// case 37:
|
||||
// // 用户协议
|
||||
// if (status == 1) {
|
||||
// // 开
|
||||
// isUserAgree = true;
|
||||
// agreeDes = description;
|
||||
// agreeLookDuration = resultBean.getLookDuration();
|
||||
// LogUtils.d("resultBean -- if 37:" + description);
|
||||
// LogUtils.d("resultBean -- if 37:" + agreeLookDuration);
|
||||
// } else {
|
||||
// isUserAgree = false;
|
||||
// }
|
||||
//
|
||||
// break;
|
||||
// case 61:
|
||||
// //免杀白名单
|
||||
// LogUtils.d("resultBean -- if 61:" + resultBean.getDescription());
|
||||
//// if(!TextUtils.isEmpty(resultBean.getDescription())){
|
||||
//// DifferenceData.UserLeaveHintDF.addNoKillPackage(Arrays.asList(resultBean.getDescription().split("@@@")));
|
||||
//// }
|
||||
//
|
||||
// break;
|
||||
// case VRPLAYURL_TYPE:
|
||||
// // VR测试流
|
||||
// vrTestUrl = resultBean.getCornerurl();
|
||||
// LogUtils.d("resultBean -- if 21:" + vrTestUrl);
|
||||
// break;
|
||||
// case TRY_SEEING_TYPE:
|
||||
// // 试看时长
|
||||
// tryLookDuration = resultBean.getLookDuration();
|
||||
// break;
|
||||
// case TRY_SEEING_LIVE_TYPE:
|
||||
// // 直播试看时长
|
||||
// tryLiveDuration = resultBean.getLookDuration();
|
||||
// break;
|
||||
// case INDEX_SHIM_CODE:
|
||||
// // 首页垫片 shimCode
|
||||
// indexShimCode = resultBean.getShimCode();
|
||||
// break;
|
||||
// case GUANGDONG_IPTV_TID:
|
||||
// // 广东iptv tid
|
||||
// if (descriptionIsNotEmpty) {
|
||||
// String tid = description.split("@@@")[0];
|
||||
// String cpid = description.split("@@@")[1];
|
||||
// SharedPreferenceUtils.put("guangdong","iptvTid",tid);
|
||||
// SharedPreferenceUtils.put("guangdong","iptvCpid",cpid);
|
||||
// LogUtils.d("resultBean --tid : "+tid);
|
||||
// LogUtils.d("resultBean --cpid : "+cpid);
|
||||
// }
|
||||
// break;
|
||||
// case SICHUAN_CDN:
|
||||
// if (descriptionIsNotEmpty) {
|
||||
// LogUtils.d("resultBean -- if 42:" + description);
|
||||
// BoxSharedParameters.getInstance().setCdnInfo(description);
|
||||
// }
|
||||
// break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
//setData();
|
||||
LogUtils.d("resultBean -- over ");
|
||||
LogUtils.e("resultBean -- resultBean :执行over 前");
|
||||
onPassData.onResponse(getSystemBean);
|
||||
LogUtils.e("resultBean -- resultBean :执行over ");
|
||||
} catch (Exception e) {
|
||||
LogUtils.d("resultBean -- Exception " + e);
|
||||
onPassData.onResponse(getSystemBean);
|
||||
}
|
||||
}
|
||||
|
||||
// private void setData() {
|
||||
// String channelCodePs = SpTimeUtils.getInstance(ContextUtils.getContext()).getString("NewtvSdk_channelCode", "");
|
||||
// String appKeyPs = SpTimeUtils.getInstance(ContextUtils.getContext()).getString("NewtvSdk_appKey", "");
|
||||
// String appSecretPs = SpTimeUtils.getInstance(ContextUtils.getContext()).getString("NewtvSdk_appSecret", "");
|
||||
// if (!TextUtils.isEmpty(channelCodePs) && !TextUtils.isEmpty(appKeyPs) && !TextUtils.isEmpty(appSecretPs)) {
|
||||
// DifferenceData.NewtvSdk.channelCodePs = channelCodePs;
|
||||
// DifferenceData.NewtvSdk.appKeyPs = appKeyPs;
|
||||
// DifferenceData.NewtvSdk.appSecretPs = appSecretPs;
|
||||
// }
|
||||
// LogUtils.d("resultBean -- channelCodePs:" + DifferenceData.NewtvSdk.channelCodePs);
|
||||
// }
|
||||
|
||||
public String getAgreeDes() {
|
||||
return agreeDes;
|
||||
}
|
||||
|
||||
public String getVrTestUrl() {
|
||||
return vrTestUrl;
|
||||
}
|
||||
|
||||
public int getAgreeLookDuration() {
|
||||
return agreeLookDuration;
|
||||
}
|
||||
|
||||
public int getTryLookDuration() {
|
||||
if (tryLookDuration <= 0) {
|
||||
tryLookDuration = 6;
|
||||
}
|
||||
return tryLookDuration;
|
||||
}
|
||||
|
||||
public int getTryLiveDuration() {
|
||||
if (tryLiveDuration <= 0) {
|
||||
tryLiveDuration = 6;
|
||||
}
|
||||
return tryLiveDuration;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取首页垫片 shimCode
|
||||
*
|
||||
* @return 首页垫片 shimCode
|
||||
*/
|
||||
public String getIndexShimCode() {
|
||||
return indexShimCode;
|
||||
}
|
||||
|
||||
public interface OnPassData {
|
||||
void onResponse(GetsystemBean getsystemBean);
|
||||
|
||||
void fail();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user