diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlayDrawableButton.java b/src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlayDrawableButton.java
deleted file mode 100644
index 16a4b96ad0..0000000000
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlayDrawableButton.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/**
- * Copyright 2013 Dolphin Emulator Project
- * Licensed under GPLv2+
- * Refer to the license.txt file included.
- */
-
-package org.yuzu.yuzu_emu.overlay;
-
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Rect;
-import android.graphics.drawable.BitmapDrawable;
-import android.view.MotionEvent;
-
-import org.yuzu.yuzu_emu.NativeLibrary.ButtonState;
-
-
-/**
- * Custom {@link BitmapDrawable} that is capable
- * of storing it's own ID.
- */
-public final class InputOverlayDrawableButton {
-    // The ID value what type of button this Drawable represents.
-    private int mButtonId;
-
-    // The ID value what motion event is tracking
-    private int mTrackId;
-
-    // The drawable position on the screen
-    private int mButtonPositionX, mButtonPositionY;
-    private int mWidth;
-    private int mHeight;
-    private BitmapDrawable mDefaultStateBitmap;
-    private BitmapDrawable mPressedStateBitmap;
-    private boolean mPressedState = false;
-
-    /**
-     * Constructor
-     *
-     * @param res                {@link Resources} instance.
-     * @param defaultStateBitmap {@link Bitmap} to use with the default state Drawable.
-     * @param pressedStateBitmap {@link Bitmap} to use with the pressed state Drawable.
-     * @param buttonId           Identifier for this type of button.
-     */
-    public InputOverlayDrawableButton(Resources res, Bitmap defaultStateBitmap,
-                                      Bitmap pressedStateBitmap, int buttonId) {
-        mDefaultStateBitmap = new BitmapDrawable(res, defaultStateBitmap);
-        mPressedStateBitmap = new BitmapDrawable(res, pressedStateBitmap);
-        mButtonId = buttonId;
-        mTrackId = -1;
-
-        mWidth = mDefaultStateBitmap.getIntrinsicWidth();
-        mHeight = mDefaultStateBitmap.getIntrinsicHeight();
-    }
-
-    /**
-     * Updates button status based on the motion event.
-     *
-     * @return true if value was changed
-     */
-    public boolean updateStatus(MotionEvent event) {
-        int pointerIndex = event.getActionIndex();
-        int xPosition = (int) event.getX(pointerIndex);
-        int yPosition = (int) event.getY(pointerIndex);
-        int pointerId = event.getPointerId(pointerIndex);
-        int motion_event = event.getAction() & MotionEvent.ACTION_MASK;
-        boolean isActionDown = motion_event == MotionEvent.ACTION_DOWN || motion_event == MotionEvent.ACTION_POINTER_DOWN;
-        boolean isActionUp = motion_event == MotionEvent.ACTION_UP || motion_event == MotionEvent.ACTION_POINTER_UP;
-        boolean current_state = mPressedState;
-
-        if (isActionDown) {
-            if (!getBounds().contains(xPosition, yPosition)) {
-                return false;
-            }
-            mPressedState = true;
-            mTrackId = pointerId;
-            return true;
-        }
-
-        if (isActionUp) {
-            if (mTrackId != pointerId) {
-                return false;
-            }
-            mPressedState = false;
-            mTrackId = -1;
-            return true;
-        }
-
-        return false;
-    }
-
-    public void setPosition(int x, int y) {
-        mButtonPositionX = x;
-        mButtonPositionY = y;
-    }
-
-    public void draw(Canvas canvas) {
-        getCurrentStateBitmapDrawable().draw(canvas);
-    }
-
-    private BitmapDrawable getCurrentStateBitmapDrawable() {
-        return mPressedState ? mPressedStateBitmap : mDefaultStateBitmap;
-    }
-
-    public void setBounds(int left, int top, int right, int bottom) {
-        mDefaultStateBitmap.setBounds(left, top, right, bottom);
-        mPressedStateBitmap.setBounds(left, top, right, bottom);
-    }
-
-    /**
-     * Gets this InputOverlayDrawableButton's button ID.
-     *
-     * @return this InputOverlayDrawableButton's button ID.
-     */
-    public int getId() {
-        return mButtonId;
-    }
-
-    public int getTrackId() {
-        return mTrackId;
-    }
-
-    public int getStatus() {
-        return mPressedState ? ButtonState.PRESSED : ButtonState.RELEASED;
-    }
-
-    private Rect getBounds() {
-        return mDefaultStateBitmap.getBounds();
-    }
-
-    public int getWidth() {
-        return mWidth;
-    }
-
-    public int getHeight() {
-        return mHeight;
-    }
-}
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlayDrawableButton.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlayDrawableButton.kt
new file mode 100644
index 0000000000..819d9d6b20
--- /dev/null
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlayDrawableButton.kt
@@ -0,0 +1,118 @@
+/**
+ * Copyright 2013 Dolphin Emulator Project
+ * Licensed under GPLv2+
+ * Refer to the license.txt file included.
+ */
+package org.yuzu.yuzu_emu.overlay
+
+import android.content.res.Resources
+import android.graphics.Bitmap
+import android.graphics.Canvas
+import android.graphics.Rect
+import android.graphics.drawable.BitmapDrawable
+import android.view.MotionEvent
+import org.yuzu.yuzu_emu.NativeLibrary.ButtonState
+
+/**
+ * Custom [BitmapDrawable] that is capable
+ * of storing it's own ID.
+ *
+ * @param res                [Resources] instance.
+ * @param defaultStateBitmap [Bitmap] to use with the default state Drawable.
+ * @param pressedStateBitmap [Bitmap] to use with the pressed state Drawable.
+ * @param buttonId           Identifier for this type of button.
+ */
+class InputOverlayDrawableButton(
+    res: Resources,
+    defaultStateBitmap: Bitmap,
+    pressedStateBitmap: Bitmap,
+    buttonId: Int
+) {
+    /**
+     * Gets this InputOverlayDrawableButton's button ID.
+     *
+     * @return this InputOverlayDrawableButton's button ID.
+     */
+    // The ID value what type of button this Drawable represents.
+    val id: Int
+
+    // The ID value what motion event is tracking
+    var trackId: Int
+
+    // The drawable position on the screen
+    private var buttonPositionX = 0
+    private var buttonPositionY = 0
+    val width: Int
+    val height: Int
+    private val defaultStateBitmap: BitmapDrawable
+    private val pressedStateBitmap: BitmapDrawable
+    private var pressedState = false
+
+    init {
+        this.defaultStateBitmap = BitmapDrawable(res, defaultStateBitmap)
+        this.pressedStateBitmap = BitmapDrawable(res, pressedStateBitmap)
+        id = buttonId
+        trackId = -1
+        width = this.defaultStateBitmap.intrinsicWidth
+        height = this.defaultStateBitmap.intrinsicHeight
+    }
+
+    /**
+     * Updates button status based on the motion event.
+     *
+     * @return true if value was changed
+     */
+    fun updateStatus(event: MotionEvent): Boolean {
+        val pointerIndex = event.actionIndex
+        val xPosition = event.getX(pointerIndex).toInt()
+        val yPosition = event.getY(pointerIndex).toInt()
+        val pointerId = event.getPointerId(pointerIndex)
+        val motionEvent = event.action and MotionEvent.ACTION_MASK
+        val isActionDown =
+            motionEvent == MotionEvent.ACTION_DOWN || motionEvent == MotionEvent.ACTION_POINTER_DOWN
+        val isActionUp =
+            motionEvent == MotionEvent.ACTION_UP || motionEvent == MotionEvent.ACTION_POINTER_UP
+
+        if (isActionDown) {
+            if (!bounds.contains(xPosition, yPosition)) {
+                return false
+            }
+            pressedState = true
+            trackId = pointerId
+            return true
+        }
+
+        if (isActionUp) {
+            if (trackId != pointerId) {
+                return false
+            }
+            pressedState = false
+            trackId = -1
+            return true
+        }
+
+        return false
+    }
+
+    fun setPosition(x: Int, y: Int) {
+        buttonPositionX = x
+        buttonPositionY = y
+    }
+
+    fun draw(canvas: Canvas?) {
+        currentStateBitmapDrawable.draw(canvas!!)
+    }
+
+    private val currentStateBitmapDrawable: BitmapDrawable
+        get() = if (pressedState) pressedStateBitmap else defaultStateBitmap
+
+    fun setBounds(left: Int, top: Int, right: Int, bottom: Int) {
+        defaultStateBitmap.setBounds(left, top, right, bottom)
+        pressedStateBitmap.setBounds(left, top, right, bottom)
+    }
+
+    val status: Int
+        get() = if (pressedState) ButtonState.PRESSED else ButtonState.RELEASED
+    private val bounds: Rect
+        get() = defaultStateBitmap.bounds
+}