diff --git a/app/src/main/java/com/fongmi/android/tv/player/Players.java b/app/src/main/java/com/fongmi/android/tv/player/Players.java index 84d5eb2ca..255c0fb26 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Players.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Players.java @@ -157,7 +157,7 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic } public Map getHeaders() { - return headers; + return checkUa(headers); } public String[] getHeaderArray() { diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Util.java b/app/src/main/java/com/fongmi/android/tv/utils/Util.java index b7a543fc4..36f01ab40 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Util.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/Util.java @@ -1,6 +1,7 @@ package com.fongmi.android.tv.utils; import android.app.Activity; +import android.content.ClipData; import android.content.ClipboardManager; import android.content.ComponentName; import android.content.Context; @@ -61,7 +62,13 @@ public class Util { } public static CharSequence getClipText() { - return ((ClipboardManager) App.get().getSystemService(Context.CLIPBOARD_SERVICE)).getText(); + ClipboardManager manager = (ClipboardManager) App.get().getSystemService(Context.CLIPBOARD_SERVICE); + return manager.getText(); + } + + public static void copy(String text) { + ClipboardManager manager = (ClipboardManager) App.get().getSystemService(Context.CLIPBOARD_SERVICE); + manager.setPrimaryClip(ClipData.newPlainText("", text)); } public static int getDigit(String text) { 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 32b763f7f..db16cb4b7 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 @@ -10,6 +10,7 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.support.v4.media.MediaMetadataCompat; +import android.view.MotionEvent; import android.view.View; import androidx.annotation.Dimension; @@ -54,6 +55,7 @@ import com.fongmi.android.tv.ui.adapter.GroupAdapter; import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.custom.CustomKeyDownLive; import com.fongmi.android.tv.ui.dialog.CastDialog; +import com.fongmi.android.tv.ui.dialog.InfoDialog; import com.fongmi.android.tv.ui.dialog.LiveDialog; import com.fongmi.android.tv.ui.dialog.PassDialog; import com.fongmi.android.tv.ui.dialog.SubtitleDialog; @@ -178,8 +180,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List protected void initEvent() { mBinding.control.seek.setListener(mPlayers); mBinding.control.cast.setOnClickListener(view -> onCast()); - mBinding.control.share.setOnClickListener(view -> onShare()); - mBinding.control.share.setOnLongClickListener(view -> onChoose()); + mBinding.control.info.setOnClickListener(view -> onInfo()); mBinding.control.right.back.setOnClickListener(view -> onBack()); mBinding.control.right.lock.setOnClickListener(view -> onLock()); mBinding.control.right.rotate.setOnClickListener(view -> onRotate()); @@ -196,8 +197,10 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List mBinding.control.action.player.setOnClickListener(view -> onPlayer()); mBinding.control.action.decode.setOnClickListener(view -> onDecode()); mBinding.control.action.text.setOnLongClickListener(view -> onTextLong()); + mBinding.control.action.player.setOnLongClickListener(view -> onChoose()); mBinding.control.action.speed.setOnLongClickListener(view -> onSpeedLong()); mBinding.video.setOnTouchListener((view, event) -> mKeyDown.onTouchEvent(event)); + mBinding.control.action.getRoot().setOnTouchListener(this::onActionTouch); } private void setRecyclerView() { @@ -303,28 +306,11 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List CastDialog.create().video(CastVideo.get(mBinding.control.title.getText().toString(), mPlayers.getUrl())).fm(false).show(this); } - private void onShare() { - Intent intent = new Intent(Intent.ACTION_SEND); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.setType("text/plain"); - intent.putExtra(Intent.EXTRA_TEXT, mPlayers.getUrl()); - intent.putExtra("name", mBinding.control.title.getText()); - intent.putExtra("title", mBinding.control.title.getText()); - startActivity(Util.getChooser(intent)); + private void onInfo() { + InfoDialog.create(this).title(mBinding.control.title.getText()).headers(mPlayers.getHeaders()).url(mPlayers.getUrl()).show(); setRedirect(true); } - private boolean onChoose() { - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.putExtra("headers", mPlayers.getHeaderArray()); - intent.putExtra("title", mBinding.control.title.getText()); - intent.setDataAndType(Uri.parse(mPlayers.getUrl()), "video/*"); - startActivity(Util.getChooser(intent)); - setRedirect(true); - return true; - } - private void onBack() { finish(); } @@ -420,6 +406,22 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List fetch(); } + private boolean onChoose() { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra("headers", mPlayers.getHeaderArray()); + intent.putExtra("title", mBinding.control.title.getText()); + intent.setDataAndType(Uri.parse(mPlayers.getUrl()), "video/*"); + startActivity(Util.getChooser(intent)); + setRedirect(true); + return true; + } + + private boolean onActionTouch(View v, MotionEvent e) { + setR1Callback(); + return false; + } + private void hideUI() { if (isGone(mBinding.recycler)) return; mBinding.recycler.setVisibility(View.GONE); @@ -457,7 +459,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List } private void showControl() { - mBinding.control.share.setVisibility(mPlayers.getUrl() == null ? View.GONE : View.VISIBLE); + mBinding.control.info.setVisibility(mPlayers.getUrl() == null ? View.GONE : View.VISIBLE); mBinding.control.cast.setVisibility(mPlayers.getUrl() == null ? View.GONE : View.VISIBLE); mBinding.control.right.rotate.setVisibility(isLock() ? View.GONE : View.VISIBLE); mBinding.control.right.back.setVisibility(isLock() ? View.GONE : View.VISIBLE); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index b919d990e..fb6aa89ea 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -80,6 +80,7 @@ import com.fongmi.android.tv.ui.dialog.CastDialog; import com.fongmi.android.tv.ui.dialog.ControlDialog; import com.fongmi.android.tv.ui.dialog.EpisodeGridDialog; import com.fongmi.android.tv.ui.dialog.EpisodeListDialog; +import com.fongmi.android.tv.ui.dialog.InfoDialog; import com.fongmi.android.tv.ui.dialog.TrackDialog; import com.fongmi.android.tv.utils.Clock; import com.fongmi.android.tv.utils.FileChooser; @@ -331,15 +332,14 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo mBinding.reverse.setOnClickListener(view -> onReverse()); mBinding.name.setOnLongClickListener(view -> onChange()); mBinding.control.cast.setOnClickListener(view -> onCast()); + mBinding.control.info.setOnClickListener(view -> onInfo()); mBinding.control.full.setOnClickListener(view -> onFull()); mBinding.control.keep.setOnClickListener(view -> onKeep()); - mBinding.control.share.setOnClickListener(view -> onShare()); mBinding.control.danmu.setOnClickListener(view -> onDanmu()); mBinding.control.play.setOnClickListener(view -> checkPlay()); mBinding.control.next.setOnClickListener(view -> checkNext()); mBinding.control.prev.setOnClickListener(view -> checkPrev()); mBinding.control.setting.setOnClickListener(view -> onSetting()); - mBinding.control.share.setOnLongClickListener(view -> onChoose()); mBinding.control.title.setOnLongClickListener(view -> onChange()); mBinding.control.right.back.setOnClickListener(view -> onFull()); mBinding.control.right.lock.setOnClickListener(view -> onLock()); @@ -356,6 +356,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo mBinding.control.action.ending.setOnClickListener(view -> onEnding()); mBinding.control.action.opening.setOnClickListener(view -> onOpening()); mBinding.control.action.episodes.setOnClickListener(view -> onEpisodes()); + mBinding.control.action.player.setOnLongClickListener(view -> onChoose()); mBinding.control.action.speed.setOnLongClickListener(view -> onSpeedLong()); mBinding.control.action.reset.setOnLongClickListener(view -> onResetToggle()); mBinding.control.action.ending.setOnLongClickListener(view -> onEndingReset()); @@ -697,6 +698,11 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo CastDialog.create().history(mHistory).video(CastVideo.get(mBinding.name.getText().toString(), mPlayers.getUrl())).fm(true).show(this); } + private void onInfo() { + InfoDialog.create(this).title(mBinding.control.title.getText()).headers(mPlayers.getHeaders()).url(mPlayers.getUrl()).show(); + setRedirect(true); + } + private void onFull() { setR1Callback(); toggleFullscreen(); @@ -711,30 +717,6 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo checkKeepImg(); } - private void onShare() { - Intent intent = new Intent(Intent.ACTION_SEND); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.setType("text/plain"); - intent.putExtra(Intent.EXTRA_TEXT, mPlayers.getUrl()); - intent.putExtra("name", mBinding.control.title.getText()); - intent.putExtra("title", mBinding.control.title.getText()); - startActivity(Util.getChooser(intent)); - setRedirect(true); - } - - private boolean onChoose() { - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.putExtra("return_result", true); - intent.putExtra("headers", mPlayers.getHeaderArray()); - intent.putExtra("position", (int) mPlayers.getPosition()); - intent.putExtra("title", mBinding.control.title.getText()); - intent.setDataAndType(Uri.parse(mPlayers.getUrl()), "video/*"); - startActivityForResult(Util.getChooser(intent), 1001); - setRedirect(true); - return true; - } - private void onDanmu() { Setting.putDanmu(!Setting.isDanmu()); checkDanmuImg(); @@ -896,6 +878,19 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo mDialogs.add(EpisodeListDialog.create(this).episodes(mEpisodeAdapter.getItems()).show()); } + private boolean onChoose() { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra("return_result", true); + intent.putExtra("headers", mPlayers.getHeaderArray()); + intent.putExtra("position", (int) mPlayers.getPosition()); + intent.putExtra("title", mBinding.control.title.getText()); + intent.setDataAndType(Uri.parse(mPlayers.getUrl()), "video/*"); + startActivityForResult(Util.getChooser(intent), 1001); + setRedirect(true); + return true; + } + private boolean onActionTouch(View v, MotionEvent e) { setR1Callback(); return false; @@ -986,7 +981,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo mBinding.control.right.back.setVisibility(isFullscreen() && !isLock() ? View.VISIBLE : View.GONE); mBinding.control.parse.setVisibility(isFullscreen() && isUseParse() ? View.VISIBLE : View.GONE); mBinding.control.action.getRoot().setVisibility(isFullscreen() ? View.VISIBLE : View.GONE); - mBinding.control.share.setVisibility(mPlayers.getUrl() == null ? View.GONE : View.VISIBLE); + mBinding.control.info.setVisibility(mPlayers.getUrl() == null ? View.GONE : View.VISIBLE); mBinding.control.cast.setVisibility(mPlayers.getUrl() == null ? View.GONE : View.VISIBLE); mBinding.control.right.lock.setVisibility(isFullscreen() ? View.VISIBLE : View.GONE); mBinding.control.center.setVisibility(isLock() ? View.GONE : View.VISIBLE); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java new file mode 100644 index 000000000..2bc1bafc5 --- /dev/null +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java @@ -0,0 +1,87 @@ +package com.fongmi.android.tv.ui.dialog; + +import android.app.Activity; +import android.content.Intent; +import android.view.LayoutInflater; +import android.view.View; + +import androidx.appcompat.app.AlertDialog; + +import com.fongmi.android.tv.R; +import com.fongmi.android.tv.databinding.DialogInfoBinding; +import com.fongmi.android.tv.utils.Notify; +import com.fongmi.android.tv.utils.Util; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +import java.util.Map; + +public class InfoDialog { + + private final DialogInfoBinding binding; + private final Activity activity; + private AlertDialog dialog; + private CharSequence title; + private String header; + private String url; + + public static InfoDialog create(Activity activity) { + return new InfoDialog(activity); + } + + public InfoDialog(Activity activity) { + this.binding = DialogInfoBinding.inflate(LayoutInflater.from(this.activity = activity)); + } + + public InfoDialog title(CharSequence title) { + this.title = title; + return this; + } + + public InfoDialog headers(Map headers) { + StringBuilder sb = new StringBuilder(); + for (String key : headers.keySet()) sb.append(key).append(" : ").append(headers.get(key)).append("\n"); + this.header = Util.substring(sb.toString()); + return this; + } + + public InfoDialog url(String url) { + this.url = url; + return this; + } + + public void show() { + initDialog(); + initView(); + } + + private void initDialog() { + dialog = new MaterialAlertDialogBuilder(binding.getRoot().getContext()).setView(binding.getRoot()).create(); + dialog.getWindow().setDimAmount(0); + dialog.show(); + } + + private void initView() { + binding.url.setText(url); + binding.title.setText(title); + binding.header.setText(header); + binding.url.setOnClickListener(this::onShare); + binding.url.setOnLongClickListener(this::onCopy); + } + + private void onShare(View view) { + Intent intent = new Intent(Intent.ACTION_SEND); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra(Intent.EXTRA_TEXT, url); + intent.putExtra("name", title); + intent.putExtra("title", title); + intent.setType("text/plain"); + activity.startActivity(Util.getChooser(intent)); + dialog.dismiss(); + } + + private boolean onCopy(View view) { + Notify.show(R.string.copied); + Util.copy(url); + return true; + } +} diff --git a/app/src/mobile/res/drawable/ic_control_info.xml b/app/src/mobile/res/drawable/ic_control_info.xml new file mode 100644 index 000000000..b08088ea0 --- /dev/null +++ b/app/src/mobile/res/drawable/ic_control_info.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/mobile/res/drawable/ic_control_share.xml b/app/src/mobile/res/drawable/ic_control_share.xml deleted file mode 100644 index 67a8ee494..000000000 --- a/app/src/mobile/res/drawable/ic_control_share.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/mobile/res/layout/dialog_info.xml b/app/src/mobile/res/layout/dialog_info.xml new file mode 100644 index 000000000..8d64ae723 --- /dev/null +++ b/app/src/mobile/res/layout/dialog_info.xml @@ -0,0 +1,39 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/mobile/res/layout/view_control_live.xml b/app/src/mobile/res/layout/view_control_live.xml index e036a2a38..7011d89df 100644 --- a/app/src/mobile/res/layout/view_control_live.xml +++ b/app/src/mobile/res/layout/view_control_live.xml @@ -56,12 +56,12 @@ android:src="@drawable/ic_control_cast" /> + android:src="@drawable/ic_control_info" /> diff --git a/app/src/mobile/res/layout/view_control_vod.xml b/app/src/mobile/res/layout/view_control_vod.xml index 203f4b1a4..2023a230a 100644 --- a/app/src/mobile/res/layout/view_control_vod.xml +++ b/app/src/mobile/res/layout/view_control_vod.xml @@ -57,12 +57,12 @@ android:src="@drawable/ic_control_cast" /> + android:src="@drawable/ic_control_info" /> 收藏纪录将会全部删除。 观看纪录将会全部删除。 + + 已复制 + 关闭 开启 diff --git a/app/src/mobile/res/values-zh-rTW/strings.xml b/app/src/mobile/res/values-zh-rTW/strings.xml index e3c2154bb..e3f335086 100644 --- a/app/src/mobile/res/values-zh-rTW/strings.xml +++ b/app/src/mobile/res/values-zh-rTW/strings.xml @@ -35,6 +35,9 @@ 收藏紀錄將會全部刪除。 觀看紀錄將會全部刪除。 + + 已複製 + 關閉 開啟 diff --git a/app/src/mobile/res/values/strings.xml b/app/src/mobile/res/values/strings.xml index 2c29f39a5..dd5eead3e 100644 --- a/app/src/mobile/res/values/strings.xml +++ b/app/src/mobile/res/values/strings.xml @@ -35,6 +35,9 @@ All keep records will be removed. All history records will be removed. + + Copied + Off On