MainModelImpl.java 5.06 KB
/*
 * Copyright (c) 2016 wugian
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.xgimi.gimicinema.model;

import android.content.Context;
import android.graphics.Bitmap;
import android.os.Handler;
import android.text.TextUtils;
import com.gimi.common.cinema.db.NewDBManager;
import com.gimi.common.cinema.model.CinemaConfig;
import com.gimi.common.cinema.model.ClassificationItem;
import com.gimi.common.cinema.model.LocalMovieMessage;
import com.gimi.common.cinema.model.SambaMsg;
import com.gimi.common.cinema.model.UserInfo;
import com.gimi.common.cinema.utils.Des3;
import com.gimi.common.cinema.utils.NetStatusUtils;
import com.gimi.common.cinema.utils.QRCodeUtils;
import com.gimi.common.cinema.utils.Utils;
import com.google.gson.Gson;
import com.xgimi.gimicinema.R;

import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by wugian on 2016/9/23
 */
public class MainModelImpl implements IMainModel {

    private NewDBManager dbManager;
    private Handler handler = new Handler();

    @Override
    public void loadCtrlImg(Context context, OnGetCtrlListener listener) {
        SambaMsg sambaMsg = Utils.getSambaMsg(context);
        UserInfo userInfo = new UserInfo();
        userInfo.setServerIp(sambaMsg.getIp());
        userInfo.setIpAddr(sambaMsg.getIp());
        userInfo.setUserName(sambaMsg.getUsr());
        userInfo.setPwd(sambaMsg.getPwd());
        userInfo.setShareFolder(sambaMsg.getFolder());
        String ipAddr;
        try {
            ipAddr = NetStatusUtils.getIp();
            if (!TextUtils.isEmpty(ipAddr)) {
                userInfo.setIpAddr(ipAddr);
            } else {
                userInfo.setIpAddr("get ip failure");
            }
            String msg = new Gson().toJson(userInfo);
            //sub thread ?
            String decrypt = Des3.encode(msg);
            Bitmap control = QRCodeUtils.create2DCode(decrypt);
            listener.onGetControlImageSuccess(control);
        } catch (SocketException e) {
            e.printStackTrace();
            listener.onGetControlImageFailure(e);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Override
    public void loadRecommend(Context ctx, final OnMainRecommendListener listener) {
        if (dbManager == null) {
            dbManager = NewDBManager.getInstance();
        }
        ThreadUtils.subThread(new ThreadUtils.DoSomeThing() {
            @Override
            public void doSomeThing() {
                final List<LocalMovieMessage> list;
                list = dbManager.queryRecommend();
                if (list.size() > 0) {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            listener.onMainSuccess(list);
                        }
                    });
                } else {
                    listener.onMainFailure();
                }
            }
        });
    }

    @Override
    public void loadClassification(Context ctx, OnClassificationListener l) {
        List<ClassificationItem> list = new ArrayList<>();
        CinemaConfig cfg = Utils.readLocalConfig(ctx);
        String[] ca = ctx.getResources().getStringArray(R.array.classification);
        int[] color = ctx.getResources().getIntArray(R.array.color_array);
        int current = 0;
        int size = color.length;
        for (String aCa : ca) {
            ClassificationItem classificationItem = new ClassificationItem();
            classificationItem.setName(aCa);
            classificationItem.setColor(color[current % size]);
            current += 1;
            list.add(classificationItem);
        }
        if (cfg.getClassArray() != null && cfg.getClassArray().length > 0) {
            for (String s : cfg.getClassArray()) {
                ClassificationItem item = new ClassificationItem();
                item.setName(s);
                item.setColor(color[current % size]);
                current += 1;
                list.add(item);
            }
        }
        if (list.size() != 0) {
            l.onClazzSuccess(list);
        } else {
            l.onClazzFailure();
        }
    }

    public interface OnGetCtrlListener {
        void onGetControlImageSuccess(Bitmap bitmap);

        void onGetControlImageFailure(Exception e);
    }

    public interface OnMainRecommendListener {
        void onMainSuccess(List<LocalMovieMessage> list);

        void onMainFailure();
    }

    public interface OnClassificationListener {
        void onClazzSuccess(List<ClassificationItem> list);

        void onClazzFailure();
    }
}