package com.samsung.spensdk.example.spenevent;
import java.util.HashMap;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.samsung.samm.common.SObjectStroke;
import com.samsung.spen.settings.SettingStrokeInfo;
import com.samsung.spensdk.SCanvasConstants;
import com.samsung.spensdk.SCanvasView;
import com.samsung.spensdk.applistener.SCanvasLongPressListener;
import com.samsung.spensdk.applistener.SPenDetachmentListener;
import com.samsung.spensdk.applistener.SPenHoverListener;
import com.samsung.spensdk.applistener.SPenTouchListener;
import com.samsung.spensdk.applistener.SettingStrokeChangeListener;
import com.samsung.spensdk.example.R;
import com.samsung.spensdk.example.tools.SPenSDKUtils;
public class SPen_Example_SPenEvent extends Activity {
private final String TAG = "SPenSDK Sample";
private SCanvasView mSCanvas;
private Context mContext = null;
private TextView mX = null;
private TextView mY = null;
private TextView mPressure = null;
private TextView mTool = null;
private TextView mTouchAction = null;
private TextView mHoverAction = null;
private SettingStrokeInfo mStrokeInfoPen;
private SettingStrokeInfo mStrokeInfoFinger;
private final int MENU_RESET = 1000;
private final int TOOL_UNKNOWN = 0;
private final int TOOL_FINGER = 1;
private final int TOOL_PEN = 2;
private final int TOOL_PEN_ERASER = 3;
private int mCurrentTool = TOOL_UNKNOWN;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
setContentView(R.layout.example_spen_event);
mSCanvas = (SCanvasView) findViewById(R.id.canvas_view);
mX = (TextView)findViewById(R.id.x_point);
mY = (TextView)findViewById(R.id.y_point);
mTool = (TextView)findViewById(R.id.tool_type);
mPressure = (TextView)findViewById(R.id.pressure);
mTouchAction = (TextView)findViewById(R.id.tool_touch_action);
mHoverAction = (TextView)findViewById(R.id.tool_hover_action);
//------------------------------------
// SettingView Setting
//------------------------------------
// Resource Map for Layout & Locale
HashMap<String,Integer> settingResourceMapInt = SPenSDKUtils.getSettingLayoutLocaleResourceMap(true, true, false, false);
// Resource Map for Custom font path
HashMap<String,String> settingResourceMapString = SPenSDKUtils.getSettingLayoutStringResourceMap(true, true, false, false);
RelativeLayout settingViewContainer = (RelativeLayout) findViewById(R.id.canvas_container);
mSCanvas.createSettingView(settingViewContainer, settingResourceMapInt, settingResourceMapString);
mSCanvas.setSCanvasHoverPointerStyle(SCanvasConstants.SCANVAS_HOVERPOINTER_STYLE_NONE);
// Initialize Stroke Setting
mStrokeInfoFinger = new SettingStrokeInfo();
mStrokeInfoFinger.setStrokeStyle(SObjectStroke.SAMM_STROKE_STYLE_CRAYON);
mStrokeInfoFinger.setStrokeColor(Color.RED);
mStrokeInfoFinger.setStrokeWidth(50);
mStrokeInfoPen = new SettingStrokeInfo();
mStrokeInfoPen.setStrokeStyle(SObjectStroke.SAMM_STROKE_STYLE_PENCIL);
mStrokeInfoPen.setStrokeColor(Color.BLUE);
mStrokeInfoPen.setStrokeWidth(10);
resetUI();
//--------------------------------------------
// Set S pen Touch Listener
//--------------------------------------------
mSCanvas.setSPenTouchListener(new SPenTouchListener(){
@Override
public boolean onTouchFinger(View view, MotionEvent event) {
updateTouchUI(event.getX(), event.getY(), event.getPressure(), event.getAction(), "Finger");
// Update Current Color
if(mCurrentTool!= TOOL_FINGER){
mCurrentTool = TOOL_FINGER;
if(event.getAction()==MotionEvent.ACTION_DOWN)
mSCanvas.setSettingViewStrokeInfo(mStrokeInfoFinger);
}
return false; // dispatch event to SCanvasView for drawing
}
@Override
public boolean onTouchPen(View view, MotionEvent event) {
updateTouchUI(event.getX(), event.getY(), event.getPressure(), event.getAction(), "Pen");
// Update Current Color
if(mCurrentTool!=TOOL_PEN){
mCurrentTool = TOOL_PEN;
if(event.getAction()==MotionEvent.ACTION_DOWN)
mSCanvas.setSettingViewStrokeInfo(mStrokeInfoPen);
}
return false; // dispatch event to SCanvasView for drawing
}
@Override
public boolean onTouchPenEraser(View view, MotionEvent event) {
updateTouchUI(event.getX(), event.getY(), event.getPressure(),event.getAction(), "Pen-Eraser");
if(mCurrentTool!=TOOL_PEN_ERASER){
mCurrentTool = TOOL_PEN_ERASER;
}
if(event.getAction()==MotionEvent.ACTION_DOWN)
mSCanvas.setEraserStrokeSetting(SObjectStroke.SAMM_DEFAULT_MAX_ERASERSIZE);
return false; // dispatch event to SCanvasView for drawing
}
@Override
public void onTouchButtonDown(View view, MotionEvent event) {
//Toast.makeText(mContext, "S Pen Button Down on Touch", Toast.LENGTH_SHORT).show();
}
@Override
public void onTouchButtonUp(View view, MotionEvent event) {
Toast.makeText(mContext, "S Pen Button Up on Touch", Toast.LENGTH_SHORT).show();
}
});
//--------------------------------------------
// [Custom Hover Icon Only]
// Set Custom Hover Icon
//--------------------------------------------
//mSPenEventLibrary.setCustomHoveringIcon(mContext, mImageView, getResources().getDrawable(R.drawable.custom_hover_icon));
//--------------------------------------------
// [Hover Listener Only]
// Set SPenHoverListener
//--------------------------------------------
//mSPenEventLibrary.setSPenHoverListener(mImageView, new SPenHoverListener(){...}
//--------------------------------------------
// [Hover Listener & Custom Hover Icon]
// Set S pen HoverListener & Custom Hover Icon
//--------------------------------------------
mSCanvas.setSPenHoverListener(new SPenHoverListener(){
@Override
public boolean onHover(View view, MotionEvent event) {
updateHoverUI(event.getX(), event.getY(), event.getPressure(), event.getAction(), "Hover");
return false;
}
@Override
public void onHoverButtonDown(View view, MotionEvent event) {
}
@Override
public void onHoverButtonUp(View view, MotionEvent event) {
mSCanvas.toggleShowSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_PEN);
}
});
//--------------------------------------------
// Set S pen Detachment Listener
//--------------------------------------------
mSCanvas.setSPenDetachmentListener(new SPenDetachmentListener(){
@Override
public void onSPenDetached(boolean bDetached) {
if(bDetached) Toast.makeText(mContext, "S Pen Detached", Toast.LENGTH_SHORT).show();
else Toast.makeText(mContext, "S Pen Inserted", Toast.LENGTH_SHORT).show();
}
});
//--------------------------------------------
// Set S pen Long Press Listener
//--------------------------------------------
mSCanvas.setSCanvasLongPressListener(new SCanvasLongPressListener(){
@Override
public void onLongPressed(float fPosX, float fPosY) {
if(mCurrentTool== TOOL_FINGER)
Toast.makeText(mContext, "Long Pressed by Finger", Toast.LENGTH_SHORT).show();
else if(mCurrentTool== TOOL_PEN)
Toast.makeText(mContext, "Long Pressed by Pen", Toast.LENGTH_SHORT).show();
else if(mCurrentTool== TOOL_PEN_ERASER)
Toast.makeText(mContext, "Long Pressed by Pen-Eraser", Toast.LENGTH_SHORT).show();
else
Toast.makeText(mContext, "Long Pressed by other tools", Toast.LENGTH_SHORT).show();
}
@Override
public void onLongPressed() {
}
});
//------------------------------------------------
// OnSettingStrokeChangeListener Listener
//------------------------------------------------
mSCanvas.setSettingStrokeChangeListener( new SettingStrokeChangeListener() {
@Override
public void onClearAll(boolean bClearAllCompleted) {
}
@Override
public void onEraserWidthChanged(int eraserWidth) {
}
@Override
public void onStrokeColorChanged(int strokeColor) {
if(mCurrentTool == TOOL_PEN)
mStrokeInfoPen.setStrokeColor(strokeColor);
else if(mCurrentTool == TOOL_FINGER)
mStrokeInfoFinger.setStrokeColor(strokeColor);
Log.e("TEST", "color " + strokeColor);
}
@Override
public void onStrokeStyleChanged(int strokeStyle) {
if(mCurrentTool == TOOL_PEN)
mStrokeInfoPen.setStrokeStyle(strokeStyle);
else if(mCurrentTool == TOOL_FINGER)
mStrokeInfoFinger.setStrokeStyle(strokeStyle);
}
@Override
public void onStrokeWidthChanged(int strokeWidth) {
if(mCurrentTool == TOOL_PEN)
mStrokeInfoPen.setStrokeWidth(strokeWidth);
else if(mCurrentTool == TOOL_FINGER)
mStrokeInfoFinger.setStrokeWidth(strokeWidth);
}
@Override
public void onStrokeAlphaChanged(int strokeAlpha) {
if(mCurrentTool == TOOL_PEN)
mStrokeInfoPen.setStrokeAlpha(strokeAlpha);
else if(mCurrentTool == TOOL_FINGER)
mStrokeInfoFinger.setStrokeAlpha(strokeAlpha);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
// Release SCanvasView resources
if(!mSCanvas.closeSCanvasView())
Log.e(TAG, "Fail to close SCanvasView");
}
@Override
public void onBackPressed() {
SPenSDKUtils.alertActivityFinish(this, "Exit");
}
// Reset Touch UI
private void resetUI(){
mX.setText("X : " + String.format("%.2f", 0.f));
mY.setText("Y : " + String.format("%.2f", 0.f));
mPressure.setText("Pressure : " + String.format("%.3f", 0.f));
mTool.setText("Tool");
mTouchAction.setText("Touch");
mHoverAction.setText("Hover");
}
// Update Touch UI
private void updateTouchUI(float x, float y, float pressure, int action, String tool){
mX.setText("X : " + String.format("%.2f", x));
mY.setText("Y : " + String.format("%.2f", y));
mPressure.setText("Pressure : " + String.format("%.3f", pressure));
if(action==MotionEvent.ACTION_DOWN) mTouchAction.setText("DOWN");
else if(action==MotionEvent.ACTION_MOVE) mTouchAction.setText("MOVE");
else if(action==MotionEvent.ACTION_UP) mTouchAction.setText("UP");
else if(action==MotionEvent.ACTION_CANCEL) mTouchAction.setText("CANCEL");
else mTouchAction.setText("Unknow");
mTool.setText(tool);
}
// Update Hover UI
private void updateHoverUI(float x, float y, float pressure, int action, String tool){
// For noise point On Hover, so filter it
if(x>=0 && y>=0){
mX.setText("X : " + String.format("%.2f", x));
mY.setText("Y : " + String.format("%.2f", y));
mPressure.setText("Pressure : " + String.format("%.3f", pressure));
}
if(action==MotionEvent.ACTION_HOVER_ENTER) mHoverAction.setText("HOVER ENTER");
else if(action==MotionEvent.ACTION_HOVER_MOVE) mHoverAction.setText("HOVER MOVE");
else if(action==MotionEvent.ACTION_HOVER_EXIT) mHoverAction.setText("HOVER EXIT");
else mHoverAction.setText("Unknow");
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
menu.add(MENU_RESET, MENU_RESET, Menu.NONE, "Reset");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
super.onOptionsItemSelected(item);
if(mSCanvas == null)
return false;
switch(item.getItemId()) {
case MENU_RESET:
mSCanvas.clearSCanvasView();
resetUI();
break;
}
return true;
}
}