package com.samsung.spensdk.example.tools;
import java.io.File;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.RelativeLayout.LayoutParams;
import com.samsung.samm.common.SObject;
import com.samsung.samm.common.SObjectFilling;
import com.samsung.samm.common.SObjectImage;
import com.samsung.samm.common.SObjectStroke;
import com.samsung.samm.common.SObjectText;
import com.samsung.spensdk.SCanvasView;
import com.samsung.spensdk.applistener.FileProcessListener;
import com.samsung.spensdk.applistener.SCanvasInitializeListener;
import com.samsung.spensdk.example.R;
public class ToolFileTotalInfoShow extends Activity {
/** Called when the activity is first created. */
static public final String EXTRA_SAMM_FILE_INFO = "ExtraSAMMFilePath";
static public final String EXTRA_SCANVAS_WIDTH = "ExtraScanvasWidth";
static public final String EXTRA_SCANVAS_HEIGHT = "ExtraScanvasHeight";
static public final String EXTRA_SCANVAS_PUTEXTRA = "ExtraScanvasPutExtra";
//==============================
// Constants
//==============================
private static final int TOTAL_INFO_NUM = 8; // The number of basic data
private static final int INFO_APPLICATION_ID = 0; // basic data
private static final int INFO_TITLE_INDEX = 1; // basic data
private static final int INFO_BACKGROUNDAUDIO_INDEX = 2; // basic data
private static final int INFO_BACKGROUNDCOLOR_INDEX = 3; // basic data
private static final int INFO_BACKGROUNDIMAGE_INDEX = 4; // basic data
private static final int INFO_EXTRA_DATA = 5; // basic data
private static final int INFO_TAG_DATA = 6; // basic data
private static final int INFO_TAG_PREFERENCE = 7; // basic data
private String APPID_TAG = "[Application ID]";
private String TITLE_TAG = "[Title]";
private String BACKGROUNDAUDIO_TAG = "[BACKGROUND Audio]";
private String BACKGROUNDCOLOR_TAG = "[BACKGROUND Color]";
private String BACKGROUNDIMAGE_TAG = "[BACKGROUND IMAGE]";
private String IMAGE_TAG = "[Image]";
private String TEXT_TAG = "[Text]";
private String STROKE_TAG = "[Stroke]";
private String EXTRA_TAG = "[Extra Data]";
private String TAG_TAG = "[TAG Data]";
private String PREFERENCE_TAG = "[Preference]";
//==============================
// Local Variables
//==============================
Context mContext = null;
private ListAdapter mListAdapter = null;
private SCanvasView mSCanvas = null;
private ListView mlistView = null;
private boolean mIncludeOnlyVisible = false; // get all objects
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.libtest);
mContext = this;
// create list and button
createUI();
// 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
public boolean dispatchKeyEvent(KeyEvent event) {
// TODO Auto-generated method stub
super.dispatchKeyEvent(event);
if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
Intent intent = getIntent();
if(intent == null)
return false;
String tmpStr = intent.getStringExtra(EXTRA_SAMM_FILE_INFO);
if(tmpStr == null)
return false;
intent.putExtra(EXTRA_SAMM_FILE_INFO, tmpStr);
setResult(RESULT_OK, intent);
finish();
}
return true;
}
private boolean loadSSAMObject(String strPath) {
if(mSCanvas==null)
return false;
File f = new File (strPath);
if (!f.exists()){
Toast.makeText(ToolFileTotalInfoShow.this, "Saved Test Image is not exist", Toast.LENGTH_LONG).show();
return false;
}
if(!mSCanvas.loadSAMMFile(strPath, false, false, true)){
// if(!mCanvasView.loadSAMMFile(strPath, true)){
Toast.makeText(this, "Load SAMMFile Fail!", Toast.LENGTH_SHORT).show();
return false;
}
mSCanvas.setVisibility(View.GONE);
return true;
}
private void createUI() {
mListAdapter = new ListAdapter(this);
mlistView = (ListView)findViewById(R.id.objectList);
mlistView.setAdapter(mListAdapter);
mlistView.setItemsCanFocus(false);
mlistView.setTextFilterEnabled(true);
mlistView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
showObjectInfo(position);
}
});
//Set real drawing view size, Set screen size for test
//Display display = ((WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
//int nCanvasWidth = display.getWidth();
//int nCanvasHeight = display.getHeight();
Intent intent = getIntent();
if(intent == null)
return;
int nTmpWidth = intent.getIntExtra(EXTRA_SCANVAS_WIDTH, 0);
int nTmpHeight = intent.getIntExtra(EXTRA_SCANVAS_HEIGHT, 0);
if(nTmpWidth <= 0 || nTmpHeight <= 0)
return;
//====================================
// Create SCanvasView dynamically
//====================================
RelativeLayout layout = (RelativeLayout)findViewById(R.id.canvas_container);
LayoutParams params = new LayoutParams(nTmpWidth, nTmpHeight);
mSCanvas = new SCanvasView(mContext);
mSCanvas.setLayoutParams(params);
layout.addView(mSCanvas);
//====================================================================================
//
// Set Callback Listener(Interface)
//
//====================================================================================
SCanvasInitializeListener scanvasInitializeListener = new SCanvasInitializeListener() {
@Override
public void onInitialized() {
//--------------------------------------------
// Start SCanvasView/CanvasView Task Here
//--------------------------------------------
Intent intent = getIntent();
if(intent == null)
return;
String tmpStr = intent.getStringExtra(EXTRA_SAMM_FILE_INFO);
if(tmpStr == null)
return;
if(loadSSAMObject(tmpStr))
mListAdapter.updateDisplay();
else
return;
}
};
// Set the initialization finish listener
mSCanvas.setSCanvasInitializeListener(scanvasInitializeListener);
//------------------------------------------------
// File Processing
//------------------------------------------------
FileProcessListener mFileProgressChange = new FileProcessListener() {
@Override
public void onChangeProgress(int nProgress) {
//Log.i(TAG, "Progress = " + nProgress);
}
@Override
public void onLoadComplete(boolean bLoadResult) {
if(bLoadResult){
// Show Application Identifier
mListAdapter.updateDisplay();
String appID = mSCanvas.getAppID();
Toast.makeText(ToolFileTotalInfoShow.this, "Load AMS File("+ appID + ") Success!", Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(ToolFileTotalInfoShow.this, "Load AMS File Fail!", Toast.LENGTH_LONG).show();
}
}
};
mSCanvas.setFileProcessListener(mFileProgressChange);
// Caution:
// Do NOT load file or start animation here because we don't know canvas size here.
// Start such SCanvasView Task at onInitialize() of SCanvasInitializeListener
}
//=================================================================
// List adapter : The kind of Object (Title, BackGroundColor, Text, Image, BackGroundAudio)
//=================================================================
public class ListAdapter extends BaseAdapter {
public ListAdapter(Context context) {
}
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
final LayoutInflater inflater = getLayoutInflater();
convertView = inflater.inflate(R.layout.libtest_list_item, parent, false);
}
// UI Item
ImageView im = (ImageView)convertView.findViewById(R.id.itemImg);
TextView tvObjectattribute= (TextView)convertView.findViewById(R.id.objectattibute);
TextView tvObjectContent= (TextView)convertView.findViewById(R.id.objectcontent);
// TextView itemText= (TextView)convertView.findViewById(R.id.itemText);
//==================================
// Show basic data
//==================================
if(position<TOTAL_INFO_NUM){
if(position == INFO_APPLICATION_ID)
{
// Icon image
im.setImageDrawable(getResources().getDrawable(R.drawable.list_icon_appid));
// The kind of basic data
tvObjectattribute.setText(APPID_TAG);
tvObjectattribute.setTextColor(0xFF00B8FF);
// Basic data information
tvObjectContent.setText(mSCanvas.getAppID());
}
else if(position == INFO_TITLE_INDEX) {
// Icon image
im.setImageDrawable(getResources().getDrawable(R.drawable.list_icon_title));
// The kind of basic data
tvObjectattribute.setText(TITLE_TAG);
tvObjectattribute.setTextColor(0xFF00B8FF);
// Basic data information
tvObjectContent.setText(mSCanvas.getTitle());
}
else if(position == INFO_BACKGROUNDAUDIO_INDEX) {
// Icon image
im.setImageDrawable(getResources().getDrawable(R.drawable.list_icon_bgaudio));
// The kind of basic data
tvObjectattribute.setText(BACKGROUNDAUDIO_TAG);
tvObjectattribute.setTextColor(0xFF00B8FF);
// Basic data information
tvObjectContent.setText("Path : " + mSCanvas.getBGAudioFile());
}
else if(position == INFO_BACKGROUNDCOLOR_INDEX) {
// Icon image
im.setImageDrawable(getResources().getDrawable(R.drawable.list_icon_bgcolor));
// The kind of basic data
tvObjectattribute.setText(BACKGROUNDCOLOR_TAG);
tvObjectattribute.setTextColor(0xFF00B8FF);
// Basic data information
if(mSCanvas.getBGImagePath() == null)
tvObjectContent.setText("Color:" + mSCanvas.getBGColor());
else
tvObjectContent.setText("Color:" + "0");
}
else if(position == INFO_BACKGROUNDIMAGE_INDEX) {
// Icon image
im.setImageDrawable(getResources().getDrawable(R.drawable.list_icon_bgcolor));
// The kind of basic data
tvObjectattribute.setText(BACKGROUNDIMAGE_TAG);
tvObjectattribute.setTextColor(0xFF00B8FF);
// Basic data information
// tvObjectContent.setText("Path:" + mSCanvas.getBGImagePath());
tvObjectContent.setText("Path:" + mSCanvas.getBGImagePathDecoded());
}
else if(position == INFO_EXTRA_DATA) {
// Icon image
im.setImageDrawable(getResources().getDrawable(R.drawable.list_icon_extra));
// The kind of basic data
tvObjectattribute.setText(EXTRA_TAG);
tvObjectattribute.setTextColor(0xFF00B8FF);
// Basic data information
tvObjectContent.setText("Extra data:" +
mSCanvas.getStringExtra(EXTRA_SCANVAS_PUTEXTRA, null));
}
else if(position == INFO_TAG_DATA) {
// Icon image
im.setImageDrawable(getResources().getDrawable(R.drawable.list_icon_tag));
// The kind of basic data
tvObjectattribute.setText(TAG_TAG);
tvObjectattribute.setTextColor(0xFF00B8FF);
// Basic data information
String[] tagArray = mSCanvas.getTags();
String strTags = null;
if(tagArray != null) {
StringBuffer res = new StringBuffer();
for(String tag : tagArray){
if(res.length()==0)
res.append(tag);
else{
res.append("; " + tag);
}
}
strTags = res.toString();
res.delete(0, res.length());
}
tvObjectContent.setText("TAG data:" + strTags);
}
else if(position == INFO_TAG_PREFERENCE) {
// Icon image
im.setImageDrawable(getResources().getDrawable(R.drawable.list_icon_preference));
// The kind of basic data
tvObjectattribute.setText(PREFERENCE_TAG);
tvObjectattribute.setTextColor(0xFF00B8FF);
// Basic data information
String strTemp;
if(mSCanvas.getCheckPreference() == 0)
strTemp = "Normal";
else if(mSCanvas.getCheckPreference() == 1)
strTemp = "Favorite";
else
strTemp = "Custom";
tvObjectContent.setText("Preference:" + strTemp);
}
}
//==================================
// Show Object data
//==================================
else {
// get each Object
int nMaxObjectNum = mSCanvas.getSAMMObjectNum(mIncludeOnlyVisible);
int nCurObjectIndex = position - TOTAL_INFO_NUM;
int nCurObjectNum = nCurObjectIndex + 1;
if(nCurObjectIndex<0 || nCurObjectIndex>=nMaxObjectNum)
return convertView;
SObject sammObject = mSCanvas.getSAMMObject(nCurObjectIndex, mIncludeOnlyVisible);
if(sammObject == null) {
return convertView;
}
String tempString = getSObjectAttributeInfo(sammObject);
if(sammObject instanceof SObjectStroke) {
// Icon image
im.setImageDrawable(getResources().getDrawable(R.drawable.tool_ic_pen_press));
// Show object attribute
tvObjectattribute.setTextColor(0xFF00B8FF);
tvObjectattribute.setText("[" + nCurObjectNum + "] " + tempString);
// Object Information
tvObjectContent.setText(sammObject.getObjectInfo());
}
else if(sammObject instanceof SObjectImage) {
// Icon image
im.setImageDrawable(getResources().getDrawable(R.drawable.tool_ic_attach_press));
// Show object attribute
tvObjectattribute.setTextColor(0xFF00B8FF);
tvObjectattribute.setText("[" + nCurObjectNum + "] " + tempString);
// Object Information
tvObjectContent.setText(sammObject.getObjectInfo());
}
else if(sammObject instanceof SObjectText) {
// Icon image
im.setImageDrawable(getResources().getDrawable(R.drawable.tool_ic_text_press));
// Show object attribute
tvObjectattribute.setTextColor(0xFF00B8FF);
tvObjectattribute.setText("[" + nCurObjectNum + "] " + tempString);
// Object Information
tvObjectContent.setText(sammObject.getObjectInfo());
}
else if(sammObject instanceof SObjectFilling) {
// Icon Image
im.setImageDrawable(getResources().getDrawable(R.drawable.tool_ic_filling_press));
// object property
tvObjectattribute.setTextColor(0xFF00B8FF);
tvObjectattribute.setText("[" + nCurObjectNum + "] " + tempString);
// Object info
tvObjectContent.setText(sammObject.getObjectInfo());
}
else {
// Icon image
im.setImageDrawable(null);
// Object Information
tvObjectContent.setText("NO INFORMATION");
// Show the kind of object
//itemText.setText("Unknown Object");
}
}
return convertView;
}
public void updateDisplay() {
this.notifyDataSetChanged();
}
@Override
public int getCount() {
if(mSCanvas!=null){
int nSAMMObjectNum = mSCanvas.getSAMMObjectNum(mIncludeOnlyVisible);
if(nSAMMObjectNum<0) return 0;
else return nSAMMObjectNum + TOTAL_INFO_NUM;
}
else{
return 0;
}
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
}
private void showObjectInfo(int pos) {
LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
// View layout = inflater.inflate(R.layout.libtest_textview, (ViewGroup)findViewById(R.id.objectdetails));
// Second parameter of LayoutInflater.inflate must be root view
View layout = inflater.inflate(R.layout.libtest_textview, (ViewGroup)findViewById(R.id.textdialoglayout));
AlertDialog.Builder textInputDialog = new AlertDialog.Builder(mContext);
String msg;
textInputDialog.setTitle("Object Information");
if(pos ==INFO_APPLICATION_ID)
{
msg = APPID_TAG;
textInputDialog.setMessage(msg + "\n\n" + "AppID:" + mSCanvas.getAppID());
}
else if(pos == INFO_TITLE_INDEX) {
msg = TITLE_TAG;
textInputDialog.setMessage(msg + "\n\n" + "Title:" + mSCanvas.getTitle());
}
else if(pos == INFO_BACKGROUNDAUDIO_INDEX) {
msg = BACKGROUNDAUDIO_TAG;
textInputDialog.setMessage(msg + "\n\n" + "Path:" + mSCanvas.getBGAudioFile());
}
else if(pos == INFO_BACKGROUNDCOLOR_INDEX) {
msg = BACKGROUNDCOLOR_TAG;
textInputDialog.setMessage(msg + "\n\n" + "Color:" + mSCanvas.getBGColor());
}
else if(pos == INFO_BACKGROUNDIMAGE_INDEX) {
msg = BACKGROUNDIMAGE_TAG;
textInputDialog.setMessage(msg + "\n\n" + "Path:" + mSCanvas.getBGImagePath());
}
else if(pos == INFO_EXTRA_DATA) {
msg = EXTRA_TAG;
textInputDialog.setMessage(msg + "\n\n" + "Extra data:" +
mSCanvas.getStringExtra(EXTRA_SCANVAS_PUTEXTRA, null));
}
else if(pos == INFO_TAG_DATA) {
msg = TAG_TAG;
String[] tagArray = mSCanvas.getTags();
String strTags = null;
if(tagArray != null) {
StringBuffer res = new StringBuffer();
for(String tag : tagArray){
if(res.length()==0)
res.append(tag);
else{
res.append("; " + tag);
}
}
strTags = res.toString();
res.delete(0, res.length());
}
textInputDialog.setMessage(msg + "\n\n" + "Tag data:" + strTags);
}
else if(pos == INFO_TAG_PREFERENCE) {
msg = PREFERENCE_TAG;
String strTemp;
if(mSCanvas.getCheckPreference() == 0)
strTemp = "Normal";
else if(mSCanvas.getCheckPreference() == 1)
strTemp = "Favorite";
else
strTemp = "Custom";
textInputDialog.setMessage(msg + "\n\n" + "Preference:" + strTemp);
}
else {
int nCurObjectIndex = pos - TOTAL_INFO_NUM;
SObject sammObject = mSCanvas.getSAMMObject(nCurObjectIndex, mIncludeOnlyVisible);
if(sammObject == null)
return;
String tempString = getSObjectAttributeInfo(sammObject);
if(sammObject instanceof SObjectStroke){
msg = STROKE_TAG;
textInputDialog.setMessage(msg + "\n\n" + tempString + "\n\n" + sammObject.getObjectInfo());
}
else if(sammObject instanceof SObjectImage){
msg = IMAGE_TAG;
textInputDialog.setMessage(msg + "\n\n" + tempString + "\n\n" + sammObject.getObjectInfo());
}
else if(sammObject instanceof SObjectText){
msg = TEXT_TAG;
textInputDialog.setMessage(msg + "\n\n" + tempString + "\n\n" + sammObject.getObjectInfo());
}
}
textInputDialog.setView(layout);
AlertDialog ad = textInputDialog.create();
ad.show();
}
private String getSObjectAttributeInfo(SObject sammObject) {
String tempString = "Style = " + sammObject.getStyle() + ", " + "Color = " +
sammObject.getColor() + ", " + "Size = " + sammObject.getSize() + ", " + "Rect.left = " +
sammObject.getRect().left + ", " + "Rect.right = " + sammObject.getRect().right +
", " + "Rect.top = " + sammObject.getRect().top + ", " + "Rect.bottom = " +
sammObject.getRect().bottom/* + ", " + "PageIndex = " + sammObject.getPageIndex() +
", " + "RotateAngle = " + sammObject.getRotateAngle() +
", " + "Hypertext = " + sammObject.getHyperText() +
", " + "Description = " + sammObject.getDescription() +
", " + "Latitude = " + sammObject.getLatitude() +
", " + "Longitude = " + sammObject.getLongitude()*/;
return tempString;
}
}