Notice


Notice는 2.6.4 버전 이상 부터 제공되며 해당 라이브러리를 추가하여 사용해야 된다.

Notice 은 HSP 에서 확장 라이브러리로 제공하는 API 로 aar 라이브러리 파일과 build.gradle 파일을 수정하여 사용할 수 있다. 

라이브러리 추가 방법은 Android 개발 가이드의 내용을 참조하면 된다.

Notice 은 Operation 에 등록하는 공지사항 정보를 단말에 표현하는 기능을 가진다. 공지사항은 텍스트, 이미지 형태를 가지고 있고 외부 링크를 추가할 수도 있다. 


사용 설정

INetworkDelegate

3.3.6 버전 이상 부터는 INetworkDelegate 를 HoneMobileActivity 에서 설정하기 때문에 사용자가 해당 내용을 구현하지 않아도 된다. 

Notice 는 Operations Center 에 Notice 관련 데이터를 요청/응답 받아야 하는데 Notice 자체는 Operations Center와 통신하기 위한 코드가 별도로 존재하지 않기 때문에 NetworkDelegate 가 필요 하다.
NetworkDelegate 는 보통 MainActivity 내에 구현되어야 하며 그에 대한 예제는 아래와 같다. 

DAPNotice.setNetworkDelegate(new INetworkDelegate() {
   @Override
   public void request(@NonNull Map<String, Object> context, @NonNull Map<String, Object> message, @NonNull OnResultListener<Object> listener) {
       boolean isAsync = MapUtils.isAsync(context);
        Map<String, Object> paramsMap = MapUtils.newNetworkParams(context, message);

        OnResultListener<MessageContainer> resListener = (result, msgContainer) -> {
           switch (result) {
               case OnResultListener.TRUE:
                    listener.onResult(result, msgContainer.getMessage().getPayload());
                   break;
               default:
                    listener.onResult(result, msgContainer);
                   break;
           }
       };

       if (isAsync) {
           if (context.get(Constants.KEY_SERVICE_NAME).equals(Constants.SERVICE_ID_REQUEST_NOTICE)) {
                DAPNetwork.asyncDoRequest(activity, paramsMap, resListener,
                       new TypeReference<HoneMobileMessage<NoticeResponse>>(){});
           } else {
                DAPNetwork.asyncDoRequest(activity, paramsMap, resListener);
           }
       } else {
            DAPNetwork.doRequest(activity, paramsMap, resListener);
       }
   }

   @Override
   public void download(@NonNull Map<String, Object> context, @NonNull OnResultListener<Object> listener) {

   }
});

IConfigDelegate

Notice 를 이용하기 위해서는 서버에서 전달하는 이미지 파일을 저장할 경로를 지정해야 하며, 이를 위해 IConfigDelegate 를 구현해야 한다.
MainActivity 에 IConfigDelegate 를 implements 한 뒤 getConfig 를 Override 하고 DAPNotice.NOTICE_DOWNLOAD_DIR 에 해당하는 값을 반환 하면 된다. 

Example

public class MainActivity extends HoneMobileActivity implements IConfigDelegate {
   // ...
   
   @Override
   public String getConfig(@NonNull String key) {
       switch (key) {
           case DAPNotice.NOTICE_DOWNLOAD_DIR:
               return HoneMobile.get().resource().downloadPath();
       }

       return null;
   }
   
   // ...
}

show

show 는 Operation 서버에서 Notice 데이터를 읽은 후 이를 파싱하여 화면에 출력한다. 

Example

ActionBase.setOnActionFlowEnd { DAPNotice.show(activity) }
ActionBase.setOnActionFlowEnd(() -> DAPNotice.show(activity));

get

get 은 Operation 서버에서 전달 하는 JSON 객체를 반환 하며 반환되는 정보는 아래와 같다.

JSON Format

{
   "header": {},
   "payload": {
       "noticeInfos": [{
           "id": 104,
           "launcherAppId": null,
           "title": "이미지테스트입니다.",
           "type": "image",
           "priority": "high",
           "url": "www.daum.net",
           "imagePath": "https://hone.hanwha.co.kr/smartop_2_6_3_1/download?type=noticeImage&imageName=1477877977777_null",
           "content": null,
           "startDate": 1477580400000,
           "endDate": 1478030400000
        }, {
           "id": 103,
           "launcherAppId": null,
           "title": "텍스트 테스트입니다.",
           "type": "text",
           "priority": "normal",
           "url": "www.naver.com",
           "imagePath": null,
           "content": "텍스트 공지 테스트입니다.",
           "startDate": 1477580400000,
           "endDate": 1478012400000
        }]
    }
}

이를 이용하여 사용자는 자신이 원하는 형태의 Notice 를 생성할 수 있다. 

Example

// 3.10.18 이상
ActionBase.setOnActionFlowEnd {
    DAPNotice.get(activity, {
       // TODO
   }) {
       // TODO
   }
}

// 3.10.18 이하
ActionBase.setOnActionFlowEnd {
    DAPNotice.get { result, value ->
        when (result) {
            OnResultListener.TRUE -> {
               // TODO
           }
           else -> {
               // TODO
           }
       }
   }
}
// 3.10.18 이상
ActionBase.setOnActionFlowEnd(() -> {
    DAPNotice.get(activity, result -> {
       // TODO
   }, e -> {
       // TODO
   });
});

// 3.10.18 이하
ActionBase.setOnActionFlowEnd(() -> {
    DAPNotice.get((result, value) -> {
       // TODO
   });
});