diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java index aa62875f3..0288454bb 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java @@ -106,10 +106,10 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List @SuppressLint("ClickableViewAccessibility") protected void initEvent() { mBinding.control.seek.setListener(mPlayers); - mBinding.control.text.setAddListener(this::onTextAdd); - mBinding.control.text.setSubListener(this::onTextSub); - mBinding.control.speed.setAddListener(this::onSpeedAdd); - mBinding.control.speed.setSubListener(this::onSpeedSub); + mBinding.control.text.setUpListener(this::onTextAdd); + mBinding.control.text.setDownListener(this::onTextSub); + mBinding.control.speed.setUpListener(this::onSpeedAdd); + mBinding.control.speed.setDownListener(this::onSpeedSub); mBinding.control.text.setOnClickListener(this::onTrack); mBinding.control.audio.setOnClickListener(this::onTrack); mBinding.control.video.setOnClickListener(this::onTrack); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index cebae687e..5309bf345 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -30,6 +30,7 @@ import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.api.config.LiveConfig; import com.fongmi.android.tv.bean.Channel; import com.fongmi.android.tv.bean.Epg; +import com.fongmi.android.tv.bean.EpgData; import com.fongmi.android.tv.bean.Group; import com.fongmi.android.tv.bean.Keep; import com.fongmi.android.tv.bean.Live; @@ -55,6 +56,7 @@ import com.fongmi.android.tv.ui.dialog.PassDialog; import com.fongmi.android.tv.ui.dialog.SubtitleDialog; import com.fongmi.android.tv.ui.dialog.TrackDialog; import com.fongmi.android.tv.ui.presenter.ChannelPresenter; +import com.fongmi.android.tv.ui.presenter.EpgDataPresenter; import com.fongmi.android.tv.ui.presenter.GroupPresenter; import com.fongmi.android.tv.utils.Biometric; import com.fongmi.android.tv.utils.Clock; @@ -73,10 +75,11 @@ import java.util.List; import tv.danmaku.ijk.media.player.ui.IjkVideoView; -public class LiveActivity extends BaseActivity implements GroupPresenter.OnClickListener, ChannelPresenter.OnClickListener, CustomKeyDownLive.Listener, CustomLiveListView.Callback, TrackDialog.Listener, Biometric.Callback, PassCallback, LiveCallback, SubtitleCallback { +public class LiveActivity extends BaseActivity implements GroupPresenter.OnClickListener, ChannelPresenter.OnClickListener, EpgDataPresenter.OnClickListener, CustomKeyDownLive.Listener, CustomLiveListView.Callback, TrackDialog.Listener, Biometric.Callback, PassCallback, LiveCallback, SubtitleCallback { private ActivityLiveBinding mBinding; private ArrayObjectAdapter mChannelAdapter; + private ArrayObjectAdapter mEpgDataAdapter; private ArrayObjectAdapter mGroupAdapter; private CustomKeyDownLive mKeyDown; private LiveViewModel mViewModel; @@ -188,8 +191,10 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick private void setRecyclerView() { mBinding.group.setItemAnimator(null); mBinding.channel.setItemAnimator(null); + mBinding.widget.epgData.setItemAnimator(null); mBinding.group.setAdapter(new ItemBridgeAdapter(mGroupAdapter = new ArrayObjectAdapter(new GroupPresenter(this)))); mBinding.channel.setAdapter(new ItemBridgeAdapter(mChannelAdapter = new ArrayObjectAdapter(new ChannelPresenter(this)))); + mBinding.widget.epgData.setAdapter(new ItemBridgeAdapter(mEpgDataAdapter = new ArrayObjectAdapter(new EpgDataPresenter(this)))); } private void setPlayerView() { @@ -289,6 +294,14 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick return group; } + private void setWidth(Epg epg) { + int padding = ResUtil.dp2px(48); + if (epg.getList().isEmpty()) return; + int minWidth = ResUtil.getTextWidth(epg.getList().get(0).getTime(), 16); + if (epg.getWidth() == 0) for (EpgData item : epg.getList()) epg.setWidth(Math.max(epg.getWidth(), ResUtil.getTextWidth(item.getTitle(), 16))); + mBinding.widget.epgData.getLayoutParams().width = epg.getWidth() == 0 ? 0 : Math.min(Math.max(epg.getWidth(), minWidth) + padding, ResUtil.getScreenWidth() / 3); + } + private void setPosition(int[] position) { if (position[0] == -1) return; if (mGroupAdapter.size() == 1) return; @@ -414,11 +427,27 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick setPosition(); } - private void showUI() { + @Override + public void showUI() { if (isVisible(mBinding.recycler)) return; mBinding.recycler.setVisibility(View.VISIBLE); mBinding.channel.requestFocus(); setPosition(); + setUITimer(); + hideEpg(); + } + + @Override + public void showEpg() { + if (mChannel == null || mChannel.getData().getList().isEmpty() || mEpgDataAdapter.size() == 0) return; + mBinding.widget.epgData.setSelectedPosition(mChannel.getData().getIndex()); + mBinding.widget.epg.setVisibility(View.VISIBLE); + mBinding.widget.epg.requestFocus(); + hideUI(); + } + + private void hideEpg() { + mBinding.widget.epg.setVisibility(View.GONE); } private void showProgress() { @@ -450,6 +479,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick view.requestFocus(); setR1Callback(); hideInfo(); + hideEpg(); } private void hideControl() { @@ -548,6 +578,11 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick return true; } + @Override + public void onItemClick(EpgData item) { + + } + private void addKeep(Channel item) { getKeep().add(item); Keep keep = new Keep(); @@ -582,13 +617,16 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick mBinding.control.line.setText(mChannel.getLineText()); mBinding.widget.line.setVisibility(mChannel.getLineVisible()); mBinding.control.line.setVisibility(mChannel.getLineVisible()); + hideEpg(); setEpg(); } private void setEpg() { String epg = mChannel.getData().getEpg(); mBinding.widget.name.setMaxEms(epg.isEmpty() ? mChannel.getName().length() : 12); + mEpgDataAdapter.setItems(mChannel.getData().getList(), null); mBinding.widget.play.setText(epg); + setWidth(mChannel.getData()); setMetadata(); } @@ -605,7 +643,11 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick } private void resetAdapter() { + mBinding.widget.epgData.getLayoutParams().width = 0; + mBinding.channel.getLayoutParams().width = 0; + mBinding.group.getLayoutParams().width = 0; mBinding.divide.setVisibility(View.GONE); + mEpgDataAdapter.clear(); mChannelAdapter.clear(); mGroupAdapter.clear(); mHides.clear(); @@ -842,7 +884,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick @Override public boolean dispatch(boolean check) { - return !check || isGone(mBinding.recycler) && isGone(mBinding.control.getRoot()); + return !check || isGone(mBinding.recycler) && isGone(mBinding.control.getRoot()) && isGone(mBinding.widget.epg); } @Override @@ -912,6 +954,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick @Override public void onDoubleTap() { if (isVisible(mBinding.recycler)) hideUI(); + else if (isVisible(mBinding.widget.epg)) hideEpg(); else if (isVisible(mBinding.control.getRoot())) hideControl(); else onMenu(); } @@ -942,6 +985,8 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick hideControl(); } else if (isVisible(mBinding.widget.bottom)) { hideInfo(); + } else if (isVisible(mBinding.widget.epg)) { + hideEpg(); } else if (isVisible(mBinding.recycler)) { hideUI(); } else if (!confirm) { diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 9b3295bf9..5593223da 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -322,14 +322,14 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List mBinding.control.text.setOnClickListener(this::onTrack); mBinding.control.audio.setOnClickListener(this::onTrack); mBinding.control.video.setOnClickListener(this::onTrack); - mBinding.control.text.setAddListener(this::onTextAdd); - mBinding.control.text.setSubListener(this::onTextSub); - mBinding.control.speed.setAddListener(this::onSpeedAdd); - mBinding.control.speed.setSubListener(this::onSpeedSub); - mBinding.control.ending.setAddListener(this::onEndingAdd); - mBinding.control.ending.setSubListener(this::onEndingSub); - mBinding.control.opening.setAddListener(this::onOpeningAdd); - mBinding.control.opening.setSubListener(this::onOpeningSub); + mBinding.control.text.setUpListener(this::onTextAdd); + mBinding.control.text.setDownListener(this::onTextSub); + mBinding.control.speed.setUpListener(this::onSpeedAdd); + mBinding.control.speed.setDownListener(this::onSpeedSub); + mBinding.control.ending.setUpListener(this::onEndingAdd); + mBinding.control.ending.setDownListener(this::onEndingSub); + mBinding.control.opening.setUpListener(this::onOpeningAdd); + mBinding.control.opening.setDownListener(this::onOpeningSub); mBinding.control.loop.setOnClickListener(view -> onLoop()); mBinding.control.danmu.setOnClickListener(view -> onDanmu()); mBinding.control.next.setOnClickListener(view -> checkNext()); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomLeftRightView.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomLeftRightView.java new file mode 100644 index 000000000..375941048 --- /dev/null +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomLeftRightView.java @@ -0,0 +1,59 @@ +package com.fongmi.android.tv.ui.custom; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.KeyEvent; +import android.widget.LinearLayout; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.fongmi.android.tv.utils.KeyUtil; + +public class CustomLeftRightView extends LinearLayout { + + private LeftListener leftListener; + private RightListener rightListener; + + public CustomLeftRightView(@NonNull Context context) { + super(context); + } + + public CustomLeftRightView(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public void setLeftListener(LeftListener leftListener) { + this.leftListener = leftListener; + } + + public void setRightListener(RightListener rightListener) { + this.rightListener = rightListener; + } + + private boolean hasEvent(KeyEvent event) { + return event.getAction() == KeyEvent.ACTION_DOWN && ((leftListener != null && KeyUtil.isLeftKey(event)) || (rightListener != null && KeyUtil.isRightKey(event))); + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + if (hasEvent(event)) return onKeyDown(event); + else return super.dispatchKeyEvent(event); + } + + private boolean onKeyDown(KeyEvent event) { + if (leftListener != null && KeyUtil.isLeftKey(event)) leftListener.onLeft(); + if (rightListener != null && KeyUtil.isRightKey(event)) rightListener.onRight(); + return true; + } + + public interface LeftListener { + + void onLeft(); + } + + public interface RightListener { + + void onRight(); + } +} diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomLiveListView.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomLiveListView.java index b7e41fcd4..e3c55d368 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomLiveListView.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomLiveListView.java @@ -35,21 +35,21 @@ public class CustomLiveListView extends VerticalGridView { private boolean onKeyDown() { if (getSelectedPosition() != getAdapter().getItemCount() - 1) return false; if (getId() == R.id.channel) setSelectedPosition(0); - else listener.nextGroup(false); + else if (listener != null) listener.nextGroup(false); return true; } private boolean onKeyUp() { if (getSelectedPosition() != 0) return false; if (getId() == R.id.channel) setSelectedPosition(getAdapter().getItemCount()); - else listener.prevGroup(false); + else if (listener != null) listener.prevGroup(false); return true; } @Override public boolean dispatchKeyEvent(@NonNull KeyEvent event) { if (getVisibility() == View.GONE || event.getAction() != KeyEvent.ACTION_DOWN) return super.dispatchKeyEvent(event); - if (getVisibility() == View.VISIBLE) listener.setUITimer(); + if (getVisibility() == View.VISIBLE && listener != null) listener.setUITimer(); if (KeyUtil.isDownKey(event)) return onKeyDown(); if (KeyUtil.isUpKey(event)) return onKeyUp(); return super.dispatchKeyEvent(event); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomUpDownView.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomUpDownView.java index cebe646a9..522f717e2 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomUpDownView.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomUpDownView.java @@ -12,8 +12,8 @@ import com.fongmi.android.tv.utils.KeyUtil; public class CustomUpDownView extends AppCompatTextView { - private AddListener addListener; - private SubListener subListener; + private UpListener upListener; + private DownListener downListener; public CustomUpDownView(@NonNull Context context) { super(context); @@ -23,16 +23,16 @@ public class CustomUpDownView extends AppCompatTextView { super(context, attrs); } - public void setAddListener(AddListener addListener) { - this.addListener = addListener; + public void setUpListener(UpListener upListener) { + this.upListener = upListener; } - public void setSubListener(SubListener subListener) { - this.subListener = subListener; + public void setDownListener(DownListener downListener) { + this.downListener = downListener; } private boolean hasEvent(KeyEvent event) { - return event.getAction() == KeyEvent.ACTION_DOWN && (KeyUtil.isUpKey(event) || KeyUtil.isDownKey(event)); + return event.getAction() == KeyEvent.ACTION_DOWN && ((upListener != null && KeyUtil.isUpKey(event)) || (downListener != null && KeyUtil.isDownKey(event))); } @Override @@ -42,18 +42,18 @@ public class CustomUpDownView extends AppCompatTextView { } private boolean onKeyDown(KeyEvent event) { - if (KeyUtil.isUpKey(event)) addListener.onAdd(); - if (KeyUtil.isDownKey(event)) subListener.onSud(); + if (upListener != null && KeyUtil.isUpKey(event)) upListener.onUp(); + if (downListener != null && KeyUtil.isDownKey(event)) downListener.onDown(); return true; } - public interface AddListener { + public interface UpListener { - void onAdd(); + void onUp(); } - public interface SubListener { + public interface DownListener { - void onSud(); + void onDown(); } } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ChannelPresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ChannelPresenter.java index ea294fdf1..a36310a0a 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ChannelPresenter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ChannelPresenter.java @@ -19,6 +19,8 @@ public class ChannelPresenter extends Presenter { public interface OnClickListener { + void showEpg(); + void onItemClick(Channel item); boolean onLongClick(Channel item); @@ -37,6 +39,7 @@ public class ChannelPresenter extends Presenter { holder.binding.name.setText(item.getName()); holder.binding.number.setText(item.getNumber()); holder.binding.getRoot().setSelected(item.isSelected()); + holder.binding.getRoot().setRightListener(mListener::showEpg); setOnClickListener(holder, view -> mListener.onItemClick(item)); holder.view.setOnLongClickListener(view -> mListener.onLongClick(item)); } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/EpgDataPresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/EpgDataPresenter.java new file mode 100644 index 000000000..186e1a960 --- /dev/null +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/EpgDataPresenter.java @@ -0,0 +1,56 @@ +package com.fongmi.android.tv.ui.presenter; + +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.leanback.widget.Presenter; + +import com.fongmi.android.tv.bean.EpgData; +import com.fongmi.android.tv.databinding.AdapterEpgDataBinding; + +public class EpgDataPresenter extends Presenter { + + private final OnClickListener mListener; + + public EpgDataPresenter(OnClickListener listener) { + this.mListener = listener; + } + + public interface OnClickListener { + + void showUI(); + + void onItemClick(EpgData item); + } + + @Override + public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) { + return new ViewHolder(AdapterEpgDataBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); + } + + @Override + public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object object) { + EpgData item = (EpgData) object; + ViewHolder holder = (ViewHolder) viewHolder; + holder.binding.time.setText(item.getTime()); + holder.binding.title.setText(item.getTitle()); + holder.binding.getRoot().setSelected(item.isInRange()); + holder.binding.getRoot().setLeftListener(mListener::showUI); + setOnClickListener(holder, view -> mListener.onItemClick(item)); + } + + @Override + public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { + } + + public static class ViewHolder extends Presenter.ViewHolder { + + private final AdapterEpgDataBinding binding; + + public ViewHolder(@NonNull AdapterEpgDataBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + } +} \ No newline at end of file diff --git a/app/src/leanback/res/color/chip.xml b/app/src/leanback/res/color/chip.xml deleted file mode 100644 index ba6677dcc..000000000 --- a/app/src/leanback/res/color/chip.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/leanback/res/color/epg.xml b/app/src/leanback/res/color/epg.xml new file mode 100644 index 000000000..311ab2994 --- /dev/null +++ b/app/src/leanback/res/color/epg.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/leanback/res/drawable/selector_epg.xml b/app/src/leanback/res/drawable/selector_epg.xml new file mode 100644 index 000000000..318a7508e --- /dev/null +++ b/app/src/leanback/res/drawable/selector_epg.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/leanback/res/drawable/shape_epg_focused.xml b/app/src/leanback/res/drawable/shape_epg_focused.xml new file mode 100644 index 000000000..baddab9eb --- /dev/null +++ b/app/src/leanback/res/drawable/shape_epg_focused.xml @@ -0,0 +1,11 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/leanback/res/layout/adapter_channel.xml b/app/src/leanback/res/layout/adapter_channel.xml index b3ede8d79..ab1ebae77 100644 --- a/app/src/leanback/res/layout/adapter_channel.xml +++ b/app/src/leanback/res/layout/adapter_channel.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/leanback/res/layout/adapter_epg_data.xml b/app/src/leanback/res/layout/adapter_epg_data.xml new file mode 100644 index 000000000..18c21ac19 --- /dev/null +++ b/app/src/leanback/res/layout/adapter_epg_data.xml @@ -0,0 +1,37 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/leanback/res/layout/view_widget_live.xml b/app/src/leanback/res/layout/view_widget_live.xml index abe717e65..8ceb8cadc 100644 --- a/app/src/leanback/res/layout/view_widget_live.xml +++ b/app/src/leanback/res/layout/view_widget_live.xml @@ -241,4 +241,24 @@ tools:text="16:50" /> + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Epg.java b/app/src/main/java/com/fongmi/android/tv/bean/Epg.java index abc8c53c3..0101ab562 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Epg.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Epg.java @@ -76,6 +76,11 @@ public class Epg { } } + public int getIndex() { + for (int i = 0; i < getList().size(); i++) if (getList().get(i).isInRange()) return i; + return -1; + } + public String getEpg() { for (EpgData item : getList()) if (item.isInRange()) return item.format(); return ""; diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 44626a47c..1e09eaa6f 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -323,7 +323,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List private void setWidth(Epg epg) { int padding = ResUtil.dp2px(40); if (epg.getList().isEmpty()) return; - int minWidth = ResUtil.getTextWidth(epg.getList().get(0).getTime(), 12); + int minWidth = ResUtil.getTextWidth(epg.getList().get(0).getTime(), 14); if (epg.getWidth() == 0) for (EpgData item : epg.getList()) epg.setWidth(Math.max(epg.getWidth(), ResUtil.getTextWidth(item.getTitle(), 14))); mBinding.widget.epgData.getLayoutParams().width = epg.getWidth() == 0 ? 0 : Math.min(Math.max(epg.getWidth(), minWidth) + padding, ResUtil.getScreenWidth() / 3); } @@ -668,6 +668,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List mBinding.widget.line.setVisibility(mChannel.getLineVisible()); mBinding.control.action.line.setText(mBinding.widget.line.getText()); mBinding.control.action.line.setVisibility(mBinding.widget.line.getVisibility()); + hideEpg(); setEpg(); } @@ -708,6 +709,9 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List } private void resetAdapter() { + mBinding.widget.epgData.getLayoutParams().width = 0; + mBinding.channel.getLayoutParams().width = 0; + mBinding.group.getLayoutParams().width = 0; mBinding.divide.setVisibility(View.GONE); mEpgDataAdapter.clear(); mChannelAdapter.clear();