package kr.co.icontrols.wallpadmain.popup; import com.artncore.WallPadDataMgr.WallpadStatusData; import com.artncore.commons.DataClasses; import com.artncore.commons.Sdb_DataClasses; import com.artncore.commons.define; import com.artncore.wallpadapi.Sdb_LivingRoomLightAPI; import com.artncore.wallpadapi.WallPadAPI; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.SeekBar; import com.util.LogUtil; import kr.co.icontrols.wallpadmain.MainActivity; import kr.co.icontrols.wallpadmain.PopupActivity; import kr.co.icontrols.wallpadmain.R; import kr.co.icontrols.wallpadmain.declare.*; import kr.co.icontrols.wallpadmain.util.POSITION; import kr.co.icontrols.wallpadsupport.*; import kr.co.icontrols.wallpadsupport.WpadImageView.TOUCH_KIND; import kr.co.icontrols.wallpadsupport.WpadSound.SND; public class ConfigurePreset extends WpadScreen { String TAG = "ConfigurePreset"; Context mContext; WpadImageView IMG_BACKGROUND; WpadImageView BTN_CLOSE, BTN_SAVE, BTN_CANCEL; WpadTextView TXT_TITLE, TXT_SUBTITLE_01, TXT_SUBTITLE_02; int nTitleSize = 35; int nSubTitleSize = 25; String[] strTitle = { "독서 모드 설정", "휴식 모드 설정", "영화 모드 설정", "사용자 모드 설정" }; private int nLivinglightPresetID = 0 ; private String strPresetInfo = null; // "Preset ID/전원:디밍:색온도" Ex) 1/on:10:1 // [Class] /** * 에너지미터 데이터 **/ private class EMData { Sdb_DataClasses.LivingEnergyMeterClass NewLivingEM; boolean ControlType; //false:밝기, true:색상 public EMData() { ControlType = false; NewLivingEM = new Sdb_DataClasses.LivingEnergyMeterClass(); } } private EMData mEMData = null; // [SeekBar Value] WpadImageView IMG_BACK_SEEKBAR_DIM; WpadImageView IMG_BACK_SEEKBAR_COLOR; SeekBar SEEKBAR_CTRL_LIGHT_DIM; SeekBar SEEKBAR_CTRL_LIGHT_COLOR; public static final int step = 1; public static final int max = 100; public static final int min = 10; public int DimSeekBarValue = 10; public int ColorSeekBarValue = 10; public String BR_CTRL_LIGHT_LIVINGROOM = "kr.co.icontrols.wallpadglobalscreen.BR_CTRL_LIGHT_LIVINGROOM"; public String BR_WALLPAD_DIAL_GLOBALSCREEN_TOUCH = "WALLPAD_DIAL_GLOBALSCREEN_TOUCH"; private WallPadAPI mWallPadAPI = null; private Sdb_LivingRoomLightAPI mSdb_LivingRoomLightAPI = null; // 거실에너지미터 // private LivingRoomEnergyMeterV2API mLivingRoomEnergyMeterV2API = null; // 대외향 - 거실 조명제어기 API public ConfigurePreset(Context context, RelativeLayout layout, WallPadAPI wallpadapi) { super(context, layout); try { Log.d(TAG, "[ConfigurePreset] ========== START =========="); mContext = context; initInfo(); mEMData = new EMData(); if (loadDeviceAPI(wallpadapi) >= 0) updateDeviceStatus(false); else EMDriverCheckHandler.sendEmptyMessage(0); IMG_BACKGROUND = new WpadImageView(context, TOUCH_KIND.NONE, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.IMAGES.BACKGROUND).W, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.IMAGES.BACKGROUND).H, R.drawable.back_popup_04, R.drawable.back_popup_04, ID.POPUPS.CONFIGUREPRESET.ELEMENTS.IMAGES.BACKGROUND); ViewRegistration(layout, IMG_BACKGROUND, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.IMAGES.BACKGROUND).X, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.IMAGES.BACKGROUND).Y); BTN_CLOSE = new WpadImageView(context, TOUCH_KIND.BUTTON, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.CLOSE).W, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.CLOSE).H, R.drawable.popup_btn_close_normal, R.drawable.popup_btn_close_pressed, ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.CLOSE); ViewRegistration(layout, BTN_CLOSE, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.CLOSE).X, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.CLOSE).Y); BTN_CLOSE.setTouchDelayMs(500); BTN_SAVE = new WpadImageView(context, TOUCH_KIND.BUTTON, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.SAVE).W, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.SAVE).H, R.drawable.popup_configurepreset_btn_save_normal, R.drawable.popup_configurepreset_btn_save_pressed, ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.SAVE); ViewRegistration(layout, BTN_SAVE, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.SAVE).X, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.SAVE).Y); BTN_SAVE.setTouchDelayMs(500); BTN_CANCEL = new WpadImageView(context, TOUCH_KIND.BUTTON, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.CANCEL).W, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.CANCEL).H, R.drawable.popup_configurepreset_btn_cancel_normal, R.drawable.popup_configurepreset_btn_cancel_pressed, ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.CANCEL); ViewRegistration(layout, BTN_CANCEL, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.CANCEL).X, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.CANCEL).Y); BTN_CANCEL.setTouchDelayMs(500); TXT_TITLE = new WpadTextView(context, false, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.TEXTS.TITLE).W, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.TEXTS.TITLE).H, Gravity.CENTER, Color.WHITE, nTitleSize, true, ID.POPUPS.CONFIGUREPRESET.ELEMENTS.TEXTS.TITLE); ViewRegistration(layout, TXT_TITLE, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.TEXTS.TITLE).X, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.TEXTS.TITLE).Y); TXT_TITLE.setText(strTitle[nLivinglightPresetID - 1]); TXT_SUBTITLE_01 = new WpadTextView(context, false, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.TEXTS.SUBTITLE_01).W, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.TEXTS.SUBTITLE_01).H, Gravity.CENTER, Color.WHITE, nSubTitleSize, true, ID.POPUPS.CONFIGUREPRESET.ELEMENTS.TEXTS.SUBTITLE_01); ViewRegistration(layout, TXT_SUBTITLE_01, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.TEXTS.SUBTITLE_01).X, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.TEXTS.SUBTITLE_01).Y); TXT_SUBTITLE_01.setText("밝기"); TXT_SUBTITLE_02 = new WpadTextView(context, false, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.TEXTS.SUBTITLE_02).W, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.TEXTS.SUBTITLE_02).H, Gravity.CENTER, Color.WHITE, nSubTitleSize, true, ID.POPUPS.CONFIGUREPRESET.ELEMENTS.TEXTS.SUBTITLE_02); ViewRegistration(layout, TXT_SUBTITLE_02, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.TEXTS.SUBTITLE_02).X, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.TEXTS.SUBTITLE_02).Y); TXT_SUBTITLE_02.setText("색온도"); registerSeekbar(); syncPresetValue(nLivinglightPresetID); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] ConfigurePreset(Context context, RelativeLayout layout)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void initInfo() { try { Intent intent = super.getScreenIntent(); int nPresetID = intent.getIntExtra(Common.LIVINGLIGHT_PRESET_ID , -1); nLivinglightPresetID = nPresetID; Log.d(TAG, "[initInfo] Common.LIVINGLIGHT_PRESET_ID : " + nLivinglightPresetID); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] initInfo()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private WallpadStatusData GetDB() { return ((PopupActivity)(super.getContext())).GetDBObj(); } @Override protected void onClose() { try { savePresetValue(nLivinglightPresetID, DimSeekBarValue, ColorSeekBarValue); super.onClose(); Log.d(TAG, "[onClose] ========== START =========="); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] onClose()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } @Override protected void onTouchEvent(View v, MotionEvent event) { try { super.onTouchEvent(v, event); int nTargetID = v.getId(); int nEvent = event.getAction(); if (nEvent == MotionEvent.ACTION_UP) { if (nTargetID == ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.CLOSE) { Sound().Play(SND.effect.TOUCH_LATCHED); ((PopupActivity)mContext).finish(); } else if (nTargetID == ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.SAVE) { // int nSoundTime = Sound().PlayMent(SND.setting.SETTING); // savePresetValue(nLivinglightPresetID, DimSeekBarValue, ColorSeekBarValue); // sendHandlerMsgDelayed(HANDLERMSG.FINISH_SCREEN, 0, 0, nSoundTime + 500); // QA 이관을 위한 임시코드...나중에는 원인분석을 해야 함 Sound().Play(SND.setting.SETTING); savePresetValue(nLivinglightPresetID, DimSeekBarValue, ColorSeekBarValue); sendHandlerMsgDelayed(HANDLERMSG.FINISH_SCREEN, 0, 0, 3000 + 500); } else if (nTargetID == ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.CANCEL) { Sound().Play(SND.effect.TOUCH_LATCHED); ((PopupActivity)mContext).finish(); } } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] onTouchEvent(View v, MotionEvent event)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } @Override protected int addBrActionFilter(String action) { return super.addBrActionFilter(action); } @Override protected void onBrReceive(Intent intent) { super.onBrReceive(intent); String strActionName = intent.getAction(); Log.i(TAG, "[onBrReceive] strActionName = " + strActionName); if (strActionName.equals(BR_CTRL_LIGHT_LIVINGROOM)) { Log.i(TAG, "[onBrReceive] BR_LIGHT"); updateDeviceStatus(false); updateDisplay(); } else if (strActionName.equals(define.NOTIFY_DAIL)) { Log.i(TAG, "[onBrReceive] NOTIFY_DAIL"); byte OnOff = intent.getByteExtra("ONOFF", (byte)0xEE); byte Dial = intent.getByteExtra("DIAL", (byte)0xEE); byte Level = intent.getByteExtra("LEVEL", (byte)0xEE); byte Color = intent.getByteExtra("COLOR", (byte)0xEE); Log.i(TAG, "[onBrReceive] OnOff [" + OnOff +"], Dial [" + Dial +"], Level [" + Level +"], Color [" + Color +"]"); setFinishTimerReset(); boolean LightOnOff = GetmData_LightOnOff(); Log.i(TAG, "LightOnOff : " + LightOnOff); Log.i(TAG, "mEMData.ControlType : " + mEMData.ControlType); if (LightOnOff == false) { if (OnOff == 1) { // 켜짐이면 if (Dial == 0) { // 조작 없음 이면 //Sound().Play(SND.effect.TOUCH_LATCHED); if (mEMData.ControlType) { // 기존에 색온도 조절 중으로 밝기 조절로 변경 mEMData.ControlType = false; } if ((DimSeekBarValue / 10) != (Level / 10)) SetDimSeekBarProgress(Level); if ((ColorSeekBarValue / 10) != (Color / 10)) SetColorSeekBarProgress(Color); } else if (Dial == 2) { // OFF 상태에서 조그버튼 길게 눌러 바로 색온도 조절 시 OnOff = 1; } } } if (OnOff == 1) { // 켜짐이면 if (mEMData.ControlType) { // 기존에 색온도 조절 중 if (Dial == 1) { // 디밍 조절중 mEMData.ControlType = false; } } else { // 기존에 밝기 조절 중 if (Dial == 2) { // 색온도 조절 중 mEMData.ControlType = true; } } if (Dial == 1) { // 디밍 조절중 SetDimSeekBarProgress(Level); } else if (Dial == 2) { // 색온도 조절 중 SetColorSeekBarProgress(Color); } } else { // 꺼짐 if (Dial == 0) { super.finish(); } } } } private void setPopupResult(String strValue) { try { Intent intent = new Intent(); intent.putExtra(Common.BR_SENDER_SCREEN, ID.POPUPS.POPUP_CONFIGUREPRESET); intent.putExtra(Common.BR_RECEIVE_SCREEN, ID.SCREENS.SCREEN_MAIN); intent.putExtra(Common.BR_LIVINGLIGHT_PRESET_INFO, strValue); super.setPopupResult(intent); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] setPopupResult()"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private POSITION getPosition(int nID) { // LOG("[GetPosition] nID = " + nID); POSITION position = new POSITION(); position.setConfigurePresetPopupPosition(117, 30, 790, 540); try { switch (nID) { case ID.POPUPS.CONFIGUREPRESET.ELEMENTS.IMAGES.BACKGROUND: position.setConfigurePresetPopupPosition(117, 30, 790, 540); return position; case ID.POPUPS.CONFIGUREPRESET.ELEMENTS.IMAGES.BACK_SEEKBAR_DIM: position.setConfigurePresetPopupPosition(375, 115, 28, 300); return position; case ID.POPUPS.CONFIGUREPRESET.ELEMENTS.IMAGES.BACK_SEEKBAR_COLOR: position.setConfigurePresetPopupPosition(608, 115, 28, 300); return position; case ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.CLOSE: position.setConfigurePresetPopupPosition(839, 43, 56, 56); return position; case ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.SAVE: position.setConfigurePresetPopupPosition(212, 485, 290, 64); return position; case ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.CANCEL: position.setConfigurePresetPopupPosition(522, 485, 290, 64); return position; case ID.POPUPS.CONFIGUREPRESET.ELEMENTS.TEXTS.TITLE: position.setConfigurePresetPopupPosition(119, 32, 786, 89); return position; case ID.POPUPS.CONFIGUREPRESET.ELEMENTS.TEXTS.SUBTITLE_01: position.setConfigurePresetPopupPosition(339, 425, 100, 50); return position; case ID.POPUPS.CONFIGUREPRESET.ELEMENTS.TEXTS.SUBTITLE_02: position.setConfigurePresetPopupPosition(572, 425, 100, 50); return position; default: return position; } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return position; } catch (Exception e) { Log.e(TAG, "[Exception] getPosition(int nID)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return position; } } // ================================================================================================= // [[ SeekBar 등록 ]] region // ================================================================================================= private void registerSeekbar() { //SeekBar 배경 등록 IMG_BACK_SEEKBAR_DIM = new WpadImageView(getContext(), TOUCH_KIND.BUTTON, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.IMAGES.BACK_SEEKBAR_DIM).W, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.IMAGES.BACK_SEEKBAR_DIM).H, R.drawable.popup_light_dim_seekbar_back, R.drawable.popup_light_dim_seekbar_back, ID.POPUPS.CONFIGUREPRESET.ELEMENTS.IMAGES.BACK_SEEKBAR_DIM); ViewRegistration(getLayout(), IMG_BACK_SEEKBAR_DIM, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.IMAGES.BACK_SEEKBAR_DIM).X, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.IMAGES.BACK_SEEKBAR_DIM).Y); IMG_BACK_SEEKBAR_COLOR = new WpadImageView(getContext(), TOUCH_KIND.BUTTON, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.IMAGES.BACK_SEEKBAR_COLOR).W, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.IMAGES.BACK_SEEKBAR_COLOR).H, R.drawable.popup_light_color_seekbar_back, R.drawable.popup_light_color_seekbar_back, ID.POPUPS.CONFIGUREPRESET.ELEMENTS.IMAGES.BACK_SEEKBAR_COLOR); ViewRegistration(getLayout(), IMG_BACK_SEEKBAR_COLOR, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.IMAGES.BACK_SEEKBAR_COLOR).X, getPosition(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.IMAGES.BACK_SEEKBAR_COLOR).Y); //SeekBar 등록 SEEKBAR_CTRL_LIGHT_DIM = new SeekBar(getContext()); SEEKBAR_CTRL_LIGHT_DIM.setId(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.SEEKBAR_DIM); SEEKBAR_CTRL_LIGHT_COLOR = new SeekBar(getContext()); SEEKBAR_CTRL_LIGHT_COLOR.setId(ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.SEEKBAR_COLOR); Bitmap ThumbSizeDim = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.light_dim_thumb); ThumbSizeDim = Bitmap.createScaledBitmap(ThumbSizeDim, WpadScale.getWidth(ThumbSizeDim.getWidth()), WpadScale.getWidth(ThumbSizeDim.getHeight()), true); ImageView IMG_THUMB_DIM = new ImageView(getContext()); IMG_THUMB_DIM.setImageBitmap(ThumbSizeDim); SEEKBAR_CTRL_LIGHT_DIM.setThumb(IMG_THUMB_DIM.getDrawable()); Bitmap ThumbSizeColor = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.light_color_thumb); ThumbSizeColor = Bitmap.createScaledBitmap(ThumbSizeColor, WpadScale.getWidth(ThumbSizeColor.getWidth()), WpadScale.getWidth(ThumbSizeColor.getHeight()), true); ImageView IMG_THUMB_COLOR = new ImageView(getContext()); IMG_THUMB_COLOR.setImageBitmap(ThumbSizeColor); SEEKBAR_CTRL_LIGHT_COLOR.setThumb(IMG_THUMB_COLOR.getDrawable()); Drawable mDrawable = getContext().getResources().getDrawable(R.drawable.transparent_background); SEEKBAR_CTRL_LIGHT_DIM.setProgressDrawable(mDrawable); SEEKBAR_CTRL_LIGHT_DIM.setProgress(0); // SEEKBAR_CTRL_LIGHT_DIM.setBackgroundColor(Color.RED); SEEKBAR_CTRL_LIGHT_COLOR.setProgressDrawable(mDrawable); SEEKBAR_CTRL_LIGHT_COLOR.setProgress(0); // SEEKBAR_CTRL_LIGHT_COLOR.setBackgroundColor(Color.RED); RelativeLayout.LayoutParams Params_Dim = new RelativeLayout.LayoutParams(WpadScale.getWidth(350 - WpadScale.getWidth(ThumbSizeDim.getWidth()) / 2), WpadScale.getHeight(80)); SEEKBAR_CTRL_LIGHT_DIM.setLayoutParams(Params_Dim); SEEKBAR_CTRL_LIGHT_DIM.setPadding((WpadScale.getWidth(ThumbSizeDim.getWidth()) / 2), 0, WpadScale.getWidth(ThumbSizeDim.getHeight()) / 2, 0); SEEKBAR_CTRL_LIGHT_DIM.setMax((max - min) / step); RelativeLayout.LayoutParams Params_Color = new RelativeLayout.LayoutParams(WpadScale.getWidth(350 - WpadScale.getWidth(ThumbSizeColor.getWidth()) / 2), WpadScale.getHeight(80)); SEEKBAR_CTRL_LIGHT_COLOR.setLayoutParams(Params_Color); SEEKBAR_CTRL_LIGHT_COLOR.setPadding((WpadScale.getWidth(ThumbSizeColor.getWidth()) / 2), 0, WpadScale.getWidth(ThumbSizeColor.getHeight()) / 2, 0); SEEKBAR_CTRL_LIGHT_COLOR.setMax((max - min) / step); SEEKBAR_CTRL_LIGHT_DIM.setRotation(270); SEEKBAR_CTRL_LIGHT_DIM.setOnSeekBarChangeListener(mOnDimSeekBarChangeListener); SEEKBAR_CTRL_LIGHT_COLOR.setRotation(270); SEEKBAR_CTRL_LIGHT_COLOR.setOnSeekBarChangeListener(mOnColorSeekBarChangeListener); SEEKBAR_CTRL_LIGHT_DIM.setTranslationX(110); SEEKBAR_CTRL_LIGHT_DIM.setTranslationY(195); SEEKBAR_CTRL_LIGHT_COLOR.setTranslationX(343); SEEKBAR_CTRL_LIGHT_COLOR.setTranslationY(195); getLayout().addView(SEEKBAR_CTRL_LIGHT_DIM); getLayout().addView(SEEKBAR_CTRL_LIGHT_COLOR); } /** * Seekbar 터치 시 동작 처리 * **/ SeekBar.OnSeekBarChangeListener mOnDimSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar) { try { if (seekBar.getId() == ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.SEEKBAR_DIM) { Log.i(TAG, "[onStopTrackingTouch] DimSeekBarValue [" + DimSeekBarValue + "]"); setFinishTimerReset(); /** * 디밍, 색온도 제어 시작 * **/ com.artncore.commons.DataClasses.EnergyMeterV2.Device TempEM = new DataClasses.EnergyMeterV2.Device(); if (mEMData.NewLivingEM.Data.LedLight == null) { Log.w(TAG, "[onStopTrackingTouch] mEMData.LivingEM.device.ledController == null"); return; } TempEM.SetLedCount((byte) mEMData.NewLivingEM.Data.LedLight.length); for (int i = 0; i < mEMData.NewLivingEM.Data.LedLight.length; i++) { TempEM.ledController[i].device.Level = (byte) (DimSeekBarValue - (DimSeekBarValue % 10)); Log.i(TAG, "[onStopTrackingTouch] TempEM.ledController[i].device.Level = " + TempEM.ledController[i].device.Level); } int ret = mSdb_LivingRoomLightAPI.SetLightDimming(define.DEVICE_ALL_OR_NOTHING, (byte) (DimSeekBarValue/10)); if (ret >= 0) Sound().Play(SND.effect.TOUCH_LATCHED); else Sound().Play(SND.effect.TOUCH_UNLATCHED); /** * 디밍, 색온도 제어 끝 * **/ } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] mOnSeekBarChangeListener.onStopTrackingTouch"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (seekBar.getId() == ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.SEEKBAR_DIM) { DimSeekBarValue = min + (progress * step); } } }; /** * Seekbar 터치 시 동작 처리 * **/ SeekBar.OnSeekBarChangeListener mOnColorSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar) { try { if (seekBar.getId() == ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.SEEKBAR_COLOR) { Log.i(TAG, "[onStopTrackingTouch] ColorSeekBarValue [" + ColorSeekBarValue + "]"); setFinishTimerReset(); /** * 디밍, 색온도 제어 시작 * **/ com.artncore.commons.DataClasses.EnergyMeterV2.Device TempEM = new DataClasses.EnergyMeterV2.Device(); if (mEMData.NewLivingEM.Data.LedLight == null) { Log.e(TAG, "[onStopTrackingTouch] mEMData.LivingEM.device.ledController == null"); return; } TempEM.SetLedCount((byte) mEMData.NewLivingEM.Data.LedLight.length); for (int i = 0; i < mEMData.NewLivingEM.Data.LedLight.length; i++) { TempEM.ledController[i].device.Color = (byte) (ColorSeekBarValue - (ColorSeekBarValue % 10)); Log.i(TAG, "[onStopTrackingTouch] TempEM.ledController[i].device.Color = " + TempEM.ledController[i].device.Color ); } int ret = mSdb_LivingRoomLightAPI.SetLightColor(define.DEVICE_ALL_OR_NOTHING, (byte) (ColorSeekBarValue/10)); if (ret >= 0) Sound().Play(SND.effect.TOUCH_LATCHED); else Sound().Play(SND.effect.TOUCH_UNLATCHED); /** * 디밍, 색온도 제어 끝 * **/ } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] mOnSeekBarChangeListener.onStopTrackingTouch"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (seekBar.getId() == ID.POPUPS.CONFIGUREPRESET.ELEMENTS.BTNS.SEEKBAR_COLOR) { ColorSeekBarValue = min + (progress * step); } } }; /** * 제어기기의 상태를 갱신한다. * * @param real - (boolean) true : 실시간 , false : 가장최근 * @return (int) - >=0 : 성공, <0 : 실패 */ private int updateDeviceStatus(boolean real) { Log.i(TAG, "[updateDeviceStatus] - Start (real : " + real + ")"); // 1. Api Load Check if (mSdb_LivingRoomLightAPI == null) { Log.e(TAG, "[updateDeviceStatus] mLivingRoomEnergyMeterV2API unload !!!"); return -1; } // 2. Refresh try { int ret = mSdb_LivingRoomLightAPI.Refresh(); if (ret < 0) { Log.e(TAG, "[updateDeviceStatus] Refresh(" + real + ") ret (" + ret + ") ErrorCode = " + mSdb_LivingRoomLightAPI.ErrorCode.ErrStr()); return -2; } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return -100; } catch (Exception e) { Log.e(TAG, "[updateDeviceStatus] - [Exception Error] lightApi.Refresh(" + real + ")"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return -100; } // 3. EMData Copy mEMData.NewLivingEM = mSdb_LivingRoomLightAPI.data; // 4. Debug Msg Log.i(TAG, "[updateDeviceStatus] - OK"); return 0; } // ================================================================================================= // [[ Draw ]] region // ================================================================================================= /** * 변경되는 이미지를 다시 그린다. */ private void updateDisplay() { if (mEMData == null) return; if (mEMData.NewLivingEM.Info.Install == false) return; if (mEMData.NewLivingEM.Info.LightGroup == null) return; if ((DimSeekBarValue / 10) != ((int) mEMData.NewLivingEM.Data.LedLight[0].Data.Dimming / 10)) { SetDimSeekBarProgress((int) mEMData.NewLivingEM.Data.LedLight[0].Data.Dimming); } if ((ColorSeekBarValue / 10) != ((int) mEMData.NewLivingEM.Data.LedLight[0].Data.Color / 10)) { SetColorSeekBarProgress((int) mEMData.NewLivingEM.Data.LedLight[0].Data.Color); } boolean tempLightStatus = false; //true면 간접등 또는 복도등 하나라도 켜짐 for (int i = 1; i < mEMData.NewLivingEM.Data.LedLight.length; i++) { if (mEMData.NewLivingEM.Data.LedLight[i].Data.OnOff) { tempLightStatus = true; } } if (tempLightStatus) { if (mEMData.ControlType) { mEMData.ControlType = false; SetDimSeekBarProgress((int) mEMData.NewLivingEM.Data.LedLight[0].Data.Dimming); SetColorSeekBarProgress((int) mEMData.NewLivingEM.Data.LedLight[0].Data.Color); } } } /** * 조명 ON OFF 상태 반환 * @return boolean true-하나라도 켜짐, false-모두 꺼짐 * **/ public boolean GetmData_LightOnOff() { boolean LightOnOff = false; if (mEMData.NewLivingEM.Data.LedLight == null) return false; for (int i = 0; i< mEMData.NewLivingEM.Data.LedLight.length; i++) { if (mEMData.NewLivingEM.Data.LedLight[i].Data.OnOff) { LightOnOff = true; } } return LightOnOff; } /** * SeekBar의 게이지를 설정할때 사용한다. * @param value 설정할 값 * **/ public void SetDimSeekBarProgress(int value) { Log.i(TAG, "[SetDimSeekBarProgress] value [" + value + "]"); if (value - min < 0) { SEEKBAR_CTRL_LIGHT_DIM.setProgress(0); } else { SEEKBAR_CTRL_LIGHT_DIM.setProgress(value - min); } } public void SetColorSeekBarProgress(int value) { Log.i(TAG, "[SetColorSeekBarProgress] value [" + value + "]"); if (value - min < 0) { SEEKBAR_CTRL_LIGHT_COLOR.setProgress(0); } else { SEEKBAR_CTRL_LIGHT_COLOR.setProgress(value - min); } } /** * 디바이스 API 를 Load 한다. * * @param mWallPadAPI - 생성시 전달받은 WallPadAPI * @return (int) - >=0 : 성공, <0 : 실패 */ private int loadDeviceAPI(WallPadAPI mWallPadAPI) { // 1. Mode Check Log.i(TAG, "[loadDeviceAPI] - Start"); // 2. mWallPadAPI Check if (mWallPadAPI == null) { Log.e(TAG, "[loadDeviceAPI] - mWallPadAPI is null"); return -2; } ////////////////////////////////////////////////////////////////////////////// // Light ////////////////////////////////////////////////////////////////////////////// // 3. Load API (Get_EnergyMeterV2Controller) Log.i(TAG, "[loadDeviceAPI] - Step1 : Light API Load..."); try { mSdb_LivingRoomLightAPI = mWallPadAPI.Get_Sdb_LivingRoomLightAPI(); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return -100; } catch (Exception e) { Log.e(TAG, "[loadDeviceAPI] - [Exception Error] mWallPadAPI.Get_EnergyMeterV2Controller"); Log.e(TAG, "[loadDeviceAPI] - " + e.toString()); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return -100; } if (mSdb_LivingRoomLightAPI == null) { Log.e(TAG, "[loadDeviceAPI] - lightApi is null"); return -4; } Log.i(TAG, "[loadDeviceAPI] - OK"); return 0; } protected Handler EMDriverCheckHandler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 0) { if (loadDeviceAPI(mWallPadAPI) >= 0) { if (updateDeviceStatus(false) == 0) { EMDriverCheckHandler.sendEmptyMessageDelayed(1, 10); } else { EMDriverCheckHandler.sendEmptyMessageDelayed(0, 5000); } } else { Log.i(TAG, "EMDriverCheckHandler --> mAPI == null"); EMDriverCheckHandler.sendEmptyMessageDelayed(0, 5000); } } else if (msg.what == 1) { Log.i(TAG, "EMDriverCheckHandler OK"); if (mSdb_LivingRoomLightAPI != null) { registorBRName_LivingEM(true); updateDeviceStatus(false); registerBR(true); // // 조그버튼을 길게 눌러 색상 진입한 경우 BR 재 송신 처리 // if(mintent != null) // { // byte OnOff = mintent.getByteExtra("ONOFF", (byte)0xEE); // byte Dial = mintent.getByteExtra("DIAL", (byte)0xEE); // byte Level = mintent.getByteExtra("LEVEL", (byte)0xEE); // byte Color = mintent.getByteExtra("COLOR", (byte)0xEE); // // if(Dial == (byte)0x02) // { // Intent Tempintent = new Intent(); // Tempintent.setAction(define.NOTIFY_DAIL); // Tempintent.putExtra("ONOFF", OnOff); // Tempintent.putExtra("DIAL", Dial); // Tempintent.putExtra("LEVEL", Level); // Tempintent.putExtra("COLOR", Color); // getContext().sendBroadcast(Tempintent); // } // } updateDisplay(); } } } }; private boolean registorBRName_LivingEM(boolean bRegi) { try { Log.i(TAG, "[registorBRName_LivingEM] bRegi [" + bRegi + "]"); if (mSdb_LivingRoomLightAPI == null) { Log.e(TAG, "[registorBRName_LivingEM] mLivingRoomEnergyMeterV2API is null!!"); return false; } if (bRegi) mSdb_LivingRoomLightAPI.regChangedBR(BR_CTRL_LIGHT_LIVINGROOM); else mSdb_LivingRoomLightAPI.unregChangedBR(BR_CTRL_LIGHT_LIVINGROOM); return true; } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return false; } catch (Exception e) { Log.e(TAG, "[Exception] registorBRName_LivingEM(boolean bRegi)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return false; } } /** * 디바이스에 알림 BR 을 등록한다. (거실 에너지미터) * * @return (int) - >=0 : 성공, <0 : 실패 */ private int registerBR(boolean OnOff) { Log.i(TAG, "[registerBR] - Start (OnOff:" + OnOff + ")"); String BR_NAME = BR_CTRL_LIGHT_LIVINGROOM; // 1. Api Load Check if (mSdb_LivingRoomLightAPI == null) { Log.e(TAG, "[registerBR] - mLivingRoomEnergyMeterV2API unload !!!"); return -1; } if (OnOff) { try { Log.i(TAG, "[registerBR] - regChangedBR START"); mSdb_LivingRoomLightAPI.regChangedBR(BR_NAME); Log.i(TAG, "[registerBR] - regChangedBR END"); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return -101; } catch (Exception e) { Log.e(TAG, "[registerBR] - [Exception Error] mLivingRoomEnergyMeterV2API.regChangedBR"); Log.e(TAG, "[registerBR] - " + e.toString()); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return -101; } super.addBrActionFilter(BR_NAME); super.addBrActionFilter(define.NOTIFY_DAIL); } else { try { Log.i(TAG, "[registerBR] - unregChangedBR START"); mSdb_LivingRoomLightAPI.unregChangedBR(BR_NAME); Log.i(TAG, "[registerBR] - unregChangedBR END"); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); return -102; } catch (Exception e) { Log.e(TAG, "[registerBR] - [Exception Error] lightApi.unregChangedBR"); Log.e(TAG, "[registerBR] - " + e.toString()); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); return -102; } super.removeBrActionFilter(BR_NAME); super.removeBrActionFilter(define.NOTIFY_DAIL); } return 0; } private void syncPresetValue(int nPresetID) { try { WallpadStatusData mWallpadStatusData = new WallpadStatusData(mContext); String strPresetValue = mWallpadStatusData.getLivinglightModeCtrlUnitValues(nLivinglightPresetID, 0); mWallpadStatusData.closeDB(); Log.i(TAG, "[syncPresetValue] nPresetID [" + nPresetID + "], strPresetValue [" + strPresetValue + "]"); String[] strParse = strPresetValue.split(":"); EMData mTempEMData = new EMData(); if (mEMData.NewLivingEM.Data.LedLight == null) { Log.e(TAG, "[syncPresetValue] mEMData.NewLivingEM.Data.LedLight == null"); return; } mTempEMData.NewLivingEM.Data.setLedLight((byte) mEMData.NewLivingEM.Data.LedLight.length); for (int i = 0; i < mEMData.NewLivingEM.Data.LedLight.length; i++) { if (i == 0) { mTempEMData.NewLivingEM.Data.LedLight[i].Data.OnOff = (DataClasses.LedController.POWER.On == 1) ? true : false; mTempEMData.NewLivingEM.Data.LedLight[i].Data.Dimming = (byte) (MainActivity.mLightInfo.mPreset[nPresetID].mLights[0].DIM); mTempEMData.NewLivingEM.Data.LedLight[i].Data.Color = (byte) (MainActivity.mLightInfo.mPreset[nPresetID].mLights[0].COLOR); } else { mTempEMData.NewLivingEM.Data.LedLight[i].Data.OnOff = false; } } // 프리셋이 미설정 상태인 경우, 밝기 100(10)/색온도10(1)로 설정한다. if (mTempEMData.NewLivingEM.Data.LedLight[0].Data.Dimming == 0) mTempEMData.NewLivingEM.Data.LedLight[0].Data.Dimming = 10; if (mTempEMData.NewLivingEM.Data.LedLight[0].Data.Color == 0) mTempEMData.NewLivingEM.Data.LedLight[0].Data.Color = 1; for (int i = 0; i < mEMData.NewLivingEM.Data.LedLight.length; i++) { Log.d(TAG,"[syncPresetValue] Index [" + i + "], OnOff [" + mTempEMData.NewLivingEM.Data.LedLight[i].Data.OnOff + "], Level [" + mTempEMData.NewLivingEM.Data.LedLight[i].Data.Dimming + "], Color [" + mTempEMData.NewLivingEM.Data.LedLight[i].Data.Color + "]"); } DimSeekBarValue = mTempEMData.NewLivingEM.Data.LedLight[0].Data.Dimming * 10; ColorSeekBarValue = mTempEMData.NewLivingEM.Data.LedLight[0].Data.Color * 10; Log.i(TAG, "[syncPresetValue] DimSeekBarValue [" + DimSeekBarValue + "], ColorSeekBarValue [" + ColorSeekBarValue + "]"); SetDimSeekBarProgress(DimSeekBarValue); SetColorSeekBarProgress(ColorSeekBarValue); // int nResult = mSdb_LivingRoomLightAPI.SetLight(define.DEVICE_ALL_OR_NOTHING, true, (byte) (DimSeekBarValue / 10), (byte) (ColorSeekBarValue / 10)); if(mSdb_LivingRoomLightAPI!=null) { int nResult = mSdb_LivingRoomLightAPI.SetLight((byte) 0, true, (byte) (DimSeekBarValue / 10), (byte) (ColorSeekBarValue / 10)); Log.d(TAG,"[syncPresetValue] nResult [" + nResult + "]"); // int nResultOnOff = mSdb_LivingRoomLightAPI.SetLightOnOff(define.DEVICE_ALL_OR_NOTHING, true); // int nResultDim = mSdb_LivingRoomLightAPI.SetLightDimming(define.DEVICE_ALL_OR_NOTHING, (byte) DimSeekBarValue); // int nResultColor = mSdb_LivingRoomLightAPI.SetLightColor(define.DEVICE_ALL_OR_NOTHING, (byte) ColorSeekBarValue); // Log.d(TAG,"[syncPresetValue] nResultOnOff [" + nResultOnOff + "], nResultDim [" + nResultDim + "], nResultColor [" + nResultColor + "]"); } } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] syncPresetValue(int nPresetID)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } private void savePresetValue(int nPresetID, int nDim, int nColor) { try { Log.i(TAG, "[savePresetValue] nPresetID [" + nPresetID + "], nDim [" + nDim + "], nColor [" + nColor + "]"); strPresetInfo = Integer.toString(nPresetID) + "/on:" + Integer.toString(nDim / 10) + ":" + Integer.toString(nColor / 10); setPopupResult(strPresetInfo); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] savePresetValue(int nPresetID, int nDim, int nColor)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } // MainActivity Handler public final class HANDLERMSG { public final static int FINISH_SCREEN = 999; } public Handler MainHandler = new Handler(Looper.getMainLooper()) { public void handleMessage(Message msg) { Log.d(TAG, "[MainHandler] MainHandler : what [" + msg.what + "], arg1 [" + msg.arg1 + "], arg2 [" + msg.arg2 + "]"); switch (msg.what) { case HANDLERMSG.FINISH_SCREEN: ((PopupActivity)mContext).finish(); break; default: Log.d(TAG, "MainHandler : " + msg.what); break; } } }; public void sendHandlerMsg(int what, int arg1, int arg2) { try { Log.i(TAG, "[sendHandlerMsg] what [" + what + "], arg1 [" + arg1 + "], arg2 [" + arg2 + "]"); Message HandleMsg = MainHandler.obtainMessage(); HandleMsg.what = what; HandleMsg.arg1 = arg1; HandleMsg.arg2 = arg2; MainHandler.sendMessage(HandleMsg); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] sendHandlerMsg(msg)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } public void sendHandlerMsgDelayed(int what, int arg1, int arg2, long delay) { try { Log.i(TAG, "[sendHandlerMsgDelayed] what [" + what + "], arg1 [" + arg1 + "], arg2 [" + arg2 + "], delay [" + delay + "]"); Message HandleMsg = MainHandler.obtainMessage(); HandleMsg.what = what; HandleMsg.arg1 = arg1; HandleMsg.arg2 = arg2; MainHandler.sendMessageDelayed(HandleMsg, delay); } catch (RuntimeException re) { LogUtil.errorLogInfo("", TAG, re); } catch (Exception e) { Log.e(TAG, "[Exception] sendHandlerMsgDelayed(msg)"); //e.printStackTrace(); LogUtil.errorLogInfo("", TAG, e); } } }