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 97fc94fca..09603d51c 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
@@ -20,6 +20,7 @@ import com.fongmi.android.tv.event.RefreshEvent;
import com.fongmi.android.tv.impl.Callback;
import com.fongmi.android.tv.server.Server;
import com.fongmi.android.tv.ui.base.BaseActivity;
+import com.fongmi.android.tv.ui.fragment.SettingPlayerFragment;
import com.fongmi.android.tv.utils.FileChooser;
import com.fongmi.android.tv.ui.custom.FragmentStateManager;
import com.fongmi.android.tv.ui.fragment.SettingFragment;
@@ -70,7 +71,10 @@ public class MainActivity extends BaseActivity implements NavigationBarView.OnIt
mManager = new FragmentStateManager(mBinding.container, getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
- return position == 0 ? VodFragment.newInstance() : SettingFragment.newInstance();
+ if (position == 0) return VodFragment.newInstance();
+ if (position == 1) return SettingFragment.newInstance();
+ if (position == 2) return SettingPlayerFragment.newInstance();
+ return null;
}
};
if (savedInstanceState == null) mManager.change(0);
@@ -117,6 +121,10 @@ public class MainActivity extends BaseActivity implements NavigationBarView.OnIt
App.post(() -> confirm = false, 2000);
}
+ public void change(int position) {
+ mManager.change(position);
+ }
+
@Override
public void onRefreshEvent(RefreshEvent event) {
super.onRefreshEvent(event);
@@ -142,6 +150,8 @@ public class MainActivity extends BaseActivity implements NavigationBarView.OnIt
public void onBackPressed() {
if (!mBinding.navigation.getMenu().findItem(R.id.vod).isVisible()) {
setNavigation();
+ } else if (mManager.isVisible(2)) {
+ change(1);
} else if (mManager.isVisible(1)) {
mBinding.navigation.setSelectedItemId(R.id.vod);
} else if (mManager.canBack(0)) {
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 91095c11b..fa3643335 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,7 @@
package com.fongmi.android.tv.ui.custom.dialog;
import android.content.DialogInterface;
+import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.inputmethod.EditorInfo;
@@ -58,6 +59,7 @@ public class ConfigDialog {
private void initView() {
binding.text.setText(url = getUrl());
binding.input.setEndIconOnClickListener(this::onChoose);
+ binding.text.setSelection(TextUtils.isEmpty(url) ? 0 : url.length());
}
private void initEvent() {
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/UaDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/UaDialog.java
new file mode 100644
index 000000000..7b729a0c6
--- /dev/null
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/UaDialog.java
@@ -0,0 +1,65 @@
+package com.fongmi.android.tv.ui.custom.dialog;
+
+import android.content.DialogInterface;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.inputmethod.EditorInfo;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.Fragment;
+
+import com.fongmi.android.tv.R;
+import com.fongmi.android.tv.databinding.DialogUaBinding;
+import com.fongmi.android.tv.impl.UaCallback;
+import com.fongmi.android.tv.utils.Prefers;
+import com.google.android.material.dialog.MaterialAlertDialogBuilder;
+
+public class UaDialog {
+
+ private final DialogUaBinding binding;
+ private final UaCallback callback;
+ private AlertDialog dialog;
+
+ public static UaDialog create(Fragment fragment) {
+ return new UaDialog(fragment);
+ }
+
+ public UaDialog(Fragment fragment) {
+ this.callback = (UaCallback) fragment;
+ this.binding = DialogUaBinding.inflate(LayoutInflater.from(fragment.getContext()));
+ }
+
+ public void show() {
+ initDialog();
+ initView();
+ initEvent();
+ }
+
+ private void initDialog() {
+ dialog = new MaterialAlertDialogBuilder(binding.getRoot().getContext()).setTitle(R.string.setting_player_ua).setView(binding.getRoot()).setPositiveButton(R.string.dialog_positive, this::onPositive).setNegativeButton(R.string.dialog_negative, this::onNegative).create();
+ dialog.getWindow().setDimAmount(0);
+ dialog.show();
+ }
+
+ private void initView() {
+ String ua = Prefers.getUa();
+ binding.text.setText(ua);
+ binding.text.setSelection(TextUtils.isEmpty(ua) ? 0 : ua.length());
+ }
+
+ private void initEvent() {
+ binding.text.setOnEditorActionListener((textView, actionId, event) -> {
+ if (actionId == EditorInfo.IME_ACTION_DONE) dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();
+ return true;
+ });
+ }
+
+ private void onPositive(DialogInterface dialog, int which) {
+ callback.setUa(binding.text.getText().toString().trim());
+ dialog.dismiss();
+ }
+
+ private void onNegative(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ }
+}
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java
index 3cb0fa1f8..ebf324aa3 100644
--- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java
@@ -27,6 +27,7 @@ import com.fongmi.android.tv.impl.Callback;
import com.fongmi.android.tv.impl.ConfigCallback;
import com.fongmi.android.tv.impl.LiveCallback;
import com.fongmi.android.tv.impl.SiteCallback;
+import com.fongmi.android.tv.ui.activity.MainActivity;
import com.fongmi.android.tv.ui.base.BaseFragment;
import com.fongmi.android.tv.ui.custom.dialog.ConfigDialog;
import com.fongmi.android.tv.ui.custom.dialog.HistoryDialog;
@@ -70,6 +71,10 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
return list.toArray(new String[0]);
}
+ private MainActivity getRoot() {
+ return (MainActivity) getActivity();
+ }
+
@Override
protected ViewBinding getBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) {
return mBinding = FragmentSettingBinding.inflate(inflater, container, false);
@@ -111,6 +116,7 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
mBinding.vodHistory.setOnClickListener(this::onVodHistory);
mBinding.version.setOnLongClickListener(this::onVersionDev);
mBinding.liveHistory.setOnClickListener(this::onLiveHistory);
+ mBinding.player.setOnLongClickListener(this::onPlayerSetting);
mBinding.wallDefault.setOnClickListener(this::setWallDefault);
mBinding.wallRefresh.setOnClickListener(this::setWallRefresh);
mBinding.player.setOnClickListener(this::setPlayer);
@@ -233,6 +239,11 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
HistoryDialog.create(this).type(type = 1).show();
}
+ private boolean onPlayerSetting(View view) {
+ getRoot().change(2);
+ return true;
+ }
+
private void onVersion(View view) {
Updater.get().force().release().start();
}
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java
new file mode 100644
index 000000000..0b85dca38
--- /dev/null
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java
@@ -0,0 +1,75 @@
+package com.fongmi.android.tv.ui.fragment;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.viewbinding.ViewBinding;
+
+import com.fongmi.android.tv.R;
+import com.fongmi.android.tv.databinding.FragmentSettingPlayerBinding;
+import com.fongmi.android.tv.impl.UaCallback;
+import com.fongmi.android.tv.player.ExoUtil;
+import com.fongmi.android.tv.ui.base.BaseFragment;
+import com.fongmi.android.tv.ui.custom.dialog.UaDialog;
+import com.fongmi.android.tv.utils.Prefers;
+import com.fongmi.android.tv.utils.ResUtil;
+
+public class SettingPlayerFragment extends BaseFragment implements UaCallback {
+
+ private FragmentSettingPlayerBinding mBinding;
+ private String[] http;
+
+ public static SettingPlayerFragment newInstance() {
+ return new SettingPlayerFragment();
+ }
+
+ private String getSwitch(boolean value) {
+ return getString(value ? R.string.setting_on : R.string.setting_off);
+ }
+
+ @Override
+ protected ViewBinding getBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) {
+ return mBinding = FragmentSettingPlayerBinding.inflate(inflater, container, false);
+ }
+
+ @Override
+ protected void initView() {
+ mBinding.uaText.setText(Prefers.getUa());
+ mBinding.tunnelText.setText(getSwitch(Prefers.isTunnel()));
+ mBinding.httpText.setText((http = ResUtil.getStringArray(R.array.select_player_http))[Prefers.getHttp()]);
+ mBinding.tunnel.setVisibility(Prefers.getPlayer() == 0 ? View.VISIBLE : View.GONE);
+ mBinding.http.setVisibility(Prefers.getPlayer() == 0 ? View.VISIBLE : View.GONE);
+ }
+
+ @Override
+ protected void initEvent() {
+ mBinding.ua.setOnClickListener(this::onUa);
+ mBinding.http.setOnClickListener(this::setHttp);
+ mBinding.tunnel.setOnClickListener(this::setTunnel);
+ }
+
+ private void onUa(View view) {
+ UaDialog.create(this).show();
+ }
+
+ private void setHttp(View view) {
+ int index = Prefers.getHttp();
+ Prefers.putHttp(index = index == http.length - 1 ? 0 : ++index);
+ mBinding.httpText.setText(http[index]);
+ ExoUtil.reset();
+ }
+
+ private void setTunnel(View view) {
+ Prefers.putTunnel(!Prefers.isTunnel());
+ mBinding.tunnelText.setText(getSwitch(Prefers.isTunnel()));
+ }
+
+ @Override
+ public void setUa(String ua) {
+ mBinding.uaText.setText(ua);
+ Prefers.putUa(ua);
+ }
+}
diff --git a/app/src/mobile/res/layout/dialog_ua.xml b/app/src/mobile/res/layout/dialog_ua.xml
new file mode 100644
index 000000000..f69ec08f5
--- /dev/null
+++ b/app/src/mobile/res/layout/dialog_ua.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/mobile/res/layout/fragment_setting_player.xml b/app/src/mobile/res/layout/fragment_setting_player.xml
new file mode 100644
index 000000000..f09766097
--- /dev/null
+++ b/app/src/mobile/res/layout/fragment_setting_player.xml
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file