package com.samsung.spensdk.example.imageclip;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Toast;
import com.samsung.spensdk.SCanvasConstants;
import com.samsung.spensdk.SCanvasView;
import com.samsung.spensdk.applistener.HistoryUpdateListener;
import com.samsung.spensdk.applistener.SCanvasInitializeListener;
import com.samsung.spensdk.applistener.SCanvasModeChangedListener;
import com.samsung.spensdk.example.R;
import com.samsung.spensdk.example.tools.SPenSDKUtils;
public class SPen_Example_ImageClip_MiniEditor extends Activity {
private SCanvasView mSCanvas;
private ImageView mPenBtn;
private ImageView mEraserBtn;
private ImageView mUndoBtn;
private ImageView mRedoBtn;
private Button mDoneBtn;
private Button mCancelBtn;
Context mContext = null;
public static final String TAG = "Example2";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.sdk_example_mini_edit);
mContext = this;
mSCanvas = (SCanvasView) findViewById(R.id.canvas_view);
// Create Setting View
RelativeLayout settingViewContainer = (RelativeLayout) findViewById(R.id.canvas_container);
//------------------------------------
// 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);
// Create Setting View
mSCanvas.createSettingView(settingViewContainer, settingResourceMapInt, settingResourceMapString);
//------------------------------------------------
// Set SCanvas Initialize Listener
//------------------------------------------------
mSCanvas.setSCanvasInitializeListener(new SCanvasInitializeListener() {
@Override
public void onInitialized() {
// Set Background as bright yellow
if(!mSCanvas.setBGColor(0xFFFFFFBB))
Toast.makeText(mContext, "Fail to set Background color.", Toast.LENGTH_LONG).show();
}
});
//------------------------------------------------
// History Change Listener
//------------------------------------------------
mSCanvas.setHistoryUpdateListener(new HistoryUpdateListener() {
@Override
public void onHistoryChanged(boolean undoable, boolean redoable) {
mUndoBtn.setEnabled(undoable);
mRedoBtn.setEnabled(redoable);
}
});
//------------------------------------------------
// SCanvas Mode Changed Listener
//------------------------------------------------
mSCanvas.setSCanvasModeChangedListener(new SCanvasModeChangedListener() {
@Override
public void onModeChanged(int mode) {
updateModeState();
}
});
mPenBtn = (ImageView) findViewById(R.id.penSetting_btn);
mEraserBtn = (ImageView) findViewById(R.id.eraserSetting_btn);
mPenBtn.setOnClickListener(toolClickListener);
mEraserBtn.setOnClickListener(toolClickListener);
mPenBtn.setSelected(true);
mUndoBtn = (ImageView) findViewById(R.id.undo_btn);
mRedoBtn = (ImageView) findViewById(R.id.redo_btn);
mUndoBtn.setOnClickListener(undoRedoClickListener);
mRedoBtn.setOnClickListener(undoRedoClickListener);
mUndoBtn.setEnabled(false);
mRedoBtn.setEnabled(false);
mDoneBtn = (Button) findViewById(R.id.done_btn);
mCancelBtn = (Button) findViewById(R.id.cancel_btn);
mDoneBtn.setOnClickListener(doneClickListener);
mCancelBtn.setOnClickListener(doneClickListener);
}
@Override
protected void onDestroy() {
super.onDestroy();
// Release SCanvasView resources
if(!mSCanvas.closeSCanvasView())
Log.e(TAG, "Fail to close SCanvasView");
}
private OnClickListener toolClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
int nBtnID = v.getId();
// If the mode is not changed, open the setting view. If the mode is same, close the setting view.
if(nBtnID == mPenBtn.getId()){
if(mSCanvas.getCanvasMode()==SCanvasConstants.SCANVAS_MODE_INPUT_PEN){
mSCanvas.toggleShowSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_PEN);
}
else{
mSCanvas.setCanvasMode(SCanvasConstants.SCANVAS_MODE_INPUT_PEN);
mSCanvas.showSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_PEN, false);
updateModeState();
}
}
else if(nBtnID == mEraserBtn.getId()){
if(mSCanvas.getCanvasMode()==SCanvasConstants.SCANVAS_MODE_INPUT_ERASER){
mSCanvas.toggleShowSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_ERASER);
}
else {
mSCanvas.setCanvasMode(SCanvasConstants.SCANVAS_MODE_INPUT_ERASER);
mSCanvas.showSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_ERASER, false);
updateModeState();
}
}
}
};
private void updateModeState(){
int nCurMode = mSCanvas.getCanvasMode();
mPenBtn.setSelected(nCurMode==SCanvasConstants.SCANVAS_MODE_INPUT_PEN);
mEraserBtn.setSelected(nCurMode==SCanvasConstants.SCANVAS_MODE_INPUT_ERASER);
}
private OnClickListener doneClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (v.equals(mDoneBtn)) {
File file = saveCanvasImage();
if (file != null) {
Intent attachIntent = new Intent();
attachIntent.setData(Uri.fromFile(file));
setResult(RESULT_OK, attachIntent);
finish();
}
} else if (v.equals(mCancelBtn)) {
finish();
}
}
};
private OnClickListener undoRedoClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (v.equals(mUndoBtn)) {
mSCanvas.undo();
} else if (v.equals(mRedoBtn)) {
mSCanvas.redo();
}
}
};
private File saveCanvasImage() {
byte[] imgData = mSCanvas.getSCanvasBitmapData();
if(imgData == null)
return null;
String fileName = "tempImg.jpg";
OutputStream out = null;
try {
File imgFile = new File(getFilesDir(), fileName);
out = openFileOutput(imgFile.getName(), MODE_WORLD_READABLE | MODE_WORLD_WRITEABLE);
out.write(imgData);
return imgFile;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
try {
if (out != null)
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}