diff --git a/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java b/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java
index 75562fc10..7185f2a15 100644
--- a/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java
+++ b/app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java
@@ -63,6 +63,10 @@ public class ApiConfig {
return get().getSite(key).getName();
}
+ public static boolean hasPush() {
+ return get().getSite("push_agent") != null;
+ }
+
public ApiConfig init() {
this.ads = null;
this.wall = null;
diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Utils.java b/app/src/main/java/com/fongmi/android/tv/utils/Utils.java
index f34390c50..5824fd645 100644
--- a/app/src/main/java/com/fongmi/android/tv/utils/Utils.java
+++ b/app/src/main/java/com/fongmi/android/tv/utils/Utils.java
@@ -3,7 +3,6 @@ package com.fongmi.android.tv.utils;
import android.Manifest;
import android.app.Activity;
import android.app.PictureInPictureParams;
-import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.pm.PackageManager;
@@ -166,14 +165,8 @@ public class Utils {
return text;
}
- public static String getClip() {
- ClipboardManager cm = (ClipboardManager) App.get().getSystemService(Context.CLIPBOARD_SERVICE);
- return cm.getText() == null ? "" : cm.getText().toString();
- }
-
- public static void clearClip() {
- ClipboardManager cm = (ClipboardManager) App.get().getSystemService(Context.CLIPBOARD_SERVICE);
- cm.setPrimaryClip(ClipData.newPlainText("", ""));
+ public static CharSequence getClipText() {
+ return ((ClipboardManager) App.get().getSystemService(Context.CLIPBOARD_SERVICE)).getText();
}
public static long format(SimpleDateFormat format, String src) {
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index d2f196118..fe1d4546f 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -74,6 +74,7 @@
确定
取消
请输入接口…
+ 请输入地址…
FFmpeg 加载失败
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index c15178d76..48d03cc5b 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -74,6 +74,7 @@
確定
取消
請輸入接口…
+ 請輸入網址…
FFmpeg 載入失敗
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index cf94a147b..28ea4d372 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -74,6 +74,7 @@
OK
Cancel
Please enter the config…
+ Please enter the url…
Failed to load FFmpeg
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
index 880639922..d3e1e637a 100644
--- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
@@ -88,6 +88,10 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private Runnable mR2;
private Runnable mR3;
+ public static void push(Activity activity, String url) {
+ start(activity, "push_agent", url, url);
+ }
+
public static void start(Activity activity, String id, String name) {
start(activity, ApiConfig.get().getHome().getKey(), id, name);
}
@@ -544,7 +548,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
getIjk().getSubtitleView().setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
mBinding.video.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
- App.post(mR3, 3000);
setFullscreen(true);
hideAll();
}
@@ -554,7 +557,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
getIjk().getSubtitleView().setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
mBinding.video.setLayoutParams(mFrameParams);
- App.post(mR3, 3000);
+ App.post(mR3, 2000);
setFullscreen(false);
hideAll();
}
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java
index 059617015..9be09fb2b 100644
--- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java
@@ -1,7 +1,6 @@
package com.fongmi.android.tv.ui.activity;
import android.content.Intent;
-import android.util.Patterns;
import android.view.MenuItem;
import androidx.annotation.NonNull;
@@ -21,8 +20,6 @@ import com.fongmi.android.tv.server.Server;
import com.fongmi.android.tv.ui.fragment.SettingFragment;
import com.fongmi.android.tv.ui.fragment.VodFragment;
import com.fongmi.android.tv.utils.Notify;
-import com.fongmi.android.tv.utils.Utils;
-import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.navigation.NavigationBarView;
import java.util.ArrayList;
@@ -99,20 +96,8 @@ public class MainActivity extends BaseActivity implements NavigationBarView.OnIt
}
private void checkAction(Intent intent) {
- if (ApiConfig.get().getSite("push_agent") == null) return;
- boolean hasClip = Patterns.WEB_URL.matcher(Utils.getClip()).matches();
- boolean hasAction = intent.getAction() != null && intent.getAction().equals(Intent.ACTION_SEND) && intent.getType().equals("text/plain");
- if (hasAction) DetailActivity.start(this, "push_agent", intent.getStringExtra(Intent.EXTRA_TEXT), "");
- else if (hasClip) showDialog(Utils.getClip());
- }
-
- private void showDialog(String text) {
- new MaterialAlertDialogBuilder(this).setMessage(getString(R.string.home_open_url, text))
- .setNegativeButton(R.string.dialog_negative, (dialog, which) -> Utils.clearClip())
- .setPositiveButton(R.string.dialog_positive, (dialog, which) -> {
- DetailActivity.start(MainActivity.this, "push_agent", text, "");
- Utils.clearClip();
- }).show();
+ boolean push = ApiConfig.hasPush() && intent.getAction() != null && intent.getAction().equals(Intent.ACTION_SEND) && intent.getType().equals("text/plain");
+ if (push) DetailActivity.push(this, intent.getStringExtra(Intent.EXTRA_TEXT));
}
private void setConfirm() {
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/ConfigDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/ConfigDialog.java
index dd7e94626..1d9653353 100644
--- a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/ConfigDialog.java
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/ConfigDialog.java
@@ -1,6 +1,5 @@
package com.fongmi.android.tv.ui.custom.dialog;
-import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.inputmethod.EditorInfo;
@@ -13,16 +12,11 @@ import com.fongmi.android.tv.api.LiveConfig;
import com.fongmi.android.tv.api.WallConfig;
import com.fongmi.android.tv.bean.Config;
import com.fongmi.android.tv.databinding.DialogConfigBinding;
-import com.fongmi.android.tv.event.ServerEvent;
import com.fongmi.android.tv.impl.ConfigCallback;
import com.fongmi.android.tv.utils.Utils;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
-import org.greenrobot.eventbus.EventBus;
-import org.greenrobot.eventbus.Subscribe;
-import org.greenrobot.eventbus.ThreadMode;
-
-public class ConfigDialog implements DialogInterface.OnDismissListener {
+public class ConfigDialog {
private final DialogConfigBinding binding;
private final ConfigCallback callback;
@@ -53,7 +47,6 @@ public class ConfigDialog implements DialogInterface.OnDismissListener {
private void initDialog() {
dialog.getWindow().setDimAmount(0);
- dialog.setOnDismissListener(this);
dialog.show();
}
@@ -63,7 +56,6 @@ public class ConfigDialog implements DialogInterface.OnDismissListener {
}
private void initEvent() {
- EventBus.getDefault().register(this);
binding.positive.setOnClickListener(this::onPositive);
binding.negative.setOnClickListener(this::onNegative);
binding.text.setOnEditorActionListener((textView, actionId, event) -> {
@@ -95,16 +87,4 @@ public class ConfigDialog implements DialogInterface.OnDismissListener {
private void onNegative(View view) {
dialog.dismiss();
}
-
- @Subscribe(threadMode = ThreadMode.MAIN)
- public void onServerEvent(ServerEvent event) {
- if (event.getType() != ServerEvent.Type.API) return;
- binding.text.setText(event.getText());
- binding.text.setSelection(binding.text.getText().length());
- }
-
- @Override
- public void onDismiss(DialogInterface dialogInterface) {
- EventBus.getDefault().unregister(this);
- }
}
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/LinkDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/LinkDialog.java
new file mode 100644
index 000000000..10c00df1a
--- /dev/null
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/LinkDialog.java
@@ -0,0 +1,66 @@
+package com.fongmi.android.tv.ui.custom.dialog;
+
+import android.text.TextUtils;
+import android.util.Patterns;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.inputmethod.EditorInfo;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.Fragment;
+
+import com.fongmi.android.tv.App;
+import com.fongmi.android.tv.databinding.DialogLinkBinding;
+import com.fongmi.android.tv.ui.activity.DetailActivity;
+import com.fongmi.android.tv.utils.Utils;
+import com.google.android.material.dialog.MaterialAlertDialogBuilder;
+
+public class LinkDialog {
+
+ private final DialogLinkBinding binding;
+ private final AlertDialog dialog;
+
+ public static LinkDialog create(Fragment fragment) {
+ return new LinkDialog(fragment);
+ }
+
+ public LinkDialog(Fragment fragment) {
+ this.binding = DialogLinkBinding.inflate(LayoutInflater.from(fragment.getContext()));
+ this.dialog = new MaterialAlertDialogBuilder(fragment.getActivity()).setView(binding.getRoot()).create();
+ }
+
+ public void show() {
+ initDialog();
+ initView();
+ initEvent();
+ }
+
+ private void initDialog() {
+ dialog.getWindow().setDimAmount(0);
+ dialog.show();
+ }
+
+ private void initView() {
+ CharSequence text = Utils.getClipText();
+ if (!TextUtils.isEmpty(text) && Patterns.WEB_URL.matcher(text).matches()) binding.text.setText(text);
+ }
+
+ private void initEvent() {
+ binding.positive.setOnClickListener(this::onPositive);
+ binding.negative.setOnClickListener(this::onNegative);
+ binding.text.setOnEditorActionListener((textView, actionId, event) -> {
+ if (actionId == EditorInfo.IME_ACTION_DONE) binding.positive.performClick();
+ return true;
+ });
+ }
+
+ private void onPositive(View view) {
+ String text = binding.text.getText().toString().trim();
+ if (!text.isEmpty()) DetailActivity.push(App.activity(), text);
+ dialog.dismiss();
+ }
+
+ private void onNegative(View view) {
+ dialog.dismiss();
+ }
+}
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java
index abba330af..eb505d435 100644
--- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java
@@ -26,6 +26,7 @@ import com.fongmi.android.tv.model.SiteViewModel;
import com.fongmi.android.tv.ui.activity.BaseFragment;
import com.fongmi.android.tv.ui.adapter.TypeAdapter;
import com.fongmi.android.tv.ui.custom.dialog.FilterDialog;
+import com.fongmi.android.tv.ui.custom.dialog.LinkDialog;
import com.fongmi.android.tv.ui.custom.dialog.SiteDialog;
import com.fongmi.android.tv.ui.fragment.child.SiteFragment;
import com.fongmi.android.tv.ui.fragment.child.TypeFragment;
@@ -67,6 +68,7 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal
@Override
protected void initEvent() {
+ mBinding.link.setOnClickListener(this::onLink);
mBinding.title.setOnClickListener(this::onTitle);
mBinding.filter.setOnClickListener(this::onFilter);
mBinding.pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@@ -111,8 +113,17 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal
int position = mBinding.pager.getCurrentItem();
if (position == 0) mBinding.filter.setVisibility(View.GONE);
Class type = mTypeAdapter.get(position);
- if (type.getFilter() != null) mBinding.filter.show();
- else mBinding.filter.hide();
+ setFabVisible(type.getFilter() != null);
+ }
+
+ private void setFabVisible(boolean filter) {
+ if (filter) {
+ mBinding.link.hide();
+ mBinding.filter.show();
+ } else {
+ mBinding.filter.hide();
+ mBinding.link.show();
+ }
}
private void onTitle(View view) {
@@ -124,6 +135,11 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal
FilterDialog.create(this).filter(mTypeAdapter.get(mBinding.pager.getCurrentItem()).getFilters()).show(getChildFragmentManager(), null);
}
+ private void onLink(View view) {
+ if (ApiConfig.hasPush()) LinkDialog.create(this).show();
+ else mBinding.link.hide();
+ }
+
@Override
public void setSite(Site item) {
ApiConfig.get().setHome(item);
diff --git a/app/src/mobile/res/drawable/ic_type_filter.xml b/app/src/mobile/res/drawable/ic_filter.xml
similarity index 100%
rename from app/src/mobile/res/drawable/ic_type_filter.xml
rename to app/src/mobile/res/drawable/ic_filter.xml
diff --git a/app/src/mobile/res/drawable/ic_link.xml b/app/src/mobile/res/drawable/ic_link.xml
new file mode 100644
index 000000000..ea91bbaea
--- /dev/null
+++ b/app/src/mobile/res/drawable/ic_link.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/mobile/res/layout/dialog_link.xml b/app/src/mobile/res/layout/dialog_link.xml
new file mode 100644
index 000000000..f52e73a4b
--- /dev/null
+++ b/app/src/mobile/res/layout/dialog_link.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/mobile/res/layout/fragment_vod.xml b/app/src/mobile/res/layout/fragment_vod.xml
index 6b2e41b43..e2831d3a4 100644
--- a/app/src/mobile/res/layout/fragment_vod.xml
+++ b/app/src/mobile/res/layout/fragment_vod.xml
@@ -50,8 +50,20 @@
android:visibility="gone"
app:backgroundTint="@color/blue_500"
app:layout_behavior=".ui.custom.CustomFabBehavior"
- app:srcCompat="@drawable/ic_type_filter"
+ app:srcCompat="@drawable/ic_filter"
app:tint="@color/white"
tools:visibility="visible" />
+
+