parent
aa052a8816
commit
c5759ba251
@ -1,32 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||||
<project version="4"> |
|
||||||
<component name="WizardSettings"> |
|
||||||
<option name="children"> |
|
||||||
<map> |
|
||||||
<entry key="vectorWizard"> |
|
||||||
<value> |
|
||||||
<PersistentState> |
|
||||||
<option name="children"> |
|
||||||
<map> |
|
||||||
<entry key="vectorAssetStep"> |
|
||||||
<value> |
|
||||||
<PersistentState> |
|
||||||
<option name="values"> |
|
||||||
<map> |
|
||||||
<entry key="assetSourceType" value="FILE" /> |
|
||||||
<entry key="outputName" value="ic_info" /> |
|
||||||
<entry key="sourceFile" value="F:\SVG图标\info.svg" /> |
|
||||||
</map> |
|
||||||
</option> |
|
||||||
</PersistentState> |
|
||||||
</value> |
|
||||||
</entry> |
|
||||||
</map> |
|
||||||
</option> |
|
||||||
</PersistentState> |
|
||||||
</value> |
|
||||||
</entry> |
|
||||||
</map> |
|
||||||
</option> |
|
||||||
</component> |
|
||||||
</project> |
|
@ -1,3 +0,0 @@ |
|||||||
<component name="ProjectDictionaryState"> |
|
||||||
<dictionary name="fengyue" /> |
|
||||||
</component> |
|
@ -1,36 +0,0 @@ |
|||||||
<component name="InspectionProjectProfileManager"> |
|
||||||
<profile version="1.0"> |
|
||||||
<option name="myName" value="Project Default" /> |
|
||||||
<inspection_tool class="JavaDoc" enabled="true" level="WARNING" enabled_by_default="true"> |
|
||||||
<option name="TOP_LEVEL_CLASS_OPTIONS"> |
|
||||||
<value> |
|
||||||
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" /> |
|
||||||
<option name="REQUIRED_TAGS" value="" /> |
|
||||||
</value> |
|
||||||
</option> |
|
||||||
<option name="INNER_CLASS_OPTIONS"> |
|
||||||
<value> |
|
||||||
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" /> |
|
||||||
<option name="REQUIRED_TAGS" value="" /> |
|
||||||
</value> |
|
||||||
</option> |
|
||||||
<option name="METHOD_OPTIONS"> |
|
||||||
<value> |
|
||||||
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" /> |
|
||||||
<option name="REQUIRED_TAGS" value="@return@param@throws or @exception" /> |
|
||||||
</value> |
|
||||||
</option> |
|
||||||
<option name="FIELD_OPTIONS"> |
|
||||||
<value> |
|
||||||
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" /> |
|
||||||
<option name="REQUIRED_TAGS" value="" /> |
|
||||||
</value> |
|
||||||
</option> |
|
||||||
<option name="IGNORE_DEPRECATED" value="false" /> |
|
||||||
<option name="IGNORE_JAVADOC_PERIOD" value="true" /> |
|
||||||
<option name="IGNORE_DUPLICATED_THROWS" value="false" /> |
|
||||||
<option name="IGNORE_POINT_TO_ITSELF" value="false" /> |
|
||||||
<option name="myAdditionalJavadocTags" value="date" /> |
|
||||||
</inspection_tool> |
|
||||||
</profile> |
|
||||||
</component> |
|
@ -0,0 +1,189 @@ |
|||||||
|
package xyz.fycz.myreader.ui.fragment |
||||||
|
|
||||||
|
import android.content.DialogInterface |
||||||
|
import android.os.Bundle |
||||||
|
import android.view.LayoutInflater |
||||||
|
import android.view.View |
||||||
|
import android.view.ViewGroup |
||||||
|
import android.widget.NumberPicker |
||||||
|
import androidx.appcompat.app.AlertDialog |
||||||
|
import com.kongzue.dialogx.dialogs.BottomMenu |
||||||
|
import io.reactivex.disposables.Disposable |
||||||
|
import xyz.fycz.myreader.R |
||||||
|
import xyz.fycz.myreader.application.SysManager |
||||||
|
import xyz.fycz.myreader.base.BaseFragment |
||||||
|
import xyz.fycz.myreader.base.adapter2.onClick |
||||||
|
import xyz.fycz.myreader.base.observer.MySingleObserver |
||||||
|
import xyz.fycz.myreader.databinding.FragmentProxySettingBinding |
||||||
|
import xyz.fycz.myreader.model.sourceAnalyzer.BookSourceManager |
||||||
|
import xyz.fycz.myreader.ui.dialog.DialogCreator.OnMultiDialogListener |
||||||
|
import xyz.fycz.myreader.ui.dialog.MultiChoiceDialog |
||||||
|
import xyz.fycz.myreader.ui.dialog.MyAlertDialog |
||||||
|
import xyz.fycz.myreader.util.SharedPreUtils |
||||||
|
import xyz.fycz.myreader.util.ToastUtils |
||||||
|
|
||||||
|
/** |
||||||
|
* @author fengyue |
||||||
|
* @date 2022/3/24 10:42 |
||||||
|
*/ |
||||||
|
class ProxyFragment : BaseFragment() { |
||||||
|
|
||||||
|
private lateinit var binding: FragmentProxySettingBinding |
||||||
|
private var proxyType: Int = 0 |
||||||
|
private var enableProxy: Boolean = false |
||||||
|
private lateinit var proxyHost: String |
||||||
|
private lateinit var proxyPort: String |
||||||
|
private lateinit var proxyUsername: String |
||||||
|
private lateinit var proxyPassword: String |
||||||
|
private var mNoProxySourcesDia: AlertDialog? = null |
||||||
|
private val proxyTypeArr = arrayOf("http", "socks5") |
||||||
|
private val spu: SharedPreUtils = SharedPreUtils.getInstance() |
||||||
|
|
||||||
|
override fun bindView(inflater: LayoutInflater, container: ViewGroup?): View { |
||||||
|
binding = FragmentProxySettingBinding.inflate(inflater, container, false) |
||||||
|
return binding.root |
||||||
|
} |
||||||
|
|
||||||
|
override fun initData(savedInstanceState: Bundle?) { |
||||||
|
enableProxy = spu.getBoolean("enableProxy") |
||||||
|
proxyType = spu.getInt("proxyType") |
||||||
|
proxyHost = spu.getString("proxyHost") |
||||||
|
proxyPort = spu.getString("proxyHost") |
||||||
|
proxyUsername = spu.getString("proxyUsername") |
||||||
|
proxyPassword = spu.getString("proxyPassword") |
||||||
|
} |
||||||
|
|
||||||
|
override fun initWidget(savedInstanceState: Bundle?) { |
||||||
|
binding.scEnableProxy.isChecked = enableProxy |
||||||
|
if (enableProxy) binding.llContent.visibility = View.VISIBLE |
||||||
|
binding.tvProxyType.text = proxyTypeArr[proxyType] |
||||||
|
binding.tvProxyHost.text = proxyHost.ifEmpty { "请输入代理服务器地址" } |
||||||
|
binding.tvProxyPort.text = proxyHost.ifEmpty { "请输入代理服务器端口" } |
||||||
|
binding.tvProxyUsername.text = proxyHost.ifEmpty { "请输入代理认证用户名" } |
||||||
|
binding.tvProxyPassword.text = proxyHost.ifEmpty { "请输入代理认证密码" } |
||||||
|
} |
||||||
|
|
||||||
|
override fun initClick() { |
||||||
|
binding.rlEnableProxy.onClick { |
||||||
|
enableProxy = !enableProxy |
||||||
|
binding.scEnableProxy.isChecked = enableProxy |
||||||
|
spu.putBoolean("enableProxy", enableProxy) |
||||||
|
binding.llContent.visibility = if (enableProxy) View.VISIBLE else View.GONE |
||||||
|
} |
||||||
|
|
||||||
|
binding.llProxyType.onClick { |
||||||
|
BottomMenu.show(getString(R.string.proxy_type), proxyTypeArr) |
||||||
|
.setSelection(proxyType) |
||||||
|
.setOnMenuItemClickListener { _: BottomMenu?, _: CharSequence?, which: Int -> |
||||||
|
proxyType = which |
||||||
|
SharedPreUtils.getInstance().putInt("proxyType", which) |
||||||
|
binding.tvProxyType.text = proxyTypeArr[which] |
||||||
|
false |
||||||
|
}.setCancelButton(R.string.cancel) |
||||||
|
} |
||||||
|
binding.llProxyHost.onClick { |
||||||
|
var tem = "" |
||||||
|
MyAlertDialog.createInputDia( |
||||||
|
context, getString(R.string.proxy_host), |
||||||
|
"", proxyHost, true, 100, |
||||||
|
{ text: String -> tem = text } |
||||||
|
) { dialog: DialogInterface, _: Int -> |
||||||
|
proxyHost = tem |
||||||
|
binding.tvProxyHost.text = proxyHost |
||||||
|
spu.putString("proxyHost", proxyHost) |
||||||
|
dialog.dismiss() |
||||||
|
} |
||||||
|
} |
||||||
|
binding.llProxyPort.onClick { |
||||||
|
val view = |
||||||
|
LayoutInflater.from(context).inflate(R.layout.dialog_number_picker, null) |
||||||
|
val threadPick = view.findViewById<NumberPicker>(R.id.number_picker) |
||||||
|
threadPick.maxValue = 99999 |
||||||
|
threadPick.minValue = 10 |
||||||
|
threadPick.value = proxyPort.toInt() |
||||||
|
threadPick.setOnScrollListener { _: NumberPicker?, _: Int -> } |
||||||
|
MyAlertDialog.build(context) |
||||||
|
.setTitle(R.string.proxy_port) |
||||||
|
.setView(view) |
||||||
|
.setPositiveButton(R.string.confirm) { _: DialogInterface?, _: Int -> |
||||||
|
proxyPort = threadPick.value.toString() |
||||||
|
spu.putString("proxyPort", proxyPort) |
||||||
|
binding.tvProxyPort.text = proxyPort |
||||||
|
}.setNegativeButton(R.string.cancel, null) |
||||||
|
.show() |
||||||
|
} |
||||||
|
binding.llProxyUsername.onClick { |
||||||
|
var tem = "" |
||||||
|
MyAlertDialog.createInputDia( |
||||||
|
context, getString(R.string.proxy_username), |
||||||
|
"", proxyUsername, true, 100, |
||||||
|
{ text: String -> tem = text } |
||||||
|
) { dialog: DialogInterface, _: Int -> |
||||||
|
proxyUsername = tem |
||||||
|
binding.tvProxyUsername.text = proxyUsername |
||||||
|
spu.putString("proxyUsername", proxyUsername) |
||||||
|
dialog.dismiss() |
||||||
|
} |
||||||
|
} |
||||||
|
binding.llProxyPassword.onClick { |
||||||
|
var tem = "" |
||||||
|
MyAlertDialog.createInputDia( |
||||||
|
context, getString(R.string.proxy_password), |
||||||
|
"", proxyPassword, true, 100, |
||||||
|
{ text: String -> tem = text } |
||||||
|
) { dialog: DialogInterface, _: Int -> |
||||||
|
proxyPassword = tem |
||||||
|
binding.tvProxyPassword.text = proxyPassword |
||||||
|
spu.putString("proxyPassword", proxyPassword) |
||||||
|
dialog.dismiss() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
binding.llNoProxySources.onClick { |
||||||
|
if (mNoProxySourcesDia != null) { |
||||||
|
mNoProxySourcesDia?.show() |
||||||
|
return@onClick |
||||||
|
} |
||||||
|
val sources = BookSourceManager.getAllBookSourceByOrderNum() |
||||||
|
val mSourcesName = arrayOfNulls<CharSequence>(sources.size) |
||||||
|
val isNoProxy = BooleanArray(sources.size) |
||||||
|
var dSourceCount = 0 |
||||||
|
for ((i, source) in sources.withIndex()) { |
||||||
|
mSourcesName[i] = source.sourceName |
||||||
|
val noProxy = source.getNoProxy() |
||||||
|
if (noProxy) dSourceCount++ |
||||||
|
isNoProxy[i] = noProxy |
||||||
|
} |
||||||
|
mNoProxySourcesDia = MultiChoiceDialog().create(context, getString(R.string.no_proxy_sources_tip), |
||||||
|
mSourcesName, isNoProxy, dSourceCount, |
||||||
|
{ _: DialogInterface?, _: Int -> |
||||||
|
BookSourceManager.saveDatas(sources) |
||||||
|
.subscribe(object : MySingleObserver<Boolean?>() { |
||||||
|
override fun onSubscribe(d: Disposable) { |
||||||
|
addDisposable(d) |
||||||
|
} |
||||||
|
|
||||||
|
override fun onSuccess(aBoolean: Boolean) { |
||||||
|
if (aBoolean) { |
||||||
|
ToastUtils.showSuccess("保存成功") |
||||||
|
} |
||||||
|
} |
||||||
|
}) |
||||||
|
}, null, object : OnMultiDialogListener { |
||||||
|
override fun onItemClick( |
||||||
|
dialog: DialogInterface, |
||||||
|
which: Int, |
||||||
|
isChecked: Boolean |
||||||
|
) { |
||||||
|
sources[which].setNoProxy(isChecked) |
||||||
|
} |
||||||
|
|
||||||
|
override fun onSelectAll(isSelectAll: Boolean) { |
||||||
|
for (source in sources) { |
||||||
|
source.setNoProxy(isSelectAll) |
||||||
|
} |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,203 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
|
xmlns:tools="http://schemas.android.com/tools" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="match_parent" |
||||||
|
android:orientation="vertical"> |
||||||
|
|
||||||
|
<RelativeLayout |
||||||
|
android:id="@+id/rl_enable_proxy" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="50dp" |
||||||
|
android:background="@drawable/selector_common_bg" |
||||||
|
android:gravity="center" |
||||||
|
android:paddingLeft="20dp" |
||||||
|
android:paddingRight="20dp"> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:layout_centerVertical="true" |
||||||
|
android:text="@string/enable_proxy" |
||||||
|
android:textColor="@color/textSecondary" |
||||||
|
android:textSize="@dimen/text_normal_size" /> |
||||||
|
|
||||||
|
<androidx.appcompat.widget.SwitchCompat |
||||||
|
android:id="@+id/sc_enable_proxy" |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:layout_alignParentEnd="true" |
||||||
|
android:layout_centerVertical="true" |
||||||
|
android:clickable="false" |
||||||
|
android:longClickable="false" /> |
||||||
|
</RelativeLayout> |
||||||
|
|
||||||
|
<View |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="15dp" /> |
||||||
|
|
||||||
|
<LinearLayout |
||||||
|
android:id="@+id/ll_content" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="match_parent" |
||||||
|
android:orientation="vertical" |
||||||
|
android:visibility="gone"> |
||||||
|
|
||||||
|
|
||||||
|
<LinearLayout |
||||||
|
android:id="@+id/ll_proxy_type" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="60dp" |
||||||
|
android:background="@drawable/selector_common_bg" |
||||||
|
android:orientation="vertical" |
||||||
|
android:paddingLeft="20dp" |
||||||
|
android:paddingTop="8dp" |
||||||
|
android:paddingRight="20dp"> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:text="@string/proxy_type" |
||||||
|
android:textColor="@color/textSecondary" |
||||||
|
android:textSize="@dimen/text_normal_size" /> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:id="@+id/tv_proxy_type" |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:paddingTop="5dp" |
||||||
|
android:textColor="@color/textAssist" |
||||||
|
tools:text="socks5" /> |
||||||
|
</LinearLayout> |
||||||
|
|
||||||
|
<LinearLayout |
||||||
|
android:id="@+id/ll_proxy_host" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="60dp" |
||||||
|
android:background="@drawable/selector_common_bg" |
||||||
|
android:orientation="vertical" |
||||||
|
android:paddingLeft="20dp" |
||||||
|
android:paddingTop="8dp" |
||||||
|
android:paddingRight="20dp"> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:text="@string/proxy_host" |
||||||
|
android:textColor="@color/textSecondary" |
||||||
|
android:textSize="@dimen/text_normal_size" /> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:id="@+id/tv_proxy_host" |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:paddingTop="5dp" |
||||||
|
android:textColor="@color/textAssist" |
||||||
|
tools:text="127.0.0.1" /> |
||||||
|
</LinearLayout> |
||||||
|
|
||||||
|
<LinearLayout |
||||||
|
android:id="@+id/ll_proxy_port" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="60dp" |
||||||
|
android:background="@drawable/selector_common_bg" |
||||||
|
android:orientation="vertical" |
||||||
|
android:paddingLeft="20dp" |
||||||
|
android:paddingTop="8dp" |
||||||
|
android:paddingRight="20dp"> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:text="@string/proxy_port" |
||||||
|
android:textColor="@color/textSecondary" |
||||||
|
android:textSize="@dimen/text_normal_size" /> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:id="@+id/tv_proxy_port" |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:paddingTop="5dp" |
||||||
|
android:textColor="@color/textAssist" |
||||||
|
tools:text="1080" /> |
||||||
|
</LinearLayout> |
||||||
|
|
||||||
|
<LinearLayout |
||||||
|
android:id="@+id/ll_proxy_username" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="60dp" |
||||||
|
android:background="@drawable/selector_common_bg" |
||||||
|
android:orientation="vertical" |
||||||
|
android:paddingLeft="20dp" |
||||||
|
android:paddingTop="8dp" |
||||||
|
android:paddingRight="20dp"> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:text="@string/proxy_username" |
||||||
|
android:textColor="@color/textSecondary" |
||||||
|
android:textSize="@dimen/text_normal_size" /> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:id="@+id/tv_proxy_username" |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:paddingTop="5dp" |
||||||
|
android:textColor="@color/textAssist" |
||||||
|
tools:text="输入你的代理认证用户名" /> |
||||||
|
</LinearLayout> |
||||||
|
|
||||||
|
<LinearLayout |
||||||
|
android:id="@+id/ll_proxy_password" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="60dp" |
||||||
|
android:background="@drawable/selector_common_bg" |
||||||
|
android:orientation="vertical" |
||||||
|
android:paddingLeft="20dp" |
||||||
|
android:paddingTop="8dp" |
||||||
|
android:paddingRight="20dp"> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:text="@string/proxy_password" |
||||||
|
android:textColor="@color/textSecondary" |
||||||
|
android:textSize="@dimen/text_normal_size" /> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:id="@+id/tv_proxy_password" |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:paddingTop="5dp" |
||||||
|
android:textColor="@color/textAssist" |
||||||
|
tools:text="输入你的代理认证密码" /> |
||||||
|
</LinearLayout> |
||||||
|
|
||||||
|
<LinearLayout |
||||||
|
android:id="@+id/ll_no_proxy_sources" |
||||||
|
android:layout_width="match_parent" |
||||||
|
android:layout_height="60dp" |
||||||
|
android:background="@drawable/selector_common_bg" |
||||||
|
android:orientation="vertical" |
||||||
|
android:paddingLeft="20dp" |
||||||
|
android:paddingTop="8dp" |
||||||
|
android:paddingRight="20dp"> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:text="@string/no_proxy_sources" |
||||||
|
android:textColor="@color/textSecondary" |
||||||
|
android:textSize="@dimen/text_normal_size" /> |
||||||
|
|
||||||
|
<TextView |
||||||
|
android:layout_width="wrap_content" |
||||||
|
android:layout_height="wrap_content" |
||||||
|
android:paddingTop="5dp" |
||||||
|
android:text="@string/no_proxy_sources_tip" |
||||||
|
android:textColor="@color/textAssist" /> |
||||||
|
</LinearLayout> |
||||||
|
</LinearLayout> |
||||||
|
|
||||||
|
</LinearLayout> |
Loading…
Reference in new issue