package com.aincc.seoulexcursion.ui.scene.parks; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.Intent; import android.content.res.Configuration; import android.graphics.PointF; import android.graphics.drawable.Drawable; import android.location.Location; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Parcelable; import android.provider.Settings; import android.text.util.Linkify; import android.util.Pair; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.Animation; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ImageView.ScaleType; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import android.widget.ZoomControls; import com.aincc.lib.common.annotation.InjectView; import com.aincc.lib.network.common.BaseTrans; import com.aincc.lib.network.common.BaseTransEx; import com.aincc.lib.network.http.HttpParam; import com.aincc.lib.ui.anim.Animationz; import com.aincc.lib.util.ImageLoader; import com.aincc.lib.util.ImageWorker.ImageWorkerAdapter; import com.aincc.seoulexcursion.util.Logger; import com.aincc.lib.util.PreferencesUtil; import com.aincc.lib.util.Utils; import com.aincc.seoulexcursion.App; import com.aincc.seoulexcursion.R; import com.aincc.seoulexcursion.ui.Constants; import com.aincc.seoulexcursion.ui.SeoulMapBaseActivity; import com.aincc.seoulexcursion.ui.widget.MapOverlayPopup; import com.aincc.seoulexcursion.ui.widget.Navibar; import com.aincc.seoulexcursion.util.SeoulFont; import com.aincc.seoulopenapi.OpenAPI; import com.aincc.seoulopenapi.ServiceExecutor; import com.aincc.seoulopenapi.model.ParkInfo; import com.aincc.seoulopenapi.model.ParkProgramInfo; import com.aincc.seoulopenapi.model.TotalCount; import com.aincc.seoulopenapi.network.OpenBase; import com.aincc.seoulopenapi.openapi.park.OpenParkProgramInfo; import com.aincc.seoulopenapi.openapi.park.OpenParkProgramTotalCount; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapView; import com.google.android.maps.MyLocationOverlay; import com.google.android.maps.Overlay; import com.google.android.maps.OverlayItem; /** * * <h3><b>ParksDetailActivity</b></h3></br> * * 공원 상세정보 표시<br> * * @author aincc@barusoft.com * @version 1.0.0 * @since 1.0.0 */ public class ParksDetailActivity extends SeoulMapBaseActivity { /** * 초기 줌 레벨 */ private static final int INIT_ZOOM_LEVEL = 16; /** * 공원위치 마커키 */ private static final String KEY_PARK = "park"; /** * 상단 네비게이션 바 */ @InjectView private Navibar navibar; /** * 미디어 레이아웃 */ @InjectView(id = R.id.media_layout) private RelativeLayout mediaLayout; /** * 미디어 보기 토클 */ @InjectView private ImageButton mediaToggle; /** * 본문 레이아웃 */ @InjectView private RelativeLayout content_layout; /** * 맵 레이아웃 */ @InjectView(id = R.id.map_layout_ref) private RelativeLayout mapLayout; /** * 맵뷰 */ @InjectView private MapView map; /** * 줌컨트롤 */ @InjectView private ZoomControls zoom; /** * 내위치 표시 버튼 */ @InjectView private ImageButton mylocate; /** * 현재공원위치 표시 버튼 */ @InjectView private ImageButton parklocate; /** * 공원정보 레이아웃 */ @InjectView(id = R.id.parkinfo_layout_ref) private RelativeLayout parkinfoLayout; /** * 공원주소 */ @InjectView private TextView P_ADDR; /** * 공원관리부서 */ @InjectView private TextView P_DIVISION; /** * 공원연락처 */ @InjectView private TextView P_ADMINTEL; /** * 공원설명 */ @InjectView private TextView P_LIST_CONTENT; /** * 공원이미지 */ @InjectView(id = R.id.image) private ImageView parkImg; /** * 프로그램목록 조회 */ @InjectView private ImageButton programlist; /** * 프로그램목록 배지 */ @InjectView private TextView programbadge; /** * 관리부서 전화걸기 */ @InjectView private ImageButton callphone; /** * 닫기 */ @InjectView private ImageButton close; /** * 이미지 다운로더 */ private ImageLoader imageLoader; /** * 이미지 어댑터 */ private ImageWorkerAdapter imageAdapter; /** * 공원정보 */ private ParkInfo info = null; /** * 현재 표시모드 상태 */ private boolean isMapViewing = false; /** * 팝업 뷰 (맵) */ private MapOverlayPopup mapPopup = null; /** * 위치정보접근 허용여부 */ private boolean isEnableAccessLocation = false; /** * 위치 서비스 가능 여부 */ private boolean isEnableLocationService = false; /** * 현재 위치 */ private Location currentLocation = null; /** * 내위치 오버레이 */ private MyLocationOverlay myLocationOverlay; /** * 핸들러 */ private Handler handler = null; /** * 0 : ParksActivity, 1 : ParksSearchActivity */ private int fromActivity = 0; @Override protected void onCreate(Bundle savedInstanceState) { Logger.d1(LOG, "onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_parks_detail); getIntentData(); mappingViews(this); initializeUI(); } /** * 인덴트 정보 처리 * * @since 1.0.0 */ private void getIntentData() { Intent data = getIntent(); if (null != data) { Bundle bundle = data.getExtras(); if (null != bundle) { info = bundle.getParcelable(Constants.EXTRA_KEY_PARK_INFO); fromActivity = bundle.getInt(Constants.EXTRA_KEY_PARK_DETAIL_FROM); } } } @Override protected void initializeUI() { super.initializeUI(); content_layout.setVisibility(View.GONE); handler = new Handler(); parkImg.setScaleType(ScaleType.FIT_CENTER); if (null == imageAdapter) { imageAdapter = new ImageWorkerAdapter() { @Override public Object getItem(int num) { return null != info ? info.P_IMG : null; } @Override public int getSize() { return null != info ? 1 : 0; } }; } // 팝업 뷰 if (null == mapPopup) { mapPopup = new MapOverlayPopup(this); mapPopup.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { map.removeView(mapPopup); ParkInfo parkInfo = (ParkInfo) mapPopup.getValue(); if (null != parkInfo) { changeParkInfo(parkInfo); } } }); } mediaToggle.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (null == info) { Toast.makeText(context, string(R.string.empty_media), Toast.LENGTH_SHORT).show(); return; } if (View.GONE == mediaLayout.getVisibility()) { if (Utils.isTrimEmpty(info.P_IMG)) { Toast.makeText(context, string(R.string.empty_media), Toast.LENGTH_SHORT).show(); } else { Animation anim = Animationz.translate(context, new PointF(0, -500), new PointF(0, 0), Constants.MEDIA_ANIM_DELAY, android.R.anim.decelerate_interpolator, true); mediaLayout.setAnimation(anim); mediaLayout.setVisibility(View.VISIBLE); mediaToggle.setImageDrawable(drawable(R.drawable.view_as_info)); } } else { Animation anim = Animationz.translate(context, new PointF(0, 0), new PointF(0, mediaLayout.getHeight() * (-1) - 100), Constants.MEDIA_ANIM_DELAY, android.R.anim.accelerate_interpolator, true); mediaLayout.setAnimation(anim); mediaLayout.postDelayed(new Runnable() { @Override public void run() { mediaLayout.setVisibility(View.GONE); } }, Constants.MEDIA_ANIM_DELAY); mediaToggle.setImageDrawable(drawable(R.drawable.navigation_picture)); } } }); mylocate.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { runOnUiThread(refreshToCurrentLocation); } }); parklocate.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { runOnUiThread(refreshToCurrentPark); } }); programlist.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (0 != programTotalCount.get()) { requestProgramInfo(Constants.INIT_START_INDEX, programTotalCount.get(), info.P_IDX); } else { Toast.makeText(context, string(R.string.empty_park_program), Toast.LENGTH_SHORT).show(); } } }); callphone.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (null != info && !Utils.isTrimEmpty(info.P_ADMINTEL)) { // 전화 다이얼러 호출 Intent callIntent = new Intent(Intent.ACTION_DIAL); callIntent.setData(Uri.parse("tel:" + info.P_ADMINTEL)); startActivity(callIntent); } else { Toast.makeText(context, string(R.string.empty_callphone), Toast.LENGTH_SHORT).show(); } } }); close.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); P_ADDR.setTypeface(SeoulFont.getInstance().getSeoulHangang()); P_DIVISION.setTypeface(SeoulFont.getInstance().getSeoulHangang()); P_ADMINTEL.setTypeface(SeoulFont.getInstance().getSeoulHangang()); P_LIST_CONTENT.setTypeface(SeoulFont.getInstance().getSeoulHangang()); P_ADMINTEL.setAutoLinkMask(Linkify.PHONE_NUMBERS); // 맵초기화 initializeMap(); } @Override protected void initializeNavibar() { super.initializeNavibar(); navibar.setTypeface(SeoulFont.getInstance().getSeoulHangang()); navibar.setActionBack(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); // 지도 버튼 navibar.setActionFunc(new OnClickListener() { @Override public void onClick(View v) { flipContentLayout(); } }); navibar.setActionFuncIcon(drawable(R.drawable.location_searching)); // 제목 설정 navibar.setTitle(null != info ? info.P_PARK : ""); } /** * 맵초기화 * * @since 1.0.0 */ private void initializeMap() { zoom.setOnZoomInClickListener(new OnClickListener() { @Override public void onClick(View v) { map.getController().zoomIn(); } }); zoom.setOnZoomOutClickListener(new OnClickListener() { @Override public void onClick(View v) { map.getController().zoomOut(); } }); map.setSatellite(false); map.displayZoomControls(true); map.getController().setZoom(INIT_ZOOM_LEVEL); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); initializeUI(); onResume(); } @Override protected void onResume() { super.onResume(); imageLoader = App.getImageLoader(imageAdapter); showAlertAskEnableAccessLocation(); if (null != info) { if (!isMapViewing) { // 정보표시 refreshData(); } else { // 내위치를 표시할거면.. // showAlertAskEnableAccessLocation(); if (null != myLocationOverlay) { myLocationOverlay.enableMyLocation(); myLocationOverlay.enableCompass(); } // 현재 공원을 표시. runOnUiThread(refreshToCurrentPark); } } } @Override protected void onPause() { super.onPause(); ServiceExecutor.getInstance().cancelAll(); if (null != myLocationOverlay) { myLocationOverlay.disableMyLocation(); myLocationOverlay.disableCompass(); } } @Override public void onBackPressed() { super.onBackPressed(); finish(); } @Override public void finish() { super.finish(); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); } // /////////////////////////////////////////////////////////////////////////////////////////// // 이하 Map 연동 // TODO: GPS 상태체크 후 설정유도 // /////////////////////////////////////////////////////////////////////////////////////////// /** * 내용 레이아웃 뒤집기 * * @since 1.0.0 */ private void flipContentLayout() { // 전환 후 버튼이미지 변경 if (View.GONE == parkinfoLayout.getVisibility()) { // 지도->정보로 변경되므로 맵전환 버튼으로 변경 navibar.setActionFuncIcon(drawable(R.drawable.location_searching)); isMapViewing = false; } else { // 정보->지도로 변경되므로 정보전환 버튼으로 변경 navibar.setActionFuncIcon(drawable(R.drawable.view_as_info)); isMapViewing = true; // 현재 공원을 표시. runOnUiThread(refreshToCurrentPark); } // 뷰 애니메이션 효과 적용 및 전환 Animationz.performFlip(content_layout, parkinfoLayout, mapLayout, mapLayout.getWidth() / 2, mapLayout.getHeight() / 2); } /** * 공원정보 변경 (지도에서 팝업을 선택하는 경우) * * @since 1.0.0 * @param info */ private void changeParkInfo(ParkInfo info) { this.info = info; programTotalCount.set(0); flipContentLayout(); refreshData(); } /** * 공원정보 표시하기 * * @since 1.0.0 */ private void displayParkInfo() { content_layout.setVisibility(View.VISIBLE); navibar.setTitle(info.P_PARK); P_ADDR.setText(string(R.string.park_addr) + " " + info.P_ADDR); P_DIVISION.setText(string(R.string.park_division) + " " + info.P_DIVISION); P_ADMINTEL.setText(string(R.string.park_phone) + " " + info.P_ADMINTEL); P_LIST_CONTENT.setText(" " + info.P_LIST_CONTENT); imageLoader.loadImage(info.P_IMG, parkImg); programbadge.setText(String.valueOf(programTotalCount.get())); if (0 == programTotalCount.get()) { handler.postDelayed(new Runnable() { @Override public void run() { requestTotalCount(info.P_IDX); } }, 500); } } /** * 로딩표시 * * @since 1.0.0 */ private void showLoading() { startProgress("", true, new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { ServiceExecutor.getInstance().cancelAll(); loadingAccCount.set(ATOMIC_LOADING_INIT); } }, Constants.COLOR_BLACK); } // /** // * 데이터 초기화 후 갱신 // * // * @since 1.0.0 // */ // private void clearData() // { // refreshData(); // } /** * 데이터 갱신 * * @since 1.0.0 */ synchronized private void refreshData() { runOnUiThread(new Runnable() { @Override public void run() { displayParkInfo(); } }); } @Override protected void onTapOverlayItem(int index, GeoPoint geopoint, List<OverlayItem> overlays) { if (KEY_PARK.equals(overlays.get(index).getSnippet())) { // 다른 팝업 오버레이 삭제 및 현재 마커 팝업 오버레이 추가 MapView.LayoutParams param = new MapView.LayoutParams(MapView.LayoutParams.WRAP_CONTENT, MapView.LayoutParams.WRAP_CONTENT, geopoint, 0, -45, MapView.LayoutParams.BOTTOM_CENTER); map.removeView(mapPopup); mapPopup.setText(overlays.get(index).getTitle()); String name = overlays.get(index).getTitle(); List<Pair<String, List<ParkInfo>>> listdata = (0 == fromActivity) ? ParksActivity.getParks() : ParksSearchActivity.getParks(); if (null != listdata) { for (Pair<String, List<ParkInfo>> pair : listdata) { for (ParkInfo park : pair.second) { if (name.equals(park.P_PARK)) { mapPopup.setValue(park); break; } } } } map.addView(mapPopup, param); map.getController().animateTo(geopoint); map.invalidate(); } } /** * 내위치 정보 접근 승인요청 팝업 * * @since 1.0.0 */ private void showAlertAskEnableAccessLocation() { isEnableAccessLocation = PreferencesUtil.getBoolean(context, Constants.PREFS_SETTING_FILE, Constants.PREFS_KEY_ACCESS_LOCATION, false); // 위치정보접근을 허용한 경우 현재위치표시를 하도록 한다. if (isEnableAccessLocation) { if (null == myLocationOverlay) { myLocationOverlay = new MyLocationOverlay(context, map); myLocationOverlay.enableMyLocation(); myLocationOverlay.enableCompass(); } // runOnUiThread(refreshToCurrentLocation); return; } // 위치정보접근 허용여부 팝업 표시하기. AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(string(R.string.alert_msg_access_location)); builder.setPositiveButton(string(R.string.alert_btn_confirm), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { isEnableAccessLocation = true; PreferencesUtil.setBoolean(context, Constants.PREFS_SETTING_FILE, Constants.PREFS_KEY_ACCESS_LOCATION, isEnableAccessLocation); if (null == myLocationOverlay) { myLocationOverlay = new MyLocationOverlay(context, map); myLocationOverlay.enableMyLocation(); myLocationOverlay.enableCompass(); } // runOnUiThread(refreshToCurrentLocation); } }).setNegativeButton(string(R.string.alert_btn_cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { isEnableAccessLocation = false; PreferencesUtil.setBoolean(context, Constants.PREFS_SETTING_FILE, Constants.PREFS_KEY_ACCESS_LOCATION, isEnableAccessLocation); } }).create().show(); } /** * 위치기반 서비스 설정 승인요청 팝업 * * @since 1.0.0 */ private void showAlertAskLocationService() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(string(R.string.alert_msg_location_service)); builder.setPositiveButton(string(R.string.alert_btn_confirm), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); } }).setNegativeButton(string(R.string.alert_btn_cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).create().show(); } /** * 현재위치로 맵뷰 갱신하기 */ private Runnable refreshToCurrentLocation = new Runnable() { public void run() { isEnableLocationService = checkProvider(); if (!isEnableLocationService) { showAlertAskLocationService(); } else { if (isEnableAccessLocation) { refreshMap(); if (null != myLocationOverlay.getMyLocation()) { Logger.d1(LOG, "move to myLocation by using myLocationOverlay"); // map.getController().animateTo(myLocationOverlay.getMyLocation()); // map.invalidate(); myLocationOverlay.runOnFirstFix(new Runnable() { @Override public void run() { map.getController().animateTo(myLocationOverlay.getMyLocation()); map.invalidate(); } }); } else { currentLocation = getLastLocation(bestProvider); if (null != currentLocation) { Logger.d1(LOG, "move to myLocation by using getLastLocation"); map.getController().animateTo(getGeoPoint(currentLocation)); map.invalidate(); } } } else { showAlertAskEnableAccessLocation(); } } } }; /** * 현재공원으로 맵뷰 갱신하기 */ private Runnable refreshToCurrentPark = new Runnable() { public void run() { isEnableLocationService = checkProvider(); if (!isEnableLocationService) { showAlertAskLocationService(); } else { Double lat = Double.parseDouble(info.LATITUDE) * 1E6; Double lng = Double.parseDouble(info.LONGITUDE) * 1E6; GeoPoint parkpoint = new GeoPoint(lat.intValue(), lng.intValue()); refreshMap(); MapView.LayoutParams param = new MapView.LayoutParams(MapView.LayoutParams.WRAP_CONTENT, MapView.LayoutParams.WRAP_CONTENT, parkpoint, 0, -45, MapView.LayoutParams.BOTTOM_CENTER); map.removeView(mapPopup); mapPopup.setText(info.P_PARK); map.addView(mapPopup, param); map.getController().animateTo(parkpoint); map.invalidate(); } } }; /** * 맵 갱신 * * @since 1.0.0 */ private void refreshMap() { // GeoPoint geoPoint = null; Drawable marker = null; // LocationItemizedOverlay overlayIam = null; // OverlayItem overlayItem = null; if (null == map) { return; } removeOverlay(); marker = drawable(R.drawable.location_pin3); marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight()); // // 입력된 현재 위치정보의 GeoPoint 를 생성한다. // if (null != mylocation) // { // geoPoint = getGeoPoint(mylocation); // overlayIam = new LocationItemizedOverlay(marker); // overlayIam.populateImmediate(); // overlayItem = new OverlayItem(geoPoint, KEY_MY, KEY_MY); // overlayIam.addOverlay(overlayItem); // map.getOverlays().add(overlayIam); // } // 주변공원 정보를 가져온다. LocationItemizedOverlay overlayParks = getParks(); map.getOverlays().add(overlayParks); if (null != myLocationOverlay) { map.getOverlays().add(myLocationOverlay); } map.invalidate(); } /** * 공원 오버레이 마커 생성하기 * * @since 1.0.0 * @return LocationItemizedOverlay */ private LocationItemizedOverlay getParks() { Drawable marker = null; marker = drawable(R.drawable.location_pin3); marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight()); LocationItemizedOverlay overlayParks = new LocationItemizedOverlay(marker); overlayParks.populateImmediate(); List<Pair<String, List<ParkInfo>>> listdata = (0 == fromActivity) ? ParksActivity.getParks() : ParksSearchActivity.getParks(); if (null != listdata) { // 공원목록 정보 등록 for (Pair<String, List<ParkInfo>> pair : listdata) { for (ParkInfo park : pair.second) { Double lat = Double.parseDouble(park.LATITUDE) * 1E6; Double lng = Double.parseDouble(park.LONGITUDE) * 1E6; GeoPoint parkpoint = new GeoPoint(lat.intValue(), lng.intValue()); OverlayItem overlayItem = new OverlayItem(parkpoint, park.P_PARK, KEY_PARK); overlayParks.addOverlay(overlayItem); } } } else { // 공원목록이 없는 경우 현재 공원정보 등록 Double lat = Double.parseDouble(info.LATITUDE) * 1E6; Double lng = Double.parseDouble(info.LONGITUDE) * 1E6; GeoPoint parkpoint = new GeoPoint(lat.intValue(), lng.intValue()); OverlayItem overlayItem = new OverlayItem(parkpoint, info.P_PARK, KEY_PARK); overlayParks.addOverlay(overlayItem); } return overlayParks; } /** * 오버레이 마커 삭제 * * @since 1.0.0 */ private void removeOverlay() { if (null != map) { List<Overlay> overlays = map.getOverlays(); if (0 < overlays.size()) { overlays.clear(); } } } // /////////////////////////////////////////////////////////////////////////////////////////// // 이하 OpenAPI 연동 // /////////////////////////////////////////////////////////////////////////////////////////// /** * 공원 프로그램 전체 개수 */ private AtomicInteger programTotalCount = new AtomicInteger(0); /** * 요청 누적 계수 */ private AtomicInteger requestAccCount = new AtomicInteger(0); @Override public void iNetEnabled() { super.iNetEnabled(); } @Override public void iNetDisabled() { } @Override public boolean iNetListenedTransaction(BaseTrans tr) { if (0 < requestAccCount.get()) { requestAccCount.decrementAndGet(); } HttpParam param = (HttpParam) tr.getParam(); if (((OpenBase) tr).isError()) { handleError(tr); return false; } switch (OpenAPI.valueOf(param.getRequestKey())) { case PARK_PROGRAM_TOTAL_COUNT_BY_PARKID: handleOpenProgramInfoTotalCount(tr); break; case PARK_PROGRAM_INFO_BY_PARKID: handleOpenProgramInfo(tr); break; case UNKNOWN: default: break; } return super.iNetListenedTransaction(tr); } @Override public boolean iNetListenedError(BaseTransEx ex) { if (0 < requestAccCount.get()) { requestAccCount.decrementAndGet(); } return super.iNetListenedError(ex); } /** * 공원 프로그램 전체개수 요청 * * @since 1.0.0 */ private void requestTotalCount(String parkid) { // 개수 요청은 로딩표시하지 않음. // showLoading(); requestAccCount.incrementAndGet(); ServiceExecutor.getInstance().getParkProgramTotalCount(OpenAPI.PARK_PROGRAM_TOTAL_COUNT_BY_PARKID.name(), listener, OpenAPI.PARK_PROGRAM_TOTAL_COUNT_BY_PARKID, parkid); } /** * 공원프로그램 정보 조회 요청 * * @since 1.0.0 * @param start * @param end * @param parkid */ private void requestProgramInfo(int start, int end, String parkid) { showLoading(); requestAccCount.incrementAndGet(); ServiceExecutor.getInstance().getParkProgramInfo(OpenAPI.PARK_PROGRAM_INFO_BY_PARKID.name(), listener, start, end, OpenAPI.PARK_PROGRAM_INFO_BY_PARKID, parkid); } /** * * @since 1.0.0 * @param tr */ private void handleError(BaseTrans tr) { OpenBase item = (OpenBase) tr; Logger.d1(LOG, "error >> " + item.getErrorInfoType().getCode()); Logger.d1(LOG, " " + item.getErrorInfoType().getTitle(this)); Logger.d1(LOG, " " + item.getErrorInfoType().getMsg(this)); Toast.makeText(context, string(R.string.failed_request), Toast.LENGTH_SHORT).show(); } /** * 공원 프로그램 전체개수 정보 처리 * * @since 1.0.0 * @param tr */ private void handleOpenProgramInfoTotalCount(BaseTrans tr) { OpenParkProgramTotalCount item = (OpenParkProgramTotalCount) tr; if (!item.infos.isEmpty()) { Iterator<TotalCount> it = item.infos.iterator(); if (it.hasNext()) { programTotalCount.set(Integer.parseInt(it.next().TOTALCNT)); Logger.d1(LOG, "handleOpenProgramInfoTotalCount: totalcount = " + programTotalCount.get()); programbadge.setText(String.valueOf(programTotalCount.get())); } } } /** * 공원프로그램 정보 처리 * * @since 1.0.0 * @param tr */ private void handleOpenProgramInfo(BaseTrans tr) { OpenParkProgramInfo item = (OpenParkProgramInfo) tr; if (!item.infos.isEmpty()) { Iterator<ParkProgramInfo> it = item.infos.iterator(); while (it.hasNext()) { Logger.d1(LOG, it.next().toString()); } Intent intent = new Intent(context, ParksProgramActivity.class); Bundle bundle = new Bundle(); bundle.putParcelable(Constants.EXTRA_KEY_PARK_INFO, info); bundle.putParcelableArrayList(Constants.EXTRA_KEY_PARK_PROGRAM_LIST, (ArrayList<? extends Parcelable>) item.infos); intent.putExtras(bundle); startActivity(intent); overridePendingTransition(R.anim.push_up_in, android.R.anim.fade_out); } else { Toast.makeText(context, string(R.string.empty_park_program), Toast.LENGTH_SHORT).show(); } } // /** // * 데이터 초기화 후 갱신 // * // * @since 1.0.0 // */ // private void clearData() // { // refreshData(); // } }