SettingRepository

71 阅读3分钟
package com.alibaba.genie.panel.alarm;

import com.alibaba.genie.panel.basic.AbsApplication;
import com.alibaba.genie.panel.basic.constant.KeyConstant;
import com.alibaba.genie.panel.basic.utils.SpSaveDataUtils;
import com.aliyun.aligeniessp_1_0.Client;
import com.aliyun.aligeniessp_1_0.models.CreateAlarmRequest;
import com.aliyun.aligeniessp_1_0.models.CreateAlarmResponse;
import com.aliyun.aligeniessp_1_0.models.DeleteAlarmsRequest;
import com.aliyun.aligeniessp_1_0.models.DeleteAlarmsResponse;
import com.aliyun.aligeniessp_1_0.models.GetAlarmRequest;
import com.aliyun.aligeniessp_1_0.models.GetAlarmResponse;
import com.aliyun.aligeniessp_1_0.models.ListAlarmsRequest;
import com.aliyun.aligeniessp_1_0.models.ListAlarmsResponse;
import com.aliyun.aligeniessp_1_0.models.ListMusicRequest;
import com.aliyun.aligeniessp_1_0.models.ListMusicResponse;
import com.aliyun.aligeniessp_1_0.models.QueryMusicTypeRequest;
import com.aliyun.aligeniessp_1_0.models.QueryMusicTypeResponse;
import com.aliyun.aligeniessp_1_0.models.UpdateAlarmRequest;
import com.aliyun.aligeniessp_1_0.models.UpdateAlarmResponse;
import com.aliyun.alink.linksdk.tools.ThreadTools;
import com.aliyun.tea.TeaException;
import com.aliyun.tea.TeaModel;
import com.aliyun.teaopenapi.models.Config;
import com.google.gson.Gson;

import java.util.List;

public final class SettingRepository{

    private static final String TAG = "AppRepository";

    private final Gson gson;

    public SettingRepository() {
        gson = new Gson();
    }

    public static String getDeviceId() {
        return SpSaveDataUtils.getInstance().get(AbsApplication.getAppContext(), "persist.api.deviceId");
    }

    public static String getUserId() {
        return SpSaveDataUtils.getInstance().get(AbsApplication.getAppContext(), "persist.api.userId");
    }

    /**
     * 创建请求 Client
     */
    public Client createClient() throws Exception {
        Config config = new Config()
                // AccessKey ID
                .setAccessKeyId(BuildConfig.ACCESS_KEY_ID)
                // AccessKey Secret
                .setAccessKeySecret(BuildConfig.ACCESS_KEY_SECRET);
        // 访问的域名
        config.endpoint = "openapi.aligenie.com";
        // 创建 Client
        return new Client(config);
    }

    public void execute(Runnable runnable) {
        ThreadTools.submitTask(runnable, false);
//        ThreadPoolManager.getInstance().execute(runnable);
    }


    ////////////////////////////////////////////////////////////////////////////////////////////////
    // 闹钟 API
    ////////////////////////////////////////////////////////////////////////////////////////////////

    /**
     * 创建闹钟
     *
     * @param scheduleInfo 调度信息
     * @param musicInfo    铃声信息
     * @param volume       铃声音量
     */
    public void createAlarm(CreateAlarmRequest.CreateAlarmRequestPayloadScheduleInfo scheduleInfo,
                            CreateAlarmRequest.CreateAlarmRequestPayloadMusicInfo musicInfo,
                            int volume,
                            OnResponseListener<CreateAlarmResponse> listener) {
        CreateAlarmRequest request = new CreateAlarmRequest();

        // 服务请求入参
        CreateAlarmRequest.CreateAlarmRequestPayload payload = new CreateAlarmRequest.CreateAlarmRequestPayload();
        payload.setScheduleInfo(scheduleInfo)
                .setMusicInfo(musicInfo)
                .setVolume(volume);

        // 用户标识信息
        CreateAlarmRequest.CreateAlarmRequestUserInfo userInfo = new CreateAlarmRequest.CreateAlarmRequestUserInfo();
        userInfo.setId(getUserId())
                .setIdType(KeyConstant.OPEN_ID)
                .setEncodeType(KeyConstant.PROJECT_ID)
                .setEncodeKey(BuildConfig.PROJECT_ID);

        // 设备标识信息
        CreateAlarmRequest.CreateAlarmRequestDeviceInfo deviceInfo = new CreateAlarmRequest.CreateAlarmRequestDeviceInfo();
        deviceInfo.setId(getDeviceId())
                .setIdType(KeyConstant.OPEN_ID)
                .setEncodeType(KeyConstant.PROJECT_ID)
                .setEncodeKey(BuildConfig.PROJECT_ID);

        request.setPayload(payload)
                .setUserInfo(userInfo)
                .setDeviceInfo(deviceInfo);

        execute(() -> {
            try {
                CreateAlarmResponse response = createClient().createAlarm(request);
                listener.onSuccess(response);
            } catch (Exception e) {
                e.printStackTrace();
                TeaException err = new TeaException(e.getMessage(), e);
                listener.onError(err.code, err.message);
            }
        });
    }

    /**
     * 批量删除闹钟
     *
     * @param ids 删除的闹钟 id 集合
     */
    public void deleteAlarms(List<Long> ids, OnResponseListener<DeleteAlarmsResponse> listener) {
        DeleteAlarmsRequest request = new DeleteAlarmsRequest();

        // 服务请求入参
        DeleteAlarmsRequest.DeleteAlarmsRequestPayload payload = new DeleteAlarmsRequest.DeleteAlarmsRequestPayload();
        payload.setAlarmIds(ids);

        // 用户标识信息
        DeleteAlarmsRequest.DeleteAlarmsRequestUserInfo userInfo = new DeleteAlarmsRequest.DeleteAlarmsRequestUserInfo();
        userInfo.setId(getUserId())
                .setIdType(KeyConstant.OPEN_ID)
                .setEncodeType(KeyConstant.PROJECT_ID)
                .setEncodeKey(BuildConfig.PROJECT_ID);

        // 设备标识信息
        DeleteAlarmsRequest.DeleteAlarmsRequestDeviceInfo deviceInfo = new DeleteAlarmsRequest.DeleteAlarmsRequestDeviceInfo();
        deviceInfo.setId(getDeviceId())
                .setIdType(KeyConstant.OPEN_ID)
                .setEncodeType(KeyConstant.PROJECT_ID)
                .setEncodeKey(BuildConfig.PROJECT_ID);

        request.setPayload(payload)
                .setUserInfo(userInfo)
                .setDeviceInfo(deviceInfo);

        execute(() -> {
            try {
                DeleteAlarmsResponse response = createClient().deleteAlarms(request);
                listener.onSuccess(response);
            } catch (Exception e) {
                e.printStackTrace();
                TeaException err = new TeaException(e.getMessage(), e);
                listener.onError(err.code, err.message);
            }
        });
    }

    /**
     * 更新闹钟
     *
     * @param id           闹钟 id
     * @param volume       铃声音量
     * @param scheduleInfo 调度信息
     * @param musicInfo    铃声信息
     */
    public void updateAlarm(Long id,
                            UpdateAlarmRequest.UpdateAlarmRequestPayloadScheduleInfo scheduleInfo,
                            UpdateAlarmRequest.UpdateAlarmRequestPayloadMusicInfo musicInfo,
                            int volume,
                            OnResponseListener<UpdateAlarmResponse> listener) {
        UpdateAlarmRequest request = new UpdateAlarmRequest();

        // 服务请求入参
        UpdateAlarmRequest.UpdateAlarmRequestPayload payload = new UpdateAlarmRequest.UpdateAlarmRequestPayload();
        payload.setAlarmId(id)
                .setVolume(volume)
                .setScheduleInfo(scheduleInfo)
                .setMusicInfo(musicInfo);

        // 用户标识信息
        UpdateAlarmRequest.UpdateAlarmRequestUserInfo userInfo = new UpdateAlarmRequest.UpdateAlarmRequestUserInfo();
        userInfo.setId(getUserId())
                .setIdType(KeyConstant.OPEN_ID)
                .setEncodeType(KeyConstant.PROJECT_ID)
                .setEncodeKey(BuildConfig.PROJECT_ID);

        // 设备标识信息
        UpdateAlarmRequest.UpdateAlarmRequestDeviceInfo deviceInfo = new UpdateAlarmRequest.UpdateAlarmRequestDeviceInfo();
        deviceInfo.setId(getDeviceId())
                .setIdType(KeyConstant.OPEN_ID)
                .setEncodeType(KeyConstant.PROJECT_ID)
                .setEncodeKey(BuildConfig.PROJECT_ID);

        request.setPayload(payload)
                .setUserInfo(userInfo)
                .setDeviceInfo(deviceInfo);

        execute(() -> {
            try {
                UpdateAlarmResponse response = createClient().updateAlarm(request);
                listener.onSuccess(response);
            } catch (Exception e) {
                e.printStackTrace();
                TeaException err = new TeaException(e.getMessage(), e);
                listener.onError(err.code, err.message);
            }
        });
    }

    /**
     * 获取单个闹钟详情
     *
     * @param id 闹钟 id
     */
    public void getAlarm(Long id, OnResponseListener<GetAlarmResponse> listener) {
        GetAlarmRequest request = new GetAlarmRequest();

        // 服务请求入参
        GetAlarmRequest.GetAlarmRequestPayload payload = new GetAlarmRequest.GetAlarmRequestPayload();
        payload.setAlarmId(id);

        // 用户标识信息
        GetAlarmRequest.GetAlarmRequestUserInfo userInfo = new GetAlarmRequest.GetAlarmRequestUserInfo();
        userInfo.setId(getUserId())
                .setIdType(KeyConstant.OPEN_ID)
                .setEncodeType(KeyConstant.PROJECT_ID)
                .setEncodeKey(BuildConfig.PROJECT_ID);

        // 设备标识信息
        GetAlarmRequest.GetAlarmRequestDeviceInfo deviceInfo = new GetAlarmRequest.GetAlarmRequestDeviceInfo();
        deviceInfo.setId(getDeviceId())
                .setIdType(KeyConstant.OPEN_ID)
                .setEncodeType(KeyConstant.PROJECT_ID)
                .setEncodeKey(BuildConfig.PROJECT_ID);

        request.setPayload(payload)
                .setUserInfo(userInfo)
                .setDeviceInfo(deviceInfo);

        execute(() -> {
            try {
                GetAlarmResponse response = createClient().getAlarm(request);
                listener.onSuccess(response);
            } catch (Exception e) {
                e.printStackTrace();
                TeaException err = new TeaException(e.getMessage(), e);
                listener.onError(err.code, err.message);
            }
        });
    }

    /**
     * 查询闹钟列表
     *
     * @param currentPage 当前页
     * @param pageSize    每页条数,最大 100
     */
    public void getListAlarms(final int currentPage,
                              final int pageSize,
                              final OnResponseListener<ListAlarmsResponse> listener) {
        ListAlarmsRequest request = new ListAlarmsRequest();

        // 服务请求入参
        ListAlarmsRequest.ListAlarmsRequestPayload payload = new ListAlarmsRequest.ListAlarmsRequestPayload();
        payload.setCurrentPage(currentPage)
                .setPageSize(pageSize);

        // 用户标识信息
        ListAlarmsRequest.ListAlarmsRequestUserInfo userInfo = new ListAlarmsRequest.ListAlarmsRequestUserInfo();
        userInfo.setId(getUserId())
                .setIdType(KeyConstant.OPEN_ID)
                .setEncodeType(KeyConstant.PROJECT_ID)
                .setEncodeKey(BuildConfig.PROJECT_ID);

        // 设备标识信息
        ListAlarmsRequest.ListAlarmsRequestDeviceInfo deviceInfo = new ListAlarmsRequest.ListAlarmsRequestDeviceInfo();
        deviceInfo.setId(getDeviceId())
                .setIdType(KeyConstant.OPEN_ID)
                .setEncodeType(KeyConstant.PROJECT_ID)
                .setEncodeKey(BuildConfig.PROJECT_ID);

        request.setPayload(payload)
                .setUserInfo(userInfo)
                .setDeviceInfo(deviceInfo);

        execute(() -> {
            try {
                ListAlarmsResponse response = createClient().listAlarms(request);
                listener.onSuccess(response);
            } catch (Exception e) {
                e.printStackTrace();
                TeaException err = new TeaException(e.getMessage(), e);
                listener.onError(err.code, err.message);
            }
        });
    }

    /**
     * 查询闹钟铃声分页列表
     *
     * @param musicType     铃声类别 id 通过 {@link #queryMusicType(OnResponseListener)} 获取
     * @param musicTypeName 铃声类别名称 获取方式同上
     * @param currentPage   当前页
     * @param pageSize      每页条数 最大值100
     */
    public void getMusicList(Long musicType,
                             String musicTypeName,
                             int currentPage,
                             int pageSize,
                             OnResponseListener<ListMusicResponse> listener) {
        ListMusicRequest request = new ListMusicRequest();

        // 服务请求入参
        ListMusicRequest.ListMusicRequestPayload payload = new ListMusicRequest.ListMusicRequestPayload();
        payload.setMusicType(musicType)
                .setMusicTypeName(musicTypeName)
                .setCurrentPage(currentPage)
                .setPageSize(pageSize);

        // 用户标识信息
        ListMusicRequest.ListMusicRequestUserInfo userInfo = new ListMusicRequest.ListMusicRequestUserInfo();
        userInfo.setId(getUserId())
                .setIdType(KeyConstant.OPEN_ID)
                .setEncodeType(KeyConstant.PROJECT_ID)
                .setEncodeKey(BuildConfig.PROJECT_ID);

        // 设备标识信息
        ListMusicRequest.ListMusicRequestDeviceInfo deviceInfo = new ListMusicRequest.ListMusicRequestDeviceInfo();
        deviceInfo.setId(getDeviceId())
                .setIdType(KeyConstant.OPEN_ID)
                .setEncodeType(KeyConstant.PROJECT_ID)
                .setEncodeKey(BuildConfig.PROJECT_ID);

        request.setPayload(payload)
                .setUserInfo(userInfo)
                .setDeviceInfo(deviceInfo);

        execute(() -> {
            try {
                ListMusicResponse response = createClient().listMusic(request);
                listener.onSuccess(response);
            } catch (Exception e) {
                e.printStackTrace();
                TeaException err = new TeaException(e.getMessage(), e);
                listener.onError(err.code, err.message);
            }
        });
    }

    /**
     * 获取闹钟音乐类型列表
     */
    public void queryMusicType(OnResponseListener<QueryMusicTypeResponse> listener) {
        QueryMusicTypeRequest request = new QueryMusicTypeRequest();

        // 用户标识信息
        QueryMusicTypeRequest.QueryMusicTypeRequestUserInfo userInfo = new QueryMusicTypeRequest.QueryMusicTypeRequestUserInfo();
        userInfo.setId(getUserId())
                .setIdType(KeyConstant.OPEN_ID)
                .setEncodeType(KeyConstant.PROJECT_ID)
                .setEncodeKey(BuildConfig.PROJECT_ID);

        // 设备标识信息
        QueryMusicTypeRequest.QueryMusicTypeRequestDeviceInfo deviceInfo = new QueryMusicTypeRequest.QueryMusicTypeRequestDeviceInfo();
        deviceInfo.setId(getDeviceId())
                .setIdType(KeyConstant.OPEN_ID)
                .setEncodeType(KeyConstant.PROJECT_ID)
                .setEncodeKey(BuildConfig.PROJECT_ID);

        request.setUserInfo(userInfo)
                .setDeviceInfo(deviceInfo);

        execute(() -> {
            try {
                QueryMusicTypeResponse response = createClient().queryMusicType(request);
                listener.onSuccess(response);
            } catch (Exception e) {
                e.printStackTrace();
                TeaException err = new TeaException(e.getMessage(), e);
                listener.onError(err.code, err.message);
            }
        });
    }

    /**
     * 请求响应监听
     */
    public interface OnResponseListener<T extends TeaModel> {
        /**
         * 成功
         *
         * @param response 返回的信息
         */
        void onSuccess(T response);

        /**
         * 失败
         *
         * @param code    错误码
         * @param message 错误信息
         */
        void onError(String code, String message);
    }
}