package com.samsung.spensdk.example.settingview; import java.util.HashMap; import android.app.Activity; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.util.Log; import android.view.View; 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.TextView; import android.widget.Toast; import com.samsung.samm.common.SAMMLibConstants; import com.samsung.samm.common.SObjectStroke; import com.samsung.samm.common.SObjectText; 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.SettingFillingChangeListener; import com.samsung.spensdk.applistener.SettingStrokeChangeListener; import com.samsung.spensdk.applistener.SettingTextChangeListener; import com.samsung.spensdk.applistener.SettingViewShowListener; import com.samsung.spensdk.example.R; import com.samsung.spensdk.example.tools.SPenSDKUtils; public class SPen_Example_SettingView extends Activity { private final String TAG = "SPenSDK Sample"; private final boolean SHOW_LOG = false; //============================== // 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"; //============================== // Variables //============================== Context mContext = null; private FrameLayout mLayoutContainer; private RelativeLayout mCanvasContainer; private SCanvasView mSCanvas; private ImageView mPenBtn; private ImageView mEraserBtn; private ImageView mTextBtn; private ImageView mFillingBtn; private ImageView mColorPickerBtn; private ImageView mUndoBtn; private ImageView mRedoBtn; private TextView mSettingInfo; private ImageView mColorSettingInfo; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.editor_settingview); 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); 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); mSettingInfo = (TextView) findViewById(R.id.settingInfo); mColorSettingInfo = (ImageView) findViewById(R.id.colorsettingInfo); //------------------------------------ // Create SCanvasView //------------------------------------ mLayoutContainer = (FrameLayout) findViewById(R.id.layout_container); mCanvasContainer = (RelativeLayout) findViewById(R.id.canvas_container); mSCanvas = new SCanvasView(mContext); mCanvasContainer.addView(mSCanvas); //------------------------------------ // 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 mSCanvas.setCanvasMode(SCanvasConstants.SCANVAS_MODE_INPUT_PEN); mSCanvas.setSettingViewSizeOption(SCanvasConstants.SCANVAS_SETTINGVIEW_PEN, SCanvasConstants.SCANVAS_SETTINGVIEW_SIZE_EXT); mSCanvas.showSettingView(SCanvasConstants.SCANVAS_SETTINGVIEW_PEN, true); updateModeState(); } }); //------------------------------------------------ // 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); } } } }); //------------------------------------------------ // SettingView Show Listener : Optional //------------------------------------------------ mSCanvas.setSettingViewShowListener(new SettingViewShowListener() { @Override public void onEraserSettingViewShow(boolean bVisible) { if(SHOW_LOG){ if(bVisible) Log.i(TAG, "Eraser setting view is shown"); else Log.i(TAG, "Eraser setting view is closed"); } } @Override public void onPenSettingViewShow(boolean bVisible) { if(SHOW_LOG){ if(bVisible) Log.i(TAG, "Pen setting view is shown"); else Log.i(TAG, "Pen setting view is closed"); } if(bVisible){ SettingStrokeInfo strokeInfo = mSCanvas.getSettingViewStrokeInfo(); if(strokeInfo != null) { updateColor(strokeInfo.getStrokeColor()); } } } @Override public void onTextSettingViewShow(boolean bVisible) { if(SHOW_LOG){ if(bVisible) Log.i(TAG, "Text setting view is shown"); else Log.i(TAG, "Text setting view is closed"); } if(bVisible){ SettingTextInfo textInfo = mSCanvas.getSettingViewTextInfo(); if(textInfo != null) { updateColor(textInfo.getTextColor()); } } } @Override public void onFillingSettingViewShow(boolean bVisible) { if(SHOW_LOG){ if(bVisible) Log.i(TAG, "Text setting view is shown"); else Log.i(TAG, "Text setting view is closed"); } if(bVisible){ SettingFillingInfo fillingInfo = mSCanvas.getSettingViewFillingInfo(); if(fillingInfo != null) { updateColor(fillingInfo.getFillingColor()); } } } }); //------------------------------------------------ // SettingStrokeChangeListener Listener //------------------------------------------------ mSCanvas.setSettingStrokeChangeListener(new SettingStrokeChangeListener() { @Override public void onClearAll(boolean bClearAllCompleted) { if(bClearAllCompleted) updateSetting("Clear All is completed"); } @Override public void onEraserWidthChanged(int eraserWidth) { updateSetting("Eraser width is changed : " + eraserWidth); } @Override public void onStrokeColorChanged(int strokeColor) { updateColor(strokeColor); } @Override public void onStrokeStyleChanged(int strokeStyle) { if (strokeStyle == SObjectStroke.SAMM_STROKE_STYLE_PENCIL) updateSetting("Stroke Style = Pen"); else if (strokeStyle == SObjectStroke.SAMM_STROKE_STYLE_BRUSH) updateSetting("Stroke Style = Brush"); else if (strokeStyle == SObjectStroke.SAMM_STROKE_STYLE_CHINESE_BRUSH) updateSetting("Stroke Style = Chinese Brush"); else if (strokeStyle == SObjectStroke.SAMM_STROKE_STYLE_CRAYON) updateSetting("Stroke Style = Pencil Crayon"); else if (strokeStyle == SObjectStroke.SAMM_STROKE_STYLE_MARKER) updateSetting("Stroke Style = Marker"); else if (strokeStyle == SObjectStroke.SAMM_STROKE_STYLE_ERASER) updateSetting("Stroke Style = Eraser"); } @Override public void onStrokeWidthChanged(int strokeWidth) { updateSetting("Stroke width is changed : " + strokeWidth); } @Override public void onStrokeAlphaChanged(int strokeAlpha) { updateSetting("Alpha is changed : " + strokeAlpha); } }); //------------------------------------------------ // OnSettingTextChangeListener Listener //------------------------------------------------ mSCanvas.setSettingTextChangeListener(new SettingTextChangeListener(){ @Override public void onTextColorChanged(int textColor) { updateColor(textColor); } @Override public void onTextFontChanged(String fontName) { updateSetting("Font is changed : " + fontName); } @Override public void onTextSizeChanged(int textSize) { updateSetting("Text size is changed : " + textSize); } @Override public void onTextStyleChanged(int textStyle) { StringBuilder textStyleString = new StringBuilder(); boolean bDefault = (textStyle == SObjectText.SAMM_TEXT_STYLE_NONE); if(bDefault) textStyleString.append("Default "); boolean bBold = ((textStyle & SObjectText.SAMM_TEXT_STYLE_BOLD)!=0); if(bBold) textStyleString.append("Bold "); boolean bItalic = ((textStyle & SObjectText.SAMM_TEXT_STYLE_ITALIC)!=0); if(bItalic) textStyleString.append("Italic "); boolean bUnderline = ((textStyle & SObjectText.SAMM_TEXT_STYLE_UNDERLINE)!=0); if(bUnderline) textStyleString.append("Underline "); updateSetting("Text style is changed : " + textStyleString); } @Override public void onTextAlignmentChanged(int textHorizAlignment) { switch(textHorizAlignment){ case SAMMLibConstants.SAMM_ALIGN_NORMAL: updateSetting("Text alignment is changed as Left alignment"); break; case SAMMLibConstants.SAMM_ALIGN_CENTER: updateSetting("Text alignment is changed as Center alignment"); break; case SAMMLibConstants.SAMM_ALIGN_OPPOSITE: updateSetting("Text alignment is changed as Right alignment"); break; } } }); //------------------------------------------------ // SettingFillingChangeListener Listener //------------------------------------------------ mSCanvas.setSettingFillingChangeListener(new SettingFillingChangeListener(){ @Override public void onFillingColorChanged(int fillingColor) { updateColor(fillingColor); } }); mUndoBtn.setEnabled(false); mRedoBtn.setEnabled(false); mPenBtn.setSelected(true); // 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(); // 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(); } } Toast.makeText(mContext, "Long Click to show mini-setting view", 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; } }; // 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()); } private void updateSetting(String strInfo){ mSettingInfo.setText(strInfo); } private void updateColor(int nColor){ mSettingInfo.setBackgroundDrawable(new ColorDrawable(nColor)); mColorSettingInfo.setAlpha(Color.alpha(nColor)); // mSettingInfo.setAlpha(Color.alpha(nColor)); } }