diff --git a/app/src/main/java/com/github/tvbox/osc/base/BaseActivity.java b/app/src/main/java/com/github/tvbox/osc/base/BaseActivity.java index 47ba0aff..28356a15 100644 --- a/app/src/main/java/com/github/tvbox/osc/base/BaseActivity.java +++ b/app/src/main/java/com/github/tvbox/osc/base/BaseActivity.java @@ -20,9 +20,11 @@ import com.github.tvbox.osc.R; import com.github.tvbox.osc.callback.EmptyCallback; import com.github.tvbox.osc.callback.LoadingCallback; import com.github.tvbox.osc.util.AppManager; +import com.github.tvbox.osc.util.HawkConfig; import com.kingja.loadsir.callback.Callback; import com.kingja.loadsir.core.LoadService; import com.kingja.loadsir.core.LoadSir; +import com.orhanobut.hawk.Hawk; import java.io.BufferedReader; import java.io.File; @@ -60,6 +62,7 @@ public abstract class BaseActivity extends AppCompatActivity implements CustomAd setContentView(getLayoutResID()); mContext = this; AppManager.getInstance().addActivity(this); + init(); } diff --git a/app/src/main/java/com/github/tvbox/osc/event/RefreshEvent.java b/app/src/main/java/com/github/tvbox/osc/event/RefreshEvent.java index aa9be925..37f87dea 100644 --- a/app/src/main/java/com/github/tvbox/osc/event/RefreshEvent.java +++ b/app/src/main/java/com/github/tvbox/osc/event/RefreshEvent.java @@ -15,6 +15,7 @@ public class RefreshEvent { public static final int TYPE_SEARCH_RESULT = 6; public static final int TYPE_QUICK_SEARCH_RESULT = 7; public static final int TYPE_API_URL_CHANGE = 8; + public static final int TYPE_EPG_URL_CHANGE = 10; public static final int TYPE_PUSH_URL = 9; public int type; public Object obj; diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/LivePlayActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/LivePlayActivity.java index 95a467d3..96c9a564 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/activity/LivePlayActivity.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/LivePlayActivity.java @@ -128,16 +128,12 @@ public class LivePlayActivity extends BaseActivity { private TextView tv_right_top_epg_name; private TextView tv_right_top_type; private ImageView iv_circle_bg; - private TextView tv_netspeedinfo; - private TextView tv_ad ; - private TextView tv_voluminfo ; private TextView tv_shownum ; private TextView txtNoEpg ; private ImageView iv_back_bg; private ObjectAnimator objectAnimator; - private ObjectAnimator objectAnimator2; - + public String epgStringAddress =""; @@ -150,6 +146,12 @@ public class LivePlayActivity extends BaseActivity { @Override protected void init() { + + epgStringAddress = Hawk.get(HawkConfig.EPG_URL,""); + if(epgStringAddress == null || epgStringAddress.length()<5) + epgStringAddress = "http://epg.51zmt.top:8000/api/diyp/?ch="; + + setLoadSir(findViewById(R.id.live_root)); mVideoView = findViewById(R.id.mVideoView); @@ -192,8 +194,6 @@ public class LivePlayActivity extends BaseActivity { objectAnimator.setRepeatCount(-1); objectAnimator.start(); - - initVideoView(); initChannelGroupView(); initLiveChannelView(); @@ -236,8 +236,8 @@ public class LivePlayActivity extends BaseActivity { final String channelName = channel_Name.getChannelName(); Date date = new Date(); SimpleDateFormat timeFormat = new SimpleDateFormat("yyyy-MM-dd"); - String epgStringAddress ="http://epg.51zmt.top:8000/api/diyp/?ch="; - UrlHttpUtil.get(epgStringAddress + URLEncoder.encode(channelName.replace("+", "[add]").toString()) + "&date=" + timeFormat.format(date), new CallBackUtil.CallBackString() { + + UrlHttpUtil.get(epgStringAddress + URLEncoder.encode(channelName.replace("+", "[add]").toString()) + "&date=" + timeFormat.format(date), new CallBackUtil.CallBackString() { public void onFailure(int i, String str) { } public void onResponse(String paramString) { diff --git a/app/src/main/java/com/github/tvbox/osc/ui/dialog/EpgDialog.java b/app/src/main/java/com/github/tvbox/osc/ui/dialog/EpgDialog.java new file mode 100644 index 00000000..e17a04c6 --- /dev/null +++ b/app/src/main/java/com/github/tvbox/osc/ui/dialog/EpgDialog.java @@ -0,0 +1,152 @@ +package com.github.tvbox.osc.ui.dialog; + + +import android.app.Activity; +import android.content.Context; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; + +import com.github.tvbox.osc.R; +import com.github.tvbox.osc.event.RefreshEvent; +import com.github.tvbox.osc.server.ControlManager; +import com.github.tvbox.osc.ui.adapter.ApiHistoryDialogAdapter; +import com.github.tvbox.osc.ui.tv.QRCodeGen; +import com.github.tvbox.osc.util.HawkConfig; +import com.hjq.permissions.OnPermissionCallback; +import com.hjq.permissions.Permission; +import com.hjq.permissions.XXPermissions; +import com.orhanobut.hawk.Hawk; + +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +import me.jessyan.autosize.utils.AutoSizeUtils; + +/** + * 描述 + * + * @author pj567 + * @since 2020/12/27 + */ +public class EpgDialog extends BaseDialog { + private ImageView ivQRCode; + private TextView tvAddress; + private EditText inputApi; + + @Subscribe(threadMode = ThreadMode.MAIN) + public void refresh(RefreshEvent event) { + if (event.type == RefreshEvent.TYPE_EPG_URL_CHANGE) { + inputApi.setText((String) event.obj); + } + } + + public EpgDialog(@NonNull @NotNull Context context) { + super(context); + setContentView(R.layout.dialog_api); + setCanceledOnTouchOutside(false); + ivQRCode = findViewById(R.id.ivQRCode); + tvAddress = findViewById(R.id.tvAddress); + inputApi = findViewById(R.id.input); + //内置网络接口在此处添加 + inputApi.setText(Hawk.get(HawkConfig.EPG_URL, "")); + findViewById(R.id.inputSubmit).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String newApi = inputApi.getText().toString().trim(); + if (!newApi.isEmpty()) { + ArrayList history = Hawk.get(HawkConfig.EPG_HISTORY, new ArrayList()); + if (!history.contains(newApi)) + history.add(0, newApi); + if (history.size() > 10) + history.remove(10); + Hawk.put(HawkConfig.EPG_HISTORY, history); + listener.onchange(newApi); + dismiss(); + } + } + }); + findViewById(R.id.apiHistory).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ArrayList history = Hawk.get(HawkConfig.EPG_HISTORY, new ArrayList()); + if (history.isEmpty()) + return; + String current = Hawk.get(HawkConfig.EPG_URL, ""); + int idx = 0; + if (history.contains(current)) + idx = history.indexOf(current); + ApiHistoryDialog dialog = new ApiHistoryDialog(getContext()); + dialog.setTip("EPG配置列表"); + dialog.setAdapter(new ApiHistoryDialogAdapter.SelectDialogInterface() { + @Override + public void click(String value) { + inputApi.setText(value); + listener.onchange(value); + dialog.dismiss(); + } + + @Override + public void del(String value, ArrayList data) { + Hawk.put(HawkConfig.EPG_HISTORY, data); + } + }, history, idx); + dialog.show(); + } + }); + findViewById(R.id.storagePermission).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (XXPermissions.isGranted(getContext(), Permission.Group.STORAGE)) { + Toast.makeText(getContext(), "已获得存储权限", Toast.LENGTH_SHORT).show(); + } else { + XXPermissions.with(getContext()) + .permission(Permission.Group.STORAGE) + .request(new OnPermissionCallback() { + @Override + public void onGranted(List permissions, boolean all) { + if (all) { + Toast.makeText(getContext(), "已获得存储权限", Toast.LENGTH_SHORT).show(); + } + } + + @Override + public void onDenied(List permissions, boolean never) { + if (never) { + Toast.makeText(getContext(), "获取存储权限失败,请在系统设置中开启", Toast.LENGTH_SHORT).show(); + XXPermissions.startPermissionActivity((Activity) getContext(), permissions); + } else { + Toast.makeText(getContext(), "获取存储权限失败", Toast.LENGTH_SHORT).show(); + } + } + }); + } + } + }); + refreshQRCode(); + } + + private void refreshQRCode() { + String address = ControlManager.get().getAddress(false); + tvAddress.setText(String.format("手机/电脑扫描上方二维码或者直接浏览器访问地址\n%s", address)); + ivQRCode.setImageBitmap(QRCodeGen.generateBitmap(address, AutoSizeUtils.mm2px(getContext(), 300), AutoSizeUtils.mm2px(getContext(), 300))); + } + + public void setOnListener(OnListener listener) { + this.listener = listener; + } + + OnListener listener = null; + + public interface OnListener { + void onchange(String api); + } +} diff --git a/app/src/main/java/com/github/tvbox/osc/ui/fragment/ModelSettingFragment.java b/app/src/main/java/com/github/tvbox/osc/ui/fragment/ModelSettingFragment.java index ed0ede30..1d13c15d 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/fragment/ModelSettingFragment.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/fragment/ModelSettingFragment.java @@ -22,6 +22,7 @@ import com.github.tvbox.osc.ui.adapter.SelectDialogAdapter; import com.github.tvbox.osc.ui.dialog.AboutDialog; import com.github.tvbox.osc.ui.dialog.ApiDialog; import com.github.tvbox.osc.ui.dialog.BackupDialog; +import com.github.tvbox.osc.ui.dialog.EpgDialog; import com.github.tvbox.osc.ui.dialog.SelectDialog; import com.github.tvbox.osc.ui.dialog.XWalkInitDialog; import com.github.tvbox.osc.util.FastClickCheckUtil; @@ -58,6 +59,7 @@ public class ModelSettingFragment extends BaseLazyFragment { private TextView tvRender; private TextView tvScale; private TextView tvApi; + private TextView tvEpgApi; private TextView tvHomeApi; private TextView tvDns; private TextView tvHomeRec; @@ -92,6 +94,7 @@ public class ModelSettingFragment extends BaseLazyFragment { tvRender = findViewById(R.id.tvRenderType); tvScale = findViewById(R.id.tvScaleType); tvApi = findViewById(R.id.tvApi); + tvEpgApi = findViewById(R.id.tvEpgApi); tvHomeApi = findViewById(R.id.tvHomeApi); tvDns = findViewById(R.id.tvDns); tvHomeRec = findViewById(R.id.tvHomeRec); @@ -101,6 +104,7 @@ public class ModelSettingFragment extends BaseLazyFragment { tvDebugOpen.setText(Hawk.get(HawkConfig.DEBUG_OPEN, false) ? "已打开" : "已关闭"); tvParseWebView.setText(Hawk.get(HawkConfig.PARSE_WEBVIEW, true) ? "系统自带" : "XWalkView"); tvApi.setText(Hawk.get(HawkConfig.API_URL, "")); + tvEpgApi.setText("EPG地址已隐藏"); tvDns.setText(OkGoHelper.dnsHttpsList.get(Hawk.get(HawkConfig.DOH_URL, 0))); tvHomeRec.setText(getHomeRecName(Hawk.get(HawkConfig.HOME_REC, 0))); tvHistoryNum.setText(HistoryHelper.getHistoryNumName(Hawk.get(HawkConfig.HISTORY_NUM, 0))); @@ -285,6 +289,32 @@ public class ModelSettingFragment extends BaseLazyFragment { dialog.show(); } }); + + findViewById(R.id.epgApi).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + FastClickCheckUtil.check(v); + EpgDialog dialog = new EpgDialog(mActivity); + EventBus.getDefault().register(dialog); + dialog.setOnListener(new EpgDialog.OnListener() { + @Override + public void onchange(String api) { + Hawk.put(HawkConfig.EPG_URL, api); + tvEpgApi.setText(api); + } + }); + dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialog) { + ((BaseActivity) mActivity).hideSysBar(); + EventBus.getDefault().unregister(dialog); + } + }); + dialog.show(); + } + }); + + findViewById(R.id.llMediaCodec).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { diff --git a/app/src/main/java/com/github/tvbox/osc/util/HawkConfig.java b/app/src/main/java/com/github/tvbox/osc/util/HawkConfig.java index 876665ef..10a93c8e 100644 --- a/app/src/main/java/com/github/tvbox/osc/util/HawkConfig.java +++ b/app/src/main/java/com/github/tvbox/osc/util/HawkConfig.java @@ -7,8 +7,10 @@ package com.github.tvbox.osc.util; */ public class HawkConfig { public static final String API_URL = "api_url"; + public static final String EPG_URL = "epg_url"; public static final String SHOW_PREVIEW = "show_preview"; public static final String API_HISTORY = "api_history"; + public static final String EPG_HISTORY = "epg_history"; public static final String HOME_API = "home_api"; public static final String DEFAULT_PARSE = "parse_default"; public static final String DEBUG_OPEN = "debug_open"; diff --git a/app/src/main/res/layout/activity_live_play.xml b/app/src/main/res/layout/activity_live_play.xml index e56005e8..d19571c8 100644 --- a/app/src/main/res/layout/activity_live_play.xml +++ b/app/src/main/res/layout/activity_live_play.xml @@ -110,6 +110,7 @@ android:divider="@null" android:fadeScrollbars="false" android:focusable="true" + android:nextFocusDown="@id/divEPG" android:listSelector="@drawable/item_bg_selector_right" android:padding="5dp" android:scrollbars="none" /> diff --git a/app/src/main/res/layout/fragment_model.xml b/app/src/main/res/layout/fragment_model.xml index 36fff2f3..d0e33814 100644 --- a/app/src/main/res/layout/fragment_model.xml +++ b/app/src/main/res/layout/fragment_model.xml @@ -151,6 +151,48 @@ android:textColor="@android:color/white" android:textSize="@dimen/ts_30" /> + + + + + + + + + +