Piano.java
package com.dnoved1.www.smartkeys;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.view.MotionEvent;
import android.view.View;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Handler;
import android.os.Looper;
import android.util.AttributeSet;
import android.util.Log;
class Piano extends View {
public Piano(Context context) {
super(context);
}
public Piano(Context context, AttributeSet attrs) {
super(context, attrs);
}
public Piano(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public Piano(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
private static final int REQUEST_ENABLE_BT = 42;
private static final int num_keys = 7;
private static final int WHITE_1 = 0;
private static final int WHITE_2 = 1;
private static final int WHITE_3 = 2;
private static final int WHITE_4 = 3;
private static final int WHITE_5 = 4;
private static final int WHITE_6 = 5;
private static final int WHITE_7 = 6;
private static final int BLACK_1 = 10;
private static final int BLACK_2 = 11;
private static final int BLACK_3 = 12;
private static final int BLACK_4 = 13;
private static final int BLACK_5 = 14;
public void onDraw(Canvas canvas) {
int width = this.getMeasuredWidth();
int height = this.getMeasuredHeight();
Paint white = new Paint(); white.setARGB(255, 255, 255, 255);
Paint black = new Paint(); black.setARGB(255, 0, 0, 0);
for (int i = 0; i < num_keys; i++) {
canvas.drawRect((width / num_keys) * i, 0, (width / num_keys) * (i + 1), height, white);
canvas.drawLine((width / num_keys) * i, 0, (width / num_keys) * (i + 1), 0, black);
canvas.drawLine((width / num_keys) * i, height, (width / num_keys) * (i + 1), height, black);
canvas.drawLine((width / num_keys) * i, 0, (width / num_keys) * i, height, black);
canvas.drawLine((width / num_keys) * (i + 1), 0, (width / num_keys) * (i + 1), height, black);
}
for (int i = 0; i < num_keys; i++) {
if (i != 2 && i != 6) {
canvas.drawRect((int)((width / num_keys) * (i + 0.6)), 0, (int)((width / num_keys) * (i + 1.4)), height / 2, black);
}
}
}
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
float width = this.getMeasuredWidth();
float height = this.getMeasuredHeight();
int key_pressed = (int)(x / (width / num_keys));
boolean is_black = false;
{
int i = 0;
for (float left = width / num_keys / 2; left < width; left += width / num_keys) {
if (i != 2 && i != 6 && y <= height / 2 && x > left && x < left + width / num_keys) {
is_black = true;
key_pressed = i;
break;
}
i++;
}
}
Log.i("Piano", key_pressed + ", " + is_black);
final char char_to_send = (char)(is_black ? 'A' + key_pressed : '0' + key_pressed);
// Send the key pressed over bluetooth
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
MainActivity main = (MainActivity) Piano.this.getContext();
if (main.btGatt != null && main.tx != null) {
main.tx.setValue(new byte[] {(byte)char_to_send});
if (main.btGatt.writeCharacteristic(main.tx)) {
Log.i("BT", "Sent: " + char_to_send);
} else {
Log.e("BT", "Couldn't write TX characteristic!");
}
}
}
});
return true;
}
}