package com.samsung.spensdk.example.basiceditor;
import java.util.HashMap;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.graphics.Rect;
import android.graphics.RectF;
import android.net.Uri;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.SubMenu;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Toast;
import com.samsung.samm.common.SObjectImage;
import com.samsung.samm.common.SObjectStroke;
import com.samsung.samm.common.SOptionSCanvas;
import com.samsung.spen.settings.SettingFillingInfo;
import com.samsung.spen.settings.SettingStrokeInfo;
import com.samsung.spen.settings.SettingTextInfo;
import com.samsung.spensdk.SCanvasConstants;
import com.samsung.spensdk.SCanvasView;
import com.samsung.spensdk.applistener.ColorPickerColorChangeListener;
import com.samsung.spensdk.applistener.HistoryUpdateListener;
import com.samsung.spensdk.applistener.SCanvasInitializeListener;
import com.samsung.spensdk.applistener.SCanvasModeChangedListener;
import com.samsung.spensdk.applistener.SPenHoverListener;
import com.samsung.spensdk.example.R;
import com.samsung.spensdk.example.tools.PreferencesOfSAMMOption;
import com.samsung.spensdk.example.tools.SPenSDKUtils;
public class SPen_Example_BasicEditor extends Activity {
private final String TAG = "SPenSDK Sample";
//==============================
// Intent Parameters
//==============================
public final static String KEY_IMAGE_SAVE_PATH = "SavePath";
public final static String KEY_IMAGE_SRC_PATH = "FilePathOrigin";
//==============================
// Application Identifier Setting
// "SDK Sample Application 1.0"
//==============================
private final String APPLICATION_ID_NAME = "SDK Sample Application";
private final int APPLICATION_ID_VERSION_MAJOR = 2;
private final int APPLICATION_ID_VERSION_MINOR = 2;
private final String APPLICATION_ID_VERSION_PATCHNAME = "Debug";
//==============================
// Menu
//==============================
private final int MENU_FILE_GROUP = 2000;
private final int MENU_FILE_1 = 2001;
private final int MENU_FILE_2 = 2002;
private final int MENU_DATA_GROUP = 3000;
private final int MENU_DATA_1 = 3001;
private final int MENU_DATA_2 = 3002;
//==============================
// Activity Request code
//==============================
private final int REQUEST_CODE_INSERT_IMAGE_OBJECT = 100;
//==============================
// Variables
//==============================
Context mContext = null;
private String mSrcImageFilePath = null;
private Rect mSrcImageRect = null;
private FrameLayout mLayoutContainer;
private RelativeLayout mCanvasContainer;
private SCanvasView mSCanvas;
private ImageView mPenBtn;
private ImageView mEraserBtn;
private ImageView mTextBtn;
private ImageView mFillingBtn;
private ImageView mInsertBtn;
private ImageView mColorPickerBtn;
private ImageView mUndoBtn;
private ImageView mRedoBtn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.editor_basic_editor);
mContext = this;
//------------------------------------
// UI Setting
//------------------------------------
mPenBtn = (ImageView) findViewById(R.id.penBtn);
mPenBtn.setOnClickListener(mBtnClickListener);
mPenBtn.setOnLongClickListener(mBtnLongClickListener);
mEraserBtn = (ImageView) findViewById(R.id.eraseBtn);
mEraserBtn.setOnClickListener(mBtnClickListener);
mEraserBtn.setOnLongClickListener(mBtnLongClickListener);
mTextBtn = (ImageView) findViewById(R.id.textBtn);
mTextBtn.setOnClickListener(mBtnClickListener);
mTextBtn.setOnLongClickListener(mBtnLongClickListener);
mFillingBtn = (ImageView) findViewById(R.id.fillingBtn);
mFillingBtn.setOnClickListener(mBtnClickListener);
mFillingBtn.setOnLongClickListener(mBtnLongClickListener);
mInsertBtn = (ImageView) findViewById(R.id.insertBtn);
mInsertBtn.setOnClickListener(mInsertBtnClickListener);
mColorPickerBtn = (ImageView) findViewById(R.id.colorPickerBtn);
mColorPickerBtn.setOnClickListener(mColorPickerListener);
mUndoBtn = (ImageView) findViewById(R.id.undoBtn);
mUndoBtn.setOnClickListener(undoNredoBtnClickListener);
mRedoBtn = (ImageView) findViewById(R.id.redoBtn);
mRedoBtn.setOnClickListener(undoNredoBtnClickListener);
//------------------------------------
// Create SCanvasView
//------------------------------------
mLayoutContainer = (FrameLayout) findViewById(R.id.layout_container);
mCanvasContainer = (RelativeLayout) findViewById(R.id.canvas_container);
mSCanvas = new SCanvasView(mContext);
mCanvasContainer.addView(mSCanvas);
Intent intent = getIntent();
mSrcImageFilePath = intent.getStringExtra(KEY_IMAGE_SRC_PATH);
// If initial image exist, resize the canvas size
if(mSrcImageFilePath!=null){
mSrcImageRect = getMiniumCanvasRect(mSrcImageFilePath, 20);
// Place SCanvasView In the Center
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams)mCanvasContainer.getLayoutParams();
layoutParams.width = mSrcImageRect.right-mSrcImageRect.left;
layoutParams.height= mSrcImageRect.bottom-mSrcImageRect.top;
layoutParams.gravity = Gravity.CENTER;
mCanvasContainer.setLayoutParams(layoutParams);
// Set Background of layout container
mLayoutContainer.setBackgroundResource(R.drawable.bg_edit);
}
//------------------------------------
// SettingView Setting
//------------------------------------
// Resource Map for Layout & Locale
HashMap<String,Integer> settingResourceMapInt = SPenSDKUtils.getSettingLayoutLocaleResourceMap(true, true, true, true);
// Resource Map for Custom font path
HashMap<String,String> settingResourceMapString = SPenSDKUtils.getSettingLayoutStringResourceMap(true, true, true, true);
// Create Setting View
mSCanvas.createSettingView(mLayoutContainer, settingResourceMapInt, settingResourceMapString);
//====================================================================================
//
// Set Callback Listener(Interface)
//
//====================================================================================
//------------------------------------------------
// SCanvas Listener
//------------------------------------------------
mSCanvas.setSCanvasInitializeListener(new SCanvasInitializeListener() {
@Override
public void onInitialized() {
//--------------------------------------------
// Start SCanvasView/CanvasView Task Here
//--------------------------------------------
// Application Identifier Setting
if(!mSCanvas.setAppID(APPLICATION_ID_NAME, APPLICATION_ID_VERSION_MAJOR, APPLICATION_ID_VERSION_MINOR,APPLICATION_ID_VERSION_PATCHNAME))
Toast.makeText(mContext, "Fail to set App ID.", Toast.LENGTH_LONG).show();
// Set Title
if(!mSCanvas.setTitle("SPen-SDK Test"))
Toast.makeText(mContext, "Fail to set Title.", Toast.LENGTH_LONG).show();
// Update button state
updateModeState();
// Load the file & set Background Image
if(mSrcImageFilePath!=null){
if(SCanvasView.isSAMMFile(mSrcImageFilePath)){
loadSAMMFile(mSrcImageFilePath);
// Set the editing rect after loading
}
else{
// set BG Image
if(!mSCanvas.setBGImagePath(mSrcImageFilePath)){
Toast.makeText(mContext, "Fail to set Background Image Path.", Toast.LENGTH_LONG).show();
}
}
}
// Restore last setting information
// mSCanvas.restoreSettingViewStatus();
}
});
//------------------------------------------------
// 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();
}
});
//------------------------------------------------
// Color Picker Listener
//------------------------------------------------
mSCanvas.setColorPickerColorChangeListener(new ColorPickerColorChangeListener(){
@Override
public void onColorPickerColorChanged(int nColor) {
int nCurMode = mSCanvas.getCanvasMode();
if(nCurMode==SCanvasConstants.SCANVAS_MODE_INPUT_PEN) {
SettingStrokeInfo strokeInfo = mSCanvas.getSettingViewStrokeInfo();
if(strokeInfo != null) {
strokeInfo.setStrokeColor(nColor);
mSCanvas.setSettingViewStrokeInfo(strokeInfo);
}
}
else if(nCurMode==SCanvasConstants.SCANVAS_MODE_INPUT_ERASER) {
// do nothing
}
else if(nCurMode==SCanvasConstants.SCANVAS_MODE_INPUT_TEXT){
SettingTextInfo textInfo = mSCanvas.getSettingViewTextInfo();
if(textInfo != null) {
textInfo.setTextColor(nColor);
mSCanvas.setSettingViewTextInfo(textInfo);
}
}
else if(nCurMode==SCanvasConstants.SCANVAS_MODE_INPUT_FILLING) {
SettingFillingInfo fillingInfo = mSCanvas.getSettingViewFillingInfo();
if(fillingInfo != null) {
fillingInfo.setFillingColor(nColor);
mSCanvas.setSettingViewFillingInfo(fillingInfo);
}
}
}
});
mUndoBtn.setEnabled(false);
mRedoBtn.setEnabled(false);
mPenBtn.setSelected(true);
mSCanvas.setSCanvasHoverPointerStyle(SCanvasConstants.SCANVAS_HOVERPOINTER_STYLE_SPENSDK);
mSCanvas.setSPenHoverListener(new SPenHoverListener() {
@Override
public void onHoverButtonUp(View view, MotionEvent event) {
// TODO Auto-generated method stub
int nPreviousMode = mSCanvas.getCanvasMode();
boolean bIncludeDefinedSetting = true;
boolean bIncludeCustomSetting = true;
boolean bIncludeEraserSetting = true;
SettingStrokeInfo settingInfo = mSCanvas.getNextSettingViewStrokeInfo(bIncludeDefinedSetting, bIncludeCustomSetting, bIncludeEraserSetting);
if(settingInfo!=null) {
if(mSCanvas.setSettingViewStrokeInfo(settingInfo)) {
// Mode Change : Pen => Eraser
if(nPreviousMode == SCanvasConstants.SCANVAS_MODE_INPUT_PEN
&& settingInfo.getStrokeStyle()==SObjectStroke.SAMM_STROKE_STYLE_ERASER){
// Change Mode
mSCanvas.setCanvasMode(SCanvasConstants.SCANVAS_MODE_INPUT_ERASER);
// Show Setting View
if(mSCanvas.isSettingViewVisible(SCanvasConstants.SCANVAS_SETTINGVIEW_PEN)){
mSCanvas.showSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_PEN, false);
mSCanvas.showSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_ERASER, true);
}
updateModeState();
}
// Mode Change : Eraser => Pen
if(nPreviousMode == SCanvasConstants.SCANVAS_MODE_INPUT_ERASER
&& settingInfo.getStrokeStyle()!=SObjectStroke.SAMM_STROKE_STYLE_ERASER){
// Change Mode
mSCanvas.setCanvasMode(SCanvasConstants.SCANVAS_MODE_INPUT_PEN);
// Show Setting View
if(mSCanvas.isSettingViewVisible(SCanvasConstants.SCANVAS_SETTINGVIEW_ERASER)){
mSCanvas.showSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_ERASER, false);
mSCanvas.showSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_PEN, true);
}
updateModeState();
}
}
}
}
@Override
public void onHoverButtonDown(View view, MotionEvent event) {
// TODO Auto-generated method stub
}
@Override
public boolean onHover(View view, MotionEvent event) {
// TODO Auto-generated method stub
return false;
}
});
// Caution:
// Do NOT load file or start animation here because we don't know canvas size here.
// Start such SCanvasView Task at onInitialized() of SCanvasInitializeListener
}
@Override
protected void onDestroy() {
super.onDestroy();
// Save current final setting information
// mSCanvas.saveSettingViewStatus();
// Release SCanvasView resources
if(!mSCanvas.closeSCanvasView())
Log.e(TAG, "Fail to close SCanvasView");
}
@Override
public void onBackPressed() {
SPenSDKUtils.alertActivityFinish(this, "Exit");
}
private OnClickListener undoNredoBtnClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (v.equals(mUndoBtn)) {
mSCanvas.undo();
}
else if (v.equals(mRedoBtn)) {
mSCanvas.redo();
}
mUndoBtn.setEnabled(mSCanvas.isUndoable());
mRedoBtn.setEnabled(mSCanvas.isRedoable());
}
};
private OnClickListener mBtnClickListener = 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.setSettingViewSizeOption(SCanvasConstants.SCANVAS_SETTINGVIEW_PEN, SCanvasConstants.SCANVAS_SETTINGVIEW_SIZE_EXT);
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.setSettingViewSizeOption(SCanvasConstants.SCANVAS_SETTINGVIEW_ERASER, SCanvasConstants.SCANVAS_SETTINGVIEW_SIZE_NORMAL);
mSCanvas.toggleShowSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_ERASER);
}
else {
mSCanvas.setCanvasMode(SCanvasConstants.SCANVAS_MODE_INPUT_ERASER);
mSCanvas.showSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_ERASER, false);
updateModeState();
}
}
else if(nBtnID == mTextBtn.getId()){
if(mSCanvas.getCanvasMode()==SCanvasConstants.SCANVAS_MODE_INPUT_TEXT){
mSCanvas.setSettingViewSizeOption(SCanvasConstants.SCANVAS_SETTINGVIEW_TEXT, SCanvasConstants.SCANVAS_SETTINGVIEW_SIZE_NORMAL);
mSCanvas.toggleShowSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_TEXT);
}
else{
mSCanvas.setCanvasMode(SCanvasConstants.SCANVAS_MODE_INPUT_TEXT);
mSCanvas.showSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_TEXT, false);
updateModeState();
Toast.makeText(mContext, "Tap Canvas to insert Text", Toast.LENGTH_SHORT).show();
}
}
else if(nBtnID == mFillingBtn.getId()){
if(mSCanvas.getCanvasMode()==SCanvasConstants.SCANVAS_MODE_INPUT_FILLING){
mSCanvas.setSettingViewSizeOption(SCanvasConstants.SCANVAS_SETTINGVIEW_FILLING, SCanvasConstants.SCANVAS_SETTINGVIEW_SIZE_NORMAL);
mSCanvas.toggleShowSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_FILLING);
}
else{
mSCanvas.setCanvasMode(SCanvasConstants.SCANVAS_MODE_INPUT_FILLING);
mSCanvas.showSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_FILLING, false);
updateModeState();
Toast.makeText(mContext, "Tap Canvas to fill color", Toast.LENGTH_SHORT).show();
}
}
}
};
private OnLongClickListener mBtnLongClickListener = new OnLongClickListener() {
@Override
public boolean onLongClick(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()){
mSCanvas.setSettingViewSizeOption(SCanvasConstants.SCANVAS_SETTINGVIEW_PEN, SCanvasConstants.SCANVAS_SETTINGVIEW_SIZE_MINI);
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, true);
updateModeState();
}
return true;
}
else if(nBtnID == mEraserBtn.getId()){
mSCanvas.setSettingViewSizeOption(SCanvasConstants.SCANVAS_SETTINGVIEW_ERASER, SCanvasConstants.SCANVAS_SETTINGVIEW_SIZE_MINI);
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, true);
updateModeState();
}
return true;
}
else if(nBtnID == mTextBtn.getId()){
mSCanvas.setSettingViewSizeOption(SCanvasConstants.SCANVAS_SETTINGVIEW_TEXT, SCanvasConstants.SCANVAS_SETTINGVIEW_SIZE_MINI);
if(mSCanvas.getCanvasMode()==SCanvasConstants.SCANVAS_MODE_INPUT_TEXT){
mSCanvas.toggleShowSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_TEXT);
}
else{
mSCanvas.setCanvasMode(SCanvasConstants.SCANVAS_MODE_INPUT_TEXT);
mSCanvas.showSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_TEXT, true);
updateModeState();
Toast.makeText(mContext, "Tap Canvas to insert Text", Toast.LENGTH_SHORT).show();
}
return true;
}
else if(nBtnID == mFillingBtn.getId()){
mSCanvas.setSettingViewSizeOption(SCanvasConstants.SCANVAS_SETTINGVIEW_FILLING, SCanvasConstants.SCANVAS_SETTINGVIEW_SIZE_MINI);
if(mSCanvas.getCanvasMode()==SCanvasConstants.SCANVAS_MODE_INPUT_FILLING){
mSCanvas.toggleShowSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_FILLING);
}
else{
mSCanvas.setCanvasMode(SCanvasConstants.SCANVAS_MODE_INPUT_FILLING);
mSCanvas.showSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_FILLING, true);
updateModeState();
Toast.makeText(mContext, "Tap Canvas to fill color", Toast.LENGTH_SHORT).show();
}
return true;
}
return false;
}
};
// insert image
private OnClickListener mInsertBtnClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (v.equals(mInsertBtn)) {
callGalleryForInputImage(REQUEST_CODE_INSERT_IMAGE_OBJECT);
}
}
};
// color picker mode
private OnClickListener mColorPickerListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (v.equals(mColorPickerBtn)) {
// Toggle
boolean bIsColorPickerMode = !mSCanvas.isColorPickerMode();
mSCanvas.setColorPickerMode(bIsColorPickerMode);
mColorPickerBtn.setSelected(bIsColorPickerMode);
}
}
};
// Update tool button
private void updateModeState(){
int nCurMode = mSCanvas.getCanvasMode();
mPenBtn.setSelected(nCurMode==SCanvasConstants.SCANVAS_MODE_INPUT_PEN);
mEraserBtn.setSelected(nCurMode==SCanvasConstants.SCANVAS_MODE_INPUT_ERASER);
mTextBtn.setSelected(nCurMode==SCanvasConstants.SCANVAS_MODE_INPUT_TEXT);
mFillingBtn.setSelected(nCurMode==SCanvasConstants.SCANVAS_MODE_INPUT_FILLING);
// Reset color picker tool when Eraser Mode
if(nCurMode==SCanvasConstants.SCANVAS_MODE_INPUT_ERASER)
mSCanvas.setColorPickerMode(false);
mColorPickerBtn.setEnabled(nCurMode!=SCanvasConstants.SCANVAS_MODE_INPUT_ERASER);
mColorPickerBtn.setSelected(mSCanvas.isColorPickerMode());
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK){
if(data == null)
return;
if(requestCode == REQUEST_CODE_INSERT_IMAGE_OBJECT) {
Uri imageFileUri = data.getData();
String imagePath = SPenSDKUtils.getRealPathFromURI(this, imageFileUri);
insertImageObject(imagePath);
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
SubMenu fileMenu = menu.addSubMenu("File");
fileMenu.add(MENU_FILE_GROUP, MENU_FILE_1, 1, "Menu1");
fileMenu.add(MENU_FILE_GROUP, MENU_FILE_2, 2, "Menu2");
SubMenu dataMenu = menu.addSubMenu("Data");
dataMenu.add(MENU_DATA_GROUP, MENU_DATA_1, 1, "Data1");
dataMenu.add(MENU_DATA_GROUP, MENU_DATA_2, 2, "Data2");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onMenuOpened(int featureId, Menu menu){
super.onMenuOpened(featureId, menu);
if (menu == null)
return true;
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch(item.getItemId()) {
case MENU_FILE_1:
Toast.makeText(mContext, "File1 menu item selected.", Toast.LENGTH_SHORT).show();
break;
case MENU_FILE_2:
Toast.makeText(mContext, "File2 menu item selected.", Toast.LENGTH_SHORT).show();
break;
case MENU_DATA_1:
Toast.makeText(mContext, "Data1 menu item selected.", Toast.LENGTH_SHORT).show();
break;
case MENU_DATA_2:
Toast.makeText(mContext, "Data2 menu item selected.", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
// Call Gallery
private void callGalleryForInputImage(int nRequestCode){
try {
Intent galleryIntent;
galleryIntent = new Intent();
galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
galleryIntent.setType("image/*");
galleryIntent.setClassName("com.cooliris.media", "com.cooliris.media.Gallery");
startActivityForResult(galleryIntent, nRequestCode);
} catch(ActivityNotFoundException e) {
Intent galleryIntent;
galleryIntent = new Intent();
galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
galleryIntent.setType("image/*");
startActivityForResult(galleryIntent, nRequestCode);
e.printStackTrace();
}
}
// Get the minimum image scaled rect which is fit to current screen
Rect getMiniumCanvasRect(String strImagePath, int nMargin){
DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager wm = (WindowManager)this.getSystemService(Context.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(displayMetrics);
int nScreenWidth = displayMetrics.widthPixels - nMargin*2;
int nScreenHeight = displayMetrics.heightPixels - nMargin*2;
// Make more small for screen rotation T.T
if(nScreenWidth<nScreenHeight)
nScreenHeight = nScreenWidth;
else
nScreenWidth = nScreenHeight;
int nImageWidth = nScreenWidth;
int nImageHeight = nScreenHeight;
if(strImagePath!=null){
BitmapFactory.Options opts = SPenSDKUtils.getBitmapSize(strImagePath);
nImageWidth = opts.outWidth;
nImageHeight = opts.outHeight;
}
float fResizeWidth = (float) nScreenWidth / nImageWidth;
float fResizeHeight = (float) nScreenHeight / nImageHeight;
float fResizeRatio;
// Fit to Height
if(fResizeWidth>fResizeHeight){
fResizeRatio = fResizeHeight;
}
// Fit to Width
else {
fResizeRatio = fResizeWidth;
}
return new Rect(0,0, (int)(nImageWidth*fResizeRatio), (int)(nImageHeight*fResizeRatio));
}
// Load SAMM file
boolean loadSAMMFile(String strFileName){
if(mSCanvas.isAnimationMode()){
// It must be not animation mode.
}
else {
// set progress dialog
mSCanvas.setProgressDialogSetting("Loading", "Please wait while loading...", ProgressDialog.STYLE_HORIZONTAL, false);
// canvas option setting
SOptionSCanvas canvasOption = mSCanvas.getOption();
if(canvasOption == null)
return false;
canvasOption.mSAMMOption.setConvertCanvasSizeOption(PreferencesOfSAMMOption.getPreferenceLoadCanvasSize(mContext));
canvasOption.mSAMMOption.setConvertCanvasHorizontalAlignOption(PreferencesOfSAMMOption.getPreferenceLoadCanvasHAlign(mContext));
canvasOption.mSAMMOption.setConvertCanvasVerticalAlignOption(PreferencesOfSAMMOption.getPreferenceLoadCanvasVAlign(mContext));
// option setting
mSCanvas.setOption(canvasOption);
// show progress for loading data
if(mSCanvas.loadSAMMFile(strFileName, true, true, true)){
// Loading Result can be get by callback function
}
else{
Toast.makeText(this, "Load AMS File("+ strFileName +") Fail!", Toast.LENGTH_LONG).show();
return false;
}
}
return true;
}
// insert Image Object
boolean insertImageObject(String imagePath){
// Check Valid Image File
if(!SPenSDKUtils.isValidImagePath(imagePath))
{
Toast.makeText(this, "Invalid image path or web image", Toast.LENGTH_LONG).show();
return false;
}
RectF rectF = getDefaultImageRect(imagePath);
SObjectImage sImageObject = new SObjectImage();
sImageObject.setRect(rectF);
sImageObject.setImagePath(imagePath);
// canvas option setting
SOptionSCanvas canvasOption = mSCanvas.getOption();
if(canvasOption == null)
return false;
canvasOption.mSAMMOption.setContentsQuality(PreferencesOfSAMMOption.getPreferenceSaveImageQuality(mContext));
// option setting
mSCanvas.setOption(canvasOption);
if(mSCanvas.insertSAMMImage(sImageObject, true)){
//Toast.makeText(this, "Insert image file("+ imagePath +") Success!", Toast.LENGTH_SHORT).show();
return true;
}
else{
Toast.makeText(this, "Insert image file("+ imagePath +") Fail!", Toast.LENGTH_LONG).show();
return false;
}
}
// get default image rect
RectF getDefaultImageRect(String strImagePath){
// Rect Region : Consider image real size
BitmapFactory.Options opts = SPenSDKUtils.getBitmapSize(strImagePath);
int nImageWidth = opts.outWidth;
int nImageHeight = opts.outHeight;
int nScreenWidth = mSCanvas.getWidth();
int nScreenHeight = mSCanvas.getHeight();
int nBoxRadius = (nScreenWidth>nScreenHeight) ? nScreenHeight/4 : nScreenWidth/4;
int nCenterX = nScreenWidth/2;
int nCenterY = nScreenHeight/2;
if(nImageWidth > nImageHeight)
return new RectF(nCenterX-nBoxRadius,nCenterY-(nBoxRadius*nImageHeight/nImageWidth),nCenterX+nBoxRadius,nCenterY+(nBoxRadius*nImageHeight/nImageWidth));
else
return new RectF(nCenterX-(nBoxRadius*nImageWidth/nImageHeight),nCenterY-nBoxRadius,nCenterX+(nBoxRadius*nImageWidth/nImageHeight),nCenterY+nBoxRadius);
}
}