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

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

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

Loading…
Cancel
Save