Skip to content

Commit 9b6cef1

Browse files
committed
Add a reset button to the port configuration UI
1 parent 98ef7b8 commit 9b6cef1

File tree

4 files changed

+45
-6
lines changed

4 files changed

+45
-6
lines changed

app/src/main/java/tech/httptoolkit/android/PortListActivity.kt

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,11 @@ package tech.httptoolkit.android
22

33
import android.content.Intent
44
import android.os.Bundle
5-
import android.view.KeyEvent
6-
import android.widget.TextView
5+
import android.widget.PopupMenu
76
import androidx.appcompat.app.AppCompatActivity
87
import androidx.core.widget.doAfterTextChanged
9-
import kotlinx.android.synthetic.main.item_port_row.view.*
108
import kotlinx.android.synthetic.main.ports_list.*
119
import kotlinx.coroutines.*
12-
import java.util.HashSet
13-
import kotlin.collections.ArrayList
1410

1511
val DEFAULT_PORTS = setOf(
1612
80, // HTTP
@@ -42,16 +38,40 @@ class PortListActivity : AppCompatActivity(), CoroutineScope by MainScope() {
4238

4339
ports_list_input.filters = arrayOf(MinMaxInputFilter(MIN_PORT, MAX_PORT))
4440

41+
// Match the UI enabled state to the input field contents:
4542
ports_list_add_button.isEnabled = false
4643
ports_list_input.doAfterTextChanged {
4744
ports_list_add_button.isEnabled = isValidInput(it.toString())
4845
}
4946

47+
// Add ports when enter/+ is pressed/clicked:
5048
ports_list_add_button.setOnClickListener { addEnteredPort() }
5149
ports_list_input.setOnEditorActionListener { _, _, _ ->
5250
addEnteredPort()
5351
return@setOnEditorActionListener true
5452
}
53+
54+
// Show the menu, and listen for clicks:
55+
ports_list_more_menu.setOnClickListener {
56+
PopupMenu(this, ports_list_more_menu).apply {
57+
this.inflate(R.menu.menu_ports_list)
58+
59+
this.menu.findItem(R.id.action_reset_ports).isEnabled =
60+
ports != DEFAULT_PORTS
61+
62+
this.setOnMenuItemClickListener {
63+
when (it.itemId) {
64+
R.id.action_reset_ports -> {
65+
ports.clear()
66+
ports.addAll(DEFAULT_PORTS)
67+
updateList()
68+
true
69+
}
70+
else -> false
71+
}
72+
}
73+
}.show()
74+
}
5575
}
5676

5777
private fun isValidInput(input: String): Boolean =

app/src/main/res/layout/ports_list.xml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,27 @@
3131
android:textSize="18sp"
3232
android:importantForAutofill="no"
3333
android:inputType="number" />
34+
3435
<ImageView
3536
android:id="@+id/ports_list_add_button"
3637
style="@style/Widget.AppCompat.ActionButton"
3738
android:padding="16dp"
39+
android:paddingEnd="8dp"
3840
android:src="@drawable/ic_add"
3941
android:layout_width="wrap_content"
4042
android:layout_height="wrap_content"
4143
android:minWidth="0dp"
42-
android:minHeight="0dp" />
44+
android:minHeight="0dp"
45+
tools:ignore="ContentDescription,RtlSymmetry" />
46+
47+
<ImageView
48+
android:id="@+id/ports_list_more_menu"
49+
android:layout_width="wrap_content"
50+
android:layout_height="wrap_content"
51+
android:padding="16dp"
52+
android:paddingStart="8dp"
53+
app:srcCompat="@drawable/ic_baseline_more_vert_24"
54+
tools:ignore="ContentDescription,RtlSymmetry" />
4355
</LinearLayout>
4456
</com.google.android.material.card.MaterialCardView>
4557

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<menu xmlns:android="http://schemas.android.com/apk/res/android">
3+
<item
4+
android:id="@+id/action_reset_ports"
5+
android:title="@string/reset_to_default_ports" />
6+
</menu>

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,5 @@
5151
<string name="selected_ports">Custom ports</string>
5252
<string name="few_ports">%s port%s</string>
5353
<string name="add_port_prompt">Add another port</string>
54+
<string name="reset_to_default_ports">Reset to default ports</string>
5455
</resources>

0 commit comments

Comments
 (0)