Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions app/src/main/java/replete/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import android.content.res.Configuration
import android.os.*
import android.text.*
import android.text.style.ForegroundColorSpan
import android.util.AttributeSet
import android.util.DisplayMetrics
import android.view.animation.AlphaAnimation
import android.view.animation.Animation
Expand Down Expand Up @@ -76,6 +77,19 @@ enum class Messages(val value: Int) {
INIT_FAILED(17),
}

enum class Buttons(val value: String) {
PAREN("("),
SQUARE("["),
CURLY("{"),
COLON(":"),
DBL_QUOTE("\""),
HASH("#"),
PERCENT("%"),
QUOTE("'"),
SYNTAX_QUOTE("`"),
DEREF("@"),
}

class MainActivity : AppCompatActivity() {

private var isVMLoaded = false
Expand Down Expand Up @@ -368,6 +382,30 @@ class MainActivity : AppCompatActivity() {
}
}

inner class ToolBarButton(context: Context, val toolbar: LinearLayout, val text: String) : Button(context) {
init {
val button = LayoutInflater.from(context).inflate(R.layout.button, toolbar, false) as Button
button.text = text
toolbar.addView(button)

button.setOnClickListener {
val field = inputField!!
val cursor = field.selectionStart
when (text) {
Buttons.DBL_QUOTE.value -> autoCloseAndMove(Buttons.DBL_QUOTE.value)
else -> field.text.insert(cursor, text)
}
}
}

private fun autoCloseAndMove(ch: String) {
val field = inputField!!
val cursor = field.selectionStart
field.text.insert(cursor, ch + ch)
field.setSelection(cursor + 1)
}
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

Expand Down Expand Up @@ -399,6 +437,14 @@ class MainActivity : AppCompatActivity() {
setDeviceType()
setContentView(R.layout.activity_main)

val toolbarBlock = findViewById<HorizontalScrollView>(R.id.toolbar)
val toolbar = findViewById<LinearLayout>(R.id.toolbar_list)
val buttons = listOf("(", "[", "{", ":", "\"", "#", "%", "'", "`", "@")

buttons.forEach {
ToolBarButton(this, toolbar, it)
}

inputField = findViewById(R.id.input)
val replHistory: ListView = findViewById(R.id.repl_history)
evalButton = findViewById(R.id.eval_button)
Expand Down
15 changes: 15 additions & 0 deletions app/src/main/res/drawable/button_bg.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="#C9CED1" />
<corners android:radius="5dp"/>
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="#eceff1" />
<corners android:radius="5dp"/>
</shape>
</item>
</selector>
29 changes: 20 additions & 9 deletions app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,31 @@
android:layout_height="0dp" android:id="@+id/eval_button" android:layout_weight="1"
style="@style/Widget.AppCompat.Button.Borderless.Colored"
android:textColor="@android:color/holo_blue_dark" android:layout_marginEnd="8dp"
android:layout_marginRight="8dp" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="8dp"
app:layout_constraintTop_toBottomOf="@+id/repl_history"/>
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/repl_history" app:layout_constraintBottom_toTopOf="@+id/toolbar"
/>
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:inputType="text|textMultiLine|textNoSuggestions"
android:ems="10"
android:id="@+id/input" android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent"
android:layout_marginLeft="8dp" android:layout_marginStart="8dp"
android:id="@+id/input"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="8dp"
app:layout_constraintEnd_toStartOf="@+id/eval_button"
android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:typeface="monospace"
android:textSize="14sp" android:textColor="@android:color/black"/>
android:layout_marginEnd="8dp" android:typeface="monospace"
android:textSize="14sp" android:textColor="@android:color/black"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintBottom_toTopOf="@+id/toolbar"/>
<HorizontalScrollView
android:layout_width="0dp"
android:layout_height="52dp" android:id="@+id/toolbar"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" android:background="#eceff1"
app:layout_constraintTop_toBottomOf="@+id/eval_button">
<LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent"
android:orientation="horizontal" android:id="@+id/toolbar_list">
</LinearLayout>
</HorizontalScrollView>

</android.support.constraint.ConstraintLayout>
11 changes: 11 additions & 0 deletions app/src/main/res/layout/button.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<Button
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="32dp"
android:layout_height="wrap_content" android:id="@+id/toolbar_button" android:layout_weight="1"
android:fontFamily="monospace"
android:background="@drawable/button_bg"
android:text=""
android:textSize="18sp" android:textColor="#061d28" android:typeface="monospace"
android:textStyle="bold"
style="?android:attr/borderlessButtonStyle"/>