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