Skip to content

Instantly share code, notes, and snippets.

@pfn
Last active February 23, 2016 20:01
Show Gist options
  • Save pfn/4bd40e3dd18a2ccee3bc to your computer and use it in GitHub Desktop.
Save pfn/4bd40e3dd18a2ccee3bc to your computer and use it in GitHub Desktop.
so dense
override def applyState[T](s: FragmentState[T]) = s match {
case OnCreateView(state, inflater, container) => s.applyResult(
l[ScrollView](l[LinearLayout](
IO(generatedPassword) >>= k.text(generate(state)) >>=
k.textAppearance(getActivity, android.R.style.TextAppearance_Medium) >>=
k.gravity(Gravity.CENTER) >>=
k.backgroundColor(getResources.getColor(android.R.color.darker_gray)) >>=
lpK(MATCH_PARENT, 48.dp)(margins(bottom = 16.dp)),
IO(lengthLabel) >>= k.text(getString(R.string.minimum_length, state.length.asInstanceOf[Integer])),
IO(lengthSlider) >>= stdH >>= k.progress(state.length - 8) >>=
hookM.seekBarChange.onProgressChanged((sb: SeekBar, p: Int, user: Boolean) => for {
st <- transformState(_.copy(length = p + 8))
_ <- IO(lengthLabel) >>= k.text(getString(R.string.minimum_length, st.length.asInstanceOf[Integer]))
_ <- IO(uppSlider) >>= k.max(st.length) >>= k.progress(math.min(st.minUpper, math.max(st.length - st.minNum - st.minSym, 0)))
_ <- IO(numSlider) >>= k.max(st.length) >>= k.progress(math.min(st.minNum, math.max(st.length - st.minUpper - st.minSym, 0)))
_ <- IO(symSlider) >>= k.max(st.length) >>= k.progress(math.min(st.minSym, math.max(st.length - st.minUpper - st.minNum, 0)))
} yield ()),
IO(checkbox) >>= stdH >>= k.text("Lowercase (a-z)") >>= k.checked(state.lower) >>=
hookM.checkedChange.onCheckedChanged((v: CompoundButton, b: Boolean) => transformState(_.copy(lower = b))),
IO(checkbox) >>= stdH >>= k.text("Uppercase (A-Z)") >>= k.checked(state.upper) >>=
hookM.checkedChange.onCheckedChanged((v: CompoundButton, b: Boolean) => enable(uppSlider, b, transformState(_.copy(upper = b)))),
IO(minUppLabel) >>= k.text(getString(R.string.minimum_uppercase, state.minUpper.asInstanceOf[Integer])),
IO(uppSlider) >>= stdH >>= k.max(state.length) >>= k.progress(state.minUpper) >>= k.enabled(state.upper) >>=
hookM.seekBarChange.onProgressChanged((sb: SeekBar, p: Int, user: Boolean) => for {
st <- transformState(_.copy(minUpper = p))
_ <- IO(minUppLabel) >>= k.text(getString(R.string.minimum_uppercase, p.asInstanceOf[Integer]))
_ <- IO(numSlider) >>= k.progress(math.min(st.minNum, math.max(st.length - st.minUpper - st.minSym, 0)))
_ <- IO(symSlider) >>= k.progress(math.min(st.minSym, math.max(st.length - st.minUpper - st.minNum, 0)))
} yield ()),
IO(checkbox) >>= stdH >>= k.text("Numbers (0-9)") >>= k.checked(state.num) >>=
hookM.checkedChange.onCheckedChanged((v: CompoundButton, b: Boolean) => enable(numSlider, b, transformState(_.copy(num = b)))),
IO(minNumLabel) >>= k.text(getString(R.string.minimum_numbers, state.minNum.asInstanceOf[Integer])),
IO(numSlider) >>= stdH >>= k.max(state.length) >>= k.progress(state.minNum) >>= k.enabled(state.num) >>=
hookM.seekBarChange.onProgressChanged((sb: SeekBar, p: Int, user: Boolean) => for {
st <- transformState(_.copy(minNum = p))
_ <- IO(minNumLabel) >>= k.text(getString(R.string.minimum_numbers, p.asInstanceOf[Integer]))
_ <- IO(uppSlider) >>= k.progress(math.min(st.minUpper, math.max(st.length - st.minNum - st.minSym, 0)))
_ <- IO(symSlider) >>= k.progress(math.min(st.minSym, math.max(st.length - st.minUpper - st.minNum, 0)))
} yield ()),
IO(checkbox) >>= stdH >>= k.text("Symbols (!@#$%^&*+=?/\\)") >>= k.checked(state.sym) >>=
hookM.checkedChange.onCheckedChanged((v: CompoundButton, b: Boolean) => enable(symSlider, b, transformState(_.copy(sym = b)))),
IO(minSymLabel) >>= k.text(getString(R.string.minimum_symbols, state.minSym.asInstanceOf[Integer])),
IO(symSlider) >>= stdH >>= k.max(state.length) >>= k.progress(state.minSym) >>= k.enabled(state.sym) >>=
hookM.seekBarChange.onProgressChanged((sb: SeekBar, p: Int, user: Boolean) => for {
st <- transformState(_.copy(minSym = p))
_ <- IO(minSymLabel) >>= k.text(getString(R.string.minimum_symbols, p.asInstanceOf[Integer]))
_ <- IO(uppSlider) >>= k.progress(math.min(st.minUpper, math.max(st.length - st.minNum - st.minSym, 0)))
_ <- IO(numSlider) >>= k.progress(math.min(st.minNum, math.max(st.length - st.minUpper - st.minSym, 0)))
} yield ())
) >>= k.orientation(LinearLayout.VERTICAL) >>= padding(all = 16.dp))
)
case SaveState(state, bundle) => s(IO(bundle.putSerializable(MODEL, state)))
// TODO save settings to shared prefs
case TransformState(st,_) => s(IO(generatedPassword) >>= k.text(generate(st)))
case x => defaultApplyState(x)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment