1+ package io.matthewnelson.sampleapp.ui.fragments.settings.tor
2+
3+ import android.os.Bundle
4+ import android.view.LayoutInflater
5+ import android.view.View
6+ import android.view.ViewGroup
7+ import android.widget.Button
8+ import android.widget.LinearLayout
9+ import androidx.activity.OnBackPressedCallback
10+ import androidx.constraintlayout.widget.ConstraintLayout
11+ import androidx.core.view.marginBottom
12+ import androidx.core.view.marginEnd
13+ import androidx.core.view.marginStart
14+ import androidx.core.view.marginTop
15+ import androidx.fragment.app.Fragment
16+ import io.matthewnelson.sampleapp.R
17+ import io.matthewnelson.topl_service.service.components.onionproxy.ServiceTorSettings
18+
19+
20+ class IsolationFlagsFragment (
21+ private val bottomMarginAdjust : Int ,
22+ private val flagType : String ,
23+ private val serviceTorSettings : ServiceTorSettings
24+ ) : Fragment() {
25+
26+ companion object {
27+ const val SOCKS_FLAGS = " SOCKS_FLAGS"
28+ }
29+
30+ private val backPressHandler = BackPressHandler (true )
31+
32+ private lateinit var layoutTop: LinearLayout
33+ private lateinit var layoutBottom: LinearLayout
34+ private lateinit var layoutEnd: LinearLayout
35+ private lateinit var layoutStart: LinearLayout
36+ private lateinit var layoutConstraintInner: ConstraintLayout
37+
38+ override fun onCreateView (
39+ inflater : LayoutInflater ,
40+ container : ViewGroup ? ,
41+ savedInstanceState : Bundle ?
42+ ): View ? {
43+ activity?.apply {
44+ onBackPressedDispatcher.addCallback(viewLifecycleOwner, backPressHandler)
45+ }
46+ return inflater.inflate(R .layout.fragment_isolation_flags, container, false )
47+ }
48+
49+ override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
50+ super .onViewCreated(view, savedInstanceState)
51+ findViews(view)
52+ setMargins()
53+ setClickListeners()
54+ enableParentViews(false )
55+ }
56+
57+ override fun onDestroyView () {
58+ enableParentViews(true )
59+ super .onDestroyView()
60+ }
61+
62+ private fun findViews (view : View ) {
63+ layoutTop = view.findViewById(R .id.isolation_flags_space_top)
64+ layoutBottom = view.findViewById(R .id.isolation_flags_layout_bottom)
65+ layoutEnd = view.findViewById(R .id.isolation_flags_layout_end)
66+ layoutStart = view.findViewById(R .id.isolation_flags_layout_start)
67+ layoutConstraintInner = view.findViewById(R .id.isolation_flags_layout_constraint_inner)
68+ }
69+
70+ private fun setMargins () {
71+ val marginSize = layoutConstraintInner.marginTop
72+
73+ val layoutParams = layoutConstraintInner.layoutParams as ConstraintLayout .LayoutParams
74+ layoutParams.apply {
75+ this .setMargins(marginSize, marginSize, marginSize, marginSize + bottomMarginAdjust)
76+ }
77+ }
78+
79+ private fun setClickListeners () {
80+ layoutTop.setOnClickListener {
81+ removeFragment()
82+ }
83+ layoutBottom.setOnClickListener {
84+ removeFragment()
85+ }
86+ layoutEnd.setOnClickListener {
87+ removeFragment()
88+ }
89+ layoutStart.setOnClickListener {
90+ removeFragment()
91+ }
92+ }
93+
94+ private fun removeFragment () {
95+ // TODO: Save Data
96+ parentFragmentManager.beginTransaction().apply {
97+ remove(this @IsolationFlagsFragment)
98+ commit()
99+ }
100+ }
101+
102+ private fun enableParentViews (enable : Boolean ) {
103+ parentFragment?.view?.apply {
104+ val layoutSecondary = findViewById<ConstraintLayout >(R .id.settings_tor_layout_constraint_scroll)
105+ for (i in 0 until layoutSecondary.childCount) {
106+ val child = layoutSecondary.getChildAt(i)
107+ child.isEnabled = enable
108+ }
109+ findViewById<Button >(R .id.settings_tor_button_save).isEnabled = enable
110+ }
111+ }
112+
113+ private inner class BackPressHandler (enable : Boolean ): OnBackPressedCallback(enable) {
114+
115+ override fun handleOnBackPressed () {
116+ removeFragment()
117+ }
118+
119+ }
120+ }
0 commit comments