feat: 优化代码

pull/103/head
kunfei 5 years ago
parent 50ce3412bb
commit e7b9f80011
  1. 132
      app/src/main/java/io/legado/app/ui/widget/prefs/IconListPreference.kt
  2. 5
      app/src/main/res/layout/item_icon_preference.xml
  3. 1
      app/src/main/res/xml/pref_config_theme.xml

@ -85,84 +85,86 @@ class IconListPreference(context: Context, attrs: AttributeSet) : ListPreference
}
return null
}
}
class IconDialog : DialogFragment() {
var onChanged: ((value: String) -> Unit)? = null
var entries: Array<CharSequence>? = null
var entryValues: Array<CharSequence>? = null
var iconNames: Array<CharSequence>? = null
override fun onStart() {
super.onStart()
val dm = DisplayMetrics()
activity?.windowManager?.defaultDisplay?.getMetrics(dm)
dialog?.window?.setLayout(
(dm.widthPixels * 0.9).toInt(),
(dm.heightPixels * 0.9).toInt()
)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.dialog_recycler_view, container)
}
class IconDialog : DialogFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
tool_bar.setTitle(R.string.change_icon)
recycler_view.layoutManager = LinearLayoutManager(requireContext())
val adapter = Adapter(requireContext())
recycler_view.adapter = adapter
arguments?.let {
entries = it.getCharSequenceArray("entries")
entryValues = it.getCharSequenceArray("entryValues")
iconNames = it.getCharSequenceArray("iconNames")
entryValues?.let { values ->
adapter.setItems(values.toList())
var onChanged: ((value: String) -> Unit)? = null
var dialogEntries: Array<CharSequence>? = null
var dialogEntryValues: Array<CharSequence>? = null
var dialogIconNames: Array<CharSequence>? = null
override fun onStart() {
super.onStart()
val dm = DisplayMetrics()
activity?.windowManager?.defaultDisplay?.getMetrics(dm)
dialog?.window?.setLayout(
(dm.widthPixels * 0.8).toInt(),
ViewGroup.LayoutParams.WRAP_CONTENT
)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.dialog_recycler_view, container)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
tool_bar.setTitle(R.string.change_icon)
recycler_view.layoutManager = LinearLayoutManager(requireContext())
val adapter = Adapter(requireContext())
recycler_view.adapter = adapter
arguments?.let {
dialogEntries = it.getCharSequenceArray("entries")
dialogEntryValues = it.getCharSequenceArray("entryValues")
dialogIconNames = it.getCharSequenceArray("iconNames")
dialogEntryValues?.let { values ->
adapter.setItems(values.toList())
}
}
}
}
inner class Adapter(context: Context) :
SimpleRecyclerAdapter<CharSequence>(context, R.layout.item_icon_preference) {
inner class Adapter(context: Context) :
SimpleRecyclerAdapter<CharSequence>(context, R.layout.item_icon_preference) {
override fun convert(
holder: ItemViewHolder,
item: CharSequence,
payloads: MutableList<Any>
) {
with(holder.itemView) {
val index = findIndexOfValue(item.toString())
entries?.let {
label.text = it[index]
}
iconNames?.let {
val resId = context.resources
.getIdentifier(it[index].toString(), "mipmap", context.packageName)
val d = context.getCompatDrawable(resId)
icon.setImageDrawable(d)
}
onClick {
onChanged?.invoke(item.toString())
override fun convert(
holder: ItemViewHolder,
item: CharSequence,
payloads: MutableList<Any>
) {
with(holder.itemView) {
val index = findIndexOfValue(item.toString())
dialogEntries?.let {
label.text = it[index]
}
dialogIconNames?.let {
val resId = context.resources
.getIdentifier(it[index].toString(), "mipmap", context.packageName)
val d = context.getCompatDrawable(resId)
icon.setImageDrawable(d)
}
onClick {
onChanged?.invoke(item.toString())
this@IconDialog.dismiss()
}
}
}
}
private fun findIndexOfValue(value: String?): Int {
entryValues?.let { values ->
for (i in values.indices.reversed()) {
if (values[i] == value) {
return i
private fun findIndexOfValue(value: String?): Int {
dialogEntryValues?.let { values ->
for (i in values.indices.reversed()) {
if (values[i] == value) {
return i
}
}
}
return -1
}
return -1
}
}
}
}

@ -11,13 +11,14 @@
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:contentDescription="ICON"
android:padding="6dip"
android:padding="10dip"
tools:ignore="HardcodedText" />
<CheckedTextView
android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10dp"
android:layout_alignParentEnd="true"
android:layout_toRightOf="@+id/icon"
android:checkMark="?android:attr/listChoiceIndicatorSingle"
@ -28,6 +29,6 @@
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?android:attr/textColorAlertDialogListItem"
android:textIsSelectable="false"
tools:ignore="RtlHardcoded" />
tools:ignore="RtlHardcoded,RtlSymmetry" />
</RelativeLayout>

@ -6,6 +6,7 @@
android:defaultValue="icon_main"
android:key="launcherIcon"
android:title="@string/change_icon"
android:summary="@string/change_icon_summary"
android:entryValues="@array/icons"
android:entries="@array/icon_names"
app:icons="@array/icons"

Loading…
Cancel
Save